ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU21hY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9TbWFjay50eHQKaW5kZXggOTg5YzJmYy4uNjI5YzkyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TbWFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9TbWFjay50eHQKQEAgLTE4NCwxNCArMTg0LDE2IEBACiBvdGhlciB0aGFuIGEgbGV0dGVyIG9yIGRpZ2l0LCBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgU21hY2sgZGV2ZWxvcG1lbnQKIHRlYW0uIFNtYWNrIGxhYmVscyBhcmUgdW5zdHJ1Y3R1cmVkLCBjYXNlIHNlbnNpdGl2ZSwgYW5kIHRoZSBvbmx5IG9wZXJhdGlvbgogZXZlciBwZXJmb3JtZWQgb24gdGhlbSBpcyBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4gU21hY2sgbGFiZWxzIGNhbm5vdAotY29udGFpbiB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIG9yIHRoZSAiLyIgKHNsYXNoKSBjaGFyYWN0ZXIuCitjb250YWluIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgb3IgdGhlICIvIiAoc2xhc2gpIGNoYXJhY3Rlci4gU21hY2sgbGFiZWxzCitjYW5ub3QgYmVnaW4gd2l0aCBhICctJywgd2hpY2ggaXMgcmVzZXJ2ZWQgZm9yIHNwZWNpYWwgb3B0aW9ucy4KIAogVGhlcmUgYXJlIHNvbWUgcHJlZGVmaW5lZCBsYWJlbHM6CiAKLQlfIFByb25vdW5jZWQgImZsb29yIiwgYSBzaW5nbGUgdW5kZXJzY29yZSBjaGFyYWN0ZXIuCi0JXiBQcm9ub3VuY2VkICJoYXQiLCBhIHNpbmdsZSBjaXJjdW1mbGV4IGNoYXJhY3Rlci4KLQkqIFByb25vdW5jZWQgInN0YXIiLCBhIHNpbmdsZSBhc3RlcmlzayBjaGFyYWN0ZXIuCi0JPyBQcm9ub3VuY2VkICJodWgiLCBhIHNpbmdsZSBxdWVzdGlvbiBtYXJrIGNoYXJhY3Rlci4KKwlfIAlQcm9ub3VuY2VkICJmbG9vciIsIGEgc2luZ2xlIHVuZGVyc2NvcmUgY2hhcmFjdGVyLgorCV4gCVByb25vdW5jZWQgImhhdCIsIGEgc2luZ2xlIGNpcmN1bWZsZXggY2hhcmFjdGVyLgorCSogCVByb25vdW5jZWQgInN0YXIiLCBhIHNpbmdsZSBhc3RlcmlzayBjaGFyYWN0ZXIuCisJPyAJUHJvbm91bmNlZCAiaHVoIiwgYSBzaW5nbGUgcXVlc3Rpb24gbWFyayBjaGFyYWN0ZXIuCisJQCAJUHJvbm91bmNlZCAiSW50ZXJuZXQiLCBhIHNpbmdsZSBhdCBzaWduIGNoYXJhY3Rlci4KIAogRXZlcnkgdGFzayBvbiBhIFNtYWNrIHN5c3RlbSBpcyBhc3NpZ25lZCBhIGxhYmVsLiBTeXN0ZW0gdGFza3MsIHN1Y2ggYXMKIGluaXQoOCkgYW5kIHN5c3RlbXMgZGFlbW9ucywgYXJlIHJ1biB3aXRoIHRoZSBmbG9vciAoIl8iKSBsYWJlbC4gVXNlciB0YXNrcwpAQCAtNDEyLDYgKzQxNCwzNiBAQAogCUEgcHJpdmlsZWdlZCBwcm9ncmFtIG1heSBzZXQgdGhpcyB0byBtYXRjaCB0aGUgbGFiZWwgb2YgYW5vdGhlcgogCXRhc2sgd2l0aCB3aGljaCBpdCBob3BlcyB0byBjb21tdW5pY2F0ZS4KIAorU21hY2sgTmV0bGFiZWwgRXhjZXB0aW9ucworCitZb3Ugd2lsbCBvZnRlbiBmaW5kIHRoYXQgeW91ciBsYWJlbGVkIGFwcGxpY2F0aW9uIGhhcyB0byB0YWxrIHRvIHRoZSBvdXRzaWRlLAordW5sYWJlbGVkIHdvcmxkLiBUbyBkbyB0aGlzIHRoZXJlJ3MgYSBzcGVjaWFsIGZpbGUgL3NtYWNrL25ldGxhYmVsIHdoZXJlIHlvdSBjYW4KK2FkZCBzb21lIGV4Y2VwdGlvbnMgaW4gdGhlIGZvcm0gb2YgOgorQElQMQkgICBMQUJFTDEgb3IKK0BJUDIvTUFTSyAgTEFCRUwyCisKK0l0IG1lYW5zIHRoYXQgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGhhdmUgdW5sYWJlbGVkIGFjY2VzcyB0byBASVAxIGlmIGl0IGhhcword3JpdGUgYWNjZXNzIG9uIExBQkVMMSwgYW5kIGFjY2VzcyB0byB0aGUgc3VibmV0IEBJUDIvTUFTSyBpZiBpdCBoYXMgd3JpdGUKK2FjY2VzcyBvbiBMQUJFTDIuCisKK0VudHJpZXMgaW4gdGhlIC9zbWFjay9uZXRsYWJlbCBmaWxlIGFyZSBtYXRjaGVkIGJ5IGxvbmdlc3QgbWFzayBmaXJzdCwgbGlrZSBpbgorY2xhc3NsZXNzIElQdjQgcm91dGluZy4KKworQSBzcGVjaWFsIGxhYmVsICdAJyBhbmQgYW4gb3B0aW9uICctQ0lQU08nIGNhbiBiZSB1c2VkIHRoZXJlIDoKK0AgICAgICBtZWFucyBJbnRlcm5ldCwgYW55IGFwcGxpY2F0aW9uIHdpdGggYW55IGxhYmVsIGhhcyBhY2Nlc3MgdG8gaXQKKy1DSVBTTyBtZWFucyBzdGFuZGFyZCBDSVBTTyBuZXR3b3JraW5nCisKK0lmIHlvdSBkb24ndCBrbm93IHdoYXQgQ0lQU08gaXMgYW5kIGRvbid0IHBsYW4gdG8gdXNlIGl0LCB5b3UgY2FuIGp1c3QgZG8gOgorZWNobyAxMjcuMC4wLjEgLUNJUFNPID4gL3NtYWNrL25ldGxhYmVsCitlY2hvIDAuMC4wLjAvMCBAICAgICAgPiAvc21hY2svbmV0bGFiZWwKKworSWYgeW91IHVzZSBDSVBTTyBvbiB5b3VyIDE5Mi4xNjguMC4wLzE2IGxvY2FsIG5ldHdvcmsgYW5kIG5lZWQgYWxzbyB1bmxhYmVsZWQKK0ludGVybmV0IGFjY2VzcywgeW91IGNhbiBoYXZlIDoKK2VjaG8gMTI3LjAuMC4xICAgICAgLUNJUFNPID4gL3NtYWNrL25ldGxhYmVsCitlY2hvIDE5Mi4xNjguMC4wLzE2IC1DSVBTTyA+IC9zbWFjay9uZXRsYWJlbAorZWNobyAwLjAuMC4wLzAgICAgICBAICAgICAgPiAvc21hY2svbmV0bGFiZWwKKworCiBXcml0aW5nIEFwcGxpY2F0aW9ucyBmb3IgU21hY2sKIAogVGhlcmUgYXJlIHRocmVlIHNvcnRzIG9mIGFwcGxpY2F0aW9ucyB0aGF0IHdpbGwgcnVuIG9uIGEgU21hY2sgc3lzdGVtLiBIb3cgYW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dAppbmRleCAwZGFiNmUzLi5hMzBmZTUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CkBAIC00MCwxMyArNDAsMTMgQEAKIE1hY2hpbmUgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tCiAKLSAgVGhlIG1hY2hpbmUgc3BlY2lmaWMgZnVuY3Rpb25zIG11c3QgY2FsbCB0aGUgczNjMjQxMF9wbV9pbml0KCkgZnVuY3Rpb24KKyAgVGhlIG1hY2hpbmUgc3BlY2lmaWMgZnVuY3Rpb25zIG11c3QgY2FsbCB0aGUgczNjX3BtX2luaXQoKSBmdW5jdGlvbgogICB0byBzYXkgdGhhdCBpdHMgYm9vdGxvYWRlciBpcyBjYXBhYmxlIG9mIHJlc3VtaW5nLiBUaGlzIGNhbiBiZSBhcwogICBzaW1wbGUgYXMgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIG1hY2hpbmUncyBkZWZpbml0aW9uOgogCi0gIElOSVRNQUNISU5FKHMzYzI0MTBfcG1faW5pdCkKKyAgSU5JVE1BQ0hJTkUoczNjX3BtX2luaXQpCiAKLSAgQSBib2FyZCBjYW4gZG8gaXRzIG93biBzZXR1cCBiZWZvcmUgY2FsbGluZyBzM2MyNDEwX3BtX2luaXQsIGlmIGl0CisgIEEgYm9hcmQgY2FuIGRvIGl0cyBvd24gc2V0dXAgYmVmb3JlIGNhbGxpbmcgczNjX3BtX2luaXQsIGlmIGl0CiAgIG5lZWRzIHRvIHNldHVwIGFueXRoaW5nIGVsc2UgZm9yIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4KIAogICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3Igb3Zlci1yaWRpbmcgdGhlIGRlZmF1bHQgbWV0aG9kIG9mCkBAIC03NCw3ICs3NCw3IEBACiAKIAllbmFibGVfaXJxX3dha2UoSVJRX0VJTlQwKTsKIAotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKaW5kZXggZGM2MDQ1NS4uNDNjYjEwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CkBAIC0yOSw3ICsyOSwxNCBAQAogCQkJCUNQVSBzdXBwb3J0cyB2ZWN0b3IgcmVsb2NhdGlvbiAoY29udHJvbAogCQkJCXJlZ2lzdGVyIFYgYml0LikKIAotZmZjMDAwMDAJZmZmZWZmZmYJRE1BIG1lbW9yeSBtYXBwaW5nIHJlZ2lvbi4gIE1lbW9yeSByZXR1cm5lZAorZmZmZTAwMDAJZmZmZWZmZmYJWFNjYWxlIGNhY2hlIGZsdXNoIGFyZWEuICBUaGlzIGlzIHVzZWQKKwkJCQlpbiBwcm9jLXhzY2FsZS5TIHRvIGZsdXNoIHRoZSB3aG9sZSBkYXRhCisJCQkJY2FjaGUuICBGcmVlIGZvciBvdGhlciB1c2FnZSBvbiBub24tWFNjYWxlLgorCitmZmYwMDAwMAlmZmZkZmZmZglGaXhtYXAgbWFwcGluZyByZWdpb24uICBBZGRyZXNzZXMgcHJvdmlkZWQKKwkJCQlieSBmaXhfdG9fdmlydCgpIHdpbGwgYmUgbG9jYXRlZCBoZXJlLgorCitmZmMwMDAwMAlmZmVmZmZmZglETUEgbWVtb3J5IG1hcHBpbmcgcmVnaW9uLiAgTWVtb3J5IHJldHVybmVkCiAJCQkJYnkgdGhlIGRtYV9hbGxvY194eHggZnVuY3Rpb25zIHdpbGwgYmUKIAkJCQlkeW5hbWljYWxseSBtYXBwZWQgaGVyZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggZjJlOTA4ZC4uMmYyMWVjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNSw3ICsyNSw3IEBACiAJCSJ0ZGExMDA0NmxpZmV2aWV3IiwgImF2NzExMCIsICJkZWMyMDAwdCIsICJkZWMyNTQwdCIsCiAJCSJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIiwgImJsdWViaXJkIiwKLQkJIm9wZXJhMSIpOworCQkib3BlcmExIiwgImN4MjMxeHgiLCAiY3gxOCIsICJjeDIzODg1IiwgInB2cnVzYjIiICk7CiAKICMgQ2hlY2sgYXJncwogc3ludGF4KCkgaWYgKHNjYWxhcihAQVJHVikgIT0gMSk7CkBAIC0zNyw4ICszNyw4IEBACiAJJG91dGZpbGUgPSBldmFsKCRjaWQpOwogCWRpZSAkQCBpZiAkQDsKIAlwcmludCBTVERFUlIgPDxFT0Y7Ci1GaXJtd2FyZSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgotTm93IGNvcHkgaXQgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQorRmlybXdhcmUocykgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4KK05vdyBjb3B5IGl0KHRoZXkpIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KIEVPRgogCWV4aXQoMCk7CkBAIC0zNDUsNiArMzQ1LDg1IEBACiAgICAgJGZ3ZmlsZTsKIH0KIAorc3ViIGN4MjMxeHggeworICAgIG15ICRmd2ZpbGUgPSAidjRsLWN4MjMxeHgtYXZjb3JlLTAxLmZ3IjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJGZ3ZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiN2QzYmI5NTZkYzlkZjBlYWZkZWQyYjU2YmE1N2NjNDIiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJGZ3ZmlsZSwgJHVybCk7CisgICAgdmVyaWZ5KCRmd2ZpbGUsICRoYXNoKTsKKworICAgICRmd2ZpbGU7Cit9CisKK3N1YiBjeDE4IHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjM0MTgtYXB1LmZ3JyA9PiAnNTg4ZjA4MWI1NjJmNWM2NTNhM2RiMWFkOGY2NTkzOWEnLAorCSd2NGwtY3gyMzQxOC1jcHUuZncnID0+ICdiNmM3ZWQ2NGJjNDRiMWE2ZTA4NDBhZGFlYWMzOWQ3OScsCisJJ3Y0bC1jeDIzNDE4LWRpZy5mdycgPT4gJzk1YmM2ODhkM2U3NTk5ZmQ1ODAwMTYxZTk5NzFjYzU1JywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKK3N1YiBjeDIzODg1IHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjM4ODUtYXZjb3JlLTAxLmZ3JyA9PiAnYTlmOGY1ZDkwMWE3ZmI0MmY1NTJlMWVlNjM4NGYzYmInLAorCSd2NGwtY3gyMzg4NS1lbmMuZncnICAgICAgID0+ICdhOWY4ZjVkOTAxYTdmYjQyZjU1MmUxZWU2Mzg0ZjNiYicsCisgICAgKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIG15ICRhbGxmaWxlczsKKyAgICBmb3JlYWNoIG15ICRmd2ZpbGUgKGtleXMgJWZpbGVzKSB7CisJd2dldGZpbGUoJGZ3ZmlsZSwgIiR1cmwvJGZ3ZmlsZSIpOworCXZlcmlmeSgkZndmaWxlLCAkZmlsZXN7JGZ3ZmlsZX0pOworCSRhbGxmaWxlcyAuPSAiICRmd2ZpbGUiOworICAgIH0KKworICAgICRhbGxmaWxlcyA9fiBzL15ccy8vOworCisgICAgJGFsbGZpbGVzOworfQorCitzdWIgcHZydXNiMiB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyI7CisKKyAgICBteSAlZmlsZXMgPSAoCisJJ3Y0bC1jeDI1ODQwLmZ3JyAgICAgICAgICAgPT4gJ2RhZGI3OWU5OTA0ZmM4YWY5NmU4MTExZDljYjU5MzIwJywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKIHN1YiBvcjUxMTMyX3FhbSB7CiAgICAgbXkgJGZ3ZmlsZSA9ICJkdmItZmUtb3I1MTEzMi1xYW0uZnciOwogICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAwMmVhMzc3Li41ZTAyYjgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02NCwxMCArNjQsMTAgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVZpZGVvNExpbnV4IEFQSSAxIGlvY3RscyBhbmQgdmlkZW9fZGVjb2Rlci5oIGZyb20gVmlkZW8gZGV2aWNlcy4KLVdoZW46CURlY2VtYmVyIDIwMDgKLUZpbGVzOglpbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaCBpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKLUNoZWNrOglpbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaCBpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKK1doYXQ6CVZpZGVvNExpbnV4IEFQSSAxIGlvY3RscyBhbmQgZnJvbSBWaWRlbyBkZXZpY2VzLgorV2hlbjoJSnVseSAyMDA5CitGaWxlczoJaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCitDaGVjazoJaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCiBXaHk6CVY0TDEgQVAxIHdhcyByZXBsYWNlZCBieSBWNEwyIEFQSSBkdXJpbmcgbWlncmF0aW9uIGZyb20gMi40IHRvIDIuNgogCXNlcmllcy4gVGhlIG9sZCBBUEkgaGF2ZSBsb3RzIG9mIGRyYXdiYWNrcyBhbmQgZG9uJ3QgcHJvdmlkZSBlbm91Z2gKIAltZWFucyB0byB3b3JrIHdpdGggYWxsIHZpZGVvIGFuZCBhdWRpbyBzdGFuZGFyZHMuIFRoZSBuZXdlciBBUEkgaXMKQEAgLTM0MCw3ICszNDAsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWkyY19hdHRhY2hfY2xpZW50KCksIGkyY19kZXRhY2hfY2xpZW50KCksIGkyY19kcml2ZXItPmRldGFjaF9jbGllbnQoKQotV2hlbjoJMi42LjI5IChpZGVhbGx5KSBvciAyLjYuMzAgKG1vcmUgbGlrZWx5KQorV2hlbjoJMi42LjMwCitDaGVjazoJaTJjX2F0dGFjaF9jbGllbnQgaTJjX2RldGFjaF9jbGllbnQKIFdoeToJRGVwcmVjYXRlZCBieSB0aGUgbmV3IChzdGFuZGFyZCkgZGV2aWNlIGRyaXZlciBiaW5kaW5nIG1vZGVsLiBVc2UKIAlpMmNfZHJpdmVyLT5wcm9iZSgpIGFuZCAtPnJlbW92ZSgpIGluc3RlYWQuCiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgpAQCAtMzU1LDE3ICszNTYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJU0VMaW51eCAiY29tcGF0X25ldCIgZnVuY3Rpb25hbGl0eQotV2hlbjoJMi42LjMwIGF0IHRoZSBlYXJsaWVzdAotV2h5OglJbiAyLjYuMTggdGhlIFNlY21hcmsgY29uY2VwdCB3YXMgaW50cm9kdWNlZCB0byByZXBsYWNlIHRoZSAiY29tcGF0X25ldCIKLQluZXR3b3JrIGFjY2VzcyBjb250cm9sIGZ1bmN0aW9uYWxpdHkgb2YgU0VMaW51eC4gIFNlY21hcmsgb2ZmZXJzIGJvdGgKLQliZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIGdyZWF0ZXIgZmxleGliaWxpdHkgdGhhbiB0aGUgImNvbXBhdF9uZXQiCi0JbWVjaGFuaXNtLiAgTm93IHRoYXQgdGhlIG1ham9yIExpbnV4IGRpc3RyaWJ1dGlvbnMgaGF2ZSBtb3ZlZCB0bwotCVNlY21hcmssIGl0IGlzIHRpbWUgdG8gZGVwcmVjYXRlIHRoZSBvbGRlciBtZWNoYW5pc20gYW5kIHN0YXJ0IHRoZQotCXByb2Nlc3Mgb2YgcmVtb3ZpbmcgdGhlIG9sZCBjb2RlLgotV2hvOglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglzeXNmcyB1aSBmb3IgY2hhbmdpbmcgcDQtY2xvY2ttb2QgcGFyYW1ldGVycwogV2hlbjoJU2VwdGVtYmVyIDIwMDkKIFdoeToJU2VlIGNvbW1pdHMgMTI5ZjhhZTliMWI1YmU5NDUxN2RhNzYwMDllYTk1NmU4OTEwNGNlOCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMgppbmRleCBmYWUzNDk1Li45Njk4YzM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCkBAIC03LDEwICs3LDE0IEBACiAgICogbkZvcmNlMyAyNTBHYiBNQ1AgICAgICAgICAgMTBkZTowMEU0IAogICAqIG5Gb3JjZTQgTUNQICAgICAgICAgICAgICAgIDEwZGU6MDA1MgogICAqIG5Gb3JjZTQgTUNQLTA0ICAgICAgICAgICAgIDEwZGU6MDAzNAotICAqIG5Gb3JjZTQgTUNQNTEgICAgICAgICAgICAgIDEwZGU6MDI2NAotICAqIG5Gb3JjZTQgTUNQNTUgICAgICAgICAgICAgIDEwZGU6MDM2OAotICAqIG5Gb3JjZTQgTUNQNjEgICAgICAgICAgICAgIDEwZGU6MDNFQgotICAqIG5Gb3JjZTQgTUNQNjUgICAgICAgICAgICAgIDEwZGU6MDQ0NgorICAqIG5Gb3JjZSBNQ1A1MSAgICAgICAgICAgICAgIDEwZGU6MDI2NAorICAqIG5Gb3JjZSBNQ1A1NSAgICAgICAgICAgICAgIDEwZGU6MDM2OAorICAqIG5Gb3JjZSBNQ1A2MSAgICAgICAgICAgICAgIDEwZGU6MDNFQgorICAqIG5Gb3JjZSBNQ1A2NSAgICAgICAgICAgICAgIDEwZGU6MDQ0NgorICAqIG5Gb3JjZSBNQ1A2NyAgICAgICAgICAgICAgIDEwZGU6MDU0MgorICAqIG5Gb3JjZSBNQ1A3MyAgICAgICAgICAgICAgIDEwZGU6MDdEOAorICAqIG5Gb3JjZSBNQ1A3OFMgICAgICAgICAgICAgIDEwZGU6MDc1MgorICAqIG5Gb3JjZSBNQ1A3OSAgICAgICAgICAgICAgIDEwZGU6MEFBMgogCiBEYXRhc2hlZXQ6IG5vdCBwdWJsaWNseSBhdmFpbGFibGUsIGJ1dCBzZWVtcyB0byBiZSBzaW1pbGFyIHRvIHRoZQogICAgICAgICAgICBBTUQtODExMSBTTUJ1cyAyLjAgYWRhcHRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CmluZGV4IGVmMWVmYTcuLmY4ODk0ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtNCw3ICs0LDcgQEAKICAgKiBJbnRlbCA4MjM3MUFCIFBJSVg0IGFuZCBQSUlYNEUKICAgKiBJbnRlbCA4MjQ0M01YICg0NDBNWCkKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQotICAqIFNlcnZlcldvcmtzIE9TQjQsIENTQjUsIENTQjYgYW5kIEhULTEwMDAgc291dGhicmlkZ2VzCisgICogU2VydmVyV29ya3MgT1NCNCwgQ1NCNSwgQ1NCNiwgSFQtMTAwMCBhbmQgSFQtMTEwMCBzb3V0aGJyaWRnZXMKICAgICBEYXRhc2hlZXQ6IE9ubHkgYXZhaWxhYmxlIHZpYSBOREEgZnJvbSBTZXJ2ZXJXb3JrcwogICAqIEFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAgYW5kIFNCODAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NWNlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKQEAgLTAsMCArMSwxNjcgQEAKK0hvdyB0byBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VubGlrZSBQQ0kgb3IgVVNCIGRldmljZXMsIEkyQyBkZXZpY2VzIGFyZSBub3QgZW51bWVyYXRlZCBhdCB0aGUgaGFyZHdhcmUKK2xldmVsLiBJbnN0ZWFkLCB0aGUgc29mdHdhcmUgbXVzdCBrbm93IHdoaWNoIGRldmljZXMgYXJlIGNvbm5lY3RlZCBvbiBlYWNoCitJMkMgYnVzIHNlZ21lbnQsIGFuZCB3aGF0IGFkZHJlc3MgdGhlc2UgZGV2aWNlcyBhcmUgdXNpbmcuIEZvciB0aGlzCityZWFzb24sIHRoZSBrZXJuZWwgY29kZSBtdXN0IGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIGV4cGxpY2l0bHkuIFRoZXJlIGFyZQorc2V2ZXJhbCB3YXlzIHRvIGFjaGlldmUgdGhpcywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCByZXF1aXJlbWVudHMuCisKKworTWV0aG9kIDE6IERlY2xhcmUgdGhlIEkyQyBkZXZpY2VzIGJ5IGJ1cyBudW1iZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWV0aG9kIGlzIGFwcHJvcHJpYXRlIHdoZW4gdGhlIEkyQyBidXMgaXMgYSBzeXN0ZW0gYnVzIGFzIGlzIHRoZSBjYXNlCitmb3IgbWFueSBlbWJlZGRlZCBzeXN0ZW1zLiBPbiBzdWNoIHN5c3RlbXMsIGVhY2ggSTJDIGJ1cyBoYXMgYSBudW1iZXIKK3doaWNoIGlzIGtub3duIGluIGFkdmFuY2UuIEl0IGlzIHRodXMgcG9zc2libGUgdG8gcHJlLWRlY2xhcmUgdGhlIEkyQworZGV2aWNlcyB3aGljaCBsaXZlIG9uIHRoaXMgYnVzLiBUaGlzIGlzIGRvbmUgd2l0aCBhbiBhcnJheSBvZiBzdHJ1Y3QKK2kyY19ib2FyZF9pbmZvIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgY2FsbGluZyBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygpLgorCitFeGFtcGxlIChmcm9tIG9tYXAyIGg0KToKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGg0X2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiaXNwMTMwMV9vbWFwIiwgMHgyZCksCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxMjUpLAorCX0sCisJewkvKiBFRVBST00gb24gbWFpbmJvYXJkICovCisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwMSIsIDB4NTIpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtMjRjMDEsCisJfSwKKwl7CS8qIEVFUFJPTSBvbiBjcHUgY2FyZCAqLworCQlJMkNfQk9BUkRfSU5GTygiMjRjMDEiLCAweDU3KSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbTI0YzAxLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0KHZvaWQpCit7CisJKC4uLikKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBoNF9pMmNfYm9hcmRfaW5mbywKKwkJCUFSUkFZX1NJWkUoaDRfaTJjX2JvYXJkX2luZm8pKTsKKwkoLi4uKQorfQorCitUaGUgYWJvdmUgY29kZSBkZWNsYXJlcyAzIGRldmljZXMgb24gSTJDIGJ1cyAxLCBpbmNsdWRpbmcgdGhlaXIgcmVzcGVjdGl2ZQorYWRkcmVzc2VzIGFuZCBjdXN0b20gZGF0YSBuZWVkZWQgYnkgdGhlaXIgZHJpdmVycy4gV2hlbiB0aGUgSTJDIGJ1cyBpbgorcXVlc3Rpb24gaXMgcmVnaXN0ZXJlZCwgdGhlIEkyQyBkZXZpY2VzIHdpbGwgYmUgaW5zdGFudGlhdGVkIGF1dG9tYXRpY2FsbHkKK2J5IGkyYy1jb3JlLgorCitUaGUgZGV2aWNlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdW5ib3VuZCBhbmQgZGVzdHJveWVkIHdoZW4gdGhlIEkyQyBidXMKK3RoZXkgc2l0IG9uIGdvZXMgYXdheSAoaWYgZXZlci4pCisKKworTWV0aG9kIDI6IEluc3RhbnRpYXRlIHRoZSBkZXZpY2VzIGV4cGxpY2l0bHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWV0aG9kIGlzIGFwcHJvcHJpYXRlIHdoZW4gYSBsYXJnZXIgZGV2aWNlIHVzZXMgYW4gSTJDIGJ1cyBmb3IKK2ludGVybmFsIGNvbW11bmljYXRpb24uIEEgdHlwaWNhbCBjYXNlIGlzIFRWIGFkYXB0ZXJzLiBUaGVzZSBjYW4gaGF2ZSBhCit0dW5lciwgYSB2aWRlbyBkZWNvZGVyLCBhbiBhdWRpbyBkZWNvZGVyLCBldGMuIHVzdWFsbHkgY29ubmVjdGVkIHRvIHRoZQorbWFpbiBjaGlwIGJ5IHRoZSBtZWFucyBvZiBhbiBJMkMgYnVzLiBZb3Ugd29uJ3Qga25vdyB0aGUgbnVtYmVyIG9mIHRoZSBJMkMKK2J1cyBpbiBhZHZhbmNlLCBzbyB0aGUgbWV0aG9kIDEgZGVzY3JpYmVkIGFib3ZlIGNhbid0IGJlIHVzZWQuIEluc3RlYWQsCit5b3UgY2FuIGluc3RhbnRpYXRlIHlvdXIgSTJDIGRldmljZXMgZXhwbGljaXRseS4gVGhpcyBpcyBkb25lIGJ5IGZpbGxpbmcKK2Egc3RydWN0IGkyY19ib2FyZF9pbmZvIGFuZCBjYWxsaW5nIGkyY19uZXdfZGV2aWNlKCkuCisKK0V4YW1wbGUgKGZyb20gdGhlIHNmZTQwMDEgbmV0d29yayBkcml2ZXIpOgorCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNmZTQwMDFfaHdtb25faW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygibWF4NjY0NyIsIDB4NGUpLAorfTsKKworaW50IHNmZTQwMDFfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCSguLi4pCisJZWZ4LT5ib2FyZF9pbmZvLmh3bW9uX2NsaWVudCA9CisJCWkyY19uZXdfZGV2aWNlKCZlZngtPmkyY19hZGFwLCAmc2ZlNDAwMV9od21vbl9pbmZvKTsKKworCSguLi4pCit9CisKK1RoZSBhYm92ZSBjb2RlIGluc3RhbnRpYXRlcyAxIEkyQyBkZXZpY2Ugb24gdGhlIEkyQyBidXMgd2hpY2ggaXMgb24gdGhlCituZXR3b3JrIGFkYXB0ZXIgaW4gcXVlc3Rpb24uCisKK0EgdmFyaWFudCBvZiB0aGlzIGlzIHdoZW4geW91IGRvbid0IGtub3cgZm9yIHN1cmUgaWYgYW4gSTJDIGRldmljZSBpcworcHJlc2VudCBvciBub3QgKGZvciBleGFtcGxlIGZvciBhbiBvcHRpb25hbCBmZWF0dXJlIHdoaWNoIGlzIG5vdCBwcmVzZW50CitvbiBjaGVhcCB2YXJpYW50cyBvZiBhIGJvYXJkIGJ1dCB5b3UgaGF2ZSBubyB3YXkgdG8gdGVsbCB0aGVtIGFwYXJ0KSwgb3IKK2l0IG1heSBoYXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZnJvbSBvbmUgYm9hcmQgdG8gdGhlIG5leHQgKG1hbnVmYWN0dXJlcgorY2hhbmdpbmcgaXRzIGRlc2lnbiB3aXRob3V0IG5vdGljZSkuIEluIHRoaXMgY2FzZSwgeW91IGNhbiBjYWxsCitpMmNfbmV3X3Byb2JlZF9kZXZpY2UoKSBpbnN0ZWFkIG9mIGkyY19uZXdfZGV2aWNlKCkuCisKK0V4YW1wbGUgKGZyb20gdGhlIHBueDQwMDggT0hDSSBkcml2ZXIpOgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1c2JfaGNkX3BueDQwMDhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwkoLi4uKQorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19pbmZvOworCisJKC4uLikKKwlpMmNfYWRhcCA9IGkyY19nZXRfYWRhcHRlcigyKTsKKwltZW1zZXQoJmkyY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJc3RybGNweShpMmNfaW5mby5uYW1lLCAiaXNwMTMwMV9wbngiLCBJMkNfTkFNRV9TSVpFKTsKKwlpc3AxMzAxX2kyY19jbGllbnQgPSBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoaTJjX2FkYXAsICZpMmNfaW5mbywKKwkJCQkJCSAgIG5vcm1hbF9pMmMpOworCWkyY19wdXRfYWRhcHRlcihpMmNfYWRhcCk7CisJKC4uLikKK30KKworVGhlIGFib3ZlIGNvZGUgaW5zdGFudGlhdGVzIHVwIHRvIDEgSTJDIGRldmljZSBvbiB0aGUgSTJDIGJ1cyB3aGljaCBpcyBvbgordGhlIE9IQ0kgYWRhcHRlciBpbiBxdWVzdGlvbi4gSXQgZmlyc3QgdHJpZXMgYXQgYWRkcmVzcyAweDJjLCBpZiBub3RoaW5nCitpcyBmb3VuZCB0aGVyZSBpdCB0cmllcyBhZGRyZXNzIDB4MmQsIGFuZCBpZiBzdGlsbCBub3RoaW5nIGlzIGZvdW5kLCBpdAorc2ltcGx5IGdpdmVzIHVwLgorCitUaGUgZHJpdmVyIHdoaWNoIGluc3RhbnRpYXRlZCB0aGUgSTJDIGRldmljZSBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWluZworaXQgb24gY2xlYW51cC4gVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgaTJjX3VucmVnaXN0ZXJfZGV2aWNlKCkgb24gdGhlCitwb2ludGVyIHRoYXQgd2FzIGVhcmxpZXIgcmV0dXJuZWQgYnkgaTJjX25ld19kZXZpY2UoKSBvcgoraTJjX25ld19wcm9iZWRfZGV2aWNlKCkuCisKKworTWV0aG9kIDM6IFByb2JlIGFuIEkyQyBidXMgZm9yIGNlcnRhaW4gZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgeW91IGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCBhbiBJMkMgZGV2aWNlLCBub3QgZXZlbgordG8gY2FsbCBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoKS4gVGhlIHR5cGljYWwgY2FzZSBpcyBoYXJkd2FyZSBtb25pdG9yaW5nCitjaGlwcyBvbiBQQyBtYWluYm9hcmRzLiBUaGVyZSBhcmUgc2V2ZXJhbCBkb3plbiBtb2RlbHMsIHdoaWNoIGNhbiBsaXZlCithdCAyNSBkaWZmZXJlbnQgYWRkcmVzc2VzLiBHaXZlbiB0aGUgaHVnZSBudW1iZXIgb2YgbWFpbmJvYXJkcyBvdXQgdGhlcmUsCitpdCBpcyBuZXh0IHRvIGltcG9zc2libGUgdG8gYnVpbGQgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIHRoZSBoYXJkd2FyZQorbW9uaXRvcmluZyBjaGlwcyBiZWluZyB1c2VkLiBGb3J0dW5hdGVseSwgbW9zdCBvZiB0aGVzZSBjaGlwcyBoYXZlCittYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRCByZWdpc3RlcnMsIHNvIHRoZXkgY2FuIGJlIGlkZW50aWZpZWQgYnkKK3Byb2JpbmcuCisKK0luIHRoYXQgY2FzZSwgSTJDIGRldmljZXMgYXJlIG5laXRoZXIgZGVjbGFyZWQgbm9yIGluc3RhbnRpYXRlZAorZXhwbGljaXRseS4gSW5zdGVhZCwgaTJjLWNvcmUgd2lsbCBwcm9iZSBmb3Igc3VjaCBkZXZpY2VzIGFzIHNvb24gYXMgdGhlaXIKK2RyaXZlcnMgYXJlIGxvYWRlZCwgYW5kIGlmIGFueSBpcyBmb3VuZCwgYW4gSTJDIGRldmljZSB3aWxsIGJlCitpbnN0YW50aWF0ZWQgYXV0b21hdGljYWxseS4gSW4gb3JkZXIgdG8gcHJldmVudCBhbnkgbWlzYmVoYXZpb3Igb2YgdGhpcworbWVjaGFuaXNtLCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseToKKyogVGhlIEkyQyBkZXZpY2UgZHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBkZXRlY3QoKSBtZXRob2QsIHdoaWNoCisgIGlkZW50aWZpZXMgYSBzdXBwb3J0ZWQgZGV2aWNlIGJ5IHJlYWRpbmcgZnJvbSBhcmJpdHJhcnkgcmVnaXN0ZXJzLgorKiBPbmx5IGJ1c2VzIHdoaWNoIGFyZSBsaWtlbHkgdG8gaGF2ZSBhIHN1cHBvcnRlZCBkZXZpY2UgYW5kIGFncmVlIHRvIGJlCisgIHByb2JlZCwgd2lsbCBiZSBwcm9iZWQuIEZvciBleGFtcGxlIHRoaXMgYXZvaWRzIHByb2JpbmcgZm9yIGhhcmR3YXJlCisgIG1vbml0b3JpbmcgY2hpcHMgb24gYSBUViBhZGFwdGVyLgorCitFeGFtcGxlOgorU2VlIGxtOTBfZHJpdmVyIGFuZCBsbTkwX2RldGVjdCgpIGluIGRyaXZlcnMvaHdtb24vbG05MC5jCisKK0kyQyBkZXZpY2VzIGluc3RhbnRpYXRlZCBhcyBhIHJlc3VsdCBvZiBzdWNoIGEgc3VjY2Vzc2Z1bCBwcm9iZSB3aWxsIGJlCitkZXN0cm95ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBkcml2ZXIgd2hpY2ggZGV0ZWN0ZWQgdGhlbSBpcyByZW1vdmVkLAorb3Igd2hlbiB0aGUgdW5kZXJseWluZyBJMkMgYnVzIGlzIGl0c2VsZiBkZXN0cm95ZWQsIHdoaWNoZXZlciBoYXBwZW5zCitmaXJzdC4KKworVGhvc2Ugb2YgeW91IGZhbWlsaWFyIHdpdGggdGhlIGkyYyBzdWJzeXN0ZW0gb2YgMi40IGtlcm5lbHMgYW5kIGVhcmx5IDIuNgora2VybmVscyB3aWxsIGZpbmQgb3V0IHRoYXQgdGhpcyBtZXRob2QgMyBpcyBlc3NlbnRpYWxseSBzaW1pbGFyIHRvIHdoYXQKK3dhcyBkb25lIHRoZXJlLiBUd28gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgYXJlOgorKiBQcm9iaW5nIGlzIG9ubHkgb25lIHdheSB0byBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyBub3csIHdoaWxlIGl0IHdhcyB0aGUKKyAgb25seSB3YXkgYmFjayB0aGVuLiBXaGVyZSBwb3NzaWJsZSwgbWV0aG9kcyAxIGFuZCAyIHNob3VsZCBiZSBwcmVmZXJyZWQuCisgIE1ldGhvZCAzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBvdGhlciB3YXksIGFzIGl0IGNhbiBoYXZlCisgIHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0cy4KKyogSTJDIGJ1c2VzIG11c3Qgbm93IGV4cGxpY2l0bHkgc2F5IHdoaWNoIEkyQyBkcml2ZXIgY2xhc3NlcyBjYW4gcHJvYmUKKyAgdGhlbSAoYnkgdGhlIG1lYW5zIG9mIHRoZSBjbGFzcyBiaXRmaWVsZCksIHdoaWxlIGFsbCBJMkMgYnVzZXMgd2VyZQorICBwcm9iZWQgYnkgZGVmYXVsdCBiYWNrIHRoZW4uIFRoZSBkZWZhdWx0IGlzIGFuIGVtcHR5IGNsYXNzIHdoaWNoIG1lYW5zCisgIHRoYXQgbm8gcHJvYmluZyBoYXBwZW5zLiBUaGUgcHVycG9zZSBvZiB0aGUgY2xhc3MgYml0ZmllbGQgaXMgdG8gbGltaXQKKyAgdGhlIGFmb3JlbWVudGlvbmVkIHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0cy4KKworT25jZSBhZ2FpbiwgbWV0aG9kIDMgc2hvdWxkIGJlIGF2b2lkZWQgd2hlcmV2ZXIgcG9zc2libGUuIEV4cGxpY2l0IGRldmljZQoraW5zdGFudGlhdGlvbiAobWV0aG9kcyAxIGFuZCAyKSBpcyBtdWNoIHByZWZlcnJlZCBmb3IgaXQgaXMgc2FmZXIgYW5kCitmYXN0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKaW5kZXggNmI5YWY3ZC4uYzFhMDZmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwpAQCAtMjA3LDE1ICsyMDcsMjYgQEAKIGlkZW50aWZ5IHN1cHBvcnRlZCBkZXZpY2VzIChyZXR1cm5pbmcgMCBmb3Igc3VwcG9ydGVkIG9uZXMgYW5kIC1FTk9ERVYKIGZvciB1bnN1cHBvcnRlZCBvbmVzKSwgYSBsaXN0IG9mIGFkZHJlc3NlcyB0byBwcm9iZSwgYW5kIGEgZGV2aWNlIHR5cGUKIChvciBjbGFzcykgc28gdGhhdCBvbmx5IEkyQyBidXNlcyB3aGljaCBtYXkgaGF2ZSB0aGF0IHR5cGUgb2YgZGV2aWNlCi1jb25uZWN0ZWQgKGFuZCBub3Qgb3RoZXJ3aXNlIGVudW1lcmF0ZWQpIHdpbGwgYmUgcHJvYmVkLiAgVGhlIGkyYwotY29yZSB3aWxsIHRoZW4gY2FsbCB5b3UgYmFjayBhcyBuZWVkZWQgYW5kIHdpbGwgaW5zdGFudGlhdGUgYSBkZXZpY2UKLWZvciB5b3UgZm9yIGV2ZXJ5IHN1Y2Nlc3NmdWwgZGV0ZWN0aW9uLgorY29ubmVjdGVkIChhbmQgbm90IG90aGVyd2lzZSBlbnVtZXJhdGVkKSB3aWxsIGJlIHByb2JlZC4gIEZvciBleGFtcGxlLAorYSBkcml2ZXIgZm9yIGEgaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwIGZvciB3aGljaCBhdXRvLWRldGVjdGlvbiBpcworbmVlZGVkIHdvdWxkIHNldCBpdHMgY2xhc3MgdG8gSTJDX0NMQVNTX0hXTU9OLCBhbmQgb25seSBJMkMgYWRhcHRlcnMKK3dpdGggYSBjbGFzcyBpbmNsdWRpbmcgSTJDX0NMQVNTX0hXTU9OIHdvdWxkIGJlIHByb2JlZCBieSB0aGlzIGRyaXZlci4KK05vdGUgdGhhdCB0aGUgYWJzZW5jZSBvZiBtYXRjaGluZyBjbGFzc2VzIGRvZXMgbm90IHByZXZlbnQgdGhlIHVzZSBvZgorYSBkZXZpY2Ugb2YgdGhhdCB0eXBlIG9uIHRoZSBnaXZlbiBJMkMgYWRhcHRlci4gIEFsbCBpdCBwcmV2ZW50cyBpcworYXV0by1kZXRlY3Rpb247IGV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgZGV2aWNlcyBpcyBzdGlsbCBwb3NzaWJsZS4KIAogTm90ZSB0aGF0IHRoaXMgbWVjaGFuaXNtIGlzIHB1cmVseSBvcHRpb25hbCBhbmQgbm90IHN1aXRhYmxlIGZvciBhbGwKIGRldmljZXMuICBZb3UgbmVlZCBzb21lIHJlbGlhYmxlIHdheSB0byBpZGVudGlmeSB0aGUgc3VwcG9ydGVkIGRldmljZXMKICh0eXBpY2FsbHkgdXNpbmcgZGV2aWNlLXNwZWNpZmljLCBkZWRpY2F0ZWQgaWRlbnRpZmljYXRpb24gcmVnaXN0ZXJzKSwKIG90aGVyd2lzZSBtaXNkZXRlY3Rpb25zIGFyZSBsaWtlbHkgdG8gb2NjdXIgYW5kIHRoaW5ncyBjYW4gZ2V0IHdyb25nCi1xdWlja2x5LgorcXVpY2tseS4gIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBJMkMgcHJvdG9jb2wgZG9lc24ndCBpbmNsdWRlIGFueQorc3RhbmRhcmQgd2F5IHRvIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYSBjaGlwIGF0IGEgZ2l2ZW4gYWRkcmVzcywgbGV0CithbG9uZSBhIHN0YW5kYXJkIHdheSB0byBpZGVudGlmeSBkZXZpY2VzLiAgRXZlbiB3b3JzZSBpcyB0aGUgbGFjayBvZgorc2VtYW50aWNzIGFzc29jaWF0ZWQgdG8gYnVzIHRyYW5zZmVycywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc2FtZQordHJhbnNmZXIgY2FuIGJlIHNlZW4gYXMgYSByZWFkIG9wZXJhdGlvbiBieSBhIGNoaXAgYW5kIGFzIGEgd3JpdGUKK29wZXJhdGlvbiBieSBhbm90aGVyIGNoaXAuICBGb3IgdGhlc2UgcmVhc29ucywgZXhwbGljaXQgZGV2aWNlCitpbnN0YW50aWF0aW9uIHNob3VsZCBhbHdheXMgYmUgcHJlZmVycmVkIHRvIGF1dG8tZGV0ZWN0aW9uIHdoZXJlCitwb3NzaWJsZS4KIAogCiBEZXZpY2UgRGVsZXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBmMWQ2Mzk5Li4xZjc3OWEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xMjIsMTAgKzEyMiw4IEBACiAnYycJMDAtN0YJbGludXgvY29kYS5oCQljb25mbGljdCEKICdjJwk4MC05RglhcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hzYy5oCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCi0nZCcJMDAtREYJbGludXgvdmlkZW9fZGVjb2Rlci5oCWNvbmZsaWN0IQogJ2QnCUYwLUZGCWxpbnV4L2RpZ2kxLmgKICdlJwlhbGwJbGludXgvZGlnaTEuaAkJY29uZmxpY3QhCi0nZScJMDAtMUYJbGludXgvdmlkZW9fZW5jb2Rlci5oCWNvbmZsaWN0IQogJ2UnCTAwLTFGCW5ldC9pcmRhL2lydHR5LmgJY29uZmxpY3QhCiAnZicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCiAnaCcJMDAtN0YJCQkJQ2hhcm9uIGZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMDEyMmU1Zi4uYWVlZGI4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTg0Niw2ICs4NDYsMTIgQEAKIAkJCSAgICAgICBJZiBzcGVjaWZpZWQsIHovVk0gSVVDViBIVkMgYWNjZXB0cyBjb25uZWN0aW9ucwogCQkJICAgICAgIGZyb20gbGlzdGVkIHovVk0gdXNlciBJRHMgb25seS4KIAorCWkyY19idXM9CVtIV10gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYm9hcmQgc3BlY2lmaWMgSTJDIGJ1cyBzcGVlZAorCQkJICAgICBvciByZWdpc3RlciBhbiBhZGRpdGlvbmFsIEkyQyBidXMgdGhhdCBpcyBub3QKKwkJCSAgICAgcmVnaXN0ZXJlZCBmcm9tIGJvYXJkIGluaXRpYWxpemF0aW9uIGNvZGUuCisJCQkgICAgIEZvcm1hdDoKKwkJCSAgICAgPGJ1c19pZD4sPGNsa3JhdGU+CisKIAlpODA0Mi5kZWJ1ZwlbSFddIFRvZ2dsZSBpODA0MiBkZWJ1ZyBtb2RlCiAJaTgwNDIuZGlyZWN0CVtIV10gUHV0IGtleWJvYXJkIHBvcnQgaW50byBub24tdHJhbnNsYXRlZCBtb2RlCiAJaTgwNDIuZHVtYmtiZAlbSFddIFByZXRlbmQgdGhhdCBjb250cm9sbGVyIGNhbiBvbmx5IHJlYWQgZGF0YSBmcm9tCkBAIC0yMDM0LDE1ICsyMDQwLDYgQEAKIAkJCUlmIGVuYWJsZWQgYXQgYm9vdCB0aW1lLCAvc2VsaW51eC9kaXNhYmxlIGNhbiBiZSB1c2VkCiAJCQlsYXRlciB0byBkaXNhYmxlIHByaW9yIHRvIGluaXRpYWwgcG9saWN5IGxvYWQuCiAKLQlzZWxpbnV4X2NvbXBhdF9uZXQgPQotCQkJW1NFTElOVVhdIFNldCBpbml0aWFsIHNlbGludXhfY29tcGF0X25ldCBmbGFnIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0OiB7ICIwIiB8ICIxIiB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAwIC0tIHVzZSBuZXcgc2VjbWFyay1iYXNlZCBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIDEgLS0gdXNlIGxlZ2FjeSBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgMCAocHJlZmVycmVkKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhCi0gICAgICAgICAgICAgICAgICAgICAgICAvc2VsaW51eC9jb21wYXRfbmV0LgotCiAJc2VyaWFsbnVtYmVyCVtCVUdTPVg4Ni0zMl0KIAogCXNoYXBlcnM9CVtORVRdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAppbmRleCBjYzQ1MzExLi4wNzMyY2RkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKQEAgLTM1LDMwICszNSwzMCBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hIiwgImZzbCxlbG8tZG1hIjsKLQkJcmVnID0gPDgyYTggND47Ci0JCXJhbmdlcyA9IDwwIDgxMDAgMWE0PjsKKwkJcmVnID0gPDB4ODJhOCA0PjsKKwkJcmFuZ2VzID0gPDAgMHg4MTAwIDB4MWE0PjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCWludGVycnVwdHMgPSA8NDcgOD47CisJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCWNlbGwtaW5kZXggPSA8MD47CiAJCWRtYS1jaGFubmVsQDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlyZWcgPSA8MCA4MD47CisJCQlyZWcgPSA8MCAweDgwPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlyZWcgPSA8ODAgODA+OworCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCXJlZyA9IDwxMDAgODA+OworCQkJcmVnID0gPDB4MTAwIDB4ODA+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQlyZWcgPSA8MTgwIDgwPjsKKwkJCXJlZyA9IDwweDE4MCAweDgwPjsKIAkJfTsKIAl9OwogCkBAIC05MywzNiArOTMsMzYgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOwotCQlyZWcgPSA8MjEzMDAgND47Ci0JCXJhbmdlcyA9IDwwIDIxMTAwIDIwMD47CisJCXJlZyA9IDwweDIxMzAwIDQ+OworCQlyYW5nZXMgPSA8MCAweDIxMTAwIDB4MjAwPjsKIAkJY2VsbC1pbmRleCA9IDwwPjsKIAkJZG1hLWNoYW5uZWxAMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCXJlZyA9IDwwIDgwPjsKKwkJCXJlZyA9IDwwIDB4ODA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAyPjsKKwkJCWludGVycnVwdHMgPSA8MjAgMj47CiAJCX07CiAJCWRtYS1jaGFubmVsQDgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJcmVnID0gPDgwIDgwPjsKKwkJCXJlZyA9IDwweDgwIDB4ODA+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNSAyPjsKKwkJCWludGVycnVwdHMgPSA8MjEgMj47CiAJCX07CiAJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCXJlZyA9IDwxMDAgODA+OworCQkJcmVnID0gPDB4MTAwIDB4ODA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJCWludGVycnVwdHMgPSA8MjIgMj47CiAJCX07CiAJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCXJlZyA9IDwxODAgODA+OworCQkJcmVnID0gPDB4MTgwIDB4ODA+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCWludGVycnVwdHMgPSA8MjMgMj47CiAJCX07CiAJfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDg0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKQEAgLTAsMCArMSwyNCBAQAorKiBGcmVlc2NhbGUgRW5oYW5jZWQgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIChlU0RIQykKKworVGhlIEVuaGFuY2VkIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UKK2ZvciBNTUMsIFNELCBhbmQgU0RJTyB0eXBlcyBvZiBtZW1vcnkgY2FyZHMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZQorICAgICJmc2wsPGNoaXA+LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIiBmb3IgTVBDODN4eCBwcm9jZXNzb3JzLgorICAgICJmc2wsPGNoaXA+LWVzZGhjIiwgImZzbCxtcGM4NTM2LWVzZGhjIiBmb3IgTVBDODV4eCBwcm9jZXNzb3JzLgorICAtIHJlZyA6IHNob3VsZCBjb250YWluIGVTREhDIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoLgorICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiBlU0RIQyBpbnRlcnJ1cHQuCisgIC0gaW50ZXJydXB0LXBhcmVudCA6IGludGVycnVwdCBzb3VyY2UgcGhhbmRsZS4KKyAgLSBjbG9jay1mcmVxdWVuY3kgOiBzcGVjaWZpZXMgZVNESEMgYmFzZSBjbG9jayBmcmVxdWVuY3kuCisKK0V4YW1wbGU6CisKK3NkaGNpQDJlMDAwIHsKKwljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CmluZGV4IGEyZDk2MzkuLjVmZjc2YzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dApAQCAtNCw0NCArNCw1NiBAQAogYmUgcHJvZ3JhbW1lZCBpbiBBQzk3LCBJMlMsIGxlZnQtanVzdGlmaWVkLCBvciByaWdodC1qdXN0aWZpZWQgbW9kZXMuCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6Ci0tIGNvbXBhdGlibGUJICA6IGNvbXBhdGlibGUgbGlzdCwgY29udGFpbmluZyAiZnNsLHNzaSIKLS0gY2VsbC1pbmRleAkgIDogdGhlIFNTSSwgPDA+ID0gU1NJMSwgPDE+ID0gU1NJMiwgYW5kIHNvIG9uCi0tIHJlZwkJICA6IG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKLS0gaW50ZXJydXB0cwkgIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBhbmQgYiBpcyBhCi0gICAgICAgICAgICAgICAgICAgICBmaWVsZCB0aGF0IHJlcHJlc2VudHMgYW4gZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZAotCQkgICAgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuICBUaGlzIHNob3VsZCBiZQotCQkgICAgZW5jb2RlZCBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gaW4gc2VjdGlvbiAyKQotCQkgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGludGVycnVwdCBjb250cm9sbGVyIHlvdQotCQkgICAgaGF2ZS4KLS0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAotICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCi0tIGZzbCxtb2RlCSAgOiB0aGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBTU0kgaW50ZXJmYWNlCi0JCSAgICAiaTJzLXNsYXZlIiAtIEkyUyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKLQkJICAgICJpMnMtbWFzdGVyIiAtIEkyUyBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCi0JCSAgICAibGotc2xhdmUiIC0gbGVmdC1qdXN0aWZpZWQgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAibGotbWFzdGVyIiAtIGwuai4gbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgotCQkgICAgInJqLXNsYXZlIiAtIHJpZ2h0LWp1c3RpZmllZCBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKLQkJICAgICJyai1tYXN0ZXIiIC0gci5qLiwgU1NJIGlzIGNsb2NrIG1hc3RlcgotCQkgICAgImFjOTctc2xhdmUiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKLQkJICAgICJhYzk3LW1hc3RlciIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKLS0gZnNsLHBsYXliYWNrLWRtYTogcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCistIGNvbXBhdGlibGU6ICAgICAgIENvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgImZzbCxzc2kiLgorLSBjZWxsLWluZGV4OiAgICAgICBUaGUgU1NJLCA8MD4gPSBTU0kxLCA8MT4gPSBTU0kyLCBhbmQgc28gb24uCistIHJlZzogICAgICAgICAgICAgIE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCistIGludGVycnVwdHM6ICAgICAgIDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgYW5kIGIgaXMgYQorICAgICAgICAgICAgICAgICAgICBmaWVsZCB0aGF0IHJlcHJlc2VudHMgYW4gZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZAorICAgICAgICAgICAgICAgICAgICBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4gIFRoaXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGluIHNlY3Rpb24gMikKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGludGVycnVwdCBjb250cm9sbGVyIHlvdQorICAgICAgICAgICAgICAgICAgICBoYXZlLgorLSBpbnRlcnJ1cHQtcGFyZW50OiBUaGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCistIGZzbCxtb2RlOiAgICAgICAgIFRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIFNTSSBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICJpMnMtc2xhdmUiIC0gSTJTIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAiaTJzLW1hc3RlciIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAibGotc2xhdmUiIC0gbGVmdC1qdXN0aWZpZWQgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICJsai1tYXN0ZXIiIC0gbC5qLiBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICJyai1zbGF2ZSIgLSByaWdodC1qdXN0aWZpZWQgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICJyai1tYXN0ZXIiIC0gci5qLiwgU1NJIGlzIGNsb2NrIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAiYWM5Ny1zbGF2ZSIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAiYWM5Ny1tYXN0ZXIiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCistIGZzbCxwbGF5YmFjay1kbWE6IFBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgogICAgICAgICAgICAgICAgICAgICBwbGF5YmFjayBvZiBhdWRpby4gIFRoaXMgaXMgdHlwaWNhbGx5IGRpY3RhdGVkIGJ5IFNPQwogICAgICAgICAgICAgICAgICAgICBkZXNpZ24uICBTZWUgdGhlIG5vdGVzIGJlbG93LgotLSBmc2wsY2FwdHVyZS1kbWE6ICBwaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKKy0gZnNsLGNhcHR1cmUtZG1hOiAgUGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCiAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmUgKHJlY29yZGluZykgb2YgYXVkaW8uICBUaGlzIGlzIHR5cGljYWxseSBkaWN0YXRlZAogICAgICAgICAgICAgICAgICAgICBieSBTT0MgZGVzaWduLiAgU2VlIHRoZSBub3RlcyBiZWxvdy4KKy0gZnNsLGZpZm8tZGVwdGg6ICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRklGT3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIFNGQ1NSW1RGV00wXS4KKy0gZnNsLHNzaS1hc3luY2hyb25vdXM6CisgICAgICAgICAgICAgICAgICAgIElmIHNwZWNpZmllZCwgdGhlIFNTSSBpcyB0byBiZSBwcm9ncmFtbWVkIGluIGFzeW5jaHJvbm91cworICAgICAgICAgICAgICAgICAgICBtb2RlLiAgSW4gdGhpcyBtb2RlLCBwaW5zIFNSQ0ssIFNUQ0ssIFNSRlMsIGFuZCBTVEZTIG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxsIGJlIGNvbm5lY3RlZCB0byB2YWxpZCBzaWduYWxzLiAgSW4gc3luY2hyb25vdXMgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgU1JDSyBhbmQgU1JGUyBhcmUgaWdub3JlZC4gIEFzeW5jaHJvbm91cyBtb2RlIGFsbG93cworICAgICAgICAgICAgICAgICAgICBwbGF5YmFjayBhbmQgY2FwdHVyZSB0byB1c2UgZGlmZmVyZW50IHNhbXBsZSBzaXplcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlIHJhdGVzLiAgU29tZSBkcml2ZXJzIG1heSByZXF1aXJlIHRoYXQgU1JDSyBhbmQgU1RDSworICAgICAgICAgICAgICAgICAgICBiZSBjb25uZWN0ZWQgdG9nZXRoZXIsIGFuZCBTUkZTIGFuZCBTVEZTIGJlIGNvbm5lY3RlZAorICAgICAgICAgICAgICAgICAgICB0b2dldGhlci4gIFRoaXMgd291bGQgc3RpbGwgYWxsb3cgZGlmZmVyZW50IHNhbXBsZSBzaXplcywKKyAgICAgICAgICAgICAgICAgICAgYnV0IG5vdCBkaWZmZXJlbnQgc2FtcGxlIHJhdGVzLgogCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgotLSBjb2RlYy1oYW5kbGUJICA6IHBoYW5kbGUgdG8gYSAnY29kZWMnIG5vZGUgdGhhdCBkZWZpbmVzIGFuIGF1ZGlvCi0JCSAgICBjb2RlYyBjb25uZWN0ZWQgdG8gdGhpcyBTU0kuICBUaGlzIG5vZGUgaXMgdHlwaWNhbGx5Ci0JCSAgICBhIGNoaWxkIG9mIGFuIEkyQyBvciBvdGhlciBjb250cm9sIG5vZGUuCistIGNvZGVjLWhhbmRsZTogICAgIFBoYW5kbGUgdG8gYSAnY29kZWMnIG5vZGUgdGhhdCBkZWZpbmVzIGFuIGF1ZGlvCisgICAgICAgICAgICAgICAgICAgIGNvZGVjIGNvbm5lY3RlZCB0byB0aGlzIFNTSS4gIFRoaXMgbm9kZSBpcyB0eXBpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgYSBjaGlsZCBvZiBhbiBJMkMgb3Igb3RoZXIgY29udHJvbCBub2RlLgogCiBDaGlsZCAnY29kZWMnIG5vZGUgcmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZQkgIDogY29tcGF0aWJsZSBsaXN0LCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY29kZWMKKy0gY29tcGF0aWJsZTogICAgICAgQ29tcGF0aWJsZSBsaXN0LCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY29kZWMKIAogQ2hpbGQgJ2NvZGVjJyBub2RlIG9wdGlvbmFsIHByb3BlcnRpZXM6Ci0tIGNsb2NrLWZyZXF1ZW5jeSAgOiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBpbnB1dCBjbG9jaywgd2hpY2ggdHlwaWNhbGx5Ci0gICAgICAgICAgICAgICAgICAgICBjb21lcyBmcm9tIGFuIG9uLWJvYXJkIGRlZGljYXRlZCBvc2NpbGxhdG9yLgorLSBjbG9jay1mcmVxdWVuY3k6ICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBpbnB1dCBjbG9jaywgd2hpY2ggdHlwaWNhbGx5IGNvbWVzCisgICAgICAgICAgICAgICAgICAgIGZyb20gYW4gb24tYm9hcmQgZGVkaWNhdGVkIG9zY2lsbGF0b3IuCiAKIE5vdGVzIG9uIGZzbCxwbGF5YmFjay1kbWEgYW5kIGZzbCxjYXB0dXJlLWRtYToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CmluZGV4IDBkOTNmYTEuLmYxMWM1ODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKQEAgLTEzNSw3ICsxMzUsNyBAQAogMTM0IC0+IEFkbGluayBSVFYyNAogMTM1IC0+IERWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkNTAwXQogMTM2IC0+IEFjb3JwIFk4NzhGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOTUxMToxNTQwXQotMTM3IC0+IENvbmNlcHRyb25pYyBDVFZGTWkgdjIKKzEzNyAtPiBDb25jZXB0cm9uaWMgQ1RWRk1pIHYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAzNmU6MTA5ZV0KIDEzOCAtPiBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuMkUpCiAxMzkgLT4gUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIE1QRUcyIFBWLU00OTAwCiAxNDAgLT4gT3NwcmV5IDQ0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOmZmMDddCkBAIC0xNTQsMyArMTU0LDcgQEAKIDE1MyAtPiBQSFlURUMgVkQtMDEyIChidDg3OCkKIDE1NCAtPiBQSFlURUMgVkQtMDEyLVgxIChidDg3OCkKIDE1NSAtPiBQSFlURUMgVkQtMDEyLVgyIChidDg3OCkKKzE1NiAtPiBJVkNFLTg3ODQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwMDA6ZjA1MCwwMDAxOmYwNTAsMDAwMjpmMDUwLDAwMDM6ZjA1MF0KKzE1NyAtPiBHZW92aXNpb24gR1YtODAwKFMpIChtYXN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgWzgwMGE6NzYzZF0KKzE1OCAtPiBHZW92aXNpb24gR1YtODAwKFMpIChzbGF2ZSkgICAgICAgICAgICAgICAgICAgICAgICAgWzgwMGI6NzYzZCw4MDBjOjc2M2QsODAwZDo3NjNkXQorMTU5IC0+IFByb1ZpZGVvIFBWMTgzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTgzMDoxNTQwLDE4MzE6MTU0MCwxODMyOjE1NDAsMTgzMzoxNTQwLDE4MzQ6MTU0MCwxODM1OjE1NDAsMTgzNjoxNTQwLDE4Mzc6MTU0MF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCAzNWVhMTMwLi45MWFhM2MwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC0xMiwzICsxMiw3IEBACiAgMTEgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIEV4cHJlc3MgICAgICAgICAgICAgICAgIFsxOGFjOmRiNzhdCiAgMTIgLT4gTGVhZHRlayBXaW5mYXN0IFB4RFZSMzIwMCBIICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2ODFdCiAgMTMgLT4gQ29tcHJvIFZpZGVvTWF0ZSBFNjUwRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODViOmU4MDBdCisgMTQgLT4gVHVyYm9TaWdodCBUQlMgNjkyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs2OTIwOjg4ODhdCisgMTUgLT4gVGVWaWkgUzQ3MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkNDcwOjkwMjJdCisgMTYgLT4gRFZCV29ybGQgRFZCLVMyIDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDAxOjIwMDVdCisgMTcgLT4gTmV0VVAgRHVhbCBEVkItUzIgQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxYjU1OjJhMmNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKaW5kZXggMGQwOGYxZS4uNzFlOWRiMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OApAQCAtNzcsMyArNzcsNCBAQAogIDc2IC0+IFNBVFRSQURFIFNUNDIwMCBEVkItUy9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYjIwMDo0MjAwXQogIDc3IC0+IFRCUyA4OTEwIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbODkxMDo4ODg4XQogIDc4IC0+IFByb2YgNjIwMCBEVkItUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYjAyMjozMDIyXQorIDc5IC0+IFRlcnJhdGVjIENpbmVyZ3kgSFQgUENJIE1LSUkgICAgICAgICAgICAgICAgICAgICAgICBbMTUzYjoxMTc3XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCA3NWJkZWQ4Li43OGQwYTZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtNywxMiArNywxMiBAQAogICA2IC0+IFRlcnJhdGVjIENpbmVyZ3kgMjAwIFVTQiAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAgNyAtPiBMZWFkdGVrIFdpbmZhc3QgVVNCIElJICAgICAgICAgICAgICAgICAgIChlbTI4MDApICAgICAgICBbMDQxMzo2MDIzXQogICA4IC0+IEt3b3JsZCBVU0IyODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKLSAgOSAtPiBQaW5uYWNsZSBEYXp6bGUgRFZDIDkwL0RWQyAxMDAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA3LDIzMDQ6MDIxYV0KKyAgOSAtPiBQaW5uYWNsZSBEYXp6bGUgRFZDIDkwLzEwMC8xMDEvMTA3IC8gS2Fpc2VyIEJhYXMgVmlkZW8gdG8gRFZEIG1ha2VyIChlbTI4MjAvZW0yODQwKSBbMWI4MDplMzAyLDIzMDQ6MDIwNywyMzA0OjAyMWFdCiAgMTAgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA5MDAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIwNDA6NjUwMF0KICAxMSAtPiBUZXJyYXRlYyBIeWJyaWQgWFMgICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQyXQogIDEyIC0+IEt3b3JsZCBQVlIgVFYgMjgwMCBSRiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMTMgLT4gVGVycmF0ZWMgUHJvZGlneSBYUyAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0N10KLSAxNCAtPiBQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCAgICAgICAgIChlbTI4MjAvZW0yODQwKQorIDE0IC0+IFNJSUcgQVZUdW5lci1QVlIgLyBQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCAoZW0yODIwL2VtMjg0MCkKICAxNSAtPiBWLUdlYXIgUG9ja2V0VFYgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgMTYgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA5NTAgICAgICAgICAgICAgICAgICAoZW0yODgzKSAgICAgICAgWzIwNDA6NjUxMywyMDQwOjY1MTcsMjA0MDo2NTFiXQogIDE3IC0+IFBpbm5hY2xlIFBDVFYgSEQgUHJvIFN0aWNrICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFsyMzA0OjAyMjddCkBAIC0zMCw3ICszMCw2IEBACiAgMzAgLT4gVmlkZW9sb2d5IDIwSzE0WFVTQiBVU0IyLjAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAzMSAtPiBVc2JnZWFyIFZEMjA0djkgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjEpCiAgMzIgLT4gU3VwZXJjb21wIFVTQiAyLjAgVFYgICAgICAgICAgICAgICAgICAgICAoZW0yODIxKQotIDMzIC0+IFNJSUcgQVZUdW5lci1QVlIvUHJvbGluayBQbGF5VFYgVVNCIDIuMCAgKGVtMjgyMSkKICAzNCAtPiBUZXJyYXRlYyBDaW5lcmd5IEEgSHlicmlkIFhTICAgICAgICAgICAgIChlbTI4NjApICAgICAgICBbMGNjZDowMDRmXQogIDM1IC0+IFR5cGhvb24gRFZEIE1ha2VyICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkKICAzNiAtPiBOZXRHTUJIIENhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4NjApCkBAIC01OCwzICs1Nyw3IEBACiAgNTggLT4gQ29tcHJvIFZpZGVvTWF0ZSBGb3JZb3UvU3RlcmVvICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzE4NWI6MjA0MV0KICA2MCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDg1MCAgICAgICAgICAgICAgICAgIChlbTI4ODMpICAgICAgICBbMjA0MDo2NTFmXQogIDYxIC0+IFBpeGVsdmlldyBQbGF5VFYgQm94IDQgVVNCIDIuMCAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgNjIgLT4gR2FkbWVpIFRWUjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKKyA2MyAtPiBLYWlvbXkgVFZuUEMgVTIgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4NjApICAgICAgICBbZWIxYTplMzAzXQorIDY0IC0+IEVhc3kgQ2FwIENhcHR1cmUgREMtNjAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkKKyA2NSAtPiBJTy1EQVRBIEdWLU1WUC9TWiAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMDRiYjowNTE1XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CmluZGV4IGI4ZDQ3MDUuLjZkYWNmMjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKQEAgLTE1MywzICsxNTMsNSBAQAogMTUyIC0+IEFzdXMgVGlnZXIgUmV2OjEuMDAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg1N10KIDE1MyAtPiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgICAgICAgICAgIFsxN2RlOjcxMjhdCiAxNTQgLT4gQXZlcm1lZGlhIEFWZXJUViBHTyAwMDcgRk0gUGx1cyAgICAgICAgICBbMTQ2MTpmMzFkXQorMTU1IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMTIwIEFUU0MvUUFNLUh5YnJpZCAgWzAwNzA6NjcwNiwwMDcwOjY3MDhdCisxNTYgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjExMTByMyAgICAgICAgICAgICAgICBbMDA3MDo2NzA3LDAwNzA6NjcwOSwwMDcwOjY3MGFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgppbmRleCAyOTU0NjJiLi4wZTg5ZTc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KQEAgLTQwMSw4ICs0MDEsNyBAQAogICAgZmlyc3Qgc2V0IHRoZSBjb3JyZWN0IG5vcm0uIFdlbGwsIGl0IHNlZW1zIGxvZ2ljYWxseSBjb3JyZWN0OiBUVgogICAgc3RhbmRhcmQgaXMgIm1vcmUgY29uc3RhbnQiIGZvciBjdXJyZW50IGNvdW50cnkgdGhhbiBnZW9tZXRyeQogICAgc2V0dGluZ3Mgb2YgYSB2YXJpZXR5IG9mIFRWIGNhcHR1cmUgY2FyZHMgd2hpY2ggbWF5IHdvcmsgaW4gSVRVIG9yCi0gICBzcXVhcmUgcGl4ZWwgZm9ybWF0LiBSZW1lbWJlciB0aGF0IHVzZXJzIG5vdyBjYW4gbG9jayB0aGUgbm9ybSB0bwotICAgYXZvaWQgYW55IGFtYmlndWl0eS4KKyAgIHNxdWFyZSBwaXhlbCBmb3JtYXQuCiAtLQogUGxlYXNlIG5vdGUgdGhhdCBsYXZwbGF5L2xhdnJlYyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgTUpQRUctdG9vbHMKIChodHRwOi8vbWpwZWcuc2YubmV0LykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKaW5kZXggNWVmNzU3OC4uYmJlM2VkNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwpAQCAtODEsMTYgKzgxLDYgQEAKIAkJcGFsPVtiZGdpbF0Jc2VsZWN0IFBBTCB2YXJpYW50ICh1c2VkIGZvciBzb21lIHR1bmVycwogCQkJCW9ubHksIGltcG9ydGFudCBmb3IgdGhlIGF1ZGlvIGNhcnJpZXIpLgogCi10dm1peGVyLm8KLQlyZWdpc3RlcnMgYSBtaXhlciBkZXZpY2UgZm9yIHRoZSBUViBjYXJkJ3Mgdm9sdW1lL2Jhc3MvdHJlYmxlCi0JY29udHJvbHMgKHJlcXVpcmVzIGEgaTJjIGF1ZGlvIGNvbnRyb2wgY2hpcCBsaWtlIHRoZSBtc3AzNDAwKS4KLQotCWluc21vZCBhcmdzOgotCQlkZWJ1Zz0xCQlwcmludCBzb21lIGRlYnVnIGluZm8gdG8gdGhlIHN5c2xvZy4KLQkJZGV2bnI9bgkJYWxsb2NhdGUgZGV2aWNlICNuICgwID09IC9kZXYvbWl4ZXIsCi0JCQkJMSA9IC9kZXYvbWl4ZXIxLCAuLi4pLCBkZWZhdWx0IGlzIHRvCi0JCQkJdXNlIHRoZSBmaXJzdCBmcmVlIG9uZS4KLQogdHZhdWRpby5vCiAJbmV3LCBleHBlcmltZW50YWwgbW9kdWxlIHdoaWNoIGlzIHN1cHBvcnRlZCB0byBwcm92aWRlIGEgc2luZ2xlCiAJZHJpdmVyIGZvciBhbGwgc2ltcGxlIGkyYyBhdWRpbyBjb250cm9sIGNoaXBzICh0ZGEvdGVhKikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQppbmRleCA3Y2EyMTU0Li4zYTM2N2NkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKQEAgLTYzLDggKzYzLDggQEAKIHlvdXJzZWxmIChwYXRjaGVzIHZlcnkgd2VsY29tZSBvZiBjb3Vyc2UuLi4pICBZb3Uga25vdzogVGhlIGxpbnV4CiBzbG9nYW4gaXMgIkRvIGl0IHlvdXJzZWxmIi4KIAotVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3Q6IHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbS4KLWh0dHBzOi8vbGlzdG1hbi5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vdmlkZW80bGludXgtbGlzdAorVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3Q6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZworaHR0cDovL3ZnZXIua2VybmVsLm9yZy92Z2VyLWxpc3RzLmh0bWwjbGludXgtbWVkaWEKIAogSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIHNvbWUgc3BlY2lmaWMgVFYgY2FyZCwgdHJ5IHRvIGFzayB0aGVyZQogaW5zdGVhZCBvZiBtYWlsaW5nIG1lIGRpcmVjdGx5LiAgVGhlIGNoYW5jZSB0aGF0IHNvbWVvbmUgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMgppbmRleCAwZTIxM2VkLi5iMzYxNDhlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyCkBAIC0zMiw2ICszMiwxMCBAQAogVGhlIHdpZHRoIG9mIGEgZnJhbWUgaXMgYWx3YXlzIDcyMCBwaXhlbHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbCBzcGVjaWZpZWQKIHdpZHRoLgogCitJZiB0aGUgaGVpZ2h0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDMyIGxpbmVzLCB0aGVuIHRoZSBjYXB0dXJlZCB2aWRlbyBpcworbWlzc2luZyBtYWNyb2Jsb2NrcyBhdCB0aGUgZW5kIGFuZCBpcyB1bnVzYWJsZS4gU28gdGhlIGhlaWdodCBtdXN0IGJlIGEKK211bHRpcGxlIG9mIDMyLgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaW5jbHVkZSA8c3RkaW8uaD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggMWM1OGE3Ni4uOTg1MjllMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTMyLDYgKzMyLDcgQEAKIHpjM3h4CQkwNDFlOjQwNTEJQ3JlYXRpdmUgTGl2ZSFDYW0gTm90ZWJvb2sgUHJvIChWRjAyNTApCiBvdjUxOQkJMDQxZTo0MDUyCUNyZWF0aXZlIExpdmUhIFZJU1RBIElNCiB6YzN4eAkJMDQxZTo0MDUzCUNyZWF0aXZlIExpdmUhQ2FtIFZpZGVvIElNCit2YzAzMngJCTA0MWU6NDA1YglDcmVhdGl2ZSBMaXZlISBDYW0gTm90ZWJvb2sgVWx0cmEgKFZDMDEzMCkKIG92NTE5CQkwNDFlOjQwNWYJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwMzMwCiBvdjUxOQkJMDQxZTo0MDYwCUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDM1MAogb3Y1MTkJCTA0MWU6NDA2MQlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjA0MDAKQEAgLTE5Myw2ICsxOTQsNyBAQAogc3BjYTUwMAkJMDhjYTowMTAzCUFpcHRlayBQb2NrZXREVgogc3VucGx1cwkJMDhjYTowMTA0CUFpcHRlayBQb2NrZXREVklJIDEuMwogc3VucGx1cwkJMDhjYTowMTA2CUFpcHRlayBQb2NrZXQgRFYzMTAwKworbXI5NzMxMGEJMDhjYTowMTExCUFpcHRlayBQZW5DYW0gVkdBKwogc3VucGx1cwkJMDhjYToyMDA4CUFpcHRlayBNaW5pIFBlbkNhbSAyIE0KIHN1bnBsdXMJCTA4Y2E6MjAxMAlBaXB0ZWsgUG9ja2V0Q2FtIDNNCiBzdW5wbHVzCQkwOGNhOjIwMTYJQWlwdGVrIFBvY2tldENhbSAyIE1lZ2EKQEAgLTIxNSw2ICsyMTcsNyBAQAogcGFjMjA3CQkwOTNhOjI0NzAJR2VuaXVzIEdGMTEyCiBwYWMyMDcJCTA5M2E6MjQ3MQlHZW5pdXMgVmlkZW9DYW0gZ2UxMTEKIHBhYzIwNwkJMDkzYToyNDcyCUdlbml1cyBWaWRlb0NhbSBnZTExMAorcGFjMjA3CQkwOTNhOjI0NzQJR2VuaXVzIGlMb29rIDExMQogcGFjMjA3CQkwOTNhOjI0NzYJR2VuaXVzIGUtTWVzc2VuZ2VyIDExMgogcGFjNzMxMQkJMDkzYToyNjAwCVBBQzczMTEgVHlwaG9vbgogcGFjNzMxMQkJMDkzYToyNjAxCVBoaWxpcHMgU1BDIDYxMCBOQwpAQCAtMjc5LDYgKzI4Miw3IEBACiB6YzN4eAkJMTBmZDo4MDUwCVR5cGhvb24gV2Vic2hvdCBJSSBVU0IgMzAwawogb3Y1MzQJCTE0MTU6MjAwMAlTb255IEhEIEV5ZSBmb3IgUFMzIChTTEVIIDAwMjAxKQogcGFjMjA3CQkxNDVmOjAxM2EJVHJ1c3QgV0ItMTMwME4KK3ZjMDMyeAkJMTViODo2MDAxCUhQIDIuMCBNZWdhcGl4ZWwKIHZjMDMyeAkJMTViODo2MDAyCUhQIDIuMCBNZWdhcGl4ZWwgcno0MDZhYQogc3BjYTUwMQkJMTc3Njo1MDFjCUFyb3dhbmEgMzAwSyBDTU9TIENhbWVyYQogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQKaW5kZXggNDk2NzllNi4uM2E3ODIzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaTQ3MHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dApAQCAtMSw2ICsxLDYgQEAKIERyaXZlciBmb3IgVVNCIHJhZGlvcyBmb3IgdGhlIFNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzCiAKLUNvcHlyaWdodCAoYykgMjAwOCBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CitDb3B5cmlnaHQgKGMpIDIwMDkgVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogCiAKIEluZm9ybWF0aW9uIGZyb20gU2lsaWNvbiBMYWJzCkBAIC00MSw3ICs0MSw3IEBACiAtIDEwYzQ6ODE4YTogU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduCiAtIDA2ZTE6YTE1NTogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpIChSRFgtMTU1LUVGKQogLSAxYjgwOmQ3MDA6IEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKQotLSAxMGM1OjgxOWE6IERlYWxFeHRyZW1lIFVTQiBSYWRpbworLSAxMGM1OjgxOWE6IFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpCiAKIAogU29mdHdhcmUKQEAgLTUyLDYgKzUyLDcgQEAKIC0gZ3JhZGlvIC0gR1RLIEZNIHJhZGlvIHR1bmVyCiAtIGtyYWRpbyAtIENvbWZvcnRhYmxlIFJhZGlvIEFwcGxpY2F0aW9uIGZvciBLREUKIC0gcmFkaW8gLSBuY3Vyc2VzLWJhc2VkIHJhZGlvIGFwcGxpY2F0aW9uCistIG1wbGF5ZXIgLSBUaGUgVWx0aW1hdGUgTW92aWUgUGxheWVyIEZvciBMaW51eAogCiBUaGVyZSBpcyBhbHNvIGEgbGlicmFyeSBsaWJ2NGwsIHdoaWNoIGNhbiBiZSB1c2VkLiBJdCdzIGdvaW5nIHRvIGhhdmUgYSBmdW5jdGlvbgogZm9yIGZyZXF1ZW5jeSBzZWVraW5nLCBlaXRoZXIgYnkgdXNpbmcgaGFyZHdhcmUgZnVuY3Rpb25hbGl0eSBhcyBpbiByYWRpby1zaTQ3MHgKQEAgLTY5LDcgKzcwLDcgQEAKIFVTQiBBdWRpbyBpcyBwcm92aWRlZCBieSB0aGUgQUxTQSBzbmRfdXNiX2F1ZGlvIG1vZHVsZS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KIGFsc28gc2VsZWN0IFNORF9VU0JfQVVESU8sIGFzIHRoaXMgaXMgcmVxdWlyZWQgdG8gZ2V0IHNvdW5kIGZyb20gdGhlIHJhZGlvLiBGb3IKIGxpc3RpbmcgeW91IGhhdmUgdG8gcmVkaXJlY3QgdGhlIHNvdW5kLCBmb3IgZXhhbXBsZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotY29tbWFuZHMuCitjb21tYW5kcy4gUGxlYXNlIGFkanVzdCB0aGUgYXVkaW8gZGV2aWNlcyB0byB5b3VyIG5lZWRzICgvZGV2L2RzcCogYW5kIGh3OngseCkuCiAKIElmIHlvdSBqdXN0IHdhbnQgdG8gdGVzdCBhdWRpbyAodmVyeSBwb29yIHF1YWxpdHkpOgogY2F0IC9kZXYvZHNwMSA+IC9kZXYvZHNwCkBAIC04MCw2ICs4MSwxMCBAQAogSWYgeW91IHVzZSBhcnRzIHRyeToKIGFyZWNvcmQgLUQgaHc6MSwwIC1yOTYwMDAgLWMyIC1mIFMxNl9MRSB8IGFydHNkc3AgYXBsYXkgLUIgLQogCitJZiB5b3UgdXNlIG1wbGF5ZXIgdHJ5OgorbXBsYXllciAtcmFkaW8gYWRldmljZT1odz0xLjA6YXJhdGU9OTYwMDAgXAorCS1yYXdhdWRpbyByYXRlPTk2MDAwIFwKKwlyYWRpbzovLzxmcmVxdWVuY3k+L2NhcHR1cmUKIAogTW9kdWxlIFBhcmFtZXRlcnMKID09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CmluZGV4IGZmMTI0MzcuLmEzMTE3NzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CkBAIC00Nyw3ICs0Nyw5IEBACiAzKSBDcmVhdGluZyBWNEwyIGRldmljZSBub2RlcyAoL2Rldi92aWRlb1gsIC9kZXYvdmJpWCwgL2Rldi9yYWRpb1ggYW5kCiAgICAvZGV2L3Z0eFgpIGFuZCBrZWVwaW5nIHRyYWNrIG9mIGRldmljZS1ub2RlIHNwZWNpZmljIGRhdGEuCiAKLTQpIEZpbGVoYW5kbGUtc3BlY2lmaWMgc3RydWN0cyBjb250YWluaW5nIHBlci1maWxlaGFuZGxlIGRhdGEuCis0KSBGaWxlaGFuZGxlLXNwZWNpZmljIHN0cnVjdHMgY29udGFpbmluZyBwZXItZmlsZWhhbmRsZSBkYXRhOworCis1KSB2aWRlbyBidWZmZXIgaGFuZGxpbmcuCiAKIFRoaXMgaXMgYSByb3VnaCBzY2hlbWF0aWMgb2YgaG93IGl0IGFsbCByZWxhdGVzOgogCkBAIC04MiwxMiArODQsMjAgQEAKIAl2NGwyX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpOwogCiBSZWdpc3RyYXRpb24gd2lsbCBpbml0aWFsaXplIHRoZSB2NGwyX2RldmljZSBzdHJ1Y3QgYW5kIGxpbmsgZGV2LT5kcml2ZXJfZGF0YQotdG8gdjRsMl9kZXYuIFJlZ2lzdHJhdGlvbiB3aWxsIGFsc28gc2V0IHY0bDJfZGV2LT5uYW1lIHRvIGEgdmFsdWUgZGVyaXZlZCBmcm9tCi1kZXYgKGRyaXZlciBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBidXNfaWQsIHRvIGJlIHByZWNpc2UpLiBZb3UgbWF5IGNoYW5nZSB0aGUKLW5hbWUgYWZ0ZXIgcmVnaXN0cmF0aW9uIGlmIHlvdSB3YW50LgordG8gdjRsMl9kZXYuIElmIHY0bDJfZGV2LT5uYW1lIGlzIGVtcHR5IHRoZW4gaXQgd2lsbCBiZSBzZXQgdG8gYSB2YWx1ZSBkZXJpdmVkCitmcm9tIGRldiAoZHJpdmVyIG5hbWUgZm9sbG93ZWQgYnkgdGhlIGJ1c19pZCwgdG8gYmUgcHJlY2lzZSkuIElmIHlvdSBzZXQgaXQKK3VwIGJlZm9yZSBjYWxsaW5nIHY0bDJfZGV2aWNlX3JlZ2lzdGVyIHRoZW4gaXQgd2lsbCBiZSB1bnRvdWNoZWQuIElmIGRldiBpcworTlVMTCwgdGhlbiB5b3UgKm11c3QqIHNldHVwIHY0bDJfZGV2LT5uYW1lIGJlZm9yZSBjYWxsaW5nIHY0bDJfZGV2aWNlX3JlZ2lzdGVyLgogCiBUaGUgZmlyc3QgJ2RldicgYXJndW1lbnQgaXMgbm9ybWFsbHkgdGhlIHN0cnVjdCBkZXZpY2UgcG9pbnRlciBvZiBhIHBjaV9kZXYsCi11c2JfZGV2aWNlIG9yIHBsYXRmb3JtX2RldmljZS4KK3VzYl9kZXZpY2Ugb3IgcGxhdGZvcm1fZGV2aWNlLiBJdCBpcyByYXJlIGZvciBkZXYgdG8gYmUgTlVMTCwgYnV0IGl0IGhhcHBlbnMKK3dpdGggSVNBIGRldmljZXMgb3Igd2hlbiBvbmUgZGV2aWNlIGNyZWF0ZXMgbXVsdGlwbGUgUENJIGRldmljZXMsIHRodXMgbWFraW5nCitpdCBpbXBvc3NpYmxlIHRvIGFzc29jaWF0ZSB2NGwyX2RldiB3aXRoIGEgcGFydGljdWxhciBwYXJlbnQuCisKK1lvdSBjYW4gYWxzbyBzdXBwbHkgYSBub3RpZnkoKSBjYWxsYmFjayB0aGF0IGNhbiBiZSBjYWxsZWQgYnkgc3ViLWRldmljZXMgdG8KK25vdGlmeSB5b3Ugb2YgZXZlbnRzLiBXaGV0aGVyIHlvdSBuZWVkIHRvIHNldCB0aGlzIGRlcGVuZHMgb24gdGhlIHN1Yi1kZXZpY2UuCitBbnkgbm90aWZpY2F0aW9ucyBhIHN1Yi1kZXZpY2Ugc3VwcG9ydHMgbXVzdCBiZSBkZWZpbmVkIGluIGEgaGVhZGVyIGluCitpbmNsdWRlL21lZGlhLzxzdWJkZXZpY2U+LmguCiAKIFlvdSB1bnJlZ2lzdGVyIHdpdGg6CiAKQEAgLTk1LDYgKzEwNSwxNyBAQAogCiBVbnJlZ2lzdGVyaW5nIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXIgYWxsIHN1YmRldnMgZnJvbSB0aGUgZGV2aWNlLgogCitJZiB5b3UgaGF2ZSBhIGhvdHBsdWdnYWJsZSBkZXZpY2UgKGUuZy4gYSBVU0IgZGV2aWNlKSwgdGhlbiB3aGVuIGEgZGlzY29ubmVjdAoraGFwcGVucyB0aGUgcGFyZW50IGRldmljZSBiZWNvbWVzIGludmFsaWQuIFNpbmNlIHY0bDJfZGV2aWNlIGhhcyBhIHBvaW50ZXIgdG8KK3RoYXQgcGFyZW50IGRldmljZSBpdCBoYXMgdG8gYmUgY2xlYXJlZCBhcyB3ZWxsIHRvIG1hcmsgdGhhdCB0aGUgcGFyZW50IGlzCitnb25lLiBUbyBkbyB0aGlzIGNhbGw6CisKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpOworCitUaGlzIGRvZXMgKm5vdCogdW5yZWdpc3RlciB0aGUgc3ViZGV2cywgc28geW91IHN0aWxsIG5lZWQgdG8gY2FsbCB0aGUKK3Y0bDJfZGV2aWNlX3VucmVnaXN0ZXIoKSBmdW5jdGlvbiBmb3IgdGhhdC4gSWYgeW91ciBkcml2ZXIgaXMgbm90IGhvdHBsdWdnYWJsZSwKK3RoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoKS4KKwogU29tZXRpbWVzIHlvdSBuZWVkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZGV2aWNlcyByZWdpc3RlcmVkIGJ5IGEgc3BlY2lmaWMKIGRyaXZlci4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIG11bHRpcGxlIGRldmljZSBkcml2ZXJzIHVzZSB0aGUgc2FtZQogaGFyZHdhcmUuIEUuZy4gdGhlIGl2dHZmYiBkcml2ZXIgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBpdnR2CkBAIC0xMzQsNyArMTU1LDcgQEAKIAogc3RhdGljIGF0b21pY190IGRydl9pbnN0YW5jZSA9IEFUT01JQ19JTklUKDApOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkcnZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRydl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewogCS4uLgpAQCAtMjE4LDcgKzIzOSw3IEBACiAKIEEgc3ViLWRldmljZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIHY0bDJfc3ViZGV2IHN0cnVjdCB1c2luZzoKIAotCXY0bDJfc3ViZGV2X2luaXQoc3ViZGV2LCAmb3BzKTsKKwl2NGwyX3N1YmRldl9pbml0KHNkLCAmb3BzKTsKIAogQWZ0ZXJ3YXJkcyB5b3UgbmVlZCB0byBpbml0aWFsaXplIHN1YmRldi0+bmFtZSB3aXRoIGEgdW5pcXVlIG5hbWUgYW5kIHNldCB0aGUKIG1vZHVsZSBvd25lci4gVGhpcyBpcyBkb25lIGZvciB5b3UgaWYgeW91IHVzZSB0aGUgaTJjIGhlbHBlciBmdW5jdGlvbnMuCkBAIC0yMjYsNyArMjQ3LDcgQEAKIEEgZGV2aWNlIChicmlkZ2UpIGRyaXZlciBuZWVkcyB0byByZWdpc3RlciB0aGUgdjRsMl9zdWJkZXYgd2l0aCB0aGUKIHY0bDJfZGV2aWNlOgogCi0JaW50IGVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihkZXZpY2UsIHN1YmRldik7CisJaW50IGVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldih2NGwyX2Rldiwgc2QpOwogCiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBzdWJkZXYgbW9kdWxlIGRpc2FwcGVhcmVkIGJlZm9yZSBpdCBjb3VsZCBiZSByZWdpc3RlcmVkLgogQWZ0ZXIgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIHN1Y2Nlc3NmdWxseSB0aGUgc3ViZGV2LT5kZXYgZmllbGQgcG9pbnRzIHRvCkBAIC0yMzQsMTcgKzI1NSwxNyBAQAogCiBZb3UgY2FuIHVucmVnaXN0ZXIgYSBzdWItZGV2aWNlIHVzaW5nOgogCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CiAKLUFmdGVyd2FyZHMgdGhlIHN1YmRldiBtb2R1bGUgY2FuIGJlIHVubG9hZGVkIGFuZCBzdWJkZXYtPmRldiA9PSBOVUxMLgorQWZ0ZXJ3YXJkcyB0aGUgc3ViZGV2IG1vZHVsZSBjYW4gYmUgdW5sb2FkZWQgYW5kIHNkLT5kZXYgPT0gTlVMTC4KIAogWW91IGNhbiBjYWxsIGFuIG9wcyBmdW5jdGlvbiBlaXRoZXIgZGlyZWN0bHk6CiAKLQllcnIgPSBzdWJkZXYtPm9wcy0+Y29yZS0+Z19jaGlwX2lkZW50KHN1YmRldiwgJmNoaXApOworCWVyciA9IHNkLT5vcHMtPmNvcmUtPmdfY2hpcF9pZGVudChzZCwgJmNoaXApOwogCiBidXQgaXQgaXMgYmV0dGVyIGFuZCBlYXNpZXIgdG8gdXNlIHRoaXMgbWFjcm86CiAKLQllcnIgPSB2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisJZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CiAKIFRoZSBtYWNybyB3aWxsIHRvIHRoZSByaWdodCBOVUxMIHBvaW50ZXIgY2hlY2tzIGFuZCByZXR1cm5zIC1FTk9ERVYgaWYgc3ViZGV2CiBpcyBOVUxMLCAtRU5PSU9DVExDTUQgaWYgZWl0aGVyIHN1YmRldi0+Y29yZSBvciBzdWJkZXYtPmNvcmUtPmdfY2hpcF9pZGVudCBpcwpAQCAtMjUyLDE5ICsyNzMsMTkgQEAKIAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIGFsbCBvciBhIHN1YnNldCBvZiB0aGUgc3ViLWRldmljZXM6CiAKLQl2NGwyX2RldmljZV9jYWxsX2FsbChkZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKHY0bDJfZGV2LCAwLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKIAogQW55IHN1YmRldiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcHMgaXMgc2tpcHBlZCBhbmQgZXJyb3IgcmVzdWx0cyBhcmUKIGlnbm9yZWQuIElmIHlvdSB3YW50IHRvIGNoZWNrIGZvciBlcnJvcnMgdXNlIHRoaXM6CiAKLQllcnIgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihkZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCWVyciA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHY0bDJfZGV2LCAwLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKIAogQW55IGVycm9yIGV4Y2VwdCAtRU5PSU9DVExDTUQgd2lsbCBleGl0IHRoZSBsb29wIHdpdGggdGhhdCBlcnJvci4gSWYgbm8KIGVycm9ycyAoZXhjZXB0IC1FTk9JT0NUTENNRCkgb2NjdXJlZCwgdGhlbiAwIGlzIHJldHVybmVkLgogCiBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJvdGggY2FsbHMgaXMgYSBncm91cCBJRC4gSWYgMCwgdGhlbiBhbGwgc3ViZGV2cyBhcmUKIGNhbGxlZC4gSWYgbm9uLXplcm8sIHRoZW4gb25seSB0aG9zZSB3aG9zZSBncm91cCBJRCBtYXRjaCB0aGF0IHZhbHVlIHdpbGwKLWJlIGNhbGxlZC4gQmVmb3JlIGEgYnJpZGdlIGRyaXZlciByZWdpc3RlcnMgYSBzdWJkZXYgaXQgY2FuIHNldCBzdWJkZXYtPmdycF9pZAorYmUgY2FsbGVkLiBCZWZvcmUgYSBicmlkZ2UgZHJpdmVyIHJlZ2lzdGVycyBhIHN1YmRldiBpdCBjYW4gc2V0IHNkLT5ncnBfaWQKIHRvIHdoYXRldmVyIHZhbHVlIGl0IHdhbnRzIChpdCdzIDAgYnkgZGVmYXVsdCkuIFRoaXMgdmFsdWUgaXMgb3duZWQgYnkgdGhlCiBicmlkZ2UgZHJpdmVyIGFuZCB0aGUgc3ViLWRldmljZSBkcml2ZXIgd2lsbCBuZXZlciBtb2RpZnkgb3IgdXNlIGl0LgogCkBAIC0yNzYsNiArMjk3LDExIEBACiB2NGwyX2RldmljZV9jYWxsX2FsbCgpLiBUaGF0IGVuc3VyZXMgdGhhdCBpdCB3aWxsIG9ubHkgZ28gdG8gdGhlIHN1YmRldgogdGhhdCBuZWVkcyBpdC4KIAorSWYgdGhlIHN1Yi1kZXZpY2UgbmVlZHMgdG8gbm90aWZ5IGl0cyB2NGwyX2RldmljZSBwYXJlbnQgb2YgYW4gZXZlbnQsIHRoZW4KK2l0IGNhbiBjYWxsIHY0bDJfc3ViZGV2X25vdGlmeShzZCwgbm90aWZpY2F0aW9uLCBhcmcpLiBUaGlzIG1hY3JvIGNoZWNrcword2hldGhlciB0aGVyZSBpcyBhIG5vdGlmeSgpIGNhbGxiYWNrIGRlZmluZWQgYW5kIHJldHVybnMgLUVOT0RFViBpZiBub3QuCitPdGhlcndpc2UgdGhlIHJlc3VsdCBvZiB0aGUgbm90aWZ5KCkgY2FsbCBpcyByZXR1cm5lZC4KKwogVGhlIGFkdmFudGFnZSBvZiB1c2luZyB2NGwyX3N1YmRldiBpcyB0aGF0IGl0IGlzIGEgZ2VuZXJpYyBzdHJ1Y3QgYW5kIGRvZXMKIG5vdCBjb250YWluIGFueSBrbm93bGVkZ2UgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFNvIGEgZHJpdmVyIG1pZ2h0CiBjb250YWluIHNldmVyYWwgc3ViZGV2cyB0aGF0IHVzZSBhbiBJMkMgYnVzLCBidXQgYWxzbyBhIHN1YmRldiB0aGF0IGlzCkBAIC0zNDAsNiArMzY2LDEyIEBACiBpcyBjYWxsZWQuIFRoaXMgd2lsbCB1bnJlZ2lzdGVyIHRoZSBzdWItZGV2aWNlIGZyb20gdGhlIGJyaWRnZSBkcml2ZXIuIEl0IGlzCiBzYWZlIHRvIGNhbGwgdGhpcyBldmVuIGlmIHRoZSBzdWItZGV2aWNlIHdhcyBuZXZlciByZWdpc3RlcmVkLgogCitZb3UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2Ugd2hlbiB0aGUgYnJpZGdlIGRyaXZlciBkZXN0cm95cyB0aGUgaTJjIGFkYXB0ZXIKK3RoZSByZW1vdmUoKSBjYWxsYmFja3MgYXJlIGNhbGxlZCBvZiB0aGUgaTJjIGRldmljZXMgb24gdGhhdCBhZGFwdGVyLgorQWZ0ZXIgdGhhdCB0aGUgY29ycmVzcG9uZGluZyB2NGwyX3N1YmRldiBzdHJ1Y3R1cmVzIGFyZSBpbnZhbGlkLCBzbyB0aGV5CitoYXZlIHRvIGJlIHVucmVnaXN0ZXJlZCBmaXJzdC4gQ2FsbGluZyB2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCkKK2Zyb20gdGhlIHJlbW92ZSgpIGNhbGxiYWNrIGVuc3VyZXMgdGhhdCB0aGlzIGlzIGFsd2F5cyBkb25lIGNvcnJlY3RseS4KKwogCiBUaGUgYnJpZGdlIGRyaXZlciBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgaXQgY2FuIHVzZToKIApAQCAtMzQ5LDggKzM4MSw4IEBACiBjYWxscyBpMmNfbmV3X2RldmljZSgpIHdpdGggdGhlIGdpdmVuIGkyY19hZGFwdGVyIGFuZCBjaGlwL2FkZHJlc3MgYXJndW1lbnRzLgogSWYgYWxsIGdvZXMgd2VsbCwgdGhlbiBpdCByZWdpc3RlcnMgdGhlIHN1YmRldiB3aXRoIHRoZSB2NGwyX2RldmljZS4gSXQgZ2V0cwogdGhlIHY0bDJfZGV2aWNlIGJ5IGNhbGxpbmcgaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKSwgc28geW91IHNob3VsZCBtYWtlIHN1cmUKLXRoYXQgYWRhcGRhdGEgaXMgc2V0IHRvIHY0bDJfZGV2aWNlIHdoZW4geW91IHNldHVwIHRoZSBpMmNfYWRhcHRlciBpbiB5b3VyCi1kcml2ZXIuCit0byBjYWxsIGkyY19zZXRfYWRhcGRhdGEoYWRhcHRlciwgdjRsMl9kZXZpY2UpIHdoZW4geW91IHNldHVwIHRoZSBpMmNfYWRhcHRlcgoraW4geW91ciBkcml2ZXIuCiAKIFlvdSBjYW4gYWxzbyB1c2UgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoKSB3aGljaCBpcyB2ZXJ5IHNpbWlsYXIgdG8KIHY0bDJfaTJjX25ld19zdWJkZXYoKSwgZXhjZXB0IHRoYXQgaXQgaGFzIGFuIGFycmF5IG9mIHBvc3NpYmxlIEkyQyBhZGRyZXNzZXMKQEAgLTM1OCw2ICszOTAsMTQgQEAKIAogQm90aCBmdW5jdGlvbnMgcmV0dXJuIE5VTEwgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcuCiAKK05vdGUgdGhhdCB0aGUgY2hpcGlkIHlvdSBwYXNzIHRvIHY0bDJfaTJjX25ld18ocHJvYmVkXylzdWJkZXYoKSBpcyB1c3VhbGx5Cit0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuIEl0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNoaXAgdmFyaWFudCwgZS5nLgorInNhYTcxMTQiIG9yICJzYWE3MTE1Ii4gSW4gZ2VuZXJhbCB0aG91Z2ggdGhlIGkyYyBkcml2ZXIgYXV0b2RldGVjdHMgdGhpcy4KK1RoZSB1c2Ugb2YgY2hpcGlkIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGxvb2tlZCBhdCBtb3JlIGNsb3NlbHkgYXQgYQorbGF0ZXIgZGF0ZS4gSXQgZGlmZmVycyBiZXR3ZWVuIGkyYyBkcml2ZXJzIGFuZCBhcyBzdWNoIGNhbiBiZSBjb25mdXNpbmcuCitUbyBzZWUgd2hpY2ggY2hpcCB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIHlvdSBjYW4gbG9vayBpbiB0aGUgaTJjIGRyaXZlciBjb2RlCitmb3IgdGhlIGkyY19kZXZpY2VfaWQgdGFibGUuIFRoaXMgbGlzdHMgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLgorCiAKIHN0cnVjdCB2aWRlb19kZXZpY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM5Niw2ICs0MzYsMTUgQEAKIC0gaW9jdGxfb3BzOiBpZiB5b3UgdXNlIHRoZSB2NGwyX2lvY3RsX29wcyB0byBzaW1wbGlmeSBpb2N0bCBtYWludGVuYW5jZQogICAoaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGFuZCBpdCBtaWdodCBiZWNvbWUgY29tcHVsc29yeSBpbiB0aGUKICAgZnV0dXJlISksIHRoZW4gc2V0IHRoaXMgdG8geW91ciB2NGwyX2lvY3RsX29wcyBzdHJ1Y3QuCistIHBhcmVudDogeW91IG9ubHkgc2V0IHRoaXMgaWYgdjRsMl9kZXZpY2Ugd2FzIHJlZ2lzdGVyZWQgd2l0aCBOVUxMIGFzCisgIHRoZSBwYXJlbnQgZGV2aWNlIHN0cnVjdC4gVGhpcyBvbmx5IGhhcHBlbnMgaW4gY2FzZXMgd2hlcmUgb25lIGhhcmR3YXJlCisgIGRldmljZSBoYXMgbXVsdGlwbGUgUENJIGRldmljZXMgdGhhdCBhbGwgc2hhcmUgdGhlIHNhbWUgdjRsMl9kZXZpY2UgY29yZS4KKworICBUaGUgY3g4OCBkcml2ZXIgaXMgYW4gZXhhbXBsZSBvZiB0aGlzOiBvbmUgY29yZSB2NGwyX2RldmljZSBzdHJ1Y3QsIGJ1dAorICBpdCBpcyB1c2VkIGJ5IGJvdGggYW4gcmF3IHZpZGVvIFBDSSBkZXZpY2UgKGN4ODgwMCkgYW5kIGEgTVBFRyBQQ0kgZGV2aWNlCisgIChjeDg4MDIpLiBTaW5jZSB0aGUgdjRsMl9kZXZpY2UgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIKKyAgUENJIGRldmljZSBpdCBpcyBzZXR1cCB3aXRob3V0IGEgcGFyZW50IGRldmljZS4gQnV0IHdoZW4gdGhlIHN0cnVjdAorICB2aWRlb19kZXZpY2UgaXMgc2V0dXAgeW91IGRvIGtub3cgd2hpY2ggcGFyZW50IFBDSSBkZXZpY2UgdG8gdXNlLgogCiBJZiB5b3UgdXNlIHY0bDJfaW9jdGxfb3BzLCB0aGVuIHlvdSBzaG91bGQgc2V0IGVpdGhlciAudW5sb2NrZWRfaW9jdGwgb3IKIC5pb2N0bCB0byB2aWRlb19pb2N0bDIgaW4geW91ciB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3QuCkBAIC00OTksOCArNTQ4LDggQEAKIAogWW91IGNhbiBzZXQvZ2V0IGRyaXZlciBwcml2YXRlIGRhdGEgaW4gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgdXNpbmc6CiAKLXZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldik7Ci12b2lkIHZpZGVvX3NldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7Cit2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKK3ZvaWQgdmlkZW9fc2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgdm9pZCAqZGF0YSk7CiAKIE5vdGUgdGhhdCB5b3UgY2FuIHNhZmVseSBjYWxsIHZpZGVvX3NldF9kcnZkYXRhKCkgYmVmb3JlIGNhbGxpbmcKIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpLgpAQCAtNTE5LDMgKzU2OCwxMDMgQEAKIFlvdSBjYW4gZ28gZnJvbSBhIHZpZGVvX2RldmljZSBzdHJ1Y3QgdG8gdGhlIHY0bDJfZGV2aWNlIHN0cnVjdCB1c2luZzoKIAogc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHZkZXYtPnY0bDJfZGV2OworCit2aWRlbyBidWZmZXIgaGVscGVyIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHY0bDIgY29yZSBBUEkgcHJvdmlkZXMgYSBzdGFuZGFyZCBtZXRob2QgZm9yIGRlYWxpbmcgd2l0aCB2aWRlbworYnVmZmVycy4gVGhvc2UgbWV0aG9kcyBhbGxvdyBhIGRyaXZlciB0byBpbXBsZW1lbnQgcmVhZCgpLCBtbWFwKCkgYW5kCitvdmVybGF5KCkgb24gYSBjb25zaXN0ZW50IHdheS4KKworVGhlcmUgYXJlIGN1cnJlbnRseSBtZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdAorc3VwcG9ydHMgRE1BIHdpdGggc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aAorbGluZWFyIGFjY2VzcyAodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5Cit1c2VkIG9uIFVTQiBkcml2ZXJzICh2aWRlb2J1Zi12bWFsbG9jKS4KKworQW55IGRyaXZlciB1c2luZyB2aWRlb2J1ZiBzaG91bGQgcHJvdmlkZSBvcGVyYXRpb25zIChjYWxsYmFja3MpIGZvcgorZm91ciBoYW5kbGVyczoKKworb3BzLT5idWZfc2V0dXAgICAtIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHZpZGVvIGJ1ZmZlcnMgYW5kIGF2b2lkIHRoZXkKKwkJICAgdG8gd2FzdGUgbW9yZSB0aGFuIHNvbWUgbWF4aW11bSBsaW1pdCBvZiBSQU07CitvcHMtPmJ1Zl9wcmVwYXJlIC0gZmlsbHMgdGhlIHZpZGVvIGJ1ZmZlciBzdHJ1Y3RzIGFuZCBjYWxscworCQkgICB2aWRlb2J1Zl9pb2xvY2soKSB0byBhbGxvYyBhbmQgcHJlcGFyZSBtbWFwZWQgbWVtb3J5Oworb3BzLT5idWZfcXVldWUgICAtIGFkdmljZXMgdGhlIGRyaXZlciB0aGF0IGFub3RoZXIgYnVmZmVyIHdlcmUKKwkJICAgcmVxdWVzdGVkIChieSByZWFkKCkgb3IgYnkgUUJVRik7CitvcHMtPmJ1Zl9yZWxlYXNlIC0gZnJlZXMgYW55IGJ1ZmZlciB0aGF0IHdlcmUgYWxsb2NhdGVkLgorCitJbiBvcmRlciB0byB1c2UgaXQsIHRoZSBkcml2ZXIgbmVlZCB0byBoYXZlIGEgY29kZSAoZ2VuZXJhbGx5IGNhbGxlZCBhdAoraW50ZXJydXB0IGNvbnRleHQpIHRoYXQgd2lsbCBwcm9wZXJseSBoYW5kbGUgdGhlIGJ1ZmZlciByZXF1ZXN0IGxpc3RzLAorYW5ub3VuY2luZyB0aGF0IGEgbmV3IGJ1ZmZlciB3ZXJlIGZpbGxlZC4KKworVGhlIGlycSBoYW5kbGluZyBjb2RlIHNob3VsZCBoYW5kbGUgdGhlIHZpZGVvYnVmIHRhc2sgbGlzdHMsIGluIG9yZGVyCit0byBhZHZpY2UgdmlkZW9idWYgdGhhdCBhIG5ldyBmcmFtZSB3ZXJlIGZpbGxlZCwgaW4gb3JkZXIgdG8gaG9ub3IgdG8gYQorcmVxdWVzdC4gVGhlIGNvZGUgaXMgZ2VuZXJhbGx5IGxpa2UgdGhpcyBvbmU6CisJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKQorCQlyZXR1cm47CisKKwlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IHZidWZmZXIsIHZiLnF1ZXVlKTsKKworCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkKKwkJcmV0dXJuOworCisJLyogU29tZSBsb2dpYyB0byBoYW5kbGUgdGhlIGJ1ZiBtYXkgYmUgbmVlZGVkIGhlcmUgKi8KKworCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisKK1Rob3NlIGFyZSB0aGUgdmlkZW9idWZmZXIgZnVuY3Rpb25zIHVzZWQgb24gZHJpdmVycywgaW1wbGVtZW50ZWQgb24KK3ZpZGVvYnVmLWNvcmU6CisKKy0gVmlkZW9idWYgaW5pdCBmdW5jdGlvbnMKKyAgdmlkZW9idWZfcXVldWVfc2dfaW5pdCgpCisgICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisgICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgdXNlcyBETUEKKyAgICAgIFNjYXR0ZXIvR2F0aGVyIGJ1ZmZlcnMuCisKKyAgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0CisgICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisgICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgbmVlZCBETUEKKyAgICAgIGNvbnRpZ3VvdXMgYnVmZmVycy4KKworICB2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoKQorICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gVVNCIChhbmQgb3RoZXIgZHJpdmVycykKKyAgICAgIHRoYXQgbmVlZCBhIHZtYWxsb2NlZCB0eXBlIG9mIHZpZGVvYnVmLgorCistIHZpZGVvYnVmX2lvbG9jaygpCisgIFByZXBhcmVzIHRoZSB2aWRlb2J1ZiBtZW1vcnkgZm9yIHRoZSBwcm9wZXIgbWV0aG9kIChyZWFkLCBtbWFwLCBvdmVybGF5KS4KKworLSB2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCkKKyAgQ2hlY2tzIGlmIGEgdmlkZW9idWYgaXMgc3RyZWFtaW5nLgorCistIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgpCisgIFN0b3BzIHZpZGVvIGhhbmRsaW5nLgorCistIHZpZGVvYnVmX21tYXBfZnJlZSgpCisgIGZyZWVzIG1tYXAgYnVmZmVycy4KKworLSB2aWRlb2J1Zl9zdG9wKCkKKyAgU3RvcHMgdmlkZW8gaGFuZGxpbmcsIGVuZHMgbW1hcCBhbmQgZnJlZXMgbW1hcCBhbmQgb3RoZXIgYnVmZmVycy4KKworLSBWNEwyIGFwaSBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBjb3JyZXNwb25kIHRvIFZJRElPQ19mb28gaW9jdGxzOgorICAgdmlkZW9idWZfcmVxYnVmcygpLCB2aWRlb2J1Zl9xdWVyeWJ1ZigpLCB2aWRlb2J1Zl9xYnVmKCksCisgICB2aWRlb2J1Zl9kcWJ1ZigpLCB2aWRlb2J1Zl9zdHJlYW1vbigpLCB2aWRlb2J1Zl9zdHJlYW1vZmYoKS4KKworLSBWNEwxIGFwaSBmdW5jdGlvbiAoY29ycmVzcG9uZHMgdG8gVklESU9DTUJVRiBpb2N0bCk6CisgICB2aWRlb2J1Zl9jZ21idWYoKQorICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFY0TDEKKyAgICAgIEFQSS4KKworLSBTb21lIGhlbHAgZnVuY3Rpb25zIGZvciByZWFkKCkvcG9sbCgpIG9wZXJhdGlvbnM6CisgICB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpCisgICAgICBGb3IgY29udGludW91cyBzdHJlYW0gcmVhZCgpCisgICB2aWRlb2J1Zl9yZWFkX29uZSgpCisgICAgICBGb3Igc25hcHNob3QgcmVhZCgpCisgICB2aWRlb2J1Zl9wb2xsX3N0cmVhbSgpCisgICAgICBwb2xsaW5nIGhlbHAgZnVuY3Rpb24KKworVGhlIGJldHRlciB3YXkgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0YWtlIGEgbG9vayBhdCB2aXZpIGRyaXZlci4gT25lCitvZiB0aGUgbWFpbiByZWFzb25zIGZvciB2aXZpIGlzIHRvIGJlIGEgdmlkZW9idWYgdXNhZ2UgZXhhbXBsZS4gdGhlCit2aXZpX3RocmVhZF90aWNrKCkgZG9lcyB0aGUgdGFzayB0aGF0IHRoZSBJUlEgY2FsbGJhY2sgd291bGQgZG8gb24gUENJCitkcml2ZXJzIChvciB0aGUgaXJxIGNhbGxiYWNrIG9uIFVTQikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jCmluZGV4IGQ2ZTcwYmUuLjA1NzY5Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jCkBAIC0xMDUsOCArMTA1LDggQEAKICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgdnBpYzsKIAogICB1bnNpZ25lZCBjaGFyICpidWZmZXIsICpzcmM7Ci0gIGludCBicHAgPSAyNCwgciwgZywgYjsKLSAgdW5zaWduZWQgaW50IGksIHNyY19kZXB0aDsKKyAgaW50IGJwcCA9IDI0LCByID0gMCwgZyA9IDAsIGIgPSAwOworICB1bnNpZ25lZCBpbnQgaSwgc3JjX2RlcHRoID0gMTY7CiAKICAgaWYgKGZkIDwgMCkgewogICAgIHBlcnJvcihWSURFT19ERVYpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQKaW5kZXggNWM4MWUzYS4uN2YzZDE5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0CkBAIC02NSwzICs2NSw0IEBACiAweDA2ZDYgIDB4MDAzYiAgIFRydXN0ICAgICAgICAgICBQb3dlcmNAbSA5NzBaCiAweDBhMTcgIDB4MDA0ZSAgIFBlbnRheCAgICAgICAgICBPcHRpbyA1MAogMHgwNDFlICAweDQwNWQgICBDcmVhdGl2ZSAgICAgICAgRGlWaSBDQU0gNTE2CisweDA4Y2EgIDB4MjEwMiAgIEFpcHRlayAgICAgICAgICBEViBUMzAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3YjFhMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dApAQCAtMCwwICsxLDEwMSBAQAorCitNaW5pLUhPV1RPIGZvciB1c2luZyB0aGUgZWFybHlwcmludGs9ZGJncCBib290IG9wdGlvbiB3aXRoIGEKK1VTQjIgRGVidWcgcG9ydCBrZXkgYW5kIGEgZGVidWcgY2FibGUsIG9uIHg4NiBzeXN0ZW1zLgorCitZb3UgbmVlZCB0d28gY29tcHV0ZXJzLCB0aGUgJ1VTQiBkZWJ1ZyBrZXknIHNwZWNpYWwgZ2FkZ2V0IGFuZAorYW5kIHR3byBVU0IgY2FibGVzLCBjb25uZWN0ZWQgbGlrZSB0aGlzOgorCisgIFtob3N0L3RhcmdldF0gPC0tLS0tLS0+IFtVU0IgZGVidWcga2V5XSA8LS0tLS0tLT4gW2NsaWVudC9jb25zb2xlXQorCisxLiBUaGVyZSBhcmUgdGhyZWUgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzOgorCisgYS4pIEhvc3QvdGFyZ2V0IHN5c3RlbSBuZWVkcyB0byBoYXZlIFVTQiBkZWJ1ZyBwb3J0IGNhcGFiaWxpdHkuCisKKyBZb3UgY2FuIGNoZWNrIHRoaXMgY2FwYWJpbGl0eSBieSBsb29raW5nIGF0IGEgJ0RlYnVnIHBvcnQnIGJpdCBpbgorIHRoZSBsc3BjaSAtdnZ2IG91dHB1dDoKKworICMgbHNwY2kgLXZ2dgorIC4uLgorIDAwOjFkLjcgVVNCIENvbnRyb2xsZXI6IEludGVsIENvcnBvcmF0aW9uIDgyODAxSCAoSUNIOCBGYW1pbHkpIFVTQjIgRUhDSSBDb250cm9sbGVyICMxIChyZXYgMDMpIChwcm9nLWlmIDIwIFtFSENJXSkKKyAgICAgICAgIFN1YnN5c3RlbTogTGVub3ZvIFRoaW5rUGFkIFQ2MQorICAgICAgICAgQ29udHJvbDogSS9PLSBNZW0rIEJ1c01hc3RlcisgU3BlY0N5Y2xlLSBNZW1XSU5WLSBWR0FTbm9vcC0gUGFyRXJyLSBTdGVwcGluZy0gU0VSUisgRmFzdEIyQi0gRGlzSU5UeC0KKyAgICAgICAgIFN0YXR1czogQ2FwKyA2Nk1Iei0gVURGLSBGYXN0QjJCKyBQYXJFcnItIERFVlNFTD1tZWRpdW0gPlRBYm9ydC0gPFRBYm9ydC0gPE1BYm9ydC0gPlNFUlItIDxQRVJSLSBJTlR4LQorICAgICAgICAgTGF0ZW5jeTogMAorICAgICAgICAgSW50ZXJydXB0OiBwaW4gRCByb3V0ZWQgdG8gSVJRIDE5CisgICAgICAgICBSZWdpb24gMDogTWVtb3J5IGF0IGZlMjI3MDAwICgzMi1iaXQsIG5vbi1wcmVmZXRjaGFibGUpIFtzaXplPTFLXQorICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbNTBdIFBvd2VyIE1hbmFnZW1lbnQgdmVyc2lvbiAyCisgICAgICAgICAgICAgICAgIEZsYWdzOiBQTUVDbGstIERTSS0gRDEtIEQyLSBBdXhDdXJyZW50PTM3NW1BIFBNRShEMCssRDEtLEQyLSxEM2hvdCssRDNjb2xkKykKKyAgICAgICAgICAgICAgICAgU3RhdHVzOiBEMCBQTUUtRW5hYmxlLSBEU2VsPTAgRFNjYWxlPTAgUE1FKworICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbNThdIERlYnVnIHBvcnQ6IEJBUj0xIG9mZnNldD0wMGEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl4gPD09PT09PT09PT09PT09PT09PT09IFsgSEVSRSBdCisJIEtlcm5lbCBkcml2ZXIgaW4gdXNlOiBlaGNpX2hjZAorICAgICAgICAgS2VybmVsIG1vZHVsZXM6IGVoY2ktaGNkCisgLi4uCisKKyggSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgbGlzdCBhIGRlYnVnIHBvcnQgY2FwYWJpbGl0eSB0aGVuIHlvdSBwcm9iYWJseQorICB3b250IGJlIGFibGUgdG8gdXNlIHRoZSBVU0IgZGVidWcga2V5LiApCisKKyBiLikgWW91IGFsc28gbmVlZCBhIE5ldGNoaXAgVVNCIGRlYnVnIGNhYmxlL2tleToKKworICAgICAgICBodHRwOi8vd3d3LnBseHRlY2guY29tL3Byb2R1Y3RzL05FVDIwMDAvTkVUMjBEQy9kZWZhdWx0LmFzcAorCisgICAgIFRoaXMgaXMgYSBzbWFsbCBibHVlIHBsYXN0aWMgY29ubmVjdG9yIHdpdGggdHdvIFVTQiBjb25uZWN0aW9ucywKKyAgICAgaXQgZHJhd3MgcG93ZXIgZnJvbSBpdHMgVVNCIGNvbm5lY3Rpb25zLgorCisgYy4pIFRoaXJkbHksIHlvdSBuZWVkIGEgc2Vjb25kIGNsaWVudC9jb25zb2xlIHN5c3RlbSB3aXRoIGEgcmVndWxhciBVU0IgcG9ydC4KKworMi4gU29mdHdhcmUgcmVxdWlyZW1lbnRzOgorCisgYS4pIE9uIHRoZSBob3N0L3RhcmdldCBzeXN0ZW06CisKKyAgICBZb3UgbmVlZCB0byBlbmFibGUgdGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlnIG9wdGlvbjoKKworICAgICAgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQPXkKKworICAgIEFuZCB5b3UgbmVlZCB0byBhZGQgdGhlIGJvb3QgY29tbWFuZCBsaW5lOiAiZWFybHlwcmludGs9ZGJncCIuCisgICAgKElmIHlvdSBhcmUgdXNpbmcgR3J1YiwgYXBwZW5kIGl0IHRvIHRoZSAna2VybmVsJyBsaW5lIGluCisgICAgIC9ldGMvZ3J1Yi5jb25mKQorCisgICAgTk9URTogbm9ybWFsbHkgZWFybHlwcmludGsgY29uc29sZSBnZXRzIHR1cm5lZCBvZmYgb25jZSB0aGUKKyAgICByZWd1bGFyIGNvbnNvbGUgaXMgYWxpdmUgLSB1c2UgImVhcmx5cHJpbnRrPWRiZ3Asa2VlcCIgdG8ga2VlcAorICAgIHRoaXMgY2hhbm5lbCBvcGVuIGJleW9uZCBlYXJseSBib290dXAuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IKKyAgICBkZWJ1Z2dpbmcgY3Jhc2hlcyB1bmRlciBYb3JnLCBldGMuCisKKyBiLikgT24gdGhlIGNsaWVudC9jb25zb2xlIHN5c3RlbToKKworICAgIFlvdSBzaG91bGQgZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZyBvcHRpb246CisKKyAgICAgIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHPXkKKworICAgIE9uIHRoZSBuZXh0IGJvb3R1cCB3aXRoIHRoZSBtb2RpZmllZCBrZXJuZWwgeW91IHNob3VsZAorICAgIGdldCBhIC9kZXYvdHR5VVNCeCBkZXZpY2UocykuCisKKyAgICBOb3cgdGhpcyBjaGFubmVsIG9mIGtlcm5lbCBtZXNzYWdlcyBpcyByZWFkeSB0byBiZSB1c2VkOiBzdGFydAorICAgIHlvdXIgZmF2b3JpdGUgdGVybWluYWwgZW11bGF0b3IgKG1pbmljb20sIGV0Yy4pIGFuZCBzZXQKKyAgICBpdCB1cCB0byB1c2UgL2Rldi90dHlVU0IwIC0gb3IgdXNlIGEgcmF3ICdjYXQgL2Rldi90dHlVU0J4JyB0bworICAgIHNlZSB0aGUgcmF3IG91dHB1dC4KKworIGMuKSBPbiBOdmlkaWEgU291dGhicmlkZ2UgYmFzZWQgc3lzdGVtczogdGhlIGtlcm5lbCB3aWxsIHRyeSB0byBwcm9iZQorICAgICBhbmQgZmluZCBvdXQgd2hpY2ggcG9ydCBoYXMgZGVidWcgZGV2aWNlIGNvbm5lY3RlZC4KKworMy4gVGVzdGluZyB0aGF0IGl0IHdvcmtzIGZpbmU6CisKKyAgIFlvdSBjYW4gdGVzdCB0aGUgb3V0cHV0IGJ5IHVzaW5nIGVhcmx5cHJpbnRrPWRiZ3Asa2VlcCBhbmQgcHJvdm9raW5nCisgICBrZXJuZWwgbWVzc2FnZXMgb24gdGhlIGhvc3QvdGFyZ2V0IHN5c3RlbS4gWW91IGNhbiBwcm92b2tlIGEgaGFybWxlc3MKKyAgIGtlcm5lbCBtZXNzYWdlIGJ5IGZvciBleGFtcGxlIGRvaW5nOgorCisgICAgIGVjaG8gaCA+IC9wcm9jL3N5c3JxLXRyaWdnZXIKKworICAgT24gdGhlIGhvc3QvdGFyZ2V0IHN5c3RlbSB5b3Ugc2hvdWxkIHNlZSB0aGlzIGhlbHAgbGluZSBpbiAiZG1lc2ciIG91dHB1dDoKKworICAgICBTeXNScSA6IEhFTFAgOiBsb2dsZXZlbCgwLTkpIHJlQm9vdCBDcmFzaGR1bXAgdGVybWluYXRlLWFsbC10YXNrcyhFKSBtZW1vcnktZnVsbC1vb20ta2lsbChGKSBraWxsLWFsbC10YXNrcyhJKSBzYUsgc2hvdy1iYWNrdHJhY2UtYWxsLWFjdGl2ZS1jcHVzKEwpIHNob3ctbWVtb3J5LXVzYWdlKE0pIG5pY2UtYWxsLVJULXRhc2tzKE4pIHBvd2VyT2ZmIHNob3ctcmVnaXN0ZXJzKFApIHNob3ctYWxsLXRpbWVycyhRKSB1blJhdyBTeW5jIHNob3ctdGFzay1zdGF0ZXMoVCkgVW5tb3VudCBzaG93LWJsb2NrZWQtdGFza3MoVykgZHVtcC1mdHJhY2UtYnVmZmVyKFopCisKKyAgIE9uIHRoZSBjbGllbnQvY29uc29sZSBzeXN0ZW0gZG86CisKKyAgICAgICBjYXQgL2Rldi90dHlVU0IwCisKKyAgIEFuZCB5b3Ugc2hvdWxkIHNlZSB0aGUgaGVscCBsaW5lIGFib3ZlIGRpc3BsYXllZCBzaG9ydGx5IGFmdGVyIHlvdSd2ZQorICAgcHJvdm9rZWQgaXQgb24gdGhlIGhvc3Qgc3lzdGVtLgorCitJZiBpdCBkb2VzIG5vdCB3b3JrIHRoZW4gcGxlYXNlIGFzayBhYm91dCBpdCBvbiB0aGUgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworbWFpbGluZyBsaXN0IG9yIGNvbnRhY3QgdGhlIHg4NiBtYWludGFpbmVycy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZDhhNGM4ZC4uYzVmNGU5ZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTUwMiw2ICs1MDIsMTMgQEAKIE06CXJwdXJkaWVAcnBzeXMubmV0CiBTOglNYWludGFpbmVkCiAKK0FSTS9DT1JUSU5BIFNZU1RFTVMgR0VNSU5JIEFSTSBBUkNISVRFQ1RVUkUKK1A6CVBhdWxpdXMgWmFsZWNrYXMKK006CXBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitUOglnaXQgZ2l0b3Jpb3VzLm9yZy9saW51eC1nZW1pbmkvbWFpbmxpbmUuZ2l0CitTOglNYWludGFpbmVkCisKIEFSTS9FWlggU01BUlRQSE9ORVMgKEE3ODAsIEE5MTAsIEExMjAwLCBFNjgwLCBST0tSIEUyIGFuZCBST0tSIEU2KQogUDoJRGFuaWVsIFJpYmVpcm8KIE06CWRyd3lybUBnbWFpbC5jb20KQEAgLTUxMyw2ICs1MjAsMTIgQEAKIFc6CWh0dHA6Ly93d3cub3BlbmV6eC5vcmcvCiBTOglNYWludGFpbmVkCiAKK0FSTS9GQVJBREFZIEZBNTI2IFBPUlQKK1A6CVBhdWxpdXMgWmFsZWNrYXMKK006CXBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKIEFSTS9GUkVFU0NBTEUgSU1YIC8gTVhDIEFSTSBBUkNISVRFQ1RVUkUKIFA6CVNhc2NoYSBIYXVlcgogTToJa2VybmVsQHBlbmd1dHJvbml4LmRlCkBAIC02MjIsNyArNjM1LDcgQEAKIE06CWRpcmtAb3BmZXItb25saW5lLmRlCiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFggU1VQUE9SVAorQVJNL1BBTE1UWCxQQUxNVDUsUEFMTUxEIFNVUFBPUlQKIFA6CU1hcmVrIFZhc3V0CiBNOgltYXJlay52YXN1dEBnbWFpbC5jb20KIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KQEAgLTEwNTAsNyArMTA2Myw2IEBACiBQOglNYXVybyBDYXJ2YWxobyBDaGVoYWIKIE06CW1jaGVoYWJAaW5mcmFkZWFkLm9yZwogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCi1MOgl2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20KIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9tY2hlaGFiL2xpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKQEAgLTM1NzAsNiArMzU4MiwyMiBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCitQWEExNjggU1VQUE9SVAorUDoJRXJpYyBNaWFvCitNOgllcmljLm1pYW9AbWFydmVsbC5jb20KK1A6CUphc29uIENoYWdhcworTToJamFzb24uY2hhZ2FzQG1hcnZlbGwuY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3ljbWlhby9weGEtbGludXgtMi42LmdpdAorUzoJU3VwcG9ydGVkCisKK1BYQTkxMCBTVVBQT1JUCitQOglFcmljIE1pYW8KK006CWVyaWMubWlhb0BtYXJ2ZWxsLmNvbQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKK1M6CVN1cHBvcnRlZAorCiBQWEEgTU1DSSBEUklWRVIKIFM6CU9ycGhhbgogCkBAIC00ODA2LDcgKzQ4MzQsNiBAQAogUDoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCiBNOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCBkYmZkZjg3Li5lMDJiODkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTI0MSw2ICsyNDEsNyBAQAogY29uZmlnIEFSQ0hfQVQ5MQogCWJvb2wgIkF0bWVsIEFUOTEiCiAJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBIQVZFX0NMSwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBBdG1lbCBBVDkxUk05MjAwLApAQCAtMjc1LDYgKzI3NiwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ2lycnVzIEVQOTN4eCBzZXJpZXMgb2YgQ1BVcy4KIAorY29uZmlnIEFSQ0hfR0VNSU5JCisJYm9vbCAiQ29ydGluYSBTeXN0ZW1zIEdlbWluaSIKKwlzZWxlY3QgQ1BVX0ZBNTI2CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBDb3J0aW5hIFN5c3RlbXMgR2VtaW5pIGZhbWlseSBTb0NzCisKIGNvbmZpZyBBUkNIX0ZPT1RCUklER0UKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBDUFVfU0ExMTAKQEAgLTQ3NywxMiArNDg2LDI5IEBACiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBUSUNLX09ORVNIT1QKKwlzZWxlY3QgUExBVF9QWEEKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbC9NYXJ2ZWxsJ3MgUFhBMnh4L1BYQTN4eCBwcm9jZXNzb3IgbGluZS4KIAorY29uZmlnIEFSQ0hfTU1QCisJYm9vbCAiTWFydmVsbCBQWEExNjgvOTEwIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IFRJQ0tfT05FU0hPVAorCXNlbGVjdCBQTEFUX1BYQQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE1hcnZlbGwncyBQWEExNjgvOTEwIHByb2Nlc3NvciBsaW5lLgorCiBjb25maWcgQVJDSF9SUEMKIAlib29sICJSaXNjUEMiCiAJc2VsZWN0IEFSQ0hfQUNPUk4KQEAgLTU5OCw2ICs2MjQsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWciCisKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pb3AzMngvS2NvbmZpZyIKQEAgLTYxNyw2ICs2NDUsOSBAQAogc291cmNlICJhcmNoL2FybS9tYWNoLW12Nzh4eDAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LXB4YS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbW1wL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyIKIApAQCAtNjg2LDEyICs3MTcsMTUgQEAKIGNvbmZpZyBQTEFUX09SSU9OCiAJYm9vbAogCitjb25maWcgUExBVF9QWEEKKwlib29sCisKIHNvdXJjZSBhcmNoL2FybS9tbS9LY29uZmlnCiAKIGNvbmZpZyBJV01NWFQKIAlib29sICJFbmFibGUgaVdNTVh0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDUFVfWFNDQUxFIHx8IENQVV9YU0MzCi0JZGVmYXVsdCB5IGlmIFBYQTI3eCB8fCBQWEEzeHgKKwlkZXBlbmRzIG9uIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX01PSEFXSworCWRlZmF1bHQgeSBpZiBQWEEyN3ggfHwgUFhBM3h4IHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGlXTU1YdCBjb250ZXh0IHN3aXRjaGluZyBhdCBydW4gdGltZSBpZgogCSAgcnVubmluZyBvbiBhIENQVSB0aGF0IHN1cHBvcnRzIGl0LgpAQCAtOTE1LDYgKzk0OSwyMyBAQAogCWRlZmF1bHQgIjIiCiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBISUdITUVNCisJYm9vbCAiSGlnaCBNZW1vcnkgU3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGUgYWRkcmVzcyBzcGFjZSBvZiBBUk0gcHJvY2Vzc29ycyBpcyBvbmx5IDQgR2lnYWJ5dGVzIGxhcmdlCisJICBhbmQgaXQgaGFzIHRvIGFjY29tbW9kYXRlIHVzZXIgYWRkcmVzcyBzcGFjZSwga2VybmVsIGFkZHJlc3MKKwkgIHNwYWNlIGFzIHdlbGwgYXMgc29tZSBtZW1vcnkgbWFwcGVkIElPLiBUaGF0IG1lYW5zIHRoYXQsIGlmIHlvdQorCSAgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgYW5kL29yIElPLCBub3QgYWxsIG9mIHRoZQorCSAgbWVtb3J5IGNhbiBiZSAicGVybWFuZW50bHkgbWFwcGVkIiBieSB0aGUga2VybmVsLiBUaGUgcGh5c2ljYWwKKwkgIG1lbW9yeSB0aGF0IGlzIG5vdCBwZXJtYW5lbnRseSBtYXBwZWQgaXMgY2FsbGVkICJoaWdoIG1lbW9yeSIuCisKKwkgIERlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQga2VybmVsL3VzZXIgbWVtb3J5IHNwbGl0LCBtaW5pbXVtCisJICB2bWFsbG9jIHNwYWNlIGFuZCBhY3R1YWwgYW1vdW50IG9mIFJBTSwgeW91IG1heSBub3QgbmVlZCB0aGlzCisJICBvcHRpb24gd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiBhIHNsaWdodGx5IGZhc3RlciBrZXJuZWwuCisKKwkgIElmIHVuc3VyZSwgc2F5IG4uCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEwOTIsNyArMTE0Myw3IEBACiAKIGNvbmZpZyBDUFVfRlJFUV9TQTExMDAKIAlib29sCi0JZGVwZW5kcyBvbiBDUFVfRlJFUSAmJiAoU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMCB8fCBTQTExMDBfSDM4MDAgfHwgU0ExMTAwX0xBUlQgfHwgU0ExMTAwX1BMRUIgfHwgU0ExMTAwX0JBREdFNCB8fCBTQTExMDBfSEFDS0tJVCkKKwlkZXBlbmRzIG9uIENQVV9GUkVRICYmIChTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwIHx8IFNBMTEwMF9MQVJUIHx8IFNBMTEwMF9QTEVCIHx8IFNBMTEwMF9CQURHRTQgfHwgU0ExMTAwX0hBQ0tLSVQpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBDUFVfRlJFUV9TQTExMTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDE5MmVlMDEuLmE3MWZkOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMiwxOCArMiwyOSBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCi0jIFJNSyB3YW50cyBhcm0ga2VybmVscyBjb21waWxlZCB3aXRoIGZyYW1lIHBvaW50ZXJzIHNvIGhhcmR3aXJlIHRoaXMgdG8geS4KKyMgUk1LIHdhbnRzIGFybSBrZXJuZWxzIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgb3Igc3RhY2sgdW53aW5kaW5nLgogIyBJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgYW5kIGFyZSB3aWxsaW5nIHRvIGxpdmUgd2l0aG91dCBzdGFjawogIyB0cmFjZXMsIHlvdSBjYW4gZ2V0IGEgc2xpZ2h0bHkgc21hbGxlciBrZXJuZWwgYnkgc2V0dGluZyB0aGlzIG9wdGlvbiB0bwogIyBuLCBidXQgdGhlbiBSTUsgd2lsbCBoYXZlIHRvIGtpbGwgeW91IDspLgogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sCi0JZGVmYXVsdCB5CisJZGVmYXVsdCB5IGlmICFBUk1fVU5XSU5ECiAJaGVscAogCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSByZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlciBhbmQKLQkgIGZhc3Rlci4gSG93ZXZlciwgd2hlbiBhIHByb2JsZW0gb2NjdXJzIHdpdGggdGhlIGtlcm5lbCwgdGhlCi0JICBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcG9ydGVkIGlzIHNldmVyZWx5IGxpbWl0ZWQuIE1vc3QgcGVvcGxlCi0JICBzaG91bGQgc2F5IFkgaGVyZS4KKwkgIGZhc3Rlci4gSG93ZXZlciwgaWYgbmVpdGhlciBGUkFNRV9QT0lOVEVSIG5vciBBUk1fVU5XSU5EIGFyZSBlbmFibGVkLAorCSAgd2hlbiBhIHByb2JsZW0gb2NjdXJzIHdpdGggdGhlIGtlcm5lbCwgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMKKwkgIHJlcG9ydGVkIGlzIHNldmVyZWx5IGxpbWl0ZWQuCisKK2NvbmZpZyBBUk1fVU5XSU5ECisJYm9vbCAiRW5hYmxlIHN0YWNrIHVud2luZGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdGFjayB1bndpbmRpbmcgc3VwcG9ydCBpbiB0aGUga2VybmVsCisJICB1c2luZyB0aGUgaW5mb3JtYXRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlCisJICBjb21waWxlci4gVGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2UgaXMgc2xpZ2h0bHkgYmlnZ2VyIGJ1dAorCSAgdGhlIHBlcmZvcm1hbmNlIGlzIG5vdCBhZmZlY3RlZC4gQ3VycmVudGx5LCB0aGlzIGZlYXR1cmUKKwkgIG9ubHkgd29ya3Mgd2l0aCBFQUJJIGNvbXBpbGVycy4gSWYgdW5zdXJlIHNheSBZLgogCiBjb25maWcgREVCVUdfVVNFUgogCWJvb2wgIlZlcmJvc2UgdXNlciBmYXVsdCBtZXNzYWdlcyIKQEAgLTY2LDcgKzc3LDcgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdCB0aGVpcgogCSAgb3V0cHV0IHRvIHRoZSBFbWJlZGRlZElDRSBtYWNyb2NlbGwncyBEQ0MgY2hhbm5lbCB1c2luZwogCSAgY28tcHJvY2Vzc29yIDE0LiBUaGlzIGlzIGtub3duIHRvIHdvcmsgb24gdGhlIEFSTTkgc3R5bGUgSUNFCi0JICBjaGFubmVsLgorCSAgY2hhbm5lbCBhbmQgb24gdGhlIFhTY2FsZSB3aXRoIHRoZSBQRUVESS4KIAogCSAgSXQgZG9lcyBpbmNsdWRlIGEgdGltZW91dCB0byBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIGRvZXMgbm90CiAJICB0b3RhbGx5IGZyZWV6ZSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgY29ubmVjdGVkIHRvIHJlYWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDI0ZTBmMDEuLmU4NDcyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC03Miw2ICs3Miw3IEBACiB0dW5lLSQoQ09ORklHX0NQVV9BUk05MjJUKQk6PS1tdHVuZT1hcm05dGRtaQogdHVuZS0kKENPTkZJR19DUFVfQVJNOTI1VCkJOj0tbXR1bmU9YXJtOXRkbWkKIHR1bmUtJChDT05GSUdfQ1BVX0FSTTkyNlQpCTo9LW10dW5lPWFybTl0ZG1pCit0dW5lLSQoQ09ORklHX0NQVV9GQTUyNikJOj0tbXR1bmU9YXJtOXRkbWkKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwMCkJOj0tbXR1bmU9c3Ryb25nYXJtMTEwMAogdHVuZS0kKENPTkZJR19DUFVfWFNDQUxFKQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXhzY2FsZSwtbXR1bmU9c3Ryb25nYXJtMTEwKSAtV2EsLW1jcHU9eHNjYWxlCkBAIC04NSw2ICs4NiwxMCBAQAogQ0ZMQUdTX0FCSQk6PSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0FSTV9VTldJTkQpLHkpCitDRkxBR1NfQUJJCSs9LWZ1bndpbmQtdGFibGVzCitlbmRpZgorCiAjIE5lZWQgLVVhcm0gZm9yIGdjYyA8IDMueAogS0JVSUxEX0NGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAkKGNhbGwgY2Mtb3B0aW9uLC1tc2hvcnQtbG9hZC1ieXRlcywkKGNhbGwgY2Mtb3B0aW9uLC1tYWxpZ25tZW50LXRyYXBzLCkpIC1tc29mdC1mbG9hdCAtVWFybQogS0JVSUxEX0FGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAtbXNvZnQtZmxvYXQKQEAgLTEwNSw4ICsxMTAsMTEgQEAKICB0ZXh0b2ZzLSQoQ09ORklHX1NBMTExMSkJICAgOj0gMHgwMDIwODAwMAogZW5kaWYKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUFhBKQkgICA6PSBweGEKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTU1QKQkgICA6PSBtbXAKKyAgICBwbGF0LSQoQ09ORklHX1BMQVRfUFhBKQkgICA6PSBweGEKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTDcyMDApCSAgIDo9IGw3MjAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpIDo9IGludGVncmF0b3IKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfR0VNSU5JKSAgICAgOj0gZ2VtaW5pCiAgdGV4dG9mcy0kKENPTkZJR19BUkNIX0NMUFM3MTFYKSAgIDo9IDB4MDAwMjgwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gY2xwczcxMXgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSU9QMzJYKQkgICA6PSBpb3AzMngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDc3ZDYxNDIzLi5iMzcxZmJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTI3LDYgKzI3LDEyIEBACiAJCS5tYWNybwl3cml0ZWIsIGNoLCByYgogCQltY3IJcDE0LCAwLCBcY2gsIGMwLCBjNSwgMAogCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKwkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCisJCW1jcglwMTQsIDAsIFxjaCwgYzgsIGMwLCAwCisJCS5lbmRtCiAjZWxzZQogCQkubWFjcm8JbG9hZHNwLCByYgogCQkuZW5kbQpAQCAtNDU5LDYgKzQ2NSwyMCBAQAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CUAgSVNCCiAJCW1vdglwYywgcjEyCiAKK19fZmE1MjZfY2FjaGVfb246CisJCW1vdglyMTIsIGxyCisJCWJsCV9fc2V0dXBfbW11CisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAlAIEludmFsaWRhdGUgd2hvbGUgY2FjaGUKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIFVUTEIKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwkJb3JyCXIwLCByMCwgIzB4MTAwMAkJQCBJLWNhY2hlIGVuYWJsZQorCQlibAlfX2NvbW1vbl9tbXVfY2FjaGVfb24KKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCUAgZmx1c2ggVVRMQgorCQltb3YJcGMsIHIxMgorCiBfX2FybTZfbW11X2NhY2hlX29uOgogCQltb3YJcjEyLCBscgogCQlibAlfX3NldHVwX21tdQpAQCAtNjMwLDEyICs2NTAsMzAgQEAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCisJCS53b3JkCTB4NTYxNTgwMDAJCUAgUFhBMTY4CisJCS53b3JkCTB4ZmZmZmYwMDAKKwkJYiBfX2FybXY0X21tdV9jYWNoZV9vbgorCQliIF9fYXJtdjRfbW11X2NhY2hlX29mZgorCQliIF9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisKKwkJLndvcmQJMHg1NjA1NjkzMAorCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQorCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwogCQkud29yZAkweDU2MDUwMDAwCQlAIEZlcm9jZW9uCiAJCS53b3JkCTB4ZmYwZjAwMDAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vbgogCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCiAKKwkJLndvcmQJMHg2NjAxNTI2MQkJQCBGQTUyNgorCQkud29yZAkweGZmMDFmZmYxCisJCWIJX19mYTUyNl9jYWNoZV9vbgorCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQliCV9fZmE1MjZfY2FjaGVfZmx1c2gKKwogCQlAIFRoZXNlIG1hdGNoIG9uIHRoZSBhcmNoaXRlY3R1cmUgSUQKIAogCQkud29yZAkweDAwMDIwMDAwCQlAIEFSTXY0VApAQCAtNzc1LDYgKzgxMywxMiBAQAogCQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCiAJCW1vdglwYywgbHIKIAkJCitfX2ZhNTI2X2NhY2hlX2ZsdXNoOgorCQltb3YJcjEsICMwCisJCW1jcglwMTUsIDAsIHIxLCBjNywgYzE0LCAwCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBjYWNoZQorCQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCUAgZmx1c2ggSSBjYWNoZQorCQltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCisJCW1vdglwYywgbHIKIAogX19hcm12Nl9tbXVfY2FjaGVfZmx1c2g6CiAJCW1vdglyMSwgIzAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNmYzA4NDEuLjM5M2M4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtNDYsNiArNDYsMjEgQEAKIAogCWFzbSgibWNyIHAxNCwgMCwgJTAsIGMwLCBjNSwgMCIgOiA6ICJyIiAoY2gpKTsKIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCisKK3N0YXRpYyB2b2lkIGljZWRjY19wdXRjKGludCBjaCkKK3sKKwlpbnQgc3RhdHVzLCBpID0gMHg0MDAwMDAwOworCisJZG8geworCQlpZiAoLS1pIDwgMCkKKwkJCXJldHVybjsKKworCQlhc20gdm9sYXRpbGUgKCJtcmMgcDE0LCAwLCAlMCwgYzE0LCBjMCwgMCIgOiAiPXIiIChzdGF0dXMpKTsKKwl9IHdoaWxlIChzdGF0dXMgJiAoMSA8PCAyOCkpOworCisJYXNtKCJtY3IgcDE0LCAwLCAlMCwgYzgsIGMwLCAwIiA6IDogInIiIChjaCkpOworfQogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4gYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KaW5kZXggMTUzYTA3ZS4uYTU5MjRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgpAQCAtMTEsNiArMTEsMTEgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7CisgIC9ESVNDQVJELyA6IHsKKyAgICAqKC5BUk0uZXhpZHgqKQorICAgICooLkFSTS5leHRhYiopCisgIH0KKwogICAuID0gVEVYVF9TVEFSVDsKICAgX3RleHQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKaW5kZXggMTAzN2JiYS4uNTU4OTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwpAQCAtNjIsOSArNjIsOCBAQAogCXJldHVybiBjbGs7CiB9CiAKLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3N5cyhjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKLQljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwpAQCAtNzUsNiArNzQsMTQgQEAKIAogCXJldHVybiBjbGsgPyBjbGsgOiBFUlJfUFRSKC1FTk9FTlQpOwogfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3N5cyk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJY29uc3QgY2hhciAqZGV2X2lkID0gZGV2ID8gZGV2X25hbWUoZGV2KSA6IE5VTEw7CisKKwlyZXR1cm4gY2xrX2dldF9zeXMoZGV2X2lkLCBjb25faWQpOworfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwppbmRleCBmMDMwZjA3Li43MzRhYzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CkBAIC0zNDksNiArMzUwLDEyIEBACiAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJZGV2X2VycihkZXYsICJETUEgYnVmZmVyIGJvdW5jaW5nIG9mIEhJR0hNRU0gcGFnZXMgIgorCQkJICAgICAiaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiB+MDsKKwl9CisKIAlyZXR1cm4gbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKaW5kZXggNjk3YzY0OS4uNzcxM2EwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKQEAgLTEyNCwzNyArMTI0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgc2hvcnQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpCi17Ci0JdW5zaWduZWQgc2hvcnQgZ3Bpb19iaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQlncGlvX2JpdCA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKSB8IGJpdDsKLQlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQotCXJldHVybiBncGlvX2JpdDsKLX0KLQotdW5zaWduZWQgc2hvcnQgcmVzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBncGlvX2JpdDsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCWdwaW9fYml0ID0gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpICYgfmJpdDsKLQlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQotCXJldHVybiBncGlvX2JpdDsKLX0KLQotRVhQT1JUX1NZTUJPTChzZXRfc2Nvb3BfZ3Bpbyk7Ci1FWFBPUlRfU1lNQk9MKHJlc2V0X3Njb29wX2dwaW8pOwotCiB1bnNpZ25lZCBzaG9ydCByZWFkX3Njb29wX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwppbmRleCA3ODBiYmY3Li4xNDBmMWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2hhcnBzbF9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWI0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMzMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1zaW10ZWMtbWljcmVsMQorIyBUdWUgRGVjIDE2IDEzOjMxOjM0IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0tTODY5NT15CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucworIworQ09ORklHX01BQ0hfS1M4Njk1PXkKK0NPTkZJR19NQUNIX0RTTTMyMD15CitDT05GSUdfTUFDSF9BQ1M1Sz15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKK0NPTkZJR19QQ0lfREVCVUc9eQorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPXkKK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkRfTk9OU1RBVElDPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0FSTV9LUzg2OTVfRVRIRVI9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorQ09ORklHX1BSSVNNNTQ9bQorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0tTODY5NT15CitDT05GSUdfU0VSSUFMX0tTODY5NV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19BQ1M1S0NBTj15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorQ09ORklHX0dQSU9fUENBOTUzWD15CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0tTODY5NV9XQVRDSERPRz15CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNkMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZwpAQCAtMCwwICsxLDk0MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXNpbXRlYy1taWNyZWwxCisjIFR1ZSBKYW4gIDYgMTM6MjM6MDcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0tTODY5NT15CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfTUFDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9EU00zMjAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfQUNTNUs9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIyVD15CitDT05GSUdfQ1BVXzMydjRUPXkKK0NPTkZJR19DUFVfQUJSVF9FVjRUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXVD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eUFNMCwxMTUyMDAgaW5pdD0vYmluL3NoIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BUk1fS1M4Njk1X0VUSEVSPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfS1M4Njk1PXkKK0NPTkZJR19TRVJJQUxfS1M4Njk1X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfQUNTNUtDQU49eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19QQ0E5NTNYPXkKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19LUzg2OTVfV0FUQ0hET0c9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MworIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCmluZGV4IGIxY2QzMzEuLmM2NmRkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpAQCAtODksNyArODksNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwppbmRleCA4MDIyMmZlLi5mMjY0ODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCkBAIC05MSw3ICs5MSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfQkFER0U0PXkKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKaW5kZXggZWUxMzBiNS4uMmI0YzA2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKQEAgLTkzLDcgKzkzLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCmluZGV4IDEwMzlmMzY2Li43OTdiNzkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4Ci0jIFN1biBPY3QgIDUgMTE6MDU6MzYgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgorIyBTdW4gRmViICAxIDE2OjMxOjM2IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQpAQCAtNDcsMTIgKzQ2LDEyIEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0VSX1NDSEVEPXkKICMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTgwLDI3ICs3OSwyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0NMSz15Ci0jIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTEwOCwxMSArMTAxLDkgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMjksNiArMTIwLDExIEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtMTM4LDcgKzEzNCw2IEBACiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKQEAgLTE2NSwxNyArMTYwLDE5IEBACiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BQk9VTkNFPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAKICMKICMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKICMKICMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldApAQCAtMTg1LDcgKzE4Miw5IEBACiAjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAotQ09ORklHX01BQ0hfRU1fWDI3MD15CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKQEAgLTIwNCwxNCArMjAzLDYgQEAKICMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAogCiAjCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15CkBAIC0yMzIsNiArMjIzLDggQEAKICMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19JV01NWFQ9eQogQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0RNQUJPVU5DRT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTI0Miw2ICsyMzUsNyBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9bQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9bQpAQCAtMjg3LDE0ICsyODEsMTMgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTMyNyw2ICszMjAsOCBAQAogIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQogIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogCkBAIC0zNDUsNiArMzQwLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM4OSw2ICszODUsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zOTksNiArMzk2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtNDIwLDggKzQxOCw2IEBACiAjCiAjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX0JUX0hDSVVTQj1tCi1DT05GSUdfQlRfSENJVVNCX1NDTz15CiAjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CkBAIC00MzQsMTUgKzQzMCwxNSBAQAogIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPW0KICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY3LDYgKzQ2Myw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUyMSw5ICs1MTgsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUFhBMlhYPXkKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldApAQCAtNTM1LDYgKzUzMCw4IEBACiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1NjAsMTIgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NDUsOCBAQAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTc1NiwyNiArNzYxLDMwIEBACiBDT05GSUdfRE05MDAwPXkKIENPTkZJR19ETTkwMDBfREVCVUdMRVZFTD0xCiAjIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotQ09ORklHXzgxMzlUT089eQorQ09ORklHXzgxMzlUT089bQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKQEAgLTc4MywxMCArNzkyLDEyIEBACiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTc5Nyw4ICs4MDgsNiBAQAogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBUz1tCiAjIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAogIyBDT05GSUdfTElCRVJUQVNfQ1MgaXMgbm90IHNldApAQCAtODExLDEwICs4MjAsMTYgQEAKICMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODc5LDIyICs4OTQsMjIgQEAKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWD1tCi0jIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MDUgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYX01BSU5TVE9ORSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMD1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMyw2ICs5NDgsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CkBAIC0xMDA5LDI2ICsxMDI1LDQ1IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD1tCisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CiAKICMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIwogIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldApAQCAtMTA0MywxNyArMTA3OCwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCkBAIC0xMDY0LDExICsxMTAxLDE3IEBACiAjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19VQ0IxNDAwX0NPUkU9bQorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTA3NywxMyArMTEyMCwxMTcgQEAKICMKICMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCisjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9bQogCiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj1tCitDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFPXkKKyMgQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjcgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT0JVRl9HRU49bQorQ09ORklHX1ZJREVPQlVGX0RNQV9TRz1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorCisjCisjIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKKyMKKworIworIyBBdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0CisKKyMKKyMgTVBFRyB2aWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVYSVVNX09SSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1g4OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19JVlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAorQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1BYQTI3eD1tCisjIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC0xMDk1LDYgKzEyNDIsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC0xMTI4LDYgKzEyNzYsNyBAQAogIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTExMzgsMTMgKzEyODcsMTcgQEAKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKIENPTkZJR19GQl9NQlg9bQogIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtMTE2Nyw2ICsxMzIwLDcgQEAKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTE4Miw4MSArMTMzNiwxNiBAQAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVk1BU1RFUj15CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FSTT15CiBDT05GSUdfU05EX1BYQTJYWF9QQ009bQorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KK0NPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKIENPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENNQ0lBPXkKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPW0KQEAgLTEyNjksOSArMTM1OCwzNyBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMjkxLDEyICsxNDA4LDE1IEBACiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTMwNiw2ICsxNDI2LDggQEAKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCkBAIC0xMzE0LDIwICsxNDM2LDIwIEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogCiAjCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC0xMzU1LDYgKzE0NzcsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTM3MSwxMyArMTQ5NCwyMCBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9bQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz1tCiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CkBAIC0xMzg1LDExICsxNTE1LDEyIEBACiAjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfTU1DX1BYQT1tCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU0RSSUNPSF9DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTE0MDAsOCArMTUzMSw3IEBACiAjIExFRCBkcml2ZXJzCiAjCiAjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX0NNX1gyNzA9eQorQ09ORklHX0xFRFNfR1BJTz1tCiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogCiAjCkBAIC0xNDEwLDYgKzE1NDAsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CkBAIC0xNDQxLDM3ICsxNTcyLDQzIEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfVjMwMjA9eQogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKKyMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE0ODMsMTQgKzE2MjAsMTYgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE1MjAsMTUgKzE2NTksMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTU0OCw2ICsxNjg1LDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NjcsNiArMTcwNSw3IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NzgsMTkgKzE4MTcsMjkgQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNzA1LDEzICsxODU0LDE2IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMTc4MywxNCArMTkzNSwxOCBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9jb25maWdzL2NvbGlicmlfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwppbmRleCA3NDQwODZmLi40Y2YzYmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjMwotIyBNb24gRGVjICAzIDEzOjM2OjA5IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNjoxODoxNyAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC0xMiw2ICsxMiw3IEBACiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKQEAgLTIxLDggKzIyLDggQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNDIsMjIgKzQzLDMwIEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTcwLDI5ICs3OSwzOCBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCRD15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19MU0Y9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwNiw2ICsxMjQsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtMTE1LDkgKzEzNCw3IEBACiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKQEAgLTEzMSw0MSArMTQ4LDU4IEBACiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAKICMKICMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKICMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0NPTElCUkk9eQorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CiBDT05GSUdfUFhBMjd4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCisjIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTc0LDYgKzIwOCw3IEBACiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKIENPTkZJR19DUFVfQ1AxNT15CkBAIC0xODcsNiArMjIyLDcgQEAKICMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19JV01NWFQ9eQogQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0xOTgsMjggKzIzNCwzMyBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTIzMiw2ICsyNzMsMTIgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIAogIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgogIwogCkBAIC0yNDYsNiArMjkzLDggQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtMjUzLDIxICszMDIsMTggQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiBDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKICMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI3NSw2ICszMjEsNyBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzA0LDI2ICszNTEsMjYgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzMyLDcgKzM3OSw5IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiBDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAogIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKQEAgLTM0MiwxMiArMzkxLDE0IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KIAogIwpAQCAtMzgyLDE1ICs0MzMsNiBAQAogIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKIAogIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKICMgRklSIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDUyLDYgQEAKICMKICMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19CVF9IQ0lVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldApAQCAtNDE5LDIxICs0NjAsMjAgQEAKICMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAogQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CitDT05GSUdfTElCODAyMTE9eQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1dFUD15CitDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD15CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPXkKLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDQ4LDYgKzQ4OCw4IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTQ1Nyw5ICs0OTksMTEgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTUxMCw5ICs1NTQsNyBAQAogIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CkBAIC01MzgsNiArNTgwLDcgQEAKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVA9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQ9eQpAQCAtNTU2LDYgKzU5OSwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTY5LDM2ICs2MTcsNDEgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9OAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC02MTAsNyArNjYzLDYgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYzMSw2ICs2ODMsMTAgQEAKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjM4LDExICs2OTQsMTcgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQorQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKKyMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldApAQCAtNjU0LDEwICs3MTYsMTUgQEAKIENPTkZJR19XTEFOXzgwMjExPXkKICMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9TVEFQPXkKIENPTkZJR19IT1NUQVBfRklSTVdBUkU9eQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC02NzAsNyArNzM3LDYgQEAKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNzEwLDYgKzc3Niw3IEBACiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKQEAgLTcxOCwyMCArNzg1LDI1IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDA9eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KKyMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNzQ2LDkgKzgxOCwxMSBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY0LDQ1ICs4MzgsNTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QWEEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CkBAIC04MTEsMTYgKzg5MCwzNSBAQAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtODI4LDcgKzkyNiwxMCBAQAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKQEAgLTg0OCw2ICs5NDksNyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKQEAgLTg1Niw2ICs5NTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldApAQCAtODYzLDkgKzk2NiwxMiBAQAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODc5LDIzICs5ODUsNDYgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogQ09ORklHX0RBQj15CiAjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIApAQCAtOTA3LDYgKzEwMzYsNyBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtOTE0LDggKzEwNDQsOCBAQAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC05MjgsMTMgKzEwNTgsMjAgQEAKICMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC05NjQsMTIgKzExMDEsNyBAQAogQ09ORklHX0xPR09fTElOVVhfTU9OTz15CiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NzksMTggKzExMTEsMjYgQEAKICMgVVNCIElucHV0IERldmljZXMKICMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTk5OSwyOSArMTEzOSw0MCBAQAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFUlNJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogCiAjCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKQEAgLTEwMjksMTkgKzExODAsMTQgQEAKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogQ09ORklHX1VTQl9TRVJJQUw9bQorIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldApAQCAtMTA1OSw2ICsxMjA1LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKQEAgLTEwNjYsMTcgKzEyMTMsMjEgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMDg1LDcgKzEyMzYsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMTAxLDMwICsxMjUyLDI5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD1tCiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKIENPTkZJR19VU0JfRFVNTVlfSENEPW0KIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CkBAIC0xMTM0LDIxICsxMjg0LDMyIEBACiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiAjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0CiAKQEAgLTExNjMsNiArMTMyNCw4IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldApAQCAtMTE5MCw2ICsxMzUzLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzPW0KICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMTk5LDM2ICsxMzY1LDQ1IEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTI1NCwxNSArMTQyOSwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKQEAgLTEyODMsOSArMTQ1NiwxMyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTI5MywyMCArMTQ3MCwxOCBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMzYxLDkgKzE1MzYsNiBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9bQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMzcxLDYgKzE1NDMsNyBAQAogQ09ORklHX1BSSU5US19USU1FPXkKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKQEAgLTEzNzgsOSArMTU1MSwxMiBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKQEAgLTEzOTYsMTYgKzE1NzIsNDAgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKIApAQCAtMTQxNSw1OCArMTYxNSwxMTQgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKIENPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BRVM9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc0YTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTU2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMTY6MTM6MjAgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKworIworIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cworIworQ09ORklHX0NQVV9QWEEzMDA9eQorIyBDT05GSUdfQ1BVX1BYQTMxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUFhBMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9QWEE5MzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1BYQTkzNSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NPTElCUkkzMDA9eQorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1JBVU1GRUxEX1BST1RPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEzeHg9eQorIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0MzPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorQ09ORklHX0lPXzM2PXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19PVVRFUl9DQUNIRT15CitDT05GSUdfQ0FDSEVfWFNDM0wyPXkKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQVV9JRExFPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfQVg4ODc5Nj15CisjIENPTkZJR19BWDg4Nzk2XzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19ERUJVR19HUElPPXkKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwppbmRleCBmNzYyMmU2Li4xYWE2MjI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCkBAIC0xMTMsNyArMTEzLDYgQEAKIENPTkZJR19TQTExMDBfQ09MTElFPXkKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94bV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA3NCUKY29weSBmcm9tIGFyY2gvYXJtL2NvbmZpZ3MveG1feDJ4eF9kZWZjb25maWcKY29weSB0byBhcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCmluZGV4IDEwMzlmMzY2Li5lOTk1NWI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4Ci0jIFN1biBPY3QgIDUgMTE6MDU6MzYgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgorIyBTdW4gRmViICAxIDE2OjQzOjMxIDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTIyLDggKzIyLDYgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCkBAIC00NywxMiArNDUsMTIgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtODAsMjcgKzc4LDIwIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQ0xLPXkKLSMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTA4LDExICs5OSw5IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTI5LDYgKzExOCwxMSBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKIENPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIFR5cGUKQEAgLTEzOCw3ICsxMzIsNiBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CkBAIC0xNjUsMTcgKzE1OCwxOSBAQAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotQ09ORklHX0RNQUJPVU5DRT15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCiAjCiAjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKQEAgLTE4NSwzMyArMTgwLDI2IEBACiAjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9FTV9YMjcwPXkKK0NPTkZJR19NQUNIX0VYRURBPXkKICMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0FSTUNPUkU9eQorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKICMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAotQ09ORklHX1BYQTI1eD15CiBDT05GSUdfUFhBMjd4PXkKIENPTkZJR19QWEFfU1NQPXkKICMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAogCiAjCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15CkBAIC0yMzIsMzYgKzIyMCwxNCBAQAogIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0lXTU1YVD15CiBDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lfSE9TVF9JVEU4MTUyPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi1DT05GSUdfWUVOVEE9bQotIyBDT05GSUdfWUVOVEFfTzIgaXMgbm90IHNldAotIyBDT05GSUdfWUVOVEFfUklDT0ggaXMgbm90IHNldAotQ09ORklHX1lFTlRBX1RJPXkKLSMgQ09ORklHX1lFTlRBX0VORV9UVU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTlRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBX1BYQTJYWD1tCi1DT05GSUdfUENDQVJEX05PTlNUQVRJQz1tCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBGZWF0dXJlcwpAQCAtMjg3LDE0ICsyNTMsMTIgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTMwOSw3ICsyNzMsMjEgQEAKICMKICMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKICMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogCiAjCkBAIC0zMjcsNiArMzA1LDggQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtMzM4LDEzICszMTgsMTQgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLUNPTkZJR19BUE1fRU1VTEFUSU9OPW0KK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM4OSw2ICszNzAsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zOTksNiArMzgxLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtNDIwLDI5ICs0MDMsMjMgQEAKICMKICMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfQlRfSENJVVNCPW0KLUNPTkZJR19CVF9IQ0lVU0JfU0NPPXkKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCiAjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPW0KICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY3LDYgKzQ0NCw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUyMSwyMCArNDk5LDE4IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDQwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTUxLDMyICs1MjcsMzEgQEAKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfR1BJTz1tCisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0NNX1gyNzA9eQogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQogIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC02MjUsMTE3ICs2MDAsMTAgQEAKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9bQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFUQV9QQ01DSUE9bQotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNzQzLDc4ICs2MTEsNDcgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQogQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTEKICMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPTz15Ci0jIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAotIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCiAjIFdpcmVsZXNzIExBTgogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBUz1tCiAjIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfQ1MgaXMgbm90IHNldAogQ09ORklHX0xJQkVSVEFTX1NESU89bQogIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODIyLDEwICs2NTksNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQogQ09ORklHX1BQUF9GSUxURVI9eQpAQCAtODM4LDcgKzY3Miw2IEBACiAjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC04NjEsNyArNjk0LDcgQEAKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVBNUE9XRVIgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0FQTVBPV0VSPXkKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwpAQCAtODczLDE1ICs3MDYsMTggQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfUFhBMjd4PW0KLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldApAQCAtODk1LDYgKzczMSw3IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfTUFJTlNUT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC05MDIsNyArNzM5LDYgQEAKICMKIENPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CkBAIC05MTcsNyArNzUzLDYgQEAKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiBDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTMxLDI2ICs3NjYsMTYgQEAKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9bQpAQCAtOTYxLDI0ICs3ODYsNiBAQAogIwogCiAjCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKQEAgLTk5NSwxMSArODAyLDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC0xMDE1LDIwICs4MTcsMzkgQEAKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKQEAgLTEwMzgsMjIgKzg1OSwyOSBAQAogIwogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT15CisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfREE5MDMwPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA2NSwxMCArODkzLDE2IEBACiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorQ09ORklHX1BNSUNfREE5MDNYPXkKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTEwNzcsMjQgKzkxMSwxMjEgQEAKICMKICMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCisjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9bQogCiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj1tCitDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFPXkKKyMgQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjcgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT0JVRl9HRU49bQorQ09ORklHX1ZJREVPQlVGX0RNQV9TRz1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorCisjCisjIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKKyMKKworIworIyBBdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0CisKKyMKKyMgTVBFRyB2aWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQ0FNRVJBPW0KKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExPW0KKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9UVzk5MTAgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fUFhBMjd4PW0KKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorIyBDT05GSUdfVjRMX1VTQl9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTExMywzOCArMTA0NCwyNyBAQAogIwogIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwogIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKIENPTkZJR19GQl9NQlg9bQorIyBDT05GSUdfRkJfTUJYX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorQ09ORklHX0xDRF9URE8yNE09eQorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9EQTkwM1g9bQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTExNjcsNiArMTA4Nyw3IEBACiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTExODIsODIgKzExMDMsMjEgQEAKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZNQVNURVI9eQogQ09ORklHX1NORF9BQzk3X0NPREVDPW0KLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfUFhBMlhYX1BDTT1tCi1DT05GSUdfU05EX1BYQTJYWF9BQzk3PW0KLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDTUNJQT15Ci0jIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFhBMlhYX0xJQj1tCitDT05GSUdfU05EX1BYQTJYWF9MSUJfQUM5Nz15CisjIENPTkZJR19TTkRfUFhBMlhYX0FDOTcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPW0KK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfUFhBMlhYX1NPQz1tCitDT05GSUdfU05EX1BYQTJYWF9TT0NfQUM5Nz1tCitDT05GSUdfU05EX1BYQTJYWF9TT0NfRU1fWDI3MD1tCitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfV005NzEyPW0KICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQpAQCAtMTI2OSwxMyArMTEyOSw0MSBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTEyOTEsMjEgKzExNzksMjIgQEAKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMTQsMjAgKzEyMDMsMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEzNTUsNiArMTI0NCw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMzcxLDEzICsxMjYxLDE5IEBACiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPW0KICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgRHJpdmVycworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKIENPTkZJR19NTUNfQkxPQ0s9bQogQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQpAQCAtMTM4NSwxMiArMTI4MSwxMSBAQAogIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX01NQ19QWEE9bQogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TRFJJQ09IX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtMTQwMSw4ICsxMjk2LDggQEAKICMKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0xFRFNfQ01fWDI3MD15CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorQ09ORklHX0xFRFNfREE5MDNYPXkKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTE0MTAsNiArMTMwNSw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSUz15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKQEAgLTE0NDEsMzcgKzEzMzcsNDggQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9WMzAyMD15CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTQ4MywxNCArMTM5MCwxNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE1MjAsMTUgKzE0MzAsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTU0OCw2ICsxNDU2LDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NjcsNiArMTQ3Niw3IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NTIsNyArMTU2Miw3IEBACiBDT05GSUdfRlJBTUVfV0FSTj0wCiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKQEAgLTE2NzgsMTkgKzE1ODgsMjkgQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNzA1LDEzICsxNjI1LDI0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQorQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fSEFTSDI9bQorQ09ORklHX0NSWVBUT19STkcyPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTE3MzEsNyArMTY2Miw3IEBACiAjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CkBAIC0xNzQ4LDcgKzE2NzksNyBAQAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldApAQCAtMTc2Miw5ICsxNjkzLDkgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CkBAIC0xNzgzLDE0ICsxNzE0LDE4IEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCA4Zjk4NmU5Li4xNTAyOTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtOTAsNyArOTAsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IMzYwMD15Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IM1hYWD15CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKQEAgLTEwMCw3ICs5OSw2IEBACiAjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotIyBDT05GSUdfSDM2MDBfU0xFRVZFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKaW5kZXggMWM4ZmI4OS4uZGIwNzA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCkBAIC05MSw3ICs5MSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IQUNLS0lUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCmluZGV4IDgxZmFkYWYuLmYzMDc0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwpAQCAtMTc4LDcgKzE3OCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwPXkKIENPTkZJR19TQTExMDBfSk9STkFEQTcyMF9TU1A9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCA0YmMzODA3Li5jMzY3YWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxMSArMSwxMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNwotIyBUaHUgRGVjICA0IDE1OjI3OjM5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzUKKyMgVHVlIE1hciAgMyAyMTo0NTo1NyAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQpAQCAtNDIsMTAgKzQyLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE5CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX05BTUVTUEFDRVM9eQpAQCAtNTMsNiArNjIsNyBAQAogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CkBAIC04Myw2ICs5Myw3IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTkzLDcgKzEwNCw2IEBACiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMDEsMTEgKzExMSw5IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTIxLDcgKzEyOSw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyLDcgKzEzOSw2IEBACiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKQEAgLTE1OSwxMSArMTY1LDEzIEBACiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTcxLDE0ICsxNzksOCBAQAogQ09ORklHX01BQ0hfREI4OEY2MjgxX0JQPXkKIENPTkZJR19NQUNIX1JEODhGNjE5Ml9OQVM9eQogQ09ORklHX01BQ0hfUkQ4OEY2MjgxPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCitDT05GSUdfTUFDSF9TSEVFVkFQTFVHPXkKK0NPTkZJR19NQUNIX1RTMjE5PXkKIENPTkZJR19QTEFUX09SSU9OPXkKIAogIwpAQCAtMjE0LDYgKzIxNiw3IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQyLDcgKzI0NSw2IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CkBAIC0yOTEsNiArMjkzLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM1NSw2ICszNTgsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zNjgsMTIgKzM3MiwyNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0xJQjgwMjExPXkKK0NPTkZJR19NQUM4MDIxMT15CisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zOTgsNiArNDE3LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUxLDkgKzQ3MSw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CkBAIC00ODEsNiArNDk5LDcgQEAKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CkBAIC00OTEsNiArNTEwLDEyIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01NjgsNiArNTkzLDggQEAKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC02ODIsNiArNzA5LDkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjk1LDYgKzcyNSw3IEBACiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNzEwLDcgKzc0MSw2IEBACiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC03MjAsNiArNzUwLDcgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKQEAgLTc1NCw4ICs3ODUsMzkgQEAKICMgV2lyZWxlc3MgTEFOCiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPXkKKyMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfU0RJTz15CisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xDT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xBR04gaXMgbm90IHNldAorIyBDT05GSUdfSVdMMzk0NSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNzkxLDEzICs4NTMsMjAgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04MDcsNyArODc2LDExIEBACiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTgzOSwxMSArOTEyLDExIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg3OSw2ICs5NTIsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtOTA1LDggKzk3OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKQEAgLTkyNSwxMiArOTk3LDEyIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09SSU9OPXkKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC05NTIsMTAgKzEwMjQsMTIgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC0xMDEyLDExICsxMDg2LDkgQEAKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9CUklHSFQ9eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci1DT05GSUdfSElEX0RFTEw9eQogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfTE9HSVRFQ0g9eQpAQCAtMTAyNCwxMiArMTA5NiwxNSBAQAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQogQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKICMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQpAQCAtMTA1OCw2ICsxMTMzLDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE2Myw2IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKQEAgLTExMzUsMjEgKzEyMTAsNTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD15CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX01WU0RJTz15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKLSMgQ09ORklHX0xFRFNfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX0xFRFNfQ0xBU1M9eQogCiAjCiAjIExFRCBkcml2ZXJzCiAjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwogIwotIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTExNzgsNyArMTI4Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIApAQCAtMTIyNyw2ICsxMzMyLDcgQEAKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEyMzgsMTYgKzEzNDQsMTQgQEAKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX1hGU19GUz15Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyNjgsOSArMTM3Miw5IEBACiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldApAQCAtMTI4NiwxMCArMTM5MCw3IEBACiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEzMDksNiArMTQxMCw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTM5Myw3ICsxNDk1LDcgQEAKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKQEAgLTE0MTYsNiArMTUxOCw3IEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQpAQCAtMTQyNCw3ICsxNTI3LDcgQEAKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldApAQCAtMTQzNSw3ICsxNTM4LDEwIEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CiAKICMKICMgVHJhY2VycwpAQCAtMTQ0NiwxMSArMTU1MiwxNCBAQAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xNDY0LDE5ICsxNTczLDIyIEBACiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX1JORz1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CkBAIC0xNDk2LDcgKzE2MDgsNyBAQAogQ09ORklHX0NSWVBUT19DQkM9bQogIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fRUNCPXkKICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldApAQCAtMTUxMCw3ICsxNjIyLDcgQEAKICMKICMgRGlnZXN0CiAjCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTUyNyw5ICsxNjM5LDkgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CkBAIC0xNTYwLDYgKzE2NzIsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKaW5kZXggYTFjYzM0Zi4uNTZhZTU2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCkBAIC04Nyw3ICs4Nyw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZwppbmRleCA3M2JhNjJiLi44MjQyOGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIFN1biBEZWMgMzAgMTM6MDI6NTQgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgSmFuIDMwIDEyOjQyOjAzIDIwMDkKICMKIENPTkZJR19BUk09eQorQ09ORklHX0hBVkVfUFdNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQpAQCAtMTIsNiArMTMsNyBAQAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CkBAIC0yMSw4ICsyMyw4IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQxLDE2ICs0MywyNCBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNjUsMzEgKzc1LDQxIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDMsOCArMTIzLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIFR5cGUKQEAgLTExNCw5ICsxMzMsNyBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CkBAIC0xMzAsNDEgKzE0Nyw1OCBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCiAjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX01BR0lDSUFOPXkKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAogQ09ORklHX1BYQTI3eD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIworQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BYQV9QV009eQorQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC0xNzMsNiArMjA3LDcgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQogQ09ORklHX0NQVV9DUDE1PXkKQEAgLTE4Niw2ICsyMjEsNyBAQAogIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0lXTU1YVD15CiBDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTE5NywyOCArMjMzLDMzIEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTIyOSw5ICsyNzAsMTAgQEAKIENPTkZJR19DTURMSU5FPSJrZWVwaW5pdHJkIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQogCiAjCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAogIwogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CkBAIC0yMzksNiArMjgxLDcgQEAKIENPTkZJR19DUFVfRlJFUV9TVEFUPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldApAQCAtMjQ3LDYgKzI5MCw3IEBACiAjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0yNjMsNiArMzA3LDggQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtMjcwLDIxICszMTYsMTggQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiBDT05GSUdfU1VTUEVORD15Ci1DT05GSUdfQVBNX0VNVUxBVElPTj15Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTMxNiwzMyArMzU5LDE1IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM1Myw2ICszNzgsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTAsMjAgKzQxNiwxNyBAQAogIyBEb25nbGUgc3VwcG9ydAogIwogIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCisjIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKIAogIwogIyBGSVIgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0ZJQ1A9bQorIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNDE3LDE3ICs0NDAsMTcgQEAKICMKICMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCiAjCitDT05GSUdfQlRfSENJQlRVU0I9bQorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NDIsMjUgKzQ2NSwyOCBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfREVCVUc9eQotQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKLUNPTkZJR19NVERfQ0hBUj1tCi1DT05GSUdfTVREX0JMS0RFVlM9bQotQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldApAQCAtNDczLDYgKzQ5OSw3IEBACiAjCiBDT05GSUdfTVREX0NGST15CiAjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CiAjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQpAQCAtNDg3LDYgKzUxNCw3IEBACiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CkBAIC00OTcsOSArNTI1LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDA0MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUFhBMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldApAQCAtNTIzLDYgKzU0OSwxMiBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTMxLDEwICs1NjMsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTU0Nyw3ICs1ODEsNiBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTYzLDYgKzU5NiwyMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC02MTIsNyArNjU5LDI2IEBACiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogCiAjCkBAIC02MjUsOSArNjkxLDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY0Miw2ICs3MTAsNyBAQAogIyBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKQEAgLTY0OSwzNyArNzE4LDQ1IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0kyQz1tCitDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIwogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0kyQ19QWEE9bQotIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldApAQCAtNjg4LDE5ICs3NjUsMzkgQEAKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCiBDT05GSUdfVzE9eQogCiAjCiAjIDEtd2lyZSBCdXMgTWFzdGVycwogIworIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKIENPTkZJR19XMV9NQVNURVJfRFMxV009eQorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIDEtd2lyZSBTbGF2ZXMKQEAgLTcwOSwzMiArODA2LDU2IEBACiAjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CiBDT05GSUdfVzFfU0xBVkVfRFMyNzYwPXkKKyMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15CiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BEQV9QT1dFUj15Ci0jIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAogQ09ORklHX0JBVFRFUllfRFMyNzYwPXkKKyMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiBDT05GSUdfSFRDX0VHUElPPXkKIENPTkZJR19IVENfUEFTSUMzPXkKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc0NSw2ICs4NjYsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC03NTIsOCArODc0LDggQEAKICMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtNzY1LDEzICs4ODcsMjEgQEAKICMKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DT1JHST15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtODAyLDE1ICs5MzIsOCBAQAogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC04MjQsNTMgKzk0NywxODUgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfUFhBMlhYX0FDOTcgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKKyMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9QWEEyWFhfU09DPW0KLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049bQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9QWEEyN1g9eQorQ09ORklHX1VTQl9QWEEyN1g9eQorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCisjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKK0NPTkZJR19VU0JfR1BJT19WQlVTPXkKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPW0KKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC04OTksNiArMTE1NCw5IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05MDgsMTcgKzExNjYsMjYgQEAKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTI3LDE5ICsxMTk0LDE4IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtOTY1LDE1ICsxMjMxLDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05OTcsOSArMTI2MSwxMyBAQAogIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC0xMDA3LDE0ICsxMjc1LDEzIEBACiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA3Niw2ICsxMzQzLDcgQEAKIENPTkZJR19QUklOVEtfVElNRT15CiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldApAQCAtMTA4MywxNSArMTM1MSwxOCBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CkBAIC0xMTAwLDE3ICsxMzcxLDQxIEBACiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1ZNPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKIApAQCAtMTExOSw1NSArMTQxNCwxMTAgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPW0KICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKICMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCmluZGV4IDgzYzgxN2YuLmIwNjk4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwpAQCAtMTY1LDYgKzE2NSw3IEBACiAjIE1hcnZlbGwgTVY3OHh4MCBJbXBsZW1lbnRhdGlvbnMKICMKIENPTkZJR19NQUNIX0RCNzhYMDBfQlA9eQorQ09ORklHX01BQ0hfUkQ3OFgwMF9NQVNBPXkKIAogIwogIyBCb290IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKaW5kZXggZDgxZWEyMS4uMzZjZDYyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTkxLDcgKzkxLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDIwNjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNDoxNzowMSAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX09QUk9GSUxFX0FSTVY3PXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWD15CitDT05GSUdfT01BUF9NVVhfREVCVUc9eQorQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFPXkKK0NPTkZJR19NQUNIX09NQVBfTERQPXkKK0NPTkZJR19NQUNIX09WRVJPPXkKK0NPTkZJR19NQUNIX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfTEVEUz15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMiwxMTUyMDAgcm9vdD0vZGV2L21tY2JsazBwMyByb290d2FpdCBkZWJ1ZyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX1ZGUHYzPXkKK0NPTkZJR19ORU9OPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19IQVZFX0FPVVQ9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CitDT05GSUdfQlRfUkZDT01NPXkKK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPXkKK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9eQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkNNMjAzWD15CitDT05GSUdfQlRfSENJQlBBMTBYPXkKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPXkKK0NPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX01BQzgwMjExPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fREVMQVk9bQorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTExWD1tCitDT05GSUdfU01TQzkxMVg9bQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPXkKK0NPTkZJR19MSUJFUlRBU19VU0I9eQorQ09ORklHX0xJQkVSVEFTX1NESU89eQorQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkQxMjAxPW0KKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CitDT05GSUdfUlRMODE4Nz1tCisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CitDT05GSUdfUDU0X0NPTU1PTj1tCitDT05GSUdfUDU0X1VTQj1tCisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0hPU1RBUD1tCitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKK0NPTkZJR19IT1NUQVBfRklSTVdBUkVfTlZSQU09eQorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9eQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CitDT05GSUdfVVNCX05FVF9DRENFVEhFUj15CitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorIyBDT05GSUdfVVNCX05FVF9TTVNDOTVYWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9HTDYyMEE9bQorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCitDT05GSUdfVVNCX05FVF9QTFVTQj1tCitDT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KK0NPTkZJR19VU0JfTkVUX1JORElTX0hPU1Q9bQorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCitDT05GSUdfVVNCX0FMSV9NNTYzMj15CitDT05GSUdfVVNCX0FOMjcyMD15CitDT05GSUdfVVNCX0JFTEtJTj15CitDT05GSUdfVVNCX0FSTUxJTlVYPXkKK0NPTkZJR19VU0JfRVBTT04yODg4PXkKK0NPTkZJR19VU0JfS0MyMTkwPXkKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1RXTDQwMzA9eQorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPW0KKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX01FRElBX0FUVEFDSD15CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjA2MD1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMjY2PW0KK0NPTkZJR19NRURJQV9UVU5FUl9RVDEwMTA9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1Uz1tCitDT05GSUdfVklERU9fVjRMMj1tCitDT05GSUdfVklERU9fVjRMMT1tCitDT05GSUdfVklERU9fVFZFRVBST009bQorQ09ORklHX1ZJREVPX1RVTkVSPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX01TUDM0MDA9bQorQ09ORklHX1ZJREVPX0NTNTNMMzJBPW0KK0NPTkZJR19WSURFT19XTTg3NzU9bQorQ09ORklHX1ZJREVPX1NBQTcxMVg9bQorQ09ORklHX1ZJREVPX0NYMjU4NDA9bQorQ09ORklHX1ZJREVPX0NYMjM0MVg9bQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CitDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19QVlJVU0IyPW0KK0NPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTPXkKK0NPTkZJR19WSURFT19QVlJVU0IyX0RWQj15CisjIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVVNCVklTSU9OPW0KK0NPTkZJR19WSURFT19VU0JWSURFTz1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVkNBTUNISVA9bQorQ09ORklHX1VTQl9XOTk2OENGPW0KK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQz1tCisjIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCitDT05GSUdfRFZCX1VTQj1tCisjIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVVNCX0E4MDA9bQorQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KKyMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQorQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCitDT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KK0NPTkZJR19EVkJfVVNCX0NYVVNCPW0KK0NPTkZJR19EVkJfVVNCX005MjBYPW0KK0NPTkZJR19EVkJfVVNCX0dMODYxPW0KK0NPTkZJR19EVkJfVVNCX0FVNjYxMD1tCitDT05GSUdfRFZCX1VTQl9ESUdJVFY9bQorQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KK0NPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCitDT05GSUdfRFZCX1VTQl9HUDhQU0s9bQorQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQorQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KK0NPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQorQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KK0NPTkZJR19EVkJfVVNCX0FGOTAwNT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KKyMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfQ0lORVJHWV9UMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0FOWVNFRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0RUVjUxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1VTQl9BRjkwMTUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKKworIworIyBNdWx0aXN0YW5kYXJkIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1NUQjA4OTkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUQjYxMDAgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9DWDI0MTEwPW0KK0NPTkZJR19EVkJfQ1gyNDEyMz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfUzVIMTQyMD1tCisjIENPTkZJR19EVkJfU1RWMDI4OCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RCNjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9UREE4MDgzPW0KK0NPTkZJR19EVkJfVERBMTAwODY9bQorIyBDT05GSUdfRFZCX1REQTgyNjEgaXMgbm90IHNldAorQ09ORklHX0RWQl9WRVMxWDkzPW0KK0NPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCisjIENPTkZJR19EVkJfVFVORVJfQ1gyNDExMyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1REQTgyNlg9bQorQ09ORklHX0RWQl9UVUE2MTAwPW0KKyMgQ09ORklHX0RWQl9DWDI0MTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSTIxWFggaXMgbm90IHNldAorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NQODg3MD1tCitDT05GSUdfRFZCX1NQODg3WD1tCitDT05GSUdfRFZCX0NYMjI3MDA9bQorQ09ORklHX0RWQl9DWDIyNzAyPW0KKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KK0NPTkZJR19EVkJfWkwxMDM1Mz1tCitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCitDT05GSUdfRFZCX0RJQjcwMDBNPW0KK0NPTkZJR19EVkJfRElCNzAwMFA9bQorQ09ORklHX0RWQl9UREExMDA0OD1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfVERBMTAwMjM9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfTlhUMjAwWD1tCisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0JDTTM1MTA9bQorQ09ORklHX0RWQl9MR0RUMzMwWD1tCisjIENPTkZJR19EVkJfTEdEVDMzMDQgaXMgbm90IHNldAorQ09ORklHX0RWQl9TNUgxNDA5PW0KK0NPTkZJR19EVkJfQVU4NTIyPW0KK0NPTkZJR19EVkJfUzVIMTQxMT1tCisKKyMKKyMgSVNEQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfUzkyMSBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKKyMKK0NPTkZJR19EVkJfUExMPW0KK0NPTkZJR19EVkJfVFVORVJfRElCMDA3MD1tCisKKyMKKyMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKKyMKK0NPTkZJR19EVkJfTE5CUDIxPW0KKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfSVNMNjQyMT1tCisjIENPTkZJR19EVkJfTEdTOEdMNSBpcyBub3Qgc2V0CisKKyMKKyMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRFVNTVlfRkUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0FGOTAxMyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfUkFXTUlEST15CitDT05GSUdfU05EX1NFUVVFTkNFUj1tCisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9ERUJVRz15CisjIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1VTQl9BVURJTz15CitDT05GSUdfU05EX1VTQl9DQUlBUT1tCitDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfTUNCU1A9eQorIyBDT05GSUdfU05EX09NQVBfU09DX09WRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX1RXTDQwMzA9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKK0NPTkZJR19VU0JfT1RHPXkKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BSSU5URVI9eQorQ09ORklHX1VTQl9XRE09eQorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9VU0I9eQorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD15CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX09NQVBfSFM9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9eQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19USU1FUl9TVEFUUz15CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9eQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IGE4ZWU2OTguLjAyMGU2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQogIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfT1JJT049eQogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldApAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDg2PXkKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwppbmRleCBhNmI0N2VhLi5mMmQyZGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKQEAgLTg4LDcgKzg4LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ZmFlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgTWFyIDIwIDEzOjQzOjEzIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTU1QPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisKKyMKKyMgTWFydmVsbCBQWEExNjgvOTEwIEltcGxtZW50YXRpb25zCisjCitDT05GSUdfTUFDSF9BU1BFTklURT15CitDT05GSUdfTUFDSF9aWUxPTklURTI9eQorIyBDT05GSUdfTUFDSF9UVENfREtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUFhBMTY4PXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9NT0hBV0s9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMi4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMi4xMDE6MTkyLjE2OC4yLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTI4TSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjN2UyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKQEAgLTAsMCArMSw4OTEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgRnJpIE1hciAyMCAxMzo0NToxMiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX01NUD15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1RBVk9SRVZCPXkKKworIworIyBNYXJ2ZWxsIFBYQTE2OC85MTAgSW1wbG1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX01BQ0hfQVNQRU5JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURTIgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVFRDX0RLQj15CitDT05GSUdfQ1BVX1BYQTkxMD15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfTU9IQVdLPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjIuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjIuMTAxOjE5Mi4xNjguMi4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTEyOE0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzEwMmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE4MjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNToyODo1NiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15CitDT05GSUdfT01BUF9NVVg9eQorQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKK0NPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKK0NPTkZJR19BUkNIX09NQVAzNFhYPXkKK0NPTkZJR19BUkNIX09NQVAzNDMwPXkKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfTk9LSUFfUlg1MT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjc9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJpbml0PS9zYmluL3ByZWluaXQgdWJpLm10ZD00IHJvb3Q9dWJpMDpyb290ZnMgcm9vdGZzdHlwZT11YmlmcyBydyBjb25zb2xlPXR0eU1URDUiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9ERUJVRz15CisjIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fUE1fVFJBQ0U9eQorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GSUxURVI9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9bQorCisjCisjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCisjCitDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT09QUz15CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT01BUF9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX09NQVAyPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPW0KKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19UV0w0MDMwPXkKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1dBVENIRE9HPW0KKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CitDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKKyMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9TUEk9eQorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9bQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPW0KK0NPTkZJR19ISURfQVBQTEU9bQorQ09ORklHX0hJRF9CRUxLSU49bQorQ09ORklHX0hJRF9DSEVSUlk9bQorQ09ORklHX0hJRF9DSElDT05ZPW0KK0NPTkZJR19ISURfQ1lQUkVTUz1tCitDT05GSUdfSElEX0VaS0VZPW0KK0NPTkZJR19ISURfR1lSQVRJT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorQ09ORklHX1VTQl9PVEc9eQorQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKK0NPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUI9eQorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX09URz15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKKyMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX1pFUk89bQorIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX1VTQj15CitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX09NQVBfSFM9bQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKyMgQ09ORklHX0xFRFNfVFJJR0dFUlMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz1tCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9bQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9bQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz1tCisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUENfR1NTPW0KKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FUl9TVEFUUz15CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19MT0NLREVQPXkKK0NPTkZJR19MT0NLX1NUQVQ9eQorIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PW0KK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCmluZGV4IGQwNTJjOGYuLjk4NGY3MDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDliNjU2MWQuLjkwMjM1YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0xLDg4ICsxLDE3NCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLWdpdDMKLSMgU2F0IEp1bCAxNiAxNToyMTo0NyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtZ2l0NgorIyBUaHUgSmFuICA4IDE3OjE0OjQ3IDIwMDkKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gVHlwZQogIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NIQVJLPXkKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC05MSwxNCArMTc3LDIwIEBACiBDT05GSUdfQ1BVX1NBMTEwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKIENPTkZJR19DUFVfQ0FDSEVfVjRXQj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCiAjCisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMTA3LDIyICsxOTksNDAgQEAKIENPTkZJR19JU0FfRE1BPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CiBDT05GSUdfUENJX0hPU1RfVklBODJDNTA1PXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQotIyBDT05GSUdfUENJX05BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX1RJTUVSPXkKICMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKQEAgLTEzNSw2ICsyNDUsMTIgQEAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9IiIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0xNDMsMTMgKzI1OSwxNiBAQAogIwogIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKICMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlBFX0ZBU1RGUEU9eQorQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldApAQCAtMTU4LDYgKzI3Nyw3NSBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMTY2LDM2ICszNTQsMjcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCiAjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKQEAgLTIxMCw1MiArMzg5LDc4IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD1tCitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPXkKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0lERV9BUk09eQotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtMjc1LDE3ICs0ODAsMjAgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKQEAgLTI5NiwxMiArNTA0LDE4IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKQEAgLTMxNCwyMCArNTI4LDE1IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD1tCi0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CkBAIC0zMzYsMTIzICs1NDUsNTcgQEAKICMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTQ2Miw1NiArNjA1LDY5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKIENPTkZJR19DUzg5eDA9eQotIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfQ1M4OXgwX05PRUVQUk9NPXkKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAogIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIworIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNTE5LDE4ICs2NzUsMTcgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTQwLDcgKzY5NSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTUzLDE0ICs3MDcsMjUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTU4MCwxNiArNzQ1LDIyIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTk5LDkwICs3NzAsMTIyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19QUklOVEVSPW0KICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ1lCRVIyMDAwPXkKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTY5MSwxMjYgKzg5NCwxMzIgQEAKICMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogQ09ORklHX1NPVU5EX1BSSU1FPW0KLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NNUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VTU1NPTE8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRVNUUk8gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfT1NTPW0KICMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FEMTgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU0dBTEFYWSBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfQURMSUI9bQotIyBDT05GSUdfU09VTkRfQUNJX01JWEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NTNDIzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9TU0NBUEUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfR1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1ZNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1RSSVggaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFNTIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9TQj1tCi0jIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9XQVZFRlJPTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1lNRlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9VQVJUNjg1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9BRURTUDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0tBSExVQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BTEk1NDU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZPUlRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1JNRTk2WFggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODM0LDE0ICsxMDQzLDEyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODU1LDIyICsxMDYyLDI3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9bQorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD1tCitDT05GSUdfTkZTRD1tCisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfU1VOUlBDPW0KK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODk3LDExICsxMTA5LDkgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPW0KIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpAQCAtOTQyLDMwICsxMTUyLDc0IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKIAogIwpAQCAtOTczLDE5ICsxMjI3LDIzIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKaW5kZXggMDNmNzgzZS4uNjg1ZDJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpAQCAtODksNyArODksNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2Y2JkOGZkLi5iYjdkNjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00Niw2ICs0NiwxNCBAQAogIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRkE1MjYpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBmYQorIyBlbmRpZgorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI2VCkKICMgaWZkZWYgX0NBQ0hFCiAjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQpAQCAtOTQsNiArMTAyLDE0IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKKyMgZW5kaWYKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQogIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAyMmNiMTRlLi5mZjQ2ZGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE1LDEwICsxNSwyMCBAQAogICogbXVzdCBub3QgYmUgdXNlZCBieSBkcml2ZXJzLgogICovCiAjaWZuZGVmIF9fYXJjaF9wYWdlX3RvX2RtYQorCisjaWYgIWRlZmluZWQoQ09ORklHX0hJR0hNRU0pCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGFnZV90b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpOwogfQorI2VsaWYgZGVmaW5lZChfX3Bmbl90b19idXMpCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGFnZV90b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpX19wZm5fdG9fYnVzKHBhZ2VfdG9fcGZuKHBhZ2UpKTsKK30KKyNlbHNlCisjZXJyb3IgInRoaXMgbWFjaGluZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hIHRvIHVzZSBISUdITUVNIgorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3RvX3ZpcnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpCiB7CkBAIC01Nyw2ICs2Nyw4IEBACiAgKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQogICovCiBleHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnQoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLCBpbnQgcncpOworZXh0ZXJuIHZvaWQgZG1hX2NhY2hlX21haW50X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKIAogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4gYmUgc3VwcG9ydGVkCkBAIC0zMTYsNyArMzI4LDcgQEAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKIAlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJZG1hX2NhY2hlX21haW50KHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwkJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOwogCiAJcmV0dXJuIHBhZ2VfdG9fZG1hKGRldiwgcGFnZSkgKyBvZmZzZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IGRmNTYzOGYuLjdlZGYzNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0xOSwyMSArMTksMTcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKLXR5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7Ci0KICNpbmNsdWRlIDxtYWNoL2lzYS1kbWEuaD4KIAogLyoKLSAqIERNQSBtb2RlcworICogVGhlIERNQSBtb2RlcyByZWZsZWN0IHRoZSBzZXR0aW5ncyBmb3IgdGhlIElTQSBETUEgY29udHJvbGxlcgogICovCi10eXBlZGVmIHVuc2lnbmVkIGludCBkbWFtb2RlX3Q7CisjZGVmaW5lIERNQV9NT0RFX01BU0sJIDB4Y2MKIAotI2RlZmluZSBETUFfTU9ERV9NQVNLCTMKLQotI2RlZmluZSBETUFfTU9ERV9SRUFECSAwCi0jZGVmaW5lIERNQV9NT0RFX1dSSVRFCSAxCi0jZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMgotI2RlZmluZSBETUFfQVVUT0lOSVQJIDQKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkgMHg0NAorI2RlZmluZSBETUFfTU9ERV9XUklURQkgMHg0OAorI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDB4YzAKKyNkZWZpbmUgRE1BX0FVVE9JTklUCSAweDEwCiAKIGV4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOwogCkBAIC01Miw0NCArNDgsNDQgQEAKIC8qIENsZWFyIHRoZSAnRE1BIFBvaW50ZXIgRmxpcCBGbG9wJy4KICAqIFdyaXRlIDAgZm9yIExTQi9NU0IsIDEgZm9yIE1TQi9MU0IgYWNjZXNzLgogICovCi0jZGVmaW5lIGNsZWFyX2RtYV9mZihjaGFubmVsKQorI2RlZmluZSBjbGVhcl9kbWFfZmYoY2hhbikKIAogLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KICAqCiAgKiBOT1RFOiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHNob3VsZAogICogICAgICAgYmUgaGlkZGVuIGZyb20gdGhlIGRyaXZlcnMKICAqLwotZXh0ZXJuIHZvaWQgc2V0X2RtYV9wYWdlKGRtYWNoX3QgY2hhbm5lbCwgY2hhciBwYWdlbnIpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBjaGFuLCBjaGFyIHBhZ2Vucik7CiAKIC8qIFJlcXVlc3QgYSBETUEgY2hhbm5lbAogICoKICAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgbmVlZCB0byBkbyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQKICAqLwotZXh0ZXJuIGludCAgcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKK2V4dGVybiBpbnQgIHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKIAogLyogRnJlZSBhIERNQSBjaGFubmVsCiAgKgogICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBuZWVkIHRvIGRvIGZyZWUgYW4gaW50ZXJydXB0CiAgKi8KLWV4dGVybiB2b2lkIGZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbik7CiAKIC8qIEVuYWJsZSBETUEgZm9yIHRoaXMgY2hhbm5lbAogICoKICAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhpcyBtYXkgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgbGlrZQogICogZW5hYmxpbmcgYW4gaW50ZXJydXB0IGFuZCBzZXR0aW5nIHRoZSBETUEgcmVnaXN0ZXJzLgogICovCi1leHRlcm4gdm9pZCBlbmFibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogRGlzYWJsZSBETUEgZm9yIHRoaXMgY2hhbm5lbAogICoKICAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhpcyBtYXkgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgbGlrZQogICogZGlzYWJsaW5nIGFuIGludGVycnVwdCBvciB3aGF0ZXZlci4KICAqLwotZXh0ZXJuIHZvaWQgZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogVGVzdCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBoYXMgYW4gYWN0aXZlIERNQSB0cmFuc2ZlcgogICovCi1leHRlcm4gaW50IGRtYV9jaGFubmVsX2FjdGl2ZShkbWFjaF90IGNoYW5uZWwpOworZXh0ZXJuIGludCBkbWFfY2hhbm5lbF9hY3RpdmUodW5zaWduZWQgaW50IGNoYW4pOwogCiAvKiBTZXQgdGhlIERNQSBzY2F0dGVyIGdhdGhlciBsaXN0IGZvciB0aGlzIGNoYW5uZWwKICAqCkBAIC05Nyw3ICs5Myw3IEBACiAgKiBlc3BlY2lhbGx5IHNpbmNlIHNvbWUgRE1BIGFyY2hpdGVjdHVyZXMgZG9uJ3QgdXBkYXRlIHRoZQogICogRE1BIGFkZHJlc3MgaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUgZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX3NnKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKTsKK2V4dGVybiB2b2lkIHNldF9kbWFfc2codW5zaWduZWQgaW50IGNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBucl9zZyk7CiAKIC8qIFNldCB0aGUgRE1BIGFkZHJlc3MgZm9yIHRoaXMgY2hhbm5lbAogICoKQEAgLTEwNSw5ICsxMDEsOSBAQAogICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKICAqIERNQSBhZGRyZXNzIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KICAqLwotZXh0ZXJuIHZvaWQgX19zZXRfZG1hX2FkZHIoZG1hY2hfdCBjaGFubmVsLCB2b2lkICphZGRyKTsKLSNkZWZpbmUgc2V0X2RtYV9hZGRyKGNoYW5uZWwsIGFkZHIpCQkJCVwKLQlfX3NldF9kbWFfYWRkcihjaGFubmVsLCBidXNfdG9fdmlydChhZGRyKSkKK2V4dGVybiB2b2lkIF9fc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBjaGFuLCB2b2lkICphZGRyKTsKKyNkZWZpbmUgc2V0X2RtYV9hZGRyKGNoYW4sIGFkZHIpCQkJCVwKKwlfX3NldF9kbWFfYWRkcihjaGFuLCBidXNfdG9fdmlydChhZGRyKSkKIAogLyogU2V0IHRoZSBETUEgYnl0ZSBjb3VudCBmb3IgdGhpcyBjaGFubmVsCiAgKgpAQCAtMTE1LDcgKzExMSw3IEBACiAgKiBlc3BlY2lhbGx5IHNpbmNlIHNvbWUgRE1BIGFyY2hpdGVjdHVyZXMgZG9uJ3QgdXBkYXRlIHRoZQogICogRE1BIGNvdW50IGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KICAqLwotZXh0ZXJuIHZvaWQgc2V0X2RtYV9jb3VudChkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKIC8qIFNldCB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uIGZvciB0aGlzIGNoYW5uZWwKICAqCkBAIC0xMjQsMTEgKzEyMCwxMSBAQAogICogRE1BIHRyYW5zZmVyIGRpcmVjdGlvbiBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZQogICogZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX21vZGUoZG1hY2hfdCBjaGFubmVsLCBkbWFtb2RlX3QgbW9kZSk7CitleHRlcm4gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCBtb2RlKTsKIAogLyogU2V0IHRoZSB0cmFuc2ZlciBzcGVlZCBmb3IgdGhpcyBjaGFubmVsCiAgKi8KLWV4dGVybiB2b2lkIHNldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBpbnQgY3ljbGVfbnMpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9zcGVlZCh1bnNpZ25lZCBpbnQgY2hhbiwgaW50IGN5Y2xlX25zKTsKIAogLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcwogICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKQEAgLTEzNiw3ICsxMzIsNyBAQAogICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCiAgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCiAgKi8KLWV4dGVybiBpbnQgIGdldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwpOworZXh0ZXJuIGludCAgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuKTsKIAogI2lmbmRlZiBOT19ETUEKICNkZWZpbmUgTk9fRE1BCTI1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBhNTgzNzhjLi5kN2RhMTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNTAsNiArNTAsOCBAQAogI2RlZmluZSBSX0FSTV9BQlMzMgkyCiAjZGVmaW5lIFJfQVJNX0NBTEwJMjgKICNkZWZpbmUgUl9BUk1fSlVNUDI0CTI5CisjZGVmaW5lIFJfQVJNX1Y0QlgJNDAKKyNkZWZpbmUgUl9BUk1fUFJFTDMxCTQyCiAKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZml4bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZTkxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX0FTTV9GSVhNQVBfSAorI2RlZmluZSBfQVNNX0ZJWE1BUF9ICisKKy8qCisgKiBOb3RoaW5nIHRvbyBmYW5jeSBmb3Igbm93LgorICoKKyAqIE9uIEFSTSB3ZSBhbHJlYWR5IGhhdmUgd2VsbCBrbm93biBmaXhlZCB2aXJ0dWFsIGFkZHJlc3NlcyBpbXBvc2VkIGJ5CisgKiB0aGUgYXJjaGl0ZWN0dXJlIHN1Y2ggYXMgdGhlIHZlY3RvciBwYWdlIHdoaWNoIGlzIGxvY2F0ZWQgYXQgMHhmZmZmMDAwMCwKKyAqIHRoZXJlZm9yZSBhIHNlY29uZCBsZXZlbCBwYWdlIHRhYmxlIGlzIGFscmVhZHkgYWxsb2NhdGVkIGNvdmVyaW5nCisgKiAweGZmZjAwMDAwIHVwd2FyZHMuCisgKgorICogVGhlIGNhY2hlIGZsdXNoaW5nIGNvZGUgaW4gcHJvYy14c2NhbGUuUyB1c2VzIHRoZSB2aXJ0dWFsIGFyZWEgYmV0d2VlbgorICogMHhmZmZlMDAwMCBhbmQgMHhmZmZlZmZmZi4KKyAqLworCisjZGVmaW5lIEZJWEFERFJfU1RBUlQJCTB4ZmZmMDAwMDBVTAorI2RlZmluZSBGSVhBRERSX1RPUAkJMHhmZmZlMDAwMFVMCisjZGVmaW5lIEZJWEFERFJfU0laRQkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TVEFSVCkKKworI2RlZmluZSBGSVhfS01BUF9CRUdJTgkJMAorI2RlZmluZSBGSVhfS01BUF9FTkQJCShGSVhBRERSX1NJWkUgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBfX2ZpeF90b192aXJ0KHgpCShGSVhBRERSX1NUQVJUICsgKCh4KSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgX192aXJ0X3RvX2ZpeCh4KQkoKCh4KSAtIEZJWEFERFJfU1RBUlQpID4+IFBBR0VfU0hJRlQpCisKK2V4dGVybiB2b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChpZHggPj0gRklYX0tNQVBfRU5EKQorCQlfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7CisJcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdmlydF90b19maXgoY29uc3QgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlCVUdfT04odmFkZHIgPj0gRklYQUREUl9UT1AgfHwgdmFkZHIgPCBGSVhBRERSX1NUQVJUKTsKKwlyZXR1cm4gX192aXJ0X3RvX2ZpeCh2YWRkcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmgKaW5kZXggZGZiODMzMC4uNDY0OTJhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaApAQCAtNjMsNyArNjMsNSBAQAogZXh0ZXJuIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnICpwbGF0Zm9ybV9zY29vcF9jb25maWc7CiAKIHZvaWQgcmVzZXRfc2Nvb3Aoc3RydWN0IGRldmljZSAqZGV2KTsKLXVuc2lnbmVkIHNob3J0IF9fZGVwcmVjYXRlZCBzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCk7Ci11bnNpZ25lZCBzaG9ydCBfX2RlcHJlY2F0ZWQgcmVzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCk7CiB1bnNpZ25lZCBzaG9ydCByZWFkX3Njb29wX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZyk7CiB2b2lkIHdyaXRlX3Njb29wX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oaWdobWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzNmQwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9BU01fSElHSE1FTV9ICisjZGVmaW5lIF9BU01fSElHSE1FTV9ICisKKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorCisjZGVmaW5lIFBLTUFQX0JBU0UJCShQQUdFX09GRlNFVCAtIFBNRF9TSVpFKQorI2RlZmluZSBMQVNUX1BLTUFQCQlQVFJTX1BFUl9QVEUKKyNkZWZpbmUgTEFTVF9QS01BUF9NQVNLCQkoTEFTVF9QS01BUCAtIDEpCisjZGVmaW5lIFBLTUFQX05SKHZpcnQpCQkoKCh2aXJ0KSAtIFBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0FERFIobnIpCQkoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCisjZGVmaW5lIGttYXBfcHJvdAkJUEFHRV9LRVJORUwKKworI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWZsdXNoX2NhY2hlX2FsbCgpCisKK2V4dGVybiBwdGVfdCAqcGttYXBfcGFnZV90YWJsZTsKKworI2RlZmluZSBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQKKworZXh0ZXJuIHZvaWQgKmttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCAqa21hcF9oaWdoX2dldChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK2V4dGVybiB2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGt1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gdm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2UoY29uc3Qgdm9pZCAqcHRyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaAppbmRleCBiZGE0ODlmLi5mN2JkNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmgKQEAgLTE3LDYgKzE3LDggQEAKICNkZWZpbmUgSFdDQVBfQ1JVTkNICTEwMjQKICNkZWZpbmUgSFdDQVBfVEhVTUJFRQkyMDQ4CiAjZGVmaW5lIEhXQ0FQX05FT04JNDA5NgorI2RlZmluZSBIV0NBUF9WRlB2Mwk4MTkyCisjZGVmaW5lIEhXQ0FQX1ZGUHYzRDE2CTE2Mzg0CiAKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKaW5kZXggNDVkZWYxMy4uZDE2ZWM5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaApAQCAtMTgsNiArMTgsNyBAQAogCUtNX0lSUTEsCiAJS01fU09GVElSUTAsCiAJS01fU09GVElSUTEsCisJS01fTDJfQ0FDSEUsCiAJS01fVFlQRV9OUgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9kbWEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvZG1hLmgKaW5kZXggZmM3Mjc4ZS4uOWU2MTRhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2RtYS5oCkBAIC0xNSwxMyArMTUsMTMgQEAKIHR5cGVkZWYgc3RydWN0IGRtYV9zdHJ1Y3QgZG1hX3Q7CiAKIHN0cnVjdCBkbWFfb3BzIHsKLQlpbnQJKCpyZXF1ZXN0KShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCi0Jdm9pZAkoKmZyZWUpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogb3B0aW9uYWwgKi8KLQl2b2lkCSgqZW5hYmxlKShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG1hbmRhdG9yeSAqLwotCXZvaWQgCSgqZGlzYWJsZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBtYW5kYXRvcnkgKi8KLQlpbnQJKCpyZXNpZHVlKShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCi0JaW50CSgqc2V0c3BlZWQpKGRtYWNoX3QsIGRtYV90ICosIGludCk7CS8qIG9wdGlvbmFsICovCi0JY2hhcgkqdHlwZTsKKwlpbnQJKCpyZXF1ZXN0KSh1bnNpZ25lZCBpbnQsIGRtYV90ICopOwkJLyogb3B0aW9uYWwgKi8KKwl2b2lkCSgqZnJlZSkodW5zaWduZWQgaW50LCBkbWFfdCAqKTsJCQkvKiBvcHRpb25hbCAqLworCXZvaWQJKCplbmFibGUpKHVuc2lnbmVkIGludCwgZG1hX3QgKik7CQkvKiBtYW5kYXRvcnkgKi8KKwl2b2lkIAkoKmRpc2FibGUpKHVuc2lnbmVkIGludCwgZG1hX3QgKik7CQkvKiBtYW5kYXRvcnkgKi8KKwlpbnQJKCpyZXNpZHVlKSh1bnNpZ25lZCBpbnQsIGRtYV90ICopOwkJLyogb3B0aW9uYWwgKi8KKwlpbnQJKCpzZXRzcGVlZCkodW5zaWduZWQgaW50LCBkbWFfdCAqLCBpbnQpOwkvKiBvcHRpb25hbCAqLworCWNvbnN0IGNoYXIgKnR5cGU7CiB9OwogCiBzdHJ1Y3QgZG1hX3N0cnVjdCB7CkBAIC0zNCwyNCArMzQsMjEgQEAKIAl1bnNpZ25lZCBpbnQJYWN0aXZlOjE7CS8qIFRyYW5zZmVyIGFjdGl2ZQkJKi8KIAl1bnNpZ25lZCBpbnQJaW52YWxpZDoxOwkvKiBBZGRyZXNzL0NvdW50IGNoYW5nZWQJKi8KIAotCWRtYW1vZGVfdAlkbWFfbW9kZTsJLyogRE1BIG1vZGUJCQkqLworCXVuc2lnbmVkIGludAlkbWFfbW9kZTsJLyogRE1BIG1vZGUJCQkqLwogCWludAkJc3BlZWQ7CQkvKiBETUEgc3BlZWQJCQkqLwogCiAJdW5zaWduZWQgaW50CWxvY2s7CQkvKiBEZXZpY2UgaXMgYWxsb2NhdGVkCQkqLwogCWNvbnN0IGNoYXIJKmRldmljZV9pZDsJLyogRGV2aWNlIG5hbWUJCQkqLwogCi0JdW5zaWduZWQgaW50CWRtYV9iYXNlOwkvKiBDb250cm9sbGVyIGJhc2UgYWRkcmVzcwkqLwotCWludAkJZG1hX2lycTsJLyogQ29udHJvbGxlciBJUlEJCSovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0IGN1cl9zZzsJLyogQ3VycmVudCBjb250cm9sbGVyIGJ1ZmZlcgkqLwotCXVuc2lnbmVkIGludAlzdGF0ZTsKLQotCXN0cnVjdCBkbWFfb3BzCSpkX29wczsKKwljb25zdCBzdHJ1Y3QgZG1hX29wcyAqZF9vcHM7CiB9OwogCi0vKiBQcm90b3R5cGU6IHZvaWQgYXJjaF9kbWFfaW5pdChkbWEpCi0gKiBQdXJwb3NlICA6IEluaXRpYWxpc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIERNQQotICogUGFyYW1zICAgOiBkbWEgLSBwb2ludGVyIHRvIGFycmF5IG9mIERNQSBzdHJ1Y3R1cmVzCisvKgorICogaXNhX2RtYV9hZGQgLSBhZGQgYW4gSVNBLXN0eWxlIERNQSBjaGFubmVsCiAgKi8KLWV4dGVybiB2b2lkIGFyY2hfZG1hX2luaXQoZG1hX3QgKmRtYSk7CitleHRlcm4gaW50IGlzYV9kbWFfYWRkKHVuc2lnbmVkIGludCwgZG1hX3QgKmRtYSk7CiAKLWV4dGVybiB2b2lkIGlzYV9pbml0X2RtYShkbWFfdCAqZG1hKTsKKy8qCisgKiBBZGQgdGhlIElTQSBETUEgY29udHJvbGxlci4gIEFsd2F5cyB0YWtlcyBjaGFubmVscyAwLTcuCisgKi8KK2V4dGVybiB2b2lkIGlzYV9pbml0X2RtYSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbWFwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oCmluZGV4IDM5ZDk0OWIuLjU4Y2Y5MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tYXAuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBNVF9ISUdIX1ZFQ1RPUlMJCTgKICNkZWZpbmUgTVRfTUVNT1JZCQk5CiAjZGVmaW5lIE1UX1JPTQkJCTEwCisjZGVmaW5lIE1UX01FTU9SWV9OT05DQUNIRUQJMTEKIAogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB2b2lkIGlvdGFibGVfaW5pdChzdHJ1Y3QgbWFwX2Rlc2MgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggMDIwMmE3Yy4uODU3NjNkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTQ0LDE0ICs0NCwyMSBAQAogICogVGhlIG1vZHVsZSBzcGFjZSBsaXZlcyBiZXR3ZWVuIHRoZSBhZGRyZXNzZXMgZ2l2ZW4gYnkgVEFTS19TSVpFCiAgKiBhbmQgUEFHRV9PRkZTRVQgLSBpdCBtdXN0IGJlIHdpdGhpbiAzMk1CIG9mIHRoZSBrZXJuZWwgdGV4dC4KICAqLwotI2RlZmluZSBNT0RVTEVTX0VORAkJKFBBR0VfT0ZGU0VUKQotI2RlZmluZSBNT0RVTEVTX1ZBRERSCQkoTU9EVUxFU19FTkQgLSAxNioxMDQ4NTc2KQotCisjZGVmaW5lIE1PRFVMRVNfVkFERFIJCShQQUdFX09GRlNFVCAtIDE2KjEwMjQqMTAyNCkKICNpZiBUQVNLX1NJWkUgPiBNT0RVTEVTX1ZBRERSCiAjZXJyb3IgVG9wIG9mIHVzZXIgc3BhY2UgY2xhc2hlcyB3aXRoIHN0YXJ0IG9mIG1vZHVsZSBzcGFjZQogI2VuZGlmCiAKIC8qCisgKiBUaGUgaGlnaG1lbSBwa21hcCB2aXJ0dWFsIHNwYWNlIHNoYXJlcyB0aGUgZW5kIG9mIHRoZSBtb2R1bGUgYXJlYS4KKyAqLworI2lmZGVmIENPTkZJR19ISUdITUVNCisjZGVmaW5lIE1PRFVMRVNfRU5ECQkoUEFHRV9PRkZTRVQgLSBQTURfU0laRSkKKyNlbHNlCisjZGVmaW5lIE1PRFVMRVNfRU5ECQkoUEFHRV9PRkZTRVQpCisjZW5kaWYKKworLyoKICAqIFRoZSBYSVAga2VybmVsIGdldHMgbWFwcGVkIGF0IHRoZSBib3R0b20gb2YgdGhlIG1vZHVsZSB2bSBhcmVhLgogICogU2luY2Ugd2UgdXNlIHNlY3Rpb25zIHRvIG1hcCBpdCwgdGhpcyBtYWNybyByZXBsYWNlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcwogICogd2l0aCBpdHMgdmlydHVhbCBhZGRyZXNzIHdoaWxlIGtlZXBpbmcgb2Zmc2V0IGZyb20gdGhlIGJhc2Ugc2VjdGlvbi4KQEAgLTE4MSw2ICsxODgsNyBAQAogI2lmbmRlZiBfX3ZpcnRfdG9fYnVzCiAjZGVmaW5lIF9fdmlydF90b19idXMJX192aXJ0X3RvX3BoeXMKICNkZWZpbmUgX19idXNfdG9fdmlydAlfX3BoeXNfdG9fdmlydAorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJKCh4KSA8PCBQQUdFX1NISUZUKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkIHVuc2lnbmVkIGxvbmcgdmlydF90b19idXModm9pZCAqeCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggMjRiMTY4ZC4uZTRkZmE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsMTUgKzEsMjcgQEAKICNpZm5kZWYgX0FTTV9BUk1fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9BUk1fTU9EVUxFX0gKIAotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCi17Ci0JaW50IGZvbzsKLX07Ci0KICNkZWZpbmUgRWxmX1NoZHIJRWxmMzJfU2hkcgogI2RlZmluZSBFbGZfU3ltCQlFbGYzMl9TeW0KICNkZWZpbmUgRWxmX0VoZHIJRWxmMzJfRWhkcgogCitzdHJ1Y3QgdW53aW5kX3RhYmxlOworCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKK3sKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorCUVsZl9TaGRyICp1bndfc2VjX2luaXQ7CisJRWxmX1NoZHIgKnVud19zZWNfZGV2aW5pdDsKKwlFbGZfU2hkciAqdW53X3NlY19jb3JlOworCUVsZl9TaGRyICpzZWNfaW5pdF90ZXh0OworCUVsZl9TaGRyICpzZWNfZGV2aW5pdF90ZXh0OworCUVsZl9TaGRyICpzZWNfY29yZV90ZXh0OworCXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF9pbml0OworCXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF9kZXZpbml0OworCXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF9jb3JlOworI2VuZGlmCit9OworCiAvKgogICogSW5jbHVkZSB0aGUgQVJNIGFyY2hpdGVjdHVyZSB2ZXJzaW9uLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggZjM0MWM5ZC4uZTZlYjhhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNzYsNiArNzYsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9DT1BZX0ZBCisjIGlmZGVmIF9VU0VSCisjICBkZWZpbmUgTVVMVElfVVNFUiAxCisjIGVsc2UKKyMgIGRlZmluZSBfVVNFUiBmYQorIyBlbmRpZgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwMAogIyBpZmRlZiBfVVNFUgogIyAgZGVmaW5lIE1VTFRJX1VTRVIgMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKaW5kZXggZGI4MDIwMy4uMzk3NjQxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCkBAIC04OSw2ICs4OSwxNCBAQAogIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIyCiAjICBlbmRpZgogIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0ZBNTI2CisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9mYTUyNgorIyAgZW5kaWYKKyMgZW5kaWYKICMgaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCiAjICBpZmRlZiBDUFVfTkFNRQogIyAgIHVuZGVmICBNVUxUSV9DUFUKQEAgLTE4NSw2ICsxOTMsMTQgQEAKICMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKICMgIGVuZGlmCiAjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfTU9IQVdLCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKKyMgIGVuZGlmCisjIGVuZGlmCiAjIGlmZGVmIENPTkZJR19DUFVfRkVST0NFT04KICMgIGlmZGVmIENQVV9OQU1FCiAjICAgdW5kZWYgIE1VTFRJX0NQVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA3MzE5MjYxLi4yMzZhMDZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjcsNiArMjcsOCBAQAogLyogUFRSQUNFX1NZU0NBTEwgaXMgMjQgKi8KICNkZWZpbmUgUFRSQUNFX0dFVENSVU5DSFJFR1MJMjUKICNkZWZpbmUgUFRSQUNFX1NFVENSVU5DSFJFR1MJMjYKKyNkZWZpbmUgUFRSQUNFX0dFVFZGUFJFR1MJMjcKKyNkZWZpbmUgUFRSQUNFX1NFVFZGUFJFR1MJMjgKIAogLyoKICAqIFBTUiBiaXRzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zaXplcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2l6ZXMuaAppbmRleCA1MDM4NDNkLi5jMTBkMWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zaXplcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NpemVzLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgU1pfOE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIFNaXzE2TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAogI2RlZmluZSBTWl8zMk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgU1pfNDhNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCiAjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAogI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKICNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYTE2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fQVNNX1NUQUNLVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TVEFDS1RSQUNFX0gKKworc3RydWN0IHN0YWNrZnJhbWUgeworCXVuc2lnbmVkIGxvbmcgZnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGxyOworCXVuc2lnbmVkIGxvbmcgcGM7Cit9OworCitleHRlcm4gaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpOworZXh0ZXJuIHZvaWQgd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwKKwkJCSAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZgkvKiBfX0FTTV9TVEFDS1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODExYmU1NS4uYmQ0ZGM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTk3LDggKzk3LDggQEAKIGV4dGVybiBpbnQgY3B1X2FyY2hpdGVjdHVyZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV9pbml0KHZvaWQpOwogCi12b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlKTsKLWV4dGVybiB2b2lkICgqYXJtX3BtX3Jlc3RhcnQpKGNoYXIgc3RyKTsKK3ZvaWQgYXJtX21hY2hpbmVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CitleHRlcm4gdm9pZCAoKmFybV9wbV9yZXN0YXJ0KShjaGFyIHN0ciwgY29uc3QgY2hhciAqY21kKTsKIAogI2RlZmluZSBVREJHX1VOREVGSU5FRAkoMSA8PCAwKQogI2RlZmluZSBVREJHX1NZU0NBTEwJKDEgPDwgMSkKQEAgLTEyNSw2ICsxMjUsMTIgQEAKIAkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKICNkZWZpbmUgZG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIgXAogCQkJCSAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQorI2RlZmluZSBpc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDQiIFwKKwkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNkZWZpbmUgZHNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgXAorCQkJCSAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2RlZmluZSBkbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCiAjZWxzZQogI2RlZmluZSBpc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDY4YjllYzguLjRmODg0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTksNiArOTksOCBAQAogCiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCVwKIAkoKHVuc2lnbmVkIGxvbmcpKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+Y3B1X2NvbnRleHQucGMpKQorI2RlZmluZSB0aHJlYWRfc2F2ZWRfc3AodHNrKQlcCisJKCh1bnNpZ25lZCBsb25nKSh0YXNrX3RocmVhZF9pbmZvKHRzayktPmNwdV9jb250ZXh0LnNwKSkKICNkZWZpbmUgdGhyZWFkX3NhdmVkX2ZwKHRzaykJXAogCSgodW5zaWduZWQgbG9uZykodGFza190aHJlYWRfaW5mbyh0c2spLT5jcHVfY29udGV4dC5mcCkpCiAKQEAgLTExMyw2ICsxMTUsOCBAQAogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiBleHRlcm4gdm9pZCBpd21teHRfdGFza19zd2l0Y2goc3RydWN0IHRocmVhZF9pbmZvICopOwogCitleHRlcm4gdm9pZCB2ZnBfc3luY19zdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCk7CisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYjU0M2EwNS4uYTYyMjE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIFRMQl9WNl9EX0FTSUQJKDEgPDwgMTcpCiAjZGVmaW5lIFRMQl9WNl9JX0FTSUQJKDEgPDwgMTgpCiAKKyNkZWZpbmUgVExCX0JUQgkJKDEgPDwgMjgpCiAjZGVmaW5lIFRMQl9MMkNMRUFOX0ZSCSgxIDw8IDI5KQkJLyogRmVyb2Nlb24gKi8KICNkZWZpbmUgVExCX0RDTEVBTgkoMSA8PCAzMCkKICNkZWZpbmUgVExCX1dCCQkoMSA8PCAzMSkKQEAgLTUzLDYgKzU0LDcgQEAKICAqCSAgdjR3YiAgLSBBUk12NCB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRob3V0IEkgVExCIGZsdXNoIGVudHJ5IGluc3RydWN0aW9uCiAgKgkgIHY0d2JpIC0gQVJNdjQgd2l0aCB3cml0ZSBidWZmZXIgd2l0aCBJIFRMQiBmbHVzaCBlbnRyeSBpbnN0cnVjdGlvbgogICoJICBmciAgICAtIEZlcm9jZW9uICh2NHdiaSB3aXRoIG5vbi1vdXRlci1jYWNoZWFibGUgcGFnZSB0YWJsZSB3YWxrcykKKyAqCSAgZmEgICAgLSBGYXJhZGF5ICh2NCB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRoIFVUTEIgYW5kIGJyYW5jaCB0YXJnZXQgYnVmZmVyIChCVEIpKQogICoJICB2NndiaSAtIEFSTXY2IHdpdGggd3JpdGUgYnVmZmVyIHdpdGggSSBUTEIgZmx1c2ggZW50cnkgaW5zdHJ1Y3Rpb24KICAqCSAgdjd3YmkgLSBpZGVudGljYWwgdG8gdjZ3YmkKICAqLwpAQCAtODksNiArOTEsMjIgQEAKICMgZGVmaW5lIHY0X2Fsd2F5c19mbGFncwkoLTFVTCkKICNlbmRpZgogCisjZGVmaW5lIGZhX3RsYl9mbGFncwkoVExCX1dCIHwgVExCX0JUQiB8IFRMQl9EQ0xFQU4gfCBcCisJCQkgVExCX1Y0X1VfRlVMTCB8IFRMQl9WNF9VX1BBR0UpCisKKyNpZmRlZiBDT05GSUdfQ1BVX1RMQl9GQQorIyBkZWZpbmUgZmFfcG9zc2libGVfZmxhZ3MJZmFfdGxiX2ZsYWdzCisjIGRlZmluZSBmYV9hbHdheXNfZmxhZ3MJZmFfdGxiX2ZsYWdzCisjIGlmZGVmIF9UTEIKKyMgIGRlZmluZSBNVUxUSV9UTEIgMQorIyBlbHNlCisjICBkZWZpbmUgX1RMQiBmYQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGZhX3Bvc3NpYmxlX2ZsYWdzCTAKKyMgZGVmaW5lIGZhX2Fsd2F5c19mbGFncwkoLTFVTCkKKyNlbmRpZgorCiAjZGVmaW5lIHY0d2JpX3RsYl9mbGFncwkoVExCX1dCIHwgVExCX0RDTEVBTiB8IFwKIAkJCSBUTEJfVjRfSV9GVUxMIHwgVExCX1Y0X0RfRlVMTCB8IFwKIAkJCSBUTEJfVjRfSV9QQUdFIHwgVExCX1Y0X0RfUEFHRSkKQEAgLTE0MCw3ICsxNTgsNyBAQAogIyBkZWZpbmUgdjR3Yl9hbHdheXNfZmxhZ3MJKC0xVUwpCiAjZW5kaWYKIAotI2RlZmluZSB2NndiaV90bGJfZmxhZ3MgKFRMQl9XQiB8IFRMQl9EQ0xFQU4gfCBcCisjZGVmaW5lIHY2d2JpX3RsYl9mbGFncyAoVExCX1dCIHwgVExCX0RDTEVBTiB8IFRMQl9CVEIgfCBcCiAJCQkgVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfCBcCiAJCQkgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfCBcCiAJCQkgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpCkBAIC0yNjcsNiArMjg1LDcgQEAKIAkJCQkgdjR3YmlfcG9zc2libGVfZmxhZ3MgfCBcCiAJCQkJIGZyX3Bvc3NpYmxlX2ZsYWdzIHwgXAogCQkJCSB2NHdiX3Bvc3NpYmxlX2ZsYWdzIHwgXAorCQkJCSBmYV9wb3NzaWJsZV9mbGFncyB8IFwKIAkJCQkgdjZ3YmlfcG9zc2libGVfZmxhZ3MgfCBcCiAJCQkJIHY3d2JpX3Bvc3NpYmxlX2ZsYWdzKQogCkBAIC0yNzUsNiArMjk0LDcgQEAKIAkJCQkgdjR3YmlfYWx3YXlzX2ZsYWdzICYgXAogCQkJCSBmcl9hbHdheXNfZmxhZ3MgJiBcCiAJCQkJIHY0d2JfYWx3YXlzX2ZsYWdzICYgXAorCQkJCSBmYV9hbHdheXNfZmxhZ3MgJiBcCiAJCQkJIHY2d2JpX2Fsd2F5c19mbGFncyAmIFwKIAkJCQkgdjd3YmlfYWx3YXlzX2ZsYWdzKQogCkBAIC0yOTcsOSArMzE3LDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCB8IFRMQl9WNl9JX0ZVTEwpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAKLQlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAotCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKLQkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwlpZiAodGxiX2ZsYWcoVExCX0JUQikpIHsKIAkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlkc2IoKTsKQEAgLTMzNCw5ICszNTIsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwogCi0JaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKLQkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8Ci0JCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJZHNiKCk7CkBAIC0zNzQsOSArMzkwLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CiAKLQlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAotCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKLQkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwlpZiAodGxiX2ZsYWcoVExCX0JUQikpIHsKIAkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlkc2IoKTsKQEAgLTQxMSw5ICs0MjUsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9QQUdFKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiIChrYWRkcikgOiAiY2MiKTsKIAotCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9GVUxMIHwgVExCX1Y2X0RfRlVMTCB8Ci0JCSAgICAgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfAotCQkgICAgIFRMQl9WNl9JX0FTSUQgfCBUTEJfVjZfRF9BU0lEKSkgeworCWlmICh0bGJfZmxhZyhUTEJfQlRCKSkgewogCQkvKiBmbHVzaCB0aGUgYnJhbmNoIHRhcmdldCBjYWNoZSAqLwogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDYiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWRzYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggYWEzOTlhZS4uNDkxOTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0yNSw1ICsyNSw2IEBACiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCBlYXJseV90cmFwX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkdW1wX2JhY2t0cmFjZV9lbnRyeSh1bnNpZ25lZCBsb25nIHdoZXJlLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZnJhbWUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vud2luZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW53aW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlZGY0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vud2luZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBhcmNoL2FybS9pbmNsdWRlL2FzbS91bndpbmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9VTldJTkRfSAorI2RlZmluZSBfX0FTTV9VTldJTkRfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBVbndpbmQgcmVhc29uIGNvZGUgYWNjb3JkaW5nIHRoZSB0aGUgQVJNIEVBQkkgZG9jdW1lbnRzICovCitlbnVtIHVud2luZF9yZWFzb25fY29kZSB7CisJVVJDX09LID0gMCwJCQkvKiBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLworCVVSQ19DT05USU5VRV9VTldJTkQgPSA4LAorCVVSQ19GQUlMVVJFID0gOQkJCS8qIHVuc3BlY2lmaWVkIGZhaWx1cmUgb2Ygc29tZSBraW5kICovCit9OworCitzdHJ1Y3QgdW53aW5kX2lkeCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgaW5zbjsKK307CisKK3N0cnVjdCB1bndpbmRfdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqc3RhcnQ7CisJc3RydWN0IHVud2luZF9pZHggKnN0b3A7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHI7Cit9OworCitleHRlcm4gc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHRleHRfYWRkciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHRleHRfc2l6ZSk7CitleHRlcm4gdm9pZCB1bndpbmRfdGFibGVfZGVsKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYik7CitleHRlcm4gdm9pZCB1bndpbmRfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorZXh0ZXJuIGludCBfX2luaXQgdW53aW5kX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IHVud2luZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisjZGVmaW5lIFVOV0lORChjb2RlLi4uKQkJY29kZQorI2Vsc2UKKyNkZWZpbmUgVU5XSU5EKGNvZGUuLi4pCisjZW5kaWYKKworI2VuZGlmCS8qIF9fQVNNX1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91c2VyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91c2VyLmgKaW5kZXggODI1YzFlNy4uZGY5NWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdXNlci5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VzZXIuaApAQCAtODEsNCArODEsMTMgQEAKICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKICNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCiAKKy8qCisgKiBVc2VyIHNwZWNpZmljIFZGUCByZWdpc3RlcnMuIElmIG9ubHkgVkZQdjIgaXMgcHJlc2VudCwgcmVnaXN0ZXJzIDE2IHRvIDMxCisgKiBhcmUgaWdub3JlZCBieSB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsLgorICovCitzdHJ1Y3QgdXNlcl92ZnAgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBmcHJlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgZnBzY3I7Cit9OworCiAjZW5kaWYgLyogX0FSTV9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0MzA1MzQ1Li4xMWE1MTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0yOSwxMiArMjksMTQgQEAKIG9iai0kKENPTkZJR19PQUJJX0NPTVBBVCkJKz0gc3lzX29hYmktY29tcGF0Lm8KIG9iai0kKENPTkZJR19BUk1fVEhVTUJFRSkJKz0gdGh1bWJlZS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubworb2JqLSQoQ09ORklHX0FSTV9VTldJTkQpCSs9IHVud2luZC5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgogCiBvYmotJChDT05GSUdfQ1BVX1hTQ0FMRSkJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSB4c2NhbGUtY3AwLm8KK29iai0kKENPTkZJR19DUFVfTU9IQVdLKQkrPSB4c2NhbGUtY3AwLm8KIG9iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubwogQUZMQUdTX2l3bW14dC5vCQkJOj0gLVdhLC1tY3B1PWl3bW14dAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCmluZGV4IGY1M2M1ODIuLmIxMjFiNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCkBAIC00OSw2ICs0OSwzMyBAQAogMTAwMjoKIAkJLmVuZG0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKworCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKKwkJbWNyCXAxNCwgMCwgXHJkLCBjOCwgYzAsIDAKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAorMTAwMToKKwkJbXJjCXAxNCwgMCwgXHJ4LCBjMTQsIGMwLCAwCisJCXRzdAlccngsICMweDEwMDAwMDAwCisJCWJlcQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCwgcmQsIHJ4CisJCW1vdglccmQsICMweDEwMDAwMDAwCisxMDAxOgorCQlzdWJzCVxyZCwgXHJkLCAjMQorCQlibWkJMTAwMmYKKwkJbXJjCXAxNCwgMCwgXHJ4LCBjMTQsIGMwLCAwCisJCXRzdAlccngsICMweDEwMDAwMDAwCisJCWJuZQkxMDAxYgorMTAwMjoKKwkJLmVuZG0KKwogI2Vsc2UKIAogCQkubWFjcm8JYWRkcnVhcnQsIHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jIGIvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYwppbmRleCA0YTNhNTA0Li4wZTg4ZTQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKQEAgLTI0LDExICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogCi0jZGVmaW5lIElTQV9ETUFfTU9ERV9SRUFECTB4NDQKLSNkZWZpbmUgSVNBX0RNQV9NT0RFX1dSSVRFCTB4NDgKLSNkZWZpbmUgSVNBX0RNQV9NT0RFX0NBU0NBREUJMHhjMAotI2RlZmluZSBJU0FfRE1BX0FVVE9JTklUCTB4MTAKLQogI2RlZmluZSBJU0FfRE1BX01BU0sJCTAKICNkZWZpbmUgSVNBX0RNQV9NT0RFCQkxCiAjZGVmaW5lIElTQV9ETUFfQ0xSRkYJCTIKQEAgLTQ5LDM4ICs0NCwzNSBAQAogCXsgIDB4ZDQsICAweGQ2LCAgMHhkOCwgIDB4NDhhLCAgMHgwOGEsICAweGNjLCAweGNlIH0KIH07CiAKLXN0YXRpYyBpbnQgaXNhX2dldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgaW50IGlzYV9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JdW5zaWduZWQgaW50IGlvX3BvcnQgPSBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9DT1VOVF07CisJdW5zaWduZWQgaW50IGlvX3BvcnQgPSBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DT1VOVF07CiAJaW50IGNvdW50OwogCiAJY291bnQgPSAxICsgaW5iKGlvX3BvcnQpOwogCWNvdW50IHw9IGluYihpb19wb3J0KSA8PCA4OwogCi0JcmV0dXJuIGNoYW5uZWwgPCA0ID8gY291bnQgOiAoY291bnQgPDwgMSk7CisJcmV0dXJuIGNoYW4gPCA0ID8gY291bnQgOiAoY291bnQgPDwgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzYV9lbmFibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlzYV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogCWlmIChkbWEtPmludmFsaWQpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBsZW5ndGg7CiAJCXVuc2lnbmVkIGludCBtb2RlOwogCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAKLQkJbW9kZSA9IGNoYW5uZWwgJiAzOworCQltb2RlID0gKGNoYW4gJiAzKSB8IGRtYS0+ZG1hX21vZGU7CiAJCXN3aXRjaCAoZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spIHsKIAkJY2FzZSBETUFfTU9ERV9SRUFEOgotCQkJbW9kZSB8PSBJU0FfRE1BX01PREVfUkVBRDsKIAkJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE1BX01PREVfV1JJVEU6Ci0JCQltb2RlIHw9IElTQV9ETUFfTU9ERV9XUklURTsKIAkJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJCQlicmVhazsKIAogCQljYXNlIERNQV9NT0RFX0NBU0NBREU6Ci0JCQltb2RlIHw9IElTQV9ETUFfTU9ERV9DQVNDQURFOwogCQkJZGlyZWN0aW9uID0gRE1BX0JJRElSRUNUSU9OQUw7CiAJCQlicmVhazsKIApAQCAtMTA1LDM0ICs5NywzMSBAQAogCQlhZGRyZXNzID0gZG1hLT5idWYuZG1hX2FkZHJlc3M7CiAJCWxlbmd0aCAgPSBkbWEtPmJ1Zi5sZW5ndGggLSAxOwogCi0JCW91dGIoYWRkcmVzcyA+PiAxNiwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfUEdMT10pOwotCQlvdXRiKGFkZHJlc3MgPj4gMjQsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX1BHSEldKTsKKwkJb3V0YihhZGRyZXNzID4+IDE2LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9QR0xPXSk7CisJCW91dGIoYWRkcmVzcyA+PiAyNCwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfUEdISV0pOwogCi0JCWlmIChjaGFubmVsID49IDQpIHsKKwkJaWYgKGNoYW4gPj0gNCkgewogCQkJYWRkcmVzcyA+Pj0gMTsKIAkJCWxlbmd0aCA+Pj0gMTsKIAkJfQogCi0JCW91dGIoMCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ0xSRkZdKTsKKwkJb3V0YigwLCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DTFJGRl0pOwogCi0JCW91dGIoYWRkcmVzcywgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQUREUl0pOwotCQlvdXRiKGFkZHJlc3MgPj4gOCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQUREUl0pOworCQlvdXRiKGFkZHJlc3MsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0FERFJdKTsKKwkJb3V0YihhZGRyZXNzID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0FERFJdKTsKIAotCQlvdXRiKGxlbmd0aCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdKTsKLQkJb3V0YihsZW5ndGggPj4gOCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdKTsKKwkJb3V0YihsZW5ndGgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0NPVU5UXSk7CisJCW91dGIobGVuZ3RoID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0NPVU5UXSk7CiAKLQkJaWYgKGRtYS0+ZG1hX21vZGUgJiBETUFfQVVUT0lOSVQpCi0JCQltb2RlIHw9IElTQV9ETUFfQVVUT0lOSVQ7Ci0KLQkJb3V0Yihtb2RlLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NT0RFXSk7CisJCW91dGIobW9kZSwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfTU9ERV0pOwogCQlkbWEtPmludmFsaWQgPSAwOwogCX0KLQlvdXRiKGNoYW5uZWwgJiAzLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NQVNLXSk7CisJb3V0YihjaGFuICYgMywgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfTUFTS10pOwogfQogCi1zdGF0aWMgdm9pZCBpc2FfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIHZvaWQgaXNhX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCW91dGIoY2hhbm5lbCB8IDQsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX01BU0tdKTsKKwlvdXRiKGNoYW4gfCA0LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9NQVNLXSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX29wcyBpc2FfZG1hX29wcyA9IHsKQEAgLTE2MCw3ICsxNDksMTIgQEAKIAkuZW5kCT0gMHgwNDhmCiB9IH07CiAKLXZvaWQgX19pbml0IGlzYV9pbml0X2RtYShkbWFfdCAqZG1hKQorc3RhdGljIGRtYV90IGlzYV9kbWFbOF07CisKKy8qCisgKiBJU0EgRE1BIGFsd2F5cyBzdGFydHMgYXQgY2hhbm5lbCAwCisgKi8KK3ZvaWQgX19pbml0IGlzYV9pbml0X2RtYSh2b2lkKQogewogCS8qCiAJICogVHJ5IHRvIGF1dG9kZXRlY3QgcHJlc2VuY2Ugb2YgYW4gSVNBIERNQSBjb250cm9sbGVyLgpAQCAtMTc4LDExICsxNzIsMTEgQEAKIAlvdXRiKDB4YWEsIDB4MDApOwogCiAJaWYgKGluYigwKSA9PSAweDU1ICYmIGluYigwKSA9PSAweGFhKSB7Ci0JCWludCBjaGFubmVsLCBpOworCQl1bnNpZ25lZCBpbnQgY2hhbiwgaTsKIAotCQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgODsgY2hhbm5lbCsrKSB7Ci0JCQlkbWFbY2hhbm5lbF0uZF9vcHMgPSAmaXNhX2RtYV9vcHM7Ci0JCQlpc2FfZGlzYWJsZV9kbWEoY2hhbm5lbCwgTlVMTCk7CisJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCA4OyBjaGFuKyspIHsKKwkJCWlzYV9kbWFbY2hhbl0uZF9vcHMgPSAmaXNhX2RtYV9vcHM7CisJCQlpc2FfZGlzYWJsZV9kbWEoY2hhbiwgTlVMTCk7CiAJCX0KIAogCQlvdXRiKDB4NDAsIDB4MGIpOwpAQCAtMjE3LDUgKzIxMSwxMiBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRtYV9yZXNvdXJjZXMpOyBpKyspCiAJCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGRtYV9yZXNvdXJjZXMgKyBpKTsKKworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgODsgY2hhbisrKSB7CisJCQlpbnQgcmV0ID0gaXNhX2RtYV9hZGQoY2hhbiwgJmlzYV9kbWFbY2hhbl0pOworCQkJaWYgKHJldCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIklTQURNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLAorCQkJCQljaGFuLCByZXQpOworCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS5jIGIvYXJjaC9hcm0va2VybmVsL2RtYS5jCmluZGV4IGQwMDYwODUuLjdkNWI5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZG1hLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKQEAgLTIzLDE5ICsyNCw0MCBAQAogREVGSU5FX1NQSU5MT0NLKGRtYV9zcGluX2xvY2spOwogRVhQT1JUX1NZTUJPTChkbWFfc3Bpbl9sb2NrKTsKIAotc3RhdGljIGRtYV90IGRtYV9jaGFuW01BWF9ETUFfQ0hBTk5FTFNdOworc3RhdGljIGRtYV90ICpkbWFfY2hhbltNQVhfRE1BX0NIQU5ORUxTXTsKKworc3RhdGljIGlubGluZSBkbWFfdCAqZG1hX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW4pCit7CisJaWYgKGNoYW4gPj0gTUFYX0RNQV9DSEFOTkVMUykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZG1hX2NoYW5bY2hhbl07Cit9CisKK2ludCBfX2luaXQgaXNhX2RtYV9hZGQodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCit7CisJaWYgKCFkbWEtPmRfb3BzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNnX2luaXRfdGFibGUoJmRtYS0+YnVmLCAxKTsKKworCWlmIChkbWFfY2hhbltjaGFuXSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlkbWFfY2hhbltjaGFuXSA9IGRtYTsKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIFJlcXVlc3QgRE1BIGNoYW5uZWwKICAqCiAgKiBPbiBjZXJ0YWluIHBsYXRmb3Jtcywgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgYXMgd2VsbC4uLgogICovCi1pbnQgcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCitpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGNoYW4sIGNvbnN0IGNoYXIgKmRldmljZV9pZCkKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAlpbnQgcmV0OwogCi0JaWYgKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fCAhZG1hLT5kX29wcykKKwlpZiAoIWRtYSkKIAkJZ290byBiYWRfZG1hOwogCiAJaWYgKHhjaGcoJmRtYS0+bG9jaywgMSkgIT0gMCkKQEAgLTQ3LDcgKzY5LDcgQEAKIAogCXJldCA9IDA7CiAJaWYgKGRtYS0+ZF9vcHMtPnJlcXVlc3QpCi0JCXJldCA9IGRtYS0+ZF9vcHMtPnJlcXVlc3QoY2hhbm5lbCwgZG1hKTsKKwkJcmV0ID0gZG1hLT5kX29wcy0+cmVxdWVzdChjaGFuLCBkbWEpOwogCiAJaWYgKHJldCkKIAkJeGNoZygmZG1hLT5sb2NrLCAwKTsKQEAgLTU1LDcgKzc3LDcgQEAKIAlyZXR1cm4gcmV0OwogCiBiYWRfZG1hOgotCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gYWxsb2NhdGUgRE1BJWRcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gYWxsb2NhdGUgRE1BJWRcbiIsIGNoYW4pOwogCXJldHVybiAtRUlOVkFMOwogCiBidXN5OgpAQCAtNjgsNDIgKzkwLDQyIEBACiAgKgogICogT24gY2VydGFpbiBwbGF0Zm9ybXMsIHdlIGhhdmUgdG8gZnJlZSBpbnRlcnJ1cHQgYXMgd2VsbC4uLgogICovCi12b2lkIGZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCkKK3ZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKLQlpZiAoY2hhbm5lbCA+PSBNQVhfRE1BX0NIQU5ORUxTIHx8ICFkbWEtPmRfb3BzKQorCWlmICghZG1hKQogCQlnb3RvIGJhZF9kbWE7CiAKIAlpZiAoZG1hLT5hY3RpdmUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogZnJlZWluZyBhY3RpdmUgRE1BXG4iLCBjaGFubmVsKTsKLQkJZG1hLT5kX29wcy0+ZGlzYWJsZShjaGFubmVsLCBkbWEpOworCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBmcmVlaW5nIGFjdGl2ZSBETUFcbiIsIGNoYW4pOworCQlkbWEtPmRfb3BzLT5kaXNhYmxlKGNoYW4sIGRtYSk7CiAJCWRtYS0+YWN0aXZlID0gMDsKIAl9CiAKIAlpZiAoeGNoZygmZG1hLT5sb2NrLCAwKSAhPSAwKSB7CiAJCWlmIChkbWEtPmRfb3BzLT5mcmVlKQotCQkJZG1hLT5kX29wcy0+ZnJlZShjaGFubmVsLCBkbWEpOworCQkJZG1hLT5kX29wcy0+ZnJlZShjaGFuLCBkbWEpOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdHJ5aW5nIHRvIGZyZWUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBmcmVlIGZyZWUgRE1BXG4iLCBjaGFuKTsKIAlyZXR1cm47CiAKIGJhZF9kbWE6Ci0JcHJpbnRrKEtFUk5fRVJSICJkbWE6IHRyeWluZyB0byBmcmVlIERNQSVkXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYTogdHJ5aW5nIHRvIGZyZWUgRE1BJWRcbiIsIGNoYW4pOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2RtYSk7CiAKIC8qIFNldCBETUEgU2NhdHRlci1HYXRoZXIgbGlzdAogICovCi12b2lkIHNldF9kbWFfc2cgKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKQordm9pZCBzZXRfZG1hX3NnICh1bnNpZ25lZCBpbnQgY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCiAJaWYgKGRtYS0+YWN0aXZlKQogCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBhbHRlcmluZyBETUEgU0cgd2hpbGUgIgotCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW4pOwogCiAJZG1hLT5zZyA9IHNnOwogCWRtYS0+c2djb3VudCA9IG5yX3NnOwpAQCAtMTE1LDEzICsxMzcsMTMgQEAKICAqCiAgKiBDb3B5IGFkZHJlc3MgdG8gdGhlIHN0cnVjdHVyZSwgYW5kIHNldCB0aGUgaW52YWxpZCBiaXQKICAqLwotdm9pZCBfX3NldF9kbWFfYWRkciAoZG1hY2hfdCBjaGFubmVsLCB2b2lkICphZGRyKQordm9pZCBfX3NldF9kbWFfYWRkciAodW5zaWduZWQgaW50IGNoYW4sIHZvaWQgKmFkZHIpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoZG1hLT5hY3RpdmUpCiAJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBhZGRyZXNzIHdoaWxlICIKLQkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFuKTsKIAogCWRtYS0+c2cgPSBOVUxMOwogCWRtYS0+YWRkciA9IGFkZHI7CkBAIC0xMzMsMTMgKzE1NSwxMyBAQAogICoKICAqIENvcHkgYWRkcmVzcyB0byB0aGUgc3RydWN0dXJlLCBhbmQgc2V0IHRoZSBpbnZhbGlkIGJpdAogICovCi12b2lkIHNldF9kbWFfY291bnQgKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgc2V0X2RtYV9jb3VudCAodW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoZG1hLT5hY3RpdmUpCiAJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBjb3VudCB3aGlsZSAiCi0JCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbm5lbCk7CisJCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbik7CiAKIAlkbWEtPnNnID0gTlVMTDsKIAlkbWEtPmNvdW50ID0gY291bnQ7CkBAIC0xNDksMTMgKzE3MSwxMyBAQAogCiAvKiBTZXQgRE1BIGRpcmVjdGlvbiBtb2RlCiAgKi8KLXZvaWQgc2V0X2RtYV9tb2RlIChkbWFjaF90IGNoYW5uZWwsIGRtYW1vZGVfdCBtb2RlKQordm9pZCBzZXRfZG1hX21vZGUgKHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAogCWlmIChkbWEtPmFjdGl2ZSkKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWx0ZXJpbmcgRE1BIG1vZGUgd2hpbGUgIgotCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW4pOwogCiAJZG1hLT5kbWFfbW9kZSA9IG1vZGU7CiAJZG1hLT5pbnZhbGlkID0gMTsKQEAgLTE2NCw0MiArMTg2LDQyIEBACiAKIC8qIEVuYWJsZSBETUEgY2hhbm5lbAogICovCi12b2lkIGVuYWJsZV9kbWEgKGRtYWNoX3QgY2hhbm5lbCkKK3ZvaWQgZW5hYmxlX2RtYSAodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoIWRtYS0+bG9jaykKIAkJZ290byBmcmVlX2RtYTsKIAogCWlmIChkbWEtPmFjdGl2ZSA9PSAwKSB7CiAJCWRtYS0+YWN0aXZlID0gMTsKLQkJZG1hLT5kX29wcy0+ZW5hYmxlKGNoYW5uZWwsIGRtYSk7CisJCWRtYS0+ZF9vcHMtPmVuYWJsZShjaGFuLCBkbWEpOwogCX0KIAlyZXR1cm47CiAKIGZyZWVfZG1hOgotCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBlbmFibGUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBlbmFibGUgZnJlZSBETUFcbiIsIGNoYW4pOwogCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTChlbmFibGVfZG1hKTsKIAogLyogRGlzYWJsZSBETUEgY2hhbm5lbAogICovCi12b2lkIGRpc2FibGVfZG1hIChkbWFjaF90IGNoYW5uZWwpCit2b2lkIGRpc2FibGVfZG1hICh1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAogCWlmICghZG1hLT5sb2NrKQogCQlnb3RvIGZyZWVfZG1hOwogCiAJaWYgKGRtYS0+YWN0aXZlID09IDEpIHsKIAkJZG1hLT5hY3RpdmUgPSAwOwotCQlkbWEtPmRfb3BzLT5kaXNhYmxlKGNoYW5uZWwsIGRtYSk7CisJCWRtYS0+ZF9vcHMtPmRpc2FibGUoY2hhbiwgZG1hKTsKIAl9CiAJcmV0dXJuOwogCiBmcmVlX2RtYToKLQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZGlzYWJsZSBmcmVlIERNQVxuIiwgY2hhbm5lbCk7CisJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdHJ5aW5nIHRvIGRpc2FibGUgZnJlZSBETUFcbiIsIGNoYW4pOwogCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2RtYSk7CkBAIC0yMDcsNDUgKzIyOSwzOCBAQAogLyoKICAqIElzIHRoZSBzcGVjaWZpZWQgRE1BIGNoYW5uZWwgYWN0aXZlPwogICovCi1pbnQgZG1hX2NoYW5uZWxfYWN0aXZlKGRtYWNoX3QgY2hhbm5lbCkKK2ludCBkbWFfY2hhbm5lbF9hY3RpdmUodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JcmV0dXJuIGRtYV9jaGFuW2NoYW5uZWxdLmFjdGl2ZTsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CisJcmV0dXJuIGRtYS0+YWN0aXZlOwogfQogRVhQT1JUX1NZTUJPTChkbWFfY2hhbm5lbF9hY3RpdmUpOwogCi12b2lkIHNldF9kbWFfcGFnZShkbWFjaF90IGNoYW5uZWwsIGNoYXIgcGFnZW5yKQordm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGNoYW4sIGNoYXIgcGFnZW5yKQogewotCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBzZXRfZG1hX3BhZ2VcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBzZXRfZG1hX3BhZ2VcbiIsIGNoYW4pOwogfQogRVhQT1JUX1NZTUJPTChzZXRfZG1hX3BhZ2UpOwogCi12b2lkIHNldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBpbnQgY3ljbGVfbnMpCit2b2lkIHNldF9kbWFfc3BlZWQodW5zaWduZWQgaW50IGNoYW4sIGludCBjeWNsZV9ucykKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChkbWEtPmRfb3BzLT5zZXRzcGVlZCkKLQkJcmV0ID0gZG1hLT5kX29wcy0+c2V0c3BlZWQoY2hhbm5lbCwgZG1hLCBjeWNsZV9ucyk7CisJCXJldCA9IGRtYS0+ZF9vcHMtPnNldHNwZWVkKGNoYW4sIGRtYSwgY3ljbGVfbnMpOwogCWRtYS0+c3BlZWQgPSByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9kbWFfc3BlZWQpOwogCi1pbnQgZ2V0X2RtYV9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCkKK2ludCBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZG1hLT5kX29wcy0+cmVzaWR1ZSkKLQkJcmV0ID0gZG1hLT5kX29wcy0+cmVzaWR1ZShjaGFubmVsLCBkbWEpOworCQlyZXQgPSBkbWEtPmRfb3BzLT5yZXNpZHVlKGNoYW4sIGRtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChnZXRfZG1hX3Jlc2lkdWUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RtYSh2b2lkKQotewotCWFyY2hfZG1hX2luaXQoZG1hX2NoYW4pOwotCXJldHVybiAwOwotfQotCi1jb3JlX2luaXRjYWxsKGluaXRfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDg1MDQwY2YuLmQ2NjJhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKIApAQCAtMTIzLDYgKzEyNCw4IEBACiAjZW5kaWYKIAogCS5tYWNybwlzdmNfZW50cnksIHN0YWNrX2hvbGU9MAorIFVOV0lORCguZm5zdGFydAkJKQorIFVOV0lORCguc2F2ZSB7cjAgLSBwY30JCSkKIAlzdWIJc3AsIHNwLCAjKFNfRlJBTUVfU0laRSArIFxzdGFja19ob2xlKQogIFNQRklYKAl0c3QJc3AsICM0CQkpCiAgU1BGSVgoCWJpY25lCXNwLCBzcCwgIzQJKQpAQCAtMTk2LDYgKzE5OSw3IEBACiAJbGRyCXIwLCBbc3AsICNTX1BTUl0KIAltc3IJc3Bzcl9jeHNmLCByMAogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fZGFidF9zdmMpCiAKIAkuYWxpZ24JNQpAQCAtMjI4LDYgKzIzMiw3IEBACiAJYmxlcQl0cmFjZV9oYXJkaXJxc19vbgogI2VuZGlmCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19pcnFfc3ZjKQogCiAJLmx0b3JnCkBAIC0yNzgsNiArMjgzLDcgQEAKIAlsZHIJbHIsIFtzcCwgI1NfUFNSXQkJQCBHZXQgU1ZDIGNwc3IKIAltc3IJc3Bzcl9jeHNmLCBscgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBSZXN0b3JlIFNWQyByZWdpc3RlcnMKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fdW5kX3N2YykKIAogCS5hbGlnbgk1CkBAIC0zMjAsNiArMzI2LDcgQEAKIAlsZHIJcjAsIFtzcCwgI1NfUFNSXQogCW1zcglzcHNyX2N4c2YsIHIwCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19wYWJ0X3N2YykKIAogCS5hbGlnbgk1CkBAIC0zNDMsNiArMzUwLDggQEAKICNlbmRpZgogCiAJLm1hY3JvCXVzcl9lbnRyeQorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkJQCBkb24ndCB1bndpbmQgdGhlIHVzZXIgc3BhY2UKIAlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCiAJc3RtaWIJc3AsIHtyMSAtIHIxMn0KIApAQCAtNDIwLDYgKzQyOSw3IEBACiAJbW92CXIyLCBzcAogCWFkcglsciwgcmV0X2Zyb21fZXhjZXB0aW9uCiAJYglkb19EYXRhQWJvcnQKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fZGFidF91c3IpCiAKIAkuYWxpZ24JNQpAQCAtNDUwLDYgKzQ2MCw3IEBACiAKIAltb3YJd2h5LCAjMAogCWIJcmV0X3RvX3VzZXIKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9faXJxX3VzcikKIAogCS5sdG9yZwpAQCAtNDg0LDYgKzQ5NSw3IEBACiAjZWxzZQogCWIJX191bmRfdXNyX3Vua25vd24KICNlbmRpZgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX191bmRfdXNyKQogCiAJQApAQCAtNjcxLDE0ICs2ODMsMTggQEAKIAllbmFibGVfaXJxCQkJCUAgRW5hYmxlIGludGVycnVwdHMKIAltb3YJcjEsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCisgVU5XSU5EKC5mbmVuZAkJKQogCS8qIGZhbGwgdGhyb3VnaCAqLwogLyoKICAqIFRoaXMgaXMgdGhlIHJldHVybiBjb2RlIHRvIHVzZXIgbW9kZSBmb3IgYWJvcnQgaGFuZGxlcnMKICAqLwogRU5UUlkocmV0X2Zyb21fZXhjZXB0aW9uKQorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAJbW92CXdoeSwgIzAKIAliCXJldF90b191c2VyCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3BhYnRfdXNyKQogRU5EUFJPQyhyZXRfZnJvbV9leGNlcHRpb24pCiAKQEAgLTY4OCw2ICs3MDQsOCBAQAogICogcHJldmlvdXMgYW5kIG5leHQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGJlIHRoZSBzYW1lLgogICovCiBFTlRSWShfX3N3aXRjaF90bykKKyBVTldJTkQoLmZuc3RhcnQJKQorIFVOV0lORCguY2FudHVud2luZAkpCiAJYWRkCWlwLCByMSwgI1RJX0NQVV9TQVZFCiAJbGRyCXIzLCBbcjIsICNUSV9UUF9WQUxVRV0KIAlzdG1pYQlpcCEsIHtyNCAtIHNsLCBmcCwgc3AsIGxyfQlAIFN0b3JlIG1vc3QgcmVncyBvbiBzdGFjawpAQCAtNzE3LDYgKzczNSw3IEBACiAJYmwJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4KIAltb3YJcjAsIHI1CiAJbGRtaWEJcjQsIHtyNCAtIHNsLCBmcCwgc3AsIHBjfQlAIExvYWQgYWxsIHJlZ3Mgc2F2ZWQgcHJldmlvdXNseQorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19zd2l0Y2hfdG8pCiAKIAlfX0lOSVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCAxNTlkMDQxLi5iNTVjYjAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTIyLDYgKzIzLDggQEAKICAqIHN0YWNrLgogICovCiByZXRfZmFzdF9zeXNjYWxsOgorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkKIAlkaXNhYmxlX2lycQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cwogCWxkcglyMSwgW3RzaywgI1RJX0ZMQUdTXQogCXRzdAlyMSwgI19USUZfV09SS19NQVNLCkBAIC0zOCw2ICs0MSw3IEBACiAJbW92CXIwLCByMAogCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCiAJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIAogLyoKICAqIE9rLCB3ZSBuZWVkIHRvIGRvIGV4dHJhIHByb2Nlc3NpbmcsIGVudGVyIHRoZSBzbG93IHBhdGguCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZGFiNDhmMi4uZDE3MzFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAogLyoKQEAgLTY2LDYgKzY3LDI0IEBACiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLAogCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kKQogeworI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisJRWxmX1NoZHIgKnMsICpzZWNoZHJzX2VuZCA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07CisKKwlmb3IgKHMgPSBzZWNoZHJzOyBzIDwgc2VjaGRyc19lbmQ7IHMrKykgeworCQlpZiAoc3RyY21wKCIuQVJNLmV4aWR4LmluaXQudGV4dCIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJbW9kLT5hcmNoLnVud19zZWNfaW5pdCA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLkFSTS5leGlkeC5kZXZpbml0LnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC51bndfc2VjX2RldmluaXQgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHgiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC51bndfc2VjX2NvcmUgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5pbml0LnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5zZWNfaW5pdF90ZXh0ID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuZGV2aW5pdC50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2guc2VjX2RldmluaXRfdGV4dCA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5zZWNfY29yZV90ZXh0ID0gczsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0LDYgKzEyMywxMCBAQAogCQlsb2MgPSBkc3RzZWMtPnNoX2FkZHIgKyByZWwtPnJfb2Zmc2V0OwogCiAJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKSkgeworCQljYXNlIFJfQVJNX05PTkU6CisJCQkvKiBpZ25vcmUgKi8KKwkJCWJyZWFrOworCiAJCWNhc2UgUl9BUk1fQUJTMzI6CiAJCQkqKHUzMiAqKWxvYyArPSBzeW0tPnN0X3ZhbHVlOwogCQkJYnJlYWs7CkBAIC0xMzIsNiArMTU1LDIwIEBACiAJCQkqKHUzMiAqKWxvYyB8PSBvZmZzZXQgJiAweDAwZmZmZmZmOwogCQkJYnJlYWs7CiAKKwkgICAgICAgY2FzZSBSX0FSTV9WNEJYOgorCQkgICAgICAgLyogUHJlc2VydmUgUm0gYW5kIHRoZSBjb25kaXRpb24gY29kZS4gQWx0ZXIKKwkJCSogb3RoZXIgYml0cyB0byByZS1jb2RlIGluc3RydWN0aW9uIGFzCisJCQkqIE1PViBQQyxSbS4KKwkJCSovCisJCSAgICAgICAqKHUzMiAqKWxvYyAmPSAweGYwMDAwMDBmOworCQkgICAgICAgKih1MzIgKilsb2MgfD0gMHgwMWEwZjAwMDsKKwkJICAgICAgIGJyZWFrOworCisJCWNhc2UgUl9BUk1fUFJFTDMxOgorCQkJb2Zmc2V0ID0gKih1MzIgKilsb2MgKyBzeW0tPnN0X3ZhbHVlIC0gbG9jOworCQkJKih1MzIgKilsb2MgPSBvZmZzZXQgJiAweDdmZmZmZmZmOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gcmVsb2NhdGlvbjogJXVcbiIsCiAJCQkgICAgICAgbW9kdWxlLT5uYW1lLCBFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pKTsKQEAgLTE1MCwxNCArMTg3LDUwIEBACiAJcmV0dXJuIC1FTk9FWEVDOwogfQogCisjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3Vud2luZF90YWJsZXMoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCWlmIChtb2QtPmFyY2gudW53X3NlY19pbml0ICYmIG1vZC0+YXJjaC5zZWNfaW5pdF90ZXh0KQorCQltb2QtPmFyY2gudW53aW5kX2luaXQgPQorCQkJdW53aW5kX3RhYmxlX2FkZChtb2QtPmFyY2gudW53X3NlY19pbml0LT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnVud19zZWNfaW5pdC0+c2hfc2l6ZSwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfaW5pdF90ZXh0LT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnNlY19pbml0X3RleHQtPnNoX3NpemUpOworCWlmIChtb2QtPmFyY2gudW53X3NlY19kZXZpbml0ICYmIG1vZC0+YXJjaC5zZWNfZGV2aW5pdF90ZXh0KQorCQltb2QtPmFyY2gudW53aW5kX2RldmluaXQgPQorCQkJdW53aW5kX3RhYmxlX2FkZChtb2QtPmFyY2gudW53X3NlY19kZXZpbml0LT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnVud19zZWNfZGV2aW5pdC0+c2hfc2l6ZSwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfZGV2aW5pdF90ZXh0LT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnNlY19kZXZpbml0X3RleHQtPnNoX3NpemUpOworCWlmIChtb2QtPmFyY2gudW53X3NlY19jb3JlICYmIG1vZC0+YXJjaC5zZWNfY29yZV90ZXh0KQorCQltb2QtPmFyY2gudW53aW5kX2NvcmUgPQorCQkJdW53aW5kX3RhYmxlX2FkZChtb2QtPmFyY2gudW53X3NlY19jb3JlLT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnVud19zZWNfY29yZS0+c2hfc2l6ZSwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfY29yZV90ZXh0LT5zaF9hZGRyLAorCQkJCQkgbW9kLT5hcmNoLnNlY19jb3JlX3RleHQtPnNoX3NpemUpOworfQorCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Vud2luZF90YWJsZXMoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXVud2luZF90YWJsZV9kZWwobW9kLT5hcmNoLnVud2luZF9pbml0KTsKKwl1bndpbmRfdGFibGVfZGVsKG1vZC0+YXJjaC51bndpbmRfZGV2aW5pdCk7CisJdW53aW5kX3RhYmxlX2RlbChtb2QtPmFyY2gudW53aW5kX2NvcmUpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl91bndpbmRfdGFibGVzKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl91bndpbmRfdGFibGVzKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyB9CisjZW5kaWYKKwogaW50CiBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogeworCXJlZ2lzdGVyX3Vud2luZF90YWJsZXMobW9kdWxlKTsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZAogbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CisJdW5yZWdpc3Rlcl91bndpbmRfdGFibGVzKG1vZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBkM2VhNmZhLi4yZGUxNGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXSA9IHsKQEAgLTgyLDcgKzgzLDcgQEAKIF9fc2V0dXAoIm5vaGx0Iiwgbm9obHRfc2V0dXApOwogX19zZXR1cCgiaGx0IiwgaGx0X3NldHVwKTsKIAotdm9pZCBhcm1fbWFjaGluZV9yZXN0YXJ0KGNoYXIgbW9kZSkKK3ZvaWQgYXJtX21hY2hpbmVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKgogCSAqIENsZWFuIGFuZCBkaXNhYmxlIGNhY2hlLCBhbmQgdHVybiBvZmYgaW50ZXJydXB0cwpAQCAtOTksNyArMTAwLDcgQEAKIAkvKgogCSAqIE5vdyBjYWxsIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVib290IGNvZGUuCiAJICovCi0JYXJjaF9yZXNldChtb2RlKTsKKwlhcmNoX3Jlc2V0KG1vZGUsIGNtZCk7CiAKIAkvKgogCSAqIFdob29wcyAtIHRoZSBhcmNoaXRlY3R1cmUgd2FzIHVuYWJsZSB0byByZWJvb3QuCkBAIC0xMTksNyArMTIwLDcgQEAKIHZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOwogRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwogCi12b2lkICgqYXJtX3BtX3Jlc3RhcnQpKGNoYXIgc3RyKSA9IGFybV9tYWNoaW5lX3Jlc3RhcnQ7Cit2b2lkICgqYXJtX3BtX3Jlc3RhcnQpKGNoYXIgc3RyLCBjb25zdCBjaGFyICpjbWQpID0gYXJtX21hY2hpbmVfcmVzdGFydDsKIEVYUE9SVF9TWU1CT0xfR1BMKGFybV9wbV9yZXN0YXJ0KTsKIAogCkBAIC0xOTQsOSArMTk1LDkgQEAKIAkJcG1fcG93ZXJfb2ZmKCk7CiB9CiAKLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKK3ZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNtZCkKIHsKLQlhcm1fcG1fcmVzdGFydChyZWJvb3RfbW9kZSk7CisJYXJtX3BtX3Jlc3RhcnQocmVib290X21vZGUsIGNtZCk7CiB9CiAKIHZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0zNzIsMjMgKzM3MywyMSBAQAogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JdW5zaWduZWQgbG9uZyBmcCwgbHI7Ci0JdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwgc3RhY2tfZW5kOworCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOwogCWludCBjb3VudCA9IDA7CiAJaWYgKCFwIHx8IHAgPT0gY3VycmVudCB8fCBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCiAJCXJldHVybiAwOwogCi0Jc3RhY2tfc3RhcnQgPSAodW5zaWduZWQgbG9uZyllbmRfb2Zfc3RhY2socCk7Ci0Jc3RhY2tfZW5kID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHApICsgVEhSRUFEX1NJWkU7Ci0KLQlmcCA9IHRocmVhZF9zYXZlZF9mcChwKTsKKwlmcmFtZS5mcCA9IHRocmVhZF9zYXZlZF9mcChwKTsKKwlmcmFtZS5zcCA9IHRocmVhZF9zYXZlZF9zcChwKTsKKwlmcmFtZS5sciA9IDA7CQkJLyogcmVjb3ZlcmVkIGZyb20gdGhlIHN0YWNrICovCisJZnJhbWUucGMgPSB0aHJlYWRfc2F2ZWRfcGMocCk7CiAJZG8gewotCQlpZiAoZnAgPCBzdGFja19zdGFydCB8fCBmcCA+IHN0YWNrX2VuZCkKKwkJaW50IHJldCA9IHVud2luZF9mcmFtZSgmZnJhbWUpOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAwOwotCQlsciA9ICgodW5zaWduZWQgbG9uZyAqKWZwKVstMV07Ci0JCWlmICghaW5fc2NoZWRfZnVuY3Rpb25zKGxyKSkKLQkJCXJldHVybiBscjsKLQkJZnAgPSAqKHVuc2lnbmVkIGxvbmcgKikgKGZwIC0gMTIpOworCQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhmcmFtZS5wYykpCisJCQlyZXR1cm4gZnJhbWUucGM7CiAJfSB3aGlsZSAoY291bnQgKysgPCAxNik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZGY2NTNlYS4uODk4ODJhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNjUzLDYgKzY1Myw1NCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVkZQCisvKgorICogR2V0IHRoZSBjaGlsZCBWRlAgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcHRyYWNlX2dldHZmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHZvaWQgX191c2VyICpkYXRhKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyh0c2spOworCXVuaW9uIHZmcF9zdGF0ZSAqdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7CisJc3RydWN0IHVzZXJfdmZwIF9fdXNlciAqdWZwID0gZGF0YTsKKworCXZmcF9zeW5jX3N0YXRlKHRocmVhZCk7CisKKwkvKiBjb3B5IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKwlpZiAoY29weV90b191c2VyKCZ1ZnAtPmZwcmVncywgJnZmcC0+aGFyZC5mcHJlZ3MsCisJCQkgc2l6ZW9mKHZmcC0+aGFyZC5mcHJlZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBjb3B5IHRoZSBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpZiAocHV0X3VzZXIodmZwLT5oYXJkLmZwc2NyLCAmdWZwLT5mcHNjcikpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGNoaWxkIFZGUCBzdGF0ZS4KKyAqLworc3RhdGljIGludCBwdHJhY2Vfc2V0dmZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKmRhdGEpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKHRzayk7CisJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKKwlzdHJ1Y3QgdXNlcl92ZnAgX191c2VyICp1ZnAgPSBkYXRhOworCisJdmZwX3N5bmNfc3RhdGUodGhyZWFkKTsKKworCS8qIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworCWlmIChjb3B5X2Zyb21fdXNlcigmdmZwLT5oYXJkLmZwcmVncywgJnVmcC0+ZnByZWdzLAorCQkJICAgc2l6ZW9mKHZmcC0+aGFyZC5mcHJlZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBjb3B5IHRoZSBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpZiAoZ2V0X3VzZXIodmZwLT5oYXJkLmZwc2NyLCAmdWZwLT5mcHNjcikpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQogewogCWludCByZXQ7CkBAIC03NzUsNiArODIzLDE2IEBACiAJCQlicmVhazsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1ZGUAorCQljYXNlIFBUUkFDRV9HRVRWRlBSRUdTOgorCQkJcmV0ID0gcHRyYWNlX2dldHZmcHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQVFJBQ0VfU0VUVkZQUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9zZXR2ZnByZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwkJCWJyZWFrOworI2VuZGlmCisKIAkJZGVmYXVsdDoKIAkJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCA2OGQ2NDk0Li5iYzVlNDEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJjb21wYXQuaCIKICNpbmNsdWRlICJhdGFncy5oIgpAQCAtNjg1LDYgKzY4Niw4IEBACiAJc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2M7CiAJY2hhciAqZnJvbSA9IGRlZmF1bHRfY29tbWFuZF9saW5lOwogCisJdW53aW5kX2luaXQoKTsKKwogCXNldHVwX3Byb2Nlc3NvcigpOwogCW1kZXNjID0gc2V0dXBfbWFjaGluZShtYWNoaW5lX2FyY2hfdHlwZSk7CiAJbWFjaGluZV9uYW1lID0gbWRlc2MtPm5hbWU7CkBAIC03ODAsNiArNzgzLDggQEAKIAkiY3J1bmNoIiwKIAkidGh1bWJlZSIsCiAJIm5lb24iLAorCSJ2ZnB2MyIsCisJInZmcHYzZDE2IiwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggNTVmYTdmZi4uNzgwMWFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtOTMsNiArOTMsNyBAQAogCXBtZCA9IHBtZF9vZmZzZXQocGdkICsgcGdkX2luZGV4KFBIWVNfT0ZGU0VUKSwgUEhZU19PRkZTRVQpOwogCSpwbWQgPSBfX3BtZCgoUEhZU19PRkZTRVQgJiBQR0RJUl9NQVNLKSB8CiAJCSAgICAgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFKTsKKwlmbHVzaF9wbWRfZW50cnkocG1kKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byB0ZWxsIHRoZSBzZWNvbmRhcnkgY29yZSB3aGVyZSB0byBmaW5kCkBAIC0xMzAsNiArMTMxLDcgQEAKIAlzZWNvbmRhcnlfZGF0YS5wZ2RpciA9IDA7CiAKIAkqcG1kID0gX19wbWQoMCk7CisJY2xlYW5fcG1kX2VudHJ5KHBtZCk7CiAJcGdkX2ZyZWUoJmluaXRfbW0sIHBnZCk7CiAKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCBmYzY1MGY2Li45ZjQ0NGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTIsMzQgKzIsNTkgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KIAotI2luY2x1ZGUgInN0YWNrdHJhY2UuaCIKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCi1pbnQgd2Fsa19zdGFja2ZyYW1lKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgbG93LCB1bnNpZ25lZCBsb25nIGhpZ2gsCi0JCSAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKKyNpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkKKy8qCisgKiBVbndpbmQgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUgYW5kIHN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWVzIGluIHRoZQorICogc3RydWN0dXJlIHBhc3NlZCBhcyBhcmd1bWVudC4gVW53aW5kaW5nIGlzIGVxdWl2YWxlbnQgdG8gYSBmdW5jdGlvbiByZXR1cm4sCisgKiBoZW5jZSB0aGUgbmV3IFBDIHZhbHVlIHJhdGhlciB0aGFuIExSIHNob3VsZCBiZSB1c2VkIGZvciBiYWNrdHJhY2UuCisgKgorICogV2l0aCBmcmFtZXBvaW50ZXIgZW5hYmxlZCwgYSBzaW1wbGUgZnVuY3Rpb24gcHJvbG9ndWUgbG9va3MgbGlrZSB0aGlzOgorICoJbW92CWlwLCBzcAorICoJc3RtZGIJc3AhLCB7ZnAsIGlwLCBsciwgcGN9CisgKglzdWIJZnAsIGlwLCAjNAorICoKKyAqIEEgc2ltcGxlIGZ1bmN0aW9uIGVwaWxvZ3VlIGxvb2tzIGxpa2UgdGhpczoKKyAqCWxkbQlzcCwge2ZwLCBzcCwgcGN9CisgKgorICogTm90ZSB0aGF0IHdpdGggZnJhbWVwb2ludGVyIGVuYWJsZWQsIGV2ZW4gdGhlIGxlYWYgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUKKyAqIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSwgdGhlcmVmb3JlIHdlIGNhbiBpZ25vcmUgdGhlIExSIHZhbHVlIGluIHRoaXMgY2FzZS4KKyAqLworaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpCiB7Ci0Jc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lOworCXVuc2lnbmVkIGxvbmcgaGlnaCwgbG93OworCXVuc2lnbmVkIGxvbmcgZnAgPSBmcmFtZS0+ZnA7CiAKLQlkbyB7Ci0JCS8qCi0JCSAqIENoZWNrIGN1cnJlbnQgZnJhbWUgcG9pbnRlciBpcyB3aXRoaW4gYm91bmRzCi0JCSAqLwotCQlpZiAoZnAgPCAobG93ICsgMTIpIHx8IGZwICsgNCA+PSBoaWdoKQotCQkJYnJlYWs7CisJLyogb25seSBnbyB0byBhIGhpZ2hlciBhZGRyZXNzIG9uIHRoZSBzdGFjayAqLworCWxvdyA9IGZyYW1lLT5zcDsKKwloaWdoID0gQUxJR04obG93LCBUSFJFQURfU0laRSkgKyBUSFJFQURfU0laRTsKIAotCQlmcmFtZSA9IChzdHJ1Y3Qgc3RhY2tmcmFtZSAqKShmcCAtIDEyKTsKKwkvKiBjaGVjayBjdXJyZW50IGZyYW1lIHBvaW50ZXIgaXMgd2l0aGluIGJvdW5kcyAqLworCWlmIChmcCA8IChsb3cgKyAxMikgfHwgZnAgKyA0ID49IGhpZ2gpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIGZyYW1lICovCisJZnJhbWUtPmZwID0gKih1bnNpZ25lZCBsb25nICopKGZwIC0gMTIpOworCWZyYW1lLT5zcCA9ICoodW5zaWduZWQgbG9uZyAqKShmcCAtIDgpOworCWZyYW1lLT5wYyA9ICoodW5zaWduZWQgbG9uZyAqKShmcCAtIDQpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLAorCQkgICAgIGludCAoKmZuKShzdHJ1Y3Qgc3RhY2tmcmFtZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKQoreworCXdoaWxlICgxKSB7CisJCWludCByZXQ7CiAKIAkJaWYgKGZuKGZyYW1lLCBkYXRhKSkKIAkJCWJyZWFrOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSB0aGUgbG93IGJvdW5kIC0gdGhlIG5leHQgZnJhbWUgbXVzdCBhbHdheXMKLQkJICogYmUgYXQgYSBoaWdoZXIgYWRkcmVzcyB0aGFuIHRoZSBjdXJyZW50IGZyYW1lLgotCQkgKi8KLQkJbG93ID0gZnAgKyA0OwotCQlmcCA9IGZyYW1lLT5mcDsKLQl9IHdoaWxlIChmcCk7Ci0KLQlyZXR1cm4gMDsKKwkJcmV0ID0gdW53aW5kX2ZyYW1lKGZyYW1lKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHdhbGtfc3RhY2tmcmFtZSk7CiAKQEAgLTQ0LDcgKzY5LDcgQEAKIHsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2VfZGF0YSAqZGF0YSA9IGQ7CiAJc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSA9IGRhdGEtPnRyYWNlOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZyYW1lLT5scjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBmcmFtZS0+cGM7CiAKIAlpZiAoZGF0YS0+bm9fc2NoZWRfZnVuY3Rpb25zICYmIGluX3NjaGVkX2Z1bmN0aW9ucyhhZGRyKSkKIAkJcmV0dXJuIDA7CkBAIC02MSwxMSArODYsMTAgQEAKIHZvaWQgc2F2ZV9zdGFja190cmFjZV90c2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlX2RhdGEgZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZwLCBiYXNlOworCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOwogCiAJZGF0YS50cmFjZSA9IHRyYWNlOwogCWRhdGEuc2tpcCA9IHRyYWNlLT5za2lwOwotCWJhc2UgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodHNrKTsKIAogCWlmICh0c2sgIT0gY3VycmVudCkgewogI2lmZGVmIENPTkZJR19TTVAKQEAgLTc2LDE0ICsxMDAsMjIgQEAKIAkJQlVHKCk7CiAjZWxzZQogCQlkYXRhLm5vX3NjaGVkX2Z1bmN0aW9ucyA9IDE7Ci0JCWZwID0gdGhyZWFkX3NhdmVkX2ZwKHRzayk7CisJCWZyYW1lLmZwID0gdGhyZWFkX3NhdmVkX2ZwKHRzayk7CisJCWZyYW1lLnNwID0gdGhyZWFkX3NhdmVkX3NwKHRzayk7CisJCWZyYW1lLmxyID0gMDsJCS8qIHJlY292ZXJlZCBmcm9tIHRoZSBzdGFjayAqLworCQlmcmFtZS5wYyA9IHRocmVhZF9zYXZlZF9wYyh0c2spOwogI2VuZGlmCiAJfSBlbHNlIHsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3NwIGFzbSAoInNwIik7CisKIAkJZGF0YS5ub19zY2hlZF9mdW5jdGlvbnMgPSAwOwotCQlhc20oIm1vdiAlMCwgZnAiIDogIj1yIiAoZnApKTsKKwkJZnJhbWUuZnAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKTsKKwkJZnJhbWUuc3AgPSBjdXJyZW50X3NwOworCQlmcmFtZS5sciA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJZnJhbWUucGMgPSAodW5zaWduZWQgbG9uZylzYXZlX3N0YWNrX3RyYWNlX3RzazsKIAl9CiAKLQl3YWxrX3N0YWNrZnJhbWUoZnAsIGJhc2UsIGJhc2UgKyBUSFJFQURfU0laRSwgc2F2ZV90cmFjZSwgJmRhdGEpOworCXdhbGtfc3RhY2tmcmFtZSgmZnJhbWUsIHNhdmVfdHJhY2UsICZkYXRhKTsKIAlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCiAJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuaCBiL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZmQyMGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotc3RydWN0IHN0YWNrZnJhbWUgewotCXVuc2lnbmVkIGxvbmcgZnA7Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQl1bnNpZ25lZCBsb25nIGxyOwotCXVuc2lnbmVkIGxvbmcgcGM7Ci19OwotCi1pbnQgd2Fsa19zdGFja2ZyYW1lKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgbG93LCB1bnNpZ25lZCBsb25nIGhpZ2gsCi0JCSAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCBjNjhiNDRhLi40Y2RjNGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIC8qCkBAIC01NSwxNCArNTYsMjIgQEAKICNpZmRlZiBDT05GSUdfU01QCiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmcCwgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOwogCi0JaWYgKGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgewotCQlmcCA9IHJlZ3MtPkFSTV9mcDsKLQkJcGMgPSAoKHVuc2lnbmVkIGxvbmcgKilmcClbLTFdOwotCX0KKwlpZiAoIWluX2xvY2tfZnVuY3Rpb25zKHJlZ3MtPkFSTV9wYykpCisJCXJldHVybiByZWdzLT5BUk1fcGM7CiAKLQlyZXR1cm4gcGM7CisJZnJhbWUuZnAgPSByZWdzLT5BUk1fZnA7CisJZnJhbWUuc3AgPSByZWdzLT5BUk1fc3A7CisJZnJhbWUubHIgPSByZWdzLT5BUk1fbHI7CisJZnJhbWUucGMgPSByZWdzLT5BUk1fcGM7CisJZG8geworCQlpbnQgcmV0ID0gdW53aW5kX2ZyYW1lKCZmcmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAoaW5fbG9ja19mdW5jdGlvbnMoZnJhbWUucGMpKTsKKworCXJldHVybiBmcmFtZS5wYzsKIH0KIEVYUE9SVF9TWU1CT0wocHJvZmlsZV9wYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggNzlhYmM0ZC4uNTdlYjBmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInB0cmFjZS5oIgogI2luY2x1ZGUgInNpZ25hbC5oIgpAQCAtNjEsNiArNjIsNyBAQAogCQlkdW1wX21lbSgiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfQVJNX1VOV0lORAogLyoKICAqIFN0YWNrIHBvaW50ZXJzIHNob3VsZCBhbHdheXMgYmUgd2l0aGluIHRoZSBrZXJuZWxzIHZpZXcgb2YKICAqIHBoeXNpY2FsIG1lbW9yeS4gIElmIGl0IGlzIG5vdCB0aGVyZSwgdGhlbiB3ZSBjYW4ndCBkdW1wCkBAIC03NCw2ICs3Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiAvKgogICogRHVtcCBvdXQgdGhlIGNvbnRlbnRzIG9mIHNvbWUgbWVtb3J5IG5pY2VseS4uLgpAQCAtMTUwLDEzICsxNTMsMzMgQEAKIAlzZXRfZnMoZnMpOwogfQogCisjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW53aW5kX2JhY2t0cmFjZShyZWdzLCB0c2spOworfQorI2Vsc2UKIHN0YXRpYyB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBpbnQgZnA7CisJdW5zaWduZWQgaW50IGZwLCBtb2RlOwogCWludCBvayA9IDE7CiAKIAlwcmludGsoIkJhY2t0cmFjZTogIik7Ci0JZnAgPSByZWdzLT5BUk1fZnA7CisKKwlpZiAoIXRzaykKKwkJdHNrID0gY3VycmVudDsKKworCWlmIChyZWdzKSB7CisJCWZwID0gcmVncy0+QVJNX2ZwOworCQltb2RlID0gcHJvY2Vzc29yX21vZGUocmVncyk7CisJfSBlbHNlIGlmICh0c2sgIT0gY3VycmVudCkgeworCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQltb2RlID0gMHgxMDsKKwl9IGVsc2UgeworCQlhc20oIm1vdiAlMCwgZnAiIDogIj1yIiAoZnApIDogOiAiY2MiKTsKKwkJbW9kZSA9IDB4MTA7CisJfQorCiAJaWYgKCFmcCkgewogCQlwcmludGsoIm5vIGZyYW1lIHBvaW50ZXIiKTsKIAkJb2sgPSAwOwpAQCAtMTY4LDI5ICsxOTEsMjAgQEAKIAlwcmludGsoIlxuIik7CiAKIAlpZiAob2spCi0JCWNfYmFja3RyYWNlKGZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7CisJCWNfYmFja3RyYWNlKGZwLCBtb2RlKTsKIH0KKyNlbmRpZgogCiB2b2lkIGR1bXBfc3RhY2sodm9pZCkKIHsKLQlfX2JhY2t0cmFjZSgpOworCWR1bXBfYmFja3RyYWNlKE5VTEwsIE5VTEwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2spOwogCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgKnNwKQogewotCXVuc2lnbmVkIGxvbmcgZnA7Ci0KLQlpZiAoIXRzaykKLQkJdHNrID0gY3VycmVudDsKLQotCWlmICh0c2sgIT0gY3VycmVudCkKLQkJZnAgPSB0aHJlYWRfc2F2ZWRfZnAodHNrKTsKLQllbHNlCi0JCWFzbSgibW92ICUwLCBmcCIgOiAiPXIiIChmcCkgOiA6ICJjYyIpOwotCi0JY19iYWNrdHJhY2UoZnAsIDB4MTApOworCWR1bXBfYmFja3RyYWNlKE5VTEwsIHRzayk7CiAJYmFycmllcigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlZGMyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIGFyY2gvYXJtL2tlcm5lbC91bndpbmQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIFN0YWNrIHVud2luZGluZyBzdXBwb3J0IGZvciBBUk0KKyAqCisgKiBBbiBBUk0gRUFCSSB2ZXJzaW9uIG9mIGdjYyBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGUgdW53aW5kCisgKiB0YWJsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSB1bndpbmQgdGFibGVzLAorICogc2VlICJFeGNlcHRpb24gSGFuZGxpbmcgQUJJIGZvciB0aGUgQVJNIEFyY2hpdGVjdHVyZSIgYXQ6CisgKgorICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLnN1YnNldC5zd2Rldi5hYmkvaW5kZXguaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKworLyogRHVtbXkgZnVuY3Rpb25zIHRvIGF2b2lkIGxpbmtlciBjb21wbGFpbnRzICovCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjAodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjApOworCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjEodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjEpOworCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjIodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjIpOworCitzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgeworCXVuc2lnbmVkIGxvbmcgdnJzWzE2XTsJCS8qIHZpcnR1YWwgcmVnaXN0ZXIgc2V0ICovCisJdW5zaWduZWQgbG9uZyAqaW5zbjsJCS8qIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb25zIHdvcmQgKi8KKwlpbnQgZW50cmllczsJCQkvKiBudW1iZXIgb2YgZW50cmllcyBsZWZ0IHRvIGludGVycHJldCAqLworCWludCBieXRlOwkJCS8qIGN1cnJlbnQgYnl0ZSBudW1iZXIgaW4gdGhlIGluc3RydWN0aW9ucyB3b3JkICovCit9OworCitlbnVtIHJlZ3MgeworCUZQID0gMTEsCisJU1AgPSAxMywKKwlMUiA9IDE0LAorCVBDID0gMTUKK307CisKK2V4dGVybiBzdHJ1Y3QgdW53aW5kX2lkeCBfX3N0YXJ0X3Vud2luZF9pZHhbXTsKK2V4dGVybiBzdHJ1Y3QgdW53aW5kX2lkeCBfX3N0b3BfdW53aW5kX2lkeFtdOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVud2luZF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQodW53aW5kX3RhYmxlcyk7CisKKy8qIENvbnZlcnQgYSBwcmVsMzEgc3ltYm9sIHRvIGFuIGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgcHJlbDMxX3RvX2FkZHIocHRyKQkJCQlcCisoewkJCQkJCQlcCisJLyogc2lnbi1leHRlbmQgdG8gMzIgYml0cyAqLwkJCVwKKwlsb25nIG9mZnNldCA9ICgoKGxvbmcpKihwdHIpKSA8PCAxKSA+PiAxOwlcCisJKHVuc2lnbmVkIGxvbmcpKHB0cikgKyBvZmZzZXQ7CQkJXAorfSkKKworLyoKKyAqIEJpbmFyeSBzZWFyY2ggaW4gdGhlIHVud2luZCBpbmRleC4gVGhlIGVudHJpZXMgZW50cmllcyBhcmUKKyAqIGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgbGlua2VyLgorICovCitzdGF0aWMgc3RydWN0IHVud2luZF9pZHggKnNlYXJjaF9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgIHN0cnVjdCB1bndpbmRfaWR4ICpmaXJzdCwKKwkJCQkgICAgICAgc3RydWN0IHVud2luZF9pZHggKmxhc3QpCit7CisJcHJfZGVidWcoIiVzKCUwOGx4LCAlcCwgJXApXG4iLCBfX2Z1bmNfXywgYWRkciwgZmlyc3QsIGxhc3QpOworCisJaWYgKGFkZHIgPCBmaXJzdC0+YWRkcikgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IFVua25vd24gc3ltYm9sIGFkZHJlc3MgJTA4bHhcbiIsIGFkZHIpOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKGFkZHIgPj0gbGFzdC0+YWRkcikKKwkJcmV0dXJuIGxhc3Q7CisKKwl3aGlsZSAoZmlyc3QgPCBsYXN0IC0gMSkgeworCQlzdHJ1Y3QgdW53aW5kX2lkeCAqbWlkID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCArIDEpID4+IDEpOworCisJCWlmIChhZGRyIDwgbWlkLT5hZGRyKQorCQkJbGFzdCA9IG1pZDsKKwkJZWxzZQorCQkJZmlyc3QgPSBtaWQ7CisJfQorCisJcmV0dXJuIGZpcnN0OworfQorCitzdGF0aWMgc3RydWN0IHVud2luZF9pZHggKnVud2luZF9maW5kX2lkeCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHVud2luZF9pZHggKmlkeCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlcyglMDhseClcbiIsIF9fZnVuY19fLCBhZGRyKTsKKworCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQorCQkvKiBtYWluIHVud2luZCB0YWJsZSAqLworCQlpZHggPSBzZWFyY2hfaW5kZXgoYWRkciwgX19zdGFydF91bndpbmRfaWR4LAorCQkJCSAgIF9fc3RvcF91bndpbmRfaWR4IC0gMSk7CisJZWxzZSB7CisJCS8qIG1vZHVsZSB1bndpbmQgdGFibGVzICovCisJCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhYmxlLCAmdW53aW5kX3RhYmxlcywgbGlzdCkgeworCQkJaWYgKGFkZHIgPj0gdGFibGUtPmJlZ2luX2FkZHIgJiYKKwkJCSAgICBhZGRyIDwgdGFibGUtPmVuZF9hZGRyKSB7CisJCQkJaWR4ID0gc2VhcmNoX2luZGV4KGFkZHIsIHRhYmxlLT5zdGFydCwKKwkJCQkJCSAgIHRhYmxlLT5zdG9wIC0gMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlwcl9kZWJ1ZygiJXM6IGlkeCA9ICVwXG4iLCBfX2Z1bmNfXywgaWR4KTsKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bndpbmRfZ2V0X2J5dGUoc3RydWN0IHVud2luZF9jdHJsX2Jsb2NrICpjdHJsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJaWYgKGN0cmwtPmVudHJpZXMgPD0gMCkgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IENvcnJ1cHQgdW53aW5kIHRhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gKCpjdHJsLT5pbnNuID4+IChjdHJsLT5ieXRlICogOCkpICYgMHhmZjsKKworCWlmIChjdHJsLT5ieXRlID09IDApIHsKKwkJY3RybC0+aW5zbisrOworCQljdHJsLT5lbnRyaWVzLS07CisJCWN0cmwtPmJ5dGUgPSAzOworCX0gZWxzZQorCQljdHJsLT5ieXRlLS07CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRXhlY3V0ZSB0aGUgY3VycmVudCB1bndpbmQgaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgdW53aW5kX2V4ZWNfaW5zbihzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgKmN0cmwpCit7CisJdW5zaWduZWQgbG9uZyBpbnNuID0gdW53aW5kX2dldF9ieXRlKGN0cmwpOworCisJcHJfZGVidWcoIiVzOiBpbnNuID0gJTA4bHhcbiIsIF9fZnVuY19fLCBpbnNuKTsKKworCWlmICgoaW5zbiAmIDB4YzApID09IDB4MDApCisJCWN0cmwtPnZyc1tTUF0gKz0gKChpbnNuICYgMHgzZikgPDwgMikgKyA0OworCWVsc2UgaWYgKChpbnNuICYgMHhjMCkgPT0gMHg0MCkKKwkJY3RybC0+dnJzW1NQXSAtPSAoKGluc24gJiAweDNmKSA8PCAyKSArIDQ7CisJZWxzZSBpZiAoKGluc24gJiAweGYwKSA9PSAweDgwKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzazsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgbG9hZF9zcCwgcmVnID0gNDsKKworCQlpbnNuID0gKGluc24gPDwgOCkgfCB1bndpbmRfZ2V0X2J5dGUoY3RybCk7CisJCW1hc2sgPSBpbnNuICYgMHgwZmZmOworCQlpZiAobWFzayA9PSAwKSB7CisJCQlwcl93YXJuaW5nKCJ1bndpbmQ6ICdSZWZ1c2UgdG8gdW53aW5kJyBpbnN0cnVjdGlvbiAlMDRseFxuIiwKKwkJCQkgICBpbnNuKTsKKwkJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJCX0KKworCQkvKiBwb3AgUjQtUjE1IGFjY29yZGluZyB0byBtYXNrICovCisJCWxvYWRfc3AgPSBtYXNrICYgKDEgPDwgKDEzIC0gNCkpOworCQl3aGlsZSAobWFzaykgeworCQkJaWYgKG1hc2sgJiAxKQorCQkJCWN0cmwtPnZyc1tyZWddID0gKnZzcCsrOworCQkJbWFzayA+Pj0gMTsKKwkJCXJlZysrOworCQl9CisJCWlmICghbG9hZF9zcCkKKwkJCWN0cmwtPnZyc1tTUF0gPSAodW5zaWduZWQgbG9uZyl2c3A7CisJfSBlbHNlIGlmICgoaW5zbiAmIDB4ZjApID09IDB4OTAgJiYKKwkJICAgKGluc24gJiAweDBkKSAhPSAweDBkKQorCQljdHJsLT52cnNbU1BdID0gY3RybC0+dnJzW2luc24gJiAweDBmXTsKKwllbHNlIGlmICgoaW5zbiAmIDB4ZjApID09IDB4YTApIHsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgcmVnOworCisJCS8qIHBvcCBSNC1SWzQrYmJiXSAqLworCQlmb3IgKHJlZyA9IDQ7IHJlZyA8PSA0ICsgKGluc24gJiA3KTsgcmVnKyspCisJCQljdHJsLT52cnNbcmVnXSA9ICp2c3ArKzsKKwkJaWYgKGluc24gJiAweDgwKQorCQkJY3RybC0+dnJzWzE0XSA9ICp2c3ArKzsKKwkJY3RybC0+dnJzW1NQXSA9ICh1bnNpZ25lZCBsb25nKXZzcDsKKwl9IGVsc2UgaWYgKGluc24gPT0gMHhiMCkgeworCQljdHJsLT52cnNbUENdID0gY3RybC0+dnJzW0xSXTsKKwkJLyogbm8gZnVydGhlciBwcm9jZXNzaW5nICovCisJCWN0cmwtPmVudHJpZXMgPSAwOworCX0gZWxzZSBpZiAoaW5zbiA9PSAweGIxKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzayA9IHVud2luZF9nZXRfYnl0ZShjdHJsKTsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgcmVnID0gMDsKKworCQlpZiAobWFzayA9PSAwIHx8IG1hc2sgJiAweGYwKSB7CisJCQlwcl93YXJuaW5nKCJ1bndpbmQ6IFNwYXJlIGVuY29kaW5nICUwNGx4XG4iLAorCQkJICAgICAgIChpbnNuIDw8IDgpIHwgbWFzayk7CisJCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCQl9CisKKwkJLyogcG9wIFIwLVIzIGFjY29yZGluZyB0byBtYXNrICovCisJCXdoaWxlIChtYXNrKSB7CisJCQlpZiAobWFzayAmIDEpCisJCQkJY3RybC0+dnJzW3JlZ10gPSAqdnNwKys7CisJCQltYXNrID4+PSAxOworCQkJcmVnKys7CisJCX0KKwkJY3RybC0+dnJzW1NQXSA9ICh1bnNpZ25lZCBsb25nKXZzcDsKKwl9IGVsc2UgaWYgKGluc24gPT0gMHhiMikgeworCQl1bnNpZ25lZCBsb25nIHVsZWIxMjggPSB1bndpbmRfZ2V0X2J5dGUoY3RybCk7CisKKwkJY3RybC0+dnJzW1NQXSArPSAweDIwNCArICh1bGViMTI4IDw8IDIpOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoInVud2luZDogVW5oYW5kbGVkIGluc3RydWN0aW9uICUwMmx4XG4iLCBpbnNuKTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwlwcl9kZWJ1ZygiJXM6IGZwID0gJTA4bHggc3AgPSAlMDhseCBsciA9ICUwOGx4IHBjID0gJTA4bHhcbiIsIF9fZnVuY19fLAorCQkgY3RybC0+dnJzW0ZQXSwgY3RybC0+dnJzW1NQXSwgY3RybC0+dnJzW0xSXSwgY3RybC0+dnJzW1BDXSk7CisKKwlyZXR1cm4gVVJDX09LOworfQorCisvKgorICogVW53aW5kIGEgc2luZ2xlIGZyYW1lIHN0YXJ0aW5nIHdpdGggKnNwIGZvciB0aGUgc3ltYm9sIGF0ICpwYy4gSXQKKyAqIHVwZGF0ZXMgdGhlICpwYyBhbmQgKnNwIHdpdGggdGhlIG5ldyB2YWx1ZXMuCisgKi8KK2ludCB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGxvbmcgaGlnaCwgbG93OworCXN0cnVjdCB1bndpbmRfaWR4ICppZHg7CisJc3RydWN0IHVud2luZF9jdHJsX2Jsb2NrIGN0cmw7CisKKwkvKiBvbmx5IGdvIHRvIGEgaGlnaGVyIGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCisJbG93ID0gZnJhbWUtPnNwOworCWhpZ2ggPSBBTElHTihsb3csIFRIUkVBRF9TSVpFKSArIFRIUkVBRF9TSVpFOworCisJcHJfZGVidWcoIiVzKHBjID0gJTA4bHggbHIgPSAlMDhseCBzcCA9ICUwOGx4KVxuIiwgX19mdW5jX18sCisJCSBmcmFtZS0+cGMsIGZyYW1lLT5sciwgZnJhbWUtPnNwKTsKKworCWlmICgha2VybmVsX3RleHRfYWRkcmVzcyhmcmFtZS0+cGMpKQorCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCisJaWR4ID0gdW53aW5kX2ZpbmRfaWR4KGZyYW1lLT5wYyk7CisJaWYgKCFpZHgpIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBJbmRleCBub3QgZm91bmQgJTA4bHhcbiIsIGZyYW1lLT5wYyk7CisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJfQorCisJY3RybC52cnNbRlBdID0gZnJhbWUtPmZwOworCWN0cmwudnJzW1NQXSA9IGZyYW1lLT5zcDsKKwljdHJsLnZyc1tMUl0gPSBmcmFtZS0+bHI7CisJY3RybC52cnNbUENdID0gMDsKKworCWlmIChpZHgtPmluc24gPT0gMSkKKwkJLyogY2FuJ3QgdW53aW5kICovCisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJZWxzZSBpZiAoKGlkeC0+aW5zbiAmIDB4ODAwMDAwMDApID09IDApCisJCS8qIHByZWwzMSB0byB0aGUgdW53aW5kIHRhYmxlICovCisJCWN0cmwuaW5zbiA9ICh1bnNpZ25lZCBsb25nICopcHJlbDMxX3RvX2FkZHIoJmlkeC0+aW5zbik7CisJZWxzZSBpZiAoKGlkeC0+aW5zbiAmIDB4ZmYwMDAwMDApID09IDB4ODAwMDAwMDApCisJCS8qIG9ubHkgcGVyc29uYWxpdHkgcm91dGluZSAwIHN1cHBvcnRlZCBpbiB0aGUgaW5kZXggKi8KKwkJY3RybC5pbnNuID0gJmlkeC0+aW5zbjsKKwllbHNlIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBVbnN1cHBvcnRlZCBwZXJzb25hbGl0eSByb3V0aW5lICUwOGx4IGluIHRoZSBpbmRleCBhdCAlcFxuIiwKKwkJCSAgIGlkeC0+aW5zbiwgaWR4KTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwkvKiBjaGVjayB0aGUgcGVyc29uYWxpdHkgcm91dGluZSAqLworCWlmICgoKmN0cmwuaW5zbiAmIDB4ZmYwMDAwMDApID09IDB4ODAwMDAwMDApIHsKKwkJY3RybC5ieXRlID0gMjsKKwkJY3RybC5lbnRyaWVzID0gMTsKKwl9IGVsc2UgaWYgKCgqY3RybC5pbnNuICYgMHhmZjAwMDAwMCkgPT0gMHg4MTAwMDAwMCkgeworCQljdHJsLmJ5dGUgPSAxOworCQljdHJsLmVudHJpZXMgPSAxICsgKCgqY3RybC5pbnNuICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoInVud2luZDogVW5zdXBwb3J0ZWQgcGVyc29uYWxpdHkgcm91dGluZSAlMDhseCBhdCAlcFxuIiwKKwkJCSAgICpjdHJsLmluc24sIGN0cmwuaW5zbik7CisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJfQorCisJd2hpbGUgKGN0cmwuZW50cmllcyA+IDApIHsKKwkJaW50IHVyYzsKKworCQlpZiAoY3RybC52cnNbU1BdIDwgbG93IHx8IGN0cmwudnJzW1NQXSA+PSBoaWdoKQorCQkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwkJdXJjID0gdW53aW5kX2V4ZWNfaW5zbigmY3RybCk7CisJCWlmICh1cmMgPCAwKQorCQkJcmV0dXJuIHVyYzsKKwl9CisKKwlpZiAoY3RybC52cnNbUENdID09IDApCisJCWN0cmwudnJzW1BDXSA9IGN0cmwudnJzW0xSXTsKKworCWZyYW1lLT5mcCA9IGN0cmwudnJzW0ZQXTsKKwlmcmFtZS0+c3AgPSBjdHJsLnZyc1tTUF07CisJZnJhbWUtPmxyID0gY3RybC52cnNbTFJdOworCWZyYW1lLT5wYyA9IGN0cmwudnJzW1BDXTsKKworCXJldHVybiBVUkNfT0s7Cit9CisKK3ZvaWQgdW53aW5kX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CisJdW5zaWduZWQgbG9uZyBoaWdoLCBsb3c7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3NwIGFzbSAoInNwIik7CisKKwlwcl9kZWJ1ZygiJXMocmVncyA9ICVwIHRzayA9ICVwKVxuIiwgX19mdW5jX18sIHJlZ3MsIHRzayk7CisKKwlpZiAoIXRzaykKKwkJdHNrID0gY3VycmVudDsKKworCWlmIChyZWdzKSB7CisJCWZyYW1lLmZwID0gcmVncy0+QVJNX2ZwOworCQlmcmFtZS5zcCA9IHJlZ3MtPkFSTV9zcDsKKwkJZnJhbWUubHIgPSByZWdzLT5BUk1fbHI7CisJCWZyYW1lLnBjID0gcmVncy0+QVJNX3BjOworCX0gZWxzZSBpZiAodHNrID09IGN1cnJlbnQpIHsKKwkJZnJhbWUuZnAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKTsKKwkJZnJhbWUuc3AgPSBjdXJyZW50X3NwOworCQlmcmFtZS5sciA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJZnJhbWUucGMgPSAodW5zaWduZWQgbG9uZyl1bndpbmRfYmFja3RyYWNlOworCX0gZWxzZSB7CisJCS8qIHRhc2sgYmxvY2tlZCBpbiBfX3N3aXRjaF90byAqLworCQlmcmFtZS5mcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQlmcmFtZS5zcCA9IHRocmVhZF9zYXZlZF9zcCh0c2spOworCQkvKgorCQkgKiBUaGUgZnVuY3Rpb24gY2FsbGluZyBfX3N3aXRjaF90byBjYW5ub3QgYmUgYSBsZWFmIGZ1bmN0aW9uCisJCSAqIHNvIExSIGlzIHJlY292ZXJlZCBmcm9tIHRoZSBzdGFjay4KKwkJICovCisJCWZyYW1lLmxyID0gMDsKKwkJZnJhbWUucGMgPSB0aHJlYWRfc2F2ZWRfcGModHNrKTsKKwl9CisKKwlsb3cgPSBmcmFtZS5zcCAmIH4oVEhSRUFEX1NJWkUgLSAxKTsKKwloaWdoID0gbG93ICsgVEhSRUFEX1NJWkU7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgdXJjOworCQl1bnNpZ25lZCBsb25nIHdoZXJlID0gZnJhbWUucGM7CisKKwkJdXJjID0gdW53aW5kX2ZyYW1lKCZmcmFtZSk7CisJCWlmICh1cmMgPCAwKQorCQkJYnJlYWs7CisJCWR1bXBfYmFja3RyYWNlX2VudHJ5KHdoZXJlLCBmcmFtZS5wYywgZnJhbWUuc3AgLSA0KTsKKwl9Cit9CisKK3N0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGV4dF9hZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGV4dF9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVud2luZF9pZHggKmlkeDsKKwlzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jKHNpemVvZigqdGFiKSwgR0ZQX0tFUk5FTCk7CisKKwlwcl9kZWJ1ZygiJXMoJTA4bHgsICUwOGx4LCAlMDhseCwgJTA4bHgpXG4iLCBfX2Z1bmNfXywgc3RhcnQsIHNpemUsCisJCSB0ZXh0X2FkZHIsIHRleHRfc2l6ZSk7CisKKwlpZiAoIXRhYikKKwkJcmV0dXJuIHRhYjsKKworCXRhYi0+c3RhcnQgPSAoc3RydWN0IHVud2luZF9pZHggKilzdGFydDsKKwl0YWItPnN0b3AgPSAoc3RydWN0IHVud2luZF9pZHggKikoc3RhcnQgKyBzaXplKTsKKwl0YWItPmJlZ2luX2FkZHIgPSB0ZXh0X2FkZHI7CisJdGFiLT5lbmRfYWRkciA9IHRleHRfYWRkciArIHRleHRfc2l6ZTsKKworCS8qIENvbnZlcnQgdGhlIHN5bWJvbCBhZGRyZXNzZXMgdG8gYWJzb2x1dGUgdmFsdWVzICovCisJZm9yIChpZHggPSB0YWItPnN0YXJ0OyBpZHggPCB0YWItPnN0b3A7IGlkeCsrKQorCQlpZHgtPmFkZHIgPSBwcmVsMzFfdG9fYWRkcigmaWR4LT5hZGRyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnRhYi0+bGlzdCwgJnVud2luZF90YWJsZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGFiOworfQorCit2b2lkIHVud2luZF90YWJsZV9kZWwoc3RydWN0IHVud2luZF90YWJsZSAqdGFiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXRhYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnRhYi0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKworCWtmcmVlKHRhYik7Cit9CisKK2ludCBfX2luaXQgdW53aW5kX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqaWR4OworCisJLyogQ29udmVydCB0aGUgc3ltYm9sIGFkZHJlc3NlcyB0byBhYnNvbHV0ZSB2YWx1ZXMgKi8KKwlmb3IgKGlkeCA9IF9fc3RhcnRfdW53aW5kX2lkeDsgaWR4IDwgX19zdG9wX3Vud2luZF9pZHg7IGlkeCsrKQorCQlpZHgtPmFkZHIgPSBwcmVsMzFfdG9fYWRkcigmaWR4LT5hZGRyKTsKKworCXByX2RlYnVnKCJ1bndpbmQ6IEFSTSBzdGFjayB1bndpbmRpbmcgaW5pdGlhbGlzZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDE2MDIzNzMuLmM5MGYyNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04Miw2ICs4Miw4IEBACiAJCUVYSVRfVEVYVAogCQlFWElUX0RBVEEKIAkJKiguZXhpdGNhbGwuZXhpdCkKKwkJKiguQVJNLmV4aWR4LmV4aXQudGV4dCkKKwkJKiguQVJNLmV4dGFiLmV4aXQudGV4dCkKICNpZm5kZWYgQ09ORklHX01NVQogCQkqKC5maXh1cCkKIAkJKihfX2V4X3RhYmxlKQpAQCAtMTEyLDYgKzExNCwyMyBAQAogCiAJX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBhbmQgcm9kYXRhIHNlY3Rpb24gKi8KIAorI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisJLyoKKwkgKiBTdGFjayB1bndpbmRpbmcgdGFibGVzCisJICovCisJLiA9IEFMSUdOKDgpOworCS5BUk0udW53aW5kX2lkeCA6IHsKKwkJX19zdGFydF91bndpbmRfaWR4ID0gLjsKKwkJKiguQVJNLmV4aWR4KikKKwkJX19zdG9wX3Vud2luZF9pZHggPSAuOworCX0KKwkuQVJNLnVud2luZF90YWIgOiB7CisJCV9fc3RhcnRfdW53aW5kX3RhYiA9IC47CisJCSooLkFSTS5leHRhYiopCisJCV9fc3RvcF91bndpbmRfdGFiID0gLjsKKwl9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCiAJX19kYXRhX2xvYyA9IEFMSUdOKDQpOwkJLyogbG9jYXRpb24gaW4gYmluYXJ5ICovCiAJLiA9IFBBR0VfT0ZGU0VUICsgVEVYVF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDhmNDExNWQuLmZlMDhjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCmluZGV4IDgxNDM5ZmUuLjQzOGVmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKQEAgLTIzOCw2ICsyMzgsMTAgQEAKIAlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwogCS8qIExFRHMgKi8KIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKKwkvKiBQQ0swIHByb3ZpZGVzIE1DTEsgdG8gdGhlIFdNODczMSAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CisJLyogU1NDIChmb3IgV004NzMxKSAqLworCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCBBVE1FTF9TU0NfVFgpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05RzIwRUssICJBdG1lbCBBVDkxU0FNOUcyMC1FSyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAppbmRleCA3YjljZTdhLi5iNWRhZjdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKQEAgLTQ3LDkgKzQ3LDYgQEAKICNkZWZpbmUgQVQ5MVJNOTIwMF9CR0EJCTQJLyogQVQ5MVJNOTIwMCBCR0EgcGFja2FnZSBoYXMgNCBiYW5rcyAqLwogCiBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgewotCXVuc2lnbmVkIGNoaXBiYXNlOwkJLyogYmFuaydzIGZpcnN0IEdQSU8gbnVtYmVyICovCi0Jdm9pZCBfX2lvbWVtICpyZWdiYXNlOwkJLyogYmFzZSBvZiByZWdpc3RlciBiYW5rICovCi0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpuZXh0OwkvKiBiYW5rIHNoYXJpbmcgc2FtZSBJUlEvY2xvY2svLi4uICovCiAJdW5zaWduZWQgc2hvcnQgaWQ7CQkvKiBwZXJpcGhlcmFsIElEICovCiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CQkvKiBvZmZzZXQgZnJvbSBzeXN0ZW0gcGVyaXBoZXJhbCBiYXNlICovCiAJc3RydWN0IGNsayAqY2xvY2s7CQkvKiBhc3NvY2lhdGVkIGNsb2NrICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwppbmRleCAyZjdkNDk3Li5mMjIzNmYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKQEAgLTI0LDE5ICsyNCw1OSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MV9waW8uaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKK3N0cnVjdCBhdDkxX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqbmV4dDsJCS8qIEJhbmsgc2hhcmluZyBzYW1lIGNsb2NrICovCisJc3RydWN0IGF0OTFfZ3Bpb19iYW5rCSpiYW5rOwkJLyogQmFuayBkZWZpbml0aW9uICovCisJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogQmFzZSBvZiByZWdpc3RlciBiYW5rICovCit9OwogCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpncGlvOworI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQorCitzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKK3N0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOworc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQpOworc3RhdGljIGludCBhdDkxX2dwaW9saWJfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOworCisjZGVmaW5lIEFUOTFfR1BJT19DSElQKG5hbWUsIGJhc2VfZ3BpbywgbnJfZ3BpbykJCQlcCisJewkJCQkJCQkJXAorCQkuY2hpcCA9IHsJCQkJCQlcCisJCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKKwkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAorCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCisJCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCisJCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKKwkJCS5zZXQJCSAgPSBhdDkxX2dwaW9saWJfc2V0LAkJXAorCQkJLmRiZ19zaG93CSAgPSBhdDkxX2dwaW9saWJfZGJnX3Nob3csCVwKKwkJCS5iYXNlCQkgID0gYmFzZV9ncGlvLAkJCVwKKwkJCS5uZ3BpbwkJICA9IG5yX2dwaW8sCQkJXAorCQl9LAkJCQkJCQlcCisJfQorCitzdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19jaGlwIGdwaW9fY2hpcFtdID0geworCUFUOTFfR1BJT19DSElQKCJBIiwgMHgwMCArIFBJTl9CQVNFLCAzMiksCisJQVQ5MV9HUElPX0NISVAoIkIiLCAweDIwICsgUElOX0JBU0UsIDMyKSwKKwlBVDkxX0dQSU9fQ0hJUCgiQyIsIDB4NDAgKyBQSU5fQkFTRSwgMzIpLAorCUFUOTFfR1BJT19DSElQKCJEIiwgMHg2MCArIFBJTl9CQVNFLCAzMiksCisJQVQ5MV9HUElPX0NISVAoIkUiLCAweDgwICsgUElOX0JBU0UsIDMyKSwKK307CisKIHN0YXRpYyBpbnQgZ3Bpb19iYW5rczsKIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQogewogCXBpbiAtPSBQSU5fQkFTRTsKIAlwaW4gLz0gMzI7CiAJaWYgKGxpa2VseShwaW4gPCBncGlvX2JhbmtzKSkKLQkJcmV0dXJuIGdwaW9bcGluXS5yZWdiYXNlOworCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMTk3LDM5ICsyMzcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChhdDkxX3NldF9tdWx0aV9kcml2ZSk7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBuZXctc3R5bGUgR1BJTyBjYWxsczsgdGhlc2UgZXhwZWN0IGF0OTFfc2V0X0dQSU9fcGVyaXBoIHRvIGhhdmUgYmVlbgotICogY2FsbGVkLCBhbmQgbWF5YmUgYXQ5MV9zZXRfbXVsdGlfZHJpdmUoKSBmb3IgcHV0b3V0IHBpbnMuCi0gKi8KLQotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIHBpbikKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbyB8fCAhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QU1IpICYgbWFzaykpCi0JCXJldHVybiAtRUlOVkFMOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fT0RSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICEoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWx1ZSA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKgogICogYXNzdW1pbmcgdGhlIHBpbiBpcyBtdXhlZCBhcyBhIGdwaW8gb3V0cHV0LCBzZXQgaXRzIHZhbHVlLgogICovCkBAIC0yODIsNyArMjg5LDcgQEAKIAllbHNlCiAJCXdha2V1cHNbYmFua10gJj0gfm1hc2s7CiAKLQlzZXRfaXJxX3dha2UoZ3Bpb1tiYW5rXS5pZCwgc3RhdGUpOworCXNldF9pcnFfd2FrZShncGlvX2NoaXBbYmFua10uYmFuay0+aWQsIHN0YXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjkyLDE0ICsyOTksMTQgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKLQkJdm9pZCBfX2lvbWVtCSpwaW8gPSBncGlvW2ldLnJlZ2Jhc2U7CisJCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb19jaGlwW2ldLnJlZ2Jhc2U7CiAKIAkJYmFja3Vwc1tpXSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwogCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lEUik7CiAJCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKIAogCQlpZiAoIXdha2V1cHNbaV0pCi0JCQljbGtfZGlzYWJsZShncGlvW2ldLmNsb2NrKTsKKwkJCWNsa19kaXNhYmxlKGdwaW9fY2hpcFtpXS5iYW5rLT5jbG9jayk7CiAJCWVsc2UgewogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU8tJWMgbWF5IHdha2UgZm9yICUwOHhcbiIsICdBJytpLCB3YWtldXBzW2ldKTsKQEAgLTMxMywxMCArMzIwLDEwIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb1tpXS5yZWdiYXNlOworCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwogCiAJCWlmICghd2FrZXVwc1tpXSkKLQkJCWNsa19lbmFibGUoZ3Bpb1tpXS5jbG9jayk7CisJCQljbGtfZW5hYmxlKGdwaW9fY2hpcFtpXS5iYW5rLT5jbG9jayk7CiAKIAkJX19yYXdfd3JpdGVsKHdha2V1cHNbaV0sIHBpbyArIFBJT19JRFIpOwogCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lFUik7CkBAIC0zODAsMTIgKzM4NywxMiBAQAogewogCXVuc2lnbmVkCXBpbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MJKmdwaW87Ci0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpiYW5rOworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvOwogCXZvaWQgX19pb21lbQkqcGlvOwogCXUzMgkJaXNyOwogCi0JYmFuayA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JcGlvID0gYmFuay0+cmVnYmFzZTsKKwlhdDkxX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKIAogCS8qIHRlbXBvcmFyaWx5IG1hc2sgKGxldmVsIHNlbnNpdGl2ZSkgcGFyZW50IElSUSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtMzk2LDE0ICs0MDMsMTQgQEAKIAkJICovCiAJCWlzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JU1IpICYgX19yYXdfcmVhZGwocGlvICsgUElPX0lNUik7CiAJCWlmICghaXNyKSB7Ci0JCQlpZiAoIWJhbmstPm5leHQpCisJCQlpZiAoIWF0OTFfZ3Bpby0+bmV4dCkKIAkJCQlicmVhazsKLQkJCWJhbmsgPSBiYW5rLT5uZXh0OwotCQkJcGlvID0gYmFuay0+cmVnYmFzZTsKKwkJCWF0OTFfZ3BpbyA9IGF0OTFfZ3Bpby0+bmV4dDsKKwkJCXBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcGluID0gYmFuay0+Y2hpcGJhc2U7CisJCXBpbiA9IGF0OTFfZ3Bpby0+Y2hpcC5iYXNlOwogCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CiAKIAkJd2hpbGUgKGlzcikgewpAQCAtNTAyLDE3ICs1MDksMTcgQEAKIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZAkJcGlvYywgcGluOwotCXN0cnVjdCBhdDkxX2dwaW9fYmFuawkqdGhpcywgKnByZXY7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwCSp0aGlzLCAqcHJldjsKIAotCWZvciAocGlvYyA9IDAsIHBpbiA9IFBJTl9CQVNFLCB0aGlzID0gZ3BpbywgcHJldiA9IE5VTEw7CisJZm9yIChwaW9jID0gMCwgcGluID0gUElOX0JBU0UsIHRoaXMgPSBncGlvX2NoaXAsIHByZXYgPSBOVUxMOwogCQkJcGlvYysrIDwgZ3Bpb19iYW5rczsKIAkJCXByZXYgPSB0aGlzLCB0aGlzKyspIHsKLQkJdW5zaWduZWQJaWQgPSB0aGlzLT5pZDsKKwkJdW5zaWduZWQJaWQgPSB0aGlzLT5iYW5rLT5pZDsKIAkJdW5zaWduZWQJaTsKIAogCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKIAotCQlmb3IgKGkgPSAwLCBwaW4gPSB0aGlzLT5jaGlwYmFzZTsgaSA8IDMyOyBpKyssIHBpbisrKSB7CisJCWZvciAoaSA9IDAsIHBpbiA9IHRoaXMtPmNoaXAuYmFzZTsgaSA8IDMyOyBpKyssIHBpbisrKSB7CiAJCQlsb2NrZGVwX3NldF9jbGFzcygmaXJxX2Rlc2NbcGluXS5sb2NrLCAmZ3Bpb19sb2NrX2NsYXNzKTsKIAogCQkJLyoKQEAgLTUzNywzMiArNTQ0LDExNyBAQAogCXByX2luZm8oIkFUOTE6ICVkIGdwaW8gaXJxcyBpbiAlZCBiYW5rc1xuIiwgcGluIC0gUElOX0JBU0UsIGdwaW9fYmFua3MpOwogfQogCisvKiBncGlvbGliIHN1cHBvcnQgKi8KK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09EUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fT0VSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1MzIgcGRzcjsKKworCXBkc3IgPSBfX3Jhd19yZWFkbChwaW8gKyBQSU9fUERTUik7CisJcmV0dXJuIChwZHNyICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvbGliX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKK30KKworc3RhdGljIGludCBhdDkxX2dwaW9saWJfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgcGluID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQgbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwkvKiBDYW5ub3QgcmVxdWVzdCBHUElPcyB0aGF0IGFyZSBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSAqLworCWlmICghKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QU1IpICYgbWFzaykpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvbGliX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrKSB7CisJCXVuc2lnbmVkIHBpbiA9IGNoaXAtPmJhc2UgKyBpOworCQl2b2lkIF9faW9tZW0gKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJCXVuc2lnbmVkIG1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCQljb25zdCBjaGFyICpncGlvX2xhYmVsOworCisJCWdwaW9fbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoY2hpcCwgaSk7CisJCWlmIChncGlvX2xhYmVsKSB7CisJCQlzZXFfcHJpbnRmKHMsICJbJXNdIEdQSU8lcyVkOiAiLAorCQkJCSAgIGdwaW9fbGFiZWwsIGNoaXAtPmxhYmVsLCBpKTsKKwkJCWlmIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fUFNSKSAmIG1hc2spCisJCQkJc2VxX3ByaW50ZihzLCAiW2dwaW9dICVzXG4iLAorCQkJCQkgICBhdDkxX2dldF9ncGlvX3ZhbHVlKHBpbikgPworCQkJCQkgICAic2V0IiA6ICJjbGVhciIpOworCQkJZWxzZQorCQkJCXNlcV9wcmludGYocywgIltwZXJpcGggJXNdXG4iLAorCQkJCQkgICBfX3Jhd19yZWFkbChwaW8gKyBQSU9fQUJTUikgJgorCQkJCQkgICBtYXNrID8gIkIiIDogIkEiKTsKKwkJfQorCX0KK30KKwogLyoKICAqIENhbGxlZCBmcm9tIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgaW5pdCB0byBlbmFibGUgR1BJTyBwaW4gc3VwcG9ydC4KICAqLwogdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXQoc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpkYXRhLCBpbnQgbnJfYmFua3MpCiB7CiAJdW5zaWduZWQJCWk7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rCSpsYXN0OworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvLCAqbGFzdCA9IE5VTEw7CiAKIAlCVUdfT04obnJfYmFua3MgPiBNQVhfR1BJT19CQU5LUyk7CiAKLQlncGlvID0gZGF0YTsKIAlncGlvX2JhbmtzID0gbnJfYmFua3M7CiAKLQlmb3IgKGkgPSAwLCBsYXN0ID0gTlVMTDsgaSA8IG5yX2JhbmtzOyBpKyssIGxhc3QgPSBkYXRhLCBkYXRhKyspIHsKLQkJZGF0YS0+Y2hpcGJhc2UgPSBQSU5fQkFTRSArIGkgKiAzMjsKLQkJZGF0YS0+cmVnYmFzZSA9IGRhdGEtPm9mZnNldCArICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOworCWZvciAoaSA9IDA7IGkgPCBucl9iYW5rczsgaSsrKSB7CisJCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaV07CisKKwkJYXQ5MV9ncGlvLT5iYW5rID0gJmRhdGFbaV07CisJCWF0OTFfZ3Bpby0+Y2hpcC5iYXNlID0gUElOX0JBU0UgKyBpICogMzI7CisJCWF0OTFfZ3Bpby0+cmVnYmFzZSA9IGF0OTFfZ3Bpby0+YmFuay0+b2Zmc2V0ICsKKwkJCSh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOwogCiAJCS8qIGVuYWJsZSBQSU8gY29udHJvbGxlcidzIGNsb2NrICovCi0JCWNsa19lbmFibGUoZGF0YS0+Y2xvY2spOworCQljbGtfZW5hYmxlKGF0OTFfZ3Bpby0+YmFuay0+Y2xvY2spOwogCi0JCS8qCi0JCSAqIFNvbWUgcHJvY2Vzc29ycyBzaGFyZSBwZXJpcGhlcmFsIElEIGJldHdlZW4gbXVsdGlwbGUgR1BJTyBiYW5rcy4KLQkJICogIFNBTTkyNjMgKFBJT0MsIFBJT0QsIFBJT0UpCi0JCSAqICBDQVA5IChQSU9BLCBQSU9CLCBQSU9DLCBQSU9EKQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+aWQgPT0gZGF0YS0+aWQpCi0JCQlsYXN0LT5uZXh0ID0gZGF0YTsKKwkJLyogQVQ5MVNBTTkyNjNfSURfUElPQ0RFIGdyb3VwcyBQSU9DLCBQSU9ELCBQSU9FICovCisJCWlmIChsYXN0ICYmIGxhc3QtPmJhbmstPmlkID09IGF0OTFfZ3Bpby0+YmFuay0+aWQpCisJCQlsYXN0LT5uZXh0ID0gYXQ5MV9ncGlvOworCQlsYXN0ID0gYXQ5MV9ncGlvOworCisJCWdwaW9jaGlwX2FkZCgmYXQ5MV9ncGlvLT5jaGlwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGJmZmE2NzQuLjA0YzkxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMTMsMzIgKzIxMywxMiBAQAogICovCiAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLX0KLQotZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF0OTFfZ2V0X2dwaW9fdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JYXQ5MV9zZXRfZ3Bpb192YWx1ZShncGlvLCB2YWx1ZSk7Ci19Ci0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwogCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQogewogCXJldHVybiBncGlvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTcxMjY1OC4uNTI2OGFmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC00Myw3ICs0Myw3IEBACiAKIHZvaWQgKCphdDkxX2FyY2hfcmVzZXQpKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBjYWxsIHRoZSBDUFUtc3BlY2lmaWMgcmVzZXQgZnVuY3Rpb24gKi8KIAlpZiAoYXQ5MV9hcmNoX3Jlc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAyNGU5NjE1Li5mOTE2Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzIsNyArMzIsNyBAQAogCW1vdglyMCwgcjAiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMTdjYTQxZC4uYjdlNzAzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMSw3ICsyMSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWRhdmluY2lfd2F0Y2hkb2dfcmVzZXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDM1MGEwMjguLjlhMjYyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzQsNiArMzQsNiBAQAogCWFzbSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsIGlwLCBjMTUsIGMxLCAyIiA6IDogOiAiY2MiKTsKIH0KIAotI2RlZmluZSBhcmNoX3Jlc2V0KG1vZGUpCWNwdV9yZXNldCgweDgwMDAwMDAwKQorI2RlZmluZSBhcmNoX3Jlc2V0KG1vZGUsIGNtZCkJY3B1X3Jlc2V0KDB4ODAwMDAwMDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQppbmRleCA5NDRlNDJkLi45NTIyZTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCi1vYmoteQkJCTo9IGNvcmUubyBjbG9jay5vIGdwaW8ubworb2JqLXkJCQk6PSBjb3JlLm8gY2xvY2subyBkbWEtbTJwLm8gZ3Bpby5vCiBvYmotbQkJCTo9CiBvYmotbgkJCTo9CiBvYmotCQkJOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDk2MDQ5MjguLmU4ZWJlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtNDEsNiArNDEsNTYgQEAKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX1VTSF9FTiwKIH07CiAKKy8qIERNQSBDbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAwMjAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDAxMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMDgwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAwNDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDIwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMTAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDA4MDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDQwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAyMDAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDEwMDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwNDAwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDA4MDAwMDAwLAorfTsKKwogI2RlZmluZSBJTklUX0NLKGRldixjb24sY2spCQkJCQlcCiAJeyAuZGV2X2lkID0gZGV2LCAuY29uX2lkID0gY29uLCAuY2xrID0gY2sgfQogCkBAIC01NCw2ICsxMDQsMTggQEAKIAlJTklUX0NLKE5VTEwsICJwY2xrIiwgJmNsa19wKSwKIAlJTklUX0NLKE5VTEwsICJwbGwyIiwgJmNsa19wbGwyKSwKIAlJTklUX0NLKE5VTEwsICJ1c2JfaG9zdCIsICZjbGtfdXNiX2hvc3QpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDAiLCAmY2xrX20ycDApLAorCUlOSVRfQ0soTlVMTCwgIm0ycDEiLCAmY2xrX20ycDEpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDIiLCAmY2xrX20ycDIpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDMiLCAmY2xrX20ycDMpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDQiLCAmY2xrX20ycDQpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDUiLCAmY2xrX20ycDUpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDYiLCAmY2xrX20ycDYpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDciLCAmY2xrX20ycDcpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDgiLCAmY2xrX20ycDgpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDkiLCAmY2xrX20ycDkpLAorCUlOSVRfQ0soTlVMTCwgIm0ybTAiLCAmY2xrX20ybTApLAorCUlOSVRfQ0soTlVMTCwgIm0ybTEiLCAmY2xrX20ybTEpLAogfTsKIAogCkBAIC0xMTAsNiArMTcyLDIyIEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKXJhdGU7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBlcDkzeHhfZG1hX2Nsb2NrX2luaXQodm9pZCkKK3sKKwljbGtfbTJwMC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMi5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMy5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNi5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNy5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwOC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwOS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJtMC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJtMS5yYXRlID0gY2xrX2gucmF0ZTsKK30KKwogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCkKIHsKIAl1MzIgdmFsdWU7CkBAIC0xMjQsNiArMjAyLDcgQEAKIAljbGtfZi5yYXRlID0gY2xrX3BsbDEucmF0ZSAvIGZjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDI1KSAmIDB4N107CiAJY2xrX2gucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBoY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyMCkgJiAweDddOwogCWNsa19wLnJhdGUgPSBjbGtfaC5yYXRlIC8gcGNsa19kaXZpc29yc1sodmFsdWUgPj4gMTgpICYgMHgzXTsKKwllcDkzeHhfZG1hX2Nsb2NrX2luaXQoKTsKIAogCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyKTsKIAlpZiAoISh2YWx1ZSAmIDB4MDAwODAwMDApKSB7CQkJLyogUExMMiBieXBhc3NlZD8gICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkZjViYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYworICogTTJQIERNQSBoYW5kbGluZyBmb3IgQ2lycnVzIEVQOTN4eCBjaGlwcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGllZCBEYXRhIFN5c3RlbXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBPbiB0aGUgRVA5M3h4IGNoaXAgdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFscyBteSBiZSBhbGxvY2F0ZWQgdG8gdGhlIDEwCisgKiBNZW1vcnkgdG8gSW50ZXJuYWwgUGVyaXBoZXJhbCAoTTJQKSBjaGFubmVscyAoNSB0cmFuc21pdCArIDUgcmVjZWl2ZSkuCisgKgorICoJSTJTCWNvbnRhaW5zIDMgVHggYW5kIDMgUnggRE1BIENoYW5uZWxzCisgKglBQUMJY29udGFpbnMgMyBUeCBhbmQgMyBSeCBETUEgQ2hhbm5lbHMKKyAqCVVBUlQxCWNvbnRhaW5zIDEgVHggYW5kIDEgUnggRE1BIENoYW5uZWxzCisgKglVQVJUMgljb250YWlucyAxIFR4IGFuZCAxIFJ4IERNQSBDaGFubmVscworICoJVUFSVDMJY29udGFpbnMgMSBUeCBhbmQgMSBSeCBETUEgQ2hhbm5lbHMKKyAqCUlyREEJY29udGFpbnMgMSBUeCBhbmQgMSBSeCBETUEgQ2hhbm5lbHMKKyAqCisgKiBTU1AgYW5kIElERSB1c2UgdGhlIE1lbW9yeSB0byBNZW1vcnkgKE0yTSkgY2hhbm5lbHMgYW5kIGFyZSBub3QgY292ZXJlZAorICogd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIE0yUF9DT05UUk9MCQkJMHgwMAorI2RlZmluZSAgTTJQX0NPTlRST0xfU1RBTExfSVJRX0VOCSgxIDw8IDApCisjZGVmaW5lICBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOCQkoMSA8PCAxKQorI2RlZmluZSAgTTJQX0NPTlRST0xfRVJST1JfSVJRX0VOCSgxIDw8IDMpCisjZGVmaW5lICBNMlBfQ09OVFJPTF9FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIE0yUF9JTlRFUlJVUFQJCQkweDA0CisjZGVmaW5lICBNMlBfSU5URVJSVVBUX1NUQUxMCQkoMSA8PCAwKQorI2RlZmluZSAgTTJQX0lOVEVSUlVQVF9ORkIJCSgxIDw8IDEpCisjZGVmaW5lICBNMlBfSU5URVJSVVBUX0VSUk9SCQkoMSA8PCAzKQorI2RlZmluZSBNMlBfUFBBTExPQwkJCTB4MDgKKyNkZWZpbmUgTTJQX1NUQVRVUwkJCTB4MGMKKyNkZWZpbmUgTTJQX1JFTUFJTgkJCTB4MTQKKyNkZWZpbmUgTTJQX01BWENOVDAJCQkweDIwCisjZGVmaW5lIE0yUF9CQVNFMAkJCTB4MjQKKyNkZWZpbmUgTTJQX01BWENOVDEJCQkweDMwCisjZGVmaW5lIE0yUF9CQVNFMQkJCTB4MzQKKworI2RlZmluZSBTVEFURV9JRExFCTAJLyogQ2hhbm5lbCBpcyBpbmFjdGl2ZS4gICovCisjZGVmaW5lIFNUQVRFX1NUQUxMCTEJLyogQ2hhbm5lbCBpcyBhY3RpdmUsIG5vIGJ1ZmZlcnMgcGVuZGluZy4gICovCisjZGVmaW5lIFNUQVRFX09OCTIJLyogQ2hhbm5lbCBpcyBhY3RpdmUsIG9uZSBidWZmZXIgcGVuZGluZy4gICovCisjZGVmaW5lIFNUQVRFX05FWFQJMwkvKiBDaGFubmVsIGlzIGFjdGl2ZSwgdHdvIGJ1ZmZlcnMgcGVuZGluZy4gICovCisKK3N0cnVjdCBtMnBfY2hhbm5lbCB7CisJY2hhcgkJCQkqbmFtZTsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlpbnQJCQkJaXJxOworCisJc3RydWN0IGNsawkJCSpjbGs7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisKKwl2b2lkCQkJCSpjbGllbnQ7CisJdW5zaWduZWQJCQluZXh0X3Nsb3Q6MTsKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIJKmJ1ZmZlcl94ZmVyOworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlcgkqYnVmZmVyX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZAkJYnVmZmVyc19wZW5kaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBtMnBfY2hhbm5lbCBtMnBfcnhbXSA9IHsKKwl7Im0ycDEiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAwNDAsIElSUV9FUDkzWFhfRE1BTTJQMX0sCisJeyJtMnAzIiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMGMwLCBJUlFfRVA5M1hYX0RNQU0yUDN9LAorCXsibTJwNSIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDIwMCwgSVJRX0VQOTNYWF9ETUFNMlA1fSwKKwl7Im0ycDciLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAyODAsIElSUV9FUDkzWFhfRE1BTTJQN30sCisJeyJtMnA5IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMzAwLCBJUlFfRVA5M1hYX0RNQU0yUDl9LAorCXtOVUxMfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbTJwX2NoYW5uZWwgbTJwX3R4W10gPSB7CisJeyJtMnAwIiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMDAwLCBJUlFfRVA5M1hYX0RNQU0yUDB9LAorCXsibTJwMiIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDA4MCwgSVJRX0VQOTNYWF9ETUFNMlAyfSwKKwl7Im0ycDQiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAyNDAsIElSUV9FUDkzWFhfRE1BTTJQNH0sCisJeyJtMnA2IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMmMwLCBJUlFfRVA5M1hYX0RNQU0yUDZ9LAorCXsibTJwOCIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDM0MCwgSVJRX0VQOTNYWF9ETUFNMlA4fSwKKwl7TlVMTH0sCit9OworCitzdGF0aWMgdm9pZCBmZWVkX2J1ZihzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoLCBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlpZiAoY2gtPm5leHRfc2xvdCA9PSAwKSB7CisJCXdyaXRlbChidWYtPnNpemUsIGNoLT5iYXNlICsgTTJQX01BWENOVDApOworCQl3cml0ZWwoYnVmLT5idXNfYWRkciwgY2gtPmJhc2UgKyBNMlBfQkFTRTApOworCX0gZWxzZSB7CisJCXdyaXRlbChidWYtPnNpemUsIGNoLT5iYXNlICsgTTJQX01BWENOVDEpOworCQl3cml0ZWwoYnVmLT5idXNfYWRkciwgY2gtPmJhc2UgKyBNMlBfQkFTRTEpOworCX0KKwljaC0+bmV4dF9zbG90IF49IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNob29zZV9idWZmZXJfeGZlcihzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmOworCisJY2gtPmJ1ZmZlcl94ZmVyID0gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmNoLT5idWZmZXJzX3BlbmRpbmcpKSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoY2gtPmJ1ZmZlcnNfcGVuZGluZy5uZXh0LAorCQkJCSBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKwkJZmVlZF9idWYoY2gsIGJ1Zik7CisJCWNoLT5idWZmZXJfeGZlciA9IGJ1ZjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNob29zZV9idWZmZXJfbmV4dChzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmOworCisJY2gtPmJ1ZmZlcl9uZXh0ID0gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmNoLT5idWZmZXJzX3BlbmRpbmcpKSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoY2gtPmJ1ZmZlcnNfcGVuZGluZy5uZXh0LAorCQkJCSBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKwkJZmVlZF9idWYoY2gsIGJ1Zik7CisJCWNoLT5idWZmZXJfbmV4dCA9IGJ1ZjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtMnBfc2V0X2NvbnRyb2woc3RydWN0IG0ycF9jaGFubmVsICpjaCwgdTMyIHYpCit7CisJLyoKKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBtdXN0IGJlIHJlYWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgd3JpdHRlbiBzbworCSAqIHRoYXQgdGhlIGludGVybmFsIHN0YXRlIG1hY2hpbmUgaXMgY29ycmVjdGx5IHVwZGF0ZWQuIFNlZSB0aGUgZXA5M3h4CisJICogdXNlcnMnIGd1aWRlIGZvciBkZXRhaWxzLgorCSAqLworCXdyaXRlbCh2LCBjaC0+YmFzZSArIE0yUF9DT05UUk9MKTsKKwlyZWFkbChjaC0+YmFzZSArIE0yUF9DT05UUk9MKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbTJwX2NoYW5uZWxfc3RhdGUoc3RydWN0IG0ycF9jaGFubmVsICpjaCkKK3sKKwlyZXR1cm4gKHJlYWRsKGNoLT5iYXNlICsgTTJQX1NUQVRVUykgPj4gNCkgJiAweDM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtMnBfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gZGV2X2lkOworCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsOworCXUzMiBpcnFfc3RhdHVzLCB2OworCWludCBlcnJvciA9IDA7CisKKwljbCA9IGNoLT5jbGllbnQ7CisKKwlzcGluX2xvY2soJmNoLT5sb2NrKTsKKwlpcnFfc3RhdHVzID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfSU5URVJSVVBUKTsKKworCWlmIChpcnFfc3RhdHVzICYgTTJQX0lOVEVSUlVQVF9FUlJPUikgeworCQl3cml0ZWwoTTJQX0lOVEVSUlVQVF9FUlJPUiwgY2gtPmJhc2UgKyBNMlBfSU5URVJSVVBUKTsKKwkJZXJyb3IgPSAxOworCX0KKworCWlmICgoaXJxX3N0YXR1cyAmIChNMlBfSU5URVJSVVBUX1NUQUxMIHwgTTJQX0lOVEVSUlVQVF9ORkIpKSA9PSAwKSB7CisJCXNwaW5fdW5sb2NrKCZjaC0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlzd2l0Y2ggKG0ycF9jaGFubmVsX3N0YXRlKGNoKSkgeworCWNhc2UgU1RBVEVfSURMRToKKwkJcHJfY3JpdCgibTJwX2lycTogZG1hIGludGVycnVwdCB3aXRob3V0IGEgZG1hIGJ1ZmZlclxuIik7CisJCUJVRygpOworCQlicmVhazsKKworCWNhc2UgU1RBVEVfU1RBTEw6CisJCWNsLT5idWZmZXJfZmluaXNoZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl94ZmVyLCAwLCBlcnJvcik7CisJCWlmIChjaC0+YnVmZmVyX25leHQgIT0gTlVMTCkgeworCQkJY2wtPmJ1ZmZlcl9maW5pc2hlZChjbC0+Y29va2llLCBjaC0+YnVmZmVyX25leHQsCisJCQkJCSAgICAwLCBlcnJvcik7CisJCX0KKwkJY2hvb3NlX2J1ZmZlcl94ZmVyKGNoKTsKKwkJY2hvb3NlX2J1ZmZlcl9uZXh0KGNoKTsKKwkJaWYgKGNoLT5idWZmZXJfeGZlciAhPSBOVUxMKQorCQkJY2wtPmJ1ZmZlcl9zdGFydGVkKGNsLT5jb29raWUsIGNoLT5idWZmZXJfeGZlcik7CisJCWJyZWFrOworCisJY2FzZSBTVEFURV9PTjoKKwkJY2wtPmJ1ZmZlcl9maW5pc2hlZChjbC0+Y29va2llLCBjaC0+YnVmZmVyX3hmZXIsIDAsIGVycm9yKTsKKwkJY2gtPmJ1ZmZlcl94ZmVyID0gY2gtPmJ1ZmZlcl9uZXh0OworCQljaG9vc2VfYnVmZmVyX25leHQoY2gpOworCQljbC0+YnVmZmVyX3N0YXJ0ZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl94ZmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNUQVRFX05FWFQ6CisJCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwl2ID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCkgJiB+KE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTiB8CisJCQkJCSAgICAgIE0yUF9DT05UUk9MX05GQl9JUlFfRU4pOworCWlmIChjaC0+YnVmZmVyX3hmZXIgIT0gTlVMTCkKKwkJdiB8PSBNMlBfQ09OVFJPTF9TVEFMTF9JUlFfRU47CisJaWYgKGNoLT5idWZmZXJfbmV4dCAhPSBOVUxMKQorCQl2IHw9IE0yUF9DT05UUk9MX05GQl9JUlFfRU47CisJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKKworCXNwaW5fdW5sb2NrKCZjaC0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IG0ycF9jaGFubmVsICpmaW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoOworCWludCBpOworCisJaWYgKGNsLT5mbGFncyAmIEVQOTNYWF9ETUFfTTJQX1JYKQorCQljaCA9IG0ycF9yeDsKKwllbHNlCisJCWNoID0gbTJwX3R4OworCisJZm9yIChpID0gMDsgY2hbaV0uYmFzZTsgaSsrKSB7CisJCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsaWVudDsKKworCQljbGllbnQgPSBjaFtpXS5jbGllbnQ7CisJCWlmIChjbGllbnQgIT0gTlVMTCkgeworCQkJaW50IHBvcnQ7CisKKwkJCXBvcnQgPSBjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0s7CisJCQlpZiAocG9ydCA9PSAoY2xpZW50LT5mbGFncyAmCisJCQkJICAgICBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0spKSB7CisJCQkJcHJfd2FybmluZygiRE1BIGNoYW5uZWwgYWxyZWFkeSB1c2VkIGJ5ICVzXG4iLAorCQkJCQkgICBjbC0+bmFtZSA/IDogInVua25vd24gY2xpZW50Iik7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGNoW2ldLmJhc2U7IGkrKykgeworCQlpZiAoY2hbaV0uY2xpZW50ID09IE5VTEwpCisJCQlyZXR1cm4gY2ggKyBpOworCX0KKworCXByX3dhcm5pbmcoIk5vIGZyZWUgRE1BIGNoYW5uZWwgZm9yICVzXG4iLAorCQkgICBjbC0+bmFtZSA/IDogInVua25vd24gY2xpZW50Iik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5uZWxfZW5hYmxlKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wgPSBjaC0+Y2xpZW50OworCXUzMiB2OworCisJY2xrX2VuYWJsZShjaC0+Y2xrKTsKKworCXYgPSBjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0s7CisJd3JpdGVsKHYsIGNoLT5iYXNlICsgTTJQX1BQQUxMT0MpOworCisJdiA9IGNsLT5mbGFncyAmIEVQOTNYWF9ETUFfTTJQX0VSUk9SX01BU0s7CisJdiB8PSBNMlBfQ09OVFJPTF9FTkFCTEUgfCBNMlBfQ09OVFJPTF9FUlJPUl9JUlFfRU47CisJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKK30KKworc3RhdGljIHZvaWQgY2hhbm5lbF9kaXNhYmxlKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJdTMyIHY7CisKKwl2ID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCk7CisJdiAmPSB+KE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTiB8IE0yUF9DT05UUk9MX05GQl9JUlFfRU4pOworCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisKKwl3aGlsZSAobTJwX2NoYW5uZWxfc3RhdGUoY2gpID09IFNUQVRFX09OKQorCQljcHVfcmVsYXgoKTsKKworCW0ycF9zZXRfY29udHJvbChjaCwgMHgwKTsKKworCXdoaWxlIChtMnBfY2hhbm5lbF9zdGF0ZShjaCkgPT0gU1RBVEVfU1RBTEwpCisJCWNwdV9yZWxheCgpOworCisJY2xrX2Rpc2FibGUoY2gtPmNsayk7Cit9CisKK2ludCBlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wpCit7CisJc3RydWN0IG0ycF9jaGFubmVsICpjaDsKKwlpbnQgZXJyOworCisJY2ggPSBmaW5kX2ZyZWVfY2hhbm5lbChjbCk7CisJaWYgKElTX0VSUihjaCkpCisJCXJldHVybiBQVFJfRVJSKGNoKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGNoLT5pcnEsIG0ycF9pcnEsIDAsIGNsLT5uYW1lID8gOiAiZG1hLW0ycCIsIGNoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY2gtPmNsaWVudCA9IGNsOworCWNoLT5uZXh0X3Nsb3QgPSAwOworCWNoLT5idWZmZXJfeGZlciA9IE5VTEw7CisJY2gtPmJ1ZmZlcl9uZXh0ID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7CisKKwljbC0+Y2hhbm5lbCA9IGNoOworCisJY2hhbm5lbF9lbmFibGUoY2gpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX2NsaWVudF91bnJlZ2lzdGVyKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKworCWNoYW5uZWxfZGlzYWJsZShjaCk7CisJZnJlZV9pcnEoY2gtPmlycSwgY2gpOworCWNoLT5jbGllbnQgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXA5M3h4X2RtYV9tMnBfY2xpZW50X3VucmVnaXN0ZXIpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCwKKwkJCSAgIHN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJdiA9IHJlYWRsKGNoLT5iYXNlICsgTTJQX0NPTlRST0wpOworCWlmIChjaC0+YnVmZmVyX3hmZXIgPT0gTlVMTCkgeworCQljaC0+YnVmZmVyX3hmZXIgPSBidWY7CisJCWZlZWRfYnVmKGNoLCBidWYpOworCQljbC0+YnVmZmVyX3N0YXJ0ZWQoY2wtPmNvb2tpZSwgYnVmKTsKKworCQl2IHw9IE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTjsKKwkJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKKworCX0gZWxzZSBpZiAoY2gtPmJ1ZmZlcl9uZXh0ID09IE5VTEwpIHsKKwkJY2gtPmJ1ZmZlcl9uZXh0ID0gYnVmOworCQlmZWVkX2J1ZihjaCwgYnVmKTsKKworCQl2IHw9IE0yUF9DT05UUk9MX05GQl9JUlFfRU47CisJCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9zdWJtaXQpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdF9yZWN1cnNpdmUoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wsCisJCQkJICAgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gY2wtPmNoYW5uZWw7CisKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZjaC0+YnVmZmVyc19wZW5kaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVwOTN4eF9kbWFfbTJwX3N1Ym1pdF9yZWN1cnNpdmUpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX2ZsdXNoKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKworCWNoYW5uZWxfZGlzYWJsZShjaCk7CisJY2gtPm5leHRfc2xvdCA9IDA7CisJY2gtPmJ1ZmZlcl94ZmVyID0gTlVMTDsKKwljaC0+YnVmZmVyX25leHQgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZjaC0+YnVmZmVyc19wZW5kaW5nKTsKKwljaGFubmVsX2VuYWJsZShjaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9mbHVzaCk7CisKK3N0YXRpYyBpbnQgaW5pdF9jaGFubmVsKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJY2gtPmNsayA9IGNsa19nZXQoTlVMTCwgY2gtPm5hbWUpOworCWlmIChJU19FUlIoY2gtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGNoLT5jbGspOworCisJc3Bpbl9sb2NrX2luaXQoJmNoLT5sb2NrKTsKKwljaC0+Y2xpZW50ID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfZG1hX20ycF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IG0ycF9yeFtpXS5iYXNlOyBpKyspIHsKKwkJcmV0ID0gaW5pdF9jaGFubmVsKG0ycF9yeCArIGkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBtMnBfdHhbaV0uYmFzZTsgaSsrKSB7CisJCXJldCA9IGluaXRfY2hhbm5lbChtMnBfdHggKyBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcHJfaW5mbygiTTJQIERNQSBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChlcDkzeHhfZG1hX20ycF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCmluZGV4IDViNWMyMmIuLjYxNzExNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwN2EuYwpAQCAtNDgsMTIgKzQ4LDI0IEBACiAJLnBoeV9pZAkJPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVkYjkzMDdhX2kyY19kYXRhW10gPSB7CisJeworCQkvKiBPbi1ib2FyZCBiYXR0ZXJ5IGJhY2tlZCBSVEMgKi8KKwkJSTJDX0JPQVJEX0lORk8oImlzbDEyMDgiLCAweDZmKSwKKwl9LAorCS8qCisJICogVGhlIEkyQyBzaWduYWxzIGFyZSBhbHNvIHJvdXRlZCB0byB0aGUgRXhwYW5zaW9uIENvbm5lY3RvciAoSjQpCisJICovCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTMwN2FfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWRiOTMwN2FfZmxhc2gpOwogCiAJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmZWRiOTMwN2FfZXRoX2RhdGEsIDEpOworCisJZXA5M3h4X2luaXRfaTJjKGVkYjkzMDdhX2kyY19kYXRhLCBBUlJBWV9TSVpFKGVkYjkzMDdhX2kyY19kYXRhKSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoRURCOTMwN0EsICJDaXJydXMgTG9naWMgRURCOTMwN0EgRXZhbHVhdGlvbiBCb2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2YmQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXUzMgkJCWJ1c19hZGRyOworCXUxNgkJCXNpemU7Cit9OworCitzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50IHsKKwljaGFyCQkJKm5hbWU7CisJdTgJCQlmbGFnczsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKCpidWZmZXJfc3RhcnRlZCkodm9pZCAqY29va2llLAorCQkJCQlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1Zik7CisJdm9pZAkJCSgqYnVmZmVyX2ZpbmlzaGVkKSh2b2lkICpjb29raWUsCisJCQkJCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmLAorCQkJCQlpbnQgYnl0ZXMsIGludCBlcnJvcik7CisKKwkvKiBJbnRlcm5hbCB0byB0aGUgRE1BIGNvZGUuICAqLworCXZvaWQJCQkqY2hhbm5lbDsKK307CisKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMxCTB4MDAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMyCTB4MDEKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMxCTB4MDIKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMyCTB4MDMKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMzCTB4MDQKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMzCTB4MDUKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9VQVJUMQkweDA2CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfVUFSVDIJMHgwNworI2RlZmluZSBFUDkzWFhfRE1BX00yUF9QT1JUX1VBUlQzCTB4MDgKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JUkRBCTB4MDkKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9NQVNLCTB4MGYKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfVFgJCTB4MDAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUlgJCTB4MTAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfQUJPUlRfT05fRVJST1IJMHgyMAorI2RlZmluZSBFUDkzWFhfRE1BX00yUF9JR05PUkVfRVJST1IJMHg0MAorI2RlZmluZSBFUDkzWFhfRE1BX00yUF9FUlJPUl9NQVNLCTB4NjAKKworaW50ICBlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqbTJwKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfY2xpZW50X3VucmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqbTJwKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfc3VibWl0KHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCwKKwkJCSAgIHN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfc3VibWl0X3JlY3Vyc2l2ZShzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICptMnAsCisJCQkJICAgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1Zik7Cit2b2lkIGVwOTN4eF9kbWFfbTJwX2ZsdXNoKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDIyZDZjOWEuLmY2NmJlMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01OCw3ICs1OCw4IEBACiAKIAogLyogQUhCIHBlcmlwaGVyYWxzICovCi0jZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMDAwMDApCisjZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCSgodm9pZCBfX2lvbWVtICopCQlcCisJCQkJCSAoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDAwMDAwKSkKIAogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAxMDAwMCkKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDY3Nzg5ZDAuLmVkOGYzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTksNyArOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdTMyIGRldmljZWNmZzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCmluZGV4IDRmMzUwNjMuLmUyZTBkZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKQEAgLTIxLDE2ICsyMSwxNiBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgogCiAjaWYgMAotc3RhdGljIGludCBmYl9kbWFfcmVxdWVzdChkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgaW50IGZiX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCBmYl9kbWFfZW5hYmxlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGZiX2RtYV9lbmFibGUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGZiX2RtYV9kaXNhYmxlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGZiX2RtYV9kaXNhYmxlKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogfQogCkBAIC00Miw3ICs0Miw3IEBACiB9OwogI2VuZGlmCiAKLXZvaWQgX19pbml0IGFyY2hfZG1hX2luaXQoZG1hX3QgKmRtYSkKK3N0YXRpYyBpbnQgX19pbml0IGZiX2RtYV9pbml0KHZvaWQpCiB7CiAjaWYgMAogCWRtYVtfREMyMTI4NV9ETUEoMCldLmRfb3BzID0gJmZiX2RtYV9vcHM7CkBAIC01MCw2ICs1MCw4IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSVNBX0RNQQogCWlmIChmb290YnJpZGdlX2Nmbl9tb2RlKCkpCi0JCWlzYV9pbml0X2RtYShkbWEgKyBfSVNBX0RNQSgwKSk7CisJCWlzYV9pbml0X2RtYSgpOwogI2VuZGlmCisJcmV0dXJuIDA7CiB9Citjb3JlX2luaXRjYWxsKGZiX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDJkYjdmMzYuLjBiMjkzMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTgsNyArMTgsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmIChtb2RlID09ICdzJykgewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1Yjc1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcKQEAgLTAsMCArMSwxOSBAQAoraWYgQVJDSF9HRU1JTkkKKworbWVudSAiQ29ydGluYSBTeXN0ZW1zIEdlbWluaSBJbXBsZW1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX1JVVDEwMAorCWJvb2wgIlRlbHRvbmlrYSBSVVQxMDAiCisJc2VsZWN0IEdFTUlOSV9NRU1fU1dBUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQorCSAgVGVsdG9uaWthIDNHIFJvdXRlciBSVVQxMDAuCisKK2VuZG1lbnUKKworY29uZmlnIEdFTUlOSV9NRU1fU1dBUAorCWJvb2wgIkdlbWluaSBtZW1vcnkgaXMgc3dhcHBlZCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIEdlbWluaSBtZW1vcnkgaXMgc3dhcHBlZCBieSBib290bG9hZGVyLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTk1MDViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQk6PSBpcnEubyBtbS5vIHRpbWUubyBkZXZpY2VzLm8gZ3Bpby5vCisKKyMgQm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfUlVUMTAwKQkrPSBib2FyZC1ydXQxeHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhNTJjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw5IEBACitpZmVxICgkKENPTkZJR19HRU1JTklfTUVNX1NXQVApLHkpCisgICB6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDAwODAwMDAwCitlbHNlCisgICB6cmVsYWRkci15CTo9IDB4MTAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgxMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDEwODAwMDAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtcnV0MXh4LmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRlOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtcnV0MXh4LmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBUZWx0b25pa2EgUlVUMXh4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHJ1dDF4eF9rZXlzW10gPSB7CisJeworCQkuY29kZQkJPSBLRVlfU0VUVVAsCisJCS5ncGlvCQk9IDYwLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS5kZXNjCQk9ICJSZXNldCB0byBkZWZhdWx0cyIsCisJCS50eXBlCQk9IEVWX0tFWSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBydXQxeHhfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gcnV0MXh4X2tleXMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShydXQxeHhfa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBydXQxeHhfa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZydXQxeHhfa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHJ1dDEwMF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIlBvd2VyIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuZ3BpbwkJCT0gMTcsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiR1NNIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwkJLmdwaW8JCQk9IDcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBydXQxMDBfbGVkc19kYXRhID0geworCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUocnV0MTAwX2xlZHMpLAorCS5sZWRzCQk9IHJ1dDEwMF9sZWRzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnV0MXh4X2xlZHMgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZydXQxMDBfbGVkc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBydXQxeHhfdGltZXIgPSB7CisJLmluaXQJPSBnZW1pbmlfdGltZXJfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBydXQxeHhfaW5pdCh2b2lkKQoreworCWdlbWluaV9ncGlvX2luaXQoKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl91YXJ0KCk7CisJcGxhdGZvcm1fcmVnaXN0ZXJfcGZsYXNoKFNaXzhNLCBOVUxMLCAwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ1dDF4eF9sZWRzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ1dDF4eF9rZXlzX2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoUlVUMTAwLCAiVGVsdG9uaWthIFJVVDEwMCIpCisJLnBoeXNfaW8JPSAweDdmZmZjMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZmZmYzAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwLAorCS5tYXBfaW8JCT0gZ2VtaW5pX21hcF9pbywKKwkuaW5pdF9pcnEJPSBnZW1pbmlfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZydXQxeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHJ1dDF4eF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5MjgzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2NvbW1vbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb21tb24gR2VtaW5pIGFyY2hpdGVjdHVyZSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19HRU1JTklfQ09NTU9OX0hfXworI2RlZmluZSBfX0dFTUlOSV9DT01NT05fSF9fCisKK3N0cnVjdCBtdGRfcGFydGl0aW9uOworCitleHRlcm4gdm9pZCBnZW1pbmlfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VtaW5pX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VtaW5pX3RpbWVyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBnZW1pbmlfZ3Bpb19pbml0KHZvaWQpOworCisvKiBDb21tb24gcGxhdGZvcm0gZGV2aWNlcyByZWdpc3RyYXRpb24gZnVuY3Rpb25zICovCitleHRlcm4gaW50IHBsYXRmb3JtX3JlZ2lzdGVyX3VhcnQodm9pZCk7CitleHRlcm4gaW50IHBsYXRmb3JtX3JlZ2lzdGVyX3BmbGFzaCh1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbnJfcGFydHMpOworCisjZW5kaWYgLyogX19HRU1JTklfQ09NTU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTI1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9kZXZpY2VzLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvbW1vbiBkZXZpY2VzIGRlZmluaXRpb24gZm9yIEdlbWluaQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9nbG9iYWxfcmVnLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKHZvaWQgKilJT19BRERSRVNTKEdFTUlOSV9VQVJUX0JBU0UpLAorCQkubWFwYmFzZQk9IEdFTUlOSV9VQVJUX0JBU0UsCisJCS5pcnEJCT0gSVJRX1VBUlQsCisJCS51YXJ0Y2xrCT0gVUFSVF9DTEssCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS50eXBlCQk9IFBPUlRfMTY1NTBBLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0ZJWEVEX1RZUEUsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJPSAic2VyaWFsODI1MCIsCisJLmlkCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK2ludCBwbGF0Zm9ybV9yZWdpc3Rlcl91YXJ0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gR0VNSU5JX0ZMQVNIX0JBU0UsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwZmxhc2hfcGxhdGZvcm1fZGF0YSA9IHt9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZmxhc2hfZGV2aWNlID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLmRldiAJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBmbGFzaF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKK2ludCBwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2godW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywKKwkJCSAgICAgdW5zaWduZWQgaW50IG5yX3BhcnRzKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSkgKyBHTE9CQUxfU1RBVFVTKTsKKworCWlmICgocmVnICYgRkxBU0hfVFlQRV9NQVNLKSAhPSBGTEFTSF9UWVBFX1BBUkFMTEVMKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKHJlZyAmIEZMQVNIX1dJRFRIXzE2QklUKQorCQlwZmxhc2hfcGxhdGZvcm1fZGF0YS53aWR0aCA9IDI7CisJZWxzZQorCQlwZmxhc2hfcGxhdGZvcm1fZGF0YS53aWR0aCA9IDE7CisKKwkvKiBlbmFibGUgcGFyYWxsZWwgZmxhc2ggcGlucyBhbmQgZGlzYWJsZSBvdGhlcnMgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSkgKyBHTE9CQUxfTUlTQ19DVFJMKTsKKwlyZWcgJj0gflBGTEFTSF9QQURTX0RJU0FCTEU7CisJcmVnIHw9IFNGTEFTSF9QQURTX0RJU0FCTEUgfCBOQU5EX1BBRFNfRElTQUJMRTsKKwlfX3Jhd193cml0ZWwocmVnLCBJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSkgKyBHTE9CQUxfTUlTQ19DVFJMKTsKKworCWZsYXNoX3Jlc291cmNlLmVuZCA9IGZsYXNoX3Jlc291cmNlLnN0YXJ0ICsgc2l6ZSAtIDE7CisKKwlwZmxhc2hfcGxhdGZvcm1fZGF0YS5wYXJ0cyA9IHBhcnRzOworCXBmbGFzaF9wbGF0Zm9ybV9kYXRhLm5yX3BhcnRzID0gbnJfcGFydHM7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwZmxhc2hfZGV2aWNlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI2Mzg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogR2VtaW5pIGdwaW9jaGlwIGFuZCBpbnRlcnJ1cHQgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBCYXNlZCBvbiBwbGF0LW14Yy9ncGlvLmM6CisgKiAgTVhDIEdQSU8gc3VwcG9ydC4gKGMpIDIwMDggRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqICBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2RlZmluZSBHUElPX0JBU0UoeCkJCUlPX0FERFJFU1MoR0VNSU5JX0dQSU9fQkFTRSh4KSkKKworLyogR1BJTyByZWdpc3RlcnMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBHUElPX0RBVEFfT1VUCQkweDAKKyNkZWZpbmUgR1BJT19EQVRBX0lOCQkweDQKKyNkZWZpbmUgR1BJT19ESVIJCTB4OAorI2RlZmluZSBHUElPX0RBVEFfU0VUCQkweDEwCisjZGVmaW5lIEdQSU9fREFUQV9DTFIJCTB4MTQKKyNkZWZpbmUgR1BJT19QVUxMX0VOCQkweDE4CisjZGVmaW5lIEdQSU9fUFVMTF9UWVBFCQkweDFDCisjZGVmaW5lIEdQSU9fSU5UX0VOCQkweDIwCisjZGVmaW5lIEdQSU9fSU5UX1NUQVQJCTB4MjQKKyNkZWZpbmUgR1BJT19JTlRfTUFTSwkJMHgyQworI2RlZmluZSBHUElPX0lOVF9DTFIJCTB4MzAKKyNkZWZpbmUgR1BJT19JTlRfVFlQRQkJMHgzNAorI2RlZmluZSBHUElPX0lOVF9CT1RIX0VER0UJMHgzOAorI2RlZmluZSBHUElPX0lOVF9MRVZFTAkJMHgzQworI2RlZmluZSBHUElPX0RFQk9VTkNFX0VOCTB4NDAKKyNkZWZpbmUgR1BJT19ERUJPVU5DRV9QUkVTQ0FMRQkweDQ0CisKKyNkZWZpbmUgR1BJT19QT1JUX05VTQkJMworCitzdGF0aWMgdm9pZCBfc2V0X2dwaW9faXJxZW5hYmxlKHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX0VOKTsKKwlyZWcgPSAocmVnICYgKH4oMSA8PCBpbmRleCkpKSB8ICghIWVuYWJsZSA8PCBpbmRleCk7CisJX19yYXdfd3JpdGVsKHJlZywgYmFzZSArIEdQSU9fSU5UX0VOKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKGdwaW8gLyAzMik7CisKKwlfX3Jhd193cml0ZWwoMSA8PCAoZ3BpbyAlIDMyKSwgYmFzZSArIEdQSU9fSU5UX0NMUik7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0UoZ3BpbyAvIDMyKTsKKworCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFzZSwgZ3BpbyAlIDMyLCAwKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKGdwaW8gLyAzMik7CisKKwlfc2V0X2dwaW9faXJxZW5hYmxlKGJhc2UsIGdwaW8gJSAzMiwgMSk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXVuc2lnbmVkIGludCBncGlvX21hc2sgPSAxIDw8IChncGlvICUgMzIpOworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKGdwaW8gLyAzMik7CisJdW5zaWduZWQgaW50IHJlZ19ib3RoLCByZWdfbGV2ZWwsIHJlZ190eXBlOworCisJcmVnX3R5cGUgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfVFlQRSk7CisJcmVnX2xldmVsID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisJcmVnX2JvdGggPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgorCQlyZWdfdHlwZSAmPSB+Z3Bpb19tYXNrOworCQlyZWdfYm90aCB8PSBncGlvX21hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCXJlZ190eXBlICY9IH5ncGlvX21hc2s7CisJCXJlZ19ib3RoICY9IH5ncGlvX21hc2s7CisJCXJlZ19sZXZlbCAmPSB+Z3Bpb19tYXNrOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJcmVnX3R5cGUgJj0gfmdwaW9fbWFzazsKKwkJcmVnX2JvdGggJj0gfmdwaW9fbWFzazsKKwkJcmVnX2xldmVsIHw9IGdwaW9fbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlyZWdfdHlwZSB8PSBncGlvX21hc2s7CisJCXJlZ19sZXZlbCAmPSB+Z3Bpb19tYXNrOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJcmVnX3R5cGUgfD0gZ3Bpb19tYXNrOworCQlyZWdfbGV2ZWwgfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlfX3Jhd193cml0ZWwocmVnX3R5cGUsIGJhc2UgKyBHUElPX0lOVF9UWVBFKTsKKwlfX3Jhd193cml0ZWwocmVnX2xldmVsLCBiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKKwlfX3Jhd193cml0ZWwocmVnX2JvdGgsIGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCisJZ3Bpb19hY2tfaXJxKGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGdwaW9faXJxX25vLCBpcnFfc3RhdDsKKwl1bnNpZ25lZCBpbnQgcG9ydCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9kYXRhKGlycSk7CisKKwlpcnFfc3RhdCA9IF9fcmF3X3JlYWRsKEdQSU9fQkFTRShwb3J0KSArIEdQSU9fSU5UX1NUQVQpOworCisJZ3Bpb19pcnFfbm8gPSBHUElPX0lSUV9CQVNFICsgcG9ydCAqIDMyOworCWZvciAoOyBpcnFfc3RhdCAhPSAwOyBpcnFfc3RhdCA+Pj0gMSwgZ3Bpb19pcnFfbm8rKykgeworCisJCWlmICgoaXJxX3N0YXQgJiAxKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJQlVHX09OKCEoaXJxX2Rlc2NbZ3Bpb19pcnFfbm9dLmhhbmRsZV9pcnEpKTsKKwkJaXJxX2Rlc2NbZ3Bpb19pcnFfbm9dLmhhbmRsZV9pcnEoZ3Bpb19pcnFfbm8sCisJCQkJJmlycV9kZXNjW2dwaW9faXJxX25vXSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiR1BJTyIsCisJLmFjayA9IGdwaW9fYWNrX2lycSwKKwkubWFzayA9IGdwaW9fbWFza19pcnEsCisJLnVubWFzayA9IGdwaW9fdW5tYXNrX2lycSwKKwkuc2V0X3R5cGUgPSBncGlvX3NldF9pcnFfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCWludCBkaXIpCit7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0Uob2Zmc2V0IC8gMzIpOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19ESVIpOworCWlmIChkaXIpCisJCXJlZyB8PSAxIDw8IChvZmZzZXQgJSAzMik7CisJZWxzZQorCQlyZWcgJj0gfigxIDw8IChvZmZzZXQgJSAzMikpOworCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyBHUElPX0RJUik7Cit9CisKK3N0YXRpYyB2b2lkIGdlbWluaV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShvZmZzZXQgLyAzMik7CisKKwlpZiAodmFsdWUpCisJCV9fcmF3X3dyaXRlbCgxIDw8IChvZmZzZXQgJSAzMiksIGJhc2UgKyBHUElPX0RBVEFfU0VUKTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCgxIDw8IChvZmZzZXQgJSAzMiksIGJhc2UgKyBHUElPX0RBVEFfQ0xSKTsKK30KKworc3RhdGljIGludCBnZW1pbmlfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKG9mZnNldCAvIDMyKTsKKworCXJldHVybiAoX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fREFUQV9JTikgPj4gKG9mZnNldCAlIDMyKSkgJiAxOworfQorCitzdGF0aWMgaW50IGdlbWluaV9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJX3NldF9ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbWluaV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCQlpbnQgdmFsdWUpCit7CisJX3NldF9ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDEpOworCWdlbWluaV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgZ2VtaW5pX2dwaW9fY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJHZW1pbmkiLAorCS5kaXJlY3Rpb25faW5wdXQJPSBnZW1pbmlfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCisJLmdldAkJCT0gZ2VtaW5pX2dwaW9fZ2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gZ2VtaW5pX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0CQkJPSBnZW1pbmlfZ3Bpb19zZXQsCisJLmJhc2UJCQk9IDAsCisJLm5ncGlvCQkJPSBHUElPX1BPUlRfTlVNICogMzIsCit9OworCit2b2lkIF9faW5pdCBnZW1pbmlfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgR1BJT19QT1JUX05VTTsgaSsrKSB7CisJCS8qIGRpc2FibGUsIHVubWFzayBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwkJX19yYXdfd3JpdGVsKDB4MCwgR1BJT19CQVNFKGkpICsgR1BJT19JTlRfRU4pOworCQlfX3Jhd193cml0ZWwoMHgwLCBHUElPX0JBU0UoaSkgKyBHUElPX0lOVF9NQVNLKTsKKwkJX19yYXdfd3JpdGVsKH4weDAsIEdQSU9fQkFTRShpKSArIEdQSU9fSU5UX0NMUik7CisKKwkJZm9yIChqID0gR1BJT19JUlFfQkFTRSArIGkgKiAzMjsKKwkJICAgICBqIDwgR1BJT19JUlFfQkFTRSArIChpICsgMSkgKiAzMjsgaisrKSB7CisJCQlzZXRfaXJxX2NoaXAoaiwgJmdwaW9faXJxX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGosIGhhbmRsZV9lZGdlX2lycSk7CisJCQlzZXRfaXJxX2ZsYWdzKGosIElSUUZfVkFMSUQpOworCQl9CisKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8oaSksIGdwaW9faXJxX2hhbmRsZXIpOworCQlzZXRfaXJxX2RhdGEoSVJRX0dQSU8oaSksICh2b2lkICopaSk7CisJfQorCisJQlVHX09OKGdwaW9jaGlwX2FkZCgmZ2VtaW5pX2dwaW9fY2hpcCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDRhNmVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KKwlsZHJlcQlccngsID1HRU1JTklfVUFSVF9CQVNFCQkJQCBwaHlzaWNhbAorCWxkcm5lCVxyeCwgPUlPX0FERFJFU1MoR0VNSU5JX1VBUlRfQkFTRSkJQCB2aXJ0dWFsCisJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNkZWZpbmUgRkxPV19DT05UUk9MCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyNGY5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIEdlbWluaSBwbGF0Zm9ybS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSVJRX1NUQVRVUwkweDE0CisKKwkubWFjcm8gIGRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbGRyICAgICBcaXJxc3RhdCwgPUlPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFICsgSVJRX1NUQVRVUykKKwlsZHIgICAgIFxpcnFuciwgW1xpcnFzdGF0XQorCWNtcCAgICAgXGlycW5yLCAjMAorCWJlcSAgICAgMjMxM2YKKwltb3YgICAgIFx0bXAsIFxpcnFucgorCW1vdiAgICAgXGlycW5yLCAjMAorMjMxMjoKKwl0c3QgICAgIFx0bXAsICMxCisJYm5lICAgICAyMzEzZgorCWFkZCAgICAgXGlycW5yLCBcaXJxbnIsICMxCisJbW92ICAgICBcdG1wLCBcdG1wLCBsc3IgIzEKKwljbXAgICAgIFxpcnFuciwgIzMxCisJYmNjICAgICAyMzEyYgorMjMxMzoKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dsb2JhbF9yZWcuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9nbG9iYWxfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3ZmY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9nbG9iYWxfcmVnLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgR2VtaW5pLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX01BQ0hfR0xPQkFMX1JFR19ICisjZGVmaW5lIF9fTUFDSF9HTE9CQUxfUkVHX0gKKworLyogR2xvYmFsIFdvcmQgSUQgUmVnaXN0ZXIqLworI2RlZmluZSBHTE9CQUxfSUQJCQkweDAwCisKKyNkZWZpbmUgQ0hJUF9JRChyZWcpCQkJKChyZWcpID4+IDgpCisjZGVmaW5lIENISVBfUkVWSVNJT04ocmVnKQkJKChyZWcpICYgMHhGRikKKworLyogR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfU1RBVFVTCQkJMHgwNAorCisjZGVmaW5lIENQVV9CSUdfRU5ESUFOCQkJKDEgPDwgMzEpCisjZGVmaW5lIFBMTF9PU0NfMzBNCQkJKDEgPDwgMzApCS8qIGVsc2UgNjBNSHogKi8KKworI2RlZmluZSBPUEVSQVRJT05fTU9ERV9NQVNLCQkoMHhGIDw8IDI2KQorI2RlZmluZSBPUE1fSUREUQkJCSgweEYgPDwgMjYpCisjZGVmaW5lIE9QTV9OQU5ECQkJKDB4RSA8PCAyNikKKyNkZWZpbmUgT1BNX1JJTkcJCQkoMHhEIDw8IDI2KQorI2RlZmluZSBPUE1fRElSRUNUX0JPT1QJCQkoMHhDIDw8IDI2KQorI2RlZmluZSBPUE1fVVNCMV9QSFlfVEVTVAkJKDB4QiA8PCAyNikKKyNkZWZpbmUgT1BNX1VTQjBfUEhZX1RFU1QJCSgweEEgPDwgMjYpCisjZGVmaW5lIE9QTV9TQVRBMV9QSFlfVEVTVAkJKDB4OSA8PCAyNikKKyNkZWZpbmUgT1BNX1NBVEEwX1BIWV9URVNUCQkoMHg4IDw8IDI2KQorI2RlZmluZSBPUE1fSUNFX0FSTQkJCSgweDcgPDwgMjYpCisjZGVmaW5lIE9QTV9JQ0VfRkFSQURBWQkJCSgweDYgPDwgMjYpCisjZGVmaW5lIE9QTV9QTExfQllQQVNTCQkJKDB4NSA8PCAyNikKKyNkZWZpbmUgT1BNX0RFQlVHCQkJKDB4NCA8PCAyNikKKyNkZWZpbmUgT1BNX0JVUk5fSU4JCQkoMHgzIDw8IDI2KQorI2RlZmluZSBPUE1fTUJJU1QJCQkoMHgyIDw8IDI2KQorI2RlZmluZSBPUE1fU0NBTgkJCSgweDEgPDwgMjYpCisjZGVmaW5lIE9QTV9SRUFMCQkJKDB4MCA8PCAyNikKKworI2RlZmluZSBGTEFTSF9UWVBFX01BU0sJCQkoMHgzIDw8IDI0KQorI2RlZmluZSBGTEFTSF9UWVBFX05BTkRfMksJCSgweDMgPDwgMjQpCisjZGVmaW5lIEZMQVNIX1RZUEVfTkFORF81MTIJCSgweDIgPDwgMjQpCisjZGVmaW5lIEZMQVNIX1RZUEVfUEFSQUxMRUwJCSgweDEgPDwgMjQpCisjZGVmaW5lIEZMQVNIX1RZUEVfU0VSSUFMCQkoMHgwIDw8IDI0KQorLyogaWYgcGFyYWxsZWwgKi8KKyNkZWZpbmUgRkxBU0hfV0lEVEhfMTZCSVQJCSgxIDw8IDIzKQkvKiBlbHNlIDggYml0ICovCisvKiBpZiBzZXJpYWwgKi8KKyNkZWZpbmUgRkxBU0hfQVRNRUwJCQkoMSA8PCAyMykJLyogZWxzZSBTVE0gKi8KKworI2RlZmluZSBGTEFTSF9TSVpFX01BU0sJCQkoMHgzIDw8IDIxKQorI2RlZmluZSBOQU5EXzI1Nk0JCQkoMHgzIDw8IDIxKQkvKiBhbmQgbW9yZSAqLworI2RlZmluZSBOQU5EXzEyOE0JCQkoMHgyIDw8IDIxKQorI2RlZmluZSBOQU5EXzY0TQkJCSgweDEgPDwgMjEpCisjZGVmaW5lIE5BTkRfMzJNCQkJKDB4MCA8PCAyMSkKKyNkZWZpbmUgQVRNRUxfMTZNCQkJKDB4MyA8PCAyMSkJLyogYW5kIG1vcmUgKi8KKyNkZWZpbmUgQVRNRUxfOE0JCQkoMHgyIDw8IDIxKQorI2RlZmluZSBBVE1FTF80TV8yTQkJCSgweDEgPDwgMjEpCisjZGVmaW5lIEFUTUVMXzFNCQkJKDB4MCA8PCAyMSkJLyogYW5kIGxlc3MgKi8KKyNkZWZpbmUgU1RNXzMyTQkJCQkoMSA8PCAyMikJLyogYW5kIG1vcmUgKi8KKyNkZWZpbmUgU1RNXzE2TQkJCQkoMCA8PCAyMikJLyogYW5kIGxlc3MgKi8KKworI2RlZmluZSBGTEFTSF9QQVJBTExFTF9ISUdIX1BJTl9DTlQJKDEgPDwgMjApCS8qIGVsc2UgbG93IHBpbiBjbnQgKi8KKworI2RlZmluZSBDUFVfQUhCX1JBVElPX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lIENQVV9BSEJfMV8xCQkJKDB4MCA8PCAxOCkKKyNkZWZpbmUgQ1BVX0FIQl8zXzIJCQkoMHgxIDw8IDE4KQorI2RlZmluZSBDUFVfQUhCXzI0XzEzCQkJKDB4MiA8PCAxOCkKKyNkZWZpbmUgQ1BVX0FIQl8yXzEJCQkoMHgzIDw8IDE4KQorCisjZGVmaW5lIFJFR19UT19BSEJfU1BFRUQocmVnKQkJKCgoKHJlZykgPj4gMTUpICYgMHg3KSAqIDEwICsgMTMwKQorI2RlZmluZSBBSEJfU1BFRURfVE9fUkVHKHgpCQkoKCgoeCAtIDEzMCkpIC8gMTApIDw8IDE1KQorCisvKiBpdCBpcyBwb3NpYmxlIHRvIG92ZXJyaWRlIHNvbWUgc2V0dGluZ3MsIHVzZSA+PiBPVkVSUklERV94eHh4X1NISUZUICovCisjZGVmaW5lIE9WRVJSSURFX0ZMQVNIX1RZUEVfU0hJRlQJMTYKKyNkZWZpbmUgT1ZFUlJJREVfRkxBU0hfV0lEVEhfU0hJRlQJMTYKKyNkZWZpbmUgT1ZFUlJJREVfRkxBU0hfU0laRV9TSElGVAkxNgorI2RlZmluZSBPVkVSUklERV9DUFVfQUhCX1JBVElPX1NISUZUCTE1CisjZGVmaW5lIE9WRVJSSURFX0FIQl9TUEVFRF9TSElGVAkxNQorCisvKiBHbG9iYWwgUExMIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX1BMTF9DVFJMCQkJMHgwOAorCisjZGVmaW5lIFBMTF9CWVBBU1MJCQkoMSA8PCAzMSkKKyNkZWZpbmUgUExMX1BPV0VSX0RPV04JCQkoMSA8PCA4KQorI2RlZmluZSBQTExfQ09OVFJPTF9RCQkJKDB4MUYgPDwgMCkKKworLyogR2xvYmFsIFNvZnQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfUkVTRVQJCQkweDBDCisKKyNkZWZpbmUgUkVTRVRfR0xPQkFMCQkJKDEgPDwgMzEpCisjZGVmaW5lIFJFU0VUX0NQVTEJCQkoMSA8PCAzMCkKKyNkZWZpbmUgUkVTRVRfVFZFCQkJKDEgPDwgMjgpCisjZGVmaW5lIFJFU0VUX1NBVEExCQkJKDEgPDwgMjcpCisjZGVmaW5lIFJFU0VUX1NBVEEwCQkJKDEgPDwgMjYpCisjZGVmaW5lIFJFU0VUX0NJUgkJCSgxIDw8IDI1KQorI2RlZmluZSBSRVNFVF9FWFRfREVWCQkJKDEgPDwgMjQpCisjZGVmaW5lIFJFU0VUX1dECQkJKDEgPDwgMjMpCisjZGVmaW5lIFJFU0VUX0dQSU8yCQkJKDEgPDwgMjIpCisjZGVmaW5lIFJFU0VUX0dQSU8xCQkJKDEgPDwgMjEpCisjZGVmaW5lIFJFU0VUX0dQSU8wCQkJKDEgPDwgMjApCisjZGVmaW5lIFJFU0VUX1NTUAkJCSgxIDw8IDE5KQorI2RlZmluZSBSRVNFVF9VQVJUCQkJKDEgPDwgMTgpCisjZGVmaW5lIFJFU0VUX1RJTUVSCQkJKDEgPDwgMTcpCisjZGVmaW5lIFJFU0VUX1JUQwkJCSgxIDw8IDE2KQorI2RlZmluZSBSRVNFVF9JTlQxCQkJKDEgPDwgMTUpCisjZGVmaW5lIFJFU0VUX0lOVDAJCQkoMSA8PCAxNCkKKyNkZWZpbmUgUkVTRVRfTENECQkJKDEgPDwgMTMpCisjZGVmaW5lIFJFU0VUX0xQQwkJCSgxIDw8IDEyKQorI2RlZmluZSBSRVNFVF9BUEIJCQkoMSA8PCAxMSkKKyNkZWZpbmUgUkVTRVRfRE1BCQkJKDEgPDwgMTApCisjZGVmaW5lIFJFU0VUX1VTQjEJCQkoMSA8PCA5KQorI2RlZmluZSBSRVNFVF9VU0IwCQkJKDEgPDwgOCkKKyNkZWZpbmUgUkVTRVRfUENJCQkJKDEgPDwgNykKKyNkZWZpbmUgUkVTRVRfR01BQzEJCQkoMSA8PCA2KQorI2RlZmluZSBSRVNFVF9HTUFDMAkJCSgxIDw8IDUpCisjZGVmaW5lIFJFU0VUX1NFQ1VSSVRZCQkJKDEgPDwgNCkKKyNkZWZpbmUgUkVTRVRfUkFJRAkJCSgxIDw8IDMpCisjZGVmaW5lIFJFU0VUX0lERQkJCSgxIDw8IDIpCisjZGVmaW5lIFJFU0VUX0ZMQVNICQkJKDEgPDwgMSkKKyNkZWZpbmUgUkVTRVRfRFJBTQkJCSgxIDw8IDApCisKKy8qIEdsb2JhbCBJTyBQYWQgRHJpdmluZyBDYXBhYmlsaXR5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0lPX0RSSVZJTkdfQ1RSTAkJMHgxMAorCisjZGVmaW5lIERSSVZJTkdfQ1VSUkVOVF9NQVNLCQkweDMKKworLyogaGVyZSAwMC00bUEsIDAxLThtQSwgMTAtMTJtQSwgMTEtMTZtQSAqLworI2RlZmluZSBHUElPMV9QQURTXzMxXzI4X1NISUZUCQkyOAorI2RlZmluZSBHUElPMF9QQURTXzMxXzE2X1NISUZUCQkyNgorI2RlZmluZSBHUElPMF9QQURTXzE1XzBfU0hJRlQJCTI0CisjZGVmaW5lIFBDSV9BTkRfRVhUX1JFU0VUX1BBRFNfU0hJRlQJMjIKKyNkZWZpbmUgSURFX1BBRFNfU0hJRlQJCQkyMAorI2RlZmluZSBHTUFDMV9QQURTX1NISUZUCQkxOAorI2RlZmluZSBHTUFDMF9QQURTX1NISUZUCQkxNgorLyogRFJBTSBpcyBub3QgaW4gbUEgYW5kIHBvb3JseSBkb2N1bWVudGVkICovCisjZGVmaW5lIERSQU1fQ0xPQ0tfUEFEU19TSElGVAkJOAorI2RlZmluZSBEUkFNX0RBVEFfUEFEU19TSElGVAkJNAorI2RlZmluZSBEUkFNX0NPTlRST0xfUEFEU19TSElGVAkJMAorCisvKiBHbG9iYWwgSU8gUGFkIFNsZXcgUmF0ZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9JT19TTEVXX1JBVEVfQ1RSTAkweDE0CisKKyNkZWZpbmUgR1BJTzFfUEFEU18zMV8yOF9TTE9XCQkoMSA8PCAxMCkKKyNkZWZpbmUgR1BJTzBfUEFEU18zMV8xNl9TTE9XCQkoMSA8PCA5KQorI2RlZmluZSBHUElPMF9QQURTXzE1XzBfU0xPVwkJKDEgPDwgOCkKKyNkZWZpbmUgUENJX1BBRFNfU0xPVwkJCSgxIDw8IDcpCisjZGVmaW5lIElERV9QQURTX1NMT1cJCQkoMSA8PCA2KQorI2RlZmluZSBHTUFDMV9QQURTX1NMT1cJCQkoMSA8PCA1KQorI2RlZmluZSBHTUFDMF9QQURTX1NMT1cJCQkoMSA8PCA0KQorI2RlZmluZSBEUkFNX0NMT0NLX1BBRFNfU0xPVwkJKDEgPDwgMSkKKyNkZWZpbmUgRFJBTV9JT19QQURTX1NMT1cJCSgxIDw8IDApCisKKy8qCisgKiBHZW5lcmFsIHNrZXcgY29udHJvbCBkZWZpbmVzCisgKiAxNiBzdGVwcywgZWFjaCBzdGVwIGlzIGFyb3VuZCAwLjJucworICovCisjZGVmaW5lIFNLRVdfTUFTSwkJCTB4RgorCisvKiBHbG9iYWwgSURFIFBBRCBTa2V3IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0lERV9TS0VXX0NUUkwJCTB4MTgKKworI2RlZmluZSBJREUxX0hPU1RfU1RST0JFX0RFTEFZX1NISUZUCTI4CisjZGVmaW5lIElERTFfREVWSUNFX1NUUk9CRV9ERUxBWV9TSElGVAkyNAorI2RlZmluZSBJREUxX09VVFBVVF9JT19TS0VXX1NISUZUCTIwCisjZGVmaW5lIElERTFfSU5QVVRfSU9fU0tFV19TSElGVAkxNgorI2RlZmluZSBJREUwX0hPU1RfU1RST0JFX0RFTEFZX1NISUZUCTEyCisjZGVmaW5lIElERTBfREVWSUNFX1NUUk9CRV9ERUxBWV9TSElGVAk4CisjZGVmaW5lIElERTBfT1VUUFVUX0lPX1NLRVdfU0hJRlQJNAorI2RlZmluZSBJREUwX0lOUFVUX0lPX1NLRVdfU0hJRlQJMAorCisvKiBHbG9iYWwgR01BQyBDb250cm9sIFBhZCBTa2V3IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0dNQUNfQ1RSTF9TS0VXX0NUUkwJMHgxQworCisjZGVmaW5lIEdNQUMxX1RYQ19TS0VXX1NISUZUCQkyOAorI2RlZmluZSBHTUFDMV9UWEVOX1NLRVdfU0hJRlQJCTI0CisjZGVmaW5lIEdNQUMxX1JYQ19TS0VXX1NISUZUCQkyMAorI2RlZmluZSBHTUFDMV9SWERWX1NLRVdfU0hJRlQJCTE2CisjZGVmaW5lIEdNQUMwX1RYQ19TS0VXX1NISUZUCQkxMgorI2RlZmluZSBHTUFDMF9UWEVOX1NLRVdfU0hJRlQJCTgKKyNkZWZpbmUgR01BQzBfUlhDX1NLRVdfU0hJRlQJCTQKKyNkZWZpbmUgR01BQzBfUlhEVl9TS0VXX1NISUZUCQkwCisKKy8qIEdsb2JhbCBHTUFDMCBEYXRhIFBBRCBTa2V3IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0dNQUMwX0RBVEFfU0tFV19DVFJMCTB4MjAKKy8qIEdsb2JhbCBHTUFDMSBEYXRhIFBBRCBTa2V3IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0dNQUMxX0RBVEFfU0tFV19DVFJMCTB4MjQKKworI2RlZmluZSBHTUFDX1RYRF9TS0VXX1NISUZUKHgpCQkoKCh4KSAqIDQpICsgMTYpCisjZGVmaW5lIEdNQUNfUlhEX1NLRVdfU0hJRlQoeCkJCSgoeCkgKiA0KQorCisvKiBDUFUgaGFzIHR3byBBSEIgYnVzc2VzLiAqLworCisvKiBHbG9iYWwgQXJiaXRyYXRpb24wIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0FSQklUUkFUSU9OMF9DVFJMCTB4MjgKKworI2RlZmluZSBCT09UX0NPTlRST0xMRVJfSElHSF9QUklPCSgxIDw8IDMpCisjZGVmaW5lIERNQV9CVVMxX0hJR0hfUFJJTwkJKDEgPDwgMikKKyNkZWZpbmUgQ1BVMF9ISUdIX1BSSU8JCQkoMSA8PCAwKQorCisvKiBHbG9iYWwgQXJiaXRyYXRpb24xIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0FSQklUUkFUSU9OMV9DVFJMCTB4MkMKKworI2RlZmluZSBUVkVfSElHSF9QUklPCQkJKDEgPDwgOSkKKyNkZWZpbmUgUENJX0hJR0hfUFJJTwkJCSgxIDw8IDgpCisjZGVmaW5lIFVTQjFfSElHSF9QUklPCQkJKDEgPDwgNykKKyNkZWZpbmUgVVNCMF9ISUdIX1BSSU8JCQkoMSA8PCA2KQorI2RlZmluZSBHTUFDMV9ISUdIX1BSSU8JCQkoMSA8PCA1KQorI2RlZmluZSBHTUFDMF9ISUdIX1BSSU8JCQkoMSA8PCA0KQorI2RlZmluZSBTRUNVUklUWV9ISUdIX1BSSU8JCSgxIDw8IDMpCisjZGVmaW5lIFJBSURfSElHSF9QUklPCQkJKDEgPDwgMikKKyNkZWZpbmUgSURFX0hJR0hfUFJJTwkJCSgxIDw8IDEpCisjZGVmaW5lIERNQV9CVVMyX0hJR0hfUFJJTwkJKDEgPDwgMCkKKworLyogQ29tbW9uIGJpdHMgZm9yIGJvdGggYXJiaXRyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIEJVUlNUX0xFTkdUSF9TSElGVAkJMTYKKyNkZWZpbmUgQlVSU1RfTEVOR1RIX01BU0sJCSgweDNGIDw8IDE2KQorCisvKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX01JU0NfQ1RSTAkJMHgzMAorCisjZGVmaW5lIE1FTU9SWV9TUEFDRV9TV0FQCQkoMSA8PCAzMSkKKyNkZWZpbmUgVVNCMV9QTFVHX01JTklCCQkJKDEgPDwgMzApIC8qIGVsc2UgcGx1ZyBpcyBtaW5pLUEgKi8KKyNkZWZpbmUgVVNCMF9QTFVHX01JTklCCQkJKDEgPDwgMjkpCisjZGVmaW5lIEdNQUNfR01JSQkJCSgxIDw8IDI4KQorI2RlZmluZSBHTUFDXzFfRU5BQkxFCQkJKDEgPDwgMjcpCisvKiBUT0RPOiBkZWZpbmUgQVRBL1NBVEEgYml0cyAqLworI2RlZmluZSBVU0IxX1ZCVVNfT04JCQkoMSA8PCAyMykKKyNkZWZpbmUgVVNCMF9WQlVTX09OCQkJKDEgPDwgMjIpCisjZGVmaW5lIEFQQl9DTEtPVVRfRU5BQkxFCQkoMSA8PCAyMSkKKyNkZWZpbmUgVFZDX0NMS09VVF9FTkFCTEUJCSgxIDw8IDIwKQorI2RlZmluZSBFWFRfQ0xLSU5fRU5BQkxFCQkoMSA8PCAxOSkKKyNkZWZpbmUgUENJXzY2TUhaCQkJKDEgPDwgMTgpIC8qIGVsc2UgMzMgTUh6ICovCisjZGVmaW5lIFBDSV9DTEtPVVRfRU5BQkxFCQkoMSA8PCAxNykKKyNkZWZpbmUgTFBDX0NMS09VVF9FTkFCTEUJCSgxIDw8IDE2KQorI2RlZmluZSBVU0IxX1dBS0VVUF9PTgkJCSgxIDw8IDE1KQorI2RlZmluZSBVU0IwX1dBS0VVUF9PTgkJCSgxIDw8IDE0KQorLyogVE9ETzogZGVmaW5lIFBDSSBpZGxlIGRldGVjdCBiaXRzICovCisjZGVmaW5lIFRWQ19QQURTX0VOQUJMRQkJCSgxIDw8IDkpCisjZGVmaW5lIFNTUF9QQURTX0VOQUJMRQkJCSgxIDw8IDgpCisjZGVmaW5lIExDRF9QQURTX0VOQUJMRQkJCSgxIDw8IDcpCisjZGVmaW5lIExQQ19QQURTX0VOQUJMRQkJCSgxIDw8IDYpCisjZGVmaW5lIFBDSV9QQURTX0VOQUJMRQkJCSgxIDw8IDUpCisjZGVmaW5lIElERV9QQURTX0VOQUJMRQkJCSgxIDw8IDQpCisjZGVmaW5lIERSQU1fUEFEU19QT1dFUl9ET1dOCQkoMSA8PCAzKQorI2RlZmluZSBOQU5EX1BBRFNfRElTQUJMRQkJKDEgPDwgMikKKyNkZWZpbmUgUEZMQVNIX1BBRFNfRElTQUJMRQkJKDEgPDwgMSkKKyNkZWZpbmUgU0ZMQVNIX1BBRFNfRElTQUJMRQkJKDEgPDwgMCkKKworLyogR2xvYmFsIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0NMT0NLX0NUUkwJCTB4MzQKKworI2RlZmluZSBQT1dFUl9TVEFURV9HMAkJCSgxIDw8IDMxKQorI2RlZmluZSBQT1dFUl9TVEFURV9TMQkJCSgxIDw8IDMwKSAvKiBlbHNlIGl0IGlzIFMzL1M0IHN0YXRlICovCisjZGVmaW5lIFNFQ1VSSVRZX0FQQl9BSEIJCSgxIDw8IDI5KQorLyogZWxzZSBTZWN1cml0eSBBUEIgY2xrIHdpbGwgYmUgMC43NXhBSEIgKi8KKy8qIFRPRE86IFRWQyBjbG9jayBkaXZpZGVyICovCisjZGVmaW5lIFBDSV9DTEtSVU5fRU5BQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUgQk9PVF9DTEtfRElTQUJMRQkJKDEgPDwgMTMpCisjZGVmaW5lIFRWQ19DTEtfRElTQUJMRQkJCSgxIDw8IDEyKQorI2RlZmluZSBGTEFTSF9DTEtfRElTQUJMRQkJKDEgPDwgMTEpCisjZGVmaW5lIEREUl9DTEtfRElTQUJMRQkJCSgxIDw8IDEwKQorI2RlZmluZSBQQ0lfQ0xLX0RJU0FCTEUJCQkoMSA8PCA5KQorI2RlZmluZSBJREVfQ0xLX0RJU0FCTEUJCQkoMSA8PCA4KQorI2RlZmluZSBVU0IxX0NMS19ESVNBQkxFCQkoMSA8PCA3KQorI2RlZmluZSBVU0IwX0NMS19ESVNBQkxFCQkoMSA8PCA2KQorI2RlZmluZSBTQVRBMV9DTEtfRElTQUJMRQkJKDEgPDwgNSkKKyNkZWZpbmUgU0FUQTBfQ0xLX0RJU0FCTEUJCSgxIDw8IDQpCisjZGVmaW5lIEdNQUMxX0NMS19ESVNBQkxFCQkoMSA8PCAzKQorI2RlZmluZSBHTUFDMF9DTEtfRElTQUJMRQkJKDEgPDwgMikKKyNkZWZpbmUgU0VDVVJJVFlfQ0xLX0RJU0FCTEUJCSgxIDw8IDEpCisKKy8qIFRPRE86IG90aGVyIHJlZ2lzdGVycyBkZWZpbml0aW9ucyBpZiBuZWVkZWQgKi8KKworI2VuZGlmIC8qIF9fTUFDSF9HTE9CQUxfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBHZW1pbmkgZ3Bpb2xpYiBzcGVjaWZpYyBkZWZpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9HUElPX0hfXworI2RlZmluZSBfX01BQ0hfR1BJT19IX18KKworI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKworI2RlZmluZSBncGlvX3RvX2lycSh4KQkoKHgpICsgR1BJT19JUlFfQkFTRSkKKyNkZWZpbmUgaXJxX3RvX2dwaW8oeCkJKCh4KSAtIEdQSU9fSVJRX0JBU0UpCisKKyNlbmRpZiAvKiBfX01BQ0hfR1BJT19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzUyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgR2VtaW5pLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fTUFDSF9IQVJEV0FSRV9ICisKKy8qCisgKiBNZW1vcnkgTWFwIGRlZmluaXRpb25zCisgKi8KKy8qIEZJWE1FOiBEb2VzIGl0IHJlYWxseSBzd2FwIFNSQU0gbGlrZSB0aGlzPyAqLworI2lmZGVmIENPTkZJR19HRU1JTklfTUVNX1NXQVAKKyMgZGVmaW5lIEdFTUlOSV9EUkFNX0JBU0UJMHgwMDAwMDAwMAorIyBkZWZpbmUgR0VNSU5JX1NSQU1fQkFTRQkweDIwMDAwMDAwCisjZWxzZQorIyBkZWZpbmUgR0VNSU5JX1NSQU1fQkFTRQkweDAwMDAwMDAwCisjIGRlZmluZSBHRU1JTklfRFJBTV9CQVNFCTB4MTAwMDAwMDAKKyNlbmRpZgorI2RlZmluZSBHRU1JTklfRkxBU0hfQkFTRQkweDMwMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9HTE9CQUxfQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9XQVFUQ0hET0dfQkFTRQkweDQxMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9VQVJUX0JBU0UJMHg0MjAwMDAwMAorI2RlZmluZSBHRU1JTklfVElNRVJfQkFTRQkweDQzMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9MQ0RfQkFTRQkJMHg0NDAwMDAwMAorI2RlZmluZSBHRU1JTklfUlRDX0JBU0UJCTB4NDUwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1NBVEFfQkFTRQkweDQ2MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9MUENfSE9TVF9CQVNFCTB4NDcwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0xQQ19JT19CQVNFCTB4NDc4MDAwMDAKKyNkZWZpbmUgR0VNSU5JX0lOVEVSUlVQVF9CQVNFCTB4NDgwMDAwMDAKKy8qIFRPRE86IERpZmZlcmVudCBpbnRlcnJ1cHQgY29udHJvbGVycyB3aGVuIFNNUAorICogI2RlZmluZSBHRU1JTklfSU5URVJSVVBUMF9CQVNFCTB4NDgwMDAwMDAKKyAqICNkZWZpbmUgR0VNSU5JX0lOVEVSUlVQVDFfQkFTRQkweDQ5MDAwMDAwCisgKi8KKyNkZWZpbmUgR0VNSU5JX1NTUF9DVFJMX0JBU0UJMHg0QTAwMDAwMAorI2RlZmluZSBHRU1JTklfUE9XRVJfQ1RSTF9CQVNFCTB4NEIwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0NJUl9CQVNFCQkweDRDMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9HUElPX0JBU0UoeCkJKDB4NEQwMDAwMDAgKyAoeCkgKiAweDEwMDAwMDApCisjZGVmaW5lIEdFTUlOSV9QQ0lfSU9fQkFTRQkweDUwMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9QQ0lfTUVNX0JBU0UJMHg1ODAwMDAwMAorI2RlZmluZSBHRU1JTklfVE9FX0JBU0UJCTB4NjAwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0dNQUMwX0JBU0UJMHg2MDAwQTAwMAorI2RlZmluZSBHRU1JTklfR01BQzFfQkFTRQkweDYwMDBFMDAwCisjZGVmaW5lIEdFTUlOSV9TRUNVUklUWV9CQVNFCTB4NjIwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0lERTBfQkFTRQkweDYzMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9JREUxX0JBU0UJMHg2MzQwMDAwMAorI2RlZmluZSBHRU1JTklfUkFJRF9CQVNFCTB4NjQwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0ZMQVNIX0NUUkxfQkFTRQkweDY1MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9EUkFNX0NUUkxfQkFTRQkweDY2MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9HRU5FUkFMX0RNQV9CQVNFCTB4NjcwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1VTQjBfQkFTRQkweDY4MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9VU0IxX0JBU0UJMHg2OTAwMDAwMAorI2RlZmluZSBHRU1JTklfQklHX0VORElBTl9CQVNFCTB4ODAwMDAwMDAKKworI2RlZmluZSBHRU1JTklfVElNRVIxX0JBU0UJR0VNSU5JX1RJTUVSX0JBU0UKKyNkZWZpbmUgR0VNSU5JX1RJTUVSMl9CQVNFCShHRU1JTklfVElNRVJfQkFTRSArIDB4MTApCisjZGVmaW5lIEdFTUlOSV9USU1FUjNfQkFTRQkoR0VNSU5JX1RJTUVSX0JBU0UgKyAweDIwKQorCisvKgorICogVUFSVCBDbG9jayB3aGVuIFN5c3RlbSBjbGsgaXMgMTUwTUh6CisgKi8KKyNkZWZpbmUgVUFSVF9DTEsJNDgwMDAwMDAKKworLyoKKyAqIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5CisgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KQkoKCgoeCkgJiAweEZGRjAwMDAwKSA+PiA0KSB8ICgoeCkgJiAweDAwMEZGRkZGKSB8IDB4RjAwMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ4MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9JT19ICisjZGVmaW5lIF9fTUFDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZW5kaWYgLyogX19NQUNIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmM0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9JUlFTX0hfXworI2RlZmluZSBfX01BQ0hfSVJRU19IX18KKworI2RlZmluZSBJUlFfU0VSSVJRMQkzMQorI2RlZmluZSBJUlFfU0VSSVJRMAkzMAorI2RlZmluZSBJUlFfUENJRAkyOQorI2RlZmluZSBJUlFfUENJQwkyOAorI2RlZmluZSBJUlFfUENJQgkyNworI2RlZmluZSBJUlFfUFdSCQkyNgorI2RlZmluZSBJUlFfQ0lSCQkyNQorI2RlZmluZSBJUlFfR1BJTyh4KQkoMjIgKyAoeCkpCisjZGVmaW5lIElSUV9TU1AJCTIxCisjZGVmaW5lIElSUV9MUEMJCTIwCisjZGVmaW5lIElSUV9MQ0QJCTE5CisjZGVmaW5lIElSUV9VQVJUCTE4CisjZGVmaW5lIElSUV9SVEMJCTE3CisjZGVmaW5lIElSUV9USU1FUjMJMTYKKyNkZWZpbmUgSVJRX1RJTUVSMgkxNQorI2RlZmluZSBJUlFfVElNRVIxCTE0CisjZGVmaW5lIElSUV9GTEFTSAkxMgorI2RlZmluZSBJUlFfVVNCMQkxMQorI2RlZmluZSBJUlFfVVNCMAkxMAorI2RlZmluZSBJUlFfRE1BCQk5CisjZGVmaW5lIElSUV9QQ0kJCTgKKyNkZWZpbmUgSVJRX0lQU0VDCTcKKyNkZWZpbmUgSVJRX1JBSUQJNgorI2RlZmluZSBJUlFfSURFMQk1CisjZGVmaW5lIElSUV9JREUwCTQKKyNkZWZpbmUgSVJRX1dBVENIRE9HCTMKKyNkZWZpbmUgSVJRX0dNQUMxCTIKKyNkZWZpbmUgSVJRX0dNQUMwCTEKKyNkZWZpbmUgSVJRX0lQSQkJMAorCisjZGVmaW5lIE5PUk1BTF9JUlFfTlVNCTMyCisKKyNkZWZpbmUgR1BJT19JUlFfQkFTRQlOT1JNQUxfSVJRX05VTQorI2RlZmluZSBHUElPX0lSUV9OVU0JKDMgKiAzMikKKworI2RlZmluZSBBUkNIX1RJTUVSX0lSUQlJUlFfVElNRVIyCisKKyNkZWZpbmUgTlJfSVJRUwkJKE5PUk1BTF9JUlFfTlVNICsgR1BJT19JUlFfTlVNKQorCisjZW5kaWYgLyogX19NQUNIX0lSUVNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxNGQ1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19NQUNIX01FTU9SWV9ICisjZGVmaW5lIF9fTUFDSF9NRU1PUllfSAorCisjaWZkZWYgQ09ORklHX0dFTUlOSV9NRU1fU1dBUAorIyBkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKyNlbHNlCisjIGRlZmluZSBQSFlTX09GRlNFVAlVTCgweDEwMDAwMDAwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX01BQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmJkNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX01BQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19NQUNIX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dsb2JhbF9yZWcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCS8qCisJICogQmVjYXVzZSBvZiBicm9rZW4gaGFyZHdhcmUgd2UgaGF2ZSB0byBlbmFibGUgaW50ZXJydXB0cyBvciB0aGUgQ1BVCisJICogd2lsbCBuZXZlciB3YWtldXAuLi4gQWNjdHVhbHkgaXQgaXMgbm90IHZlcnkgZ29vZCB0byBlbmFibGUKKwkgKiBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugc2NoZWR1bGVyIGNhbiBtaXNzIGEgdGljaywgYnV0IHRoZXJlIGlzCisJICogbm8gb3RoZXIgd2F5IGFyb3VuZCB0aGlzLiBQbGF0Zm9ybXMgdGhhdCBuZWVkcyBpdCBmb3IgcG93ZXIgc2F2aW5nCisJICogc2hvdWxkIGNhbGwgZW5hYmxlX2hsdCgpIGluIGluaXQgY29kZSwgc2luY2UgYnkgZGVmYXVsdCBpdCBpcworCSAqIGRpc2FibGVkLgorCSAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJX19yYXdfd3JpdGVsKFJFU0VUX0dMT0JBTCB8IFJFU0VUX0NQVTEsCisJCSAgICAgSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpICsgR0xPQkFMX1JFU0VUKTsKK30KKworI2VuZGlmIC8qIF9fTUFDSF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzU2OTBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIEdlbWluaSB0aW1leCBzcGVjaWZpY2F0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogV2hlbiBBSEIgYnVzIGZyZXF1ZW5jeSBpcyAxNTBNSHogKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTM4MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM1ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogQmFzZWQgb24gbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaDoKKyAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19NQUNIX1VOQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKlVBUlQgPSAodW5zaWduZWQgbG9uZyAqKUdFTUlOSV9VQVJUX0JBU0U7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGUgc2VyaWFsIHBvcnQgaGFzIGFscmVhZHkgYmVlbgorICogaW5pdGlhbGl6ZWQgYnkgdGhlIGJvb3Rsb2FkZXIuICBJZiB5b3UgZGlkbid0IHNldHVwIGEgcG9ydCBpbgorICogeW91ciBib290bG9hZGVyIHRoZW4gbm90aGluZyB3aWxsIGFwcGVhciAod2hpY2ggbWlnaHQgYmUgZGVzaXJlZCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKK3sKKwl3aGlsZSAoIShVQVJUW1VBUlRfTFNSXSAmIFVBUlRfTFNSX1RIUkUpKQorCQliYXJyaWVyKCk7CisJVUFSVFtVQVJUX1RYXSA9IGM7Cit9CisKKyNkZWZpbmUgZmx1c2goKSBkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZW5kaWYgLyogX19NQUNIX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlNTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhGMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTYxM2NhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaXJxLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgSW50ZXJydXB0IHJvdXRpbmVzIGZvciBHZW1pbmkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSVJRX1NPVVJDRShiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDAwKQorI2RlZmluZSBJUlFfTUFTSyhiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDA0KQorI2RlZmluZSBJUlFfQ0xFQVIoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgwOCkKKyNkZWZpbmUgSVJRX1RNT0RFKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MEMpCisjZGVmaW5lIElSUV9UTEVWRUwoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgxMCkKKyNkZWZpbmUgSVJRX1NUQVRVUyhiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDE0KQorI2RlZmluZSBGSVFfU09VUkNFKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MjApCisjZGVmaW5lIEZJUV9NQVNLKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MjQpCisjZGVmaW5lIEZJUV9DTEVBUihiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDI4KQorI2RlZmluZSBGSVFfVE1PREUoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgyQykKKyNkZWZpbmUgRklRX0xFVkVMKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MzApCisjZGVmaW5lIEZJUV9TVEFUVVMoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgzNCkKKworc3RhdGljIHZvaWQgZ2VtaW5pX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIElSUV9DTEVBUihJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKK30KKworc3RhdGljIHZvaWQgZ2VtaW5pX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoSVJRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7CisJbWFzayAmPSB+KDEgPDwgaXJxKTsKKwlfX3Jhd193cml0ZWwobWFzaywgSVJRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbWluaV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoSVJRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7CisJbWFzayB8PSAoMSA8PCBpcnEpOworCV9fcmF3X3dyaXRlbChtYXNrLCBJUlFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBnZW1pbmlfaXJxX2NoaXAgPSB7CisJLm5hbWUJPSAiSU5UQyIsCisJLmFjawk9IGdlbWluaV9hY2tfaXJxLAorCS5tYXNrCT0gZ2VtaW5pX21hc2tfaXJxLAorCS51bm1hc2sJPSBnZW1pbmlfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlID0geworCS5uYW1lCT0gImlycV9oYW5kbGVyIiwKKwkuc3RhcnQJPSBJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSksCisJLmVuZAk9IElPX0FERFJFU1MoRklRX1NUQVRVUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSArIDQsCit9OworCit2b2lkIF9faW5pdCBnZW1pbmlfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbW9kZSA9IDAsIGxldmVsID0gMDsKKworCS8qCisJICogRGlzYWJsZSBhcmNoX2lkbGUoKSBieSBkZWZhdWx0IHNpbmNlIGl0IGlzIGJ1Z2d5CisJICogRm9yIG1vcmUgaW5mbyBzZWUgYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisJICovCisJZGlzYWJsZV9obHQoKTsKKworCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmaXJxX3Jlc291cmNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZnZW1pbmlfaXJxX2NoaXApOworCQlpZigoaSA+PSBJUlFfVElNRVIxICYmIGkgPD0gSVJRX1RJTUVSMykgfHwgKGkgPj0gSVJRX1NFUklSUTAgJiYgaSA8PSBJUlFfU0VSSVJRMSkpIHsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfZWRnZV9pcnEpOworCQkJbW9kZSB8PSAxIDw8IGk7CisJCQlsZXZlbCB8PSAxIDw8IGk7CisJCX0gZWxzZSB7CQkJCisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCX0KKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCV9fcmF3X3dyaXRlbCgwLCBJUlFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKKwlfX3Jhd193cml0ZWwoMCwgRklRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7CisKKwkvKiBTZXQgaW50ZXJydXB0IG1vZGUgKi8KKwlfX3Jhd193cml0ZWwobW9kZSwgSVJRX1RNT0RFKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworCV9fcmF3X3dyaXRlbChsZXZlbCwgSVJRX1RMRVZFTChJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL21tLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTQ4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9tbS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiAgU3RhdGljIG1hcHBpbmdzIGZvciBHZW1pbmkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qIFBhZ2UgdGFibGUgbWFwcGluZyBmb3IgSS9PIHJlZ2lvbiAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBnZW1pbmlfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSwKKwkJLnBmbgkJPV9fcGh5c190b19wZm4oR0VNSU5JX0dMT0JBTF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9VQVJUX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX1VBUlRfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfVElNRVJfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfVElNRVJfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9QT1dFUl9DVFJMX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX1BPV0VSX0NUUkxfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfR1BJT19CQVNFKDApKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9HUElPX0JBU0UoMCkpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0dQSU9fQkFTRSgxKSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfR1BJT19CQVNFKDEpKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9HUElPX0JBU0UoMikpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0dQSU9fQkFTRSgyKSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfRkxBU0hfQ1RSTF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9GTEFTSF9DVFJMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0RSQU1fQ1RSTF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9EUkFNX0NUUkxfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfR0VORVJBTF9ETUFfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfR0VORVJBTF9ETUFfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgZ2VtaW5pX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChnZW1pbmlfaW9fZGVzYywgQVJSQVlfU0laRShnZW1pbmlfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZGM1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS90aW1lLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9nbG9iYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisvKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSB0aW1lcnMKKyAqLworI2RlZmluZSBUSU1FUl9DT1VOVChCQVNFX0FERFIpCQkoQkFTRV9BRERSICArIDB4MDApCisjZGVmaW5lIFRJTUVSX0xPQUQoQkFTRV9BRERSKQkJKEJBU0VfQUREUiAgKyAweDA0KQorI2RlZmluZSBUSU1FUl9NQVRDSDEoQkFTRV9BRERSKQkJKEJBU0VfQUREUiAgKyAweDA4KQorI2RlZmluZSBUSU1FUl9NQVRDSDIoQkFTRV9BRERSKQkJKEJBU0VfQUREUiAgKyAweDBDKQorI2RlZmluZSBUSU1FUl9DUihCQVNFX0FERFIpCQkoQkFTRV9BRERSICArIDB4MzApCisKKyNkZWZpbmUgVElNRVJfMV9DUl9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIFRJTUVSXzFfQ1JfQ0xPQ0sJCSgxIDw8IDEpCisjZGVmaW5lIFRJTUVSXzFfQ1JfSU5UCQkJKDEgPDwgMikKKyNkZWZpbmUgVElNRVJfMl9DUl9FTkFCTEUJCSgxIDw8IDMpCisjZGVmaW5lIFRJTUVSXzJfQ1JfQ0xPQ0sJCSgxIDw8IDQpCisjZGVmaW5lIFRJTUVSXzJfQ1JfSU5UCQkJKDEgPDwgNSkKKyNkZWZpbmUgVElNRVJfM19DUl9FTkFCTEUJCSgxIDw8IDYpCisjZGVmaW5lIFRJTUVSXzNfQ1JfQ0xPQ0sJCSgxIDw8IDcpCisjZGVmaW5lIFRJTUVSXzNfQ1JfSU5UCQkJKDEgPDwgOCkKKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IGdlbWluaV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXRpbWVyX3RpY2soKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZ2VtaW5pX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiR2VtaW5pIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuaGFuZGxlcgk9IGdlbWluaV90aW1lcl9pbnRlcnJ1cHQsCit9OworCisvKgorICogU2V0IHVwIHRpbWVyIGludGVycnVwdCwgYW5kIHJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMuCisgKi8KK3ZvaWQgX19pbml0IGdlbWluaV90aW1lcl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRpY2tfcmF0ZSwgcmVnX3Y7CisKKwlyZWdfdiA9IF9fcmF3X3JlYWRsKElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFICsgR0xPQkFMX1NUQVRVUykpOworCXRpY2tfcmF0ZSA9IFJFR19UT19BSEJfU1BFRUQocmVnX3YpICogMTAwMDAwMDsKKworCXByaW50ayhLRVJOX0lORk8gIkJ1czogJWRNSHoiLCB0aWNrX3JhdGUgLyAxMDAwMDAwKTsKKworCXRpY2tfcmF0ZSAvPSA2OwkJLyogQVBCIGJ1cyBydW4gQUhCKigxLzYpICovCisKKwlzd2l0Y2gocmVnX3YgJiBDUFVfQUhCX1JBVElPX01BU0spIHsKKwljYXNlIENQVV9BSEJfMV8xOgorCQlwcmludGsoS0VSTl9DT05UICIoMS8xKVxuIik7CisJCWJyZWFrOworCWNhc2UgQ1BVX0FIQl8zXzI6CisJCXByaW50ayhLRVJOX0NPTlQgIigzLzIpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQUhCXzI0XzEzOgorCQlwcmludGsoS0VSTl9DT05UICIoMjQvMTMpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQUhCXzJfMToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKDIvMSlcbiIpOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIE1ha2UgaXJxcyBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0gdGltZXIKKwkgKi8KKwlzZXR1cF9pcnEoSVJRX1RJTUVSMiwgJmdlbWluaV90aW1lcl9pcnEpOworCS8qIFN0YXJ0IHRoZSB0aW1lciAqLworCV9fcmF3X3dyaXRlbCh0aWNrX3JhdGUgLyBIWiwgVElNRVJfQ09VTlQoSU9fQUREUkVTUyhHRU1JTklfVElNRVIyX0JBU0UpKSk7CisJX19yYXdfd3JpdGVsKHRpY2tfcmF0ZSAvIEhaLCBUSU1FUl9MT0FEKElPX0FERFJFU1MoR0VNSU5JX1RJTUVSMl9CQVNFKSkpOworCV9fcmF3X3dyaXRlbChUSU1FUl8yX0NSX0VOQUJMRSB8IFRJTUVSXzJfQ1JfSU5ULCBUSU1FUl9DUihJT19BRERSRVNTKEdFTUlOSV9USU1FUl9CQVNFKSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBlNGE3Yzc2Li5hNzA4ZDI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjUsNyArMjUsNyBAQAogfQogCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJQ1BVX1JFRyAoUE1VX0JBU0UsIFBNVV9TVEFUKSB8PSBQTVVfV0FSTVJFU0VUOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCmluZGV4IDg4N2NiMjEuLjA1ZjE3MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtcmVncy5oPgogCkBAIC0yNDUsNDMgKzI0NCw4IEBACiAJaW14X21tY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvOwogfQogCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIGlteF9mYl9pbmZvOwotCi12b2lkIF9faW5pdCBzZXRfaW14X2ZiX2luZm8oc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhICpoYXJkX2lteF9mYl9pbmZvKQotewotCW1lbWNweSgmaW14X2ZiX2luZm8saGFyZF9pbXhfZmJfaW5mbyxzaXplb2Yoc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14ZmJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweDAwMjA1MDAwLAotCQkuZW5kCT0gMHgwMDIwNTBGRiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IExDRENfSU5ULAotCQkuZW5kCT0gTENEQ19JTlQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IGZiX2RtYV9tYXNrID0gfih1NjQpMDsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14ZmJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpbXgtZmIiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotIAkJLnBsYXRmb3JtX2RhdGEJPSAmaW14X2ZiX2luZm8sCi0JCS5kbWFfbWFzawk9ICZmYl9kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhmYl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGlteGZiX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaW14X21tY19kZXZpY2UsCi0JJmlteGZiX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGFkZWU3ZTUuLjQ2ZDRjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTMyLDcgKzMyLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYzQ4NTM0NS4uZTE1NTFiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zMiw3ICszMiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggZTAxMmJmMS4uNDJhZTI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC01OSw3ICs1OSwxMCBAQAogCX0pCiAKICNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkJCQkJCVwKLQlfX2FyY2hfdmlydF90b19kbWEoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkpCisJKHsJCQkJCQkJCVwKKwkJLyogX19pc19sYnVzX3ZpcnQoKSBjYW4gbmV2ZXIgYmUgdHJ1ZSBmb3IgUkFNIHBhZ2VzICovCVwKKwkJKGRtYV9hZGRyX3QpcGFnZV90b19waHlzKHBhZ2UpOwkJCQlcCisJfSkKIAogI2VuZGlmIC8qIENPTkZJR19BUkNIX0lPUDEzWFggKi8KICNlbmRpZiAvKiAhQVNTRU1CTFkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGM3MTI3ZjQuLmQwYzY2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogUmVzZXQgdGhlIGludGVybmFsIGJ1cyAod2FybmluZyBib3RoIGNvcmVzIGFyZSByZXNldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwppbmRleCA2NzNiMGRiLi40ODczZjI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCkBAIC0xMDI2LDggKzEwMjYsMTAgQEAKIAkJd2hpY2hfYXR1ID0gMDsKIAl9CiAKLQlpZiAoIXdoaWNoX2F0dSkKKwlpZiAoIXdoaWNoX2F0dSkgeworCQlrZnJlZShyZXMpOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlzd2l0Y2god2hpY2hfYXR1KSB7CiAJY2FzZSBJT1AxM1hYX0lOSVRfQVRVX0FUVVg6CkBAIC0xMDc0LDYgKzEwNzYsNyBAQAogCQlzeXMtPm1hcF9pcnEgPSBpb3AxM3h4X3BjaWVfbWFwX2lycTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUocmVzKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMzJkOWU1Yi4uYTRiODA4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTYsNyArMTYsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAwY2IzYWQ4Li5mMTkyYTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNCw3ICsxNCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJKklPUDNYWF9QQ1NSID0gMHgzMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMmU5YzY4Zi4uZGUzNzA5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZDU3YzNmYy4uODkyMGZmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xOSw3ICsxOSw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogRmlyc3QgdHJ5IG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydCAqLwogCWlmIChtYWNoaW5lX2lzX2l4ZHAyMzUxKCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwppbmRleCBkODE2YzUxLi43MGFmY2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIH0KIAogdm9pZCBfX2luaXQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpCi17ICAKK3sKIAl1bnNpZ25lZCBsb25nIGNwdWlkID0gcmVhZF9jcHVpZF9pZCgpOwogCiAJLyoKQEAgLTM4NiwxNyArMzg2LDE3IEBACiAKIAlwcl9kZWJ1Zygic2V0dXAgUENJLUFIQihpbmJvdW5kKSBhbmQgQUhCLVBDSShvdXRib3VuZCkgYWRkcmVzcyBtYXBwaW5nc1xuIik7CiAKLQkvKiAKKwkvKgogCSAqIFdlIHVzZSBpZGVudGl0eSBBSEItPlBDSSBhZGRyZXNzIHRyYW5zbGF0aW9uCiAJICogaW4gdGhlIDB4NDgwMDAwMDAgdG8gMHg0YmZmZmZmZiBhZGRyZXNzIHNwYWNlCiAJICovCiAJKlBDSV9QQ0lNRU1CQVNFID0gMHg0ODQ5NEE0QjsKIAotCS8qIAorCS8qCiAJICogV2UgYWxzbyB1c2UgaWRlbnRpdHkgUENJLT5BSEIgYWRkcmVzcyB0cmFuc2xhdGlvbgogCSAqIGluIDQgMTZNQiBCQVJzIHRoYXQgYmVnaW4gYXQgdGhlIHBoeXNpY2FsIG1lbW9yeSBzdGFydAogCSAqLwotCSpQQ0lfQUhCTUVNQkFTRSA9IChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApICsgCisJKlBDSV9BSEJNRU1CQVNFID0gKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgKwogCQkoKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgPj4gOCkgKwogCQkoKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgPj4gMTYpICsKIAkJKChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApID4+IDI0KSArCkBAIC00MDgsMTggKzQwOCwxOSBAQAogCQlwcl9kZWJ1Zygic2V0dXAgQkFScyBpbiBjb250cm9sbGVyXG4iKTsKIAogCQkvKgotCQkgKiBXZSBjb25maWd1cmUgdGhlIFBDSSBpbmJvdW5kIG1lbW9yeSB3aW5kb3dzIHRvIGJlIAorCQkgKiBXZSBjb25maWd1cmUgdGhlIFBDSSBpbmJvdW5kIG1lbW9yeSB3aW5kb3dzIHRvIGJlCiAJCSAqIDE6MSBtYXBwZWQgdG8gU0RSQU0KIAkJICovCi0JCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzAsIDQsIFBIWVNfT0ZGU0VUICsgMHgwMDAwMDAwMCk7Ci0JCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzEsIDQsIFBIWVNfT0ZGU0VUICsgMHgwMTAwMDAwMCk7Ci0JCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzIsIDQsIFBIWVNfT0ZGU0VUICsgMHgwMjAwMDAwMCk7Ci0JCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzMsIDQsIFBIWVNfT0ZGU0VUICsgMHgwMzAwMDAwMCk7CisJCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzAsIDQsIFBIWVNfT0ZGU0VUKTsKKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMSwgNCwgUEhZU19PRkZTRVQgKyBTWl8xNk0pOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18yLCA0LCBQSFlTX09GRlNFVCArIFNaXzMyTSk7CisJCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzMsIDQsIFBIWVNfT0ZGU0VUICsgU1pfNDhNKTsKIAogCQkvKgotCQkgKiBFbmFibGUgQ1NSIHdpbmRvdyBhdCAweGZmMDAwMDAwLgorCQkgKiBFbmFibGUgQ1NSIHdpbmRvdyBhdCA2NCBNaUIgdG8gYWxsb3cgUENJIG1hc3RlcnMKKwkJICogdG8gY29udGludWUgcHJlZmV0Y2hpbmcgcGFzdCA2NCBNaUIgYm91bmRhcnkuCiAJCSAqLwotCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU180LCA0LCAweGZmMDAwMDA4KTsKKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfNCwgNCwgUEhZU19PRkZTRVQgKyBTWl82NE0pOwogCiAJCS8qCiAJCSAqIEVuYWJsZSB0aGUgSU8gd2luZG93IHRvIGJlIHdheSB1cCBoaWdoLCBhdCAweGZmZmZmYzAwCkBAIC01MDAsNyArNTAxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IHBjaV9idXMgKml4cDR4eF9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0cnVjdCBwY2lfYnVzICogX19kZXZpbml0IGl4cDR4eF9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKIHsKIAlyZXR1cm4gcGNpX3NjYW5fYnVzKHN5cy0+YnVzbnIsICZpeHA0eHhfb3BzLCBzeXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDUxYmQ2OWMuLmRlZjc3NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTE3LDI2ICsxNywzMSBAQAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAKIC8qIFByb2Nlc3NvciBpZCB2YWx1ZSBpbiBDUDE1IFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgSVhQNDI1X1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MWMwCi0jZGVmaW5lIElYUDQzNV9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDA0MAotI2RlZmluZSBJWFA0NjVfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQyMDAKLSNkZWZpbmUgSVhQNFhYX1BST0NFU1NPUl9JRF9NQVNLCTB4ZmZmZmZmZjAKKyNkZWZpbmUgSVhQNDJYX1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MWMwIC8qIGluY2x1ZGluZyB1bnVzZWQgMHg2OTA1NDFFeCAqLworI2RlZmluZSBJWFA0MlhfUFJPQ0VTU09SX0lEX01BU0sJMHhmZmZmZmZjMAogCi0jZGVmaW5lIGNwdV9pc19peHA0MngoKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDRYWF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAotCQkJICBJWFA0MjVfUFJPQ0VTU09SX0lEX1ZBTFVFKQotI2RlZmluZSBjcHVfaXNfaXhwNDN4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0WFhfUFJPQ0VTU09SX0lEX01BU0spID09IFwKLQkJCSAgSVhQNDM1X1BST0NFU1NPUl9JRF9WQUxVRSkKLSNkZWZpbmUgY3B1X2lzX2l4cDQ2eCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNFhYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCi0JCQkgIElYUDQ2NV9QUk9DRVNTT1JfSURfVkFMVUUpCisjZGVmaW5lIElYUDQzWF9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDA0MAorI2RlZmluZSBJWFA0M1hfUFJPQ0VTU09SX0lEX01BU0sJMHhmZmZmZmZmMAorCisjZGVmaW5lIElYUDQ2WF9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDIwMCAvKiBpbmNsdWRpbmcgSVhQNDU1ICovCisjZGVmaW5lIElYUDQ2WF9QUk9DRVNTT1JfSURfTUFTSwkweGZmZmZmZmYwCisKKyNkZWZpbmUgY3B1X2lzX2l4cDQyeCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNDJYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCisJCQkgSVhQNDJYX1BST0NFU1NPUl9JRF9WQUxVRSkKKyNkZWZpbmUgY3B1X2lzX2l4cDQzeCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNDNYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCisJCQkgSVhQNDNYX1BST0NFU1NPUl9JRF9WQUxVRSkKKyNkZWZpbmUgY3B1X2lzX2l4cDQ2eCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNDZYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCisJCQkgSVhQNDZYX1BST0NFU1NPUl9JRF9WQUxVRSkKIAogc3RhdGljIGlubGluZSB1MzIgaXhwNHh4X3JlYWRfZmVhdHVyZV9iaXRzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHZhbCA9IH4qSVhQNFhYX0VYUF9DRkcyOwotCXZhbCAmPSB+SVhQNFhYX0ZFQVRVUkVfUkVTRVJWRUQ7Ci0JaWYgKCFjcHVfaXNfaXhwNDZ4KCkpCi0JCXZhbCAmPSB+SVhQNFhYX0ZFQVRVUkVfSVhQNDZYX09OTFk7CiAKLQlyZXR1cm4gdmFsOworCWlmIChjcHVfaXNfaXhwNDJ4KCkpCisJCXJldHVybiB2YWwgJiBJWFA0MlhfRkVBVFVSRV9NQVNLOworCWlmIChjcHVfaXNfaXhwNDN4KCkpCisJCXJldHVybiB2YWwgJiBJWFA0M1hfRkVBVFVSRV9NQVNLOworCXJldHVybiB2YWwgJiBJWFA0NlhfRkVBVFVSRV9NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXhwNHh4X3dyaXRlX2ZlYXR1cmVfYml0cyh1MzIgdmFsdWUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXhwNHh4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9peHA0eHgtcmVncy5oCmluZGV4IGFkOWM4ODguLjk3YzUzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9peHA0eHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9peHA0eHgtcmVncy5oCkBAIC02MDQsNiArNjA0LDcgQEAKICNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KIAogLyogImZ1c2UiIGJpdHMgb2YgSVhQX0VYUF9DRkcyICovCisvKiBBbGwgSVhQNHh4IENQVXMgKi8KICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUkNPTVAJCSgxIDw8IDApCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1VTQl9ERVZJQ0UJKDEgPDwgMSkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfSEFTSAkJKDEgPDwgMikKQEAgLTYxOSwyMCArNjIwLDQxIEBACiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1JFU0VUX05QRUIJKDEgPDwgMTIpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1JFU0VUX05QRUMJKDEgPDwgMTMpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1BDSQkJKDEgPDwgMTQpCi0jZGVmaW5lIElYUDRYWF9GRUFUVVJFX0VDQ19USU1FU1lOQwkoMSA8PCAxNSkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfVVRPUElBX1BIWV9MSU1JVAkoMyA8PCAxNikKKyNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfWFNDQUxFX01BWF9GUkVRCSgzIDw8IDIyKQorI2RlZmluZSBJWFA0MlhfRkVBVFVSRV9NQVNLCQkoSVhQNFhYX0ZFQVRVUkVfUkNPTVAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1VTQl9ERVZJQ0UgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9IQVNIICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfQUVTICAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0RFUyAgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9IRExDICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfQUFMICAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0hTUyAgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9VVE9QSUEgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX05QRUNfRVRIICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVBICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfUkVTRVRfTlBFQiAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1JFU0VUX05QRUMgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9QQ0kgICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfVVRPUElBX1BIWV9MSU1JVCB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1hTQ0FMRV9NQVhfRlJFUSkKKworCisvKiBJWFA0M3gvNDZ4IENQVXMgKi8KKyNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfRUNDX1RJTUVTWU5DCSgxIDw8IDE1KQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9VU0JfSE9TVAkJKDEgPDwgMTgpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX05QRUFfRVRICQkoMSA8PCAxOSkKKyNkZWZpbmUgSVhQNDNYX0ZFQVRVUkVfTUFTSwkJKElYUDQyWF9GRUFUVVJFX01BU0sgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9FQ0NfVElNRVNZTkMgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfVVNCX0hPU1QgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX05QRUFfRVRIKQorCisvKiBJWFA0NnggQ1BVIChpbmNsdWRpbmcgSVhQNDU1KSBvbmx5ICovCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX05QRUJfRVRIXzFfVE9fMwkoMSA8PCAyMCkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUlNBCQkoMSA8PCAyMSkKLSNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfWFNDQUxFX01BWF9GUkVRCSgzIDw8IDIyKQotI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9SRVNFUlZFRAkJKDB4RkYgPDwgMjQpCi0KLSNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfSVhQNDZYX09OTFkgKElYUDRYWF9GRUFUVVJFX0VDQ19USU1FU1lOQyB8CVwKLQkJCQkgICAgSVhQNFhYX0ZFQVRVUkVfVVNCX0hPU1QgfAkJXAotCQkJCSAgICBJWFA0WFhfRkVBVFVSRV9OUEVBX0VUSCB8CQlcCi0JCQkJICAgIElYUDRYWF9GRUFUVVJFX05QRUJfRVRIXzFfVE9fMyB8CVwKLQkJCQkgICAgSVhQNFhYX0ZFQVRVUkVfUlNBIHwJCVwKLQkJCQkgICAgSVhQNFhYX0ZFQVRVUkVfWFNDQUxFX01BWF9GUkVRKQorI2RlZmluZSBJWFA0NlhfRkVBVFVSRV9NQVNLCQkoSVhQNDNYX0ZFQVRVUkVfTUFTSyAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX05QRUJfRVRIXzFfVE9fMyAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9SU0EpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDkyYTdlOGQuLmQyYWEyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTIwLDcgKzIwLDcgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAoIDEgJiYgbW9kZSA9PSAncycpIHsKIAkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9ucGUuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9ucGUuYwppbmRleCBjNzNhOTRkLi4yNTIzMTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X25wZS5jCkBAIC01NzUsOCArNTc1LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IGltYWdlLT5zaXplOyBpKyspCiAJCQlpbWFnZS0+ZGF0YVtpXSA9IHN3YWIzMihpbWFnZS0+ZGF0YVtpXSk7CiAKLQlpZiAoIWNwdV9pc19peHA0NngoKSAmJiAoKGltYWdlLT5pZCA+PiAyOCkgJiAweEYgLyogZGV2aWNlIElEICovKSkgewotCQlwcmludF9ucGUoS0VSTl9JTkZPLCBucGUsICJJWFA0NnggZmlybXdhcmUgaWdub3JlZCBvbiAiCisJaWYgKGNwdV9pc19peHA0MngoKSAmJiAoKGltYWdlLT5pZCA+PiAyOCkgJiAweEYgLyogZGV2aWNlIElEICovKSkgeworCQlwcmludF9ucGUoS0VSTl9JTkZPLCBucGUsICJJWFA0M3gvSVhQNDZ4IGZpcm13YXJlIGlnbm9yZWQgb24gIgogCQkJICAiSVhQNDJ4XG4iKTsKIAkJZ290byBlcnI7CiAJfQpAQCAtNTk2LDcgKzU5Niw3IEBACiAJCSAgInJldmlzaW9uIDB4JVg6JVhcbiIsIChpbWFnZS0+aWQgPj4gMTYpICYgMHhGRiwKIAkJICAoaW1hZ2UtPmlkID4+IDgpICYgMHhGRiwgaW1hZ2UtPmlkICYgMHhGRik7CiAKLQlpZiAoIWNwdV9pc19peHA0NngoKSkgeworCWlmIChjcHVfaXNfaXhwNDJ4KCkpIHsKIAkJaWYgKCFucGUtPmlkKQogCQkJaW5zdHJfc2l6ZSA9IE5QRV9BXzQyWF9JTlNUUl9TSVpFOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKaW5kZXggMzYwMGNkOS4uYjU0MjFjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwpAQCAtMjAsNiArMjAsMTggQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBSRC04OEY2MjgxIFJlZmVyZW5jZSBCb2FyZC4KIAorY29uZmlnIE1BQ0hfU0hFRVZBUExVRworCWJvb2wgIk1hcnZlbGwgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBNYXJ2ZWxsIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkLgorCitjb25maWcgTUFDSF9UUzIxOQorCWJvb2wgIlFOQVAgVFMtMTE5IGFuZCBUUy0yMTkgVHVyYm8gTkFTIgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgUU5BUCBUUy0xMTkgYW5kIFRTLTIxOSBUdXJibyBOQVMgZGV2aWNlcy4KKwogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKaW5kZXggYjk2YzU1ZC4uOGYwM2M5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAotb2JqLXkJCQkJKz0gY29tbW9uLm8gYWRkci1tYXAubyBpcnEubyBwY2llLm8KK29iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gaXJxLm8gcGNpZS5vIG1wcC5vCiAKIG9iai0kKENPTkZJR19NQUNIX0RCODhGNjI4MV9CUCkJCSs9IGRiODhmNjI4MS1icC1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjYxOTJfTkFTKQkrPSByZDg4ZjYxOTItbmFzLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1JEODhGNjI4MSkJCSs9IHJkODhmNjI4MS1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9TSEVFVkFQTFVHKQkJKz0gc2hlZXZhcGx1Zy1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9UUzIxOSkJCSs9IHRzMjE5LXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBkMjA3NGYuLjNkMmZhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvb3Jpb25fc3BpLmg+CiAjaW5jbHVkZSA8bmV0L2RzYS5oPgpAQCAtMjQsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KICNpbmNsdWRlIDxwbGF0L2NhY2hlLWZlcm9jZW9uLWwyLmg+CiAjaW5jbHVkZSA8cGxhdC9laGNpLW9yaW9uLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KICNpbmNsdWRlIDxwbGF0L212X3hvci5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZS5oPgpAQCAtMjU3LDcgKzI1OSw3IEBACiAJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi12b2lkIF9faW5pdCBraXJrd29vZF9ydGNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3J0Y19pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLW12IiwgLTEsICZraXJrd29vZF9ydGNfcmVzb3VyY2UsIDEpOwogfQpAQCAtMjk5LDYgKzMwMSw1MCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvU0RJTy9NTUMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdnNkaW9fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTRElPX1BIWVNfQkFTRSwKKwkJLmVuZAk9IFNESU9fUEhZU19CQVNFICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0tJUktXT09EX1NESU8sCisJCS5lbmQJPSBJUlFfS0lSS1dPT0RfU0RJTywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgbXZzZGlvX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtpcmt3b29kX3NkaW8gPSB7CisJLm5hbWUJCT0gIm12c2RpbyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmbXZzZGlvX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXZzZGlvX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXZzZGlvX3Jlc291cmNlcywKK307CisKK3ZvaWQgX19pbml0IGtpcmt3b29kX3NkaW9faW5pdChzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgKm12c2Rpb19kYXRhKQoreworCXUzMiBkZXYsIHJldjsKKworCWtpcmt3b29kX3BjaWVfaWQoJmRldiwgJnJldik7CisJaWYgKHJldiA9PSAwKSAgLyogY2F0Y2ggYWxsIEtpcmt3b29kIFowJ3MgKi8KKwkJbXZzZGlvX2RhdGEtPmNsb2NrID0gMTAwMDAwMDAwOworCWVsc2UKKwkJbXZzZGlvX2RhdGEtPmNsb2NrID0gMjAwMDAwMDAwOworCW12c2Rpb19kYXRhLT5kcmFtID0gJmtpcmt3b29kX21idXNfZHJhbV9pbmZvOworCWtpcmt3b29kX3NkaW8uZGV2LnBsYXRmb3JtX2RhdGEgPSBtdnNkaW9fZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtpcmt3b29kX3NkaW8pOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU1BJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3Qgb3Jpb25fc3BpX2luZm8ga2lya3dvb2Rfc3BpX3BsYXRfZGF0YSA9IHsKQEAgLTMyOSw2ICszNzUsNDUgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhIGtpcmt3b29kX2kyY19wZGF0YSA9IHsKKwkuZnJlcV9tCQk9IDgsIC8qIGFzc3VtZXMgMTY2IE1IeiBUQ0xLICovCisJLmZyZXFfbgkJPSAzLAorCS50aW1lb3V0CT0gMTAwMCwgLyogRGVmYXVsdCB0aW1lb3V0IG9mIDEgc2Vjb25kICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtpcmt3b29kX2kyY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImkyYyIsCisJCS5zdGFydAk9IEkyQ19QSFlTX0JBU0UsCisJCS5lbmQJPSBJMkNfUEhZU19CQVNFICsgMHgxZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZQk9ICJpMmMiLAorCQkuc3RhcnQJPSBJUlFfS0lSS1dPT0RfVFdTSSwKKwkJLmVuZAk9IElSUV9LSVJLV09PRF9UV1NJLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2lya3dvb2RfaTJjID0geworCS5uYW1lCQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa2lya3dvb2RfaTJjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0ga2lya3dvb2RfaTJjX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAma2lya3dvb2RfaTJjX3BkYXRhLAorCX0sCit9OworCit2b2lkIF9faW5pdCBraXJrd29vZF9pMmNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2RfaTJjKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFVBUlQwCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQga2lya3dvb2RfdWFydDBfZGF0YVtdID0gewpAQCAtNTA1LDcgKzU5MCw3IEBACiAJfSwKIH07CiAKLXZvaWQgX19pbml0IGtpcmt3b29kX3hvcjBfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3hvcjBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2RfeG9yMF9zaGFyZWQpOwogCkBAIC02MDMsNyArNjg4LDcgQEAKIAl9LAogfTsKIAotdm9pZCBfX2luaXQga2lya3dvb2RfeG9yMV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQga2lya3dvb2RfeG9yMV9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF94b3IxX3NoYXJlZCk7CiAKQEAgLTcxMSw0ICs3OTYsOSBAQAogI2lmZGVmIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMgogCWtpcmt3b29kX2wyX2luaXQoKTsKICNlbmRpZgorCisJLyogaW50ZXJuYWwgZGV2aWNlcyB0aGF0IGV2ZXJ5IGJvYXJkIGhhcyAqLworCWtpcmt3b29kX3J0Y19pbml0KCk7CisJa2lya3dvb2RfeG9yMF9pbml0KCk7CisJa2lya3dvb2RfeG9yMV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaAppbmRleCBmZTM2N2MxLi42ZWU4ODQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKQEAgLTE0LDYgKzE0LDcgQEAKIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YTsKIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YTsKK3N0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YTsKIAogLyoKICAqIEJhc2ljIEtpcmt3b29kIGluaXQgZnVuY3Rpb25zIHVzZWQgZWFybHkgYnkgbWFjaGluZS1zZXR1cC4KQEAgLTMzLDE0ICszNCwxNCBAQAogdm9pZCBraXJrd29vZF9nZTAxX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKIHZvaWQga2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdChzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKmQsIGludCBpcnEpOwogdm9pZCBraXJrd29vZF9wY2llX2luaXQodm9pZCk7Ci12b2lkIGtpcmt3b29kX3J0Y19pbml0KHZvaWQpOwogdm9pZCBraXJrd29vZF9zYXRhX2luaXQoc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSAqc2F0YV9kYXRhKTsKK3ZvaWQga2lya3dvb2Rfc2Rpb19pbml0KHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSAqbXZzZGlvX2RhdGEpOwogdm9pZCBraXJrd29vZF9zcGlfaW5pdCh2b2lkKTsKK3ZvaWQga2lya3dvb2RfaTJjX2luaXQodm9pZCk7CiB2b2lkIGtpcmt3b29kX3VhcnQwX2luaXQodm9pZCk7CiB2b2lkIGtpcmt3b29kX3VhcnQxX2luaXQodm9pZCk7Ci12b2lkIGtpcmt3b29kX3hvcjBfaW5pdCh2b2lkKTsKLXZvaWQga2lya3dvb2RfeG9yMV9pbml0KHZvaWQpOwogCitleHRlcm4gaW50IGtpcmt3b29kX3RjbGs7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBraXJrd29vZF90aW1lcjsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYwppbmRleCBhMTRjMjk0Li41NTA1ZDU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMKQEAgLTExLDE4ICsxMSw1OSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYjg4ZjYyODFfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUgPSAidS1ib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMU0KKwl9LCB7CisJCS5uYW1lID0gInVJbWFnZSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplID0gU1pfNE0KKwl9LCB7CisJCS5uYW1lID0gInJvb3QiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYjg4ZjYyODFfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CQk9IEtJUktXT09EX05BTkRfTUVNX1BIWVNfQkFTRSwKKwkuZW5kCQk9IEtJUktXT09EX05BTkRfTUVNX1BIWVNfQkFTRSArCisJCQkgIEtJUktXT09EX05BTkRfTUVNX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBvcmlvbl9uYW5kX2RhdGEgZGI4OGY2MjgxX25hbmRfZGF0YSA9IHsKKwkucGFydHMJCT0gZGI4OGY2MjgxX25hbmRfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkYjg4ZjYyODFfbmFuZF9wYXJ0cyksCisJLmNsZQkJPSAwLAorCS5hbGUJCT0gMSwKKwkud2lkdGgJCT0gOCwKKwkuY2hpcF9kZWxheQk9IDI1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGI4OGY2MjgxX25hbmRfZmxhc2ggPSB7CisJLm5hbWUJCT0gIm9yaW9uX25hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZGI4OGY2MjgxX25hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZkYjg4ZjYyODFfbmFuZF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OwogCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZGI4OGY2MjgxX2dlMDBfZGF0YSA9IHsKIAkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKQEAgLTMyLDE4ICs3MywzMiBAQAogCS5uX3BvcnRzCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgZGI4OGY2MjgxX212c2Rpb19kYXRhID0geworCS5ncGlvX3dyaXRlX3Byb3RlY3QJPSAzNywKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IDM4LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkYjg4ZjYyODFfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMzdfR1BJTywKKwlNUFAzOF9HUElPLAorCTAKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkYjg4ZjYyODFfaW5pdCh2b2lkKQogewogCS8qCiAJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KIAkgKi8KIAlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYoZGI4OGY2MjgxX21wcF9jb25maWcpOwogCiAJa2lya3dvb2RfZWhjaV9pbml0KCk7CiAJa2lya3dvb2RfZ2UwMF9pbml0KCZkYjg4ZjYyODFfZ2UwMF9kYXRhKTsKLQlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmZGI4OGY2MjgxX3NhdGFfZGF0YSk7CiAJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCWtpcmt3b29kX3NkaW9faW5pdCgmZGI4OGY2MjgxX212c2Rpb19kYXRhKTsKKwkKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRiODhmNjI4MV9uYW5kX2ZsYXNoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZGI4OGY2MjgxX3BjaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAppbmRleCBhZGE0ODBjLi4zOGM5ODY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKQEAgLTkzLDYgKzkzLDcgQEAKICNkZWZpbmUgIERFVklDRV9JRAkJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgwMDM0KQogI2RlZmluZSAgUlRDX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgwMzAwKQogI2RlZmluZSAgU1BJX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgwNjAwKQorI2RlZmluZSAgSTJDX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgxMDAwKQogI2RlZmluZSAgVUFSVDBfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjAwMCkKICNkZWZpbmUgIFVBUlQwX1ZJUlRfQkFTRQkoREVWX0JVU19WSVJUX0JBU0UgfCAweDIwMDApCiAjZGVmaW5lICBVQVJUMV9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgyMTAwKQpAQCAtMTE2LDUgKzExNyw3IEBACiAKICNkZWZpbmUgU0FUQV9QSFlTX0JBU0UJCShLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSB8IDB4ODAwMDApCiAKKyNkZWZpbmUgU0RJT19QSFlTX0JBU0UJCShLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSB8IDB4OTAwMDApCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDg1MTBmNmMuLjIzYTE5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgc29mdCByZXNldCB0byBhc3NlcnQgUlNUT1VUbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzQ0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jCisgKgorICogTVBQIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBLaXJrd29vZCBTb0NzCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga2lya3dvb2RfdmFyaWFudCh2b2lkKQoreworCXUzMiBkZXYsIHJldjsKKworCWtpcmt3b29kX3BjaWVfaWQoJmRldiwgJnJldik7CisKKwlpZiAoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgcmV2ID49IE1WODhGNjI4MV9SRVZfQTApCisJCXJldHVybiBNUFBfRjYyODFfTUFTSzsKKwlpZiAoZGV2ID09IE1WODhGNjE5Ml9ERVZfSUQgJiYgcmV2ID49IE1WODhGNjE5Ml9SRVZfQTApCisJCXJldHVybiBNUFBfRjYxOTJfTUFTSzsKKwlpZiAoZGV2ID09IE1WODhGNjE4MF9ERVZfSUQpCisJCXJldHVybiBNUFBfRjYxODBfTUFTSzsKKworCXByaW50ayhLRVJOX0VSUiAiTVBQIHNldHVwOiB1bmtub3duIGtpcmt3b29kIHZhcmlhbnQgIgorCQkJIihkZXYgJSN4IHJldiAlI3gpXG4iLCBkZXYsIHJldik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTVBQX0NUUkwoaSkJKERFVl9CVVNfVklSVF9CQVNFICsgKGkpICogNCkKKyNkZWZpbmUgTVBQX05SX1JFR1MJKDEgKyBNUFBfTUFYLzgpCisKK3ZvaWQgX19pbml0IGtpcmt3b29kX21wcF9jb25mKHVuc2lnbmVkIGludCAqbXBwX2xpc3QpCit7CisJdTMyIG1wcF9jdHJsW01QUF9OUl9SRUdTXTsKKwl1bnNpZ25lZCBpbnQgdmFyaWFudF9tYXNrOworCWludCBpOworCisJdmFyaWFudF9tYXNrID0ga2lya3dvb2RfdmFyaWFudCgpOworCWlmICghdmFyaWFudF9tYXNrKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiaW5pdGlhbCBNUFAgcmVnczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykgeworCQltcHBfY3RybFtpXSA9IHJlYWRsKE1QUF9DVFJMKGkpKTsKKwkJcHJpbnRrKCIgJTA4eCIsIG1wcF9jdHJsW2ldKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJd2hpbGUgKCptcHBfbGlzdCkgeworCQl1bnNpZ25lZCBpbnQgbnVtID0gTVBQX05VTSgqbXBwX2xpc3QpOworCQl1bnNpZ25lZCBpbnQgc2VsID0gTVBQX1NFTCgqbXBwX2xpc3QpOworCQlpbnQgc2hpZnQsIGdwaW9fbW9kZTsKKworCQlpZiAobnVtID4gTVBQX01BWCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJraXJrd29vZF9tcHBfY29uZjogaW52YWxpZCBNUFAgIgorCQkJCQkibnVtYmVyICgldSlcbiIsIG51bSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoISgqbXBwX2xpc3QgJiB2YXJpYW50X21hc2spKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImtpcmt3b29kX21wcF9jb25mOiByZXF1ZXN0ZWQgTVBQJXUgY29uZmlnICIKKwkJCSAgICAgICAidW5hdmFpbGFibGUgb24gdGhpcyBoYXJkd2FyZVxuIiwgbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc2hpZnQgPSAobnVtICYgNykgPDwgMjsKKwkJbXBwX2N0cmxbbnVtIC8gOF0gJj0gfigweGYgPDwgc2hpZnQpOworCQltcHBfY3RybFtudW0gLyA4XSB8PSBzZWwgPDwgc2hpZnQ7CisKKwkJZ3Bpb19tb2RlID0gMDsKKwkJaWYgKCptcHBfbGlzdCAmIE1QUF9JTlBVVF9NQVNLKQorCQkJZ3Bpb19tb2RlIHw9IEdQSU9fSU5QVVRfT0s7CisJCWlmICgqbXBwX2xpc3QgJiBNUFBfT1VUUFVUX01BU0spCisJCQlncGlvX21vZGUgfD0gR1BJT19PVVRQVVRfT0s7CisJCWlmIChzZWwgIT0gMCkKKwkJCWdwaW9fbW9kZSA9IDA7CisJCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKG51bSwgZ3Bpb19tb2RlKTsKKworCQltcHBfbGlzdCsrOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIgIGZpbmFsIE1QUCByZWdzOiIpOworCWZvciAoaSA9IDA7IGkgPCBNUFBfTlJfUkVHUzsgaSsrKSB7CisJCXdyaXRlbChtcHBfY3RybFtpXSwgTVBQX0NUUkwoaSkpOworCQlwcmludGsoIiAlMDh4IiwgbXBwX2N0cmxbaV0pOworCX0KKwlwcmludGsoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDIxYTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmggLS0gTXVsdGkgUHVycG9zZSBQaW5zCisgKgorICogQ29weXJpZ2h0IDIwMDk6IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0tJUktXT09EX01QUF9ICisjZGVmaW5lIF9fS0lSS1dPT0RfTVBQX0gKKworI2RlZmluZSBNUFAoX251bSwgX3NlbCwgX2luLCBfb3V0LCBfRjYxODAsIF9GNjE5MCwgX0Y2MTkyLCBfRjYyODEpICggXAorCS8qIE1QUCBudW1iZXIgKi8JCSgoX251bSkgJiAweGZmKSB8IFwKKwkvKiBNUFAgc2VsZWN0IHZhbHVlICovCQkoKChfc2VsKSAmIDB4ZikgPDwgOCkgfCBcCisJLyogbWF5IGJlIGlucHV0IHNpZ25hbCAqLwkoKCEhKF9pbikpIDw8IDEyKSB8IFwKKwkvKiBtYXkgYmUgb3V0cHV0IHNpZ25hbCAqLwkoKCEhKF9vdXQpKSA8PCAxMykgfCBcCisJLyogYXZhaWxhYmxlIG9uIEY2MTgwICovCSgoISEoX0Y2MTgwKSkgPDwgMTQpIHwgXAorCS8qIGF2YWlsYWJsZSBvbiBGNjE5MCAqLwkoKCEhKF9GNjE5MCkpIDw8IDE1KSB8IFwKKwkvKiBhdmFpbGFibGUgb24gRjYxOTIgKi8JKCghIShfRjYxOTIpKSA8PCAxNikgfCBcCisJLyogYXZhaWxhYmxlIG9uIEY2MjgxICovCSgoISEoX0Y2MjgxKSkgPDwgMTcpKQorCisjZGVmaW5lIE1QUF9OVU0oeCkJKCh4KSAmIDB4ZmYpCisjZGVmaW5lIE1QUF9TRUwoeCkJKCgoeCkgPj4gOCkgJiAweGYpCisKKwkJCQkvKiAgIG51bSBzZWwgIGkgIG8gIDYxODAgNjE5MCA2MTkyIDYyODEgKi8KKworI2RlZmluZSBNUFBfSU5QVVRfTUFTSwkJTVBQKCAgMCwgMHgwLCAxLCAwLCAwLCAgIDAsICAgMCwgICAwICAgICkKKyNkZWZpbmUgTVBQX09VVFBVVF9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAgICAgKQorCisjZGVmaW5lIE1QUF9GNjE4MF9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDAsIDEsICAgMCwgICAwLCAgIDAgICAgKQorI2RlZmluZSBNUFBfRjYxOTBfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAwLCAgIDEsICAgMCwgICAwICAgICkKKyNkZWZpbmUgTVBQX0Y2MTkyX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAwLCAgIDEsICAgMCAgICApCisjZGVmaW5lIE1QUF9GNjI4MV9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDBfR1BJTwkJTVBQKCAgMCwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMF9ORl9JTzIJCU1QUCggIDAsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDBfU1BJX1NDbgkJTVBQKCAgMCwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxX0dQTwkJTVBQKCAgMSwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMV9ORl9JTzMJCU1QUCggIDEsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDFfU1BJX01PU0kJCU1QUCggIDEsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMl9HUE8JCU1QUCggIDIsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDJfTkZfSU80CQlNUFAoICAyLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyX1NQSV9TQ0sJCU1QUCggIDIsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQM19HUE8JCU1QUCggIDMsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDNfTkZfSU81CQlNUFAoICAzLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzX1NQSV9NSVNPCQlNUFAoICAzLCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDRfR1BJTwkJTVBQKCAgNCwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNF9ORl9JTzYJCU1QUCggIDQsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDRfVUFSVDBfUlhECQlNUFAoICA0LCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA0X1NBVEExX0FDVG4JCU1QUCggIDQsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDRfUFRQX0NMSwkJTVBQKCAgNCwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA1X0dQTwkJTVBQKCAgNSwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNV9ORl9JTzcJCU1QUCggIDUsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDVfVUFSVDBfVFhECQlNUFAoICA1LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA1X1BUUF9UUklHX0dFTglNUFAoICA1LCAweDQsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA1X1NBVEEwX0FDVG4JCU1QUCggIDUsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNl9TWVNSU1RfT1VUbglNUFAoICA2LCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA2X1NQSV9NT1NJCQlNUFAoICA2LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA2X1BUUF9UUklHX0dFTglNUFAoICA2LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDdfR1BPCQlNUFAoICA3LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA3X1BFWF9SU1RfT1VUbglNUFAoICA3LCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA3X1NQSV9TQ24JCU1QUCggIDcsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDdfUFRQX1RSSUdfR0VOCU1QUCggIDcsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQOF9HUElPCQlNUFAoICA4LCAweDAsIDEsIDEsIDEsICAgIDEsICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X1RXX1NEQQkJTVBQKCAgOCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9VQVJUMF9SVFMJCU1QUCggIDgsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfVUFSVDFfUlRTCQlNUFAoICA4LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X01JSTBfUlhFUlIJCU1QUCggIDgsIDB4NCwgMSwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfU0FUQTFfUFJFU0VOVG4JTVBQKCAgOCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9QVFBfQ0xLCQlNUFAoICA4LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X01JSTBfQ09MCQlNUFAoICA4LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDlfR1BJTwkJTVBQKCAgOSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9UV19TQ0sJCU1QUCggIDksIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfVUFSVDBfQ1RTCQlNUFAoICA5LCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X1VBUlQxX0NUUwkJTVBQKCAgOSwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9TQVRBMF9QUkVTRU5UbglNUFAoICA5LCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X1BUUF9FVkVOVF9SRVEJTVBQKCAgOSwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9NSUkwX0NSUwkJTVBQKCAgOSwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxMF9HUE8JCU1QUCggMTAsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEwX1NQSV9TQ0sJCU1QUCggMTAsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEwX1VBUlQwX1RYRAkJTVBQKCAxMCwgMFgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTBfU0FUQTFfQUNUbglNUFAoIDEwLCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMF9QVFBfVFJJR19HRU4JTVBQKCAxMCwgMHhjLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxMV9HUElPCQlNUFAoIDExLCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9TUElfTUlTTwkJTVBQKCAxMSwgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfVUFSVDBfUlhECQlNUFAoIDExLCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9QVFBfRVZFTlRfUkVRCU1QUCggMTEsIDB4NCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1BUUF9UUklHX0dFTglNUFAoIDExLCAweGMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9QVFBfQ0xLCQlNUFAoIDExLCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9TQVRBMF9BQ1RuCU1QUCggMTEsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTJfR1BPCQlNUFAoIDEyLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMl9TRF9DTEsJCU1QUCggMTIsIDB4MSwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTNfR1BJTwkJTVBQKCAxMywgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTNfU0RfQ01ECQlNUFAoIDEzLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxM19VQVJUMV9UWEQJCU1QUCggMTMsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTRfR1BJTwkJTVBQKCAxNCwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTRfU0RfRDAJCU1QUCggMTQsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE0X1VBUlQxX1JYRAkJTVBQKCAxNCwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTRfU0FUQTFfUFJFU0VOVG4JTVBQKCAxNCwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTRfTUlJMF9DT0wJCU1QUCggMTQsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTVfR1BJTwkJTVBQKCAxNSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTVfU0RfRDEJCU1QUCggMTUsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE1X1VBUlQwX1JUUwkJTVBQKCAxNSwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTVfVUFSVDFfVFhECQlNUFAoIDE1LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNV9TQVRBMF9BQ1RuCU1QUCggMTUsIDB4NCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTZfR1BJTwkJTVBQKCAxNiwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfU0RfRDIJCU1QUCggMTYsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE2X1VBUlQwX0NUUwkJTVBQKCAxNiwgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfVUFSVDFfUlhECQlNUFAoIDE2LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNl9TQVRBMV9BQ1RuCU1QUCggMTYsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE2X01JSTBfQ1JTCQlNUFAoIDE2LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE3X0dQSU8JCU1QUCggMTcsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE3X1NEX0QzCQlNUFAoIDE3LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxN19TQVRBMF9QUkVTRU5UbglNUFAoIDE3LCAweDQsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE4X0dQTwkJTVBQKCAxOCwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMThfTkZfSU8wCQlNUFAoIDE4LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE5X0dQTwkJTVBQKCAxOSwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTlfTkZfSU8xCQlNUFAoIDE5LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDIwX0dQSU8JCU1QUCggMjAsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIwX1RTTVAwCQlNUFAoIDIwLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMF9URE1fQ0gwX1RYX1FMCU1QUCggMjAsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIwX0dFMV8wCQlNUFAoIDIwLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMF9BVURJT19TUERJRkkJTVBQKCAyMCwgMHg0LCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfU0FUQTFfQUNUbglNUFAoIDIwLCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDIxX0dQSU8JCU1QUCggMjEsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIxX1RTTVAxCQlNUFAoIDIxLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMV9URE1fQ0gwX1JYX1FMCU1QUCggMjEsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIxX0dFMV8xCQlNUFAoIDIxLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMV9BVURJT19TUERJRk8JTVBQKCAyMSwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfU0FUQTBfQUNUbglNUFAoIDIxLCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDIyX0dQSU8JCU1QUCggMjIsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIyX1RTTVAyCQlNUFAoIDIyLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMl9URE1fQ0gyX1RYX1FMCU1QUCggMjIsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIyX0dFMV8yCQlNUFAoIDIyLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMl9BVURJT19TUERJRlJNS0NMSwlNUFAoIDIyLCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMl9TQVRBMV9QUkVTRU5UbglNUFAoIDIyLCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDIzX0dQSU8JCU1QUCggMjMsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX1RTTVAzCQlNUFAoIDIzLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyM19URE1fQ0gyX1JYX1FMCU1QUCggMjMsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX0dFMV8zCQlNUFAoIDIzLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyM19BVURJT19JMlNCQ0xLCU1QUCggMjMsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX1NBVEEwX1BSRVNFTlRuCU1QUCggMjMsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjRfR1BJTwkJTVBQKCAyNCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjRfVFNNUDQJCU1QUCggMjQsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI0X1RETV9TUElfQ1MwCURFViggMjQsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI0X0dFMV80CQlNUFAoIDI0LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNF9BVURJT19JMlNETwlNUFAoIDI0LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI1X0dQSU8JCU1QUCggMjUsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI1X1RTTVA1CQlNUFAoIDI1LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNV9URE1fU1BJX1NDSwlNUFAoIDI1LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNV9HRTFfNQkJTVBQKCAyNSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjVfQVVESU9fSTJTTFJDTEsJTVBQKCAyNSwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyNl9HUElPCQlNUFAoIDI2LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNl9UU01QNgkJTVBQKCAyNiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjZfVERNX1NQSV9NSVNPCU1QUCggMjYsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI2X0dFMV82CQlNUFAoIDI2LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNl9BVURJT19JMlNNQ0xLCU1QUCggMjYsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjdfR1BJTwkJTVBQKCAyNywgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjdfVFNNUDcJCU1QUCggMjcsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI3X1RETV9TUElfTU9TSQlNUFAoIDI3LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyN19HRTFfNwkJTVBQKCAyNywgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjdfQVVESU9fSTJTREkJTVBQKCAyNywgMHg0LCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyOF9HUElPCQlNUFAoIDI4LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOF9UU01QOAkJTVBQKCAyOCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjhfVERNX0NPREVDX0lOVG4JTVBQKCAyOCwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjhfR0UxXzgJCU1QUCggMjgsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI4X0FVRElPX0VYVENMSwlNUFAoIDI4LCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI5X0dQSU8JCU1QUCggMjksIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI5X1RTTVA5CQlNUFAoIDI5LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOV9URE1fQ09ERUNfUlNUbglNUFAoIDI5LCAweDIsIDAsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOV9HRTFfOQkJTVBQKCAyOSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzMF9HUElPCQlNUFAoIDMwLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMF9UU01QMTAJCU1QUCggMzAsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMwX1RETV9QQ0xLCQlNUFAoIDMwLCAweDIsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMF9HRTFfMTAJCU1QUCggMzAsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzFfR1BJTwkJTVBQKCAzMSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzFfVFNNUDExCQlNUFAoIDMxLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMV9URE1fRlMJCU1QUCggMzEsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMxX0dFMV8xMQkJTVBQKCAzMSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzMl9HUElPCQlNUFAoIDMyLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMl9UU01QMTIJCU1QUCggMzIsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMyX1RETV9EUlgJCU1QUCggMzIsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMyX0dFMV8xMgkJTVBQKCAzMiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzM19HUElPCQlNUFAoIDMzLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzM19URE1fRFRYCQlNUFAoIDMzLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzM19HRTFfMTMJCU1QUCggMzMsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzRfR1BJTwkJTVBQKCAzNCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzRfVERNX1NQSV9DUzEJTVBQKCAzNCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzRfR0UxXzE0CQlNUFAoIDM0LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM1X0dQSU8JCU1QUCggMzUsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM1X1RETV9DSDBfVFhfUUwJTVBQKCAzNSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzVfR0UxXzE1CQlNUFAoIDM1LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNV9TQVRBMF9BQ1RuCU1QUCggMzUsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM1X01JSTBfUlhFUlIJTVBQKCAzNSwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzNl9HUElPCQlNUFAoIDM2LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNl9UU01QMAkJTVBQKCAzNiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzZfVERNX1NQSV9DUzEJTVBQKCAzNiwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzZfQVVESU9fU1BESUZJCU1QUCggMzYsIDB4NCwgMSwgMCwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzdfR1BJTwkJTVBQKCAzNywgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzdfVFNNUDEJCU1QUCggMzcsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM3X1RETV9DSDJfVFhfUUwJTVBQKCAzNywgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzdfQVVESU9fU1BESUZPCU1QUCggMzcsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzhfR1BJTwkJTVBQKCAzOCwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzhfVFNNUDIJCU1QUCggMzgsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM4X1RETV9DSDJfUlhfUUwJTVBQKCAzOCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzhfQVVESU9fU1BESUZSTUxDTEsJTVBQKCAzOCwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFAzOV9HUElPCQlNUFAoIDM5LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOV9UU01QMwkJTVBQKCAzOSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzlfVERNX1NQSV9DUzAJTVBQKCAzOSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzlfQVVESU9fSTJTQkNMSwlNUFAoIDM5LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQwX0dQSU8JCU1QUCggNDAsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQwX1RTTVA0CQlNUFAoIDQwLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MF9URE1fU1BJX1NDSwlNUFAoIDQwLCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MF9BVURJT19JMlNETwlNUFAoIDQwLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQxX0dQSU8JCU1QUCggNDEsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQxX1RTTVA1CQlNUFAoIDQxLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MV9URE1fU1BJX01JU08JTVBQKCA0MSwgMHgyLCAxLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDFfQVVESU9fSTJTTFJDCU1QUCggNDEsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDJfR1BJTwkJTVBQKCA0MiwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDJfVFNNUDYJCU1QUCggNDIsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQyX1RETV9TUElfTU9TSQlNUFAoIDQyLCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Ml9BVURJT19JMlNNQ0xLCU1QUCggNDIsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDNfR1BJTwkJTVBQKCA0MywgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDNfVFNNUDcJCU1QUCggNDMsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQzX1RETV9DT0RFQ19JTlRuCU1QUCggNDMsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQzX0FVRElPX0kyU0RJCU1QUCggNDMsIDB4NCwgMSwgMCwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDRfR1BJTwkJTVBQKCA0NCwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDRfVFNNUDgJCU1QUCggNDQsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ0X1RETV9DT0RFQ19SU1RuCU1QUCggNDQsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ0X0FVRElPX0VYVENMSwlNUFAoIDQ0LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ1X0dQSU8JCU1QUCggNDUsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ1X1RTTVA5CQlNUFAoIDQ1LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NV9URE1fUENMSwkJTVBQKCA0NSwgMHgyLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0Nl9HUElPCQlNUFAoIDQ2LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Nl9UU01QMTAJCU1QUCggNDYsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ2X1RETV9GUwkJTVBQKCA0NiwgMHgyLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0N19HUElPCQlNUFAoIDQ3LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0N19UU01QMTEJCU1QUCggNDcsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ3X1RETV9EUlgJCU1QUCggNDcsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDhfR1BJTwkJTVBQKCA0OCwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDhfVFNNUDEyCQlNUFAoIDQ4LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OF9URE1fRFRYCQlNUFAoIDQ4LiAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ5X0dQSU8JCU1QUCggNDksIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ5X1RTTVA5CQlNUFAoIDQ5LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OV9URE1fQ0gwX1JYX1FMCU1QUCggNDksIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ5X1BUUF9DTEsJCU1QUCggNDksIDB4NSwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQX01BWAkJCTQ5CisKK3ZvaWQga2lya3dvb2RfbXBwX2NvbmYodW5zaWduZWQgaW50ICptcHBfbGlzdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYxOTItbmFzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwppbmRleCBiMWQxYTg3Li4yZjBlNGVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwpAQCAtMTEsMTEgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgpAQCAtMjMsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKQEAgLTYxLDE0ICs1NywxMSBAQAogCiAJa2lya3dvb2RfZWhjaV9pbml0KCk7CiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYxOTJfZ2UwMF9kYXRhKTsKLQlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MTkyX3NhdGFfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocmQ4OEY2MTkyX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OEY2MTkyX3NwaV9zbGF2ZV9pbmZvKSk7CiAJa2lya3dvb2Rfc3BpX2luaXQoKTsKIAlraXJrd29vZF91YXJ0MF9pbml0KCk7Ci0Ja2lya3dvb2RfeG9yMF9pbml0KCk7Ci0Ja2lya3dvb2RfeG9yMV9pbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHJkODhmNjE5Ml9wY2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKaW5kZXggZTFjMDUxNi4uMzFlOTk2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCkBAIC0xMSwyMSArMTEsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxuZXQvZHNhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByZDg4ZjYyODFfbmFuZF9wYXJ0c1tdID0gewogCXsKQEAgLTk2LDYgKzk1LDE1IEBACiAJLm5fcG9ydHMJPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfbXZzZGlvX2RhdGEgPSB7CisJLmdwaW9fY2FyZF9kZXRlY3QgPSAyOCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmQ4OGY2MjgxX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI4X0dQSU8sCisJMAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNjI4MV9pbml0KHZvaWQpCiB7CiAJdTMyIGRldiwgcmV2OwpAQCAtMTA0LDYgKzExMiw3IEBACiAJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KIAkgKi8KIAlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYocmQ4OGY2MjgxX21wcF9jb25maWcpOwogCiAJa2lya3dvb2RfZWhjaV9pbml0KCk7CiAKQEAgLTExNyw4ICsxMjYsOCBAQAogCX0KIAlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAotCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZyZDg4ZjYyODFfc2F0YV9kYXRhKTsKKwlraXJrd29vZF9zZGlvX2luaXQoJnJkODhmNjI4MV9tdnNkaW9fZGF0YSk7CiAJa2lya3dvb2RfdWFydDBfaW5pdCgpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZDg4ZjYyODFfbmFuZF9mbGFzaCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvc2hlZXZhcGx1Zy1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWU0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta2lya3dvb2Qvc2hlZXZhcGx1Zy1zZXR1cC5jCisgKgorICogTWFydmVsbCBTaGVldmFQbHVnIFJlZmVyZW5jZSBCb2FyZCBTZXR1cAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNoZWV2YXBsdWdfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUgPSAidS1ib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMU0KKwl9LCB7CisJCS5uYW1lID0gInVJbWFnZSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplID0gU1pfNE0KKwl9LCB7CisJCS5uYW1lID0gInJvb3QiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGVldmFwbHVnX25hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UsCisJLmVuZAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UgKworCQkJICBLSVJLV09PRF9OQU5EX01FTV9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb25fbmFuZF9kYXRhIHNoZWV2YXBsdWdfbmFuZF9kYXRhID0geworCS5wYXJ0cwkJPSBzaGVldmFwbHVnX25hbmRfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzaGVldmFwbHVnX25hbmRfcGFydHMpLAorCS5jbGUJCT0gMCwKKwkuYWxlCQk9IDEsCisJLndpZHRoCQk9IDgsCisJLmNoaXBfZGVsYXkJPSAyNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZWV2YXBsdWdfbmFuZF9mbGFzaCA9IHsKKwkubmFtZQkJPSAib3Jpb25fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaGVldmFwbHVnX25hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZzaGVldmFwbHVnX25hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHNoZWV2YXBsdWdfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApLAorfTsKKworc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSBzaGVldmFwbHVnX212c2Rpb19kYXRhID0geworCS8vIHVuZm9ydHVuYXRlbHkgdGhlIENEIHNpZ25hbCBoYXMgbm90IGJlZW4gY29ubmVjdGVkICovCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHNoZWV2YXBsdWdfbGVkX3BpbnNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAicGx1ZzpncmVlbjpoZWFsdGgiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCQkuZ3BpbwkJCT0gNDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBzaGVldmFwbHVnX2xlZF9kYXRhID0geworCS5sZWRzCQk9IHNoZWV2YXBsdWdfbGVkX3BpbnMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShzaGVldmFwbHVnX2xlZF9waW5zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZWV2YXBsdWdfbGVkcyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNoZWV2YXBsdWdfbGVkX2RhdGEsCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzaGVldmFwbHVnX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI5X0dQSU8sCS8qIFVTQiBQb3dlciBFbmFibGUgKi8KKwlNUFA0OV9HUElPLAkvKiBMRUQgKi8KKwkwCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2hlZXZhcGx1Z19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihzaGVldmFwbHVnX21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCisJaWYgKGdwaW9fcmVxdWVzdCgyOSwgIlVTQiBQb3dlciBFbmFibGUiKSAhPSAwIHx8CisJICAgIGdwaW9fZGlyZWN0aW9uX291dHB1dCgyOSwgMSkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBzZXQgdXAgR1BJTyAyOSAoVVNCIFBvd2VyIEVuYWJsZSlcbiIpOworCWtpcmt3b29kX2VoY2lfaW5pdCgpOworCisJa2lya3dvb2RfZ2UwMF9pbml0KCZzaGVldmFwbHVnX2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2Rpb19pbml0KCZzaGVldmFwbHVnX212c2Rpb19kYXRhKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hlZXZhcGx1Z19uYW5kX2ZsYXNoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZWV2YXBsdWdfbGVkcyk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU0hFRVZBUExVRywgIk1hcnZlbGwgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQiKQorCS8qIE1haW50YWluZXI6IHNoYWRpIEFtbW91cmkgPHNoYWRpQG1hcnZlbGwuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IHNoZWV2YXBsdWdfaW5pdCwKKwkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKKwkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE1NzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czIxOS1zZXR1cC5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICoKKyAqIFFOQVAgVFMtMTE5L1RTLTIxOSBUdXJibyBOQVMgQm9hcmQgU2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMTYgTWlCIE5PUiBmbGFzaC4gVGhlIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlzIG5vdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUKKyAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0YWJpbGl0eSB3aXRoCisgKiAgICAgdGhlIFFOQVAgZmlybXdhcmUuCisgKiBMYXlvdXQgYXMgdXNlZCBieSBRTkFQOgorICogIDB4MDAwMDAwMDAtMHgwMDA4MDAwMCA6ICJVLUJvb3QiCisgKiAgMHgwMDIwMDAwMC0weDAwNDAwMDAwIDogIktlcm5lbCIKKyAqICAweDAwNDAwMDAwLTB4MDBkMDAwMDAgOiAiUm9vdEZTIgorICogIDB4MDBkMDAwMDAtMHgwMTAwMDAwMCA6ICJSb290RlMyIgorICogIDB4MDAwODAwMDAtMHgwMDBjMDAwMCA6ICJVLUJvb3QgQ29uZmlnIgorICogIDB4MDAwYzAwMDAtMHgwMDIwMDAwMCA6ICJOQVMgQ29uZmlnIgorICoKKyAqIFdlJ2xsIHVzZSAiUm9vdEZTMSIgaW5zdGVhZCBvZiAiUm9vdEZTIiB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCB0aGUgbGF5b3V0CisgKiB1c2VkIGJ5IHRoZSBRTkFQIFRTLTEwOS9UUy0yMDkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFuYXBfdHMyMTlfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlUtQm9vdCIsCisJCS5zaXplCQk9IDB4MDAwODAwMDAsCisJCS5vZmZzZXQJCT0gMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sIHsKKwkJLm5hbWUJCT0gIktlcm5lbCIsCisJCS5zaXplCQk9IDB4MDAyMDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDIwMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJSb290RlMxIiwKKwkJLnNpemUJCT0gMHgwMDkwMDAwMCwKKwkJLm9mZnNldAkJPSAweDAwNDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJvb3RGUzIiLAorCQkuc2l6ZQkJPSAweDAwMzAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDBkMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiVS1Cb290IENvbmZpZyIsCisJCS5zaXplCQk9IDB4MDAwNDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDA4MDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJOQVMgQ29uZmlnIiwKKwkJLnNpemUJCT0gMHgwMDE0MDAwMCwKKwkJLm9mZnNldAkJPSAweDAwMGMwMDAwLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9mbGFzaCA9IHsKKwkudHlwZQkJPSAibTI1cDEyOCIsCisJLm5hbWUJCT0gInNwaV9mbGFzaCIsCisJLnBhcnRzCQk9IHFuYXBfdHMyMTlfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHFuYXBfdHMyMTlfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgcW5hcF90czIxOV9zcGlfc2xhdmVfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnFuYXBfdHMyMTlfZmxhc2gsCisJCS5pcnEJCT0gLTEsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcW5hcF90czIxOV9pMmNfcnRjID0geworCUkyQ19CT0FSRF9JTkZPKCJzMzUzOTBhIiwgMHgzMCksCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBxbmFwX3RzMjE5X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcW5hcF90czIxOV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQkJPSBLRVlfQ09QWSwKKwkJLmdwaW8JCT0gMTUsCisJCS5kZXNjCQk9ICJVU0IgQ29weSIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX1JFU1RBUlQsCisJCS5ncGlvCQk9IDE2LAorCQkuZGVzYwkJPSAiUmVzZXQiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHFuYXBfdHMyMTlfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHFuYXBfdHMyMTlfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxbmFwX3RzMjE5X2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcW5hcF90czIxOV9idXR0b25fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHFuYXBfdHMyMTlfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMF9TUElfU0NuLAorCU1QUDFfU1BJX01PU0ksCisJTVBQMl9TUElfU0NLLAorCU1QUDNfU1BJX01JU08sCisJTVBQOF9UV19TREEsCisJTVBQOV9UV19TQ0ssCisJTVBQMTBfVUFSVDBfVFhELAorCU1QUDExX1VBUlQwX1JYRCwKKwlNUFAxM19VQVJUMV9UWEQsCS8qIFBJQyBjb250cm9sbGVyICovCisJTVBQMTRfVUFSVDFfUlhELAkvKiBQSUMgY29udHJvbGxlciAqLworCU1QUDE1X0dQSU8sCQkvKiBVU0IgQ29weSBidXR0b24gKi8KKwlNUFAxNl9HUElPLAkJLyogUmVzZXQgYnV0dG9uICovCisJTVBQMjBfU0FUQTFfQUNUbiwKKwlNUFAyMV9TQVRBMF9BQ1RuLAorCU1QUDIyX1NBVEExX1BSRVNFTlRuLAorCU1QUDIzX1NBVEEwX1BSRVNFTlRuLAorCTAKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBRTkFQIFRTLXgxOSBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kIHZpYSBVQVJUMS1hdHRhY2hlZCBQSUMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFVBUlQxX1JFRyh4KQkoVUFSVDFfVklSVF9CQVNFICsgKChVQVJUXyMjeCkgPDwgMikpCisKK3ZvaWQgcW5hcF90czIxOV9wb3dlcl9vZmYodm9pZCkKK3sKKwkvKiAxOTIwMCBiYXVkIGRpdmlzb3IgKi8KKwljb25zdCB1bnNpZ25lZCBkaXZpc29yID0gKChraXJrd29vZF90Y2xrICsgKDggKiAxOTIwMCkpIC8gKDE2ICogMTkyMDApKTsKKworCXByX2luZm8oIiVzOiB0cmlnZ2VyaW5nIHBvd2VyLW9mZi4uLlxuIiwgX19mdW5jX18pOworCisJLyogaGlqYWNrIFVBUlQxIGFuZCByZXNldCBpbnRvIHNhbmUgc3RhdGUgKDE5MjAwLDhuMSkgKi8KKwl3cml0ZWwoMHg4MywgVUFSVDFfUkVHKExDUikpOworCXdyaXRlbChkaXZpc29yICYgMHhmZiwgVUFSVDFfUkVHKERMTCkpOworCXdyaXRlbCgoZGl2aXNvciA+PiA4KSAmIDB4ZmYsIFVBUlQxX1JFRyhETE0pKTsKKwl3cml0ZWwoMHgwMywgVUFSVDFfUkVHKExDUikpOworCXdyaXRlbCgweDAwLCBVQVJUMV9SRUcoSUVSKSk7CisJd3JpdGVsKDB4MDAsIFVBUlQxX1JFRyhGQ1IpKTsKKwl3cml0ZWwoMHgwMCwgVUFSVDFfUkVHKE1DUikpOworCisJLyogc2VuZCB0aGUgcG93ZXItb2ZmIGNvbW1hbmQgJ0EnIHRvIFBJQyAqLworCXdyaXRlbCgnQScsIFVBUlQxX1JFRyhUWCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW5hcF90czIxOV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihxbmFwX3RzMjE5X21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCWtpcmt3b29kX3VhcnQxX2luaXQoKTsgLyogQSBQSUMgY29udHJvbGxlciBpcyBjb25uZWN0ZWQgaGVyZS4gKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhxbmFwX3RzMjE5X3NwaV9zbGF2ZV9pbmZvLAorCQkJCUFSUkFZX1NJWkUocW5hcF90czIxOV9zcGlfc2xhdmVfaW5mbykpOworCWtpcmt3b29kX3NwaV9pbml0KCk7CisJa2lya3dvb2RfaTJjX2luaXQoKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcW5hcF90czIxOV9pMmNfcnRjLCAxKTsKKwlraXJrd29vZF9nZTAwX2luaXQoJnFuYXBfdHMyMTlfZ2UwMF9kYXRhKTsKKwlraXJrd29vZF9zYXRhX2luaXQoJnFuYXBfdHMyMTlfc2F0YV9kYXRhKTsKKwlraXJrd29vZF9laGNpX2luaXQoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFuYXBfdHMyMTlfYnV0dG9uX2RldmljZSk7CisKKwlwbV9wb3dlcl9vZmYgPSBxbmFwX3RzMjE5X3Bvd2VyX29mZjsKKworfQorCitNQUNISU5FX1NUQVJUKFRTMjE5LCAiUU5BUCBUUy0xMTkvVFMtMjE5IikKKwkvKiBNYWludGFpbmVyOiBNYXJ0aW4gTWljaGxtYXlyIDx0Ym1AY3lyaXVzLmNvbT4gKi8KKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBxbmFwX3RzMjE5X2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZwppbmRleCAyNzU0ZGFhLi5mZTBjODJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWcKQEAgLTE0LDYgKzE0LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIHRoZSBELUxpbmsKIAkgIERTTS0zMjAgV2lyZWxlc3MgTWVkaWEgUGxheWVyLgogCitjb25maWcgTUFDSF9BQ1M1SworCWJvb2wgIkJyaXZvIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgYm9hcmQiCisJaGVscAorCSAgc2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiB0aGUgQnJpdm8KKwkgIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgYm9hcmQuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKaW5kZXggZjczNWQyYy4uN2UzZTgxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQgQEAKICMgQm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfS1M4Njk1KQkrPSBib2FyZC1taWNyZWwubwogb2JqLSQoQ09ORklHX01BQ0hfRFNNMzIwKQkrPSBib2FyZC1kc20zMjAubworb2JqLSQoQ09ORklHX01BQ0hfQUNTNUspCSs9IGJvYXJkLWFjczVrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWFjczVrLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1hY3M1ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2U1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1hY3M1ay5jCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtYWNzNWsuYworICoKKyAqIEJyaXZvIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgQm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCQkgIERhbmllbCBTaWx2ZXJzdG9uZSA8ZHNpbHZlcnNAc2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBhY3M1a19pMmNfZGV2aWNlX3BsYXRkYXRhID0geworCS5zZGFfcGluCT0gNCwKKwkuc2NsX3Bpbgk9IDUsCisJLnVkZWxheQkJPSAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFjczVrX2kyY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1ncGlvIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5yZXNvdXJjZQk9IE5VTEwsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFjczVrX2kyY19kZXZpY2VfcGxhdGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWNzNWtfcGNhOTU1NV9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgIHVuc2lnbmVkIGdwaW9fYmFzZSwgdW5zaWduZWQgbmdwaW8sCisJCQkgICAgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdGF0aWMgaW50IGFjczVrX2dwaW9fdmFsdWVbXSA9IHsKKwkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAwLCAtMSwgLTEKKwl9OworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoYWNzNWtfZ3Bpb192YWx1ZSk7ICsrbikgeworCQlncGlvX3JlcXVlc3QoZ3Bpb19iYXNlICsgbiwgIkFDUy01MDAwIEdQSU8gRXhwYW5kZXIiKTsKKwkJaWYgKGFjczVrX2dwaW9fdmFsdWVbbl0gPCAwKQorCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19iYXNlICsgbik7CisJCWVsc2UKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX2Jhc2UgKyBuLAorCQkJCQkgICAgICBhY3M1a19ncGlvX3ZhbHVlW25dKTsKKwkJZ3Bpb19leHBvcnQoZ3Bpb19iYXNlICsgbiwgMCk7IC8qIEV4cG9ydCwgZGlyZWN0aW9uIGxvY2tlZCBkb3duICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFjczVrX2kyY19wY2E5NTU1X3BsYXRkYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwgLyogU3RhcnQgZGlyZWN0bHkgYWZ0ZXIgdGhlIENQVSdzIEdQSU8gKi8KKwkuaW52ZXJ0CQk9IDAsIC8qIERvIG5vdCBpbnZlcnQgKi8KKwkuc2V0dXAJCT0gYWNzNWtfcGNhOTU1NV9zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gYWNzNWtfaTJjX2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAorCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjYTk1NTUiLCAweDIwKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWNzNWtfaTJjX3BjYTk1NTVfcGxhdGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY3M1a19pMmNfaW5pdCh2b2lkKQoreworCS8qIFRoZSBncGlvIGludGVyZmFjZSAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWNzNWtfaTJjX2RldmljZSk7CisJLyogSTJDIGRldmljZXMgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBhY3M1a19pMmNfZGV2cywKKwkJCQlBUlJBWV9TSVpFKGFjczVrX2kyY19kZXZzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhY3M1a19ub3JfcGFydGl0aW9uc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQm9vdCBBZ2VudCBhbmQgY29uZmlnIiwKKwkJLnNpemUJPSBTWl8yNTZLLAorCQkub2Zmc2V0CT0gMCwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJLZXJuZWwiLAorCQkuc2l6ZQk9IFNaXzFNLAorCQkub2Zmc2V0CT0gU1pfMjU2SywKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAiU3F1YXNoRlMxIiwKKwkJLnNpemUJPSBTWl8yTSwKKwkJLm9mZnNldAk9IFNaXzI1NksgKyBTWl8xTSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAiU3F1YXNoRlMyIiwKKwkJLnNpemUJPSBTWl80TSArIFNaXzJNLAorCQkub2Zmc2V0CT0gU1pfMjU2SyArIFNaXzFNICsgU1pfMk0sCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lCT0gIkRhdGEiLAorCQkuc2l6ZQk9IFNaXzE2TSArIFNaXzRNICsgU1pfMk0gKyBTWl81MTJLLCAvKiAyMi41IE1CICovCisJCS5vZmZzZXQJPSBTWl8yNTZLICsgU1pfOE0gKyBTWl8xTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBhY3M1a19ub3JfcGRhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShhY3M1a19ub3JfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IGFjczVrX25vcl9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhY3M1a19ub3JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNaXzMyTSwgLyogV2UgZXhwZWN0IHRoZSBib290bG9hZGVyIHRvIG1hcAorCQkJCSAgKiB0aGUgZmxhc2ggaGVyZS4KKwkJCQkgICovCisJCS5lbmQgICA9IFNaXzMyTSArIFNaXzE2TSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBTWl8zMk0gKyBTWl8xNk0sCisJCS5lbmQgICA9IFNaXzMyTSArIFNaXzMyTSAtIFNaXzI1NksgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhY3M1a19kZXZpY2Vfbm9yID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjczVrX25vcl9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gYWNzNWtfbm9yX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhY3M1a19ub3JfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3M1a19yZWdpc3Rlcl9ub3Iodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGFjczVrX25vcl9wYXJ0aXRpb25zWzBdLm1hc2tfZmxhZ3MgPT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogVW5wcm90ZWN0aW5nIGJvb3Rsb2FkZXIgYW5kIGNvbmZpZ3VyYXRpb24gcGFydGl0aW9uXG4iKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWNzNWtfZGV2aWNlX25vcik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHBoeXNtYXAtZmxhc2ggZGV2aWNlXG4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNzNWtfcHJvdGVjdGlvbl9zZXR1cChjaGFyICpzKQoreworCS8qIFdlIGNhbid0IGFsbG9jYXRlIGFueXRoaW5nIGhlcmUgYnV0IHdlIHNob3VsZCBiZSBhYmxlCisJICogdG8gdHJpdmlhbGx5IHBhcnNlIHMgYW5kIGRlY2lkZSBpZiB3ZSBjYW4gcHJvdGVjdCB0aGUKKwkgKiBib290bG9hZGVyIHBhcnRpdGlvbiBvciBub3QKKwkgKi8KKwlpZiAoc3RyY21wKHMsICJubyIpID09IDApCisJCWFjczVrX25vcl9wYXJ0aXRpb25zWzBdLm1hc2tfZmxhZ3MgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInByb3RlY3RfYm9vdGxvYWRlcj0iLCBhY3M1a19wcm90ZWN0aW9uX3NldHVwKTsKKworc3RhdGljIHZvaWQgX19pbml0IGFjczVrX2luaXRfZ3Bpbyh2b2lkKQoreworCWludCBpOworCisJa3M4Njk1X3JlZ2lzdGVyX2dwaW9zKCk7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZ3Bpb19yZXF1ZXN0KGksICJBQ1M1SyBJUlEiKTsKKwlncGlvX3JlcXVlc3QoNywgIkFDUzVLIEtTX0ZSRFkiKTsKKwlmb3IgKGkgPSA4OyBpIDwgMTY7ICsraSkKKwkJZ3Bpb19yZXF1ZXN0KGksICJBQ1M1SyBVbnVzZWQiKTsKKworCWdwaW9fcmVxdWVzdCgzLCAiQUNTNUsgQ0FOIENvbnRyb2wiKTsKKwlncGlvX3JlcXVlc3QoNiwgIkFDUzVLIEhlYXJ0YmVhdCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgzLCAxKTsgLyogRGVmYXVsdCBDQU5fUkVTRVQgaGlnaCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCg2LCAwKTsgLyogRGVmYXVsdCBLUzg2OTVfQUNUSVZFIGxvdyAqLworCWdwaW9fZXhwb3J0KDMsIDApOyAvKiBleHBvcnQgQ0FOX1JFU0VUIGFzIG91dHB1dCBvbmx5ICovCisJZ3Bpb19leHBvcnQoNiwgMCk7IC8qIGV4cG9ydCBLUzg2OTVfQUNUSVZFIGFzIG91dHB1dCBvbmx5ICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3M1a19pbml0KHZvaWQpCit7CisJYWNzNWtfaW5pdF9ncGlvKCk7CisKKwkvKiBOZXR3b3JrIGRldmljZSAqLworCWtzODY5NV9hZGRfZGV2aWNlX2xhbigpOwkvKiBldGgwID0gTEFOICovCisJa3M4Njk1X2FkZF9kZXZpY2Vfd2FuKCk7CS8qIGV0aFggPSBXQU4gKi8KKworCS8qIE5PUiBkZXZpY2VzICovCisJYWNzNWtfcmVnaXN0ZXJfbm9yKCk7CisKKwkvKiBJMkMgYnVzICovCisJYWNzNWtfaTJjX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChBQ1M1SywgIkJyaXZvIFN5c3RlbXMgTExDIEFDUy01MDAwIE1hc3RlciBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogU2ltdGVjIEVsZWN0cm9uaWNzLiAqLworCS5waHlzX2lvCT0gS1M4Njk1X0lPX1BBLAorCS5pb19wZ19vZmZzdAk9IChLUzg2OTVfSU9fVkEgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEtTODY5NV9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0ga3M4Njk1X21hcF9pbywKKwkuaW5pdF9pcnEJPSBrczg2OTVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGFjczVrX2luaXQsCisJLnRpbWVyCQk9ICZrczg2OTVfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDZkNTg4N2MuLjc2ZTUzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDcgKzM1LDExIEBACiAJCQkJCV9fcGh5c190b192aXJ0KHgpIDogX19idXNfdG9fdmlydCh4KSk7IH0pCiAjZGVmaW5lIF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIHgpCSh7IGlzX2xidXNfZGV2aWNlKGRldikgPyBcCiAJCQkJCShkbWFfYWRkcl90KV9fdmlydF90b19waHlzKHgpIDogKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cyh4KTsgfSkKLSNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgeCkJX19hcmNoX3ZpcnRfdG9fZG1hKGRldiwgcGFnZV9hZGRyZXNzKHgpKQorI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCB4KQlcCisJKHsgZG1hX2FkZHJfdCBfX2RtYSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsgXAorCSAgIGlmICghaXNfbGJ1c19kZXZpY2UoZGV2KSkgXAorCQlfX2RtYSA9IF9fZG1hIC0gUEhZU19PRkZTRVQgKyBLUzg2OTVfUENJTUVNX1BBOyBcCisJICAgX19kbWE7IH0pCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNWE5YjAzMi4uZmIxZGRhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjcsNyArMjcsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDUyNzJhYmUuLmUwZGQzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xOSw3ICsxOSw3IEBACiAJKih1bnNpZ25lZCBsb25nICopKElPX0JBU0UgKyAweDUwMDA0KSA9IDE7CS8qIGlkbGUgbW9kZSAqLwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAobW9kZSA9PSAncycpIHsKIAkJY3B1X3Jlc2V0KDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZmE0NmJiMWUuLjQ1YTU2ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNyBAQAogCWNwdV9kb19pZGxlICgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljcHVfcmVzZXQgKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOGRiMTE0Ny4uYzFkZTM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgc29mdCByZXNldCB0byBhc3NlcnQgUlNUT1VUbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTU2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCkBAIC0wLDAgKzEsNDcgQEAKK2lmIEFSQ0hfTU1QCisKK21lbnUgIk1hcnZlbGwgUFhBMTY4LzkxMCBJbXBsbWVudGF0aW9ucyIKKworY29uZmlnIE1BQ0hfQVNQRU5JVEUKKwlib29sICJNYXJ2ZWxsJ3MgUFhBMTY4IEFzcGVuaXRlIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBMTY4CisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBMTY4LWJhc2VkCisJICBBc3Blbml0ZSBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfWllMT05JVEUyCisJYm9vbCAiTWFydmVsbCdzIFBYQTE2OCBaeWxvbml0ZTIgRGV2ZWxvcG1lbnQgQm9hcmQiCisJc2VsZWN0IENQVV9QWEExNjgKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBQWEExNjgtYmFzZWQKKwkgIFp5bG9uaXRlMiBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfVEFWT1JFVkIKKwlib29sICJNYXJ2ZWxsJ3MgUFhBOTEwIFRhdm9yRVZCIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBOTEwCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBOTEwLWJhc2VkCisJICBUYXZvckVWQiBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfVFRDX0RLQgorCWJvb2wgIk1hcnZlbGwncyBQWEE5MTAgVGF2b3JFVkIgRGV2ZWxvcG1lbnQgQm9hcmQiCisJc2VsZWN0IENQVV9QWEE5MTAKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBQWEE5MTAtYmFzZWQKKwkgIFRUQ19ES0IgRGV2ZWxvcG1lbnQgQm9hcmQuCisKK2VuZG1lbnUKKworY29uZmlnIENQVV9QWEExNjgKKwlib29sCisJc2VsZWN0IENQVV9NT0hBV0sKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEExNjgKKworY29uZmlnIENQVV9QWEE5MTAKKwlib29sCisJc2VsZWN0IENQVV9NT0hBV0sKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEE5MTAKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tbXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4M2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE1hcnZlbGwncyBQWEExNjggcHJvY2Vzc29ycyBsaW5lCisjCisKK29iai15CQkJCSs9IGNvbW1vbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGlycS5vIHRpbWUubworCisjIFNvQyBzdXBwb3J0CitvYmotJChDT05GSUdfQ1BVX1BYQTE2OCkJKz0gcHhhMTY4Lm8KK29iai0kKENPTkZJR19DUFVfUFhBOTEwKQkrPSBweGE5MTAubworCisjIGJvYXJkIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX0FTUEVOSVRFKQkrPSBhc3Blbml0ZS5vCitvYmotJChDT05GSUdfTUFDSF9aWUxPTklURTIpCSs9IGFzcGVuaXRlLm8KK29iai0kKENPTkZJR19NQUNIX1RBVk9SRVZCKQkrPSB0YXZvcmV2Yi5vCitvYmotJChDT05GSUdfTUFDSF9UVENfREtCKQkrPSB0dGNfZGtiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MjQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBQWEExNjgtYmFzZWQgQXNwZW5pdGUgYW5kIFp5bG9uaXRlMgorICogIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMTY4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGExNjguaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb21tb25fcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogRGF0YSBGbGFzaCBJbnRlcmZhY2UgKi8KKwlHUElPMF9ERklfRDE1LAorCUdQSU8xX0RGSV9EMTQsCisJR1BJTzJfREZJX0QxMywKKwlHUElPM19ERklfRDEyLAorCUdQSU80X0RGSV9EMTEsCisJR1BJTzVfREZJX0QxMCwKKwlHUElPNl9ERklfRDksCisJR1BJTzdfREZJX0Q4LAorCUdQSU84X0RGSV9ENywKKwlHUElPOV9ERklfRDYsCisJR1BJTzEwX0RGSV9ENSwKKwlHUElPMTFfREZJX0Q0LAorCUdQSU8xMl9ERklfRDMsCisJR1BJTzEzX0RGSV9EMiwKKwlHUElPMTRfREZJX0QxLAorCUdQSU8xNV9ERklfRDAsCisKKwkvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgKi8KKwlHUElPMThfU01DX25DUzAsCisJR1BJTzM0X1NNQ19uQ1MxLAorCUdQSU8yM19TTUNfbkxVQSwKKwlHUElPMjVfU01DX25MTEEsCisJR1BJTzI4X1NNQ19SRFksCisJR1BJTzI5X1NNQ19TQ0xLLAorCUdQSU8zNV9TTUNfQkUxLAorCUdQSU8zNl9TTUNfQkUyLAorCUdQSU8yN19HUElPLAkvKiBFdGhlcm5ldCBJUlEgKi8KKworCS8qIFVBUlQxICovCisJR1BJTzEwN19VQVJUMV9SWEQsCisJR1BJTzEwOF9VQVJUMV9UWEQsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU01DX0NTMV9QSFlTX0JBU0UgKyAweDMwMCwKKwkJLmVuZAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHhmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdwaW9fdG9faXJxKDI3KSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKDI3KSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWM5MXhfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbW1vbl9pbml0KHZvaWQpCit7CisJbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb21tb25fcGluX2NvbmZpZykpOworCisJLyogb24tY2hpcCBkZXZpY2VzICovCisJcHhhMTY4X2FkZF91YXJ0KDEpOworCisJLyogb2ZmLWNoaXAgZGV2aWNlcyAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVNQRU5JVEUsICJQWEExNjgtYmFzZWQgQXNwZW5pdGUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTE2OF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhMTY4X3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IGNvbW1vbl9pbml0LAorTUFDSElORV9FTkQKKworTUFDSElORV9TVEFSVChaWUxPTklURTIsICJQWEExNjgtYmFzZWQgWnlsb25pdGUyIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGExNjhfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTE2OF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSBjb21tb25faW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDljYzVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgdm9pZCBhcGJjX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IGNsa19yc3Q7CisKKwljbGtfcnN0ID0gQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLIHwgQVBCQ19GTkNMS1NFTChjbGstPmZuY2xrc2VsKTsKKwlfX3Jhd193cml0ZWwoY2xrX3JzdCwgY2xrLT5jbGtfcnN0KTsKK30KKworc3RhdGljIHZvaWQgYXBiY19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKDAsIGNsay0+Y2xrX3JzdCk7Cit9CisKK3N0cnVjdCBjbGtvcHMgYXBiY19jbGtfb3BzID0geworCS5lbmFibGUJCT0gYXBiY19jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gYXBiY19jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOworCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmVuYWJsZWQrKyA9PSAwKQorCQljbGstPm9wcy0+ZW5hYmxlKGNsayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQljbGstPm9wcy0+ZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChjbGstPm9wcy0+Z2V0cmF0ZSkKKwkJcmF0ZSA9IGNsay0+b3BzLT5nZXRyYXRlKGNsayk7CisJZWxzZQorCQlyYXRlID0gY2xrLT5yYXRlOworCisJcmV0dXJuIHJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk2N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKK3N0cnVjdCBjbGtvcHMgeworCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworCXVuc2lnbmVkIGxvbmcJCSgqZ2V0cmF0ZSkoc3RydWN0IGNsayAqKTsKK307CisKK3N0cnVjdCBjbGsgeworCWNvbnN0IHN0cnVjdCBjbGtvcHMJKm9wczsKKworCXZvaWQgX19pb21lbQkqY2xrX3JzdDsJLyogY2xvY2sgcmVzZXQgY29udHJvbCByZWdpc3RlciAqLworCWludAkJZm5jbGtzZWw7CS8qIGZ1bmN0aW9uYWwgY2xvY2sgc2VsZWN0IChBUEJDKSAqLworCXVpbnQzMl90CWVuYWJsZV92YWw7CS8qIHZhbHVlIGZvciBjbG9jayBlbmFibGUgKEFQTVUpICovCisJdW5zaWduZWQgbG9uZwlyYXRlOworCWludAkJZW5hYmxlZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgY2xrb3BzIGFwYmNfY2xrX29wczsKKworI2RlZmluZSBBUEJDX0NMSyhfbmFtZSwgX3JlZywgX2ZuY2xrc2VsLCBfcmF0ZSkJCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUEJDXyMjX3JlZywJXAorCQkuZm5jbGtzZWwJPSBfZm5jbGtzZWwsCQkJXAorCQkucmF0ZQkJPSBfcmF0ZSwJCQlcCisJCS5vcHMJCT0gJmFwYmNfY2xrX29wcywJCVwKK30KKworI2RlZmluZSBBUEJDX0NMS19PUFMoX25hbWUsIF9yZWcsIF9mbmNsa3NlbCwgX3JhdGUsIF9vcHMpCVwKK3N0cnVjdCBjbGsgY2xrXyMjX25hbWUgPSB7CQkJCQlcCisJCS5jbGtfcnN0CT0gKHZvaWQgX19pb21lbSAqKUFQQkNfIyNfcmVnLAlcCisJCS5mbmNsa3NlbAk9IF9mbmNsa3NlbCwJCQlcCisJCS5yYXRlCQk9IF9yYXRlLAkJCVwKKwkJLm9wcwkJPSBfb3BzLAkJCQlcCit9CisKKyNkZWZpbmUgQVBNVV9DTEsoX25hbWUsIF9yZWcsIF9ldmFsLCBfcmF0ZSkJCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUE1VXyMjX3JlZywJXAorCQkuZW5hYmxlX3ZhbAk9IF9ldmFsLAkJCVwKKwkJLnJhdGUJCT0gX3JhdGUsCQkJXAorCQkub3BzCQk9ICZhcG11X2Nsa19vcHMsCQlcCit9CisKKyNkZWZpbmUgQVBNVV9DTEtfT1BTKF9uYW1lLCBfcmVnLCBfZXZhbCwgX3JhdGUsIF9vcHMpCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUE1VXyMjX3JlZywJXAorCQkuZW5hYmxlX3ZhbAk9IF9ldmFsLAkJCVwKKwkJLnJhdGUJCT0gX3JhdGUsCQkJXAorCQkub3BzCQk9IF9vcHMsCQkJCVwKK30KKworI2RlZmluZSBJTklUX0NMS1JFRyhfY2xrLCBfZGV2bmFtZSwgX2Nvbm5hbWUpCQkJXAorCXsJCQkJCQkJXAorCQkuY2xrCQk9IF9jbGssCQkJCVwKKwkJLmRldl9pZAkJPSBfZGV2bmFtZSwJCQlcCisJCS5jb25faWQJCT0gX2Nvbm5hbWUsCQkJXAorCX0KKworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF9ncGlvOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF90aW1lcnM7CisKK2V4dGVybiB2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNjZjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmMKKyAqCisgKiAgQ29kZSBjb21tb24gdG8gUFhBMTY4IHByb2Nlc3NvciBsaW5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc3RhbmRhcmRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVBCX1BIWVNfQkFTRSksCisJCS52aXJ0dWFsCT0gQVBCX1ZJUlRfQkFTRSwKKwkJLmxlbmd0aAkJPSBBUEJfUEhZU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVhJX1BIWVNfQkFTRSksCisJCS52aXJ0dWFsCT0gQVhJX1ZJUlRfQkFTRSwKKwkJLmxlbmd0aAkJPSBBWElfUEhZU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2ZiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaApAQCAtMCwwICsxLDEzIEBACisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorCitzdHJ1Y3Qgc3lzX3RpbWVyOworCitleHRlcm4gdm9pZCB0aW1lcl9pbml0KGludCBpcnEpOworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBweGExNjhfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBweGE5MTBfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMTY4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTkxMF9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MWQ5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9kZXZpY2VzLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2RldmljZXMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCitpbnQgX19pbml0IHB4YV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHB4YV9kZXZpY2VfZGVzYyAqZGVzYywKKwkJCQl2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSByZXNbMiArIE1BWF9SRVNPVVJDRV9ETUFdOworCWludCBpLCByZXQgPSAwLCBucmVzID0gMDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoZGVzYy0+ZHJ2X25hbWUsIGRlc2MtPmlkKTsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CisKKwlpZiAoZGVzYy0+c3RhcnQgIT0gLTF1bCAmJiBkZXNjLT5zaXplID4gMCkgeworCQlyZXNbbnJlc10uc3RhcnQJPSBkZXNjLT5zdGFydDsKKwkJcmVzW25yZXNdLmVuZAk9IGRlc2MtPnN0YXJ0ICsgZGVzYy0+c2l6ZSAtIDE7CisJCXJlc1tucmVzXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCQlucmVzKys7CisJfQorCisJaWYgKGRlc2MtPmlycSAhPSBOT19JUlEpIHsKKwkJcmVzW25yZXNdLnN0YXJ0CT0gZGVzYy0+aXJxOworCQlyZXNbbnJlc10uZW5kCT0gZGVzYy0+aXJxOworCQlyZXNbbnJlc10uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwkJbnJlcysrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVTT1VSQ0VfRE1BOyBpKyssIG5yZXMrKykgeworCQlpZiAoZGVzYy0+ZG1hW2ldID09IDApCisJCQlicmVhazsKKworCQlyZXNbbnJlc10uc3RhcnQJPSBkZXNjLT5kbWFbaV07CisJCXJlc1tucmVzXS5lbmQJPSBkZXNjLT5kbWFbaV07CisJCXJlc1tucmVzXS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnJlcyk7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkYXRhICYmIHNpemUpIHsKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2FkZHItbWFwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvYWRkci1tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU0MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2FkZHItbWFwLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCisgKgorICogICBDb21tb24gYWRkcmVzcyBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9BRERSX01BUF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQUREUl9NQVBfSAorCisvKiBBUEIgLSBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBCdXMKKyAqCisgKiBOT1RFOiB0aGUgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBvbiB0aGUgQVhJIGZhYnJpYyAjMQorICogc2xhdmUgcG9ydCB0byBBSEIvQVBCIGJyaWRnZSwgZHVlIHRvIGl0cyBjbG9zZSByZWxhdGlvbnNoaXAgdG8gdGhvc2UKKyAqIHBlcmlwaGVyYWxzIG9uIEFQQiwgbGV0J3MgY291bnQgaXQgaW50byB0aGUgQUJQIG1hcHBpbmcgYXJlYS4KKyAqLworI2RlZmluZSBBUEJfUEhZU19CQVNFCQkweGQ0MDAwMDAwCisjZGVmaW5lIEFQQl9WSVJUX0JBU0UJCTB4ZmUwMDAwMDAKKyNkZWZpbmUgQVBCX1BIWVNfU0laRQkJMHgwMDIwMDAwMAorCisjZGVmaW5lIEFYSV9QSFlTX0JBU0UJCTB4ZDQyMDAwMDAKKyNkZWZpbmUgQVhJX1ZJUlRfQkFTRQkJMHhmZTIwMDAwMAorI2RlZmluZSBBWElfUEhZU19TSVpFCQkweDAwMjAwMDAwCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAtIENoaXAgU2VsZWN0IDAgYW5kIDEgKi8KKyNkZWZpbmUgU01DX0NTMF9QSFlTX0JBU0UJMHg4MDAwMDAwMAorI2RlZmluZSBTTUNfQ1MwX1BIWVNfU0laRQkweDEwMDAwMDAwCisjZGVmaW5lIFNNQ19DUzFfUEhZU19CQVNFCTB4OTAwMDAwMDAKKyNkZWZpbmUgU01DX0NTMV9QSFlTX1NJWkUJMHgxMDAwMDAwMAorCisjZW5kaWYgLyogX19BU01fTUFDSF9BRERSX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiMzU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9DTEtERVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NQVVRZUEVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NQVVRZUEVfSAorCisjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKworLyoKKyAqICBDUFUgICBTdGVwcGluZyAgIE9MRF9JRCAgICAgICBDUFVfSUQgICAgICBDSElQX0lECisgKgorICogUFhBMTY4ICAgIEEwICAgIDB4NDExNTkyNjMgICAweDU2MTU4NDAwICAgMHgwMEEwQTMzMworICogUFhBOTEwICAgIFkwICAgIDB4NDExNTkyNjIgICAweDU2MTU4MDAwICAgMHgwMEYwQzkxMAorICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTE2OAorIyAgZGVmaW5lIF9fY3B1X2lzX3B4YTE2OChpZCkJXAorCSh7IHVuc2lnbmVkIGludCBfaWQgPSAoKGlkKSA+PiA4KSAmIDB4ZmY7IF9pZCA9PSAweDg0OyB9KQorI2Vsc2UKKyMgIGRlZmluZSBfX2NwdV9pc19weGExNjgoaWQpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkxMAorIyAgZGVmaW5lIF9fY3B1X2lzX3B4YTkxMChpZCkJXAorCSh7IHVuc2lnbmVkIGludCBfaWQgPSAoKGlkKSA+PiA4KSAmIDB4ZmY7IF9pZCA9PSAweDgwOyB9KQorI2Vsc2UKKyMgIGRlZmluZSBfX2NwdV9pc19weGE5MTAoaWQpCSgwKQorI2VuZGlmCisKKyNkZWZpbmUgY3B1X2lzX3B4YTE2OCgpCQkoeyBfX2NwdV9pc19weGExNjgocmVhZF9jcHVpZF9pZCgpKTsgfSkKKyNkZWZpbmUgY3B1X2lzX3B4YTkxMCgpCQkoeyBfX2NwdV9pc19weGE5MTAocmVhZF9jcHVpZF9pZCgpKTsgfSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQ1BVVFlQRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTBmODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDIzIEBACisvKiBhcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3BpZWQgZnJvbSBhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWcuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KKwkJbGRyZXEJXHJ4LCA9QVBCX1BIWVNfQkFTRQkJQCBwaHlzaWNhbAorCQlsZHJuZQlccngsID1BUEJfVklSVF9CQVNFCQlAIHZpcnR1YWwKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAxNzAwMAorCQkuZW5kbQorCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDU4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaApAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNQVhfUkVTT1VSQ0VfRE1BCTIKKworLyogc3RydWN0dXJlIGZvciBkZXNjcmliaW5nIHRoZSBvbi1jaGlwIGRldmljZXMgKi8KK3N0cnVjdCBweGFfZGV2aWNlX2Rlc2MgeworCWNvbnN0IGNoYXIJKmRldl9uYW1lOworCWNvbnN0IGNoYXIJKmRydl9uYW1lOworCWludAkJaWQ7CisJaW50CQlpcnE7CisJdW5zaWduZWQgbG9uZwlzdGFydDsKKwl1bnNpZ25lZCBsb25nCXNpemU7CisJaW50CQlkbWFbTUFYX1JFU09VUkNFX0RNQV07Cit9OworCisjZGVmaW5lIFBYQTE2OF9ERVZJQ0UoX25hbWUsIF9kcnYsIF9pZCwgX2lycSwgX3N0YXJ0LCBfc2l6ZSwgX2RtYS4uLikJXAorc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGExNjhfZGV2aWNlXyMjX25hbWUgX19pbml0ZGF0YSA9IHsJCVwKKwkuZGV2X25hbWUJPSAicHhhMTY4LSIgI19uYW1lLAkJCQlcCisJLmRydl9uYW1lCT0gX2RydiwJCQkJCQlcCisJLmlkCQk9IF9pZCwJCQkJCQlcCisJLmlycQkJPSBJUlFfUFhBMTY4XyMjX2lycSwJCQkJXAorCS5zdGFydAkJPSBfc3RhcnQsCQkJCQlcCisJLnNpemUJCT0gX3NpemUsCQkJCQlcCisJLmRtYQkJPSB7IF9kbWEgfSwJCQkJCVwKK307CisKKyNkZWZpbmUgUFhBOTEwX0RFVklDRShfbmFtZSwgX2RydiwgX2lkLCBfaXJxLCBfc3RhcnQsIF9zaXplLCBfZG1hLi4uKQlcCitzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTkxMF9kZXZpY2VfIyNfbmFtZSBfX2luaXRkYXRhID0gewkJXAorCS5kZXZfbmFtZQk9ICJweGE5MTAtIiAjX25hbWUsCQkJCVwKKwkuZHJ2X25hbWUJPSBfZHJ2LAkJCQkJCVwKKwkuaWQJCT0gX2lkLAkJCQkJCVwKKwkuaXJxCQk9IElSUV9QWEE5MTBfIyNfaXJxLAkJCQlcCisJLnN0YXJ0CQk9IF9zdGFydCwJCQkJCVwKKwkuc2l6ZQkJPSBfc2l6ZSwJCQkJCVwKKwkuZG1hCQk9IHsgX2RtYSB9LAkJCQkJXAorfTsKK2V4dGVybiBpbnQgcHhhX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICosIHZvaWQgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY5MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZG1hLmgKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fTUFDSF9ETUFfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIERNQUNfUkVHU19WSVJUCShBUEJfVklSVF9CQVNFICsgMHgwMDAwMCkKKworI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjZW5kaWYgLyogX19BU01fTUFDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNjZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9yZWdzLWljdS5oPgorCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCWxkcglcYmFzZSwgPUlDVV9BUF9JUlFfU0VMX0lOVF9OVU0KKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkcglcdG1wLCBbXGJhc2UsICMwXQorCWFuZAlcaXJxbnIsIFx0bXAsICMweDNmCisJdHN0CVx0bXAsICMoMSA8PCA2KQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjI2ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX01BQ0hfR1BJT19ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIEdQSU9fUkVHU19WSVJUCShBUEJfVklSVF9CQVNFICsgMHgxOTAwMCkKKworI2RlZmluZSBCQU5LX09GRihuKQkoKChuKSA8IDMpID8gKG4pIDw8IDIgOiAweDEwMCArICgoKG4pIC0gMykgPDwgMikpCisjZGVmaW5lIEdQSU9fUkVHKHgpCSgqKCh2b2xhdGlsZSB1MzIgKikoR1BJT19SRUdTX1ZJUlQgKyAoeCkpKSkKKworI2RlZmluZSBOUl9CVUlMVElOX0dQSU8JKDEyOCkKKworI2RlZmluZSBncGlvX3RvX2JhbmsoZ3BpbykJKChncGlvKSA+PiA1KQorI2RlZmluZSBncGlvX3RvX2lycShncGlvKQkoSVJRX0dQSU9fU1RBUlQgKyAoZ3BpbykpCisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gSVJRX0dQSU9fU1RBUlQpCisKKworI2RlZmluZSBfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykJKDApCisjZGVmaW5lIF9fZ3Bpb19pc19vY2N1cGllZChncGlvKQkoMCkKKworLyogTk9URTogdGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIGhlcmUgdG8gbWFrZSBvcHRpbWl6YXRpb24gb2YKKyAqIGdwaW9fe2dldCxzZXR9X3ZhbHVlKCkgdG8gd29yayB3aGVuICdncGlvJyBpcyBhIGNvbnN0YW50LgorICogVXNhZ2Ugb2YgdGhlc2UgbWFjcm9zIG90aGVyd2lzZSBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQsCisgKiB1c2UgZ2VuZXJpYyBHUElPIEFQSSB3aGVuZXZlciBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBHUElPX2JpdChncGlvKQkoMSA8PCAoKGdwaW8pICYgMHgxZikpCisKKyNkZWZpbmUgR1BMUih4KQkJR1BJT19SRUcoQkFOS19PRkYoZ3Bpb190b19iYW5rKHgpKSArIDB4MDApCisjZGVmaW5lIEdQRFIoeCkJCUdQSU9fUkVHKEJBTktfT0ZGKGdwaW9fdG9fYmFuayh4KSkgKyAweDBjKQorI2RlZmluZSBHUFNSKHgpCQlHUElPX1JFRyhCQU5LX09GRihncGlvX3RvX2JhbmsoeCkpICsgMHgxOCkKKyNkZWZpbmUgR1BDUih4KQkJR1BJT19SRUcoQkFOS19PRkYoZ3Bpb190b19iYW5rKHgpKSArIDB4MjQpCisKKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTI2NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0hBUkRXQVJFX0gKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2FkZjNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55CisgKiBkcml2ZXJzIG91dCB0aGVyZSB0aGF0IG1pZ2h0IGp1c3Qgd29yayBpZiB3ZSBmYWtlIHRoZW0uLi4KKyAqLworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzZTQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUlFTX0gKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzIGZvciBQWEExNjgKKyAqLworI2RlZmluZSBJUlFfUFhBMTY4X05PTkUJCQkoLTEpCisjZGVmaW5lIElSUV9QWEExNjhfU1NQMwkJCTAKKyNkZWZpbmUgSVJRX1BYQTE2OF9TU1AyCQkJMQorI2RlZmluZSBJUlFfUFhBMTY4X1NTUDEJCQkyCisjZGVmaW5lIElSUV9QWEExNjhfU1NQMAkJCTMKKyNkZWZpbmUgSVJRX1BYQTE2OF9QTUlDX0lOVAkJNAorI2RlZmluZSBJUlFfUFhBMTY4X1JUQ19JTlQJCTUKKyNkZWZpbmUgSVJRX1BYQTE2OF9SVENfQUxBUk0JCTYKKyNkZWZpbmUgSVJRX1BYQTE2OF9UV1NJMAkJNworI2RlZmluZSBJUlFfUFhBMTY4X0dQVQkJCTgKKyNkZWZpbmUgSVJRX1BYQTE2OF9LRVlQQUQJCTkKKyNkZWZpbmUgSVJRX1BYQTE2OF9PTkVXSVJFCQkxMgorI2RlZmluZSBJUlFfUFhBMTY4X1RJTUVSMQkJMTMKKyNkZWZpbmUgSVJRX1BYQTE2OF9USU1FUjIJCTE0CisjZGVmaW5lIElSUV9QWEExNjhfVElNRVIzCQkxNQorI2RlZmluZSBJUlFfUFhBMTY4X0NNVQkJCTE2CisjZGVmaW5lIElSUV9QWEExNjhfU1NQNAkJCTE3CisjZGVmaW5lIElSUV9QWEExNjhfTVNQX1dBS0VVUAkJMTkKKyNkZWZpbmUgSVJRX1BYQTE2OF9DRl9XQUtFVVAJCTIwCisjZGVmaW5lIElSUV9QWEExNjhfWERfV0FLRVVQCQkyMQorI2RlZmluZSBJUlFfUFhBMTY4X01GVQkJCTIyCisjZGVmaW5lIElSUV9QWEExNjhfTVNQCQkJMjMKKyNkZWZpbmUgSVJRX1BYQTE2OF9DRgkJCTI0CisjZGVmaW5lIElSUV9QWEExNjhfWEQJCQkyNQorI2RlZmluZSBJUlFfUFhBMTY4X0REUl9JTlQJCTI2CisjZGVmaW5lIElSUV9QWEExNjhfVUFSVDEJCTI3CisjZGVmaW5lIElSUV9QWEExNjhfVUFSVDIJCTI4CisjZGVmaW5lIElSUV9QWEExNjhfV0RUCQkJMzUKKyNkZWZpbmUgSVJRX1BYQTE2OF9GUlFfQ0hBTkdFCQkzOAorI2RlZmluZSBJUlFfUFhBMTY4X1NESDEJCQkzOQorI2RlZmluZSBJUlFfUFhBMTY4X1NESDIJCQk0MAorI2RlZmluZSBJUlFfUFhBMTY4X0xDRAkJCTQxCisjZGVmaW5lIElSUV9QWEExNjhfQ0kJCQk0MgorI2RlZmluZSBJUlFfUFhBMTY4X1VTQjEJCQk0NAorI2RlZmluZSBJUlFfUFhBMTY4X05BTkQJCQk0NQorI2RlZmluZSBJUlFfUFhBMTY4X0hJRklfRE1BCQk0NgorI2RlZmluZSBJUlFfUFhBMTY4X0RNQV9JTlQwCQk0NworI2RlZmluZSBJUlFfUFhBMTY4X0RNQV9JTlQxCQk0OAorI2RlZmluZSBJUlFfUFhBMTY4X0dQSU9YCQk0OQorI2RlZmluZSBJUlFfUFhBMTY4X1VTQjIJCQk1MQorI2RlZmluZSBJUlFfUFhBMTY4X0FDOTcJCQk1NworI2RlZmluZSBJUlFfUFhBMTY4X1RXU0kxCQk1OAorI2RlZmluZSBJUlFfUFhBMTY4X1BNVQkJCTYwCisjZGVmaW5lIElSUV9QWEExNjhfU01fSU5UCQk2MworCisvKgorICogSW50ZXJydXB0IG51bWJlcnMgZm9yIFBYQTkxMAorICovCisjZGVmaW5lIElSUV9QWEE5MTBfQUlSUQkJCTAKKyNkZWZpbmUgSVJRX1BYQTkxMF9TU1AzCQkJMQorI2RlZmluZSBJUlFfUFhBOTEwX1NTUDIJCQkyCisjZGVmaW5lIElSUV9QWEE5MTBfU1NQMQkJCTMKKyNkZWZpbmUgSVJRX1BYQTkxMF9QTUlDX0lOVAkJNAorI2RlZmluZSBJUlFfUFhBOTEwX1JUQ19JTlQJCTUKKyNkZWZpbmUgSVJRX1BYQTkxMF9SVENfQUxBUk0JCTYKKyNkZWZpbmUgSVJRX1BYQTkxMF9UV1NJMAkJNworI2RlZmluZSBJUlFfUFhBOTEwX0dQVQkJCTgKKyNkZWZpbmUgSVJRX1BYQTkxMF9LRVlQQUQJCTkKKyNkZWZpbmUgSVJRX1BYQTkxMF9ST1RBUlkJCTEwCisjZGVmaW5lIElSUV9QWEE5MTBfVFJBQ0tCQUxMCQkxMQorI2RlZmluZSBJUlFfUFhBOTEwX09ORVdJUkUJCTEyCisjZGVmaW5lIElSUV9QWEE5MTBfQVAxX1RJTUVSMQkJMTMKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDFfVElNRVIyCQkxNAorI2RlZmluZSBJUlFfUFhBOTEwX0FQMV9USU1FUjMJCTE1CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQMAkJMTYKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQVAxCQkxNworI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19BUDIJCTE4CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQMwkJMTkKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQVA0CQkyMAorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDAJCTIxCisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0NQMQkJMjIKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQ1AyCQkyMworI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDMJCTI0CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0NQNAkJMjUKKyNkZWZpbmUgSVJRX1BYQTkxMF9MMl9ERFIJCTI2CisjZGVmaW5lIElSUV9QWEE5MTBfVUFSVDIJCTI3CisjZGVmaW5lIElSUV9QWEE5MTBfVUFSVDMJCTI4CisjZGVmaW5lIElSUV9QWEE5MTBfQVAyX1RJTUVSMQkJMjkKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDJfVElNRVIyCQkzMAorI2RlZmluZSBJUlFfUFhBOTEwX0NQMl9USU1FUjEJCTMxCisjZGVmaW5lIElSUV9QWEE5MTBfQ1AyX1RJTUVSMgkJMzIKKyNkZWZpbmUgSVJRX1BYQTkxMF9DUDJfVElNRVIzCQkzMworI2RlZmluZSBJUlFfUFhBOTEwX0dTU1AJCQkzNAorI2RlZmluZSBJUlFfUFhBOTEwX0NQMl9XRFQJCTM1CisjZGVmaW5lIElSUV9QWEE5MTBfTUFJTl9QTVUJCTM2CisjZGVmaW5lIElSUV9QWEE5MTBfQ1BfRlJFUV9DSEcJCTM3CisjZGVmaW5lIElSUV9QWEE5MTBfQVBfRlJFUV9DSEcJCTM4CisjZGVmaW5lIElSUV9QWEE5MTBfTU1DCQkJMzkKKyNkZWZpbmUgSVJRX1BYQTkxMF9BRVUJCQk0MAorI2RlZmluZSBJUlFfUFhBOTEwX0xDRAkJCTQxCisjZGVmaW5lIElSUV9QWEE5MTBfQ0NJQwkJCTQyCisjZGVmaW5lIElSUV9QWEE5MTBfSVJFCQkJNDMKKyNkZWZpbmUgSVJRX1BYQTkxMF9VU0IxCQkJNDQKKyNkZWZpbmUgSVJRX1BYQTkxMF9OQU5ECQkJNDUKKyNkZWZpbmUgSVJRX1BYQTkxMF9ISUZJX0RNQQkJNDYKKyNkZWZpbmUgSVJRX1BYQTkxMF9ETUFfSU5UMAkJNDcKKyNkZWZpbmUgSVJRX1BYQTkxMF9ETUFfSU5UMQkJNDgKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUF9HUElPCQk0OQorI2RlZmluZSBJUlFfUFhBOTEwX0FQMl9USU1FUjMJCTUwCisjZGVmaW5lIElSUV9QWEE5MTBfVVNCMgkJCTUxCisjZGVmaW5lIElSUV9QWEE5MTBfVFdTSTEJCTU0CisjZGVmaW5lIElSUV9QWEE5MTBfQ1BfR1BJTwkJNTUKKyNkZWZpbmUgSVJRX1BYQTkxMF9VQVJUMQkJNTkJLyogU2xvdyBVQVJUICovCisjZGVmaW5lIElSUV9QWEE5MTBfQVBfUE1VCQk2MAorI2RlZmluZSBJUlFfUFhBOTEwX1NNX0lOVAkJNjMJLyogZnJvbSBQaW5NdXggKi8KKworI2RlZmluZSBJUlFfR1BJT19TVEFSVAkJCTY0CisjZGVmaW5lIElSUV9HUElPX05VTQkJCTEyOAorI2RlZmluZSBJUlFfR1BJTyh4KQkJCShJUlFfR1BJT19TVEFSVCArICh4KSkKKworI2RlZmluZSBOUl9JUlFTCQkoSVJRX0dQSU9fU1RBUlQgKyBJUlFfR1BJT19OVU0pCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjIxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTUVNT1JZX0gKKworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiZGI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NRlBfUFhBMTY4X0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRlBfUFhBMTY4X0gKKworI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgR1BJTzBfR1BJTwkJTUZQX0NGRyhHUElPMCwgQUY1KQorI2RlZmluZSBHUElPMV9HUElPCQlNRlBfQ0ZHKEdQSU8xLCBBRjUpCisjZGVmaW5lIEdQSU8yX0dQSU8JCU1GUF9DRkcoR1BJTzIsIEFGNSkKKyNkZWZpbmUgR1BJTzNfR1BJTwkJTUZQX0NGRyhHUElPMywgQUY1KQorI2RlZmluZSBHUElPNF9HUElPCQlNRlBfQ0ZHKEdQSU80LCBBRjUpCisjZGVmaW5lIEdQSU81X0dQSU8JCU1GUF9DRkcoR1BJTzUsIEFGNSkKKyNkZWZpbmUgR1BJTzZfR1BJTwkJTUZQX0NGRyhHUElPNiwgQUY1KQorI2RlZmluZSBHUElPN19HUElPCQlNRlBfQ0ZHKEdQSU83LCBBRjUpCisjZGVmaW5lIEdQSU84X0dQSU8JCU1GUF9DRkcoR1BJTzgsIEFGNSkKKyNkZWZpbmUgR1BJTzlfR1BJTwkJTUZQX0NGRyhHUElPOSwgQUY1KQorI2RlZmluZSBHUElPMTBfR1BJTwkJTUZQX0NGRyhHUElPMTAsIEFGNSkKKyNkZWZpbmUgR1BJTzExX0dQSU8JCU1GUF9DRkcoR1BJTzExLCBBRjUpCisjZGVmaW5lIEdQSU8xMl9HUElPCQlNRlBfQ0ZHKEdQSU8xMiwgQUY1KQorI2RlZmluZSBHUElPMTNfR1BJTwkJTUZQX0NGRyhHUElPMTMsIEFGNSkKKyNkZWZpbmUgR1BJTzE0X0dQSU8JCU1GUF9DRkcoR1BJTzE0LCBBRjUpCisjZGVmaW5lIEdQSU8xNV9HUElPCQlNRlBfQ0ZHKEdQSU8xNSwgQUY1KQorI2RlZmluZSBHUElPMTZfR1BJTwkJTUZQX0NGRyhHUElPMTYsIEFGMCkKKyNkZWZpbmUgR1BJTzE3X0dQSU8JCU1GUF9DRkcoR1BJTzE3LCBBRjUpCisjZGVmaW5lIEdQSU8xOF9HUElPCQlNRlBfQ0ZHKEdQSU8xOCwgQUYwKQorI2RlZmluZSBHUElPMTlfR1BJTwkJTUZQX0NGRyhHUElPMTksIEFGNSkKKyNkZWZpbmUgR1BJTzIwX0dQSU8JCU1GUF9DRkcoR1BJTzIwLCBBRjApCisjZGVmaW5lIEdQSU8yMV9HUElPCQlNRlBfQ0ZHKEdQSU8yMSwgQUY1KQorI2RlZmluZSBHUElPMjJfR1BJTwkJTUZQX0NGRyhHUElPMjIsIEFGNSkKKyNkZWZpbmUgR1BJTzIzX0dQSU8JCU1GUF9DRkcoR1BJTzIzLCBBRjUpCisjZGVmaW5lIEdQSU8yNF9HUElPCQlNRlBfQ0ZHKEdQSU8yNCwgQUY1KQorI2RlZmluZSBHUElPMjVfR1BJTwkJTUZQX0NGRyhHUElPMjUsIEFGNSkKKyNkZWZpbmUgR1BJTzI2X0dQSU8JCU1GUF9DRkcoR1BJTzI2LCBBRjApCisjZGVmaW5lIEdQSU8yN19HUElPCQlNRlBfQ0ZHKEdQSU8yNywgQUY1KQorI2RlZmluZSBHUElPMjhfR1BJTwkJTUZQX0NGRyhHUElPMjgsIEFGNSkKKyNkZWZpbmUgR1BJTzI5X0dQSU8JCU1GUF9DRkcoR1BJTzI5LCBBRjUpCisjZGVmaW5lIEdQSU8zMF9HUElPCQlNRlBfQ0ZHKEdQSU8zMCwgQUY1KQorI2RlZmluZSBHUElPMzFfR1BJTwkJTUZQX0NGRyhHUElPMzEsIEFGNSkKKyNkZWZpbmUgR1BJTzMyX0dQSU8JCU1GUF9DRkcoR1BJTzMyLCBBRjUpCisjZGVmaW5lIEdQSU8zM19HUElPCQlNRlBfQ0ZHKEdQSU8zMywgQUY1KQorI2RlZmluZSBHUElPMzRfR1BJTwkJTUZQX0NGRyhHUElPMzQsIEFGMCkKKyNkZWZpbmUgR1BJTzM1X0dQSU8JCU1GUF9DRkcoR1BJTzM1LCBBRjApCisjZGVmaW5lIEdQSU8zNl9HUElPCQlNRlBfQ0ZHKEdQSU8zNiwgQUYwKQorI2RlZmluZSBHUElPMzdfR1BJTwkJTUZQX0NGRyhHUElPMzcsIEFGMCkKKyNkZWZpbmUgR1BJTzM4X0dQSU8JCU1GUF9DRkcoR1BJTzM4LCBBRjApCisjZGVmaW5lIEdQSU8zOV9HUElPCQlNRlBfQ0ZHKEdQSU8zOSwgQUYwKQorI2RlZmluZSBHUElPNDBfR1BJTwkJTUZQX0NGRyhHUElPNDAsIEFGMCkKKyNkZWZpbmUgR1BJTzQxX0dQSU8JCU1GUF9DRkcoR1BJTzQxLCBBRjApCisjZGVmaW5lIEdQSU80Ml9HUElPCQlNRlBfQ0ZHKEdQSU80MiwgQUYwKQorI2RlZmluZSBHUElPNDNfR1BJTwkJTUZQX0NGRyhHUElPNDMsIEFGMCkKKyNkZWZpbmUgR1BJTzQ0X0dQSU8JCU1GUF9DRkcoR1BJTzQ0LCBBRjApCisjZGVmaW5lIEdQSU80NV9HUElPCQlNRlBfQ0ZHKEdQSU80NSwgQUYwKQorI2RlZmluZSBHUElPNDZfR1BJTwkJTUZQX0NGRyhHUElPNDYsIEFGMCkKKyNkZWZpbmUgR1BJTzQ3X0dQSU8JCU1GUF9DRkcoR1BJTzQ3LCBBRjApCisjZGVmaW5lIEdQSU80OF9HUElPCQlNRlBfQ0ZHKEdQSU80OCwgQUYwKQorI2RlZmluZSBHUElPNDlfR1BJTwkJTUZQX0NGRyhHUElPNDksIEFGMCkKKyNkZWZpbmUgR1BJTzUwX0dQSU8JCU1GUF9DRkcoR1BJTzUwLCBBRjApCisjZGVmaW5lIEdQSU81MV9HUElPCQlNRlBfQ0ZHKEdQSU81MSwgQUYwKQorI2RlZmluZSBHUElPNTJfR1BJTwkJTUZQX0NGRyhHUElPNTIsIEFGMCkKKyNkZWZpbmUgR1BJTzUzX0dQSU8JCU1GUF9DRkcoR1BJTzUzLCBBRjApCisjZGVmaW5lIEdQSU81NF9HUElPCQlNRlBfQ0ZHKEdQSU81NCwgQUYwKQorI2RlZmluZSBHUElPNTVfR1BJTwkJTUZQX0NGRyhHUElPNTUsIEFGMCkKKyNkZWZpbmUgR1BJTzU2X0dQSU8JCU1GUF9DRkcoR1BJTzU2LCBBRjApCisjZGVmaW5lIEdQSU81N19HUElPCQlNRlBfQ0ZHKEdQSU81NywgQUYwKQorI2RlZmluZSBHUElPNThfR1BJTwkJTUZQX0NGRyhHUElPNTgsIEFGMCkKKyNkZWZpbmUgR1BJTzU5X0dQSU8JCU1GUF9DRkcoR1BJTzU5LCBBRjApCisjZGVmaW5lIEdQSU82MF9HUElPCQlNRlBfQ0ZHKEdQSU82MCwgQUYwKQorI2RlZmluZSBHUElPNjFfR1BJTwkJTUZQX0NGRyhHUElPNjEsIEFGMCkKKyNkZWZpbmUgR1BJTzYyX0dQSU8JCU1GUF9DRkcoR1BJTzYyLCBBRjApCisjZGVmaW5lIEdQSU82M19HUElPCQlNRlBfQ0ZHKEdQSU82MywgQUYwKQorI2RlZmluZSBHUElPNjRfR1BJTwkJTUZQX0NGRyhHUElPNjQsIEFGMCkKKyNkZWZpbmUgR1BJTzY1X0dQSU8JCU1GUF9DRkcoR1BJTzY1LCBBRjApCisjZGVmaW5lIEdQSU82Nl9HUElPCQlNRlBfQ0ZHKEdQSU82NiwgQUYwKQorI2RlZmluZSBHUElPNjdfR1BJTwkJTUZQX0NGRyhHUElPNjcsIEFGMCkKKyNkZWZpbmUgR1BJTzY4X0dQSU8JCU1GUF9DRkcoR1BJTzY4LCBBRjApCisjZGVmaW5lIEdQSU82OV9HUElPCQlNRlBfQ0ZHKEdQSU82OSwgQUYwKQorI2RlZmluZSBHUElPNzBfR1BJTwkJTUZQX0NGRyhHUElPNzAsIEFGMCkKKyNkZWZpbmUgR1BJTzcxX0dQSU8JCU1GUF9DRkcoR1BJTzcxLCBBRjApCisjZGVmaW5lIEdQSU83Ml9HUElPCQlNRlBfQ0ZHKEdQSU83MiwgQUYwKQorI2RlZmluZSBHUElPNzNfR1BJTwkJTUZQX0NGRyhHUElPNzMsIEFGMCkKKyNkZWZpbmUgR1BJTzc0X0dQSU8JCU1GUF9DRkcoR1BJTzc0LCBBRjApCisjZGVmaW5lIEdQSU83NV9HUElPCQlNRlBfQ0ZHKEdQSU83NSwgQUYwKQorI2RlZmluZSBHUElPNzZfR1BJTwkJTUZQX0NGRyhHUElPNzYsIEFGMCkKKyNkZWZpbmUgR1BJTzc3X0dQSU8JCU1GUF9DRkcoR1BJTzc3LCBBRjApCisjZGVmaW5lIEdQSU83OF9HUElPCQlNRlBfQ0ZHKEdQSU83OCwgQUYwKQorI2RlZmluZSBHUElPNzlfR1BJTwkJTUZQX0NGRyhHUElPNzksIEFGMCkKKyNkZWZpbmUgR1BJTzgwX0dQSU8JCU1GUF9DRkcoR1BJTzgwLCBBRjApCisjZGVmaW5lIEdQSU84MV9HUElPCQlNRlBfQ0ZHKEdQSU84MSwgQUYwKQorI2RlZmluZSBHUElPODJfR1BJTwkJTUZQX0NGRyhHUElPODIsIEFGMCkKKyNkZWZpbmUgR1BJTzgzX0dQSU8JCU1GUF9DRkcoR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU84NF9HUElPCQlNRlBfQ0ZHKEdQSU84NCwgQUYwKQorI2RlZmluZSBHUElPODVfR1BJTwkJTUZQX0NGRyhHUElPODUsIEFGMCkKKyNkZWZpbmUgR1BJTzg2X0dQSU8JCU1GUF9DRkcoR1BJTzg2LCBBRjApCisjZGVmaW5lIEdQSU84N19HUElPCQlNRlBfQ0ZHKEdQSU84NywgQUYwKQorI2RlZmluZSBHUElPODhfR1BJTwkJTUZQX0NGRyhHUElPODgsIEFGMCkKKyNkZWZpbmUgR1BJTzg5X0dQSU8JCU1GUF9DRkcoR1BJTzg5LCBBRjApCisjZGVmaW5lIEdQSU85MF9HUElPCQlNRlBfQ0ZHKEdQSU85MCwgQUYwKQorI2RlZmluZSBHUElPOTFfR1BJTwkJTUZQX0NGRyhHUElPOTEsIEFGMCkKKyNkZWZpbmUgR1BJTzkyX0dQSU8JCU1GUF9DRkcoR1BJTzkyLCBBRjApCisjZGVmaW5lIEdQSU85M19HUElPCQlNRlBfQ0ZHKEdQSU85MywgQUYwKQorI2RlZmluZSBHUElPOTRfR1BJTwkJTUZQX0NGRyhHUElPOTQsIEFGMCkKKyNkZWZpbmUgR1BJTzk1X0dQSU8JCU1GUF9DRkcoR1BJTzk1LCBBRjApCisjZGVmaW5lIEdQSU85Nl9HUElPCQlNRlBfQ0ZHKEdQSU85NiwgQUYwKQorI2RlZmluZSBHUElPOTdfR1BJTwkJTUZQX0NGRyhHUElPOTcsIEFGMCkKKyNkZWZpbmUgR1BJTzk4X0dQSU8JCU1GUF9DRkcoR1BJTzk4LCBBRjApCisjZGVmaW5lIEdQSU85OV9HUElPCQlNRlBfQ0ZHKEdQSU85OSwgQUYwKQorI2RlZmluZSBHUElPMTAwX0dQSU8JCU1GUF9DRkcoR1BJTzEwMCwgQUYwKQorI2RlZmluZSBHUElPMTAxX0dQSU8JCU1GUF9DRkcoR1BJTzEwMSwgQUYwKQorI2RlZmluZSBHUElPMTAyX0dQSU8JCU1GUF9DRkcoR1BJTzEwMiwgQUYwKQorI2RlZmluZSBHUElPMTAzX0dQSU8JCU1GUF9DRkcoR1BJTzEwMywgQUYwKQorI2RlZmluZSBHUElPMTA0X0dQSU8JCU1GUF9DRkcoR1BJTzEwNCwgQUYwKQorI2RlZmluZSBHUElPMTA1X0dQSU8JCU1GUF9DRkcoR1BJTzEwNSwgQUYwKQorI2RlZmluZSBHUElPMTA2X0dQSU8JCU1GUF9DRkcoR1BJTzEwNiwgQUYwKQorI2RlZmluZSBHUElPMTA3X0dQSU8JCU1GUF9DRkcoR1BJTzEwNywgQUYwKQorI2RlZmluZSBHUElPMTA4X0dQSU8JCU1GUF9DRkcoR1BJTzEwOCwgQUYwKQorI2RlZmluZSBHUElPMTA5X0dQSU8JCU1GUF9DRkcoR1BJTzEwOSwgQUYwKQorI2RlZmluZSBHUElPMTEwX0dQSU8JCU1GUF9DRkcoR1BJTzExMCwgQUYwKQorI2RlZmluZSBHUElPMTExX0dQSU8JCU1GUF9DRkcoR1BJTzExMSwgQUYwKQorI2RlZmluZSBHUElPMTEyX0dQSU8JCU1GUF9DRkcoR1BJTzExMiwgQUYwKQorI2RlZmluZSBHUElPMTEzX0dQSU8JCU1GUF9DRkcoR1BJTzExMywgQUYwKQorI2RlZmluZSBHUElPMTE0X0dQSU8JCU1GUF9DRkcoR1BJTzExNCwgQUYwKQorI2RlZmluZSBHUElPMTE1X0dQSU8JCU1GUF9DRkcoR1BJTzExNSwgQUYwKQorI2RlZmluZSBHUElPMTE2X0dQSU8JCU1GUF9DRkcoR1BJTzExNiwgQUYwKQorI2RlZmluZSBHUElPMTE3X0dQSU8JCU1GUF9DRkcoR1BJTzExNywgQUYwKQorI2RlZmluZSBHUElPMTE4X0dQSU8JCU1GUF9DRkcoR1BJTzExOCwgQUYwKQorI2RlZmluZSBHUElPMTE5X0dQSU8JCU1GUF9DRkcoR1BJTzExOSwgQUYwKQorI2RlZmluZSBHUElPMTIwX0dQSU8JCU1GUF9DRkcoR1BJTzEyMCwgQUYwKQorI2RlZmluZSBHUElPMTIxX0dQSU8JCU1GUF9DRkcoR1BJTzEyMSwgQUYwKQorI2RlZmluZSBHUElPMTIyX0dQSU8JCU1GUF9DRkcoR1BJTzEyMiwgQUYwKQorCisvKiBERkkgKi8KKyNkZWZpbmUgR1BJTzBfREZJX0QxNQkJTUZQX0NGRyhHUElPMCwgQUYwKQorI2RlZmluZSBHUElPMV9ERklfRDE0CQlNRlBfQ0ZHKEdQSU8xLCBBRjApCisjZGVmaW5lIEdQSU8yX0RGSV9EMTMJCU1GUF9DRkcoR1BJTzIsIEFGMCkKKyNkZWZpbmUgR1BJTzNfREZJX0QxMgkJTUZQX0NGRyhHUElPMywgQUYwKQorI2RlZmluZSBHUElPNF9ERklfRDExCQlNRlBfQ0ZHKEdQSU80LCBBRjApCisjZGVmaW5lIEdQSU81X0RGSV9EMTAJCU1GUF9DRkcoR1BJTzUsIEFGMCkKKyNkZWZpbmUgR1BJTzZfREZJX0Q5CQlNRlBfQ0ZHKEdQSU82LCBBRjApCisjZGVmaW5lIEdQSU83X0RGSV9EOAkJTUZQX0NGRyhHUElPNywgQUYwKQorI2RlZmluZSBHUElPOF9ERklfRDcJCU1GUF9DRkcoR1BJTzgsIEFGMCkKKyNkZWZpbmUgR1BJTzlfREZJX0Q2CQlNRlBfQ0ZHKEdQSU85LCBBRjApCisjZGVmaW5lIEdQSU8xMF9ERklfRDUJCU1GUF9DRkcoR1BJTzEwLCBBRjApCisjZGVmaW5lIEdQSU8xMV9ERklfRDQJCU1GUF9DRkcoR1BJTzExLCBBRjApCisjZGVmaW5lIEdQSU8xMl9ERklfRDMJCU1GUF9DRkcoR1BJTzEyLCBBRjApCisjZGVmaW5lIEdQSU8xM19ERklfRDIJCU1GUF9DRkcoR1BJTzEzLCBBRjApCisjZGVmaW5lIEdQSU8xNF9ERklfRDEJCU1GUF9DRkcoR1BJTzE0LCBBRjApCisjZGVmaW5lIEdQSU8xNV9ERklfRDAJCU1GUF9DRkcoR1BJTzE1LCBBRjApCisKKyNkZWZpbmUgR1BJTzMwX0RGSV9BRERSMAlNRlBfQ0ZHKEdQSU8zMCwgQUYwKQorI2RlZmluZSBHUElPMzFfREZJX0FERFIxCU1GUF9DRkcoR1BJTzMxLCBBRjApCisjZGVmaW5lIEdQSU8zMl9ERklfQUREUjIJTUZQX0NGRyhHUElPMzIsIEFGMCkKKyNkZWZpbmUgR1BJTzMzX0RGSV9BRERSMwlNRlBfQ0ZHKEdQSU8zMywgQUYwKQorCisvKiBOQU5EICovCisjZGVmaW5lIEdQSU8xNl9ORF9uQ1MwCQlNRlBfQ0ZHKEdQSU8xNiwgQUYxKQorI2RlZmluZSBHUElPMTdfTkRfbldFCQlNRlBfQ0ZHKEdQSU8xNywgQUYwKQorI2RlZmluZSBHUElPMjFfTkRfQUxFCQlNRlBfQ0ZHKEdQSU8yMSwgQUYwKQorI2RlZmluZSBHUElPMjJfTkRfQ0xFCQlNRlBfQ0ZHKEdQSU8yMiwgQUYwKQorI2RlZmluZSBHUElPMjRfTkRfblJFCQlNRlBfQ0ZHKEdQSU8yNCwgQUYwKQorI2RlZmluZSBHUElPMjZfTkRfUm5CMQkJTUZQX0NGRyhHUElPMjYsIEFGMSkKKyNkZWZpbmUgR1BJTzI3X05EX1JuQjIJCU1GUF9DRkcoR1BJTzI3LCBBRjEpCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLworI2RlZmluZSBHUElPMThfU01DX25DUzAJCU1GUF9DRkcoR1BJTzE4LCBBRjMpCisjZGVmaW5lIEdQSU8xOF9TTUNfbkNTMQkJTUZQX0NGRyhHUElPMTgsIEFGMikKKyNkZWZpbmUgR1BJTzE2X1NNQ19uQ1MwCQlNRlBfQ0ZHKEdQSU8xNiwgQUYyKQorI2RlZmluZSBHUElPMTZfU01DX25DUzEJCU1GUF9DRkcoR1BJTzE2LCBBRjMpCisjZGVmaW5lIEdQSU8xOV9TTUNfbkNTMAkJTUZQX0NGRyhHUElPMTksIEFGMCkKKyNkZWZpbmUgR1BJTzIwX1NNQ19uQ1MxCQlNRlBfQ0ZHKEdQSU8yMCwgQUYyKQorI2RlZmluZSBHUElPMjNfU01DX25MVUEJCU1GUF9DRkcoR1BJTzIzLCBBRjApCisjZGVmaW5lIEdQSU8yNV9TTUNfbkxMQQkJTUZQX0NGRyhHUElPMjUsIEFGMCkKKyNkZWZpbmUgR1BJTzI3X1NNQ19JUlEJCU1GUF9DRkcoR1BJTzI3LCBBRjApCisjZGVmaW5lIEdQSU8yOF9TTUNfUkRZCQlNRlBfQ0ZHKEdQSU8yOCwgQUYwKQorI2RlZmluZSBHUElPMjlfU01DX1NDTEsJCU1GUF9DRkcoR1BJTzI5LCBBRjApCisjZGVmaW5lIEdQSU8zNF9TTUNfbkNTMQkJTUZQX0NGRyhHUElPMzQsIEFGMikKKyNkZWZpbmUgR1BJTzM1X1NNQ19CRTEJCU1GUF9DRkcoR1BJTzM1LCBBRjIpCisjZGVmaW5lIEdQSU8zNl9TTUNfQkUyCQlNRlBfQ0ZHKEdQSU8zNiwgQUYyKQorCisvKiBDb21wYWN0IEZsYXNoICovCisjZGVmaW5lIEdQSU8xOV9DRl9uQ0UxCQlNRlBfQ0ZHKEdQSU8xOSwgQUYzKQorI2RlZmluZSBHUElPMjBfQ0ZfbkNFMgkJTUZQX0NGRyhHUElPMjAsIEFGMykKKyNkZWZpbmUgR1BJTzIzX0NGX25BTEUJCU1GUF9DRkcoR1BJTzIzLCBBRjMpCisjZGVmaW5lIEdQSU8yNV9DRl9uUkVTRVQJTUZQX0NGRyhHUElPMjUsIEFGMykKKyNkZWZpbmUgR1BJTzI4X0NGX1JEWQkJTUZQX0NGRyhHUElPMjgsIEFGMykKKyNkZWZpbmUgR1BJTzI5X0NGX1NUU0NICQlNRlBfQ0ZHKEdQSU8yOSwgQUYzKQorI2RlZmluZSBHUElPMzBfQ0ZfblJFRwkJTUZQX0NGRyhHUElPMzAsIEFGMykKKyNkZWZpbmUgR1BJTzMxX0NGX25JT0lTMTYJTUZQX0NGRyhHUElPMzEsIEFGMykKKyNkZWZpbmUgR1BJTzMyX0NGX25DRDEJCU1GUF9DRkcoR1BJTzMyLCBBRjMpCisjZGVmaW5lIEdQSU8zM19DRl9uQ0QyCQlNRlBfQ0ZHKEdQSU8zMywgQUYzKQorCisvKiBVQVJUMSAqLworI2RlZmluZSBHUElPMTA3X1VBUlQxX1RYRAlNRlBfQ0ZHX0RSVihHUElPMTA3LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDdfVUFSVDFfUlhECU1GUF9DRkdfRFJWKEdQSU8xMDcsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzEwOF9VQVJUMV9SWEQJTUZQX0NGR19EUlYoR1BJTzEwOCwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTA4X1VBUlQxX1RYRAlNRlBfQ0ZHX0RSVihHUElPMTA4LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDlfVUFSVDFfQ1RTCU1GUF9DRkcoR1BJTzEwOSwgQUYxKQorI2RlZmluZSBHUElPMTA5X1VBUlQxX1JUUwlNRlBfQ0ZHKEdQSU8xMDksIEFGMikKKyNkZWZpbmUgR1BJTzExMF9VQVJUMV9SVFMJTUZQX0NGRyhHUElPMTEwLCBBRjEpCisjZGVmaW5lIEdQSU8xMTBfVUFSVDFfQ1RTCU1GUF9DRkcoR1BJTzExMCwgQUYyKQorI2RlZmluZSBHUElPMTExX1VBUlQxX1JJCU1GUF9DRkcoR1BJTzExMSwgQUYxKQorI2RlZmluZSBHUElPMTExX1VBUlQxX0RTUglNRlBfQ0ZHKEdQSU8xMTEsIEFGMikKKyNkZWZpbmUgR1BJTzExMl9VQVJUMV9EVFIJTUZQX0NGRyhHUElPMTExLCBBRjEpCisjZGVmaW5lIEdQSU8xMTJfVUFSVDFfRENECU1GUF9DRkcoR1BJTzExMiwgQUYyKQorCisvKiBNTUMxICovCisjZGVmaW5lIEdQSU8zN19NTUMxX0RBVDcJTUZQX0NGRyhHUElPMzcsIEFGMSkKKyNkZWZpbmUgR1BJTzM4X01NQzFfREFUNglNRlBfQ0ZHKEdQSU8zOCwgQUYxKQorI2RlZmluZSBHUElPNTRfTU1DMV9EQVQ1CU1GUF9DRkcoR1BJTzU0LCBBRjEpCisjZGVmaW5lIEdQSU80OF9NTUMxX0RBVDQJTUZQX0NGRyhHUElPNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzUxX01NQzFfREFUMwlNRlBfQ0ZHKEdQSU81MSwgQUYxKQorI2RlZmluZSBHUElPNTJfTU1DMV9EQVQyCU1GUF9DRkcoR1BJTzUyLCBBRjEpCisjZGVmaW5lIEdQSU80MF9NTUMxX0RBVDEJTUZQX0NGRyhHUElPNDAsIEFGMSkKKyNkZWZpbmUgR1BJTzQxX01NQzFfREFUMAlNRlBfQ0ZHKEdQSU80MSwgQUYxKQorI2RlZmluZSBHUElPNDlfTU1DMV9DTUQJCU1GUF9DRkcoR1BJTzQ5LCBBRjEpCisjZGVmaW5lIEdQSU80M19NTUMxX0NMSwkJTUZQX0NGRyhHUElPNDMsIEFGMSkKKyNkZWZpbmUgR1BJTzUzX01NQzFfQ0QJCU1GUF9DRkcoR1BJTzUzLCBBRjEpCisjZGVmaW5lIEdQSU80Nl9NTUMxX1dQCQlNRlBfQ0ZHKEdQSU80NiwgQUYxKQorCisvKiBMQ0QgKi8KKyNkZWZpbmUgR1BJTzg0X0xDRF9DUwkJTUZQX0NGRyhHUElPODQsIEFGMSkKKyNkZWZpbmUgR1BJTzYwX0xDRF9ERDAJCU1GUF9DRkcoR1BJTzYwLCBBRjEpCisjZGVmaW5lIEdQSU82MV9MQ0RfREQxCQlNRlBfQ0ZHKEdQSU82MSwgQUYxKQorI2RlZmluZSBHUElPNzBfTENEX0REMTAJCU1GUF9DRkcoR1BJTzcwLCBBRjEpCisjZGVmaW5lIEdQSU83MV9MQ0RfREQxMQkJTUZQX0NGRyhHUElPNzEsIEFGMSkKKyNkZWZpbmUgR1BJTzcyX0xDRF9ERDEyCQlNRlBfQ0ZHKEdQSU83MiwgQUYxKQorI2RlZmluZSBHUElPNzNfTENEX0REMTMJCU1GUF9DRkcoR1BJTzczLCBBRjEpCisjZGVmaW5lIEdQSU83NF9MQ0RfREQxNAkJTUZQX0NGRyhHUElPNzQsIEFGMSkKKyNkZWZpbmUgR1BJTzc1X0xDRF9ERDE1CQlNRlBfQ0ZHKEdQSU83NSwgQUYxKQorI2RlZmluZSBHUElPNzZfTENEX0REMTYJCU1GUF9DRkcoR1BJTzc2LCBBRjEpCisjZGVmaW5lIEdQSU83N19MQ0RfREQxNwkJTUZQX0NGRyhHUElPNzcsIEFGMSkKKyNkZWZpbmUgR1BJTzc4X0xDRF9ERDE4CQlNRlBfQ0ZHKEdQSU83OCwgQUYxKQorI2RlZmluZSBHUElPNzlfTENEX0REMTkJCU1GUF9DRkcoR1BJTzc5LCBBRjEpCisjZGVmaW5lIEdQSU82Ml9MQ0RfREQyCQlNRlBfQ0ZHKEdQSU82MiwgQUYxKQorI2RlZmluZSBHUElPODBfTENEX0REMjAJCU1GUF9DRkcoR1BJTzgwLCBBRjEpCisjZGVmaW5lIEdQSU84MV9MQ0RfREQyMQkJTUZQX0NGRyhHUElPODEsIEFGMSkKKyNkZWZpbmUgR1BJTzgyX0xDRF9ERDIyCQlNRlBfQ0ZHKEdQSU84MiwgQUYxKQorI2RlZmluZSBHUElPODNfTENEX0REMjMJCU1GUF9DRkcoR1BJTzgzLCBBRjEpCisjZGVmaW5lIEdQSU82M19MQ0RfREQzCQlNRlBfQ0ZHKEdQSU82MywgQUYxKQorI2RlZmluZSBHUElPNjRfTENEX0RENAkJTUZQX0NGRyhHUElPNjQsIEFGMSkKKyNkZWZpbmUgR1BJTzY1X0xDRF9ERDUJCU1GUF9DRkcoR1BJTzY1LCBBRjEpCisjZGVmaW5lIEdQSU82Nl9MQ0RfREQ2CQlNRlBfQ0ZHKEdQSU82NiwgQUYxKQorI2RlZmluZSBHUElPNjdfTENEX0RENwkJTUZQX0NGRyhHUElPNjcsIEFGMSkKKyNkZWZpbmUgR1BJTzY4X0xDRF9ERDgJCU1GUF9DRkcoR1BJTzY4LCBBRjEpCisjZGVmaW5lIEdQSU82OV9MQ0RfREQ5CQlNRlBfQ0ZHKEdQSU82OSwgQUYxKQorI2RlZmluZSBHUElPNTlfTENEX0RFTkFfQklBUwlNRlBfQ0ZHKEdQSU81OSwgQUYxKQorI2RlZmluZSBHUElPNTZfTENEX0ZDTEtfUkQJTUZQX0NGRyhHUElPNTYsIEFGMSkKKyNkZWZpbmUgR1BJTzU3X0xDRF9MQ0xLX0EwCU1GUF9DRkcoR1BJTzU3LCBBRjEpCisjZGVmaW5lIEdQSU81OF9MQ0RfUENMS19XUglNRlBfQ0ZHKEdQSU81OCwgQUYxKQorI2RlZmluZSBHUElPODVfTENEX1ZTWU5DCU1GUF9DRkcoR1BJTzg1LCBBRjEpCisKKy8qIEkyUyAqLworI2RlZmluZSBHUElPMTEzX0kyU19NQ0xLCU1GUF9DRkcoR1BJTzExMyxBRjYpCisjZGVmaW5lIEdQSU8xMTRfSTJTX0ZSTQkJTUZQX0NGRyhHUElPMTE0LEFGMSkKKyNkZWZpbmUgR1BJTzExNV9JMlNfQkNMSwlNRlBfQ0ZHKEdQSU8xMTUsQUYxKQorI2RlZmluZSBHUElPMTE2X0kyU19SWEQJCU1GUF9DRkcoR1BJTzExNixBRjIpCisjZGVmaW5lIEdQSU8xMTdfSTJTX1RYRAkJTUZQX0NGRyhHUElPMTE3LEFGMikKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUZQX1BYQTE2OF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGExY2JjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaApAQCAtMCwwICsxLDE1NyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01GUF9QWEE5MTBfSAorI2RlZmluZSBfX0FTTV9NQUNIX01GUF9QWEE5MTBfSAorCisjaW5jbHVkZSA8bWFjaC9tZnAuaD4KKworLyogVUFSVDIgKi8KKyNkZWZpbmUgR1BJTzQ3X1VBUlQyX1JYRAlNRlBfQ0ZHKEdQSU80NywgQUY2KQorI2RlZmluZSBHUElPNDhfVUFSVDJfVFhECU1GUF9DRkcoR1BJTzQ4LCBBRjYpCisKKy8qIFVBUlQzICovCisjZGVmaW5lIEdQSU8zMV9VQVJUM19SWEQJTUZQX0NGRyhHUElPMzEsIEFGNCkKKyNkZWZpbmUgR1BJTzMyX1VBUlQzX1RYRAlNRlBfQ0ZHKEdQSU8zMiwgQUY0KQorCisvKklSREEqLworI2RlZmluZSBHUElPNTFfSVJEQV9TSEROCU1GUF9DRkcoR1BJTzUxLCBBRjApCisKKy8qIFNNQyAqLworI2RlZmluZSBTTV9uQ1MwX25DUzAJCU1GUF9DRkcoU01fbkNTMCwgQUYwKQorI2RlZmluZSBTTV9BRFZfU01fQURWCQlNRlBfQ0ZHKFNNX0FEViwgQUYwKQorI2RlZmluZSBTTV9TQ0xLX1NNX1NDTEsJCU1GUF9DRkcoU01fU0NMSywgQUYwKQorI2RlZmluZSBTTV9TQ0xLX1NNX1NDTEsJCU1GUF9DRkcoU01fU0NMSywgQUYwKQorI2RlZmluZSBTTV9CRTBfU01fQkUwCQlNRlBfQ0ZHKFNNX0JFMCwgQUYxKQorI2RlZmluZSBTTV9CRTFfU01fQkUxCQlNRlBfQ0ZHKFNNX0JFMSwgQUYxKQorCisvKiBJMkMgKi8KKyNkZWZpbmUgR1BJTzUzX0NJMkNfU0NMCQlNRlBfQ0ZHKEdQSU81MywgQUYyKQorI2RlZmluZSBHUElPNTRfQ0kyQ19TREEJCU1GUF9DRkcoR1BJTzU0LCBBRjIpCisKKy8qIFNTUDEgKEkyUykgKi8KKyNkZWZpbmUgR1BJTzI0X1NTUDFfU0RBVEFfSU4JTUZQX0NGR19EUlYoR1BJTzI0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzIxX1NTUDFfQklUQ0xLCU1GUF9DRkdfRFJWKEdQSU8yMSwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8yMF9TU1AxX1NZU0NMSwlNRlBfQ0ZHX0RSVihHUElPMjAsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPMjJfU1NQMV9TWU5DCU1GUF9DRkdfRFJWKEdQSU8yMiwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8yM19TU1AxX0RBVEFfT1VUCU1GUF9DRkdfRFJWKEdQSU8yMywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8xMjRfTU5fQ0xLX09VVAlNRlBfQ0ZHX0RSVihHUElPMTI0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzEyM19DTEtfUkVRCQlNRlBfQ0ZHX0RSVihHUElPMTIzLCBBRjAsIE1FRElVTSkKKworLyogREZJICovCisjZGVmaW5lIERGX0lPMF9ORF9JTzAJCU1GUF9DRkcoREZfSU8wLCBBRjApCisjZGVmaW5lIERGX0lPMV9ORF9JTzEJCU1GUF9DRkcoREZfSU8xLCBBRjApCisjZGVmaW5lIERGX0lPMl9ORF9JTzIJCU1GUF9DRkcoREZfSU8yLCBBRjApCisjZGVmaW5lIERGX0lPM19ORF9JTzMJCU1GUF9DRkcoREZfSU8zLCBBRjApCisjZGVmaW5lIERGX0lPNF9ORF9JTzQJCU1GUF9DRkcoREZfSU80LCBBRjApCisjZGVmaW5lIERGX0lPNV9ORF9JTzUJCU1GUF9DRkcoREZfSU81LCBBRjApCisjZGVmaW5lIERGX0lPNl9ORF9JTzYJCU1GUF9DRkcoREZfSU82LCBBRjApCisjZGVmaW5lIERGX0lPN19ORF9JTzcJCU1GUF9DRkcoREZfSU83LCBBRjApCisjZGVmaW5lIERGX0lPOF9ORF9JTzgJCU1GUF9DRkcoREZfSU84LCBBRjApCisjZGVmaW5lIERGX0lPOV9ORF9JTzkJCU1GUF9DRkcoREZfSU85LCBBRjApCisjZGVmaW5lIERGX0lPMTBfTkRfSU8xMAkJTUZQX0NGRyhERl9JTzEwLCBBRjApCisjZGVmaW5lIERGX0lPMTFfTkRfSU8xMQkJTUZQX0NGRyhERl9JTzExLCBBRjApCisjZGVmaW5lIERGX0lPMTJfTkRfSU8xMgkJTUZQX0NGRyhERl9JTzEyLCBBRjApCisjZGVmaW5lIERGX0lPMTNfTkRfSU8xMwkJTUZQX0NGRyhERl9JTzEzLCBBRjApCisjZGVmaW5lIERGX0lPMTRfTkRfSU8xNAkJTUZQX0NGRyhERl9JTzE0LCBBRjApCisjZGVmaW5lIERGX0lPMTVfTkRfSU8xNQkJTUZQX0NGRyhERl9JTzE1LCBBRjApCisjZGVmaW5lIERGX25DUzBfU01fbkNTMl9uQ1MwCU1GUF9DRkcoREZfbkNTMF9TTV9uQ1MyLCBBRjApCisjZGVmaW5lIERGX0FMRV9TTV9XRW5fTkRfQUxFCU1GUF9DRkcoREZfQUxFX1NNX1dFbiwgQUYxKQorI2RlZmluZSBERl9DTEVfU01fT0VuX05EX0NMRQlNRlBfQ0ZHKERGX0NMRV9TTV9PRW4sIEFGMCkKKyNkZWZpbmUgREZfV0VuX0RGX1dFbgkJTUZQX0NGRyhERl9XRW4sIEFGMSkKKyNkZWZpbmUgREZfUkVuX0RGX1JFbgkJTUZQX0NGRyhERl9SRW4sIEFGMSkKKyNkZWZpbmUgREZfUkRZMF9ERl9SRFkwCQlNRlBfQ0ZHKERGX1JEWTAsIEFGMCkKKworLyprZXlwYWQqLworI2RlZmluZSBHUElPMDBfS1BfTUtJTjAJCU1GUF9DRkcoR1BJTzAsIEFGMSkKKyNkZWZpbmUgR1BJTzAxX0tQX01LT1VUMAlNRlBfQ0ZHKEdQSU8xLCBBRjEpCisjZGVmaW5lIEdQSU8wMl9LUF9NS0lOMQkJTUZQX0NGRyhHUElPMiwgQUYxKQorI2RlZmluZSBHUElPMDNfS1BfTUtPVVQxCU1GUF9DRkcoR1BJTzMsIEFGMSkKKyNkZWZpbmUgR1BJTzA0X0tQX01LSU4yCQlNRlBfQ0ZHKEdQSU80LCBBRjEpCisjZGVmaW5lIEdQSU8wNV9LUF9NS09VVDIJTUZQX0NGRyhHUElPNSwgQUYxKQorI2RlZmluZSBHUElPMDZfS1BfTUtJTjMJCU1GUF9DRkcoR1BJTzYsIEFGMSkKKyNkZWZpbmUgR1BJTzA3X0tQX01LT1VUMwlNRlBfQ0ZHKEdQSU83LCBBRjEpCisjZGVmaW5lIEdQSU8wOF9LUF9NS0lONAkJTUZQX0NGRyhHUElPOCwgQUYxKQorI2RlZmluZSBHUElPMDlfS1BfTUtPVVQ0CU1GUF9DRkcoR1BJTzksIEFGMSkKKyNkZWZpbmUgR1BJTzEwX0tQX01LSU41CQlNRlBfQ0ZHKEdQSU8xMCwgQUYxKQorI2RlZmluZSBHUElPMTFfS1BfTUtPVVQ1CU1GUF9DRkcoR1BJTzExLCBBRjEpCisjZGVmaW5lIEdQSU8xMl9LUF9NS0lONgkJTUZQX0NGRyhHUElPMTIsIEFGMSkKKyNkZWZpbmUgR1BJTzEzX0tQX01LT1VUNglNRlBfQ0ZHKEdQSU8xMywgQUYxKQorI2RlZmluZSBHUElPMTRfS1BfTUtJTjcJCU1GUF9DRkcoR1BJTzE0LCBBRjEpCisjZGVmaW5lIEdQSU8xNV9LUF9NS09VVDcJTUZQX0NGRyhHUElPMTUsIEFGMSkKKyNkZWZpbmUgR1BJTzE2X0tQX0RLSU4wCQlNRlBfQ0ZHKEdQSU8xNiwgQUYxKQorI2RlZmluZSBHUElPMTdfS1BfREtJTjEJCU1GUF9DRkcoR1BJTzE3LCBBRjEpCisjZGVmaW5lIEdQSU8xOF9LUF9ES0lOMgkJTUZQX0NGRyhHUElPMTgsIEFGMSkKKyNkZWZpbmUgR1BJTzE5X0tQX0RLSU4zCQlNRlBfQ0ZHKEdQSU8xOSwgQUYxKQorCisvKiBMQ0QgKi8KKyNkZWZpbmUgR1BJTzgxX0xDRF9GQ0xLCQlNRlBfQ0ZHKEdQSU84MSwgQUYxKQorI2RlZmluZSBHUElPODJfTENEX0xDTEsJCU1GUF9DRkcoR1BJTzgyLCBBRjEpCisjZGVmaW5lIEdQSU84M19MQ0RfUENMSwkJTUZQX0NGRyhHUElPODMsIEFGMSkKKyNkZWZpbmUgR1BJTzg0X0xDRF9ERU5BCQlNRlBfQ0ZHKEdQSU84NCwgQUYxKQorI2RlZmluZSBHUElPODVfTENEX0REMAkJTUZQX0NGRyhHUElPODUsIEFGMSkKKyNkZWZpbmUgR1BJTzg2X0xDRF9ERDEJCU1GUF9DRkcoR1BJTzg2LCBBRjEpCisjZGVmaW5lIEdQSU84N19MQ0RfREQyCQlNRlBfQ0ZHKEdQSU84NywgQUYxKQorI2RlZmluZSBHUElPODhfTENEX0REMwkJTUZQX0NGRyhHUElPODgsIEFGMSkKKyNkZWZpbmUgR1BJTzg5X0xDRF9ERDQJCU1GUF9DRkcoR1BJTzg5LCBBRjEpCisjZGVmaW5lIEdQSU85MF9MQ0RfREQ1CQlNRlBfQ0ZHKEdQSU85MCwgQUYxKQorI2RlZmluZSBHUElPOTFfTENEX0RENgkJTUZQX0NGRyhHUElPOTEsIEFGMSkKKyNkZWZpbmUgR1BJTzkyX0xDRF9ERDcJCU1GUF9DRkcoR1BJTzkyLCBBRjEpCisjZGVmaW5lIEdQSU85M19MQ0RfREQ4CQlNRlBfQ0ZHKEdQSU85MywgQUYxKQorI2RlZmluZSBHUElPOTRfTENEX0REOQkJTUZQX0NGRyhHUElPOTQsIEFGMSkKKyNkZWZpbmUgR1BJTzk1X0xDRF9ERDEwCQlNRlBfQ0ZHKEdQSU85NSwgQUYxKQorI2RlZmluZSBHUElPOTZfTENEX0REMTEJCU1GUF9DRkcoR1BJTzk2LCBBRjEpCisjZGVmaW5lIEdQSU85N19MQ0RfREQxMgkJTUZQX0NGRyhHUElPOTcsIEFGMSkKKyNkZWZpbmUgR1BJTzk4X0xDRF9ERDEzCQlNRlBfQ0ZHKEdQSU85OCwgQUYxKQorI2RlZmluZSBHUElPMTAwX0xDRF9ERDE0CU1GUF9DRkcoR1BJTzEwMCwgQUYxKQorI2RlZmluZSBHUElPMTAxX0xDRF9ERDE1CU1GUF9DRkcoR1BJTzEwMSwgQUYxKQorI2RlZmluZSBHUElPMTAyX0xDRF9ERDE2CU1GUF9DRkcoR1BJTzEwMiwgQUYxKQorI2RlZmluZSBHUElPMTAzX0xDRF9ERDE3CU1GUF9DRkcoR1BJTzEwMywgQUYxKQorI2RlZmluZSBHUElPMTA0X0xDRF9ERDE4CU1GUF9DRkcoR1BJTzEwNCwgQUYxKQorI2RlZmluZSBHUElPMTA1X0xDRF9ERDE5CU1GUF9DRkcoR1BJTzEwNSwgQUYxKQorI2RlZmluZSBHUElPMTA2X0xDRF9ERDIwCU1GUF9DRkcoR1BJTzEwNiwgQUYxKQorI2RlZmluZSBHUElPMTA3X0xDRF9ERDIxCU1GUF9DRkcoR1BJTzEwNywgQUYxKQorI2RlZmluZSBHUElPMTA4X0xDRF9ERDIyCU1GUF9DRkcoR1BJTzEwOCwgQUYxKQorI2RlZmluZSBHUElPMTA5X0xDRF9ERDIzCU1GUF9DRkcoR1BJTzEwOSwgQUYxKQorCisjZGVmaW5lIEdQSU8xMDRfTENEX1NQSURPVVQJTUZQX0NGRyhHUElPMTA0LCBBRjMpCisjZGVmaW5lIEdQSU8xMDVfTENEX1NQSURJTglNRlBfQ0ZHKEdQSU8xMDUsIEFGMykKKyNkZWZpbmUgR1BJTzEwN19MQ0RfQ1MxIAlNRlBfQ0ZHKEdQSU8xMDcsIEFGMykKKyNkZWZpbmUgR1BJTzEwOF9MQ0RfRENMSwlNRlBfQ0ZHKEdQSU8xMDgsIEFGMykKKworI2RlZmluZSBHUElPMTA2X0xDRF9SRVNFVAlNRlBfQ0ZHKEdQSU8xMDYsIEFGMCkKKworLypzbWFydCBwYW5lbCovCisjZGVmaW5lIEdQSU84Ml9MQ0RfQTAJCU1GUF9DRkcoR1BJTzgyLCBBRjApCisjZGVmaW5lIEdQSU84M19MQ0RfV1IJCU1GUF9DRkcoR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU8xMDNfTENEX0NTCQlNRlBfQ0ZHKEdQSU8xMDMsIEFGMCkKKworLyoxd2lyZSovCisjZGVmaW5lIEdQSU8xMDZfMVdJUkUJCU1GUF9DRkcoR1BJTzEwNiwgQUYzKQorCisvKkNDSUMqLworI2RlZmluZSBHUElPNjdfQ0NJQ19JTjcJCU1GUF9DRkdfRFJWKEdQSU82NywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU82OF9DQ0lDX0lONgkJTUZQX0NGR19EUlYoR1BJTzY4LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzY5X0NDSUNfSU41CQlNRlBfQ0ZHX0RSVihHUElPNjksIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzBfQ0NJQ19JTjQJCU1GUF9DRkdfRFJWKEdQSU83MCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83MV9DQ0lDX0lOMwkJTUZQX0NGR19EUlYoR1BJTzcxLCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzcyX0NDSUNfSU4yCQlNRlBfQ0ZHX0RSVihHUElPNzIsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzNfQ0NJQ19JTjEJCU1GUF9DRkdfRFJWKEdQSU83MywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83NF9DQ0lDX0lOMAkJTUZQX0NGR19EUlYoR1BJTzc0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzc1X0NBTV9IU1lOQwlNRlBfQ0ZHX0RSVihHUElPNzUsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzZfQ0FNX1ZTWU5DCU1GUF9DRkdfRFJWKEdQSU83NiwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83N19DQU1fTUNMSwkJTUZQX0NGR19EUlYoR1BJTzc3LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzc4X0NBTV9QQ0xLCQlNRlBfQ0ZHX0RSVihHUElPNzgsIEFGMSwgTUVESVVNKQorCisvKiBNTUMxICovCisjZGVmaW5lIE1NQzFfREFUN19NTUMxX0RBVDcJTUZQX0NGR19EUlYoTU1DMV9EQVQ3LCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQ2X01NQzFfREFUNglNRlBfQ0ZHX0RSVihNTUMxX0RBVDYsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDVfTU1DMV9EQVQ1CU1GUF9DRkdfRFJWKE1NQzFfREFUNSwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUNF9NTUMxX0RBVDQJTUZQX0NGR19EUlYoTU1DMV9EQVQ0LCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQzX01NQzFfREFUMwlNRlBfQ0ZHX0RSVihNTUMxX0RBVDMsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDJfTU1DMV9EQVQyCU1GUF9DRkdfRFJWKE1NQzFfREFUMiwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUMV9NTUMxX0RBVDEJTUZQX0NGR19EUlYoTU1DMV9EQVQxLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQwX01NQzFfREFUMAlNRlBfQ0ZHX0RSVihNTUMxX0RBVDAsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0NNRF9NTUMxX0NNRAlNRlBfQ0ZHX0RSVihNTUMxX0NNRCwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfQ0xLX01NQzFfQ0xLCU1GUF9DRkdfRFJWKE1NQzFfQ0xLLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9DRF9NTUMxX0NECQlNRlBfQ0ZHX0RSVihNTUMxX0NELCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9XUF9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihNTUMxX1dQLCBBRjAsIE1FRElVTSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0ggTUZQX1BYQTkxMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTUZQX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRlBfSAorCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KKworLyoKKyAqIE5PVEU6IHRoZSBNRlBSIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBvbiBQWEExNjggcHJvY2Vzc29yIGxpbmVzIGFyZSBhCisgKiBiaXQgZGlmZmVyZW50IGZyb20gdGhvc2Ugb24gUFhBM3h4LiAgQml0IFs3OjEwXSBhcmUgbm93IHJlc2VydmVkLCB3aGljaAorICogd2VyZSBTTEVFUF9PRV9OLCBTTEVFUF9EQVRBLCBTTEVFUF9TRUwgYW5kIHRoZSBMU0Igb2YgRFJJVkUgYml0cy4KKyAqCisgKiBUbyBjb3BlIHdpdGggdGhpcyBkaWZmZXJlbmNlIGFuZCByZS11c2UgdGhlIHB4YTN4eCBtZnAgY29kZSBhcyBtdWNoIGFzCisgKiBwb3NzaWJsZSwgd2UgbWFrZSB0aGUgZm9sbG93aW5nIGNvbXByb21pc2U6CisgKgorICogMS4gU0xFRVBfT0VfTiB3aWxsIGFsd2F5cyBiZSBwcm9ncmFtbWVkIHRvICcxJyAoYnkgTUZQX0xQTV9GTE9BVCkKKyAqIDIuIERSSVZFIHN0cmVuZ3RoIGRlZmluaXRpb25zIHJlZGVmaW5lZCB0byBpbmNsdWRlIHRoZSByZXNlcnZlZCBiaXQxMAorICogMy4gT3ZlcnJpZGUgTUZQX0NGRygpIGFuZCBNRlBfQ0ZHX0RSVigpCisgKiA0LiBEcm9wIHRoZSB1c2Ugb2YgTUZQX0NGR19MUE0oKSBhbmQgTUZQX0NGR19YKCkKKyAqLworCisjZGVmaW5lIE1GUF9EUklWRV9WRVJZX1NMT1cJKDB4MCA8PCAxMykKKyNkZWZpbmUgTUZQX0RSSVZFX1NMT1cJCSgweDIgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9NRURJVU0JKDB4NCA8PCAxMykKKyNkZWZpbmUgTUZQX0RSSVZFX0ZBU1QJCSgweDggPDwgMTMpCisKKyN1bmRlZiBNRlBfQ0ZHCisjdW5kZWYgTUZQX0NGR19EUlYKKyN1bmRlZiBNRlBfQ0ZHX0xQTQorI3VuZGVmIE1GUF9DRkdfWAorI3VuZGVmIE1GUF9DRkdfREVGQVVMVAorCisjZGVmaW5lIE1GUF9DRkcocGluLCBhZikJCVwKKwkoTUZQX0xQTV9GTE9BVCB8IE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9EUklWRV9NRURJVU0pCisKKyNkZWZpbmUgTUZQX0NGR19EUlYocGluLCBhZiwgZHJ2KQlcCisJKE1GUF9MUE1fRkxPQVQgfCBNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRFJJVkVfIyNkcnYpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwYThhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGExNjguaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUFhBMTY4X0gKKyNkZWZpbmUgX19BU01fTUFDSF9QWEExNjhfSAorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTE2OF9kZXZpY2VfdWFydDE7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGExNjhfZGV2aWNlX3VhcnQyOworCitzdGF0aWMgaW5saW5lIGludCBweGExNjhfYWRkX3VhcnQoaW50IGlkKQoreworCXN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKmQgPSBOVUxMOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMTogZCA9ICZweGExNjhfZGV2aWNlX3VhcnQxOyBicmVhazsKKwljYXNlIDI6IGQgPSAmcHhhMTY4X2RldmljZV91YXJ0MjsgYnJlYWs7CisJfQorCisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHhhX3JlZ2lzdGVyX2RldmljZShkLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BYQTE2OF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhZWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGE5MTAuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUFhBOTEwX0gKKyNkZWZpbmUgX19BU01fTUFDSF9QWEE5MTBfSAorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTkxMF9kZXZpY2VfdWFydDE7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGE5MTBfZGV2aWNlX3VhcnQyOworCitzdGF0aWMgaW5saW5lIGludCBweGE5MTBfYWRkX3VhcnQoaW50IGlkKQoreworCXN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKmQgPSBOVUxMOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMTogZCA9ICZweGE5MTBfZGV2aWNlX3VhcnQxOyBicmVhazsKKwljYXNlIDI6IGQgPSAmcHhhOTEwX2RldmljZV91YXJ0MjsgYnJlYWs7CisJfQorCisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHhhX3JlZ2lzdGVyX2RldmljZShkLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BYQTkxMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiOGM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwYmMuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBiYy5oCisgKgorICogICBBcHBsaWNhdGlvbiBQZXJpcGhlcmFsIEJ1cyBDbG9jayBVbml0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19BUEJDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX0FQQkNfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIEFQQkNfVklSVF9CQVNFCShBUEJfVklSVF9CQVNFICsgMHgwMTUwMDApCisjZGVmaW5lIEFQQkNfUkVHKHgpCShBUEJDX1ZJUlRfQkFTRSArICh4KSkKKworLyoKKyAqIEFQQiBjbG9jayByZWdpc3RlciBvZmZzZXRzIGZvciBQWEExNjgKKyAqLworI2RlZmluZSBBUEJDX1BYQTE2OF9VQVJUMQlBUEJDX1JFRygweDAwMCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfVUFSVDIJQVBCQ19SRUcoMHgwMDQpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0dQSU8JQVBCQ19SRUcoMHgwMDgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1BXTTAJQVBCQ19SRUcoMHgwMGMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1BXTTEJQVBCQ19SRUcoMHgwMTApCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDEJQVBCQ19SRUcoMHgwMWMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDIJQVBCQ19SRUcoMHgwMjApCisjZGVmaW5lIEFQQkNfUFhBMTY4X1JUQwkJQVBCQ19SRUcoMHgwMjgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1RXU0kwCUFQQkNfUkVHKDB4MDJjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9LUEMJCUFQQkNfUkVHKDB4MDMwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9USU1FUlMJQVBCQ19SRUcoMHgwMzQpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0FJQgkJQVBCQ19SRUcoMHgwM2MpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NXX0pUQUcJQVBCQ19SRUcoMHgwNDApCisjZGVmaW5lIEFQQkNfUFhBMTY4X09ORVdJUkUJQVBCQ19SRUcoMHgwNDgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDMJQVBCQ19SRUcoMHgwNGMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0FTRkFSCUFQQkNfUkVHKDB4MDUwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9BU1NBUglBUEJDX1JFRygweDA1NCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfU1NQNAlBUEJDX1JFRygweDA1OCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfU1NQNQlBUEJDX1JFRygweDA1YykKKyNkZWZpbmUgQVBCQ19QWEExNjhfVFdTSTEJQVBCQ19SRUcoMHgwNmMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1VBUlQzCUFQQkNfUkVHKDB4MDcwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9BQzk3CUFQQkNfUkVHKDB4MDg0KQorCisvKgorICogQVBCIENsb2NrIHJlZ2lzdGVyIG9mZnNldHMgZm9yIFBYQTkxMAorICovCisjZGVmaW5lIEFQQkNfUFhBOTEwX1VBUlQwCUFQQkNfUkVHKDB4MDAwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9VQVJUMQlBUEJDX1JFRygweDAwNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfR1BJTwlBUEJDX1JFRygweDAwOCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMAlBUEJDX1JFRygweDAwYykKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMQlBUEJDX1JFRygweDAxMCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMglBUEJDX1JFRygweDAxNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMwlBUEJDX1JFRygweDAxOCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfU1NQMQlBUEJDX1JFRygweDAxYykKKyNkZWZpbmUgQVBCQ19QWEE5MTBfU1NQMglBUEJDX1JFRygweDAyMCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfSVBDCQlBUEJDX1JFRygweDAyNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfVFdTSTAJQVBCQ19SRUcoMHgwMmMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0tQQwkJQVBCQ19SRUcoMHgwMzApCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RJTUVSUwlBUEJDX1JFRygweDAzNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfVEJST1QJQVBCQ19SRUcoMHgwMzgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0FJQgkJQVBCQ19SRUcoMHgwM2MpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NXX0pUQUcJQVBCQ19SRUcoMHgwNDApCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RJTUVSUzEJQVBCQ19SRUcoMHgwNDQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX09ORVdJUkUJQVBCQ19SRUcoMHgwNDgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NTUDMJQVBCQ19SRUcoMHgwNGMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0FTRkFSCUFQQkNfUkVHKDB4MDUwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9BU1NBUglBUEJDX1JFRygweDA1NCkKKworLyogQ29tbW9uIEFQQiBjbG9jayByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBCQ19BUEJDTEsJKDEgPDwgMCkgIC8qIEFQQiBCdXMgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIEFQQkNfRk5DTEsJKDEgPDwgMSkgIC8qIEZ1bmN0aW9uYWwgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIEFQQkNfUlNUCSgxIDw8IDIpICAvKiBSZXNldCBHZW5lcmF0aW9uICovCisKKy8qIEZ1bmN0aW9uYWwgQ2xvY2sgU2VsZWN0aW9uIE1hc2sgKi8KKyNkZWZpbmUgQVBCQ19GTkNMS1NFTCh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfUkVHU19BUEJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkwMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBtdS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmgKKyAqCisgKiAgIEFwcGxpY2F0aW9uIFN1YnN5c3RlbSBQb3dlciBNYW5hZ2VtZW50IFVuaXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9SRUdTX0FQTVVfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfQVBNVV9ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKyNkZWZpbmUgQVBNVV9WSVJUX0JBU0UJKEFYSV9WSVJUX0JBU0UgKyAweDgyODAwKQorI2RlZmluZSBBUE1VX1JFRyh4KQkoQVBNVV9WSVJUX0JBU0UgKyAoeCkpCisKKy8qIENsb2NrIFJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQVBNVV9JUkUJQVBNVV9SRUcoMHgwNDgpCisjZGVmaW5lIEFQTVVfTENECUFQTVVfUkVHKDB4MDRjKQorI2RlZmluZSBBUE1VX0NDSUMJQVBNVV9SRUcoMHgwNTApCisjZGVmaW5lIEFQTVVfU0RIMAlBUE1VX1JFRygweDA1NCkKKyNkZWZpbmUgQVBNVV9TREgxCUFQTVVfUkVHKDB4MDU4KQorI2RlZmluZSBBUE1VX1VTQglBUE1VX1JFRygweDA1YykKKyNkZWZpbmUgQVBNVV9OQU5ECUFQTVVfUkVHKDB4MDYwKQorI2RlZmluZSBBUE1VX0RNQQlBUE1VX1JFRygweDA2NCkKKyNkZWZpbmUgQVBNVV9HRVUJQVBNVV9SRUcoMHgwNjgpCisjZGVmaW5lIEFQTVVfQlVTCUFQTVVfUkVHKDB4MDZjKQorCisjZGVmaW5lIEFQTVVfRk5DTEtfRU4JKDEgPDwgNCkKKyNkZWZpbmUgQVBNVV9BWElDTEtfRU4JKDEgPDwgMykKKyNkZWZpbmUgQVBNVV9GTlJTVF9ESVMJKDEgPDwgMSkKKyNkZWZpbmUgQVBNVV9BWElSU1RfRElTCSgxIDw8IDApCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfQVBNVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWljdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjA4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtaWN1LmgKKyAqCisgKiAgIEludGVycnVwdCBDb250cm9sIFVuaXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9JQ1VfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lDVV9ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKyNkZWZpbmUgSUNVX1ZJUlRfQkFTRQkoQVhJX1ZJUlRfQkFTRSArIDB4ODIwMDApCisjZGVmaW5lIElDVV9SRUcoeCkJKElDVV9WSVJUX0JBU0UgKyAoeCkpCisKKyNkZWZpbmUgSUNVX0lOVF9DT05GKG4pCQlJQ1VfUkVHKChuKSA8PCAyKQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfQVBfSU5UCSgxIDw8IDYpCisjZGVmaW5lIElDVV9JTlRfQ09ORl9DUF9JTlQJKDEgPDwgNSkKKyNkZWZpbmUgSUNVX0lOVF9DT05GX0lSUQkoMSA8PCA0KQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfTUFTSwkoMHhmKQorCisjZGVmaW5lIElDVV9BUF9GSVFfU0VMX0lOVF9OVU0JSUNVX1JFRygweDEwOCkJLyogQVAgRklRIFNlbGVjdGVkIEludGVycnVwdCAqLworI2RlZmluZSBJQ1VfQVBfSVJRX1NFTF9JTlRfTlVNCUlDVV9SRUcoMHgxMEMpCS8qIEFQIElSUSBTZWxlY3RlZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUNVX0FQX0dCTF9JUlFfTVNLCUlDVV9SRUcoMHgxMTQpCS8qIEFQIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBJQ1VfSU5UX1NUQVRVU18wCUlDVV9SRUcoMHgxMjgpCS8qIEludGVycnVwdCBTdHVhdHMgMCAqLworI2RlZmluZSBJQ1VfSU5UX1NUQVRVU18xCUlDVV9SRUcoMHgxMkMpCS8qIEludGVycnVwdCBTdGF0dXMgMSAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9JQ1VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXJzLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy10aW1lcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTU4OWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXJzLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVycy5oCisgKgorICogICBUaW1lcnMgTW9kdWxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19USU1FUlNfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfVElNRVJTX0gKKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2RlZmluZSBUSU1FUlMxX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MTQwMDApCisjZGVmaW5lIFRJTUVSUzJfVklSVF9CQVNFCShBUEJfVklSVF9CQVNFICsgMHgxNjAwMCkKKworI2RlZmluZSBUTVJfQ0NSCQkoMHgwMDAwKQorI2RlZmluZSBUTVJfVE5fTU0obiwgbSkJKDB4MDAwNCArICgobikgPDwgMykgKyAoKChuKSArIChtKSkgPDwgMikpCisjZGVmaW5lIFRNUl9DUihuKQkoMHgwMDI4ICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX1NSKG4pCSgweDAwMzQgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfSUVSKG4pCSgweDAwNDAgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfUExWUihuKQkoMHgwMDRjICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX1BMQ1IobikJKDB4MDA1OCArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XTUVSCSgweDAwNjQpCisjZGVmaW5lIFRNUl9XTVIJCSgweDAwNjgpCisjZGVmaW5lIFRNUl9XVlIJCSgweDAwNmMpCisjZGVmaW5lIFRNUl9XU1IJCSgweDAwNzApCisjZGVmaW5lIFRNUl9JQ1IobikJKDB4MDA3NCArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XSUNSCSgweDAwODApCisjZGVmaW5lIFRNUl9DRVIJCSgweDAwODQpCisjZGVmaW5lIFRNUl9DTVIJCSgweDAwODgpCisjZGVmaW5lIFRNUl9JTFIobikJKDB4MDA4YyArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XQ1IJCSgweDAwOTgpCisjZGVmaW5lIFRNUl9XRkFSCSgweDAwOWMpCisjZGVmaW5lIFRNUl9XU0FSCSgweDAwQTApCisjZGVmaW5lIFRNUl9DVldSKG4pCSgweDAwQTQgKyAoKG4pIDw8IDIpKQorCisjZGVmaW5lIFRNUl9DQ1JfQ1NfMCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgVE1SX0NDUl9DU18xKHgpCSgoKHgpICYgMHg3KSA8PCAyKQorI2RlZmluZSBUTVJfQ0NSX0NTXzIoeCkJKCgoeCkgJiAweDMpIDw8IDUpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfVElNRVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDFlZGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9NQUNIX1NZU1RFTV9ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJY3B1X3Jlc2V0KDApOworfQorI2VuZGlmIC8qIF9fQVNNX01BQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlYmJkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMzI1MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZDVmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIFVBUlQxX0JBU0UJKEFQQl9QSFlTX0JBU0UgKyAweDM2MDAwKQorI2RlZmluZSBVQVJUMl9CQVNFCShBUEJfUEhZU19CQVNFICsgMHgxNzAwMCkKKyNkZWZpbmUgVUFSVDNfQkFTRQkoQVBCX1BIWVNfQkFTRSArIDB4MTgwMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpVQVJUID0gKHVuc2lnbmVkIGxvbmcgKilVQVJUMl9CQVNFOworCisJLyogVUFSVCBlbmFibGVkPyAqLworCWlmICghKFVBUlRbVUFSVF9JRVJdICYgVUFSVF9JRVJfVVVFKSkKKwkJcmV0dXJuOworCisJd2hpbGUgKCEoVUFSVFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworCisJVUFSVFtVQVJUX1RYXSA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGNjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqLworCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmZjJmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLmMKKyAqCisgKiAgR2VuZXJpYyBJUlEgaGFuZGxpbmcsIEdQSU8gSVJRIGRlbXVsdGlwbGV4aW5nLCBldGMuCisgKgorICogIEF1dGhvcjoJQmluIFlhbmcgPGJpbi55YW5nQG1hcnZlbGwuY29tPgorICogIENyZWF0ZWQ6CVNlcCAzMCwgMjAwOAorICogIENvcHlyaWdodDoJTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1pY3UuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIElSUV9ST1VURV9UT19BUAkJKElDVV9JTlRfQ09ORl9BUF9JTlQgfCBJQ1VfSU5UX0NPTkZfSVJRKQorCisjZGVmaW5lIFBSSU9SSVRZX0RFRkFVTFQJMHgxCisjZGVmaW5lIFBSSU9SSVRZX05PTkUJCTB4MAkvKiBtZWFucyBJUlEgZGlzYWJsZWQgKi8KKworc3RhdGljIHZvaWQgaWN1X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKFBSSU9SSVRZX05PTkUsIElDVV9JTlRfQ09ORihpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaWN1X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoSVJRX1JPVVRFX1RPX0FQIHwgUFJJT1JJVFlfREVGQVVMVCwgSUNVX0lOVF9DT05GKGlycSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGljdV9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJpY3VfaXJxIiwKKwkuYWNrCT0gaWN1X21hc2tfaXJxLAorCS5tYXNrCT0gaWN1X21hc2tfaXJxLAorCS51bm1hc2sJPSBpY3VfdW5tYXNrX2lycSwKK307CisKK3ZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IDY0OyBpcnErKykgeworCQlpY3VfbWFza19pcnEoaXJxKTsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmljdV9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMgYi9hcmNoL2FybS9tYWNoLW1tcC9weGExNjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTkyNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKKyAqCisgKiAgQ29kZSBzcGVjaWZpYyB0byBQWEExNjgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvY3B1dHlwZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1hcGJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBNRlBSX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MWUwMDApCisKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTE2OF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0KK3sKKwlNRlBfQUREUl9YKEdQSU8wLCAgIEdQSU8zNiwgIDB4MDRjKSwKKwlNRlBfQUREUl9YKEdQSU8zNywgIEdQSU81NSwgIDB4MDAwKSwKKwlNRlBfQUREUl9YKEdQSU81NiwgIEdQSU8xMjMsIDB4MGUwKSwKKwlNRlBfQUREUl9YKEdQSU8xMjQsIEdQSU8xMjcsIDB4MGY0KSwKKworCU1GUF9BRERSX0VORCwKK307CisKKyNkZWZpbmUgQVBNQVNLKGkpCShHUElPX1JFR1NfVklSVCArIEJBTktfT0ZGKGkpICsgMHgwOWMpCisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGExNjhfaW5pdF9ncGlvKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBlbmFibGUgR1BJTyBjbG9jayAqLworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEssIEFQQkNfUFhBMTY4X0dQSU8pOworCisJLyogdW5tYXNrIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIGFsbCA0IGJhbmtzIC0gQVBNQVNLeCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBBUE1BU0soaSkpOworCisJcHhhX2luaXRfZ3BpbyhJUlFfUFhBMTY4X0dQSU9YLCAwLCAxMjcsIE5VTEwpOworfQorCit2b2lkIF9faW5pdCBweGExNjhfaW5pdF9pcnEodm9pZCkKK3sKKwlpY3VfaW5pdF9pcnEoKTsKKwlweGExNjhfaW5pdF9ncGlvKCk7Cit9CisKKy8qIEFQQiBwZXJpcGhlcmFsIGNsb2NrcyAqLworc3RhdGljIEFQQkNfQ0xLKHVhcnQxLCBQWEExNjhfVUFSVDEsIDEsIDE0NzQ1NjAwKTsKK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MiwgUFhBMTY4X1VBUlQyLCAxLCAxNDc0NTYwMCk7CisKKy8qIGRldmljZSBhbmQgY2xvY2sgYmluZGluZ3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGExNjhfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDEsICJweGEyeHgtdWFydC4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa191YXJ0MiwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YTE2OF9pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19weGExNjgoKSkgeworCQltZnBfaW5pdF9iYXNlKE1GUFJfVklSVF9CQVNFKTsKKwkJbWZwX2luaXRfYWRkcihweGExNjhfbWZwX2FkZHJfbWFwKTsKKwkJcHhhX2luaXRfZG1hKElSUV9QWEExNjhfRE1BX0lOVDAsIDMyKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGExNjhfY2xrcmVncykpOworCX0KKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwocHhhMTY4X2luaXQpOworCisvKiBzeXN0ZW0gdGltZXIgLSBjbG9jayBlbmFibGVkLCAzLjI1TUh6ICovCisjZGVmaW5lIFRJTUVSX0NMS19SU1QJKEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSyB8IEFQQkNfRk5DTEtTRUwoMykpCisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGExNjhfdGltZXJfaW5pdCh2b2lkKQoreworCS8qIHRoaXMgaXMgZWFybHksIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgQ0NVIHJlZ2lzdGVycyBieQorCSAqIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHVzaW5nIGNsa18qIEFQSS4gQ2xvY2sgcmF0ZSBpcyBkZWZpbmVkCisJICogYnkgQVBCQ19USU1FUlNfQ0xLX1JTVCAoMy4yNU1IeikgYW5kIGVuYWJsZWQgZnJlZS1ydW5uaW5nCisJICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19SU1QsIEFQQkNfUFhBMTY4X1RJTUVSUyk7CisKKwkvKiAzLjI1TUh6LCBidXMvZnVuY3Rpb25hbCBjbG9jayBlbmFibGVkLCByZWxlYXNlIHJlc2V0ICovCisJX19yYXdfd3JpdGVsKFRJTUVSX0NMS19SU1QsIEFQQkNfUFhBMTY4X1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9QWEExNjhfVElNRVIxKTsKK30KKworc3RydWN0IHN5c190aW1lciBweGExNjhfdGltZXIgPSB7CisJLmluaXQJPSBweGExNjhfdGltZXJfaW5pdCwKK307CisKKy8qIG9uLWNoaXAgZGV2aWNlcyAqLworUFhBMTY4X0RFVklDRSh1YXJ0MSwgInB4YTJ4eC11YXJ0IiwgMCwgVUFSVDEsIDB4ZDQwMTcwMDAsIDB4MzAsIDIxLCAyMik7CitQWEExNjhfREVWSUNFKHVhcnQyLCAicHhhMnh4LXVhcnQiLCAxLCBVQVJUMiwgMHhkNDAxODAwMCwgMHgzMCwgMjMsIDI0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzZjhmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jCisgKgorICogIENvZGUgc3BlY2lmaWMgdG8gUFhBOTEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBiYy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1hcG11Lmg+CisjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBNRlBSX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MWUwMDApCisKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTkxMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0KK3sKKwlNRlBfQUREUl9YKEdQSU8wLCBHUElPNTQsIDB4ZGMpLAorCU1GUF9BRERSX1goR1BJTzY3LCBHUElPOTgsIDB4MWI4KSwKKwlNRlBfQUREUl9YKEdQSU8xMDAsIEdQSU8xMDksIDB4MjM4KSwKKworCU1GUF9BRERSKEdQSU8xMjMsIDB4Y2MpLAorCU1GUF9BRERSKEdQSU8xMjQsIDB4ZDApLAorCisJTUZQX0FERFIoREZfSU8wLCAweDQwKSwKKwlNRlBfQUREUihERl9JTzEsIDB4M2MpLAorCU1GUF9BRERSKERGX0lPMiwgMHgzOCksCisJTUZQX0FERFIoREZfSU8zLCAweDM0KSwKKwlNRlBfQUREUihERl9JTzQsIDB4MzApLAorCU1GUF9BRERSKERGX0lPNSwgMHgyYyksCisJTUZQX0FERFIoREZfSU82LCAweDI4KSwKKwlNRlBfQUREUihERl9JTzcsIDB4MjQpLAorCU1GUF9BRERSKERGX0lPOCwgMHgyMCksCisJTUZQX0FERFIoREZfSU85LCAweDFjKSwKKwlNRlBfQUREUihERl9JTzEwLCAweDE4KSwKKwlNRlBfQUREUihERl9JTzExLCAweDE0KSwKKwlNRlBfQUREUihERl9JTzEyLCAweDEwKSwKKwlNRlBfQUREUihERl9JTzEzLCAweGMpLAorCU1GUF9BRERSKERGX0lPMTQsIDB4OCksCisJTUZQX0FERFIoREZfSU8xNSwgMHg0KSwKKworCU1GUF9BRERSKERGX25DUzBfU01fbkNTMiwgMHg0NCksCisJTUZQX0FERFIoREZfbkNTMV9TTV9uQ1MzLCAweDQ4KSwKKwlNRlBfQUREUihTTV9uQ1MwLCAweDRjKSwKKwlNRlBfQUREUihTTV9uQ1MxLCAweDUwKSwKKwlNRlBfQUREUihERl9XRW4sIDB4NTQpLAorCU1GUF9BRERSKERGX1JFbiwgMHg1OCksCisJTUZQX0FERFIoREZfQ0xFX1NNX09FbiwgMHg1YyksCisJTUZQX0FERFIoREZfQUxFX1NNX1dFbiwgMHg2MCksCisJTUZQX0FERFIoU01fU0NMSywgMHg2NCksCisJTUZQX0FERFIoREZfUkRZMCwgMHg2OCksCisJTUZQX0FERFIoU01fQkUwLCAweDZjKSwKKwlNRlBfQUREUihTTV9CRTEsIDB4NzApLAorCU1GUF9BRERSKFNNX0FEViwgMHg3NCksCisJTUZQX0FERFIoREZfUkRZMSwgMHg3OCksCisJTUZQX0FERFIoU01fQURWTVVYLCAweDdjKSwKKwlNRlBfQUREUihTTV9SRFksIDB4ODApLAorCisJTUZQX0FERFJfWChNTUMxX0RBVDcsIE1NQzFfV1AsIDB4ODQpLAorCisJTUZQX0FERFJfRU5ELAorfTsKKworI2RlZmluZSBBUE1BU0soaSkJKEdQSU9fUkVHU19WSVJUICsgQkFOS19PRkYoaSkgKyAweDA5YykKKworc3RhdGljIHZvaWQgX19pbml0IHB4YTkxMF9pbml0X2dwaW8odm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGVuYWJsZSBHUElPIGNsb2NrICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSywgQVBCQ19QWEE5MTBfR1BJTyk7CisKKwkvKiB1bm1hc2sgR1BJTyBlZGdlIGRldGVjdGlvbiBmb3IgYWxsIDQgYmFua3MgLSBBUE1BU0t4ICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIEFQTUFTSyhpKSk7CisKKwlweGFfaW5pdF9ncGlvKElSUV9QWEE5MTBfQVBfR1BJTywgMCwgMTI3LCBOVUxMKTsKK30KKwordm9pZCBfX2luaXQgcHhhOTEwX2luaXRfaXJxKHZvaWQpCit7CisJaWN1X2luaXRfaXJxKCk7CisJcHhhOTEwX2luaXRfZ3BpbygpOworfQorCisvKiBBUEIgcGVyaXBoZXJhbCBjbG9ja3MgKi8KK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MSwgUFhBOTEwX1VBUlQwLCAxLCAxNDc0NTYwMCk7CitzdGF0aWMgQVBCQ19DTEsodWFydDIsIFBYQTkxMF9VQVJUMSwgMSwgMTQ3NDU2MDApOworCisvKiBkZXZpY2UgYW5kIGNsb2NrIGJpbmRpbmdzICovCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhOTEwX2Nsa3JlZ3NbXSA9IHsKKwlJTklUX0NMS1JFRygmY2xrX3VhcnQxLCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDIsICJweGEyeHgtdWFydC4xIiwgTlVMTCksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGE5MTBfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhOTEwKCkpIHsKKwkJbWZwX2luaXRfYmFzZShNRlBSX1ZJUlRfQkFTRSk7CisJCW1mcF9pbml0X2FkZHIocHhhOTEwX21mcF9hZGRyX21hcCk7CisJCXB4YV9pbml0X2RtYShJUlFfUFhBOTEwX0RNQV9JTlQwLCAzMik7CisJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhOTEwX2Nsa3JlZ3MpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTkxMF9pbml0KTsKKworLyogc3lzdGVtIHRpbWVyIC0gY2xvY2sgZW5hYmxlZCwgMy4yNU1IeiAqLworI2RlZmluZSBUSU1FUl9DTEtfUlNUCShBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEsgfCBBUEJDX0ZOQ0xLU0VMKDMpKQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHhhOTEwX3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiByZXNldCBhbmQgY29uZmlndXJlICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19SU1QsIEFQQkNfUFhBOTEwX1RJTUVSUyk7CisJX19yYXdfd3JpdGVsKFRJTUVSX0NMS19SU1QsIEFQQkNfUFhBOTEwX1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9QWEE5MTBfQVAxX1RJTUVSMSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgcHhhOTEwX3RpbWVyID0geworCS5pbml0CT0gcHhhOTEwX3RpbWVyX2luaXQsCit9OworCisvKiBvbi1jaGlwIGRldmljZXMgKi8KKworLyogTk9URTogdGhlcmUgYXJlIHRvdGFsbHkgMyBVQVJUcyBvbiBQWEE5MTA6CisgKgorICogICBVQVJUMSAgIC0gU2xvdyBVQVJUIChjYW4gYmUgdXNlZCBib3RoIGJ5IEFQIGFuZCBDUCkKKyAqICAgVUFSVDIvMyAtIEZhc3QgVUFSVAorICoKKyAqIFRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB0aGUgbGVnYWN5IEZGVUFSVC9CVFVBUlQvU1RVQVJUIHNlcXVlbmNlLAorICogdGhleSBhcmUgcmUtb3JkZXJlZCBhczoKKyAqCisgKiAgIHB4YTkxMF9kZXZpY2VfdWFydDEgLSBVQVJUMiBhcyBGRlVBUlQKKyAqICAgcHhhOTEwX2RldmljZV91YXJ0MiAtIFVBUlQzIGFzIEJUVUFSVAorICoKKyAqIFVBUlQxIGlzIG5vdCB1c2VkIGJ5IEFQIGZvciB0aGUgbW9tZW50LgorICovCitQWEE5MTBfREVWSUNFKHVhcnQxLCAicHhhMnh4LXVhcnQiLCAwLCBVQVJUMiwgMHhkNDAxNzAwMCwgMHgzMCwgMjEsIDIyKTsKK1BYQTkxMF9ERVZJQ0UodWFydDIsICJweGEyeHgtdWFydCIsIDEsIFVBUlQzLCAweGQ0MDE4MDAwLCAweDMwLCAyMywgMjQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGF2b3JldmIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwYzkyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvdGF2b3JldmIuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBQWEE5MTAtYmFzZWQgVGF2b3JFVkIgRGV2ZWxvcG1lbnQgUGxhdGZvcm0uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGE5MTAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTkxMC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRhdm9yZXZiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQyICovCisJR1BJTzQ3X1VBUlQyX1JYRCwKKwlHUElPNDhfVUFSVDJfVFhELAorCisJLyogU01DICovCisJU01fbkNTMF9uQ1MwLAorCVNNX0FEVl9TTV9BRFYsCisJU01fU0NMS19TTV9TQ0xLLAorCVNNX1NDTEtfU01fU0NMSywKKwlTTV9CRTBfU01fQkUwLAorCVNNX0JFMV9TTV9CRTEsCisKKwkvKiBERkkgKi8KKwlERl9JTzBfTkRfSU8wLAorCURGX0lPMV9ORF9JTzEsCisJREZfSU8yX05EX0lPMiwKKwlERl9JTzNfTkRfSU8zLAorCURGX0lPNF9ORF9JTzQsCisJREZfSU81X05EX0lPNSwKKwlERl9JTzZfTkRfSU82LAorCURGX0lPN19ORF9JTzcsCisJREZfSU84X05EX0lPOCwKKwlERl9JTzlfTkRfSU85LAorCURGX0lPMTBfTkRfSU8xMCwKKwlERl9JTzExX05EX0lPMTEsCisJREZfSU8xMl9ORF9JTzEyLAorCURGX0lPMTNfTkRfSU8xMywKKwlERl9JTzE0X05EX0lPMTQsCisJREZfSU8xNV9ORF9JTzE1LAorCURGX25DUzBfU01fbkNTMl9uQ1MwLAorCURGX0FMRV9TTV9XRW5fTkRfQUxFLAorCURGX0NMRV9TTV9PRW5fTkRfQ0xFLAorCURGX1dFbl9ERl9XRW4sCisJREZfUkVuX0RGX1JFbiwKKwlERl9SRFkwX0RGX1JEWTAsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSB0YXZvcmV2Yl9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU01DX0NTMV9QSFlTX0JBU0UgKyAweDMwMCwKKwkJLmVuZAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHhmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdwaW9fdG9faXJxKDgwKSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKDgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ0YXZvcmV2Yl9zbWM5MXhfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRhdm9yZXZiX2luaXQodm9pZCkKK3sKKwltZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRhdm9yZXZiX3Bpbl9jb25maWcpKTsKKworCS8qIG9uLWNoaXAgZGV2aWNlcyAqLworCXB4YTkxMF9hZGRfdWFydCgxKTsKKworCS8qIG9mZi1jaGlwIGRldmljZXMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKFRBVk9SRVZCLCAiUFhBOTEwIEV2YWx1YXRpb24gQm9hcmQgKGFrYSBUYXZvckVWQikiKQorCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTkxMF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhOTEwX3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IHRhdm9yZXZiX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2E2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKKyAqCisgKiAgIFN1cHBvcnQgZm9yIGNsb2Nrc291cmNlIGFuZCBjbG9ja2V2ZW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIDIwMDgtMDQtMTE6IEphc29uIENoYWdhcyA8SmFzb24uY2hhZ2FzQG1hcnZlbGwuY29tPgorICogICAyMDA4LTEwLTA4OiBCaW4gWWFuZyA8YmluLnlhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhlIHRpbWVycyBtb2R1bGUgYWN0dWFsbHkgaW5jbHVkZXMgdGhyZWUgdGltZXJzLCBlYWNoIHRpbWVyIHdpdGggdXB0bworICogdGhyZWUgbWF0Y2ggY29tcGFyYXRvcnMuIFRpbWVyICMwIGlzIHVzZWQgaGVyZSBpbiBmcmVlLXJ1bm5pbmcgbW9kZSBhcworICogdGhlIGNsb2NrIHNvdXJjZSwgYW5kIG1hdGNoIGNvbXBhcmF0b3IgIzEgdXNlZCBhcyBjbG9jayBldmVudCBkZXZpY2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lcnMuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgVElNRVJTX1ZJUlRfQkFTRQlUSU1FUlMxX1ZJUlRfQkFTRQorCisjZGVmaW5lIE1BWF9ERUxUQQkJKDB4ZmZmZmZmZmUpCisjZGVmaW5lIE1JTl9ERUxUQQkJKDE2KQorCisjZGVmaW5lIFRDUjJOU19TQ0FMRV9GQUNUT1IJMTAKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGNyMm5zX3NjYWxlOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3RjcjJuc19zY2FsZSh1bnNpZ25lZCBsb25nIHRjcl9yYXRlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gMTAwMDAwMDAwMFVMTCA8PCBUQ1IyTlNfU0NBTEVfRkFDVE9SOworCWRvX2Rpdih2LCB0Y3JfcmF0ZSk7CisJdGNyMm5zX3NjYWxlID0gdjsKKwkvKgorCSAqIFdlIHdhbnQgYW4gZXZlbiB2YWx1ZSB0byBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSB0b3AgYml0CisJICogcmV0dXJuZWQgYnkgY250MzJfdG9fNjMoKSB3aXRob3V0IGFuIGFkZGl0aW9uYWwgcnVuIHRpbWUKKwkgKiBpbnN0cnVjdGlvbi4gU28gaWYgdGhlIExTQiBpcyAxIHRoZW4gcm91bmQgaXQgdXAuCisJICovCisJaWYgKHRjcjJuc19zY2FsZSAmIDEpCisJCXRjcjJuc19zY2FsZSsrOworfQorCisvKgorICogRklYTUU6IHRoZSB0aW1lciBuZWVkcyBzb21lIGRlbGF5IHRvIHN0YWJsaXplIHRoZSBjb3VudGVyIGNhcHR1cmUKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCB0aW1lcl9yZWFkKHZvaWQpCit7CisJaW50IGRlbGF5ID0gMTAwOworCisJX19yYXdfd3JpdGVsKDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ1ZXUigwKSk7CisKKwl3aGlsZSAoZGVsYXktLSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DVldSKDApKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHYgPSBjbnQzMl90b182Myh0aW1lcl9yZWFkKCkpOworCXJldHVybiAodiAqIHRjcjJuc19zY2FsZSkgPj4gVENSMk5TX1NDQUxFX0ZBQ1RPUjsKK30KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYyA9IGRldl9pZDsKKworCS8qIGRpc2FibGUgYW5kIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLworCV9fcmF3X3dyaXRlbCgweDAsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUVSKDApKTsKKwlfX3Jhd193cml0ZWwoMHgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lDUigwKSk7CisJYy0+ZXZlbnRfaGFuZGxlcihjKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbmV4dDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyBhbmQgZW5hYmxlICovCisJX19yYXdfd3JpdGVsKDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUNSKDApKTsKKwlfX3Jhd193cml0ZWwoMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMCkpOworCisJbmV4dCA9IHRpbWVyX3JlYWQoKSArIGRlbHRhOworCV9fcmF3X3dyaXRlbChuZXh0LCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX1ROX01NKDAsIDApKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJLyogZGlzYWJsZSB0aGUgbWF0Y2hpbmcgaW50ZXJydXB0ICovCisJCV9fcmF3X3dyaXRlbCgweDAwLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lFUigwKSk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWJyZWFrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNrZXZ0ID0geworCS5uYW1lCQk9ICJjbG9ja2V2ZW50IiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDIwMCwKKwkuc2V0X25leHRfZXZlbnQJPSB0aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSB0aW1lcl9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBjeWNsZV90IGNsa3NyY19yZWFkKHZvaWQpCit7CisJcmV0dXJuIHRpbWVyX3JlYWQoKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBja3NyYyA9IHsKKwkubmFtZQkJPSAiY2xvY2tzb3VyY2UiLAorCS5zaGlmdAkJPSAyMCwKKwkucmF0aW5nCQk9IDIwMCwKKwkucmVhZAkJPSBjbGtzcmNfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdGltZXJfY29uZmlnKHZvaWQpCit7CisJdWludDMyX3QgY2NyID0gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DQ1IpOworCXVpbnQzMl90IGNlciA9IF9fcmF3X3JlYWRsKFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsKKwl1aW50MzJfdCBjbXIgPSBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NNUik7CisKKwlfX3Jhd193cml0ZWwoY2VyICYgfjB4MSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DRVIpOyAvKiBkaXNhYmxlICovCisKKwljY3IgJj0gVE1SX0NDUl9DU18wKDB4Myk7CisJX19yYXdfd3JpdGVsKGNjciwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DQ1IpOworCisJLyogZnJlZS1ydW5uaW5nIG1vZGUgKi8KKwlfX3Jhd193cml0ZWwoY21yIHwgMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DTVIpOworCisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9QTENSKDApKTsgLyogZnJlZS1ydW5uaW5nICovCisJX19yYXdfd3JpdGVsKDB4NywgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JQ1IoMCkpOyAgLyogY2xlYXIgc3RhdHVzICovCisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMCkpOworCisJLyogZW5hYmxlIHRpbWVyIGNvdW50ZXIgKi8KKwlfX3Jhd193cml0ZWwoY2VyIHwgMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DRVIpOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmRldl9pZAkJPSAmY2tldnQsCit9OworCit2b2lkIF9faW5pdCB0aW1lcl9pbml0KGludCBpcnEpCit7CisJdGltZXJfY29uZmlnKCk7CisKKwlzZXRfdGNyMm5zX3NjYWxlKENMT0NLX1RJQ0tfUkFURSk7CisKKwlja2V2dC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBja2V2dC5zaGlmdCk7CisJY2tldnQubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNQVhfREVMVEEsICZja2V2dCk7CisJY2tldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNSU5fREVMVEEsICZja2V2dCk7CisJY2tldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisKKwlja3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIGNrc3JjLnNoaWZ0KTsKKworCXNldHVwX2lycShpcnEsICZ0aW1lcl9pcnEpOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNrZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGNmZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIFBYQTkxMC1iYXNlZCBUVENfREtCIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTEwLmg+CisjaW5jbHVkZSA8bWFjaC9weGE5MTAuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpICAgICAgICh4KSwgQVJSQVlfU0laRSh4KQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0dGNfZGtiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQyICovCisJR1BJTzQ3X1VBUlQyX1JYRCwKKwlHUElPNDhfVUFSVDJfVFhELAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHR0Y19ka2JfaW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodHRjX2RrYl9waW5fY29uZmlnKSk7CisKKwkvKiBvbi1jaGlwIGRldmljZXMgKi8KKwlweGE5MTBfYWRkX3VhcnQoMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVFRDX0RLQiwgIlBYQTkxMC1iYXNlZCBUVENfREtCIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGE5MTBfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTkxMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSB0dGNfZGtiX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGYwNWFkMmUuLjU3NGNjYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAogdm9pZCBhcmNoX2lkbGUodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWZvciAoOzspIDsgIC8qIGRlcGVuZHMgb24gSVBDIHcvIG90aGVyIGNvcmUgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKaW5kZXggZDgzY2I4Ni4uNmZiZTY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKQEAgLTgsNiArOCwxMiBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBNYXJ2ZWxsIERCLTc4eDAwLUJQIERldmVsb3BtZW50IEJvYXJkLgogCitjb25maWcgTUFDSF9SRDc4WDAwX01BU0EKKwlib29sICJNYXJ2ZWxsIFJELTc4eDAwLW1BU0EgUmVmZXJlbmNlIERlc2lnbiIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgUkQtNzh4MDAtbUFTQSBSZWZlcmVuY2UgRGVzaWduLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUKaW5kZXggZWMxNmMwNS4uZGE2MjhiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9NYWtlZmlsZQpAQCAtMSwyICsxLDMgQEAKIG9iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gaXJxLm8gcGNpZS5vCiBvYmotJChDT05GSUdfTUFDSF9EQjc4WDAwX0JQKQkrPSBkYjc4eDAwLWJwLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1JENzhYMDBfTUFTQSkJKz0gcmQ3OHgwMC1tYXNhLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwppbmRleCBiMGU0ZTBkLi5hNTc1ZGFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CkBAIC00MzAsOSArNDMyLDIyIEBACiAKIHZvaWQgX19pbml0IG12Nzh4eDBfZ2UxMF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKIHsKKwl1MzIgZGV2LCByZXY7CisKIAlldGhfZGF0YS0+c2hhcmVkID0gJm12Nzh4eDBfZ2UxMF9zaGFyZWQ7CiAJbXY3OHh4MF9nZTEwLmRldi5wbGF0Zm9ybV9kYXRhID0gZXRoX2RhdGE7CiAKKwkvKgorCSAqIE9uIHRoZSBaMCwgZ2UxMCBhbmQgZ2UxMSBhcmUgaW50ZXJuYWxseSBjb25uZWN0ZWQgYmFjaworCSAqIHRvIGJhY2ssIGFuZCBub3QgYnJvdWdodCBvdXQuCisJICovCisJbXY3OHh4MF9wY2llX2lkKCZkZXYsICZyZXYpOworCWlmIChkZXYgPT0gTVY3OFgwMF9aMF9ERVZfSUQpIHsKKwkJZXRoX2RhdGEtPnBoeV9hZGRyID0gTVY2NDNYWF9FVEhfUEhZX05PTkU7CisJCWV0aF9kYXRhLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aF9kYXRhLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfZ2UxMF9zaGFyZWQpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXY3OHh4MF9nZTEwKTsKIH0KQEAgLTQ4NCwxMyArNDk5LDEwMSBAQAogCiB2b2lkIF9faW5pdCBtdjc4eHgwX2dlMTFfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpCiB7CisJdTMyIGRldiwgcmV2OworCiAJZXRoX2RhdGEtPnNoYXJlZCA9ICZtdjc4eHgwX2dlMTFfc2hhcmVkOwogCW12Nzh4eDBfZ2UxMS5kZXYucGxhdGZvcm1fZGF0YSA9IGV0aF9kYXRhOwogCisJLyoKKwkgKiBPbiB0aGUgWjAsIGdlMTAgYW5kIGdlMTEgYXJlIGludGVybmFsbHkgY29ubmVjdGVkIGJhY2sKKwkgKiB0byBiYWNrLCBhbmQgbm90IGJyb3VnaHQgb3V0LgorCSAqLworCW12Nzh4eDBfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAoZGV2ID09IE1WNzhYMDBfWjBfREVWX0lEKSB7CisJCWV0aF9kYXRhLT5waHlfYWRkciA9IE1WNjQzWFhfRVRIX1BIWV9OT05FOworCQlldGhfZGF0YS0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGhfZGF0YS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJfQorCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2dlMTFfc2hhcmVkKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfZ2UxMSk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGJ1cyAwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSBtdjc4eHgwX2kyY18wX3BkYXRhID0geworCS5mcmVxX20JCT0gOCwgLyogYXNzdW1lcyAxNjYgTUh6IFRDTEsgKi8KKwkuZnJlcV9uCQk9IDMsCisJLnRpbWVvdXQJPSAxMDAwLCAvKiBEZWZhdWx0IHRpbWVvdXQgb2YgMSBzZWNvbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY3OHh4MF9pMmNfMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiaTJjIDAgYmFzZSIsCisJCS5zdGFydCAgPSBJMkNfMF9QSFlTX0JBU0UsCisJCS5lbmQgICAgPSBJMkNfMF9QSFlTX0JBU0UgKyAweDFmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZSAgID0gImkyYyAwIGlycSIsCisJCS5zdGFydCAgPSBJUlFfTVY3OFhYMF9JMkNfMCwKKwkJLmVuZCAgICA9IElSUV9NVjc4WFgwX0kyQ18wLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXY3OHh4MF9pMmNfMCA9IHsKKwkubmFtZQkJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12Nzh4eDBfaTJjXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjc4eHgwX2kyY18wX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbXY3OHh4MF9pMmNfMF9wZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMgYnVzIDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhIG12Nzh4eDBfaTJjXzFfcGRhdGEgPSB7CisJLmZyZXFfbQkJPSA4LCAvKiBhc3N1bWVzIDE2NiBNSHogVENMSyAqLworCS5mcmVxX24JCT0gMywKKwkudGltZW91dAk9IDEwMDAsIC8qIERlZmF1bHQgdGltZW91dCBvZiAxIHNlY29uZCAqLworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjc4eHgwX2kyY18xX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgICA9ICJpMmMgMSBiYXNlIiwKKwkJLnN0YXJ0ICA9IEkyQ18xX1BIWVNfQkFTRSwKKwkJLmVuZCAgICA9IEkyQ18xX1BIWVNfQkFTRSArIDB4MWYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lICAgPSAiaTJjIDEgaXJxIiwKKwkJLnN0YXJ0ICA9IElSUV9NVjc4WFgwX0kyQ18xLAorCQkuZW5kICAgID0gSVJRX01WNzhYWDBfSTJDXzEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdjc4eHgwX2kyY18xID0geworCS5uYW1lCQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY3OHh4MF9pMmNfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG12Nzh4eDBfaTJjXzFfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZtdjc4eHgwX2kyY18xX3BkYXRhLAorCX0sCit9OworCit2b2lkIF9faW5pdCBtdjc4eHgwX2kyY19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2kyY18wKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfaTJjXzEpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNBVEEKQEAgLTcxOSw2ICs4MjIsMzIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJhbAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY2hhciAqIF9faW5pdCBtdjc4eHgwX2lkKHZvaWQpCit7CisJdTMyIGRldiwgcmV2OworCisJbXY3OHh4MF9wY2llX2lkKCZkZXYsICZyZXYpOworCisJaWYgKGRldiA9PSBNVjc4WDAwX1owX0RFVl9JRCkgeworCQlpZiAocmV2ID09IE1WNzhYMDBfUkVWX1owKQorCQkJcmV0dXJuICJNVjc4WDAwLVowIjsKKwkJZWxzZQorCQkJcmV0dXJuICJNVjc4WDAwLVJldi1VbnN1cHBvcnRlZCI7CisJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKKwkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKKwkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UKKwkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOworCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CisJCWlmIChyZXYgPT0gTVY3ODEwMF9SRVZfQTApCisJCQlyZXR1cm4gIk1WNzgyMDAtQTAiOworCQllbHNlCisJCQlyZXR1cm4gIk1WNzgyMDAtUmV2LVVuc3VwcG9ydGVkIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIkRldmljZS1Vbmtub3duIjsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGlzX2wyX3dyaXRldGhyb3VnaCh2b2lkKQogewogCXJldHVybiAhIShyZWFkbChDUFVfQ09OVFJPTCkgJiBMMl9XUklURVRIUk9VR0gpOwpAQCAtNzM3LDcgKzg2Niw4IEBACiAJZ2V0X3BjbGtfbDJjbGsoaGNsaywgY29yZV9pbmRleCwgJnBjbGssICZsMmNsayk7CiAJdGNsayA9IGdldF90Y2xrKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNVjc4eHgwIGNvcmUgIyVkLCAiLCBjb3JlX2luZGV4KTsKKwlwcmludGsoS0VSTl9JTkZPICIlcyAiLCBtdjc4eHgwX2lkKCkpOworCXByaW50aygiY29yZSAjJWQsICIsIGNvcmVfaW5kZXgpOwogCXByaW50aygiUENMSyA9ICVkTUh6LCAiLCAocGNsayArIDQ5OTk5OSkgLyAxMDAwMDAwKTsKIAlwcmludGsoIkwyID0gJWRNSHosICIsIChsMmNsayArIDQ5OTk5OSkgLyAxMDAwMDAwKTsKIAlwcmludGsoIkhDTEsgPSAlZE1IeiwgIiwgKGhjbGsgKyA0OTk5OTkpIC8gMTAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmgKaW5kZXggNzhhZjVkZS4uYmVmYzIyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uaApAQCAtMjksNiArMjksOCBAQAogdm9pZCBtdjc4eHgwX3NldHVwX3BjaWVfbWVtX3dpbihpbnQgd2luZG93LCB1MzIgYmFzZSwgdTMyIHNpemUsCiAJCQkJaW50IG1haiwgaW50IG1pbik7CiAKK3ZvaWQgbXY3OHh4MF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldik7CisKIHZvaWQgbXY3OHh4MF9laGNpMF9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX2VoY2kxX2luaXQodm9pZCk7CiB2b2lkIG12Nzh4eDBfZWhjaTJfaW5pdCh2b2lkKTsKQEAgLTQyLDYgKzQ0LDcgQEAKIHZvaWQgbXY3OHh4MF91YXJ0MV9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX3VhcnQyX2luaXQodm9pZCk7CiB2b2lkIG12Nzh4eDBfdWFydDNfaW5pdCh2b2lkKTsKK3ZvaWQgbXY3OHh4MF9pMmNfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbXY3OHh4MF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMKaW5kZXggMmUyODViYi4uZWZkYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvZGI3OHgwMC1icC1zZXR1cC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yOCwyMSArMjksMjIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX2dlMTBfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfTk9ORSwKLQkuc3BlZWQJCT0gU1BFRURfMTAwMCwKLQkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAorCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX2dlMTFfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfTk9ORSwKLQkuc3BlZWQJCT0gU1BFRURfMTAwMCwKLQkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAorCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDExKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGRiNzh4MDBfc2F0YV9kYXRhID0gewogCS5uX3BvcnRzCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBkYjc4eDAwX2kyY19ydGMgPSB7CisJSTJDX0JPQVJEX0lORk8oImRzMTMzOCIsIDB4NjgpLAorfTsKKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZGI3OHgwMF9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTY0LDYgKzY2LDggQEAKIAkJbXY3OHh4MF9zYXRhX2luaXQoJmRiNzh4MDBfc2F0YV9kYXRhKTsKIAkJbXY3OHh4MF91YXJ0MF9pbml0KCk7CiAJCW12Nzh4eDBfdWFydDJfaW5pdCgpOworCQltdjc4eHgwX2kyY19pbml0KCk7CisJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZkYjc4eDAwX2kyY19ydGMsIDEpOwogCX0gZWxzZSB7CiAJCW12Nzh4eDBfdWFydDFfaW5pdCgpOwogCQltdjc4eHgwX3VhcnQzX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKaW5kZXggZTkzMGVhNS4uNTgyY2ZmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKQEAgLTgwLDYgKzgwLDE4IEBACiAjZGVmaW5lICBUSU1FUl9WSVJUX0JBU0UJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAzMDApCiAKIC8qCisgKiBTdXBwb3J0ZWQgZGV2aWNlcyBhbmQgcmV2aXNpb25zLgorICovCisjZGVmaW5lIE1WNzhYMDBfWjBfREVWX0lECTB4NjM4MQorI2RlZmluZSBNVjc4WDAwX1JFVl9aMAkJMQorCisjZGVmaW5lIE1WNzgxMDBfREVWX0lECQkweDc4MTAKKyNkZWZpbmUgTVY3ODEwMF9SRVZfQTAJCTEKKworI2RlZmluZSBNVjc4MjAwX0RFVl9JRAkJMHg3ODIwCisjZGVmaW5lIE1WNzgyMDBfUkVWX0EwCQkxCisKKy8qCiAgKiBSZWdpc3RlciBNYXAKICAqLwogI2RlZmluZSBERFJfVklSVF9CQVNFCQkoTVY3OFhYMF9SRUdTX1ZJUlRfQkFTRSB8IDB4MDAwMDApCkBAIC05MCw2ICsxMDIsOCBAQAogI2RlZmluZSBERVZfQlVTX1ZJUlRfQkFTRQkoTVY3OFhYMF9SRUdTX1ZJUlRfQkFTRSB8IDB4MTAwMDApCiAjZGVmaW5lICBTQU1QTEVfQVRfUkVTRVRfTE9XCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzMCkKICNkZWZpbmUgIFNBTVBMRV9BVF9SRVNFVF9ISUdICShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzNCkKKyNkZWZpbmUgIEkyQ18wX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDEwMDApCisjZGVmaW5lICBJMkNfMV9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgxMTAwKQogI2RlZmluZSAgVUFSVDBfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjAwMCkKICNkZWZpbmUgIFVBUlQwX1ZJUlRfQkFTRQkoREVWX0JVU19WSVJUX0JBU0UgfCAweDIwMDApCiAjZGVmaW5lICBVQVJUMV9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgyMTAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggN2Q1MTc5NC4uMWQ2MzUwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgc29mdCByZXNldCB0byBhc3NlcnQgUlNUT1VUbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcGNpZS5jCmluZGV4IGFhZDNhN2EuLmE1NjA0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3BjaWUuYwpAQCAtMzMsNiArMzMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpZV9tZW1fc3BhY2U7CiAKIAordm9pZCBfX2luaXQgbXY3OHh4MF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldikKK3sKKwkqZGV2ID0gb3Jpb25fcGNpZV9kZXZfaWQoKHZvaWQgX19pb21lbSAqKVBDSUUwMF9WSVJUX0JBU0UpOworCSpyZXYgPSBvcmlvbl9wY2llX3Jldigodm9pZCBfX2lvbWVtICopUENJRTAwX1ZJUlRfQkFTRSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtdjc4eHgwX3BjaWVfcHJlaW5pdCh2b2lkKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcmQ3OHgwMC1tYXNhLXNldHVwLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbXY3OHgwMC9yZDc4eDAwLW1hc2Etc2V0dXAuYworICoKKyAqIE1hcnZlbGwgUkQtNzh4MDAtbUFTQSBEZXZlbG9wbWVudCBCb2FyZCBTZXR1cAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDc4eDAwX21hc2FfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkNzh4MDBfbWFzYV9nZTAxX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOSksCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX2dlMTBfZGF0YSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDc4eDAwX21hc2FfZ2UxMV9kYXRhID0geworfTsKKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmQ3OHgwMF9tYXNhX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIE1WNzh4MDAgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwltdjc4eHgwX2luaXQoKTsKKworCS8qCisJICogUGFydGl0aW9uIG9uLWNoaXAgcGVyaXBoZXJhbHMgYmV0d2VlbiB0aGUgdHdvIENQVSBjb3Jlcy4KKwkgKi8KKwlpZiAobXY3OHh4MF9jb3JlX2luZGV4KCkgPT0gMCkgeworCQltdjc4eHgwX2VoY2kwX2luaXQoKTsKKwkJbXY3OHh4MF9laGNpMV9pbml0KCk7CisJCW12Nzh4eDBfZ2UwMF9pbml0KCZyZDc4eDAwX21hc2FfZ2UwMF9kYXRhKTsKKwkJbXY3OHh4MF9nZTEwX2luaXQoJnJkNzh4MDBfbWFzYV9nZTEwX2RhdGEpOworCQltdjc4eHgwX3NhdGFfaW5pdCgmcmQ3OHgwMF9tYXNhX3NhdGFfZGF0YSk7CisJCW12Nzh4eDBfdWFydDBfaW5pdCgpOworCQltdjc4eHgwX3VhcnQyX2luaXQoKTsKKwl9IGVsc2UgeworCQltdjc4eHgwX2VoY2kyX2luaXQoKTsKKwkJbXY3OHh4MF9nZTAxX2luaXQoJnJkNzh4MDBfbWFzYV9nZTAxX2RhdGEpOworCQltdjc4eHgwX2dlMTFfaW5pdCgmcmQ3OHgwMF9tYXNhX2dlMTFfZGF0YSk7CisJCW12Nzh4eDBfdWFydDFfaW5pdCgpOworCQltdjc4eHgwX3VhcnQzX2luaXQoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJkNzh4MDBfcGNpX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEFzc2lnbiBhbGwgUENJZSBkZXZpY2VzIHRvIENQVSBjb3JlICMwLgorCSAqLworCWlmIChtYWNoaW5lX2lzX3JkNzh4MDBfbWFzYSgpICYmIG12Nzh4eDBfY29yZV9pbmRleCgpID09IDApCisJCW12Nzh4eDBfcGNpZV9pbml0KDEsIDEpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwocmQ3OHgwMF9wY2lfaW5pdCk7CisKK01BQ0hJTkVfU1RBUlQoUkQ3OFgwMF9NQVNBLCAiTWFydmVsbCBSRC03OHgwMC1NQVNBIERldmVsb3BtZW50IEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4gKi8KKwkucGh5c19pbwk9IE1WNzhYWDBfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChNVjc4WFgwX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gcmQ3OHgwMF9tYXNhX2luaXQsCisJLm1hcF9pbwkJPSBtdjc4eHgwX21hcF9pbywKKwkuaW5pdF9pcnEJPSBtdjc4eHgwX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbXY3OHh4MF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZwppbmRleCAyYjU5ZmM3Li5lYjc2NjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBpZiBBUkNIX01YMQogCi1jb21tZW50ICJNWDEgUGxhdGZvcm1zIgorY29tbWVudCAiTVgxIHBsYXRmb3JtczoiCiAKIGNvbmZpZyBNQUNIX01YTEFEUwogCWJvb2wKQEAgLTExLDQgKzExLDkgQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgTW90b3JvbGEgTVgxQURTL01YTEFEUyBib2FyZHMKIAorY29uZmlnIE1BQ0hfU0NCOTMyOAorCWJvb2wgIlN5bmVydHJvbml4eCBzY2I5MzI4IgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhIFN5bmVydHJvbml4eCBzY2I5MzI4IGJvYXJkCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCmluZGV4IGI5Njk3MTkuLjgyZjEzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19BUkNIX01YMUFEUykgKz0gbXgxYWRzLm8KK29iai0kKENPTkZJR19NQUNIX1NDQjkzMjgpICs9IHNjYjkzMjgubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCmluZGV4IDRiY2QxZWMuLjBkMGYzMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgImNybV9yZWdzLmgiCiAKIHN0YXRpYyBpbnQgX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQpAQCAtODcsMzMgKzg4LDYgQEAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnNldF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKIH0KIAotLyoKLSAqICBnZXQgdGhlIHN5c3RlbSBwbGwgY2xvY2sgaW4gSHoKLSAqCi0gKiAgICAgICAgICAgICAgICAgIG1maSArIG1mbiAvIChtZmQgKzEpCi0gKiAgZiA9IDIgKiBmX3JlZiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHBkICsgMQotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBteDFfZGVjb2RlX3BsbCh1bnNpZ25lZCBpbnQgcGxsLCB1MzIgZl9yZWYpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxsOwotCXVuc2lnbmVkIGxvbmcgcXVvdDsKLQotCXUzMiBtZmkgPSAocGxsID4+IDEwKSAmIDB4ZjsKLQl1MzIgbWZuID0gcGxsICYgMHgzZmY7Ci0JdTMyIG1mZCA9IChwbGwgPj4gMTYpICYgMHgzZmY7Ci0JdTMyIHBkID0gIChwbGwgPj4gMjYpICYgMHhmOwotCi0JbWZpID0gbWZpIDw9IDUgPyA1IDogbWZpOwotCi0JbGwgPSAyICogKHVuc2lnbmVkIGxvbmcgbG9uZylmX3JlZiAqCi0JCSgobWZpIDw8IDE2KSArIChtZm4gPDwgMTYpIC8gKG1mZCArIDEpKTsKLQlxdW90ID0gKHBkICsgMSkgKiAoMSA8PCAxNik7Ci0JbGwgKz0gcXVvdCAvIDI7Ci0JZG9fZGl2KGxsLCBxdW90KTsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbGw7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsazE2bV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE2MDAwMDAwOwpAQCAtMTg4LDcgKzE2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBteDFfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fU1BDVEwwKSwKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCksCiAJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKIH0KIApAQCAtMjAwLDcgKzE3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1jdV9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBteDFfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fTVBDVEwwKSwKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCksCiAJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKIH0KIApAQCAtNDg4LDcgKzQ2Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYV9jbGsiLAorCS5uYW1lID0gImRtYSIsCiAJLnBhcmVudCA9ICZoY2xrLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTUzOSw3ICs1MTMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7Ci0JLm5hbWUgPSAidWFydF9jbGsiLAorCS5uYW1lID0gInVhcnQiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzBdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTYyMSw3ICs1OTUsNyBAQAogCSZydGNfY2xrLAogfTsKIAotaW50IF9faW5pdCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQoraW50IF9faW5pdCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXN0cnVjdCBjbGsgKipjbGtwOwogCXVuc2lnbmVkIGludCByZWc7CkBAIC02NTIsNSArNjI2LDcgQEAKIAljbGtfZW5hYmxlKCZoY2xrKTsKIAljbGtfZW5hYmxlKCZmY2xrKTsKIAorCW14Y190aW1lcl9pbml0KCZncHRfY2xrKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCmluZGV4IGE5NTY0NDEuLjk3ZjQyZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKQEAgLTIzLDEwICsyMywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X2NzaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCAgPSAweDAwMjI0MDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwppbmRleCAzMjAwY2Y2Li43YWUyMjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2Y4NTd4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTI1LDcgKzI3LDExIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLW14Mi5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2lmZGVmIENPTkZJR19JMkNfSU1YCisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCkBAIC0xMDUsNiArMTExLDU1IEBACiB9OwogCiAvKgorICogSTJDCisgKi8KKworI2lmZGVmIENPTkZJR19JMkNfSU1YCitzdGF0aWMgaW50IGkyY19waW5zW10gPSB7CisJUEExNV9QRl9JMkNfU0RBLAorCVBBMTZfUEZfSTJDX1NDTCwKK307CisKK3N0YXRpYyBpbnQgaTJjX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGkyY19waW5zLAorCQkJQVJSQVlfU0laRShpMmNfcGlucyksICJJMkMiKTsKK30KKworc3RhdGljIHZvaWQgaTJjX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhpMmNfcGlucywKKwkJCUFSUkFZX1NJWkUoaTJjX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmODU3eF9kYXRhW10gPSB7CisJeworCQkuZ3Bpb19iYXNlID0gNCAqIDMyLAorCX0sIHsKKwkJLmdwaW9fYmFzZSA9IDQgKiAzMiArIDE2LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgxYWRzX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorCS5pbml0ID0gaTJjX2luaXQsCisJLmV4aXQgPSBpMmNfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbXgxYWRzX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU3eCIsIDB4MjIpLAorCQkudHlwZSA9ICJwY2Y4NTc1IiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzBdLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1N3giLCAweDI0KSwKKwkJLnR5cGUgPSAicGNmODU3NSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVsxXSwKKwl9LAorfTsKKyNlbmRpZgorCisvKgogICogQm9hcmQgaW5pdAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX2luaXQodm9pZCkKQEAgLTExNSwxMiArMTcwLDE5IEBACiAKIAkvKiBQaHlzbWFwIGZsYXNoICovCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmZmxhc2hfZGV2aWNlLCAmbXgxYWRzX2ZsYXNoX2RhdGEpOworCisJLyogSTJDICovCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBteDFhZHNfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteDFhZHNfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9pMmNfZGV2aWNlLCAmbXgxYWRzX2kyY19kYXRhKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMzIwMDApOwotCW14Y190aW1lcl9pbml0KCJncHRfY2xrIik7CisJbXgxX2Nsb2Nrc19pbml0KDMyMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBteDFhZHNfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMgYi9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3MWYzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYWhhdWVyQHdlYi5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEp1ZXJnZW4gQmVpc2VydCA8amJlaXNlcnRAbmV0c2NhcGUubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoKKyAqIFRoaXMgc2NiOTMyOCBoYXMgYSAzMk1pQiBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IElNWF9DUzBfUEhZUywKKwkuZW5kCT0gSU1YX0NTMF9QSFlTICsgKDMyICogMTAyNCAqIDEwMjQpIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNjYl9mbGFzaF9kYXRhID0geworCS53aWR0aCAgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NiX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2NiX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworLyoKKyAqIHNjYjkzMjggaGFzIGEgRE05MDAwIG5ldHdvcmsgY29udHJvbGxlcgorICogY29ubmVjdGVkIHRvIENTNSwgd2l0aCAxNiBiaXQgZGF0YSBwYXRoCisgKiBhbmQgaW50ZXJydXB0IGNvbm5lY3RlZCB0byBHUElPIDMKKyAqLworCisvKgorICogaW50ZXJuYWwgZGF0YXBhdGggaXMgZml4ZWQgMTYgYml0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTkwMDBfcGxhdGRhdGEgPSB7CisJLmZsYWdzCT0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKK307CisKKy8qCisgKiB0aGUgRE05MDAwIGRyaXZlcnMgd2FudHMgdHdvIGRlZmluZWQgYWRkcmVzcyBzcGFjZXMKKyAqIHRvIGdhaW4gYWNjZXNzIHRvIGFkZHJlc3MgbGF0Y2ggcmVnaXN0ZXJzIGFuZCB0aGUgZGF0YSBwYXRoLgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMHhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJhZGRyZXNzIGFyZWEiLAorCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMsCisJCS5lbmQJPSBJTVhfQ1M1X1BIWVMgKyAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQkvKiBhZGRyZXNzIGFjY2VzcyAqLworCX0sCisJWzFdID0geworCQkubmFtZQk9ICJkYXRhIGFyZWEiLAorCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMgKyA0LAorCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogZGF0YSBhY2Nlc3MgKi8KKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0dQSU9DKDMpLAorCQkuZW5kCT0gSVJRX0dQSU9DKDMpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMHhfZGV2aWNlID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDB4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZG05MDAweF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRtOTAwMF9wbGF0ZGF0YSwKKwl9Cit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJUEM5X1BGX1VBUlQxX0NUUywKKwlQQzEwX1BGX1VBUlQxX1JUUywKKwlQQzExX1BGX1VBUlQxX1RYRCwKKwlQQzEyX1BGX1VBUlQxX1JYRCwKK307CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAiVUFSVDEiKTsKK30KKworc3RhdGljIGludCB1YXJ0MV9teGNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuaW5pdCA9IHVhcnQxX214Y19pbml0LAorCS5leGl0ID0gdWFydDFfbXhjX2V4aXQsCisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NiX2ZsYXNoX2RldmljZSwKKwkmZG05MDAweF9kZXZpY2UsCit9OworCisvKgorICogc2NiOTMyOF9pbml0IC0gSW5pdCB0aGUgQ1BVIGNhcmQgaXRzZWxmCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X2luaXQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDFfZGV2aWNlLCAmdWFydF9wZGF0YSk7CisKKwlwcmludGsoS0VSTl9JTkZPIlNjYjkzMjg6IEFkZGluZyBkZXZpY2VzXG4iKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNjYjkzMjhfdGltZXJfaW5pdCh2b2lkKQoreworCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHNjYjkzMjhfdGltZXIgPSB7CisJLmluaXQJPSBzY2I5MzI4X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFNDQjkzMjgsICJTeW5lcnRyb25peHggc2NiOTMyOCIpCisgICAgLyogU2FzY2hhIEhhdWVyICovCisJLnBoeXNfaW8JPSAweDAwMjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhlMDIwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDgwMDAxMDAsCisJLm1hcF9pbwkJPSBteGNfbWFwX2lvLAorCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkudGltZXIJCT0gJnNjYjkzMjhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHNjYjkzMjhfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZwppbmRleCAxZWFhOTdjLi40MmE3ODg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKQEAgLTEsMTQgKzEsMjIgQEAKLWNvbW1lbnQgIk1YMiBmYW1pbHkgQ1BVIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX01YMgoraWYgQVJDSF9NWDIKKworY2hvaWNlCisJcHJvbXB0ICJDUFVzOiIKKwlkZWZhdWx0IE1BQ0hfTVgyMQorCitjb25maWcgTUFDSF9NWDIxCisJYm9vbCAiaS5NWDIxIHN1cHBvcnQiCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSdzIE1YMiBiYXNlZCBpLk1YMjEgcHJvY2Vzc29yLgogCiBjb25maWcgTUFDSF9NWDI3CiAJYm9vbCAiaS5NWDI3IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX01YMgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDI3IHByb2Nlc3Nvci4KIAotY29tbWVudCAiTVgyIFBsYXRmb3JtcyIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgyCitlbmRjaG9pY2UKKworY29tbWVudCAiTVgyIHBsYXRmb3JtczoiCiAKIGNvbmZpZyBNQUNIX01YMjdBRFMKIAlib29sICJNWDI3QURTIHBsYXRmb3JtIgpAQCAtMzcsMyArNDUsNSBAQAogCSAgUENNOTcwIGV2YWx1YXRpb24gYm9hcmQuCiAKIGVuZGNob2ljZQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQppbmRleCAzODJkODYwLi45NTA2NDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQpAQCAtNCw3ICs0LDkgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJOj0gIHN5c3RlbS5vIGdlbmVyaWMubyBkZXZpY2VzLm8gc2VyaWFsLm8KK29iai15CTo9ICBnZW5lcmljLm8gZGV2aWNlcy5vIHNlcmlhbC5vCisKK29iai0kKENPTkZJR19NQUNIX01YMjEpICs9IGNsb2NrX2lteDIxLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfTVgyNykgKz0gY3B1X2lteDI3Lm8KIG9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrX2lteDI3Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZS5ib290CmluZGV4IDY5NjgzMWQuLmU4NjczOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdApAQCAtMSwzICsxLDcgQEAKLSAgIHpyZWxhZGRyLXkJOj0gMHhBMDAwODAwMAotcGFyYW1zX3BoeXMteQk6PSAweEEwMDAwMTAwCi1pbml0cmRfcGh5cy15CTo9IDB4QTA4MDAwMDAKK3pyZWxhZGRyLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfTUFDSF9NWDIxKQk6PSAweEMwMDAwMTAwCitpbml0cmRfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzA4MDAwMDAKKworenJlbGFkZHItJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTAwMDAxMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlZTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImNybV9yZWdzLmgiCisKK3N0YXRpYyBpbnQgX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBfY2xrX3NwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyB8PSBDQ01fQ1NDUl9TUEVOOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKKworCXdoaWxlICgoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMSkgJiBDQ01fU1BDVEwxX0xGKSA9PSAwKQorCQk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfc3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyAmPSB+Q0NNX0NTQ1JfU1BFTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Cit9CisKKworI2RlZmluZSBDU0NSKCkgKF9fcmF3X3JlYWRsKENDTV9DU0NSKSkKKyNkZWZpbmUgUENEUjAoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSkKKyNkZWZpbmUgUENEUjEoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKKwkJZGl2Kys7CisKKwlpZiAoZGl2ID4gNjQpCisJCWRpdiA9IDY0OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgaW50IF9jbGtfcGVyY2xreF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnOworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPmlkIDwgMCB8fCBjbGstPmlkID4gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKGRpdiA+IDY0IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWRpdi0tOworCisJcmVnID0KKwkgICAgX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSAmIH4oQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSyA8PAorCQkJCSAgICAgICAoY2xrLT5pZCA8PCAzKSk7CisJcmVnIHw9IGRpdiA8PCAoY2xrLT5pZCA8PCAzKTsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfdXNiX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB1c2JfcGRmOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwl1c2JfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYl9wZGYgKyAxVSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpeF9yZWNhbGMoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcGRmID0gKHBkZiA8IDIpID8gMTI0VUwgOiBwZGY7ICAvKiBNWDIxICYgTVgyNyBUTzEgKi8KKworCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIHBkZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2kxX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIF9jbGtfc3NpeF9yZWNhbGMoY2xrLAorCQkoUENEUjAoKSAmIENDTV9QQ0RSMF9TU0kxQkFVRERJVl9NQVNLKQorCQk+PiBDQ01fUENEUjBfU1NJMUJBVURESVZfT0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2kyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIF9jbGtfc3NpeF9yZWNhbGMoY2xrLAorCQkoUENEUjAoKSAmIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9NQVNLKSA+PgorCQlDQ01fUENEUjBfU1NJMkJBVURESVZfT0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19uZmNfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG5mY19wZGY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCW5mY19wZGYgPSAoUENEUjAoKSAmIENDTV9QQ0RSMF9ORkNESVZfTUFTSykKKwkJPj4gQ0NNX1BDRFIwX05GQ0RJVl9PRkZTRVQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BhcmVudF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGstPnBhcmVudC0+cm91bmRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wYXJlbnRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5zZXRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOyAvKiBpbiBIeiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOworfQorCisvKgorICogdGhlIGhpZ2ggZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQorICogRGVmYXVsdCBjYXNlIGlzIDI2TUh6LgorICovCitzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7IC8qIGluIEh6ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9sb3dfcmVmZXJlbmNlX2Nsb2NrX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOworfQorCisvKgorICogdGhlIGxvdyBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCisgKiBEZWZhdWx0IGNhc2UgaXMgMzIuNzY4a0h6LgorICovCitzdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2ZwbV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogNTEyOworfQorCisvKiBPdXRwdXQgb2YgZnJlcXVlbmN5IHByZSBtdWx0aXBsaWVyICovCitzdGF0aWMgc3RydWN0IGNsayBmcG1fY2xrID0geworCS5wYXJlbnQgPSAmY2tpbF9jbGssCisJLmdldF9yYXRlID0gX2Nsa19mcG1fcmVjYWxjLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X21wbGxfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyByZWZfY2xrOworCXVuc2lnbmVkIGxvbmcgbWZpID0gMCwgbWZuID0gMCwgbWZkID0gMCwgcGRmID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKKworCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCk7CisJcGRmID0gKHJlZyAmIENDTV9NUENUTDBfUERfTUFTSykgID4+IENDTV9NUENUTDBfUERfT0ZGU0VUOworCW1mZCA9IChyZWcgJiBDQ01fTVBDVEwwX01GRF9NQVNLKSA+PiBDQ01fTVBDVEwwX01GRF9PRkZTRVQ7CisJbWZpID0gKHJlZyAmIENDTV9NUENUTDBfTUZJX01BU0spID4+IENDTV9NUENUTDBfTUZJX09GRlNFVDsKKwltZm4gPSAocmVnICYgQ0NNX01QQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX01QQ1RMMF9NRk5fT0ZGU0VUOworCisJbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47CisJZG9fZGl2KHRlbXAsIG1mZCArIDEpOworCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKKwlkb19kaXYodGVtcCwgcGRmICsgMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfbXBsbF9jbGssCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2ZjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisJdTMyIGRpdjsKKworCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9QUkVTQ19NQVNLKSA+PiBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQ7CisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdisxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgZmNsa19jbGsgPSB7CisJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkuZ2V0X3JhdGUgPSBfY2xrX2ZjbGtfZ2V0X3JhdGUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdWludDMyX3QgcmVnOworCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKKwl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CisKKwlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOworCXBkZiA9IChyZWcgJiBDQ01fU1BDVEwwX1BEX01BU0spID4+IENDTV9TUENUTDBfUERfT0ZGU0VUOworCW1mZCA9IChyZWcgJiBDQ01fU1BDVEwwX01GRF9NQVNLKSA+PiBDQ01fU1BDVEwwX01GRF9PRkZTRVQ7CisJbWZpID0gKHJlZyAmIENDTV9TUENUTDBfTUZJX01BU0spID4+IENDTV9TUENUTDBfTUZJX09GRlNFVDsKKwltZm4gPSAocmVnICYgQ0NNX1NQQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRk5fT0ZGU0VUOworCisJbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47CisJZG9fZGl2KHRlbXAsIG1mZCArIDEpOworCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKKwlkb19kaXYodGVtcCwgcGRmICsgMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgc3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfc3BsbF9jbGssCisJLmVuYWJsZSA9IF9jbGtfc3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX3NwbGxfZGlzYWJsZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9oY2xrX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgYmNsa19wZGY7CisKKwliY2xrX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9CQ0xLX01BU0spCisJCT4+IENDTV9DU0NSX0JDTEtfT0ZGU0VUOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoYmNsa19wZGYgKyAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaGNsa19jbGsgPSB7CisJLnBhcmVudCA9ICZmY2xrX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfaGNsa19jbGssCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaXBnX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgaXBnX3BkZjsKKworCWlwZ19wZGYgPSAoQ1NDUigpICYgQ0NNX0NTQ1JfSVBESVYpID4+IENDTV9DU0NSX0lQRElWX09GRlNFVDsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGlwZ19wZGYgKyAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKKwkucGFyZW50ID0gJmhjbGtfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9pcGdfY2xrLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZXJjbGtfcGRmOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCisJCXJldHVybiAwOworCisJcGVyY2xrX3BkZiA9IChQQ0RSMSgpID4+IChjbGstPmlkIDw8IDMpKSAmIENDTV9QQ0RSMV9QRVJESVYxX01BU0s7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBwZXJfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwkJLyogRW5hYmxlL0Rpc2FibGUgZG9uZSB2aWEgbGNkX2Nsa2NbMV0gKi8KKwl9LCB7CisJCS5pZCA9IDMsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwkJLyogRW5hYmxlL0Rpc2FibGUgZG9uZSB2aWEgY3NpX2Nsa1sxXSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZ1YXJ0X2lwZ19jbGtbMF0sCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmdWFydF9pcGdfY2xrWzFdLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJnVhcnRfaXBnX2Nsa1syXSwKKwl9LCB7CisJCS5pZCA9IDMsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZ1YXJ0X2lwZ19jbGtbM10sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfVUFSVDFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1VBUlQyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1VBUlQyX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VQVJUM19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9VQVJUM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMywKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfVUFSVDRfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzFdLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzJdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHRfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfR1BUMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9HUFQxX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9HUFQyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0dQVDJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0dQVDNfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfR1BUM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwd21fY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmcHdtX2Nsa1sxXSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1BXTV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9QV01fT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19pcGdfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmc2RoY19pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAorCQkuc2Vjb25kYXJ5ID0gJnNkaGNfaXBnX2Nsa1sxXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19pcGdfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9TREhDMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TREhDMV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU0RIQzJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9pcGdfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzcGlfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmY3NwaV9pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAorCQkuc2Vjb25kYXJ5ID0gJmNzcGlfaXBnX2Nsa1sxXSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1sxXSwKKwkJLnNlY29uZGFyeSA9ICZjc3BpX2lwZ19jbGtbMl0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzcGlfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfQ1NQSTFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfQ1NQSTFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0NTUEkyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0NTUEkyX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAzLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9DU1BJM19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9DU1BJM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsY2RjX2Nsa1tdID0geworCXsKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzJdLAorCQkuc2Vjb25kYXJ5ID0gJmxjZGNfY2xrWzFdLAorCQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorCX0sIHsKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuc2Vjb25kYXJ5ID0gJmxjZGNfY2xrWzJdLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfTENEQ19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9MQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19MQ0RDX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfTENEQ19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjc2lfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnBlcl9jbGtbM10sCisJCS5zZWNvbmRhcnkgPSAmY3NpX2Nsa1sxXSwKKwkJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCQkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX0NTSV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9IQ0xLX0NTSV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnNwbGxfY2xrLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3VzYl9yZWNhbGMsCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VU0JPVEdfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19VU0JPVEdfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19VU0JPVEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfaXBnX2Nsa1tdOworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuc2Vjb25kYXJ5ID0gJnNzaV9pcGdfY2xrWzBdLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3NzaTFfcmVjYWxjLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU1NJMV9CQVVEX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLnNlY29uZGFyeSA9ICZzc2lfaXBnX2Nsa1sxXSwKKwkJLmdldF9yYXRlID0gX2Nsa19zc2kyX3JlY2FsYywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTJfQkFVRF9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2lwZ19jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU1NJMV9JUEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU1NJMl9JUEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayBuZmNfY2xrID0geworCS5wYXJlbnQgPSAmZmNsa19jbGssCisJLmdldF9yYXRlID0gX2Nsa19uZmNfcmVjYWxjLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX05GQ19SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX05GQ19PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfRE1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0RNQV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCQkuc2Vjb25kYXJ5ID0gJmRtYV9jbGtbMV0sCisJfSwgIHsKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0hDTEtfRE1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfRE1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJyb21fY2xrID0geworCS5wYXJlbnQgPSAmaGNsa19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19CUk9NX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtbWFfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfRU1NQV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9FTU1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJCS5zZWNvbmRhcnkgPSAmZW1tYV9jbGtbMV0sCisJfSwgeworCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19FTU1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNsY2RjX2Nsa1tdID0geworCXsKKwkJLnBhcmVudCA9ICZoY2xrX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NMQ0RDX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJCS5zZWNvbmRhcnkgPSAmc2xjZGNfY2xrWzFdLAorCX0sIHsKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0hDTEtfU0xDRENfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19TTENEQ19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkb2dfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9XRFRfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9XRFRfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb19jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0dQSU9fUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9HUElPX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGsgPSB7CisJLmlkID0gMCwKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSTJDMV9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0kyQzFfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsga3BwX2NsayA9IHsKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfS1BQX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfS1BQX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG93aXJlX2NsayA9IHsKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfT1dJUkVfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9PV0lSRV9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9SVENfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9SVENfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jbGtvX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAocGFyZW50X3JhdGUgJSByYXRlKQorCQlkaXYrKzsKKworCWlmIChkaXYgPiA4KQorCQlkaXYgPSA4OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgaW50IF9jbGtfY2xrb19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnOworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWRpdi0tOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKTsKKworCWlmIChjbGstPnBhcmVudCA9PSAmdXNiX2Nsa1swXSkgeworCQlyZWcgJj0gfkNDTV9QQ0RSMF80OE1ESVZfTUFTSzsKKwkJcmVnIHw9IGRpdiA8PCBDQ01fUENEUjBfNDhNRElWX09GRlNFVDsKKwl9CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Nsa29fcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+cGFyZW50ID09ICZ1c2JfY2xrWzBdKSAvKiA0OE0gKi8KKwkJZGl2ID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSAmIENDTV9QQ0RSMF80OE1ESVZfTUFTSworCQkJID4+IENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUOworCWRpdisrOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtvX2NsazsKKworc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NDU1IpICYgfkNDTV9DQ1NSX0NMS09TRUxfTUFTSzsKKworCWlmIChwYXJlbnQgPT0gJmNraWxfY2xrKQorCQlyZWcgfD0gMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmZwbV9jbGspCisJCXJlZyB8PSAxIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tpaF9jbGspCisJCXJlZyB8PSAyIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSBtcGxsX2Nsay5wYXJlbnQpCisJCXJlZyB8PSAzIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSBzcGxsX2Nsay5wYXJlbnQpCisJCXJlZyB8PSA0IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmbXBsbF9jbGspCisJCXJlZyB8PSA1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmc3BsbF9jbGspCisJCXJlZyB8PSA2IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmZmNsa19jbGspCisJCXJlZyB8PSA3IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmaGNsa19jbGspCisJCXJlZyB8PSA4IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmaXBnX2NsaykKKwkJcmVnIHw9IDkgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzBdKQorCQlyZWcgfD0gMHhBIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1sxXSkKKwkJcmVnIHw9IDB4QiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMl0pCisJCXJlZyB8PSAweEMgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzNdKQorCQlyZWcgfD0gMHhEIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmc3NpX2Nsa1swXSkKKwkJcmVnIHw9IDB4RSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnNzaV9jbGtbMV0pCisJCXJlZyB8PSAweEYgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZuZmNfY2xrKQorCQlyZWcgfD0gMHgxMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnVzYl9jbGtbMF0pCisJCXJlZyB8PSAweDE0IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrb19jbGspCisJCXJlZyB8PSAweDE1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ0NTUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrb19jbGsgPSB7CisJLmdldF9yYXRlID0gX2Nsa19jbGtvX3JlY2FsYywKKwkuc2V0X3JhdGUgPSBfY2xrX2Nsa29fc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBfY2xrX2Nsa29fcm91bmRfcmF0ZSwKKwkuc2V0X3BhcmVudCA9IF9jbGtfY2xrb19zZXRfcGFyZW50LAorfTsKKworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisvKiBJdCdzIHVubGlrZWx5IHRoYXQgYW55IGRyaXZlciB3YW50cyBvbmUgb2YgdGhlbSBkaXJlY3RseToKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWgiLCBja2loX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWwiLCBja2lsX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImZwbSIsIGZwbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtcGxsIiwgbXBsbF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzcGxsIiwgc3BsbF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJmY2xrIiwgZmNsa19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGNsa19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpcGciLCBpcGdfY2xrKQorKi8KKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInBlcmNsazEiLCBwZXJfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicGVyY2xrMiIsIHBlcl9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwZXJjbGszIiwgcGVyX2Nsa1syXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInBlcmNsazQiLCBwZXJfY2xrWzNdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2xrbyIsIGNsa29fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnRfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnRfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMyIsIE5VTEwsIHVhcnRfY2xrWzNdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MSIsIGdwdF9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQxIiwgZ3B0X2Nsa1sxXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDEiLCBncHRfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMxIiwgc2RoY19jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZGhjMiIsIHNkaGNfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTEiLCBjc3BpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkyIiwgY3NwaV9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGlfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibGNkYyIsIGxjZGNfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYiIsIHVzYl9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kxIiwgc3NpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTIiLCBzc2lfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibmZjIiwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImRtYSIsIGRtYV9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJicm9tIiwgYnJvbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbW1hIiwgZW1tYV9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzbGNkYyIsIHNsY2RjX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImkyYyIsIGkyY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMta2V5cGFkIiwgTlVMTCwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm93aXJlIiwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKK307CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGF2YWlsYWJsZSBjbG9jayByYXRlIHdoZW4gdGhlIHRpbWVyIGZyYW1ld29yayBzdGFydHMKKyAqLworaW50IF9faW5pdCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBocmVmKQoreworCWludCBpOworCXUzMiBjc2NyOworCisJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGxyZWY7CisJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBocmVmOworCisJLyogZGV0ZWN0IGNsb2NrIHJlZmVyZW5jZSBmb3IgYm90aCBzeXN0ZW0gUExMICovCisJY3NjciA9IENTQ1IoKTsKKwlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKKwkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOworCWVsc2UKKwkJbXBsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CisKKwlpZiAoY3NjciAmIENDTV9DU0NSX1NQKQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7CisJZWxzZQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJLyogVHVybiBvZmYgYWxsIGNsb2NrIGdhdGVzICovCisJX19yYXdfd3JpdGVsKDAsIENDTV9QQ0NSMCk7CisJX19yYXdfd3JpdGVsKENDTV9QQ0NSX0dQVDFfTUFTSywgQ0NNX1BDQ1IxKTsKKworCS8qIFRoaXMgdHVybnMgb2YgdGhlIHNlcmlhbCBQTEwgYXMgd2VsbCAqLworCXNwbGxfY2xrLmRpc2FibGUoJnNwbGxfY2xrKTsKKworCS8qIFRoaXMgd2lsbCBwcm9wYWdhdGUgdG8gYWxsIGNoaWxkcmVuIGFuZCBpbml0IGFsbCB0aGUgY2xvY2sgcmF0ZXMuICovCisJY2xrX2VuYWJsZSgmcGVyX2Nsa1swXSk7CisJY2xrX2VuYWJsZSgmZ3Bpb19jbGspOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMX0NPTlNPTEUKKwljbGtfZW5hYmxlKCZ1YXJ0X2Nsa1swXSk7CisjZW5kaWYKKworCW14Y190aW1lcl9pbml0KCZncHRfY2xrWzBdKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCmluZGV4IGM2OTg5NmQuLjNmNzI4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjAsMjMgKzIxLDYwIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKy8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ0NNX0NTQ1IgICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDApCisjZGVmaW5lIENDTV9NUENUTDAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHg0KQorI2RlZmluZSBDQ01fTVBDVEwxICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4OCkKKyNkZWZpbmUgQ0NNX1NQQ1RMMCAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweEMpCisjZGVmaW5lIENDTV9TUENUTDEgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxMCkKKyNkZWZpbmUgQ0NNX09TQzI2TUNUTCAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDE0KQorI2RlZmluZSBDQ01fUENEUjAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MTgpCisjZGVmaW5lIENDTV9QQ0RSMSAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxYykKKyNkZWZpbmUgQ0NNX1BDQ1IwICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDIwKQorI2RlZmluZSBDQ01fUENDUjEgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MjQpCisjZGVmaW5lIENDTV9DQ1NSICAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyOCkKKyNkZWZpbmUgQ0NNX1BNQ1RMICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDJjKQorI2RlZmluZSBDQ01fUE1DT1VOVCAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MzApCisjZGVmaW5lIENDTV9XS0dEQ1RMICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzNCkKIAotc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbl9jbGtbXTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwbGxfY2xrOworI2RlZmluZSBDQ01fQ1NDUl9VUERBVEVfRElTCSgxIDw8IDMxKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kyCQkoMSA8PCAyMykKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMQkJKDEgPDwgMjIpCisjZGVmaW5lIENDTV9DU0NSX1ZQVQkJKDEgPDwgMjEpCisjZGVmaW5lIENDTV9DU0NSX01TSEMgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENDTV9DU0NSX1NQICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBDQ01fQ1NDUl9NQ1UgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNRElWICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ0NNX0NTQ1JfRlBNICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ0NNX0NTQ1JfU1BFTiAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBFTiAgICAgICAgICAgKDEgPDwgMCkKIAotc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCisvKiBpLk1YMjcgVE8gMisgKi8KKyNkZWZpbmUgQ0NNX0NTQ1JfQVJNX1NSQyAgICAgICAgKDEgPDwgMTUpCisKKyNkZWZpbmUgQ0NNX1NQQ1RMMV9MRiAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIENDTV9TUENUTDFfQlJNTyAgICAgICAgICgxIDw8IDYpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrLCBtcGxsX21haW4yX2NsazsKKworc3RhdGljIGludCBjbGtfcGNjcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybiAwOworCiAJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKIAlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwpAQCAtNDQsMTYgKzgyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBjbGtfcGNjcl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHJlZzsKIAorCWlmICghY2xrLT5lbmFibGVfcmVnKQorCQlyZXR1cm47CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19zcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IGNsa19zcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyByZWc7CiAKQEAgLTYxLDEzICsxMDIsMTIgQEAKIAlyZWcgfD0gQ0NNX0NTQ1JfU1BFTjsKIAlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CiAKLQl3aGlsZSAoKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikgPT0gMCkKLQkJOworCXdoaWxlICghKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfc3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIGNsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCkBAIC03NiwxOTIgKzExNiwzMCBAQAogCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19wY2NyMDFfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbWFzazAsIHVuc2lnbmVkIGxvbmcgbWFzazEpCitzdGF0aWMgaW50IGNsa19jcHVfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnIHw9IG1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyB8PSBtYXNrMTsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjEpOwotCi19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjAxX2Rpc2FibGUodW5zaWduZWQgbG9uZyBtYXNrMCwgdW5zaWduZWQgbG9uZyBtYXNrMSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnICY9IH5tYXNrMDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjApOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IxKTsKLQlyZWcgJj0gfm1hc2sxOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjEwX2VuYWJsZSh1bnNpZ25lZCBsb25nIG1hc2sxLCB1bnNpZ25lZCBsb25nIG1hc2swKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IxKTsKLQlyZWcgfD0gbWFzazE7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IxKTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnIHw9IG1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjEwX2Rpc2FibGUodW5zaWduZWQgbG9uZyBtYXNrMSwgdW5zaWduZWQgbG9uZyBtYXNrMCkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMSk7Ci0JcmVnICY9IH5tYXNrMTsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjEpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IwKTsKLQlyZWcgJj0gfm1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19kbWFfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9lbmFibGUoQ0NNX1BDQ1IwX0RNQV9NQVNLLCBDQ01fUENDUjFfSENMS19ETUFfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19kbWFfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZGlzYWJsZShDQ01fUENDUjBfRE1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0RNQV9NQVNLKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3J0aWNfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9lbmFibGUoQ0NNX1BDQ1IwX1JUSUNfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfUlRJQ19NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX3J0aWNfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZGlzYWJsZShDQ01fUENDUjBfUlRJQ19NQVNLLCBDQ01fUENDUjFfSENMS19SVElDX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfZW1tYV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfRU1NQV9NQVNLLCBDQ01fUENDUjFfSENMS19FTU1BX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfZW1tYV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9FTU1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0VNTUFfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19zbGNkY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfU0xDRENfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0xDRENfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19zbGNkY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9TTENEQ19NQVNLLCBDQ01fUENDUjFfSENMS19TTENEQ19NQVNLKTsKLX0KLQotc3RhdGljIGludCBfY2xrX2ZlY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfRkVDX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0ZFQ19NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2ZlY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9GRUNfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfRkVDX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfdnB1X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyB8PSBDQ01fUENDUjFfVlBVX0JBVURfTUFTSyB8IENDTV9QQ0NSMV9IQ0xLX1ZQVV9NQVNLOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa192cHVfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyAmPSB+KENDTV9QQ0NSMV9WUFVfQkFVRF9NQVNLIHwgQ0NNX1BDQ1IxX0hDTEtfVlBVX01BU0spOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19zYWhhcmEyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZW5hYmxlKENDTV9QQ0NSMF9TQUhBUkFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfc2FoYXJhMl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9TQUhBUkFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfbXN0aWNrMV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjEwX2VuYWJsZShDQ01fUENDUjFfTVNIQ19CQVVEX01BU0ssIENDTV9QQ0NSMF9NU0hDX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfbXN0aWNrMV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IxMF9kaXNhYmxlKENDTV9QQ0NSMV9NU0hDX0JBVURfTUFTSywgQ0NNX1BDQ1IwX01TSENfTUFTSyk7Ci19Ci0KLSNkZWZpbmUgQ1NDUigpIChfX3Jhd19yZWFkbChDQ01fQ1NDUikpCi0jZGVmaW5lIFBDRFIwKCkgKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkpCi0jZGVmaW5lIFBDRFIxKCkgKF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkpCi0KLXN0YXRpYyBpbnQgX2Nsa19jcHVfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQlpbnQgY3NjciA9IENTQ1IoKTsKKwlpbnQgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAogCWlmIChjbGstPnBhcmVudCA9PSBwYXJlbnQpCiAJCXJldHVybiAwOwogCiAJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluX2Nsa1swXSkgeworCQlpZiAocGFyZW50ID09ICZtcGxsX21haW4xX2NsaykgewogCQkJY3NjciB8PSBDQ01fQ1NDUl9BUk1fU1JDOwogCQl9IGVsc2UgewotCQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluX2Nsa1sxXSkKKwkJCWlmIChwYXJlbnQgPT0gJm1wbGxfbWFpbjJfY2xrKQogCQkJCWNzY3IgJj0gfkNDTV9DU0NSX0FSTV9TUkM7CiAJCQllbHNlCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJX19yYXdfd3JpdGVsKGNzY3IsIENDTV9DU0NSKTsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljbGstPnBhcmVudCA9IHBhcmVudDsKLQlyZXR1cm4gMDsKKwkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWludCBkaXY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKQEAgLTI3OCw3ICsxNTYsNyBAQAogCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKIH0KIAotc3RhdGljIGludCBfY2xrX2NwdV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyBpbnQgc2V0X3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXVuc2lnbmVkIGludCBkaXY7CiAJdWludDMyX3QgcmVnOwpAQCAtMjk1LDE5ICsxNzMsMTggQEAKIAogCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgewotCQlyZWcgJj0gfkNDTV9DU0NSX0FSTV9NQVNLOwotCQlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX0FSTV9PRkZTRVQ7Ci0JCXJlZyAmPSB+MHgwNjsKLQkJX19yYXdfd3JpdGVsKHJlZyB8IDB4ODAwMDAwMDAsIENDTV9DU0NSKTsKKwkJcmVnICY9IH4oMyA8PCAxMik7CisJCXJlZyB8PSBkaXYgPDwgMTI7CisJCXJlZyAmPSB+KENDTV9DU0NSX0ZQTSB8IENDTV9DU0NSX1NQRU4pOworCQlfX3Jhd193cml0ZWwocmVnIHwgQ0NNX0NTQ1JfVVBEQVRFX0RJUywgQ0NNX0NTQ1IpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FudCBzZXQgQ1BVIGZyZXF1ZW5jeSFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHNldCBDUFUgZnJlcXVlbmN5IVxuIik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGVyY2xreF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX3BlcihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgZGl2OwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CkBAIC0zMjQsNyArMjAxLDcgQEAKIAlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19wZXJjbGt4X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIGludCBzZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHJlZzsKIAl1MzIgZGl2OwpAQCAtMzQwLDg0ICsyMTcsNjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGl2LS07CiAKLQlyZWcgPQotCSAgICBfX3Jhd19yZWFkbChDQ01fUENEUjEpICYgfihDQ01fUENEUjFfUEVSRElWMV9NQVNLIDw8Ci0JCQkJICAgICAgIChjbGstPmlkIDw8IDMpKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjEpICYgfigweDNmIDw8IChjbGstPmlkIDw8IDMpKTsKIAlyZWcgfD0gZGl2IDw8IChjbGstPmlkIDw8IDMpOwogCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa191c2JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VzYihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyB1c2JfcGRmOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKLQl1c2JfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUOworCXVzYl9wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDI4KSAmIDB4NzsKIAogCXJldHVybiBwYXJlbnRfcmF0ZSAvICh1c2JfcGRmICsgMVUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTFfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKIHsKLQl1bnNpZ25lZCBsb25nIHNzaTFfcGRmOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKLQlzc2kxX3BkZiA9IChQQ0RSMCgpICYgQ0NNX1BDRFIwX1NTSTFCQVVERElWX01BU0spID4+Ci0JCQkJCUNDTV9QQ0RSMF9TU0kxQkFVRERJVl9PRkZTRVQ7Ci0KIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKLQkJc3NpMV9wZGYgKz0gNDsKKwkJcGRmICs9IDQ7ICAvKiBNWDI3IFRPMisgKi8KIAllbHNlCi0JCXNzaTFfcGRmID0gKHNzaTFfcGRmIDwgMikgPyAxMjRVTCA6IHNzaTFfcGRmOworCQlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLwogCi0JcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gc3NpMV9wZGY7CisJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gcGRmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaTEoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGxvbmcgc3NpMl9wZGY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXNzaTJfcGRmID0gKFBDRFIwKCkgJiBDQ01fUENEUjBfU1NJMkJBVURESVZfTUFTSykgPj4KLQkgICAgQ0NNX1BDRFIwX1NTSTJCQVVERElWX09GRlNFVDsKLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQlzc2kyX3BkZiArPSA0OwotCWVsc2UKLQkJc3NpMl9wZGYgPSAoc3NpMl9wZGYgPCAyKSA/IDEyNFVMIDogc3NpMl9wZGY7Ci0KLQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyBzc2kyX3BkZjsKKwlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDE2KSAmIDB4M2YpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX25mY19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMihzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3NzaXgoY2xrLCAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAyNikgJiAweDNmKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbmZjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG5mY19wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKIAogCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCW5mY19wZGYgPQotCQkgICAgKFBDRFIwKCkgJiBDQ01fUENEUjBfTkZDRElWMl9NQVNLKSA+PgotCQkgICAgQ0NNX1BDRFIwX05GQ0RJVjJfT0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5mY19wZGYgPQotCQkgICAgKFBDRFIwKCkgJiBDQ01fUENEUjBfTkZDRElWX01BU0spID4+Ci0JCSAgICBDQ01fUENEUjBfTkZDRElWX09GRlNFVDsKLQl9CisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiA2KSAmIDB4ZjsKKwllbHNlCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMikgJiAweGY7CiAKIAlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3ZwdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdnB1KHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHZwdV9wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKQEAgLTQyNSwyNSArMjgzLDI3IEBACiAJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwogCiAJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJdnB1X3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9WUFVESVYyX01BU0spID4+Ci0JCSAgICBDQ01fUENEUjBfVlBVRElWMl9PRkZTRVQ7CisJCXZwdV9wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMCkgJiAweDNmOwogCQl2cHVfcGRmICs9IDQ7CiAJfSBlbHNlIHsKLQkJdnB1X3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9WUFVESVZfTUFTSykgPj4KLQkJICAgIENDTV9QQ0RSMF9WUFVESVZfT0ZGU0VUOworCQl2cHVfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gOCkgJiAweGY7CiAJCXZwdV9wZGYgPSAodnB1X3BkZiA8IDIpID8gMTI0IDogdnB1X3BkZjsKIAl9CisKIAlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyB2cHVfcGRmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BhcmVudF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfcmF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yb3VuZF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKIH0KIAotc3RhdGljIGludCBfY2xrX3BhcmVudF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JhdGVfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXJldHVybiBjbGstPnBhcmVudC0+c2V0X3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwogfQpAQCAtNDUxLDExMTIgKzMxMSwzODAgQEAKIC8qIGluIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IDI2MDAwMDAwOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9oaWdoX3JlZmVyZW5jZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOwogfQogCisvKiBpbiBIeiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IDMyNzY4OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9sb3dfcmVmZXJlbmNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZnBtKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAqIDEwMjQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGwoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBteGNfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fTVBDVEwwKSwKKwkJCWNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9tcGxsX21haW4oc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwkvKiBpLk1YMjcgVE8yOgorCSAqIGNsay0+aWQgPT0gMDogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDEgd2hpY2ggaXMgZnJvbSAyICogTVBMTCAvIDIKKwkgKiBjbGstPmlkID09IDE6IGFybSBjbG9jayBzb3VyY2UgcGF0aCAyIHdoaWNoIGlzIGZyb20gMiAqIE1QTEwgLyAzCisJICovCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzAgJiYgY2xrLT5pZCA9PSAxKQorCQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyAzVUw7CisKKwlyZXR1cm4gcGFyZW50X3JhdGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NwbGwoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IHJlZzsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOworCisJLyogT24gVE8yIHdlIGhhdmUgdG8gd3JpdGUgdGhlIHZhbHVlIGJhY2suIE90aGVyd2lzZSB3ZQorCSAqIHJlYWQgMCBmcm9tIHRoaXMgcmVnaXN0ZXIgdGhlIG5leHQgdGltZS4KKwkgKi8KKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKKwkJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1NQQ1RMMCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCByYXRlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlkaXYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDEyKSAmIDB4MzsKKwllbHNlCisJCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTMpICYgMHg3OworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoZGl2ICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2FoYihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlLCBiY2xrX3BkZjsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAweDM7CisJZWxzZQorCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOSkgJiAweGY7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4gcmF0ZSAvIChiY2xrX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGcoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSwgaXBnX3BkZjsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwllbHNlCisJCWlwZ19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDgpICYgMTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGlwZ19wZGYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBlcmNsa19wZGYsIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+aWQgPCAwIHx8IGNsay0+aWQgPiAzKQorCQlyZXR1cm4gMDsKKworCXBlcmNsa19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSA+PiAoY2xrLT5pZCA8PCAzKSkgJiAweDNmOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHBlcmNsa19wZGYgKyAxKTsKK30KKwogLyoKICAqIHRoZSBoaWdoIGZyZXF1ZW5jeSBleHRlcm5hbCBjbG9jayByZWZlcmVuY2UKICAqIERlZmF1bHQgY2FzZSBpcyAyNk1Iei4gQ291bGQgYmUgY2hhbmdlZCBhdCBydW50aW1lCiAgKiB3aXRoIGEgY2FsbCB0byBjaGFuZ2VfZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UoKQogICovCiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKLQkubmFtZSA9ICJja2loIiwKLQkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9oaWdoX3JlZmVyZW5jZSwKIH07CiAKLS8qIGluIEh6ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gMzI3Njg7CitzdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsayA9IHsKKwkucGFyZW50CQk9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9tcGxsLAorfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7Ci19CisvKiBGb3IgaS5NWDI3IFRPMiwgaXQgaXMgdGhlIE1QTEwgcGF0aCAxIG9mIEFSTSBjb3JlCisgKiBJdCBwcm92aWRlcyB0aGUgY2xvY2sgc291cmNlIHdob3NlIHJhdGUgaXMgc2FtZSBhcyBNUExMCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrID0geworCS5pZAkJPSAwLAorCS5wYXJlbnQJCT0gJm1wbGxfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGxfbWFpbiwKK307CisKKy8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDIgb2YgQVJNIGNvcmUKKyAqIEl0IHByb3ZpZGVzIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIE1QTEwgKiAyIC8gMworICovCitzdGF0aWMgc3RydWN0IGNsayBtcGxsX21haW4yX2NsayA9IHsKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZtcGxsX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9tcGxsX21haW4sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0geworCS5wYXJlbnQJCT0gJm1wbGxfbWFpbjJfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2FoYiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGsgPSB7CisJLnBhcmVudAkJPSAmYWhiX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9pcGcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5wYXJlbnQgPSAmbXBsbF9tYWluMl9jbGssCisJLnNldF9wYXJlbnQgPSBjbGtfY3B1X3NldF9wYXJlbnQsCisJLnJvdW5kX3JhdGUgPSByb3VuZF9yYXRlX2NwdSwKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9jcHUsCisJLnNldF9yYXRlID0gc2V0X3JhdGVfY3B1LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9zcGxsLAorCS5lbmFibGUgPSBjbGtfc3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfc3BsbF9kaXNhYmxlLAorfTsKIAogLyoKICAqIHRoZSBsb3cgZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQotICogRGVmYXVsdCBjYXNlIGlzIDMyLjc2OGtIeiBDb3VsZCBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUKLSAqIHdpdGggYSBjYWxsIHRvIGNoYW5nZV9leHRlcm5hbF9sb3dfcmVmZXJlbmNlKCkKKyAqIERlZmF1bHQgY2FzZSBpcyAzMi43NjhrSHouCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWxfY2xrID0gewotCS5uYW1lID0gImNraWwiLAotCS5nZXRfcmF0ZSA9IGdldF9sb3dfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCisJLmdldF9yYXRlID0gZ2V0X3JhdGVfbG93X3JlZmVyZW5jZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9tcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdWludDMyX3QgcmVnOwotCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKLQl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7Ci0KLQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9NUENUTDApOwotCXBkZiA9IChyZWcgJiBDQ01fTVBDVEwwX1BEX01BU0spID4+IENDTV9NUENUTDBfUERfT0ZGU0VUOwotCW1mZCA9IChyZWcgJiBDQ01fTVBDVEwwX01GRF9NQVNLKSA+PiBDQ01fTVBDVEwwX01GRF9PRkZTRVQ7Ci0JbWZpID0gKHJlZyAmIENDTV9NUENUTDBfTUZJX01BU0spID4+IENDTV9NUENUTDBfTUZJX09GRlNFVDsKLQltZm4gPSAocmVnICYgQ0NNX01QQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX01QQ1RMMF9NRk5fT0ZGU0VUOwotCi0JbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7Ci0JdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47Ci0JZG9fZGl2KHRlbXAsIG1mZCArIDEpOwotCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKLQlkb19kaXYodGVtcCwgcGRmICsgMSk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7Ci0JLm5hbWUgPSAibXBsbCIsCi0JLnBhcmVudCA9ICZja2loX2NsaywKLQkuZ2V0X3JhdGUgPSBnZXRfbXBsbF9jbGssCisvKiBPdXRwdXQgb2YgZnJlcXVlbmN5IHByZSBtdWx0aXBsaWVyICovCitzdGF0aWMgc3RydWN0IGNsayBmcG1fY2xrID0geworCS5wYXJlbnQgPSAmY2tpbF9jbGssCisJLmdldF9yYXRlID0gZ2V0X3JhdGVfZnBtLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tcGxsX21haW5fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisjZGVmaW5lIFBDQ1IwIENDTV9QQ0NSMAorI2RlZmluZSBQQ0NSMSBDQ01fUENDUjEKIAotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCS8qIGkuTVgyNyBUTzI6Ci0JICogY2xrLT5pZCA9PSAwOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMSB3aGljaCBpcyBmcm9tIDIqTVBMTC9ESVZfMgotCSAqIGNsay0+aWQgPT0gMTogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDIgd2hpY2ggaXMgZnJvbSAyKk1QTEwvRElWXzMKLQkgKi8KLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wICYmIGNsay0+aWQgPT0gMSkKLQkJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gM1VMOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBtcGxsX21haW5fY2xrW10gPSB7Ci0JewotCQkvKiBGb3IgaS5NWDI3IFRPMiwgaXQgaXMgdGhlIE1QTEwgcGF0aCAxIG9mIEFSTSBjb3JlCi0JCSAqIEl0IHByb3ZpZGUgdGhlIGNsb2NrIHNvdXJjZSB3aG9zZSByYXRlIGlzIHNhbWUgYXMgTVBMTAotCQkgKi8KLQkJLm5hbWUgPSAibXBsbF9tYWluIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZtcGxsX2NsaywKLQkJLmdldF9yYXRlID0gX2Nsa19tcGxsX21haW5fZ2V0X3JhdGUKLQl9LCB7Ci0JCS8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDIgb2YgQVJNIGNvcmUKLQkJICogSXQgcHJvdmlkZSB0aGUgY2xvY2sgc291cmNlIHdob3NlIHJhdGUgaXMgc2FtZSBNUExMICogMi8zCi0JCSAqLwotCQkubmFtZSA9ICJtcGxsX21haW4iLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJm1wbGxfY2xrLAotCQkuZ2V0X3JhdGUgPSBfY2xrX21wbGxfbWFpbl9nZXRfcmF0ZQorI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgcywgcCkJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKKwkJLmlkCQk9IGksCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKKwkJLmdldF9yYXRlCT0gZ3IsCQkJXAorCQkuZW5hYmxlCQk9IGNsa19wY2NyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IGNsa19wY2NyX2Rpc2FibGUsCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJXAorCQkucGFyZW50CQk9IHAsCQkJXAogCX0KLX07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdWludDMyX3QgcmVnOwotCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKLQl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7Ci0KLQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOwotCS8qVE9ETzogVGhpcyBpcyBUTzIgQnVnICovCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCV9fcmF3X3dyaXRlbChyZWcsIENDTV9TUENUTDApOwotCi0JcGRmID0gKHJlZyAmIENDTV9TUENUTDBfUERfTUFTSykgPj4gQ0NNX1NQQ1RMMF9QRF9PRkZTRVQ7Ci0JbWZkID0gKHJlZyAmIENDTV9TUENUTDBfTUZEX01BU0spID4+IENDTV9TUENUTDBfTUZEX09GRlNFVDsKLQltZmkgPSAocmVnICYgQ0NNX1NQQ1RMMF9NRklfTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRklfT0ZGU0VUOwotCW1mbiA9IChyZWcgJiBDQ01fU1BDVEwwX01GTl9NQVNLKSA+PiBDQ01fU1BDVEwwX01GTl9PRkZTRVQ7Ci0KLQltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKLQl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1mbjsKLQlkb19kaXYodGVtcCwgbWZkICsgMSk7Ci0JdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZmkgKyB0ZW1wOwotCWRvX2Rpdih0ZW1wLCBwZGYgKyAxKTsKLQotCXJldHVybiAodW5zaWduZWQgbG9uZyl0ZW1wOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKLQkubmFtZSA9ICJzcGxsIiwKLQkucGFyZW50ID0gJmNraWhfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9zcGxsX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc3BsbF9kaXNhYmxlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9BUk1fTUFTSykgPj4gQ0NNX0NTQ1JfQVJNX09GRlNFVDsKLQllbHNlCi0JCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9QUkVTQ19NQVNLKSA+PiBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQ7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKLQkubmFtZSA9ICJjcHVfY2xrIiwKLQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JLnNldF9wYXJlbnQgPSBfY2xrX2NwdV9zZXRfcGFyZW50LAotCS5yb3VuZF9yYXRlID0gX2Nsa19jcHVfcm91bmRfcmF0ZSwKLQkuZ2V0X3JhdGUgPSBnZXRfY3B1X2NsaywKLQkuc2V0X3JhdGUgPSBfY2xrX2NwdV9zZXRfcmF0ZSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9haGJfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdW5zaWduZWQgbG9uZyBiY2xrX3BkZjsKLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQliY2xrX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9BSEJfTUFTSykKLQkJCQkJPj4gQ0NNX0NTQ1JfQUhCX09GRlNFVDsKLQllbHNlCi0JCWJjbGtfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX0JDTEtfTUFTSykKLQkJCQkJPj4gQ0NNX0NTQ1JfQkNMS19PRkZTRVQ7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChiY2xrX3BkZiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewotCS5uYW1lID0gImFoYl9jbGsiLAotCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkuZ2V0X3JhdGUgPSBnZXRfYWhiX2NsaywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pcGdfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdW5zaWduZWQgbG9uZyBpcGdfcGRmOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWVsc2UKLQkJaXBnX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9JUERJVikgPj4gQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUOwotCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0gewotCS5uYW1lID0gImlwZ19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZ2V0X3JhdGUgPSBnZXRfaXBnX2NsaywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGVyY2xreF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGVyY2xrX3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKGNsay0+aWQgPCAwIHx8IGNsay0+aWQgPiAzKQotCQlyZXR1cm4gMDsKLQotCXBlcmNsa19wZGYgPSAoUENEUjEoKSA+PiAoY2xrLT5pZCA8PCAzKSkgJiBDQ01fUENEUjFfUEVSRElWMV9NQVNLOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKHBlcmNsa19wZGYgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAicGVyX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9QRVJDTEsxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJwZXJfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1BFUkNMSzJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInBlcl9jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCi0JCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKLQkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9QRVJDTEszX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJwZXJfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkucm91bmRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yb3VuZF9yYXRlLAotCQkuc2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfc2V0X3JhdGUsCi0JCS5nZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfUEVSQ0xLNF9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDFfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDJfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0Ml9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0M19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQ0X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSAzLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDRfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQ0X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDVfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0NV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSA0LAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDVfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0Nl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gNSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQ2X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDUsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUNl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDFfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0Ml9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDNfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDMsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQ0X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDRfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSA0LAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0NV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQ1X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gNSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDZfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSA1LAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUNl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJwd21fY2xrIiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnB3bV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJwd21fY2xrIiwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1BXTV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjMl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjM19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpMl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpM19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAibGNkY19jbGsiLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMl0sCi0JCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JfSwgewotCQkubmFtZSA9ICJsY2RjX2lwZ19jbGsiLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMl0sCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfTENEQ19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAibGNkY19haGJfY2xrIiwKLQkJLnBhcmVudCA9ICZhaGJfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX0hDTEtfTENEQ19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc2lfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJjc2lfcGVyY2xrIiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzNdLAotCQkuc2Vjb25kYXJ5ID0gJmNzaV9jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JfSwgewotCQkubmFtZSA9ICJjc2lfYWhiX2NsayIsCi0JCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9IQ0xLX0NTSV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1c2JfY2xrIiwKLQkJLnBhcmVudCA9ICZzcGxsX2NsaywKLQkJLmdldF9yYXRlID0gX2Nsa191c2JfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VTQk9UR19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAidXNiX2FoYl9jbGsiLAotCQkucGFyZW50ID0gJmFoYl9jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19VU0JPVEdfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKyNkZWZpbmUgREVGSU5FX0NMT0NLMShuYW1lLCBpLCBlciwgZXMsIGdldHNldHJvdW5kLCBzLCBwKQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJXAorCQkuaWQJCT0gaSwJCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCQlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJXAorCQkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCisJCS5zZXRfcmF0ZQk9IHNldF9yYXRlXyMjZ2V0c2V0cm91bmQsCVwKKwkJLnJvdW5kX3JhdGUJPSByb3VuZF9yYXRlXyMjZ2V0c2V0cm91bmQsCVwKKwkJLmVuYWJsZQkJPSBjbGtfcGNjcl9lbmFibGUsCQlcCisJCS5kaXNhYmxlCT0gY2xrX3BjY3JfZGlzYWJsZSwJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQlcCiAJfQotfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgc3NpMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNzaV9jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmc3NpMV9jbGtbMV0sCi0JCS5nZXRfcmF0ZSA9IF9jbGtfc3NpMV9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfU1NJMV9CQVVEX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJzc2lfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TU0kxX0lQR19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBvcmRlciAqLworc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrMSwgc2FoYXJhMl9jbGsxLCBydGljX2NsazEsIGZlY19jbGsxLCBlbW1hX2NsazEsCisJCSAgZG1hX2NsazEsIGxjZGNfY2xrMiwgdnB1X2NsazE7CisKKy8qIEFsbCBjbG9ja3Mgd2UgY2FuIGdhdGUgdGhyb3VnaCBQQ0NSeCBpbiB0aGUgb3JkZXIgb2YgUENDUnggYml0cyAqLworREVGSU5FX0NMT0NLKHNzaTJfY2xrMSwgICAgMSwgUENDUjAsICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGsxLCAgICAwLCBQQ0NSMCwgIDEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGssICAgIDAsIFBDQ1IwLCAgMiwgTlVMTCwgJnNsY2RjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjM19jbGsxLCAgIDAsIFBDQ1IwLCAgMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNkaGMyX2NsazEsICAgMCwgUENDUjAsICA0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzFfY2xrMSwgICAwLCBQQ0NSMCwgIDUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgIDAsIFBDQ1IwLCAgNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrLCAgMCwgUENDUjAsICA3LCBOVUxMLCAmc2FoYXJhMl9jbGsxLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGssICAgICAwLCBQQ0NSMCwgIDgsIE5VTEwsICZydGljX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGNfY2xrLCAgICAgIDAsIFBDQ1IwLCAgOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGsxLCAgICAgMCwgUENDUjAsIDExLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgICAwLCBQQ0NSMCwgMTIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2tfY2xrMSwgIDAsIFBDQ1IwLCAxMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGxjZGNfY2xrMSwgICAgMCwgUENDUjAsIDE0LCBOVUxMLCAmbGNkY19jbGsyLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soa3BwX2NsaywgICAgICAwLCBQQ0NSMCwgMTUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgIDAsIFBDQ1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAgMSwgUENDUjAsIDE3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgICAwLCBQQ0NSMCwgMTgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ2X2NsazEsICAgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDVfY2xrMSwgICAgMCwgUENDUjAsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGsxLCAgICAwLCBQQ0NSMCwgMjEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQzX2NsazEsICAgIDAsIFBDQ1IwLCAyMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDJfY2xrMSwgICAgMCwgUENDUjAsIDIzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGsxLCAgICAwLCBQQ0NSMCwgMjQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncGlvX2NsaywgICAgIDAsIFBDQ1IwLCAyNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGZlY19jbGssICAgICAgMCwgUENDUjAsIDI2LCBOVUxMLCAmZmVjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsaywgICAgIDAsIFBDQ1IwLCAyNywgTlVMTCwgJmVtbWFfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGRtYV9jbGssICAgICAgMCwgUENDUjAsIDI4LCBOVUxMLCAmZG1hX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpMTNfY2xrMSwgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsazEsICAgMCwgUENDUjAsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrMSwgICAwLCBQQ0NSMCwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKG1zdGlja19jbGssICAgMCwgUENDUjEsICAyLCBOVUxMLCAmbXN0aWNrX2NsazEsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgIDAsIFBDQ1IxLCAgMywgZ2V0X3JhdGVfbmZjLCBOVUxMLCAmY3B1X2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgICAxLCBQQ0NSMSwgIDQsIGdldF9yYXRlX3NzaTIsICZzc2kyX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgICAwLCBQQ0NSMSwgIDUsIGdldF9yYXRlX3NzaTEsICZzc2kxX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodnB1X2NsaywgICAgICAwLCBQQ0NSMSwgIDYsIGdldF9yYXRlX3ZwdSwgJnZwdV9jbGsxLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXI0X2NsaywgICAgMywgUENDUjEsICA3LCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sxKHBlcjNfY2xrLCAgICAyLCBQQ0NSMSwgIDgsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSzEocGVyMl9jbGssICAgIDEsIFBDQ1IxLCAgOSwgcGVyLCBOVUxMLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXIxX2NsaywgICAgMCwgUENDUjEsIDEwLCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazEsICAgICAwLCBQQ0NSMSwgMTEsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGsxLCAgIDAsIFBDQ1IxLCAxMiwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrMSwgMCwgUENDUjEsIDEzLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGsxLCAgICAwLCBQQ0NSMSwgMTQsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhsY2RjX2NsazIsICAgIDAsIFBDQ1IxLCAxNSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHZwdV9jbGsxLCAgICAgMCwgUENDUjEsIDE2LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZmVjX2NsazEsICAgICAwLCBQQ0NSMSwgMTcsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsazEsICAgIDAsIFBDQ1IxLCAxOCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgICAgMCwgUENDUjEsIDE5LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZG1hX2NsazEsICAgICAwLCBQQ0NSMSwgMjAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc2lfY2xrMSwgICAgIDAsIFBDQ1IxLCAyMSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGJyb21fY2xrLCAgICAgMCwgUENDUjEsIDIyLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgICAwLCBQQ0NSMSwgMjMsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgIDAsIFBDQ1IxLCAyNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVzYl9jbGssICAgICAgMCwgUENDUjEsIDI1LCBnZXRfcmF0ZV91c2IsICZ1c2JfY2xrMSwgJnNwbGxfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGsxLCAgIDAsIFBDQ1IxLCAyNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsazEsICAgMCwgUENDUjEsIDI3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrMSwgICAwLCBQQ0NSMSwgMjgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGsxLCAgIDAsIFBDQ1IxLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsazEsICAgMCwgUENDUjEsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrMSwgICAwLCBQQ0NSMSwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworLyogQ2xvY2tzIHdlIGNhbm5vdCBkaXJlY3RseSBnYXRlLCBidXQgZHJpdmVycyBuZWVkIHRoZWlyIHJhdGVzICovCitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZjc3BpMV9jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmY3NwaTJfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJmNzcGkxM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmc2RoYzFfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjMl9jbGssICAgIDEsIDAsICAgICAgMCwgTlVMTCwgJnNkaGMyX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzNfY2xrLCAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZzZGhjM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmcHdtX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGssICAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZncHQxX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Ml9jbGssICAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZncHQyX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0M19jbGssICAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZncHQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGssICAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZncHQ0X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NV9jbGssICAgICA0LCAwLCAgICAgIDAsIE5VTEwsICZncHQ1X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Nl9jbGssICAgICA1LCAwLCAgICAgIDAsIE5VTEwsICZncHQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0MV9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmdWFydDJfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0NF9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICAgNCwgMCwgICAgICAwLCBOVUxMLCAmdWFydDVfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGssICAgIDUsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sxKGxjZGNfY2xrLCAgICAwLCAwLCAgICAgIDAsIHBhcmVudCwgJmxjZGNfY2xrMSwgJnBlcjNfY2xrKTsKK0RFRklORV9DTE9DSzEoY3NpX2NsaywgICAgIDAsIDAsICAgICAgMCwgcGFyZW50LCAmY3NpX2NsazEsICZwZXI0X2Nsayk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCiAJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMyIsIE5VTEwsIHVhcnQ0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjQiLCBOVUxMLCB1YXJ0NV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC41IiwgTlVMTCwgdWFydDZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MSIsIGdwdDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MiIsIGdwdDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MyIsIGdwdDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NCIsIGdwdDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NSIsIGdwdDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NiIsIGdwdDZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4wIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidXNiIiwgdXNiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTEiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTIiLCBzc2kyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19uYW5kLjAiLCBOVUxMLCBuZmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidnB1IiwgdnB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImRtYSIsIGRtYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJicm9tIiwgYnJvbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbW1hIiwgZW1tYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzbGNkYyIsIHNsY2RjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtaSIsIGVtaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzYWhhcmEyIiwgc2FoYXJhMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdGEiLCBhdGFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzc2kyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic3NpX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLnNlY29uZGFyeSA9ICZzc2kyX2Nsa1sxXSwKLQkJLmdldF9yYXRlID0gX2Nsa19zc2kyX3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9TU0kyX0JBVURfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInNzaV9pcGdfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NTSTJfSVBHX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG5mY19jbGsgPSB7Ci0JLm5hbWUgPSAibmZjX2NsayIsCi0JLnBhcmVudCA9ICZjcHVfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbmZjX3JlY2FsYywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9ORkNfQkFVRF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2cHVfY2xrID0gewotCS5uYW1lID0gInZwdV9jbGsiLAotCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkuZ2V0X3JhdGUgPSBfY2xrX3ZwdV9yZWNhbGMsCi0JLmVuYWJsZSA9IF9jbGtfdnB1X2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfdnB1X2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19kbWFfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19kbWFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJ0aWNfY2xrID0gewotCS5uYW1lID0gInJ0aWNfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfcnRpY19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX3J0aWNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGJyb21fY2xrID0gewotCS5uYW1lID0gImJyb21fY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19CUk9NX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtbWFfY2xrID0gewotCS5uYW1lID0gImVtbWFfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW1tYV9lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2VtbWFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNsY2RjX2NsayA9IHsKLQkubmFtZSA9ICJzbGNkY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zbGNkY19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX3NsY2RjX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmZWNfY2xrID0gewotCS5uYW1lID0gImZlY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19mZWNfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19mZWNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtaV9jbGsgPSB7Ci0JLm5hbWUgPSAiZW1pX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX0hDTEtfRU1JX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNhaGFyYTJfY2xrID0gewotCS5uYW1lID0gInNhaGFyYV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zYWhhcmEyX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc2FoYXJhMl9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRhX2NsayA9IHsKLQkubmFtZSA9ICJhdGFfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19BVEFfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXN0aWNrMV9jbGsgPSB7Ci0JLm5hbWUgPSAibXN0aWNrMV9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19tc3RpY2sxX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfbXN0aWNrMV9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2RvZ19jbGsgPSB7Ci0JLm5hbWUgPSAid2RvZ19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9XRFRfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb19jbGsgPSB7Ci0JLm5hbWUgPSAiZ3Bpb19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUElPX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImkyY19jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfSTJDMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAiaTJjX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9JMkMyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlpbV9jbGsgPSB7Ci0JLm5hbWUgPSAiaWltX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0lJTV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBrcHBfY2xrID0gewotCS5uYW1lID0gImtwcF9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9LUFBfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb3dpcmVfY2xrID0gewotCS5uYW1lID0gIm93aXJlX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX09XSVJFX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJ0Y19jbGsgPSB7Ci0JLm5hbWUgPSAicnRjX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1JUQ19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzY2NfY2xrID0gewotCS5uYW1lID0gInNjY19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TQ0NfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jbGtvX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCisvKiBBZGp1c3QgdGhlIGNsb2NrIHBhdGggZm9yIFRPMiBhbmQgbGF0ZXIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB0bzJfYWRqdXN0X2Nsb2Nrcyh2b2lkKQogewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0JaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gOCkKLQkJZGl2ID0gODsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZzsKLQl1MzIgZGl2OwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0KLQlpZiAoZGl2ID4gOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkaXYtLTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgJiB+Q0NNX1BDRFIwX0NMS09ESVZfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSMF9DTEtPRElWX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUjApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfY2xrb19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgJiBDQ01fUENEUjBfQ0xLT0RJVl9NQVNLID4+Ci0JCUNDTV9QQ0RSMF9DTEtPRElWX09GRlNFVDsKLQlkaXYrKzsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NDU1IpICYgfkNDTV9DQ1NSX0NMS09TRUxfTUFTSzsKLQotCWlmIChwYXJlbnQgPT0gJmNraWxfY2xrKQotCQlyZWcgfD0gMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNraWhfY2xrKQotCQlyZWcgfD0gMiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gbXBsbF9jbGsucGFyZW50KQotCQlyZWcgfD0gMyA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gc3BsbF9jbGsucGFyZW50KQotCQlyZWcgfD0gNCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJm1wbGxfY2xrKQotCQlyZWcgfD0gNSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnNwbGxfY2xrKQotCQlyZWcgfD0gNiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNwdV9jbGspCi0JCXJlZyB8PSA3IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmYWhiX2NsaykKLQkJcmVnIHw9IDggPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZpcGdfY2xrKQotCQlyZWcgfD0gOSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMF0pCi0JCXJlZyB8PSAweEEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzFdKQotCQlyZWcgfD0gMHhCIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1syXSkKLQkJcmVnIHw9IDB4QyA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbM10pCi0JCXJlZyB8PSAweEQgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZzc2kxX2Nsa1swXSkKLQkJcmVnIHw9IDB4RSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnNzaTJfY2xrWzBdKQotCQlyZWcgfD0gMHhGIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmbmZjX2NsaykKLQkJcmVnIHw9IDB4MTAgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZtc3RpY2sxX2NsaykKLQkJcmVnIHw9IDB4MTEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ2cHVfY2xrKQotCQlyZWcgfD0gMHgxMiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnVzYl9jbGtbMF0pCi0JCXJlZyB8PSAweDE1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ0NTUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSB8IENDTV9QQ0RSMF9DTEtPX0VOOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19jbGtvX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjApICYgfkNDTV9QQ0RSMF9DTEtPX0VOOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa29fY2xrID0gewotCS5uYW1lID0gImNsa29fY2xrIiwKLQkuZ2V0X3JhdGUgPSBfY2xrX2Nsa29fcmVjYWxjLAotCS5zZXRfcmF0ZSA9IF9jbGtfY2xrb19zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfY2xrb19yb3VuZF9yYXRlLAotCS5zZXRfcGFyZW50ID0gX2Nsa19jbGtvX3NldF9wYXJlbnQsCi0JLmVuYWJsZSA9IF9jbGtfY2xrb19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2Nsa29fZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZja2loX2NsaywKLQkmY2tpbF9jbGssCi0JJm1wbGxfY2xrLAotCSZtcGxsX21haW5fY2xrWzBdLAotCSZtcGxsX21haW5fY2xrWzFdLAotCSZzcGxsX2NsaywKLQkmY3B1X2NsaywKLQkmYWhiX2NsaywKLQkmaXBnX2NsaywKLQkmcGVyX2Nsa1swXSwKLQkmcGVyX2Nsa1sxXSwKLQkmcGVyX2Nsa1syXSwKLQkmcGVyX2Nsa1szXSwKLQkmY2xrb19jbGssCi0JJnVhcnQxX2Nsa1swXSwKLQkmdWFydDFfY2xrWzFdLAotCSZ1YXJ0Ml9jbGtbMF0sCi0JJnVhcnQyX2Nsa1sxXSwKLQkmdWFydDNfY2xrWzBdLAotCSZ1YXJ0M19jbGtbMV0sCi0JJnVhcnQ0X2Nsa1swXSwKLQkmdWFydDRfY2xrWzFdLAotCSZ1YXJ0NV9jbGtbMF0sCi0JJnVhcnQ1X2Nsa1sxXSwKLQkmdWFydDZfY2xrWzBdLAotCSZ1YXJ0Nl9jbGtbMV0sCi0JJmdwdDFfY2xrWzBdLAotCSZncHQxX2Nsa1sxXSwKLQkmZ3B0Ml9jbGtbMF0sCi0JJmdwdDJfY2xrWzFdLAotCSZncHQzX2Nsa1swXSwKLQkmZ3B0M19jbGtbMV0sCi0JJmdwdDRfY2xrWzBdLAotCSZncHQ0X2Nsa1sxXSwKLQkmZ3B0NV9jbGtbMF0sCi0JJmdwdDVfY2xrWzFdLAotCSZncHQ2X2Nsa1swXSwKLQkmZ3B0Nl9jbGtbMV0sCi0JJnB3bV9jbGtbMF0sCi0JJnB3bV9jbGtbMV0sCi0JJnNkaGMxX2Nsa1swXSwKLQkmc2RoYzFfY2xrWzFdLAotCSZzZGhjMl9jbGtbMF0sCi0JJnNkaGMyX2Nsa1sxXSwKLQkmc2RoYzNfY2xrWzBdLAotCSZzZGhjM19jbGtbMV0sCi0JJmNzcGkxX2Nsa1swXSwKLQkmY3NwaTFfY2xrWzFdLAotCSZjc3BpMl9jbGtbMF0sCi0JJmNzcGkyX2Nsa1sxXSwKLQkmY3NwaTNfY2xrWzBdLAotCSZjc3BpM19jbGtbMV0sCi0JJmxjZGNfY2xrWzBdLAotCSZsY2RjX2Nsa1sxXSwKLQkmbGNkY19jbGtbMl0sCi0JJmNzaV9jbGtbMF0sCi0JJmNzaV9jbGtbMV0sCi0JJnVzYl9jbGtbMF0sCi0JJnVzYl9jbGtbMV0sCi0JJnNzaTFfY2xrWzBdLAotCSZzc2kxX2Nsa1sxXSwKLQkmc3NpMl9jbGtbMF0sCi0JJnNzaTJfY2xrWzFdLAotCSZuZmNfY2xrLAotCSZ2cHVfY2xrLAotCSZkbWFfY2xrLAotCSZydGljX2NsaywKLQkmYnJvbV9jbGssCi0JJmVtbWFfY2xrLAotCSZzbGNkY19jbGssCi0JJmZlY19jbGssCi0JJmVtaV9jbGssCi0JJnNhaGFyYTJfY2xrLAotCSZhdGFfY2xrLAotCSZtc3RpY2sxX2NsaywKLQkmd2RvZ19jbGssCi0JJmdwaW9fY2xrLAotCSZpMmNfY2xrWzBdLAotCSZpMmNfY2xrWzFdLAotCSZpaW1fY2xrLAotCSZrcHBfY2xrLAotCSZvd2lyZV9jbGssCi0JJnJ0Y19jbGssCi0JJnNjY19jbGssCi19OwotCi12b2lkIF9faW5pdCBjaGFuZ2VfZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSh1bnNpZ25lZCBsb25nIG5ld19yZWYpCi17Ci0JZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IG5ld19yZWY7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGNsa19lYXJseV9nZXRfdGltZXJfcmF0ZSh2b2lkKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoJnBlcl9jbGtbMF0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJvYmVfbXhjX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOworCXVuc2lnbmVkIGxvbmcgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAogCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCWlmIChDU0NSKCkgJiAweDgwMDApCi0JCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzBdOworCQlpZiAoY3NjciAmIENDTV9DU0NSX0FSTV9TUkMpCisJCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX21haW4xX2NsazsKIAotCQlpZiAoIShDU0NSKCkgJiAweDAwODAwMDAwKSkKLQkJCXNzaTJfY2xrWzBdLnBhcmVudCA9ICZzcGxsX2NsazsKKwkJaWYgKCEoY3NjciAmIENDTV9DU0NSX1NTSTIpKQorCQkJc3NpMV9jbGsucGFyZW50ID0gJnNwbGxfY2xrOwogCi0JCWlmICghKENTQ1IoKSAmIDB4MDA0MDAwMDApKQotCQkJc3NpMV9jbGtbMF0ucGFyZW50ID0gJnNwbGxfY2xrOworCQlpZiAoIShjc2NyICYgQ0NNX0NTQ1JfU1NJMSkpCisJCQlzc2kxX2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CiAKLQkJaWYgKCEoQ1NDUigpICYgMHgwMDIwMDAwMCkpCisJCWlmICghKGNzY3IgJiBDQ01fQ1NDUl9WUFUpKQogCQkJdnB1X2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CiAJfSBlbHNlIHsKIAkJY3B1X2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CkBAIC0xNTY1LDExICs2OTMsMTMgQEAKIAkJY3B1X2Nsay5zZXRfcmF0ZSA9IE5VTEw7CiAJCWFoYl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocGVyX2NsaykgLyBzaXplb2YocGVyX2Nsa1swXSk7IGkrKykKLQkJCXBlcl9jbGtbaV0ucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXIxX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXBlcjJfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJcGVyM19jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXI0X2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CiAKLQkJc3NpMV9jbGtbMF0ucGFyZW50ID0gJm1wbGxfY2xrOwotCQlzc2kyX2Nsa1swXS5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXNzaTFfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJc3NpMl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCiAJCXZwdV9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCX0KQEAgLTE1NzksNDcgKzcwOSw0NyBAQAogICogbXVzdCBiZSBjYWxsZWQgdmVyeSBlYXJseSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgKiBhdmFpbGFibGUgY2xvY2sgcmF0ZSB3aGVuIHRoZSB0aW1lciBmcmFtZXdvcmsgc3RhcnRzCiAgKi8KLWludCBfX2luaXQgbXhjX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK2ludCBfX2luaXQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7Ci0JdTMyIGNzY3I7Ci0Jc3RydWN0IGNsayAqKmNsa3A7CisJdTMyIGNzY3IgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJaW50IGk7CiAKIAlleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IGZyZWY7CiAKLQkvKiBkZXRlY3QgY2xvY2sgcmVmZXJlbmNlIGZvciBib3RoIHN5c3RlbSBQTEwgKi8KLQljc2NyID0gQ1NDUigpOworCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIGJvdGggc3lzdGVtIFBMTHMgKi8KIAlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKIAkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOwogCWVsc2UKLQkJbXBsbF9jbGsucGFyZW50ID0gJmNraWxfY2xrOworCQltcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKIAogCWlmIChjc2NyICYgQ0NNX0NTQ1JfU1ApCiAJCXNwbGxfY2xrLnBhcmVudCA9ICZja2loX2NsazsKIAllbHNlCi0JCXNwbGxfY2xrLnBhcmVudCA9ICZja2lsX2NsazsKKwkJc3BsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CiAKLQlwcm9iZV9teGNfY2xvY2tzKCk7CisJdG8yX2FkanVzdF9jbG9ja3MoKTsKIAotCXBlcl9jbGtbMF0uZW5hYmxlKCZwZXJfY2xrWzBdKTsKLQlncHQxX2Nsa1sxXS5lbmFibGUoJmdwdDFfY2xrWzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKIAotCWZvciAoY2xrcCA9IG14Y19jbGtzOyBjbGtwIDwgbXhjX2Nsa3MgKyBBUlJBWV9TSVpFKG14Y19jbGtzKTsgY2xrcCsrKQotCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCS8qIFR1cm4gb2ZmIGFsbCBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgKi8KKwlfX3Jhd193cml0ZWwoMCwgQ0NNX1BDQ1IwKTsKKwlfX3Jhd193cml0ZWwoKDEgPDwgMTApIHwgKDEgPDwgMTkpLCBDQ01fUENDUjEpOwogCi0JLyogVHVybiBvZmYgYWxsIHBvc3NpYmxlIGNsb2NrcyAqLwotCV9fcmF3X3dyaXRlbChDQ01fUENDUjBfR1BUMV9NQVNLLCBDQ01fUENDUjApOwotCV9fcmF3X3dyaXRlbChDQ01fUENDUjFfUEVSQ0xLMV9NQVNLIHwgQ0NNX1BDQ1IxX0hDTEtfRU1JX01BU0ssCi0JCSAgICAgQ0NNX1BDQ1IxKTsKIAlzcGxsX2Nsay5kaXNhYmxlKCZzcGxsX2Nsayk7CiAKLQkvKiBUaGlzIHdpbGwgcHJvcGFnYXRlIHRvIGFsbCBjaGlsZHJlbiBhbmQgaW5pdCBhbGwgdGhlIGNsb2NrIHJhdGVzICovCi0KLQljbGtfZW5hYmxlKCZlbWlfY2xrKTsKKwkvKiBlbmFibGUgYmFzaWMgY2xvY2tzICovCisJY2xrX2VuYWJsZSgmcGVyMV9jbGspOwogCWNsa19lbmFibGUoJmdwaW9fY2xrKTsKKwljbGtfZW5hYmxlKCZlbWlfY2xrKTsKIAljbGtfZW5hYmxlKCZpaW1fY2xrKTsKLQljbGtfZW5hYmxlKCZncHQxX2Nsa1swXSk7CisKICNpZmRlZiBDT05GSUdfREVCVUdfTExfQ09OU09MRQotCWNsa19lbmFibGUoJnVhcnQxX2Nsa1swXSk7CisJY2xrX2VuYWJsZSgmdWFydDFfY2xrKTsKICNlbmRpZgorCisJbXhjX3RpbWVyX2luaXQoJmdwdDFfY2xrKTsKKwogCXJldHVybiAwOwogfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jcHVfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCmluZGV4IDIzOTMwOGYuLmQ5ZTNiZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImNybV9yZWdzLmgiCi0KIHN0YXRpYyBpbnQgY3B1X3NpbGljb25fcmV2ID0gLTE7CiBzdGF0aWMgaW50IGNwdV9wYXJ0bnVtYmVyOwogCisjZGVmaW5lIFNZU19DSElQX0lEICAgICAgICAgICAgIDB4MDAgICAgLyogVGhlIG9mZnNldCBvZiBDSElQIElEIHJlZ2lzdGVyICovCisKIHN0YXRpYyB2b2lkIHF1ZXJ5X3NpbGljb25fcGFyYW1ldGVyKHZvaWQpCiB7CiAJdTMyIHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmggYi9hcmNoL2FybS9tYWNoLW14Mi9jcm1fcmVncy5oCmluZGV4IDk0NjQ0Y2QuLjc0OWRlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaApAQCAtMzgsNDIgKzM4LDM2IEBACiAjZGVmaW5lIENDTV9QTUNPVU5UICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzMCkKICNkZWZpbmUgQ0NNX1dLR0RDVEwgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDM0KQogCi0jZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQgICAgIDI4Ci0jZGVmaW5lIENDTV9DU0NSX1VTQl9NQVNLICAgICAgICgweDcgPDwgMjgpCisjZGVmaW5lIENDTV9DU0NSX1BSRVNDX09GRlNFVCAgIDI5CisjZGVmaW5lIENDTV9DU0NSX1BSRVNDX01BU0sgICAgICgweDcgPDwgQ0NNX0NTQ1JfUFJFU0NfT0ZGU0VUKQorCisjZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQgICAgIDI2CisjZGVmaW5lIENDTV9DU0NSX1VTQl9NQVNLICAgICAgICgweDcgPDwgQ0NNX0NTQ1JfVVNCX09GRlNFVCkKICNkZWZpbmUgQ0NNX0NTQ1JfU0RfT0ZGU0VUICAgICAgMjQKLSNkZWZpbmUgQ0NNX0NTQ1JfU0RfTUFTSyAgICAgICAgKDB4MyA8PCAyNCkKLSNkZWZpbmUgQ0NNX0NTQ1JfU1NJMiAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9DU0NSX1NTSTJfT0ZGU0VUICAgIDIzCi0jZGVmaW5lIENDTV9DU0NSX1NTSTEgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBDQ01fQ1NDUl9TU0kxX09GRlNFVCAgICAyMgotI2RlZmluZSBDQ01fQ1NDUl9WUFUgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fQ1NDUl9WUFVfT0ZGU0VUICAgIDIxCi0jZGVmaW5lIENDTV9DU0NSX01TSEMgICAgICAgICAgICgxIDw8IDIwKQotI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENDTV9DU0NSX1NEX01BU0sgICAgICAgICgweDMgPDwgQ0NNX0NTQ1JfU0RfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIENDTV9DU0NSX1NTSTJfT0ZGU0VUICAgIDIwCisjZGVmaW5lIENDTV9DU0NSX1NTSTIgICAgICAgICAgICgxIDw8IENDTV9DU0NSX1NTSTJfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxX09GRlNFVCAgICAxOQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxICAgICAgICAgICAoMSA8PCBDQ01fQ1NDUl9TU0kxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfRklSX09GRlNFVCAgICAJMTgKKyNkZWZpbmUgQ0NNX0NTQ1JfRklSCQkoMSA8PCBDQ01fQ1NDUl9GSVJfT0ZGU0VUKQogI2RlZmluZSBDQ01fQ1NDUl9TUCAgICAgICAgICAgICAoMSA8PCAxNykKICNkZWZpbmUgQ0NNX0NTQ1JfTUNVICAgICAgICAgICAgKDEgPDwgMTYpCi0vKiBDQ01fQ1NDUl9BUk1feHh4IGp1c3QgYmUgYXZhbGlhYmxlIG9uIGkuTVgyNyBUTzIqLwotI2RlZmluZSBDQ01fQ1NDUl9BUk1fU1JDICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgQ0NNX0NTQ1JfQVJNX09GRlNFVCAgICAgMTIKLSNkZWZpbmUgQ0NNX0NTQ1JfQVJNX01BU0sgICAgICAgKDB4MyA8PCAxMikKLS8qIENDTV9DU0NSX0FSTV94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9DU0NSX1BSRVNDX09GRlNFVCAgIDEzCi0jZGVmaW5lIENDTV9DU0NSX1BSRVNDX01BU0sgICAgICgweDcgPDwgMTMpCi0jZGVmaW5lIENDTV9DU0NSX0JDTEtfT0ZGU0VUICAgIDkKLSNkZWZpbmUgQ0NNX0NTQ1JfQkNMS19NQVNLICAgICAgKDB4ZiA8PCA5KQotI2RlZmluZSBDQ01fQ1NDUl9JUERJVl9PRkZTRVQgICA4Ci0jZGVmaW5lIENDTV9DU0NSX0lQRElWICAgICAgICAgICgxIDw8IDgpCi0vKiBDQ01fQ1NDUl9BSEJfeHh4IGp1c3QgYmUgYXZhbGlhYmxlIG9uIGkuTVgyNyBUTzIqLwotI2RlZmluZSBDQ01fQ1NDUl9BSEJfT0ZGU0VUICAgICA4Ci0jZGVmaW5lIENDTV9DU0NSX0FIQl9NQVNLICAgICAgICgweDMgPDwgOCkKLS8qIENDTV9DU0NSX0FIQl94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCisjZGVmaW5lIENDTV9DU0NSX0JDTEtfT0ZGU0VUCTEwCisjZGVmaW5lIENDTV9DU0NSX0JDTEtfTUFTSyAgICAgICgweGYgPDwgQ0NNX0NTQ1JfQkNMS19PRkZTRVQpCisjZGVmaW5lIENDTV9DU0NSX0lQRElWX09GRlNFVCAgIDkKKyNkZWZpbmUgQ0NNX0NTQ1JfSVBESVYgICAgICAgICAgKDEgPDwgQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUKQorCiAjZGVmaW5lIENDTV9DU0NSX09TQzI2TURJViAgICAgICgxIDw8IDQpCiAjZGVmaW5lIENDTV9DU0NSX09TQzI2TSAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIENDTV9DU0NSX0ZQTSAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIENDTV9DU0NSX1NQRU4gICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIENDTV9DU0NSX01QRU4gICAgICAgICAgIDEKIAorCisKICNkZWZpbmUgQ0NNX01QQ1RMMF9DUExNICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIENDTV9NUENUTDBfUERfT0ZGU0VUICAgIDI2CiAjZGVmaW5lIENDTV9NUENUTDBfUERfTUFTSyAgICAgICgweGYgPDwgMjYpCkBAIC0xMDksMjUgKzEwMywxNCBAQAogCiAjZGVmaW5lIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9PRkZTRVQgICAgMjYKICNkZWZpbmUgQ0NNX1BDRFIwX1NTSTJCQVVERElWX01BU0sgICAgICAoMHgzZiA8PCAyNikKLSNkZWZpbmUgQ0NNX1BDRFIwX0NMS09fRU4gICAgICAgICAgICAgICAyNQotI2RlZmluZSBDQ01fUENEUjBfQ0xLT0RJVl9PRkZTRVQgICAgICAgIDIyCi0jZGVmaW5lIENDTV9QQ0RSMF9DTEtPRElWX01BU0sgICAgICAgICAgKDB4NyA8PCAyMikKICNkZWZpbmUgQ0NNX1BDRFIwX1NTSTFCQVVERElWX09GRlNFVCAgICAxNgogI2RlZmluZSBDQ01fUENEUjBfU1NJMUJBVURESVZfTUFTSyAgICAgICgweDNmIDw8IDE2KQotLypUaGUgZGlmaW5pdGlvbiBmb3IgaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9QQ0RSMF9WUFVESVYyX09GRlNFVCAgICAgICAgMTAKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVjJfTUFTSyAgICAgICAgICAoMHgzZiA8PCAxMCkKLSNkZWZpbmUgQ0NNX1BDRFIwX05GQ0RJVjJfT0ZGU0VUICAgICAgICAgNgotI2RlZmluZSBDQ01fUENEUjBfTkZDRElWMl9NQVNLICAgICAgICAgICAoMHhmIDw8IDYpCi0jZGVmaW5lIENDTV9QQ0RSMF9NU0hDRElWMl9NQVNLICAgICAgICAgIDB4M2YKLS8qVGhlIGRpZmluaXRpb24gZm9yIGkuTVgyNyBUTzIqLwogI2RlZmluZSBDQ01fUENEUjBfTkZDRElWX09GRlNFVCAgICAgICAgIDEyCiAjZGVmaW5lIENDTV9QQ0RSMF9ORkNESVZfTUFTSyAgICAgICAgICAgKDB4ZiA8PCAxMikKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVl9PRkZTRVQgICAgICAgIDgKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVl9NQVNLICAgICAgICAgICgweGYgPDwgOCkKLSNkZWZpbmUgQ0NNX1BDRFIwX01TSENESVZfT0ZGU0VUICAgICAgICAwCi0jZGVmaW5lIENDTV9QQ0RSMF9NU0hDRElWX01BU0sgICAgICAgICAgMHgxZgotCisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUCQk1CisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfTUFTSwkJKDB4NyA8PCBDQ01fUENEUjBfNDhNRElWX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfTUFTSwkJMHgxZgogI2RlZmluZSBDQ01fUENEUjFfUEVSRElWNF9PRkZTRVQgICAgICAgIDI0CiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVY0X01BU0sgICAgICAgICAgKDB4M2YgPDwgMjQpCiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVYzX09GRlNFVCAgICAgICAgMTYKQEAgLTEzNywxMzMgKzEyMCwxMzUgQEAKICNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfT0ZGU0VUICAgICAgICAwCiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVYxX01BU0sgICAgICAgICAgMHgzZgogCi0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJMV9PRkZTRVQgICAgICAgICAgMzEKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkxX01BU0sgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkyX09GRlNFVCAgICAgICAgICAzMAotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTJfTUFTSyAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTNfT0ZGU0VUICAgICAgICAgIDI5Ci0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJM19NQVNLICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIENDTV9QQ0NSMF9ETUFfT0ZGU0VUICAgICAgICAgICAgMjgKLSNkZWZpbmUgQ0NNX1BDQ1IwX0RNQV9NQVNLICAgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0VNTUFfT0ZGU0VUICAgICAgICAgICAyNwotI2RlZmluZSBDQ01fUENDUjBfRU1NQV9NQVNLICAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBDQ01fUENDUjBfRkVDX09GRlNFVCAgICAgICAgICAgIDI2Ci0jZGVmaW5lIENDTV9QQ0NSMF9GRUNfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUElPX09GRlNFVCAgICAgICAgICAgMjUKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQSU9fTUFTSyAgICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDFfT0ZGU0VUICAgICAgICAgICAyNAotI2RlZmluZSBDQ01fUENDUjBfR1BUMV9NQVNLICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBDQ01fUENDUjBfR1BUMl9PRkZTRVQgICAgICAgICAgIDIzCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQyX01BU0sgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQzX09GRlNFVCAgICAgICAgICAgMjIKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDNfTUFTSyAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDRfT0ZGU0VUICAgICAgICAgICAyMQotI2RlZmluZSBDQ01fUENDUjBfR1BUNF9NQVNLICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fUENDUjBfR1BUNV9PRkZTRVQgICAgICAgICAgIDIwCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ1X01BU0sgICAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ2X09GRlNFVCAgICAgICAgICAgMTkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDZfTUFTSyAgICAgICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0kyQzFfT0ZGU0VUICAgICAgICAgICAxOAotI2RlZmluZSBDQ01fUENDUjBfSTJDMV9NQVNLICAgICAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBDQ01fUENDUjBfSTJDMl9PRkZTRVQgICAgICAgICAgIDE3Ci0jZGVmaW5lIENDTV9QQ0NSMF9JMkMyX01BU0sgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIENDTV9QQ0NSMF9JSU1fT0ZGU0VUICAgICAgICAgICAgMTYKLSNkZWZpbmUgQ0NNX1BDQ1IwX0lJTV9NQVNLICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgQ0NNX1BDQ1IwX0tQUF9PRkZTRVQgICAgICAgICAgICAxNQotI2RlZmluZSBDQ01fUENDUjBfS1BQX01BU0sgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fUENDUjBfTENEQ19PRkZTRVQgICAgICAgICAgIDE0Ci0jZGVmaW5lIENDTV9QQ0NSMF9MQ0RDX01BU0sgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIENDTV9QQ0NSMF9NU0hDX09GRlNFVCAgICAgICAgICAgMTMKLSNkZWZpbmUgQ0NNX1BDQ1IwX01TSENfTUFTSyAgICAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgQ0NNX1BDQ1IwX09XSVJFX09GRlNFVCAgICAgICAgICAxMgotI2RlZmluZSBDQ01fUENDUjBfT1dJUkVfTUFTSyAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBDQ01fUENDUjBfUFdNX09GRlNFVCAgICAgICAgICAgIDExCi0jZGVmaW5lIENDTV9QQ0NSMF9QV01fTUFTSyAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIENDTV9QQ0NSMF9SVENfT0ZGU0VUICAgICAgICAgICAgOQotI2RlZmluZSBDQ01fUENDUjBfUlRDX01BU0sgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIENDTV9QQ0NSMF9SVElDX09GRlNFVCAgICAgICAgICAgOAotI2RlZmluZSBDQ01fUENDUjBfUlRJQ19NQVNLICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIENDTV9QQ0NSMF9TQUhBUkFfT0ZGU0VUICAgICAgICAgNwotI2RlZmluZSBDQ01fUENDUjBfU0FIQVJBX01BU0sgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIENDTV9QQ0NSMF9TQ0NfT0ZGU0VUICAgICAgICAgICAgNgotI2RlZmluZSBDQ01fUENDUjBfU0NDX01BU0sgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMV9PRkZTRVQgICAgICAgICAgNQotI2RlZmluZSBDQ01fUENDUjBfU0RIQzFfTUFTSyAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMl9PRkZTRVQgICAgICAgICAgNAotI2RlZmluZSBDQ01fUENDUjBfU0RIQzJfTUFTSyAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDM19PRkZTRVQgICAgICAgICAgMwotI2RlZmluZSBDQ01fUENDUjBfU0RIQzNfTUFTSyAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIENDTV9QQ0NSMF9TTENEQ19PRkZTRVQgICAgICAgICAgMgotI2RlZmluZSBDQ01fUENDUjBfU0xDRENfTUFTSyAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kxX0lQR19PRkZTRVQgICAgICAgMQotI2RlZmluZSBDQ01fUENDUjBfU1NJMV9JUEdfTUFTSyAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kyX0lQR19PRkZTRVQgICAgICAgMAotI2RlZmluZSBDQ01fUENDUjBfU1NJMl9JUEdfTUFTSyAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQ1NJX09GRlNFVCAgICAgICAJMzEKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRE1BX09GRlNFVCAgICAgICAJMzAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQlJPTV9PRkZTRVQgICAgICAJMjgKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CUk9NX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfT0ZGU0VUICAgICAgCTI3CisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCAgICAgIAkyNgorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfU0xDRENfT0ZGU0VUICAgICAJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfT0ZGU0VUICAgIAkyNAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19SRUcJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQk1JX09GRlNFVCAgICAJMjMKKyNkZWZpbmUgQ0NNX1BDQ1JfQk1JX01BU0sgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0JNSV9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JNSV9SRUcJICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfUEVSQ0xLNF9PRkZTRVQgICAgICAgIAkyMgorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TTENEQ19PRkZTRVQgICAgICAgICAgCTIxCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfQkFVRF9PRkZTRVQgICAgICAgMjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX01BU0sgICAgICAgICAoMSA8PCBDQ01fUENDUl9GSVJJX0JBVURfTUFTSykKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9ORkNfT0ZGU0VUCQkxOQorI2RlZmluZSBDQ01fUENDUl9ORkNfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfTENEQ19PRkZTRVQgICAgICAgICAgIAkxOAorI2RlZmluZSBDQ01fUENDUl9MQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQgICAgICAJMTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VUICAgICAgCTE2CisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfQkFVRF9SRUcJICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRU1NQV9PRkZTRVQgICAgICAgICAgIAkxNQorI2RlZmluZSBDQ01fUENDUl9FTU1BX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19PRkZTRVQgICAgICAgICAJMTQKKyNkZWZpbmUgQ0NNX1BDQ1JfVVNCT1RHX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0RNQV9PRkZTRVQgICAgICAgICAgICAJMTMKKyNkZWZpbmUgQ0NNX1BDQ1JfRE1BX1JFRyAgICAgICAgICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQgICAgICAgICAgIAkxMgorI2RlZmluZSBDQ01fUENDUl9JMkMxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0dQSU9fT0ZGU0VUICAgICAgICAgICAJMTEKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BJT19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TREhDMl9PRkZTRVQgICAgICAgICAgCTEwCisjZGVmaW5lIENDTV9QQ0NSX1NESEMyX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NESEMxX09GRlNFVCAgICAgICAgICAJOQorI2RlZmluZSBDQ01fUENDUl9TREhDMV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9GSVJJX09GRlNFVAkJOAorI2RlZmluZSBDQ01fUENDUl9GSVJJX01BU0sJCSgxIDw8IENDTV9QQ0NSX0JBVURfTUFTSykKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kyX0lQR19PRkZTRVQgICAgICAgCTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19PRkZTRVQgICAgICAgCTYKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9DU1BJMl9PRkZTRVQJCTUKKyNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTJfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTFfT0ZGU0VUCQk0CisjZGVmaW5lCUNDTV9QQ0NSX0NTUEkxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQ0X09GRlNFVCAgICAgICAgICAJMworI2RlZmluZSBDQ01fUENDUl9VQVJUNF9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9VQVJUM19PRkZTRVQgICAgICAgICAgCTIKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDNfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VUICAgICAgICAgIAkxCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQyX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQxX09GRlNFVCAgICAgICAgICAJMAorI2RlZmluZSBDQ01fUENDUl9VQVJUMV9SRUcJCUNDTV9QQ0NSMAogCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUMV9PRkZTRVQgICAgICAgICAgMzEKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQxX01BU0sgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQyX09GRlNFVCAgICAgICAgICAzMAotI2RlZmluZSBDQ01fUENDUjFfVUFSVDJfTUFTSyAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDNfT0ZGU0VUICAgICAgICAgIDI5Ci0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUM19NQVNLICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNF9PRkZTRVQgICAgICAgICAgMjgKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ0X01BU0sgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ1X09GRlNFVCAgICAgICAgICAyNwotI2RlZmluZSBDQ01fUENDUjFfVUFSVDVfTUFTSyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDZfT0ZGU0VUICAgICAgICAgIDI2Ci0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNl9NQVNLICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIENDTV9QQ0NSMV9VU0JPVEdfT0ZGU0VUICAgICAgICAgMjUKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VTQk9UR19NQVNLICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1dEVF9PRkZTRVQgICAgICAgICAgICAyNAotI2RlZmluZSBDQ01fUENDUjFfV0RUX01BU0sgICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19BVEFfT0ZGU0VUICAgICAgIDIzCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0FUQV9NQVNLICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0JST01fT0ZGU0VUICAgICAgMjIKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQlJPTV9NQVNLICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQ1NJX09GRlNFVCAgICAgICAyMQotI2RlZmluZSBDQ01fUENDUjFfSENMS19DU0lfTUFTSyAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19ETUFfT0ZGU0VUICAgICAgIDIwCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0RNQV9NQVNLICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0VNSV9PRkZTRVQgICAgICAgMTkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRU1JX01BU0sgICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRU1NQV9PRkZTRVQgICAgICAxOAotI2RlZmluZSBDQ01fUENDUjFfSENMS19FTU1BX01BU0sgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19GRUNfT0ZGU0VUICAgICAgIDE3Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0ZFQ19NQVNLICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1ZQVV9PRkZTRVQgICAgICAgMTYKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfVlBVX01BU0sgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfTENEQ19PRkZTRVQgICAgICAxNQotI2RlZmluZSBDQ01fUENDUjFfSENMS19MQ0RDX01BU0sgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19SVElDX09GRlNFVCAgICAgIDE0Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1JUSUNfTUFTSyAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1NBSEFSQV9PRkZTRVQgICAgMTMKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0sgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfU0xDRENfT0ZGU0VUICAgICAxMgotI2RlZmluZSBDQ01fUENDUjFfSENMS19TTENEQ19NQVNLICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19VU0JPVEdfT0ZGU0VUICAgIDExCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1VTQk9UR19NQVNLICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEsxX09GRlNFVCAgICAgICAgMTAKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzFfTUFTSyAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzJfT0ZGU0VUICAgICAgICA5Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEsyX01BU0sgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzNfT0ZGU0VUICAgICAgICA4Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEszX01BU0sgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzRfT0ZGU0VUICAgICAgICA3Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEs0X01BU0sgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgQ0NNX1BDQ1IxX1ZQVV9CQVVEX09GRlNFVCAgICAgICA2Ci0jZGVmaW5lIENDTV9QQ0NSMV9WUFVfQkFVRF9NQVNLICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTFfQkFVRF9PRkZTRVQgICAgICA1Ci0jZGVmaW5lIENDTV9QQ0NSMV9TU0kxX0JBVURfTUFTSyAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTJfQkFVRF9PRkZTRVQgICAgICA0Ci0jZGVmaW5lIENDTV9QQ0NSMV9TU0kyX0JBVURfTUFTSyAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX05GQ19CQVVEX09GRlNFVCAgICAgICAzCi0jZGVmaW5lIENDTV9QQ0NSMV9ORkNfQkFVRF9NQVNLICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ0NNX1BDQ1IxX01TSENfQkFVRF9PRkZTRVQgICAgICAyCi0jZGVmaW5lIENDTV9QQ0NSMV9NU0hDX0JBVURfTUFTSyAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUICAgICAgICAgIAkzMQorI2RlZmluZSBDQ01fUENDUl9PV0lSRV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9LUFBfT0ZGU0VUICAgICAgICAgICAgCTMwCisjZGVmaW5lIENDTV9QQ0NSX0tQUF9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9SVENfT0ZGU0VUICAgICAgICAgICAgCTI5CisjZGVmaW5lIENDTV9QQ0NSX1JUQ19SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9QV01fT0ZGU0VUICAgICAgICAgICAgCTI4CisjZGVmaW5lIENDTV9QQ0NSX1BXTV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQzX09GRlNFVCAgICAgICAgICAgCTI3CisjZGVmaW5lIENDTV9QQ0NSX0dQVDNfUkVHCQlDQ01fUENDUjEKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMl9PRkZTRVQgICAgICAgICAgIAkyNgorI2RlZmluZSBDQ01fUENDUl9HUFQyX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX0dQVDFfT0ZGU0VUICAgICAgICAgICAJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9XRFRfT0ZGU0VUICAgICAgICAgICAgCTI0CisjZGVmaW5lIENDTV9QQ0NSX1dEVF9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9DU1BJM19PRkZTRVQJCTIzCisjZGVmaW5lCUNDTV9QQ0NSX0NTUEkzX1JFRwkJQ0NNX1BDQ1IxCisKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9DU1BJMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQ1NQSTJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9DU1BJM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0NTUEkzX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfRE1BX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9FTU1BX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0VNTUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUElPX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQSU9fT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQxX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQyX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQzX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfTUFTSyAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX0NTSV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRE1BX01BU0sgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfTUFTSyAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfTENEQ19NQVNLICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19NQVNLICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1NMQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfTUFTSyAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0kyQzFfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0tQUF9NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfS1BQX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfTENEQ19NQVNLICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9MQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfTkZDX01BU0sJCSgxIDw8IENDTV9QQ0NSX05GQ19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX09XSVJFX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X01BU0sgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BFUkNMSzRfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9QV01fTUFTSyAgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BXTV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1JUQ19NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfUlRDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TREhDMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NESEMyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TTENEQ19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kxX0JBVURfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kyX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VQVJUM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1VBUlQzX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUNF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19NQVNLICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfV0RUX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9XRFRfT0ZGU0VUKQorCiAKICNkZWZpbmUgQ0NNX0NDU1JfMzJLU1IgICAgICAgICAgKDEgPDwgMTUpCisKICNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTEgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTAgICAgICAgKDEgPDwgOCkKKwogI2RlZmluZSBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVCAwCiAjZGVmaW5lIENDTV9DQ1NSX0NMS09TRUxfTUFTSyAgIDB4MWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCmluZGV4IDJmOTI0MGIuLmEwZjFiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKQEAgLTM0LDYgKzM0LDEwIEBACiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKgogICogUmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgdGhlIE1YQyBJckRBCkBAIC0yMjUsMzcgKzIyOSwyMTUgQEAKIAkucmVzb3VyY2UgPSBteGNfbmFuZF9yZXNvdXJjZXMsCiB9OwogCisvKgorICogbGNkYzoKKyAqIC0gaS5NWDE6IHRoZSBiYXNpYyBjb250cm9sbGVyCisgKiAtIGkuTVgyMTogdG8gYmUgY2hlY2tlZAorICogLSBpLk1YMjc6IGxpa2UgaS5NWDEsIHdpdGggc2xpZ2h0bHkgdmFyaWF0aW9ucworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mYltdID0geworCXsKKwkJLnN0YXJ0ID0gTENEQ19CQVNFX0FERFIsCisJCS5lbmQgICA9IExDRENfQkFTRV9BRERSICsgMHhGRkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBNWENfSU5UX0xDREMsCisJCS5lbmQgICA9IE1YQ19JTlRfTENEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworLyogbXhjIGxjZCBkcml2ZXIgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZSA9IHsKKwkubmFtZSA9ICJpbXgtZmIiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCisJLnJlc291cmNlID0gbXhjX2ZiLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBGRUNfQkFTRV9BRERSLAorCQkuZW5kCT0gRkVDX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCisJCS5lbmQJPSBNWENfSU5UX0ZFQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZSA9IHsKKwkubmFtZSA9ICJmZWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJMkNfQkFTRV9BRERSLAorCQkuZW5kCT0gSTJDX0JBU0VfQUREUiArIDB4MGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gTVhDX0lOVF9JMkMsCisJCS5lbmQJPSBNWENfSU5UX0kyQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJMkMyX0JBU0VfQUREUiwKKwkJLmVuZAk9IEkyQzJfQkFTRV9BRERSICsgMHgwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBNWENfSU5UX0kyQzIsCisJCS5lbmQJPSBNWENfSU5UX0kyQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcworfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQV01fQkFTRV9BRERSLAorCQkuZW5kCT0gUFdNX0JBU0VfQUREUiArIDB4MGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICAgPSBNWENfSU5UX1BXTSwKKwkJLmVuZCAgICAgPSBNWENfSU5UX1BXTSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlID0geworCS5uYW1lID0gIm14Y19wd20iLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlcworfTsKKworLyoKKyAqIFJlc291cmNlIGRlZmluaXRpb24gZm9yIHRoZSBNWEMgU0RIQworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCQkuc3RhcnQgPSBTREhDMV9CQVNFX0FERFIsCisJCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJWzFdID0geworCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKKwkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJWzJdID0geworCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzEsCisJCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMSwKKwkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQorCQl9LAorfTsKKworc3RhdGljIHU2NCBteGNfc2RoYzFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwID0geworICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKKyAgICAgICAuaWQgICAgICAgICAgICAgPSAwLAorICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzFfZG1hbWFzaywKKyAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKKyAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMV9yZXNvdXJjZXMpLAorICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCQkuc3RhcnQgPSBTREhDMl9CQVNFX0FERFIsCisJCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJWzFdID0geworCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKKwkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzIsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJWzJdID0geworCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzIsCisJCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMiwKKwkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQorCQl9LAorfTsKKworc3RhdGljIHU2NCBteGNfc2RoYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxID0geworICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKKyAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAorICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzJfZG1hbWFzaywKKyAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKKyAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMl9yZXNvdXJjZXMpLAorICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCit9OworCiAvKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewogCVswXSA9IHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTywKLQkJLmJhc2UgPSAodm9pZCopKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDE1MDAwICsgMHgxMDAgKiAwKSwKKwkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAogCX0sCiAJWzFdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDEpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDEwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAogCX0sCiAJWzJdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDIpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDIwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDY0LAogCX0sCiAJWzNdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDMpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAogCX0sCiAJWzRdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTQiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDQpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDQwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDEyOCwKIAl9LAogCVs1XSA9IHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby01IiwKLQkJLmJhc2UgPSAodm9pZCopKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDE1MDAwICsgMHgxMDAgKiA1KSwKKwkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHg1MDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAxNjAsCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAppbmRleCAxZThjYjU3Li4wNDkwMDViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCkBAIC0xLDQgKzEsMyBAQAotCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDM7CkBAIC0xNCwzICsxMywxMCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYwppbmRleCBkZWE2NTIxLi5iZDUxZGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCmluZGV4IDJiNWM2N2YuLjRhM2IwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDEtbXgyLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2Fkcy5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTM1LDYgKzEzNSw3IEBACiB7CiAJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0M19waW5zLAogCQkJQVJSQVlfU0laRShteGNfdWFydDNfcGlucykpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG14Y191YXJ0NF9waW5zW10gPSB7CkBAIC0xNzksNiArMTgwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZteDI3YWRzX25vcl9tdGRfZGV2aWNlLAorCSZteGNfZmVjX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgbXhjX2ZlY19waW5zW10gPSB7CkBAIC0xOTYsNyArMTk4LDcgQEAKIAlQRDExX0FPVVRfRkVDX1RYX0NMSywKIAlQRDEyX0FPVVRfRkVDX1JYRDAsCiAJUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX0NMUiwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKIAlQRDE1X0FPVVRfRkVDX0NPTCwKIAlQRDE2X0FJTl9GRUNfVFhfRVIsCiAJUEYyM19BSU5fRkVDX1RYX0VOCkBAIC0yMDgsMTIgKzIxMCw2IEBACiAJCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucyksICJGRUMiKTsKIH0KIAotc3RhdGljIHZvaWQgZ3Bpb19mZWNfaW5hY3RpdmUodm9pZCkKLXsKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAotCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewogCXsKIAkJLmluaXQgPSB1YXJ0X214Y19wb3J0MF9pbml0LApAQCAtMjYzLDExICsyNTksMTAgQEAKIAlpZiAoKF9fcmF3X3JlYWR3KFBCQ19WRVJTSU9OX1JFRykgJiBDS0lIXzI3TUhaX0JJVF9TRVQpID09IDApCiAJCWZyZWYgPSAyNzAwMDAwMDsKIAotCW14Y19jbG9ja3NfaW5pdChmcmVmKTsKLQlteGNfdGltZXJfaW5pdCgiZ3B0X2Nsay4wIik7CisJbXgyN19jbG9ja3NfaW5pdChmcmVmKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyN2Fkc190aW1lciA9IHsKIAkuaW5pdAk9IG14MjdhZHNfdGltZXJfaW5pdCwKIH07CiAKQEAgLTI4MCw3ICsyNzUsNyBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBteDI3YWRzX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChteDI3YWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyN2Fkc19pb19kZXNjKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGRmZDQxNTYuLmFhNGVhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0yMCwxMSArMjAsMTggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLW14Mi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM4Lmg+CkBAIC0xMjEsMTAgKzEyOCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG14Y191YXJ0Ml9waW5zW10gPSB7IFBFMTBfUEZfVUFSVDNfQ1RTLAorc3RhdGljIGludCBteGNfdWFydDJfcGluc1tdID0geyBQRThfUEZfVUFSVDNfVFhELAogCQkJCVBFOV9QRl9VQVJUM19SWEQsCiAJCQkJUEUxMF9QRl9VQVJUM19DVFMsCi0JCQkJUEU5X1BGX1VBUlQzX1JYRCB9OworCQkJCVBFMTFfUEZfVUFSVDNfUlRTIH07CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTcwLDcgKzE3Nyw3IEBACiAJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCiAJUEQxMl9BT1VUX0ZFQ19SWEQwLAogCVBEMTNfQU9VVF9GRUNfUlhfRFYsCi0JUEQxNF9BT1VUX0ZFQ19DTFIsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCiAJUEQxNV9BT1VUX0ZFQ19DT0wsCiAJUEQxNl9BSU5fRkVDX1RYX0VSLAogCVBGMjNfQUlOX0ZFQ19UWF9FTgpAQCAtMTgyLDEyICsxODksNiBAQAogCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpLCAiRkVDIik7CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9fZmVjX2luYWN0aXZlKHZvaWQpCi17Ci0JbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y19mZWNfcGlucywKLQkJCUFSUkFZX1NJWkUobXhjX2ZlY19waW5zKSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzhfbmFuZF9ib2FyZF9pbmZvID0gewogCS53aWR0aCA9IDEsCiAJLmh3X2VjYyA9IDEsCkBAIC0xOTYsNiArMTk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDM4X25vcl9tdGRfZGV2aWNlLAogCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCiAJJnBjbTAzOF9zcmFtX210ZF9kZXZpY2UsCiB9OwogCkBAIC0yMDgsNiArMjEwLDUxIEBACiAJX19yYXdfd3JpdGVsKDB4MjIyMjBhMDAsIENTQ1JfQSgxKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorc3RhdGljIGludCBteGNfaTJjMV9waW5zW10gPSB7CisJUEM1X1BGX0kyQzJfU0RBLAorCVBDNl9QRl9JMkMyX1NDTAorfTsKKworc3RhdGljIGludCBwY20wMzhfaTJjXzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX2kyYzFfcGlucywgQVJSQVlfU0laRShteGNfaTJjMV9waW5zKSwKKwkJCSJJMkMxIik7Cit9CisKK3N0YXRpYyB2b2lkIHBjbTAzOF9pMmNfMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2kyYzFfcGlucywgQVJSQVlfU0laRShteGNfaTJjMV9waW5zKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM4X2kyY18xX2RhdGEgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCisJLmluaXQgPSBwY20wMzhfaTJjXzFfaW5pdCwKKwkuZXhpdCA9IHBjbTAzOF9pMmNfMV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTAzOF9pMmNfZGV2aWNlc1tdID0geworCVswXSA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwKKwlbMV0gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtcGNmODU2MyIsIDB4NTEpLAorCQkudHlwZSA9ICJwY2Y4NTYzIgorCX0sCisJWzJdID0geworCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGEpLAorCQkudHlwZSA9ICJsbTc1IgorCX0KK307CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCiB7CiAJZ3Bpb19mZWNfYWN0aXZlKCk7CkBAIC0yMTcsOSArMjY0LDE3IEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKIAotCW14Y19ncGlvX21vZGUoUEUxNl9BRl9SVENLKTsgLyogT1dJUkUgKi8KKwlteGNfZ3Bpb19tb2RlKFBFMTZfQUZfT1dJUkUpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzOF9uYW5kX2JvYXJkX2luZm8pOwogCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKwkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNtMDM4X2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUocGNtMDM4X2kyY19kZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZwY20wMzhfaTJjXzFfZGF0YSk7CisjZW5kaWYKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRApAQCAtMjI5LDExICsyODQsMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF90aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiZ3B0X2Nsay4wIik7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKLXN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0gewogCS5pbml0ID0gcGNtMDM4X3RpbWVyX2luaXQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYTU2MGNkNi4uYmY0ZTUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMTcsOSArMTcsMTM4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMyX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyOCk7Cit9CisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMyX3BpbnNbXSA9IHsKKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorfTsKKworc3RhdGljIGludCBwY205NzBfc2RoYzJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY205NzBfc2RoYzJfcGlucywKKwkJQVJSQVlfU0laRShwY205NzBfc2RoYzJfcGlucyksICJzZGhjMiIpOworCWlmKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9HUElPQygyOSksIGRldGVjdF9pcnEsIDAsCisJCQkJImlteC1tbWMtZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVsZWFzZV9ncGlvOworCisJc2V0X2lycV90eXBlKElSUV9HUElPQygyOSksIElSUUZfVFJJR0dFUl9GQUxMSU5HKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1BPUlRDICsgMjgsICJpbXgtbW1jLXJvIik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVsZWFzZV9ncGlvOworCisJbXhjX2dwaW9fbW9kZSgoR1BJT19QT1JUQyB8IDI4KSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUE9SVEMgKyAyOCk7CisKKwlyZXR1cm4gMDsKKworb3V0X3JlbGVhc2VfZ3BpbzoKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMocGNtOTcwX3NkaGMyX3BpbnMsCisJCQlBUlJBWV9TSVpFKHBjbTk3MF9zZGhjMl9waW5zKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNtOTcwX3NkaGMyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPQygyOSksIGRhdGEpOworCWdwaW9fZnJlZShHUElPX1BPUlRDICsgMjgpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwY205NzBfc2RoYzJfcGlucywKKwkJCUFSUkFZX1NJWkUocGNtOTcwX3NkaGMyX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworCS5nZXRfcm8gPSBwY205NzBfc2RoYzJfZ2V0X3JvLAorCS5pbml0ID0gcGNtOTcwX3NkaGMyX2luaXQsCisJLmV4aXQgPSBwY205NzBfc2RoYzJfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgbXhjX2ZiX3BpbnNbXSA9IHsKKwlQQTVfUEZfTFNDTEssCVBBNl9QRl9MRDAsCVBBN19QRl9MRDEsCVBBOF9QRl9MRDIsCisJUEE5X1BGX0xEMywJUEExMF9QRl9MRDQsCVBBMTFfUEZfTEQ1LAlQQTEyX1BGX0xENiwKKwlQQTEzX1BGX0xENywJUEExNF9QRl9MRDgsCVBBMTVfUEZfTEQ5LAlQQTE2X1BGX0xEMTAsCisJUEExN19QRl9MRDExLAlQQTE4X1BGX0xEMTIsCVBBMTlfUEZfTEQxMywJUEEyMF9QRl9MRDE0LAorCVBBMjFfUEZfTEQxNSwJUEEyMl9QRl9MRDE2LAlQQTIzX1BGX0xEMTcsCVBBMjRfUEZfUkVWLAorCVBBMjVfUEZfQ0xTLAlQQTI2X1BGX1BTLAlQQTI3X1BGX1NQTF9TUFIsIFBBMjhfUEZfSFNZTkMsCisJUEEyOV9QRl9WU1lOQywJUEEzMF9QRl9DT05UUkFTVCwgUEEzMV9QRl9PRV9BQ0QKK307CisKK3N0YXRpYyBpbnQgcGNtMDM4X2ZiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfZmJfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX2ZiX3BpbnMpLCAiRkIiKTsKK30KKworc3RhdGljIGludCBwY20wMzhfZmJfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfZmJfcGlucywgQVJSQVlfU0laRShteGNfZmJfcGlucykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKKyAqIG9mIHR5cGU6IExRMDM1UTdESDA2CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgcGNtMDM4X2ZiX2RhdGEgPSB7CisJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCS54cmVzCQk9IDI0MCwKKwkueXJlcwkJPSAzMjAsCisKKwkuYnBwCQk9IDE2LAorCS5oc3luY19sZW4JPSA3LAorCS5sZWZ0X21hcmdpbgk9IDUsCisJLnJpZ2h0X21hcmdpbgk9IDE2LAorCisJLnZzeW5jX2xlbgk9IDEsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDksCisJLmZpeGVkX3NjcmVlbl9jcHUgPSAwLAorCisJLyoKKwkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBWU1lOQyBhY3RpdmUgaGlnaAorCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQorCSAqIC0gY2xvY2sgbm90IGludmVydGVkCisJICogLSBkYXRhIG5vdCBpbnZlcnRlZAorCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQorCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKKwkgKi8KKwkucGNyCQk9IDB4RkEwMDgwQzAsCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKKworCS5pbml0ID0gcGNtMDM4X2ZiX2luaXQsCisJLmV4aXQgPSBwY20wMzhfZmJfZXhpdCwKK307CisKIC8qCiAgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBwY20wMzggaW5pdC4KICAqCkBAIC0yOCw0ICsxNTcsNiBAQAogICovCiB2b2lkIF9faW5pdCBwY205NzBfYmFzZWJvYXJkX2luaXQodm9pZCkKIHsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmcGNtMDM4X2ZiX2RhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjX3BkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKaW5kZXggMTZkZWJjMi4uNDBhNDg1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0gewogCXsKQEAgLTk5LDYgKzEwMCw3IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQzKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQ0W10gPSB7CiAJewogCQkuc3RhcnQgPSBVQVJUNV9CQVNFX0FERFIsCkBAIC0xMzYsMyArMTM4LDQgQEAKIAkucmVzb3VyY2UgPSB1YXJ0NSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDUpLAogfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKaW5kZXggZTc5NjU5ZS4uZDYyMzU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCkBAIC0xLDIxICsxLDQwIEBACi1tZW51ICJNWDMgT3B0aW9ucyIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgzCitpZiBBUkNIX01YMworCitjb25maWcgQVJDSF9NWDMxCisJYm9vbAorCitjb25maWcgQVJDSF9NWDM1CisJYm9vbAorCitjb21tZW50ICJNWDMgcGxhdGZvcm1zOiIKIAogY29uZmlnIE1BQ0hfTVgzMUFEUwogCWJvb2wgIlN1cHBvcnQgTVgzMUFEUyBwbGF0Zm9ybXMiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgzMUFEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCitjb25maWcgTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKwlib29sICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTMzLUVWMSBtb2R1bGUiCisJZGVwZW5kcyBvbiBNQUNIX01YMzFBRFMKKwlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCisJc2VsZWN0IE1GRF9XTTgzNTJfQ09ORklHX01PREVfMAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTMzLUVWMSBQTVUKKwkgIGFuZCBhdWRpbyBtb2R1bGUgZm9yIHRoZSBNWDMxQURTIHBsYXRmb3JtLgorCiBjb25maWcgTUFDSF9QQ00wMzcKLQlib29sICJTdXBwb3J0IFBoeXRlYyBwY20wMzcgcGxhdGZvcm1zIgorCWJvb2wgIlN1cHBvcnQgUGh5dGVjIHBjbTAzNyAoaS5NWDMxKSBwbGF0Zm9ybXMiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgUGh5dGVjIHBjbTAzNyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwogCSAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCiBjb25maWcgTUFDSF9NWDMxTElURQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxIExJVEVLSVQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKQEAgLTIzLDYgKzQyLDcgQEAKIAogY29uZmlnIE1BQ0hfTVgzMV8zRFMKIAlib29sICJTdXBwb3J0IE1YMzFQREsgKDNEUykiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgzMVBESyAoM0RTKSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtMzAsMTAgKzUwLDE4IEBACiAKIGNvbmZpZyBNQUNIX01YMzFNT0JPQVJECiAJYm9vbCAiU3VwcG9ydCBteDMxbW9ib2FyZCBwbGF0Zm9ybXMgKEVQRkwgTW9ib3RzIGdyb3VwKSIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBteDMxbW9ib2FyZCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCi1lbmRtZW51Citjb25maWcgTUFDSF9RT05HCisJYm9vbCAiU3VwcG9ydCBEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIHBsYXRmb3JtIgorCXNlbGVjdCBBUkNIX01YMzEKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIERhdmUvREVOWCBRb25nRVZCLUxJVEUgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KIAorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKaW5kZXggNWExNTE1NC4uMjcyYzhhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKQEAgLTQsOSArNCwxMyBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQkJCTo9IG1tLm8gY2xvY2subyBkZXZpY2VzLm8gaW9tdXgubworb2JqLXkJCQkJOj0gbW0ubyBkZXZpY2VzLm8KK29iai0kKENPTkZJR19BUkNIX01YMzEpCQkrPSBjbG9jay5vIGlvbXV4Lm8KK29iai0kKENPTkZJR19BUkNIX01YMzUpCQkrPSBjbG9jay1pbXgzNS5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxQURTKQkrPSBteDMxYWRzLm8KIG9iai0kKENPTkZJR19NQUNIX01YMzFMSVRFKQkrPSBteDMxbGl0ZS5vCiBvYmotJChDT05GSUdfTUFDSF9QQ00wMzcpCSs9IHBjbTAzNy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxXzNEUykJKz0gbXgzMXBkay5vCi1vYmotJChDT05GSUdfTUFDSF9NWDMxTU9CT0FSRCkJKz0gbXgzMW1vYm9hcmQubworb2JqLSQoQ09ORklHX01BQ0hfTVgzMU1PQk9BUkQpCSs9IG14MzFtb2JvYXJkLm8gbXgzMW1vYm9hcmQtZGV2Ym9hcmQubyBcCisJCQkJICAgbXgzMW1vYm9hcmQtbWFyeGJvdC5vCitvYmotJChDT05GSUdfTUFDSF9RT05HKQkJKz0gcW9uZy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ExMTJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKworI2RlZmluZSBDQ01fQkFTRQlJT19BRERSRVNTKENDTV9CQVNFX0FERFIpCisKKyNkZWZpbmUgQ0NNX0NDTVIgICAgICAgIDB4MDAKKyNkZWZpbmUgQ0NNX1BEUjAgICAgICAgIDB4MDQKKyNkZWZpbmUgQ0NNX1BEUjEgICAgICAgIDB4MDgKKyNkZWZpbmUgQ0NNX1BEUjIgICAgICAgIDB4MEMKKyNkZWZpbmUgQ0NNX1BEUjMgICAgICAgIDB4MTAKKyNkZWZpbmUgQ0NNX1BEUjQgICAgICAgIDB4MTQKKyNkZWZpbmUgQ0NNX1JDU1IgICAgICAgIDB4MTgKKyNkZWZpbmUgQ0NNX01QQ1RMICAgICAgIDB4MUMKKyNkZWZpbmUgQ0NNX1BQQ1RMICAgICAgIDB4MjAKKyNkZWZpbmUgQ0NNX0FDTVIgICAgICAgIDB4MjQKKyNkZWZpbmUgQ0NNX0NPU1IgICAgICAgIDB4MjgKKyNkZWZpbmUgQ0NNX0NHUjAgICAgICAgIDB4MkMKKyNkZWZpbmUgQ0NNX0NHUjEgICAgICAgIDB4MzAKKyNkZWZpbmUgQ0NNX0NHUjIgICAgICAgIDB4MzQKKyNkZWZpbmUgQ0NNX0NHUjMgICAgICAgIDB4MzgKKworI2lmZGVmIEhBVkVfU0VUX1JBVEVfU1VQUE9SVAorc3RhdGljIHZvaWQgY2FsY19kaXZpZGVycyh1MzIgZGl2LCB1MzIgKnByZSwgdTMyICpwb3N0LCB1MzIgbWF4cG9zdCkKK3sKKwl1MzIgbWluX3ByZSwgdGVtcF9wcmUsIG9sZF9lcnIsIGVycjsKKworCW1pbl9wcmUgPSAoZGl2IC0gMSkgLyBtYXhwb3N0ICsgMTsKKwlvbGRfZXJyID0gODsKKworCWZvciAodGVtcF9wcmUgPSA4OyB0ZW1wX3ByZSA+PSBtaW5fcHJlOyB0ZW1wX3ByZS0tKSB7CisJCWlmIChkaXYgPiAodGVtcF9wcmUgKiBtYXhwb3N0KSkKKwkJCWJyZWFrOworCisJCWlmIChkaXYgPCAodGVtcF9wcmUgKiB0ZW1wX3ByZSkpCisJCQljb250aW51ZTsKKworCQllcnIgPSBkaXYgJSB0ZW1wX3ByZTsKKworCQlpZiAoZXJyID09IDApIHsKKwkJCSpwcmUgPSB0ZW1wX3ByZTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gdGVtcF9wcmUgLSBlcnI7CisKKwkJaWYgKGVyciA8IG9sZF9lcnIpIHsKKwkJCW9sZF9lcnIgPSBlcnI7CisJCQkqcHJlID0gdGVtcF9wcmU7CisJCX0KKwl9CisKKwkqcG9zdCA9IChkaXYgKyAqcHJlIC0gMSkgLyAqcHJlOworfQorCisvKiBnZXQgdGhlIGJlc3QgdmFsdWVzIGZvciBhIDMtYml0IGRpdmlkZXIgY29tYmluZWQgd2l0aCBhIDYtYml0IGRpdmlkZXIgKi8KK3N0YXRpYyB2b2lkIGNhbGNfZGl2aWRlcnNfM182KHUzMiBkaXYsIHUzMiAqcHJlLCB1MzIgKnBvc3QpCit7CisJaWYgKGRpdiA+PSA1MTIpIHsKKwkJKnByZSA9IDg7CisJCSpwb3N0ID0gNjQ7CisJfSBlbHNlIGlmIChkaXYgPj0gNjQpIHsKKwkJY2FsY19kaXZpZGVycyhkaXYsIHByZSwgcG9zdCwgNjQpOworCX0gZWxzZSBpZiAoZGl2IDw9IDgpIHsKKwkJKnByZSA9IGRpdjsKKwkJKnBvc3QgPSAxOworCX0gZWxzZSB7CisJCSpwcmUgPSAxOworCQkqcG9zdCA9IGRpdjsKKwl9Cit9CisKKy8qIGdldCB0aGUgYmVzdCB2YWx1ZXMgZm9yIHR3byBjYXNjYWRlZCAzLWJpdCBkaXZpZGVycyAqLworc3RhdGljIHZvaWQgY2FsY19kaXZpZGVyc18zXzModTMyIGRpdiwgdTMyICpwcmUsIHUzMiAqcG9zdCkKK3sKKwlpZiAoZGl2ID49IDY0KSB7CisJCSpwcmUgPSAqcG9zdCA9IDg7CisJfSBlbHNlIGlmIChkaXYgPiA4KSB7CisJCWNhbGNfZGl2aWRlcnMoZGl2LCBwcmUsIHBvc3QsIDgpOworCX0gZWxzZSB7CisJCSpwcmUgPSAxOworCQkqcG9zdCA9IGRpdjsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXBsbCh2b2lkKQoreworCXVsb25nIG1wY3RsID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fTVBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKG1wY3RsLCAyNDAwMDAwMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3BwbGwodm9pZCkKK3sKKwl1bG9uZyBwcGN0bCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChwcGN0bCwgMjQwMDAwMDApOworfQorCitzdHJ1Y3QgYXJtX2FoYl9kaXYgeworCXVuc2lnbmVkIGNoYXIgYXJtLCBhaGIsIHNlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2FoYl9kaXYgY2xrX2NvbnN1bWVyW10gPSB7CisJeyAuYXJtID0gMSwgLmFoYiA9IDQsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gMywgLnNlbCA9IDF9LAorCXsgLmFybSA9IDIsIC5haGIgPSAyLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gNCwgLmFoYiA9IDEsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gNSwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA4LCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDYsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAyLCAuYWhiID0gNCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDQsIC5haGIgPSAyLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2FoYl9kaXYgY2xrX2F1dG9tb3RpdmVbXSA9IHsKKwl7IC5hcm0gPSAxLCAuYWhiID0gMywgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSAyLCAuc2VsID0gMX0sCisJeyAuYXJtID0gMiwgLmFoYiA9IDEsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA2LCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDQsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAyLCAuYWhiID0gMiwgLnNlbCA9IDF9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9hcm0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjAgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIwKTsKKwlzdHJ1Y3QgYXJtX2FoYl9kaXYgKmFhZDsKKwl1bnNpZ25lZCBsb25nIGZyZWYgPSBnZXRfcmF0ZV9tcGxsKCk7CisKKwlpZiAocGRyMCAmIDEpIHsKKwkJLyogY29uc3VtZXIgcGF0aCAqLworCQlhYWQgPSAmY2xrX2NvbnN1bWVyWyhwZHIwID4+IDE2KSAmIDB4Zl07CisJCWlmIChhYWQtPnNlbCkKKwkJCWZyZWYgPSBmcmVmICogMiAvIDM7CisJfSBlbHNlIHsKKwkJLyogYXV0byBwYXRoICovCisJCWFhZCA9ICZjbGtfYXV0b21vdGl2ZVsocGRyMCA+PiA5KSAmIDB4N107CisJCWlmIChhYWQtPnNlbCkKKwkJCWZyZWYgPSBmcmVmICogMyAvIDQ7CisJfQorCXJldHVybiBmcmVmIC8gYWFkLT5hcm07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2FoYihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIwID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMCk7CisJc3RydWN0IGFybV9haGJfZGl2ICphYWQ7CisJdW5zaWduZWQgbG9uZyBmcmVmID0gZ2V0X3JhdGVfbXBsbCgpOworCisJaWYgKHBkcjAgJiAxKQorCQkvKiBjb25zdW1lciBwYXRoICovCisJCWFhZCA9ICZjbGtfY29uc3VtZXJbKHBkcjAgPj4gMTYpICYgMHhmXTsKKwllbHNlCisJCS8qIGF1dG8gcGF0aCAqLworCQlhYWQgPSAmY2xrX2F1dG9tb3RpdmVbKHBkcjAgPj4gOSkgJiAweDddOworCisJcmV0dXJuIGZyZWYgLyBhYWQtPmFoYjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfaXBnKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfYWhiKE5VTEwpID4+IDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF8zXzNfZGl2KHVuc2lnbmVkIGxvbmcgaW4pCit7CisJcmV0dXJuICgoKGluID4+IDMpICYgMHg3KSArIDEpICogKChpbiAmIDB4NykgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdWFydChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIzID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMyk7CisJdW5zaWduZWQgbG9uZyBwZHI0ID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSNCk7CisJdW5zaWduZWQgbG9uZyBkaXYgPSBnZXRfM18zX2RpdihwZHI0ID4+IDEwKTsKKworCWlmIChwZHIzICYgKDEgPDwgMTQpKQorCQlyZXR1cm4gZ2V0X3JhdGVfYXJtKCkgLyBkaXY7CisJZWxzZQorCQlyZXR1cm4gZ2V0X3JhdGVfcHBsbCgpIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zZGhjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjMgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIzKTsKKwl1bnNpZ25lZCBsb25nIGRpdiwgcmF0ZTsKKworCWlmIChwZHIzICYgKDEgPDwgNikpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJZGl2ID0gcGRyMyAmIDB4M2Y7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGl2ID0gKHBkcjMgPj4gOCkgJiAweDNmOworCQlicmVhazsKKwljYXNlIDI6CisJCWRpdiA9IChwZHIzID4+IDE2KSAmIDB4M2Y7CisJCWJyZWFrOworCX0KKworCXJldHVybiByYXRlIC8gZ2V0XzNfM19kaXYoZGl2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXNoYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIxID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMSk7CisJdW5zaWduZWQgbG9uZyBkaXYxLCBkaXYyLCByYXRlOworCisJaWYgKHBkcjEgJiAoMSA8PCA3KSkKKwkJcmF0ZSA9IGdldF9yYXRlX2FybSgpOworCWVsc2UKKwkJcmF0ZSA9IGdldF9yYXRlX3BwbGwoKTsKKworCWRpdjEgPSAocGRyMSA+PiAyOSkgJiAweDc7CisJZGl2MiA9IChwZHIxID4+IDIyKSAmIDB4M2Y7CisKKwlyZXR1cm4gcmF0ZSAvICgoZGl2MSArIDEpICogKGRpdjIgKyAxKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIyID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMik7CisJdW5zaWduZWQgbG9uZyBkaXYxLCBkaXYyLCByYXRlOworCisJaWYgKHBkcjIgJiAoMSA8PCA2KSkKKwkJcmF0ZSA9IGdldF9yYXRlX2FybSgpOworCWVsc2UKKwkJcmF0ZSA9IGdldF9yYXRlX3BwbGwoKTsKKworCXN3aXRjaCAoY2xrLT5pZCkgeworCWRlZmF1bHQ6CisJY2FzZSAwOgorCQlkaXYxID0gcGRyMiAmIDB4M2Y7CisJCWRpdjIgPSAocGRyMiA+PiAyNCkgJiAweDc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGl2MSA9IChwZHIyID4+IDgpICYgMHgzZjsKKwkJZGl2MiA9IChwZHIyID4+IDI3KSAmIDB4NzsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJhdGUgLyAoKGRpdjEgKyAxKSAqIChkaXYyICsgMSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jc2koc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMiA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjIpOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChwZHIyICYgKDEgPDwgNykpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlyZXR1cm4gcmF0ZSAvIGdldF8zXzNfZGl2KChwZHIyID4+IDE2KSAmIDB4M2YpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGdfcGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjAgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIwKTsKKwl1bnNpZ25lZCBsb25nIHBkcjQgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFI0KTsKKwl1bnNpZ25lZCBsb25nIGRpdjEsIGRpdjI7CisKKwlpZiAocGRyMCAmICgxIDw8IDI2KSkgeworCQlkaXYxID0gKHBkcjQgPj4gMTkpICYgMHg3OworCQlkaXYyID0gKHBkcjQgPj4gMTYpICYgMHg3OworCQlyZXR1cm4gZ2V0X3JhdGVfYXJtKCkgLyAoKGRpdjEgKyAxKSAqIChkaXYyICsgMSkpOworCX0gZWxzZSB7CisJCWRpdjEgPSAocGRyMCA+PiAxMikgJiAweDc7CisJCXJldHVybiBnZXRfcmF0ZV9haGIoTlVMTCkgLyBkaXYxOworCX0KK30KKworc3RhdGljIGludCBjbGtfY2dyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDMgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtfY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gQ0NNX0JBU0UgKyBlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKKwkJLmVuYWJsZQkJPSBjbGtfY2dyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IGNsa19jZ3JfZGlzYWJsZSwJXAorCX0KKworREVGSU5FX0NMT0NLKGFzcmNfY2xrLCAgIDAsIENDTV9DR1IwLCAgMCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgMCwgQ0NNX0NHUjAsICAyLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGF1ZG11eF9jbGssIDAsIENDTV9DR1IwLCAgNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soY2FuMV9jbGssICAgMCwgQ0NNX0NHUjAsICA2LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGNhbjJfY2xrLCAgIDEsIENDTV9DR1IwLCAgOCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpMV9jbGssICAwLCBDQ01fQ0dSMCwgMTAsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMSwgQ0NNX0NHUjAsIDEyLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGVjdF9jbGssICAgIDAsIENDTV9DR1IwLCAxNCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlZGlvX2NsaywgICAwLCBDQ01fQ0dSMCwgMTYsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgIDAsIENDTV9DR1IwLCAxOCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlcGl0MV9jbGssICAwLCBDQ01fQ0dSMCwgMjAsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGVwaXQyX2NsaywgIDEsIENDTV9DR1IwLCAyMiwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNhaV9jbGssICAgMCwgQ0NNX0NHUjAsIDI0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlc2RoYzFfY2xrLCAwLCBDQ01fQ0dSMCwgMjYsIGdldF9yYXRlX3NkaGMsIE5VTEwpOworREVGSU5FX0NMT0NLKGVzZGhjMl9jbGssIDEsIENDTV9DR1IwLCAyOCwgZ2V0X3JhdGVfc2RoYywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNkaGMzX2NsaywgMiwgQ0NNX0NHUjAsIDMwLCBnZXRfcmF0ZV9zZGhjLCBOVUxMKTsKKworREVGSU5FX0NMT0NLKGZlY19jbGssICAgIDAsIENDTV9DR1IxLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncGlvMV9jbGssICAwLCBDQ01fQ0dSMSwgIDIsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGdwaW8yX2NsaywgIDEsIENDTV9DR1IxLCAgNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3BpbzNfY2xrLCAgMiwgQ0NNX0NHUjEsICA2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dSMSwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgMCwgQ0NNX0NHUjEsIDEwLCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmMyX2NsaywgICAxLCBDQ01fQ0dSMSwgMTIsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGkyYzNfY2xrLCAgIDIsIENDTV9DR1IxLCAxNCwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaW9tdXhjX2NsaywgMCwgQ0NNX0NHUjEsIDE2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpcHVfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMTgsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGtwcF9jbGssICAgIDAsIENDTV9DR1IxLCAyMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhtbGJfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMjIsIGdldF9yYXRlX2FoYiwgTlVMTCk7CitERUZJTkVfQ0xPQ0sobXNoY19jbGssICAgMCwgQ0NNX0NHUjEsIDI0LCBnZXRfcmF0ZV9tc2hjLCBOVUxMKTsKK0RFRklORV9DTE9DSyhvd2lyZV9jbGssICAwLCBDQ01fQ0dSMSwgMjYsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgIDAsIENDTV9DR1IxLCAyOCwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0socm5nY19jbGssICAgMCwgQ0NNX0NHUjEsIDMwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworCitERUZJTkVfQ0xPQ0socnRjX2NsaywgICAgMCwgQ0NNX0NHUjIsICAwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHJ0aWNfY2xrLCAgIDAsIENDTV9DR1IyLCAgMiwgZ2V0X3JhdGVfYWhiLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAwLCBDQ01fQ0dSMiwgIDQsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soc2RtYV9jbGssICAgMCwgQ0NNX0NHUjIsICA2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzcGJhX2NsaywgICAwLCBDQ01fQ0dSMiwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3BkaWZfY2xrLCAgMCwgQ0NNX0NHUjIsIDEwLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgICAwLCBDQ01fQ0dSMiwgMTIsIGdldF9yYXRlX3NzaSwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgMSwgQ0NNX0NHUjIsIDE0LCBnZXRfcmF0ZV9zc2ksIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR1IyLCAxNiwgZ2V0X3JhdGVfdWFydCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgMSwgQ0NNX0NHUjIsIDE4LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAyLCBDQ01fQ0dSMiwgMjAsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR1IyLCAyMiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sod2RvZ19jbGssICAgMCwgQ0NNX0NHUjIsIDI0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhtYXhfY2xrLCAgICAwLCBDQ01fQ0dSMiwgMjYsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGFkbXV4X2NsaywgIDAsIENDTV9DR1IyLCAzMCwgTlVMTCwgTlVMTCk7CisKK0RFRklORV9DTE9DSyhjc2lfY2xrLCAgICAwLCBDQ01fQ0dSMywgIDAsIGdldF9yYXRlX2NzaSwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaWltX2NsaywgICAgMCwgQ0NNX0NHUjMsICAyLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHUyZF9jbGssICAwLCBDQ01fQ0dSMywgIDQsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKQlcCisJewkJCQlcCisJCS5kZXZfaWQgPSBkLAkJXAorCQkuY29uX2lkID0gbiwJCVwKKwkJLmNsayA9ICZjLAkJXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gX19pbml0ZGF0YSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFzcmMiLCBhc3JjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdWRtdXgiLCBhdWRtdXhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2FuIiwgY2FuMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjYW4iLCBjYW4yX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVjdCIsIGVjdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlZGlvIiwgZWRpb19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlc2FpIiwgZXNhaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZGhjIiwgZXNkaGMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMiLCBlc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RoYyIsIGVzZGhjM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3BpbzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW8yX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJncHQuMCIsIE5VTEwsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4yIiwgTlVMTCwgaTJjM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpb211eGMiLCBpb211eGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaXB1IiwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImtwcCIsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtbGIiLCBtbGJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXNoYyIsIG1zaGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJuZ2MiLCBybmdjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0YyIsIHJ0Y19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzY2MiLCBzY2NfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RtYSIsIHNkbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3BiYSIsIHNwYmFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3BkaWYiLCBzcGRpZl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidXNib3RnIiwgdXNib3RnX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImlpbSIsIGlpbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHUyZCIsIGdwdTJkX2NsaykKK307CisKK2ludCBfX2luaXQgbXgzNV9jbG9ja3NfaW5pdCgpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGxsID0gMDsKKworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDM1KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19MTF9DT05TT0xFCisJbGwgPSAoMyA8PCAxNik7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJLyogVHVybiBvZmYgYWxsIGNsb2NrcyBleGNlcHQgdGhlIG9uZXMgd2UgbmVlZCB0byBzdXJ2aXZlLCBuYW1lbHk6CisJICogRU1JLCBHUElPMS8yLzMsIEdQVCwgSU9NVVgsIE1BWCBhbmQgZXZlbnR1YWxseSB1YXJ0CisJICovCisJX19yYXdfd3JpdGVsKCgzIDw8IDE4KSwgQ0NNX0JBU0UgKyBDQ01fQ0dSMCk7CisJX19yYXdfd3JpdGVsKCgzIDw8IDIpIHwgKDMgPDwgNCkgfCAoMyA8PCA2KSB8ICgzIDw8IDgpIHwgKDMgPDwgMTYpLAorCQkJQ0NNX0JBU0UgKyBDQ01fQ0dSMSk7CisJX19yYXdfd3JpdGVsKCgzIDw8IDI2KSB8IGxsLCBDQ01fQkFTRSArIENDTV9DR1IyKTsKKwlfX3Jhd193cml0ZWwoMCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMyk7CisKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKaW5kZXggYjE3NDZhYS4uY2E0NmY0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCkBAIC0yMyw5ICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAKICNpbmNsdWRlICJjcm1fcmVncy5oIgogCkBAIC02NCwxNyArNjgsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgbWN1X3BsbF9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBtY3VfbWFpbl9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayB1c2JfcGxsX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNlcmlhbF9wbGxfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsazsKIAotc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IGNncl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuIDA7CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyB8PSAzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CkBAIC04MiwxMzMgKzg2LDY5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBjZ3JfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHJlZzsKIAorCWlmICghY2xrLT5lbmFibGVfcmVnKQorCQlyZXR1cm47CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBFTUkgY2xvY2sgKi8KKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IE1YQ19DQ01fQ0dSMiAmJiBjbGstPmVuYWJsZV9zaGlmdCA9PSA4KQorCQlyZWcgfD0gKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCiAJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19lbWlfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGxfcmVmX2dldF9yYXRlKHZvaWQpCiB7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnICY9IH4oMyA8PCBjbGstPmVuYWJsZV9zaGlmdCk7Ci0JcmVnIHw9ICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKLQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWc7Ci0Jc2lnbmVkIGxvbmcgcGQgPSAxOwkvKiBQcmUtZGl2aWRlciAqLwotCXNpZ25lZCBsb25nIG1maTsJLyogTXVsdGlwbGljYXRpb24gRmFjdG9yIChJbnRlZ2VyIHBhcnQpICovCi0Jc2lnbmVkIGxvbmcgbWZuOwkvKiBNdWx0aXBsaWNhdGlvbiBGYWN0b3IgKEludGVnZXIgcGFydCkgKi8KLQlzaWduZWQgbG9uZyBtZmQ7CS8qIE11bHRpcGxpY2F0aW9uIEZhY3RvciAoRGVub21pbmF0b3IgUGFydCkgKi8KLQlzaWduZWQgbG9uZyB0bXA7Ci0JdTMyIHJlZl9mcmVxID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXdoaWxlICgoKHJlZl9mcmVxIC8gcGQpICogMTApID4gcmF0ZSkKLQkJcGQrKzsKLQotCWlmICgocmVmX2ZyZXEgLyBwZCkgPCBQUkVfRElWX01JTl9GUkVRKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHRoZSByZWZfZnJlcS8yIGluIHRoZSBmb2xsb3dpbmcgaXMgdG8gcm91bmQgdXAgKi8KLQltZmkgPSAoKChyYXRlIC8gMikgKiBwZCkgKyAocmVmX2ZyZXEgLyAyKSkgLyByZWZfZnJlcTsKLQlpZiAobWZpIDwgNSB8fCBtZmkgPiAxNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBwaWNrIGEgbWZkIHZhbHVlIHRoYXQgd2lsbCB3b3JrCi0JICogdGhlbiBzb2x2ZSBmb3IgbWZuICovCi0JbWZkID0gcmVmX2ZyZXEgLyA1MDAwMDsKLQotCS8qCi0JICogICAgICAgICAgcGxsX2ZyZXEgKiBwZCAqIG1mZAotCSAqICAgbWZuID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0gIChtZmkgKiBtZmQpCi0JICogICAgICAgICAgIDIgKiByZWZfZnJlcQotCSAqLwotCS8qIHRoZSB0bXAvMiBpcyBmb3Igcm91bmRpbmcgKi8KLQl0bXAgPSByZWZfZnJlcSAvIDEwMDAwOwotCW1mbiA9Ci0JICAgICgoKCgoKHJhdGUgLyAyKSArICh0bXAgLyAyKSkgLyB0bXApICogcGQpICogbWZkKSAvIDEwMDAwKSAtCi0JICAgIChtZmkgKiBtZmQpOwotCi0JbWZuID0gbWZuICYgMHgzZmY7Ci0JcGQtLTsKLQltZmQtLTsKLQotCS8qIENoYW5nZSB0aGUgUGxsIHZhbHVlICovCi0JcmVnID0gKG1maSA8PCBNWENfQ0NNX1BDVExfTUZJX09GRlNFVCkgfAotCSAgICAobWZuIDw8IE1YQ19DQ01fUENUTF9NRk5fT0ZGU0VUKSB8Ci0JICAgIChtZmQgPDwgTVhDX0NDTV9QQ1RMX01GRF9PRkZTRVQpIHwgKHBkIDw8IE1YQ19DQ01fUENUTF9QRF9PRkZTRVQpOwotCi0JaWYgKGNsayA9PSAmbWN1X3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fTVBDVEwpOwotCWVsc2UgaWYgKGNsayA9PSAmdXNiX3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fVVBDVEwpOwotCWVsc2UgaWYgKGNsayA9PSAmc2VyaWFsX3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fU1JQQ1RMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbG9uZyBtZmksIG1mbiwgbWZkLCBwZGYsIHJlZl9jbGssIG1mbl9hYnM7Ci0JdW5zaWduZWQgbG9uZyByZWcsIGNjbXI7Ci0JczY0IHRlbXA7CisJdW5zaWduZWQgbG9uZyBjY21yOwogCXVuc2lnbmVkIGludCBwcmNzOwogCiAJY2NtciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7CiAJcHJjcyA9IChjY21yICYgTVhDX0NDTV9DQ01SX1BSQ1NfTUFTSykgPj4gTVhDX0NDTV9DQ01SX1BSQ1NfT0ZGU0VUOwogCWlmIChwcmNzID09IDB4MSkKLQkJcmVmX2NsayA9IENLSUxfQ0xLX0ZSRVEgKiAxMDI0OworCQlyZXR1cm4gQ0tJTF9DTEtfRlJFUSAqIDEwMjQ7CiAJZWxzZQotCQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7Ci0KLQlpZiAoY2xrID09ICZtY3VfcGxsX2NsaykgewotCQlpZiAoKGNjbXIgJiBNWENfQ0NNX0NDTVJfTVBFKSA9PSAwKQotCQkJcmV0dXJuIHJlZl9jbGs7Ci0JCWlmICgoY2NtciAmIE1YQ19DQ01fQ0NNUl9NRFMpICE9IDApCi0JCQlyZXR1cm4gcmVmX2NsazsKLQkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9NUENUTCk7Ci0JfSBlbHNlIGlmIChjbGsgPT0gJnVzYl9wbGxfY2xrKQotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1VQQ1RMKTsKLQllbHNlIGlmIChjbGsgPT0gJnNlcmlhbF9wbGxfY2xrKQotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1NSUENUTCk7Ci0JZWxzZSB7Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwZGYgPSAocmVnICYgTVhDX0NDTV9QQ1RMX1BEX01BU0spID4+IE1YQ19DQ01fUENUTF9QRF9PRkZTRVQ7Ci0JbWZkID0gKHJlZyAmIE1YQ19DQ01fUENUTF9NRkRfTUFTSykgPj4gTVhDX0NDTV9QQ1RMX01GRF9PRkZTRVQ7Ci0JbWZpID0gKHJlZyAmIE1YQ19DQ01fUENUTF9NRklfTUFTSykgPj4gTVhDX0NDTV9QQ1RMX01GSV9PRkZTRVQ7Ci0JbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7Ci0JbWZuID0gbWZuX2FicyA9IHJlZyAmIE1YQ19DQ01fUENUTF9NRk5fTUFTSzsKLQotCWlmIChtZm4gPj0gMHgyMDApIHsKLQkJbWZuIHw9IDB4RkZGRkZFMDA7Ci0JCW1mbl9hYnMgPSAtbWZuOwotCX0KLQotCXJlZl9jbGsgKj0gMjsKLQlyZWZfY2xrIC89IHBkZiArIDE7Ci0KLQl0ZW1wID0gKHU2NCkgcmVmX2NsayAqIG1mbl9hYnM7Ci0JZG9fZGl2KHRlbXAsIG1mZCArIDEpOwotCWlmIChtZm4gPCAwKQotCQl0ZW1wID0gLXRlbXA7Ci0JdGVtcCA9IChyZWZfY2xrICogbWZpKSArIHRlbXA7Ci0KLQlyZXR1cm4gdGVtcDsKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOwogfQogCi1zdGF0aWMgaW50IF9jbGtfdXNiX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdXNiX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1VQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlcmlhbF9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9TUlBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKHJlZywgcGxsX3JlZl9nZXRfcmF0ZSgpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByZWcsIGNjbXI7CisKKwljY21yID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKKworCWlmICghKGNjbXIgJiBNWENfQ0NNX0NDTVJfTVBFKSB8fCAoY2NtciAmIE1YQ19DQ01fQ0NNUl9NRFMpKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX01QQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKQEAgLTIyMiw3ICsxNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfY2xrX3VzYl9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCB1c2JfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKQEAgLTIzMSw3ICsxNzEsNyBAQAogCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19zZXJpYWxfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IHNlcmlhbF9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yNDUsNyArMTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19zZXJpYWxfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgc2VyaWFsX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yNTgsNyArMTk4LDcgQEAKICNkZWZpbmUgUERSMShtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIxKSAmIG1hc2spID4+IG9mZikKICNkZWZpbmUgUERSMihtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIyKSAmIG1hc2spID4+IG9mZikKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tY3VfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtY3VfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHBtY3IwID0gX19yYXdfcmVhZGwoTVhDX0NDTV9QTUNSMCk7CiAKQEAgLTI2OCw3ICsyMDgsNyBAQAogCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZtY3VfcGxsX2Nsayk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfaGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhaGJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X3BkZjsKIApAQCAtMjc3LDcgKzIxNyw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobWF4X3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2lwZ19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcGdfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgaXBnX3BkZjsKIApAQCAtMjg2LDcgKzIyNiw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaXBnX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX25mY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZmNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKIApAQCAtMjk1LDcgKzIzNSw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobmZjX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2hzcF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoc3BfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgaHNwX3BkZjsKIApAQCAtMzA0LDcgKzI0NCw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaHNwX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3VzYl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1c2JfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgdXNiX3BkZiwgdXNiX3ByZXBkZjsKIApAQCAtMzE1LDcgKzI1NSw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAodXNiX3ByZXBkZiArIDEpIC8gKHVzYl9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jc2lfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnLCBwcmUsIHBvc3Q7CiAKQEAgLTMyOSw3ICsyNjksNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHByZSAqIHBvc3QpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NzaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgZGl2ID0gcGFyZW50IC8gcmF0ZTsKQEAgLTM0Miw3ICsyODIsNyBAQAogCXJldHVybiBwYXJlbnQgLyAocHJlICogcG9zdCk7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19jc2lfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgaW50IGNzaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIApAQCAtMzYzLDE2ICszMDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3Blcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwZXJfcGRmOwotCi0JcGVyX3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX1BFUl9QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfUEVSX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChwZXJfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzc2kxX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHNzaTFfcGRmLCBzc2kxX3ByZXBkZjsKIApAQCAtMzgzLDcgKzMxNCw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoc3NpMV9wcmVwZGYgKyAxKSAvIChzc2kxX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NpMl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBzc2kyX3BkZiwgc3NpMl9wcmVwZGY7CiAKQEAgLTM5NCw3ICszMjUsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHNzaTJfcHJlcGRmICsgMSkgLyAoc3NpMl9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19maXJpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcmlfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmlyaV9wZGYsIGZpcmlfcHJlcGRmOwogCkBAIC00MDUsNyArMzM2LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChmaXJpX3ByZXBkZiArIDEpIC8gKGZpcmlfcGRmICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfZmlyaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXUzMiBwcmUsIHBvc3Q7CiAJdTMyIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CkBAIC00MjAsNyArMzUxLDcgQEAKIAogfQogCi1zdGF0aWMgaW50IF9jbGtfZmlyaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyBpbnQgZmlyaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIApAQCAtNDQxLDEyICszNzIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tYnhfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJ4X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIDI7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfbXN0aWNrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtc3RpY2sxX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG1zdGlfcGRmOwogCkBAIC00NTUsNyArMzg2LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChtc3RpX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX21zdGljazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbXN0aWNrMl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBtc3RpX3BkZjsKIApAQCAtNDcyLDY2MSArNDAzLDE4NSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKLQkubmFtZSA9ICJja2loIiwKIAkuZ2V0X3JhdGUgPSBjbGtfY2tpaF9nZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ja2lsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gQ0tJTF9DTEtfRlJFUTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGsgPSB7Ci0JLm5hbWUgPSAiY2tpbCIsCi0JLmdldF9yYXRlID0gY2xrX2NraWxfZ2V0X3JhdGUsCi19OwotCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJtY3VfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAorCS5nZXRfcmF0ZSA9IG1jdV9wbGxfZ2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfbWFpbl9jbGsgPSB7Ci0JLm5hbWUgPSAibWN1X21haW5fY2xrIiwKIAkucGFyZW50ID0gJm1jdV9wbGxfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbWN1X21haW5fZ2V0X3JhdGUsCisJLmdldF9yYXRlID0gbWN1X21haW5fZ2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZXJpYWxfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJzZXJpYWxfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX3NlcmlhbF9wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19zZXJpYWxfcGxsX2Rpc2FibGUsCisJLmdldF9yYXRlID0gc2VyaWFsX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gc2VyaWFsX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBzZXJpYWxfcGxsX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJ1c2JfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX3VzYl9wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa191c2JfcGxsX2Rpc2FibGUsCisJLmdldF9yYXRlID0gdXNiX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gdXNiX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSB1c2JfcGxsX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewotCS5uYW1lID0gImFoYl9jbGsiLAogCS5wYXJlbnQgPSAmbWN1X21haW5fY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfaGNsa19nZXRfcmF0ZSwKKwkuZ2V0X3JhdGUgPSBhaGJfZ2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfY2xrID0gewotCS5uYW1lID0gInBlcl9jbGsiLAotCS5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JLmdldF9yYXRlID0gX2Nsa19wZXJfZ2V0X3JhdGUsCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzLCBwKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5lbmFibGUJCT0gY2dyX2VuYWJsZSwJCVwKKwkJLmRpc2FibGUJPSBjZ3JfZGlzYWJsZSwJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJXAorCQkucGFyZW50CQk9IHAsCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfQ0xPQ0sxKG5hbWUsIGksIGVyLCBlcywgZ2V0c2V0cm91bmQsIHMsIHApCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCQlcCisJCS5pZAkJPSBpLAkJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCQlcCisJCS5nZXRfcmF0ZQk9IGdldHNldHJvdW5kIyNfZ2V0X3JhdGUsCVwKKwkJLnNldF9yYXRlCT0gZ2V0c2V0cm91bmQjI19zZXRfcmF0ZSwJXAorCQkucm91bmRfcmF0ZQk9IGdldHNldHJvdW5kIyNfcm91bmRfcmF0ZSwJXAorCQkuZW5hYmxlCQk9IGNncl9lbmFibGUsCQkJXAorCQkuZGlzYWJsZQk9IGNncl9kaXNhYmxlLAkJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQlcCisJfQorCitERUZJTkVfQ0xPQ0socGVyY2xrX2NsaywgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsICAwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgIDIsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhncHRfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAgNCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGVwaXQxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsICA2LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soZXBpdDJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgIDgsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGF0YV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsIDEyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RtYV9jbGsxLCAgIDAsIE1YQ19DQ01fQ0dSMCwgMTQsIE5VTEwsICZzZG1hX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAgMiwgTVhDX0NDTV9DR1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHJuZ19jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsIDE4LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMCwgMjAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAgMSwgTVhDX0NDTV9DR1IwLCAyMiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHNzaTFfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjAsIDI0LCBzc2kxX2dldF9yYXRlLCBOVUxMLCAmc2VyaWFsX3BsbF9jbGspOworREVGSU5FX0NMT0NLKGkyYzFfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjAsIDI2LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMl9jbGssICAgIDEsIE1YQ19DQ01fQ0dSMCwgMjgsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhpMmMzX2NsaywgICAgMiwgTVhDX0NDTV9DR1IwLCAzMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworCitERUZJTkVfQ0xPQ0sobXBlZzRfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMSwgIDAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2sxX2NsaywgMCwgTVhDX0NDTV9DR1IxLCAgMiwgbXN0aWNrMV9nZXRfcmF0ZSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2syX2NsaywgMSwgTVhDX0NDTV9DR1IxLCAgNCwgbXN0aWNrMl9nZXRfcmF0ZSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKK0RFRklORV9DTE9DSzEoY3NpX2NsaywgICAgMCwgTVhDX0NDTV9DR1IxLCAgNiwgY3NpLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRjX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgIDgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgMCwgTVhDX0NDTV9DR1IxLCAxMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDEyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazIsICAgIDAsIE1YQ19DQ01fQ0dSMSwgMTgsIHVzYl9nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGtwcF9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaXB1X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgMjIsIGhzcF9nZXRfcmF0ZSwgTlVMTCwgJm1jdV9tYWluX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgIDIsIE1YQ19DQ01fQ0dSMSwgMjQsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAgMywgTVhDX0NDTV9DR1IxLCAyNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICA0LCBNWENfQ0NNX0NHUjEsIDI4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMSwgMzAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKKworREVGSU5FX0NMT0NLKHNzaTJfY2xrLCAgICAxLCBNWENfQ0NNX0NHUjIsICAwLCBzc2kyX2dldF9yYXRlLCBOVUxMLCAmc2VyaWFsX3BsbF9jbGspOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsICAyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMiwgIDQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtYnhfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IyLCAgNiwgbWJ4X2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZW1pX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMiwgIDgsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGljX2NsaywgICAgMCwgTVhDX0NDTV9DR1IyLCAxMCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLMShmaXJpX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsIDEyLCBmaXJpLCBOVUxMLCAmdXNiX3BsbF9jbGspOworCitERUZJTkVfQ0xPQ0soc2RtYV9jbGsyLCAgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1c2JfY2xrMSwgICAgMCwgTlVMTCwgICAgICAgICAgMCwgdXNiX2dldF9yYXRlLCBOVUxMLCAmdXNiX3BsbF9jbGspOworREVGSU5FX0NMT0NLKG5mY19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBuZmNfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGlwZ19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBpcGdfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKKworI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorCXsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsIFwKKwl9LAorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaSIsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkiLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlwdS1jb3JlIiwgTlVMTCwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14M19zZGNfZmIiLCBOVUxMLCBpcHVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCisJX1JFR0lTVEVSX0NMT0NLKCJteDMtY2FtZXJhLjAiLCAiY3NpIiwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyYzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxLjAiLCBOVUxMLCBvd2lyZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZmlyaSIsIGZpcmlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0aWMiLCBydGljX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJuZyIsIHJuZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZG1hX2FoYiIsIHNkbWFfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkbWFfaXBnIiwgc2RtYV9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2syX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXBlZzQiLCBtcGVnNF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYngiLCBtYnhfY2xrKQogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrX2NsayA9IHsKLQkubmFtZSA9ICJwZXJjbGtfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfQ1NQSTFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAxLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfQ1NQSTJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAyLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfQ1NQSTNfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKLQkubmFtZSA9ICJpcGdfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmdldF9yYXRlID0gX2Nsa19pcGdfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbWlfY2xrID0gewotCS5uYW1lID0gImVtaV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9FTUlfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19lbWlfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7Ci0JLm5hbWUgPSAiZ3B0X2NsayIsCi0JLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0dQVF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0gewotCS5uYW1lID0gInB3bV9jbGsiLAotCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9QV01fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZXBpdF9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gImVwaXRfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0VQSVQxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gImVwaXRfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0VQSVQyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG5mY19jbGsgPSB7Ci0JLm5hbWUgPSAibmZjX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbmZjX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2NjX2NsayA9IHsKLQkubmFtZSA9ICJzY2NfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpcHVfY2xrID0gewotCS5uYW1lID0gImlwdV9jbGsiLAotCS5wYXJlbnQgPSAmbWN1X21haW5fY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfaHNwX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX0lQVV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBrcHBfY2xrID0gewotCS5uYW1lID0gImtwcF9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9LUFBfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2RvZ19jbGsgPSB7Ci0JLm5hbWUgPSAid2RvZ19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9XRE9HX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0gewotCS5uYW1lID0gInJ0Y19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9SVENfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAidXNiX2NsayIsCi0JIC5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JIC5nZXRfcmF0ZSA9IF9jbGtfdXNiX2dldF9yYXRlLH0sCi0JewotCSAubmFtZSA9ICJ1c2JfYWhiX2NsayIsCi0JIC5wYXJlbnQgPSAmYWhiX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9VU0JPVEdfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKLQkubmFtZSA9ICJjc2lfY2xrIiwKLQkucGFyZW50ID0gJnNlcmlhbF9wbGxfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfY3NpX2dldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gX2Nsa19jc2lfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX2NzaV9zZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9DU0lfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1VBUlQxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1VBUlQyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMiwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQzX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMywKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQ0X09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gNCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQ1X09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gImkyY19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfSTJDMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJpMmNfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0kyQzJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiaTJjX2NsayIsCi0JIC5pZCA9IDIsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9JMkMzX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG93aXJlX2NsayA9IHsKLQkubmFtZSA9ICJvd2lyZV9jbGsiLAotCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX09XSVJFX09GRlNFVCwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAic2RoY19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU0RfTU1DMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzZGhjX2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9TRF9NTUMyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInNzaV9jbGsiLAotCSAucGFyZW50ID0gJnNlcmlhbF9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX3NzaTFfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU1NJMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzc2lfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZzZXJpYWxfcGxsX2NsaywKLQkgLmdldF9yYXRlID0gX2Nsa19zc2kyX2dldF9yYXRlLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX1NTSTJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmlyaV9jbGsgPSB7Ci0JLm5hbWUgPSAiZmlyaV9jbGsiLAotCS5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JLnJvdW5kX3JhdGUgPSBfY2xrX2Zpcmlfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX2Zpcmlfc2V0X3JhdGUsCi0JLmdldF9yYXRlID0gX2Nsa19maXJpX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0ZJUklfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRhX2NsayA9IHsKLQkubmFtZSA9ICJhdGFfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfQVRBX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1ieF9jbGsgPSB7Ci0JLm5hbWUgPSAibWJ4X2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0dBQ0NfT0ZGU0VULAotCS5nZXRfcmF0ZSA9IF9jbGtfbWJ4X2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdnB1X2NsayA9IHsKLQkubmFtZSA9ICJ2cHVfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfR0FDQ19PRkZTRVQsCi0JLmdldF9yYXRlID0gX2Nsa19tYnhfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBydGljX2NsayA9IHsKLQkubmFtZSA9ICJydGljX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX1JUSUNfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcm5nX2NsayA9IHsKLQkubmFtZSA9ICJybmdfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfUk5HX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJzZG1hX2FoYl9jbGsiLAotCSAucGFyZW50ID0gJmFoYl9jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU0RNQV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzZG1hX2lwZ19jbGsiLAotCSAucGFyZW50ID0gJmlwZ19jbGssfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXBlZzRfY2xrID0gewotCS5uYW1lID0gIm1wZWc0X2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX0hBTlRST19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2bDJjY19jbGsgPSB7Ci0JLm5hbWUgPSAidmwyY2NfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfSEFOVFJPX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zdGlja19jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gIm1zdGlja19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX21zdGljazFfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0sxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gIm1zdGlja19jbGsiLAotCSAuaWQgPSAxLAotCSAucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX21zdGljazJfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0syX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlpbV9jbGsgPSB7Ci0JLm5hbWUgPSAiaWltX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0lJTV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NrbzFfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgZGl2LCBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQlpZiAocGFyZW50ICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gOCkKLQkJZGl2ID0gMTY7Ci0JZWxzZSBpZiAoZGl2ID4gNCkKLQkJZGl2ID0gODsKLQllbHNlIGlmIChkaXYgPiAyKQotCQlkaXYgPSA0OwotCi0JcmV0dXJuIHBhcmVudCAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2NrbzFfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZywgZGl2LCBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQotCWlmIChkaXYgPT0gMTYpCi0JCWRpdiA9IDQ7Ci0JZWxzZSBpZiAoZGl2ID09IDgpCi0JCWRpdiA9IDM7Ci0JZWxzZSBpZiAoZGl2ID09IDQpCi0JCWRpdiA9IDI7Ci0JZWxzZSBpZiAoZGl2ID09IDIpCi0JCWRpdiA9IDE7Ci0JZWxzZSBpZiAoZGl2ID09IDEpCi0JCWRpdiA9IDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgJiB+TVhDX0NDTV9DT1NSX0NMS09VVERJVl9NQVNLOwotCXJlZyB8PSBkaXYgPDwgTVhDX0NDTV9DT1NSX0NMS09VVERJVl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DT1NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NrbzFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0KLQlkaXYgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NPU1IpICYgTVhDX0NDTV9DT1NSX0NMS09VVERJVl9NQVNLID4+Ci0JICAgIE1YQ19DQ01fQ09TUl9DTEtPVVRESVZfT0ZGU0VUOwotCi0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoMSA8PCBkaXYpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2tvMV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoraW50IF9faW5pdCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAl1MzIgcmVnOworCWludCBpOwogCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DT1NSKSAmIH5NWENfQ0NNX0NPU1JfQ0xLT1NFTF9NQVNLOwotCi0JaWYgKHBhcmVudCA9PSAmbWN1X21haW5fY2xrKQotCQlyZWcgfD0gMCA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZpcGdfY2xrKQotCQlyZWcgfD0gMSA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ1c2JfcGxsX2NsaykKLQkJcmVnIHw9IDIgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSBtY3VfbWFpbl9jbGsucGFyZW50KQotCQlyZWcgfD0gMyA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZhaGJfY2xrKQotCQlyZWcgfD0gNSA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZzZXJpYWxfcGxsX2NsaykKLQkJcmVnIHw9IDcgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tpaF9jbGspCi0JCXJlZyB8PSA4IDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmVtaV9jbGspCi0JCXJlZyB8PSA5IDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmlwdV9jbGspCi0JCXJlZyB8PSAweEEgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmbmZjX2NsaykKLQkJcmVnIHw9IDB4QiA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ1YXJ0X2Nsa1swXSkKLQkJcmVnIHw9IDB4QyA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ09TUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfY2xrX2NrbzFfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DT1NSKSB8IE1YQ19DQ01fQ09TUl9DTEtPRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DT1NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2NrbzFfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgJiB+TVhDX0NDTV9DT1NSX0NMS09FTjsKLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NPU1IpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBja28xX2NsayA9IHsKLQkubmFtZSA9ICJja28xX2NsayIsCi0JLmdldF9yYXRlID0gX2Nsa19ja28xX2dldF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfY2tvMV9zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfY2tvMV9yb3VuZF9yYXRlLAotCS5zZXRfcGFyZW50ID0gX2Nsa19ja28xX3NldF9wYXJlbnQsCi0JLmVuYWJsZSA9IF9jbGtfY2tvMV9lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2NrbzFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZja2loX2NsaywKLQkmY2tpbF9jbGssCi0JJm1jdV9wbGxfY2xrLAotCSZ1c2JfcGxsX2NsaywKLQkmc2VyaWFsX3BsbF9jbGssCi0JJm1jdV9tYWluX2NsaywKLQkmYWhiX2NsaywKLQkmcGVyX2NsaywKLQkmcGVyY2xrX2NsaywKLQkmY2tvMV9jbGssCi0JJmVtaV9jbGssCi0JJmNzcGlfY2xrWzBdLAotCSZjc3BpX2Nsa1sxXSwKLQkmY3NwaV9jbGtbMl0sCi0JJmlwZ19jbGssCi0JJmdwdF9jbGssCi0JJnB3bV9jbGssCi0JJndkb2dfY2xrLAotCSZydGNfY2xrLAotCSZlcGl0X2Nsa1swXSwKLQkmZXBpdF9jbGtbMV0sCi0JJm5mY19jbGssCi0JJmlwdV9jbGssCi0JJmtwcF9jbGssCi0JJnVzYl9jbGtbMF0sCi0JJnVzYl9jbGtbMV0sCi0JJmNzaV9jbGssCi0JJnVhcnRfY2xrWzBdLAotCSZ1YXJ0X2Nsa1sxXSwKLQkmdWFydF9jbGtbMl0sCi0JJnVhcnRfY2xrWzNdLAotCSZ1YXJ0X2Nsa1s0XSwKLQkmaTJjX2Nsa1swXSwKLQkmaTJjX2Nsa1sxXSwKLQkmaTJjX2Nsa1syXSwKLQkmb3dpcmVfY2xrLAotCSZzZGhjX2Nsa1swXSwKLQkmc2RoY19jbGtbMV0sCi0JJnNzaV9jbGtbMF0sCi0JJnNzaV9jbGtbMV0sCi0JJmZpcmlfY2xrLAotCSZhdGFfY2xrLAotCSZydGljX2NsaywKLQkmcm5nX2NsaywKLQkmc2RtYV9jbGtbMF0sCi0JJnNkbWFfY2xrWzFdLAotCSZtc3RpY2tfY2xrWzBdLAotCSZtc3RpY2tfY2xrWzFdLAotCSZzY2NfY2xrLAotCSZpaW1fY2xrLAotfTsKLQotaW50IF9faW5pdCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQotewotCXUzMiByZWc7Ci0Jc3RydWN0IGNsayAqKmNsa3A7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzEpOwogCiAJY2tpaF9yYXRlID0gZnJlZjsKIAotCWZvciAoY2xrcCA9IG14Y19jbGtzOyBjbGtwIDwgbXhjX2Nsa3MgKyBBUlJBWV9TSVpFKG14Y19jbGtzKTsgY2xrcCsrKQotCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCi0JaWYgKGNwdV9pc19teDMxKCkpIHsKLQkJY2xrX3JlZ2lzdGVyKCZtcGVnNF9jbGspOwotCQljbGtfcmVnaXN0ZXIoJm1ieF9jbGspOwotCX0gZWxzZSB7Ci0JCWNsa19yZWdpc3RlcigmdnB1X2Nsayk7Ci0JCWNsa19yZWdpc3RlcigmdmwyY2NfY2xrKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgcG9zc2libGUgY2xvY2tzICovCi0JX19yYXdfd3JpdGVsKE1YQ19DQ01fQ0dSMF9HUFRfTUFTSywgTVhDX0NDTV9DR1IwKTsKKwlfX3Jhd193cml0ZWwoKDMgPDwgNCksIE1YQ19DQ01fQ0dSMCk7CiAJX19yYXdfd3JpdGVsKDAsIE1YQ19DQ01fQ0dSMSk7Ci0KLQlfX3Jhd193cml0ZWwoTVhDX0NDTV9DR1IyX0VNSV9NQVNLIHwKLQkJICAgICBNWENfQ0NNX0NHUjJfSVBNVVgxX01BU0sgfAotCQkgICAgIE1YQ19DQ01fQ0dSMl9JUE1VWDJfTUFTSyB8Ci0JCSAgICAgTVhDX0NDTV9DR1IyX01YQ0NMS0VOU0VMX01BU0sgfAkvKiBmb3IgTVgzMiAqLwotCQkgICAgIE1YQ19DQ01fQ0dSMl9DSElLQ0FNUEVOX01BU0sgfAkvKiBmb3IgTVgzMiAqLwotCQkgICAgIE1YQ19DQ01fQ0dSMl9PVlJWUFVCVVNZX01BU0sgfAkvKiBmb3IgTVgzMiAqLworCV9fcmF3X3dyaXRlbCgoMyA8PCA4KSB8ICgzIDw8IDE0KSB8ICgzIDw8IDE2KXwKIAkJICAgICAxIDw8IDI3IHwgMSA8PCAyOCwgLyogQml0IDI3IGFuZCAyOCBhcmUgbm90IGRlZmluZWQgZm9yCiAJCQkJCSAgIE1YMzIsIGJ1dCBzdGlsbCByZXF1aXJlZCB0byBiZSBzZXQgKi8KIAkJICAgICBNWENfQ0NNX0NHUjIpOwogCi0JY2xrX2Rpc2FibGUoJmNrbzFfY2xrKTsKLQljbGtfZGlzYWJsZSgmdXNiX3BsbF9jbGspOworCXVzYl9wbGxfZGlzYWJsZSgmdXNiX3BsbF9jbGspOwogCiAJcHJfaW5mbygiQ2xvY2sgaW5wdXQgc291cmNlIGlzICVsZFxuIiwgY2xrX2dldF9yYXRlKCZja2loX2NsaykpOwogCkBAIC0xMTQzLDYgKzU5OCw4IEBACiAJCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fUE1DUjEpOwogCX0KIAorCW14Y190aW1lcl9pbml0KCZpcGdfY2xrKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvY3JtX3JlZ3MuaAppbmRleCA0YTBlMGVkLi5hZGZhMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2NybV9yZWdzLmgKQEAgLTkxLDQ3ICs5MSw2IEBACiAjZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfUE9ERl9PRkZTRVQgICAgICAgICAgICAwCiAjZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfUE9ERl9NQVNLICAgICAgICAgICAgICAweDcKIAotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl8xICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfMiAgICAgICAgICAgICAgICAgICgweDEgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzMgICAgICAgICAgICAgICAgICAoMHgyIDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl80ICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfNSAgICAgICAgICAgICAgICAgICgweDQgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzYgICAgICAgICAgICAgICAgICAoMHg1IDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl83ICAgICAgICAgICAgICAgICAgKDB4NiA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfOCAgICAgICAgICAgICAgICAgICgweDcgPDwgMTEpCi0KLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMSAgICAgICAgICAgICAgICAgICgweDAgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMiAgICAgICAgICAgICAgICAgICgweDEgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMyAgICAgICAgICAgICAgICAgICgweDIgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfNCAgICAgICAgICAgICAgICAgICgweDMgPDwgNikKLQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8xICAgICAgICAgICAgICAgICAgKDB4MCA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8yICAgICAgICAgICAgICAgICAgKDB4MSA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8zICAgICAgICAgICAgICAgICAgKDB4MiA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl80ICAgICAgICAgICAgICAgICAgKDB4MyA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl81ICAgICAgICAgICAgICAgICAgKDB4NCA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl82ICAgICAgICAgICAgICAgICAgKDB4NSA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl83ICAgICAgICAgICAgICAgICAgKDB4NiA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl84ICAgICAgICAgICAgICAgICAgKDB4NyA8PCAzKQotCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzEgICAgICAgICAgICAgICAgICAoMHgwIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzIgICAgICAgICAgICAgICAgICAoMHgxIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzMgICAgICAgICAgICAgICAgICAoMHgyIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzQgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzUgICAgICAgICAgICAgICAgICAoMHg0IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzYgICAgICAgICAgICAgICAgICAoMHg1IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzcgICAgICAgICAgICAgICAgICAoMHg2IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzggICAgICAgICAgICAgICAgICAoMHg3IDw8IDgpCi0KLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfMSAgICAgICAgICAgICAgICAgIDB4MAotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl8yICAgICAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzMgICAgICAgICAgICAgICAgICAweDIKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfNCAgICAgICAgICAgICAgICAgIDB4MwotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl81ICAgICAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzYgICAgICAgICAgICAgICAgICAweDUKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfNyAgICAgICAgICAgICAgICAgIDB4NgotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl84ICAgICAgICAgICAgICAgICAgMHg3Ci0KICNkZWZpbmUgTVhDX0NDTV9QRFIxX1VTQl9QUkRGX09GRlNFVCAgICAgICAgICAgIDMwCiAjZGVmaW5lIE1YQ19DQ01fUERSMV9VU0JfUFJERl9NQVNLICAgICAgICAgICAgICAoMHgzIDw8IDMwKQogI2RlZmluZSBNWENfQ0NNX1BEUjFfVVNCX1BPREZfT0ZGU0VUICAgICAgICAgICAgMjcKQEAgLTE1MiwxMTggKzExMSw2IEBACiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFJDU1IgKi8KICNkZWZpbmUgTVhDX0NDTV9SQ1NSX05GMTZCCQkJMHg4MDAwMDAwMAogCi0vKiBCaXQgZGVmaW5pdGlvbnMgZm9yIGJvdGggTUNVLCBVU0IgYW5kIFNSIFBMTCBjb250cm9sIHJlZ2lzdGVycyAqLwotI2RlZmluZSBNWENfQ0NNX1BDVExfQlJNICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBNWENfQ0NNX1BDVExfUERfT0ZGU0VUICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICgweEYgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRkRfT0ZGU0VUICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M0ZGIDw8IDE2KQotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZJX09GRlNFVCAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX01GSV9NQVNLICAgICAgICAgICAgICAgICAgICgweEYgPDwgMTApCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRk5fT0ZGU0VUICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRk5fTUFTSyAgICAgICAgICAgICAgICAgICAweDNGRgotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMxX09GRlNFVCAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMxX01BU0sgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMyX09GRlNFVCAgICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMyX01BU0sgICAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9HUFRfT0ZGU0VUICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9HUFRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMV9PRkZTRVQgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMl9PRkZTRVQgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMl9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JSU1fT0ZGU0VUICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjBfSUlNX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0FUQV9PRkZTRVQgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9BVEFfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RNQV9PRkZTRVQgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1NETUFfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9DU1BJM19PRkZTRVQgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjBfQ1NQSTNfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1JOR19PRkZTRVQgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9STkdfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfVUFSVDFfT0ZGU0VUICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1VBUlQxX01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9VQVJUMl9PRkZTRVQgICAgICAgICAgICAgICAyMgotI2RlZmluZSBNWENfQ0NNX0NHUjBfVUFSVDJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1NTSTFfT0ZGU0VUICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TU0kxX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDMV9PRkZTRVQgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzFfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMyX09GRlNFVCAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDMl9NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzNfT0ZGU0VUICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMzX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDMwKQotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9IQU5UUk9fT0ZGU0VUICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9IQU5UUk9fTUFTSyAgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzFfT0ZGU0VUICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzFfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzJfT0ZGU0VUICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzJfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9DU0lfT0ZGU0VUICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9DU0lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9SVENfT0ZGU0VUICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9SVENfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9XRE9HX09GRlNFVCAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjFfV0RPR19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1BXTV9PRkZTRVQgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9QV01fTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjFfU0lNX09GRlNFVCAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1NJTV9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9FQ1RfT0ZGU0VUICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjFfRUNUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VTQk9UR19PRkZTRVQgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VU0JPVEdfTUFTSyAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfS1BQX09GRlNFVCAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX0tQUF9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMjApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9JUFVfT0ZGU0VUICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBNWENfQ0NNX0NHUjFfSVBVX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQzX09GRlNFVCAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUM19NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDRfT0ZGU0VUICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQ0X01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUNV9PRkZTRVQgICAgICAgICAgICAgICAyOAotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX09XSVJFX09GRlNFVCAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9PV0lSRV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDMwKQotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9TU0kyX09GRlNFVCAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9TU0kyX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMV9PRkZTRVQgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMl9PRkZTRVQgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMl9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9HQUNDX09GRlNFVCAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9HQUNDX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9FTUlfT0ZGU0VUICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9FTUlfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9SVElDX09GRlNFVCAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfUlRJQ19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0ZJUklfT0ZGU0VUICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9GSVJJX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfSVBNVVgxX09GRlNFVCAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0lQTVVYMV9NQVNLICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9JUE1VWDJfT0ZGU0VUICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjJfSVBNVVgyX01BU0sgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLQotLyogVGhlc2UgbmV3IENHUjIgYml0cyBhcmUgYWRkZWQgaW4gTVgzMiAqLwotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1lTQ0xLU0VMX09GRlNFVAkxOAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1lTQ0xLU0VMX01BU0sJCSgweDMgPDwgMTgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1TU0lDTEtTRUxfT0ZGU0VUCTIwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1TU0lDTEtTRUxfTUFTSwkJKDB4MyA8PCAyMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVBFUkNMS1NFTF9PRkZTRVQJMjIKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVBFUkNMS1NFTF9NQVNLCQkoMHgzIDw8IDIyKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfTVhDQ0xLRU5TRUxfT0ZGU0VUCQkyNAotI2RlZmluZSBNWENfQ0NNX0NHUjJfTVhDQ0xLRU5TRUxfTUFTSwkJKDB4MSA8PCAyNCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0NISUtDQU1QRU5fT0ZGU0VUCQkyNQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ0hJS0NBTVBFTl9NQVNLCQkoMHgxIDw8IDI1KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfT1ZSVlBVQlVTWV9PRkZTRVQJCTI2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9PVlJWUFVCVVNZX01BU0sJCSgweDEgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1FTkFfT0ZGU0VUCQkzMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQU9NRU5BX01BU0sJCSgweDEgPDwgMzApCi0KIC8qCiAgKiBMVFIwIHJlZ2lzdGVyIG9mZnNldHMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IGY4NDI4ODAuLjM4MGJlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBbXSA9IHsKIAl7CiAJCS5zdGFydCA9IFVBUlQxX0JBU0VfQUREUiwKQEAgLTgyLDYgKzg0LDcgQEAKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDIpLAogfTsKIAorI2lmZGVmIENPTkZJR19BUkNIX01YMzEKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IFVBUlQ0X0JBU0VfQUREUiwKQEAgLTExOSw2ICsxMjIsNyBAQAogCS5yZXNvdXJjZSA9IHVhcnQ0LAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0NCksCiB9OworI2VuZGlmIC8qIENPTkZJR19BUkNIX01YMzEgKi8KIAogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKQEAgLTE2NCw4ICsxNjgsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gTkZDX0JBU0VfQUREUiwKLQkJLmVuZAk9IE5GQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLnN0YXJ0CT0gMCwgLyogcnVudGltZSBkZXBlbmRlbnQgKi8KKwkJLmVuZAk9IDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiAJfSwgewogCQkuc3RhcnQJPSBNWENfSU5UX05BTkRGQywKQEAgLTE4MCwzICsxODQsMTg4IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19uYW5kX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gbXhjX25hbmRfcmVzb3VyY2VzLAogfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IEkyQ19CQVNFX0FERFIsCisJCS5lbmQgPSBJMkNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMsCisJCS5lbmQgPSBNWENfSU5UX0kyQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmMwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyYzBfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IEkyQzJfQkFTRV9BRERSLAorCQkuZW5kID0gSTJDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBNWENfSU5UX0kyQzIsCisJCS5lbmQgPSBNWENfSU5UX0kyQzIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmMxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyYzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJMkMzX0JBU0VfQUREUiwKKwkJLmVuZCA9IEkyQzNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMzLAorCQkuZW5kID0gTVhDX0lOVF9JMkMzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTIgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyYzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjMl9yZXNvdXJjZXMsCit9OworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNzZGhjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1NQ19TREhDMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNTUNfU0RIQzFfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX01NQ19TREhDMSwKKwkJLmVuZCA9IE1YQ19JTlRfTU1DX1NESEMxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNzZGhjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1NQ19TREhDMl9CQVNFX0FERFIsCisJCS5lbmQgPSBNTUNfU0RIQzJfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX01NQ19TREhDMiwKKwkJLmVuZCA9IE1YQ19JTlRfTU1DX1NESEMyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTAgPSB7CisJLm5hbWUgPSAibXhjLW1tYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjc2RoYzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNzZGhjMF9yZXNvdXJjZXMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJteGMtbW1jIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNzZGhjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y3NkaGMxX3Jlc291cmNlcywKK307CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgzMSAqLworCisvKiBpLk1YMzEgSW1hZ2UgUHJvY2Vzc2luZyBVbml0ICovCisKKy8qIFRoZSByZXNvdXJjZSBvcmRlciBpcyBpbXBvcnRhbnQhICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14M19pcHVfcnNyY1tdID0geworCXsKKwkJLnN0YXJ0ID0gSVBVX0NUUkxfQkFTRV9BRERSLAorCQkuZW5kID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHg1RiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBJUFVfQ1RSTF9CQVNFX0FERFIgKyAweDg4LAorCQkuZW5kID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX0lQVV9TWU4sCisJCS5lbmQgPSBNWENfSU5UX0lQVV9TWU4sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JUFVfRVJSLAorCQkuZW5kID0gTVhDX0lOVF9JUFVfRVJSLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfaXB1ID0geworCS5uYW1lID0gImlwdS1jb3JlIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXgzX2lwdV9yc3JjKSwKKwkucmVzb3VyY2UgPSBteDNfaXB1X3JzcmMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZiX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCNCwKKwkJLmVuZAk9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4MUJGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfZmIgPSB7CisJLm5hbWUJCT0gIm14M19zZGNfZmIiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBmYl9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWENfRkVDX0JBU0VfQUREUiwKKwkJLmVuZAk9IE1YQ19GRUNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSBNWENfSU5UX0ZFQywKKwkJLmVuZAk9IE1YQ19JTlRfRkVDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlID0geworCS5uYW1lID0gImZlYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19mZWNfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG14M19kZXZpY2VzX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX214MzEoKSkgeworCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBNWDMxX05GQ19CQVNFX0FERFI7CisJCW14Y19uYW5kX3Jlc291cmNlc1swXS5lbmQgPSBNWDMxX05GQ19CQVNFX0FERFIgKyAweGZmZjsKKwl9CisJaWYgKGNwdV9pc19teDM1KCkpIHsKKwkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzNV9ORkNfQkFTRV9BRERSOworCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9ORkNfQkFTRV9BRERSICsgMHhmZmY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChteDNfZGV2aWNlc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA5OTQ5ZWY0Li44OGMwNGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC02LDMgKzYsMTEgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14M19pcHU7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfZmI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW14My9pb211eC5jCmluZGV4IDdhNTA4OGIuLjQwZmZjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXguYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgVmFsZW50aW4gTG9uZ2NoYW1wIDx2YWxlbnRpbi5sb25nY2hhbXBAZXBmbC5jaD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjEsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CkBAIC0zOCw2ICs0MCw4IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbXV4X2xvY2spOwogCiAjZGVmaW5lIElPTVVYX1JFR19NQVNLIChJT01VWF9QQUROVU1fTUFTSyAmIH4weDMpCisKK3Vuc2lnbmVkIGxvbmcgbXhjX3Bpbl9hbGxvY19tYXBbTkJfUE9SVFMgKiAzMiAvIEJJVFNfUEVSX0xPTkddOwogLyoKICAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCiAgKi8KQEAgLTUwLDkgKzU0LDYgQEAKIAlmaWVsZCA9IHBpbl9tb2RlICYgMHgzOwogCW1vZGUgPSAocGluX21vZGUgJiBJT01VWF9NT0RFX01BU0spID4+IElPTVVYX01PREVfU0hJRlQ7CiAKLQlwcl9kZWJ1ZygiJXM6IHJlZyBvZmZzZXQgPSAweCV4IGZpZWxkID0gJWQgbW9kZSA9IDB4JTAyeFxuIiwKLQkJCV9fZnVuY19fLCAocGluX21vZGUgJiBJT01VWF9SRUdfTUFTSyksIGZpZWxkLCBtb2RlKTsKLQogCXNwaW5fbG9jaygmZ3Bpb19tdXhfbG9jayk7CiAKIAlsID0gX19yYXdfcmVhZGwocmVnKTsKQEAgLTkzLDYgKzk0LDg2IEBACiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXRfcGFkKTsKIAogLyoKKyAqIHNldHVwcyBhIHNpbmdsZSBwaW46CisgKiAJLSByZXNlcnZlcyB0aGUgcGluIHNvIHRoYXQgaXQgaXMgbm90IGNsYWltZWQgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIHNldHVwcyB0aGUgaW9tdXggYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uCisgKiAJLSBpZiB0aGUgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYSBHUElPLCB3ZSBjbGFpbSBpdCB0aHJvdWdoIGtlcm5lbCBncGlvbGliCisgKi8KK2ludCBteGNfaW9tdXhfc2V0dXBfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOworCXVuc2lnbmVkIGdwaW87CisKKwlpZiAocGFkID49IChQSU5fTUFYICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IEF0dGVtcHQgdG8gcmVxdWVzdCBub25leGlzdGFudCBwaW4gJXUgZm9yIFwiJXNcIlxuIiwKKwkJCXBhZCwgbGFiZWwgPyBsYWJlbCA6ICI/Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXhjX2lvbXV4OiBwaW4gJXUgYWxyZWFkeSB1c2VkLiBBbGxvY2F0aW9uIGZvciBcIiVzXCIgZmFpbGVkXG4iLAorCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW14Y19pb211eF9tb2RlKHBpbik7CisKKwkvKiBpZiB3ZSBoYXZlIGEgZ3Bpbywgd2UgY2FuIGFsbG9jYXRlIGl0ICovCisJZ3BpbyA9IChwaW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQ7CisJaWYgKGdwaW8gPCAoR1BJT19QT1JUX01BWCArIDEpICogMzIpCisJCWlmIChncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX3Bpbik7CisKK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAobXhjX2lvbXV4X3NldHVwX3BpbigqcCwgbGFiZWwpKQorCQkJZ290byBzZXR1cF9lcnJvcjsKKwkJcCsrOworCX0KKwlyZXR1cm4gMDsKKworc2V0dXBfZXJyb3I6CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwaW5fbGlzdCwgaSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMpOworCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluKQoreworCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOworCXVuc2lnbmVkIGdwaW87CisKKwlpZiAocGFkIDwgKFBJTl9NQVggKyAxKSkKKwkJY2xlYXJfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApOworCisJZ3BpbyA9IChwaW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQ7CisJaWYgKGdwaW8gPCAoR1BJT19QT1JUX01BWCArIDEpICogMzIpCisJCWdwaW9fZnJlZShncGlvKTsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfcGluKTsKKwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW14Y19pb211eF9yZWxlYXNlX3BpbigqcCk7CisJCXArKzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMpOworCisvKgogICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgogICogc2lnbmFsLgogICovCkBAIC0xMTEsNCArMTkyLDMgQEAKIAlzcGluX3VubG9jaygmZ3Bpb19tdXhfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXRfZ3ByKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggMDU4OWI1Yy4uOWUxNDU5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC0yMiwxMCArMjIsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKwogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiEKICAqIEBmaWxlIG1tLmMKQEAgLTUwLDYgKzU0LDE2IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVklDX0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gQVZJQ19TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKIH07CiAKQEAgLTYyLDMgKzc2LDI0IEBACiB7CiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorc3RhdGljIGludCBteGNfaW5pdF9sMngwKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpsMngwX2Jhc2U7CisKKwlsMngwX2Jhc2UgPSBpb3JlbWFwKEwyQ0NfQkFTRV9BRERSLCA0MDk2KTsKKwlpZiAoSVNfRVJSKGwyeDBfYmFzZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyZW1hcHBpbmcgTDIgY2FjaGUgYXJlYSBmYWlsZWQgd2l0aCAlbGRcbiIsCisJCQkJUFRSX0VSUihsMngwX2Jhc2UpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbDJ4MF9pbml0KGwyeDBfYmFzZSwgMHgwMDAzMDAyNCwgMHgwMDAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChteGNfaW5pdF9sMngwKTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKaW5kZXggZjkwMmE3Yy4uODNlNWU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM1LDYgKzM3LDEyIEBACiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2F1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyohCkBAIC05NCwxMyArMTAyLDE2IEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKK3N0YXRpYyBpbnQgdWFydF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCiB7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMV9fQ1RTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMV9fUlRTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMV9fVFhEMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMV9fUlhEMSk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSwgInVhcnQtMCIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIH0KICNlbHNlIC8qICFTRVJJQUxfSU1YICovCkBAIC0xNzYsNyArMTg3LDcgQEAKIAkvKgogCSAqIENvbmZpZ3VyZSBJTlQgbGluZSBhcyBHUElPIGlucHV0CiAJICovCi0JbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPMV80LCBJT01VWF9DT05GSUdfR1BJTykpOworCW14Y19pb211eF9zZXR1cF9waW4oSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPMV80LCBJT01VWF9DT05GSUdfR1BJTyksICJleHBpbyIpOwogCiAJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGFuZCBjbGVhciB0aGUgc3RhdHVzICovCiAJX19yYXdfd3JpdGV3KDB4RkZGRiwgUEJDX0lOVE1BU0tfQ0xFQVJfUkVHKTsKQEAgLTE5MSwyNiArMjAyLDMwMSBAQAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEVYUElPX1BBUkVOVF9JTlQsIG14MzFhZHNfZXhwaW9faXJxX2hhbmRsZXIpOwogfQogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisvKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBzZXR1cCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcworICogMTEzMy1FVjEgUE1VL2F1ZGlvIGJvYXJkLiAgV2hlbiBvdGhlciBQTVUgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgdGhlCisgKiByZWd1bGF0b3IgZGVmaW5pdGlvbnMgbWF5IGJlIHNoYXJlZCB3aXRoIHRoZW0sIGJ1dCBmb3Igbm93IHRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgd2l0aCB0aGlzIGJvYXJkIHNvIHdvdWxkIGdlbmVyYXRlIHdhcm5pbmdzIGFib3V0CisgKiB1bnVzZWQgc3RhdGljcyBhbmQgc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpYyB0byB0aGlzCisgKiBtb2R1bGUuCisgKi8KKworLyogQ1BVICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc3cxYV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiY3B1X3ZjYyIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MWFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMUEiLAorCQkubWluX3VWID0gMTI3NTAwMCwKKwkJLm1heF91ViA9IDE2MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCQkgICAgUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxNDAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzdzFhX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc3cxYV9jb25zdW1lcnMsCit9OworCisvKiBTeXN0ZW0gSU8gLSBIaWdoICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvaGlfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0hPIiwKKwkJLm1pbl91ViA9IDI4MDAwMDAsCisJCS5tYXhfdVYgPSAyODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDI4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogU3lzdGVtIElPIC0gTG93ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvbG9fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0xPIiwKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAxODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogRERSIFJBTSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MmFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMkEiLAorCQkubWluX3VWID0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLnN0YXRlX2Rpc2sgPSB7CisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAwLAorCQkgfSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxkbzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZDQU0vVk1NQzEvVk1NQzIiLAorCQkubWluX3VWID0gMjgwMDAwMCwKKwkJLm1heF91ViA9IDI4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuYXBwbHlfdVYgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgbGRvMl9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiQVZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiSFBWREQiLAorCX0sCit9OworCisvKiBDT0RFQyBhbmQgU0lNICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbGRvMl9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkVTSU0vVlNJTS9BVkREIiwKKwkJLm1pbl91ViA9IDMzMDAwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGxkbzJfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBsZG8yX2NvbnN1bWVycywKK307CisKKy8qIEdlbmVyYWwgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2ZGlnX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWRElHIiwKKwkJLm1pbl91ViA9IDE1MDAwMDAsCisJCS5tYXhfdVYgPSAxNTAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogVHJhbmNlaXZlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG80X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWUkYxL0NWRERfMi43NzUiLAorCQkubWluX3VWID0gMjUwMDAwMCwKKwkJLm1heF91ViA9IDI1MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuYXBwbHlfdVYgPSAxLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHdtODM1MF9sZWRfcGxhdGZvcm1fZGF0YSB3bTgzNTBfbGVkX2RhdGEgPSB7CisJLm5hbWUgICAgICAgICAgICA9ICJ3bTgzNTA6d2hpdGUiLAorCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwKKwkubWF4X3VBICAgICAgICAgID0gMjc4OTksCit9OworCitzdGF0aWMgc3RydWN0IHdtODM1MF9hdWRpb19wbGF0Zm9ybV9kYXRhIGlteDMyYWRzX3dtODM1MF9zZXR1cCA9IHsKKwkudm1pZF9kaXNjaGFyZ2VfbXNlY3MgPSAxMDAwLAorCS5kcmFpbl9tc2VjcyA9IDMwLAorCS5jYXBfZGlzY2hhcmdlX21zZWNzID0gNzAwLAorCS52bWlkX2NoYXJnZV9tc2VjcyA9IDcwMCwKKwkudm1pZF9zX2N1cnZlID0gV004MzUwX1NfQ1VSVkVfU0xPVywKKwkuZGlzX291dDQgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLmRpc19vdXQzID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS5kaXNfb3V0MiA9IFdNODM1MF9ESVNDSEFSR0VfU0xPVywKKwkuZGlzX291dDEgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLnZyb2lfb3V0NCA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MyA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MiA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MSA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfZW5hYmxlID0gMCwKKwkuY29kZWNfY3VycmVudF9vbiA9IFdNODM1MF9DT0RFQ19JU0VMXzFfMCwKKwkuY29kZWNfY3VycmVudF9zdGFuZGJ5ID0gV004MzUwX0NPREVDX0lTRUxfMF81LAorCS5jb2RlY19jdXJyZW50X2NoYXJnZSA9IFdNODM1MF9DT0RFQ19JU0VMXzFfNSwKK307CisKK3N0YXRpYyBpbnQgbXgzMV93bTgzNTBfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IGk7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCAwLCBXTTgzNTBfR1BJT19ESVJfSU4sCisJCQkgICBXTTgzNTBfR1BJTzBfUFdSX09OX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9VUCwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDMsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPM19QV1JfT0ZGX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfRE9XTiwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDQsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPNF9NUl9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNywgV004MzUwX0dQSU9fRElSX0lOLAorCQkJICAgV004MzUwX0dQSU83X0hJQkVSTkFURV9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNiwgV004MzUwX0dQSU9fRElSX09VVCwKKwkJCSAgIFdNODM1MF9HUElPNl9TRE9VVF9PVVQsIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDgsIFdNODM1MF9HUElPX0RJUl9PVVQsCisJCQkgICBXTTgzNTBfR1BJTzhfVkNDX0ZBVUxUX09VVCwgV004MzUwX0dQSU9fQUNUSVZFX0xPVywKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfTk9ORSwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA5LCBXTTgzNTBfR1BJT19ESVJfT1VULAorCQkJICAgV004MzUwX0dQSU85X0JBVFRfRkFVTFRfT1VULCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCS8qIEZpeCB1cCBmb3Igb3VyIG93biBzdXBwbGllcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZG8yX2NvbnN1bWVycyk7IGkrKykKKwkJbGRvMl9jb25zdW1lcnNbaV0uZGV2ID0gd204MzUwLT5kZXY7CisKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfMSwgJnN3MWFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzMsICZ2aW9oaV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfNCwgJnZpb2xvX2RhdGEpOworCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBXTTgzNTBfRENEQ182LCAmc3cyYV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18xLCAmbGRvMV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18yLCAmbGRvMl9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18zLCAmdmRpZ19kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET180LCAmbGRvNF9kYXRhKTsKKworCS8qIExFRHMgKi8KKwl3bTgzNTBfZGNkY19zZXRfc2xvdCh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsIDEsIDEsCisJCQkgICAgIFdNODM1MF9EQzVfRVJSQUNUX1NIVVRET1dOX0NPTlYpOworCXdtODM1MF9pc2lua19zZXRfZmxhc2god204MzUwLCBXTTgzNTBfSVNJTktfQSwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfRElTQUJMRSwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfVFJJR19CSVQsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl8zMk1TLAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PTl9JTlNUQU5ULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfSU5TVEFOVCwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfTU9ERV9FTik7CisJd204MzUwX2RjZGMyNV9zZXRfbW9kZSh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsCisJCQkgICAgICAgV004MzUwX0lTSU5LX01PREVfQk9PU1QsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0lMSU1fTk9STUFMLAorCQkJICAgICAgIFdNODM1MF9EQzVfUk1QXzIwViwKKwkJCSAgICAgICBXTTgzNTBfREM1X0ZCU1JDX0lTSU5LQSk7CisJd204MzUwX3JlZ2lzdGVyX2xlZCh3bTgzNTAsIDAsIFdNODM1MF9EQ0RDXzUsIFdNODM1MF9JU0lOS19BLAorCQkJICAgICZ3bTgzNTBfbGVkX2RhdGEpOworCisJd204MzUwLT5jb2RlYy5wbGF0Zm9ybV9kYXRhID0gJmlteDMyYWRzX3dtODM1MF9zZXR1cDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbXgzMV93bTgzNTBfcGRhdGEgPSB7CisJLmluaXQgPSBteDMxX3dtODM1MF9pbml0LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0lNWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbXgzMWFkc19pMmMxX2RldmljZXNbXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ3bTgzNTAiLCAweDFhKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXgzMV93bTgzNTBfcGRhdGEsCisJCS5pcnEgPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgzMWFkc19pMmMxX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteDMxYWRzX2kyYzFfZGV2aWNlcykpOworCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfQUxUMSkpOworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgTlVMTCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCit7Cit9CisjZW5kaWYKKwogLyohCiAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIGkuTVgzMUFEUyBib2FyZC4KICAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwJPSBTUEJBMF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQQkEwX0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gU1BCQTBfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAogCX0sIHsKLQkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwJPSBDUzRfQkFTRV9BRERSX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUzRfQkFTRV9BRERSKSwKIAkJLmxlbmd0aAkJPSBDUzRfU0laRSAvIDIsCkBAIC0yMjEsMTMgKzUwNywxMyBAQAogLyohCiAgKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCiAgKi8KLXZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19tYXBfaW8odm9pZCkKIHsKIAlteGNfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KG14MzFhZHNfaW9fZGVzYywgQVJSQVlfU0laRShteDMxYWRzX2lvX2Rlc2MpKTsKIH0KIAotdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfaW5pdF9pcnEodm9pZCkKIHsKIAlteGNfaW5pdF9pcnEoKTsKIAlteDMxYWRzX2luaXRfZXhwaW8oKTsKQEAgLTI0MCwxNSArNTI2LDE1IEBACiB7CiAJbXhjX2luaXRfZXh0dWFydCgpOwogCW14Y19pbml0X2lteF91YXJ0KCk7CisJbXhjX2luaXRfaTJjKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxYWRzX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBteDMxYWRzX3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgzMWFkc190aW1lciA9IHsKIAkuaW5pdAk9IG14MzFhZHNfdGltZXJfaW5pdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCmluZGV4IGM0MzQ0MDAuLjg5NGQ5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYwpAQCAtNDIsMjEgKzQyLDExIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWxpdGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewotCQkudmlydHVhbCA9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gQUlQUzFfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAogCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAogCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKIAkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwgewotCQkudmlydHVhbCA9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gQUlQUzJfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IENTNF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbiA9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGggPSBDUzRfU0laRSwKQEAgLTgyLDggKzcyLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14MzFsaXRlX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBteDMxbGl0ZV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODBiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMl9fQ1RTMiwgTVgzMV9QSU5fUlRTMl9fUlRTMiwKKwlNWDMxX1BJTl9UWEQyX19UWEQyLCBNWDMxX1BJTl9SWEQyX19SWEQyLAorfTsKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IG14MzFtb2JvYXJkIGluaXQuCisgKi8KK3ZvaWQgX19pbml0IG14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgbXgzMWRldmJvYXJkIHBlcmlwaGVyYWxzXG4iKTsKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywgQVJSQVlfU0laRShteGNfdWFydDFfcGlucyksICJ1YXJ0MSIpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY5NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogc3lzdGVtIGluaXQgZm9yIGJhc2Vib2FyZCB1c2FnZS4gV2lsbCBiZSBjYWxsZWQgYnkgbXgzMW1vYm9hcmQgaW5pdC4KKyAqLwordm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIG14MzFtYXJ4Ym90IHBlcmlwaGVyYWxzXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCmluZGV4IGMyOTA5OGEuLjM0YzJhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC02Myw2ICs2NCwxOCBAQAogCSZteDMxbW9ib2FyZF9mbGFzaCwKIH07CiAKK3N0YXRpYyBpbnQgbXhjX3VhcnQwX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DVFMxX19DVFMxLCBNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsIE1YMzFfUElOX1JYRDFfX1JYRDEsCit9Oworc3RhdGljIGludCBteGNfdWFydDRfcGluc1tdID0geworCU1YMzFfUElOX1BDX1JTVF9fQ1RTNSwgTVgzMV9QSU5fUENfVlMyX19SVFM1LAorCU1YMzFfUElOX1BDX0JWRDJfX1RYRDUsIE1YMzFfUElOX1BDX0JWRDFfX1JYRDUsCit9OworCitzdGF0aWMgaW50IG14MzFtb2JvYXJkX2Jhc2Vib2FyZDsKK2NvcmVfcGFyYW0obXgzMW1vYm9hcmRfYmFzZWJvYXJkLCBteDMxbW9ib2FyZF9iYXNlYm9hcmQsIGludCwgMDQ0NCk7CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtNzAsNTggKzgzLDI5IEBACiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DVFMxX19DVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SVFMxX19SVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9UWEQxX19UWEQxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SWEQxX19SWEQxKTsKLQorCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0MF9waW5zLCBBUlJBWV9TSVpFKG14Y191YXJ0MF9waW5zKSwgInVhcnQwIik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMl9fQ1RTMik7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMl9fUlRTMik7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMl9fVFhEMik7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMl9fUlhEMik7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7Ci0KLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9QQ19SU1RfX0NUUzUpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX1ZTMl9fUlRTNSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUENfQlZEMl9fVFhENSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUENfQlZEMV9fUlhENSk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDRfcGlucywgQVJSQVlfU0laRShteGNfdWFydDRfcGlucyksICJ1YXJ0NCIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhKTsKLX0KIAotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgc3RhdGljIG1hcHBpbmdzIGZvciB0aGUgbXgzMW1vYm9hcmQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMW1vYm9hcmRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwKLX07Ci0KLS8qCi0gKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCi0gKi8KLXZvaWQgX19pbml0IG14MzFtb2JvYXJkX21hcF9pbyh2b2lkKQotewotCW14Y19tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgzMW1vYm9hcmRfaW9fZGVzYywgQVJSQVlfU0laRShteDMxbW9ib2FyZF9pb19kZXNjKSk7CisJc3dpdGNoIChteDMxbW9ib2FyZF9iYXNlYm9hcmQpIHsKKwljYXNlIE1YMzFOT0JPQVJEOgorCQlicmVhazsKKwljYXNlIE1YMzFERVZCT0FSRDoKKwkJbXgzMW1vYm9hcmRfZGV2Ym9hcmRfaW5pdCgpOworCQlicmVhazsKKwljYXNlIE1YMzFNQVJYQk9UOgorCQlteDMxbW9ib2FyZF9tYXJ4Ym90X2luaXQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbGxlZ2FsIG14MzFtb2JvYXJkX2Jhc2Vib2FyZCB0eXBlICVkXG4iLCBteDMxbW9ib2FyZF9iYXNlYm9hcmQpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MzFtb2JvYXJkX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBteDMxbW9ib2FyZF90aW1lciA9IHsKQEAgLTEzMyw3ICsxMTcsNyBAQAogCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFtb2JvYXJkX21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBteGNfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgzMW1vYm9hcmRfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKaW5kZXggZDQ2NGQwNi4uYmM2M2YxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYwpAQCAtNDUsNDAgKzQ1LDE3IEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzFfX0NUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzFfX1JUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDFfX1RYRDEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDFfX1JYRDEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotfQotCi0vKiEKLSAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgc3RhdGljIG1hcHBpbmdzIGZvciB0aGUgaS5NWDMxUERLIGJvYXJkLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFwZGtfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwKK3N0YXRpYyBpbnQgdWFydF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQogfTsKIAotLyohCi0gKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteDMxcGRrX21hcF9pbyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCiB7Ci0JbXhjX21hcF9pbygpOwotCWlvdGFibGVfaW5pdChteDMxcGRrX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzMXBka19pb19kZXNjKSk7CisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksICJ1YXJ0LTAiKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiB9CiAKIC8qIQpAQCAtOTEsOCArNjgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMXBka190aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiaXBnX2Nsay4wIik7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MzFwZGtfdGltZXIgPSB7CkBAIC0xMDgsNyArODQsNyBAQAogCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFwZGtfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IG14Y19tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDMxcGRrX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwppbmRleCA4Y2VhODI1Li41ZmNlMDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzcsNiArMzksMTAgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM3Lmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTExNywxMiArMTIzLDkwIEBACiAJLmh3X2VjYyA9IDEsCiB9OwogCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKK3N0YXRpYyBpbnQgaTJjXzFfcGluc1tdID0geworCU1YMzFfUElOX0NTUEkyX01PU0lfX1NDTCwKKwlNWDMxX1BJTl9DU1BJMl9NSVNPX19TREEsCit9OworCitzdGF0aWMgaW50IHBjbTAzN19pMmNfMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMoaTJjXzFfcGlucywgQVJSQVlfU0laRShpMmNfMV9waW5zKSwKKwkJCSJpMmMtMSIpOworfQorCitzdGF0aWMgdm9pZCBwY20wMzdfaTJjXzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhpMmNfMV9waW5zLCBBUlJBWV9TSVpFKGkyY18xX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzdfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKKwkuaW5pdCA9IHBjbTAzN19pMmNfMV9pbml0LAorCS5leGl0ID0gcGNtMDM3X2kyY18xX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBib2FyZF9lZXByb20gPSB7CisJLmJ5dGVfbGVuID0gNDA5NiwKKwkucGFnZV9zaXplID0gMzIsCisJLmZsYWdzID0gQVQyNF9GTEFHX0FERFIxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtMDM3X2kyY19kZXZpY2VzW10gPSB7CisgICAgICAgeworCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtcGNmODU2MyIsIDB4NTEpLAorCQkudHlwZSA9ICJwY2Y4NTYzIiwKKwl9Cit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgc2RoYzFfcGluc1tdID0geworCU1YMzFfUElOX1NEMV9EQVRBM19fU0QxX0RBVEEzLAorCU1YMzFfUElOX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAorCU1YMzFfUElOX1NEMV9EQVRBMV9fU0QxX0RBVEExLAorCU1YMzFfUElOX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAorCU1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEssCisJTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRCwKK307CisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGgsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHNkaGMxX3BpbnMsIEFSUkFZX1NJWkUoc2RoYzFfcGlucyksCisJCQkJInNkaGMtMSIpOworfQorCitzdGF0aWMgdm9pZCBwY205NzBfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhzZGhjMV9waW5zLCBBUlJBWV9TSVpFKHNkaGMxX3BpbnMpKTsKK30KKworLyogTm8gY2FyZCBhbmQgcncgZGV0ZWN0aW9uIGF0IHRoZSBtb21lbnQgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSA9IHsKKwkuaW5pdCA9IHBjbTk3MF9zZGhjMV9pbml0LAorCS5leGl0ID0gcGNtOTcwX3NkaGMxX2V4aXQsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnBjbTAzN19mbGFzaCwKIAkmcGNtMDM3X2V0aCwKIAkmcGNtMDM3X3NyYW1fZGV2aWNlLAogfTsKIAorc3RhdGljIGludCB1YXJ0MF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQorfTsKKworc3RhdGljIGludCB1YXJ0Ml9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1NQSTNfTU9TSV9fUlhEMywKKwlNWDMxX1BJTl9DU1BJM19NSVNPX19UWEQzCit9OworCiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KQEAgLTEzMCw1OSArMjE0LDMzIEBACiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DVFMxX19DVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SVFMxX19SVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9UWEQxX19UWEQxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SWEQxX19SWEQxKTsKLQorCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnQwX3BpbnMsIEFSUkFZX1NJWkUodWFydDBfcGlucyksICJ1YXJ0LTAiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiAKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DU1BJM19NT1NJX19SWEQzKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DU1BJM19NSVNPX19UWEQzKTsKLQorCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnQyX3BpbnMsIEFSUkFZX1NJWkUodWFydDJfcGlucyksICJ1YXJ0LTIiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YSk7CiAKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9CQVRUX0xJTkVfX09XSVJFKTsKKwlteGNfaW9tdXhfc2V0dXBfcGluKE1YMzFfUElOX0JBVFRfTElORV9fT1dJUkUsICJiYXR0LTB3aXJlIik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3cxX21hc3Rlcl9kZXZpY2UsIE5VTEwpOwogCiAJLyogU01TQzkyMTUgSVJRIHBpbiAqLwotCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fR1BJTzNfMSwgSU9NVVhfQ09ORklHX0dQSU8pKTsKLQlpZiAoIWdwaW9fcmVxdWVzdChNWDMxX1BJTl9HUElPM18xLCAicGNtMDM3LWV0aCIpKQorCWlmICghbXhjX2lvbXV4X3NldHVwX3BpbihJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8zXzEsIElPTVVYX0NPTkZJR19HUElPKSwKKwkJCQkicGNtMDM3LWV0aCIpKQogCQlncGlvX2RpcmVjdGlvbl9pbnB1dChNWDMxX1BJTl9HUElPM18xKTsKIAorI2lmZGVmIENPTkZJR19JMkNfSU1YCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNtMDM3X2kyY19kZXZpY2VzLAorCQkJQVJSQVlfU0laRShwY20wMzdfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzN19pMmNfMV9kYXRhKTsKKyNlbmRpZgogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzN19uYW5kX2JvYXJkX2luZm8pOwotfQotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBwY20wMzcgYm9hcmQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGNtMDM3X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sCi19OwotCi0vKgotICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgotICovCi12b2lkIF9faW5pdCBwY20wMzdfbWFwX2lvKHZvaWQpCi17Ci0JbXhjX21hcF9pbygpOwotCWlvdGFibGVfaW5pdChwY20wMzdfaW9fZGVzYywgQVJSQVlfU0laRShwY20wMzdfaW9fZGVzYykpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM3X3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBwY20wMzdfdGltZXIgPSB7CkBAIC0xOTQsNyArMjUyLDcgQEAKIAkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBwY20wMzdfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IG14Y19tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZwY20wMzdfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9xb25nLmMgYi9hcmNoL2FybS9tYWNoLW14My9xb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MjgzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYwpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgPHlhbm9rQGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtcW9uZy5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyogRlBHQSBkZWZpbmVzICovCisjZGVmaW5lIFFPTkdfRlBHQV9WRVJTSU9OKG1ham9yLCBtaW5vciwgcmV2KQlcCisJKCgobWFqb3IgJiAweEYpIDw8IDEyKSB8ICgobWlub3IgJiAweEYpIDw8IDgpIHwgKHJldiAmIDB4RkYpKQorCisjZGVmaW5lIFFPTkdfRlBHQV9CQVNFQUREUiAJCUNTMV9CQVNFX0FERFIKKyNkZWZpbmUgUU9OR19GUEdBX1BFUklQSF9TSVpFIAkJKDEgPDwgMjQpCisKKyNkZWZpbmUgUU9OR19GUEdBX0NUUkxfQkFTRUFERFIJCVFPTkdfRlBHQV9CQVNFQUREUgorI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9TSVpFIAkJMHgxMAorLyogRlBHQSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9WRVJTSU9OCQkweDAwCisKKyNkZWZpbmUgUU9OR19ETkVUX0lECQkxCisjZGVmaW5lIFFPTkdfRE5FVF9CQVNFQUREUglcCisJKFFPTkdfRlBHQV9CQVNFQUREUiArIFFPTkdfRE5FVF9JRCAqIFFPTkdfRlBHQV9QRVJJUEhfU0laRSkKKyNkZWZpbmUgUU9OR19ETkVUX1NJWkUgCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgUU9OR19GUEdBX0lSUQkJSU9NVVhfVE9fSVJRKE1YMzFfUElOX0RUUl9EQ0UxKQorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgaW50IHVhcnRfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQoreworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnRfcGlucywgQVJSQVlfU0laRSh1YXJ0X3BpbnMpLAorCQkJInVhcnQtMCIpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbmV0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiZG5ldC1tZW1vcnkiLAorCQkuc3RhcnQJPSBRT05HX0RORVRfQkFTRUFERFIsCisJCS5lbmQJPSBRT05HX0RORVRfQkFTRUFERFIgKyBRT05HX0RORVRfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBRT05HX0ZQR0FfSVJRLAorCQkuZW5kCT0gUU9OR19GUEdBX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuZXRfZGV2aWNlID0geworCS5uYW1lCQkJPSAiZG5ldCIsCisJLmlkCQkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKGRuZXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gZG5ldF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxb25nX2luaXRfZG5ldCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRuZXRfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBNVEQgTk9SIGZsYXNoICovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHFvbmdfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxb25nX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydCA9IENTMF9CQVNFX0FERFIsCisJLmVuZCA9IENTMF9CQVNFX0FERFIgKyBRT05HX05PUl9TSVpFIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHFvbmdfbm9yX210ZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZxb25nX2ZsYXNoX2RhdGEsCisJCX0sCisJLnJlc291cmNlID0gJnFvbmdfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworc3RhdGljIHZvaWQgcW9uZ19pbml0X25vcl9tdGQodm9pZCkKK3sKKwkodm9pZClwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFvbmdfbm9yX210ZF9kZXZpY2UpOworfQorCisvKgorICogSGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqLworc3RhdGljIHZvaWQgcW9uZ19uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIG5hbmRfY2hpcC0+SU9fQUREUl9XICsgKDEgPDwgMjQpKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIG5hbmRfY2hpcC0+SU9fQUREUl9XICsgKDEgPDwgMjMpKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIERldmljZSBSZWFkeSBwaW4uCisgKi8KK3N0YXRpYyBpbnQgcW9uZ19uYW5kX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJCKSk7Cit9CisKK3N0YXRpYyB2b2lkIHFvbmdfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJaWYgKGNoaXAgPj0gMCkKKwkJZ3Bpb19zZXRfdmFsdWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAwKTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHFvbmdfbmFuZF9kYXRhID0geworCS5jaGlwID0geworCQkuY2hpcF9kZWxheQkJPSAyMCwKKwkJLm9wdGlvbnMJCT0gMCwKKwl9LAorCS5jdHJsID0geworCQkuY21kX2N0cmwgCQk9IHFvbmdfbmFuZF9jbWRfY3RybCwKKwkJLmRldl9yZWFkeQkJPSBxb25nX25hbmRfZGV2aWNlX3JlYWR5LAorCQkuc2VsZWN0X2NoaXAJCT0gcW9uZ19uYW5kX3NlbGVjdF9jaGlwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcW9uZ19uYW5kX3Jlc291cmNlID0geworCS5zdGFydCAgCT0gQ1MzX0JBU0VfQUREUiwKKwkuZW5kICAgIAk9IENTM19CQVNFX0FERFIgKyBTWl8zMk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHFvbmdfbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnFvbmdfbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZxb25nX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ19pbml0X25hbmRfbXRkKHZvaWQpCit7CisJLyogaW5pdCBDUyAqLworCV9fcmF3X3dyaXRlbCgweDAwMDA0ZjAwLCBDU0NSX1UoMykpOworCV9fcmF3X3dyaXRlbCgweDIwMDEzYjMxLCBDU0NSX0woMykpOworCV9fcmF3X3dyaXRlbCgweDAwMDIwODAwLCBDU0NSX0EoMykpOworCW14Y19pb211eF9zZXRfZ3ByKE1VWF9TRENUTF9DU0QxX1NFTCwgdHJ1ZSk7CisKKwkvKiBlbmFibGUgcGluICovCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9ORkNFX0IsIElPTVVYX0NPTkZJR19HUElPKSk7CisJaWYgKCFncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAibmFuZF9lbmFibGUiKSkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgMCk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZSQiwgSU9NVVhfQ09ORklHX0dQSU8pKTsKKwlpZiAoIWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkIpLCAibmFuZF9yZHkiKSkKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJCKSk7CisKKwkvKiB3cml0ZSBwcm90ZWN0IHBpbiAqLworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZXUF9CLCBJT01VWF9DT05GSUdfR1BJTykpOworCWlmICghZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZXUF9CKSwgIm5hbmRfd3AiKSkKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORldQX0IpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcW9uZ19uYW5kX2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxb25nX2luaXRfZnBnYSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1MzIgZnBnYV92ZXI7CisKKwlyZWdzID0gaW9yZW1hcChRT05HX0ZQR0FfQ1RSTF9CQVNFQUREUiwgUU9OR19GUEdBX0NUUkxfU0laRSk7CisJaWYgKCFyZWdzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLCBhYm9ydGluZy5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZnBnYV92ZXIgPSByZWFkbChyZWdzICsgUU9OR19GUEdBX0NUUkxfVkVSU0lPTik7CisJaW91bm1hcChyZWdzKTsKKwlwcmludGsoS0VSTl9JTkZPICJRb25nIEZQR0EgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCShmcGdhX3ZlciAmIDB4RjAwMCkgPj4gMTIsCisJCQkoZnBnYV92ZXIgJiAweDBGMDApID4+IDgsIGZwZ2FfdmVyICYgMHgwMEZGKTsKKwlpZiAoZnBnYV92ZXIgPCBRT05HX0ZQR0FfVkVSU0lPTigwLCA4LCA3KSkgeworCQlwcmludGsoS0VSTl9FUlIgInFvbmc6IFVuZXhwZWN0ZWQgRlBHQSB2ZXJzaW9uLCBGUEdBLWJhc2VkICIKKwkJCQkiZGV2aWNlcyB3b24ndCBiZSByZWdpc3RlcmVkIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiByZWdpc3RlciBGUEdBLWJhc2VkIGRldmljZXMgKi8KKwlxb25nX2luaXRfbmFuZF9tdGQoKTsKKwlxb25nX2luaXRfZG5ldCgpOworfQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgTVgzMSBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHFvbmdfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9IEFJUFMxX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gQUlQUzFfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbCA9IEFJUFMyX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gQUlQUzJfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfQorfTsKKworLyoKKyAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHFvbmdfbWFwX2lvKHZvaWQpCit7CisJbXhjX21hcF9pbygpOworCWlvdGFibGVfaW5pdChxb25nX2lvX2Rlc2MsIEFSUkFZX1NJWkUocW9uZ19pb19kZXNjKSk7Cit9CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2luaXRfaW14X3VhcnQoKTsKKwlxb25nX2luaXRfbm9yX210ZCgpOworCXFvbmdfaW5pdF9mcGdhKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxb25nX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcW9uZ190aW1lciA9IHsKKwkuaW5pdAk9IHFvbmdfdGltZXJfaW5pdCwKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHVzZXMgc3RhbmRhcmQga2VybmVsIG1hY3JvcyBkZWZpbmVkIGluIGFyY2guaCBpbiBvcmRlciB0bworICogaW5pdGlhbGl6ZSBfX21hY2hfZGVzY19RT05HIGRhdGEgc3RydWN0dXJlLgorICovCisKK01BQ0hJTkVfU1RBUlQoUU9ORywgIkRhdmUvREVOWCBRb25nRVZCLUxJVEUiKQorCS8qIE1haW50YWluZXI6IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSCAqLworCS5waHlzX2lvICAgICAgICA9IEFJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBxb25nX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJnFvbmdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNmMxMDIzYi4uZGM3YjRiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yOCw3ICsyOCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJd3JpdGVsKE5FVFhfU1lTVEVNX1JFU19DUl9GSVJNV19SRVNfRU4gfCBORVRYX1NZU1RFTV9SRVNfQ1JfRklSTVdfUkVTLAogCSAgICAgICBORVRYX1NZU1RFTV9SRVNfQ1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGUyMDY4YzUuLjE1NjE1ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTIwLDcgKzIwLDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ0VTU09SX05TOTM2MAogCWlmIChwcm9jZXNzb3JfaXNfbnM5MzYwKCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggMTBhMzAxZS4uM2YzMjVkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNyw2ICs3LDExIEBACiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAorY29uZmlnIEFSQ0hfT01BUDg1MAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCWJvb2wgIk9NQVA4NTAgQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBDUFVfQVJNOTI2VAorCiBjb25maWcgQVJDSF9PTUFQMTVYWAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWRlZmF1bHQgeQpAQCAtNDYsNiArNTEsMTIgQEAKIAkgIFRJIE9NQVAgMTcxMCBIMyBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKIAkgIGEgYm9hcmQuCiAKK2NvbmZpZyBNQUNIX09NQVBfSFRDV0laQVJECisJYm9vbCAiSFRDIFdpemFyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDg1MAorCWhlbHAKKwkgIEhUQyBXaXphcmQgc21hcnRwaG9uZSBzdXBwb3J0IChBS0EgUVRFSyA5MTAwLCAuLi4pCisKIGNvbmZpZyBNQUNIX09NQVBfT1NLCiAJYm9vbCAiVEkgT1NLIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE2WFgKQEAgLTE2Myw3ICsxNzQsNyBAQAogCiBjb25maWcgT01BUF9BUk1fMTk1TUhaCiAJYm9vbCAiT01BUCBBUk0gMTk1IE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDczMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDE5NU1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTE3NSwxMyArMTg2LDEzIEBACiAKIGNvbmZpZyBPTUFQX0FSTV8xODJNSFoKIAlib29sICJPTUFQIEFSTSAxODIgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQNzMwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTgyTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE9NQVBfQVJNXzE2OE1IWgogCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTY4TUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtMTkzLDIwICsyMDQsMjAgQEAKIAogY29uZmlnIE9NQVBfQVJNXzEyME1IWgogCWJvb2wgIk9NQVAgQVJNIDEyMCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTIwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE9NQVBfQVJNXzYwTUhaCiAJYm9vbCAiT01BUCBBUk0gNjAgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX0FSTV8zME1IWgogCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAzME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDJlNjE4MzkuLjhiNDBhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMTc1LDcgKzE3NSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhbXNfZGVsdGFfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19MQ0QsCQkmYW1zX2RlbHRhX2xjZF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZhbXNfZGVsdGFfdWFydF9jb25maWcgfSwKLQl7IE9NQVBfVEFHX1VTQiwJCSZhbXNfZGVsdGFfdXNiX2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhbXNfZGVsdGFfa3BfcmVzb3VyY2VzW10gPSB7CkBAIC0yMzIsNiArMjMxLDcgQEAKIAkvKiBDbGVhciBsYXRjaDIgKE5BTkQsIExDRCwgbW9kZW0gZW5hYmxlKSAqLwogCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUofjAsIDApOwogCisJb21hcF91c2JfaW5pdCgmYW1zX2RlbHRhX3VzYl9jb25maWcpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKaW5kZXggMzAzMDgyOS4uMTllMGU5MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC0zNCw3ICszNCwzOSBAQAogI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1mc2FtcGxlLmg+CisKKy8qIGZzYW1wbGUgaXMgcHJldHR5IGNsb3NlIHRvIHAyLXNhbXBsZSAqLworCisjZGVmaW5lIGZzYW1wbGVfY3BsZF9yZWFkKHJlZykgX19yYXdfcmVhZGIocmVnKQorI2RlZmluZSBmc2FtcGxlX2NwbGRfd3JpdGUodmFsLCByZWcpIF9fcmF3X3dyaXRlYih2YWwsIHJlZykKKworI2RlZmluZSBGU0FNUExFX0NQTERfQkFTRSAgICAweEU4MTAwMDAwCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TSVpFICAgIFNaXzRLCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TVEFSVCAgIDB4MDUwODAwMDAKKworI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0EgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAwKQorI2RlZmluZSBGU0FNUExFX0NQTERfU1dJVENIICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQorI2RlZmluZSBGU0FNUExFX0NQTERfVUFSVCAgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQorI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0IgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA0KQorI2RlZmluZSBGU0FNUExFX0NQTERfVkVSU0lPTiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQorI2RlZmluZSBGU0FNUExFX0NQTERfU0VUX0NMUiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQlRfUkVTRVQgICAgICAgICAwCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfTENEX1JFU0VUICAgICAgICAxCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0FNX1BXRE4gICAgICAgICAyCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0hBUkdFUl9FTkFCTEUgICAzCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfU0RfTU1DX0VOICAgICAgICA0CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19QV1JFTiAgICAgICA1CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQkFDS0xJR0hUICAgICAgICA2CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19FTl9SRVNFVCAgICA3CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19TTEVFUHhfTiAgICA4CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfT1RHX1JFU0VUICAgICAgICA5CisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX3NldChiaXQpIFwKKyAgICBmc2FtcGxlX2NwbGRfd3JpdGUoKCgoYml0KSAmIDE1KSA8PCA0KSB8IDB4MGYsIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSKQorCisjZGVmaW5lIGZzYW1wbGVfY3BsZF9jbGVhcihiaXQpIFwKKyAgICBmc2FtcGxlX2NwbGRfd3JpdGUoMHhmMCB8ICgoYml0KSAmIDE1KSwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCiAKIHN0YXRpYyBpbnQgZnNhbXBsZV9rZXltYXBbXSA9IHsKIAlLRVkoMCwwLEtFWV9VUCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDdkMjY3MDIuLmU3MjQ5NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC02Miw3ICs2Miw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQlOVUxMIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmZ2VuZXJpY191YXJ0X2NvbmZpZyB9LAogfTsKIApAQCAtNzAsMTIgKzY5LDEyIEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJZ2VuZXJpY19jb25maWdbMF0uZGF0YSA9ICZnZW5lcmljMTUxMF91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTUxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJZ2VuZXJpY19jb25maWdbMF0uZGF0YSA9ICZnZW5lcmljMTYxMF91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTYxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDItbW1jLmMKaW5kZXggNDA5ZmE1Ni4uNDRkNGE5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLW1tYy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgyLmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCiBzdGF0aWMgaW50IG1tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IDBkNzg0YTcuLmY2OTVhYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTQ2LDYgKzQ2LDExIEBACiAjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisjaW5jbHVkZSAiYm9hcmQtaDIuaCIKKworLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVAxNjEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKKwogc3RhdGljIGludCBoMl9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0xFRlQpLAogCUtFWSgwLCAxLCBLRVlfUklHSFQpLApAQCAtMzY0LDcgKzM2OSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoMl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkJJmgyX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CkBAIC00MTMsNiArNDE3LDcgQEAKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgaDJfaTJjX2JvYXJkX2luZm8sCiAJCQkgICAgICBBUlJBWV9TSVpFKGgyX2kyY19ib2FyZF9pbmZvKSk7CisJb21hcF91c2JfaW5pdCgmaDJfdXNiX2NvbmZpZyk7CiAJaDJfbW1jX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5oCmluZGV4IDE1NTMxYzguLjMxNWUyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oCisgKiBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmgKICAqCiAgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDE2MTAgSDIgYm9hcmQuCiAgKgpAQCAtMjksOSArMjksNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDJfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDJfSAogCi0vKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KLSNkZWZpbmUgT01BUDE2MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAotCiAjZGVmaW5lIEgyX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCiAjCWRlZmluZSBIMl9UUFNfR1BJT19NTUNfUFdSX0VOCShIMl9UUFNfR1BJT19CQVNFICsgMykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMtbW1jLmMKaW5kZXggZmRmZTc5My4uMGQ4YTNjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLW1tYy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgzLmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCiBzdGF0aWMgaW50IG1tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IGJmMDhiNmFkLi40Njk1OTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC01MCw2ICs1MCwxMSBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgzLmgiCisKKy8qIEluIE9NQVAxNzEwIEgzIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVAxNzEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKKwogI2RlZmluZSBIM19UU19HUElPCTQ4CiAKIHN0YXRpYyBpbnQgaDNfa2V5bWFwW10gPSB7CkBAIC00MTgsNyArNDIzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgzX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQkmaDNfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmgzX3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDNfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTQ3Miw2ICs0NzYsNyBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBoM19pMmNfYm9hcmRfaW5mbywKIAkJCSAgICAgIEFSUkFZX1NJWkUoaDNfaTJjX2JvYXJkX2luZm8pKTsKKwlvbWFwX3VzYl9pbml0KCZoM191c2JfY29uZmlnKTsKIAloM19tbWNfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMy5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmgKaW5kZXggMTg4ODMyNi4uNzhkZTUzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgzLmgKKyAqIGFyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCkBAIC0yNyw5ICsyNyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IM19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IM19ICiAKLS8qIEluIE9NQVAxNzEwIEgzIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCi0jZGVmaW5lIE9NQVAxNzEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKLQogI2RlZmluZSBIM19UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQogIwlkZWZpbmUgSDNfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDNfVFBTX0dQSU9fQkFTRSArIDQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IDA3MWNkMDIuLjJmZDk4MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKKy8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLworI2RlZmluZSBJTk5PVkFUT1IxNjEwX0VUSFJfU1RBUlQJMHgwNDAwMDMwMAorCiBzdGF0aWMgaW50IGlubm92YXRvcl9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0YxKSwKIAlLRVkoMCwgMywgS0VZX0RPV04pLApAQCAtMzcwLDcgKzM3Myw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBpbm5vdmF0b3JfY29uZmlnW10gPSB7Ci0JeyBPTUFQX1RBR19VU0IsICAgICAgICAgTlVMTCB9LAogCXsgT01BUF9UQUdfTENELAkJTlVMTCB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmlubm92YXRvcl91YXJ0X2NvbmZpZyB9LAogfTsKQEAgLTM5MiwxMyArMzk0LDEzIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQlpbm5vdmF0b3JfY29uZmlnWzBdLmRhdGEgPSAmaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWcpOwogCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTUxMF9sY2RfY29uZmlnOwogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAJaWYgKGNwdV9pc19vbWFwMTYxMCgpKSB7Ci0JCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZoMl91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZoMl91c2JfY29uZmlnKTsKIAkJaW5ub3ZhdG9yX2NvbmZpZ1sxXS5kYXRhID0gJmlubm92YXRvcjE2MTBfbGNkX2NvbmZpZzsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwppbmRleCBhZjUxZTBiLi43YmM3YTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCkBAIC0yMzMsMTAgKzIzMyw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgbm9raWE3NzBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJCU5VTEwgfSwKLX07Ci0KICNpZglkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkKIC8qCiAgKiBhdWRpbyBwb3dlciBjb250cm9sCkBAIC0zNzEsMTkgKzM2NywxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9ub2tpYTc3MF9pbml0KHZvaWQpCiB7Ci0Jbm9raWE3NzBfY29uZmlnWzBdLmRhdGEgPSAmbm9raWE3NzBfdXNiX2NvbmZpZzsKLQogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG5va2lhNzcwX2RldmljZXMsIEFSUkFZX1NJWkUobm9raWE3NzBfZGV2aWNlcykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvLAogCQkJCUFSUkFZX1NJWkUobm9raWE3NzBfc3BpX2JvYXJkX2luZm8pKTsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IG5va2lhNzcwX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShub2tpYTc3MF9jb25maWcpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogCW9tYXBfZHNwX2luaXQoKTsKIAlhZHM3ODQ2X2Rldl9pbml0KCk7CiAJbWlwaWRfZGV2X2luaXQoKTsKKwlvbWFwX3VzYl9pbml0KCZub2tpYTc3MF91c2JfY29uZmlnKTsKIAlub2tpYTc3MF9tbWNfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCAxYTE2ZWNiLi5jZjMyNDdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTUyLDYgKzUyLDIwIEBACiAjaW5jbHVkZSA8bWFjaC90Yy5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAKKy8qIEF0IE9NQVA1OTEyIE9TSyB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLworI2RlZmluZSBPTUFQX09TS19FVEhSX1NUQVJUCQkweDA0ODAwMzAwCisKKy8qIFRQUzY1MDEwIGhhcyBmb3VyIEdQSU9zLiAgblBHIGFuZCBMRUQyIGNhbiBiZSB0cmVhdGVkIGxpa2UgR1BJT3Mgd2l0aAorICogYWx0ZXJuYXRlIHBpbiBjb25maWd1cmF0aW9ucyBmb3IgaGFyZHdhcmUtY29udHJvbGxlZCBibGlua2luZy4KKyAqLworI2RlZmluZSBPU0tfVFBTX0dQSU9fQkFTRQkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyAxNiAvKiBNUFVJTyAqLykKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19VU0JfUFdSX0VOCShPU0tfVFBTX0dQSU9fQkFTRSArIDApCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0QzCShPU0tfVFBTX0dQSU9fQkFTRSArIDEpCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fTEFOX1JFU0VUCShPU0tfVFBTX0dQSU9fQkFTRSArIDIpCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fRFNQX1BXUl9FTgkoT1NLX1RQU19HUElPX0JBU0UgKyAzKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EOQkoT1NLX1RQU19HUElPX0JBU0UgKyA0KQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EMgkoT1NLX1RQU19HUElPX0JBU0UgKyA1KQorCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3NrX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMjkwLDcgKzMwNCw2IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgb3NrX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmb3NrX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCQkmb3NrX3VhcnRfY29uZmlnIH0sCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKIAl7IE9NQVBfVEFHX0xDRCwJCQkmb3NrX2xjZF9jb25maWcgfSwKQEAgLTU0MSw2ICs1NTQsOCBAQAogCWwgfD0gKDMgPDwgMSk7CiAJb21hcF93cml0ZWwobCwgVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwogCisJb21hcF91c2JfaW5pdCgmb3NrX3VzYl9jb25maWcpOworCiAJLyogaXJxIGZvciB0cHM2NTAxMCBjaGlwICovCiAJLyogYm9vdGxvYWRlciBlZmZlY3RpdmVseSBkb2VzOiAgb21hcF9jZmdfcmVnKFUxOV8xNjEwX01QVUlPMSk7ICovCiAJaWYgKGdwaW9fcmVxdWVzdChPTUFQX01QVUlPKDEpLCAidHBzNjUwMTAiKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggOTlmMmI0My4uODg2YjRjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC00Myw2ICs0MywyMSBAQAogI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAorI2RlZmluZSBQQUxNVEVfVVNCREVURUNUX0dQSU8JMAorI2RlZmluZSBQQUxNVEVfVVNCX09SX0RDX0dQSU8JMQorI2RlZmluZSBQQUxNVEVfVFNDX0dQSU8JCTQKKyNkZWZpbmUgUEFMTVRFX1BJTlREQVZfR1BJTwk2CisjZGVmaW5lIFBBTE1URV9NTUNfV1BfR1BJTwk4CisjZGVmaW5lIFBBTE1URV9NTUNfUE9XRVJfR1BJTwk5CisjZGVmaW5lIFBBTE1URV9IRFFfR1BJTwkJMTEKKyNkZWZpbmUgUEFMTVRFX0hFQURQSE9ORVNfR1BJTwkxNAorI2RlZmluZSBQQUxNVEVfU1BFQUtFUl9HUElPCTE1CisjZGVmaW5lIFBBTE1URV9EQ19HUElPCQlPTUFQX01QVUlPKDIpCisjZGVmaW5lIFBBTE1URV9NTUNfU1dJVENIX0dQSU8JT01BUF9NUFVJTyg0KQorI2RlZmluZSBQQUxNVEVfTU1DMV9HUElPCU9NQVBfTVBVSU8oNikKKyNkZWZpbmUgUEFMTVRFX01NQzJfR1BJTwlPTUFQX01QVUlPKDcpCisjZGVmaW5lIFBBTE1URV9NTUMzX0dQSU8JT01BUF9NUFVJTygxMSkKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGFsbXRlX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKQEAgLTI4Niw3ICszMDEsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBhbG10ZV9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkJJnBhbG10ZV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmcGFsbXRlX2xjZF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZwYWxtdGVfdWFydF9jb25maWcgfSwKIH07CkBAIC0zNDEsNiArMzU1LDcgQEAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwYWxtdGVfc3BpX2luZm8sIEFSUkFZX1NJWkUocGFsbXRlX3NwaV9pbmZvKSk7CiAJcGFsbXRlX21pc2NfZ3Bpb19zZXR1cCgpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvbWFwX3VzYl9pbml0KCZwYWxtdGVfdXNiX2NvbmZpZyk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCmluZGV4IDFjYmMxMjcuLjRmMWI0NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwpAQCAtNDMsNiArNDMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAorI2RlZmluZSBQQUxNVFRfVVNCREVURUNUX0dQSU8JMAorI2RlZmluZSBQQUxNVFRfQ0FCTEVfR1BJTwkxCisjZGVmaW5lIFBBTE1UVF9MRURfR1BJTwkJMworI2RlZmluZSBQQUxNVFRfUEVOSVJRX0dQSU8JNgorI2RlZmluZSBQQUxNVFRfTU1DX1dQX0dQSU8JOAorI2RlZmluZSBQQUxNVFRfSERRX0dQSU8JCTExCisKIHN0YXRpYyBpbnQgcGFsbXR0X2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRVNDKSwKIAlLRVkoMCwgMSwgS0VZX1NQQUNFKSwKQEAgLTI3Miw3ICsyNzksNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXR0X2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQkmcGFsbXR0X3VzYl9jb25maWcJfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZwYWxtdHRfbGNkX2NvbmZpZwl9LAogCXsgT01BUF9UQUdfVUFSVCwJJnBhbG10dF91YXJ0X2NvbmZpZwl9LAogfTsKQEAgLTI5Nyw2ICszMDMsNyBAQAogCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGFsbXR0X2JvYXJkaW5mbyxBUlJBWV9TSVpFKHBhbG10dF9ib2FyZGluZm8pKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF91c2JfaW5pdCgmcGFsbXR0X3VzYl9jb25maWcpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCmluZGV4IGJhZjVlZmIuLjlhNTVjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCkBAIC00Niw2ICs0NiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogCisjZGVmaW5lIFBBTE1aNzFfVVNCREVURUNUX0dQSU8JMAorI2RlZmluZSBQQUxNWjcxX1BFTklSUV9HUElPCTYKKyNkZWZpbmUgUEFMTVo3MV9NTUNfV1BfR1BJTwk4CisjZGVmaW5lIFBBTE1aNzFfSERRX0dQSU8gCTExCisKKyNkZWZpbmUgUEFMTVo3MV9IT1RTWU5DX0dQSU8JT01BUF9NUFVJTygxKQorI2RlZmluZSBQQUxNWjcxX0NBQkxFX0dQSU8JT01BUF9NUFVJTygyKQorI2RlZmluZSBQQUxNWjcxX1NMSURFUl9HUElPCU9NQVBfTVBVSU8oMykKKyNkZWZpbmUgUEFMTVo3MV9NTUNfSU5fR1BJTwlPTUFQX01QVUlPKDQpCisKIHN0YXRpYyB2b2lkIF9faW5pdAogb21hcF9wYWxtejcxX2luaXRfaXJxKHZvaWQpCiB7CkBAIC0yMzksNyArMjQ5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBhbG16NzFfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7T01BUF9UQUdfVVNCLAkmcGFsbXo3MV91c2JfY29uZmlnfSwKIAl7T01BUF9UQUdfTENELAkmcGFsbXo3MV9sY2RfY29uZmlnfSwKIAl7T01BUF9UQUdfVUFSVCwJJnBhbG16NzFfdWFydF9jb25maWd9LAogfTsKQEAgLTMxMyw2ICszMjIsNyBAQAogCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGFsbXo3MV9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShwYWxtejcxX2JvYXJkaW5mbykpOworCW9tYXBfdXNiX2luaXQoJnBhbG16NzFfdXNiX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogCXBhbG16NzFfZ3Bpb19zZXR1cCgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEtbW1jLmMKaW5kZXggNjZhNGQ3ZC4uNThhNDZlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEtbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEtbW1jLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXN4MS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKaW5kZXggMjhjNzZhMS4uYzA5NjU3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXN4MS5oPgogCiAvKiBXcml0ZSB0byBJMkMgZGV2aWNlICovCiBpbnQgc3gxX2kyY193cml0ZV9ieXRlKHU4IGRldmFkZHIsIHU4IHJlZ29mZnNldCwgdTggdmFsdWUpCkBAIC0zNzMsNyArMzc0LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHN4MV9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkmc3gxX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJJnN4MV9sY2RfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmc3gxX3VhcnRfY29uZmlnIH0sCiB9OwpAQCAtMzg4LDYgKzM4OCw3IEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc3gxX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOworCW9tYXBfdXNiX2luaXQoJnN4MV91c2JfY29uZmlnKTsKIAlzeDFfbW1jX2luaXQoKTsKIAogCS8qIHR1cm4gb24gVVNCIHBvd2VyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCBhNzY1MzU0Li45ODI3NWUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTE0NSw3ICsxNDUsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgdm9pY2VibHVlX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVVNCLCAgJnZvaWNlYmx1ZV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULCAmdm9pY2VibHVlX3VhcnRfY29uZmlnIH0sCiB9OwogCkBAIC0xODUsNiArMTg0LDcgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUodm9pY2VibHVlX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXBfdXNiX2luaXQoJnZvaWNlYmx1ZV91c2JfY29uZmlnKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKIAogCS8qIFRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgYm9hcmQgaXMgZ29pbmcgdXAsIHNvIGVuYWJsZSBwb3dlciBMRUQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCA1ZmJhMjA3Li5kYWZlNGY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0yMCw0MSArMjAsMTYxIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2dlbmVyaWM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kc3BjazsKKwogI2luY2x1ZGUgImNsb2NrLmgiCiAKK3N0YXRpYyBpbnQgY2xrX29tYXAxX2R1bW15X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19vbWFwMV9kdW1teV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2R1bW15ID0geworCS5lbmFibGUgPSBjbGtfb21hcDFfZHVtbXlfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX29tYXAxX2R1bW15X2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkdW1teV9jayA9IHsKKwkubmFtZQk9ICJkdW1teSIsCisJLm9wcwk9ICZjbGtvcHNfZHVtbXksCisJLmZsYWdzCT0gUkFURV9GSVhFRCwKK307CisKK3N0cnVjdCBvbWFwX2NsayB7CisJdTMyCQljcHU7CisJc3RydWN0IGNsa19sb29rdXAgbGs7Cit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKKwl7CQkJCVwKKwkJIC5jcHUgPSBjcCwJCVwKKwkJLmxrID0gewkJCVwKKwkJCS5kZXZfaWQgPSBkZXYsCVwKKwkJCS5jb25faWQgPSBjb24sCVwKKwkJCS5jbGsgPSBjaywJXAorCQl9LAkJCVwKKwl9CisKKyNkZWZpbmUgQ0tfMzEwCSgxIDw8IDApCisjZGVmaW5lIENLXzczMAkoMSA8PCAxKQorI2RlZmluZSBDS18xNTEwCSgxIDw8IDIpCisjZGVmaW5lIENLXzE2WFgJKDEgPDwgMykKKworc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwX2Nsa3NbXSA9IHsKKwkvKiBub24tVUxQRCBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImNrX3JlZiIsCSZja19yZWYsCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImNrX2RwbGwxIiwJJmNrX2RwbGwxLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJLyogQ0tfR0VOMSBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImNrX2RwbGwxb3V0IiwJJmNrX2RwbGwxb3V0LmNsaywgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJja19zb3NzaSIsCSZzb3NzaV9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJhcm1fY2siLAkmYXJtX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm1wZXJfY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtX2dwaW9fY2siLAkmYXJtX2dwaW9fY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJteG9yX2NrIiwJJmFybXhvcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybXRpbV9jayIsCSZhcm10aW1fY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJmFybXdkdF9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwX3dkdCIsICJpY2siLAkJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybWludGhfY2siLAkmYXJtaW50aF9jazE1MTAsIENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtaW50aF9jayIsCSZhcm1pbnRoX2NrMTZ4eCwgQ0tfMTZYWCksCisJLyogQ0tfR0VOMiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImRzcF9jayIsCSZkc3BfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImRzcG1tdV9jayIsCSZkc3BtbXVfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImRzcHBlcl9jayIsCSZkc3BwZXJfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImRzcHhvcl9jayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImRzcHRpbV9jayIsCSZkc3B0aW1fY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwkvKiBDS19HRU4zIGNsb2NrcyAqLworCUNMSyhOVUxMLAkidGNfY2siLAkmdGNfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzczMCksCisJQ0xLKE5VTEwsCSJ0aXBiX2NrIiwJJnRpcGJfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkibDNfb2NwaV9jayIsCSZsM19vY3BpX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJInRjMV9jayIsCSZ0YzFfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkidGMyX2NrIiwJJnRjMl9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJkbWFfY2siLAkmZG1hX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkbWFfbGNkZnJlZV9jayIsICZkbWFfbGNkZnJlZV9jaywgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJhcGlfY2siLAkmYXBpX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkibGJfY2siLAkmbGJfY2suY2xrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInJoZWExX2NrIiwJJnJoZWExX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJInJoZWEyX2NrIiwJJnJoZWEyX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJImxjZF9jayIsCSZsY2RfY2tfMTZ4eCwJQ0tfMTZYWCB8IENLXzczMCksCisJQ0xLKE5VTEwsCSJsY2RfY2siLAkmbGNkX2NrXzE1MTAuY2xrLCBDS18xNTEwIHwgQ0tfMzEwKSwKKwkvKiBVTFBEIGNsb2NrcyAqLworCUNMSyhOVUxMLAkidWFydDFfY2siLAkmdWFydDFfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9jayIsCSZ1YXJ0MV8xNnh4LmNsaywgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9jayIsCSZ1YXJ0Ml9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDNfY2siLAkmdWFydDNfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19jayIsCSZ1YXJ0M18xNnh4LmNsaywgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ1c2JfY2xrbyIsCSZ1c2JfY2xrbywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidXNiX2hoY19jayIsCSZ1c2JfaGhjX2NrMTUxMCwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJ1c2JfaGhjX2NrIiwJJnVzYl9oaGNfY2sxNnh4LCBDS18xNlhYKSwKKwlDTEsoTlVMTCwJInVzYl9kY19jayIsCSZ1c2JfZGNfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkibWNsayIsCQkmbWNsa18xNTEwLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJIm1jbGsiLAkJJm1jbGtfMTZ4eCwJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJiY2xrIiwJCSZiY2xrXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYmNsayIsCQkmYmNsa18xNnh4LAlDS18xNlhYKSwKKwlDTEsoIm1tY2ktb21hcC4wIiwgImZjayIsCSZtbWMxX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygibW1jaS1vbWFwLjEiLCAiZmNrIiwJJm1tYzJfY2ssCUNLXzE2WFgpLAorCUNMSygibW1jaS1vbWFwLjEiLCAiaWNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFgpLAorCS8qIFZpcnR1YWwgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHUiLAkJJnZpcnR1YWxfY2tfbXB1LCBDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmNfZmNrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZpMmNfaWNrLAlDS18xNlhYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXBfdXdpcmUiLCAiZmNrIiwJJmFybXhvcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZkc3BwZXJfY2ssCUNLXzE2WFgpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiZmNrIiwJJmRzcHhvcl9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiZmNrIiwJJmRzcHhvcl9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorfTsKKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOworCiBfX3UzMiBhcm1faWRsZWN0MV9tYXNrOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE9tYXAxIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV93YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgaW50IHZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQlpZiAodmFsICYgY2xrLT5lbmFibGVfYml0KQotCQljbGstPnJhdGUgPSA0ODAwMDAwMDsKLQllbHNlCi0JCWNsay0+cmF0ZSA9IDEyMDAwMDAwOworCXVuc2lnbmVkIGludCB2YWwgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiB2YWwgJiBjbGstPmVuYWJsZV9iaXQgPyA0ODAwMDAwMCA6IDEyMDAwMDAwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMV9zb3NzaV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgZGl2ID0gb21hcF9yZWFkbChNT0RfQ09ORl9DVFJMXzEpOwogCiAJZGl2ID0gKGRpdiA+PiAxNykgJiAweDc7CiAJZGl2Kys7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKQEAgLTc4LDYgKzE5OCwxMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2RzcGNrID0geworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAorfTsKKwogc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHJldDsKQEAgLTEwNSw2ICsyMzAsMTEgQEAKIAlvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKGNsayk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc191YXJ0ID0geworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKK307CisKIHN0YXRpYyB2b2lkIG9tYXAxX2Nsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrICogaWNsayA9IChzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrICopY2xrOwpAQCAtMTk3LDkgKzMyNyw2IEBACiAJc3RydWN0IGNsayAqIHBhcmVudDsKIAl1bnNpZ25lZCAgZHNvcl9leHA7CiAKLQlpZiAodW5saWtlbHkoIShjbGstPmZsYWdzICYgUkFURV9DS0NUTCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXBhcmVudCA9IGNsay0+cGFyZW50OwogCWlmICh1bmxpa2VseShwYXJlbnQgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwpAQCAtMjE1LDIyICszNDIsMTUgQEAKIAlyZXR1cm4gZHNvcl9leHA7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZHNvcjsKLQogCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KLQlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCWludCBkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwogCi0JaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3IpKQotCQlyZXR1cm47IC8qIE5vIGNoYW5nZSwgcXVpY2sgZXhpdCAqLwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKLQotCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrKQogewogCWludCBkc29yOwogCkBAIC0yNDUsMTIgKzM2NSw3IEBACiAJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CiAJb21hcDFfY2xrX2Rpc2FibGUoJmFwaV9jay5jbGspOwogCi0JaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3IpKQotCQlyZXR1cm47IC8qIE5vIGNoYW5nZSwgcXVpY2sgZXhpdCAqLwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKLQotCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwogfQogCiAvKiBNUFUgdmlydHVhbCBjbG9jayBmdW5jdGlvbnMgKi8KQEAgLTI4OSwzNSArNDA0LDU3IEBACiAJCW9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2socHRyLT5kcGxsY3RsX3ZhbCwgcHRyLT5ja2N0bF92YWwpOwogCiAJY2tfZHBsbDEucmF0ZSA9IHB0ci0+cGxsX3JhdGU7Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpbnQgIHJldCA9IC1FSU5WQUw7Ci0JaW50ICBkc29yX2V4cDsKLQlfX3UxNiAgcmVndmFsOworCWludCBkc29yX2V4cDsKKwl1MTYgcmVndmFsOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAtRUlOVkFMOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOworCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOworCWlmIChkc29yX2V4cCA+IDMpCisJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwlpZiAoZHNvcl9leHAgPCAwKQorCQlyZXR1cm4gZHNvcl9leHA7CiAKLQkJcmVndmFsID0gX19yYXdfcmVhZHcoRFNQX0NLQ1RMKTsKLQkJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKLQkJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7Ci0JCV9fcmF3X3dyaXRldyhyZWd2YWwsIERTUF9DS0NUTCk7Ci0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwotCQlyZXQgPSAwOwotCX0KKwlyZWd2YWwgPSBfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpOworCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7CisJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7CisJX19yYXdfd3JpdGV3KHJlZ3ZhbCwgRFNQX0NLQ1RMKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKIAotCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiAwOworfQogCi0JcmV0dXJuIHJldDsKK3N0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7CisJaWYgKGRzb3JfZXhwIDwgMCkKKwkJcmV0dXJuIGRzb3JfZXhwOworCWlmIChkc29yX2V4cCA+IDMpCisJCWRzb3JfZXhwID0gMzsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgZHNvcl9leHA7CisJdTE2IHJlZ3ZhbDsKKworCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOworCWlmIChkc29yX2V4cCA+IDMpCisJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwlpZiAoZHNvcl9leHAgPCAwKQorCQlyZXR1cm4gZHNvcl9leHA7CisKKwlyZWd2YWwgPSBvbWFwX3JlYWR3KEFSTV9DS0NUTCk7CisJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKKwlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKKwlyZWd2YWwgPSB2ZXJpZnlfY2tjdGxfdmFsdWUocmVndmFsKTsKKwlvbWFwX3dyaXRldyhyZWd2YWwsIEFSTV9DS0NUTCk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBsb25nIG9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQpAQCAtMzcyLDE0ICs1MDksMTQgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXZhbCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAJaWYgKHJhdGUgPT0gMTIwMDAwMDApCiAJCXZhbCAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKIAllbHNlIGlmIChyYXRlID09IDQ4MDAwMDAwKQogCQl2YWwgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwotCW9tYXBfd3JpdGVsKHZhbCwgY2xrLT5lbmFibGVfcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBjbGstPmVuYWJsZV9yZWcpOwogCWNsay0+cmF0ZSA9IHJhdGU7CiAKIAlyZXR1cm4gMDsKQEAgLTM5OCw4ICs1MzUsOCBAQAogCWVsc2UKIAkJcmF0aW9fYml0cyA9IChkc29yIC0gMikgPDwgMjsKIAotCXJhdGlvX2JpdHMgfD0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjB4ZmQ7Ci0Jb21hcF93cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKKwlyYXRpb19iaXRzIHw9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MHhmZDsKKwlfX3Jhd193cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIzLDggKzU2MCw2IEBACiAJb21hcF93cml0ZWwobCwgTU9EX0NPTkZfQ1RSTF8xKTsKIAogCWNsay0+cmF0ZSA9IHBfcmF0ZSAvIChkaXYgKyAxKTsKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0MCw4ICs1NzUsOCBAQAogCV9fdTE2IHJhdGlvX2JpdHM7CiAKIAkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLwotCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKLQlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCXJhdGlvX2JpdHMgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjE7CisJX19yYXdfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CiAKIAlyYXRpb19iaXRzID0gKHJhdGlvX2JpdHMgJiAweGZjKSA+PiAyOwogCWlmIChyYXRpb19iaXRzID4gNikKQEAgLTQ2OCw3ICs2MDMsNyBAQAogCQkJCW9tYXAxX2Nsa19kZW55X2lkbGUoY2xrLT5wYXJlbnQpOwogCQl9CiAKLQkJcmV0ID0gY2xrLT5lbmFibGUoY2xrKTsKKwkJcmV0ID0gY2xrLT5vcHMtPmVuYWJsZShjbGspOwogCiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkgJiYgY2xrLT5wYXJlbnQpIHsKIAkJCW9tYXAxX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKQEAgLTQ4Miw3ICs2MTcsNyBAQAogc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKLQkJY2xrLT5kaXNhYmxlKGNsayk7CisJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiAJCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKSB7CiAJCQlvbWFwMV9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CiAJCQlpZiAoY2xrLT5mbGFncyAmIENMT0NLX05PX0lETEVfUEFSRU5UKQpAQCAtNDk2LDkgKzYzMSw2IEBACiAJX191MTYgcmVndmFsMTY7CiAJX191MzIgcmVndmFsMzI7CiAKLQlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQotCQlyZXR1cm4gMDsKLQogCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCiAJCSAgICAgICBjbGstPm5hbWUpOwpAQCAtNTA2LDI1ICs2MzgsMTMgQEAKIAl9CiAKIAlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKLQkJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQorCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKIAl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9CisJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTM5LDQ0ICs2NTksMjYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQorCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CiAJfSBlbHNlIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKLQkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9CisJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19nZW5lcmljID0geworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorfTsKKwogc3RhdGljIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50IGRzb3JfZXhwOwotCiAJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQogCQlyZXR1cm4gY2xrLT5yYXRlOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAzOwotCQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JfQotCiAJaWYgKGNsay0+cm91bmRfcmF0ZSAhPSBOVUxMKQogCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CiAKQEAgLTU4NiwzMCArNjg4LDkgQEAKIHN0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWludCAgcmV0ID0gLUVJTlZBTDsKLQlpbnQgIGRzb3JfZXhwOwotCV9fdTE2ICByZWd2YWw7CiAKIAlpZiAoY2xrLT5zZXRfcmF0ZSkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwotCWVsc2UgaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAtRUlOVkFMOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCi0JCXJlZ3ZhbCA9IG9tYXBfcmVhZHcoQVJNX0NLQ1RMKTsKLQkJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKLQkJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7Ci0JCXJlZ3ZhbCA9IHZlcmlmeV9ja2N0bF92YWx1ZShyZWd2YWwpOwotCQlvbWFwX3dyaXRldyhyZWd2YWwsIEFSTV9DS0NUTCk7Ci0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwotCQlyZXQgPSAwOwotCX0KLQotCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjMyLDE3ICs3MTMsMTAgQEAKIAl9CiAKIAkvKiBJcyB0aGUgY2xvY2sgYWxyZWFkeSBkaXNhYmxlZD8gKi8KLQlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQllbHNlCi0JCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JfSBlbHNlIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCWVsc2UKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpCisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwllbHNlCisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKIAogCWlmICgocmVndmFsMzIgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKSA9PSAwKQogCQlyZXR1cm47CkBAIC02NTksNyArNzMzLDcgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBjbGstPm5hbWUpOwotCWNsay0+ZGlzYWJsZShjbGspOworCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiAJcHJpbnRrKCIgZG9uZVxuIik7CiB9CiAKQEAgLTY3NywxMCArNzUxLDEwIEBACiAKIGludCBfX2luaXQgb21hcDFfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICoqIGNsa3A7CisJc3RydWN0IG9tYXBfY2xrICpjOwogCWNvbnN0IHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyAqaW5mbzsKIAlpbnQgY3J5c3RhbF90eXBlID0gMDsgLyogRGVmYXVsdCAxMiBNSHogKi8KLQl1MzIgcmVnOworCXUzMiByZWcsIGNwdV9tYXNrOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xMCiAJLyogUmVzZXRzIHNvbWUgY2xvY2tzIHRoYXQgbWF5IGJlIGxlZnQgb24gZnJvbSBib290bG9hZGVyLApAQCAtNzAwLDI4ICs3NzQsMjUgQEAKIAkvKiBCeSBkZWZhdWx0IGFsbCBpZGxlY3QxIGNsb2NrcyBhcmUgYWxsb3dlZCB0byBpZGxlICovCiAJYXJtX2lkbGVjdDFfbWFzayA9IH4wOwogCi0JZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcytBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsgY2xrcCsrKSB7Ci0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNTEwKSAmJiBjcHVfaXNfb21hcDE1MTAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJZm9yIChjID0gb21hcF9jbGtzOyBjIDwgb21hcF9jbGtzICsgQVJSQVlfU0laRShvbWFwX2Nsa3MpOyBjKyspCisJCWNsa19pbml0X29uZShjLT5say5jbGspOwogCi0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNlhYKSAmJiBjcHVfaXNfb21hcDE2eHgoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJY3B1X21hc2sgPSAwOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJY3B1X21hc2sgfD0gQ0tfMTZYWDsKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJCWNwdV9tYXNrIHw9IENLXzE1MTA7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCWNwdV9tYXNrIHw9IENLXzczMDsKKwlpZiAoY3B1X2lzX29tYXAzMTAoKSkKKwkJY3B1X21hc2sgfD0gQ0tfMzEwOwogCi0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVA3MzApICYmIGNwdV9pc19vbWFwNzMwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKKwlmb3IgKGMgPSBvbWFwX2Nsa3M7IGMgPCBvbWFwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXBfY2xrcyk7IGMrKykKKwkJaWYgKGMtPmNwdSAmIGNwdV9tYXNrKSB7CisJCQljbGtkZXZfYWRkKCZjLT5sayk7CisJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKIAkJfQogCi0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAzMTApICYmIGNwdV9pc19vbWFwMzEwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQogCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7CiAJaWYgKGluZm8gIT0gTlVMTCkgewogCQlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQpAQCAtNzY5LDcgKzg0MCw2IEBACiAJCQl9CiAJCX0KIAl9Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKICNlbHNlCiAJLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IGFuZCBlbmFibGUgaXQgKi8KIAlpZiAob21hcDFfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnR1YWxfY2tfbXB1LCB+MCkpIHsKQEAgLTc3OCw5ICs4NDgsOSBAQAogCQlvbWFwX3dyaXRldygweDIyOTAsIERQTExfQ1RMKTsKIAkJb21hcF93cml0ZXcoY3B1X2lzX29tYXA3MzAoKSA/IDB4MzAwNSA6IDB4MTAwNSwgQVJNX0NLQ1RMKTsKIAkJY2tfZHBsbDEucmF0ZSA9IDYwMDAwMDAwOwotCQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwogCX0KICNlbmRpZgorCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAJLyogQ2FjaGUgcmF0ZXMgZm9yIGNsb2NrcyBjb25uZWN0ZWQgdG8gY2tfcmVmIChub3QgZHBsbDEpICovCiAJcHJvcGFnYXRlX3JhdGUoJmNrX3JlZik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoeHRhbC9EUExMMS9NUFUpOiAiCkBAIC04MzIsNCArOTAyLDMgQEAKIAogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKaW5kZXggYzFkY2RmMS4uMTdmODc0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApAQCAtMTMsMjcgKzEzLDIyIEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICiAKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgaW50IG9tYXAxX3NldF9zb3NzaV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyB2b2lkIG9tYXAxX3Nvc3NpX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3Nvc3NpX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CiBzdGF0aWMgaW50IG9tYXAxX3NldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgaW50IG9tYXAxX3NldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBsb25nIG9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIHZvaWQgb21hcDFfaW5pdF9leHRfY2xrKHN0cnVjdCBjbGsgKiBjbGspOwogc3RhdGljIGludCBvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIGxvbmcgb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOworCitzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAogc3RydWN0IG1wdV9yYXRlIHsKIAl1bnNpZ25lZCBsb25nCQlyYXRlOwpAQCAtMTUyLDEwMSArMTQ3LDg0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNrX3JlZiA9IHsKIAkubmFtZQkJPSAiY2tfcmVmIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNrX2RwbGwxID0gewogCS5uYW1lCQk9ICJja19kcGxsMSIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgY2tfZHBsbDFvdXQgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBDTE9DS19JRExFX0NPTlRST0wgfAotCQkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IFJBVEVfUFJPUEFHQVRFUywKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wgfCBFTkFCTEVfUkVHXzMyQklULAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDEyLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc29zc2lfY2sgPSB7CiAJLm5hbWUJCT0gImNrX3Nvc3NpIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZja19kcGxsMW91dC5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQgfAotCQkJICBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzEpLAogCS5lbmFibGVfYml0CT0gMTYsCiAJLnJlY2FsYwkJPSAmb21hcDFfc29zc2lfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfc29zc2lfcmF0ZSwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9jayA9IHsKIAkubmFtZQkJPSAiYXJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0NLQ1RMIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfQVJNRElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXBlcl9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiYXJtcGVyX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8Ci0JCQkJICBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAogCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9ncGlvX2NrID0gewogCS5uYW1lCQk9ICJhcm1fZ3Bpb19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm14b3JfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImFybXhvcl9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19yZWYsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDEsCiB9OwpAQCAtMjU0LDE0ICsyMzIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXRpbV9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiYXJtdGltX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fVElNQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSA5LAogfTsKQEAgLTI2OSwyMDEgKzI0NSwxNjYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXdkdF9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiYXJtd2R0X2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fV0RUQ0ssCiAJCS5yZWNhbGMJCT0gJm9tYXAxX3dhdGNoZG9nX3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTZ4eCA9IHsKIAkubmFtZQkJPSAiYXJtaW50aF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmYXJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTZ4eCB0aGUgZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGJ5IDIgYnkgcHJvZ3JhbW1pbmcKIAkgKiBBUk1fQ0tDVEw6QVJNX0lOVEhDS19TRUwoMTQpIHRvIDEKIAkgKgogCSAqIDE1MTAgdmVyc2lvbiBpcyBpbiBUQyBjbG9ja3MuCiAJICovCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fQ0tDVEwsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9DS0NUTCksCiAJLmVuYWJsZV9iaXQJPSBFTl9EU1BDSywKIAkucmF0ZV9vZmZzZXQJPSBDS0NUTF9EU1BESVZfT0ZGU0VULAogCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNwbW11X2NrID0gewogCS5uYW1lCQk9ICJkc3BtbXVfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmF0ZV9vZmZzZXQJPSBDS0NUTF9EU1BNTVVESVZfT0ZGU0VULAogCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNwcGVyX2NrID0gewogCS5uYW1lCQk9ICJkc3BwZXJfY2siLAorCS5vcHMJCT0gJmNsa29wc19kc3BjaywKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgVklSVFVBTF9JT19BRERSRVNTLAogCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKIAkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAogCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluLAorCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAogCS5zZXRfcmF0ZQk9ICZvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbiwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHhvcl9jayA9IHsKIAkubmFtZQkJPSAiZHNweG9yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZHNwY2ssCiAJLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFZJUlRVQUxfSU9fQUREUkVTUywKIAkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3B0aW1fY2sgPSB7CiAJLm5hbWUJCT0gImRzcHRpbV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2RzcGNrLAogCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCiAJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4sCiB9OwogCiAvKiBUaWUgQVJNX0lETEVDVDE6SURMSUZfQVJNIHRvIHRoaXMgbG9naWNhbCBjbG9jayBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIHRjX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJ0Y19jayIsCisJCS5vcHMJCT0gJmNsa29wc19udWxsLAogCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDczMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKIAkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfVENESVZfT0ZGU0VULAogCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gNiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0gewogCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKIAkgKgogCSAqIDE2eHggdmVyc2lvbiBpcyBpbiBNUFUgY2xvY2tzLgogCSAqLwotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdGlwYl9jayA9IHsKIAkvKiBOby1pZGxlIGNvbnRyb2xsZWQgYnkgInRjX2NrIiAqLwogCS5uYW1lCQk9ICJ0aXBiX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBsM19vY3BpX2NrID0gewogCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCiAJLm5hbWUJCT0gImwzX29jcGlfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKIAkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jayA9IHsKIAkubmFtZQkJPSAidGMxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QzLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMyksCiAJLmVuYWJsZV9iaXQJPSBFTl9UQzFfQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRjMl9jayA9IHsKIAkubmFtZQkJPSAidGMyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QzLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMyksCiAJLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKIAkvKiBOby1pZGxlIGNvbnRyb2xsZWQgYnkgInRjX2NrIiAqLwogCS5uYW1lCQk9ICJkbWFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CiAJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFwaV9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiYXBpX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSA4LAogfTsKQEAgLTQ3MSwyNzYgKzQxMiwyMzggQEAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxiX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJsYl9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQkNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0gewogCS5uYW1lCQk9ICJyaGVhMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayByaGVhMl9jayA9IHsKIAkubmFtZQkJPSAicmhlYTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbGNkX2NrXzE2eHggPSB7CiAJLm5hbWUJCT0gImxjZF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8IFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsY2RfY2tfMTUxMCA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAibGNkX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCQkgIFJBVEVfQ0tDVEwgfCBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAogCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAogCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gMywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxXzE1MTAgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCB8Ci0JCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMjksCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKIAkucmVjYWxjCQk9ICZvbWFwMV91YXJ0X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDFfMTZ4eCA9IHsKIAkuY2xrCT0gewogCQkubmFtZQkJPSAidWFydDFfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfdWFydCwKIAkJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkJLnJhdGUJCT0gNDgwMDAwMDAsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQgfAotCQkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8CisJCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJCS5lbmFibGVfYml0CT0gMjksCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCiAJfSwKIAkuc3lzY19hZGRyCT0gMHhmZmZiMDA1NCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2NrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAotCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMzAsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKIAkucmVjYWxjCQk9ICZvbWFwMV91YXJ0X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzXzE1MTAgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCB8Ci0JCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMzEsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKIAkucmVjYWxjCQk9ICZvbWFwMV91YXJ0X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDNfMTZ4eCA9IHsKIAkuY2xrCT0gewogCQkubmFtZQkJPSAidWFydDNfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfdWFydCwKIAkJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkJLnJhdGUJCT0gNDgwMDAwMDAsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQgfAotCQkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8CisJCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJCS5lbmFibGVfYml0CT0gMzEsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCiAJfSwKIAkuc3lzY19hZGRyCT0gMHhmZmZiOTg1NCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtvID0gewkvKiA2IE1IeiBvdXRwdXQgb24gVzRfVVNCX0NMS08gKi8KIAkubmFtZQkJPSAidXNiX2Nsa28iLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopVUxQRF9DTE9DS19DVFJMLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoVUxQRF9DTE9DS19DVFJMKSwKIAkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNTEwID0gewogCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE2eHggPSB7CiAJLm5hbWUJCT0gInVzYl9oaGNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLAogCS8qIE9UR19TWVNDT05fMi5PVEdfUEFERU4gPT0gMCAobm90IDE1MTAtY29tcGF0aWJsZSkgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilPVEdfQkFTRSArIDB4MDggLyogT1RHX1NZU0NPTl8yICovLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoT1RHX0JBU0UgKyAweDA4KSwgLyogT1RHX1NZU0NPTl8yICovCiAJLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0gewogCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU09GVF9SRVFfUkVHLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAogCS5lbmFibGVfYml0CT0gNCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTUxMCA9IHsKIAkubmFtZQkJPSAibWNsayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0gCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVELAotIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCi0gCS5lbmFibGVfYml0CT0gNiwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKKwkuZW5hYmxlX2JpdAk9IDYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2xrXzE2eHggPSB7CiAJLm5hbWUJCT0gIm1jbGsiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilDT01fQ0xLX0RJVl9DVFJMX1NFTCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQ09NX0NMS19ESVZfQ1RSTF9TRUwpLAogCS5lbmFibGVfYml0CT0gQ09NX1VMUERfUExMX0NMS19SRVEsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAogCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBiY2xrXzE1MTAgPSB7CiAJLm5hbWUJCT0gImJjbGsiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVELAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0gewogCS5uYW1lCQk9ICJiY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU1dEX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNXRF9DTEtfRElWX0NUUkxfU0VMKSwKIAkuZW5hYmxlX2JpdAk9IFNXRF9VTFBEX1BMTF9DTEtfUkVRLAogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfZXh0X2Nsa19yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZSwKIAkuaW5pdAkJPSAmb21hcDFfaW5pdF9leHRfY2xrLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKIAkubmFtZQkJPSAibW1jX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMjMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewogCS5uYW1lCQk9ICJtbWNfY2siLAogCS5pZAkJPSAxLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAyMCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnR1YWxfY2tfbXB1ID0gewogCS5uYW1lCQk9ICJtcHUiLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZhcm1fY2ssIC8qIElzIHNtYXJ0ZXIgYWxpYXMgZm9yICovCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2VsZWN0X3RhYmxlX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZSwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIC8qIHZpcnR1YWwgZnVuY3Rpb25hbCBjbG9jayBkb21haW4gZm9yIEkyQy4gSnVzdCBmb3IgbWFraW5nIHN1cmUgdGhhdCBBUk1YT1JfQ0sKQEAgLTc0OCw3OCArNjUxLDE5IEBACiBzdGF0aWMgc3RydWN0IGNsayBpMmNfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKIAkuaWQJCT0gMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQgfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLnBhcmVudAkJPSAmYXJteG9yX2NrLmNsaywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCiAJLmlkCQk9IDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgVklSVFVBTF9DTE9DSyB8IENMT0NLX05PX0lETEVfUEFSRU5UIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKLQkvKiBub24tVUxQRCBjbG9ja3MgKi8KLQkmY2tfcmVmLAotCSZja19kcGxsMSwKLQkvKiBDS19HRU4xIGNsb2NrcyAqLwotCSZja19kcGxsMW91dC5jbGssCi0JJnNvc3NpX2NrLAotCSZhcm1fY2ssCi0JJmFybXBlcl9jay5jbGssCi0JJmFybV9ncGlvX2NrLAotCSZhcm14b3JfY2suY2xrLAotCSZhcm10aW1fY2suY2xrLAotCSZhcm13ZHRfY2suY2xrLAotCSZhcm1pbnRoX2NrMTUxMCwgICZhcm1pbnRoX2NrMTZ4eCwKLQkvKiBDS19HRU4yIGNsb2NrcyAqLwotCSZkc3BfY2ssCi0JJmRzcG1tdV9jaywKLQkmZHNwcGVyX2NrLAotCSZkc3B4b3JfY2ssCi0JJmRzcHRpbV9jaywKLQkvKiBDS19HRU4zIGNsb2NrcyAqLwotCSZ0Y19jay5jbGssCi0JJnRpcGJfY2ssCi0JJmwzX29jcGlfY2ssCi0JJnRjMV9jaywKLQkmdGMyX2NrLAotCSZkbWFfY2ssCi0JJmRtYV9sY2RmcmVlX2NrLAotCSZhcGlfY2suY2xrLAotCSZsYl9jay5jbGssCi0JJnJoZWExX2NrLAotCSZyaGVhMl9jaywKLQkmbGNkX2NrXzE2eHgsCi0JJmxjZF9ja18xNTEwLmNsaywKLQkvKiBVTFBEIGNsb2NrcyAqLwotCSZ1YXJ0MV8xNTEwLAotCSZ1YXJ0MV8xNnh4LmNsaywKLQkmdWFydDJfY2ssCi0JJnVhcnQzXzE1MTAsCi0JJnVhcnQzXzE2eHguY2xrLAotCSZ1c2JfY2xrbywKLQkmdXNiX2hoY19jazE1MTAsICZ1c2JfaGhjX2NrMTZ4eCwKLQkmdXNiX2RjX2NrLAotCSZtY2xrXzE1MTAsICAmbWNsa18xNnh4LAotCSZiY2xrXzE1MTAsICAmYmNsa18xNnh4LAotCSZtbWMxX2NrLAotCSZtbWMyX2NrLAotCS8qIFZpcnR1YWwgY2xvY2tzICovCi0JJnZpcnR1YWxfY2tfbXB1LAotCSZpMmNfZmNrLAotCSZpMmNfaWNrLAogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCmluZGV4IGJhNWQ3YzAuLmJiYmFlYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCkBAIC04Niw3ICs4Niw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYm94X2RldmljZSA9IHsKLQkubmFtZQkJPSAibWFpbGJveCIsCisJLm5hbWUJCT0gIm9tYXAxLW1haWxib3giLAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobWJveF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IG1ib3hfcmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCmluZGV4IDg5YmI4NzUuLjRlZjI2ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAl7IC5qdGFnX2lkID0gMHhiNTc0LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzEwMzE1LCAudHlwZSA9IDB4MDMxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweDM1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDEwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMzAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwNTAwLCAudHlwZSA9IDB4MDg1MDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI0NzAsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMTAxMDAsIC50eXBlID0gMHgxNTEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDE2MTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzIwMTAwLCAudHlwZSA9IDB4MTYxMTAwMDB9LApAQCAtNzcsNyArNzgsNyBAQAogCXByb2RfaWQgPSBvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8xKTsKIAlvbWFwX2lkID0gb21hcF9yZWFkbChPTUFQMzJfSURfMSk7CiAKLQkvKiBDaGVjayBmb3IgdW51c2FibGUgT01BUF9QUk9EVUNUSU9OX0lEXzEgb24gMTYxMUIvNTkxMiBhbmQgNzMwICovCisJLyogQ2hlY2sgZm9yIHVudXNhYmxlIE9NQVBfUFJPRFVDVElPTl9JRF8xIG9uIDE2MTFCLzU5MTIgYW5kIDczMC84NTAgKi8KIAlpZiAoKChwcm9kX2lkID4+IDIwKSA9PSAwKSB8fCAocHJvZF9pZCA9PSBvbWFwX2lkKSkKIAkJcHJvZF9pZCA9IDA7CiAJZWxzZQpAQCAtMTc4LDYgKzE3OSw3IEBACiAKIAlzd2l0Y2ggKGNwdV90eXBlKSB7CiAJY2FzZSAweDA3OgorCWNhc2UgMHgwODoKIAkJb21hcF9yZXZpc2lvbiB8PSAweDA3OwogCQlicmVhazsKIAljYXNlIDB4MDM6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKaW5kZXggNGMzZTU4Mi4uM2FmZTU0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwpAQCAtNTIsNiArNTIsMjIgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDg1MF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gT01BUDg1MF9EU1BfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVA4NTBfRFNQX1NUQVJUKSwKKwkJLmxlbmd0aAkJPSBPTUFQODUwX0RTUF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CisJCS52aXJ0dWFsCT0gT01BUDg1MF9EU1BSRUdfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVA4NTBfRFNQUkVHX1NUQVJUKSwKKwkJLmxlbmd0aAkJPSBPTUFQODUwX0RTUFJFR19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9Cit9OworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CkBAIC0xMDksNiArMTI1LDEzIEBACiAJCWlvdGFibGVfaW5pdChvbWFwNzMwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDczMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJaWYgKGNwdV9pc19vbWFwODUwKCkpIHsKKwkJaW90YWJsZV9pbml0KG9tYXA4NTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwODUwX2lvX2Rlc2MpKTsKKwl9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCWlvdGFibGVfaW5pdChvbWFwMTUxMF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAxNTEwX2lvX2Rlc2MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IDlhZDUxOTcuLmRlMDNjODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtMTQ1LDYgKzE0NSwxNCBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXA4NTBfaXJxX2JhbmtzW10gPSB7CisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLAkJLnRyaWdnZXJfbWFwID0gMHhiM2Y4ZTIyZiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDJfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4ZmRiOWMxZjIgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UgKyAweDEwMCwJLnRyaWdnZXJfbWFwID0gMHg4MDAwNDBmMyB9LAorfTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayBvbWFwMTUxMF9pcnFfYmFua3NbXSA9IHsKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgxX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGIzZmViZmZmIH0sCkBAIC0xODQsNiArMTkyLDEyIEBACiAJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwNzMwX2lycV9iYW5rcyk7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWlmIChjcHVfaXNfb21hcDg1MCgpKSB7CisJCWlycV9iYW5rcyA9IG9tYXA4NTBfaXJxX2JhbmtzOworCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDg1MF9pcnFfYmFua3MpOworCX0KKyNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlycV9iYW5rcyA9IG9tYXAxNTEwX2lycV9iYW5rczsKQEAgLTIxNCw5ICsyMjgsOCBAQAogCWlycV9iYW5rX3dyaXRlbCgweDAzLCAxLCBJUlFfQ09OVFJPTF9SRUdfT0ZGU0VUKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGluIGdsb2JhbCBtYXNrICovCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSkKIAkJaXJxX2Jhbmtfd3JpdGVsKDB4MCwgMCwgSVJRX0dNUl9SRUdfT0ZGU0VUKTsKLQl9CiAKIAkvKiBJbnN0YWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIGVhY2ggYmFuayAqLwogCWZvciAoaSA9IDA7IGkgPCBpcnFfYmFua19jb3VudDsgaSsrKSB7CkBAIC0yMzYsNiArMjQ5LDggQEAKIAogCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlvbWFwX3VubWFza19pcnEoSU5UXzczMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDg1MCgpKQorCQlvbWFwX3VubWFza19pcnEoSU5UXzg1MF9JSDJfSVJRKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKIAkJb21hcF91bm1hc2tfaXJxKElOVF8xNTEwX0lIMl9JUlEpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwppbmRleCA1OWFiYmYzLi4wYWY0ZDZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNYWlsYm94IHJlc2VydmF0aW9uIG1vZHVsZXMgZm9yIERTUAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBNQUlMQk9YX0RTUDJBUk0xX0ZsYWcJCTB4MWMKICNkZWZpbmUgTUFJTEJPWF9EU1AyQVJNMl9GbGFnCQkweDIwCiAKLXVuc2lnbmVkIGxvbmcgbWJveF9iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqbWJveF9iYXNlOwogCiBzdHJ1Y3Qgb21hcF9tYm94MV9maWZvIHsKIAl1bnNpZ25lZCBsb25nIGNtZDsKQEAgLTQwLDE0ICs0MCwxNCBAQAogCXN0cnVjdCBvbWFwX21ib3gxX2ZpZm8gcnhfZmlmbzsKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfcmVhZF9yZWcodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IG1ib3hfcmVhZF9yZWcoc2l6ZV90IG9mcykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZHcobWJveF9iYXNlICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcobWJveF9iYXNlICsgb2ZzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfd3JpdGVfcmVnKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF93cml0ZV9yZWcodTMyIHZhbCwgc2l6ZV90IG9mcykKIHsKLQlfX3Jhd193cml0ZXcodmFsLCBtYm94X2Jhc2UgKyByZWcpOworCV9fcmF3X3dyaXRldyh2YWwsIG1ib3hfYmFzZSArIG9mcyk7CiB9CiAKIC8qIG1zZyAqLwpAQCAtMTQzLDcgKzE0Myw3IEBACiB9OwogRVhQT1JUX1NZTUJPTChtYm94X2RzcF9pbmZvKTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcDFfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgb21hcDFfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQgPSAwOwpAQCAtMTcwLDEyICsxNzAsMTAgQEAKIAl9CiAJbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwogCi0JcmV0ID0gb21hcF9tYm94X3JlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9kc3BfaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDFfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAxX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJb21hcF9tYm94X3VucmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOwogCkBAIC0xODQsOSArMTgyLDkgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDFfbWJveF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gb21hcDFfbWJveF9wcm9iZSwKLQkucmVtb3ZlCT0gb21hcDFfbWJveF9yZW1vdmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG9tYXAxX21ib3hfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewotCQkubmFtZQk9ICJtYWlsYm94IiwKKwkJLm5hbWUJPSAib21hcDEtbWFpbGJveCIsCiAJfSwKIH07CiAKQEAgLTIwMyw0ICsyMDEsNyBAQAogbW9kdWxlX2luaXQob21hcDFfbWJveF9pbml0KTsKIG1vZHVsZV9leGl0KG9tYXAxX21ib3hfZXhpdCk7CiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigib21hcCBtYWlsYm94OiBvbWFwMSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb25zIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUiIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm9tYXAxLW1haWxib3giKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwppbmRleCA1NzViYTMxLi5kMDQwYzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCkBAIC0yOCw5ICsyOCw5IEBACiAjZGVmaW5lIERQU19SU1RDVDJfUEVSX0VOCSgxIDw8IDApCiAjZGVmaW5lIERTUF9SU1RDVDJfV0RfUEVSX0VOCSgxIDw8IDEpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotY29uc3QgY2hhciAqY2xrX25hbWVzW10gPSB7ICJkc3BfY2siLCAiYXBpX2NrIiwgImRzcHhvcl9jayIgfTsKLSNlbmRpZgorc3RhdGljIGludCBkc3BfdXNlOworc3RhdGljIHN0cnVjdCBjbGsgKmFwaV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayAqZHNwX2NsazsKIAogc3RhdGljIHZvaWQgb21hcDFfbWNic3BfcmVxdWVzdCh1bnNpZ25lZCBpbnQgaWQpCiB7CkBAIC0zOSwyMCArMzksNDAgQEAKIAkgKiBhcmUgRFNQIHB1YmxpYyBwZXJpcGhlcmFscy4KIAkgKi8KIAlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpIHsKLQkJb21hcF9kc3BfcmVxdWVzdF9tZW0oKTsKLQkJLyoKLQkJICogRFNQIGV4dGVybmFsIHBlcmlwaGVyYWwgcmVzZXQKLQkJICogRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGRzcCBjb2RlCi0JCSAqLwotCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRFNQX1JTVENUMikgfCBEUFNfUlNUQ1QyX1BFUl9FTiB8Ci0JCQkJRFNQX1JTVENUMl9XRF9QRVJfRU4sIERTUF9SU1RDVDIpOworCQlpZiAoZHNwX3VzZSsrID09IDApIHsKKwkJCWFwaV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJhcGlfY2xrIik7CisJCQlkc3BfY2xrID0gY2xrX2dldChOVUxMLCAiZHNwX2NsayIpOworCQkJaWYgKCFJU19FUlIoYXBpX2NsaykgJiYgIUlTX0VSUihkc3BfY2xrKSkgeworCQkJCWNsa19lbmFibGUoYXBpX2Nsayk7CisJCQkJY2xrX2VuYWJsZShkc3BfY2xrKTsKKworCQkJCW9tYXBfZHNwX3JlcXVlc3RfbWVtKCk7CisJCQkJLyoKKwkJCQkgKiBEU1AgZXh0ZXJuYWwgcGVyaXBoZXJhbCByZXNldAorCQkJCSAqIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBkc3AgY29kZQorCQkJCSAqLworCQkJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhEU1BfUlNUQ1QyKSB8IERQU19SU1RDVDJfUEVSX0VOIHwKKwkJCQkJCURTUF9SU1RDVDJfV0RfUEVSX0VOLCBEU1BfUlNUQ1QyKTsKKwkJCX0KKwkJfQogCX0KIH0KIAogc3RhdGljIHZvaWQgb21hcDFfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCiB7Ci0JaWYgKGlkID09IE9NQVBfTUNCU1AxIHx8IGlkID09IE9NQVBfTUNCU1AzKQotCQlvbWFwX2RzcF9yZWxlYXNlX21lbSgpOworCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykgeworCQlpZiAoLS1kc3BfdXNlID09IDApIHsKKwkJCW9tYXBfZHNwX3JlbGVhc2VfbWVtKCk7CisJCQlpZiAoIUlTX0VSUihhcGlfY2xrKSkgeworCQkJCWNsa19kaXNhYmxlKGFwaV9jbGspOworCQkJCWNsa19wdXQoYXBpX2Nsayk7CisJCQl9CisJCQlpZiAoIUlTX0VSUihkc3BfY2xrKSkgeworCQkJCWNsa19kaXNhYmxlKGRzcF9jbGspOworCQkJCWNsa19wdXQoZHNwX2Nsayk7CisJCQl9CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9vcHMgb21hcDFfbWNic3Bfb3BzID0gewpAQCAtOTQsOCArMTE0LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AxUlgsCiAJCS50eF9pcnEJCT0gSU5UX01jQlNQMVRYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDMsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDJfQkFTRSwKQEAgLTExMiw4ICsxMzAsNiBAQAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDNSWCwKIAkJLnR4X2lycQkJPSBJTlRfTWNCU1AzVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMywKIAl9LAogfTsKICNkZWZpbmUgT01BUDE1WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDE1eHhfbWNic3BfcGRhdGEpCkBAIC0xMzEsOCArMTQ3LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AxUlgsCiAJCS50eF9pcnEJCT0gSU5UX01jQlNQMVRYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDMsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDJfQkFTRSwKQEAgLTE0OSw4ICsxNjMsNiBAQAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDNSWCwKIAkJLnR4X2lycQkJPSBJTlRfTWNCU1AzVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMywKIAl9LAogfTsKICNkZWZpbmUgT01BUDE2WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDE2eHhfbWNic3BfcGRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwppbmRleCAwNjJjOTA1Li43MjFlMGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKQEAgLTU4LDYgKzU4LDI1IEBACiAjZGVmaW5lIE9NQVA3MzBfUElOU19TWgkJMAogI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVA3MzAgKi8KIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKK3N0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXA4NTBfcGluc1tdID0geworTVVYX0NGR184NTAoIkUyXzg1MF9LQlIwIiwgICAgICAgIDEyLCAgIDIxLCAgICAwLCAgIDIwLCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiSjdfODUwX0tCUjEiLCAgICAgICAgMTIsICAgMjUsICAgIDAsICAgMjQsICAgMSwgMCkKK01VWF9DRkdfODUwKCJFMV84NTBfS0JSMiIsICAgICAgICAxMiwgICAyOSwgICAgMCwgICAyOCwgICAxLCAwKQorTVVYX0NGR184NTAoIkYzXzg1MF9LQlIzIiwgICAgICAgIDEzLCAgICAxLCAgICAwLCAgICAwLCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRDJfODUwX0tCUjQiLCAgICAgICAgMTMsICAgIDUsICAgIDAsICAgIDQsICAgMSwgMCkKK01VWF9DRkdfODUwKCJDMl84NTBfS0JDMCIsICAgICAgICAxMywgICAgOSwgICAgMCwgICAgOCwgICAxLCAwKQorTVVYX0NGR184NTAoIkQzXzg1MF9LQkMxIiwgICAgICAgIDEzLCAgIDEzLCAgICAwLCAgIDEyLCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRTRfODUwX0tCQzIiLCAgICAgICAgMTMsICAgMTcsICAgIDAsICAgMTYsICAgMSwgMCkKK01VWF9DRkdfODUwKCJGNF84NTBfS0JDMyIsICAgICAgICAxMywgICAyMSwgICAgMCwgICAyMCwgICAxLCAwKQorTVVYX0NGR184NTAoIkUzXzg1MF9LQkM0IiwgICAgICAgIDEzLCAgIDI1LCAgICAwLCAgIDI0LCAgIDEsIDApCisKK01VWF9DRkdfODUwKCJBQTE3Xzg1MF9VU0JfRE0iLCAgICAgMiwgICAyMSwgICAgMCwgICAyMCwgICAwLCAwKQorTVVYX0NGR184NTAoIlcxNl84NTBfVVNCX1BVX0VOIiwgICAyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCitNVVhfQ0ZHXzg1MCgiVzE3Xzg1MF9VU0JfVkJVU0kiLCAgIDIsICAgMjksICAgIDAsICAgMjgsICAgMCwgMCkKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiBzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDF4eHhfcGluc1tdID0gewogLyoKQEAgLTQxOSw2ICs0MzgsMTEgQEAKIAkJCXByaW50aygiICAgICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAogCQkJICAgICAgIGNmZy0+cHVsbF9uYW1lLCBjZmctPnB1bGxfcmVnLCBwdWxsX29yaWcsIHB1bGwpOwogCX0KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwlvbWFwX211eF9yZWdpc3RlcihvbWFwODUwX3BpbnMsIEFSUkFZX1NJWkUob21hcDg1MF9waW5zKSk7CisjZW5kaWYKKwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVhfRVJST1JTCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCAwMDAyMDg0Li44NDIwOTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTEyMSw2ICsxMjEsMTMgQEAKIAkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gSU5UXzczMF9VQVJUX01PREVNX0lSREFfMjsKIAl9CiAKKwlpZiAoY3B1X2lzX29tYXA4NTAoKSkgeworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5yZWdzaGlmdCA9IDA7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLnJlZ3NoaWZ0ID0gMDsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gSU5UXzg1MF9VQVJUX01PREVNXzE7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLmlycSA9IElOVF84NTBfVUFSVF9NT0RFTV9JUkRBXzI7CisJfQorCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKIAkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDM3NTRiNzkuLjY0YWIzODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTU4LDQgKzU4LDEyIEBACiAKIGNvbmZpZyBNQUNIX09NQVAzX1BBTkRPUkEKIAlib29sICJPTUFQMyBQYW5kb3JhIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX09NQVBfMzQzMFNEUAorCWJvb2wgIk9NQVAgMzQzMCBTRFAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKworY29uZmlnIE1BQ0hfTk9LSUFfUlg1MQorCWJvb2wgIk5va2lhIFJYLTUxIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCBiYmQxMmJjLi5hMmMzZmNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlycS5vIGlkLm8gaW8ubyBtZW1vcnkubyBjb250cm9sLm8gcHJjbS5vIGNsb2NrLm8gbXV4Lm8gXAorb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIHNkcmMubyBjb250cm9sLm8gcHJjbS5vIGNsb2NrLm8gbXV4Lm8gXAogCQlkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8gcG93ZXJkb21haW4ubyBcCiAJCWNsb2NrZG9tYWluLm8KIApAQCAtMTQsNiArMTQsMTAgQEAKIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gc3JhbTI0M3gubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzcmFtMzR4eC5vCiAKKyMgU01TL1NEUkMKK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gc2RyYzJ4eHgubworIyBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHNkcmMzeHh4Lm8KKwogIyBQb3dlciBNYW5hZ2VtZW50CiBpZmVxICgkKENPTkZJR19QTSkseSkKIG9iai15CQkJCQkrPSBwbS5vCkBAIC0zOCw0ICs0MiwxMiBAQAogCQkJCQkgICBtbWMtdHdsNDAzMC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBKQkrPSBib2FyZC1vbWFwM3BhbmRvcmEubyBcCiAJCQkJCSAgIG1tYy10d2w0MDMwLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCkJCSs9IGJvYXJkLTM0MzBzZHAubyBcCisJCQkJCSAgIG1tYy10d2w0MDMwLm8KIAorb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUlg1MSkJCSs9IGJvYXJkLXJ4NTEubyBcCisJCQkJCSAgIGJvYXJkLXJ4NTEtcGVyaXBoZXJhbHMubyBcCisjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKK2lmZXEgKCQoQ09ORklHX1VTQl9NVVNCX1NPQykseSkKK29iai15CQkJCQkrPSB1c2ItbXVzYi5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwppbmRleCA4M2ZhMzcyLi4yMjE0MzY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwpAQCAtMzUsMTIgKzM1LDE2IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKKyNkZWZpbmUgU0RQMjQzMF9DUzBfQkFTRQkweDA0MDAwMDAwCiAjZGVmaW5lCVNEUDI0MzBfRkxBU0hfQ1MJMAogI2RlZmluZQlTRFAyNDMwX1NNQzkxWF9DUwk1CiAKKyNkZWZpbmUgU0RQMjQzMF9FVEhSX0dQSU9fSVJRCQkxNDkKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcDI0MzBfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xMDIsOCArMTA2LDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoT01BUDI0WFhfRVRIUl9HUElPX0lSUSksCi0JCS5lbmQJPSBPTUFQX0dQSU9fSVJRKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpLAorCQkuc3RhcnQJPSBPTUFQX0dQSU9fSVJRKFNEUDI0MzBfRVRIUl9HUElPX0lSUSksCisJCS5lbmQJPSBPTUFQX0dQSU9fSVJRKFNEUDI0MzBfRVRIUl9HUElPX0lSUSksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCiAJfSwKIH07CkBAIC0xNzAsMTMgKzE3NCwxMyBAQAogCXNkcDI0MzBfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOwogCXVkZWxheSgxMDApOwogCi0JaWYgKGdwaW9fcmVxdWVzdChPTUFQMjRYWF9FVEhSX0dQSU9fSVJRLCAiU01DOTF4IGlycSIpIDwgMCkgeworCWlmIChncGlvX3JlcXVlc3QoU0RQMjQzMF9FVEhSX0dQSU9fSVJRLCAiU01DOTF4IGlycSIpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTF4IElSUVxuIiwKLQkJCU9NQVAyNFhYX0VUSFJfR1BJT19JUlEpOworCQkJU0RQMjQzMF9FVEhSX0dQSU9fSVJRKTsKIAkJZ3BtY19jc19mcmVlKGV0aF9jcyk7CiAJCWdvdG8gb3V0OwogCX0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChTRFAyNDMwX0VUSFJfR1BJT19JUlEpOwogCiBvdXQ6CiAJY2xrX2Rpc2FibGUoZ3BtY19mY2spOwpAQCAtMTg1LDcgKzE4OSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogCXNkcDI0MzBfaW5pdF9zbWM5MXgoKTsKQEAgLTI1MSw2ICsyNTUsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDI0MzBfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCXVzYl9tdXNiX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMjQzMHNkcF9tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5Mjc0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC0wLDAgKzEsNTQyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisgKgorICogSW5pdGlhbCBjb2RlOiBTeWVkIE1vaGFtbWVkIEtoYXNpbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorCisjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CisjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KKworI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisKKyNkZWZpbmUgQ09ORklHX0RJU0FCTEVfSEZDTEsgMQorCisjZGVmaW5lIFNEUDM0MzBfRVRIUl9HUElPX0lSUV9TRFBWMQkyOQorI2RlZmluZSBTRFAzNDMwX0VUSFJfR1BJT19JUlFfU0RQVjIJNgorI2RlZmluZSBTRFAzNDMwX1NNQzkxWF9DUwkJMworCisjZGVmaW5lIFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjEJMworI2RlZmluZSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYyCTIKKworI2RlZmluZSBFTkFCTEVfVkFVWDNfREVESUNBVEVECTB4MDMKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFVl9HUlAJMHgyMAorCisjZGVmaW5lIFRXTDQwMzBfTVNFQ1VSRV9HUElPIDIyCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMCwKKwkJLmVuZAk9IDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNkcDM0MzBfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGludCBzZHAzNDMwX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfTEVGVCksCisJS0VZKDAsIDEsIEtFWV9SSUdIVCksCisJS0VZKDAsIDIsIEtFWV9BKSwKKwlLRVkoMCwgMywgS0VZX0IpLAorCUtFWSgwLCA0LCBLRVlfQyksCisJS0VZKDEsIDAsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMSwgS0VZX1VQKSwKKwlLRVkoMSwgMiwgS0VZX0UpLAorCUtFWSgxLCAzLCBLRVlfRiksCisJS0VZKDEsIDQsIEtFWV9HKSwKKwlLRVkoMiwgMCwgS0VZX0VOVEVSKSwKKwlLRVkoMiwgMSwgS0VZX0kpLAorCUtFWSgyLCAyLCBLRVlfSiksCisJS0VZKDIsIDMsIEtFWV9LKSwKKwlLRVkoMiwgNCwgS0VZXzMpLAorCUtFWSgzLCAwLCBLRVlfTSksCisJS0VZKDMsIDEsIEtFWV9OKSwKKwlLRVkoMywgMiwgS0VZX08pLAorCUtFWSgzLCAzLCBLRVlfUCksCisJS0VZKDMsIDQsIEtFWV9RKSwKKwlLRVkoNCwgMCwgS0VZX1IpLAorCUtFWSg0LCAxLCBLRVlfNCksCisJS0VZKDQsIDIsIEtFWV9UKSwKKwlLRVkoNCwgMywgS0VZX1UpLAorCUtFWSg0LCA0LCBLRVlfRCksCisJS0VZKDUsIDAsIEtFWV9WKSwKKwlLRVkoNSwgMSwgS0VZX1cpLAorCUtFWSg1LCAyLCBLRVlfTCksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX0gpLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBzZHAzNDMwX2twX2RhdGEgPSB7CisJLnJvd3MJCT0gNSwKKwkuY29scwkJPSA2LAorCS5rZXltYXAJCT0gc2RwMzQzMF9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHNkcDM0MzBfa2V5bWFwKSwKKwkucmVwCQk9IDEsCit9OworCitzdGF0aWMgaW50IHRzX2dwaW87CS8qIE5lZWRlZCBmb3IgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSAqLworCisvKioKKyAqIEBicmllZiBhZHM3ODQ2X2Rldl9pbml0IDogUmVxdWVzdHMgJiBzZXRzIEdQSU8gbGluZSBmb3IgcGVuLWlycQorICoKKyAqIEByZXR1cm4gLSB2b2lkLiBJZiByZXF1ZXN0IGdwaW8gZmFpbHMgdGhlbiBGbGFnIEtFUk5fRVJSLgorICovCitzdGF0aWMgdm9pZCBhZHM3ODQ2X2Rldl9pbml0KHZvaWQpCit7CisJaWYgKGdwaW9fcmVxdWVzdCh0c19ncGlvLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGFkczc0NiBwZW4gZG93biBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHRzX2dwaW8pOworCisJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZSh0c19ncGlvLCAxKTsKKwlvbWFwX3NldF9ncGlvX2RlYm91bmNlX3RpbWUodHNfZ3BpbywgMHhhKTsKK30KKworc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZSh0c19ncGlvKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgdHNjMjA0Nl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZpY2VfY29uZmlnIHRzYzIwNDZfbWNzcGlfY29uZmlnID0geworCS50dXJib19tb2RlCT0gMCwKKwkuc2luZ2xlX2NoYW5uZWwJPSAxLAkvKiAwOiBzbGF2ZSwgMTogbWFzdGVyICovCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNkcDM0MzBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLyoKKwkJICogVFNDMjA0NiBvcGVyYXRlcyBhdCBhIG1heCBmcmVxZW5jeSBvZiAyTUh6LCBzbworCQkgKiBvcGVyYXRlIHNsaWdodGx5IGJlbG93IGF0IDEuNU1IegorCQkgKi8KKwkJLm1vZGFsaWFzCQk9ICJhZHM3ODQ2IiwKKwkJLmJ1c19udW0JCT0gMSwKKwkJLmNoaXBfc2VsZWN0CQk9IDAsCisJCS5tYXhfc3BlZWRfaHoJCT0gMTUwMDAwMCwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZ0c2MyMDQ2X21jc3BpX2NvbmZpZywKKwkJLmlycQkJCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnRzYzIwNDZfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNkcDI0MzBfbGNkIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92ZGFjX3N1cHBseSA9IHsKKwkuc3VwcGx5CQk9ICJ2ZGFjIiwKKwkuZGV2CQk9ICZzZHAzNDMwX2xjZF9kZXZpY2UuZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdmR2aV9zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmR2aSIsCisJLmRldgkJPSAmc2RwMzQzMF9sY2RfZGV2aWNlLmRldiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZHAzNDMwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzZHAzNDMwX3NtYzkxeF9kZXZpY2UsCisJJnNkcDM0MzBfbGNkX2RldmljZSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc2RwMzQzMF9pbml0X3NtYzkxeCh2b2lkKQoreworCWludCBldGhfY3M7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKKwlpbnQgZXRoX2dwaW8gPSAwOworCisJZXRoX2NzID0gU0RQMzQzMF9TTUM5MVhfQ1M7CisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KGV0aF9jcywgU1pfMTZNLCAmY3NfbWVtX2Jhc2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQTUMgbWVtIGZvciBzbWM5MXhcbiIpOworCQlyZXR1cm47CisJfQorCisJc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gY3NfbWVtX2Jhc2UgKyAweDMwMDsKKwlzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXNbMF0uZW5kID0gY3NfbWVtX2Jhc2UgKyAweDMwZjsKKwl1ZGVsYXkoMTAwKTsKKworCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQorCQlldGhfZ3BpbyA9IFNEUDM0MzBfRVRIUl9HUElPX0lSUV9TRFBWMjsKKwllbHNlCisJCWV0aF9ncGlvID0gU0RQMzQzMF9FVEhSX0dQSU9fSVJRX1NEUFYxOworCisJc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gZ3Bpb190b19pcnEoZXRoX2dwaW8pOworCisJaWYgKGdwaW9fcmVxdWVzdChldGhfZ3BpbywgIlNNQzkxeCBpcnEiKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCisJCQlldGhfZ3Bpbyk7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZXRoX2dwaW8pOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7CisJc2RwMzQzMF9pbml0X3NtYzkxeCgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgc2RwMzQzMF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBzZHAzNDMwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHNkcDM0MzBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZzZHAzNDMwX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmc2RwMzQzMF9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgaW50IHNkcDM0MzBfYmF0dF90YWJsZVtdID0geworLyogMCBDKi8KKzMwODAwLCAyOTUwMCwgMjgzMDAsIDI3MTAwLAorMjYwMDAsIDI0OTAwLCAyMzkwMCwgMjI5MDAsIDIyMDAwLCAyMTEwMCwgMjAzMDAsIDE5NDAwLCAxODcwMCwgMTc5MDAsCisxNzIwMCwgMTY1MDAsIDE1OTAwLCAxNTMwMCwgMTQ3MDAsIDE0MTAwLCAxMzYwMCwgMTMxMDAsIDEyNjAwLCAxMjEwMCwKKzExNjAwLCAxMTIwMCwgMTA4MDAsIDEwNDAwLCAxMDAwMCwgOTYzMCwgICA5MjgwLCAgIDg5NTAsICAgODYyMCwgICA4MzEwLAorODAyMCwgICA3NzMwLCAgIDc0NjAsICAgNzIwMCwgICA2OTUwLCAgIDY3MTAsICAgNjQ3MCwgICA2MjUwLCAgIDYwNDAsICAgNTgzMCwKKzU2NDAsICAgNTQ1MCwgICA1MjYwLCAgIDUwOTAsICAgNDkyMCwgICA0NzYwLCAgIDQ2MDAsICAgNDQ1MCwgICA0MzEwLCAgIDQxNzAsCis0MDQwLCAgIDM5MTAsICAgMzc5MCwgICAzNjcwLCAgIDM1NTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX2JjaV9kYXRhID0geworCS5iYXR0ZXJ5X3RtcF90YmwJPSBzZHAzNDMwX2JhdHRfdGFibGUsCisJLnRibHNpemUJCT0gQVJSQVlfU0laRShzZHAzNDMwX2JhdHRfdGFibGUpLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gPSB7CisJeworCQkubW1jCQk9IDEsCisJCS8qIDggYml0cyAoZGVmYXVsdCkgcmVxdWlyZXMgUzYuMyA9PSBPTiwKKwkJICogc28gdGhlIFNJTSBjYXJkIGlzbid0IHVzZWQ7IGVsc2UgNCBiaXRzLgorCQkgKi8KKwkJLndpcmVzCQk9IDgsCisJCS5ncGlvX3dwCT0gNCwKKwl9LAorCXsKKwkJLm1tYwkJPSAyLAorCQkud2lyZXMJCT0gOCwKKwkJLmdwaW9fd3AJPSA3LAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdm1tYzFfc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZzaW1fc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jX2F1eCIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWMiLAorfTsKKworc3RhdGljIGludCBzZHAzNDMwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCit7CisJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpLAorCSAqIGdwaW8gKyAxIGlzICJtbWMxX2NkIiAoaW5wdXQvSVJRKQorCSAqLworCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CisJbW1jWzFdLmdwaW9fY2QgPSBncGlvICsgMTsKKwl0d2w0MDMwX21tY19pbml0KG1tYyk7CisKKwkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzIC4uLiB3ZSAia25vdyIgdGhlCisJICogcmVndWxhdG9ycyB3aWxsIGJlIHNldCB1cCBvbmx5ICphZnRlciogd2UgcmV0dXJuLgorCSAqLworCXNkcDM0MzBfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisJc2RwMzQzMF92c2ltX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCXNkcDM0MzBfdm1tYzJfc3VwcGx5LmRldiA9IG1tY1sxXS5kZXY7CisKKwkvKiBncGlvICsgNyBpcyAic3ViX2xjZF9lbl9ia2wiIChvdXRwdXQvUFdNMSkgKi8KKwlncGlvX3JlcXVlc3QoZ3BpbyArIDcsICJzdWJfbGNkX2VuX2JrbCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgNywgMCk7CisKKwkvKiBncGlvICsgMTUgaXMgInN1Yl9sY2RfblJTVCIgKG91dHB1dCkgKi8KKwlncGlvX3JlcXVlc3QoZ3BpbyArIDE1LCAic3ViX2xjZF9uUlNUIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyAxNSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBzZHAzNDMwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDgpIHwgQklUKDEzKQorCQkJCXwgQklUKDE2KSB8IEJJVCgxNyksCisJLnNldHVwCQk9IHNkcDM0MzBfdHdsX2dwaW9fc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgc2RwMzQzMF91c2JfZGF0YSA9IHsKKwkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX21hZGNfZGF0YSA9IHsKKwkuaXJxX2xpbmUJPSAxLAorfTsKKworLyoKKyAqIEFwcGx5IGFsbCB0aGUgZml4ZWQgdm9sdGFnZXMgc2luY2UgbW9zdCB2ZXJzaW9ucyBvZiBVLUJvb3QKKyAqIGRvbid0IGJvdGhlciB3aXRoIHRoYXQgaW5pdGlhbGl6YXRpb24uCisgKi8KKworLyogVkFVWDEgZm9yIG1haW5ib2FyZCAoaXJkYSBhbmQgc3ViLWxjZCkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCisvKiBWQVVYMiBmb3IgY2FtZXJhIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKKy8qIFZBVVgzIGZvciBMQ0QgYm9hcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgzID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCisvKiBWQVVYNCBmb3IgT01BUCBWRERfQ1NJMiAoY2FtZXJhKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKKy8qIFZNTUMxIGZvciBPTUFQIFZERF9NTUMxIChpL28pIGFuZCBNTUMxIGNhcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZtbWMxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92bW1jMV9zdXBwbHksCit9OworCisvKiBWTU1DMiBmb3IgTU1DMiBjYXJkICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92bW1jMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDE4NTAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3ZtbWMyX3N1cHBseSwKK307CisKKy8qIFZTSU0gZm9yIE9NQVAgVkREX01NQzFBIChpL28gZm9yIERBVDQuLkRBVDcpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92c2ltID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMzAwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92c2ltX3N1cHBseSwKK307CisKKy8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92ZGFjX3N1cHBseSwKK307CisKKy8qIFZQTEwyIGZvciBkaWdpdGFsIHZpZGVvIG91dHB1dHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZwbGwyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWRFZJIiwKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92ZHZpX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfdHdsZGF0YSA9IHsKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAorCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELAorCisJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCisJLmJjaQkJPSAmc2RwMzQzMF9iY2lfZGF0YSwKKwkuZ3BpbwkJPSAmc2RwMzQzMF9ncGlvX2RhdGEsCisJLm1hZGMJCT0gJnNkcDM0MzBfbWFkY19kYXRhLAorCS5rZXlwYWQJCT0gJnNkcDM0MzBfa3BfZGF0YSwKKwkudXNiCQk9ICZzZHAzNDMwX3VzYl9kYXRhLAorCisJLnZhdXgxCQk9ICZzZHAzNDMwX3ZhdXgxLAorCS52YXV4MgkJPSAmc2RwMzQzMF92YXV4MiwKKwkudmF1eDMJCT0gJnNkcDM0MzBfdmF1eDMsCisJLnZhdXg0CQk9ICZzZHAzNDMwX3ZhdXg0LAorCS52bW1jMQkJPSAmc2RwMzQzMF92bW1jMSwKKwkudm1tYzIJCT0gJnNkcDM0MzBfdm1tYzIsCisJLnZzaW0JCT0gJnNkcDM0MzBfdnNpbSwKKwkudmRhYwkJPSAmc2RwMzQzMF92ZGFjLAorCS52cGxsMgkJPSAmc2RwMzQzMF92cGxsMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzZHAzNDMwX2kyY19ib2FyZGluZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w0MDMwIiwgMHg0OCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwkJLmlycSA9IElOVF8zNFhYX1NZU19OSVJRLAorCQkucGxhdGZvcm1fZGF0YSA9ICZzZHAzNDMwX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzNDMwX2kyY19pbml0KHZvaWQpCit7CisJLyogaTJjMSBmb3IgUE1JQyBvbmx5ICovCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIHNkcDM0MzBfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUoc2RwMzQzMF9pMmNfYm9hcmRpbmZvKSk7CisJLyogaTJjMiBvbiBjYW1lcmEgY29ubmVjdG9yIChmb3Igc2Vuc29yIGNvbnRyb2wpIGFuZCBvcHRpb25hbCBpc3AxMzAxICovCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7CisJLyogaTJjMyBvbiBkaXNwbGF5IGNvbm5lY3RvciAoZm9yIERWSSwgdGZwNDEwKSAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX2luaXQodm9pZCkKK3sKKwlvbWFwMzQzMF9pMmNfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDM0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAzNDMwX2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDM0MzBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDM0MzBfY29uZmlnKTsKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJdHNfZ3BpbyA9IFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjI7CisJZWxzZQorCQl0c19ncGlvID0gU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMTsKKwlzZHAzNDMwX3NwaV9ib2FyZF9pbmZvWzBdLmlycSA9IGdwaW9fdG9faXJxKHRzX2dwaW8pOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNkcDM0MzBfc3BpX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShzZHAzNDMwX3NwaV9ib2FyZF9pbmZvKSk7CisJYWRzNzg0Nl9kZXZfaW5pdCgpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQXzM0MzBTRFAsICJPTUFQMzQzMCAzNDMwU0RQIGJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBTeWVkIEtoYXNpbSAtIFRleGFzIEluc3RydW1lbnRzIEluYyAqLworCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF8zNDMwc2RwX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwXzM0MzBzZHBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfMzQzMHNkcF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IDBhN2IyNGJhLi4wNmRmYmE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIEFQT0xMT05fRkxBU0hfQ1MJMAogI2RlZmluZSBBUE9MTE9OX0VUSF9DUwkJMQorI2RlZmluZSBBUE9MTE9OX0VUSFJfR1BJT19JUlEJNzQKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFwb2xsb25fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTI0OSw3ICsyNTAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIAlhcG9sbG9uX2luaXRfc21jOTF4KCk7CkBAIC0yNzIsNyArMjczLDYgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYXBvbGxvbl9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VBUlQsCSZhcG9sbG9uX3VhcnRfY29uZmlnIH0sCi0JeyBPTUFQX1RBR19VU0IsCQkmYXBvbGxvbl91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmYXBvbGxvbl9sY2RfY29uZmlnIH0sCiB9OwogCkBAIC0yOTksNiArMjk5LDcgQEAKIAlvbWFwX2NmZ19yZWcoUDIxXzI0MlhfR1BJTzEyKTsKIAlncGlvX3JlcXVlc3QoMTIsICJVU0Igc3VzcGVuZCIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxMiwgMCk7CisJb21hcF91c2JfaW5pdCgmYXBvbGxvbl91c2JfY29uZmlnKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfYXBvbGxvbl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDNiMzRjMjAuLjM0OTIxNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC0zMyw3ICszMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IDVlOWIxNDYuLmEwMjY3YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNkZWZpbmUgSDRfRkxBU0hfQ1MJMAogI2RlZmluZSBINF9TTUM5MVhfQ1MJMQogCisjZGVmaW5lIEg0X0VUSFJfR1BJT19JUlEJCTkyCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm93X2dwaW9zWzZdID0geyA4OCwgODksIDEyNCwgMTEsIDYsIDk2IH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbF9ncGlvc1s3XSA9IHsgOTAsIDkxLCAxMDAsIDM2LCAxMiwgOTcsIDk4IH07CiAKQEAgLTM0MSw3ICszNDMsNyBAQAogCXVkZWxheSgxMDApOwogCiAJb21hcF9jZmdfcmVnKE0xNV8yNFhYX0dQSU85Mik7Ci0JaWYgKGRlYnVnX2NhcmRfaW5pdChjc19tZW1fYmFzZSwgT01BUDI0WFhfRVRIUl9HUElPX0lSUSkgPCAwKQorCWlmIChkZWJ1Z19jYXJkX2luaXQoY3NfbWVtX2Jhc2UsIEg0X0VUSFJfR1BJT19JUlEpIDwgMCkKIAkJZ3BtY19jc19mcmVlKGV0aF9jcyk7CiAKIG91dDoKQEAgLTM2Myw3ICszNjUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiAJaDRfaW5pdF9mbGFzaCgpOwpAQCAtMzc3LDYgKzM3OSwzOSBAQAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaDRfdXNiX2NvbmZpZyBfX2luaXRkYXRhID0geworI2lmZGVmCUNPTkZJR19NQUNIX09NQVAyX0g0X1VTQjEKKwkvKiBOT1RFOiAgdXNiMSBjb3VsZCBhbHNvIGJlIHVzZWQgd2l0aCAzIHdpcmUgc2lnbmFsaW5nICovCisJLnBpbnNbMV0JPSA0LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfTUFDSF9PTUFQX0g0X09URworCS8qIFMxLjEwIE9OIC0tIFVTQiBPVEcgcG9ydAorCSAqIHVzYjAgc3dpdGNoZWQgdG8gTWluaS1BQiBwb3J0IGFuZCBpc3AxMzAxIHRyYW5zY2VpdmVyOworCSAqIFMyLlBPUzMgPSBPRkYsIFMyLlBPUzQgPSBPTiAuLi4gdG8gYWxsb3cgYmF0dGVyeSBjaGFyZ2luZworCSAqLworCS5vdGcJCT0gMSwKKwkucGluc1swXQk9IDQsCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAorCS8qIHVzZSBPVEcgY2FibGUsIG9yIHN0YW5kYXJkIEEtdG8tTWluaUIgKi8KKwkuaG1jX21vZGUJPSAweDE0LAkvKiAwOmRldi9vdGcgMTpob3N0IDI6ZGlzYWJsZSAqLworI2VsaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorCS8qIHVzZSBPVEcgY2FibGUsIG9yIE5PTlNUQU5EQVJEIChCLXRvLU1pbmlCKSAqLworCS5obWNfbW9kZQk9IDB4MTEsCS8qIDA6aG9zdCAxOmhvc3QgMjpkaXNhYmxlICovCisjZW5kaWYJLyogWFggKi8KKworI2Vsc2UKKwkvKiBTMS4xMCBPRkYgLS0gdXNiICJkb3dubG9hZCBwb3J0IgorCSAqIHVzYjAgc3dpdGNoZWQgdG8gTWluaS1CIHBvcnQgYW5kIGlzcDExMDUgdHJhbnNjZWl2ZXI7CisJICogUzIuUE9TMyA9IE9OLCBTMi5QT1M0ID0gT0ZGIC4uLiB0byBlbmFibGUgYmF0dGVyeSBjaGFyZ2luZworCSAqLworCS5yZWdpc3Rlcl9kZXYJPSAxLAorCS5waW5zWzBdCT0gMywKKy8qCS5obWNfbW9kZQk9IDB4MTQsKi8JLyogMDpkZXYgMTpob3N0IDI6ZGlzYWJsZSAqLworCS5obWNfbW9kZQk9IDB4MDAsCQkvKiAwOmRldnxvdGcgMTpkaXNhYmxlIDI6ZGlzYWJsZSAqLworI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoNF9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VBUlQsCSZoNF91YXJ0X2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkJJmg0X2xjZF9jb25maWcgfSwKQEAgLTQyOCw2ICs0NjMsNyBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGg0X2RldmljZXMsIEFSUkFZX1NJWkUoaDRfZGV2aWNlcykpOwogCW9tYXBfYm9hcmRfY29uZmlnID0gaDRfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGg0X2NvbmZpZyk7CisJb21hcF91c2JfaW5pdCgmaDRfdXNiX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCA2MDMxZTE3Li5lMDk2Zjc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTIyLDMxICsyMiwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbGRwLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKLSNkZWZpbmUgU0RQMzQzMF9TTUM5MVhfQ1MJMworI2RlZmluZSBMRFBfU01DOTExWF9DUwkJMQorI2RlZmluZSBMRFBfU01DOTExWF9HUElPCTE1MgorI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwCisjZGVmaW5lIExEUF9FVEhSX1NUQVJUCQlERUJVR19CQVNFCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGRwX3NtYzkxMXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBPTUFQMzRYWF9FVEhSX1NUQVJULAotCQkuZW5kCT0gT01BUDM0WFhfRVRIUl9TVEFSVCArIFNaXzRLLAorCQkuc3RhcnQJPSBMRFBfRVRIUl9TVEFSVCwKKwkJLmVuZAk9IExEUF9FVEhSX1NUQVJUICsgU1pfNEssCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtOTgsNyArMTAxLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIAlsZHBfaW5pdF9zbWM5MTF4KCk7CkBAIC0xNjIsNiArMTY1LDcgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShsZHBfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCXVzYl9tdXNiX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGUzOWNkMmMuLjc0NDc0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC0xNzUsOSArMTc2LDYgQEAKIHsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgYmVhZ2xlX2kyY19ib2FyZGluZm8sCiAJCQlBUlJBWV9TSVpFKGJlYWdsZV9pMmNfYm9hcmRpbmZvKSk7Ci0jaWZkZWYgQ09ORklHX0kyQzJfT01BUF9CRUFHTEUKLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKLSNlbmRpZgogCS8qIEJ1cyAzIGlzIGF0dGFjaGVkIHRvIHRoZSBEVkkgcG9ydCB3aGVyZSBkZXZpY2VzIGxpa2UgdGhlIHBpY28gRExQCiAJICogcHJvamVjdG9yIGRvbid0IHdvcmsgcmVsaWFibHkgd2l0aCA0MDBrSHogKi8KIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgMTAwLCBOVUxMLCAwKTsKQEAgLTE4Niw3ICsxODQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KQEAgLTMxNiw2ICszMTQsNyBAQAogCS8qIFJFVklTSVQgbGVhdmUgRFZJIHBvd2VyZWQgZG93biB1bnRpbCBpdCdzIG5lZWRlZCAuLi4gKi8KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTcwLCB0cnVlKTsKIAorCXVzYl9tdXNiX2luaXQoKTsKIAlvbWFwM2JlYWdsZV9mbGFzaF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGIzMTk2MTAuLjQwMmYwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTUzLDYgKzU0LDEzIEBACiAJCS5ncGlvX2NkCT0gLUVJTlZBTCwKIAkJLmdwaW9fd3AJPSAxMjcsCiAJCS5leHRfY2xvY2sJPSAxLAorCQkudHJhbnNjZWl2ZXIJPSB0cnVlLAorCX0sCisJeworCQkubW1jCQk9IDMsCisJCS53aXJlcwkJPSA0LAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CkBAIC0xMTAsNyArMTE4LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiB9CkBAIC0xOTMsNiArMjAxLDcgQEAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhvbWFwM3BhbmRvcmFfc3BpX2JvYXJkX2luZm8sCiAJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9zcGlfYm9hcmRfaW5mbykpOwogCW9tYXAzcGFuZG9yYV9hZHM3ODQ2X2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKaW5kZXggODJiM2RjNS4uYjNmNmU5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTM3LDIwICszNyw4NSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW92ZXJvLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfWEdBVEUJMTUKKyNkZWZpbmUgT1ZFUk9fR1BJT19XMldfTlJFU0VUCTE2CisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfTlJFU0VUCTE2NAorI2RlZmluZSBPVkVST19HUElPX1VTQkhfQ1BFTgkxNjgKKyNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKKwogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUgU1pfMTI4SwogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKIAorI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKworI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZpY2VfY29uZmlnIGFkczc4NDZfbWNzcGlfY29uZmlnID0geworCS50dXJib19tb2RlCT0gMCwKKwkuc2luZ2xlX2NoYW5uZWwJPSAxLAkvKiAwOiBzbGF2ZSwgMTogbWFzdGVyICovCit9OworCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKE9WRVJPX0dQSU9fUEVORE9XTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGFkczc4NDZfY29uZmlnID0geworCS54X21heAkJCT0gMHgwZmZmLAorCS55X21heAkJCT0gMHgwZmZmLAorCS54X3BsYXRlX29obXMJCT0gMTgwLAorCS5wcmVzc3VyZV9tYXgJCT0gMjU1LAorCS5kZWJvdW5jZV9tYXgJCT0gMTAsCisJLmRlYm91bmNlX3RvbAkJPSAzLAorCS5kZWJvdW5jZV9yZXAJCT0gMSwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gb3Zlcm9fc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJhZHM3ODQ2IiwKKwkJLmJ1c19udW0JCT0gMSwKKwkJLmNoaXBfc2VsZWN0CQk9IDAsCisJCS5tYXhfc3BlZWRfaHoJCT0gMTUwMDAwMCwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZhZHM3ODQ2X21jc3BpX2NvbmZpZywKKwkJLmlycQkJCT0gT01BUF9HUElPX0lSUShPVkVST19HUElPX1BFTkRPV04pLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmYWRzNzg0Nl9jb25maWcsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2Fkczc4NDZfaW5pdCh2b2lkKQoreworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fUEVORE9XTiwgIkFEUzc4NDZfUEVORE9XTiIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9pbnB1dChPVkVST19HUElPX1BFTkRPV04pID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fUEVORE9XTiwgMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIEFEUzc4NDZfUEVORE9XTlxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhvdmVyb19zcGlfYm9hcmRfaW5mbywKKwkJCUFSUkFZX1NJWkUob3Zlcm9fc3BpX2JvYXJkX2luZm8pKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb3Zlcm9fYWRzNzg0Nl9pbml0KHZvaWQpIHsgcmV0dXJuOyB9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG92ZXJvX25hbmRfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLApAQCAtMTc0LDcgKzIzOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiB9CkBAIC0yMDksNiArMjc0LDcgQEAKIAkJLndpcmVzCQk9IDQsCiAJCS5ncGlvX2NkCT0gLUVJTlZBTCwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCQkudHJhbnNjZWl2ZXIJPSB0cnVlLAogCX0sCiAJe30JLyogVGVybWluYXRvciAqLwogfTsKQEAgLTIyMiw2ICsyODgsOCBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAJb3Zlcm9fZmxhc2hfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoKTsKKwlvdmVyb19hZHM3ODQ2X2luaXQoKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKIAkJCSAgIk9WRVJPX0dQSU9fVzJXX05SRVNFVCIpID09IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzgxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1mbGFzaC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgorCisjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKworCisjZGVmaW5lIFNNQzkxWF9DUwkJCTEKKyNkZWZpbmUgU01DOTFYX0dQSU9fSVJRCQkJNTQKKyNkZWZpbmUgU01DOTFYX0dQSU9fUkVTRVQJCTE2NAorI2RlZmluZSBTTUM5MVhfR1BJT19QV1JEV04JCTg2CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugcng1MV9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByeDUxX3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyeDUxX3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJ4NTFfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgcng1MV9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1EpLAorCUtFWSgwLCAxLCBLRVlfVyksCisJS0VZKDAsIDIsIEtFWV9FKSwKKwlLRVkoMCwgMywgS0VZX1IpLAorCUtFWSgwLCA0LCBLRVlfVCksCisJS0VZKDAsIDUsIEtFWV9ZKSwKKwlLRVkoMCwgNiwgS0VZX1UpLAorCUtFWSgwLCA3LCBLRVlfSSksCisJS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMSwgMSwgS0VZX0QpLAorCUtFWSgxLCAyLCBLRVlfRE9UKSwKKwlLRVkoMSwgMywgS0VZX1YpLAorCUtFWSgxLCA0LCBLRVlfRE9XTiksCisJS0VZKDIsIDAsIEtFWV9QKSwKKwlLRVkoMiwgMSwgS0VZX0YpLAorCUtFWSgyLCAyLCBLRVlfVVApLAorCUtFWSgyLCAzLCBLRVlfQiksCisJS0VZKDIsIDQsIEtFWV9SSUdIVCksCisJS0VZKDMsIDAsIEtFWV9DT01NQSksCisJS0VZKDMsIDEsIEtFWV9HKSwKKwlLRVkoMywgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMywgMywgS0VZX04pLAorCUtFWSg0LCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNCwgMSwgS0VZX0gpLAorCUtFWSg0LCAzLCBLRVlfTSksCisJS0VZKDQsIDQsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDUsIDEsIEtFWV9KKSwKKwlLRVkoNSwgMiwgS0VZX1opLAorCUtFWSg1LCAzLCBLRVlfU1BBQ0UpLAorCUtFWSg1LCA0LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNiwgMCwgS0VZX0EpLAorCUtFWSg2LCAxLCBLRVlfSyksCisJS0VZKDYsIDIsIEtFWV9YKSwKKwlLRVkoNiwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNiwgNCwgS0VZX0ZOKSwKKwlLRVkoNywgMCwgS0VZX1MpLAorCUtFWSg3LCAxLCBLRVlfTCksCisJS0VZKDcsIDIsIEtFWV9DKSwKKwlLRVkoNywgMywgS0VZX0xFRlQpLAorCUtFWSgweGZmLCAwLCBLRVlfRjYpLAorCUtFWSgweGZmLCAxLCBLRVlfRjcpLAorCUtFWSgweGZmLCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCA0LCBLRVlfRjkpLAorCUtFWSgweGZmLCA1LCBLRVlfRjEwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLnJvd3MJCT0gOCwKKwkuY29scwkJPSA4LAorCS5rZXltYXAJCT0gcng1MV9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHJ4NTFfa2V5bWFwKSwKKwkucmVwCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcng1MV9wZXJpcGhlcmFsc19kZXZpY2VzW10gPSB7CisJJnJ4NTFfc21jOTF4X2RldmljZSwKK307CisKKy8qCisgKiBUaW1pbmdzIGFyZSB0YWtlbiBmcm9tIHNtc2MtbGFuOTFjOTYtbXMucGRmCisgKi8KK3N0YXRpYyBpbnQgc21jOTF4X2luaXRfZ3BtYyhpbnQgY3MpCit7CisJc3RydWN0IGdwbWNfdGltaW5ncyB0OworCWNvbnN0IGludCB0Ml9yID0gNDU7CQkvKiB0MiBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDJfdyA9IDMwOwkJLyogdDIgaW4gRmlndXJlIDEyLjExICovCisJY29uc3QgaW50IHQzID0gMTU7CQkvKiB0MyBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDVfciA9IDA7CQkvKiB0NSBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDZfciA9IDQ1OwkJLyogdDYgaW4gRmlndXJlIDEyLjEwICovCisJY29uc3QgaW50IHQ2X3cgPSAwOwkJLyogdDYgaW4gRmlndXJlIDEyLjExICovCisJY29uc3QgaW50IHQ3X3cgPSAxNTsJCS8qIHQ3IGluIEZpZ3VyZSAxMi4xMSAqLworCWNvbnN0IGludCB0MTUgPSAxMjsJCS8qIHQxNSBpbiBGaWd1cmUgMTIuMiAqLworCWNvbnN0IGludCB0MjAgPSAxODU7CQkvKiB0MjAgaW4gRmlndXJlIDEyLjIgKi8KKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKworCXQuY3Nfb24gPSB0MTU7CisJdC5jc19yZF9vZmYgPSB0MyArIHQyX3IgKyB0NV9yOwkvKiBGaWd1cmUgMTIuMTAgKi8KKwl0LmNzX3dyX29mZiA9IHQzICsgdDJfdyArIHQ2X3c7CS8qIEZpZ3VyZSAxMi4xMSAqLworCXQuYWR2X29uID0gdDM7CQkJLyogRmlndXJlIDEyLjEwICovCisJdC5hZHZfcmRfb2ZmID0gdDMgKyB0Ml9yOwkvKiBGaWd1cmUgMTIuMTAgKi8KKwl0LmFkdl93cl9vZmYgPSB0MyArIHQyX3c7CS8qIEZpZ3VyZSAxMi4xMSAqLworCXQub2Vfb2ZmID0gdDMgKyB0Ml9yICsgdDVfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC5vZV9vbiA9IHQub2Vfb2ZmIC0gdDZfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC53ZV9vZmYgPSB0MyArIHQyX3cgKyB0Nl93OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0LndlX29uID0gdC53ZV9vZmYgLSB0N193OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0LnJkX2N5Y2xlID0gdDIwOwkJLyogRmlndXJlIDEyLjIgKi8KKwl0LndyX2N5Y2xlID0gdDIwOwkJLyogRmlndXJlIDEyLjQgKi8KKwl0LmFjY2VzcyA9IHQzICsgdDJfciArIHQ1X3I7CS8qIEZpZ3VyZSAxMi4xMCAqLworCXQud3JfYWNjZXNzID0gdDMgKyB0Ml93ICsgdDZfdzsJLyogRmlndXJlIDEyLjExICovCisKKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUcxLCBHUE1DX0NPTkZJRzFfREVWSUNFU0laRV8xNik7CisKKwlyZXR1cm4gZ3BtY19jc19zZXRfdGltaW5ncyhjcywgJnQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9pbml0X3NtYzkxeCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CisJaW50IHJldDsKKworCW9tYXBfY2ZnX3JlZyhVOF8zNFhYX0dQSU81NF9ET1dOKTsKKwlvbWFwX2NmZ19yZWcoRzI1XzM0WFhfR1BJTzg2X09VVCk7CisJb21hcF9jZmdfcmVnKEgxOV8zNFhYX0dQSU8xNjRfT1VUKTsKKworCWlmIChncG1jX2NzX3JlcXVlc3QoU01DOTFYX0NTLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxeFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyeDUxX3NtYzkxeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MzAwOworCXJ4NTFfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOworCisJc21jOTF4X2luaXRfZ3BtYyhTTUM5MVhfQ1MpOworCisJaWYgKGdwaW9fcmVxdWVzdChTTUM5MVhfR1BJT19JUlEsICJTTUM5MVggaXJxIikgPCAwKQorCQlnb3RvIGZyZWUxOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU01DOTFYX0dQSU9fSVJRKTsKKwlyeDUxX3NtYzkxeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBncGlvX3RvX2lycShTTUM5MVhfR1BJT19JUlEpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNNQzkxWF9HUElPX1BXUkRXTiwgIlNNQzkxWCBwb3dlcmRvd24iKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWUyOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTTUM5MVhfR1BJT19QV1JEV04sIDApOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNNQzkxWF9HUElPX1JFU0VULCAiU01DOTFYIHJlc2V0Iik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlMzsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoU01DOTFYX0dQSU9fUkVTRVQsIDApOworCWdwaW9fc2V0X3ZhbHVlKFNNQzkxWF9HUElPX1JFU0VULCAxKTsKKwltc2xlZXAoMTAwKTsKKwlncGlvX3NldF92YWx1ZShTTUM5MVhfR1BJT19SRVNFVCwgMCk7CisKKwlyZXR1cm47CisKK2ZyZWUzOgorCWdwaW9fZnJlZShTTUM5MVhfR1BJT19QV1JEV04pOworZnJlZTI6CisJZ3Bpb19mcmVlKFNNQzkxWF9HUElPX0lSUSk7CitmcmVlMToKKwlncG1jX2NzX2ZyZWUoU01DOTFYX0NTKTsKKworCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGluaXRpYWxpemUgc21jOTF4XG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSByeDUxX21hZGNfZGF0YSA9IHsKKwkuaXJxX2xpbmUJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworCXsKKwkJLm5hbWUJCT0gImV4dGVybmFsIiwKKwkJLm1tYwkJPSAxLAorCQkud2lyZXMJCT0gNCwKKwkJLmNvdmVyX29ubHkJPSB0cnVlLAorCQkuZ3Bpb19jZAk9IDE2MCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCX0sCisJeworCQkubmFtZQkJPSAiaW50ZXJuYWwiLAorCQkubW1jCQk9IDIsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwl9LAorCXt9CS8qIFRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZtbWMxX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWMiLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdnNpbV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXgxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWMjgiLAorCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmF1eDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZDU0kiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVkFVWDMgLSBhZGRzIG1vcmUgcG93ZXIgdG8gVklPXzE4IHJhaWwgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXgzID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWQ0FNX0RJR18xOCIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmF1eDQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZDQU1fQU5BXzI4IiwKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92bW1jMSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDMxNTAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnJ4NTFfdm1tYzFfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdm1tYzIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZNTUMyXzMwIiwKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnJ4NTFfdm1tYzJfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdnNpbSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVk1NQzJfSU9fMTgiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcng1MV92c2ltX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIGludCByeDUxX3R3bGdwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuKQoreworCS8qIEZJWE1FIHRoaXMgZ3BpbyBzZXR1cCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIG5vdyAqLworCWdwaW9fcmVxdWVzdChncGlvICsgNiwgImJhY2tsaWdodF9wd20iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDYsIDApOworCWdwaW9fcmVxdWVzdChncGlvICsgNywgInNwZWFrZXJfZW4iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDcsIDEpOworCisJLyogc2V0IHVwIE1NQyBhZGFwdGVycywgbGlua2luZyB0aGVpciByZWd1bGF0b3JzIHRvIHRoZW0gKi8KKwl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJcng1MV92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKwlyeDUxX3ZtbWMyX3N1cHBseS5kZXYgPSBtbWNbMV0uZGV2OworCXJ4NTFfdnNpbV9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHJ4NTFfZ3Bpb19kYXRhID0geworCS5ncGlvX2Jhc2UJCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAorCS5pcnFfZW5kCQk9IFRXTDQwMzBfR1BJT19JUlFfRU5ELAorCS5wdWxsZG93bnMJCT0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpCisJCQkJfCBCSVQoNCkgfCBCSVQoNSkKKwkJCQl8IEJJVCg4KSB8IEJJVCg5KSB8IEJJVCgxMCkgfCBCSVQoMTEpCisJCQkJfCBCSVQoMTIpIHwgQklUKDEzKSB8IEJJVCgxNCkgfCBCSVQoMTUpCisJCQkJfCBCSVQoMTYpIHwgQklUKDE3KSAsCisJLnNldHVwCQkJPSByeDUxX3R3bGdwaW9fc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSByeDUxX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJCT0gVFdMNDAzMF9JUlFfRU5ELAorCisJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCisJLmdwaW8JCQk9ICZyeDUxX2dwaW9fZGF0YSwKKwkua2V5cGFkCQkJPSAmcng1MV9rcF9kYXRhLAorCS5tYWRjCQkJPSAmcng1MV9tYWRjX2RhdGEsCisKKwkudmF1eDEJCQk9ICZyeDUxX3ZhdXgxLAorCS52YXV4MgkJCT0gJnJ4NTFfdmF1eDIsCisJLnZhdXgzCQkJPSAmcng1MV92YXV4MywKKwkudmF1eDQJCQk9ICZyeDUxX3ZhdXg0LAorCS52bW1jMQkJCT0gJnJ4NTFfdm1tYzEsCisJLnZtbWMyCQkJPSAmcng1MV92bW1jMiwKKwkudnNpbQkJCT0gJnJ4NTFfdnNpbSwKKwkudmRhYwkJCT0gJnJ4NTFfdmRhYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzFbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w1MDMwIiwgMHg0OCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwkJLmlycSA9IElOVF8zNFhYX1NZU19OSVJRLAorCQkucGxhdGZvcm1fZGF0YSA9ICZyeDUxX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ4NTFfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xLAorCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEpKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgMTAwLCBOVUxMLCAwKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyeDUxX3BlcmlwaGVyYWxzX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX2RldmljZXMpKTsKKwlyeDUxX2kyY19pbml0KCk7CisJcng1MV9pbml0X3NtYzkxeCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGRhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTm9raWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyByeDUxX3VhcnRfY29uZmlnID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyByeDUxX2xjZF9jb25maWcgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0wX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0xX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0yX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCByeDUxX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJnJ4NTFfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0ZCTUVNLAkmcng1MV9mYm1lbTBfY29uZmlnIH0sCisJeyBPTUFQX1RBR19GQk1FTSwJJnJ4NTFfZmJtZW0xX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfRkJNRU0sCSZyeDUxX2ZibWVtMl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZyeDUxX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7Cit9CisKK2V4dGVybiB2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXQodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHJ4NTFfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHJ4NTFfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJdXNiX211c2JfaW5pdCgpOworCXJ4NTFfcGVyaXBoZXJhbHNfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE5PS0lBX1JYNTEsICJOb2tpYSBSWC01MSBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPiAqLworCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcng1MV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gcng1MV9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggY2U0ZDQ2YS4uNDI0N2ExNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMjYsMTEgKzI2LDEwIEBACiAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9ja2RvbWFpbi5oPgotI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KICNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJwcm0uaCIKQEAgLTQ2LDcgKzQ1LDcgQEAKICNkZWZpbmUgRFBMTF9NSU5fRElWSURFUgkJMQogCiAvKiBQb3NzaWJsZSBlcnJvciByZXN1bHRzIGZyb20gX2RwbGxfdGVzdF9tdWx0ICovCi0jZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCSgxIDw8IDApCisjZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCS0xCiAKIC8qCiAgKiBTY2FsZSBmYWN0b3IgdG8gbWl0aWdhdGUgcm91bmRvZmYgZXJyb3JzIGluIERQTEwgcmF0ZSByb3VuZGluZy4KQEAgLTU5LDYgKzU4LDE2IEBACiAjZGVmaW5lIERQTExfUk9VTkRJTkdfVkFMCQkoKERQTExfU0NBTEVfQkFTRSAvIDIpICogXAogCQkJCQkgKERQTExfU0NBTEVfRkFDVE9SIC8gRFBMTF9TQ0FMRV9CQVNFKSkKIAorLyogRFBMTCB2YWxpZCBGaW50IGZyZXF1ZW5jeSBiYW5kIGxpbWl0cyAtIGZyb20gMzR4eCBUUk0gU2VjdGlvbiA0LjcuNi4yICovCisjZGVmaW5lIERQTExfRklOVF9CQU5EMV9NSU4JCTc1MDAwMAorI2RlZmluZSBEUExMX0ZJTlRfQkFORDFfTUFYCQkyMTAwMDAwCisjZGVmaW5lIERQTExfRklOVF9CQU5EMl9NSU4JCTc1MDAwMDAKKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQyX01BWAkJMjEwMDAwMDAKKworLyogX2RwbGxfdGVzdF9maW50KCkgcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIERQTExfRklOVF9VTkRFUkZMT1cJCS0xCisjZGVmaW5lIERQTExfRklOVF9JTlZBTElECQktMgorCiB1OCBjcHVfbWFzazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Niw2ICs3NSw3NCBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCisgKiBfb21hcDJ4eHhfY2xrX2NvbW1pdCAtIGNvbW1pdCBjbG9jayBwYXJlbnQvcmF0ZSBjaGFuZ2VzIGluIGhhcmR3YXJlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICoKKyAqCisgKiBJZiBAY2xrIGhhcyB0aGUgREVMQVlFRF9BUFAgZmxhZyBzZXQsIG1lYW5pbmcgdGhhdCBwYXJlbnQvcmF0ZSBjaGFuZ2VzCisgKiBkb24ndCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgVkFMSURfQ09ORklHIGJpdCBpcyB3cml0dGVuLCB3cml0ZSB0aGUKKyAqIFZBTElEX0NPTkZJRyBiaXQgYW5kIHdhaXQgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX29tYXAyeHh4X2Nsa19jb21taXQoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkpCisJCXJldHVybjsKKworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX1ZBTElEX0NPTkZJRywgT01BUDI0WFhfR1JfTU9ELAorCQlPTUFQMjRYWF9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7CisJLyogT0NQIGJhcnJpZXIgKi8KKwlwcm1fcmVhZF9tb2RfcmVnKE9NQVAyNFhYX0dSX01PRCwgT01BUDI0WFhfUFJDTV9DTEtDRkdfQ1RSTF9PRkZTRVQpOworfQorCisvKgorICogX2RwbGxfdGVzdF9maW50IC0gdGVzdCB3aGV0aGVyIGFuIEZpbnQgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBEUExMCisgKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsgdG8gdGVzdAorICogQG46IGRpdmlkZXIgdmFsdWUgKE4pIHRvIHRlc3QKKyAqCisgKiBUZXN0cyB3aGV0aGVyIGEgcGFydGljdWxhciBkaXZpZGVyIEBuIHdpbGwgcmVzdWx0IGluIGEgdmFsaWQgRFBMTAorICogaW50ZXJuYWwgY2xvY2sgZnJlcXVlbmN5IEZpbnQuIFNlZSB0aGUgMzR4eCBUUk0gNC43LjYuMiAiRFBMTCBKaXR0ZXIKKyAqIENvcnJlY3Rpb24iLiAgUmV0dXJucyAwIGlmIE9LLCAtMSBpZiB0aGUgZW5jbG9zaW5nIGxvb3AgY2FuIHRlcm1pbmF0ZQorICogKGFzc3VtaW5nIHRoYXQgaXQgaXMgY291bnRpbmcgTiB1cHdhcmRzKSwgb3IgLTIgaWYgdGhlIGVuY2xvc2luZyBsb29wCisgKiBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBpdGVyYXRpb24gKGFnYWluIGFzc3VtaW5nIE4gaXMgaW5jcmVhc2luZykuCisgKi8KK3N0YXRpYyBpbnQgX2RwbGxfdGVzdF9maW50KHN0cnVjdCBjbGsgKmNsaywgdTggbikKK3sKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwlsb25nIGZpbnQ7CisJaW50IHJldCA9IDA7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJLyogRFBMTCBkaXZpZGVyIG11c3QgcmVzdWx0IGluIGEgdmFsaWQgaml0dGVyIGNvcnJlY3Rpb24gdmFsICovCisJZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gKG4gKyAxKTsKKwlpZiAoZmludCA8IERQTExfRklOVF9CQU5EMV9NSU4pIHsKKworCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgorCQkJICJsb3dlcmluZyBtYXhfZGl2aWRlclxuIiwgbik7CisJCWRkLT5tYXhfZGl2aWRlciA9IG47CisJCXJldCA9IERQTExfRklOVF9VTkRFUkZMT1c7CisKKwl9IGVsc2UgaWYgKGZpbnQgPiBEUExMX0ZJTlRfQkFORDFfTUFYICYmCisJCSAgIGZpbnQgPCBEUExMX0ZJTlRfQkFORDJfTUlOKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmVcbiIsIG4pOworCQlyZXQgPSBEUExMX0ZJTlRfSU5WQUxJRDsKKworCX0gZWxzZSBpZiAoZmludCA+IERQTExfRklOVF9CQU5EMl9NQVgpIHsKKworCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgorCQkJICJib29zdGluZyBtaW5fZGl2aWRlclxuIiwgbik7CisJCWRkLT5taW5fZGl2aWRlciA9IG47CisJCXJldCA9IERQTExfRklOVF9JTlZBTElEOworCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBvbWFwMl9pbml0X2Nsa19jbGtkbSAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBuYW1lLCBzdG9yZSBwb2ludGVyIGluIGNsawogICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQogICoKQEAgLTEyMCw3ICsxOTcsNyBAQAogCQkJCQkJIGNsay0+bmFtZSwgY2xrcy0+cGFyZW50LT5uYW1lLAogCQkJCQkJICgoY2xrLT5wYXJlbnQpID8KIAkJCQkJCSAgY2xrLT5wYXJlbnQtPm5hbWUgOiAiTlVMTCIpKTsKLQkJCQkJY2xrLT5wYXJlbnQgPSBjbGtzLT5wYXJlbnQ7CisJCQkJCWNsa19yZXBhcmVudChjbGssIGNsa3MtPnBhcmVudCk7CiAJCQkJfTsKIAkJCQlmb3VuZCA9IDE7CiAJCQl9CkBAIC0xMzQsMjUgKzIxMSw1MiBAQAogCXJldHVybjsKIH0KIAotLyogUmV0dXJucyB0aGUgRFBMTCByYXRlICovCisvKioKKyAqIG9tYXAyX2dldF9kcGxsX3JhdGUgLSByZXR1cm5zIHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBhIERQTEwKKyAqCisgKiBEUExMcyBjYW4gYmUgbG9ja2VkIG9yIGJ5cGFzc2VkIC0gYmFzaWNhbGx5LCBlbmFibGVkIG9yIGRpc2FibGVkLgorICogV2hlbiBsb2NrZWQsIHRoZSBEUExMIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBNIGFuZCBOIHZhbHVlcy4gIFdoZW4KKyAqIGJ5cGFzc2VkLCBvbiBPTUFQMnh4eCwgdGhlIG91dHB1dCByYXRlIGlzIGVpdGhlciB0aGUgMzJLaUh6IGNsb2NrCisgKiBvciBzeXNfY2xrLiAgQnlwYXNzIHJhdGVzIG9uIE9NQVAzIGRlcGVuZCBvbiB0aGUgRFBMTDogRFBMTHMgMSBhbmQKKyAqIDIgYXJlIGJ5cGFzc2VkIHdpdGggZHBsbDFfZmNsayBhbmQgZHBsbDJfZmNsayByZXNwZWN0aXZlbHkKKyAqIChnZW5lcmF0ZWQgYnkgRFBMTDMpLCB3aGlsZSBEUExMIDMsIDQsIGFuZCA1IGJ5cGFzcyByYXRlcyBhcmUgc3lzX2Nsay4KKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgRFBMTCBDTEtPVVQgcmF0ZSAoKm5vdCogQ0xLT1VUWDIpIGlmIHRoZSBEUExMIGlzCisgKiBsb2NrZWQsIG9yIHRoZSBhcHByb3ByaWF0ZSBieXBhc3MgcmF0ZSBpZiB0aGUgRFBMTCBpcyBieXBhc3NlZCwgb3IgMAorICogaWYgdGhlIGNsb2NrIEBjbGsgaXMgbm90IGEgRFBMTC4KKyAqLwogdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCWxvbmcgbG9uZyBkcGxsX2NsazsKLQl1MzIgZHBsbF9tdWx0LCBkcGxsX2RpdiwgZHBsbDsKKwl1MzIgZHBsbF9tdWx0LCBkcGxsX2RpdiwgdjsKIAlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKIAogCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JLyogUkVWSVNJVDogV2hhdCBkbyB3ZSByZXR1cm4gb24gZXJyb3I/ICovCiAJaWYgKCFkZCkKIAkJcmV0dXJuIDA7CiAKLQlkcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCWRwbGxfbXVsdCA9IGRwbGwgJiBkZC0+bXVsdF9tYXNrOworCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfQorCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwlkcGxsX211bHQgPSB2ICYgZGQtPm11bHRfbWFzazsKIAlkcGxsX211bHQgPj49IF9fZmZzKGRkLT5tdWx0X21hc2spOwotCWRwbGxfZGl2ID0gZHBsbCAmIGRkLT5kaXYxX21hc2s7CisJZHBsbF9kaXYgPSB2ICYgZGQtPmRpdjFfbWFzazsKIAlkcGxsX2RpdiA+Pj0gX19mZnMoZGQtPmRpdjFfbWFzayk7CiAKLQlkcGxsX2NsayA9IChsb25nIGxvbmcpY2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQ7CisJZHBsbF9jbGsgPSAobG9uZyBsb25nKWRkLT5jbGtfcmVmLT5yYXRlICogZHBsbF9tdWx0OwogCWRvX2RpdihkcGxsX2NsaywgZHBsbF9kaXYgKyAxKTsKIAogCXJldHVybiBkcGxsX2NsazsKQEAgLTE2MiwxNCArMjY2LDExIEBACiAgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2ssCiAgKiBkaXZpZGVkIGJ5IHNvbWUgZmFjdG9yCiAgKi8KLXZvaWQgb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQordW5zaWduZWQgbG9uZyBvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJV0FSTl9PTighY2xrLT5maXhlZF9kaXYpOwogCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPmZpeGVkX2RpdjsKLQotCWlmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNsay0+Zml4ZWRfZGl2OwogfQogCiAvKioKQEAgLTE5MCwxMSArMjkxLDEwIEBACiAJICogMjR4eCB1c2VzIDAgdG8gaW5kaWNhdGUgbm90IHJlYWR5LCBhbmQgMSB0byBpbmRpY2F0ZSByZWFkeS4KIAkgKiAzNHh4IHJldmVyc2VzIHRoaXMsIGp1c3QgdG8ga2VlcCB1cyBvbiBvdXIgdG9lcwogCSAqLwotCWlmIChjcHVfbWFzayAmIChSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpKSB7CisJaWYgKGNwdV9tYXNrICYgKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkpCiAJCWVuYSA9IG1hc2s7Ci0JfSBlbHNlIGlmIChjcHVfbWFzayAmIFJBVEVfSU5fMzQzWCkgeworCWVsc2UgaWYgKGNwdV9tYXNrICYgUkFURV9JTl8zNDNYKQogCQllbmEgPSAwOwotCX0KIAogCS8qIFdhaXQgZm9yIGxvY2sgKi8KIAl3aGlsZSAoKChfX3Jhd19yZWFkbChyZWcpICYgbWFzaykgIT0gZW5hKSAmJgpAQCAtMjI4LDMxICszMjgsMTIgQEAKIAkgKiBpdCBhbmQgcHVsbCBpdCBpbnRvIHN0cnVjdCBjbGsgaXRzZWxmIHNvbWVob3cuCiAJICovCiAJcmVnID0gY2xrLT5lbmFibGVfcmVnOwotCWlmICgoKCh1MzIpcmVnICYgMHhmZikgPj0gQ01fRkNMS0VOMSkgJiYKLQkgICAgKCgodTMyKXJlZyAmIDB4ZmYpIDw9IE9NQVAyNFhYX0NNX0ZDTEtFTjIpKQotCQlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCgodTMyKXJlZyAmIH4weGYwKSB8IDB4MTApOyAvKiBDTV9JQ0xLRU4qICovCi0JZWxzZSBpZiAoKCgodTMyKXJlZyAmIDB4ZmYpID49IENNX0lDTEtFTjEpICYmCi0JCSAoKCh1MzIpcmVnICYgMHhmZikgPD0gT01BUDI0WFhfQ01fSUNMS0VONCkpCi0JCW90aGVyX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoKCh1MzIpcmVnICYgfjB4ZjApIHwgMHgwMCk7IC8qIENNX0ZDTEtFTiogKi8KLQllbHNlCi0JCXJldHVybjsKIAotCS8qIFJFVklTSVQ6IFdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSBleGNsdXNpb25zIGZvciAzNFhYPyAqLwotCS8qIE5vIGNoZWNrIGZvciBEU1Mgb3IgY2FtIGNsb2NrcyAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiAoKHUzMilyZWcgJiAweDBmKSA9PSAwKSB7IC8qIENNX3tGLEl9Q0xLRU4xICovCi0JCWlmIChjbGstPmVuYWJsZV9iaXQgPT0gT01BUDI0WFhfRU5fRFNTMl9TSElGVCB8fAotCQkgICAgY2xrLT5lbmFibGVfYml0ID09IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQgfHwKLQkJICAgIGNsay0+ZW5hYmxlX2JpdCA9PSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQpCi0JCQlyZXR1cm47Ci0JfQotCi0JLyogUkVWSVNJVDogV2hhdCBhcmUgdGhlIGFwcHJvcHJpYXRlIGV4Y2x1c2lvbnMgZm9yIDM0WFg/ICovCi0JLyogT01BUDM6IGlnbm9yZSBEU1MtbW9kIGNsb2NrcyAqLwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSAmJgotCSAgICAoKCh1MzIpcmVnICYgfjB4ZmYpID09ICh1MzIpT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIDApIHx8Ci0JICAgICAoKCgodTMyKXJlZyAmIH4weGZmKSA9PSAodTMyKU9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgMCkpICYmCi0JICAgICBjbGstPmVuYWJsZV9iaXQgPT0gT01BUDM0MzBfRU5fU1NJX1NISUZUKSkpCi0JCXJldHVybjsKKwkvKgorCSAqIENvbnZlcnQgQ01fSUNMS0VOKiA8LT4gQ01fRkNMS0VOKi4gIFRoaXMgY29udmVyc2lvbiBhc3N1bWVzCisJICogaXQncyBqdXN0IGEgbWF0dGVyIG9mIFhPUmluZyB0aGUgYml0cy4KKwkgKi8KKwlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCh1MzIpcmVnIF4gKENNX0ZDTEtFTiBeIENNX0lDTEtFTikpOwogCiAJLyogQ2hlY2sgaWYgYm90aCBmdW5jdGlvbmFsIGFuZCBpbnRlcmZhY2UgY2xvY2tzCiAJICogYXJlIHJ1bm5pbmcuICovCkBAIC0yNjQsMTggKzM0NSw5IEBACiAJb21hcDJfd2FpdF9jbG9ja19yZWFkeShzdF9yZWcsIGJpdCwgY2xrLT5uYW1lKTsKIH0KIAotLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50Ci0gKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KLSAqLwotaW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIChBTFdBWVNfRU5BQkxFRCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSykpCi0JCXJldHVybiAwOwotCi0JaWYgKGNsay0+ZW5hYmxlKQotCQlyZXR1cm4gY2xrLT5lbmFibGUoY2xrKTsKKwl1MzIgdjsKIAogCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCkBAIC0yODMsMzMgKzM1NSwzOCBAQAogCQlyZXR1cm4gMDsgLyogUkVWSVNJVDogLUVJTlZBTCAqLwogCX0KIAotCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlpZiAoY2xrLT5mbGFncyAmIElOVkVSVF9FTkFCTEUpCi0JCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQl2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UKLQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0Jd21iKCk7Ci0KLQlvbWFwMl9jbGtfd2FpdF9yZWFkeShjbGspOworCQl2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7IC8qIE9DUCBiYXJyaWVyICovCiAKIAlyZXR1cm4gMDsKIH0KIAotLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLwotdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIGludCBvbWFwMl9kZmx0X2Nsa19lbmFibGVfd2FpdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHJlZ3ZhbDMyOworCWludCByZXQ7CiAKLQlpZiAoY2xrLT5mbGFncyAmIChBTFdBWVNfRU5BQkxFRCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSykpCi0JCXJldHVybjsKLQotCWlmIChjbGstPmRpc2FibGUpIHsKLQkJY2xrLT5kaXNhYmxlKGNsayk7Ci0JCXJldHVybjsKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOyAvKiBSRVZJU0lUOiAtRUlOVkFMICovCiAJfQogCi0JaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSB7CisJcmV0ID0gb21hcDJfZGZsdF9jbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCA9PSAwKQorCQlvbWFwMl9jbGtfd2FpdF9yZWFkeShjbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpIHsKIAkJLyoKIAkJICogJ0luZGVwZW5kZW50JyBoZXJlIHJlZmVycyB0byBhIGNsb2NrIHdoaWNoIGlzIG5vdAogCQkgKiBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuCkBAIC0zMTksMjAgKzM5Niw0NCBAQAogCQlyZXR1cm47CiAJfQogCi0JcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCWlmIChjbGstPmZsYWdzICYgSU5WRVJUX0VOQUJMRSkKLQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJdiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UKLQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCXdtYigpOworCQl2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCS8qIE5vIE9DUCBiYXJyaWVyIG5lZWRlZCBoZXJlIHNpbmNlIGl0IGlzIGEgZGlzYWJsZSBvcGVyYXRpb24gKi8KK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdF93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlX3dhaXQsCisJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCit9OworCisvKiBFbmFibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQKKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0aGlzIHRvIHVzZSBjbGstPmVuYWJsZSBsaWtlIG9uIG9tYXAxPworICovCitzdGF0aWMgaW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5vcHMtPmVuYWJsZShjbGspOworfQorCisvKiBEaXNhYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50ICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiB9CiAKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKIAkJX29tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCWlmIChjbGstPnBhcmVudCkKIAkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKIAkJaWYgKGNsay0+Y2xrZG0pCiAJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwpAQCAtMzQ1LDMwICs0NDYsMjkgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgewotCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQotCQkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJY2xrLT51c2Vjb3VudC0tOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCiAJCWlmIChjbGstPmNsa2RtKQogCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOwogCisJCWlmIChjbGstPnBhcmVudCkgeworCQkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisKIAkJcmV0ID0gX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCQlpZiAoY2xrLT5jbGtkbSkKLQkJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwotCi0JCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJaWYgKHJldCkgeworCQkJaWYgKGNsay0+cGFyZW50KQogCQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJCQljbGstPnVzZWNvdW50LS07Ci0JCQl9CisKKwkJCWdvdG8gZXJyOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiAKK2VycjoKKwlpZiAoY2xrLT5jbGtkbSkKKwkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKKwljbGstPnVzZWNvdW50LS07CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc2LDI0ICs0NzYsMjIgQEAKICAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFyZSBwYXJ0IG9mIENMS1NFTF94eXogZ292ZXJuZWQgY2xvY2tzLgogICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRvIHVzZSBjbGstPmVuYWJsZSgpIGZ1bmN0aW9ucyBsaWtlIG9uIG9tYXAxPwogICovCi12b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQordW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTMyIGRpdiA9IDA7CiAKIAlwcl9kZWJ1ZygiY2xvY2s6IHJlY2FsYydpbmcgY2xrc2VsIGNsayAlc1xuIiwgY2xrLT5uYW1lKTsKIAogCWRpdiA9IG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihjbGspOwogCWlmIChkaXYgPT0gMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gY2xrLT5yYXRlOwogCi0JaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdikpCi0JCXJldHVybjsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKKwlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CiAKLQlwcl9kZWJ1ZygiY2xvY2s6IG5ldyBjbG9jayByYXRlIGlzICVsZCAoZGl2ICVkKVxuIiwgY2xrLT5yYXRlLCBkaXYpOworCXByX2RlYnVnKCJjbG9jazogbmV3IGNsb2NrIHJhdGUgaXMgJWxkIChkaXYgJWQpXG4iLCByYXRlLCBkaXYpOwogCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiByYXRlOwogfQogCiAvKioKQEAgLTQwNSw4ICs1MDMsOCBAQAogICogdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBwYXJlbnQgY2xvY2sgYWRkcmVzcy4KICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrc2VsIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KICAqLwotY29uc3Qgc3RydWN0IGNsa3NlbCAqb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJc3RydWN0IGNsayAqc3JjX2NsaykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsICpvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQkgICAgICAgc3RydWN0IGNsayAqc3JjX2NsaykKIHsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwogCkBAIC00NTUsNyArNTUzLDcgQEAKIAkqbmV3X2RpdiA9IDE7CiAKIAljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiB+MDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTE0LDcgKzYxMiw3IEBACiAvKiBHaXZlbiBhIGNsb2NrIGFuZCBhIHJhdGUgYXBwbHkgYSBjbG9jayBzcGVjaWZpYyByb3VuZGluZyBmdW5jdGlvbiAqLwogbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCisJaWYgKGNsay0+cm91bmRfcmF0ZSkKIAkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwogCiAJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQpAQCAtNTQwLDcgKzYzOCw3IEBACiAJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwogCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmIChjbGtzID09IE5VTEwpCisJaWYgKCFjbGtzKQogCQlyZXR1cm4gMDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTc2LDcgKzY3NCw3IEBACiAJV0FSTl9PTihkaXYgPT0gMCk7CiAKIAljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiB+MDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTk1LDIzICs2OTMsNiBAQAogfQogCiAvKioKLSAqIG9tYXAyX2dldF9jbGtzZWwgLSBmaW5kIGNsa3NlbCByZWdpc3RlciBhZGRyICYgZmllbGQgbWFzayBmb3IgYSBjbGsKLSAqIEBjbGs6IHN0cnVjdCBjbGsgdG8gdXNlCi0gKiBAZmllbGRfbWFzazogcHRyIHRvIHUzMiB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgZmllbGQgbWFzawotICoKLSAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsa3NlbCByZWdpc3RlciB1cG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KLSAqLwotdm9pZCBfX2lvbWVtICpvbWFwMl9nZXRfY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyICpmaWVsZF9tYXNrKQotewotCWlmICh1bmxpa2VseSgoY2xrLT5jbGtzZWxfcmVnID09IE5VTEwpIHx8IChjbGstPmNsa3NlbF9tYXNrID09IE5VTEwpKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7Ci0KLQlyZXR1cm4gY2xrLT5jbGtzZWxfcmVnOwotfQotCi0vKioKICAqIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvciAtIGdldCBjdXJyZW50IGRpdmlkZXIgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCiAgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgogICoKQEAgLTYxOSw0OSArNzAwLDQxIEBACiAgKi8KIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBmaWVsZF9tYXNrLCBmaWVsZF92YWw7Ci0Jdm9pZCBfX2lvbWVtICpkaXZfYWRkcjsKKwl1MzIgdjsKIAotCWRpdl9hZGRyID0gb21hcDJfZ2V0X2Nsa3NlbChjbGssICZmaWVsZF9tYXNrKTsKLQlpZiAoZGl2X2FkZHIgPT0gTlVMTCkKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCiAJCXJldHVybiAwOwogCi0JZmllbGRfdmFsID0gX19yYXdfcmVhZGwoZGl2X2FkZHIpICYgZmllbGRfbWFzazsKLQlmaWVsZF92YWwgPj49IF9fZmZzKGZpZWxkX21hc2spOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKKwl2ID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKIAotCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIGZpZWxkX3ZhbCk7CisJcmV0dXJuIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKGNsaywgdik7CiB9CiAKIGludCBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JdTMyIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlLCBuZXdfZGl2ID0gMDsKLQl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOworCXUzMiB2LCBmaWVsZF92YWwsIHZhbGlkcmF0ZSwgbmV3X2RpdiA9IDA7CisKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCisJCXJldHVybiAtRUlOVkFMOwogCiAJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOwogCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZmllbGRfdmFsID0gb21hcDJfZGl2aXNvcl90b19jbGtzZWwoY2xrLCBuZXdfZGl2KTsKIAlpZiAoZmllbGRfdmFsID09IH4wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlZ192YWwgPSBfX3Jhd19yZWFkbChkaXZfYWRkcik7Ci0JcmVnX3ZhbCAmPSB+ZmllbGRfbWFzazsKLQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgX19mZnMoZmllbGRfbWFzaykpOwotCV9fcmF3X3dyaXRlbChyZWdfdmFsLCBkaXZfYWRkcik7Ci0Jd21iKCk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKKwl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgLyogT0NQIGJhcnJpZXIgKi8KIAogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gbmV3X2RpdjsKIAotCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFAgJiYgY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfVkFMSURfQ09ORklHLAotCQkJT01BUDI0WFhfR1JfTU9ELCBPTUFQMjRYWF9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7Ci0JCXdtYigpOwotCX0KKwlfb21hcDJ4eHhfY2xrX2NvbW1pdChjbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02ODAsMzEgKzc1MywyNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGRwbGxfY2ssIGNvcmVfY2ssIHZpcnRfcHJjbV9zZXQ7IHBsdXMgYWxsIGNsa3NlbCBjbG9ja3MgKi8KLQlpZiAoY2xrLT5zZXRfcmF0ZSAhPSBOVUxMKQorCWlmIChjbGstPnNldF9yYXRlKQogCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CiAKLQlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBDb252ZXJ0cyBlbmNvZGVkIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpbnRvIGEgZnVsbCBhZGRyZXNzCi0gKiBPbiBlcnJvciwgKnNyY19hZGRyIHdpbGwgYmUgcmV0dXJuZWQgYXMgMC4KKyAqIE9uIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIChwYXJlbnRfZGl2KSB3aWxsIGJlIDAuCiAgKi8KLXN0YXRpYyB1MzIgb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQodm9pZCBfX2lvbWVtICoqc3JjX2FkZHIsCi0JCQkJICAgICAgc3RydWN0IGNsayAqc3JjX2NsaywgdTMyICpmaWVsZF9tYXNrLAotCQkJCSAgICAgIHN0cnVjdCBjbGsgKmNsaywgdTMyICpwYXJlbnRfZGl2KQorc3RhdGljIHUzMiBfb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQoc3RydWN0IGNsayAqc3JjX2Nsaywgc3RydWN0IGNsayAqY2xrLAorCQkJCSAgICAgICB1MzIgKmZpZWxkX3ZhbCkKIHsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKIAotCSpwYXJlbnRfZGl2ID0gMDsKLQkqc3JjX2FkZHIgPSBOVUxMOwotCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiAwOwogCiAJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CkBAIC03MjIsNDcgKzc4OCwzNSBAQAogCS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICBBZGQgYSBjbGtzZWwgbWFzayB0byB0aGUgc3RydWN0IGNsay4gKi8KIAlXQVJOX09OKGNsay0+Y2xrc2VsX21hc2sgPT0gMCk7CiAKLQkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7Ci0JKnNyY19hZGRyID0gY2xrLT5jbGtzZWxfcmVnOwotCSpwYXJlbnRfZGl2ID0gY2xrci0+ZGl2OworCSpmaWVsZF92YWwgPSBjbGtyLT52YWw7CiAKLQlyZXR1cm4gY2xrci0+dmFsOworCXJldHVybiBjbGtyLT5kaXY7CiB9CiAKIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpzcmNfYWRkcjsKLQl1MzIgZmllbGRfdmFsLCBmaWVsZF9tYXNrLCByZWdfdmFsLCBwYXJlbnRfZGl2OworCXUzMiBmaWVsZF92YWwsIHYsIHBhcmVudF9kaXY7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkpCisJaWYgKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFjbGstPmNsa3NlbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmaWVsZF92YWwgPSBvbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZCgmc3JjX2FkZHIsIG5ld19wYXJlbnQsCi0JCQkJCSAgICAgICAmZmllbGRfbWFzaywgY2xrLCAmcGFyZW50X2Rpdik7Ci0JaWYgKHNyY19hZGRyID09IE5VTEwpCisJcGFyZW50X2RpdiA9IF9vbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZChuZXdfcGFyZW50LCBjbGssICZmaWVsZF92YWwpOworCWlmICghcGFyZW50X2RpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCi0JCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0KIAkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KLQlyZWdfdmFsID0gX19yYXdfcmVhZGwoc3JjX2FkZHIpICYgfmZpZWxkX21hc2s7Ci0JcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IF9fZmZzKGZpZWxkX21hc2spKTsKLQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgc3JjX2FkZHIpOwotCXdtYigpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOworCXYgJj0gfmNsay0+Y2xrc2VsX21hc2s7CisJdiB8PSBmaWVsZF92YWwgPDwgX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGNsay0+Y2xrc2VsX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7ICAgIC8qIE9DUCBiYXJyaWVyICovCiAKLQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQICYmIGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCV9fcmF3X3dyaXRlbChPTUFQMjRYWF9WQUxJRF9DT05GSUcsIE9NQVAyNFhYX1BSQ01fQ0xLQ0ZHX0NUUkwpOwotCQl3bWIoKTsKLQl9CisJX29tYXAyeHh4X2Nsa19jb21taXQoY2xrKTsKIAotCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKLQotCWlmIChjbGstPnVzZWNvdW50ID4gMCkKLQkJb21hcDJfY2xrX2VuYWJsZShjbGspOworCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOwogCiAJLyogQ0xLU0VMIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cycgcmF0ZXMsIGRpdmlkZWQgYnkgYSBkaXZpc29yICovCiAJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKQEAgLTc3Myw5ICs4MjcsNiBAQAogCXByX2RlYnVnKCJjbG9jazogc2V0IHBhcmVudCBvZiAlcyB0byAlcyAobmV3IHJhdGUgJWxkKVxuIiwKIAkJIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUsIGNsay0+cmF0ZSk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODA1LDcgKzg1Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUodW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZSh1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCQkgICAgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07CiAKQEAgLTgzOCw3ICs4OTAsNyBAQAogCQkJICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCiB7Ci0JaW50IGZsYWdzID0gMCwgY2FycnkgPSAwOworCWludCByID0gMCwgY2FycnkgPSAwOwogCiAJLyogVW5zY2FsZSBtIGFuZCByb3VuZCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKm0gJSBEUExMX1NDQUxFX0ZBQ1RPUiA+PSBEUExMX1JPVU5ESU5HX1ZBTCkKQEAgLTg1OSwxMyArOTExLDEzIEBACiAJaWYgKCptIDwgRFBMTF9NSU5fTVVMVElQTElFUikgewogCQkqbSA9IERQTExfTUlOX01VTFRJUExJRVI7CiAJCSpuZXdfcmF0ZSA9IDA7Ci0JCWZsYWdzID0gRFBMTF9NVUxUX1VOREVSRkxPVzsKKwkJciA9IERQTExfTVVMVF9VTkRFUkZMT1c7CiAJfQogCiAJaWYgKCpuZXdfcmF0ZSA9PSAwKQogCQkqbmV3X3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKHBhcmVudF9yYXRlLCAqbSwgbik7CiAKLQlyZXR1cm4gZmxhZ3M7CisJcmV0dXJuIHI7CiB9CiAKIC8qKgpAQCAtODg5LDU0ICs5NDEsNjUgQEAKIAlpbnQgbSwgbiwgciwgZSwgc2NhbGVkX21heF9tOwogCXVuc2lnbmVkIGxvbmcgc2NhbGVkX3J0X3JwLCBuZXdfcmF0ZTsKIAlpbnQgbWluX2UgPSAtMSwgbWluX2VfbSA9IC0xLCBtaW5fZV9uID0gLTE7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCiAJCXJldHVybiB+MDsKIAorCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKIAlwcl9kZWJ1ZygiY2xvY2s6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSBmb3IgY2xvY2sgJXMsIHRhcmdldCByYXRlICIKIAkJICIlbGRcbiIsIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOwogCi0Jc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoY2xrLT5wYXJlbnQtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7Ci0Jc2NhbGVkX21heF9tID0gY2xrLT5kcGxsX2RhdGEtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7CisJc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoZGQtPmNsa19yZWYtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7CisJc2NhbGVkX21heF9tID0gZGQtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7CiAKLQljbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGUgPSAwOworCWRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9IDA7CiAKLQlmb3IgKG4gPSBjbGstPmRwbGxfZGF0YS0+bWF4X2RpdmlkZXI7IG4gPj0gRFBMTF9NSU5fRElWSURFUjsgbi0tKSB7CisJZm9yIChuID0gZGQtPm1pbl9kaXZpZGVyOyBuIDw9IGRkLT5tYXhfZGl2aWRlcjsgbisrKSB7CisKKwkJLyogSXMgdGhlIChpbnB1dCBjbGssIGRpdmlkZXIpIHBhaXIgdmFsaWQgZm9yIHRoZSBEUExMPyAqLworCQlyID0gX2RwbGxfdGVzdF9maW50KGNsaywgbik7CisJCWlmIChyID09IERQTExfRklOVF9VTkRFUkZMT1cpCisJCQlicmVhazsKKwkJZWxzZSBpZiAociA9PSBEUExMX0ZJTlRfSU5WQUxJRCkKKwkJCWNvbnRpbnVlOwogCiAJCS8qIENvbXB1dGUgdGhlIHNjYWxlZCBEUExMIG11bHRpcGxpZXIsIGJhc2VkIG9uIHRoZSBkaXZpZGVyICovCiAJCW0gPSBzY2FsZWRfcnRfcnAgKiBuOwogCiAJCS8qCi0JCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gZG93biwgYSBtIG92ZXJmbG93IG1lYW5zIHdlIGNhbgotCQkgKiBjYW4gaW1tZWRpYXRlbHkgc2tpcCB0byB0aGUgbmV4dCBuCisJCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gdXAsIGEgbSBvdmVyZmxvdyBtZWFucyB3ZQorCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBpbmNyZWFzZXMgaW4KKwkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCisJCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQogCQkgKi8KIAkJaWYgKG0gPiBzY2FsZWRfbWF4X20pCi0JCQljb250aW51ZTsKKwkJCWJyZWFrOwogCiAJCXIgPSBfZHBsbF90ZXN0X211bHQoJm0sIG4sICZuZXdfcmF0ZSwgdGFyZ2V0X3JhdGUsCi0JCQkJICAgIGNsay0+cGFyZW50LT5yYXRlKTsKKwkJCQkgICAgZGQtPmNsa19yZWYtPnJhdGUpOworCisJCS8qIG0gY2FuJ3QgYmUgc2V0IGxvdyBlbm91Z2ggZm9yIHRoaXMgbiAtIHRyeSB3aXRoIGEgbGFyZ2VyIG4gKi8KKwkJaWYgKHIgPT0gRFBMTF9NVUxUX1VOREVSRkxPVykKKwkJCWNvbnRpbnVlOwogCiAJCWUgPSB0YXJnZXRfcmF0ZSAtIG5ld19yYXRlOwogCQlwcl9kZWJ1ZygiY2xvY2s6IG4gPSAlZDogbSA9ICVkOiByYXRlIGVycm9yIGlzICVkICIKIAkJCSAiKG5ld19yYXRlID0gJWxkKVxuIiwgbiwgbSwgZSwgbmV3X3JhdGUpOwogCiAJCWlmIChtaW5fZSA9PSAtMSB8fAotCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gY2xrLT5kcGxsX2RhdGEtPnJhdGVfdG9sZXJhbmNlKSkgeworCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gZGQtPnJhdGVfdG9sZXJhbmNlKSkgewogCQkJbWluX2UgPSBlOwogCQkJbWluX2VfbSA9IG07CiAJCQltaW5fZV9uID0gbjsKIAogCQkJcHJfZGVidWcoImNsb2NrOiBmb3VuZCBuZXcgbGVhc3QgZXJyb3IgJWRcbiIsIG1pbl9lKTsKLQkJfQogCi0JCS8qCi0JCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gZG93biwgYSBtIHVuZGVyZmxvdyBtZWFucyB3ZQotCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBkZWNyZWFzZXMgaW4KLQkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCi0JCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQotCQkgKi8KLQkJaWYgKHIgJiBEUExMX01VTFRfVU5ERVJGTE9XKQotCQkJYnJlYWs7CisJCQkvKiBXZSBmb3VuZCBnb29kIHNldHRpbmdzIC0tIGJhaWwgb3V0IG5vdyAqLworCQkJaWYgKG1pbl9lIDw9IGRkLT5yYXRlX3RvbGVyYW5jZSkKKwkJCQlicmVhazsKKwkJfQogCX0KIAogCWlmIChtaW5fZSA8IDApIHsKQEAgLTk0NCwxNyArMTAwNywxNyBAQAogCQlyZXR1cm4gfjA7CiAJfQogCi0JY2xrLT5kcGxsX2RhdGEtPmxhc3Rfcm91bmRlZF9tID0gbWluX2VfbTsKLQljbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX24gPSBtaW5fZV9uOwotCWNsay0+ZHBsbF9kYXRhLT5sYXN0X3JvdW5kZWRfcmF0ZSA9Ci0JCV9kcGxsX2NvbXB1dGVfbmV3X3JhdGUoY2xrLT5wYXJlbnQtPnJhdGUsIG1pbl9lX20sICBtaW5fZV9uKTsKKwlkZC0+bGFzdF9yb3VuZGVkX20gPSBtaW5fZV9tOworCWRkLT5sYXN0X3JvdW5kZWRfbiA9IG1pbl9lX247CisJZGQtPmxhc3Rfcm91bmRlZF9yYXRlID0gX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZShkZC0+Y2xrX3JlZi0+cmF0ZSwKKwkJCQkJCSAgICAgICBtaW5fZV9tLCAgbWluX2Vfbik7CiAKIAlwcl9kZWJ1ZygiY2xvY2s6IGZpbmFsIGxlYXN0IGVycm9yOiBlID0gJWQsIG0gPSAlZCwgbiA9ICVkXG4iLAogCQkgbWluX2UsIG1pbl9lX20sIG1pbl9lX24pOwogCXByX2RlYnVnKCJjbG9jazogZmluYWwgcmF0ZTogJWxkICAodGFyZ2V0IHJhdGU6ICVsZClcbiIsCi0JCSBjbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGUsIHRhcmdldF9yYXRlKTsKKwkJIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSwgdGFyZ2V0X3JhdGUpOwogCi0JcmV0dXJuIGNsay0+ZHBsbF9kYXRhLT5sYXN0X3JvdW5kZWRfcmF0ZTsKKwlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3Myw2ICsxMDM2LDEwIEBACiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiXG4iLCBjbGstPm5hbWUpOwotCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlvbWFwMl9jbGtfZW5hYmxlKGNsayk7CisJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJfSBlbHNlCisJCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggMWZiMzMwZS4uMjY3OWRkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMjEsMTMgKzIxLDI4IEBACiAvKiBUaGUgbWF4aW11bSBlcnJvciBiZXR3ZWVuIGEgdGFyZ2V0IERQTEwgcmF0ZSBhbmQgdGhlIHJvdW5kZWQgcmF0ZSBpbiBIeiAqLwogI2RlZmluZSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UJNTAwMDAKIAorLyogQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDIGJpdHMgKDJYWFgpICovCisjZGVmaW5lIENPUkVfQ0xLX1NSQ18zMksJCTB4MAorI2RlZmluZSBDT1JFX0NMS19TUkNfRFBMTAkJMHgxCisjZGVmaW5lIENPUkVfQ0xLX1NSQ19EUExMX1gyCQkweDIKKworLyogT01BUDJ4eHggQ01fQ0xLRU5fUExMLkVOX0RQTEwgYml0cyAtIGZvciBvbWFwMl9nZXRfZHBsbF9yYXRlKCkgKi8KKyNkZWZpbmUgT01BUDJYWFhfRU5fRFBMTF9MUEJZUEFTUwkJMHgxCisjZGVmaW5lIE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MJCTB4MgorI2RlZmluZSBPTUFQMlhYWF9FTl9EUExMX0xPQ0tFRAkJCTB4MworCisvKiBPTUFQM3h4eCBDTV9DTEtFTl9QTEwqLkVOXypfRFBMTCBiaXRzIC0gZm9yIG9tYXAyX2dldF9kcGxsX3JhdGUoKSAqLworI2RlZmluZSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTCQkweDUKKyNkZWZpbmUgT01BUDNYWFhfRU5fRFBMTF9GUkJZUEFTUwkJMHg2CisjZGVmaW5lIE9NQVAzWFhYX0VOX0RQTExfTE9DS0VECQkJMHg3CisKIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGludCBvbWFwMl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogaW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCk7Ci1pbnQgb21hcDJfZHBsbF9yYXRlX3RvbGVyYW5jZV9zZXQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgdG9sZXJhbmNlKTsKK2ludCBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCB0b2xlcmFuY2UpOwogbG9uZyBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKTsKIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwpAQCAtMzYsNyArNTEsNyBAQAogI2RlZmluZSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQJTlVMTAogI2VuZGlmCiAKLXZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwordW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2luaXRfY2xrX2Nsa2RtKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspOwpAQCAtNDQsMTMgKzU5LDE2IEBACiAJCQkJdTMyICpuZXdfZGl2KTsKIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpOwogdTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdik7Ci12b2lkIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Cit1bnNpZ25lZCBsb25nIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsayk7CiBpbnQgb21hcDJfd2FpdF9jbG9ja19yZWFkeSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIGN2YWwsIGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdF93YWl0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHQ7CisKIGV4dGVybiB1OCBjcHVfbWFzazsKIAogLyogY2xrc2VsX3JhdGUgZGF0YSBjb21tb24gdG8gMjR4eC8zNDN4ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwppbmRleCBkMzgyZWIwLi4xZTgzOWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKQEAgLTMxLDE1ICszMSwxOTIgQEAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCi0jaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazI0eHguaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrOworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2ZpeGVkOworCisjaW5jbHVkZSAiY2xvY2syNHh4LmgiCisKK3N0cnVjdCBvbWFwX2NsayB7CisJdTMyCQljcHU7CisJc3RydWN0IGNsa19sb29rdXAgbGs7Cit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKKwl7CQkJCVwKKwkJIC5jcHUgPSBjcCwJCVwKKwkJLmxrID0gewkJCVwKKwkJCS5kZXZfaWQgPSBkZXYsCVwKKwkJCS5jb25faWQgPSBjb24sCVwKKwkJCS5jbGsgPSBjaywJXAorCQl9LAkJCVwKKwl9CisKKyNkZWZpbmUgQ0tfMjQzWAkoMSA8PCAwKQorI2RlZmluZSBDS18yNDJYCSgxIDw8IDEpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDI0eHhfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY18zMmtfY2siLAkmZnVuY18zMmtfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhcGxsOTZfY2siLAkmYXBsbDk2X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZnVuY18xMm1fY2siLAkmZnVuY18xMm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dCIsCSZzeXNfY2xrb3V0LAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0Ml9zcmMiLCAmc3lzX2Nsa291dDJfc3JjLCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVtdWxfY2siLAkmZW11bF9jaywJQ0tfMjQyWCksCisJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzcF9pY2siLAkmZHNwX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCisJLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJnZnhfaWNrIiwJJmdmeF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtZG1faWNrIiwJJm1kbV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibWRtX29zY19jayIsCSZtZG1fb3NjX2NrLAlDS18yNDNYKSwKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNzX2ljayIsCSZkc3NfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3MxX2ZjayIsCSZkc3MxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZHNzMl9mY2siLAkmZHNzMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzc181NG1fZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzc2lfZmNrIiwJJnNzaV9zc3Jfc3N0X2ZjaywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJpY2siLAkmbWNzcGkxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ljayIsCSZ1YXJ0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ljayIsCSZncGlvc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmbXB1X3dkdF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJvbWFwY3RybF9pY2siLAkmb21hcGN0cmxfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyNHh4Y2FtIiwgImljayIsCSZjYW1faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQ0X2ZjayIsCSZ3ZHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJm1tY19pY2ssCUNLXzI0MlgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tY19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkcmNfaWNrIiwJJnNkcmNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFlc19pY2siLAkmYWVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYmhzX2ljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorfTsKKwogLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLwogI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCiAjZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMwpAQCAtNTksMTkgKzIzNiwzMiBAQAogICogT21hcDI0eHggc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBUaGlzIGFjdHVhbGx5IHJldHVybnMgdGhlIHJhdGUgb2YgY29yZV9jaywgbm90IGRwbGxfY2suICovCi1zdGF0aWMgdTMyIG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eChzdHJ1Y3QgY2xrICp0Y2xrKQorLyoqCisgKiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSAtIHJldHVybiB0aGUgQ09SRV9DTEsgcmF0ZQorICogQGNsazogcG9pbnRlciB0byB0aGUgY29tYmluZWQgZHBsbF9jayArIGNvcmVfY2sgKGN1cnJlbnRseSAiZHBsbF9jayIpCisgKgorICogUmV0dXJucyB0aGUgQ09SRV9DTEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCisgKiBzb3VyY2VzIG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJLSHoKKyAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoCisgKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAorICogY29yZV9jay4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCWxvbmcgbG9uZyBkcGxsX2NsazsKLQl1OCBhbXVsdDsKKwlsb25nIGxvbmcgY29yZV9jbGs7CisJdTMyIHY7CiAKLQlkcGxsX2NsayA9IG9tYXAyX2dldF9kcGxsX3JhdGUodGNsayk7CisJY29yZV9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CiAKLQlhbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQlhbXVsdCAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQlkcGxsX2NsayAqPSBhbXVsdDsKKwl2ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCXYgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CiAKLQlyZXR1cm4gZHBsbF9jbGs7CisJaWYgKHYgPT0gQ09SRV9DTEtfU1JDXzMySykKKwkJY29yZV9jbGsgPSAzMjc2ODsKKwllbHNlCisJCWNvcmVfY2xrICo9IHY7CisKKwlyZXR1cm4gY29yZV9jbGs7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCkBAIC05Niw2ICsyODYsMTEgQEAKIAkJICAgICAgT01BUDI0WFhfUFJDTV9DTEtTUkNfQ1RSTCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjayA9IHsKKwkuZW5hYmxlCQk9ICZvbWFwMl9lbmFibGVfb3NjX2NrLAorCS5kaXNhYmxlCT0gJm9tYXAyX2Rpc2FibGVfb3NjX2NrLAorfTsKKwogI2lmZGVmIE9MRF9DSwogLyogUmVjYWxjdWxhdGUgU1lTVF9DTEsgKi8KIHN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCkBAIC0xNDksMTEgKzM0NCwxNiBAQAogCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZml4ZWQgPSB7CisJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZSwKK307CisKIC8qCiAgKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgogICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgogICovCi1sb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3N0YXRpYyBsb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKIHsKIAl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19zcmM7CiAKQEAgLTE4MiwxMSArMzgyLDkgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoY2xrKTsKLQotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGNsayk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQpAQCAtMTk1LDIyICszOTMsMTkgQEAKIAl1MzIgYnlwYXNzID0gMDsKIAlzdHJ1Y3QgcHJjbV9jb25maWcgdG1wc2V0OwogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CiAJbXVsdCAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKIAogCWlmICgocmF0ZSA9PSAoY3VyX3JhdGUgLyAyKSkgJiYgKG11bHQgPT0gMikpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTEwsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7CiAJfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAJfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRlKSB7CiAJCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHJhdGUpOwogCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQotCQkJZ290byBkcGxsX2V4aXQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAobXVsdCA9PSAxKQogCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKQEAgLTIxOSw3ICs0MTQsNyBAQAogCiAJCWRkID0gY2xrLT5kcGxsX2RhdGE7CiAJCWlmICghZGQpCi0JCQlnb3RvIGRwbGxfZXhpdDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKIAkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oZGQtPm11bHRfbWFzayB8CkBAIC0yNDUsMjIgKzQ0MCwxOSBAQAogCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLwogCQkJYnlwYXNzID0gMTsKIAotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7IC8qIEZvciBpbml0X21lbSAqLworCQkvKiBGb3Igb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKIAogCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCiAJCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCiAJCQkgICAgICAgYnlwYXNzKTsKIAogCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KLQkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisJCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7CiAJfQotCW9tYXAyX2RwbGxjb3JlX3JlY2FsYygmZHBsbF9jayk7Ci0JcmV0ID0gMDsKIAotZHBsbF9leGl0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4ocmV0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNjksOSArNDYxLDkgQEAKICAqCiAgKiBTZXQgdmlydF9wcmNtX3NldCdzIHJhdGUgdG8gdGhlIG1wdV9zcGVlZCBmaWVsZCBvZiB0aGUgY3VycmVudCBQUkNNIHNldC4KICAqLwotc3RhdGljIHZvaWQgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7CisJcmV0dXJuIGN1cnJfcHJjbV9zZXQtPm1wdV9zcGVlZDsKIH0KIAogLyoKQEAgLTMzNywxMiArNTI5LDEyIEBACiAJfQogCiAJY3Vycl9wcmNtX3NldCA9IHByY207Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCiAJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgLyAyKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOwogCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtMzY2LDI3ICs1NTgsNjcgQEAKIAogCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KIAkJdG1wID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9DTEtTRUwxKSAmIE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0s7Ci0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwgQ01fQ0xLU0VMMSk7CisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwKKwkJCQkgQ01fQ0xLU0VMMSk7CisKIAkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQogCQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbWRtLAogCQkJCQkgT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKTsKIAotCQkvKiB4MiB0byBlbnRlciBpbml0X21lbSAqLwotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisJCS8qIHgyIHRvIGVudGVyIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAKIAkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCiAJCQkgICAgICAgYnlwYXNzKTsKIAotCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKKwkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKIAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQotCW9tYXAyX2RwbGxjb3JlX3JlY2FsYygmZHBsbF9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQorLyoKKyAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQorICovCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGZyZXFfdGFibGVbQVJSQVlfU0laRShyYXRlX3RhYmxlKV07CisKK3ZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJaW50IGkgPSAwOworCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQljb250aW51ZTsKKworCQlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwkJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwcmNtLT5tcHVfc3BlZWQgLyAxMDAwOworCQlpKys7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZnJlcXVlbmN5ICIKKwkJICAgICAgICJ0YWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCSp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewogCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCiAJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLApAQCAtMzk0LDI0ICs2MjYsMjcgQEAKIAkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKIAkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCiAJLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKKyNpZmRlZglDT05GSUdfQ1BVX0ZSRVEKKwkuY2xrX2luaXRfY3B1ZnJlcV90YWJsZQk9IG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyB1MzIgb21hcDJfZ2V0X2FwbGxfY2xraW4odm9pZCkKIHsKLQl1MzIgYXBsbHMsIHNjbGsgPSAwOworCXUzMiBhcGxscywgc3JhdGUgPSAwOwogCiAJYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7CiAJYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKIAlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7CiAKIAlpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTlfMk1IWikKLQkJc2NsayA9IDE5MjAwMDAwOworCQlzcmF0ZSA9IDE5MjAwMDAwOwogCWVsc2UgaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzEzTUhaKQotCQlzY2xrID0gMTMwMDAwMDA7CisJCXNyYXRlID0gMTMwMDAwMDA7CiAJZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTJNSFopCi0JCXNjbGsgPSAxMjAwMDAwMDsKKwkJc3JhdGUgPSAxMjAwMDAwMDsKIAotCXJldHVybiBzY2xrOworCXJldHVybiBzcmF0ZTsKIH0KIAogc3RhdGljIHUzMiBvbWFwMl9nZXRfc3lzY2xrZGl2KHZvaWQpCkBAIC00MjUsMTYgKzY2MCwxNCBAQAogCXJldHVybiBkaXY7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBvbWFwMl9nZXRfYXBsbF9jbGtpbigpICogb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyX2dldF9hcGxsX2Nsa2luKCkgKiBvbWFwMl9nZXRfc3lzY2xrZGl2KCk7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKLQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKIH0KIAogLyoKQEAgLTQ2MCw3ICs2OTMsNyBAQAogCWlmICghbXB1cmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAob21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQorCWlmIChjbGtfc2V0X3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKIAogCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7CkBAIC00NzcsOCArNzEwLDggQEAKIGludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207Ci0Jc3RydWN0IGNsayAqKmNsa3A7Ci0JdTMyIGNsa3JhdGU7CisJc3RydWN0IG9tYXBfY2xrICpjOworCXUzMiBjbGtyYXRlLCBjcHVfbWFzazsKIAogCWlmIChjcHVfaXNfb21hcDI0MngoKSkKIAkJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7CkBAIC00ODcsMjYgKzcyMCwyOCBAQAogCiAJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOwogCi0Jb21hcDJfb3NjX2Nsa19yZWNhbGMoJm9zY19jayk7Ci0Jb21hcDJfc3lzX2Nsa19yZWNhbGMoJnN5c19jayk7CisJb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKKwlzeXNfY2sucmF0ZSA9IG9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOwogCi0JZm9yIChjbGtwID0gb25jaGlwXzI0eHhfY2xrczsKLQkgICAgIGNsa3AgPCBvbmNoaXBfMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMjR4eF9jbGtzKTsKLQkgICAgIGNsa3ArKykgeworCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQorCQljbGtfaW5pdF9vbmUoYy0+bGsuY2xrKTsKIAotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQyWCAmJiBjcHVfaXNfb21hcDI0MjAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOworCWNwdV9tYXNrID0gMDsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCWNwdV9tYXNrIHw9IENLXzI0Mlg7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljcHVfbWFzayB8PSBDS18yNDNYOworCisJZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CiAJCX0KIAotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQzWCAmJiBjcHVfaXNfb21hcDI0MzAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCi0JY2xrcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7CisJY2xrcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKIAlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgewogCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKaW5kZXggYWQ2ZDk4ZC4uMzNjM2U1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCkBAIC0yNCwxNyArMjQsMTMgQEAKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJzZHJjLmgiCiAKLXN0YXRpYyB2b2lkIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9vc2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIGludCBvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCiAvKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgpAQCAtNjIzLDQxICs2MTksMzUgQEAKIC8qIEJhc2UgZXh0ZXJuYWwgaW5wdXQgY2xvY2tzICovCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzMya19jayA9IHsKIAkubmFtZQkJPSAiZnVuY18zMmtfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDMyMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCiB9OwogCiAvKiBUeXBpY2FsIDEyLzEzTUh6IGluIHN0YW5kYWxvbmUgbW9kZSwgd2lsbCBiZSAyNk1oeiBpbiBjaGFzc2lzIG1vZGUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgKjI2LCAzOC40KU1IeiAqLwogCS5uYW1lCQk9ICJvc2NfY2siLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMsCisJLm9wcwkJPSAmY2xrb3BzX29zY2NrLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGUJCT0gJm9tYXAyX2VuYWJsZV9vc2NfY2ssCi0JLmRpc2FibGUJPSAmb21hcDJfZGlzYWJsZV9vc2NfY2ssCiAJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCiB9OwogCiAvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCiAJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9zY19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KIAkubmFtZQkJPSAiYWx0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogLyoKQEAgLTY3Myw3ICs2NjMsMTIgQEAKIAkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCiAJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJCT0gJnN5c19jaywKKwkuY2xrX3JlZgkJPSAmc3lzX2NrLAorCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjQsCisJLm1pbl9kaXZpZGVyCQk9IDEsCiAJLm1heF9kaXZpZGVyCQk9IDE2LAogCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CkBAIC02ODQsMTAgKzY3OSw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCiAJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKQEAgLTY5NSwzMCArNjg5LDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKIAkubmFtZQkJPSAiYXBsbDk2X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZml4ZWQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5yYXRlCQk9IDk2MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAotCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7CiAJLm5hbWUJCT0gImFwbGw1NF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2ZpeGVkLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX09OX0lOSVQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVCwKLQkuZW5hYmxlCQk9ICZvbWFwMl9jbGtfZml4ZWRfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAyX2Nsa19maXhlZF9kaXNhYmxlLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogLyoKQEAgLTc0NSw5ICs3MzMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTc1OCw5ICs3NDUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewogCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtNzg1LDkgKzc3MSw4IEBACiAvKiBUaGUgcGFyZW50IG9mIHRoaXMgY2xvY2sgaXMgbm90IHNlbGVjdGFibGUgb24gMjQyMC4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfOTZtX2NrID0gewogCS5uYW1lCQk9ICJmdW5jXzk2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTgxOCw5ICs4MDMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCkBAIC04MzMsMTAgKzgxNyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0gewogCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZpeGVkX2Rpdgk9IDQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CkBAIC04NDQsOCArODI3LDggQEAKIC8qIFNlY3VyZSB0aW1lciwgb25seSBhdmFpbGFibGUgaW4gc2VjdXJlIG1vZGUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfb3NjX2NrID0gewogCS5uYW1lCQk9ICJja193ZHQxX29zYyIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTg4Nyw5ICs4NzAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKIAkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ0xLT1VUX0VOX1NISUZULApAQCAtOTE4LDkgKzkwMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKQEAgLTkzMyw4ICs5MTQsOCBAQAogLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0Ml9zcmMgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCkBAIC05NTUsOCArOTM2LDggQEAKIC8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzeXNfY2xrb3V0Ml9zcmMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX0RJVl9NQVNLLApAQCAtOTY4LDggKzk0OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CiAJLm5hbWUJCT0gImVtdWxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZULApAQCAtMTAwMywxMCArOTg0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLwogCS5uYW1lCQk9ICJtcHVfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIENNX0NMS1NFTCksCkBAIC0xMDQ2LDkgKzEwMjYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3BfZmNrID0gewogCS5uYW1lCQk9ICJkc3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKQEAgLTEwNzYsOSArMTA1Niw5IEBACiAvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRzcF9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKIAkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLApAQCAtMTA5MCw4ICsxMDcwLDkgQEAKIC8qIDI0MjAgb25seSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKIAkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLwogfTsKQEAgLTEwOTksOCArMTA4MCw5IEBACiAvKiAyNDMwIG9ubHkgLSBFTl9EU1AgY29udHJvbHMgYm90aCBkc3AgZmNsayBhbmQgaWNsayBvbiAyNDMwICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0gewogCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRzcF9pcmF0ZV9pY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKIH07CkBAIC0xMTEyLDkgKzEwOTQsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CiAJLm5hbWUJCT0gIml2YTFfaWZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENPTkZJR19QQVJUSUNJUEFOVCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IENPTkZJR19QQVJUSUNJUEFOVCB8IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfQ09QX1NISUZULApAQCAtMTEyOSw4ICsxMTExLDggQEAKIC8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0gewogCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfTVBVX1NISUZULApAQCAtMTE3NSwxMCArMTE1Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KIAkubmFtZQkJPSAiY29yZV9sM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0wzX01BU0ssCkBAIC0xMjA0LDkgKzExODUsOSBAQAogLyogSXQgaXMgdW5jbGVhciBmcm9tIFRSTSB3aGV0aGVyIHVzYl9sNF9pY2sgaXMgcmVhbGx5IGluIEwzIG9yIEw0IGNsa2RtICovCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCiAJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKQEAgLTEyMzgsOSArMTIxOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCiAJLm5hbWUJCT0gImw0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCkBAIC0xMjc2LDkgKzEyNTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX3NzdF9mY2sgPSB7CiAJLm5hbWUJCT0gInNzaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKQEAgLTEyOTAsNiArMTI3MSwyMCBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKIH07CiAKKy8qCisgKiBQcmVzdW1hYmx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgU1NJX0lDTEsuCisgKiBUUk0gY29udHJhZGljdHMgaXRzZWxmIG9uIHdoYXQgY2xvY2tkb21haW4gU1NJX0lDTEsgaXMgaW4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKKwkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKIAogLyoKICAqIEdGWCBjbG9jayBkb21haW4KQEAgLTEzMTIsOCArMTMwNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF8zZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKQEAgLTEzMjcsOCArMTMyMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKQEAgLTEzNDIsOCArMTMzNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKQEAgLTEzNzIsOCArMTM2Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLwogCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0NNX0lDTEtFTl9NRE1fRU5fTURNX1NISUZULApAQCAtMTM4Nyw4ICsxMzgzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKIAkubmFtZQkJPSAibWRtX29zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKQEAgLTE0MzIsOCArMTQyOCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCkBAIC0xNDQyLDkgKzE0MzgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlERUxBWUVEX0FQUCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULApAQCAtMTQ3NSw5ICsxNDcxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9mY2sgPSB7CQkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwogCS5uYW1lCQk9ICJkc3MyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAkJLyogZml4ZWQgYXQgc3lzX2NrIG9yIDQ4TUh6ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCURFTEFZRURfQVBQLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCkBAIC0xNDkwLDggKzE0ODYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfNTRtX2ZjayA9IHsJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAkubmFtZQkJPSAiZHNzXzU0bV9mY2siLAkvKiA1NG0gdHYgY2xrICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1RWX1NISUZULApAQCAtMTUxOCw4ICsxNTE0LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKQEAgLTE1MjgsOCArMTUyNCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCkBAIC0xNTQ0LDggKzE1NDAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKQEAgLTE1NTQsOCArMTU1MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewogCS5uYW1lCQk9ICJncHQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULApAQCAtMTU2OCw4ICsxNTY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCkBAIC0xNTc4LDggKzE1NzQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKQEAgLTE1OTIsOCArMTU4OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfaWNrID0gewogCS5uYW1lCQk9ICJncHQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULApAQCAtMTYwMiw4ICsxNTk4LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCkBAIC0xNjE2LDggKzE2MTIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKQEAgLTE2MjYsOCArMTYyMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewogCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULApAQCAtMTY0MCw4ICsxNjM2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCkBAIC0xNjUwLDggKzE2NDYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKQEAgLTE2NjQsOCArMTY2MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfaWNrID0gewogCS5uYW1lCQk9ICJncHQ3X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNjczLDggKzE2NjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0N19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKQEAgLTE2ODcsOCArMTY4Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULApAQCAtMTY5Nyw4ICsxNjkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCkBAIC0xNzExLDggKzE3MDcsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKQEAgLTE3MjEsOCArMTcxNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0gewogCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULApAQCAtMTczNSw4ICsxNzMxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCkBAIC0xNzQ1LDggKzE3NDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKQEAgLTE3NTksOCArMTc1NSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULApAQCAtMTc2OSw4ICsxNzY1LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCkBAIC0xNzgzLDggKzE3NzksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKQEAgLTE3OTMsOCArMTc4OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEyX1NISUZULApAQCAtMTgwNyw5ICsxODAzLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKQEAgLTE4MTgsOSArMTgxNCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCkBAIC0xODI5LDkgKzE4MjUsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULApAQCAtMTg0MCw5ICsxODM2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMl9TSElGVCwKQEAgLTE4NTEsOSArMTg0Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULApAQCAtMTg2Miw5ICsxODU4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCkBAIC0xODczLDkgKzE4NjksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKQEAgLTE4ODQsOSArMTg4MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULApAQCAtMTg5NSw5ICsxODkxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA1LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCkBAIC0xOTA2LDkgKzE5MDIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNV9TSElGVCwKQEAgLTE5MTcsMTAgKzE5MTMsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTkyOCw5ICsxOTI0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKQEAgLTE5MzksOSArMTkzNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCkBAIC0xOTUwLDkgKzE5NDYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULApAQCAtMTk2MSw5ICsxOTU3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCkBAIC0xOTcyLDkgKzE5NjgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DU1BJM19TSElGVCwKQEAgLTE5ODMsOCArMTk3OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULApAQCAtMTk5Myw4ICsxOTg5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCkBAIC0yMDAzLDggKzE5OTksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKQEAgLTIwMTMsOCArMjAwOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULApAQCAtMjAyMyw4ICsyMDE5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCkBAIC0yMDMzLDggKzIwMjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKQEAgLTIwNDMsOCArMjAzOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ljayA9IHsKIAkubmFtZQkJPSAiZ3Bpb3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCkBAIC0yMDUzLDggKzIwNDksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CiAJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULApAQCAtMjA2Myw4ICsyMDU5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CiAJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKQEAgLTIwNzMsOCArMjA2OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfZmNrID0gewogCS5uYW1lCQk9ICJtcHVfd2R0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCkBAIC0yMDgzLDkgKzIwNzksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CiAJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKQEAgLTIwOTQsOCArMjA5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDFfU0hJRlQsCkBAIC0yMTA0LDkgKzIxMDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fT01BUENUUkxfU0hJRlQsCkBAIC0yMTE1LDggKzIxMTEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKQEAgLTIxMjUsOCArMjEyMSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKQEAgLTIxNDAsOCArMjEzNiw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKQEAgLTIxNTAsOCArMjE0Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CiAJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULApAQCAtMjE2MCw4ICsyMTU2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCkBAIC0yMTcwLDggKzIxNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKIAkubmFtZQkJPSAid2R0NF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKQEAgLTIxODAsOCArMjE3Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKQEAgLTIxOTAsOCArMjE4Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKQEAgLTIyMDAsOCArMjE5Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKIAkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULApAQCAtMjIxMCw4ICsyMjA2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0gewogCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCkBAIC0yMjIwLDggKzIyMTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0gewogCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCkBAIC0yMjMwLDggKzIyMjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0gewogCS5uYW1lCQk9ICJtbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCkBAIC0yMjQwLDggKzIyMzYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewogCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKQEAgLTIyNTAsOCArMjI0Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7CiAJLm5hbWUJCT0gImZhY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULApAQCAtMjI2MCw4ICsyMjU2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKIAkubmFtZQkJPSAiZWFjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULApAQCAtMjI3MCw4ICsyMjY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKIAkubmFtZQkJPSAiZWFjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULApAQCAtMjI4MCw4ICsyMjc2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCkBAIC0yMjkwLDggKzIyODYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewogCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKQEAgLTIzMDAsOSArMjI5Niw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzJfU0hJRlQsCkBAIC0yMzExLDkgKzIzMDcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKQEAgLTIzMjIsOSArMjMxOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMl9TSElGVCwKQEAgLTIzMzMsOSArMjMyOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCkBAIC0yMzQ0LDkgKzIzNDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMV9TSElGVCwKQEAgLTIzNTUsOSArMjM1MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKQEAgLTIzNjYsMzMgKzIzNjIsMzMgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CiAJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7CiAJLm5hbWUJCT0gInNkbWFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewogCS5uYW1lCQk9ICJzZG1hX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewogCS5uYW1lCQk9ICJ2bHlucV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCkBAIC0yNDI2LDggKzI0MjIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7CiAJLm5hbWUJCT0gInZseW5xX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCkBAIC0yNDQyLDggKzI0MzksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKIAkubmFtZQkJPSAic2RyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQsCkBAIC0yNDUyLDggKzI0NTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0gewogCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKQEAgLTI0NjIsOCArMjQ2MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULApAQCAtMjQ3Miw4ICsyNDcwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9STkdfU0hJRlQsCkBAIC0yNDgyLDggKzI0ODAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0gewogCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKQEAgLTI0OTIsOCArMjQ5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CiAJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULApAQCAtMjUwMiw4ICsyNTAwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCkBAIC0yNTEyLDggKzI1MTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CiAJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKQEAgLTI1MjIsOCArMjUyMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULApAQCAtMjUzMiw4ICsyNTMwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCkBAIC0yNTQyLDkgKzI1NDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKQEAgLTI1NTMsOSArMjU1MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNTYzLDggKzI1NjEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCkBAIC0yNTczLDggKzI1NzEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCkBAIC0yNTgzLDggKzI1ODEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CiAJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTURNX0lOVENfU0hJRlQsCkBAIC0yNTkzLDggKzI1OTEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMV9TSElGVCwKQEAgLTI2MDMsOSArMjYwMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNkYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULApAQCAtMjYyOCwxNjYgKzI2MjYsMTMgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKIAkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KIAkucmVjYWxjCQk9ICZvbWFwMl90YWJsZV9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLwogCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF8yNHh4X2Nsa3NbXSBfX2luaXRkYXRhID0gewotCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzMya19jaywKLQkmb3NjX2NrLAotCSZzeXNfY2ssCi0JJmFsdF9jaywKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCSZkcGxsX2NrLAotCSZhcGxsOTZfY2ssCi0JJmFwbGw1NF9jaywKLQkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzU0bV9jaywKLQkmY29yZV9jaywKLQkmZnVuY185Nm1fY2ssCi0JJmZ1bmNfNDhtX2NrLAotCSZmdW5jXzEybV9jaywKLQkmd2R0MV9vc2NfY2ssCi0JJnN5c19jbGtvdXRfc3JjLAotCSZzeXNfY2xrb3V0LAotCSZzeXNfY2xrb3V0Ml9zcmMsCi0JJnN5c19jbGtvdXQyLAotCSZlbXVsX2NrLAotCS8qIG1wdSBkb21haW4gY2xvY2tzICovCi0JJm1wdV9jaywKLQkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwotCSZkc3BfZmNrLAotCSZkc3BfaXJhdGVfaWNrLAotCSZkc3BfaWNrLAkJLyogMjQyeCAqLwotCSZpdmEyXzFfaWNrLAkJLyogMjQzeCAqLwotCSZpdmExX2lmY2ssCQkvKiAyNDJ4ICovCi0JJml2YTFfbXB1X2ludF9pZmNrLAkvKiAyNDJ4ICovCi0JLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KLQkmZ2Z4XzNkX2ZjaywKLQkmZ2Z4XzJkX2ZjaywKLQkmZ2Z4X2ljaywKLQkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCi0JJm1kbV9pY2ssCi0JJm1kbV9vc2NfY2ssCi0JLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KLQkmZHNzX2ljaywKLQkmZHNzMV9mY2ssCi0JJmRzczJfZmNrLAotCSZkc3NfNTRtX2ZjaywKLQkvKiBMMyBkb21haW4gY2xvY2tzICovCi0JJmNvcmVfbDNfY2ssCi0JJnNzaV9zc3Jfc3N0X2ZjaywKLQkmdXNiX2w0X2ljaywKLQkvKiBMNCBkb21haW4gY2xvY2tzICovCi0JJmw0X2NrLAkJCS8qIHVzZWQgYXMgYm90aCBjb3JlX2w0IGFuZCB3dV9sNCAqLwotCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwotCSZ2aXJ0X3ByY21fc2V0LAotCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KLQkmZ3B0MV9pY2ssCi0JJmdwdDFfZmNrLAotCSZncHQyX2ljaywKLQkmZ3B0Ml9mY2ssCi0JJmdwdDNfaWNrLAotCSZncHQzX2ZjaywKLQkmZ3B0NF9pY2ssCi0JJmdwdDRfZmNrLAotCSZncHQ1X2ljaywKLQkmZ3B0NV9mY2ssCi0JJmdwdDZfaWNrLAotCSZncHQ2X2ZjaywKLQkmZ3B0N19pY2ssCi0JJmdwdDdfZmNrLAotCSZncHQ4X2ljaywKLQkmZ3B0OF9mY2ssCi0JJmdwdDlfaWNrLAotCSZncHQ5X2ZjaywKLQkmZ3B0MTBfaWNrLAotCSZncHQxMF9mY2ssCi0JJmdwdDExX2ljaywKLQkmZ3B0MTFfZmNrLAotCSZncHQxMl9pY2ssCi0JJmdwdDEyX2ZjaywKLQkmbWNic3AxX2ljaywKLQkmbWNic3AxX2ZjaywKLQkmbWNic3AyX2ljaywKLQkmbWNic3AyX2ZjaywKLQkmbWNic3AzX2ljaywKLQkmbWNic3AzX2ZjaywKLQkmbWNic3A0X2ljaywKLQkmbWNic3A0X2ZjaywKLQkmbWNic3A1X2ljaywKLQkmbWNic3A1X2ZjaywKLQkmbWNzcGkxX2ljaywKLQkmbWNzcGkxX2ZjaywKLQkmbWNzcGkyX2ljaywKLQkmbWNzcGkyX2ZjaywKLQkmbWNzcGkzX2ljaywKLQkmbWNzcGkzX2ZjaywKLQkmdWFydDFfaWNrLAotCSZ1YXJ0MV9mY2ssCi0JJnVhcnQyX2ljaywKLQkmdWFydDJfZmNrLAotCSZ1YXJ0M19pY2ssCi0JJnVhcnQzX2ZjaywKLQkmZ3Bpb3NfaWNrLAotCSZncGlvc19mY2ssCi0JJm1wdV93ZHRfaWNrLAotCSZtcHVfd2R0X2ZjaywKLQkmc3luY18zMmtfaWNrLAotCSZ3ZHQxX2ljaywKLQkmb21hcGN0cmxfaWNrLAotCSZpY3JfaWNrLAotCSZjYW1fZmNrLAotCSZjYW1faWNrLAotCSZtYWlsYm94ZXNfaWNrLAotCSZ3ZHQ0X2ljaywKLQkmd2R0NF9mY2ssCi0JJndkdDNfaWNrLAotCSZ3ZHQzX2ZjaywKLQkmbXNwcm9faWNrLAotCSZtc3Byb19mY2ssCi0JJm1tY19pY2ssCi0JJm1tY19mY2ssCi0JJmZhY19pY2ssCi0JJmZhY19mY2ssCi0JJmVhY19pY2ssCi0JJmVhY19mY2ssCi0JJmhkcV9pY2ssCi0JJmhkcV9mY2ssCi0JJmkyYzFfaWNrLAotCSZpMmMxX2ZjaywKLQkmaTJjaHMxX2ZjaywKLQkmaTJjMl9pY2ssCi0JJmkyYzJfZmNrLAotCSZpMmNoczJfZmNrLAotCSZncG1jX2ZjaywKLQkmc2RtYV9mY2ssCi0JJnNkbWFfaWNrLAotCSZ2bHlucV9pY2ssCi0JJnZseW5xX2ZjaywKLQkmc2RyY19pY2ssCi0JJmRlc19pY2ssCi0JJnNoYV9pY2ssCi0JJnJuZ19pY2ssCi0JJmFlc19pY2ssCi0JJnBrYV9pY2ssCi0JJnVzYl9mY2ssCi0JJnVzYmhzX2ljaywKLQkmbW1jaHMxX2ljaywKLQkmbW1jaHMxX2ZjaywKLQkmbW1jaHMyX2ljaywKLQkmbW1jaHMyX2ZjaywKLQkmZ3BpbzVfaWNrLAotCSZncGlvNV9mY2ssCi0JJm1kbV9pbnRjX2ljaywKLQkmbW1jaHNkYjFfZmNrLAotCSZtbWNoc2RiMl9mY2ssCi19OwotCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggMzFiYjcwMS4uMGExNGRjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0zMCwxNSArMzAsMjUxIEBACiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAotI2luY2x1ZGUgIm1lbW9yeS5oIgorI2luY2x1ZGUgPG1hY2gvc2RyYy5oPgogI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY2xvY2szNHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOworCisjaW5jbHVkZSAiY2xvY2szNHh4LmgiCisKK3N0cnVjdCBvbWFwX2NsayB7CisJdTMyCQljcHU7CisJc3RydWN0IGNsa19sb29rdXAgbGs7Cit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKKwl7CQkJCVwKKwkJIC5jcHUgPSBjcCwJCVwKKwkJLmxrID0gewkJCVwKKwkJCS5kZXZfaWQgPSBkZXYsCVwKKwkJCS5jb25faWQgPSBjb24sCVwKKwkJCS5jbGsgPSBjaywJXAorCQl9LAkJCVwKKwl9CisKKyNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgMCkKKyNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCAxKQorI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDIpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDM0eHhfY2xrc1tdID0geworCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvc2Nfc3lzX2NrIiwJJm9zY19zeXNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfYWx0Y2xrIiwJJnN5c19hbHRjbGssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibWNic3BfY2xrcyIsCSZtY2JzcF9jbGtzLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQxIiwJJnN5c19jbGtvdXQxLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX2NrIiwJJmRwbGwxX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gyX2NrIiwJJmRwbGwxX3gyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gybTJfY2siLCAmZHBsbDFfeDJtMl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9jayIsCSZkcGxsMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19jayIsCSZkcGxsM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfeDJfY2siLAkmZHBsbDNfeDJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJfY2siLAkmZHBsbDNfbTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJ4Ml9jayIsICZkcGxsM19tMngyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zX2NrIiwJJmRwbGwzX20zX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zeDJfY2siLCAmZHBsbDNfbTN4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJlbXVfY29yZV9hbHdvbl9jayIsICZlbXVfY29yZV9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9jayIsCSZkcGxsNF9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF94Ml9jayIsCSZkcGxsNF94Ml9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzk2bV9hbHdvbl9mY2siLCAmb21hcF85Nm1fYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfOTZtX2ZjayIsCSZvbWFwXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY21fOTZtX2ZjayIsCSZjbV85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfNTRtX2ZjayIsCSZvbWFwXzU0bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF80OG1fZmNrIiwJJm9tYXBfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzEybV9mY2siLAkmb21hcF8xMm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yX2NrIiwJJmRwbGw0X20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yeDJfY2siLCAmZHBsbDRfbTJ4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM19jayIsCSZkcGxsNF9tM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM3gyX2NrIiwgJmRwbGw0X20zeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTRfY2siLAkmZHBsbDRfbTRfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTR4Ml9jayIsICZkcGxsNF9tNHgyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201X2NrIiwJJmRwbGw0X201X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201eDJfY2siLCAmZHBsbDRfbTV4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZW11X3Blcl9hbHdvbl9jayIsICZlbXVfcGVyX2Fsd29uX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw1X2NrIiwJJmRwbGw1X2NrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImRwbGw1X20yX2NrIiwJJmRwbGw1X20yX2NrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImNsa291dDJfc3JjX2NrIiwgJmNsa291dDJfc3JjX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNvcmV4Ml9mY2siLAkmY29yZXgyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMV9mY2siLAkmZHBsbDFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiYXJtX2ZjayIsCSZhcm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImVtdV9tcHVfYWx3b25fY2siLCAmZW11X21wdV9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9mY2siLAkmZHBsbDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIml2YTJfY2siLAkmaXZhMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJsM19pY2siLAkmbDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImw0X2ljayIsCSZsNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicm1faWNrIiwJJnJtX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJnZnhfbDNfY2siLAkmZ2Z4X2wzX2NrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9sM19mY2siLAkmZ2Z4X2wzX2ZjaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfbDNfaWNrIiwJJmdmeF9sM19pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2NnMV9jayIsCSZnZnhfY2cxX2NrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9jZzJfY2siLAkmZ2Z4X2NnMl9jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZ3hfZmNrIiwJJnNneF9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic2d4X2ljayIsCSZzZ3hfaWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImQyZF8yNm1fZmNrIiwJJmQyZF8yNm1fZmNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjcGVmdXNlX2ZjayIsCSZjcGVmdXNlX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ0c19mY2siLAkmdHNfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjb3JlXzk2bV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCSZtbWNoczNfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiZmNrIiwJJm1jc3BpNF9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImZzaG9zdHVzYl9mY2siLCAmZnNob3N0dXNiX2ZjaywgQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJjb3JlXzEybV9mY2siLAkmY29yZV8xMm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9sM19pY2siLAkmY29yZV9sM19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiaHNvdGd1c2JfaWNrIiwJJmhzb3RndXNiX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sM19pY2siLCAmc2VjdXJpdHlfbDNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFlczJfaWNrIiwJJmFlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTEyX2ljayIsCSZzaGExMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMyIsICJpY2siLAkmaTJjM19pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sNF9pY2syIiwgJnNlY3VyaXR5X2w0X2ljazIsIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTExX2ljayIsCSZzaGExMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHNzMV9hbHdvbl9mY2siLCAmZHNzMV9hbHdvbl9mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHNzX3R2X2ZjayIsCSZkc3NfdHZfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzc185Nm1fZmNrIiwJJmRzc185Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzczJfYWx3b25fZmNrIiwgJmRzczJfYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzc19pY2siLAkmZHNzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjYW1fbWNsayIsCSZjYW1fbWNsaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjYW1faWNrIiwJJmNhbV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY3NpMl85Nm1fZmNrIiwJJmNzaTJfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2Job3N0XzEyMG1fZmNrIiwgJnVzYmhvc3RfMTIwbV9mY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNiaG9zdF80OG1fZmNrIiwgJnVzYmhvc3RfNDhtX2ZjaywgQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ1c2Job3N0X2ljayIsCSZ1c2Job3N0X2ljaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ1c2ltX2ZjayIsCSZ1c2ltX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3a3VwXzMya19mY2siLAkmd2t1cF8zMmtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2RiY2siLAkmZ3BpbzFfZGJjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJndkdDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndrdXBfbDRfaWNrIiwJJndrdXBfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzaW1faWNrIiwJJnVzaW1faWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmd2R0Ml9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0MV9pY2siLAkmd2R0MV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzFfaWNrIiwJJmdwaW8xX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzMya3N5bmNfaWNrIiwgJm9tYXBfMzJrc3luY19pY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfaWNrIiwJJmdwdDEyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQxX2ljayIsCSZncHQxX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfOTZtX2ZjayIsCSZwZXJfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfNDhtX2ZjayIsCSZwZXJfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19mY2siLAkmdWFydDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfZmNrIiwJJmdwdDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfZmNrIiwJJmdwdDRfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfZmNrIiwJJmdwdDZfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfZmNrIiwJJmdwdDdfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfZmNrIiwJJmdwdDlfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBlcl8zMmtfYWx3b25fZmNrIiwgJnBlcl8zMmtfYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW82X2RiY2siLAkmZ3BpbzZfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9kYmNrIiwJJmdwaW81X2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzRfZGJjayIsCSZncGlvNF9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8zX2RiY2siLAkmZ3BpbzNfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9kYmNrIiwJJmdwaW8yX2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyX2w0X2ljayIsCSZwZXJfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW82X2ljayIsCSZncGlvNl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNF9pY2siLAkmZ3BpbzRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8zX2ljayIsCSZncGlvM19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzJfaWNrIiwJJmdwaW8yX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ljayIsCSZ3ZHQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19pY2siLAkmdWFydDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfaWNrIiwJJmdwdDlfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJJmdwdDhfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfaWNrIiwJJmdwdDZfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJJmdwdDVfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfaWNrIiwJJmdwdDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJJmdwdDJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmbWNic3AyX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJm1jYnNwM19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImljayIsCSZtY2JzcDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiZmNrIiwJJm1jYnNwM19mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImVtdV9zcmNfY2siLAkmZW11X3NyY19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwY2xrX2ZjayIsCSZwY2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwY2xreDJfZmNrIiwJJnBjbGt4Ml9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiYXRjbGtfZmNrIiwJJmF0Y2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ0cmFjZWNsa19zcmNfZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkidHJhY2VjbGtfZmNrIiwJJnRyYWNlY2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3IyX2ZjayIsCSZzcjJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyX2w0X2ljayIsCSZzcl9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfMzQzWCksCit9OworCiAvKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCiAjZGVmaW5lIERQTExfQVVUT0lETEVfRElTQUJMRQkJCTB4MAogI2RlZmluZSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QCQkweDEKQEAgLTUxLDExICsyODcsOSBAQAogICoKICAqIFJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgdGhlIERQTEwgcmF0ZS4KICAqLwotc3RhdGljIHZvaWQgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKLQotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKIH0KIAogLyogX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4gLSB3cml0ZSBjbGtlbl9iaXRzIGFyZyB0byBhIERQTEwncyBlbmFibGUgYml0cyAqLwpAQCAtNzgsMTQgKzMxMiwxMiBAQAogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQl1MzIgaWRsZXN0X21hc2s7CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0Jc3RhdGUgPDw9IGRkLT5pZGxlc3RfYml0OwotCWlkbGVzdF9tYXNrID0gMSA8PCBkZC0+aWRsZXN0X2JpdDsKKwlzdGF0ZSA8PD0gX19mZnMoZGQtPmlkbGVzdF9tYXNrKTsKIAotCXdoaWxlICgoKF9fcmF3X3JlYWRsKGRkLT5pZGxlc3RfcmVnKSAmIGlkbGVzdF9tYXNrKSAhPSBzdGF0ZSkgJiYKKwl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBkZC0+aWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgogCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewogCQlpKys7CiAJCXVkZWxheSgxKTsKQEAgLTEwNCw2ICszMzYsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBGcm9tIDM0MzAgVFJNIEVTMiA0LjcuNi4yICovCitzdGF0aWMgdTE2IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCit7CisJdW5zaWduZWQgbG9uZyBmaW50OworCXUxNiBmID0gMDsKKworCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIChuICsgMSk7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IGZpbnQgaXMgJWx1XG4iLCBmaW50KTsKKworCWlmIChmaW50ID49IDc1MDAwMCAmJiBmaW50IDw9IDEwMDAwMDApCisJCWYgPSAweDM7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwKQorCQlmID0gMHg0OworCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwICYmIGZpbnQgPD0gMTUwMDAwMCkKKwkJZiA9IDB4NTsKKwllbHNlIGlmIChmaW50ID4gMTUwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDApCisJCWYgPSAweDY7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAgJiYgZmludCA8PSAyMTAwMDAwKQorCQlmID0gMHg3OworCWVsc2UgaWYgKGZpbnQgPiA3NTAwMDAwICYmIGZpbnQgPD0gMTAwMDAwMDApCisJCWYgPSAweEI7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMDApCisJCWYgPSAweEM7CisJZWxzZSBpZiAoZmludCA+IDEyNTAwMDAwICYmIGZpbnQgPD0gMTUwMDAwMDApCisJCWYgPSAweEQ7CisJZWxzZSBpZiAoZmludCA+IDE1MDAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMDApCisJCWYgPSAweEU7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAwICYmIGZpbnQgPD0gMjEwMDAwMDApCisJCWYgPSAweEY7CisJZWxzZQorCQlwcl9kZWJ1ZygiY2xvY2s6IHVua25vd24gZnJlcXNlbCBzZXR0aW5nIGZvciAlZFxuIiwgbik7CisKKwlyZXR1cm4gZjsKK30KKwogLyogTm9uLUNPUkUgRFBMTCAoZS5nLiwgRFBMTHMgdGhhdCBkbyBub3QgY29udHJvbCBTRFJDKSBjbG9jayBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTEyOCwyNSArMzk2LDIwIEBACiAKIAlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOwogCisJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKwogCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT0NLRUQpOwogCi0JaWYgKGFpKSB7Ci0JCS8qCi0JCSAqIElmIG5vIGRvd25zdHJlYW0gY2xvY2tzIGFyZSBlbmFibGVkLCBDTV9JRExFU1QgYml0Ci0JCSAqIG1heSBuZXZlciBiZWNvbWUgYWN0aXZlLCBzbyBkb24ndCB3YWl0IGZvciBEUExMIHRvIGxvY2suCi0JCSAqLwotCQlyID0gMDsKKwlyID0gX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoY2xrLCAxKTsKKworCWlmIChhaSkKIAkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0JfSBlbHNlIHsKLQkJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMSk7Ci0JCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0JfTsKIAogCXJldHVybiByOwogfQogCiAvKgotICogb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyAtIGluc3RydWN0IGEgRFBMTCB0byBieXBhc3MgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKICAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKICAqCiAgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBieXBhc3MgbW9kZS4gIEluCkBAIC0yMzYsMTQgKzQ5OSwyNSBAQAogc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgcjsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKIAogCWlmIChjbGsgPT0gJmRwbGwzX2NrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbGstPnBhcmVudC0+cmF0ZSA9PSBjbGtfZ2V0X3JhdGUoY2xrKSkKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+cmF0ZSA9PSBkZC0+Y2xrX2J5cGFzcy0+cmF0ZSkgeworCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfYnlwYXNzKTsKIAkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19yZWYpOwogCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisJfQorCS8qIEZJWE1FOiB0aGlzIGlzIGR1YmlvdXMgLSBpZiBjbGstPnJhdGUgaGFzIGNoYW5nZWQsIHdoYXQgYWJvdXQgcHJvcGFnYXRpbmc/ICovCisJaWYgKCFyKQorCQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTI3MCw2ICs1NDQsMjE1IEBACiAJX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKGNsayk7CiB9CiAKKworLyogTm9uLUNPUkUgRFBMTCByYXRlIHNldCBjb2RlICovCisKKy8qCisgKiBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbSAtIHNldCBub24tY29yZSBEUExMIE0sTiB2YWx1ZXMgZGlyZWN0bHkKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQG06IERQTEwgbXVsdGlwbGllciB0byBzZXQKKyAqIEBuOiBEUExMIGRpdmlkZXIgdG8gc2V0CisgKiBAZnJlcXNlbDogRlJFUVNFTCB2YWx1ZSB0byBzZXQKKyAqCisgKiBQcm9ncmFtIHRoZSBEUExMIHdpdGggdGhlIHN1cHBsaWVkIE0sIE4gdmFsdWVzLCBhbmQgd2FpdCBmb3IgdGhlIERQTEwgdG8KKyAqIGxvY2suLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKHN0cnVjdCBjbGsgKmNsaywgdTE2IG0sIHU4IG4sIHUxNiBmcmVxc2VsKQoreworCXN0cnVjdCBkcGxsX2RhdGEgKmRkID0gY2xrLT5kcGxsX2RhdGE7CisJdTMyIHY7CisKKwkvKiAzNDMwIEVTMiBUUk06IDQuNy42LjkgRFBMTCBQcm9ncmFtbWluZyBTZXF1ZW5jZSAqLworCV9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisKKwkvKiBTZXQgaml0dGVyIGNvcnJlY3Rpb24gKi8KKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZnJlcXNlbF9tYXNrOworCXYgfD0gZnJlcXNlbCA8PCBfX2ZmcyhkZC0+ZnJlcXNlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKKworCS8qIFNldCBEUExMIG11bHRpcGxpZXIsIGRpdmlkZXIgKi8KKwl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCXYgJj0gfihkZC0+bXVsdF9tYXNrIHwgZGQtPmRpdjFfbWFzayk7CisJdiB8PSBtIDw8IF9fZmZzKGRkLT5tdWx0X21hc2spOworCXYgfD0gKG4gLSAxKSA8PCBfX2ZmcyhkZC0+ZGl2MV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPm11bHRfZGl2MV9yZWcpOworCisJLyogV2UgbGV0IHRoZSBjbG9jayBmcmFtZXdvcmsgc2V0IHRoZSBvdGhlciBvdXRwdXQgZGl2aWRlcnMgbGF0ZXIgKi8KKworCS8qIFJFVklTSVQ6IFNldCByYW1wLXVwIGRlbGF5PyAqLworCisJX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUgLSBzZXQgbm9uLWNvcmUgRFBMTCByYXRlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKgorICogU2V0IHRoZSBEUExMIENMS09VVCB0byB0aGUgdGFyZ2V0IHJhdGUuICBJZiB0aGUgRFBMTCBjYW4gZW50ZXIKKyAqIGxvdy1wb3dlciBieXBhc3MsIGFuZCB0aGUgdGFyZ2V0IHJhdGUgaXMgdGhlIGJ5cGFzcyBzb3VyY2UgY2xvY2sKKyAqIHJhdGUsIHRoZW4gY29uZmlndXJlIHRoZSBEUExMIGZvciBieXBhc3MuICBPdGhlcndpc2UsIHJvdW5kIHRoZQorICogdGFyZ2V0IHJhdGUgaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCB0aGVuIHByb2dyYW0gYW5kIGxvY2sKKyAqIHRoZSBEUExMLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKKwl1MTYgZnJlcXNlbDsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwlpbnQgcmV0OworCisJaWYgKCFjbGsgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYXRlID09IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEVuc3VyZSBib3RoIHRoZSBieXBhc3MgYW5kIHJlZiBjbG9ja3MgYXJlIGVuYWJsZWQgcHJpb3IgdG8KKwkgKiBkb2luZyBhbnl0aGluZzsgd2UgbmVlZCB0aGUgYnlwYXNzIGNsb2NrIHJ1bm5pbmcgdG8gcmVwcm9ncmFtCisJICogdGhlIERQTEwuCisJICovCisJb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7CisJb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX3JlZik7CisKKwlpZiAoZGQtPmNsa19ieXBhc3MtPnJhdGUgPT0gcmF0ZSAmJgorCSAgICAoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKKwkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGVudGVyaW5nIGJ5cGFzcy5cbiIsIGNsay0+bmFtZSk7CisKKwkJcmV0ID0gX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKKwkJaWYgKCFyZXQpCisJCQluZXdfcGFyZW50ID0gZGQtPmNsa19ieXBhc3M7CisJfSBlbHNlIHsKKwkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSAhPSByYXRlKQorCQkJb21hcDJfZHBsbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssIGRkLT5sYXN0X3JvdW5kZWRfbik7CisJCWlmICghZnJlcXNlbCkKKwkJCVdBUk5fT04oMSk7CisKKwkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGxvY2tpbmcgcmF0ZSB0byAlbHUuXG4iLAorCQkJIGNsay0+bmFtZSwgcmF0ZSk7CisKKwkJcmV0ID0gb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oY2xrLCBkZC0+bGFzdF9yb3VuZGVkX20sCisJCQkJCQkgZGQtPmxhc3Rfcm91bmRlZF9uLCBmcmVxc2VsKTsKKwkJaWYgKCFyZXQpCisJCQluZXdfcGFyZW50ID0gZGQtPmNsa19yZWY7CisJfQorCWlmICghcmV0KSB7CisJCS8qCisJCSAqIFN3aXRjaCB0aGUgcGFyZW50IGNsb2NrIGluIHRoZSBoZWlyYXJjaHksIGFuZCBtYWtlIHN1cmUKKwkJICogdGhhdCB0aGUgbmV3IHBhcmVudCdzIHVzZWNvdW50IGlzIGNvcnJlY3QuICBOb3RlOiB3ZQorCQkgKiBlbmFibGUgdGhlIG5ldyBwYXJlbnQgYmVmb3JlIGRpc2FibGluZyB0aGUgb2xkIHRvIGF2b2lkCisJCSAqIGFueSB1bm5lY2Vzc2FyeSBoYXJkd2FyZSBkaXNhYmxlLT5lbmFibGUgdHJhbnNpdGlvbnMuCisJCSAqLworCQlpZiAoY2xrLT51c2Vjb3VudCkgeworCQkJb21hcDJfY2xrX2VuYWJsZShuZXdfcGFyZW50KTsKKwkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJfQorCQljbGtfcmVwYXJlbnQoY2xrLCBuZXdfcGFyZW50KTsKKwkJY2xrLT5yYXRlID0gcmF0ZTsKKwl9CisJb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19yZWYpOworCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfYnlwYXNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSAxMi01IENEUCBjb2RlIGZyb20gVEksICJMaW1pdGF0aW9uIDIuNSIKKwkgKiBvbiAzNDMwRVMxIHByZXZlbnRzIHVzIGZyb20gY2hhbmdpbmcgRFBMTCBtdWx0aXBsaWVycyBvciBkaXZpZGVycworCSAqIG9uIERQTEw0LgorCSAqLworCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvICIKKwkJICAgICAgICJzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOworfQorCisKKy8qCisgKiBDT1JFIERQTEwgKERQTEwzKSByYXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGNhbGwgaW50byBTUkFNIGNvZGUgdG8gZG8gdGhlIGFjdHVhbCBDTSB3cml0ZXMsIHNpbmNlIHRoZSBTRFJBTQorICogaXMgY2xvY2tlZCBmcm9tIERQTEwzLgorICovCisKKy8qKgorICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0IENPUkUgRFBMTCBNMiBkaXZpZGVyCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKgorICogUHJvZ3JhbSB0aGUgRFBMTCBNMiBkaXZpZGVyIHdpdGggdGhlIHJvdW5kZWQgdGFyZ2V0IHJhdGUuICBSZXR1cm5zCisgKiAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgbmV3X2RpdiA9IDA7CisJdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlOworCXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGsgIT0gJmRwbGwzX20yX2NrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYXRlID09IGNsay0+cmF0ZSkKKwkJcmV0dXJuIDA7CisKKwl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkcmNyYXRlID0gc2RyY19pY2sucmF0ZTsKKwlpZiAocmF0ZSA+IGNsay0+cmF0ZSkKKwkJc2RyY3JhdGUgPDw9ICgocmF0ZSAvIGNsay0+cmF0ZSkgLSAxKTsKKwllbHNlCisJCXNkcmNyYXRlID4+PSAoKGNsay0+cmF0ZSAvIHJhdGUpIC0gMSk7CisKKwlzcCA9IG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyhzZHJjcmF0ZSk7CisJaWYgKCFzcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9pbmZvKCJjbG9jazogY2hhbmdpbmcgQ09SRSBEUExMIHJhdGUgZnJvbSAlbHUgdG8gJWx1XG4iLCBjbGstPnJhdGUsCisJCXZhbGlkcmF0ZSk7CisJcHJfaW5mbygiY2xvY2s6IFNEUkMgdGltaW5nIHBhcmFtcyB1c2VkOiAlMDh4ICUwOHggJTA4eFxuIiwKKwkJc3AtPnJmcl9jdHJsLCBzcC0+YWN0aW1fY3RybGEsIHNwLT5hY3RpbV9jdHJsYik7CisKKwkvKiBSRVZJU0lUOiBTUkFNIGNvZGUgZG9lc24ndCBzdXBwb3J0IG90aGVyIE0yIGRpdmlzb3JzIHlldCAqLworCVdBUk5fT04obmV3X2RpdiAhPSAxICYmIG5ld19kaXYgIT0gMik7CisKKwkvKiBSRVZJU0lUOiBBZGQgU0RSQ19NUiBjaGFuZ2luZyB0byB0aGlzIGNvZGUgYWxzbyAqLworCW9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwoc3AtPnJmcl9jdHJsLCBzcC0+YWN0aW1fY3RybGEsCisJCQkJICBzcC0+YWN0aW1fY3RybGIsIG5ld19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMgPSB7CisJLmVuYWJsZQkJPSAmb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKK307CisKKy8qIERQTEwgYXV0b2lkbGUgcmVhZC9zZXQgY29kZSAqLworCisKIC8qKgogICogb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkIC0gcmVhZCBhIERQTEwncyBhdXRvaWRsZSBiaXRzCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gcmVhZApAQCAtMzU2LDkgKzgzOSwxMCBAQAogICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCiAgKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM19jbGtvdXR4Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAl1MzIgdjsKIAlzdHJ1Y3QgY2xrICpwY2xrOwogCkBAIC0zNzIsMTcgKzg1NiwxNSBAQAogCiAJZGQgPSBwY2xrLT5kcGxsX2RhdGE7CiAKLQlXQVJOX09OKCFkZC0+Y29udHJvbF9yZWcgfHwgIWRkLT5lbmFibGVfbWFzayk7CisJV0FSTl9PTighZGQtPmVuYWJsZV9tYXNrKTsKIAogCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpICYgZGQtPmVuYWJsZV9tYXNrOwogCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7Ci0JaWYgKHYgIT0gRFBMTF9MT0NLRUQpCi0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCWlmICh2ICE9IE9NQVAzWFhYX0VOX0RQTExfTE9DS0VEKQorCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CiAJZWxzZQotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAqIDI7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlICogMjsKKwlyZXR1cm4gcmF0ZTsKIH0KIAogLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KQEAgLTQzMiw3ICs5MTQsNyBAQAogCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKLQlpZiAob21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQorCWlmIChjbGtfc2V0X3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKICNlbmRpZgogCkBAIC00NTAsMjYgKzkzMiwxMyBAQAogaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQogewogCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KLQlzdHJ1Y3QgY2xrICoqY2xrcDsKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CiAJLyogdTMyIGNsa3JhdGU7ICovCiAJdTMyIGNwdV9jbGtmbGc7CiAKLQkvKiBSRVZJU0lUOiBVbHRpbWF0ZWx5IHRoaXMgd2lsbCBiZSB1c2VkIGZvciBtdWx0aWJvb3QgKi8KLSNpZiAwCi0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOwotCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDI0Mlg7Ci0JCWNsa3AgPSBvbmNoaXBfMjR4eF9jbGtzOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzI0M1g7Ci0JCWNwdV9jbGtmbGcgPSBDTE9DS19JTl9PTUFQMjQzWDsKLQkJY2xrcCA9IG9uY2hpcF8yNHh4X2Nsa3M7Ci0JfQotI2VuZGlmCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWNwdV9tYXNrID0gUkFURV9JTl8zNDNYOwotCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDM0M1g7Ci0JCWNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOworCQljcHVfY2xrZmxnID0gQ0tfMzQzWDsKIAogCQkvKgogCQkgKiBVcGRhdGUgdGhpcyBpZiB0aGVyZSBhcmUgZnVydGhlciBjbG9jayBjaGFuZ2VzIGJldHdlZW4gRVMyCkBAIC00NzcsMjMgKzk0NiwyNCBAQAogCQkgKi8KIAkJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CiAJCQkvKiBObyAzNDMwRVMxLW9ubHkgcmF0ZXMgZXhpc3QsIHNvIG5vIFJBVEVfSU5fMzQzMEVTMSAqLwotCQkJY3B1X2Nsa2ZsZyB8PSBDTE9DS19JTl9PTUFQMzQzMEVTMTsKKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKIAkJfSBlbHNlIHsKIAkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKLQkJCWNwdV9jbGtmbGcgfD0gQ0xPQ0tfSU5fT01BUDM0MzBFUzI7CisJCQljcHVfY2xrZmxnIHw9IENLXzM0MzBFUzI7CiAJCX0KIAl9CiAKIAljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOwotCSAgICAgY2xrcCA8IG9uY2hpcF8zNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF8zNHh4X2Nsa3MpOwotCSAgICAgY2xrcCsrKSB7Ci0JCWlmICgoKmNsa3ApLT5mbGFncyAmIGNwdV9jbGtmbGcpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQlvbWFwMl9pbml0X2Nsa19jbGtkbSgqY2xrcCk7CisJZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCisJCWNsa19pbml0X29uZShjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7CisJCQljbGtkZXZfYWRkKCZjLT5sayk7CisJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KLQl9CiAKIAkvKiBSRVZJU0lUOiBOb3QgeWV0IHJlYWR5IGZvciBPTUFQMyAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGE4MjYwOTQuLjcwZWMxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtMjcsMTMgKzI3LDE0IEBACiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogCi1zdGF0aWMgdm9pZCBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgdm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgdTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIC8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KICNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OApAQCAtNDcsNiArNDgsMTAgQEAKICAqIERQTEw1IHN1cHBsaWVzIG90aGVyIHBlcmlwaGVyYWwgY2xvY2tzIChVU0JIT1NULCBVU0lNKS4KICAqLwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgRFBMTCBieXBhc3MgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2s7CisKIC8qIENNX0NMS0VOX1BMTCouRU4qIGJpdCB2YWx1ZXMgLSBub3QgYWxsIGFyZSBhdmFpbGFibGUgZm9yIGV2ZXJ5IERQTEwgKi8KICNkZWZpbmUgRFBMTF9MT1dfUE9XRVJfU1RPUAkJMHgxCiAjZGVmaW5lIERQTExfTE9XX1BPV0VSX0JZUEFTUwkJMHg1CkBAIC01Nyw2NyArNjIsNTkgQEAKIC8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKIAkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0gewogCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiAvKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xM21fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTY4MDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAxOTIwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMjYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAzODQwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKQEAgLTE2NCwxMyArMTYxLDEzIEBACiAvKiAxMiwgMTMsIDE2LjgsIDE5LjIsIDI2LCBvciAzOC40IE1IeiAqLwogc3RhdGljIHN0cnVjdCBjbGsgb3NjX3N5c19jayA9IHsKIAkubmFtZQkJPSAib3NjX3N5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTRUwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1lTX0NMS0lOX1NFTF9NQVNLLAogCS5jbGtzZWwJCT0gb3NjX3N5c19jbGtzZWwsCiAJLyogUkVWSVNJVDogZGVhbCB3aXRoIGF1dG9leHRjbGttb2RlPyAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xODksMzYgKzE4NiwzNCBAQAogLyogRmVlZHMgRFBMTHMgLSBkaXZpZGVkIGZpcnN0IGJ5IFBSTV9DTEtTUkNfQ1RSTC5TWVNDTEtESVY/ICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CiAJLm5hbWUJCT0gInN5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfUFJNX0NMS1NSQ19DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVBfU1lTQ0xLRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfYWx0Y2xrID0gewogCS5uYW1lCQk9ICJzeXNfYWx0Y2xrIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIH07CiAKIC8qIE9wdGlvbmFsIGV4dGVybmFsIGNsb2NrIGlucHV0IGZvciBzb21lIE1jQlNQcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgbWNic3BfY2xrcyA9IHsKIAkubmFtZQkJPSAibWNic3BfY2xrcyIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiB9OwogCiAvKiBQUk0gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQxID0gewogCS5uYW1lCQk9ICJzeXNfY2xrb3V0MSIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVF9FTl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNiwxNiArMjIxLDYgQEAKIAogLyogQ00gQ0xPQ0tTICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHBsbF9ieXBhc3NfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRwbGxfbG9ja2VkX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYxNl9kcGxsX3JhdGVzW10gPSB7CiAJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAogCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKQEAgLTI2Myw2ICsyNDgsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfTVVMVF9NQVNLLAogCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZkcGxsMV9mY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCiAJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fTVBVX0RQTExfTUFTSywKIAkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKQEAgLTI3MiwxOCArMjYwLDIxIEBACiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAogCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19NUFVfRFBMTF9NQVNLLAogCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5pZGxlc3RfYml0CT0gT01BUDM0MzBfU1RfTVBVX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtMjkzLDkgKzI4NCw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMV94Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDFfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKQEAgLTMxMSwxMyArMzAyLDEzIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX3gybTJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwxX3gybTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwxX3gyX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0NMS09VVF9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMzI5LDYgKzMyMCw5IEBACiAJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwyX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9NQVNLLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSB8CkBAIC0zMzksMjAgKzMzMywyMSBAQAogCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCksCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX0lWQTJfRFBMTF9NQVNLLAogCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X2JpdAk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX1NISUZULAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDJfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGUJCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtMzY3LDE0ICszNjIsMTQgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfbTJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwyX20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsMl9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELAogCQkJCQkgIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDJfbTJ4Ml9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0zODcsNiArMzgyLDkgQEAKIAkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfTUFTSywKIAkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKQEAgLTM5NCwxNyArMzkyLDIxIEBACiAJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKIAkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiB9OwogCkBAIC00MTQsOSArNDE2LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIApAQCAtNDYwLDU1ICs0NjIsMzQgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLS8qCi0gKiBEUExMMyBvdXRwdXQgTTIKLSAqIFJFVklTSVQ6IFRoaXMgRFBMTCBvdXRwdXQgZGl2aWRlciBtdXN0IGJlIGNoYW5nZWQgaW4gU1JBTSwgc28gdW50aWwKLSAqIHRoYXQgY29kZSBpcyByZWFkeSwgdGhpcyBzaG91bGQgcmVtYWluIGEgJ3JlYWQtb25seScgY2xrc2VsIGNsb2NrLgotICovCisvKiBEUExMMyBvdXRwdXQgTTIgLSBwcmltYXJ5IGNvbnRyb2wgcG9pbnQgZm9yIENPUkUgc3BlZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MzFfZHBsbDNtMl9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsM19tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfY2siLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gY29yZV9ja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGwzX20yeDJfY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsM194Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0NPUkVfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBkcGxsM19tMngyX2NrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX3gyX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCkBAIC01MjAsNDIgKzUwMSwzNCBAQAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGwzX20zeDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGwzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTN4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTN4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkcGxsM19tM19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfQ09SRV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBlbXVfY29yZV9hbHdvbl9ja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDNfbTN4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9jb3JlX2Fsd29uX2NrID0gewogCS5uYW1lCQk9ICJlbXVfY29yZV9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfbTN4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9jb3JlX2Fsd29uX2NrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFBMTDQgKi8KQEAgLTU2NSw2ICs1MzgsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpLAogCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX0ZSRVFTRUxfTUFTSywKIAkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX01BU0ssCiAJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLApAQCAtNTc0LDIwICs1NTAsMjEgQEAKIAkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfTUFTSywKIAkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5pZGxlc3RfYml0CT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGUJCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiB9OwogCkBAIC01OTgsOSArNTc1LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIApAQCAtNjEyLDExMiArNTg5LDEwMSBAQAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20yeDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwzKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfOTZNX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20yeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTJfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fOTZNX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IElOVkVSVF9FTkFCTEUsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfOTZtX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTJ4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KKy8qCisgKiBEUExMNCBnZW5lcmF0ZXMgRFBMTDRfTTJYMl9DTEsgd2hpY2ggaXMgdGhlbiByb3V0ZWQgaW50byB0aGUgUFJNIGFzCisgKiBQUk1fOTZNX0FMV09OXyhGKUNMSy4gIFR3byBjbG9ja3MgdGhlbiBlbWVyZ2UgZnJvbSB0aGUgUFJNOgorICogOTZNX0FMV09OX0ZDTEsgKGNhbGxlZCAib21hcF85Nm1fYWx3b25fZmNrIiBiZWxvdykgYW5kCisgKiBDTV85NktfKEYpQ0xLLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTJ4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCSBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF85Nm1fZmNrIiwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNtXzk2bV9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X20yeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0gewogCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKLQkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9kcGxsX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgLnJhdGVzID0gb21hcF85Nm1fc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBjbV85Nm1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfOTZNX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzk2bV9mY2tfY2xrc2VsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTN4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTNfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RWX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20zeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB2aXJ0X29tYXBfNTRtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTN4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfb21hcF81NG1fZmNrID0gewotCS5uYW1lCQk9ICJ2aXJ0X29tYXBfNTRtX2ZjayIsCi0JLnBhcmVudAkJPSAmZHBsbDRfbTN4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gdmlydF9vbWFwXzU0bV9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2Q0bTN4Ml9yYXRlc1tdID0gewogCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKIAl7IC5kaXYgPSAwIH0KQEAgLTcyOSwyMyArNjk1LDIyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzU0bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmdmlydF9vbWFwXzU0bV9mY2ssIC5yYXRlcyA9IG9tYXBfNTRtX2Q0bTN4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgICAgLnJhdGVzID0gb21hcF81NG1fYWx0X3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzU0bV9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfNTRtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNTRNLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSywKIAkuY2xrc2VsCQk9IG9tYXBfNTRtX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV85Nm1kMl9yYXRlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9jbTk2bV9yYXRlc1tdID0gewogCXsgLmRpdiA9IDIsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKIAl7IC5kaXYgPSAwIH0KIH07CkBAIC03NTYsMTA2ICs3MjEsMTEyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzQ4bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fOTZtZDJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fY205Nm1fcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgLnJhdGVzID0gb21hcF80OG1fYWx0X3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNDhNLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSywKIAkuY2xrc2VsCQk9IG9tYXBfNDhtX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMm1fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzEybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKIAkuZml4ZWRfZGl2CT0gNCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKIC8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X200X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTV4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTVfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTZ4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X202X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMNF9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X202X2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fRU1VX1BFUklQSF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBlbXVfcGVyX2Fsd29uX2NrID0gewogCS5uYW1lCQk9ICJlbXVfcGVyX2Fsd29uX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9tNngyX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtODY3LDYgKzgzOCw5IEBACiAJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNCksCiAJLm11bHRfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRlJFUVNFTF9NQVNLLAogCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9NQVNLLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKQEAgLTg3NiwyMCArODUwLDIxIEBACiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9BVVRPSURMRTJfUExMKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwRVMyX0FVVE9fUEVSSVBIMl9EUExMX01BU0ssCiAJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmlkbGVzdF9iaXQJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDVfY2siLAorCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfUFJPUEFHQVRFUywKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIH07CiAKQEAgLTkwMCwzMSArODc1LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw1X20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNV9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDVfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9ESVZfMTIwTV9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzEyMG1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDVfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzEyMG1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzEyMG1fZmNrIiwKLQkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTk1MSwyMiArOTA4LDIzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbGtvdXQyX3NyY19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJCSAgLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkgIC5yYXRlcyA9IGNsa291dDJfc3JjX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9hbHdvbl9mY2ssICAucmF0ZXMgPSBjbGtvdXQyX3NyY185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmb21hcF81NG1fZmNrLAkgIC5yYXRlcyA9IGNsa291dDJfc3JjXzU0bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKIAkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCiAJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC05ODYsMTEgKzk0NCwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKIAkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gc3lzX2Nsa291dDJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtOTk4LDE2ICs5NTYsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgY29yZXgyX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZXgyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfbTJ4Ml9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFBMTCBwb3dlciBkb21haW4gY2xvY2sgY29udHJvbHMgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9jb3JlX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIApAQCAtMTAxNywzOSArOTgxLDIxIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2ZjayA9IHsKIAkubmFtZQkJPSAiZHBsbDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9DTEtfU1JDX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtzZWwJCT0gZGl2NF9jb3JlX2Nsa3NlbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotLyoKLSAqIE1QVSBjbGtzZWw6Ci0gKiBJZiBEUExMMSBpcyBsb2NrZWQsIG1wdV9jayBkZXJpdmVzIGZyb20gRFBMTDE7IG90aGVyd2lzZSwgbXB1X2NrCi0gKiBkZXJpdmVzIGZyb20gdGhlIGhpZ2gtZnJlcXVlbmN5IGJ5cGFzcyBjbG9jayBvcmlnaW5hdGluZyBmcm9tIERQTEwzLAotICogY2FsbGVkICdkcGxsMV9mY2snCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDFfZmNrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDFfeDJtMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKIAkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCkBAIC0xMDY2LDEzICsxMDEyLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9mY2sgPSB7CiAJLm5hbWUJCT0gImFybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm1wdV9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKIAkuY2xrc2VsCQk9IGFybV9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMDg0LDYzICsxMDI5LDQ4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9tcHVfYWx3b25fY2sgPSB7CiAJLm5hbWUJCT0gImVtdV9tcHVfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrID0gewogCS5uYW1lCQk9ICJkcGxsMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLS8qCi0gKiBJVkEyIGNsa3NlbDoKLSAqIElmIERQTEwyIGlzIGxvY2tlZCwgaXZhMl9jayBkZXJpdmVzIGZyb20gRFBMTDI7IG90aGVyd2lzZSwgaXZhMl9jawotICogZGVyaXZlcyBmcm9tIHRoZSBoaWdoLWZyZXF1ZW5jeSBieXBhc3MgY2xvY2sgb3JpZ2luYXRpbmcgZnJvbSBEUExMMywKLSAqIGNhbGxlZCAnZHBsbDJfZmNrJwotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGl2YTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwyX2ZjaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsMl9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfY2sgPSB7CiAJLm5hbWUJCT0gIml2YTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDJfbTJfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCi0JCQkJCSAgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGl2YTJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKIAkuY2xrZG1fbmFtZQk9ICJpdmEyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDb21tb24gaW50ZXJmYWNlIGNsb2NrcyAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2NvcmVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ljayA9IHsKIAkubmFtZQkJPSAibDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0wzX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwpAQCAtMTE1MiwxMyArMTA4MiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBsNF9pY2sgPSB7CiAJLm5hbWUJCT0gImw0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0w0X01BU0ssCiAJLmNsa3NlbAkJPSBkaXYyX2wzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCkBAIC0xMTcxLDEyICsxMTAwLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJtX2ljayA9IHsKIAkubmFtZQkJPSAicm1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUk1fTUFTSywKIAkuY2xrc2VsCQk9IGRpdjJfbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTE5Miw1MyArMTEyMSw1MiBAQAogLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCiAJLmNsa3NlbAkJPSBnZnhfbDNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2ljayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzJEX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xMjY1LDI0ICsxMTkzLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNneF9mY2sgPSB7CiAJLm5hbWUJCT0gInNneF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fU0dYX1NISUZULAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfQ01fRkNMS0VOX1NHWF9FTl9TR1hfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX01BU0ssCiAJLmNsa3NlbAkJPSBzZ3hfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZ3hfaWNrID0gewogCS5uYW1lCQk9ICJzZ3hfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKIAkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTI5MSwxMSArMTIxOSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkMmRfMjZtX2ZjayA9IHsKIAkubmFtZQkJPSAiZDJkXzI2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9EMkRfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAogCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xMzA4LDYgKzEyMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCkBAIC0xMzE1LDEzICsxMjQ0LDEzIEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLApAQCAtMTMyOSwzNSArMTI1OCwzNCBAQAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNwZWZ1c2VfZmNrID0gewogCS5uYW1lCQk9ICJjcGVmdXNlX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0c19mY2sgPSB7CiAJLm5hbWUJCT0gInRzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1RTX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKIAkubmFtZQkJPSAidXNidGxsX2ZjayIsCi0JLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzY1LDg0ICsxMjkzLDgzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKIAkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xNDY5LDYgKzEzOTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCkBAIC0xNDc2LDEzICsxNDA0LDEzIEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKQEAgLTE0OTAsNyArMTQxOCw2IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AxX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0xNDk5LDc3ICsxNDI2LDc2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZV80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnNob3N0dXNiX2ZjayA9IHsKIAkubmFtZQkJPSAiZnNob3N0dXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTU3NywxOSArMTUwMywxOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlXzEybV9mY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfMTJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF8xMm1fZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewogCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfMTJtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjEyLDIyICsxNTM3LDIyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrID0gewogCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAogCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfc3N0X2ZjayA9IHsKIAkubmFtZQkJPSAic3NpX3NzdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrLAogCS5maXhlZF9kaXYJPSAyLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKQEAgLTE2NDEsMzkgKzE1NjYsMzkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2sgPSB7CiAJLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewogCS5uYW1lCQk9ICJzZHJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CiAJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0sgfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwgLyogaHVoPyAqLwogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTY4MiwxOCArMTYwNywxNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewogCS5uYW1lCQk9ICJwa2FfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzAxLDMxICsxNjI1LDMwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKIAkubmFtZQkJPSAidXNidGxsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xNzMzLDI1MCArMTY1NiwyNTEgQEAKIC8qIEludGVyc3lzdGVtIENvbW11bmljYXRpb24gUmVnaXN0ZXJzIC0gY2hhc3NpcyBtb2RlIG9ubHkgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGljcl9pY2sgPSB7CiAJLm5hbWUJCT0gImljcl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSUNSX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CiAJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzaGExMl9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYTEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TSEExMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRlczJfaWNrID0gewogCS5uYW1lCQk9ICJkZXMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKIAkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTRfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjM19pY2sgPSB7CiAJLm5hbWUJCT0gImkyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CiAJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRkFDX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKIAkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9PTUFQQ1RSTF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5ODQsMTkgKzE5MDgsMTggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKIAkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrID0gewogCS5uYW1lCQk9ICJzc2lfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMDExLDYgKzE5MzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewogCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTIwMTgsNyArMTk0Miw2IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAogCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIwMjgsOTggKzE5NTEsODcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKIAkubmFtZQkJPSAiYWVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1JOR19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTExX2ljayA9IHsKIAkubmFtZQkJPSAic2hhMTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKIAkubmFtZQkJPSAiZGVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFNTICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTR4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJkc3MxX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTR4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gZHNzMV9hbHdvbl9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7CiAJLm5hbWUJCT0gImRzc190dl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3MyX2Fsd29uX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzMl9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMTI3LDQ1ICsyMDM5LDQ2IEBACiBzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDQU0gKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2FtX21jbGtfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X201eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKIAkubmFtZQkJPSAiY2FtX21jbGsiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTV4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gY2FtX21jbGtfY2xrc2VsLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKIAkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwogCS5uYW1lCQk9ICJjYW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NpMl85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjc2kyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ1NJMl9TSElGVCwKIAkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjE3NCwyMiArMjA4NywyMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKLQkucGFyZW50CQk9ICZvbWFwXzEyMG1fZmNrLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjE5NywyMiArMjExMCwxMSBAQAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CiAJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KIAkubmFtZQkJPSAidXNiaG9zdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X3Nhcl9mY2sgPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3Rfc2FyX2ZjayIsCi0JLnBhcmVudAkJPSAmb3NjX3N5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCi0JLmVuYWJsZV9yZWcJPSBPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBQTV9QV1NUQ1RSTCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMjM3LDcgKzIxMzksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2ltX2Nsa3NlbFtdID0gewogCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9mY2ssCS5yYXRlcyA9IHVzaW1fOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm9tYXBfMTIwbV9mY2ssCS5yYXRlcyA9IHVzaW1fMTIwbV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwpAQCAtMjI0NSw2MyArMjE0Nyw2MyBAQAogLyogMzQzMEVTMiBvbmx5ICovCiBzdGF0aWMgc3RydWN0IGNsayB1c2ltX2ZjayA9IHsKIAkubmFtZQkJPSAidXNpbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfQ0xLU0VMX1VTSU1PQ1BfTUFTSywKIAkuY2xrc2VsCQk9IHVzaW1fY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogWFhYIHNob3VsZCBncHQxJ3MgY2xrc2VsIGhhdmUgd2t1cF8zMmtfZmNrIGFzIHRoZSAzMmsgb3B0PyAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0gewogCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8xX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfbDRfaWNrID0gewogCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjMxMCw1MCArMjIxMiw1MCBAQAogLyogTmV2ZXIgc3BlY2lmaWNhbGx5IG5hbWVkIGluIHRoZSBUUk0sIHNvIHdlIGhhdmUgdG8gaW5mZXIgYSBsaWtlbHkgbmFtZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9pY2sgPSB7CiAJLm5hbWUJCT0gInVzaW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKIAkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfaWNrID0gewogCS5uYW1lCQk9ICJncGlvMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrc3luY19pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfMzJrc3luY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIzNjEsMjAgKzIyNjMsMjAgQEAKIC8qIFhYWCBUaGlzIGNsb2NrIG5vIGxvbmdlciBleGlzdHMgaW4gMzQzMCBUUk0gcmV2IEYgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIzODUsNDA2ICsyMjg3LDQwNCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAicGVyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUN19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzMya19hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl8zMmtfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfZGJjayA9IHsKIAkubmFtZQkJPSAiZ3BpbzZfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNF9kYmNrID0gewogCS5uYW1lCQk9ICJncGlvNF9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfZGJjayA9IHsKIAkubmFtZQkJPSAiZ3BpbzNfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8yX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gInBlcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW82X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2ljayA9IHsKIAkubmFtZQkJPSAiZ3BpbzRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewogCS5uYW1lCQk9ICJncGlvMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0gewogCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0gewogCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjc5MiwxMyArMjY5MiwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAyX0NPTlRST0xfREVWQ09ORjApLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQMl9DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjgwNiwxMyArMjcwNiwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQM19DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjgyMCw3ICsyNzIwLDYgQEAKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDRfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI4NjQsMTEgKzI3NjMsMTEgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZW11X3NyY19jayA9IHsKIAkubmFtZQkJPSAiZW11X3NyY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI4ODgsMTEgKzI3ODcsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7CiAJLm5hbWUJCT0gInBjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5MTEsMTEgKzI4MTAsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGNsa3gyX2ZjayA9IHsKIAkubmFtZQkJPSAicGNsa3gyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS1gyX01BU0ssCiAJLmNsa3NlbAkJPSBwY2xreDJfZW11X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwpAQCAtMjkyNywyMiArMjgyNiwyMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhdGNsa19mY2sgPSB7CiAJLm5hbWUJCT0gImF0Y2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfTUFTSywKIAkuY2xrc2VsCQk9IGF0Y2xrX2VtdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfc3JjX2ZjayA9IHsKIAkubmFtZQkJPSAidHJhY2VjbGtfc3JjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5NjEsMTEgKzI4NjAsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfZmNrID0gewogCS5uYW1lCQk9ICJ0cmFjZWNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSB0cmFjZWNsa19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5NzUsMjcgKzI4NzQsMjcgQEAKIC8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDEpICovCiBzdGF0aWMgc3RydWN0IGNsayBzcjFfZmNrID0gewogCS5uYW1lCQk9ICJzcjFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDIpICovCiBzdGF0aWMgc3RydWN0IGNsayBzcjJfZmNrID0gewogCS5uYW1lCQk9ICJzcjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKIAkubmFtZQkJPSAic3JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0zMDA1LDIzMSArMjkwNCwxNiBAQAogLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqb25jaGlwXzM0eHhfY2xrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm9tYXBfMzJrX2ZjaywKLQkmdmlydF8xMm1fY2ssCi0JJnZpcnRfMTNtX2NrLAotCSZ2aXJ0XzE2XzhtX2NrLAotCSZ2aXJ0XzE5XzJtX2NrLAotCSZ2aXJ0XzI2bV9jaywKLQkmdmlydF8zOF80bV9jaywKLQkmb3NjX3N5c19jaywKLQkmc3lzX2NrLAotCSZzeXNfYWx0Y2xrLAotCSZtY2JzcF9jbGtzLAotCSZzeXNfY2xrb3V0MSwKLQkmZHBsbDFfY2ssCi0JJmRwbGwxX3gyX2NrLAotCSZkcGxsMV94Mm0yX2NrLAotCSZkcGxsMl9jaywKLQkmZHBsbDJfbTJfY2ssCi0JJmRwbGwzX2NrLAotCSZjb3JlX2NrLAotCSZkcGxsM194Ml9jaywKLQkmZHBsbDNfbTJfY2ssCi0JJmRwbGwzX20yeDJfY2ssCi0JJmRwbGwzX20zX2NrLAotCSZkcGxsM19tM3gyX2NrLAotCSZlbXVfY29yZV9hbHdvbl9jaywKLQkmZHBsbDRfY2ssCi0JJmRwbGw0X3gyX2NrLAotCSZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JJm9tYXBfOTZtX2ZjaywKLQkmY21fOTZtX2ZjaywKLQkmdmlydF9vbWFwXzU0bV9mY2ssCi0JJm9tYXBfNTRtX2ZjaywKLQkmb21hcF80OG1fZmNrLAotCSZvbWFwXzEybV9mY2ssCi0JJmRwbGw0X20yX2NrLAotCSZkcGxsNF9tMngyX2NrLAotCSZkcGxsNF9tM19jaywKLQkmZHBsbDRfbTN4Ml9jaywKLQkmZHBsbDRfbTRfY2ssCi0JJmRwbGw0X200eDJfY2ssCi0JJmRwbGw0X201X2NrLAotCSZkcGxsNF9tNXgyX2NrLAotCSZkcGxsNF9tNl9jaywKLQkmZHBsbDRfbTZ4Ml9jaywKLQkmZW11X3Blcl9hbHdvbl9jaywKLQkmZHBsbDVfY2ssCi0JJmRwbGw1X20yX2NrLAotCSZvbWFwXzEyMG1fZmNrLAotCSZjbGtvdXQyX3NyY19jaywKLQkmc3lzX2Nsa291dDIsCi0JJmNvcmV4Ml9mY2ssCi0JJmRwbGwxX2ZjaywKLQkmbXB1X2NrLAotCSZhcm1fZmNrLAotCSZlbXVfbXB1X2Fsd29uX2NrLAotCSZkcGxsMl9mY2ssCi0JJml2YTJfY2ssCi0JJmwzX2ljaywKLQkmbDRfaWNrLAotCSZybV9pY2ssCi0JJmdmeF9sM19jaywKLQkmZ2Z4X2wzX2ZjaywKLQkmZ2Z4X2wzX2ljaywKLQkmZ2Z4X2NnMV9jaywKLQkmZ2Z4X2NnMl9jaywKLQkmc2d4X2ZjaywKLQkmc2d4X2ljaywKLQkmZDJkXzI2bV9mY2ssCi0JJmdwdDEwX2ZjaywKLQkmZ3B0MTFfZmNrLAotCSZjcGVmdXNlX2ZjaywKLQkmdHNfZmNrLAotCSZ1c2J0bGxfZmNrLAotCSZjb3JlXzk2bV9mY2ssCi0JJm1tY2hzM19mY2ssCi0JJm1tY2hzMl9mY2ssCi0JJm1zcHJvX2ZjaywKLQkmbW1jaHMxX2ZjaywKLQkmaTJjM19mY2ssCi0JJmkyYzJfZmNrLAotCSZpMmMxX2ZjaywKLQkmbWNic3A1X2ZjaywKLQkmbWNic3AxX2ZjaywKLQkmY29yZV80OG1fZmNrLAotCSZtY3NwaTRfZmNrLAotCSZtY3NwaTNfZmNrLAotCSZtY3NwaTJfZmNrLAotCSZtY3NwaTFfZmNrLAotCSZ1YXJ0Ml9mY2ssCi0JJnVhcnQxX2ZjaywKLQkmZnNob3N0dXNiX2ZjaywKLQkmY29yZV8xMm1fZmNrLAotCSZoZHFfZmNrLAotCSZzc2lfc3NyX2ZjaywKLQkmc3NpX3NzdF9mY2ssCi0JJmNvcmVfbDNfaWNrLAotCSZoc290Z3VzYl9pY2ssCi0JJnNkcmNfaWNrLAotCSZncG1jX2ZjaywKLQkmc2VjdXJpdHlfbDNfaWNrLAotCSZwa2FfaWNrLAotCSZjb3JlX2w0X2ljaywKLQkmdXNidGxsX2ljaywKLQkmbW1jaHMzX2ljaywKLQkmaWNyX2ljaywKLQkmYWVzMl9pY2ssCi0JJnNoYTEyX2ljaywKLQkmZGVzMl9pY2ssCi0JJm1tY2hzMl9pY2ssCi0JJm1tY2hzMV9pY2ssCi0JJm1zcHJvX2ljaywKLQkmaGRxX2ljaywKLQkmbWNzcGk0X2ljaywKLQkmbWNzcGkzX2ljaywKLQkmbWNzcGkyX2ljaywKLQkmbWNzcGkxX2ljaywKLQkmaTJjM19pY2ssCi0JJmkyYzJfaWNrLAotCSZpMmMxX2ljaywKLQkmdWFydDJfaWNrLAotCSZ1YXJ0MV9pY2ssCi0JJmdwdDExX2ljaywKLQkmZ3B0MTBfaWNrLAotCSZtY2JzcDVfaWNrLAotCSZtY2JzcDFfaWNrLAotCSZmYWNfaWNrLAotCSZtYWlsYm94ZXNfaWNrLAotCSZvbWFwY3RybF9pY2ssCi0JJnNzaV9sNF9pY2ssCi0JJnNzaV9pY2ssCi0JJnVzYl9sNF9pY2ssCi0JJnNlY3VyaXR5X2w0X2ljazIsCi0JJmFlczFfaWNrLAotCSZybmdfaWNrLAotCSZzaGExMV9pY2ssCi0JJmRlczFfaWNrLAotCSZkc3MxX2Fsd29uX2ZjaywKLQkmZHNzX3R2X2ZjaywKLQkmZHNzXzk2bV9mY2ssCi0JJmRzczJfYWx3b25fZmNrLAotCSZkc3NfaWNrLAotCSZjYW1fbWNsaywKLQkmY2FtX2ljaywKLQkmdXNiaG9zdF8xMjBtX2ZjaywKLQkmdXNiaG9zdF80OG1fZmNrLAotCSZ1c2Job3N0X2ljaywKLQkmdXNiaG9zdF9zYXJfZmNrLAotCSZ1c2ltX2ZjaywKLQkmZ3B0MV9mY2ssCi0JJndrdXBfMzJrX2ZjaywKLQkmZ3BpbzFfZGJjaywKLQkmd2R0Ml9mY2ssCi0JJndrdXBfbDRfaWNrLAotCSZ1c2ltX2ljaywKLQkmd2R0Ml9pY2ssCi0JJndkdDFfaWNrLAotCSZncGlvMV9pY2ssCi0JJm9tYXBfMzJrc3luY19pY2ssCi0JJmdwdDEyX2ljaywKLQkmZ3B0MV9pY2ssCi0JJnBlcl85Nm1fZmNrLAotCSZwZXJfNDhtX2ZjaywKLQkmdWFydDNfZmNrLAotCSZncHQyX2ZjaywKLQkmZ3B0M19mY2ssCi0JJmdwdDRfZmNrLAotCSZncHQ1X2ZjaywKLQkmZ3B0Nl9mY2ssCi0JJmdwdDdfZmNrLAotCSZncHQ4X2ZjaywKLQkmZ3B0OV9mY2ssCi0JJnBlcl8zMmtfYWx3b25fZmNrLAotCSZncGlvNl9kYmNrLAotCSZncGlvNV9kYmNrLAotCSZncGlvNF9kYmNrLAotCSZncGlvM19kYmNrLAotCSZncGlvMl9kYmNrLAotCSZ3ZHQzX2ZjaywKLQkmcGVyX2w0X2ljaywKLQkmZ3BpbzZfaWNrLAotCSZncGlvNV9pY2ssCi0JJmdwaW80X2ljaywKLQkmZ3BpbzNfaWNrLAotCSZncGlvMl9pY2ssCi0JJndkdDNfaWNrLAotCSZ1YXJ0M19pY2ssCi0JJmdwdDlfaWNrLAotCSZncHQ4X2ljaywKLQkmZ3B0N19pY2ssCi0JJmdwdDZfaWNrLAotCSZncHQ1X2ljaywKLQkmZ3B0NF9pY2ssCi0JJmdwdDNfaWNrLAotCSZncHQyX2ljaywKLQkmbWNic3AyX2ljaywKLQkmbWNic3AzX2ljaywKLQkmbWNic3A0X2ljaywKLQkmbWNic3AyX2ZjaywKLQkmbWNic3AzX2ZjaywKLQkmbWNic3A0X2ZjaywKLQkmZW11X3NyY19jaywKLQkmcGNsa19mY2ssCi0JJnBjbGt4Ml9mY2ssCi0JJmF0Y2xrX2ZjaywKLQkmdHJhY2VjbGtfc3JjX2ZjaywKLQkmdHJhY2VjbGtfZmNrLAotCSZzcjFfZmNrLAotCSZzcjJfZmNrLAotCSZzcl9sNF9pY2ssCi0JJnNlY3VyZV8zMmtfZmNrLAotCSZncHQxMl9mY2ssCi0JJndkdDFfZmNrLAotfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggNGMzY2U5Yy4uMGU3ZDUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC03MSwxNiArNzIsMTMgQEAKIAlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQogCQlyZXR1cm47CiAKLQlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbS5uYW1lKTsKIAlpZiAoIXB3cmRtKSB7Ci0JCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogX2F1dG9kZXBfbG9va3VwOiBwb3dlcmRvbWFpbiAlcyAiCi0JCQkgImRvZXMgbm90IGV4aXN0XG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lKTsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiBhdXRvZGVwczogcG93ZXJkb21haW4gJXMgZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgYXV0b2RlcC0+cHdyZG0ubmFtZSk7CisJCXB3cmRtID0gRVJSX1BUUigtRU5PRU5UKTsKIAl9Ci0JYXV0b2RlcC0+cHdyZG0gPSBwd3JkbTsKLQotCXJldHVybjsKKwlhdXRvZGVwLT5wd3JkbS5wdHIgPSBwd3JkbTsKIH0KIAogLyoKQEAgLTk1LDE2ICs5MywxOSBAQAogewogCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOwogCi0JZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykgewotCQlpZiAoIWF1dG9kZXAtPnB3cmRtKQorCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbS5wdHI7IGF1dG9kZXArKykgeworCQlpZiAoSVNfRVJSKGF1dG9kZXAtPnB3cmRtLnB0cikpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQogCQkJY29udGludWU7CiAKIAkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBhZGRpbmcgJXMgc2xlZXBkZXAvd2tkZXAgZm9yICIKLQkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtX25hbWUsCi0JCQkgY2xrZG0tPnB3cmRtLT5uYW1lKTsKKwkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtLnB0ci0+bmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0ucHRyLT5uYW1lKTsKIAotCQlwd3JkbV9hZGRfc2xlZXBkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7Ci0JCXB3cmRtX2FkZF93a2RlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fYWRkX3NsZWVwZGVwKGNsa2RtLT5wd3JkbS5wdHIsIGF1dG9kZXAtPnB3cmRtLnB0cik7CisJCXB3cmRtX2FkZF93a2RlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwogCX0KIH0KIApAQCAtMTIwLDE2ICsxMjEsMTkgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKIAotCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbV9uYW1lOyBhdXRvZGVwKyspIHsKLQkJaWYgKCFhdXRvZGVwLT5wd3JkbSkKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspIHsKKwkJaWYgKElTX0VSUihhdXRvZGVwLT5wd3JkbS5wdHIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvbWFwX2NoaXBfaXMoYXV0b2RlcC0+b21hcF9jaGlwKSkKIAkJCWNvbnRpbnVlOwogCiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogcmVtb3ZpbmcgJXMgc2xlZXBkZXAvd2tkZXAgZm9yICIKLQkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtX25hbWUsCi0JCQkgY2xrZG0tPnB3cmRtLT5uYW1lKTsKKwkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtLnB0ci0+bmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0ucHRyLT5uYW1lKTsKIAotCQlwd3JkbV9kZWxfc2xlZXBkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7Ci0JCXB3cmRtX2RlbF93a2RlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fZGVsX3NsZWVwZGVwKGNsa2RtLT5wd3JkbS5wdHIsIGF1dG9kZXAtPnB3cmRtLnB0cik7CisJCXB3cmRtX2RlbF93a2RlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwogCX0KIH0KIApAQCAtMTc5LDcgKzE4Myw3IEBACiAKIAlhdXRvZGVwcyA9IGluaXRfYXV0b2RlcHM7CiAJaWYgKGF1dG9kZXBzKQotCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKQorCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspCiAJCQlfYXV0b2RlcF9sb29rdXAoYXV0b2RlcCk7CiB9CiAKQEAgLTIwMiwyMCArMjA2LDIwIEBACiAJaWYgKCFvbWFwX2NoaXBfaXMoY2xrZG0tPm9tYXBfY2hpcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcHdyZG0gPSBwd3JkbV9sb29rdXAoY2xrZG0tPnB3cmRtX25hbWUpOworCXB3cmRtID0gcHdyZG1fbG9va3VwKGNsa2RtLT5wd3JkbS5uYW1lKTsKIAlpZiAoIXB3cmRtKSB7Ci0JCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG1fcmVnaXN0ZXIgJXM6IHBvd2VyZG9tYWluICVzICIKLQkJCSAiZG9lcyBub3QgZXhpc3RcbiIsIGNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG1fbmFtZSk7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzOiBwb3dlcmRvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKwkJCWNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG0ubmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQljbGtkbS0+cHdyZG0gPSBwd3JkbTsKKwljbGtkbS0+cHdyZG0ucHRyID0gcHdyZG07CiAKIAltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CiAJLyogVmVyaWZ5IHRoYXQgdGhlIGNsb2NrZG9tYWluIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KIAlpZiAoX2Nsa2RtX2xvb2t1cChjbGtkbS0+bmFtZSkpIHsKIAkJcmV0ID0gLUVFWElTVDsKIAkJZ290byBjcl91bmxvY2s7Ci0JfTsKKwl9CiAKIAlsaXN0X2FkZCgmY2xrZG0tPm5vZGUsICZjbGtkbV9saXN0KTsKIApAQCAtMjQyLDcgKzI0Niw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwd3JkbV9kZWxfY2xrZG0oY2xrZG0tPnB3cmRtLCBjbGtkbSk7CisJcHdyZG1fZGVsX2Nsa2RtKGNsa2RtLT5wd3JkbS5wdHIsIGNsa2RtKTsKIAogCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2RlbCgmY2xrZG0tPm5vZGUpOwpAQCAtMzI3LDcgKzMzMSw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gY2xrZG0tPnB3cmRtOworCXJldHVybiBjbGtkbS0+cHdyZG0ucHRyOwogfQogCiAKQEAgLTM0OCw3ICszNTIsNyBAQAogCWlmICghY2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdiA9IGNtX3JlYWRfbW9kX3JlZyhjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKIAl2ICY9IGNsa2RtLT5jbGt0cmN0cmxfbWFzazsKIAl2ID4+PSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwogCkBAIC0zODAsNyArMzg0LDcgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAogCQljbV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOwogCiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCkBAIC0zODgsNyArMzkyLDcgQEAKIAkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKIAogCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKIAogCX0gZWxzZSB7CiAJCUJVRygpOwpAQCAtNDIyLDcgKzQyNiw3IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKIAkJY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCQkgICAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKIAogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIApAQCAtNDMwLDcgKzQzNCw3IEBACiAJCQkgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSk7CiAKIAkJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssIHYsCi0JCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAKIAl9IGVsc2UgewogCQlCVUcoKTsKQEAgLTQ3OCw3ICs0ODIsNyBAQAogCiAJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCiAJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKIAkJCSAgICBDTV9DTEtTVENUUkwpOwogfQogCkBAIC01MTYsNyArNTIwLDcgQEAKIAogCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAogCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKQEAgLTU2Nyw2ICs1NzEsOCBAQAogCWVsc2UKIAkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKIAorCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaAppbmRleCBjZDg2ZGNjLi4yODFkNWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmgKQEAgLTE0LDEyICsxNCwyOSBAQAogCiAvKgogICogT01BUDIvMy1jb21tb24gY2xvY2tkb21haW5zCisgKgorICogRXZlbiB0aG91Z2ggdGhlIDI0MjAgaGFzIGEgc2luZ2xlIFBSQ00gbW9kdWxlIGZyb20gdGhlCisgKiBpbnRlcmNvbm5lY3QncyBwZXJzcGVjdGl2ZSwgaW50ZXJuYWxseSBpdCBkb2VzIGFwcGVhciB0byBoYXZlCisgKiBzZXBhcmF0ZSBQUk0gYW5kIENNIGNsb2NrZG9tYWlucy4gIFRoZSB1c3VhbCB0ZXN0IGNhc2UgaXMKKyAqIHN5c19jbGtvdXQvc3lzX2Nsa291dDIuCiAgKi8KIAogLyogVGhpcyBpcyBhbiBpbXBsaWNpdCBjbG9ja2RvbWFpbiAtIGl0IGlzIG5ldmVyIGRlZmluZWQgYXMgc3VjaCBpbiBUUk0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gd2t1cF9jbGtkbSA9IHsKIAkubmFtZQkJPSAid2t1cF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAid2t1cF9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAid2t1cF9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBwcm1fY2xrZG0gPSB7CisJLm5hbWUJCT0gInBybV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAid2t1cF9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY21fY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKIH07CiAKQEAgLTMxLDcgKzQ4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMjQyMF9jbGtkbSA9IHsKIAkubmFtZQkJPSAibXB1X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCkBAIC0zOSw3ICs1Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXZhMV8yNDIwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJpdmExX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJkc3BfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCkBAIC01Niw3ICs3Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLApAQCAtNjQsNyArODEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1kbV9jbGtkbSA9IHsKIAkubmFtZQkJPSAibWRtX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJtZG1fcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1kbV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDMwX0FVVE9TVEFURV9NRE1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCkBAIC04MSw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNwX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKQEAgLTg5LDcgKzEwNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZ2Z4XzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImdmeF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZ2Z4X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLApAQCAtOTcsNyArMTE0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC0xMDUsNyArMTIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC0xMTMsNyArMTMwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKQEAgLTEzMCw3ICsxNDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8zNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xMzgsNyArMTU1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBuZW9uX2Nsa2RtID0gewogCS5uYW1lCQk9ICJuZW9uX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJuZW9uX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJuZW9uX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xNDYsNyArMTYzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmEyX2Nsa2RtID0gewogCS5uYW1lCQk9ICJpdmEyX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJpdmEyX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJpdmEyX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xNTQsNyArMTcxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMzQzMGVzMV9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJnZnhfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCkBAIC0xNjIsMTAgKzE3OSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHNneF9jbGtkbSA9IHsKIAkubmFtZQkJPSAic2d4X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJzZ3hfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInNneF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogfTsKIAogLyoKQEAgLTE3Nyw3ICsxOTQsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGQyZF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZDJkX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0QyRF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTE4NSw3ICsyMDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTE5Myw3ICsyMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MNF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTIwMSw3ICsyMTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3NfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImRzc19wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTIwOSw3ICsyMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNhbV9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY2FtX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjYW1fcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNhbV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0yMTcsMjggKzIzNCw2MiBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHVzYmhvc3RfY2xrZG0gPSB7CiAJLm5hbWUJCT0gInVzYmhvc3RfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gInVzYmhvc3RfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInVzYmhvc3RfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfVVNCSE9TVF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHBlcl9jbGtkbSA9IHsKIAkubmFtZQkJPSAicGVyX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJwZXJfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInBlcl9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9QRVJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCisvKgorICogRGlzYWJsZSBodyBzdXBlcnZpc2VkIG1vZGUgZm9yIGVtdV9jbGtkbSwgYmVjYXVzZSBlbXVfcHdyZG0gaXMKKyAqIHN3aXRjaGVkIG9mIGV2ZW4gaWYgc2R0aSBpcyBpbiB1c2UKKyAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBlbXVfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImVtdV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZW11X3B3cmRtIiwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgQ0xLRE1fQ0FOX1NXU1VQLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImVtdV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gLyogQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgICovQ0xLRE1fQ0FOX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGwxX2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsMV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDFfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsMl9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDJfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGwyX3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDNfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsM19wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGw0X2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsNF9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDRfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsNV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGw1X3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKICNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCiAKIC8qCkBAIC0yNDcsMTQgKzI5OCwxNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgY2xrZG1fcHdyZG1fYXV0b2RlcHNbXSA9IHsKIAl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5wd3JkbQkgICA9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKIAl9LAogCXsKLQkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5wd3JkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9wd3JkbSIgfSwKIAkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiAJfSwKLQl7IE5VTEwgfQorCXsKKwkJLnB3cmRtCSAgID0geyAubmFtZSA9IE5VTEwgfSwKKwl9CiB9OwogCiAvKgpAQCAtMjY0LDYgKzMxNyw4IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpjbG9ja2RvbWFpbnNfb21hcFtdID0gewogCiAJJndrdXBfY2xrZG0sCisJJmNtX2Nsa2RtLAorCSZwcm1fY2xrZG0sCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAogCSZtcHVfMjQyMF9jbGtkbSwKQEAgLTI5Nyw2ICszNTIsMTEgQEAKIAkmdXNiaG9zdF9jbGtkbSwKIAkmcGVyX2Nsa2RtLAogCSZlbXVfY2xrZG0sCisJJmRwbGwxX2Nsa2RtLAorCSZkcGxsMl9jbGtkbSwKKwkmZHBsbDNfY2xrZG0sCisJJmRwbGw0X2Nsa2RtLAorCSZkcGxsNV9jbGtkbSwKICNlbmRpZgogCiAJTlVMTCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IDEwOThlY2YuLjI5N2EyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaApAQCAtMTEwLDM1ICsxMTAsNTYgQEAKICNkZWZpbmUgT01BUDI0WFhfRU5fREVTCQkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QxX0NPUkUgc3BlY2lmaWMgYml0cyAqLwotI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVMJCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDQJCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVAyNDIwX1NUX1dEVDMJCQkJKDEgPDwgMjgpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPCQkJCSgxIDw8IDI3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9GQUMJCQkJCSgxIDw8IDI1KQotI2RlZmluZSBPTUFQMjQyMF9TVF9FQUMJCQkJCSgxIDw8IDI0KQotI2RlZmluZSBPTUFQMjRYWF9TVF9IRFEJCQkJCSgxIDw8IDIzKQotI2RlZmluZSBPTUFQMjRYWF9TVF9JMkMyCQkJCSgxIDw8IDIwKQotI2RlZmluZSBPTUFQMjRYWF9TVF9JMkMxCQkJCSgxIDw8IDE5KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDIJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMQkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfRFNTCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfTUFTSwkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQ0X1NISUZUCQkJCTI5CisjZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDRfTUFTSwkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDI0MjBfU1RfV0RUM19TSElGVAkJCQkyOAorI2RlZmluZSBPTUFQMjQyMF9TVF9XRFQzX01BU0sJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPX1NISUZUCQkJCTI3CisjZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPX01BU0sJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0ZBQ19TSElGVAkJCQkyNQorI2RlZmluZSBPTUFQMjRYWF9TVF9GQUNfTUFTSwkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDI0MjBfU1RfRUFDX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAyNDIwX1NUX0VBQ19NQVNLCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQMjRYWF9TVF9IRFFfU0hJRlQJCQkJMjMKKyNkZWZpbmUgT01BUDI0WFhfU1RfSERRX01BU0sJCQkJKDEgPDwgMjMpCisjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzJfU0hJRlQJCQkJMjAKKyNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMl9NQVNLCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMjQyMF9TVF9JMkMxX1NISUZUCQkJCTE5CisjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzFfTUFTSwkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX01BU0sJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMjRYWF9TVF9EU1NfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9TVF9EU1NfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QyX0NPUkUgKi8KLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1A1CQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNAkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDMJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfU1NJCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDVfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNV9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNF9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNF9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQM19TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQM19NQVNLCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NTSV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NTSV9NQVNLCQkJCSgxIDw8IDEpCiAKIC8qIENNX0lETEVTVDNfQ09SRSAqLwogLyogMjQzMCBvbmx5ICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX1NEUkMJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0MzBfU1RfU0RSQ19NQVNLCQkJCSgxIDw8IDIpCiAKIC8qIENNX0lETEVTVDRfQ09SRSAqLwotI2RlZmluZSBPTUFQMjRYWF9TVF9QS0EJCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0FFUwkJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfUk5HCQkJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQMjRYWF9TVF9TSEEJCQkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0RFUwkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfUEtBX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDI0WFhfU1RfUEtBX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfQUVTX1NISUZUCQkJCTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfQUVTX01BU0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfUk5HX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfU0hBX1NISUZUCQkJCTEKKyNkZWZpbmUgT01BUDI0WFhfU1RfU0hBX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfREVTX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfREVTX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fQVVUT0lETEUxX0NPUkUgKi8KICNkZWZpbmUgT01BUDI0WFhfQVVUT19DQU0JCQkJKDEgPDwgMzEpCkBAIC0yNzUsMTEgKzI5NiwxNiBAQAogI2RlZmluZSBPTUFQMjRYWF9FTl8zMktTWU5DCQkJCSgxIDw8IDEpCiAKIC8qIENNX0lETEVTVF9XS1VQIHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0MzBfU1RfSUNSCQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9PTUFQQ1RSTAkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQxCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01QVV9XRFQJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjQzMF9TVF9JQ1JfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMjQzMF9TVF9JQ1JfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9PTUFQQ1RSTF9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDI0WFhfU1RfT01BUENUUkxfTUFTSwkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDFfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQxX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTVBVX1dEVF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfTVBVX1dEVF9NQVNLCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQ19TSElGVAkJCTEKKyNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQ19NQVNLCQkJKDEgPDwgMSkKIAogLyogQ01fQVVUT0lETEVfV0tVUCAqLwogI2RlZmluZSBPTUFQMjRYWF9BVVRPX09NQVBDVFJMCQkJCSgxIDw8IDUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAppbmRleCAyMTlmNWM4Li42ZjNmNWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKQEAgLTE4MywzMSArMTgzLDU4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0lETEVTVDFfQ09SRSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0lDUgkJCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzIJCQkJKDEgPDwgMjgpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTEyCQkJCSgxIDw8IDI3KQotI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMyCQkJCSgxIDw8IDI2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9NU1BSTwkJCQkoMSA8PCAyMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfSERRCQkJCQkoMSA8PCAyMikKLSNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRkFDCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAzNDMwRVMxX1NUX01BSUxCT1hFUwkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX09NQVBDVFJMCQkJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NETUEJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfU0RSQwkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9TU0kJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX01NQzNfU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9NTUMzX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfSUNSX1NISUZUCQkJCTI5CisjZGVmaW5lIE9NQVAzNDMwX1NUX0lDUl9NQVNLCQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9BRVMyX1NISUZUCQkJCTI4CisjZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzJfTUFTSwkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTJfU0hJRlQJCQkJMjcKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTJfTUFTSwkJCQkoMSA8PCAyNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfREVTMl9TSElGVAkJCQkyNgorI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMyX01BU0sJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01TUFJPX1NISUZUCQkJCTIzCisjZGVmaW5lIE9NQVAzNDMwX1NUX01TUFJPX01BU0sJCQkJKDEgPDwgMjMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0hEUV9TSElGVAkJCQkyMgorI2RlZmluZSBPTUFQMzQzMF9TVF9IRFFfTUFTSwkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRkFDX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9GQUNfTUFTSwkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9TU0lfSURMRV9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfU1NJX0lETEVfTUFTSwkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01BSUxCT1hFU19TSElGVAkJCTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUFJTEJPWEVTX01BU0sJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9PTUFQQ1RSTF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfU1RfT01BUENUUkxfTUFTSwkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NETUFfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMF9TVF9TRE1BX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0RSQ19TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NEUkNfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TU0lfU1REQllfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NTSV9TVERCWV9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMl9DT1JFICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1BLQQkJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMQkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9STkcJCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTExCQkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzEJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfUEtBX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDM0MzBfU1RfUEtBX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzFfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9STkdfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMF9TVF9STkdfTUFTSwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TSEExMV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTExX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfREVTMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzFfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QzX0NPUkUgKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCVExMX1NISUZUCQkJMgogI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0JUTExfTUFTSwkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0NQRUZVU0VfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0NQRUZVU0VfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFMV9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fTU1DMwkJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19NTUMzX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19JQ1IJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fSUNSX1NISUZUCQkJMjkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19BRVMyCQkJCSgxIDw8IDI4KQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0FFUzJfU0hJRlQJCQkyOAogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1NIQTEyCQkJCSgxIDw8IDI3KQpAQCAtMjc2LDYgKzMwMyw5IEBACiAjZGVmaW5lIE9NQVAzNDMwX0FVVE9fREVTMV9TSElGVAkJCTAKIAogLyogQ01fQVVUT0lETEUzX0NPUkUgKi8KKyNkZWZpbmUJT01BUDM0MzBFUzJfQVVUT19VU0JIT1NUCQkJKDEgPDwgMCkKKyNkZWZpbmUJT01BUDM0MzBFUzJfQVVUT19VU0JIT1NUX1NISUZUCQkJMAorI2RlZmluZQlPTUFQMzQzMEVTMl9BVVRPX1VTQlRMTAkJCQkoMSA8PCAyKQogI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTQlRMTF9TSElGVAkJCTIKICNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0JUTExfTUFTSwkJCSgxIDw8IDIpCiAKQEAgLTMzMiw4ICszNjIsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYX01BU0sJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9TR1ggKi8KLSNkZWZpbmUgT01BUDM0MzBFUzJfRU5fU0dYX1NISUZUCQkJMQotI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9TR1hfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVAkJMQorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9NQVNLCQkoMSA8PCAxKQorCisvKiBDTV9JQ0xLRU5fU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX01BU0sJCSgxIDw8IDApCiAKIC8qIENNX0NMS1NFTF9TR1ggKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9TSElGVAkJCTAKQEAgLTM0OSw2ICszODMsNyBAQAogCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQJCQk5CisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfTUFTSwkJCSgxIDw8IDkpCiAKIC8qIENNX0lDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfRU5fV0RUMQkJCQkoMSA8PCA0KQpAQCAtMzU3LDExICszOTIsMTggQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVAkJCTIKIAogLyogQ01fSURMRVNUX1dLVVAgc3BlY2lmaWMgYml0cyAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQyCQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDEJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNT0NQX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNT0NQX01BU0sJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQyX1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMl9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDFfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQxX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQ19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQ19NQVNLCQkJKDEgPDwgMikKIAogLyogQ01fQVVUT0lETEVfV0tVUCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTSU1PQ1AJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0lNT0NQX1NISUZUCQkJOQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDIJCQkJKDEgPDwgNSkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQyX1NISUZUCQkJNQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDEJCQkJKDEgPDwgNCkKQEAgLTQyNiw2ICs0NjgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMl9DS0dFTiAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNX0NMS19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNJTV9DTEtfTUFTSwkJCSgxIDw8IDIpCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1NUXzEyME1fQ0xLX1NISUZUCQkJMQogI2RlZmluZSBPTUFQMzQzMEVTMl9TVF8xMjBNX0NMS19NQVNLCQkJKDEgPDwgMSkKICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfU0hJRlQJCTAKQEAgLTQ0OSw4ICs0OTMsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSwkJCSgweDdmZiA8PCAxNikKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0RJVl9TSElGVAkJCTgKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLCQkJKDB4N2YgPDwgOCkKLSNkZWZpbmUgT01BUDM0MzBfU09VUkNFXzU0TQkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNDhNCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV85Nk1fU0hJRlQJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSwkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE1fU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSwkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV80OE1fU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSwkJCSgxIDw8IDMpCiAKIC8qIENNX0NMS1NFTDJfUExMICovCiAjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfU0hJRlQJCQk4CkBAIC00OTMsNyArNTQxLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZUCQkwCiAKIC8qIENNX0lETEVTVF9EU1MgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfRFNTCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9EU1NfSURMRV9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfRFNTX0lETEVfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0RTU19TVERCWV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfRFNTX1NUREJZX01BU0sJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9EU1NfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0RTU19NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFX0RTUyAqLwogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RTUwkJCQkoMSA8PCAwKQpAQCAtNTE2LDYgKzU2OSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTU19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX0NBTSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX0NTSTIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fQ1NJMl9TSElGVAkJCQkxCiAKIC8qIENNX0lDTEtFTl9DQU0gc3BlY2lmaWMgYml0cyAqLwogCkBAIC01NDUsMTAgKzYwMCwxNCBAQAogLyogQ01fSUNMS0VOX1BFUiBzcGVjaWZpYyBiaXRzICovCiAKIC8qIENNX0lETEVTVF9QRVIgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMwkJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A0CQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMwkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDIJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUM19TSElGVAkJCQkxMgorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQzX01BU0sJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A0X01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AzX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDNfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMl9NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFX1BFUiAqLwogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU82CQkJCSgxIDw8IDE3KQpAQCAtNjc2LDYgKzczNSwxMCBAQAogI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1RfVVNCSE9TVCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0JIT1NUX0lETEVfU0hJRlQJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCSE9TVF9JRExFX01BU0sJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQkhPU1RfU1REQllfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCSE9TVF9TVERCWV9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9BVVRPSURMRV9VU0JIT1NUICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9TSElGVAkJCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggY2UwM2ZhNy4uZDZiNGIyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI4LDEzICsyOCwxMjEgQEAKICNpbmNsdWRlIDxtYWNoL2VhYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQotI2RlZmluZSBPTUFQMl9NQk9YX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfTUFJTEJPWF9CQVNFKQorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMl9NT0RVTEUpCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2FtX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX01CT1hfQkFTRSwKLQkJLmVuZAkJPSBPTUFQMl9NQk9YX0JBU0UgKyAweDExZiwKKwkJLnN0YXJ0CQk9IE9NQVAyNFhYX0NBTUVSQV9CQVNFLAorCQkuZW5kCQk9IE9NQVAyNFhYX0NBTUVSQV9CQVNFICsgMHhmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8yNFhYX0NBTV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2NhbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAyNHh4Y2FtIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNhbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNhbV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9jYW1fZGV2aWNlKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAzX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM2lzcF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ0JVRkZfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ0JVRkZfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ0NQMl9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9DQ1AyX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NDRENfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ0NEQ19FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9ISVNUX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0hJU1RfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfSDNBX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0gzQV9FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9QUkVWX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX1BSRVZfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfUkVTWl9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9SRVNaX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX1NCTF9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9TQkxfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ1NJMkFfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ1NJMkFfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9DU0kyUEhZX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzM0WFhfQ0FNX0lSUSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzaXNwX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDNpc3AiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDNpc3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwM2lzcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDNpc3BfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLX01PRFVMRSkKKworI2RlZmluZSBNQk9YX1JFR19TSVpFCTB4MTIwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWJveF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UsCisJCS5lbmQJCT0gT01BUDI0WFhfTUFJTEJPWF9CQVNFICsgTUJPWF9SRUdfU0laRSAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKQEAgLTQ3LDIwICsxNTUsNDAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM19tYm94X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNFhYX01BSUxCT1hfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzRYWF9NQUlMQk9YX0JBU0UgKyBNQk9YX1JFR19TSVpFIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzI0WFhfTUFJTF9VMF9NUFUsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWJveF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm1haWxib3giLAorCS5uYW1lCQk9ICJvbWFwMi1tYWlsYm94IiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1ib3hfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtYm94X3Jlc291cmNlcywKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKQogeworCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQltYm94X2RldmljZS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMl9tYm94X3Jlc291cmNlcyk7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDJfbWJveF9yZXNvdXJjZXM7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0MzAoKSkgeworCQltYm94X2RldmljZS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwM19tYm94X3Jlc291cmNlcyk7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDNfbWJveF9yZXNvdXJjZXM7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCIlczogcGxhdGZvcm0gbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWJveF9kZXZpY2UpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKSB7IH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19PTUFQX01CT1hfRldLICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX1NUSSkKIApAQCAtMzQ4LDExICs0NzYsMTIgQEAKIAkJfQogCiAJCWR1bW15X3BkZXYuaWQgPSBpOwotCQlpY2xrID0gY2xrX2dldChkZXYsICJtbWNoc19pY2siKTsKKwkJZGV2X3NldF9uYW1lKCZkdW1teV9wZGV2LmRldiwgIm1tY2ktb21hcC1ocy4lZCIsIGkpOworCQlpY2xrID0gY2xrX2dldChkZXYsICJpY2siKTsKIAkJaWYgKGljbGsgJiYgY2xrX2VuYWJsZShpY2xrKSkKIAkJCWljbGsgPSBOVUxMOwogCi0JCWZjbGsgPSBjbGtfZ2V0KGRldiwgIm1tY2hzX2ZjayIpOworCQlmY2xrID0gY2xrX2dldChkZXYsICJmY2siKTsKIAkJaWYgKGZjbGsgJiYgY2xrX2VuYWJsZShmY2xrKSkKIAkJCWZjbGsgPSBOVUxMOwogCkBAIC01MDYsNiArNjM1LDcgQEAKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwogCW9tYXBfaHNtbWNfcmVzZXQoKTsKKwlvbWFwX2luaXRfY2FtZXJhKCk7CiAJb21hcF9pbml0X21ib3goKTsKIAlvbWFwX2luaXRfbWNzcGkoKTsKIAlvbWFwX2hkcV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggYjUyYTAyZi4uMzRiNTkxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMjE3LDggKzIxNywxMyBAQAogCQlvbWFwX2NoaXAub2MgPSBDSElQX0lTX09NQVAzNDMwOwogCQlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApCiAJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzQzMEVTMTsKLQkJZWxzZSBpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJZWxzZSBpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzAgJiYKKwkJCSBvbWFwX3JldigpIDw9IE9NQVAzNDMwX1JFVl9FUzJfMSkKIAkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMyOworCQllbHNlIGlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzNfMCkKKwkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMzXzA7CisJCWVsc2UgaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTM18xKQorCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzNfMTsKIAl9IGVsc2UgewogCQlwcl9lcnIoIlVuaW5pdGlhbGl6ZWQgb21hcF9jaGlwLCBwbGVhc2UgZml4IVxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDVlYTY0ZjkuLjkxNmZjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+Ci0KLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCiAKQEAgLTE5NSwxMiArMTk1LDEyIEBACiAJb21hcGZiX3Jlc2VydmVfc2RyYW0oKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faHcodm9pZCkKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCkKIHsKIAlvbWFwMl9tdXhfaW5pdCgpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOwotCW9tYXAyX2luaXRfbWVtb3J5KCk7CisJb21hcDJfc2RyY19pbml0KHNwKTsKIAlncG1jX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggMzJiN2FmMy4uZmQ1YjhhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogTWFpbGJveCByZXNlcnZhdGlvbiBtb2R1bGVzIGZvciBPTUFQMgorICogTWFpbGJveCByZXNlcnZhdGlvbiBtb2R1bGVzIGZvciBPTUFQMi8zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICogV3JpdHRlbiBieTogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgotICogICAgICAgIGFuZCAgUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKiAgICAgICAgYW5kICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDQwICsxOCwyMiBAQAogI2luY2x1ZGUgPG1hY2gvbWFpbGJveC5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi0jZGVmaW5lIE1BSUxCT1hfUkVWSVNJT04JCTB4MDAKLSNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MTAKLSNkZWZpbmUgTUFJTEJPWF9TWVNTVEFUVVMJCTB4MTQKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzAJCTB4NDAKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzEJCTB4NDQKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzIJCTB4NDgKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzMJCTB4NGMKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzQJCTB4NTAKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzUJCTB4NTQKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzAJCTB4ODAKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzEJCTB4ODQKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzIJCTB4ODgKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzMJCTB4OGMKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzQJCTB4OTAKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzUJCTB4OTQKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMAkJMHhjMAotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU18xCQkweGM0Ci0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzIJCTB4YzgKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMwkJMHhjYwotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU180CQkweGQwCi0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzUJCTB4ZDQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMAkJMHgxMDAKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMAkJMHgxMDQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMQkJMHgxMDgKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMQkJMHgxMGMKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMgkJMHgxMTAKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMgkJMHgxMTQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMwkJMHgxMTgKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMwkJMHgxMWMKKyNkZWZpbmUgTUFJTEJPWF9SRVZJU0lPTgkJMHgwMDAKKyNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MDEwCisjZGVmaW5lIE1BSUxCT1hfU1lTU1RBVFVTCQkweDAxNAorI2RlZmluZSBNQUlMQk9YX01FU1NBR0UobSkJCSgweDA0MCArIDQgKiAobSkpCisjZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVUyhtKQkJKDB4MDgwICsgNCAqIChtKSkKKyNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVMobSkJCSgweDBjMCArIDQgKiAobSkpCisjZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTKHUpCQkoMHgxMDAgKyA4ICogKHUpKQorI2RlZmluZSBNQUlMQk9YX0lSUUVOQUJMRSh1KQkJKDB4MTA0ICsgOCAqICh1KSkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJveF9iYXNlOworI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0codSkJCSgxIDw8ICgyICogKHUpKSkKKyNkZWZpbmUgTUFJTEJPWF9JUlFfTk9URlVMTCh1KQkJKDEgPDwgKDIgKiAodSkgKyAxKSkKIAotI2RlZmluZSBNQUlMQk9YX0lSUV9OT1RGVUxMKG4pCQkoMSA8PCAoMiAqIChuKSArIDEpKQotI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0cobikJCSgxIDw8ICgyICogKG4pKSkKKyNkZWZpbmUgTUJPWF9SRUdfU0laRQkJCTB4MTIwCisjZGVmaW5lIE1CT1hfTlJfUkVHUwkJCShNQk9YX1JFR19TSVpFIC8gc2l6ZW9mKHUzMikpCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1ib3hfYmFzZTsKIAogc3RydWN0IG9tYXBfbWJveDJfZmlmbyB7CiAJdW5zaWduZWQgbG9uZyBtc2c7CkBAIC02Niw2ICs0OCw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFzdGF0dXM7CiAJdTMyIG5ld21zZ19iaXQ7CiAJdTMyIG5vdGZ1bGxfYml0OworCXUzMiBjdHhbTUJPWF9OUl9SRUdTXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICptYm94X2lja19oYW5kbGU7CkBAIC03MywxNCArNTYsMTQgQEAKIHN0YXRpYyB2b2lkIG9tYXAyX21ib3hfZW5hYmxlX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LAogCQkJCSAgb21hcF9tYm94X3R5cGVfdCBpcnEpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYm94X3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYm94X3JlYWRfcmVnKHNpemVfdCBvZnMpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKG1ib3hfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG1ib3hfYmFzZSArIG9mcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGlubGluZSB2b2lkIG1ib3hfd3JpdGVfcmVnKHUzMiB2YWwsIHNpemVfdCBvZnMpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgbWJveF9iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBtYm94X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBNYWlsYm94IEgvVyBwcmVwYXJhdGlvbnMgKi8KQEAgLTk1LDYgKzc4LDkgQEAKIAl9CiAJY2xrX2VuYWJsZShtYm94X2lja19oYW5kbGUpOwogCisJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CisJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKKwogCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7CiAJbCB8PSAweDAwMDAwMDExOwpAQCAtMTgzLDYgKzE2OSwzMiBAQAogCXJldHVybiAoZW5hYmxlICYgc3RhdHVzICYgYml0KTsKIH0KIAorc3RhdGljIHZvaWQgb21hcDJfbWJveF9zYXZlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWludCBpOworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSBtYm94LT5wcml2OworCisJZm9yIChpID0gMDsgaSA8IE1CT1hfTlJfUkVHUzsgaSsrKSB7CisJCXAtPmN0eFtpXSA9IG1ib3hfcmVhZF9yZWcoaSAqIHNpemVvZih1MzIpKTsKKworCQlkZXZfZGJnKG1ib3gtPmRldiwgIiVzOiBbJTAyeF0gJTA4eFxuIiwgX19mdW5jX18sCisJCQlpLCBwLT5jdHhbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgb21hcDJfbWJveF9yZXN0b3JlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWludCBpOworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSBtYm94LT5wcml2OworCisJZm9yIChpID0gMDsgaSA8IE1CT1hfTlJfUkVHUzsgaSsrKSB7CisJCW1ib3hfd3JpdGVfcmVnKHAtPmN0eFtpXSwgaSAqIHNpemVvZih1MzIpKTsKKworCQlkZXZfZGJnKG1ib3gtPmRldiwgIiVzOiBbJTAyeF0gJTA4eFxuIiwgX19mdW5jX18sCisJCQlpLCBwLT5jdHhbaV0pOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3hfb3BzIG9tYXAyX21ib3hfb3BzID0gewogCS50eXBlCQk9IE9NQVBfTUJPWF9UWVBFMiwKIAkuc3RhcnR1cAk9IG9tYXAyX21ib3hfc3RhcnR1cCwKQEAgLTE5NSw2ICsyMDcsOCBAQAogCS5kaXNhYmxlX2lycQk9IG9tYXAyX21ib3hfZGlzYWJsZV9pcnEsCiAJLmFja19pcnEJPSBvbWFwMl9tYm94X2Fja19pcnEsCiAJLmlzX2lycQkJPSBvbWFwMl9tYm94X2lzX2lycSwKKwkuc2F2ZV9jdHgJPSBvbWFwMl9tYm94X3NhdmVfY3R4LAorCS5yZXN0b3JlX2N0eAk9IG9tYXAyX21ib3hfcmVzdG9yZV9jdHgsCiB9OwogCiAvKgpAQCAtMjA5LDE1ICsyMjMsMTUgQEAKIC8qIERTUCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgb21hcDJfbWJveF9kc3BfcHJpdiA9IHsKIAkudHhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMCwKLQkJLmZpZm9fc3RhdAk9IE1BSUxCT1hfRklGT1NUQVRVU18wLAorCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgwKSwKKwkJLmZpZm9fc3RhdAk9IE1BSUxCT1hfRklGT1NUQVRVUygwKSwKIAl9LAogCS5yeF9maWZvID0gewotCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRV8xLAotCQkubXNnX3N0YXQJPSBNQUlMQk9YX01TR1NUQVRVU18xLAorCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgxKSwKKwkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVMoMSksCiAJfSwKLQkuaXJxZW5hYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEVfMCwKLQkuaXJxc3RhdHVzCT0gTUFJTEJPWF9JUlFTVEFUVVNfMCwKKwkuaXJxZW5hYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEUoMCksCisJLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTKDApLAogCS5ub3RmdWxsX2JpdAk9IE1BSUxCT1hfSVJRX05PVEZVTEwoMCksCiAJLm5ld21zZ19iaXQJPSBNQUlMQk9YX0lSUV9ORVdNU0coMSksCiB9OwpAQCAtMjI5LDE4ICsyNDMsMTggQEAKIH07CiBFWFBPUlRfU1lNQk9MKG1ib3hfZHNwX2luZm8pOwogCi0vKiBJVkEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKSAvKiBJVkEgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2IG9tYXAyX21ib3hfaXZhX3ByaXYgPSB7CiAJLnR4X2ZpZm8gPSB7Ci0JCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFXzIsCi0JCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVNfMiwKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMiksCisJCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVMoMiksCiAJfSwKIAkucnhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMywKLQkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVNfMywKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMyksCisJCS5tc2dfc3RhdAk9IE1BSUxCT1hfTVNHU1RBVFVTKDMpLAogCX0sCi0JLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFXzMsCi0JLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTXzMsCisJLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFKDMpLAorCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVUygzKSwKIAkubm90ZnVsbF9iaXQJPSBNQUlMQk9YX0lSUV9OT1RGVUxMKDIpLAogCS5uZXdtc2dfYml0CT0gTUFJTEJPWF9JUlFfTkVXTVNHKDMpLAogfTsKQEAgLTI1MCwxNyArMjY0LDEyIEBACiAJLm9wcwk9ICZvbWFwMl9tYm94X29wcywKIAkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAogfTsKKyNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMl9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbnVtYmVyIG9mIHJlc291cmNlczogJWRcbiIsCi0JCQlwZGV2LT5udW1fcmVzb3VyY2VzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWludCByZXQ7CiAKIAkvKiBNQk9YIGJhc2UgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMjY4LDQyICsyNzcsNjEgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBtZW0gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWJveF9iYXNlID0gcmVzLT5zdGFydDsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJaWYgKCFtYm94X2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCi0JLyogRFNQIElSUSAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0JaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJLyogRFNQIG9yIElWQTIgSVJRICovCisJbWJveF9kc3BfaW5mby5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChtYm94X2RzcF9pbmZvLmlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZHNwOwogCX0KLQltYm94X2RzcF9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOworCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9kc3BfaW5mbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHNwOwogCi0JLyogSVZBIElSUSAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7Ci0JaWYgKHVubGlrZWx5KCFyZXMpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgaXJxIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkgLyogSVZBICovCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCS8qIElWQSBJUlEgKi8KKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAxKTsKKwkJaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnJfaXZhMTsKKwkJfQorCQltYm94X2l2YV9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CisJCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9pdmFfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9pdmExOwogCX0KLQltYm94X2l2YV9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CisjZW5kaWYKKwlyZXR1cm4gMDsKIAotCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmbWJveF9pdmFfaW5mbyk7Ci0KK2Vycl9pdmExOgorCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKK2Vycl9kc3A6CisJaW91bm1hcChtYm94X2Jhc2UpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAyX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKwlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9pdmFfaW5mbyk7CisjZW5kaWYKIAlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7CisJaW91bm1hcChtYm94X2Jhc2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMl9tYm94X2RyaXZlciA9IHsKIAkucHJvYmUgPSBvbWFwMl9tYm94X3Byb2JlLAotCS5yZW1vdmUgPSBvbWFwMl9tYm94X3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aob21hcDJfbWJveF9yZW1vdmUpLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm1haWxib3giLAorCQkubmFtZSA9ICJvbWFwMi1tYWlsYm94IiwKIAl9LAogfTsKIApAQCAtMzIwLDQgKzM0OCw3IEBACiBtb2R1bGVfaW5pdChvbWFwMl9tYm94X2luaXQpOwogbW9kdWxlX2V4aXQob21hcDJfbWJveF9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvbWFwIG1haWxib3g6IG9tYXAyLzMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9ucyIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPiwgUGF1bCBNdW5kdCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwMi1tYWlsYm94Iik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKaW5kZXggYTllNjMxZi4uYTVjMGYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9tY2JzcC5oPgogCi1jb25zdCBjaGFyICpjbGtfbmFtZXNbXSA9IHsgIm1jYnNwX2ljayIsICJtY2JzcF9mY2siIH07Ci0KIHN0YXRpYyB2b2lkIG9tYXAyX21jYnNwMl9tdXhfc2V0dXAodm9pZCkKIHsKIAlvbWFwX2NmZ19yZWcoWTE1XzI0WFhfTUNCU1AyX0NMS1gpOwpAQCAtNTcsOCArNTUsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCkBAIC02Nyw4ICs2Myw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNDIwX21jYnNwX3BkYXRhKQpAQCAtODYsOCArODAsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCkBAIC05Niw4ICs4OCw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDNfQkFTRSwKQEAgLTEwNiw4ICs5Niw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDRfQkFTRSwKQEAgLTExNiw4ICsxMDQsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0MzBfTUNCU1A1X0JBU0UsCkBAIC0xMjYsOCArMTEyLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogfTsKICNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCkBAIC0xNDUsOCArMTI5LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLApAQCAtMTU1LDggKzEzNyw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDNfQkFTRSwKQEAgLTE2NSw4ICsxNDUsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1A0X0JBU0UsCkBAIC0xNzUsOCArMTUzLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNV9CQVNFLApAQCAtMTg1LDggKzE2MSw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAzNHh4X21jYnNwX3BkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiM2RiODAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCi0gKgotICogSW50ZXJmYWNlIGZvciBtZW1vcnkgdGltaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBPTUFQMjRYWAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCi0gKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCi0gKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBBUkNIX0FSTV9NQUNIX09NQVAyX01FTU9SWV9ICi0jZGVmaW5lIEFSQ0hfQVJNX01BQ0hfT01BUDJfTUVNT1JZX0gKLQotLyogTWVtb3J5IHRpbWluZ3MgKi8KLSNkZWZpbmUgTV9ERFIJCTEKLSNkZWZpbmUgTV9MT0NLX0NUUkwJKDEgPDwgMikKLSNkZWZpbmUgTV9VTkxPQ0sJMAotI2RlZmluZSBNX0xPQ0sJCTEKLQotc3RydWN0IG1lbW9yeV90aW1pbmdzIHsKLQl1MzIgbV90eXBlOwkJLyogZGRyID0gMSwgc2RyID0gMCAqLwotCXUzMiBkbGxfbW9kZTsJCS8qIHVzZSBsb2NrIG1vZGUgPSAxLCB1bmxvY2sgbW9kZSA9IDAgKi8KLQl1MzIgc2xvd19kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3Igc2xvdyBzcGVlZCAqLwotCXUzMiBmYXN0X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBmYXN0IHNwZWVkICovCi0JdTMyIGJhc2VfY3M7CQkvKiBiYXNlIGNoaXAgc2VsZWN0IHRvIHVzZSBmb3IgY2FsY3VsYXRpb25zICovCi19OwotCi1leHRlcm4gdm9pZCBvbWFwMl9pbml0X21lbW9yeV9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOwotZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwodm9pZCk7Ci1leHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCh2b2lkKTsKLWV4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF90eXBlKHZvaWQpOwotdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCk7Ci11MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpOwotdm9pZCBfX2luaXQgb21hcDJfaW5pdF9tZW1vcnkodm9pZCk7Ci12b2lkIF9faW5pdCBncG1jX2luaXQodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCmluZGV4IDQzN2Y1MjAuLmRjNDBiM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CkBAIC00NCw2ICs0NSw3IEBACiAjZGVmaW5lIFZNTUMyXzMxNVYJCTB4MGMKICNkZWZpbmUgVk1NQzJfMzAwVgkJMHgwYgogI2RlZmluZSBWTU1DMl8yODVWCQkweDBhCisjZGVmaW5lIFZNTUMyXzI4MFYJCTB4MDkKICNkZWZpbmUgVk1NQzJfMjYwVgkJMHgwOAogI2RlZmluZSBWTU1DMl8xODVWCQkweDA2CiAjZGVmaW5lIFZNTUMyX0RFRElDQVRFRAkJMHgyRQpAQCAtNTksOCArNjEsOCBAQAogCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhCSptbWM7CiAJdTgJCXR3bF92bW1jX2Rldl9ncnA7CiAJdTgJCXR3bF9tbWNfZGVkaWNhdGVkOwotCWNoYXIJCW5hbWVbSFNNTUNfTkFNRV9MRU5dOwotfSBoc21tY1tdID0geworCWNoYXIJCW5hbWVbSFNNTUNfTkFNRV9MRU4gKyAxXTsKK30gaHNtbWNbT01BUDM0WFhfTlJfTU1DXSA9IHsKIAl7CiAJCS50d2xfdm1tY19kZXZfZ3JwCQk9IFZNTUMxX0RFVl9HUlAsCiAJCS50d2xfbW1jX2RlZGljYXRlZAkJPSBWTU1DMV9ERURJQ0FURUQsCkBAIC05OCw2ICsxMDAsMTQgQEAKIAlyZXR1cm4gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5ncGlvX3dwKTsKIH0KIAorc3RhdGljIGludCB0d2xfbW1jX2dldF9jb3Zlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBOT1RFOiBhc3N1bWVzIGNhcmQgZGV0ZWN0IHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCisJcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworfQorCiAvKgogICogTU1DIFNsb3QgSW5pdGlhbGl6YXRpb24uCiAgKi8KQEAgLTE2Niw2NiArMTc2LDg1IEBACiAvKgogICogU2V0cyB0aGUgTU1DIHZvbHRhZ2UgaW4gdHdsNDAzMAogICovCisKKyNkZWZpbmUgTU1DMV9PQ1IJKE1NQ19WRERfMTY1XzE5NSBcCisJCXxNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8TU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyKQorI2RlZmluZSBNTUMyX09DUgkoTU1DX1ZERF8xNjVfMTk1IFwKKwkJfE1NQ19WRERfMjVfMjZ8TU1DX1ZERF8yNl8yN3xNTUNfVkREXzI3XzI4IFwKKwkJfE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHxNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIpCisKIHN0YXRpYyBpbnQgdHdsX21tY19zZXRfdm9sdGFnZShzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjLCBpbnQgdmRkKQogewogCWludCByZXQ7Ci0JdTggdm1tYywgZGV2X2dycF92YWw7CisJdTggdm1tYyA9IDAsIGRldl9ncnBfdmFsOwogCi0Jc3dpdGNoICgxIDw8IHZkZCkgewotCWNhc2UgTU1DX1ZERF8zNV8zNjoKLQljYXNlIE1NQ19WRERfMzRfMzU6Ci0JY2FzZSBNTUNfVkREXzMzXzM0OgotCWNhc2UgTU1DX1ZERF8zMl8zMzoKLQljYXNlIE1NQ19WRERfMzFfMzI6Ci0JY2FzZSBNTUNfVkREXzMwXzMxOgotCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQotCQkJdm1tYyA9IFZNTUMxXzMxNVY7Ci0JCWVsc2UKLQkJCXZtbWMgPSBWTU1DMl8zMTVWOwotCQlicmVhazsKLQljYXNlIE1NQ19WRERfMjlfMzA6Ci0JCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCi0JCQl2bW1jID0gVk1NQzFfMzE1VjsKLQkJZWxzZQotCQkJdm1tYyA9IFZNTUMyXzMwMFY7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1ZERF8yN18yODoKLQljYXNlIE1NQ19WRERfMjZfMjc6Ci0JCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCi0JCQl2bW1jID0gVk1NQzFfMjg1VjsKLQkJZWxzZQotCQkJdm1tYyA9IFZNTUMyXzI4NVY7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1ZERF8yNV8yNjoKLQljYXNlIE1NQ19WRERfMjRfMjU6Ci0JY2FzZSBNTUNfVkREXzIzXzI0OgotCWNhc2UgTU1DX1ZERF8yMl8yMzoKLQljYXNlIE1NQ19WRERfMjFfMjI6Ci0JY2FzZSBNTUNfVkREXzIwXzIxOgotCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQotCQkJdm1tYyA9IFZNTUMxXzI4NVY7Ci0JCWVsc2UKLQkJCXZtbWMgPSBWTU1DMl8yNjBWOwotCQlicmVhazsKLQljYXNlIE1NQ19WRERfMTY1XzE5NToKLQkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKKwlpZiAoIXZkZCkKKwkJZ290byBkb2l0OworCisJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkgeworCQkvKiBWTU1DMTogIG1heCAyMjAgbUEuICBBbmQgZm9yIDgtYml0IG1vZGUsCisJCSAqIFZTSU06ICBtYXggNTAgbUEKKwkJICovCisJCXN3aXRjaCAoMSA8PCB2ZGQpIHsKKwkJY2FzZSBNTUNfVkREXzE2NV8xOTU6CiAJCQl2bW1jID0gVk1NQzFfMTg1VjsKLQkJZWxzZQorCQkJLyogYW5kIFZTSU1fMTgwViAqLworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yOF8yOToKKwkJCXZtbWMgPSBWTU1DMV8yODVWOworCQkJLyogYW5kIFZTSU1fMjgwViAqLworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yOV8zMDoKKwkJY2FzZSBNTUNfVkREXzMwXzMxOgorCQkJdm1tYyA9IFZNTUMxXzMwMFY7CisJCQkvKiBhbmQgVlNJTV8zMDBWICovCisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzMxXzMyOgorCQkJdm1tYyA9IFZNTUMxXzMxNVY7CisJCQkvKiBlcnJvciBpZiBWU0lNIG5lZWRlZCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMl9ERVZfR1JQKSB7CisJCS8qIFZNTUMyOiAgbWF4IDEwMCBtQSAqLworCQlzd2l0Y2ggKDEgPDwgdmRkKSB7CisJCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgogCQkJdm1tYyA9IFZNTUMyXzE4NVY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXZtbWMgPSAwOwotCQlicmVhazsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjVfMjY6CisJCWNhc2UgTU1DX1ZERF8yNl8yNzoKKwkJCXZtbWMgPSBWTU1DMl8yNjBWOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yN18yODoKKwkJCXZtbWMgPSBWTU1DMl8yODBWOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yOF8yOToKKwkJCXZtbWMgPSBWTU1DMl8yODVWOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yOV8zMDoKKwkJY2FzZSBNTUNfVkREXzMwXzMxOgorCQkJdm1tYyA9IFZNTUMyXzMwMFY7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzMxXzMyOgorCQkJdm1tYyA9IFZNTUMyXzMxNVY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHZtbWMpCitkb2l0OgorCWlmICh2ZGQpCiAJCWRldl9ncnBfdmFsID0gVk1NQ19ERVZfR1JQX1AxOwkvKiBQb3dlciB1cCAqLwogCWVsc2UKIAkJZGV2X2dycF92YWwgPSBMRE9fQ0xSOwkJLyogUG93ZXIgZG93biAqLwogCiAJcmV0ID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsCiAJCQkJCWRldl9ncnBfdmFsLCBjLT50d2xfdm1tY19kZXZfZ3JwKTsKLQlpZiAocmV0KQorCWlmIChyZXQgfHwgIXZkZCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLApAQCAtMjQyLDYgKzI3MSwxNCBAQAogCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSAmaHNtbWNbMF07CiAJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAorCS8qCisJICogQXNzdW1lIHdlIHBvd2VyIGJvdGggT01BUCBWTU1DMSAoZm9yIENNRCwgQ0xLLCBEQVQwLi4zKSBhbmQgdGhlCisJICogY2FyZCB1c2luZyB0aGUgc2FtZSBUV0wgVk1NQzEgc3VwcGx5IChoc21tY1swXSk7IE9NQVAgaGFzIGJvdGgKKwkgKiAxLjhWIGFuZCAzLjBWIG1vZGVzLCBjb250cm9sbGVkIGJ5IHRoZSBQQklBUyByZWdpc3Rlci4KKwkgKgorCSAqIEluIDgtYml0IG1vZGVzLCBPTUFQIFZNTUMxQSAoZm9yIERBVDQuLjcpIG5lZWRzIGEgc3VwcGx5LCB3aGljaAorCSAqIGlzIG1vc3QgbmF0dXJhbGx5IFRXTCBWU0lNOyB0aG9zZSBwaW5zIGFsc28gdXNlIFBCSUFTLgorCSAqLwogCWlmIChwb3dlcl9vbikgewogCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKIAkJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxKTsKQEAgLTI5OCw2ICszMzUsMTIgQEAKIAlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzFdOwogCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKKwkvKgorCSAqIEFzc3VtZSBUV0wgVk1NQzIgKGhzbW1jWzFdKSBpcyB1c2VkIG9ubHkgdG8gcG93ZXIgdGhlIGNhcmQgLi4uIE9NQVAKKwkgKiBWRERTIGlzIHVzZWQgdG8gcG93ZXIgdGhlIHBpbnMsIG9wdGlvbmFsbHkgd2l0aCBhIHRyYW5zY2VpdmVyIHRvCisJICogc3VwcG9ydCBjYXJkcyB1c2luZyB2b2x0YWdlcyBvdGhlciB0aGFuIFZERFMgKDEuOFYgbm9taW5hbCkuICBXaGVuIGEKKwkgKiB0cmFuc2NlaXZlciBpcyB1c2VkLCBEQVQzLi43IGFyZSBtdXhlZCBhcyB0cmFuc2NlaXZlciBjb250cm9sIHBpbnMuCisJICovCiAJaWYgKHBvd2VyX29uKSB7CiAJCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKSB7CiAJCQl1MzIgcmVnOwpAQCAtMzE0LDYgKzM1NywxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdHdsX21tYzNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKKwkJaW50IHZkZCkKK3sKKwkvKgorCSAqIEFzc3VtZSBNTUMzIGhhcyBzZWxmLXBvd2VyZWQgZGV2aWNlIGNvbm5lY3RlZCwgZm9yIGV4YW1wbGUgb24tYm9hcmQKKwkgKiBjaGlwIHdpdGggZXh0ZXJuYWwgcG93ZXIgc291cmNlLgorCSAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmhzbW1jX2RhdGFbT01BUDM0WFhfTlJfTU1DXSBfX2luaXRkYXRhOwogCiB2b2lkIF9faW5pdCB0d2w0MDMwX21tY19pbml0KHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmNvbnRyb2xsZXJzKQpAQCAtMzQ5LDEzICs0MDIsMTMgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCXNwcmludGYodHdsLT5uYW1lLCAibW1jJWlzbG90JWkiLCBjLT5tbWMsIDEpOworCQlpZiAoYy0+bmFtZSkKKwkJCXN0cm5jcHkodHdsLT5uYW1lLCBjLT5uYW1lLCBIU01NQ19OQU1FX0xFTik7CisJCWVsc2UKKwkJCXNucHJpbnRmKHR3bC0+bmFtZSwgQVJSQVlfU0laRSh0d2wtPm5hbWUpLAorCQkJCSJtbWMlaXNsb3QlaSIsIGMtPm1tYywgMSk7CiAJCW1tYy0+c2xvdHNbMF0ubmFtZSA9IHR3bC0+bmFtZTsKIAkJbW1jLT5ucl9zbG90cyA9IDE7Ci0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTUgfAotCQkJCQlNTUNfVkREXzI2XzI3IHwgTU1DX1ZERF8yN18yOCB8Ci0JCQkJCU1NQ19WRERfMjlfMzAgfAotCQkJCQlNTUNfVkREXzMwXzMxIHwgTU1DX1ZERF8zMV8zMjsKIAkJbW1jLT5zbG90c1swXS53aXJlcyA9IGMtPndpcmVzOwogCQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKIAkJbW1jLT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CkBAIC0zNjksNyArNDIyLDEwIEBACiAKIAkJCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7CiAJCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSA9IGdwaW9fdG9faXJxKGMtPmdwaW9fY2QpOwotCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IHR3bF9tbWNfY2FyZF9kZXRlY3Q7CisJCQlpZiAoYy0+Y292ZXJfb25seSkKKwkJCQltbWMtPnNsb3RzWzBdLmdldF9jb3Zlcl9zdGF0ZSA9IHR3bF9tbWNfZ2V0X2NvdmVyX3N0YXRlOworCQkJZWxzZQorCQkJCW1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSB0d2xfbW1jX2NhcmRfZGV0ZWN0OwogCQl9IGVsc2UKIAkJCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IC1FSU5WQUw7CiAKQEAgLTM4NSwyNCArNDQxLDQzIEBACiAKIAkJLyogTk9URTogIHdlIGFzc3VtZSBPTUFQJ3MgTU1DMSBhbmQgTU1DMiB1c2UKIAkJICogdGhlIFRXTDQwMzAncyBWTU1DMSBhbmQgVk1NQzIsIHJlc3BlY3RpdmVseTsKLQkJICogYW5kIHRoYXQgT01BUCdzIE1NQzMgaXNuJ3QgdXNlZC4KKwkJICogYW5kIHRoYXQgTU1DMyBkZXZpY2UgaGFzIGl0J3Mgb3duIHBvd2VyIHNvdXJjZS4KIAkJICovCiAKIAkJc3dpdGNoIChjLT5tbWMpIHsKIAkJY2FzZSAxOgogCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMV9zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DMV9PQ1I7CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMl9zZXRfcG93ZXI7CisJCQlpZiAoYy0+dHJhbnNjZWl2ZXIpCisJCQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IE1NQzJfT0NSOworCQkJZWxzZQorCQkJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTU7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jM19zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcl9lcnIoIk1NQyVkIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCFcbiIsIGMtPm1tYyk7CisJCQlrZnJlZShtbWMpOwogCQkJY29udGludWU7CiAJCX0KIAkJaHNtbWNfZGF0YVtjLT5tbWMgLSAxXSA9IG1tYzsKIAl9CiAKIAlvbWFwMl9pbml0X21tYyhoc21tY19kYXRhLCBPTUFQMzRYWF9OUl9NTUMpOworCisJLyogcGFzcyB0aGUgZGV2aWNlIG5vZGVzIGJhY2sgdG8gYm9hcmQgc2V0dXAgY29kZSAqLworCWZvciAoYyA9IGNvbnRyb2xsZXJzOyBjLT5tbWM7IGMrKykgeworCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKworCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykKKwkJCWNvbnRpbnVlOworCQljLT5kZXYgPSBtbWMtPmRldjsKKwl9CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCmluZGV4IGUxYzgwNzYuLmVhNTllODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKQEAgLTksOSArOSwxMyBAQAogc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyB7CiAJdTgJbW1jOwkJLyogY29udHJvbGxlciAxLzIvMyAqLwogCXU4CXdpcmVzOwkJLyogMS80Lzggd2lyZXMgKi8KKwlib29sCXRyYW5zY2VpdmVyOwkvKiBNTUMtMiBvcHRpb24gKi8KKwlib29sCWV4dF9jbG9jazsJLyogdXNlIGV4dGVybmFsIHBpbiBmb3IgaW5wdXQgY2xvY2sgKi8KKwlib29sCWNvdmVyX29ubHk7CS8qIE5vIGNhcmQgZGV0ZWN0IC0ganVzdCBjb3ZlciBzd2l0Y2ggKi8KIAlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLwogCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCi0JaW50CWV4dF9jbG9jazoxOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLworCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCisJc3RydWN0IGRldmljZSAqZGV2OwkvKiByZXR1cm5lZDogcG9pbnRlciB0byBtbWMgYWRhcHRlciAqLwogfTsKIAogI2lmCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09SRSkgJiYgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGFjYjQxZi4uMDI2YzRmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC00NTMsMTAgKzQ1MywzNyBAQAogCiAKIC8qIDM0WFggR1BJTyAtIGJpZGlyZWN0aW9uYWwsIHVubGVzcyB0aGUgbmFtZSBoYXMgYW4gIl9PVVQiIHN1ZmZpeC4KKyAqIChBbHdheXMgc3BlY2lmeSBQSU5fSU5QVVQsIGV4Y2VwdCBmb3IgbmFtZXMgc3VmZml4ZWQgYnkgIl9PVVQiLikKICAqIE5vIGludGVybmFsIHB1bGx1cC9wdWxsZG93biB3aXRob3V0ICJfVVAiIG9yICJfRE9XTiIgc3VmZml4LgogICovCitNVVhfQ0ZHXzM0WFgoIkFGMjZfMzRYWF9HUElPMCIsIDB4MWUwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJVOF8zNFhYX0dQSU81NF9ET1dOIiwgMHgwYjQsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiTDhfMzRYWF9HUElPNjMiLCAweDBjZSwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJHMjVfMzRYWF9HUElPODZfT1VUIiwgMHgwZmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUU2XzM0WFhfR1BJTzE0MSIsIDB4MTZlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNV8zNFhYX0dQSU8xNDIiLCAweDE3MCwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJBRTVfMzRYWF9HUElPMTQzIiwgMHgxNzIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKK01VWF9DRkdfMzRYWCgiSDE5XzM0WFhfR1BJTzE2NF9PVVQiLCAweDE5YywKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX09VVFBVVCkKIE1VWF9DRkdfMzRYWCgiSjI1XzM0WFhfR1BJTzE3MCIsIDB4MWM2LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCmluZGV4IDU1MzYxYzEuLmVhOGNlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAotaW50IF9faW5pdCBvbWFwMl9wbV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9wbV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaAppbmRleCAxZTE1MWZhLi42OTE0NzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmgKQEAgLTE3MSwxMyArMTcxLDE5IEBACiAJJml2YTJfcHdyZG0sCiAJJm1wdV8zNHh4X3B3cmRtLAogCSZuZW9uX3B3cmRtLAotCSZjb3JlXzM0eHhfcHdyZG0sCisJJmNvcmVfMzR4eF9wcmVfZXMzXzFfcHdyZG0sCisJJmNvcmVfMzR4eF9lczNfMV9wd3JkbSwKIAkmY2FtX3B3cmRtLAogCSZkc3NfcHdyZG0sCiAJJnBlcl9wd3JkbSwKIAkmZW11X3B3cmRtLAogCSZzZ3hfcHdyZG0sCiAJJnVzYmhvc3RfcHdyZG0sCisJJmRwbGwxX3B3cmRtLAorCSZkcGxsMl9wd3JkbSwKKwkmZHBsbDNfcHdyZG0sCisJJmRwbGw0X3B3cmRtLAorCSZkcGxsNV9wd3JkbSwKICNlbmRpZgogCiAJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaAppbmRleCBmNTczZjcxLi40ZGNmOTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaApAQCAtMjAwLDEwICsyMDAsMTIgQEAKIH07CiAKIC8qIE5vIHdrZGVwcyBvciBzbGVlcGRlcHMgZm9yIDM0eHggY29yZSBhcHBhcmVudGx5ICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMzR4eF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zNHh4X3ByZV9lczNfMV9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKKwkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMiB8CisJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9DT1JFX1NISUZULAogCS5iYW5rcwkJICA9IDIsCkBAIC0yMTcsNiArMjE5LDI1IEBACiAJfSwKIH07CiAKKy8qIE5vIHdrZGVwcyBvciBzbGVlcGRlcHMgZm9yIDM0eHggY29yZSBhcHBhcmVudGx5ICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMzR4eF9lczNfMV9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMzXzEpLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JUTEwgb25seSAqLworCS5iYW5rcwkJICA9IDIsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCisJfSwKK307CisKIC8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX0RTUyAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiZHNzX3B3cmRtIiwKQEAgLTIzNiwxNCArMjU3LDE5IEBACiAJfSwKIH07CiAKKy8qCisgKiBBbHRob3VnaCB0aGUgMzRYWCBUUk0gUmV2IEsgVGFibGUgNC0zNzEgbm90ZXMgdGhhdCByZXRlbnRpb24gaXMgYQorICogcG9zc2libGUgU0dYIHBvd2Vyc3RhdGUsIHRoZSBTR1ggZGV2aWNlIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0CisgKiByZXRlbnRpb24uCisgKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gc2d4X3B3cmRtID0gewogCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKIAkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCiAJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAogCS8qIFhYWCBUaGlzIGlzIGFjY3VyYXRlIGZvciAzNDMwIFNHWCwgYnV0IHdoYXQgYWJvdXQgR0ZYPyAqLwotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewpAQCAtMzA3LDExICszMzMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gdXNiaG9zdF9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJ1c2Job3N0X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKIAkud2tkZXBfc3JjcwkgID0gcGVyX3VzYmhvc3Rfd2tkZXBzLAogCS5zbGVlcGRlcF9zcmNzCSAgPSBkc3NfcGVyX3VzYmhvc3Rfc2xlZXBkZXBzLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JIT1NUIGN0cmxyIG9ubHkgKi8KIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewogCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCkBAIC0zMjEsNiArMzQ4LDM3IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDFfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwxX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gTVBVX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwyX3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsMl9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0lWQTJfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDNfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gUExMX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGw0X3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsNF9wd3JkbSIsCisJLnByY21fb2Zmcwk9IFBMTF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsNV9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfcHdyZG0iLAorCS5wcmNtX29mZnMJPSBQTExfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKKwogI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDRhMzI4MjIuLjgxMmQ1MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTExMywzMyArMTEzLDU4IEBACiAjZGVmaW5lIE9NQVAyNDMwX0VOX1VTQkhTCQkJCSgxIDw8IDYpCiAKIC8qIENNX0lETEVTVDFfQ09SRSwgUE1fV0tTVDFfQ09SRSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQyMF9TVF9NTUMJCQkJCSgxIDw8IDI2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMgkJCQkoMSA8PCAyMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDEJCQkJKDEgPDwgMjEpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMgkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfTUNTUEkxCQkJCSgxIDw8IDE3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMgkJCQkoMSA8PCAxNCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTEJCQkJKDEgPDwgMTMpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEwCQkJCSgxIDw8IDEyKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ5CQkJCSgxIDw8IDExKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ4CQkJCSgxIDw8IDEwKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ3CQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDYJCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNQkJCQkoMSA8PCA3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ0CQkJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDMJCQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMgkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjQyMF9TVF9WTFlOUQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMjQyMF9TVF9NTUNfU0hJRlQJCQkJMjYKKyNkZWZpbmUgT01BUDI0MjBfU1RfTU1DX01BU0sJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQyX1NISUZUCQkJCTIyCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQyX01BU0sJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX1NISUZUCQkJCTIxCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX01BU0sJCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9NQVNLCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQJCQkxNworI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfTUFTSwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTJfU0hJRlQJCQkJMTQKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTJfTUFTSwkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTFfU0hJRlQJCQkJMTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTFfTUFTSwkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTBfU0hJRlQJCQkJMTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTBfTUFTSwkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOV9TSElGVAkJCQkxMQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ5X01BU0sJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDhfU0hJRlQJCQkJMTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOF9NQVNLCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ3X1NISUZUCQkJCTkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUN19NQVNLCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDZfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ2X01BU0sJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNV9TSElGVAkJCQk3CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDVfTUFTSwkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ0X1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNF9NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDNfU0hJRlQJCQkJNQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQzX01BU0sJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMl9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDJfTUFTSwkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQyMF9TVF9WTFlOUV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNDIwX1NUX1ZMWU5RX01BU0sJCQkJKDEgPDwgMykKIAogLyogQ01fSURMRVNUMl9DT1JFLCBQTV9XS1NUMl9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9JTlRDCQkJCSgxIDw8IDExKQotI2RlZmluZSBPTUFQMjQzMF9TVF9HUElPNQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkzCQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMgkJCQkoMSA8PCA4KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzEJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDI0MzBfU1RfVVNCSFMJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDMJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVVNCCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fSU5UQ19TSElGVAkJCTExCisjZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9JTlRDX01BU0sJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzVfU0hJRlQJCQkJMTAKKyNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzVfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkzX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ1NQSTNfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzJfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMl9NQVNLCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMV9TSElGVAkJCTcKKyNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMxX01BU0sJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDI0MzBfU1RfVVNCSFNfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMjQzMF9TVF9VU0JIU19NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDNfTUFTSwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9VU0JfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9TVF9VU0JfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCwgQ01fSUNMS0VOX1dLVVAsIFBNX1dLRU5fV0tVUCBzaGFyZWQgYml0cyAqLwogI2RlZmluZSBPTUFQMjRYWF9FTl9HUElPU19TSElGVAkJCQkyCkBAIC0xNDgsMTEgKzE3MywxMyBAQAogI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQxCQkJCSgxIDw8IDApCiAKIC8qIFBNX1dLU1RfV0tVUCwgQ01fSURMRVNUX1dLVVAgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BJT1MJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUElPU19TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUElPU19NQVNLCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxX01BU0sJCQkJMAogCiAvKiBDTV9JRExFU1RfTURNIGFuZCBQTV9XS1NUX01ETSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE0JCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9TSElGVAkJCQkoMSA8PCAwKQogCiAKIC8qIDM0MzAgcmVnaXN0ZXIgYml0cyBzaGFyZWQgYmV0d2VlbiBDTSAmIFBSTSByZWdpc3RlcnMgKi8KQEAgLTIwNSwyNCArMjMyLDQ2IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZUCQkJCTQKIAogLyogUE1fV0tTVDFfQ09SRSwgQ01fSURMRVNUMV9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01NQzIJCQkJKDEgPDwgMjUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01NQzEJCQkJKDEgPDwgMjQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJNAkJCQkoMSA8PCAyMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkzCQkJCSgxIDw8IDIwKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTIJCQkJKDEgPDwgMTkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMQkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMwkJCQkoMSA8PCAxNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMgkJCQkoMSA8PCAxNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMQkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDIJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMQkJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTAJCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AxCQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0ZTSE9TVFVTQgkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TVF9IU09UR1VTQgkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMzQzMF9TVF9EMkQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzJfU0hJRlQJCQkJMjUKKyNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMl9NQVNLCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMxX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzFfTUFTSwkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEk0X1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEk0X01BU0sJCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJM19TSElGVAkJCTIwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJM19NQVNLCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTJfU0hJRlQJCQkxOQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTJfTUFTSwkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkxX1NISUZUCQkJMTgKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkxX01BU0sJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzNfU0hJRlQJCQkJMTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDM19NQVNLCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMyX1NISUZUCQkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzJfTUFTSwkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMV9TSElGVAkJCQkxNQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMxX01BU0sJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQyX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQyX01BU0sJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxX1NISUZUCQkJCTEzCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxX01BU0sJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDExX1NISUZUCQkJCTEyCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDExX01BU0sJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEwX1NISUZUCQkJCTExCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEwX01BU0sJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNV9TSElGVAkJCTEwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNV9NQVNLCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDFfU0hJRlQJCQk5CisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0ZTSE9TVFVTQl9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRlNIT1NUVVNCX01BU0sJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9IU09UR1VTQl9TSElGVAkJCTQKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfSFNPVEdVU0JfTUFTSwkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0hTT1RHVVNCX0lETEVfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfSURMRV9NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9TVERCWV9TSElGVAkJNAorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9TVERCWV9NQVNLCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9EMkRfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMzQzMF9TVF9EMkRfTUFTSwkJCQkoMSA8PCAzKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCwgQ01fSUNMS0VOX1dLVVAsIFBNX1dLRU5fV0tVUCBzaGFyZWQgYml0cyAqLwogI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPMQkJCQkoMSA8PCAzKQpAQCAtMjQxLDExICsyOTAsMTYgQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQJCQkJMQogCiAvKiBDTV9JRExFU1RfV0tVUCwgUE1fV0tTVF9XS1VQIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NSMgkJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfU1IxCQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMQkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMgkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMl9TSElGVAkJCQk3CisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMl9NQVNLCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMV9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMV9NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8xX1NISUZUCQkJCTMKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzFfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMl9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEyX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDFfTUFTSwkJCQkoMSA8PCAwKQogCiAvKgogICogQ01fU0xFRVBERVBfR0ZYLCBDTV9TTEVFUERFUF9EU1MsIENNX1NMRUVQREVQX0NBTSwKQEAgLTI5NiwyMCArMzUwLDM0IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVAkJCTAKIAogLyogQ01fSURMRVNUX1BFUiwgUE1fV0tTVF9QRVIgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzYJCQkJKDEgPDwgMTcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU81CQkJCSgxIDw8IDE2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNAkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzMJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8yCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMwkJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOAkJCQkoMSA8PCA5KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ3CQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDYJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ0CQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDMJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMgkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNl9TSElGVAkJCQkxNworI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNl9NQVNLCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNV9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNV9NQVNLCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNF9TSElGVAkJCQkxNQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNF9NQVNLCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPM19TSElGVAkJCQkxNAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPM19NQVNLCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMl9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMl9NQVNLCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUM19TSElGVAkJCQkxMQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUM19NQVNLCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ5X1NISUZUCQkJCTEwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDlfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOF9TSElGVAkJCQk5CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDhfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ3X1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUN19NQVNLCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDZfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ2X01BU0sJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNV9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDVfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ0X1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNF9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDNfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQzX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMl9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDJfTUFTSwkJCQkoMSA8PCAzKQogCiAvKiBDTV9TTEVFUERFUF9QRVIsIFBNX1dLREVQX0lWQTIsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfUEVSIHNoYXJlZCBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX0NPUkVfU0hJRlQJCQkJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAppbmRleCA1YjVlY2ZlLi5jNmE3OTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaApAQCAtMzY2LDYgKzM2Niw3IEBACiAKIC8qIFBNX1dLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX0lPCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPMQkJCQkoMSA8PCAzKQogCiAvKiBQTV9NUFVHUlBTRUxfV0tVUCBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTQ1Miw2ICs0NTMsMTQgQEAKICNkZWZpbmUgT01BUDM0MzBfQ01EUkEwX01BU0sJCQkJKDB4ZmYgPDwgMCkKIAogLyogUFJNX1ZDX0NNRF9WQUxfMCBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTl9TSElGVAkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTl9NQVNLCQkJCSgweEZGIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9WQ19DTURfT05MUF9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTkxQX01BU0sJCQkoMHhGRiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX1JFVF9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX1JFVF9NQVNLCQkJKDB4RkYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX09GRl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX09GRl9NQVNLCQkJKDB4RkYgPDwgMCkKIAogLyogUFJNX1ZDX0NNRF9WQUxfMSBzcGVjaWZpYyBiaXRzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCmluZGV4IGU0ZGM0YjEuLjgyNmQzMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtMTQxLDYgKzE0MSwxOSBAQAogI2RlZmluZSBQTV9QV1NUQ1RSTAkJCQkJMHgwMGUwCiAjZGVmaW5lIFBNX1BXU1RTVAkJCQkJMHgwMGU0CiAKKy8qIE9tYXAyIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUFQMjRYWF9QTV9XS0VOMgkJCQkweDAwYTQKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tTVDIJCQkJMHgwMGI0CisKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfRFNQCQkJMHgwMGYwCS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfRFNQCQkJMHgwMGY0CS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfSVZBCQkJMHgwMGY4CisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0lWQQkJCTB4MDBmYworCisvKiBPbWFwMyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfUE1fV0tFTjMJCQkJMHgwMGYwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BNX1dLU1QzCQkJCTB4MDBiOAorCiAjZGVmaW5lIE9NQVAzNDMwX1BNX01QVUdSUFNFTAkJCQkweDAwYTQKICNkZWZpbmUgT01BUDM0MzBfUE1fTVBVR1JQU0VMMQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwKIApAQCAtMTUzLDE2ICsxNjYsNiBAQAogI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX0lWQTIJCQkweDAwZmMKIAogCi0vKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgT01BUDI0WFhfUE1fV0tFTjIJCQkJMHgwMGE0Ci0jZGVmaW5lIE9NQVAyNFhYX1BNX1dLU1QyCQkJCTB4MDBiNAotCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0RTUAkJCTB4MDBmMAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0RTUAkJCTB4MDBmNAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0lWQQkJCTB4MDBmOAotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUUVOQUJMRV9JVkEJCQkweDAwZmMKLQogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKIC8qIFBvd2VyL3Jlc2V0IG1hbmFnZW1lbnQgZG9tYWluIHJlZ2lzdGVyIGdldC9zZXQgKi8KQEAgLTIyOCw3ICsyMzEsNiBAQAogI2RlZmluZSBPTUFQX1JTVFRJTUUxX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUF9SU1RUSU1FMV9NQVNLCQkJCSgweGZmIDw8IDApCiAKLQogLyogUFJNX1JTVENUUkwgKi8KIC8qIE5hbWVkIFJNX1JTVENUUkxfV0tVUCBvbiB0aGUgMjR4eCAqLwogLyogMjQyMCBjYWxscyBSU1RfRFBMTDMgJ1JTVF9EUExMJyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMwMDYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIFNNUy9TRFJDIChTRFJBTSBjb250cm9sbGVyKSBjb21tb24gY29kZSBmb3IgT01BUDIvMworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICogUGF1bCBXYWxtc2xleQorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CisKKyNpbmNsdWRlICJwcm0uaCIKKworI2luY2x1ZGUgPG1hY2gvc2RyYy5oPgorI2luY2x1ZGUgInNkcmMuaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2luaXRfcGFyYW1zOworCit2b2lkIF9faW9tZW0gKm9tYXAyX3NkcmNfYmFzZTsKK3ZvaWQgX19pb21lbSAqb21hcDJfc21zX2Jhc2U7CisKKworLyoqCisgKiBvbWFwMl9zZHJjX2dldF9wYXJhbXMgLSByZXR1cm4gU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIGEgZ2l2ZW4gY2xvY2sgcmF0ZQorICogQHI6IFNEUkMgY2xvY2sgcmF0ZSAoaW4gSHopCisgKgorICogUmV0dXJuIHByZS1jYWxjdWxhdGVkIHZhbHVlcyBmb3IgdGhlIFNEUkNfQUNUSU1fQ1RSTEEsCisgKiBTRFJDX0FDVElNX0NUUkxCLCBTRFJDX1JGUl9DVFJMLCBhbmQgU0RSQ19NUiByZWdpc3RlcnMsIGZvciBhIGdpdmVuCisgKiBTRFJDIGNsb2NrIHJhdGUgJ3InLiAgVGhlc2UgcGFyYW1ldGVycyBjb250cm9sIHZhcmlvdXMgdGltaW5nCisgKiBkZWxheXMgaW4gdGhlIFNEUkFNIGNvbnRyb2xsZXIgdGhhdCBhcmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZQorICogbnVtYmVyIG9mIFNEUkMgY2xvY2sgY3ljbGVzIHRvIHdhaXQ7IGhlbmNlIHRoZSBjbG9jayByYXRlCisgKiBkZXBlbmRlbmN5LiBOb3RlIHRoYXQgc2RyY19pbml0X3BhcmFtcyBtdXN0IGJlIHNvcnRlZCByYXRlCisgKiBkZXNjZW5kaW5nLiAgQWxzbyBhc3N1bWVzIHRoYXQgYm90aCBjaGlwLXNlbGVjdHMgdXNlIHRoZSBzYW1lCisgKiB0aW1pbmcgcGFyYW1ldGVycy4gIFJldHVybnMgYSBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqIHVwb24KKyAqIHN1Y2Nlc3MsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqb21hcDJfc2RyY19nZXRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgcikKK3sKKwlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc3A7CisKKwlzcCA9IHNkcmNfaW5pdF9wYXJhbXM7CisKKwl3aGlsZSAoc3AtPnJhdGUgIT0gcikKKwkJc3ArKzsKKworCWlmICghc3AtPnJhdGUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHNwOworfQorCisKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3NkcmMoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwlvbWFwMl9zZHJjX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zZHJjOworCW9tYXAyX3Ntc19iYXNlID0gb21hcDJfZ2xvYmFscy0+c21zOworfQorCisvKiB0dXJuIG9uIHNtYXJ0IGlkbGUgbW9kZXMgZm9yIFNEUkFNIHNjaGVkdWxlciBhbmQgY29udHJvbGxlciAqLwordm9pZCBfX2luaXQgb21hcDJfc2RyY19pbml0KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCkKK3sKKwl1MzIgbDsKKworCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7CisJbCAmPSB+KDB4MyA8PCAzKTsKKwlsIHw9ICgweDIgPDwgMyk7CisJc21zX3dyaXRlX3JlZyhsLCBTTVNfU1lTQ09ORklHKTsKKworCWwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfU1lTQ09ORklHKTsKKwlsICY9IH4oMHgzIDw8IDMpOworCWwgfD0gKDB4MiA8PCAzKTsKKwlzZHJjX3dyaXRlX3JlZyhsLCBTRFJDX1NZU0NPTkZJRyk7CisKKwlzZHJjX2luaXRfcGFyYW1zID0gc3A7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjMnh4eC5jCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwppbmRleCA4ODJjNzAyLi4wYWZkYWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwpAQCAtMSwxMyArMSwxNCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwogICoKLSAqIE1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCisgKiBTRFJBTSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyeHh4CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KICAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yOCwyNyArMjksMzEgQEAKICNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KIAogI2luY2x1ZGUgInBybS5oIgotCi0jaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KICNpbmNsdWRlICJzZHJjLmgiCiAKLXZvaWQgX19pb21lbSAqb21hcDJfc2RyY19iYXNlOwotdm9pZCBfX2lvbWVtICpvbWFwMl9zbXNfYmFzZTsKKy8qIE1lbW9yeSB0aW1pbmcsIERMTCBtb2RlIGZsYWdzICovCisjZGVmaW5lIE1fRERSCQkxCisjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCisjZGVmaW5lIE1fVU5MT0NLCTAKKyNkZWZpbmUgTV9MT0NLCQkxCisKIAogc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKIHN0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CiAKLXUzMiBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwodm9pZCkKK3N0YXRpYyB1MzIgb21hcDJ4eHhfc2RyY19nZXRfc2xvd19kbGxfY3RybCh2b2lkKQogewogCXJldHVybiBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsOwogfQogCi11MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpCitzdGF0aWMgdTMyIG9tYXAyeHh4X3NkcmNfZ2V0X2Zhc3RfZGxsX2N0cmwodm9pZCkKIHsKIAlyZXR1cm4gbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybDsKIH0KIAotdTMyIG9tYXAyX21lbW9yeV9nZXRfdHlwZSh2b2lkKQorc3RhdGljIHUzMiBvbWFwMnh4eF9zZHJjX2dldF90eXBlKHZvaWQpCiB7CiAJcmV0dXJuIG1lbV90aW1pbmdzLm1fdHlwZTsKIH0KQEAgLTU3LDcgKzYyLDcgQEAKICAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KICAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzaGlmdGVkIERMTCB2YWx1ZSBpbiB1bmxvY2sgbW9kZS4KICAqLwotdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKK3UzMiBvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCh2b2lkKQogewogCS8qIGRsbGEgYW5kIGRsbGIgYXJlIGEgc2V0ICovCiAJdTMyIGRsbF9zdGF0ZSA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX0NUUkwpOwpAQCAtNzIsOCArNzcsMTAgQEAKICAqICdsZXZlbCcgaXMgdGhlIHZhbHVlIHRvIHN0b3JlIHRvIENNX0NMS1NFTDJfUExMLkNPUkVfQ0xLX1NSQy4KICAqIFByYWN0aWNhbCB2YWx1ZXMgYXJlIENPUkVfQ0xLX1NSQ19EUExMIChmb3IgQ09SRV9DTEsgPSBEUExMX0NMSykgb3IKICAqIENPUkVfQ0xLX1NSQ19EUExMX1gyIChmb3IgQ09SRV9DTEsgPSAqIERQTExfQ0xLICogMikKKyAqCisgKiBVc2VkIGJ5IHRoZSBjbG9jayBmcmFtZXdvcmsgZHVyaW5nIENPUkUgRFBMTCBjaGFuZ2VzCiAgKi8KLXUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKK3UzMiBvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbSh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKIHsKIAl1MzIgZGxsX2N0cmwsIG1fdHlwZTsKIAl1MzIgcHJldiA9IGN1cnJfcGVyZl9sZXZlbDsKQEAgLTgyLDE1ICs4OSwxNCBAQAogCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCiAJCXJldHVybiBwcmV2OwogCi0JaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMKSB7Ci0JCWRsbF9jdHJsID0gb21hcDJfbWVtb3J5X2dldF9zbG93X2RsbF9jdHJsKCk7Ci0JfSBlbHNlIGlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTF9YMikgewotCQlkbGxfY3RybCA9IG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCgpOwotCX0gZWxzZSB7CisJaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMKQorCQlkbGxfY3RybCA9IG9tYXAyeHh4X3NkcmNfZ2V0X3Nsb3dfZGxsX2N0cmwoKTsKKwllbHNlIGlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTF9YMikKKwkJZGxsX2N0cmwgPSBvbWFwMnh4eF9zZHJjX2dldF9mYXN0X2RsbF9jdHJsKCk7CisJZWxzZQogCQlyZXR1cm4gcHJldjsKLQl9CiAKLQltX3R5cGUgPSBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUoKTsKKwltX3R5cGUgPSBvbWFwMnh4eF9zZHJjX2dldF90eXBlKCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19yYXdfd3JpdGVsKDB4ZmZmZiwgT01BUDI0WFhfUFJDTV9WT0xUU0VUVVApOwpAQCAtMTAxLDIzICsxMDcsMTQgQEAKIAlyZXR1cm4gcHJldjsKIH0KIAotI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotdm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCi0JCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spCi17Ci19Ci12b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAotCQkJCSAgICAgIHUzMiBtZW1fdHlwZSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKKy8qIFVzZWQgYnkgdGhlIGNsb2NrIGZyYW1ld29yayBkdXJpbmcgQ09SRSBEUExMIGNoYW5nZXMgKi8KK3ZvaWQgb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CiAJdTMyIGZhc3RfZGxsID0gMDsKIAotCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKHNkcmNfcmVhZF9yZWcoU0RSQ19NUl8wKSAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLworCS8qIEREUiA9IDEsIFNEUiA9IDAgKi8KKwltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChzZHJjX3JlYWRfcmVnKFNEUkNfTVJfMCkgJiAweDMpID09IDB4MSk7CiAKIAkvKiAyNDIyIGVzMi4wNSBhbmQgYmV5b25kIGhhcyBhIHNpbmdsZSBTSVAgRERSIGluc3RlYWQgb2YgMiBsaWtlIG90aGVycy4KIAkgKiBJbiB0aGUgY2FzZSBvZiAyNDIyLCBpdHMgb2sgdG8gdXNlIENTMSBpbnN0ZWFkIG9mIENTMC4KQEAgLTE2NCwyOCArMTYxLDMgQEAKIAkvKiA5MCBkZWdyZWUgcGhhc2UgZm9yIGFueXRoaW5nIGJlbG93IDEzM01oeiArIGRpc2FibGUgRExMIGZpbHRlciAqLwogCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0gKCgxIDw8IDEpIHwgKDMgPDwgOCkpOwogfQotCi12b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc19tZW1vcnkoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKLXsKLQlvbWFwMl9zZHJjX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zZHJjOwotCW9tYXAyX3Ntc19iYXNlID0gb21hcDJfZ2xvYmFscy0+c21zOwotfQotCi0vKiB0dXJuIG9uIHNtYXJ0IGlkbGUgbW9kZXMgZm9yIFNEUkFNIHNjaGVkdWxlciBhbmQgY29udHJvbGxlciAqLwotdm9pZCBfX2luaXQgb21hcDJfaW5pdF9tZW1vcnkodm9pZCkKLXsKLQl1MzIgbDsKLQotCWlmICghY3B1X2lzX29tYXAyNDIwKCkpCi0JCXJldHVybjsKLQotCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7Ci0JbCAmPSB+KDB4MyA8PCAzKTsKLQlsIHw9ICgweDIgPDwgMyk7Ci0Jc21zX3dyaXRlX3JlZyhsLCBTTVNfU1lTQ09ORklHKTsKLQotCWwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfU1lTQ09ORklHKTsKLQlsICY9IH4oMHgzIDw8IDMpOwotCWwgfD0gKDB4MiA8PCAzKTsKLQlzZHJjX3dyaXRlX3JlZyhsLCBTRFJDX1NZU0NPTkZJRyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3NGU5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYworICoKKyAqIFRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGJvYXJkIHNwZWNpZmljIGRldGFpbHMgZm9yIHRoZQorICogTUVOVE9SIFVTQiBPVEcgY29udHJvbGxlciBvbiBPTUFQMzQzMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogVmlrcmFtIFBhbmRpdGEKKyAqCisgKiBHZW5lcmFsaXphdGlvbiBieToKKyAqIEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXVzYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7IC8qIHN0YXJ0IGFuZCBlbmQgc2V0IGR5bmFtaWNhbGx5ICovCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0gewkvKiBnZW5lcmFsIElSUSAqLworCQkuc3RhcnQJPSBJTlRfMjQzWF9IU19VU0JfTUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0gewkvKiBETUEgSVJRICovCisJCS5zdGFydAk9IElOVF8yNDNYX0hTX1VTQl9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IGNsa19vbjsKKworc3RhdGljIGludCBtdXNiX3NldF9jbG9jayhzdHJ1Y3QgY2xrICpjbGssIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGNsa19vbiA+IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQljbGtfZW5hYmxlKGNsayk7CisJCWNsa19vbiA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGNsa19vbiA9PSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJY2xrX2Rpc2FibGUoY2xrKTsKKwkJY2xrX29uID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfZXBzX2JpdHMgbXVzYl9lcHNbXSA9IHsKKwl7CSJlcDFfdHgiLCAxMCwJfSwKKwl7CSJlcDFfcngiLCAxMCwJfSwKKwl7CSJlcDJfdHgiLCA5LAl9LAorCXsJImVwMl9yeCIsIDksCX0sCisJewkiZXAzX3R4IiwgMywJfSwKKwl7CSJlcDNfcngiLCAzLAl9LAorCXsJImVwNF90eCIsIDMsCX0sCisJewkiZXA0X3J4IiwgMywJfSwKKwl7CSJlcDVfdHgiLCAzLAl9LAorCXsJImVwNV9yeCIsIDMsCX0sCisJewkiZXA2X3R4IiwgMywJfSwKKwl7CSJlcDZfcngiLCAzLAl9LAorCXsJImVwN190eCIsIDMsCX0sCisJewkiZXA3X3J4IiwgMywJfSwKKwl7CSJlcDhfdHgiLCAyLAl9LAorCXsJImVwOF9yeCIsIDIsCX0sCisJewkiZXA5X3R4IiwgMiwJfSwKKwl7CSJlcDlfcngiLCAyLAl9LAorCXsJImVwMTBfdHgiLCAyLAl9LAorCXsJImVwMTBfcngiLCAyLAl9LAorCXsJImVwMTFfdHgiLCAyLAl9LAorCXsJImVwMTFfcngiLCAyLAl9LAorCXsJImVwMTJfdHgiLCAyLAl9LAorCXsJImVwMTJfcngiLCAyLAl9LAorCXsJImVwMTNfdHgiLCAyLAl9LAorCXsJImVwMTNfcngiLCAyLAl9LAorCXsJImVwMTRfdHgiLCAyLAl9LAorCXsJImVwMTRfcngiLCAyLAl9LAorCXsJImVwMTVfdHgiLCAyLAl9LAorCXsJImVwMTVfcngiLCAyLAl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gMSwKKwkuZHluX2ZpZm8JPSAxLAorCS5zb2Z0X2Nvbgk9IDEsCisJLmRtYQkJPSAxLAorCS5udW1fZXBzCT0gMTYsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmRtYV9yZXFfY2hhbgk9ICgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLAorCS5yYW1fYml0cwk9IDEyLAorCS5lcHNfYml0cwk9IG11c2JfZXBzLAorfTsKKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCS5tb2RlCQk9IE1VU0JfT1RHLAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QpCisJLm1vZGUJCT0gTVVTQl9IT1NULAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCisJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAorI2VuZGlmCisJLyogLmNsb2NrIGlzIHNldCBkeW5hbWljYWxseSAqLworCS5zZXRfY2xvY2sJPSBtdXNiX3NldF9jbG9jaywKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKKworCS8qIFJFVklTSVQgY2hhcmdlIHB1bXAgb24gVFdMNDAzMCBjYW4gc3VwcGx5IHVwIHRvCisJICogMTAwIG1BIC4uLiBidXQgdGhpcyB2YWx1ZSBpcyBib2FyZC1zcGVjaWZpYywgbGlrZQorCSAqICJtb2RlIiwgYW5kIHNob3VsZCBiZSBwYXNzZWQgdG8gdXNiX211c2JfaW5pdCgpLgorCSAqLworCS5wb3dlcgkJPSA1MCwJCQkvKiB1cCB0byAxMDAgbUEgKi8KK307CisKK3N0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtdXNiX3BsYXQsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG11c2JfcmVzb3VyY2VzLAorfTsKKworI2lmZGVmIENPTkZJR19OT1BfVVNCX1hDRUlWCitzdGF0aWMgdTY0IG5vcF94Y2Vpdl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcF94Y2Vpdl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm5vcF91c2JfeGNlaXYiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJm5vcF94Y2Vpdl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gTlVMTCwKKwl9LAorfTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19vbWFwMjQzeCgpKQorCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAyNDNYX0hTX0JBU0U7CisJZWxzZQorCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAzNFhYX0hTVVNCX09UR19CQVNFOworCW11c2JfcmVzb3VyY2VzWzBdLmVuZCA9IG11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgU1pfOEsgLSAxOworCisJLyoKKwkgKiBSRVZJU0lUOiBUaGlzIGxpbmUgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwgdGhlIHBsYXRmb3JtcyB1c2luZworCSAqIG11c2JfY29yZS5jIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIHVzZSBjbGtkZXYuCisJICovCisJbXVzYl9wbGF0LmNsb2NrID0gImljayI7CisKKyNpZmRlZiBDT05GSUdfTk9QX1VTQl9YQ0VJVgorCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOT1AtWENFSVYgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXVzYl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBIUy1VU0IgKE1VU0IpIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCmluZGV4IGY1OWE4ZDAuLjJjNzAzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCkBAIC03MSw2ICs3MSw3IEBACiAKIGNvbmZpZyBNQUNIX1RTNzhYWAogCWJvb2wgIlRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCIKKwlzZWxlY3QgUE0KIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwppbmRleCAwNzIyZDY1Li5iMzFjYTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCkBAIC03Niw3ICs3Niw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfaW5pdCh2b2lkKQogewotCS8qIFRoZSA1MTgyIGRvZXNuJ3QgcmVhbGx5IHVzZSBpdCdzIFBDSSBidXMsIGFuZCBpbml0aWFsaXNpbmcgUENJCisJLyogVGhlIDUxODIgZG9lc24ndCByZWFsbHkgdXNlIGl0cyBQQ0kgYnVzLCBhbmQgaW5pdGlhbGlzaW5nIFBDSQogCSAqIGdldHMgaW4gdGhlIHdheSBvZiBpbml0aWFsaXNpbmcgdGhlIFNBVEEgY29udHJvbGxlci4KIAkgKi8KIAlpZiAobWFjaGluZV9pc19kbnMzMjMoKSAmJiBkbnMzMjNfZGV2X2lkKCkgIT0gTVY4OEY1MTgyX0RFVl9JRCkKQEAgLTQxOCw3ICs0MTgsNyBAQAogCW9yaW9uNXhfaTJjX2luaXQoKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAotCS8qIFRoZSA1MTgyIGhhcyBpdCdzIFNBVEEgY29udHJvbGxlciBvbi1jaGlwLCBhbmQgbmVlZHMgaXQncyBvd24gbGl0dGxlCisJLyogVGhlIDUxODIgaGFzIGl0cyBTQVRBIGNvbnRyb2xsZXIgb24tY2hpcCwgYW5kIG5lZWRzIGl0cyBvd24gbGl0dGxlCiAJICogaW5pdCByb3V0aW5lLgogCSAqLwogCWlmIChkbnMzMjNfZGV2X2lkKCkgPT0gTVY4OEY1MTgyX0RFVl9JRCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDA4ZTQzMDcuLjliOGRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTksNyArMTksNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogRW5hYmxlIGFuZCBpc3N1ZSBzb2Z0IHJlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMKaW5kZXggZTBjNDNiOC4uYzliZjZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzbWluaS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGxzbWluaV9wb3dlcl9vZmYodm9pZCkKIHsKLQlhcmNoX3Jlc2V0KDApOworCWFyY2hfcmVzZXQoMCwgTlVMTCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1mcGdhLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LWZwZ2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjljZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1mcGdhLmgKQEAgLTAsMCArMSwzNSBAQAorI2RlZmluZSBGUEdBSUQoX21hZ2ljLCBfcmV2KSAoKF9tYWdpYyA8PCA4KSArIF9yZXYpCisKKy8qCisgKiBnZXQgeWVyIGlkJ3MgZnJvbSBodHRwOi8vdHM3OHh4LmRpZ3Jpei5vcmcudWsvCisgKiBkbyAqbm90KiBtYWtlIHVwIHlvdXIgb3duIG9yICdib3Jyb3cnIGFueSEKKyAqLworZW51bSBmcGdhX2lkcyB7CisJLyogVGVjaG5vbG9naWMgU3lzdGVtcyAqLworCVRTNzgwMF9SRVZfMQk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwMSksCisJVFM3ODAwX1JFVl8yCT0gRlBHQUlEKDB4MDBiNDgwLCAweDAyKSwKKwlUUzc4MDBfUkVWXzMJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDMpLAorCVRTNzgwMF9SRVZfNAk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwNCksCisJVFM3ODAwX1JFVl81CT0gRlBHQUlEKDB4MDBiNDgwLCAweDA1KSwKKworCS8qIFVuYWZmb3JkYWJsZSAmIEV4cGVuc2l2ZSAqLworCVVBRV9EVU1NWQk9IEZQR0FJRCgweGZmZmZmZiwgMHgwMSksCit9OworCitzdHJ1Y3QgZnBnYV9kZXZpY2UgeworCXVuc2lnbmVkCQlwcmVzZW50OjE7CisJdW5zaWduZWQJCWluaXQ6MTsKK307CisKK3N0cnVjdCBmcGdhX2RldmljZXMgeworCS8qIFRlY2hub2xvZ2ljIFN5c3RlbXMgKi8KKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgCXRzX3J0YzsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgCXRzX25hbmQ7Cit9OworCitzdHJ1Y3QgdHM3OHh4X2ZwZ2FfZGF0YSB7CisJdW5zaWduZWQgaW50CQlpZDsKKwlpbnQJCQlzdGF0ZTsKKworCXN0cnVjdCBmcGdhX2RldmljZXMJc3VwcG9ydHM7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jCmluZGV4IDEzNjhlOWYuLjlhNmIzOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMKQEAgLTEwLDE3ICsxMCwyMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L200OHQ4Ni5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJtcHAuaCIKKyNpbmNsdWRlICJ0czc4eHgtZnBnYS5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRTLTc4eHggSW5mbwpAQCAtMzMsMTggKzM2LDExIEBACiAjZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFCTB4ZmY5MDAwMDAKICNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19TSVpFCQlTWl8xTQogCi0jZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfU1lTQ09OX0lECShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4MDAwKQotI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1NZU0NPTl9MQ0RJCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4MDA0KQotI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1NZU0NPTl9MQ0RPCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4MDA4KQotCi0jZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfUlRDX0NUUkwJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHg4MDgpCi0jZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfUlRDX0RBVEEJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHg4MGMpCi0KLS8qCi0gKiA1MTJrQiBOT1IgZmxhc2ggRGV2aWNlCi0gKi8KLSNkZWZpbmUgVFM3OFhYX05PUl9CT09UX0JBU0UJCTB4ZmY4MDAwMDAKLSNkZWZpbmUgVFM3OFhYX05PUl9CT09UX1NJWkUJCVNaXzUxMksKK3N0YXRpYyBzdHJ1Y3QgdHM3OHh4X2ZwZ2FfZGF0YSB0czc4eHhfZnBnYSA9IHsKKwkuaWQJCT0gMCwKKwkuc3RhdGUJCT0gMSwKKy8qCS5zdXBwb3J0cwk9IC4uLiAtIHBvcHVsYXRlZCBieSB0czc4eHhfZnBnYV9zdXBwb3J0cygpICovCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEkvTyBBZGRyZXNzIE1hcHBpbmcKQEAgLTY1LDQxICs2MSw2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogNTEya0IgTk9SIEJvb3QgRmxhc2ggLSB0aGUgY2hpcCBpcyBhIE0yNVA0MAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdHM3OHh4X25vcl9ib290X2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLm5hbWUJCT0gInRzLWJvb3Ryb20iLAotCQkub2Zmc2V0CQk9IDAsCi0JCS8qIG9ubHkgdGhlIGZpcnN0IDI1NmtCIGlzIHVzZWQgKi8KLQkJLnNpemUJCT0gU1pfMjU2SywKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB0czc4eHhfbm9yX2Jvb3RfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMSwKLQkucGFydHMJCT0gdHM3OHh4X25vcl9ib290X2ZsYXNoX3Jlc291cmNlcywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHRzNzh4eF9ub3JfYm9vdF9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0czc4eHhfbm9yX2Jvb3RfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydAkJPSBUUzc4WFhfTk9SX0JPT1RfQkFTRSwKLQkuZW5kCQk9IFRTNzhYWF9OT1JfQk9PVF9CQVNFICsgVFM3OFhYX05PUl9CT09UX1NJWkUgLSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3OHh4X25vcl9ib290X2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRzNzh4eF9ub3JfYm9vdF9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZ0czc4eHhfbm9yX2Jvb3RfZmxhc2hfcmVzb3VyY2UsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEV0aGVybmV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSB0czc4eHhfZXRoX2RhdGEgPSB7CkBAIC0xMDcsMzEgKzY4LDQwIEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJUQyBNNDhUODYgLSBuaWNrZWReV2JvcnJvd2VkIGZyb20gYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKKyAqIFNBVEEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19SVENfRFJWX000OFQ4Ngotc3RhdGljIHVuc2lnbmVkIGNoYXIgdHM3OHh4X3J0Y19yZWFkYnl0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGViKGFkZHIsIFRTNzhYWF9GUEdBX1JFR1NfUlRDX0NUUkwpOwotCXJldHVybiByZWFkYihUUzc4WFhfRlBHQV9SRUdTX1JUQ19EQVRBKTsKLX0KLQotc3RhdGljIHZvaWQgdHM3OHh4X3J0Y193cml0ZWJ5dGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlYihhZGRyLCBUUzc4WFhfRlBHQV9SRUdTX1JUQ19DVFJMKTsKLQl3cml0ZWIodmFsdWUsIFRTNzhYWF9GUEdBX1JFR1NfUlRDX0RBVEEpOwotfQotCi1zdGF0aWMgc3RydWN0IG00OHQ4Nl9vcHMgdHM3OHh4X3J0Y19vcHMgPSB7Ci0JLnJlYWRieXRlCT0gdHM3OHh4X3J0Y19yZWFkYnl0ZSwKLQkud3JpdGVieXRlCT0gdHM3OHh4X3J0Y193cml0ZWJ5dGUsCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSB0czc4eHhfc2F0YV9kYXRhID0geworCS5uX3BvcnRzCT0gMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzh4eF9ydGNfZGV2aWNlID0geworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSVEMgTTQ4VDg2IC0gbmlja2VkXldib3Jyb3dlZCBmcm9tIGFyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVFNfUlRDX0NUUkwJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHg4MDgpCisjZGVmaW5lIFRTX1JUQ19EQVRBCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4ODBjKQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0czc4eHhfdHNfcnRjX3JlYWRieXRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl3cml0ZWIoYWRkciwgVFNfUlRDX0NUUkwpOworCXJldHVybiByZWFkYihUU19SVENfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIHRzNzh4eF90c19ydGNfd3JpdGVieXRlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl3cml0ZWIoYWRkciwgVFNfUlRDX0NUUkwpOworCXdyaXRlYih2YWx1ZSwgVFNfUlRDX0RBVEEpOworfQorCitzdGF0aWMgc3RydWN0IG00OHQ4Nl9vcHMgdHM3OHh4X3RzX3J0Y19vcHMgPSB7CisJLnJlYWRieXRlCT0gdHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSwKKwkud3JpdGVieXRlCT0gdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0czc4eHhfdHNfcnRjX2RldmljZSA9IHsKIAkubmFtZQkJPSAicnRjLW00OHQ4NiIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0czc4eHhfcnRjX29wcywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdHM3OHh4X3RzX3J0Y19vcHMsCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IDAsCiB9OwpAQCAtMTQ2LDU4ICsxMTYsMzEzIEBACiAgKiBUT0RPOiB0cmFjayBkb3duIGEgZ3VpbmVhIHBpZyB3aXRob3V0IGFuIFJUQyB0byBzZWUgaWYgd2UgY2FuIHdvcmsgb3V0IGEKICAqIAkJYmV0dGVyIFJUQyBkZXRlY3Rpb24gcm91dGluZQogICovCi1zdGF0aWMgaW50IF9faW5pdCB0czc4eHhfcnRjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdHM3OHh4X3RzX3J0Y19sb2FkKHZvaWQpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGNoYXIgdG1wX3J0YzAsIHRtcF9ydGMxOwogCi0JdG1wX3J0YzAgPSB0czc4eHhfcnRjX3JlYWRieXRlKDEyNik7Ci0JdG1wX3J0YzEgPSB0czc4eHhfcnRjX3JlYWRieXRlKDEyNyk7CisJdG1wX3J0YzAgPSB0czc4eHhfdHNfcnRjX3JlYWRieXRlKDEyNik7CisJdG1wX3J0YzEgPSB0czc4eHhfdHNfcnRjX3JlYWRieXRlKDEyNyk7CiAKLQl0czc4eHhfcnRjX3dyaXRlYnl0ZSgweDAwLCAxMjYpOwotCXRzNzh4eF9ydGNfd3JpdGVieXRlKDB4NTUsIDEyNyk7Ci0JaWYgKHRzNzh4eF9ydGNfcmVhZGJ5dGUoMTI3KSA9PSAweDU1KSB7Ci0JCXRzNzh4eF9ydGNfd3JpdGVieXRlKDB4YWEsIDEyNyk7Ci0JCWlmICh0czc4eHhfcnRjX3JlYWRieXRlKDEyNykgPT0gMHhhYQotCQkJCSYmIHRzNzh4eF9ydGNfcmVhZGJ5dGUoMTI2KSA9PSAweDAwKSB7Ci0JCQl0czc4eHhfcnRjX3dyaXRlYnl0ZSh0bXBfcnRjMCwgMTI2KTsKLQkJCXRzNzh4eF9ydGNfd3JpdGVieXRlKHRtcF9ydGMxLCAxMjcpOwotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ0czc4eHhfcnRjX2RldmljZSk7Ci0JCQlyZXR1cm4gMTsKKwl0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSgweDAwLCAxMjYpOworCXRzNzh4eF90c19ydGNfd3JpdGVieXRlKDB4NTUsIDEyNyk7CisJaWYgKHRzNzh4eF90c19ydGNfcmVhZGJ5dGUoMTI3KSA9PSAweDU1KSB7CisJCXRzNzh4eF90c19ydGNfd3JpdGVieXRlKDB4YWEsIDEyNyk7CisJCWlmICh0czc4eHhfdHNfcnRjX3JlYWRieXRlKDEyNykgPT0gMHhhYQorCQkJCSYmIHRzNzh4eF90c19ydGNfcmVhZGJ5dGUoMTI2KSA9PSAweDAwKSB7CisJCQl0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSh0bXBfcnRjMCwgMTI2KTsKKwkJCXRzNzh4eF90c19ydGNfd3JpdGVieXRlKHRtcF9ydGMxLCAxMjcpOworCisJCQlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLmluaXQgPT0gMCkgeworCQkJCXJjID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ0czc4eHhfdHNfcnRjX2RldmljZSk7CisJCQkJaWYgKCFyYykKKwkJCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLmluaXQgPSAxOworCQkJfSBlbHNlCisJCQkJcmMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKCZ0czc4eHhfdHNfcnRjX2RldmljZSk7CisKKwkJCXJldHVybiByYzsKIAkJfQogCX0KIAorCXJldHVybiAtRU5PREVWOworfTsKKworc3RhdGljIHZvaWQgdHM3OHh4X3RzX3J0Y191bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKCZ0czc4eHhfdHNfcnRjX2RldmljZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkFORCBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRTX05BTkRfQ1RSTAkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDgwMCkJLyogVklSVCAqLworI2RlZmluZSBUU19OQU5EX0RBVEEJKFRTNzhYWF9GUEdBX1JFR1NfUEhZU19CQVNFIHwgMHg4MDQpCS8qIFBIWVMgKi8KKworLyoKKyAqIGhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICogY3RybDoKKyAqIE5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMgorICogTkFORF9DTEU6IGJpdCAxIC0+IGJpdCAxCisgKiBOQU5EX0FMRTogYml0IDIgLT4gYml0IDAKKyAqLworc3RhdGljIHZvaWQgdHM3OHh4X3RzX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQl1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKKworCQliaXRzID0gKGN0cmwgJiBOQU5EX05DRSkgPDwgMjsKKwkJYml0cyB8PSBjdHJsICYgTkFORF9DTEU7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPj4gMjsKKworCQl3cml0ZWIoKHJlYWRiKFRTX05BTkRfQ1RSTCkgJiB+MHg3KSB8IGJpdHMsIFRTX05BTkRfQ1RSTCk7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCB0aGlzLT5JT19BRERSX1cpOworfQorCitzdGF0aWMgaW50IHRzNzh4eF90c19uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gcmVhZGIoVFNfTkFORF9DVFJMKSAmIDB4MjA7Cit9CisKK2NvbnN0IGNoYXIgKnRzX25hbmRfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdHM3OHh4X3RzX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYnIiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzEyOEssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LCB7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNE0sCisJfSwgeworCQkubmFtZQkJPSAiaW5pdHJkIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzRNLAorCX0sIHsKKwkJLm5hbWUJCT0gInJvb3RmcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHRzNzh4eF90c19uYW5kX2RhdGEgPSB7CisJLmNoaXAJPSB7CisJCS5wYXJ0X3Byb2JlX3R5cGVzCT0gdHNfbmFuZF9wYXJ0X3Byb2JlcywKKwkJLnBhcnRpdGlvbnMJCT0gdHM3OHh4X3RzX25hbmRfcGFydHMsCisJCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUodHM3OHh4X3RzX25hbmRfcGFydHMpLAorCQkuY2hpcF9kZWxheQkJPSAxNSwKKwkJLm9wdGlvbnMJCT0gTkFORF9VU0VfRkxBU0hfQkJULAorCX0sCisJLmN0cmwJPSB7CisJCS8qCisJCSAqIFRoZSBIVyBFQ0Mgb2ZmbG9hZGluZyBmdW5jdGlvbnMsIHVzZWQgdG8gZ2l2ZSBhYm91dCBhIDklCisJCSAqIHBlcmZvcm1hbmNlIGluY3JlYXNlIGZvciAnZGQgaWY9L2Rldi9tdGRibG9ja1gnIGFuZCA1JSBmb3IKKwkJICogbmFuZGR1bXAuICBUaGlzIGFsbCBob3dldmVyIHdhcyBjaGFuZ2VkIGJ5IGdpdCBjb21taXQKKwkJICogZTZjZjVkZjE4MzhjMjhiYjA2MGFjNDViNTU4NWU0OGU3MWJiYzc0MCBzbyBub3cgdGhlcmUgaXMKKwkJICogbm8gcGVyZm9ybWFuY2UgYWR2YW50YWdlIHRvIGJlIGhhZCBzbyB3ZSBubyBsb25nZXIgYm90aGVyCisJCSAqLworCQkuY21kX2N0cmwJCT0gdHM3OHh4X3RzX25hbmRfY21kX2N0cmwsCisJCS5kZXZfcmVhZHkJCT0gdHM3OHh4X3RzX25hbmRfZGV2X3JlYWR5LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRzNzh4eF90c19uYW5kX3Jlc291cmNlcyA9IHsKKwkuc3RhcnQJCT0gVFNfTkFORF9EQVRBLAorCS5lbmQJCT0gVFNfTkFORF9EQVRBICsgNCwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzh4eF90c19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdHM3OHh4X3RzX25hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZ0czc4eHhfdHNfbmFuZF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworc3RhdGljIGludCB0czc4eHhfdHNfbmFuZF9sb2FkKHZvaWQpCit7CisJaW50IHJjOworCisJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQuaW5pdCA9PSAwKSB7CisJCXJjID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ0czc4eHhfdHNfbmFuZF9kZXZpY2UpOworCQlpZiAoIXJjKQorCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5pbml0ID0gMTsKKwl9IGVsc2UKKwkJcmMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKCZ0czc4eHhfdHNfbmFuZF9kZXZpY2UpOworCisJcmV0dXJuIHJjOworfTsKKworc3RhdGljIHZvaWQgdHM3OHh4X3RzX25hbmRfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX2RlbCgmdHM3OHh4X3RzX25hbmRfZGV2aWNlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGUEdBICdob3RwbHVnJyBzdXBwb3J0IGNvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdHM3OHh4X2ZwZ2FfZGV2aWNlc196ZXJvX2luaXQodm9pZCkKK3sKKwl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMuaW5pdCA9IDA7CisJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5pbml0ID0gMDsKK30KKworc3RhdGljIHZvaWQgdHM3OHh4X2ZwZ2Ffc3VwcG9ydHModm9pZCkKK3sKKwkvKiBUT0RPOiBwdXQgdGhpcyAndGFibGUnIGludG8gdHM3OHh4LWZwZ2EuaCAqLworCXN3aXRjaCAodHM3OHh4X2ZwZ2EuaWQpIHsKKwljYXNlIFRTNzgwMF9SRVZfMToKKwljYXNlIFRTNzgwMF9SRVZfMjoKKwljYXNlIFRTNzgwMF9SRVZfMzoKKwljYXNlIFRTNzgwMF9SRVZfNDoKKwljYXNlIFRTNzgwMF9SRVZfNToKKwkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAxOworCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9IDA7CisJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHRzNzh4eF9mcGdhX2xvYWRfZGV2aWNlcyh2b2lkKQoreworCWludCB0bXAsIHJldCA9IDA7CisKKwlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPT0gMSkgeworCQl0bXAgPSB0czc4eHhfdHNfcnRjX2xvYWQoKTsKKwkJaWYgKHRtcCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVFMtNzh4eDogUlRDIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5wcmVzZW50ID0gMDsKKwkJfQorCQlyZXQgfD0gdG1wOworCX0KKwlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID09IDEpIHsKKwkJdG1wID0gdHM3OHh4X3RzX25hbmRfbG9hZCgpOworCQlpZiAodG1wKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJUUy03OHh4OiBOQU5EIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9IDA7CisJCX0KKwkJcmV0IHw9IHRtcDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRzNzh4eF9mcGdhX3VubG9hZF9kZXZpY2VzKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPT0gMSkKKwkJdHM3OHh4X3RzX3J0Y191bmxvYWQoKTsKKwlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID09IDEpCisJCXRzNzh4eF90c19uYW5kX3VubG9hZCgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0czc4eHhfZnBnYV9sb2FkKHZvaWQpCit7CisJdHM3OHh4X2ZwZ2EuaWQgPSByZWFkbChUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJUUy03OHh4IEZQR0E6IG1hZ2ljPTB4JS42eCwgcmV2PTB4JS4yeFxuIiwKKwkJCSh0czc4eHhfZnBnYS5pZCA+PiA4KSAmIDB4ZmZmZmZmLAorCQkJdHM3OHh4X2ZwZ2EuaWQgJiAweGZmKTsKKworCXRzNzh4eF9mcGdhX3N1cHBvcnRzKCk7CisKKwlpZiAodHM3OHh4X2ZwZ2FfbG9hZF9kZXZpY2VzKCkpIHsKKwkJdHM3OHh4X2ZwZ2Euc3RhdGUgPSAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAlyZXR1cm4gMDsKIH07Ci0jZWxzZQotc3RhdGljIGludCBfX2luaXQgdHM3OHh4X3J0Y19pbml0KHZvaWQpCisKK3N0YXRpYyBpbnQgdHM3OHh4X2ZwZ2FfdW5sb2FkKHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGZwZ2FfaWQ7CisKKwlmcGdhX2lkID0gcmVhZGwoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UpOworCisJLyoKKwkgKiBUaGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgZmVhc2libGUgd2F5IHRvIGJsb2NrIGFjY2VzcyB0byB0aGUgR1BJTworCSAqIHBpbnMgZnJvbSB1c2Vyc3BhY2UgKC9kZXYvbWVtKS4gIFRoaXMgaWYgY2xhdXNlIHNob3VsZCBob3BlZnVsbHkgd2FybgorCSAqIHRob3NlIGZvb2xpc2ggZW5vdWdoIG5vdCB0byBmb2xsb3cgJ3BvbGljeScgOikKKwkgKgorCSAqIFVySlRBRyBTVk4gc2luY2UgcjEzODEgY2FuIGJlIHVzZWQgdG8gcmVwcm9ncmFtIHRoZSBGUEdBCisJICovCisJaWYgKHRzNzh4eF9mcGdhLmlkICE9IGZwZ2FfaWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCSJUUy03OHh4IEZQR0E6IG1hZ2ljL3JldiBtaXNtYXRjaFxuIgorCQkJIlRTLTc4eHggRlBHQTogd2FzIDB4JS42eC8lLjJ4IGJ1dCBub3cgMHglLjZ4LyUuMnhcbiIsCisJCQkodHM3OHh4X2ZwZ2EuaWQgPj4gOCkgJiAweGZmZmZmZiwgdHM3OHh4X2ZwZ2EuaWQgJiAweGZmLAorCQkJKGZwZ2FfaWQgPj4gOCkgJiAweGZmZmZmZiwgZnBnYV9pZCAmIDB4ZmYpOworCQl0czc4eHhfZnBnYS5zdGF0ZSA9IC0xOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICh0czc4eHhfZnBnYV91bmxvYWRfZGV2aWNlcygpKSB7CisJCXRzNzh4eF9mcGdhLnN0YXRlID0gLTE7CisJCXJldHVybiAtRUJVU1k7CisJfQorCiAJcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTQVRBCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIHRzNzh4eF9zYXRhX2RhdGEgPSB7Ci0JLm5fcG9ydHMJPSAyLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBwcmludCBzb21lIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgYm9hcmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgX19pbml0IHRzNzh4eF9wcmludF9ib2FyZF9pZCh2b2lkKQorc3RhdGljIHNzaXplX3QgdHM3OHh4X2ZwZ2Ffc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXVuc2lnbmVkIGludCBib2FyZF9pbmZvOworCWlmICh0czc4eHhfZnBnYS5zdGF0ZSA8IDApCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImJvcmtlZFxuIik7CiAKLQlib2FyZF9pbmZvID0gcmVhZGwoVFM3OFhYX0ZQR0FfUkVHU19TWVNDT05fSUQpOwotCXByaW50ayhLRVJOX0lORk8gIlRTLTc4eHggSW5mbzogRlBHQSByZXY9JS4yeCwgQm9hcmQgTWFnaWM9JS42eCwgIiwKLQkJCQlib2FyZF9pbmZvICYgMHhmZiwKLQkJCQkoYm9hcmRfaW5mbyA+PiA4KSAmIDB4ZmZmZmZmKTsKLQlib2FyZF9pbmZvID0gcmVhZGwoVFM3OFhYX0ZQR0FfUkVHU19TWVNDT05fTENESSk7Ci0JcHJpbnRrKCJKUDE9JWQsIEpQMj0lZFxuIiwKLQkJCQkoYm9hcmRfaW5mbyA+PiAzMCkgJiAweDEsCi0JCQkJKGJvYXJkX2luZm8gPj4gMzEpICYgMHgxKTsKLX07CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICh0czc4eHhfZnBnYS5zdGF0ZSkgPyAib25saW5lIiA6ICJvZmZsaW5lIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRzNzh4eF9mcGdhX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCWludCB2YWx1ZSwgcmV0OworCisJaWYgKHRzNzh4eF9mcGdhLnN0YXRlIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlRTLTc4eHggRlBHQTogYm9ya2VkLCB5b3UgbXVzdCBwb3dlcmN5Y2xlIGFzYXBcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChzdHJuY21wKGJ1ZiwgIm9ubGluZSIsIHNpemVvZigib25saW5lIikgLSAxKSA9PSAwKQorCQl2YWx1ZSA9IDE7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICJvZmZsaW5lIiwgc2l6ZW9mKCJvZmZsaW5lIikgLSAxKSA9PSAwKQorCQl2YWx1ZSA9IDA7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAidHM3OHh4X2ZwZ2Ffc3RvcmU6IEludmFsaWQgdmFsdWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHM3OHh4X2ZwZ2Euc3RhdGUgPT0gdmFsdWUpCisJCXJldHVybiBuOworCisJcmV0ID0gKHRzNzh4eF9mcGdhLnN0YXRlID09IDApCisJCT8gdHM3OHh4X2ZwZ2FfbG9hZCgpCisJCTogdHM3OHh4X2ZwZ2FfdW5sb2FkKCk7CisKKwlpZiAoIShyZXQgPCAwKSkKKwkJdHM3OHh4X2ZwZ2Euc3RhdGUgPSB2YWx1ZTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHRzNzh4eF9mcGdhX2F0dHIgPQorCV9fQVRUUih0czc4eHhfZnBnYSwgMDY0NCwgdHM3OHh4X2ZwZ2Ffc2hvdywgdHM3OHh4X2ZwZ2Ffc3RvcmUpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdlbmVyYWwgU2V0dXAKQEAgLTIyMywyMCArNDQ4LDYgQEAKIAl7IDE3LCBNUFBfVUFSVCB9LAogCXsgMTgsIE1QUF9VQVJUIH0sCiAJeyAxOSwgTVBQX1VBUlQgfSwKLQl7IC0xIH0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdHM3OHh4X2luaXQodm9pZCkKLXsKLQkvKgotCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZCB0byBiZSBjYWxsZWQgZWFybHkuCi0JICovCi0Jb3Jpb241eF9pbml0KCk7Ci0KLQl0czc4eHhfcHJpbnRfYm9hcmRfaWQoKTsKLQotCW9yaW9uNXhfbXBwX2NvbmYodHM3OHh4X21wcF9tb2Rlcyk7Ci0KIAkvKgogCSAqIE1QUFsyMF0gUENJIENsb2NrIE91dCAxCiAJICogTVBQWzIxXSBQQ0kgQ2xvY2sgT3V0IDAKQEAgLTI0NSw2ICs0NTYsMTkgQEAKIAkgKiBNUFBbMjRdIFVudXNlZAogCSAqIE1QUFsyNV0gVW51c2VkCiAJICovCisJeyAtMSB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRzNzh4eF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCS8qCisJICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlvcmlvbjV4X2luaXQoKTsKKworCW9yaW9uNXhfbXBwX2NvbmYodHM3OHh4X21wcF9tb2Rlcyk7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSBwZXJpcGhlcmFscy4KQEAgLTI1NywxMiArNDgxLDEyIEBACiAJb3Jpb241eF91YXJ0MV9pbml0KCk7CiAJb3Jpb241eF94b3JfaW5pdCgpOwogCi0Jb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oVFM3OFhYX05PUl9CT09UX0JBU0UsCi0JCQkJICAgVFM3OFhYX05PUl9CT09UX1NJWkUpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdHM3OHh4X25vcl9ib290X2ZsYXNoKTsKLQotCWlmICghdHM3OHh4X3J0Y19pbml0KCkpCi0JCXByaW50ayhLRVJOX0lORk8gIlRTLTc4eHggUlRDIG5vdCBkZXRlY3RlZCBvciBlbmFibGVkXG4iKTsKKwkvKiBGUEdBIGluaXQgKi8KKwl0czc4eHhfZnBnYV9kZXZpY2VzX3plcm9faW5pdCgpOworCXJldCA9IHRzNzh4eF9mcGdhX2xvYWQoKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShwb3dlcl9rb2JqLCAmdHM3OHh4X2ZwZ2FfYXR0ci5hdHRyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInN5c2ZzX2NyZWF0ZV9maWxlIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVFM3OFhYLCAiVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03OHh4IFNCQyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBlMTJlN2FiLi41ZGRhMmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljcHVfcmVzZXQoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCA4ZWVhNzMwLi45NmEyMDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTQwLDYgKzQwLDkgQEAKIGNvbmZpZyBHVU1TVElYX0FNMjAwRVBECiAJYm9vbCAiRW5hYmxlIEFNMjAwRVBEIGJvYXJkIHN1cHBvcnQiCiAKK2NvbmZpZyBHVU1TVElYX0FNMzAwRVBECisJYm9vbCAiRW5hYmxlIEFNMzAwRVBEIGJvYXJkIHN1cHBvcnQiCisKIGVuZGNob2ljZQogCiBjb25maWcgTUFDSF9JTlRFTE1PVEUyCkBAIC0yNTQsMTAgKzI1NywyNCBAQAogCWJvb2wgIkNvbXB1TGFiIEVNLXgyNzAgcGxhdGZvcm0iCiAJc2VsZWN0IFBYQTI3eAogCi1jb25maWcgTUFDSF9DT0xJQlJJCi0JYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYMjd4IgorY29uZmlnIE1BQ0hfRVhFREEKKwlib29sICJDb21wdUxhYiBlWGVkYSBwbGF0Zm9ybSIKIAlzZWxlY3QgUFhBMjd4CiAKK2NvbmZpZyBNQUNIX0NPTElCUkkKKwlib29sICJUb3JhZGV4IENvbGlicmkgUFhBMjcwIgorCXNlbGVjdCBQWEEyN3gKKworY29uZmlnIE1BQ0hfQ09MSUJSSTMwMAorCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWEEzMDAvMzEwIgorCXNlbGVjdCBQWEEzeHgKKwlzZWxlY3QgQ1BVX1BYQTMwMAorCitjb25maWcgTUFDSF9DT0xJQlJJMzIwCisJYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYQTMyMCIKKwlzZWxlY3QgUFhBM3h4CisJc2VsZWN0IENQVV9QWEEzMjAKKwogY29uZmlnIE1BQ0hfWllMT05JVEUKIAlib29sICJQWEEzeHggRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKGFrYSBaeWxvbml0ZSkiCiAJc2VsZWN0IFBYQTN4eApAQCAtMjk1LDggKzMxMiwxNSBAQAogCWJvb2wgIkVuYWJsZSBIVEMgTWFnaWNpYW4gU3VwcG9ydCIKIAlzZWxlY3QgUFhBMjd4CiAJc2VsZWN0IElXTU1YVAorCXNlbGVjdCBQWEFfU1NQCisJc2VsZWN0IEhBVkVfUFdNCiAJc2VsZWN0IFBYQV9IQVZFX0JPQVJEX0lSUVMKIAorY29uZmlnIE1BQ0hfSElNQUxBWUEKKwlib29sICJIVEMgSGltYWxheWEgU3VwcG9ydCIKKwlzZWxlY3QgQ1BVX1BYQTI2eAorCXNlbGVjdCBGQl9XMTAwCisKIGNvbmZpZyBNQUNIX01JT0E3MDEKIAlib29sICJNaXRhYyBNaW8gQTcwMSBTdXBwb3J0IgogCXNlbGVjdCBQWEEyN3gKQEAgLTMxOSw2ICszNDMsMTYgQEAKIAlib29sICJQWEEgYmFzZWQgUGFsbSBQREFzIgogCXNlbGVjdCBIQVZFX1BXTQogCitjb25maWcgTUFDSF9QQUxNVDUKKwlib29sICJQYWxtIFR1bmdzdGVufFQ1IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9QWEFfUEFMTQorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHVuZ3N0ZW58VDUKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQUxNVFgKIAlib29sICJQYWxtIFR8WCIKIAlkZWZhdWx0IHkKQEAgLTMzOSw2ICszNzMsMTYgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gUGFsbSBaaXJlIDcyCiAJICBoYW5kaGVsZCBjb21wdXRlci4KIAorY29uZmlnIE1BQ0hfUEFMTUxECisJYm9vbCAiUGFsbSBMaWZlRHJpdmUiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBJV01NWFQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgUGFsbSBMaWZlRHJpdmUKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQ005OTBfQkFTRUJPQVJECiAJYm9vbCAiUEhZVEVDIFBDTS05OTAgZGV2ZWxvcG1lbnQgYm9hcmQiCiAJc2VsZWN0IEhBVkVfUFdNCkBAIC0zNTksNiArNDAzLDE4IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgTUFDSF9DU0I3MjYKKwlib29sICJFbmFibGUgQ29nZW50IENTQjcyNiBTeXN0ZW0gT24gYSBNb2R1bGUiCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBJV01NWFQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgQ29nZW50CisJICBDU0I3MjYgU3lzdGVtIE9uIE1vZHVsZS4KKworY29uZmlnIENTQjcyNl9DU0I3MDEKKwlib29sICJFbmFibGUgc3VwcHJvdCBmb3IgQ1NCNzAxIGJhc2Vib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfQ1NCNzI2CisKIGNvbmZpZyBQWEFfRVpYCiAJYm9vbCAiTW90b3JvbGEgRVpYIFBsYXRmb3JtIgogCXNlbGVjdCBQWEEyN3gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggN2IyOGJiNS4uYzgwZTFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTMsOCArMyw4IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQgKG11c3QgYmUgbGlua2VkIGJlZm9yZSBib2FyZCBzcGVjaWZpYyBzdXBwb3J0KQotb2JqLXkJCQkJKz0gY2xvY2subyBkZXZpY2VzLm8gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIFwKLQkJCQkgICB0aW1lLm8gZ3Bpby5vIHJlc2V0Lm8KK29iai15CQkJCSs9IGNsb2NrLm8gZGV2aWNlcy5vIGdlbmVyaWMubyBpcnEubyBcCisJCQkJICAgdGltZS5vIHJlc2V0Lm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8gc2xlZXAubyBzdGFuZGJ5Lm8KIAogaWZlcSAoJChDT05GSUdfQ1BVX0ZSRVEpLHkpCkBAIC0yOCwxMyArMjgsMTYgQEAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAogb2JqLSQoQ09ORklHX0FSQ0hfR1VNU1RJWCkJKz0gZ3Vtc3RpeC5vCiBvYmotJChDT05GSUdfR1VNU1RJWF9BTTIwMEVQRCkJKz0gYW0yMDBlcGQubworb2JqLSQoQ09ORklHX0dVTVNUSVhfQU0zMDBFUEQpCSs9IGFtMzAwZXBkLm8KIG9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spCSs9IGx1YmJvY2subwogb2JqLSQoQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzApICs9IGxwZDI3MC5vCiBvYmotJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpCSs9IG1haW5zdG9uZS5vCiBvYmotJChDT05GSUdfTUFDSF9NUDkwMEMpCSs9IG1wOTAwLm8KIG9iai0kKENPTkZJR19BUkNIX1BYQV9JRFApCSs9IGlkcC5vCiBvYmotJChDT05GSUdfTUFDSF9UUklaRVBTNCkJKz0gdHJpemVwczQubwotb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSSkJKz0gY29saWJyaS5vCitvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJKQkrPSBjb2xpYnJpLXB4YTI3MC5vCitvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJMzAwKQkrPSBjb2xpYnJpLXB4YTN4eC5vIGNvbGlicmktcHhhMzAwLm8KK29iai0kKENPTkZJR19NQUNIX0NPTElCUkkzMjApCSs9IGNvbGlicmktcHhhM3h4Lm8gY29saWJyaS1weGEzMjAubwogb2JqLSQoQ09ORklHX01BQ0hfSDUwMDApCSs9IGg1MDAwLm8KIG9iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBzaGFycHNsX3BtLm8gY29yZ2lfcG0ubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBzaGFycHNsX3BtLm8gc3BpdHpfcG0ubwpAQCAtNDUsNiArNDgsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkJCSs9IHRvc2Eubwogb2JqLSQoQ09ORklHX01BQ0hfRU1fWDI3MCkJKz0gZW0teDI3MC5vCiBvYmotJChDT05GSUdfTUFDSF9NQUdJQ0lBTikJKz0gbWFnaWNpYW4ubworb2JqLSQoQ09ORklHX01BQ0hfSElNQUxBWUEpCSs9IGhpbWFsYXlhLm8KIG9iai0kKENPTkZJR19NQUNIX01JT0E3MDEpCSs9IG1pb2E3MDEubyBtaW9hNzAxX2Jvb3RyZXN1bWUubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMpCSs9IGVzZXJpZXMubwogb2JqLSQoQ09ORklHX01BQ0hfRTMzMCkJCSs9IGUzMzAubwpAQCAtNTMsNyArNTcsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfRTc1MCkJCSs9IGU3NTAubwogb2JqLSQoQ09ORklHX01BQ0hfRTQwMCkJCSs9IGU0MDAubwogb2JqLSQoQ09ORklHX01BQ0hfRTgwMCkJCSs9IGU4MDAubworb2JqLSQoQ09ORklHX01BQ0hfUEFMTVQ1KQkrPSBwYWxtdDUubwogb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkrPSBwYWxtdHgubworb2JqLSQoQ09ORklHX01BQ0hfUEFMTUxEKQkrPSBwYWxtbGQubwogb2JqLSQoQ09ORklHX01BQ0hfUEFMTVo3MikJKz0gcGFsbXo3Mi5vCiBvYmotJChDT05GSUdfQVJDSF9WSVBFUikJKz0gdmlwZXIubwogCkBAIC03MSw2ICs3Nyw4IEBACiBvYmotJChDT05GSUdfUFhBX0VaWCkgICAgICAgICAgICs9IGV6eC5vCiAKIG9iai0kKENPTkZJR19NQUNIX0lOVEVMTU9URTIpICAgKz0gaW1vdGUyLm8KK29iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KK29iai0kKENPTkZJR19DU0I3MjZfQ1NCNzAxKQkrPSBjc2I3MDEubwogCiAjIFN1cHBvcnQgZm9yIGJsaW5reSBsaWdodHMKIGxlZC15IDo9IGxlZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2FtMjAwZXBkLmMKaW5kZXggNzdlZTgwZS4uMzQ5OWZhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTIwMGVwZC5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2d1bXN0aXguaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9hbTMwMGVwZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvYW0zMDBlcGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQxMGExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYW0zMDBlcGQuYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIGFtMzAwZXBkLmMgLS0gUGxhdGZvcm0gZGV2aWNlIGZvciBBTTMwMCBFUEQga2l0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBKYXlhIEt1bWFyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGJ5IGhlbHAgYW5kIGVxdWlwbWVudCBzdXBwb3J0IGZyb20gRS1JbmsKKyAqIENvcnBvcmF0aW9uLiBodHRwOi8vc3VwcG9ydC5laW5rLmNvbS9jb21tdW5pdHkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyB3cml0dGVuIHRvIGJlIHVzZWQgd2l0aCB0aGUgQnJvYWRzaGVldCBkaXNwbGF5IGNvbnRyb2xsZXIuCisgKiBvbiB0aGUgQU0zMDAgRVBEIHByb3RvdHlwZSBraXQvZGV2ZWxvcG1lbnQga2l0IHdpdGggYW4gRS1JbmsgODAweDYwMAorICogVml6cGxleCBFUEQgb24gYSBHdW1zdGl4IGJvYXJkIHVzaW5nIHRoZSBCcm9hZHNoZWV0IGludGVyZmFjZSBib2FyZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2d1bXN0aXguaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyNpbmNsdWRlIDx2aWRlby9icm9hZHNoZWV0ZmIuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBwYW5lbF90eXBlID0gNjsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphbTMwMF9kZXZpY2U7CitzdGF0aWMgc3RydWN0IGJyb2Fkc2hlZXRfYm9hcmQgYW0zMDBfYm9hcmQ7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFtMzAwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8xNl9HUElPLAorCUdQSU8xN19HUElPLAorCUdQSU8zMl9HUElPLAorCUdQSU80OF9HUElPLAorCUdQSU80OV9HUElPLAorCUdQSU81MV9HUElPLAorCUdQSU83NF9HUElPLAorCUdQSU83NV9HUElPLAorCUdQSU83Nl9HUElPLAorCUdQSU83N19HUElPLAorCisJLyogdGhpcyBpcyB0aGUgMTYtYml0IGhkYiBidXMgNTgtNzMgKi8KKwlHUElPNThfR1BJTywKKwlHUElPNTlfR1BJTywKKwlHUElPNjBfR1BJTywKKwlHUElPNjFfR1BJTywKKworCUdQSU82Ml9HUElPLAorCUdQSU82M19HUElPLAorCUdQSU82NF9HUElPLAorCUdQSU82NV9HUElPLAorCisJR1BJTzY2X0dQSU8sCisJR1BJTzY3X0dQSU8sCisJR1BJTzY4X0dQSU8sCisJR1BJTzY5X0dQSU8sCisKKwlHUElPNzBfR1BJTywKKwlHUElPNzFfR1BJTywKKwlHUElPNzJfR1BJTywKKwlHUElPNzNfR1BJTywKK307CisKKy8qIHJlZ2lzdGVyIG9mZnNldHMgZm9yIGdwaW8gY29udHJvbCAqLworI2RlZmluZSBQV1JfR1BJT19QSU4JMTYKKyNkZWZpbmUgQ0ZHX0dQSU9fUElOCTE3CisjZGVmaW5lIFJEWV9HUElPX1BJTgkzMgorI2RlZmluZSBEQ19HUElPX1BJTgk0OAorI2RlZmluZSBSU1RfR1BJT19QSU4JNDkKKyNkZWZpbmUgTEVEX0dQSU9fUElOCTUxCisjZGVmaW5lIFJEX0dQSU9fUElOCTc0CisjZGVmaW5lIFdSX0dQSU9fUElOCTc1CisjZGVmaW5lIENTX0dQSU9fUElOCTc2CisjZGVmaW5lIElSUV9HUElPX1BJTgk3NworCisvKiBoZGIgYnVzICovCisjZGVmaW5lIERCMF9HUElPX1BJTgk1OAorI2RlZmluZSBEQjE1X0dQSU9fUElOCTczCisKK3N0YXRpYyBpbnQgZ3Bpb3NbXSA9IHsgUFdSX0dQSU9fUElOLCBDRkdfR1BJT19QSU4sIFJEWV9HUElPX1BJTiwgRENfR1BJT19QSU4sCisJCQlSU1RfR1BJT19QSU4sIFJEX0dQSU9fUElOLCBXUl9HUElPX1BJTiwgQ1NfR1BJT19QSU4sCisJCQlJUlFfR1BJT19QSU4sIExFRF9HUElPX1BJTiB9Oworc3RhdGljIGNoYXIgKmdwaW9fbmFtZXNbXSA9IHsgIlBXUiIsICJDRkciLCAiUkRZIiwgIkRDIiwgIlJTVCIsICJSRCIsICJXUiIsCisJCQkJIkNTIiwgIklSUSIsICJMRUQiIH07CisKK3N0YXRpYyBpbnQgYW0zMDBfd2FpdF9ldmVudChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCS8qIHRvZG86IGltcHJvdmUgZXJyIHJlY292ZXJ5ICovCisJd2FpdF9ldmVudChwYXItPndhaXRxLCBncGlvX2dldF92YWx1ZShSRFlfR1BJT19QSU4pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbTMwMF9pbml0X2dwaW9fcmVncyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCWludCBpOworCWludCBlcnI7CisJY2hhciBkYm5hbWVbOF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShncGlvcyk7IGkrKykgeworCQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb3NbaV0sIGdwaW9fbmFtZXNbaV0pOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZhbTMwMF9kZXZpY2UtPmRldiwgImZhaWxlZCByZXF1ZXN0aW5nICIKKwkJCQkiZ3BpbyAlcywgZXJyPSVkXG4iLCBncGlvX25hbWVzW2ldLCBlcnIpOworCQkJZ290byBlcnJfcmVxX2dwaW87CisJCX0KKwl9CisKKwkvKiB3ZSBhbHNvIG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBoZGIgYnVzICovCisJZm9yIChpID0gREIwX0dQSU9fUElOOyBpIDw9IERCMTVfR1BJT19QSU47IGkrKykgeworCQlzcHJpbnRmKGRibmFtZSwgIkRCJWQiLCBpKTsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KGksIGRibmFtZSk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmFtMzAwX2RldmljZS0+ZGV2LCAiZmFpbGVkIHJlcXVlc3RpbmcgIgorCQkJCSJncGlvICVkLCBlcnI9JWRcbiIsIGksIGVycik7CisJCQl3aGlsZSAoaSA+PSBEQjBfR1BJT19QSU4pCisJCQkJZ3Bpb19mcmVlKGktLSk7CisJCQlpID0gQVJSQVlfU0laRShncGlvcykgLSAxOworCQkJZ290byBlcnJfcmVxX2dwaW87CisJCX0KKwl9CisKKwkvKiBzZXR1cCB0aGUgb3V0cHV0cyBhbmQgaW5pdCB2YWx1ZXMgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUFdSX0dQSU9fUElOLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ0ZHX0dQSU9fUElOLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRENfR1BJT19QSU4sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChSRF9HUElPX1BJTiwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFdSX0dQSU9fUElOLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ1NfR1BJT19QSU4sIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChSU1RfR1BJT19QSU4sIDApOworCisJLyogc2V0dXAgdGhlIGlucHV0cyAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KFJEWV9HUElPX1BJTik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSVJRX0dQSU9fUElOKTsKKworCS8qIHN0YXJ0IHRoZSBoZGIgYnVzIGFzIGFuIGlucHV0ICovCisJZm9yIChpID0gREIwX0dQSU9fUElOOyBpIDw9IERCMTVfR1BJT19QSU47IGkrKykKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGksIDApOworCisJLyogZ28gaW50byBjb21tYW5kIG1vZGUgKi8KKwlncGlvX3NldF92YWx1ZShDRkdfR1BJT19QSU4sIDEpOworCWdwaW9fc2V0X3ZhbHVlKFJTVF9HUElPX1BJTiwgMCk7CisJbXNsZWVwKDEwKTsKKwlncGlvX3NldF92YWx1ZShSU1RfR1BJT19QSU4sIDEpOworCW1zbGVlcCgxMCk7CisJYW0zMDBfd2FpdF9ldmVudChwYXIpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZXFfZ3BpbzoKKwl3aGlsZSAoaSA+IDApCisJCWdwaW9fZnJlZShncGlvc1tpLS1dKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYW0zMDBfaW5pdF9ib2FyZChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCXJldHVybiBhbTMwMF9pbml0X2dwaW9fcmVncyhwYXIpOworfQorCitzdGF0aWMgdm9pZCBhbTMwMF9jbGVhbnVwKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJaW50IGk7CisKKwlmcmVlX2lycShJUlFfR1BJTyhSRFlfR1BJT19QSU4pLCBwYXIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3Bpb3MpOyBpKyspCisJCWdwaW9fZnJlZShncGlvc1tpXSk7CisKKwlmb3IgKGkgPSBEQjBfR1BJT19QSU47IGkgPD0gREIxNV9HUElPX1BJTjsgaSsrKQorCQlncGlvX2ZyZWUoaSk7CisKK30KKworc3RhdGljIHUxNiBhbTMwMF9nZXRfaGRiKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IHJlcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChEQjE1X0dQSU9fUElOIC0gREIwX0dQSU9fUElOKSA7IGkrKykKKwkJcmVzIHw9IChncGlvX2dldF92YWx1ZShEQjBfR1BJT19QSU4gKyBpKSkgPyAoMSA8PCBpKSA6IDA7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBhbTMwMF9zZXRfaGRiKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSAoREIxNV9HUElPX1BJTiAtIERCMF9HUElPX1BJTikgOyBpKyspCisJCWdwaW9fc2V0X3ZhbHVlKERCMF9HUElPX1BJTiArIGksIChkYXRhID4+IGkpICYgMHgwMSk7Cit9CisKKworc3RhdGljIHZvaWQgYW0zMDBfc2V0X2N0bChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1bnNpZ25lZCBjaGFyIGJpdCwKKwkJCQl1OCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKGJpdCkgeworCWNhc2UgQlNfQ1M6CisJCWdwaW9fc2V0X3ZhbHVlKENTX0dQSU9fUElOLCBzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgQlNfREM6CisJCWdwaW9fc2V0X3ZhbHVlKERDX0dQSU9fUElOLCBzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgQlNfV1I6CisJCWdwaW9fc2V0X3ZhbHVlKFdSX0dQSU9fUElOLCBzdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBhbTMwMF9nZXRfcGFuZWxfdHlwZSh2b2lkKQoreworCXJldHVybiBwYW5lbF90eXBlOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYW0zMDBfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGRldl9pZDsKKworCXdha2VfdXAoJnBhci0+d2FpdHEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBhbTMwMF9zZXR1cF9pcnEoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgYW0zMDBfaGFuZGxlX2lycSwKKwkJCQlJUlFGX0RJU0FCTEVEfElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJIkFNMzAwIiwgcGFyKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZhbTMwMF9kZXZpY2UtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGJyb2Fkc2hlZXRfYm9hcmQgYW0zMDBfYm9hcmQgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuaW5pdAkJCT0gYW0zMDBfaW5pdF9ib2FyZCwKKwkuY2xlYW51cAkJPSBhbTMwMF9jbGVhbnVwLAorCS5zZXRfaGRiCQk9IGFtMzAwX3NldF9oZGIsCisJLmdldF9oZGIJCT0gYW0zMDBfZ2V0X2hkYiwKKwkuc2V0X2N0bAkJPSBhbTMwMF9zZXRfY3RsLAorCS53YWl0X2Zvcl9yZHkJCT0gYW0zMDBfd2FpdF9ldmVudCwKKwkuZ2V0X3BhbmVsX3R5cGUJCT0gYW0zMDBfZ2V0X3BhbmVsX3R5cGUsCisJLnNldHVwX2lycQkJPSBhbTMwMF9zZXR1cF9pcnEsCit9OworCitpbnQgX19pbml0IGFtMzAwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYW0zMDBfcGluX2NvbmZpZykpOworCisJLyogcmVxdWVzdCBvdXIgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZHJpdmVyICovCisJcmVxdWVzdF9tb2R1bGUoImJyb2Fkc2hlZXRmYiIpOworCisJYW0zMDBfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJicm9hZHNoZWV0ZmIiLCAtMSk7CisJaWYgKCFhbTMwMF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogdGhlIGFtMzAwX2JvYXJkIHRoYXQgd2lsbCBiZSBzZWVuIGJ5IGJyb2Fkc2hlZXRmYiBpcyBhIGNvcHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoYW0zMDBfZGV2aWNlLCAmYW0zMDBfYm9hcmQsCisJCQkJCXNpemVvZihhbTMwMF9ib2FyZCkpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChhbTMwMF9kZXZpY2UpOworCisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGFtMzAwX2RldmljZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9wYXJhbShwYW5lbF90eXBlLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGFuZWxfdHlwZSwgIlNlbGVjdCB0aGUgcGFuZWwgdHlwZTogNiwgOCwgOTciKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJib2FyZCBkcml2ZXIgZm9yIGFtMzAwIGVwZCBraXQiKTsKK01PRFVMRV9BVVRIT1IoIkpheWEgS3VtYXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCmluZGV4IDQwYjc3NDAuLmRiNTJkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYwpAQCAtODcsNyArODcsNyBAQAogCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKIH0KIAotaW50IGNsa19hZGRfYWxpYXMoY2hhciAqYWxpYXMsIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwgY2hhciAqaWQsCitpbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqYWxpYXNfZGV2X25hbWUsIGNoYXIgKmlkLAogCXN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2xrICpyID0gY2xrX2dldChkZXYsIGlkKTsKQEAgLTk2LDcgKzk2LDcgQEAKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbCA9IGNsa2Rldl9hbGxvYyhyLCBhbGlhcywgYWxpYXNfZGV2ID8gZGV2X25hbWUoYWxpYXNfZGV2KSA6IE5VTEwpOworCWwgPSBjbGtkZXZfYWxsb2MociwgYWxpYXMsIGFsaWFzX2Rldl9uYW1lKTsKIAljbGtfcHV0KHIpOwogCWlmICghbCkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaAppbmRleCA0ZTljNjEzLi41NTk5YmNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKQEAgLTY5LDYgKzY5LDYgQEAKICNlbmRpZgogCiB2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pOwotaW50IGNsa19hZGRfYWxpYXMoY2hhciAqYWxpYXMsIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwgY2hhciAqaWQsCitpbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqYWxpYXNfbmFtZSwgY2hhciAqaWQsCiAJc3RydWN0IGRldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jCmluZGV4IDgzYTRjZGYuLjI1M2ZkNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNTUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMKQEAgLTIyLDEwICsyMiw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgotI2luY2x1ZGUgPG1hY2gvYml0ZmllbGQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCmluZGV4IGRmODNiOTcuLjM0NTc2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYwppbmRleCAzMTU2YjI1Li43ODczZmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pdDgxNTIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYwppbmRleCBkOTlmZDllLi4xMTdiNTQzNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIApAQCAtOTYsNyArOTQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGNteDI3MF9kbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8zMkJJVE9OTFksCisJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8zMkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY214Mnh4X2RtOTAwMF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKaW5kZXggZmYwYzU3Ny4uYTlmNDhiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KQEAgLTE2Miw3ICsxNjAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGNtX3gzMDBfZG05MDAwX3BsYXRkYXRhID0gewotCS5mbGFncwkJPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZLAorCS5mbGFncwkJPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZIHwgRE05MDAwX1BMQVRGX05PX0VFUFJPTSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwppbmRleCBlODQ3MzYyLi4wMWJjZmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS5jCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwogICoKLSAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTI3eCBiYXNlZCBDb2xpYnJpIG1vZHVsZQorICogIFN1cHBvcnQgZm9yIFRvcmFkZXggUFhBMjcwIGJhc2VkIENvbGlicmkgbW9kdWxlCiAgKiAgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0yOCwyMCArMjksMjMgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xpYnJpX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworLyoKKyAqIEdQSU8gY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMjcwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU83OF9uQ1NfMiwJLyogRXRoZXJuZXQgQ1MgKi8KIAlHUElPMTE0X0dQSU8sCS8qIEV0aGVybmV0IElSUSAqLwogfTsKIAogLyoKLSAqIEZsYXNoCisgKiBOT1IgZmxhc2gKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNvbGlicmlfcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTcwLDM5ICs3NCw0MCBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKIAkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX2RldmljZSA9IHsKIAkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJPSAwLAogCS5kZXYgCT0gewogCQkucGxhdGZvcm1fZGF0YSA9IGNvbGlicmlfZmxhc2hfZGF0YSwKIAl9LAotCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UgPSAmY29saWJyaV9weGEyNzBfZmxhc2hfcmVzb3VyY2UsCiAJLm51bV9yZXNvdXJjZXMgPSAxLAogfTsKIAogLyoKICAqIERNOTAwMCBFdGhlcm5ldAogICovCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX0VUSF9QSFlTLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfUEhZUyArIDMsCisJCS5zdGFydAk9IENPTElCUklfUFhBMjcwX0VUSF9QSFlTLAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyAzLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQ09MSUJSSV9FVEhfUEhZUyArIDQsCi0JCS5lbmQJPSBDT0xJQlJJX0VUSF9QSFlTICsgNCArIDUwMCwKKwkJLnN0YXJ0CT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0LAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0ICsgNTAwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsyXSA9IHsKLQkJLnN0YXJ0CT0gQ09MSUJSSV9FVEhfSVJRLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfSVJRLAorCQkuc3RhcnQJPSBDT0xJQlJJX1BYQTI3MF9FVEhfSVJRLAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX0lSUSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAogCX0sCiB9OwpAQCAtMTEzLDI1ICsxMTgsMjggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAwX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gZG05MDAwX3Jlc291cmNlcywKIH07CisjZW5kaWYgLyogQ09ORklHX0RNOTAwMCAqLwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY29saWJyaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZmxhc2hfZGV2aWNlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfcHhhMjcwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjb2xpYnJpX3B4YTI3MF9mbGFzaF9kZXZpY2UsCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQogCSZkbTkwMDBfZGV2aWNlLAorI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfaW5pdCh2b2lkKQogewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcGluX2NvbmZpZykpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoY29saWJyaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGNvbGlicmlfZGV2aWNlcykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX3Bpbl9jb25maWcpKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTI3MF9kZXZpY2VzKSk7CiB9CiAKLU1BQ0hJTkVfU1RBUlQoQ09MSUJSSSwgIlRvcmFkZXggQ29saWJyaSBQWEEyN3giKQorTUFDSElORV9TVEFSVChDT0xJQlJJLCAiVG9yYWRleCBDb2xpYnJpIFBYQTI3MCIpCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IENPTElCUklfU0RSQU1fQkFTRSArIDB4MTAwLAotCS5pbml0X21hY2hpbmUJPSBjb2xpYnJpX2luaXQsCisJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMjcwX2luaXQsCiAJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzJlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEzMDAvMzEwIGJhc2VkIENvbGlicmkgbW9kdWxlCisgKgorICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgTWF0dGhpYXMgTWVpZXIgPG1hdHRoaWFzLmoubWVpZXJAZ214Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMzAwLmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0FYODg3OTYpCisjZGVmaW5lIENPTElCUklfRVRIX0lSUV9HUElPCW1mcF90b19ncGlvKEdQSU8yNl9HUElPKQorLyoKKyAqIEFzaXggQVg4ODc5NiBFdGhlcm5ldAorICovCitzdGF0aWMgc3RydWN0IGF4X3BsYXRfZGF0YSBjb2xpYnJpX2FzaXhfcGxhdGRhdGEgPSB7CisJLmZsYWdzCQk9IEFYRkxHX01BQ19GUk9NREVWLAorCS53b3JkbGVuZ3RoCT0gMgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2xpYnJpX2FzaXhfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFBYQTN4eF9DUzJfUEhZUywKKwkJLmVuZCAgID0gUFhBM3h4X0NTMl9QSFlTICsgKDB4MjAgKiAyKSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBncGlvX3RvX2lycShDT0xJQlJJX0VUSF9JUlFfR1BJTyksCisJCS5lbmQgICA9IGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhc2l4X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXg4ODc5NiIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRShjb2xpYnJpX2FzaXhfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGNvbGlicmlfYXNpeF9yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY29saWJyaV9hc2l4X3BsYXRkYXRhCisJfQorfTsKKworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9ldGhfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzFfbkNTMiwJCQkvKiBBWDg4Nzk2IGNoaXAgc2VsZWN0ICovCisJR1BJTzI2X0dQSU8gfCBNRlBfUFVMTF9ISUdICS8qIEFYODg3OTYgSVJRICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMDBfaW5pdF9ldGgodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMwMF9ldGhfcGluX2NvbmZpZykpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShDT0xJQlJJX0VUSF9JUlFfR1BJTyksIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhc2l4X2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X2V0aCh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19BWDg4Nzk2ICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX3VzYl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMF8yX1VTQkhfUEVOLAorCUdQSU8xXzJfVVNCSF9QV1IsCit9OworCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTMwMF9vaGNpX2luZm8gPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9HTE9CQUxfTU9ERSwKKwkuZmxhZ3MJCT0gRU5BQkxFX1BPUlQxIHwgUE9XRVJfQ09OVFJPTF9MT1cgfCBQT1dFUl9TRU5TRV9MT1csCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X29oY2kodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMwMF91c2JfcGluX2NvbmZpZykpOworCXB4YV9zZXRfb2hjaV9pbmZvKCZjb2xpYnJpX3B4YTMwMF9vaGNpX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMwMF9pbml0X29oY2kodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfVVNCX09IQ0lfSENEIHx8IENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFICovCisKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMDBfbW1jX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU83X01NQzFfQ0xLLAorCUdQSU8xNF9NTUMxX0NNRCwKKwlHUElPM19NTUMxX0RBVDAsCisJR1BJTzRfTU1DMV9EQVQxLAorCUdQSU81X01NQzFfREFUMiwKKwlHUElPNl9NTUMxX0RBVDMsCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9sY2RfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzU0X0xDRF9MRERfMCwKKwlHUElPNTVfTENEX0xERF8xLAorCUdQSU81Nl9MQ0RfTEREXzIsCisJR1BJTzU3X0xDRF9MRERfMywKKwlHUElPNThfTENEX0xERF80LAorCUdQSU81OV9MQ0RfTEREXzUsCisJR1BJTzYwX0xDRF9MRERfNiwKKwlHUElPNjFfTENEX0xERF83LAorCUdQSU82Ml9MQ0RfTEREXzgsCisJR1BJTzYzX0xDRF9MRERfOSwKKwlHUElPNjRfTENEX0xERF8xMCwKKwlHUElPNjVfTENEX0xERF8xMSwKKwlHUElPNjZfTENEX0xERF8xMiwKKwlHUElPNjdfTENEX0xERF8xMywKKwlHUElPNjhfTENEX0xERF8xNCwKKwlHUElPNjlfTENEX0xERF8xNSwKKwlHUElPNzBfTENEX0xERF8xNiwKKwlHUElPNzFfTENEX0xERF8xNywKKwlHUElPNjJfTENEX0NTX04sCisJR1BJTzcyX0xDRF9GQ0xLLAorCUdQSU83M19MQ0RfTENMSywKKwlHUElPNzRfTENEX1BDTEssCisJR1BJTzc1X0xDRF9CSUFTLAorCUdQSU83Nl9MQ0RfVlNZTkMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMDBfaW5pdF9sY2Qodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMwMF9sY2RfcGluX2NvbmZpZykpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzAwX2luaXRfbGNkKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX0ZCX1BYQSB8fCBDT05GSUdfRkJfUFhBX01PRFVMRSAqLworCisjaWYgZGVmaW5lZChTTkRfQUM5N19DT0RFQykgfHwgZGVmaW5lZChTTkRfQUM5N19DT0RFQ19NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzEwX2FjOTdfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzI0X0FDOTdfU1lTQ0xLLAorCUdQSU8yM19BQzk3X25BQ1JFU0VULAorCUdQSU8yNV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzI3X0FDOTdfU0RBVEFfT1VULAorCUdQSU8yOF9BQzk3X1NZTkMsCisJR1BJTzI5X0FDOTdfQklUQ0xLCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzEwX2luaXRfYWM5Nyh2b2lkKQoreworCS8qIG5vIEFDOTcgY29kZWMgb24gQ29saWJyaSBQWEEzMDAgKi8KKwlpZiAoIWNwdV9pc19weGEzMTAoKSkKKwkJcmV0dXJuOworCisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMTBfYWM5N19waW5fY29uZmlnKSk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzEwX2luaXRfYWM5Nyh2b2lkKSB7fQorI2VuZGlmCisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXQodm9pZCkKK3sKKwljb2xpYnJpX3B4YTMwMF9pbml0X2V0aCgpOworCWNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSgpOworCWNvbGlicmlfcHhhMzAwX2luaXRfbGNkKCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9sY2QobWZwX3RvX2dwaW8oR1BJTzM5X0dQSU8pKTsKKwljb2xpYnJpX3B4YTMxMF9pbml0X2FjOTcoKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X21tYyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMwMF9tbWNfcGluX2NvbmZpZyksCisJCQkJbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMTMpKTsKK30KKworTUFDSElORV9TVEFSVChDT0xJQlJJMzAwLCAiVG9yYWRleCBDb2xpYnJpIFBYQTMwMCIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IENPTElCUklfU0RSQU1fQkFTRSArIDB4MTAwLAorCS5pbml0X21hY2hpbmUJPSBjb2xpYnJpX3B4YTMwMF9pbml0LAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWI3NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisgKgorICogIFN1cHBvcnQgZm9yIFRvcmFkZXggUFhBMzIwLzMxMCBiYXNlZCBDb2xpYnJpIG1vZHVsZQorICoKKyAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogIE1hdHRoaWFzIE1laWVyIDxtYXR0aGlhcy5qLm1laWVyQGdteC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxuZXQvYXg4ODc5Ni5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzIwLmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0FYODg3OTYpCisjZGVmaW5lIENPTElCUklfRVRIX0lSUV9HUElPCW1mcF90b19ncGlvKEdQSU8zNl9HUElPKQorCisvKgorICogQXNpeCBBWDg4Nzk2IEV0aGVybmV0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXhfcGxhdF9kYXRhIGNvbGlicmlfYXNpeF9wbGF0ZGF0YSA9IHsKKwkuZmxhZ3MJCT0gQVhGTEdfTUFDX0ZST01ERVYsCisJLndvcmRsZW5ndGgJPSAyCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfYXNpeF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUFhBM3h4X0NTMl9QSFlTLAorCQkuZW5kICAgPSBQWEEzeHhfQ1MyX1BIWVMgKyAoMHgyMCAqIDIpIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwKKwkJLmVuZCAgID0gZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFzaXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJheDg4Nzk2IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGNvbGlicmlfYXNpeF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gY29saWJyaV9hc2l4X3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb2xpYnJpX2FzaXhfcGxhdGRhdGEKKwl9Cit9OworCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2V0aF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPM19uQ1MyLAkJCS8qIEFYODg3OTYgY2hpcCBzZWxlY3QgKi8KKwlHUElPMzZfR1BJTyB8IE1GUF9QVUxMX0hJR0gJLyogQVg4ODc5NiBJUlEgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X2V0aCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX2V0aF9waW5fY29uZmlnKSk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFzaXhfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfZXRoKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX0FYODg3OTYgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMjBfdXNiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8yXzJfVVNCSF9QRU4sCisJR1BJTzNfMl9VU0JIX1BXUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMzIwX29oY2lfaW5mbyA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX0dMT0JBTF9NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfb2hjaSh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX3VzYl9waW5fY29uZmlnKSk7CisJcHhhX3NldF9vaGNpX2luZm8oJmNvbGlicmlfcHhhMzIwX29oY2lfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfb2hjaSh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19VU0JfT0hDSV9IQ0QgfHwgQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUgKi8KKworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9tbWNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzIyX01NQzFfQ0xLLAorCUdQSU8yM19NTUMxX0NNRCwKKwlHUElPMThfTU1DMV9EQVQwLAorCUdQSU8xOV9NTUMxX0RBVDEsCisJR1BJTzIwX01NQzFfREFUMiwKKwlHUElPMjFfTU1DMV9EQVQzCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9sY2RfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzZfMl9MQ0RfTEREXzAsCisJR1BJTzdfMl9MQ0RfTEREXzEsCisJR1BJTzhfMl9MQ0RfTEREXzIsCisJR1BJTzlfMl9MQ0RfTEREXzMsCisJR1BJTzEwXzJfTENEX0xERF80LAorCUdQSU8xMV8yX0xDRF9MRERfNSwKKwlHUElPMTJfMl9MQ0RfTEREXzYsCisJR1BJTzEzXzJfTENEX0xERF83LAorCUdQSU82M19MQ0RfTEREXzgsCisJR1BJTzY0X0xDRF9MRERfOSwKKwlHUElPNjVfTENEX0xERF8xMCwKKwlHUElPNjZfTENEX0xERF8xMSwKKwlHUElPNjdfTENEX0xERF8xMiwKKwlHUElPNjhfTENEX0xERF8xMywKKwlHUElPNjlfTENEX0xERF8xNCwKKwlHUElPNzBfTENEX0xERF8xNSwKKwlHUElPNzFfTENEX0xERF8xNiwKKwlHUElPNzJfTENEX0xERF8xNywKKwlHUElPNzNfTENEX0NTX04sCisJR1BJTzc0X0xDRF9WU1lOQywKKwlHUElPMTRfMl9MQ0RfRkNMSywKKwlHUElPMTVfMl9MQ0RfTENMSywKKwlHUElPMTZfMl9MQ0RfUENMSywKKwlHUElPMTdfMl9MQ0RfQklBUywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X2xjZCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX2xjZF9waW5fY29uZmlnKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoU05EX0FDOTdfQ09ERUMpIHx8IGRlZmluZWQoU05EX0FDOTdfQ09ERUNfTU9EVUxFKQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8zNF9BQzk3X1NZU0NMSywKKwlHUElPMzVfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zN19BQzk3X1NEQVRBX09VVCwKKwlHUElPMzhfQUM5N19TWU5DLAorCUdQSU8zOV9BQzk3X0JJVENMSywKKwlHUElPNDBfQUM5N19uQUNSRVNFVAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9hYzk3KHZvaWQpIHt9CisjZW5kaWYKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdCh2b2lkKQoreworCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7CisJY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOworCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKKwkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOworfQorCitNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQ09MSUJSSV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMzIwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDBhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKKyAqCisgKiAgQ29tbW9uIGZ1bmN0aW9ucyBmb3IgYWxsIFRvcmFkZXggUFhBM3h4IG1vZHVsZXMKKyAqCisgKiAgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCitzdGF0aWMgaW50IG1tY19kZXRlY3RfcGluOworCitzdGF0aWMgaW50IGNvbGlicmlfcHhhM3h4X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBpcnFfaGFuZGxlcl90IGNvbGlicmlfbW1jX2RldGVjdF9pbnQsCisJCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KG1tY19kZXRlY3RfcGluLCAibW1jIGNhcmQgZGV0ZWN0Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KG1tY19kZXRlY3RfcGluKTsKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShtbWNfZGV0ZWN0X3BpbiksIGNvbGlicmlfbW1jX2RldGVjdF9pbnQsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChyZXQpIHsKKwkJZ3Bpb19mcmVlKG1tY19kZXRlY3RfcGluKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29saWJyaV9weGEzeHhfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKG1tY19kZXRlY3RfcGluLCBkYXRhKTsKKwlncGlvX2ZyZWUoZ3Bpb190b19pcnEobW1jX2RldGVjdF9waW4pKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTN4eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZGV0ZWN0X2RlbGF5CT0gMjAsCisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2luaXQsCisJLmV4aXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQoreworCXB4YTN4eF9tZnBfY29uZmlnKHBpbnMsIGxlbik7CisJbW1jX2RldGVjdF9waW4gPSBkZXRlY3RfcGluOworCXB4YV9zZXRfbWNpX2luZm8oJmNvbGlicmlfcHhhM3h4X21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTU1DX1BYQSB8fCBDT05GSUdfTU1DX1BYQV9NT0RVTEUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK3N0YXRpYyBpbnQgbGNkX2JsX3BpbjsKKworLyoKKyAqIExDRCBwYW5lbCAoU2hhcnAgTFEwNDNUM0RYMDIpCisgKi8KK3N0YXRpYyB2b2lkIGNvbGlicmlfbGNkX2JhY2tsaWdodChpbnQgb24pCit7CisJZ3Bpb19zZXRfdmFsdWUobGNkX2JsX3BpbiwgISFvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHNoYXJwX2xxNDNfbW9kZSA9IHsKKwkucGl4Y2xvY2sJPSAxMDE5MzYsCisJLnhyZXMJCT0gNDgwLAorCS55cmVzCQk9IDI3MiwKKwkuYnBwCQk9IDMyLAorCS5kZXB0aAkJPSAxOCwKKwkuaHN5bmNfbGVuICAgICAgPSA0MSwKKwkubGVmdF9tYXJnaW4gICAgPSAyLAorCS5yaWdodF9tYXJnaW4gICA9IDIsCisJLnZzeW5jX2xlbiAgICAgID0gMTAsCisJLnVwcGVyX21hcmdpbiAgID0gMiwKKwkubG93ZXJfbWFyZ2luICAgPSAyLAorCS5zeW5jCSAgIAk9IDAsCisJLmNtYXBfZ3JleXNjYWxlID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHNoYXJwX2xxNDNfaW5mbyA9IHsKKwkubW9kZXMJCT0gJnNoYXJwX2xxNDNfbW9kZSwKKwkubnVtX21vZGVzCT0gMSwKKwkuY21hcF9pbnZlcnNlCT0gMCwKKwkuY21hcF9zdGF0aWMJPSAwLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMThCUFAsCisJLnB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGNvbGlicmlfbGNkX2JhY2tsaWdodCwKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhM3h4X2luaXRfbGNkKGludCBibF9waW4pCit7CisJbGNkX2JsX3BpbiA9IGJsX3BpbjsKKwlncGlvX3JlcXVlc3QoYmxfcGluLCAibGNkIGJhY2tsaWdodCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChibF9waW4sIDApOworCXNldF9weGFfZmJfaW5mbygmc2hhcnBfbHE0M19pbmZvKTsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCBhOGQ5MWI2Li5jZGYyMWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTQxLDkgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CkBAIC02MzcsMTYgKzYzNSwxNiBAQAogCQkvKiBHcmVlbiBMRUQgb2ZmIHRlbGxzIHRoZSBib290bG9hZGVyIHRvIGhhbHQgKi8KIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19MRURfR1JFRU4sIDApOwogCi0JYXJtX21hY2hpbmVfcmVzdGFydCgnaCcpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgY29yZ2lfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBjb3JnaV9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQogCQkvKiBHcmVlbiBMRUQgb24gdGVsbHMgdGhlIGJvb3Rsb2FkZXIgdG8gcmVib290ICovCiAJCWdwaW9fc2V0X3ZhbHVlKENPUkdJX0dQSU9fTEVEX0dSRUVOLCAxKTsKIAotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJywgY21kKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKaW5kZXggNDExNjA3Yi4uZDliOTYzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfcG0uYwppbmRleCBlMzUyNTkwLi43ZjA0YjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCmluZGV4IDhlMmYyMjEuLmE1ZWU3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvc3NwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKaW5kZXggNzcxZGQ0ZS4uMDgzYTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCkBAIC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCmluZGV4IDk2OGM4MzAuLjY3ZjM0YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyYTI5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jCkBAIC0wLDAgKzEsNjEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNzYjcwMV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQk9IDB4NywKKwkJLmdwaW8JPSAxLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJCS5kZXNjCT0gIlNXMiIsCisJCS50eXBlCT0gRVZfU1csCisJCS53YWtldXAgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNzYjcwMV9ncGlvX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucyA9IGNzYjcwMV9idXR0b25zLAorCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUoY3NiNzAxX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2I3MDFfbGVkc1tdID0geworCXsKKwkJLm5hbWUJPSAiY3NiNzAxOnllbGxvdzpoZWFydGJlYXQiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCT0gMTEsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiNzAxX2dwaW9fa2V5cyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmNzYjcwMV9ncGlvX2tleXNfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBjc2I3MDFfbGVkc19ncGlvX2RhdGEgPSB7CisJLmxlZHMJCT0gY3NiNzAxX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShjc2I3MDFfbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MDFfbGVkc19ncGlvID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmY3NiNzAxX2xlZHNfZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MDFfZ3Bpb19rZXlzLAorCSZjc2I3MDFfbGVkc19ncGlvLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3NiNzAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK21vZHVsZV9pbml0KGNzYjcwMV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI4OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgQ29nZW50IENTQjcyNgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvc201MDEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvY3NiNzI2Lmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBuL2E6IDIsIDUsIDYsIDcsIDgsIDIzLCAyNCwgMjUsIDI2LCAyNywgODcsIDg4LCA4OSwKKyAqIG51OiA1OCAtLSA3NywgOTAsIDkxLCA5MywgMTAyLCAxMDUtMTA4LCAxMTQtMTE2LAorICogWFhYOiAyMSwKKyAqIFhYWDogNzkgQ1NfMyBmb3IgTEFOOTIxNSBvciBQU0tUU0VMIG9uIFIyLCBSMworICogWFhYOiAzMyBDU181IGZvciBMQU45MjE1IG9uIFIxCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NiNzI2X3Bpbl9jb25maWdbXSA9IHsKKwlHUElPNzhfbkNTXzIsIC8qIEVYUF9DUyAqLworCUdQSU83OV9uQ1NfMywgLyogU01TQzkyMTUgKi8KKwlHUElPODBfbkNTXzQsIC8qIFNNNTAxICovCisKKwlHUElPNTJfR1BJTywgLyogI1NNU0M5MjUxIGludCAqLworCUdQSU81M19HUElPLCAvKiBTTTUwMSBpbnQgKi8KKworCUdQSU8xX0dQSU8sIC8qIEdQSU8wICovCisJR1BJTzExX0dQSU8sIC8qIEdQSU8xICovCisJR1BJTzlfR1BJTywgLyogR1BJTzIgKi8KKwlHUElPMTBfR1BJTywgLyogR1BJTzMgKi8KKwlHUElPMTZfUFdNMF9PVVQsIC8qIG9yIEdQSU80ICovCisJR1BJTzE3X1BXTTFfT1VULCAvKiBvciBHUElPNSAqLworCUdQSU85NF9HUElPLCAvKiBHUElPNiAqLworCUdQSU85NV9HUElPLCAvKiBHUElPNyAqLworCUdQSU85Nl9HUElPLCAvKiBHUElPOCAqLworCUdQSU85N19HUElPLCAvKiBHUElPOSAqLworCUdQSU8xNV9HUElPLCAvKiBFWFBfSVJRICovCisJR1BJTzE4X1JEWSwgLyogRVhQX1dBSVQgKi8KKworCUdQSU8wX0dQSU8sIC8qIFBXUl9JTlQgKi8KKwlHUElPMTA0X0dQSU8sIC8qIFBXUl9PRkYgKi8KKworCUdQSU8xMl9HUElPLCAvKiB0b3VjaCBpcnEgKi8KKworCUdQSU8xM19TU1AyX1RYRCwKKwlHUElPMTRfU1NQMl9TRlJNLAorCU1GUF9DRkdfT1VUKEdQSU8xOSwgQUYxLCBEUklWRV9MT1cpLC8qIFNTUDJfU1lTQ0xLICovCisJR1BJTzIyX1NTUDJfU0NMSywKKworCUdQSU84MV9TU1AzX1RYRCwKKwlHUElPODJfU1NQM19SWEQsCisJR1BJTzgzX1NTUDNfU0ZSTSwKKwlHUElPODRfU1NQM19TQ0xLLAorCisJR1BJTzIwX0dQSU8sIC8qIFNESU8gaW50ICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzEwMF9HUElPLCAvKiBTRCBDRCAqLworCUdQSU8xMDFfR1BJTywgLyogU0QgV1AgKi8KKworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU8xMTNfQUM5N19uUkVTRVQsCisKKwlHUElPMzRfRkZVQVJUX1JYRCwKKwlHUElPMzVfRkZVQVJUX0NUUywKKwlHUElPMzZfRkZVQVJUX0RDRCwKKwlHUElPMzdfRkZVQVJUX0RTUiwKKwlHUElPMzhfRkZVQVJUX1JJLAorCUdQSU8zOV9GRlVBUlRfVFhELAorCUdQSU80MF9GRlVBUlRfRFRSLAorCUdQSU80MV9GRlVBUlRfUlRTLAorCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwlHUElPNDZfU1RVQVJUX1JYRCwKKwlHUElPNDdfU1RVQVJUX1RYRCwKKworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzU0X25QQ0VfMiwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwgLyogbWF5YmUgdW51c2VkICovCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPOThfR1BJTywgLyogQ0YgSVJRICovCisJR1BJTzk5X0dQSU8sIC8qIENGIENEICovCisJR1BJTzEwM19HUElPLCAvKiBSZXNldCAqLworCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X21jaV9kYXRhOworCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQoreworCWludCBlcnI7CisKKwljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZGV0X3JlcTsKKworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RldF9kaXI7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcm9fcmVxOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yb19kaXI7CisKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAorCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2lycTsKKworCXJldHVybiAwOworCitlcnJfaXJxOgorZXJyX3JvX2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK2Vycl9yb19yZXE6CitlcnJfZGV0X2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7CitlcnJfZGV0X3JlcToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK30KKworc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKKwkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS8qIEZJWE1FIHNldHBvd2VyICovCisJLmV4aXQJCT0gY3NiNzI2X21jaV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX05QU19NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBOT19PQ19QUk9URUNUSU9OLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gQ1NCNzI2X0ZMQVNIX3VNT04sCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiNzI2X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICAgICAgICAgPSBQWEFfQ1MwX1BIWVMsCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzBfUEhZUyArIENTQjcyNl9GTEFTSF9TSVpFIC0gMSAsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9mbGFzaCA9IHsKKwkubmFtZSAgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmY3NiNzI2X2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgICAgICAgPSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9zbTUwMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgICAgICAgICA9IFBYQV9DUzRfUEhZUywKKwkJLmVuZCAgICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfOE0gLSAxLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUJCT0gInNtNTAxLWxvY2FsbWVtIiwKKwl9LAorCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfNjRNIC0gU1pfMk0sCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzRfUEhZUyArIFNaXzY0TSAtIDEsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQkJPSAic201MDEtcmVncyIsCisJfSwKKwl7CisJCS5zdGFydAkJPSBDU0I3MjZfSVJRX1NNNTAxLAorCQkuZW5kCQk9IENTQjcyNl9JUlFfU001MDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbTUwMV9pbml0ZGF0YSBjc2I3MjZfc201MDFfaW5pdGRhdGEgPSB7CisvKgkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCwgKi8KKwkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCB8IFNNNTAxX1VTRV9VQVJUMCB8IFNNNTAxX1VTRV9VQVJUMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc201MDFfcGxhdGRhdGEgY3NiNzI2X3NtNTAxX3BsYXRkYXRhID0geworCS5pbml0CQk9ICZjc2I3MjZfc201MDFfaW5pdGRhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MjZfc201MDEgPSB7CisJLm5hbWUJCT0gInNtNTAxIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X3NtNTAxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY3NiNzI2X3NtNTAxX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY3NiNzI2X3NtNTAxX3BsYXRkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9sYW5fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBQWEFfQ1MzX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MzX1BIWVMgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gQ1NCNzI2X0lSUV9MQU4sCisJCS5lbmQJPSBDU0I3MjZfSVJRX0xBTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9sYW4gPSB7CisJLm5hbWUJCT0gInNtYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X2xhbl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNzYjcyNl9sYW5fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MjZfZmxhc2gsCisJJmNzYjcyNl9zbTUwMSwKKwkmY3NiNzI2X2xhbiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjc2I3MjZfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNzYjcyNl9waW5fY29uZmlnKSk7CisvKglNU0MxID0gMHg3ZmZjM2ZmYzsgKi8vKiBMQU45MjE1L0VYUF9DUyAqLworLyoJTVNDMiA9IDB4MDY2OTdmZjQ7ICovLyogbm9uZS9TTTUwMSAqLworCU1TQzIgPSAoTVNDMiAmIH4weGZmZmYpIHwgMHg3ZmY0OyAvKiBTTTUwMSAqLworCisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOworCXB4YV9zZXRfbWNpX2luZm8oJmNzYjcyNl9tY2kpOworCXB4YV9zZXRfb2hjaV9pbmZvKCZjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKENTQjcyNiwgIkNvZ2VudCBDU0I3MjYiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGNzYjcyNl9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGUxNmY4ZTMuLmQyNDVlNTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYwppbmRleCAxYmQ3Zjc0Li43NGQzZjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lMzMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jCkBAIC0yMCw5ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMKaW5kZXggZWRjZDlkNS4uMDgwMDM2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTM1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYwpAQCAtMjEsOSArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMKaW5kZXggNzdiYjhlMi4uZWQ5YzBjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYwpAQCAtMjIsOSArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggYTZmZmY3OC4uMDc1MDBhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMjQsOSArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KQEAgLTE5NCw3ICsxOTIsNyBAQAogewogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGU3NDBfcGluX2NvbmZpZykpOwogCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOwotCWNsa19hZGRfYWxpYXMoIkNMS19DSzQ4TSIsICZlNzQwX3Q3bDY2eGJfZGV2aWNlLmRldiwKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0s0OE0iLCBlNzQwX3Q3bDY2eGJfZGV2aWNlLm5hbWUsCiAJCQkiVURDQ0xLIiwgJnB4YTI1eF9kZXZpY2VfdWRjLmRldiksCiAJZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCmluZGV4IDY2NTA2NmYuLjYxMjZjMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKQEAgLTIzLDkgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CkBAIC0xOTUsNyArMTkzLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBlNzUwX2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNzUwX3Bpbl9jb25maWcpKTsKLQljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsICZlNzUwX3RjNjM5M3hiX2RldmljZS5kZXYsCisJY2xrX2FkZF9hbGlhcygiQ0xLX0NLM1A2TUkiLCBlNzUwX3RjNjM5M3hiX2RldmljZS5uYW1lLAogCQkJIkdQSU8xMV9DTEsiLCBOVUxMKSwKIAllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKaW5kZXggY2M5YjEyOS4uNzRhYjA5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYwpAQCAtMjMsOSArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KQEAgLTE5Niw3ICsxOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZTgwMF9pbml0KHZvaWQpCiB7Ci0JY2xrX2FkZF9hbGlhcygiQ0xLX0NLM1A2TUkiLCAmZTgwMF90YzYzOTN4Yl9kZXZpY2UuZGV2LAorCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgZTgwMF90YzYzOTN4Yl9kZXZpY2UubmFtZSwKIAkJCSJHUElPMTFfQ0xLIiwgTlVMTCksCiAJZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IGY1ZWQ4MDMuLjkyMGRmYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTExLDQwICsxMSw2MyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvdGRvMjRtLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgorCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKIAotLyogR1BJTyBJUlEgdXNhZ2UgKi8KLSNkZWZpbmUgR1BJTzQxX0VUSElSUQkJKDQxKQorLyogRU0tWDI3MCBzcGVjaWZpYyBHUElPcyAqLwogI2RlZmluZSBHUElPMTNfTU1DX0NECQkoMTMpCisjZGVmaW5lIEdQSU85NV9NTUNfV1AJCSg5NSkKKyNkZWZpbmUgR1BJTzU2X05BTkRfUkIJCSg1NikKKworLyogZVhlZGEgc3BlY2lmaWMgR1BJT3MgKi8KKyNkZWZpbmUgR1BJTzExNF9NTUNfQ0QJCSgxMTQpCisjZGVmaW5lIEdQSU8yMF9OQU5EX1JCCQkoMjApCisjZGVmaW5lIEdQSU8zOF9TRF9QV0VOCQkoMzgpCisKKy8qIGNvbW1vbiAgR1BJT3MgKi8KKyNkZWZpbmUgR1BJTzExX05BTkRfQ1MJCSgxMSkKKyNkZWZpbmUgR1BJTzkzX0NBTV9SRVNFVAkoOTMpCisjZGVmaW5lIEdQSU80MV9FVEhJUlEJCSg0MSkKICNkZWZpbmUgRU1fWDI3MF9FVEhJUlEJCUlSUV9HUElPKEdQSU80MV9FVEhJUlEpCi0jZGVmaW5lIEVNX1gyNzBfTU1DX0NECQlJUlFfR1BJTyhHUElPMTNfTU1DX0NEKQogCi0vKiBOQU5EIGNvbnRyb2wgR1BJT3MgKi8KLSNkZWZpbmUgR1BJTzExX05BTkRfQ1MJKDExKQotI2RlZmluZSBHUElPNTZfTkFORF9SQgkoNTYpCitzdGF0aWMgaW50IG1tY19jZDsKK3N0YXRpYyBpbnQgbmFuZF9yYjsKK3N0YXRpYyBpbnQgZG05MDAwX2ZsYWdzOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlbV94MjcwX3Bpbl9jb25maWdbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbW1vbl9waW5fY29uZmlnW10gPSB7CiAJLyogQUMnOTcgKi8KIAlHUElPMjhfQUM5N19CSVRDTEssCiAJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKQEAgLTE1MCwyMSArMTczLDMyIEBACiAJR1BJTzE4X1JEWSwKIAogCS8qIEdQSU8gKi8KLQlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwKKwlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogc2xlZXAvcmVzdW1lIGJ1dHRvbiAqLwogCiAJLyogcG93ZXIgY29udHJvbHMgKi8KIAlHUElPMjBfR1BJTwl8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBHUFJTX1BXRU4gKi8KKwlHUElPOTNfR1BJTwl8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDYW1lcmEgcmVzZXQgKi8KIAlHUElPMTE1X0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogV0xBTl9QV0VOICovCiAKIAkvKiBOQU5EIGNvbnRyb2xzICovCiAJR1BJTzExX0dQSU8JfCBNRlBfTFBNX0RSSVZFX0hJR0gsCS8qIE5BTkQgQ0UjICovCi0JR1BJTzU2X0dQSU8sCQkJCS8qIE5BTkQgUmVhZHkvQnVzeSAqLwogCiAJLyogaW50ZXJydXB0cyAqLwotCUdQSU8xM19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KIAlHUElPNDFfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZW1feDI3MF9waW5fY29uZmlnW10gPSB7CisJR1BJTzEzX0dQSU8sCS8qIE1NQyBjYXJkIGRldGVjdCAqLworCUdQSU81Nl9HUElPLAkvKiBOQU5EIFJlYWR5L0J1c3kgKi8KKwlHUElPOTVfR1BJTywJLyogTU1DIFdyaXRlIHByb3RlY3QgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4ZWRhX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMjBfR1BJTywJCQkJLyogTkFORCBSZWFkeS9CdXN5ICovCisJR1BJTzM4X0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogU0Qgc2xvdCBwb3dlciAqLworCUdQSU8xMTRfR1BJTywJCQkJLyogTU1DIGNhcmQgZGV0ZWN0ICovCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKSB8fCBkZWZpbmVkKENPTkZJR19ETTkwMDBfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlbV94MjcwX2RtOTAwMF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKQEAgLTE4NSw3ICsyMTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGVtX3gyNzBfZG05MDAwX3BsYXRkYXRhID0gewotCS5mbGFncwkJPSBETTkwMDBfUExBVEZfMzJCSVRPTkxZLAorCS5mbGFncwkJPSBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1feDI3MF9kbTkwMDAgPSB7CkBAIC0yMDAsNiArMjM0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9kbTkwMDAodm9pZCkKIHsKKwllbV94MjcwX2RtOTAwMF9wbGF0ZGF0YS5mbGFncyB8PSBkbTkwMDBfZmxhZ3M7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX2RtOTAwMCk7CiB9CiAjZWxzZQpAQCAtMjg5LDcgKzMyNCw3IEBACiB7CiAJZHNiKCk7CiAKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzU2X05BTkRfUkIpOworCXJldHVybiBncGlvX2dldF92YWx1ZShuYW5kX3JiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVtX3gyNzBfcGFydGl0aW9uX2luZm9bXSA9IHsKQEAgLTM1NCwxNCArMzg5LDE0IEBACiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzExX05BTkRfQ1MsIDEpOwogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU81Nl9OQU5EX1JCLCAiTkFORCBSL0IiKTsKKwllcnIgPSBncGlvX3JlcXVlc3QobmFuZF9yYiwgIk5BTkQgUi9CIik7CiAJaWYgKGVycikgewogCQlwcl93YXJuaW5nKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIFIvQiBncGlvXG4iKTsKIAkJZ3Bpb19mcmVlKEdQSU8xMV9OQU5EX0NTKTsKIAkJcmV0dXJuOwogCX0KIAotCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU81Nl9OQU5EX1JCKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChuYW5kX3JiKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9uYW5kKTsKIH0KQEAgLTM2OSw2ICs0MDQsNjEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbmFuZCh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVtX3gyNzBfbm9yX3BhcnRzW10gPSB7CisJeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQgPQkweDAwMDAwMDAwLAorCQkuc2l6ZSA9CQkweDAwMDUwMDAwLAorCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUgPQkJIkVudmlyb25tZW50IiwKKwkJLm9mZnNldCA9CTB4MDAwNTAwMDAsCisJCS5zaXplID0JCTB4MDAwMTAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiUmVzZXJ2ZWQiLAorCQkub2Zmc2V0ID0JMHgwMDA2MDAwMCwKKwkJLnNpemUgPQkJMHgwMDA1MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0JCSJTcGxhc2hzY3JlZW4iLAorCQkub2Zmc2V0ID0JMHgwMDBiMDAwMCwKKwkJLnNpemUgPQkJMHgwMDA1MDAwMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlbV94MjcwX25vcl9kYXRhW10gPSB7CisJWzBdID0geworCQkud2lkdGggPSAyLAorCQkucGFydHMgPSBlbV94MjcwX25vcl9wYXJ0cywKKwkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShlbV94MjcwX25vcl9wYXJ0cyksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZW1feDI3MF9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8xTSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX3BoeXNtYXBfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZW1feDI3MF9ub3JfZmxhc2hfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVtX3gyNzBfbm9yX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfbm9yKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX3BoeXNtYXBfZmxhc2gpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbm9yKHZvaWQpIHt9CisjZW5kaWYKKwogLyogUFhBMjd4IE9IQ0kgY29udHJvbGxlciBzZXR1cCAqLwogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIHN0YXRpYyBpbnQgZW1feDI3MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMzk1LDQwICs0ODUsOTMgQEAKIAogLyogTUNJIGNvbnRyb2xsZXIgc2V0dXAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqZW1feDI3MF9zZGlvX2xkbzsKKwogc3RhdGljIGludCBlbV94MjcwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBpcnFfaGFuZGxlcl90IGVtX3gyNzBfZGV0ZWN0X2ludCwKIAkJCSAgICB2b2lkICpkYXRhKQogewotCWludCBlcnIgPSByZXF1ZXN0X2lycShFTV9YMjcwX01NQ19DRCwgZW1feDI3MF9kZXRlY3RfaW50LAotCQkJICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCWludCBlcnI7CisKKwllbV94MjcwX3NkaW9fbGRvID0gcmVndWxhdG9yX2dldChkZXYsICJ2Y2Mgc2RpbyIpOworCWlmIChJU19FUlIoZW1feDI3MF9zZGlvX2xkbykpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCByZXF1ZXN0IFNESU8gcG93ZXIgc3VwcGx5OiAlbGRcbiIsCisJCQlQVFJfRVJSKGVtX3gyNzBfc2Rpb19sZG8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoZW1feDI3MF9zZGlvX2xkbyk7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEobW1jX2NkKSwgZW1feDI3MF9kZXRlY3RfaW50LAorCQkJICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJICAgICAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgICAgICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlE6ICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJROiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzk1X01NQ19XUCwgIk1NQyBXUCIpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgTU1DIHdyaXRlIHByb3RlY3Q6ICVkXG4iLAorCQkJCWVycik7CisJCQlnb3RvIGVycl9ncGlvX3dwOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU85NV9NTUNfV1ApOworCX0gZWxzZSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMzhfU0RfUFdFTiwgInNkaW8gcG93ZXIiKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCByZXF1ZXN0IE1NQyBwb3dlciBjb250cm9sIDogJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyX2dwaW9fd3A7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8zOF9TRF9QV0VOLCAxKTsKIAl9CiAKIAlyZXR1cm4gMDsKKworZXJyX2dwaW9fd3A6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEobW1jX2NkKSwgZGF0YSk7CitlcnJfaXJxOgorCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9zZGlvX2xkbyk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBlbV94MjcwX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCiB7Ci0JLyoKLQkgICBGSVhNRTogY3VycmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhbGxvdyB0bwotCSAgIGVuYWJsZS9kaXNhYmxlIE1NQyBwb3dlci4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIG5leHQgSFcgcmVsZWFzZXMsCi0JICAgYW5kIHdlJ2xsIG5lZWQgdG8gYWRkIGltcGxtZW50YXRpb24gaGVyZS4KLQkqLwotCXJldHVybjsKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgeworCQlpbnQgdmRkX3VWID0gKDIwMDAgKyAodmRkIC0gX19mZnMoTU1DX1ZERF8yMF8yMSkpICogMTAwKSAqIDEwMDA7CisKKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGVtX3gyNzBfc2Rpb19sZG8sIHZkZF91ViwgdmRkX3VWKTsKKwkJcmVndWxhdG9yX2VuYWJsZShlbV94MjcwX3NkaW9fbGRvKTsKKwl9IGVsc2UgeworCQlyZWd1bGF0b3JfZGlzYWJsZShlbV94MjcwX3NkaW9fbGRvKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGVtX3gyNzBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWludCBpcnEgPSBncGlvX3RvX2lycShHUElPMTNfTU1DX0NEKTsKLQlmcmVlX2lycShpcnEsIGRhdGEpOworCWZyZWVfaXJxKGdwaW9fdG9faXJxKG1tY19jZCksIGRhdGEpOworCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9zZGlvX2xkbyk7CisKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpCisJCWdwaW9fZnJlZShHUElPOTVfTU1DX1dQKTsKKwllbHNlCisJCWdwaW9fZnJlZShHUElPMzhfU0RfUFdFTik7Cit9CisKK3N0YXRpYyBpbnQgZW1feDI3MF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzk1X01NQ19XUCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8TU1DX1ZERF8zMF8zMSwKKwkub2NyX21hc2sJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKKwkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8CisJCQkgIE1NQ19WRERfMjdfMjh8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfAorCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCiAJLmluaXQgCQk9IGVtX3gyNzBfbWNpX2luaXQsCiAJLnNldHBvd2VyIAk9IGVtX3gyNzBfbWNpX3NldHBvd2VyLAogCS5leGl0CQk9IGVtX3gyNzBfbWNpX2V4aXQsCkBAIC00MzYsMzMgKzU3OSw1MyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X21tYyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YS5nZXRfcm8gPSBlbV94MjcwX21jaV9nZXRfcm87CisKKwllbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheQk9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZlbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKLS8qIExDRCA0ODB4NjQwICovCisvKiBMQ0QgKi8KICNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBlbV94MjcwX2xjZF9tb2RlID0gewotCS5waXhjbG9jawk9IDUwMDAwLAotCS5icHAJCT0gMTYsCi0JLnhyZXMJCT0gNDgwLAotCS55cmVzCQk9IDY0MCwKLQkuaHN5bmNfbGVuCT0gOCwKLQkudnN5bmNfbGVuCT0gMiwKLQkubGVmdF9tYXJnaW4JPSA4LAotCS51cHBlcl9tYXJnaW4JPSAwLAotCS5yaWdodF9tYXJnaW4JPSAyNCwKLQkubG93ZXJfbWFyZ2luCT0gNCwKLQkuY21hcF9ncmV5c2NhbGUJPSAwLAorc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gZW1feDI3MF9sY2RfbW9kZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5waXhjbG9jawk9IDM4MjUwLAorCQkuYnBwCQk9IDE2LAorCQkueHJlcwkJPSA0ODAsCisJCS55cmVzCQk9IDY0MCwKKwkJLmhzeW5jX2xlbgk9IDgsCisJCS52c3luY19sZW4JPSAyLAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkudXBwZXJfbWFyZ2luCT0gMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDI0LAorCQkubG93ZXJfbWFyZ2luCT0gNCwKKwkJLnN5bmMJCT0gMCwKKwl9LAorCVsxXSA9IHsKKwkJLnBpeGNsb2NrICAgICAgID0gMTUzODAwLAorCQkuYnBwCQk9IDE2LAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLmhzeW5jX2xlbgk9IDgsCisJCS52c3luY19sZW4JPSAyLAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkudXBwZXJfbWFyZ2luCT0gMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDg4LAorCQkubG93ZXJfbWFyZ2luCT0gMiwKKwkJLnN5bmMJCT0gMCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gZW1feDI3MF9sY2QgPSB7Ci0JLm1vZGVzCQk9ICZlbV94MjcwX2xjZF9tb2RlLAotCS5udW1fbW9kZXMJPSAxLAorCS5tb2RlcwkJPSBlbV94MjcwX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCT0gMiwKIAkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQLAogfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9sY2Qodm9pZCkKIHsKIAlzZXRfcHhhX2ZiX2luZm8oJmVtX3gyNzBfbGNkKTsKQEAgLTQ3MSw2ICs2MzQsNDAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBlbV94MjcwX3NwaV9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBlbV94MjcwX3RkbzI0bV9jaGlwID0geworCS5yeF90aHJlc2hvbGQgPSAxLAorCS50eF90aHJlc2hvbGQgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZG8yNG1fcGxhdGZvcm1fZGF0YSBlbV94MjcwX3RkbzI0bV9wZGF0YSA9IHsKKwkubW9kZWwgPSBURE8zNVMsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gInRkbzI0bSIsCisJCS5tYXhfc3BlZWRfaHogPSAxMDAwMDAwLAorCQkuYnVzX251bSA9IDEsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZW1feDI3MF90ZG8yNG1fY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZW1feDI3MF90ZG8yNG1fcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfc3BpKHZvaWQpCit7CisJcHhhMnh4X3NldF9zcGlfaW5mbygxLCAmZW1feDI3MF9zcGlfaW5mbyk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9zcGlfZGV2aWNlcykpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfc3BpKHZvaWQpIHt9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QWEEyWFhfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BYQTJYWF9BQzk3X01PRFVMRSkKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfYWM5Nyh2b2lkKQogewpAQCAtNDgxLDIzICs2NzgsNzYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQotc3RhdGljIHVuc2lnbmVkIGludCBlbV94MjcwX21hdHJpeF9rZXlzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGVtX3gyNzBfbW9kdWxlX21hdHJpeF9rZXlzW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9BKSwgS0VZKDEsIDAsIEtFWV9VUCksIEtFWSgyLCAxLCBLRVlfQiksCiAJS0VZKDAsIDIsIEtFWV9MRUZUKSwgS0VZKDEsIDEsIEtFWV9FTlRFUiksIEtFWSgyLCAwLCBLRVlfUklHSFQpLAogCUtFWSgwLCAxLCBLRVlfQyksIEtFWSgxLCAyLCBLRVlfRE9XTiksIEtFWSgyLCAyLCBLRVlfRCksCiB9OwogCi1zdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfa2V5cGFkX2luZm8gPSB7CitzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfbW9kdWxlX2tleXBhZF9pbmZvID0gewogCS8qIGNvZGUgbWFwIGZvciB0aGUgbWF0cml4IGtleXMgKi8KIAkubWF0cml4X2tleV9yb3dzCT0gMywKIAkubWF0cml4X2tleV9jb2xzCT0gMywKLQkubWF0cml4X2tleV9tYXAJCT0gZW1feDI3MF9tYXRyaXhfa2V5cywKLQkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9tYXRyaXhfa2V5cyksCisJLm1hdHJpeF9rZXlfbWFwCQk9IGVtX3gyNzBfbW9kdWxlX21hdHJpeF9rZXlzLAorCS5tYXRyaXhfa2V5X21hcF9zaXplCT0gQVJSQVlfU0laRShlbV94MjcwX21vZHVsZV9tYXRyaXhfa2V5cyksCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGVtX3gyNzBfZXhlZGFfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1JJR0hUU0hJRlQpLCBLRVkoMCwgMSwgS0VZX1JJR0hUQ1RSTCksCisJS0VZKDAsIDIsIEtFWV9SSUdIVEFMVCksIEtFWSgwLCAzLCBLRVlfU1BBQ0UpLAorCUtFWSgwLCA0LCBLRVlfTEVGVEFMVCksIEtFWSgwLCA1LCBLRVlfTEVGVENUUkwpLAorCUtFWSgwLCA2LCBLRVlfRU5URVIpLCBLRVkoMCwgNywgS0VZX1NMQVNIKSwKKworCUtFWSgxLCAwLCBLRVlfRE9UKSwgS0VZKDEsIDEsIEtFWV9NKSwKKwlLRVkoMSwgMiwgS0VZX04pLCBLRVkoMSwgMywgS0VZX0IpLAorCUtFWSgxLCA0LCBLRVlfViksIEtFWSgxLCA1LCBLRVlfQyksCisJS0VZKDEsIDYsIEtFWV9YKSwgS0VZKDEsIDcsIEtFWV9aKSwKKworCUtFWSgyLCAwLCBLRVlfTEVGVFNISUZUKSwgS0VZKDIsIDEsIEtFWV9TRU1JQ09MT04pLAorCUtFWSgyLCAyLCBLRVlfTCksIEtFWSgyLCAzLCBLRVlfSyksCisJS0VZKDIsIDQsIEtFWV9KKSwgS0VZKDIsIDUsIEtFWV9IKSwKKwlLRVkoMiwgNiwgS0VZX0cpLCBLRVkoMiwgNywgS0VZX0YpLAorCisJS0VZKDMsIDAsIEtFWV9EKSwgS0VZKDMsIDEsIEtFWV9TKSwKKwlLRVkoMywgMiwgS0VZX0EpLCBLRVkoMywgMywgS0VZX1RBQiksCisJS0VZKDMsIDQsIEtFWV9CQUNLU1BBQ0UpLCBLRVkoMywgNSwgS0VZX1ApLAorCUtFWSgzLCA2LCBLRVlfTyksIEtFWSgzLCA3LCBLRVlfSSksCisKKwlLRVkoNCwgMCwgS0VZX1UpLCBLRVkoNCwgMSwgS0VZX1kpLAorCUtFWSg0LCAyLCBLRVlfVCksIEtFWSg0LCAzLCBLRVlfUiksCisJS0VZKDQsIDQsIEtFWV9FKSwgS0VZKDQsIDUsIEtFWV9XKSwKKwlLRVkoNCwgNiwgS0VZX1EpLCBLRVkoNCwgNywgS0VZX01JTlVTKSwKKworCUtFWSg1LCAwLCBLRVlfMCksIEtFWSg1LCAxLCBLRVlfOSksCisJS0VZKDUsIDIsIEtFWV84KSwgS0VZKDUsIDMsIEtFWV83KSwKKwlLRVkoNSwgNCwgS0VZXzYpLCBLRVkoNSwgNSwgS0VZXzUpLAorCUtFWSg1LCA2LCBLRVlfNCksIEtFWSg1LCA3LCBLRVlfMyksCisKKwlLRVkoNiwgMCwgS0VZXzIpLCBLRVkoNiwgMSwgS0VZXzEpLAorCUtFWSg2LCAyLCBLRVlfRU5URVIpLCBLRVkoNiwgMywgS0VZX0VORCksCisJS0VZKDYsIDQsIEtFWV9ET1dOKSwgS0VZKDYsIDUsIEtFWV9VUCksCisJS0VZKDYsIDYsIEtFWV9NRU5VKSwgS0VZKDYsIDcsIEtFWV9GMSksCisKKwlLRVkoNywgMCwgS0VZX0xFRlQpLCBLRVkoNywgMSwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMiwgS0VZX0JBQ0spLCBLRVkoNywgMywgS0VZX0hPTUUpLAorCUtFWSg3LCA0LCAwKSwgS0VZKDcsIDUsIDApLAorCUtFWSg3LCA2LCAwKSwgS0VZKDcsIDcsIDApLAorfTsKKworc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2V4ZWRhX2tleXBhZF9pbmZvID0geworCS8qIGNvZGUgbWFwIGZvciB0aGUgbWF0cml4IGtleXMgKi8KKwkubWF0cml4X2tleV9yb3dzCT0gOCwKKwkubWF0cml4X2tleV9jb2xzCT0gOCwKKwkubWF0cml4X2tleV9tYXAJCT0gZW1feDI3MF9leGVkYV9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9leGVkYV9tYXRyaXhfa2V5cyksCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X2tleXBhZCh2b2lkKQogewotCXB4YV9zZXRfa2V5cGFkX2luZm8oJmVtX3gyNzBfa2V5cGFkX2luZm8pOworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJcHhhX3NldF9rZXlwYWRfaW5mbygmZW1feDI3MF9tb2R1bGVfa2V5cGFkX2luZm8pOworCWVsc2UKKwkJcHhhX3NldF9rZXlwYWRfaW5mbygmZW1feDI3MF9leGVkYV9rZXlwYWRfaW5mbyk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9rZXlwYWQodm9pZCkge30KQEAgLTUzNSwxOSArNzg1LDI2NCBAQAogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9ncGlvX2tleXModm9pZCkge30KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0KHZvaWQpCisvKiBRdWljayBDYXB0dXJlIEludGVyZmFjZSBhbmQgc2Vuc29yIHNldHVwICovCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmVtX3gyNzBfY2FtZXJhX2xkbzsKKworc3RhdGljIGludCBlbV94MjcwX3NlbnNvcl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU85M19DQU1fUkVTRVQsICJjYW1lcmEgcmVzZXQiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU85M19DQU1fUkVTRVQsIDApOworCisJZW1feDI3MF9jYW1lcmFfbGRvID0gcmVndWxhdG9yX2dldChOVUxMLCAidmNjIGNhbSIpOworCWlmIChlbV94MjcwX2NhbWVyYV9sZG8gPT0gTlVMTCkgeworCQlncGlvX2ZyZWUoR1BJTzkzX0NBTV9SRVNFVCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwlpZiAocmV0KSB7CisJCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwkJZ3Bpb19mcmVlKEdQSU85M19DQU1fUkVTRVQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdwaW9fc2V0X3ZhbHVlKEdQSU85M19DQU1fUkVTRVQsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2NhbWVyYV9wbGF0Zm9ybV9kYXRhID0geworCS5pbml0CT0gZW1feDI3MF9zZW5zb3JfaW5pdCwKKwkuZmxhZ3MgID0gUFhBX0NBTUVSQV9NQVNURVIgfCBQWEFfQ0FNRVJBX0RBVEFXSURUSF84IHwKKwkJUFhBX0NBTUVSQV9QQ0xLX0VOIHwgUFhBX0NBTUVSQV9NQ0xLX0VOLAorCS5tY2xrXzEwa2h6ID0gMjYwMCwKK307CisKK3N0YXRpYyBpbnQgZW1feDI3MF9zZW5zb3JfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pCit7CisJaW50IHJldDsKKwlpbnQgaXNfb24gPSByZWd1bGF0b3JfaXNfZW5hYmxlZChlbV94MjcwX2NhbWVyYV9sZG8pOworCisJaWYgKG9uID09IGlzX29uKQorCQlyZXR1cm4gMDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU85M19DQU1fUkVTRVQsICFvbik7CisKKwlpZiAob24pCisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwllbHNlCisJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGVtX3gyNzBfY2FtZXJhX2xkbyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19zZXRfdmFsdWUoR1BJTzkzX0NBTV9SRVNFVCwgb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCT0gMCwKKwkucG93ZXIgPSBlbV94MjcwX3NlbnNvcl9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZW1feDI3MF9pMmNfY2FtX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDltMTExIiwgMHg0OCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9pMmNfaW5mbyA9IHsKKwkuZmFzdF9tb2RlID0gMSwKK307CisKK3N0YXRpYyB2b2lkICBfX2luaXQgZW1feDI3MF9pbml0X2NhbWVyYSh2b2lkKQoreworCXB4YV9zZXRfaTJjX2luZm8oJmVtX3gyNzBfaTJjX2luZm8pOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGVtX3gyNzBfaTJjX2NhbV9pbmZvKSk7CisJcHhhX3NldF9jYW1lcmFfaW5mbygmZW1feDI3MF9jYW1lcmFfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkge30KKyNlbmRpZgorCisvKiBEQTkwMzAgcmVsYXRlZCBpbml0aWFsaXphdGlvbnMgKi8KKyNkZWZpbmUgUkVHVUxBVE9SX0NPTlNVTUVSKF9uYW1lLCBfZGV2LCBfc3VwcGx5KQkJCSAgICAgICBcCisJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IF9uYW1lIyNfY29uc3VtZXJzW10gPSB7CVwKKwkJewkJCQkJCQlcCisJCQkuZGV2ID0gX2RldiwJCQkJCVwKKwkJCS5zdXBwbHkgPSBfc3VwcGx5LAkJCQlcCisJCX0sCQkJCQkJCVwKKwl9CisKK1JFR1VMQVRPUl9DT05TVU1FUihsZG8zLCBOVUxMLCAidmNjIGdwcyIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzUsIE5VTEwsICJ2Y2MgY2FtIik7CitSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTAsICZweGFfZGV2aWNlX21jaS5kZXYsICJ2Y2Mgc2RpbyIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEyLCBOVUxMLCAidmNjIHVzYiIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzE5LCBOVUxMLCAidmNjIGdwcnMiKTsKKworI2RlZmluZSBSRUdVTEFUT1JfSU5JVChfbGRvLCBfbWluX3VWLCBfbWF4X3VWLCBfb3BzX21hc2spCQlcCisJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIF9sZG8jI19kYXRhID0gewkJXAorCQkuY29uc3RyYWludHMgPSB7CQkJCQlcCisJCQkubWluX3VWID0gX21pbl91ViwJCQkJXAorCQkJLm1heF91ViA9IF9tYXhfdVYsCQkJCVwKKwkJCS5zdGF0ZV9tZW0gPSB7CQkJCQlcCisJCQkJLmVuYWJsZWQgPSAwLAkJCQlcCisJCQl9LAkJCQkJCVwKKwkJCS52YWxpZF9vcHNfbWFzayA9IF9vcHNfbWFzaywJCQlcCisJCX0sCQkJCQkJCVwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoX2xkbyMjX2NvbnN1bWVycyksCVwKKwkJLmNvbnN1bWVyX3N1cHBsaWVzID0gX2xkbyMjX2NvbnN1bWVycywJCQlcCisJfTsKKworUkVHVUxBVE9SX0lOSVQobGRvMywgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQobGRvNSwgMzAwMDAwMCwgMzAwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQobGRvMTAsIDIwMDAwMDAsIDMyMDAwMDAsCisJICAgICAgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTIHwgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKTsKK1JFR1VMQVRPUl9JTklUKGxkbzEyLCAzMDAwMDAwLCAzMDAwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyk7CitSRUdVTEFUT1JfSU5JVChsZG8xOSwgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworCitzdHJ1Y3QgbGVkX2luZm8gZW1feDI3MF9sZWRfaW5mbyA9IHsKKwkubmFtZSA9ICJlbS14MjcwOm9yYW5nZSIsCisJLmRlZmF1bHRfdHJpZ2dlciA9ICJiYXR0ZXJ5LWNoYXJnaW5nLW9yLWZ1bGwiLAorfTsKKworc3RydWN0IHBvd2VyX3N1cHBseV9pbmZvIGVtX3gyNzBfcHN5X2luZm8gPSB7CisJLm5hbWUgPSAiTFA1NTU1OTdQNkgtRlBTIiwKKwkudGVjaG5vbG9neSA9IFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJUE8sCisJLnZvbHRhZ2VfbWF4X2Rlc2lnbiA9IDQyMDAwMDAsCisJLnZvbHRhZ2VfbWluX2Rlc2lnbiA9IDMwMDAwMDAsCisJLnVzZV9mb3JfYXBtID0gMSwKK307CisKK3N0YXRpYyB2b2lkIGVtX3gyNzBfYmF0dGVyeV9sb3codm9pZCkKK3sKKwlhcG1fcXVldWVfZXZlbnQoQVBNX0xPV19CQVRURVJZKTsKK30KKworc3RhdGljIHZvaWQgZW1feDI3MF9iYXR0ZXJ5X2NyaXRpY2FsKHZvaWQpCit7CisJYXBtX3F1ZXVlX2V2ZW50KEFQTV9DUklUSUNBTF9TVVNQRU5EKTsKK30KKworc3RydWN0IGRhOTAzMF9iYXR0ZXJ5X2luZm8gZW1feDI3MF9iYXR0ZXJ0eV9pbmZvID0geworCS5iYXR0ZXJ5X2luZm8gPSAmZW1feDI3MF9wc3lfaW5mbywKKworCS5jaGFyZ2VfbWlsbGlhbXAgPSAxMDAwLAorCS5jaGFyZ2VfbWlsbGl2b2x0ID0gNDIwMCwKKworCS52YmF0X2xvdyA9IDM2MDAsCisJLnZiYXRfY3JpdCA9IDM0MDAsCisJLnZiYXRfY2hhcmdlX3N0YXJ0ID0gNDEwMCwKKwkudmJhdF9jaGFyZ2Vfc3RvcCA9IDQyMDAsCisJLnZiYXRfY2hhcmdlX3Jlc3RhcnQgPSA0MDAwLAorCisJLnZjaGFyZ2VfbWluID0gMzIwMCwKKwkudmNoYXJnZV9tYXggPSA1NTAwLAorCisJLnRiYXRfbG93ID0gMTk3LAorCS50YmF0X2hpZ2ggPSA3OCwKKwkudGJhdF9yZXN0YXJ0ID0gMTAwLAorCisJLmJhdG1vbl9pbnRlcnZhbCA9IDAsCisKKwkuYmF0dGVyeV9sb3cgPSBlbV94MjcwX2JhdHRlcnlfbG93LAorCS5iYXR0ZXJ5X2NyaXRpY2FsID0gZW1feDI3MF9iYXR0ZXJ5X2NyaXRpY2FsLAorfTsKKworI2RlZmluZSBEQTkwMzBfU1VCREVWKF9uYW1lLCBfaWQsIF9wZGF0YSkJXAorCXsJCQkJCVwKKwkJLm5hbWUgPSAiZGE5MDN4LSIgI19uYW1lLAlcCisJCS5pZCA9IERBOTAzMF9JRF8jI19pZCwJCVwKKwkJLnBsYXRmb3JtX2RhdGEgPSBfcGRhdGEsCVwKKwl9CisKKyNkZWZpbmUgREE5MDMwX0xETyhudW0pCURBOTAzMF9TVUJERVYocmVndWxhdG9yLCBMRE8jI251bSwgJmxkbyMjbnVtIyNfZGF0YSkKKworc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyBlbV94MjcwX2RhOTAzMF9zdWJkZXZzW10gPSB7CisJREE5MDMwX0xETygzKSwKKwlEQTkwMzBfTERPKDUpLAorCURBOTAzMF9MRE8oMTApLAorCURBOTAzMF9MRE8oMTIpLAorCURBOTAzMF9MRE8oMTkpLAorCisJREE5MDMwX1NVQkRFVihsZWQsIExFRF9QQywgJmVtX3gyNzBfbGVkX2luZm8pLAorCURBOTAzMF9TVUJERVYoYmFja2xpZ2h0LCBXTEVELCAmZW1feDI3MF9sZWRfaW5mbyksCisJREE5MDMwX1NVQkRFVihiYXR0ZXJ5LCBCQVQsICZlbV94MjcwX2JhdHRlcnR5X2luZm8pLAorfTsKKworc3RhdGljIHN0cnVjdCBkYTkwM3hfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2RhOTAzMF9pbmZvID0geworCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUoZW1feDI3MF9kYTkwMzBfc3ViZGV2cyksCisJLnN1YmRldnMgPSBlbV94MjcwX2RhOTAzMF9zdWJkZXZzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBlbV94MjcwX2kyY19wbWljX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oImRhOTAzMCIsIDB4NDkpLAorCS5pcnEgPSBJUlFfR1BJTygwKSwKKwkucGxhdGZvcm1fZGF0YSA9ICZlbV94MjcwX2RhOTAzMF9pbmZvLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9wd3JfaTJjX2luZm8gPSB7CisJLnVzZV9waW8gPSAxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9kYTkwMzAodm9pZCkKK3sKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKCZlbV94MjcwX3B3cl9pMmNfaW5mbyk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgJmVtX3gyNzBfaTJjX3BtaWNfaW5mbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX21vZHVsZV9pbml0KHZvaWQpCit7CisJcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlbV94MjcwX3Bpbl9jb25maWcpKTsKIAorCW1tY19jZCA9IEdQSU8xM19NTUNfQ0Q7CisJbmFuZF9yYiA9IEdQSU81Nl9OQU5EX1JCOworCWRtOTAwMF9mbGFncyA9IERNOTAwMF9QTEFURl8zMkJJVE9OTFk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2V4ZWRhX2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGV4ZWRhX3Bpbl9jb25maWcpKTsKKworCW1tY19jZCA9IEdQSU8xMTRfTU1DX0NEOworCW5hbmRfcmIgPSBHUElPMjBfTkFORF9SQjsKKwlkbTkwMDBfZmxhZ3MgPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29tbW9uX3Bpbl9jb25maWcpKTsKKworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJZW1feDI3MF9tb2R1bGVfaW5pdCgpOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfZXhlZGEoKSkKKwkJZW1feDI3MF9leGVkYV9pbml0KCk7CisJZWxzZQorCQlwYW5pYygiVW5zdXBwb3J0ZWQgbWFjaGluZTogJWRcbiIsIG1hY2hpbmVfYXJjaF90eXBlKTsKKworCWVtX3gyNzBfaW5pdF9kYTkwMzAoKTsKIAllbV94MjcwX2luaXRfZG05MDAwKCk7CiAJZW1feDI3MF9pbml0X3J0YygpOwogCWVtX3gyNzBfaW5pdF9uYW5kKCk7CisJZW1feDI3MF9pbml0X25vcigpOwogCWVtX3gyNzBfaW5pdF9sY2QoKTsKIAllbV94MjcwX2luaXRfbW1jKCk7CiAJZW1feDI3MF9pbml0X29oY2koKTsKIAllbV94MjcwX2luaXRfa2V5cGFkKCk7CiAJZW1feDI3MF9pbml0X2dwaW9fa2V5cygpOwogCWVtX3gyNzBfaW5pdF9hYzk3KCk7CisJZW1feDI3MF9pbml0X2NhbWVyYSgpOworCWVtX3gyNzBfaW5pdF9zcGkoKTsKIH0KIAogTUFDSElORV9TVEFSVChFTV9YMjcwLCAiQ29tcHVsYWIgRU0tWDI3MCIpCkBAIC01NTksMyArMTA1NCwxMyBAQAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBlbV94MjcwX2luaXQsCiBNQUNISU5FX0VORAorCitNQUNISU5FX1NUQVJUKEVYRURBLCAiQ29tcHVsYWIgZVhlZGEiKQorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGVtX3gyNzBfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggZGZjZTdkNS4uYzYwZGFkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwppbmRleCBkZjVmODIyLi45MmJhMTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwpAQCAtMTksMTggKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCmluZGV4IDBjY2M5MWMuLjMxMjZhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTI2LDggKzI2LDkgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTEyNywzICsxMjgsMzMgQEAKIAlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7CiAJZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOwogfQorCisvKgorICogQ29uZmlndXJlIHBpbnMgZm9yIEdQSU8gb3Igb3RoZXIgZnVuY3Rpb25zCisgKi8KK2ludCBweGFfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZ3BpbyA9IGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19OUjsKKwlpbnQgZm4gPSAoZ3Bpb19tb2RlICYgR1BJT19NRF9NQVNLX0ZOKSA+PiA4OworCWludCBnYWZyOworCisJaWYgKGdwaW8gPiBweGFfbGFzdF9ncGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoZ3Bpb19tb2RlICYgR1BJT19ERkxUX0xPVykKKwkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCWVsc2UgaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9ISUdIKQorCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJaWYgKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19ESVIpCisJCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7CisJZWxzZQorCQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKKwlnYWZyID0gR0FGUihncGlvKSAmIH4oMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7CisJR0FGUihncGlvKSA9IGdhZnIgfCAgKGZuICA8PCAoKChncGlvKSAmIDB4ZikqMikpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChweGFfZ3Bpb19tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAppbmRleCBkYzg3NmE4Li4zNDY1MjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCkBAIC05LDIwICs5LDE3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi10eXBlZGVmIGludCAoKnNldF93YWtlX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLQogc3RydWN0IHN5c190aW1lcjsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhX3RpbWVyOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yLCBzZXRfd2FrZV90IGZuKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwKKwkJCQlpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbyk7Ci1leHRlcm4gaW50IHB4YV9sYXN0X2dwaW87CiAKICNkZWZpbmUgU0VUX0JBTksoX19ucixfX3N0YXJ0LF9fc2l6ZSkgXAogCW1pLT5iYW5rW19fbnJdLnN0YXJ0ID0gKF9fc3RhcnQpLCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZWMxZTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUzICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCi0gKgotICogIEdlbmVyaWMgUFhBIEdQSU8gaGFuZGxpbmcKLSAqCi0gKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCi0gKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCi0gKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+Ci0KLSNpbmNsdWRlICJnZW5lcmljLmgiCi0KLSNkZWZpbmUgR1BJTzBfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDAwKSkKLSNkZWZpbmUgR1BJTzFfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA0KSkKLSNkZWZpbmUgR1BJTzJfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA4KSkKLSNkZWZpbmUgR1BJTzNfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMTAwKSkKLQotI2RlZmluZSBHUExSX09GRlNFVAkweDAwCi0jZGVmaW5lIEdQRFJfT0ZGU0VUCTB4MEMKLSNkZWZpbmUgR1BTUl9PRkZTRVQJMHgxOAotI2RlZmluZSBHUENSX09GRlNFVAkweDI0Ci0jZGVmaW5lIEdSRVJfT0ZGU0VUCTB4MzAKLSNkZWZpbmUgR0ZFUl9PRkZTRVQJMHgzQwotI2RlZmluZSBHRURSX09GRlNFVAkweDQ4Ci0KLXN0cnVjdCBweGFfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7Ci0Jdm9pZCBfX2lvbWVtICAgICAqcmVnYmFzZTsKLX07Ci0KLWludCBweGFfbGFzdF9ncGlvOwotCi0jaWZkZWYgQ09ORklHX0NQVV9QWEEyNngKLS8qIEdQSU84Ni84Ny84OC84OSBvbiBQWEEyNnggaGF2ZSB0aGVpciBkaXJlY3Rpb24gYml0cyBpbiBHUERSMiBpbnZlcnRlZCwKLSAqIGFzIHdlbGwgYXMgdGhlaXIgQWx0ZXJuYXRlIEZ1bmN0aW9uIHZhbHVlIGJlaW5nICcxJyBmb3IgR1BJTyBpbiBHQUZSeC4KLSAqLwotc3RhdGljIGludCBfX2dwaW9faXNfaW52ZXJ0ZWQodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gY3B1X2lzX3B4YTI1eCgpICYmIGdwaW8gPiA4NTsKLX0KLSNlbHNlCi0jZGVmaW5lIF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKQkoMCkKLSNlbmRpZgotCi0vKgotICogQ29uZmlndXJlIHBpbnMgZm9yIEdQSU8gb3Igb3RoZXIgZnVuY3Rpb25zCi0gKi8KLWludCBweGFfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZ3BpbyA9IGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19OUjsKLQlpbnQgZm4gPSAoZ3Bpb19tb2RlICYgR1BJT19NRF9NQVNLX0ZOKSA+PiA4OwotCWludCBnYWZyOwotCi0JaWYgKGdwaW8gPiBweGFfbGFzdF9ncGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoZ3Bpb19tb2RlICYgR1BJT19ERkxUX0xPVykKLQkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOwotCWVsc2UgaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9ISUdIKQotCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci0JaWYgKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19ESVIpCi0JCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7Ci0JZWxzZQotCQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLQlnYWZyID0gR0FGUihncGlvKSAmIH4oMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7Ci0JR0FGUihncGlvKSA9IGdhZnIgfCAgKGZuICA8PCAoKChncGlvKSAmIDB4ZikqMikpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChweGFfZ3Bpb19tb2RlKTsKLQotc3RhdGljIGludCBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcgICAgICAgIGZsYWdzOwotCXUzMiAgICAgICAgICAgICAgICAgIG1hc2sgPSAxIDw8IG9mZnNldDsKLQl1MzIgICAgICAgICAgICAgICAgICB2YWx1ZTsKLQlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqcHhhOwotCXZvaWQgX19pb21lbSAgICAgICAgICpncGRyOwotCi0JcHhhID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBweGFfZ3Bpb19jaGlwLCBjaGlwKTsKLQlncGRyID0gcHhhLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQ7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZhbHVlID0gX19yYXdfcmVhZGwoZ3Bkcik7Ci0JaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChjaGlwLT5iYXNlICsgb2Zmc2V0KSkKLQkJdmFsdWUgfD0gbWFzazsKLQllbHNlCi0JCXZhbHVlICY9IH5tYXNrOwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZ3Bkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nICAgICAgICBmbGFnczsKLQl1MzIgICAgICAgICAgICAgICAgICBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyICAgICAgICAgICAgICAgICAgdG1wOwotCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpweGE7Ci0Jdm9pZCBfX2lvbWVtICAgICAgICAgKmdwZHI7Ci0KLQlweGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHB4YV9ncGlvX2NoaXAsIGNoaXApOwotCV9fcmF3X3dyaXRlbChtYXNrLAotCQkJcHhhLT5yZWdiYXNlICsgKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOwotCWdwZHIgPSBweGEtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdG1wID0gX19yYXdfcmVhZGwoZ3Bkcik7Ci0JaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChjaGlwLT5iYXNlICsgb2Zmc2V0KSkKLQkJdG1wICY9IH5tYXNrOwotCWVsc2UKLQkJdG1wIHw9IG1hc2s7Ci0JX19yYXdfd3JpdGVsKHRtcCwgZ3Bkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gR1BJTyBsZXZlbAotICovCi1zdGF0aWMgaW50IHB4YV9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0JdTMyICAgICAgICAgICAgICAgICAgbWFzayA9IDEgPDwgb2Zmc2V0OwotCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpweGE7Ci0KLQlweGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHB4YV9ncGlvX2NoaXAsIGNoaXApOwotCXJldHVybiBfX3Jhd19yZWFkbChweGEtPnJlZ2Jhc2UgKyBHUExSX09GRlNFVCkgJiBtYXNrOwotfQotCi0vKgotICogU2V0IG91dHB1dCBHUElPIGxldmVsCi0gKi8KLXN0YXRpYyB2b2lkIHB4YV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQl1MzIgICAgICAgICAgICAgICAgICBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0Jc3RydWN0IHB4YV9ncGlvX2NoaXAgKnB4YTsKLQotCXB4YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCwgY2hpcCk7Ci0KLQlpZiAodmFsdWUpCi0JCV9fcmF3X3dyaXRlbChtYXNrLCBweGEtPnJlZ2Jhc2UgKyBHUFNSX09GRlNFVCk7Ci0JZWxzZQotCQlfX3Jhd193cml0ZWwobWFzaywgcHhhLT5yZWdiYXNlICsgR1BDUl9PRkZTRVQpOwotfQotCi0jZGVmaW5lIEdQSU9fQ0hJUChfbikJCQkJCQkJXAotCVtfbl0gPSB7CQkJCQkJCVwKLQkJLnJlZ2Jhc2UgPSBHUElPIyNfbiMjX0JBU0UsCQkJCVwKLQkJLmNoaXAgPSB7CQkJCQkJXAotCQkJLmxhYmVsCQkgID0gImdwaW8tIiAjX24sCQlcCi0JCQkuZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwJXAotCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBweGFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAlcCi0JCQkuZ2V0CQkgID0gcHhhX2dwaW9fZ2V0LAkJXAotCQkJLnNldAkJICA9IHB4YV9ncGlvX3NldCwJCVwKLQkJCS5iYXNlCQkgID0gKF9uKSAqIDMyLAkJCVwKLQkJCS5uZ3BpbwkJICA9IDMyLAkJCQlcCi0JCX0sCQkJCQkJCVwKLQl9Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCBweGFfZ3Bpb19jaGlwW10gPSB7Ci0JR1BJT19DSElQKDApLAotCUdQSU9fQ0hJUCgxKSwKLQlHUElPX0NISVAoMiksCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCi0JR1BJT19DSElQKDMpLAotI2VuZGlmCi19OwotCi0vKgotICogUFhBIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIElSUXM6Ci0gKiBJUlFzIGFyZSBnZW5lcmF0ZWQgb24gRmFsbGluZy1FZGdlLCBSaXNpbmctRWRnZSwgb3IgYm90aC4KLSAqIFVzZSB0aGlzIGluc3RlYWQgb2YgZGlyZWN0bHkgc2V0dGluZyBHUkVSL0dGRVIuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgR1BJT19JUlFfcmlzaW5nX2VkZ2VbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9tYXNrWzRdOwotCi0vKgotICogT24gUFhBMjV4IGFuZCBQWEEyN3gsIEdBRlJ4IGFuZCBHUERSeCB0b2dldGhlciBkZWNpZGUgdGhlIGFsdGVybmF0ZQotICogZnVuY3Rpb24gb2YgYSBHUElPLCBhbmQgR1BEUnggY2Fubm90IGJlIGFsdGVyZWQgb25jZSBjb25maWd1cmVkLiBJdAotICogaXMgYXR0cmlidXRlZCBhcyAib2NjdXBpZWQiIGhlcmUgKEkga25vdyB0aGlzIHRlcm1pbm9sb2d5IGlzbid0Ci0gKiBhY2N1cmF0ZSwgeW91IGFyZSB3ZWxjb21lIHRvIHByb3Bvc2UgYSBiZXR0ZXIgb25lIDotKQotICovCi1zdGF0aWMgaW50IF9fZ3Bpb19pc19vY2N1cGllZCh1bnNpZ25lZCBncGlvKQotewotCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSB7Ci0JCWludCBhZiA9IChHQUZSKGdwaW8pID4+ICgoZ3BpbyAmIDB4ZikgKiAyKSkgJiAweDM7Ci0JCWludCBkaXIgPSBHUERSKGdwaW8pICYgR1BJT19iaXQoZ3Bpbyk7Ci0KLQkJaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKSkKLQkJCXJldHVybiBhZiAhPSAxIHx8IGRpciA9PSAwOwotCQllbHNlCi0JCQlyZXR1cm4gYWYgIT0gMCB8fCBkaXIgIT0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBweGFfZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlpbnQgZ3BpbywgaWR4OwotCi0JZ3BpbyA9IElSUV9UT19HUElPKGlycSk7Ci0JaWR4ID0gZ3BpbyA+PiA1OwotCi0JaWYgKHR5cGUgPT0gSVJRX1RZUEVfUFJPQkUpIHsKLQkJLyogRG9uJ3QgbWVzcyB3aXRoIGVuYWJsZWQgR1BJT3MgdXNpbmcgcHJlY29uZmlndXJlZCBlZGdlcyBvcgotCQkgKiBHUElPcyBzZXQgdG8gYWx0ZXJuYXRlIGZ1bmN0aW9uIG9yIHRvIG91dHB1dCBkdXJpbmcgcHJvYmUKLQkJICovCi0JCWlmICgoR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fYml0KGdwaW8pKSB8fAotCQkgICAgKEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19iaXQoZ3BpbykpKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKF9fZ3Bpb19pc19vY2N1cGllZChncGlvKSkKLQkJCXJldHVybiAwOwotCi0JCXR5cGUgPSBJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORzsKLQl9Ci0KLQlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQotCQlHUERSKGdwaW8pIHw9IEdQSU9fYml0KGdwaW8pOwotCWVsc2UKLQkJR1BEUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7Ci0KLQlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQotCQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfcmlzaW5nX2VkZ2UpOwotCWVsc2UKLQkJX19jbGVhcl9iaXQoZ3BpbywgR1BJT19JUlFfcmlzaW5nX2VkZ2UpOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCV9fc2V0X2JpdChncGlvLCBHUElPX0lSUV9mYWxsaW5nX2VkZ2UpOwotCWVsc2UKLQkJX19jbGVhcl9iaXQoZ3BpbywgR1BJT19JUlFfZmFsbGluZ19lZGdlKTsKLQotCUdSRVIoZ3BpbykgPSBHUElPX0lSUV9yaXNpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotCUdGRVIoZ3BpbykgPSBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKLQotCXByX2RlYnVnKCIlczogSVJRJWQgKEdQSU8lZCkgLSBlZGdlJXMlc1xuIiwgX19mdW5jX18sIGlycSwgZ3BpbywKLQkJKCh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpICA/ICIgcmlzaW5nIiAgOiAiIiksCi0JCSgodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykgPyAiIGZhbGxpbmciIDogIiIpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEdQSU8gSVJRcyBtdXN0IGJlIGFja25vd2xlZGdlZC4gIFRoaXMgaXMgZm9yIEdQSU8gMCBhbmQgMS4KLSAqLwotCi1zdGF0aWMgdm9pZCBweGFfYWNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JR0VEUjAgPSAoMSA8PCAoaXJxIC0gSVJRX0dQSU8wKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV9tYXNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JSUNNUiAmPSB+KDEgPDwgKGlycSAtIFBYQV9JUlEoMCkpKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX3VubWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCUlDTVIgfD0gMSA8PCAoaXJxIC0gUFhBX0lSUSgwKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX2xvd19ncGlvX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIkdQSU8tbCIsCi0JLmFjawkJPSBweGFfYWNrX2xvd19ncGlvLAotCS5tYXNrCQk9IHB4YV9tYXNrX2xvd19ncGlvLAotCS51bm1hc2sJCT0gcHhhX3VubWFza19sb3dfZ3BpbywKLQkuc2V0X3R5cGUJPSBweGFfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KLS8qCi0gKiBEZW11eCBoYW5kbGVyIGZvciBHUElPPj0yIGVkZ2UgZGV0ZWN0IGludGVycnVwdHMKLSAqLwotCi0jZGVmaW5lIEdFRFJfQklUUwkoc2l6ZW9mKGdlZHIpICogQklUU19QRVJfQllURSkKLQotc3RhdGljIHZvaWQgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IGxvb3AsIGJpdCwgbjsKLQl1bnNpZ25lZCBsb25nIGdlZHJbNF07Ci0KLQlkbyB7Ci0JCWdlZHJbMF0gPSBHRURSMCAmIEdQSU9fSVJRX21hc2tbMF0gJiB+MzsKLQkJZ2VkclsxXSA9IEdFRFIxICYgR1BJT19JUlFfbWFza1sxXTsKLQkJZ2VkclsyXSA9IEdFRFIyICYgR1BJT19JUlFfbWFza1syXTsKLQkJZ2VkclszXSA9IEdFRFIzICYgR1BJT19JUlFfbWFza1szXTsKLQotCQlHRURSMCA9IGdlZHJbMF07IEdFRFIxID0gZ2VkclsxXTsKLQkJR0VEUjIgPSBnZWRyWzJdOyBHRURSMyA9IGdlZHJbM107Ci0KLQkJbG9vcCA9IDA7Ci0JCWJpdCA9IGZpbmRfZmlyc3RfYml0KGdlZHIsIEdFRFJfQklUUyk7Ci0JCXdoaWxlIChiaXQgPCBHRURSX0JJVFMpIHsKLQkJCWxvb3AgPSAxOwotCi0JCQluID0gUFhBX0dQSU9fSVJRX0JBU0UgKyBiaXQ7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEobik7Ci0KLQkJCWJpdCA9IGZpbmRfbmV4dF9iaXQoZ2VkciwgR0VEUl9CSVRTLCBiaXQgKyAxKTsKLQkJfQotCX0gd2hpbGUgKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBweGFfYWNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKLQlHRURSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV9tYXNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKLQlfX2NsZWFyX2JpdChncGlvLCBHUElPX0lSUV9tYXNrKTsKLQlHUkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLQlHRkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX3VubWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTygyKSArIDI7Ci0JaW50IGlkeCA9IGdwaW8gPj4gNTsKLQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfbWFzayk7Ci0JR1JFUihncGlvKSA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Ci0JR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9tdXhlZF9ncGlvX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIkdQSU8iLAotCS5hY2sJCT0gcHhhX2Fja19tdXhlZF9ncGlvLAotCS5tYXNrCQk9IHB4YV9tYXNrX211eGVkX2dwaW8sCi0JLnVubWFzawkJPSBweGFfdW5tYXNrX211eGVkX2dwaW8sCi0JLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCi19OwotCi12b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yLCBzZXRfd2FrZV90IGZuKQotewotCWludCBpcnEsIGksIGdwaW87Ci0KLQlweGFfbGFzdF9ncGlvID0gZ3Bpb19uciAtIDE7Ci0KLQkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19ucjsgaSArPSAzMikgewotCQlHRkVSKGkpID0gMDsKLQkJR1JFUihpKSA9IDA7Ci0JCUdFRFIoaSkgPSBHRURSKGkpOwotCX0KLQotCS8qIEdQSU8gMCBhbmQgMSBtdXN0IGhhdmUgdGhlaXIgbWFzayBiaXQgYWx3YXlzIHNldCAqLwotCUdQSU9fSVJRX21hc2tbMF0gPSAzOwotCi0JZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0JfQotCi0JZm9yIChpcnEgPSBJUlFfR1BJTygyKTsgaXJxIDwgSVJRX0dQSU8oZ3Bpb19ucik7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQl9Ci0KLQkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPXzJfeCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7Ci0KLQlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOwotCXB4YV9tdXhlZF9ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKLQotCS8qIGFkZCBhIEdQSU8gY2hpcCBmb3IgZWFjaCByZWdpc3RlciBiYW5rLgotCSAqIHRoZSBsYXN0IFBYQTI1eCByZWdpc3RlciBvbmx5IGNvbnRhaW5zIDIxIEdQSU9zCi0JICovCi0JZm9yIChncGlvID0gMCwgaSA9IDA7IGdwaW8gPCBncGlvX25yOyBncGlvICs9IDMyLCBpKyspIHsKLQkJaWYgKGdwaW8gKyAzMiA+IGdwaW9fbnIpCi0JCQlweGFfZ3Bpb19jaGlwW2ldLmNoaXAubmdwaW8gPSBncGlvX25yIC0gZ3BpbzsKLQkJZ3Bpb2NoaXBfYWRkKCZweGFfZ3Bpb19jaGlwW2ldLmNoaXApOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9ncGxyWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bkcls0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dyZXJbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9nZmVyWzRdOwotCi1zdGF0aWMgaW50IHB4YV9ncGlvX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWludCBpLCBncGlvOwotCi0JZm9yIChncGlvID0gMCwgaSA9IDA7IGdwaW8gPCBweGFfbGFzdF9ncGlvOyBncGlvICs9IDMyLCBpKyspIHsKLQkJc2F2ZWRfZ3BscltpXSA9IEdQTFIoZ3Bpbyk7Ci0JCXNhdmVkX2dwZHJbaV0gPSBHUERSKGdwaW8pOwotCQlzYXZlZF9ncmVyW2ldID0gR1JFUihncGlvKTsKLQkJc2F2ZWRfZ2ZlcltpXSA9IEdGRVIoZ3Bpbyk7Ci0KLQkJLyogQ2xlYXIgR1BJTyB0cmFuc2l0aW9uIGRldGVjdCBiaXRzICovCi0JCUdFRFIoZ3BpbykgPSBHRURSKGdwaW8pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBweGFfZ3Bpb19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlpbnQgaSwgZ3BpbzsKLQotCWZvciAoZ3BpbyA9IDAsIGkgPSAwOyBncGlvIDwgcHhhX2xhc3RfZ3BpbzsgZ3BpbyArPSAzMiwgaSsrKSB7Ci0JCS8qIHJlc3RvcmUgbGV2ZWwgd2l0aCBzZXQvY2xlYXIgKi8KLQkJR1BTUihncGlvKSA9IHNhdmVkX2dwbHJbaV07Ci0JCUdQQ1IoZ3BpbykgPSB+c2F2ZWRfZ3BscltpXTsKLQotCQlHUkVSKGdwaW8pID0gc2F2ZWRfZ3JlcltpXTsKLQkJR0ZFUihncGlvKSA9IHNhdmVkX2dmZXJbaV07Ci0JCUdQRFIoZ3BpbykgPSBzYXZlZF9ncGRyW2ldOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIHB4YV9ncGlvX3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGFfZ3Bpb19yZXN1bWUJCU5VTEwKLSNlbmRpZgotCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9ncGlvX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJncGlvIiwKLQkuc3VzcGVuZAk9IHB4YV9ncGlvX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFfZ3Bpb19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBweGFfZ3Bpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhX2dwaW9fc3lzY2xhc3MpOwotfQotCi1jb3JlX2luaXRjYWxsKHB4YV9ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCmluZGV4IGUyOTZjZTEuLmNhOTkxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKQEAgLTM4LDE0ICszOCwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2d1bXN0aXguaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CkBAIC0xOTEsNiArMTg5LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgYW0zMDBfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgY2Fycmllcl9ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTE5OCw2ICsyMDEsNyBAQAogCSAqIHRoZXkgY2Fubm90IGJlIGRldGVjdGVkIHByb2dyYW1hdGljYWxseQogCSAqLwogCWFtMjAwX2luaXQoKTsKKwlhbTMwMF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCmluZGV4IDI5NWVjNDEuLmYzZDIyMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwpAQCAtMjQsMTQgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2g1MDAwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgorCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhOTlmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9oaW1hbGF5YS5jCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBIVEMgSGltYWxheWEKKyAqCisgKiBCYXNlZCBvbiAyLjYuMjEtaGgyMCdzIGhpbWFsYXlhLmMgYW5kIGhpbWFsYXlhX2xjZC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFpieW5layBNaWNobCA8WmJ5bmVrLk1pY2hsQHNlem5hbS5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGltYWxheWEgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9nZW5fcmVncyBoaW1hbGF5YV9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAweDAwMDAwMDAzLAorCS5sY2RkX2NudGwxID0gICAgICAgIDB4MDAwMDAwMDAsCisJLmxjZGRfY250bDIgPSAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAweDAwZmZmMDAzLAorCS5nZW5sY2RfY250bDIgPSAgICAgIDB4MDAwMDAwMDMsCisJLmdlbmxjZF9jbnRsMyA9ICAgICAgMHgwMDAxMDJhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGhpbWFsYXlhNF9sY2RfbW9kZSA9IHsKKwkueHJlcyAJCT0gMjQwLAorCS55cmVzIAkJPSAzMjAsCisJLmxlZnRfbWFyZ2luIAk9IDAsCisJLnJpZ2h0X21hcmdpbiAJPSAzMSwKKwkudXBwZXJfbWFyZ2luIAk9IDE1LAorCS5sb3dlcl9tYXJnaW4gCT0gMCwKKwkuY3J0Y19zcwk9IDB4ODAxNTAwMTQsCisJLmNydGNfbHMJPSAweGEwZmIwMGY3LAorCS5jcnRjX2dzCT0gMHhjMDA4MDAwNywKKwkuY3J0Y192cG9zX2dzCT0gMHgwMDA4MDAwNywKKwkuY3J0Y19yZXYJPSAweDAwMDAwMDBhLAorCS5jcnRjX2RjbGsJPSAweDgxNzAwMDMwLAorCS5jcnRjX2djbGsJPSAweDgwMTUwMTBmLAorCS5jcnRjX2dvZQk9IDB4MDAwMDAwMDAsCisJLnBsbF9mcmVxIAk9IDgwLAorCS5waXhjbGtfZGl2aWRlciA9IDE1LAorCS5waXhjbGtfZGl2aWRlcl9yb3RhdGVkID0gMTUsCisJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJLnN5c2Nsa19kaXZpZGVyID0gMCwKKwkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGhpbWFsYXlhNl9sY2RfbW9kZSA9IHsKKwkueHJlcyAJCT0gMjQwLAorCS55cmVzIAkJPSAzMjAsCisJLmxlZnRfbWFyZ2luIAk9IDksCisJLnJpZ2h0X21hcmdpbiAJPSA4LAorCS51cHBlcl9tYXJnaW4gCT0gNSwKKwkubG93ZXJfbWFyZ2luIAk9IDQsCisJLmNydGNfc3MJPSAweDgwMTUwMDE0LAorCS5jcnRjX2xzCT0gMHhhMGZiMDBmNywKKwkuY3J0Y19ncwk9IDB4YzAwODAwMDcsCisJLmNydGNfdnBvc19ncwk9IDB4MDAwODAwMDcsCisJLmNydGNfcmV2CT0gMHgwMDAwMDAwYSwKKwkuY3J0Y19kY2xrCT0gMHhhMTcwMDAzMCwKKwkuY3J0Y19nY2xrCT0gMHg4MDE1MDEwZiwKKwkuY3J0Y19nb2UJPSAweDAwMDAwMDAwLAorCS5wbGxfZnJlcSAJPSA5NSwKKwkucGl4Y2xrX2RpdmlkZXIgPSAweGIsCisJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA0LAorCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCS5zeXNjbGtfZGl2aWRlciA9IDEsCisJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGhpbWFsYXlhX3cxMDBfZ3Bpb19pbmZvID0geworCS5pbml0X2RhdGExID0gMHhmZmZmMDAwMCwJLyogR1BJT19EQVRBICAqLworCS5ncGlvX2RpcjEgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMMSAqLworCS5ncGlvX29lMSAgID0gMHgwMDNjMDAwMCwJLyogR1BJT19DTlRMMiAqLworCS5pbml0X2RhdGEyID0gMHgwMDAwMDAwMCwJLyogR1BJT19EQVRBMiAqLworCS5ncGlvX2RpcjIgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMMyAqLworCS5ncGlvX29lMiAgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMNCAqLworfTsKKworc3RhdGljIHN0cnVjdCB3MTAwZmJfbWFjaF9pbmZvIGhpbWFsYXlhX2ZiX2luZm8gPSB7CisJLm51bV9tb2RlcyAgPSAxLAorCS5yZWdzICAgICAgID0gJmhpbWFsYXlhX2xjZF9yZWdzLAorCS5ncGlvICAgICAgID0gJmhpbWFsYXlhX3cxMDBfZ3Bpb19pbmZvLAorCS54dGFsX2ZyZXEgPSAxNjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGltYWxheWFfZmJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDA4MDAwMDAwLAorCQkuZW5kCT0gMHgwOGZmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhpbWFsYXlhX2ZiX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidzEwMGZiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZoaW1hbGF5YV9mYl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoaW1hbGF5YV9mYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGhpbWFsYXlhX2ZiX3Jlc291cmNlcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGltYWxheWFfZmJfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGhpbWFsYXlhX2xjZF9pbml0KHZvaWQpCit7CisJaW50IGhpbWFsYXlhX2JvYXJkaWQ7CisKKwloaW1hbGF5YV9ib2FyZGlkID0gMHg0OyAvKiBoYXJkY29kZWQgKGRldGVjdGlvbiBuZWVkcyBBU0lDMyBmdW5jdGlvbnMpICovCisJcHJpbnRrKEtFUk5fSU5GTyAiaGltYWxheWEgTENEIERyaXZlciBpbml0LiBib2FyZGlkPSVkXG4iLAorCQloaW1hbGF5YV9ib2FyZGlkKTsKKworCXN3aXRjaCAoaGltYWxheWFfYm9hcmRpZCkgeworCWNhc2UgMHg0OgorCQloaW1hbGF5YV9mYl9pbmZvLm1vZGVsaXN0ID0gJmhpbWFsYXlhNF9sY2RfbW9kZTsKKwlicmVhazsKKwljYXNlIDB4NjoKKwkJaGltYWxheWFfZmJfaW5mby5tb2RlbGlzdCA9ICZoaW1hbGF5YTZfbGNkX21vZGU7CisJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGltYWxheWEgbGNkX2luaXQ6IHVua25vd24gYm9hcmRpZD0lZC4gVXNpbmcgMHg0XG4iLAorCQkJaGltYWxheWFfYm9hcmRpZCk7CisJCWhpbWFsYXlhX2ZiX2luZm8ubW9kZWxpc3QgPSAmaGltYWxheWE0X2xjZF9tb2RlOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IGhpbWFsYXlhX2luaXQodm9pZCkKK3sKKwloaW1hbGF5YV9sY2RfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCisKK01BQ0hJTkVfU1RBUlQoSElNQUxBWUEsICJIVEMgSGltYWxheWEiKQorCS5waHlzX2lvID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSA9IHB4YTI1eF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lID0gaGltYWxheWFfaW5pdCwKKwkudGltZXIgPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKaW5kZXggMDEzYjE1Yi4uYjYyNDNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2lkcC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL2JpdGZpZWxkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCmluZGV4IDM2NGM1ZTIuLjIxMjEzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCkBAIC0yOCwxMSArMjgsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggMmFlMzczZi4uM2YyYTAxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC0xLDE5ICsxLDMxIEBACiAjaWZuZGVmIF9DT0xJQlJJX0hfCiAjZGVmaW5lIF9DT0xJQlJJX0hfCisvKgorICogY29tbW9uIHNldHRpbmdzIGZvciBhbGwgbW9kdWxlcworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKK2V4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbW1jKG1mcF9jZmdfdCAqcGlucywgaW50IGxlbiwgaW50IGRldGVjdF9waW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKiwgaW50LCBpbnQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK2V4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbGNkKGludCBibF9waW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X2xjZChpbnQpIHt9CisjZW5kaWYKIAogLyogcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgKi8KLSNkZWZpbmUgQ09MSUJSSV9GTEFTSF9QSFlTCShQWEFfQ1MwX1BIWVMpICAvKiBGbGFzaCByZWdpb24gKi8KLSNkZWZpbmUgQ09MSUJSSV9FVEhfUEhZUwkoUFhBX0NTMl9QSFlTKSAgLyogRXRoZXJuZXQgRE05MDAwIHJlZ2lvbiAqLwogI2RlZmluZSBDT0xJQlJJX1NEUkFNX0JBU0UJMHhhMDAwMDAwMCAgICAgIC8qIFNEUkFNIHJlZ2lvbiAqLwogCi0vKiB2aXJ0dWFsIG1lbW9yeSByZWdpb25zICovCi0jZGVmaW5lIENPTElCUklfRElTS19WSVJUCTB4RjAwMDAwMDAJLyogRGlzayBPbiBDaGlwIHJlZ2lvbiAqLworLyogZGVmaW5pdGlvbnMgZm9yIENvbGlicmkgUFhBMjcwICovCiAKLS8qIHNpemUgb2YgZmxhc2ggKi8KLSNkZWZpbmUgQ09MSUJSSV9GTEFTSF9TSVpFCTB4MDIwMDAwMDAJLyogRmxhc2ggc2l6ZSAzMiBNQiAqLwotCi0vKiBFdGhlcm5ldCBDb250cm9sbGVyIERhdmljb20gRE05MDAwICovCi0jZGVmaW5lIEdQSU9fRE05MDAwCQkxMTQKLSNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRCUlSUV9HUElPKEdQSU9fRE05MDAwKQorI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9GTEFTSF9QSFlTCShQWEFfQ1MwX1BIWVMpICAvKiBGbGFzaCByZWdpb24gKi8KKyNkZWZpbmUgQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMJCShQWEFfQ1MyX1BIWVMpICAvKiBFdGhlcm5ldCAqLworI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9FVEhfSVJRX0dQSU8JMTE0CisjZGVmaW5lIENPTElCUklfUFhBMjcwX0VUSF9JUlEJCVwKKwlncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhDT0xJQlJJX1BYQTI3MF9FVEhfSVJRX0dQSU8pKQogCiAjZW5kaWYgLyogX0NPTElCUklfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NzYjcyNi5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NzYjcyNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2FiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY3NiNzI2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBDb2dlbnQgQ1NCNzI2CisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBEbWl0cnkgQmFyeXNoa292CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpZm5kZWYgQ1NCNzI2X0gKKyNkZWZpbmUgQ1NCNzI2X0gKKworI2RlZmluZSBDU0I3MjZfR1BJT19JUlFfTEFOCTUyCisjZGVmaW5lIENTQjcyNl9HUElPX0lSUV9TTTUwMQk1MworI2RlZmluZSBDU0I3MjZfR1BJT19NTUNfREVURUNUCTEwMAorI2RlZmluZSBDU0I3MjZfR1BJT19NTUNfUk8JMTAxCisKKyNkZWZpbmUgQ1NCNzI2X0ZMQVNIX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIENTQjcyNl9GTEFTSF91TU9OCSg4ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ1NCNzI2X0lSUV9MQU4JCWdwaW9fdG9faXJxKENTQjcyNl9HUElPX0lSUV9MQU4pCisjZGVmaW5lIENTQjcyNl9JUlFfU001MDEJZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fSVJRX1NNNTAxKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDc4MDQ2MzcuLjViZDU1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTEyLDM1ICsxMiwxMCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotLyoKLSAqIERlc2NyaXB0b3Igc3RydWN0dXJlIGZvciBQWEEncyBETUEgZW5naW5lCi0gKiBOb3RlOiB0aGlzIHN0cnVjdHVyZSBtdXN0IGFsd2F5cyBiZSBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeS4KLSAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgcHhhX2RtYV9kZXNjIHsKLQl2b2xhdGlsZSB1MzIgZGRhZHI7CS8qIFBvaW50cyB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICsgZmxhZ3MgKi8KLQl2b2xhdGlsZSB1MzIgZHNhZHI7CS8qIERTQURSIHZhbHVlIGZvciB0aGUgY3VycmVudCB0cmFuc2ZlciAqLwotCXZvbGF0aWxlIHUzMiBkdGFkcjsJLyogRFRBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCi0Jdm9sYXRpbGUgdTMyIGRjbWQ7CS8qIERDTUQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCi19IHB4YV9kbWFfZGVzYzsKKy8qIERNQSBDb250cm9sbGVyIFJlZ2lzdGVycyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBETUFDX1JFR1NfVklSVAlpb19wMnYoMHg0MDAwMDAwMCkKIAotdHlwZWRlZiBlbnVtIHsKLQlETUFfUFJJT19ISUdIID0gMCwKLQlETUFfUFJJT19NRURJVU0gPSAxLAotCURNQV9QUklPX0xPVyA9IDIKLX0gcHhhX2RtYV9wcmlvOwotCi0vKgotICogRE1BIHJlZ2lzdHJhdGlvbgotICovCi0KLWludCBfX2luaXQgcHhhX2luaXRfZG1hKGludCBudW1fY2gpOwotCi1pbnQgcHhhX3JlcXVlc3RfZG1hIChjaGFyICpuYW1lLAotCQkJIHB4YV9kbWFfcHJpbyBwcmlvLAotCQkJIHZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAotCQkJIHZvaWQgKmRhdGEpOwotCi12b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCk7Ci0KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMmM1MzhkOC4uYjAyNGE4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yNCw0MiArMjQsMTE4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfUFhBX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1BYQV9HUElPX0gKIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCisjZGVmaW5lIEdQSU9fUkVHU19WSVJUCWlvX3AydigweDQwRTAwMDAwKQogCi0vKiBOT1RFOiBzb21lIFBYQXMgaGF2ZSBmZXdlciBvbi1jaGlwIEdQSU9zIChsaWtlIFBYQTI1NSwgd2l0aCA4NSkuCi0gKiBUaG9zZSBjYXNlcyBjdXJyZW50bHkgY2F1c2UgaG9sZXMgaW4gdGhlIEdQSU8gbnVtYmVyIHNwYWNlLgotICovCisjZGVmaW5lIEJBTktfT0ZGKG4pCSgoKG4pIDwgMykgPyAobikgPDwgMiA6IDB4MTAwICsgKCgobikgLSAzKSA8PCAyKSkKKyNkZWZpbmUgR1BJT19SRUcoeCkJKCoodm9sYXRpbGUgdTMyICopKEdQSU9fUkVHU19WSVJUICsgKHgpKSkKKworLyogR1BJTyBQaW4gTGV2ZWwgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdQTFIwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4MDApCisjZGVmaW5lIEdQTFIxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4MDApCisjZGVmaW5lIEdQTFIyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4MDApCisjZGVmaW5lIEdQTFIzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4MDApCisKKy8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BEUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgwYykKKyNkZWZpbmUgR1BEUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgwYykKKyNkZWZpbmUgR1BEUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgwYykKKyNkZWZpbmUgR1BEUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgwYykKKworLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BTUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgxOCkKKyNkZWZpbmUgR1BTUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgxOCkKKyNkZWZpbmUgR1BTUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgxOCkKKyNkZWZpbmUgR1BTUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgxOCkKKworLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVycyAqLworI2RlZmluZSBHUENSMAkJR1BJT19SRUcoQkFOS19PRkYoMCkgKyAweDI0KQorI2RlZmluZSBHUENSMQkJR1BJT19SRUcoQkFOS19PRkYoMSkgKyAweDI0KQorI2RlZmluZSBHUENSMgkJR1BJT19SRUcoQkFOS19PRkYoMikgKyAweDI0KQorI2RlZmluZSBHUENSMwkJR1BJT19SRUcoQkFOS19PRkYoMykgKyAweDI0KQorCisvKiBHUElPIFJpc2luZyBFZGdlIERldGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1JFUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgzMCkKKyNkZWZpbmUgR1JFUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgzMCkKKyNkZWZpbmUgR1JFUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgzMCkKKyNkZWZpbmUgR1JFUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgzMCkKKworLyogR1BJTyBGYWxsaW5nIEVkZ2UgRGV0ZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBHRkVSMAkJR1BJT19SRUcoQkFOS19PRkYoMCkgKyAweDNjKQorI2RlZmluZSBHRkVSMQkJR1BJT19SRUcoQkFOS19PRkYoMSkgKyAweDNjKQorI2RlZmluZSBHRkVSMgkJR1BJT19SRUcoQkFOS19PRkYoMikgKyAweDNjKQorI2RlZmluZSBHRkVSMwkJR1BJT19SRUcoQkFOS19PRkYoMykgKyAweDNjKQorCisvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0VEUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHg0OCkKKyNkZWZpbmUgR0VEUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHg0OCkKKyNkZWZpbmUgR0VEUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHg0OCkKKyNkZWZpbmUgR0VEUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHg0OCkKKworLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBHQUZSMF9MCQlHUElPX1JFRygweDAwNTQpCisjZGVmaW5lIEdBRlIwX1UJCUdQSU9fUkVHKDB4MDA1OCkKKyNkZWZpbmUgR0FGUjFfTAkJR1BJT19SRUcoMHgwMDVDKQorI2RlZmluZSBHQUZSMV9VCQlHUElPX1JFRygweDAwNjApCisjZGVmaW5lIEdBRlIyX0wJCUdQSU9fUkVHKDB4MDA2NCkKKyNkZWZpbmUgR0FGUjJfVQkJR1BJT19SRUcoMHgwMDY4KQorI2RlZmluZSBHQUZSM19MCQlHUElPX1JFRygweDAwNkMpCisjZGVmaW5lIEdBRlIzX1UJCUdQSU9fUkVHKDB4MDA3MCkKKworLyogTW9yZSBoYW5keSBtYWNyb3MuICBUaGUgYXJndW1lbnQgaXMgYSBsaXRlcmFsIEdQSU8gbnVtYmVyLiAqLworCisjZGVmaW5lIEdQSU9fYml0KHgpCSgxIDw8ICgoeCkgJiAweDFmKSkKKworI2RlZmluZSBHUExSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDAwKQorI2RlZmluZSBHUERSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDBjKQorI2RlZmluZSBHUFNSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDE4KQorI2RlZmluZSBHUENSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDI0KQorI2RlZmluZSBHUkVSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDMwKQorI2RlZmluZSBHRkVSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDNjKQorI2RlZmluZSBHRURSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDQ4KQorI2RlZmluZSBHQUZSKHgpCQlHUElPX1JFRygweDU0ICsgKCgoeCkgJiAweDcwKSA+PiAyKSkKKworCiAjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyAxMjgKIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZ3BpbykgJiYgKGdwaW8gPCBOUl9CVUlMVElOX0dQSU8pKQotCQlyZXR1cm4gR1BMUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOwotCWVsc2UKLQkJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkgewotCQlpZiAodmFsdWUpCi0JCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci0JCWVsc2UKLQkJCUdQQ1IoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKLQl9IGVsc2UgewotCQlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLQl9Ci19Ci0KLSNkZWZpbmUgZ3Bpb19jYW5zbGVlcCBfX2dwaW9fY2Fuc2xlZXAKLQorI2RlZmluZSBncGlvX3RvX2JhbmsoZ3BpbykJKChncGlvKSA+PiA1KQogI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlJUlFfR1BJTyhncGlvKQogI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCUlSUV9UT19HUElPKGlycSkKIAorI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4CisvKiBHUElPODYvODcvODgvODkgb24gUFhBMjZ4IGhhdmUgdGhlaXIgZGlyZWN0aW9uIGJpdHMgaW4gR1BEUjIgaW52ZXJ0ZWQsCisgKiBhcyB3ZWxsIGFzIHRoZWlyIEFsdGVybmF0ZSBGdW5jdGlvbiB2YWx1ZSBiZWluZyAnMScgZm9yIEdQSU8gaW4gR0FGUnguCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZ3Bpb19pc19pbnZlcnRlZCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBjcHVfaXNfcHhhMjV4KCkgJiYgZ3BpbyA+IDg1OworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ3Bpb19pc19pbnZlcnRlZCh1bnNpZ25lZCBncGlvKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIAorLyoKKyAqIE9uIFBYQTI1eCBhbmQgUFhBMjd4LCBHQUZSeCBhbmQgR1BEUnggdG9nZXRoZXIgZGVjaWRlIHRoZSBhbHRlcm5hdGUKKyAqIGZ1bmN0aW9uIG9mIGEgR1BJTywgYW5kIEdQRFJ4IGNhbm5vdCBiZSBhbHRlcmVkIG9uY2UgY29uZmlndXJlZC4gSXQKKyAqIGlzIGF0dHJpYnV0ZWQgYXMgIm9jY3VwaWVkIiBoZXJlIChJIGtub3cgdGhpcyB0ZXJtaW5vbG9neSBpc24ndAorICogYWNjdXJhdGUsIHlvdSBhcmUgd2VsY29tZSB0byBwcm9wb3NlIGEgYmV0dGVyIG9uZSA6LSkKKyAqLworc3RhdGljIGlubGluZSBpbnQgX19ncGlvX2lzX29jY3VwaWVkKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKGNwdV9pc19weGEyN3goKSB8fCBjcHVfaXNfcHhhMjV4KCkpIHsKKwkJaW50IGFmID0gKEdBRlIoZ3BpbykgPj4gKChncGlvICYgMHhmKSAqIDIpKSAmIDB4MzsKKwkJaW50IGRpciA9IEdQRFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKKworCQlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQkJcmV0dXJuIGFmICE9IDEgfHwgZGlyID09IDA7CisJCWVsc2UKKwkJCXJldHVybiBhZiAhPSAwIHx8IGRpciAhPSAwOworCX0gZWxzZQorCQlyZXR1cm4gR1BEUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOworfQorCisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oCmluZGV4IDA5OWY1NGEuLjA2YWJkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaApAQCAtOTcsNCArOTcsNSBAQAogCiAvKiBmb3IgZXhwYW5zaW9uIGJvYXJkcyB0aGF0IGNhbid0IGJlIHByb2dyYW1hdGljYWxseSBkZXRlY3RlZCAqLwogZXh0ZXJuIGludCBhbTIwMF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBhbTMwMF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2x1YmJvY2suaAppbmRleCA0Y2IyNDE1Li43NTFiNzQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9sdWJib2NrLmgKQEAgLTI1LDcgKzI1LDYgQEAKIAogLyogRlBHQSByZWdpc3RlciB2aXJ0dWFsIGFkZHJlc3NlcyAqLwogI2RlZmluZSBMVUJfV0hPQU1JCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDAwMCkKLSNkZWZpbmUgTFVCX0hFWExFRAkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwMTApCiAjZGVmaW5lIExVQl9ESVNDX0JMTktfTEVECV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDQwKQogI2RlZmluZSBMVUJfQ09ORl9TV0lUQ0hFUwlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA1MCkKICNkZWZpbmUgTFVCX1VTRVJfU1dJVENIRVMJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwNjApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFnaWNpYW4uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCmluZGV4IDM4ZDY4ZDkuLjgyYTM5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9TRAkJKElSUV9CT0FSRF9TVEFSVCArIDApCiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9FUAkJKElSUV9CT0FSRF9TVEFSVCArIDEpCiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9CVAkJKElSUV9CT0FSRF9TVEFSVCArIDIpCi0jZGVmaW5lIElSUV9NQUdJQ0lBTl9BQwkJKElSUV9CT0FSRF9TVEFSVCArIDMpCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9WQlVTCShJUlFfQk9BUkRfU1RBUlQgKyAzKQogCiAvKgogICogQ1BMRCBFR1BJT3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oCmluZGV4IGE3Mjg2OWIuLmIxM2RjMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyNXguaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMjVYX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMjVYX0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKIC8qIEdQSU8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCmluZGV4IGRhNGY4NWEuLjY1NDNjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaApAQCAtOCw3ICs4LDYgQEAKICAqIHNwZWNpZmljIGNvbnRyb2xsZXIsIGFuZCB0aGlzIHNob3VsZCB3b3JrIGluIG1vc3QgY2FzZXMuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKIC8qIE5vdGU6IEdQSU8zL0dQSU80IHdpbGwgYmUgZHJpdmVuIGJ5IFBvd2VyIEkyQyB3aGVuIFBDRlIvUEkyQ19FTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyeHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMnh4LmgKaW5kZXggM2U5MjExNS4uNjU4YjI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyeHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTJ4eC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01GUF9QWEEyWFhfSAogI2RlZmluZSBfX0FTTV9BUkNIX01GUF9QWEEyWFhfSAogCi0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KKyNpbmNsdWRlIDxwbGF0L21mcC5oPgogCiAvKgogICogdGhlIGZvbGxvd2luZyBNRlBfeHh4IGJpdCBkZWZpbml0aW9ucyBpbiBtZnAuaCBhcmUgcmUtdXNlZCBmb3IgcHhhMnh4OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzAwLmgKaW5kZXggYmMxZmIzMy4uYWU4NDQxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMwMC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTMwMF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTMwMF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogCiAvKiBHUElPICovCkBAIC00MSw2ICs0MCw3IEBACiAjZW5kaWYKIAogLyogQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgR1BJTzFfbkNTMgkJTUZQX0NGRyhHUElPMSwJQUYxKQogI2RlZmluZSBHUElPMl9uQ1MzCQlNRlBfQ0ZHKEdQSU8yLCAgQUYxKQogCiAvKiBBQzk3ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMyMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMjAuaAppbmRleCA2N2Y4Mzg1Li4wNzg5N2U2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMyMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzIwLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMzIwX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMzIwX0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhM3h4Lmg+CiAKIC8qIEdQSU8gKi8KQEAgLTM4LDYgKzM3LDcgQEAKICNkZWZpbmUgR1BJTzE3XzJfR1BJTwkJTUZQX0NGRyhHUElPMTdfMiwgQUYwKQogCiAvKiBDaGlwIFNlbGVjdCAqLworI2RlZmluZSBHUElPM19uQ1MyCQlNRlBfQ0ZHKEdQSU8zLCBBRjEpCiAjZGVmaW5lIEdQSU80X25DUzMJCU1GUF9DRkcoR1BJTzQsIEFGMSkKIAogLyogQUM5NyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzeHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhM3h4LmgKaW5kZXggMWY2YjM1Yy4uZDM3NTE5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzeHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTN4eC5oCkBAIC0xLDY4ICsxLDkgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBM1hYX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBM1hYX0gKIAorI2luY2x1ZGUgPHBsYXQvbWZwLmg+CisKICNkZWZpbmUgTUZQUl9CQVNFCSgweDQwZTEwMDAwKQotI2RlZmluZSBNRlBSX1NJWkUJKFBBR0VfU0laRSkKLQotLyogTUZQUiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTUZQUl9QVUxMX1NFTAkJKDB4MSA8PCAxNSkKLSNkZWZpbmUgTUZQUl9QVUxMVVBfRU4JCSgweDEgPDwgMTQpCi0jZGVmaW5lIE1GUFJfUFVMTERPV05fRU4JKDB4MSA8PCAxMykKLSNkZWZpbmUgTUZQUl9TTEVFUF9TRUwJCSgweDEgPDwgOSkKLSNkZWZpbmUgTUZQUl9TTEVFUF9PRV9OCQkoMHgxIDw8IDcpCi0jZGVmaW5lIE1GUFJfRURHRV9DTEVBUgkJKDB4MSA8PCA2KQotI2RlZmluZSBNRlBSX0VER0VfRkFMTF9FTgkoMHgxIDw8IDUpCi0jZGVmaW5lIE1GUFJfRURHRV9SSVNFX0VOCSgweDEgPDwgNCkKLQotI2RlZmluZSBNRlBSX1NMRUVQX0RBVEEoeCkJKCh4KSA8PCA4KQotI2RlZmluZSBNRlBSX0RSSVZFKHgpCQkoKCh4KSAmIDB4NykgPDwgMTApCi0jZGVmaW5lIE1GUFJfQUZfU0VMKHgpCQkoKCh4KSAmIDB4NykgPDwgMCkKLQotI2RlZmluZSBNRlBSX0VER0VfTk9ORQkJKDApCi0jZGVmaW5lIE1GUFJfRURHRV9SSVNFCQkoTUZQUl9FREdFX1JJU0VfRU4pCi0jZGVmaW5lIE1GUFJfRURHRV9GQUxMCQkoTUZQUl9FREdFX0ZBTExfRU4pCi0jZGVmaW5lIE1GUFJfRURHRV9CT1RICQkoTUZQUl9FREdFX1JJU0UgfCBNRlBSX0VER0VfRkFMTCkKLQotLyoKLSAqIFRhYmxlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbG93IHBvd2VyIG1vZGVzIG91dHB1dHMsIHdpdGggYWN0dWFsIHNldHRpbmdzCi0gKiB1c2VkIGluIHBhcmVudGhlc2VzIGZvciBkb24ndC1jYXJlIHZhbHVlcy4gRXhjZXB0IGZvciB0aGUgZmxvYXQgb3V0cHV0LAotICogdGhlIGNvbmZpZ3VyZWQgZHJpdmVuIGFuZCBwdWxsZWQgbGV2ZWxzIG1hdGNoLCBzbyBpZiB0aGVyZSBpcyBhIG5lZWQgZm9yCi0gKiBub24tTFBNIHB1bGxlZCBvdXRwdXQsIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gY291bGQgcHJvYmFibHkgYmUgdXNlZC4KLSAqCi0gKiBPdXRwdXQgdmFsdWUgIHNsZWVwX29lX24gIHNsZWVwX2RhdGEgIHB1bGx1cF9lbiAgcHVsbGRvd25fZW4gIHB1bGxfc2VsCi0gKiAgICAgICAgICAgICAgICAgKGJpdCA3KSAgICAoYml0IDgpICAgIChiaXQgMTQpICAgICAoYml0IDEzKSAgIChiaXQgMTUpCi0gKgotICogSW5wdXQgICAgICAgICAgICAwICAgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgMAotICogRHJpdmUgMCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgIDAgICAgICAgICAgIFgoMSkgICAgICAgMAotICogRHJpdmUgMSAgICAgICAgICAwICAgICAgICAgIDEgICAgICAgICAgIFgoMSkgICAgICAgIDAJICAwCi0gKiBQdWxsIGhpICgxKSAgICAgIDEgICAgICAgICAgWCgxKSAgICAgICAgMSAgICAgICAgICAgMAkgIDAKLSAqIFB1bGwgbG8gKDApICAgICAgMSAgICAgICAgICBYKDApICAgICAgICAwICAgICAgICAgICAxCSAgMAotICogWiAoZmxvYXQpICAgICAgICAxICAgICAgICAgIFgoMCkgICAgICAgIDAgICAgICAgICAgIDAJICAwCi0gKi8KLSNkZWZpbmUgTUZQUl9MUE1fSU5QVVQJCSgwKQotI2RlZmluZSBNRlBSX0xQTV9EUklWRV9MT1cJKE1GUFJfU0xFRVBfREFUQSgwKSB8IE1GUFJfUFVMTERPV05fRU4pCi0jZGVmaW5lIE1GUFJfTFBNX0RSSVZFX0hJR0ggICAgCShNRlBSX1NMRUVQX0RBVEEoMSkgfCBNRlBSX1BVTExVUF9FTikKLSNkZWZpbmUgTUZQUl9MUE1fUFVMTF9MT1cgICAgICAJKE1GUFJfTFBNX0RSSVZFX0xPVyAgfCBNRlBSX1NMRUVQX09FX04pCi0jZGVmaW5lIE1GUFJfTFBNX1BVTExfSElHSCAgICAgCShNRlBSX0xQTV9EUklWRV9ISUdIIHwgTUZQUl9TTEVFUF9PRV9OKQotI2RlZmluZSBNRlBSX0xQTV9GTE9BVCAgICAgICAgIAkoTUZQUl9TTEVFUF9PRV9OKQotI2RlZmluZSBNRlBSX0xQTV9NQVNLCQkoMHhlMDgwKQotCi0vKgotICogVGhlIHB1bGx1cCBhbmQgcHVsbGRvd24gc3RhdGUgb2YgdGhlIE1GUCBwaW4gYXQgcnVuIG1vZGUgaXMgYnkgZGVmYXVsdAotICogZGV0ZXJtaW5lZCBieSB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRlIGZ1bmN0aW9uLiBJbiBjYXNlIHRoYXQgc29tZSBidWdneQotICogZGV2aWNlcyBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciwgIHRoZSBkZWZpbml0aW9ucyBiZWxvdwotICogaW5kaWNhdGVzIHRoZSBzZXR0aW5nIG9mIGNvcnJlc3BvbmRpbmcgTUZQUiBiaXRzCi0gKgotICogRGVmaW5pdGlvbiAgICAgICBwdWxsX3NlbCAgcHVsbHVwX2VuICBwdWxsZG93bl9lbgotICogTUZQUl9QVUxMX05PTkUgICAgICAgMCAgICAgICAgIDAgICAgICAgIDAKLSAqIE1GUFJfUFVMTF9MT1cgICAgICAgIDEgICAgICAgICAwICAgICAgICAxCi0gKiBNRlBSX1BVTExfSElHSCAgICAgICAxICAgICAgICAgMSAgICAgICAgMAotICogTUZQUl9QVUxMX0JPVEggICAgICAgMSAgICAgICAgIDEgICAgICAgIDEKLSAqLwotI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCi0jZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKLSNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCi0jZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQogCiAvKiBQWEEzeHggY29tbW9uIE1GUCBjb25maWd1cmF0aW9ucyAtIHByb2Nlc3NvciBzcGVjaWZpYyBvbmVzIGRlZmluZWQKICAqIGluIG1mcC1weGEzMDAuaCBhbmQgbWZwLXB4YTMyMC5oCkBAIC0xOTcsNTYgKzEzOCwyMSBAQAogI2RlZmluZSBHUElPNV8yX0dQSU8JCU1GUF9DRkcoR1BJTzVfMiwgQUYwKQogI2RlZmluZSBHUElPNl8yX0dQSU8JCU1GUF9DRkcoR1BJTzZfMiwgQUYwKQogCi0vKgotICogZWFjaCBNRlAgcGluIHdpbGwgaGF2ZSBhIE1GUFIgcmVnaXN0ZXIsIHNpbmNlIHRoZSBvZmZzZXQgb2YgdGhlCi0gKiByZWdpc3RlciB2YXJpZXMgYmV0d2VlbiBwcm9jZXNzb3JzLCB0aGUgcHJvY2Vzc29yIHNwZWNpZmljIGNvZGUKLSAqIHNob3VsZCBpbml0aWFsaXplIHRoZSBwaW4gb2Zmc2V0cyBieSBweGEzeHhfbWZwX2luaXRfYWRkcigpCi0gKgotICogcHhhM3h4X21mcF9pbml0X2FkZHIgLSBhY2NlcHRzIGEgdGFibGUgb2YgInB4YTN4eF9tZnBfYWRkcl9tYXAiCi0gKiBzdHJ1Y3R1cmUsIHdoaWNoIHJlcHJlc2VudHMgYSByYW5nZSBvZiBNRlAgcGlucyBmcm9tICJzdGFydCIgdG8KLSAqICJlbmQiLCB3aXRoIHRoZSBvZmZzZXQgYmVnaW5pbmcgYXQgIm9mZnNldCIsIHRvIGRlZmluZSBhIHNpbmdsZQotICogcGluLCBsZXQgImVuZCIgPSAtMQotICoKLSAqIHVzZQotICoKLSAqIE1GUF9BRERSX1goKSB0byBkZWZpbmUgYSByYW5nZSBvZiBwaW5zCi0gKiBNRlBfQUREUigpICAgdG8gZGVmaW5lIGEgc2luZ2xlIHBpbgotICogTUZQX0FERFJfRU5EIHRvIHNpZ25hbCB0aGUgZW5kIG9mIHBpbiBvZmZzZXQgZGVmaW5pdGlvbnMKKy8qIE5PVEU6IHVzYWdlIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgbm90IHJlY29tbWVuZGVkLAorICogdXNlIHB4YTN4eF9tZnBfY29uZmlnKCkgaW5zdGVhZC4KICAqLwotc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgewotCXVuc2lnbmVkIGludAlzdGFydDsKLQl1bnNpZ25lZCBpbnQJZW5kOwotCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OwotfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBweGEzeHhfbWZwX3JlYWQoaW50IG1mcCkKK3sKKwlyZXR1cm4gbWZwX3JlYWQobWZwKTsKK30KIAotI2RlZmluZSBNRlBfQUREUl9YKHN0YXJ0LCBlbmQsIG9mZnNldCkgXAotCXsgTUZQX1BJTl8jI3N0YXJ0LCBNRlBfUElOXyMjZW5kLCBvZmZzZXQgfQorc3RhdGljIGlubGluZSB2b2lkIHB4YTN4eF9tZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJbWZwX3dyaXRlKG1mcCwgdmFsKTsKK30KIAotI2RlZmluZSBNRlBfQUREUihwaW4sIG9mZnNldCkgXAotCXsgTUZQX1BJTl8jI3BpbiwgLTEsIG9mZnNldCB9Ci0KLSNkZWZpbmUgTUZQX0FERFJfRU5ECXsgTUZQX1BJTl9JTlZBTElELCAwIH0KLQotLyoKLSAqIHB4YTN4eF9tZnBfcmVhZCgpL3B4YTN4eF9tZnBfd3JpdGUoKSAtIGZvciBkaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MKLSAqIHRvIHRoZSBNRlBSIHJlZ2lzdGVyCi0gKi8KLXVuc2lnbmVkIGxvbmcgcHhhM3h4X21mcF9yZWFkKGludCBtZnApOwotdm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgbWZwcl92YWwpOwotCi0vKgotICogcHhhM3h4X21mcF9jb25maWcgLSBjb25maWd1cmUgdGhlIE1GUFIgcmVnaXN0ZXJzCi0gKgotICogdXNlZCBieSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlCi0gKi8KLXZvaWQgcHhhM3h4X21mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pOwotCi0vKgotICogcHhhM3h4X21mcF9pbml0X2FkZHIoKSAtIGluaXRpYWxpemUgdGhlIG1hcHBpbmcgYmV0d2VlbiBtZnAgcGluCi0gKiBpbmRleCBhbmQgTUZQUiByZWdpc3RlciBvZmZzZXQKLSAqCi0gKiB1c2VkIGJ5IHByb2Nlc3NvciBzcGVjaWZpYyBjb2RlCi0gKi8KLXZvaWQgX19pbml0IHB4YTN4eF9tZnBfaW5pdF9hZGRyKHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICopOwotdm9pZCBfX2luaXQgcHhhM3h4X2luaXRfbWZwKHZvaWQpOworc3RhdGljIGlubGluZSB2b2lkIHB4YTN4eF9tZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmcsIGludCBudW0pCit7CisJbWZwX2NvbmZpZyhtZnBfY2ZnLCBudW0pOworfQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUZQX1BYQTNYWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaAppbmRleCBmYTczZjU2Li4wZDExOWQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTMwLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBOXh4X0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBOXh4X0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhM3h4Lmg+CiAKIC8qIEdQSU8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCmluZGV4IGNmY2E4MTUuLjI5NzM4N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL210ZC14aXAuaApAQCAtMTUsOCArMTUsOCBAQAogI2lmbmRlZiBfX0FSQ0hfUFhBX01URF9YSVBfSF9fCiAjZGVmaW5lIF9fQVJDSF9QWEFfTVREX1hJUF9IX18KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW9zdC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pbnRjLmg+CiAKICNkZWZpbmUgeGlwX2lycXBlbmRpbmcoKQkoSUNJUCAmIElDTVIpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtbGQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzI5NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG1sZC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogR1BJT3MgYW5kIGludGVycnVwdHMgZm9yIFBhbG0gTGlmZURyaXZlIEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQXV0aG9yczoJQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICoJCU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfSU5DTFVERV9QQUxNTERfSF8KKyNkZWZpbmUgX0lOQ0xVREVfUEFMTUxEX0hfCisKKy8qKiBIRVJFIEFSRSBHUElPcyAqKi8KKworLyogR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfR1BJT19SRVNFVAkxCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVAk0CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0hPVFNZTkNfQlVUVE9OX04JMTAKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfUE9XRVJfU1dJVENICTEyCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0VBUlBIT05FX0RFVEVDVCAJMTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfTE9DS19TV0lUQ0gJMTUKKworLyogU0QvTU1DICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OCTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSCQkxMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkJMTE2CisKKy8qIFRPVUNIU0NSRUVOICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1dNOTcxMl9JUlEJMjcKKworLyogSVJEQSAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFCTEwOAorCisvKiBMQ0QvQkFDS0xJR0hUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSCQkxOQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIJOTYKKworLyogTENEIEJPUkRFUiAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CT1JERVJfU1dJVENICTIxCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0JPUkRFUl9TRUxFQ1QJMjIKKworLyogQkxVRVRPT1RIICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0JUX1BPV0VSCQkxNworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CVF9SRVNFVAkJODMKKworLyogUENNQ0lBIChXaUZpKSAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9QQ01DSUFfUkVBRFkJMzgKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfUENNQ0lBX1BPV0VSCTM2CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BDTUNJQV9SRVNFVAk4MQorCisvKiBMRURzICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0xFRF9HUkVFTgk1MgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9MRURfQU1CRVIJOTQKKworLyogSURFICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0lERV9JUlEJCTk1CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0lERV9SRVNFVAk5OAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9JREVfUFdFTgkJMTE1CisKKy8qIFVTQiAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04JMworI2RlZmluZSBHUElPX05SX1BBTE1MRF9VU0JfUkVBRFkJODYKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX1JFU0VUCTg4CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1VTQl9JTlQJCTEwNgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9VU0JfUE9XRVIJMTE4CisvKiAyMCwgNTMgYW5kIDg2IGFyZSB1c2IgcmVsYXRlZCB0b28gKi8KKworLyogSU5URVJSVVBUUyAqLworI2RlZmluZSBJUlFfR1BJT19QQUxNTERfR1BJT19SRVNFVAlJUlFfR1BJTyhHUElPX05SX1BBTE1MRF9HUElPX1JFU0VUKQorI2RlZmluZSBJUlFfR1BJT19QQUxNTERfU0RfREVURUNUX04JSVJRX0dQSU8oR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pCisjZGVmaW5lIElSUV9HUElPX1BBTE1MRF9XTTk3MTJfSVJRCUlSUV9HUElPKEdQSU9fTlJfUEFMTUxEX1dNOTcxMl9JUlEpCisjZGVmaW5lIElSUV9HUElPX1BBTE1MRF9JREVfSVJRCQlJUlFfR1BJTyhHUElPX05SX1BBTE1MRF9JREVfSVJRKQorCisKKy8qKiBIRVJFIEFSRSBJTklUIFZBTFVFUyAqKi8KKworLyogSU8gbWFwcGluZ3MgKi8KKyNkZWZpbmUgUEFMTUxEX1VTQl9QSFlTCQlQWEFfQ1MyX1BIWVMKKyNkZWZpbmUgUEFMTUxEX1VTQl9WSVJUCQkweGYwMDAwMDAwCisjZGVmaW5lIFBBTE1MRF9VU0JfU0laRQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIFBBTE1MRF9JREVfUEhZUwkJMHgyMDAwMDAwMAorI2RlZmluZSBQQUxNTERfSURFX1ZJUlQJCTB4ZjEwMDAwMDAKKyNkZWZpbmUgUEFMTUxEX0lERV9TSVpFCQkweDAwMTAwMDAwCisKKyNkZWZpbmUgUEFMTUxEX1BIWVNfSU9fU1RBUlQJMHg0MDAwMDAwMAorCisvKiBCQVRURVJZICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUFYX1ZPTFRBR0UJCTQwMDAJLyogNC4wMFYgbWF4aW11bSB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUlOX1ZPTFRBR0UJCTM1NTAJLyogMy41NVYgY3JpdGljYWwgdm9sdGFnZSAqLworI2RlZmluZSBQQUxNTERfQkFUX01BWF9DVVJSRU5UCQkwCS8qIHVua25va24gKi8KKyNkZWZpbmUgUEFMTUxEX0JBVF9NSU5fQ1VSUkVOVAkJMAkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUFYX0NIQVJHRQkJMQkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUlOX0NIQVJHRQkJMQkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1MRF9NQVhfTElGRV9NSU5TCQkyNDAJLyogb24tbGlmZSBpbiBtaW51dGVzICovCisKKyNkZWZpbmUgUEFMTUxEX0JBVF9NRUFTVVJFX0RFTEFZCShIWiAqIDEpCisKKy8qIEJBQ0tMSUdIVCAqLworI2RlZmluZSBQQUxNTERfTUFYX0lOVEVOU0lUWQkJMHhGRQorI2RlZmluZSBQQUxNTERfREVGQVVMVF9JTlRFTlNJVFkJMHg3RQorI2RlZmluZSBQQUxNTERfTElNSVRfTUFTSwkJMHg3RgorI2RlZmluZSBQQUxNTERfUFJFU0NBTEVSCQkweDNGCisjZGVmaW5lIFBBTE1MRF9QRVJJT0RfTlMJCTM1MDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkYjI4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdDUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogR1BJT3MgYW5kIGludGVycnVwdHMgZm9yIFBhbG0gVHVuZ3N0ZW58VDUgSGFuZGhlbGQgQ29tcHV0ZXIKKyAqCisgKiBBdXRob3JzOglBbGVzIFNudXBhcmVrIDxzbnVwYXJla0BhdGxhcy5jej4KKyAqCQlNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoJCUp1c3RpbiBLZW5kcmljayA8dHdpbGlnaHRzZW50cnlAZ21haWwuY29tPgorICoJCVJpY2hhcmRUNSA8cmljaGFyZF90NUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfSU5DTFVERV9QQUxNVDVfSF8KKyNkZWZpbmUgX0lOQ0xVREVfUEFMTVQ1X0hfCisKKy8qKiBIRVJFIEFSRSBHUElPcyAqKi8KKworLyogR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfR1BJT19SRVNFVAkJMQorCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVAkJOTAKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfSE9UU1lOQ19CVVRUT05fTgkJMTAKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfRUFSUEhPTkVfREVURUNUCQkxMDcKKworLyogU0QvTU1DICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OCQkxNAorI2RlZmluZSBHUElPX05SX1BBTE1UNV9TRF9QT1dFUgkJCTExNAorI2RlZmluZSBHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWQkJMTE1CisKKy8qIFRPVUNIU0NSRUVOICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1dNOTcxMl9JUlEJCTI3CisKKy8qIElSREEgLSBkaXNhYmxlIEdQSU8gY29ubmVjdGVkIHRvIFNEIHBpbiBvZiB0cmFuY2VpdmVyIChURkJTNDcxMD8pID8gKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRQkJNDAKKworLyogVVNCICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1VTQl9ERVRFQ1RfTgkJMTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSCQk5NQorI2RlZmluZSBHUElPX05SX1BBTE1UNV9VU0JfUFVMTFVQCQk5MworCisvKiBMQ0QvQkFDS0xJR0hUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSCQkJODQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSCQk5NgorCisvKiBCTFVFVE9PVEggKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfQlRfUE9XRVIJCQkxNworI2RlZmluZSBHUElPX05SX1BBTE1UNV9CVF9SRVNFVAkJCTgzCisKKy8qIElOVEVSUlVQVFMgKi8KKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X1NEX0RFVEVDVF9OCUlSUV9HUElPKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKQorI2RlZmluZSBJUlFfR1BJT19QQUxNVDVfV005NzEyX0lSUQlJUlFfR1BJTyhHUElPX05SX1BBTE1UNV9XTTk3MTJfSVJRKQorI2RlZmluZSBJUlFfR1BJT19QQUxNVDVfVVNCX0RFVEVDVAlJUlFfR1BJTyhHUElPX05SX1BBTE1UNV9VU0JfREVURUNUKQorI2RlZmluZSBJUlFfR1BJT19QQUxNVDVfR1BJT19SRVNFVAlJUlFfR1BJTyhHUElPX05SX1BBTE1UNV9HUElPX1JFU0VUKQorCisvKiogSEVSRSBBUkUgSU5JVCBWQUxVRVMgKiovCisKKy8qIFZhcmlvdXMgYWRkcmVzc2VzICAqLworI2RlZmluZSBQQUxNVDVfUEhZU19SQU1fU1RBUlQJMHhhMDAwMDAwMAorI2RlZmluZSBQQUxNVDVfUEhZU19JT19TVEFSVAkweDQwMDAwMDAwCisKKy8qIFRPVUNIU0NSRUVOICovCisjZGVmaW5lIEFDOTdfTElOS19GUkFNRQkJMjEKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNVDVfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDB2IGN1cnJlbnQgdm9sdGFnZSAqLworI2RlZmluZSBQQUxNVDVfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTV2IGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1UNV9CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVDVfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVDVfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVDVfTUFYX0xJRkVfTUlOUwkJMzYwICAgIC8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1UNV9CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTVQ1X01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTVQ1X0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTVQ1X0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTVQ1X1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNVDVfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaAppbmRleCA4MzM0MjQ2Li5hNmVlZWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaApAQCAtMjcsMyArMjcsMTMgQEAKIGV4dGVybiB2b2lkIHB4YV9jcHVfcmVzdW1lKHZvaWQpOwogCiBleHRlcm4gaW50IHB4YV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOworCisvKiBOT1RFOiB0aGlzIGlzIGZvciBQTSBkZWJ1Z2dpbmcgb24gTHViYm9jaywgIGl0J3MgcmVhbGx5IGEgYmlnCisgKiB1Z2x5LCBidXQgbGV0J3Mga2VlcCB0aGUgY3JhcCBtaW5pbXVtIGhlcmUsIGluc3RlYWQgb2YgZGlyZWN0CisgKiBhY2Nlc3NpbmcgdGhlIExVQkJPQ0sgQ1BMRCByZWdpc3RlcnMgaW4gYXJjaC9hcm0vbWFjaC1weGEvcG0uYworICovCisjaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSworZXh0ZXJuIHZvaWQgbHViYm9ja19zZXRfaGV4bGVkKHVpbnQzMl90IHZhbHVlKTsKKyNlbHNlCisjZGVmaW5lIGx1YmJvY2tfc2V0X2hleGxlZCh4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWQ2MTVhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YS1yZWdzLmgKLSAqCi0gKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCi0gKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCi0gKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19QWEFfUkVHU19ICi0jZGVmaW5lIF9fUFhBX1JFR1NfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKgotICogUFhBIENoaXAgc2VsZWN0cwotICovCi0KLSNkZWZpbmUgUFhBX0NTMF9QSFlTCTB4MDAwMDAwMDAKLSNkZWZpbmUgUFhBX0NTMV9QSFlTCTB4MDQwMDAwMDAKLSNkZWZpbmUgUFhBX0NTMl9QSFlTCTB4MDgwMDAwMDAKLSNkZWZpbmUgUFhBX0NTM19QSFlTCTB4MEMwMDAwMDAKLSNkZWZpbmUgUFhBX0NTNF9QSFlTCTB4MTAwMDAwMDAKLSNkZWZpbmUgUFhBX0NTNV9QSFlTCTB4MTQwMDAwMDAKLQotCi0vKgotICogUGVyc29uYWwgQ29tcHV0ZXIgTWVtb3J5IENhcmQgSW50ZXJuYXRpb25hbCBBc3NvY2lhdGlvbiAoUENNQ0lBKSBzb2NrZXRzCi0gKi8KLQotI2RlZmluZSBQQ01DSUFQcnRTcAkweDA0MDAwMDAwCS8qIFBDTUNJQSBQYXJ0aXRpb24gU3BhY2UgW2J5dGVdICAgKi8KLSNkZWZpbmUgUENNQ0lBU3AJKDQqUENNQ0lBUHJ0U3ApCS8qIFBDTUNJQSBTcGFjZSBbYnl0ZV0gICAgICAgICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBSU9TcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgSS9PIFNwYWNlIFtieXRlXSAgICAgICAgICovCi0jZGVmaW5lIFBDTUNJQUF0dHJTcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAgICovCi0jZGVmaW5lIFBDTUNJQU1lbVNwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBNZW1vcnkgU3BhY2UgW2J5dGVdICAgICAgKi8KLQotI2RlZmluZSBQQ01DSUEwU3AJUENNQ0lBU3AJLyogUENNQ0lBIDAgU3BhY2UgW2J5dGVdICAgICAgICAgICAqLwotI2RlZmluZSBQQ01DSUEwSU9TcAlQQ01DSUFJT1NwCS8qIFBDTUNJQSAwIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBMEF0dHJTcAlQQ01DSUFBdHRyU3AJLyogUENNQ0lBIDAgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAqLwotI2RlZmluZSBQQ01DSUEwTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDAgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLwotCi0jZGVmaW5lIFBDTUNJQTFTcAlQQ01DSUFTcAkvKiBQQ01DSUEgMSBTcGFjZSBbYnl0ZV0gICAgICAgICAgICovCi0jZGVmaW5lIFBDTUNJQTFJT1NwCVBDTUNJQUlPU3AJLyogUENNQ0lBIDEgSS9PIFNwYWNlIFtieXRlXSAgICAgICAqLwotI2RlZmluZSBQQ01DSUExQXR0clNwCVBDTUNJQUF0dHJTcAkvKiBQQ01DSUEgMSBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICovCi0jZGVmaW5lIFBDTUNJQTFNZW1TcAlQQ01DSUFNZW1TcAkvKiBQQ01DSUEgMSBNZW1vcnkgU3BhY2UgW2J5dGVdICAgICovCi0KLSNkZWZpbmUgX1BDTUNJQShOYikJICAgICAgICAJLyogUENNQ0lBIFswLi4xXSAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDIwMDAwMDAwICsgKE5iKSpQQ01DSUFTcCkKLSNkZWZpbmUgX1BDTUNJQUlPKE5iKQlfUENNQ0lBIChOYikJLyogUENNQ0lBIEkvTyBbMC4uMV0gICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENNQ0lBQXR0cihOYikJICAgICAgICAJLyogUENNQ0lBIEF0dHJpYnV0ZSBbMC4uMV0gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShfUENNQ0lBIChOYikgKyAyKlBDTUNJQVBydFNwKQotI2RlZmluZSBfUENNQ0lBTWVtKE5iKQkgICAgICAgIAkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKF9QQ01DSUEgKE5iKSArIDMqUENNQ0lBUHJ0U3ApCi0KLSNkZWZpbmUgX1BDTUNJQTAJX1BDTUNJQSAoMCkJLyogUENNQ0lBIDAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENNQ0lBMElPCV9QQ01DSUFJTyAoMCkJLyogUENNQ0lBIDAgSS9PICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENNQ0lBMEF0dHIJX1BDTUNJQUF0dHIgKDApCS8qIFBDTUNJQSAwIEF0dHJpYnV0ZSAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTBNZW0JX1BDTUNJQU1lbSAoMCkJLyogUENNQ0lBIDAgTWVtb3J5ICAgICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIF9QQ01DSUExCV9QQ01DSUEgKDEpCS8qIFBDTUNJQSAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTFJTwlfUENNQ0lBSU8gKDEpCS8qIFBDTUNJQSAxIEkvTyAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTFBdHRyCV9QQ01DSUFBdHRyICgxKQkvKiBQQ01DSUEgMSBBdHRyaWJ1dGUgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUExTWVtCV9QQ01DSUFNZW0gKDEpCS8qIFBDTUNJQSAxIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KLQotCi0KLS8qCi0gKiBETUEgQ29udHJvbGxlcgotICovCi0jZGVmaW5lIERDU1IoeCkJCV9fUkVHMigweDQwMDAwMDAwLCAoeCkgPDwgMikKLQotI2RlZmluZSBEQ1NSX1JVTgkoMSA8PCAzMSkJLyogUnVuIEJpdCAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEQ1NSX05PREVTQwkoMSA8PCAzMCkJLyogTm8tRGVzY3JpcHRvciBGZXRjaCAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEQ1NSX1NUT1BJUlFFTgkoMSA8PCAyOSkJLyogU3RvcCBJbnRlcnJ1cHQgRW5hYmxlIChyZWFkIC8gd3JpdGUpICovCi0jZGVmaW5lIERDU1JfUkVRUEVORAkoMSA8PCA4KQkvKiBSZXF1ZXN0IFBlbmRpbmcgKHJlYWQtb25seSkgKi8KLSNkZWZpbmUgRENTUl9TVE9QU1RBVEUJKDEgPDwgMykJLyogU3RvcCBTdGF0ZSAocmVhZC1vbmx5KSAqLwotI2RlZmluZSBEQ1NSX0VORElOVFIJKDEgPDwgMikJLyogRW5kIEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEQ1NSX1NUQVJUSU5UUgkoMSA8PCAxKQkvKiBTdGFydCBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9CVVNFUlIJKDEgPDwgMCkJLyogQnVzIEVycm9yIEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCi0jZGVmaW5lIERDU1JfRU9SSVJRRU4JKDEgPDwgMjgpICAgICAgIC8qIEVuZCBvZiBSZWNlaXZlIEludGVycnVwdCBFbmFibGUgKFIvVykgKi8KLSNkZWZpbmUgRENTUl9FT1JKTVBFTgkoMSA8PCAyNykgICAgICAgLyogSnVtcCB0byBuZXh0IGRlc2NyaXB0b3Igb24gRU9SICovCi0jZGVmaW5lIERDU1JfRU9SU1RPUEVOCSgxIDw8IDI2KSAgICAgICAvKiBTVE9QIG9uIGFuIEVPUiAqLwotI2RlZmluZSBEQ1NSX1NFVENNUFNUCSgxIDw8IDI1KSAgICAgICAvKiBTZXQgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZSBEQ1NSX0NMUkNNUFNUCSgxIDw8IDI0KSAgICAgICAvKiBDbGVhciBEZXNjcmlwdG9yIENvbXBhcmUgU3RhdHVzICovCi0jZGVmaW5lIERDU1JfQ01QU1QJKDEgPDwgMTApICAgICAgIC8qIFRoZSBEZXNjcmlwdG9yIENvbXBhcmUgU3RhdHVzICovCi0jZGVmaW5lIERDU1JfRU9SSU5UUgkoMSA8PCA5KSAgICAgICAgLyogVGhlIGVuZCBvZiBSZWNlaXZlICovCi0jZW5kaWYKLQotI2RlZmluZSBEQUxHTgkJX19SRUcoMHg0MDAwMDBhMCkgIC8qIERNQSBBbGlnbm1lbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRElOVAkJX19SRUcoMHg0MDAwMDBmMCkgIC8qIERNQSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBEUkNNUihuKQkoKigoKG4pIDwgNjQpID8gXAotCQkJJl9fUkVHMigweDQwMDAwMTAwLCAoKG4pICYgMHgzZikgPDwgMikgOiBcCi0JCQkmX19SRUcyKDB4NDAwMDExMDAsICgobikgJiAweDNmKSA8PCAyKSkpCi0KLSNkZWZpbmUgRFJDTVJfTUFQVkxECSgxIDw8IDcpCS8qIE1hcCBWYWxpZCAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEUkNNUl9DSExOVU0JMHgxZgkJLyogbWFzayBmb3IgQ2hhbm5lbCBOdW1iZXIgKHJlYWQgLyB3cml0ZSkgKi8KLQotI2RlZmluZSBEREFEUih4KQlfX1JFRzIoMHg0MDAwMDIwMCwgKHgpIDw8IDQpCi0jZGVmaW5lIERTQURSKHgpCV9fUkVHMigweDQwMDAwMjA0LCAoeCkgPDwgNCkKLSNkZWZpbmUgRFRBRFIoeCkJX19SRUcyKDB4NDAwMDAyMDgsICh4KSA8PCA0KQotI2RlZmluZSBEQ01EKHgpCQlfX1JFRzIoMHg0MDAwMDIwYywgKHgpIDw8IDQpCi0KLSNkZWZpbmUgRERBRFJfREVTQ0FERFIJMHhmZmZmZmZmMAkvKiBBZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvciAobWFzaykgKi8KLSNkZWZpbmUgRERBRFJfU1RPUAkoMSA8PCAwKQkvKiBTdG9wIChyZWFkIC8gd3JpdGUpICovCi0KLSNkZWZpbmUgRENNRF9JTkNTUkNBRERSCSgxIDw8IDMxKQkvKiBTb3VyY2UgQWRkcmVzcyBJbmNyZW1lbnQgU2V0dGluZy4gKi8KLSNkZWZpbmUgRENNRF9JTkNUUkdBRERSCSgxIDw8IDMwKQkvKiBUYXJnZXQgQWRkcmVzcyBJbmNyZW1lbnQgU2V0dGluZy4gKi8KLSNkZWZpbmUgRENNRF9GTE9XU1JDCSgxIDw8IDI5KQkvKiBGbG93IENvbnRyb2wgYnkgdGhlIHNvdXJjZS4gKi8KLSNkZWZpbmUgRENNRF9GTE9XVFJHCSgxIDw8IDI4KQkvKiBGbG93IENvbnRyb2wgYnkgdGhlIHRhcmdldC4gKi8KLSNkZWZpbmUgRENNRF9TVEFSVElSUUVOCSgxIDw8IDIyKQkvKiBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIERDTURfRU5ESVJRRU4JKDEgPDwgMjEpCS8qIEVuZCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIERDTURfRU5ESUFOCSgxIDw8IDE4KQkvKiBEZXZpY2UgRW5kaWFuLW5lc3MuICovCi0jZGVmaW5lIERDTURfQlVSU1Q4CSgxIDw8IDE2KQkvKiA4IGJ5dGUgYnVyc3QgKi8KLSNkZWZpbmUgRENNRF9CVVJTVDE2CSgyIDw8IDE2KQkvKiAxNiBieXRlIGJ1cnN0ICovCi0jZGVmaW5lIERDTURfQlVSU1QzMgkoMyA8PCAxNikJLyogMzIgYnl0ZSBidXJzdCAqLwotI2RlZmluZSBEQ01EX1dJRFRIMQkoMSA8PCAxNCkJLyogMSBieXRlIHdpZHRoICovCi0jZGVmaW5lIERDTURfV0lEVEgyCSgyIDw8IDE0KQkvKiAyIGJ5dGUgd2lkdGggKEhhbGZXb3JkKSAqLwotI2RlZmluZSBEQ01EX1dJRFRINAkoMyA8PCAxNCkJLyogNCBieXRlIHdpZHRoIChXb3JkKSAqLwotI2RlZmluZSBEQ01EX0xFTkdUSAkweDAxZmZmCQkvKiBsZW5ndGggbWFzayAobWF4ID0gOEsgLSAxKSAqLwotCi0vKgotICogUmVhbCBUaW1lIENsb2NrCi0gKi8KLQotI2RlZmluZSBSQ05SCQlfX1JFRygweDQwOTAwMDAwKSAgLyogUlRDIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lIFJUQVIJCV9fUkVHKDB4NDA5MDAwMDQpICAvKiBSVEMgQWxhcm0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlRTUgkJX19SRUcoMHg0MDkwMDAwOCkgIC8qIFJUQyBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlRUUgkJX19SRUcoMHg0MDkwMDAwQykgIC8qIFJUQyBUaW1lciBUcmltIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBJQVIJCV9fUkVHKDB4NDA5MDAwMzgpICAvKiBQZXJpb2RpYyBJbnRlcnJ1cHQgQWxhcm0gUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBSVFNSX1BJQ0UJKDEgPDwgMTUpCS8qIFBlcmlvZGljIGludGVycnVwdCBjb3VudCBlbmFibGUgKi8KLSNkZWZpbmUgUlRTUl9QSUFMRQkoMSA8PCAxNCkJLyogUGVyaW9kaWMgaW50ZXJydXB0IEFsYXJtIGVuYWJsZSAqLwotI2RlZmluZSBSVFNSX0haRQkoMSA8PCAzKQkvKiBIWiBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIFJUU1JfQUxFCSgxIDw8IDIpCS8qIFJUQyBhbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIFJUU1JfSFoJCSgxIDw8IDEpCS8qIEhaIHJpc2luZy1lZGdlIGRldGVjdGVkICovCi0jZGVmaW5lIFJUU1JfQUwJCSgxIDw8IDApCS8qIFJUQyBhbGFybSBkZXRlY3RlZCAqLwotCi0KLS8qCi0gKiBPUyBUaW1lciAmIE1hdGNoIFJlZ2lzdGVycwotICovCi0KLSNkZWZpbmUgT1NNUjAJCV9fUkVHKDB4NDBBMDAwMDApICAvKiAqLwotI2RlZmluZSBPU01SMQkJX19SRUcoMHg0MEEwMDAwNCkgIC8qICovCi0jZGVmaW5lIE9TTVIyCQlfX1JFRygweDQwQTAwMDA4KSAgLyogKi8KLSNkZWZpbmUgT1NNUjMJCV9fUkVHKDB4NDBBMDAwMEMpICAvKiAqLwotI2RlZmluZSBPU01SNAkJX19SRUcoMHg0MEEwMDA4MCkgIC8qICovCi0jZGVmaW5lIE9TQ1IJCV9fUkVHKDB4NDBBMDAwMTApICAvKiBPUyBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIE9TQ1I0CQlfX1JFRygweDQwQTAwMDQwKSAgLyogT1MgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBPTUNSNAkJX19SRUcoMHg0MEEwMDBDMCkgIC8qICovCi0jZGVmaW5lIE9TU1IJCV9fUkVHKDB4NDBBMDAwMTQpICAvKiBPUyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT1dFUgkJX19SRUcoMHg0MEEwMDAxOCkgIC8qIE9TIFRpbWVyIFdhdGNoZG9nIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBPSUVSCQlfX1JFRygweDQwQTAwMDFDKSAgLyogT1MgVGltZXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotCi0jZGVmaW5lIE9TU1JfTTMJCSgxIDw8IDMpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDMgKi8KLSNkZWZpbmUgT1NTUl9NMgkJKDEgPDwgMikJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMiAqLwotI2RlZmluZSBPU1NSX00xCQkoMSA8PCAxKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAxICovCi0jZGVmaW5lIE9TU1JfTTAJCSgxIDw8IDApCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDAgKi8KLQotI2RlZmluZSBPV0VSX1dNRQkoMSA8PCAwKQkvKiBXYXRjaGRvZyBNYXRjaCBFbmFibGUgKi8KLQotI2RlZmluZSBPSUVSX0UzCQkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMyAqLwotI2RlZmluZSBPSUVSX0UyCQkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMiAqLwotI2RlZmluZSBPSUVSX0UxCQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMSAqLwotI2RlZmluZSBPSUVSX0UwCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMCAqLwotCi0KLS8qCi0gKiBJbnRlcnJ1cHQgQ29udHJvbGxlcgotICovCi0KLSNkZWZpbmUgSUNJUAkJX19SRUcoMHg0MEQwMDAwMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDTVIJCV9fUkVHKDB4NDBEMDAwMDQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDTFIJCV9fUkVHKDB4NDBEMDAwMDgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAqLwotI2RlZmluZSBJQ0ZQCQlfX1JFRygweDQwRDAwMDBDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNQUgkJX19SRUcoMHg0MEQwMDAxMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNDUgkJX19SRUcoMHg0MEQwMDAxNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBJQ0lQMgkJX19SRUcoMHg0MEQwMDA5QykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgSUNNUjIJCV9fUkVHKDB4NDBEMDAwQTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgSUNMUjIJCV9fUkVHKDB4NDBEMDAwQTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDRlAyCQlfX1JFRygweDQwRDAwMEE4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBJQ1BSMgkJX19SRUcoMHg0MEQwMDBBQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLwotCi0vKgotICogR2VuZXJhbCBQdXJwb3NlIEkvTwotICovCi0KLSNkZWZpbmUgR1BMUjAJCV9fUkVHKDB4NDBFMDAwMDApICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdQTFIxCQlfX1JFRygweDQwRTAwMDA0KSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR1BMUjIJCV9fUkVHKDB4NDBFMDAwMDgpICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdQRFIwCQlfX1JFRygweDQwRTAwMDBDKSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR1BEUjEJCV9fUkVHKDB4NDBFMDAwMTApICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR1BEUjIJCV9fUkVHKDB4NDBFMDAwMTQpICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHUFNSMAkJX19SRUcoMHg0MEUwMDAxOCkgIC8qIEdQSU8gUGluIE91dHB1dCBTZXQgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUFNSMQkJX19SRUcoMHg0MEUwMDAxQykgIC8qIEdQSU8gUGluIE91dHB1dCBTZXQgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR1BTUjIJCV9fUkVHKDB4NDBFMDAwMjApICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR1BDUjAJCV9fUkVHKDB4NDBFMDAwMjQpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUENSMQkJX19SRUcoMHg0MEUwMDAyOCkgIC8qIEdQSU8gUGluIE91dHB1dCBDbGVhciBSZWdpc3RlciBHUElPIDw2MzozMj4gKi8KLSNkZWZpbmUgR1BDUjIJCV9fUkVHKDB4NDBFMDAwMkMpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTyA8ODA6NjQ+ICovCi0KLSNkZWZpbmUgR1JFUjAJCV9fUkVHKDB4NDBFMDAwMzApICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdSRVIxCQlfX1JFRygweDQwRTAwMDM0KSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR1JFUjIJCV9fUkVHKDB4NDBFMDAwMzgpICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdGRVIwCQlfX1JFRygweDQwRTAwMDNDKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR0ZFUjEJCV9fUkVHKDB4NDBFMDAwNDApICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR0ZFUjIJCV9fUkVHKDB4NDBFMDAwNDQpICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHRURSMAkJX19SRUcoMHg0MEUwMDA0OCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR0VEUjEJCV9fUkVHKDB4NDBFMDAwNEMpICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDYzOjMyPiAqLwotI2RlZmluZSBHRURSMgkJX19SRUcoMHg0MEUwMDA1MCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR0FGUjBfTAkJX19SRUcoMHg0MEUwMDA1NCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDE1OjA+ICovCi0jZGVmaW5lIEdBRlIwX1UJCV9fUkVHKDB4NDBFMDAwNTgpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzwzMToxNj4gKi8KLSNkZWZpbmUgR0FGUjFfTAkJX19SRUcoMHg0MEUwMDA1QykgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDQ3OjMyPiAqLwotI2RlZmluZSBHQUZSMV9VCQlfX1JFRygweDQwRTAwMDYwKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88NjM6NDg+ICovCi0jZGVmaW5lIEdBRlIyX0wJCV9fUkVHKDB4NDBFMDAwNjQpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw3OTo2ND4gKi8KLSNkZWZpbmUgR0FGUjJfVQkJX19SRUcoMHg0MEUwMDA2OCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDk1LTgwPiAqLwotI2RlZmluZSBHQUZSM19MCQlfX1JFRygweDQwRTAwMDZDKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MTExOjk2PiAqLwotI2RlZmluZSBHQUZSM19VCQlfX1JFRygweDQwRTAwMDcwKSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MTI3OjExMj4gKi8KLQotI2RlZmluZSBHUExSMwkJX19SRUcoMHg0MEUwMDEwMCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotI2RlZmluZSBHUERSMwkJX19SRUcoMHg0MEUwMDEwQykgIC8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1BTUjMJCV9fUkVHKDB4NDBFMDAxMTgpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotI2RlZmluZSBHUENSMwkJX19SRUcoMHg0MEUwMDEyNCkgIC8qIEdQSU8gUGluIE91dHB1dCBDbGVhciBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1JFUjMJCV9fUkVHKDB4NDBFMDAxMzApICAvKiBHUElPIFJpc2luZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR0ZFUjMJCV9fUkVHKDB4NDBFMDAxM0MpICAvKiBHUElPIEZhbGxpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdFRFIzCQlfX1JFRygweDQwRTAwMTQ4KSAgLyogR1BJTyBFZGdlIERldGVjdCBTdGF0dXMgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0KLS8qIE1vcmUgaGFuZHkgbWFjcm9zLiAgVGhlIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbCBHUElPIG51bWJlci4gKi8KLQotI2RlZmluZSBHUElPX2JpdCh4KQkoMSA8PCAoKHgpICYgMHgxZikpCi0KLSNkZWZpbmUgX0dQTFIoeCkJX19SRUcyKDB4NDBFMDAwMDAsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR1BEUih4KQlfX1JFRzIoMHg0MEUwMDAwQywgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HUFNSKHgpCV9fUkVHMigweDQwRTAwMDE4LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dQQ1IoeCkJX19SRUcyKDB4NDBFMDAwMjQsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR1JFUih4KQlfX1JFRzIoMHg0MEUwMDAzMCwgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HRkVSKHgpCV9fUkVHMigweDQwRTAwMDNDLCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dFRFIoeCkJX19SRUcyKDB4NDBFMDAwNDgsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR0FGUih4KQlfX1JFRzIoMHg0MEUwMDA1NCwgKCh4KSAmIDB4NzApID4+IDIpCi0KLSNkZWZpbmUgR1BMUih4KSAJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1BMUih4KSA6ICZHUExSMykpCi0jZGVmaW5lIEdQRFIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQRFIoeCkgOiAmR1BEUjMpKQotI2RlZmluZSBHUFNSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUFNSKHgpIDogJkdQU1IzKSkKLSNkZWZpbmUgR1BDUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1BDUih4KSA6ICZHUENSMykpCi0jZGVmaW5lIEdSRVIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dSRVIoeCkgOiAmR1JFUjMpKQotI2RlZmluZSBHRkVSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HRkVSKHgpIDogJkdGRVIzKSkKLSNkZWZpbmUgR0VEUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR0VEUih4KSA6ICZHRURSMykpCi0jZGVmaW5lIEdBRlIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dBRlIoeCkgOiBcCi0JCQkgKCgoKHgpICYgMHg3ZikgPCAxMTIpID8gJkdBRlIzX0wgOiAmR0FGUjNfVSkpKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhjM2JhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI1eC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX01BQ0hfUFhBMjV4X0gKKyNkZWZpbmUgX19NQUNIX1BYQTI1eF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorCisjZW5kaWYgLyogX19NQUNIX1BYQTI1eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NmUxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3guaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fTUFDSF9QWEEyN3hfSAorI2RlZmluZSBfX01BQ0hfUFhBMjd4X0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisKKyNkZWZpbmUgQVJCX0NOVFJMCV9fUkVHKDB4NDgwMDAwNDgpICAvKiBBcmJpdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBBUkJfRE1BX1NMVl9QQVJLCSgxPDwzMSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHNsYXZlIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfQ0lfUEFSSwkJKDE8PDMwKQkgICAvKiBCZSBwYXJrZWQgd2l0aCBDYW1lcmEgSW50ZXJmYWNlIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfRVhfTUVNX1BBUksgCSgxPDwyOSkJICAgLyogQmUgcGFya2VkIHdpdGggZXh0ZXJuYWwgTUVNQyB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0lOVF9NRU1fUEFSSwkoMTw8MjgpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGludGVybmFsIE1FTUMgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9VU0JfUEFSSwkJKDE8PDI3KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBVU0Igd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9MQ0RfUEFSSwkJKDE8PDI2KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBMQ0Qgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9ETUFfUEFSSwkJKDE8PDI1KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBETUEgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9DT1JFX1BBUksJCSgxPDwyNCkJICAgLyogQmUgcGFya2VkIHdpdGggY29yZSB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0xPQ0tfRkxBRwkJKDE8PDIzKQkgICAvKiBPbmx5IExvY2tpbmcgbWFzdGVycyBnYWluIGFjY2VzcyB0byB0aGUgYnVzICovCisjZW5kaWYgLyogX19NQUNIX1BYQTI3eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtZ3Bpby5oCmluZGV4IGQ4MzM5M2UuLjEyMDljNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtZ3Bpby5oCkBAIC0zLDYgKzMsOCBAQAogCiAjd2FybmluZyBQbGVhc2UgdXNlIG1mcC1weGEyWzU3XXguaCBpbnN0ZWFkIG9mIHB4YTJ4eC1ncGlvLmgKIAorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCiAvKiBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbiBhc3NpZ25tZW50cyAqLwogCiAjZGVmaW5lIEdQSU8xX1JTVAkJMQkvKiByZXNldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaAppbmRleCA3NzEwMmQ2Li40ZmNkZGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaApAQCAtMTQsNiArMTQsMTkgQEAKICNpZm5kZWYgX19QWEEyWFhfUkVHU19ICiAjZGVmaW5lIF9fUFhBMlhYX1JFR1NfSAogCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKgorICogUFhBIENoaXAgc2VsZWN0cworICovCisKKyNkZWZpbmUgUFhBX0NTMF9QSFlTCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFhBX0NTMV9QSFlTCTB4MDQwMDAwMDAKKyNkZWZpbmUgUFhBX0NTMl9QSFlTCTB4MDgwMDAwMDAKKyNkZWZpbmUgUFhBX0NTM19QSFlTCTB4MEMwMDAwMDAKKyNkZWZpbmUgUFhBX0NTNF9QSFlTCTB4MTAwMDAwMDAKKyNkZWZpbmUgUFhBX0NTNV9QSFlTCTB4MTQwMDAwMDAKKwogLyoKICAqIE1lbW9yeSBjb250cm9sbGVyCiAgKi8KQEAgLTY5LDI0ICs4Miw2IEBACiAjZGVmaW5lIE1EUkVGUl9LMFJVTgkoMSA8PCAxMykJLyogU0RDTEswIFJ1biBDb250cm9sL1N0YXR1cyAqLwogI2RlZmluZSBNRFJFRlJfRTBQSU4JKDEgPDwgMTIpCS8qIFNEQ0tFMCBMZXZlbCBDb250cm9sL1N0YXR1cyAqLwogCi0KLSNpZmRlZiBDT05GSUdfUFhBMjd4Ci0KLSNkZWZpbmUgQVJCX0NOVFJMCV9fUkVHKDB4NDgwMDAwNDgpICAvKiBBcmJpdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBBUkJfRE1BX1NMVl9QQVJLCSgxPDwzMSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHNsYXZlIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfQ0lfUEFSSwkJKDE8PDMwKQkgICAvKiBCZSBwYXJrZWQgd2l0aCBDYW1lcmEgSW50ZXJmYWNlIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfRVhfTUVNX1BBUksgCSgxPDwyOSkJICAgLyogQmUgcGFya2VkIHdpdGggZXh0ZXJuYWwgTUVNQyB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0lOVF9NRU1fUEFSSwkoMTw8MjgpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGludGVybmFsIE1FTUMgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9VU0JfUEFSSwkJKDE8PDI3KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBVU0Igd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9MQ0RfUEFSSwkJKDE8PDI2KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBMQ0Qgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9ETUFfUEFSSwkJKDE8PDI1KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBETUEgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9DT1JFX1BBUksJCSgxPDwyNCkJICAgLyogQmUgcGFya2VkIHdpdGggY29yZSB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0xPQ0tfRkxBRwkJKDE8PDIzKQkgICAvKiBPbmx5IExvY2tpbmcgbWFzdGVycyBnYWluIGFjY2VzcyB0byB0aGUgYnVzICovCi0KLSNlbmRpZgotCi0KIC8qCiAgKiBQb3dlciBNYW5hZ2VyCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzMDAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMzMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTMwMC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX01BQ0hfUFhBMzAwX0gKKyNkZWZpbmUgX19NQUNIX1BYQTMwMF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorCisjZW5kaWYgLyogX19NQUNIX1BYQTMwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzIwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNzhlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzMjAuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19NQUNIX1BYQTMyMF9ICisjZGVmaW5lIF9fTUFDSF9QWEEzMjBfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEEzMjBfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCmluZGV4IGJjZjNmYjIuLjdkMWEwNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCkBAIC0xMyw2ICsxMywxNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1BYQTNYWF9SRUdTX0gKICNkZWZpbmUgX19BU01fQVJDSF9QWEEzWFhfUkVHU19ICiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBTdGF0aWMgQ2hpcCBTZWxlY3RzCisgKi8KKworI2RlZmluZSBQWEEzMDBfQ1MwX1BIWVMJCSgweDAwMDAwMDAwKQkvKiBQWEEzMDAvUFhBMzEwIF9vbmx5XyAqLworI2RlZmluZSBQWEEzMDBfQ1MxX1BIWVMJCSgweDMwMDAwMDAwKQkvKiBQWEEzMDAvUFhBMzEwIF9vbmx5XyAqLworI2RlZmluZSBQWEEzeHhfQ1MyX1BIWVMJCSgweDEwMDAwMDAwKQorI2RlZmluZSBQWEEzeHhfQ1MzX1BIWVMJCSgweDE0MDAwMDAwKQorCiAvKgogICogT3NjaWxsYXRvciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChPU0NDKQogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhOTMwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhOTMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1Zjc2YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGE5MzAuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19NQUNIX1BYQTkzMF9ICisjZGVmaW5lIF9fTUFDSF9QWEE5MzBfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGE5MzAuaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEE5MzBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjNlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1JFR1NfSU5UQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfUkVHU19JTlRDX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIEludGVycnVwdCBDb250cm9sbGVyCisgKi8KKworI2RlZmluZSBJQ0lQCQlfX1JFRygweDQwRDAwMDAwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNNUgkJX19SRUcoMHg0MEQwMDAwNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNMUgkJX19SRUcoMHg0MEQwMDAwOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIExldmVsIFJlZ2lzdGVyICovCisjZGVmaW5lIElDRlAJCV9fUkVHKDB4NDBEMDAwMEMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAqLworI2RlZmluZSBJQ1BSCQlfX1JFRygweDQwRDAwMDEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAqLworI2RlZmluZSBJQ0NSCQlfX1JFRygweDQwRDAwMDE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAqLworCisjZGVmaW5lIElDSVAyCQlfX1JFRygweDQwRDAwMDlDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ01SMgkJX19SRUcoMHg0MEQwMDBBMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ0xSMgkJX19SRUcoMHg0MEQwMDBBNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIExldmVsIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNGUDIJCV9fUkVHKDB4NDBEMDAwQTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAyICovCisjZGVmaW5lIElDUFIyCQlfX1JFRygweDQwRDAwMEFDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAyICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfSU5UQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1vc3QuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLW9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTVmODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1vc3QuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19PU1RfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfT1NUX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIE9TIFRpbWVyICYgTWF0Y2ggUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBPU01SMAkJX19SRUcoMHg0MEEwMDAwMCkgIC8qICovCisjZGVmaW5lIE9TTVIxCQlfX1JFRygweDQwQTAwMDA0KSAgLyogKi8KKyNkZWZpbmUgT1NNUjIJCV9fUkVHKDB4NDBBMDAwMDgpICAvKiAqLworI2RlZmluZSBPU01SMwkJX19SRUcoMHg0MEEwMDAwQykgIC8qICovCisjZGVmaW5lIE9TTVI0CQlfX1JFRygweDQwQTAwMDgwKSAgLyogKi8KKyNkZWZpbmUgT1NDUgkJX19SRUcoMHg0MEEwMDAxMCkgIC8qIE9TIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1NDUjQJCV9fUkVHKDB4NDBBMDAwNDApICAvKiBPUyBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9NQ1I0CQlfX1JFRygweDQwQTAwMEMwKSAgLyogKi8KKyNkZWZpbmUgT1NTUgkJX19SRUcoMHg0MEEwMDAxNCkgIC8qIE9TIFRpbWVyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBPV0VSCQlfX1JFRygweDQwQTAwMDE4KSAgLyogT1MgVGltZXIgV2F0Y2hkb2cgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIE9JRVIJCV9fUkVHKDB4NDBBMDAwMUMpICAvKiBPUyBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgT1NTUl9NMwkJKDEgPDwgMykJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMyAqLworI2RlZmluZSBPU1NSX00yCQkoMSA8PCAyKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAyICovCisjZGVmaW5lIE9TU1JfTTEJCSgxIDw8IDEpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDEgKi8KKyNkZWZpbmUgT1NTUl9NMAkJKDEgPDwgMCkJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMCAqLworCisjZGVmaW5lIE9XRVJfV01FCSgxIDw8IDApCS8qIFdhdGNoZG9nIE1hdGNoIEVuYWJsZSAqLworCisjZGVmaW5lIE9JRVJfRTMJCSgxIDw8IDMpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAzICovCisjZGVmaW5lIE9JRVJfRTIJCSgxIDw8IDIpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAyICovCisjZGVmaW5lIE9JRVJfRTEJCSgxIDw8IDEpCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAxICovCisjZGVmaW5lIE9JRVJfRTAJCSgxIDw8IDApCS8qIEludGVycnVwdCBlbmFibGUgY2hhbm5lbCAwICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXJ0Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlNGE1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXJ0Yy5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9SRUdTX1JUQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfUkVHU19SVENfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKgorICogUmVhbCBUaW1lIENsb2NrCisgKi8KKworI2RlZmluZSBSQ05SCQlfX1JFRygweDQwOTAwMDAwKSAgLyogUlRDIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQVIJCV9fUkVHKDB4NDA5MDAwMDQpICAvKiBSVEMgQWxhcm0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRTUgkJX19SRUcoMHg0MDkwMDAwOCkgIC8qIFJUQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRUUgkJX19SRUcoMHg0MDkwMDAwQykgIC8qIFJUQyBUaW1lciBUcmltIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJQVIJCV9fUkVHKDB4NDA5MDAwMzgpICAvKiBQZXJpb2RpYyBJbnRlcnJ1cHQgQWxhcm0gUmVnaXN0ZXIgKi8KKworI2RlZmluZSBSVFNSX1BJQ0UJKDEgPDwgMTUpCS8qIFBlcmlvZGljIGludGVycnVwdCBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgUlRTUl9QSUFMRQkoMSA8PCAxNCkJLyogUGVyaW9kaWMgaW50ZXJydXB0IEFsYXJtIGVuYWJsZSAqLworI2RlZmluZSBSVFNSX0haRQkoMSA8PCAzKQkvKiBIWiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUU1JfQUxFCSgxIDw8IDIpCS8qIFJUQyBhbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUU1JfSFoJCSgxIDw8IDEpCS8qIEhaIHJpc2luZy1lZGdlIGRldGVjdGVkICovCisjZGVmaW5lIFJUU1JfQUwJCSgxIDw8IDApCS8qIFJUQyBhbGFybSBkZXRlY3RlZCAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX1JUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCmluZGV4IDAxOGY2ZDYuLjZhMmVkMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCkBAIC0zNyw3ICszNyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KQogI2RlZmluZSBTU0NSMF9TQ1IJKDB4MDAwMGZmMDApCS8qIFNlcmlhbCBDbG9jayBSYXRlIChtYXNrKSAqLwogI2RlZmluZSBTU0NSMF9TZXJDbGtEaXYoeCkgKCgoKHgpIC0gMikvMikgPDwgOCkgLyogRGl2aXNvciBbMi4uNTEyXSAqLwotCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX1BYQTN4eCkKICNkZWZpbmUgU1NDUjBfU0NSCSgweDAwMGZmZjAwKQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2VyQ2xrRGl2KHgpICgoKHgpIC0gMSkgPDwgOCkgLyogRGl2aXNvciBbMS4uNDA5Nl0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAwZjM4MWU2Li5kMWZjZThiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKICNpbmNsdWRlICJweGEyeHgtcmVncy5oIgotI2luY2x1ZGUgInB4YS1yZWdzLmgiCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKQEAgLTIxLDQgKzIwLDQgQEAKIH0KIAogCi12b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKTsKK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBmNGIwMjljLi41NzA2Y2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTM1LDcgKzM1LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCiB7Ci0JaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkpCisJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkKKwkJCXx8IG1hY2hpbmVfaXNfY3NiNzI2KCkpCiAJCVVBUlQgPSBTVFVBUlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKaW5kZXggZmE2OWMzYS4uZjZlMDMwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTIwLDcgKzIwLDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaW50Yy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC01MSw2ICs1Miw3MiBAQAogCS51bm1hc2sJCT0gcHhhX3VubWFza19pcnEsCiB9OwogCisvKgorICogR1BJTyBJUlFzIGZvciBHUElPIDAgYW5kIDEKKyAqLworc3RhdGljIGludCBweGFfc2V0X2xvd19ncGlvX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTzA7CisKKwlpZiAoX19ncGlvX2lzX29jY3VwaWVkKGdwaW8pKSB7CisJCXByX2VycigiJXMgZmFpbGVkOiBHUElPIGlzIGNvbmZpZ3VyZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJR1JFUjAgfD0gR1BJT19iaXQoZ3Bpbyk7CisJZWxzZQorCQlHUkVSMCAmPSB+R1BJT19iaXQoZ3Bpbyk7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJR0ZFUjAgfD0gR1BJT19iaXQoZ3Bpbyk7CisJZWxzZQorCQlHRkVSMCAmPSB+R1BJT19iaXQoZ3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhX2Fja19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCUdFRFIwID0gKDEgPDwgKGlycSAtIElSUV9HUElPMCkpOworfQorCitzdGF0aWMgdm9pZCBweGFfbWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIgJj0gfigxIDw8IChpcnEgLSBQWEFfSVJRKDApKSk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SIHw9IDEgPDwgKGlycSAtIFBYQV9JUlEoMCkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0geworCS5uYW1lCQk9ICJHUElPLWwiLAorCS5hY2sJCT0gcHhhX2Fja19sb3dfZ3BpbywKKwkubWFzawkJPSBweGFfbWFza19sb3dfZ3BpbywKKwkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2dwaW8sCisJLnNldF90eXBlCT0gcHhhX3NldF9sb3dfZ3Bpb190eXBlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHB4YV9pbml0X2xvd19ncGlvX2lycShzZXRfd2FrZV90IGZuKQoreworCWludCBpcnE7CisKKwkvKiBjbGVhciBlZGdlIGRldGVjdGlvbiBvbiBHUElPIDAgYW5kIDEgKi8KKwlHRkVSMCAmPSB+MHgzOworCUdSRVIwICY9IH4weDM7CisJR0VEUjAgPSAweDM7CisKKwlmb3IgKGlycSA9IElSUV9HUElPMDsgaXJxIDw9IElSUV9HUElPMTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnB4YV9sb3dfZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KKworCXB4YV9sb3dfZ3Bpb19jaGlwLnNldF93YWtlID0gZm47Cit9CisKIHZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKQogewogCWludCBpcnE7CkBAIC03Miw2ICsxMzksNyBAQAogCX0KIAogCXB4YV9pbnRlcm5hbF9pcnFfY2hpcC5zZXRfd2FrZSA9IGZuOworCXB4YV9pbml0X2xvd19ncGlvX2lycShmbik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jCmluZGV4IDE4YjIwZDQuLjhiOWMxNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pZHAuaD4KIAogI2luY2x1ZGUgImxlZHMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKaW5kZXggMWEyNTgwMi4uZTI2ZDVlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9sdWJib2NrLmg+CiAKICNpbmNsdWRlICJsZWRzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYwppbmRleCA5NWUwNmI4Li5kYjRhZjVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvbWFpbnN0b25lLmg+CiAKICNpbmNsdWRlICJsZWRzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCmluZGV4IDMxZGE3ZjMuLmUxM2Y2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCkBAIC0zOSw4ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggZGUzZjY3ZC4uZDY0Mzk1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTM4LDkgKzM4LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbHBkMjcwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCBiZmY3MDQzLi5mMDRjODMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC00MSwxNSArNDEsMTUgQEAKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sdWJib2NrLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTExMyw4ICsxMTMsMTQgQEAKIAlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwKIH07CiAKKyNkZWZpbmUgTFVCX0hFWExFRAkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwMTApCiAjZGVmaW5lIExVQl9NSVNDX1dSCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA4MCkKIAordm9pZCBsdWJib2NrX3NldF9oZXhsZWQodWludDMyX3QgdmFsdWUpCit7CisJTFVCX0hFWExFRCA9IHZhbHVlOworfQorCiB2b2lkIGx1YmJvY2tfc2V0X21pc2Nfd3IodW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IDIxYjgyMWUuLmQ0NmIzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtMjUsMTQgKzI1LDE0IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL21hZ2ljaWFuLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgpAQCAtNjYsNiArNjYsMTEgQEAKIAlHUElPMzFfSTJTX1NZTkMsCiAJR1BJTzExM19JMlNfU1lTQ0xLLAogCisJLyogU1NQIDEgKi8KKwlHUElPMjNfU1NQMV9TQ0xLLAorCUdQSU8yNF9TU1AxX1NGUk0sCisJR1BJTzI1X1NTUDFfVFhELAorCiAJLyogU1NQIDIgKi8KIAlHUElPMTlfU1NQMl9TQ0xLLAogCUdQSU8xNF9TU1AyX1NGUk0sCkBAIC0xNDgsMjIgKzE1MywzMSBAQAogICogR1BJTyBLZXlzCiAgKi8KIAorI2RlZmluZSBJTklUX0tFWShfY29kZSwgX2dwaW8sIF9kZXNjKQlcCisJewkJCQlcCisJCS5jb2RlICAgPSBLRVlfIyNfY29kZSwJXAorCQkuZ3BpbyAgID0gX2dwaW8sCVwKKwkJLmRlc2MgICA9IF9kZXNjLAlcCisJCS50eXBlICAgPSBFVl9LRVksCVwKKwkJLndha2V1cCA9IDEsCQlcCisJfQorCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbWFnaWNpYW5fYnV0dG9uX3RhYmxlW10gPSB7Ci0Je0tFWV9QT1dFUiwgICAgICBHUElPMF9NQUdJQ0lBTl9LRVlfUE9XRVIsICAgICAgMCwgIlBvd2VyIGJ1dHRvbiJ9LAotCXtLRVlfRVNDLCAgICAgICAgR1BJTzM3X01BR0lDSUFOX0tFWV9IQU5HVVAsICAgIDAsICJIYW5ndXAgYnV0dG9uIn0sCi0Je0tFWV9GMTAsICAgICAgICBHUElPMzhfTUFHSUNJQU5fS0VZX0NPTlRBQ1RTLCAgMCwgIkNvbnRhY3RzIGJ1dHRvbiJ9LAotCXtLRVlfQ0FMRU5EQVIsICAgR1BJTzkwX01BR0lDSUFOX0tFWV9DQUxFTkRBUiwgIDAsICJDYWxlbmRhciBidXR0b24ifSwKLQl7S0VZX0NBTUVSQSwgICAgIEdQSU85MV9NQUdJQ0lBTl9LRVlfQ0FNRVJBLCAgICAwLCAiQ2FtZXJhIGJ1dHRvbiJ9LAotCXtLRVlfVVAsICAgICAgICAgR1BJTzkzX01BR0lDSUFOX0tFWV9VUCwgICAgICAgIDAsICJVcCBidXR0b24ifSwKLQl7S0VZX0RPV04sICAgICAgIEdQSU85NF9NQUdJQ0lBTl9LRVlfRE9XTiwgICAgICAwLCAiRG93biBidXR0b24ifSwKLQl7S0VZX0xFRlQsICAgICAgIEdQSU85NV9NQUdJQ0lBTl9LRVlfTEVGVCwgICAgICAwLCAiTGVmdCBidXR0b24ifSwKLQl7S0VZX1JJR0hULCAgICAgIEdQSU85Nl9NQUdJQ0lBTl9LRVlfUklHSFQsICAgICAwLCAiUmlnaHQgYnV0dG9uIn0sCi0Je0tFWV9LUEVOVEVSLCAgICBHUElPOTdfTUFHSUNJQU5fS0VZX0VOVEVSLCAgICAgMCwgIkFjdGlvbiBidXR0b24ifSwKLQl7S0VZX1JFQ09SRCwgICAgIEdQSU85OF9NQUdJQ0lBTl9LRVlfUkVDT1JELCAgICAwLCAiUmVjb3JkIGJ1dHRvbiJ9LAotCXtLRVlfVk9MVU1FVVAsICAgR1BJTzEwMF9NQUdJQ0lBTl9LRVlfVk9MX1VQLCAgIDAsICJWb2x1bWUgdXAifSwKLQl7S0VZX1ZPTFVNRURPV04sIEdQSU8xMDFfTUFHSUNJQU5fS0VZX1ZPTF9ET1dOLCAwLCAiVm9sdW1lIGRvd24ifSwKLQl7S0VZX1BIT05FLCAgICAgIEdQSU8xMDJfTUFHSUNJQU5fS0VZX1BIT05FLCAgICAwLCAiUGhvbmUgYnV0dG9uIn0sCi0Je0tFWV9QTEFZLCAgICAgICBHUElPOTlfTUFHSUNJQU5fSEVBRFBIT05FX0lOLCAgMCwgIkhlYWRzZXQgYnV0dG9uIn0sCisJSU5JVF9LRVkoUE9XRVIsICAgICAgR1BJTzBfTUFHSUNJQU5fS0VZX1BPV0VSLCAgICAgICJQb3dlciBidXR0b24iKSwKKwlJTklUX0tFWShFU0MsICAgICAgICBHUElPMzdfTUFHSUNJQU5fS0VZX0hBTkdVUCwgICAgIkhhbmd1cCBidXR0b24iKSwKKwlJTklUX0tFWShGMTAsICAgICAgICBHUElPMzhfTUFHSUNJQU5fS0VZX0NPTlRBQ1RTLCAgIkNvbnRhY3RzIGJ1dHRvbiIpLAorCUlOSVRfS0VZKENBTEVOREFSLCAgIEdQSU85MF9NQUdJQ0lBTl9LRVlfQ0FMRU5EQVIsICAiQ2FsZW5kYXIgYnV0dG9uIiksCisJSU5JVF9LRVkoQ0FNRVJBLCAgICAgR1BJTzkxX01BR0lDSUFOX0tFWV9DQU1FUkEsICAgICJDYW1lcmEgYnV0dG9uIiksCisJSU5JVF9LRVkoVVAsICAgICAgICAgR1BJTzkzX01BR0lDSUFOX0tFWV9VUCwgICAgICAgICJVcCBidXR0b24iKSwKKwlJTklUX0tFWShET1dOLCAgICAgICBHUElPOTRfTUFHSUNJQU5fS0VZX0RPV04sICAgICAgIkRvd24gYnV0dG9uIiksCisJSU5JVF9LRVkoTEVGVCwgICAgICAgR1BJTzk1X01BR0lDSUFOX0tFWV9MRUZULCAgICAgICJMZWZ0IGJ1dHRvbiIpLAorCUlOSVRfS0VZKFJJR0hULCAgICAgIEdQSU85Nl9NQUdJQ0lBTl9LRVlfUklHSFQsICAgICAiUmlnaHQgYnV0dG9uIiksCisJSU5JVF9LRVkoS1BFTlRFUiwgICAgR1BJTzk3X01BR0lDSUFOX0tFWV9FTlRFUiwgICAgICJBY3Rpb24gYnV0dG9uIiksCisJSU5JVF9LRVkoUkVDT1JELCAgICAgR1BJTzk4X01BR0lDSUFOX0tFWV9SRUNPUkQsICAgICJSZWNvcmQgYnV0dG9uIiksCisJSU5JVF9LRVkoVk9MVU1FVVAsICAgR1BJTzEwMF9NQUdJQ0lBTl9LRVlfVk9MX1VQLCAgICJWb2x1bWUgdXAiKSwKKwlJTklUX0tFWShWT0xVTUVET1dOLCBHUElPMTAxX01BR0lDSUFOX0tFWV9WT0xfRE9XTiwgIlZvbHVtZSBkb3duIiksCisJSU5JVF9LRVkoUEhPTkUsICAgICAgR1BJTzEwMl9NQUdJQ0lBTl9LRVlfUEhPTkUsICAgICJQaG9uZSBidXR0b24iKSwKKwlJTklUX0tFWShQTEFZLCAgICAgICBHUElPOTlfTUFHSUNJQU5fSEVBRFBIT05FX0lOLCAgIkhlYWRzZXQgYnV0dG9uIiksCiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGdwaW9fa2V5c19kYXRhID0gewpAQCAtMTg5LDcgKzIwMyw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVncGlvX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ID0gUFhBX0NTM19QSFlTLAotCQkuZW5kICAgPSBQWEFfQ1MzX1BIWVMgKyAweDIwLAorCQkuZW5kICAgPSBQWEFfQ1MzX1BIWVMgKyAweDIwIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC00MjAsNyArNDM0LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUgPSAibWFnaWNpYW46OnBob25lX2JsIiwKLQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJub25lIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJiYWNrbGlnaHQiLAogCQkuZ3BpbyA9IEdQSU8xMDNfTUFHSUNJQU5fTEVEX0tQLAogCX0sCiB9OwpAQCAtNDY4LDggKzQ4Miw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhc2ljMzsKLQogc3RhdGljIHN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbyBwYXNpYzNfbGVkc19pbmZvID0gewogCS5udW1fbGVkcyAgID0gQVJSQVlfU0laRShwYXNpYzNfbGVkcyksCiAJLnBvd2VyX2dwaW8gPSBFR1BJT19NQUdJQ0lBTl9MRURfUE9XRVIsCkBAIC01MTEsNiArNTIzLDMxIEBACiB9OwogCiAvKgorICogVVNCICJUcmFuc2NlaXZlciIKKyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdwaW9fdmJ1c19yZXNvdXJjZSA9IHsKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fVkJVUywKKwkuZW5kICAgPSBJUlFfTUFHSUNJQU5fVkJVUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyBncGlvX3ZidXNfaW5mbyA9IHsKKwkuZ3Bpb19wdWxsdXAgPSBHUElPMjdfTUFHSUNJQU5fVVNCQ19QVUVOLAorCS5ncGlvX3ZidXMgICA9IEVHUElPX01BR0lDSUFOX0NBQkxFX1NUQVRFX1VTQiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdwaW9fdmJ1cyA9IHsKKwkubmFtZSAgICAgICAgICA9ICJncGlvLXZidXMiLAorCS5pZCAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSAgICAgID0gJmdwaW9fdmJ1c19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZncGlvX3ZidXNfaW5mbywKKwl9LAorfTsKKworLyoKICAqIEV4dGVybmFsIHBvd2VyCiAgKi8KIApAQCAtNTg2LDE1ICs2MjMsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfc3VwcGx5X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUgID0gImFjIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9BQywKLQkJLmVuZCAgID0gSVJRX01BR0lDSUFOX0FDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwKKwkJICAgICAgICAgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJLnN0YXJ0ID0gSVJRX01BR0lDSUFOX1ZCVVMsCisJCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9WQlVTLAogCX0sCiAJWzFdID0gewogCQkubmFtZSAgPSAidXNiIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9BQywKLQkJLmVuZCAgID0gSVJRX01BR0lDSUFOX0FDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwKKwkJICAgICAgICAgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJLnN0YXJ0ID0gSVJRX01BR0lDSUFOX1ZCVVMsCisJCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9WQlVTLAogCX0sCiB9OwogCkBAIC02ODgsMTEgKzcyNyw5IEBACiAJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fRkxBU0hfVlBQLCB2cHApOwogfQogCi0jZGVmaW5lIFBYQV9DU19TSVpFCQkweDA0MDAwMDAwCi0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RyYXRhZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0ID0gUFhBX0NTMF9QSFlTLAotCS5lbmQgICA9IFBYQV9DUzBfUEhZUyArIFBYQV9DU19TSVpFIC0gMSwKKwkuZW5kICAgPSBQWEFfQ1MwX1BIWVMgKyBTWl82NE0gLSAxLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtNzIwLDYgKzc1Nyw3IEBACiAJJmVncGlvLAogCSZiYWNrbGlnaHQsCiAJJnBhc2ljMywKKwkmZ3Bpb192YnVzLAogCSZwb3dlcl9zdXBwbHksCiAJJnN0cmF0YWZsYXNoLAogCSZsZWRzX2dwaW8sCkBAIC03NDMsNiArNzgxLDcgQEAKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU84M19NQUdJQ0lBTl9uSVJfRU4sIDEpOwogCQlweGFfc2V0X2ZpY3BfaW5mbygmbWFnaWNpYW5fZmljcF9pbmZvKTsKIAl9CisJcHhhMjd4X3NldF9pMmNfcG93ZXJfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwogCXB4YV9zZXRfbWNpX2luZm8oJm1hZ2ljaWFuX21jaV9pbmZvKTsKIAlweGFfc2V0X29oY2lfaW5mbygmbWFnaWNpYW5fb2hjaV9pbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggNWYyMjQ5Ni4uYTZjODQyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTQxLDkgKzQxLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbWFpbnN0b25lLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwppbmRleCAzMzYyNmRlLi43ZmZiOTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCkBAIC0xOCwxNSArMTgsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEyeHguaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotI2RlZmluZSBncGlvX3RvX2JhbmsoZ3BpbykJKChncGlvKSA+PiA1KQotCiAjZGVmaW5lIFBHU1IoeCkJCV9fUkVHMigweDQwRjAwMDIwLCAoeCkgPDwgMikKICNkZWZpbmUgX19HQUZSKHUsIHgpCV9fUkVHMigodSkgPyAweDQwRTAwMDU4IDogMHg0MEUwMDA1NCwgKHgpIDw8IDMpCiAjZGVmaW5lIEdBRlJfTCh4KQlfX0dBRlIoMCwgeCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYwppbmRleCBlYjE5N2E2Li43YTI3MGVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCkBAIC0yMCwxODMgKzIwLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KIAotLyogbWZwX3NwaW5fbG9jayBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IE1GUCByZWdpc3RlciBjb25maWd1cmF0aW9uCi0gKiAobW9zdCBsaWtlbHkgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24pIGlzIGF0b21pYywgYW5kIHRoYXQKLSAqIG1mcF90YWJsZVtdIGlzIGNvbnNpc3RlbnQKLSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhtZnBfc3Bpbl9sb2NrKTsKLQotc3RhdGljIHZvaWQgX19pb21lbSAqbWZwcl9tbWlvX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopJl9fUkVHKE1GUFJfQkFTRSk7Ci0KLXN0cnVjdCBweGEzeHhfbWZwX3BpbiB7Ci0JdW5zaWduZWQgbG9uZwljb25maWc7CQkvKiAtMSBmb3Igbm90IGNvbmZpZ3VyZWQgKi8KLQl1bnNpZ25lZCBsb25nCW1mcHJfb2ZmOwkvKiBNRlBSeHggUmVnaXN0ZXIgb2Zmc2V0ICovCi0JdW5zaWduZWQgbG9uZwltZnByX3J1bjsJLyogUnVuLU1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KLQl1bnNpZ25lZCBsb25nCW1mcHJfbHBtOwkvKiBMb3cgUG93ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX3BpbiBtZnBfdGFibGVbTUZQX1BJTl9NQVhdOwotCi0vKiBtYXBwaW5nIG9mIE1GUF9MUE1fKiBkZWZpbml0aW9ucyB0byBNRlBSX0xQTV8qIHJlZ2lzdGVyIGJpdHMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfbHBtW10gPSB7Ci0JTUZQUl9MUE1fSU5QVVQsCi0JTUZQUl9MUE1fRFJJVkVfTE9XLAotCU1GUFJfTFBNX0RSSVZFX0hJR0gsCi0JTUZQUl9MUE1fUFVMTF9MT1csCi0JTUZQUl9MUE1fUFVMTF9ISUdILAotCU1GUFJfTFBNX0ZMT0FULAotfTsKLQotLyogbWFwcGluZyBvZiBNRlBfUFVMTF8qIGRlZmluaXRpb25zIHRvIE1GUFJfUFVMTF8qIHJlZ2lzdGVyIGJpdHMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfcHVsbFtdID0gewotCU1GUFJfUFVMTF9OT05FLAotCU1GUFJfUFVMTF9MT1csCi0JTUZQUl9QVUxMX0hJR0gsCi0JTUZQUl9QVUxMX0JPVEgsCi19OwotCi0vKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfZWRnZVtdID0gewotCU1GUFJfRURHRV9OT05FLAotCU1GUFJfRURHRV9SSVNFLAotCU1GUFJfRURHRV9GQUxMLAotCU1GUFJfRURHRV9CT1RILAotfTsKLQotI2RlZmluZSBtZnByX3JlYWRsKG9mZikJCQlcCi0JX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKLQotI2RlZmluZSBtZnByX3dyaXRlbChvZmYsIHZhbCkJCVwKLQlfX3Jhd193cml0ZWwodmFsLCBtZnByX21taW9fYmFzZSArIChvZmYpKQotCi0jZGVmaW5lIG1mcF9jb25maWd1cmVkKHApCSgocCktPmNvbmZpZyAhPSAtMSkKLQotLyoKLSAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQotICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCi0gKi8KLSNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX3J1bihzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnApCi17Ci0JaWYgKG1mcF9jb25maWd1cmVkKHApKQotCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgcC0+bWZwcl9ydW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX2xwbShzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnApCi17Ci0JaWYgKG1mcF9jb25maWd1cmVkKHApKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWZwcl9jbHIgPSAocC0+bWZwcl9ydW4gJiB+TUZQUl9FREdFX0JPVEgpIHwgTUZQUl9FREdFX0NMRUFSOwotCQlpZiAobWZwcl9jbHIgIT0gcC0+bWZwcl9ydW4pCi0JCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgbWZwcl9jbHIpOwotCQlpZiAocC0+bWZwcl9scG0gIT0gbWZwcl9jbHIpCi0JCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgcC0+bWZwcl9scG0pOwotCX0KLX0KLQotdm9pZCBweGEzeHhfbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZncywgaW50IG51bSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgbWZwX2NmZ3MrKykgewotCQl1bnNpZ25lZCBsb25nIHRtcCwgYyA9ICptZnBfY2ZnczsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwOwotCQlpbnQgcGluLCBhZiwgZHJ2LCBscG0sIGVkZ2UsIHB1bGw7Ci0KLQkJcGluID0gTUZQX1BJTihjKTsKLQkJQlVHX09OKHBpbiA+PSBNRlBfUElOX01BWCk7Ci0JCXAgPSAmbWZwX3RhYmxlW3Bpbl07Ci0KLQkJYWYgID0gTUZQX0FGKGMpOwotCQlkcnYgPSBNRlBfRFMoYyk7Ci0JCWxwbSA9IE1GUF9MUE1fU1RBVEUoYyk7Ci0JCWVkZ2UgPSBNRlBfTFBNX0VER0UoYyk7Ci0JCXB1bGwgPSBNRlBfUFVMTChjKTsKLQotCQkvKiBydW4tbW9kZSBwdWxsIHNldHRpbmdzIHdpbGwgY29uZmxpY3Qgd2l0aCBNRlBSIGJpdHMgb2YKLQkJICogbG93IHBvd2VyIG1vZGUgc3RhdGUsICBjYWxjdWxhdGUgbWZwcl9ydW4gYW5kIG1mcHJfbHBtCi0JCSAqIGluZGl2aWR1YWxseSBpZiBwdWxsICE9IE1GUF9QVUxMX05PTkUKLQkJICovCi0JCXRtcCA9IE1GUFJfQUZfU0VMKGFmKSB8IE1GUFJfRFJJVkUoZHJ2KTsKLQotCQlpZiAobGlrZWx5KHB1bGwgPT0gTUZQX1BVTExfTk9ORSkpIHsKLQkJCXAtPm1mcHJfcnVuID0gdG1wIHwgbWZwcl9scG1bbHBtXSB8IG1mcHJfZWRnZVtlZGdlXTsKLQkJCXAtPm1mcHJfbHBtID0gcC0+bWZwcl9ydW47Ci0JCX0gZWxzZSB7Ci0JCQlwLT5tZnByX2xwbSA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07Ci0JCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfcHVsbFtwdWxsXTsKLQkJfQotCi0JCXAtPmNvbmZpZyA9IGM7IF9fbWZwX2NvbmZpZ19ydW4ocCk7Ci0JfQotCi0JbWZwcl9zeW5jKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi11bnNpZ25lZCBsb25nIHB4YTN4eF9tZnBfcmVhZChpbnQgbWZwKQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKLQotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi12b2lkIHB4YTN4eF9tZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKLQltZnByX3N5bmMoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgX19pbml0IHB4YTN4eF9tZnBfaW5pdF9hZGRyKHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICptYXApCi17Ci0Jc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgKnA7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQsIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQotCWZvciAocCA9IG1hcDsgcC0+c3RhcnQgIT0gTUZQX1BJTl9JTlZBTElEOyBwKyspIHsKLQkJb2Zmc2V0ID0gcC0+b2Zmc2V0OwotCQlpID0gcC0+c3RhcnQ7Ci0KLQkJZG8gewotCQkJbWZwX3RhYmxlW2ldLm1mcHJfb2ZmID0gb2Zmc2V0OwotCQkJbWZwX3RhYmxlW2ldLm1mcHJfcnVuID0gMDsKLQkJCW1mcF90YWJsZVtpXS5tZnByX2xwbSA9IDA7Ci0JCQlvZmZzZXQgKz0gNDsgaSsrOwotCQl9IHdoaWxlICgoaSA8PSBwLT5lbmQpICYmIChwLT5lbmQgIT0gLTEpKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgX19pbml0IHB4YTN4eF9pbml0X21mcCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgaSsrKQotCQltZnBfdGFibGVbaV0uY29uZmlnID0gLTE7Ci19Ci0KICNpZmRlZiBDT05GSUdfUE0KIC8qCiAgKiBDb25maWd1cmUgdGhlIE1GUHMgYXBwcm9wcmlhdGVseSBmb3Igc3VzcGVuZC9yZXN1bWUuCkBAIC0yMDcsMjMgKzMzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgcHhhM3h4X21mcF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JaW50IHBpbjsKLQotCWZvciAocGluID0gMDsgcGluIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBwaW4rKykgewotCQlzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnAgPSAmbWZwX3RhYmxlW3Bpbl07Ci0JCV9fbWZwX2NvbmZpZ19scG0ocCk7Ci0JfQorCW1mcF9jb25maWdfbHBtKCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHhhM3h4X21mcF9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmQpCiB7Ci0JaW50IHBpbjsKLQotCWZvciAocGluID0gMDsgcGluIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBwaW4rKykgewotCQlzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnAgPSAmbWZwX3RhYmxlW3Bpbl07Ci0JCV9fbWZwX2NvbmZpZ19ydW4ocCk7Ci0JfQorCW1mcF9jb25maWdfcnVuKCk7CiAKIAkvKiBjbGVhciBSREggYml0IHdoZW4gTUZQIHNldHRpbmdzIGFyZSByZXN0b3JlZAogCSAqCkBAIC0yMzEsNyArNDcsNiBAQAogCSAqIHByZXNlcnZlIHRoZW0gaGVyZSBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZWZlcmVuY2VkIGxhdGVyCiAJICovCiAJQVNDUiAmPSB+KEFTQ1JfUkRIIHwgQVNDUl9EMVMgfCBBU0NSX0QyUyB8IEFTQ1JfRDNTKTsKLQogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyYjQyN2UwLi45N2M5M2E3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC0zNiwxMyArMzYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KQEAgLTQxMSwyMSArNDEzLDYgQEAKIC8qCiAgKiBVU0IgVURDCiAgKi8KLXN0YXRpYyB2b2lkIHVkY19wb3dlcl9jb21tYW5kKGludCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8yMl9VU0JfRU5BQkxFLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQWEEyWFhfVURDX0NNRF9DT05ORUNUOgotCQlncGlvX3NldF92YWx1ZShHUElPMjJfVVNCX0VOQUJMRSwgMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gInVkY19jb250cm9sOiB1bmtub3duIGNvbW1hbmQgKDB4JXgpIVxuIiwgY21kKTsKLQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgaW50IGlzX3VzYl9jb25uZWN0ZWQodm9pZCkKIHsKIAlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU8xM19uVVNCX0RFVEVDVCk7CkBAIC00MzMsMjQgKzQyMCwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIG1pb2E3MDFfdWRjX2luZm8gPSB7CiAJLnVkY19pc19jb25uZWN0ZWQgPSBpc191c2JfY29ubmVjdGVkLAotCS51ZGNfY29tbWFuZAkgID0gdWRjX3Bvd2VyX2NvbW1hbmQsCisJLmdwaW9fcHVsbHVwCSAgPSBHUElPMjJfVVNCX0VOQUJMRSwKIH07CiAKLXN0cnVjdCBncGlvX3Jlc3MgdWRjX2dwaW9zW10gPSB7Ci0JTUlPX0dQSU9fT1VUKEdQSU8yMl9VU0JfRU5BQkxFLCAwLCAiVVNCIFZidXMgZW5hYmxlIikKK3N0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvIGdwaW9fdmJ1c19kYXRhID0geworCS5ncGlvX3ZidXMgPSBHUElPMTNfblVTQl9ERVRFQ1QsCisJLmdwaW9fdmJ1c19pbnZlcnRlZCA9IDEsCisJLmdwaW9fcHVsbHVwID0gLTEsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQotewotCXB4YV9zZXRfdWRjX2luZm8oJm1pb2E3MDFfdWRjX2luZm8pOwotCXJldHVybiBtaW9fZ3Bpb19yZXF1ZXN0KEFSUkFZX0FORF9TSVpFKHVkY19ncGlvcykpOwotfQotCi1zdGF0aWMgdm9pZCB1ZGNfZXhpdCh2b2lkKQotewotCW1pb19ncGlvX2ZyZWUoQVJSQVlfQU5EX1NJWkUodWRjX2dwaW9zKSk7Ci19Ci0KIC8qCiAgKiBTRElPL01NQyBDYXJkIGNvbnRyb2xsZXIKICAqLwpAQCAtNzg5LDYgKzc2Nyw3IEBACiBNSU9fUEFSRU5UX0RFVihtaW9fd205NzEzX2NvZGVjLCAgIndtOTcxMy1jb2RlYyIsICAgJnB4YTJ4eF9hYzk3LmRldiwgTlVMTCkKIE1JT19TSU1QTEVfREVWKG1pb2E3MDFfc291bmQsCSAgIm1pb2E3MDEtd205NzEzIiwgTlVMTCkKIE1JT19TSU1QTEVfREVWKG1pb2E3MDFfYm9hcmQsCSAgIm1pb2E3MDEtYm9hcmQiLCAgTlVMTCkKK01JT19TSU1QTEVfREVWKGdwaW9fdmJ1cywJICAiZ3Bpby12YnVzIiwgICAgICAmZ3Bpb192YnVzX2RhdGEpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm1pb2E3MDFfZ3Bpb19rZXlzLApAQCAtODAwLDcgKzc3OSw4IEBACiAJJm1pb2E3MDFfc291bmQsCiAJJnBvd2VyX2RldiwKIAkmc3RyYXRhZmxhc2gsCi0JJm1pb2E3MDFfYm9hcmQKKwkmZ3Bpb192YnVzLAorCSZtaW9hNzAxX2JvYXJkLAogfTsKIAogc3RhdGljIHZvaWQgbWlvYTcwMV9tYWNoaW5lX2V4aXQodm9pZCk7CkBAIC04MDgsMTMgKzc4OCwxMyBAQAogc3RhdGljIHZvaWQgbWlvYTcwMV9wb3dlcm9mZih2b2lkKQogewogCW1pb2E3MDFfbWFjaGluZV9leGl0KCk7Ci0JYXJtX21hY2hpbmVfcmVzdGFydCgncycpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ3MnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgbWlvYTcwMV9yZXN0YXJ0KGNoYXIgYykKK3N0YXRpYyB2b2lkIG1pb2E3MDFfcmVzdGFydChjaGFyIGMsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAltaW9hNzAxX21hY2hpbmVfZXhpdCgpOwotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ3MnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJywgY21kKTsKIH0KIAogc3RydWN0IGdwaW9fcmVzcyBnbG9iYWxfZ3Bpb3NbXSA9IHsKQEAgLTgzNyw3ICs4MTcsNyBAQAogCXB4YV9zZXRfbWNpX2luZm8oJm1pb2E3MDFfbWNpX2luZm8pOwogCXB4YV9zZXRfa2V5cGFkX2luZm8oJm1pb2E3MDFfa2V5cGFkX2luZm8pOwogCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZtaW9hNzAxX2JhdHRlcnlfZGF0YSk7Ci0JdWRjX2luaXQoKTsKKwlweGFfc2V0X3VkY19pbmZvKCZtaW9hNzAxX3VkY19pbmZvKTsKIAlwbV9wb3dlcl9vZmYgPSBtaW9hNzAxX3Bvd2Vyb2ZmOwogCWFybV9wbV9yZXN0YXJ0ID0gbWlvYTcwMV9yZXN0YXJ0OwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwpAQCAtODUwLDcgKzgzMCw2IEBACiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpCiB7Ci0JdWRjX2V4aXQoKTsKIAlib290c3RyYXBfZXhpdCgpOwogCWdzbV9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tcDkwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYwppbmRleCA4YTczODE0Li5hNjU3MTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tcDkwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21wOTAwLmMKQEAgLTE5LDEwICsxOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lzcDExNnguaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogc3RhdGljIHZvaWQgaXNwMTE2eF9wZm1fZGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZGVsYXkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODc0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBQYWxtIExpZmVEcml2ZQorICoKKyAqIEF1dGhvcjogICAgIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gd29yayBvZjoKKyAqCQlBbGV4IE9zYm9ybmUgPGF0b0BtZXNoeS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAoZmluZCBtb3JlIGluZm8gYXQgd3d3LmhhY2tuZGV2LmNvbSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbWxkLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGluIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWxtbGRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzE0X0dQSU8sCS8qIFNEIGRldGVjdCAqLworCUdQSU8xMTRfR1BJTywJLyogU0QgcG93ZXIgKi8KKwlHUElPMTE2X0dQSU8sCS8qIFNEIHIvbyBzd2l0Y2ggKi8KKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIElyREEgKi8KKwlHUElPMTA4X0dQSU8sCS8qIGlyIGRpc2FibGUgKi8KKwlHUElPNDZfRklDUF9SWEQsCisJR1BJTzQ3X0ZJQ1BfVFhELAorCisJLyogTUFUUklYIEtFWVBBRCAqLworCUdQSU8xMDBfS1BfTUtJTl8wLAorCUdQSU8xMDFfS1BfTUtJTl8xLAorCUdQSU8xMDJfS1BfTUtJTl8yLAorCUdQSU85N19LUF9NS0lOXzMsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisKKwkvKiBMQ0QgKi8KKwlHUElPNThfTENEX0xERF8wLAorCUdQSU81OV9MQ0RfTEREXzEsCisJR1BJTzYwX0xDRF9MRERfMiwKKwlHUElPNjFfTENEX0xERF8zLAorCUdQSU82Ml9MQ0RfTEREXzQsCisJR1BJTzYzX0xDRF9MRERfNSwKKwlHUElPNjRfTENEX0xERF82LAorCUdQSU82NV9MQ0RfTEREXzcsCisJR1BJTzY2X0xDRF9MRERfOCwKKwlHUElPNjdfTENEX0xERF85LAorCUdQSU82OF9MQ0RfTEREXzEwLAorCUdQSU82OV9MQ0RfTEREXzExLAorCUdQSU83MF9MQ0RfTEREXzEyLAorCUdQSU83MV9MQ0RfTEREXzEzLAorCUdQSU83Ml9MQ0RfTEREXzE0LAorCUdQSU83M19MQ0RfTEREXzE1LAorCUdQSU83NF9MQ0RfRkNMSywKKwlHUElPNzVfTENEX0xDTEssCisJR1BJTzc2X0xDRF9QQ0xLLAorCUdQSU83N19MQ0RfQklBUywKKworCS8qIFBXTSAqLworCUdQSU8xNl9QV00wX09VVCwKKworCS8qIEdQSU8gS0VZUyAqLworCUdQSU8xMF9HUElPLAkvKiBob3RzeW5jIGJ1dHRvbiAqLworCUdQSU8xMl9HUElPLAkvKiBwb3dlciBzd2l0Y2ggKi8KKwlHUElPMTVfR1BJTywJLyogbG9jayBzd2l0Y2ggKi8KKworCS8qIExFRHMgKi8KKwlHUElPNTJfR1BJTywJLyogZ3JlZW4gbGVkICovCisJR1BJTzk0X0dQSU8sCS8qIG9yYW5nZSBsZWQgKi8KKworCS8qIFBDTUNJQSAqLworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPNTRfblBDRV8yLAorCUdQSU83OV9QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorCUdQSU8zNl9HUElPLAkvKiB3aWZpIHBvd2VyICovCisJR1BJTzM4X0dQSU8sCS8qIHdpZmkgcmVhZHkgKi8KKwlHUElPODFfR1BJTywJLyogd2lmaSByZXNldCAqLworCisJLyogSEREICovCisJR1BJTzk1X0dQSU8sCS8qIEhERCBpcnEgKi8KKwlHUElPMTE1X0dQSU8sCS8qIEhERCBwb3dlciAqLworCisJLyogTUlTQyAqLworCUdQSU8xM19HUElPLAkvKiBlYXJwaG9uZSBkZXRlY3QgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBhbG1sZF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbWxkX2RldGVjdF9pbnQsCisJCQkJdm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04sICJTRCBJUlEiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7CisJaWYgKGVycikKKwkJZ290byBlcnIyOworCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwKKwkJCXBhbG1sZF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCisJCQkJX19mdW5jX18pOworCQlnb3RvIGVycjI7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjM7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjQ7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyNDsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7CisJaWYgKGVycikKKwkJZ290byBlcnI1OworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CisKK2VycjU6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKK2VycjQ6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKK2VycjM6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKK2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksIGRhdGEpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG1sZF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQoreworCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Cit9CisKK3N0YXRpYyBpbnQgcGFsbWxkX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbWxkX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5zZXRwb3dlcgk9IHBhbG1sZF9tY2lfcG93ZXIsCisJLmdldF9ybwkJPSBwYWxtbGRfbWNpX2dldF9ybywKKwkuaW5pdCAJCT0gcGFsbWxkX21jaV9pbml0LAorCS5leGl0CQk9IHBhbG1sZF9tY2lfZXhpdCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5Ym9hcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgaW50IHBhbG1sZF9tYXRyaXhfa2V5c1tdID0geworCUtFWSgwLCAxLCBLRVlfRjIpLAorCUtFWSgwLCAyLCBLRVlfVVApLAorCisJS0VZKDEsIDAsIEtFWV9GMyksCisJS0VZKDEsIDEsIEtFWV9GNCksCisJS0VZKDEsIDIsIEtFWV9SSUdIVCksCisKKwlLRVkoMiwgMCwgS0VZX0YxKSwKKwlLRVkoMiwgMSwgS0VZX0Y1KSwKKwlLRVkoMiwgMiwgS0VZX0RPV04pLAorCisJS0VZKDMsIDAsIEtFWV9GNiksCisJS0VZKDMsIDEsIEtFWV9FTlRFUiksCisJS0VZKDMsIDIsIEtFWV9MRUZUKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWF0cml4X2tleV9yb3dzCT0gNCwKKwkubWF0cml4X2tleV9jb2xzCT0gMywKKwkubWF0cml4X2tleV9tYXAJCT0gcGFsbWxkX21hdHJpeF9rZXlzLAorCS5tYXRyaXhfa2V5X21hcF9zaXplCT0gQVJSQVlfU0laRShwYWxtbGRfbWF0cml4X2tleXMpLAorCisJLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbWxkX3B4YV9idXR0b25zW10gPSB7CisJe0tFWV9GOCwgR1BJT19OUl9QQUxNTERfSE9UU1lOQ19CVVRUT05fTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiB9LAorCXtLRVlfRjksIEdQSU9fTlJfUEFMTUxEX0xPQ0tfU1dJVENILCAwLCAiTG9jayBTd2l0Y2giIH0sCisJe0tFWV9QT1dFUiwgR1BJT19OUl9QQUxNTERfUE9XRVJfU1dJVENILCAwLCAiUG93ZXIgU3dpdGNoIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBwYWxtbGRfcHhhX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHBhbG1sZF9weGFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHBhbG1sZF9weGFfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtbGRfcHhhX2tleXMgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtbGRfcHhhX2tleXNfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmFja2xpZ2h0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtbGRfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsICJCTCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9CTF9QT1dFUiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCisJcmV0dXJuIDA7CitlcnIzOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIpOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbWxkX2JhY2tsaWdodF9ub3RpZnkoaW50IGJyaWdodG5lc3MpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIGJyaWdodG5lc3MpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7CisJcmV0dXJuIGJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG1sZF9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbWxkX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMCwKKwkubWF4X2JyaWdodG5lc3MJPSBQQUxNTERfTUFYX0lOVEVOU0lUWSwKKwkuZGZ0X2JyaWdodG5lc3MJPSBQQUxNTERfTUFYX0lOVEVOU0lUWSwKKwkucHdtX3BlcmlvZF9ucwk9IFBBTE1MRF9QRVJJT0RfTlMsCisJLmluaXQJCT0gcGFsbWxkX2JhY2tsaWdodF9pbml0LAorCS5ub3RpZnkJCT0gcGFsbWxkX2JhY2tsaWdodF9ub3RpZnksCisJLmV4aXQJCT0gcGFsbWxkX2JhY2tsaWdodF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2JhY2tsaWdodCA9IHsKKwkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CT0geworCQkucGFyZW50CQk9ICZweGEyN3hfZGV2aWNlX3B3bTAuZGV2LAorCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtbGRfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElyREEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBhbG1sZF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIDEpOworCWlmIChlcnIpCisJCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKK2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUpOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7CisJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbWxkX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuc3RhcnR1cAkJPSBwYWxtbGRfaXJkYV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBwYWxtbGRfaXJkYV9zaHV0ZG93biwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBncGlvX2xlZCBncGlvX2xlZHNbXSA9IHsKK3sKKwkubmFtZQkJCT0gInBhbG1sZDpncmVlbjpsZWQiLAorCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJLmdwaW8JCQk9IEdQSU9fTlJfUEFMTUxEX0xFRF9HUkVFTiwKK30sIHsKKwkubmFtZQkJCT0gInBhbG1sZDphbWJlcjpsZWQiLAorCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJLmdwaW8JCQk9IEdQSU9fTlJfUEFMTUxEX0xFRF9BTUJFUiwKK30sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2xlZHMgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBvd2VyIHN1cHBseQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OLCAiQ0FCTEVfU1RBVEVfVVNCIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCisJcmV0dXJuIDA7CisKK2VycjM6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QpOworZXJyMToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG1sZF9pc19hY19vbmxpbmUodm9pZCkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKK30KKworc3RhdGljIGludCBwYWxtbGRfaXNfdXNiX29ubGluZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OKTsKK30KKworc3RhdGljIHZvaWQgcG93ZXJfc3VwcGx5X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QpOworfQorCitzdGF0aWMgY2hhciAqcGFsbWxkX3N1cHBsaWNhbnRzW10gPSB7CisJIm1haW4tYmF0dGVyeSIsCit9OworCitzdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKKwkuaW5pdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2luaXQsCisJLmlzX2FjX29ubGluZSAgICA9IHBhbG1sZF9pc19hY19vbmxpbmUsCisJLmlzX3VzYl9vbmxpbmUgICA9IHBhbG1sZF9pc191c2Jfb25saW5lLAorCS5leGl0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfZXhpdCwKKwkuc3VwcGxpZWRfdG8gICAgID0gcGFsbWxkX3N1cHBsaWNhbnRzLAorCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHBhbG1sZF9zdXBwbGljYW50cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb3dlcl9zdXBwbHkgPSB7CisJLm5hbWUgPSAicGRhLXBvd2VyIiwKKwkuaWQgICA9IC0xLAorCS5kZXYgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwb3dlcl9zdXBwbHlfaW5mbywKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV005N3h4IGJhdHRlcnkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gd205N3h4X2JhdHRfcGRhdGEgPSB7CisJLmJhdHRfYXV4CT0gV005N1hYX0FVWF9JRDMsCisJLnRlbXBfYXV4CT0gV005N1hYX0FVWF9JRDIsCisJLmNoYXJnZV9ncGlvCT0gLTEsCisJLm1heF92b2x0YWdlCT0gUEFMTUxEX0JBVF9NQVhfVk9MVEFHRSwKKwkubWluX3ZvbHRhZ2UJPSBQQUxNTERfQkFUX01JTl9WT0xUQUdFLAorCS5iYXR0X211bHQJPSAxMDAwLAorCS5iYXR0X2Rpdgk9IDQxNCwKKwkudGVtcF9tdWx0CT0gMSwKKwkudGVtcF9kaXYJPSAxLAorCS5iYXR0X3RlY2gJPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAorCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFTb0MgYXVkaW8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBhbG0yN3hfYXNvY19pbmZvIHBhbG0yN3hfYXNvY19wZGF0YSA9IHsKKwkuamFja19ncGlvCT0gR1BJT19OUl9QQUxNTERfRUFSUEhPTkVfREVURUNULAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtbGRfbGNkX21vZGVzW10gPSB7Cit7CisJLnBpeGNsb2NrCT0gNTc2OTIsCisJLnhyZXMJCT0gMzIwLAorCS55cmVzCQk9IDQ4MCwKKwkuYnBwCQk9IDE2LAorCisJLmxlZnRfbWFyZ2luCT0gMzIsCisJLnJpZ2h0X21hcmdpbgk9IDEsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDEsCisKKwkuaHN5bmNfbGVuCT0gNCwKKwkudnN5bmNfbGVuCT0gMSwKK30sCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtbGRfbGNkX3NjcmVlbiA9IHsKKwkubW9kZXMJCT0gcGFsbWxkX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShwYWxtbGRfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjaGluZSBpbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorCSZwYWxtbGRfcHhhX2tleXMsCisjZW5kaWYKKwkmcGFsbWxkX2JhY2tsaWdodCwKKwkmcGFsbWxkX2xlZHMsCisJJnBvd2VyX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGFsbWxkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworeworCS52aXJ0dWFsCT0gUEFMTUxEX0lERV9WSVJULAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNTERfSURFX1BIWVMpLAorCS5sZW5ndGgJCT0gUEFMTUxEX0lERV9TSVpFLAorCS50eXBlCQk9IE1UX0RFVklDRQorfSwKK3sKKwkudmlydHVhbAk9IFBBTE1MRF9VU0JfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTUxEX1VTQl9QSFlTKSwKKwkubGVuZ3RoCQk9IFBBTE1MRF9VU0JfU0laRSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKK30sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQocGFsbWxkX2lvX2Rlc2MsIEFSUkFZX1NJWkUocGFsbWxkX2lvX2Rlc2MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBhbG1sZF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocGFsbWxkX3Bpbl9jb25maWcpKTsKKworCXNldF9weGFfZmJfaW5mbygmcGFsbWxkX2xjZF9zY3JlZW4pOworCXB4YV9zZXRfbWNpX2luZm8oJnBhbG1sZF9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9maWNwX2luZm8oJnBhbG1sZF9maWNwX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfa2V5cGFkX2luZm8oJnBhbG1sZF9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisJd205N3h4X2JhdF9zZXRfcGRhdGEoJndtOTd4eF9iYXR0X3BkYXRhKTsKKwlwYWxtMjd4X2Fzb2Nfc2V0X3BkYXRhKCZwYWxtMjd4X2Fzb2NfcGRhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoUEFMTUxELCAiUGFsbSBMaWZlRHJpdmUiKQorCS5waHlzX2lvCT0gUEFMTUxEX1BIWVNfSU9fU1RBUlQsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkubWFwX2lvCQk9IHBhbG1sZF9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBwYWxtbGRfaW5pdAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyMWM3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCkBAIC0wLDAgKzEsNDk2IEBACisvKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFBhbG0gVHVuZ3N0ZW58VDUKKyAqCisgKiBBdXRob3I6CU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gd29yayBvZjoKKyAqCQlBbGVzIFNudXBhcmVrIDxzbnVwYXJla0BhdGxhcy5jej4KKyAqCQlKdXN0aW4gS2VuZHJpY2sgPHR3aWxpZ2h0c2VudHJ5QGdtYWlsLmNvbT4KKyAqCQlSaWNoYXJkVDUgPHJpY2hhcmRfdDVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogKGZpbmQgbW9yZSBpbmZvIGF0IHd3dy5oYWNrbmRldi5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10NS5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGluIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWxtdDVfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzE0X0dQSU8sCS8qIFNEIGRldGVjdCAqLworCUdQSU8xMTRfR1BJTywJLyogU0QgcG93ZXIgKi8KKwlHUElPMTE1X0dQSU8sCS8qIFNEIHIvbyBzd2l0Y2ggKi8KKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIElyREEgKi8KKwlHUElPNDBfR1BJTywJLyogaXIgZGlzYWJsZSAqLworCUdQSU80Nl9GSUNQX1JYRCwKKwlHUElPNDdfRklDUF9UWEQsCisKKwkvKiBVU0IgKi8KKwlHUElPMTVfR1BJTywJLyogdXNiIGRldGVjdCAqLworCUdQSU85NV9HUElPLAkvKiB1c2IgcG93ZXIgKi8KKworCS8qIE1BVFJJWCBLRVlQQUQgKi8KKwlHUElPMTAwX0tQX01LSU5fMCwKKwlHUElPMTAxX0tQX01LSU5fMSwKKwlHUElPMTAyX0tQX01LSU5fMiwKKwlHUElPOTdfS1BfTUtJTl8zLAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBQV00gKi8KKwlHUElPMTZfUFdNMF9PVVQsCisKKwkvKiBNSVNDICovCisJR1BJTzEwX0dQSU8sCS8qIGhvdHN5bmMgYnV0dG9uICovCisJR1BJTzkwX0dQSU8sCS8qIHBvd2VyIGRldGVjdCAqLworCUdQSU8xMDdfR1BJTywJLyogZWFycGhvbmUgZGV0ZWN0ICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtdDVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG10NV9kZXRlY3RfaW50LAorCQkJCXZvaWQgKmRhdGEpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOworCWlmIChlcnIpCisJCWdvdG8gZXJyMjsKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksCisJCQlwYWxtdDVfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8CisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnIyOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgIlNEX1BPV0VSIik7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnI0OworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjQ7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyNTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworCitlcnI1OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7CitlcnI0OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7CitlcnIzOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKSwgZGF0YSk7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7CisJZnJlZV9pcnEoSVJRX0dQSU9fUEFMTVQ1X1NEX0RFVEVDVF9OLCBkYXRhKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOworfQorCitzdGF0aWMgdm9pZCBwYWxtdDVfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOworfQorCitzdGF0aWMgaW50IHBhbG10NV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10NV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIJPSBwYWxtdDVfbWNpX3Bvd2VyLAorCS5nZXRfcm8JCT0gcGFsbXQ1X21jaV9nZXRfcm8sCisJLmluaXQgCQk9IHBhbG10NV9tY2lfaW5pdCwKKwkuZXhpdAkJPSBwYWxtdDVfbWNpX2V4aXQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleWJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdDVfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMSwgS0VZX0YxKSwKKwlLRVkoMCwgMiwgS0VZX0VOVEVSKSwKKworCUtFWSgxLCAwLCBLRVlfRjIpLAorCUtFWSgxLCAxLCBLRVlfRjMpLAorCUtFWSgxLCAyLCBLRVlfRjQpLAorCisJS0VZKDIsIDAsIEtFWV9VUCksCisJS0VZKDIsIDIsIEtFWV9ET1dOKSwKKworCUtFWSgzLCAwLCBLRVlfUklHSFQpLAorCUtFWSgzLCAyLCBLRVlfTEVGVCksCit9OworCitzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtdDVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hdHJpeF9rZXlfcm93cwk9IDQsCisJLm1hdHJpeF9rZXlfY29scwk9IDMsCisJLm1hdHJpeF9rZXlfbWFwCQk9IHBhbG10NV9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUocGFsbXQ1X21hdHJpeF9rZXlzKSwKKworCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG10NV9weGFfYnV0dG9uc1tdID0geworCXtLRVlfRjgsIEdQSU9fTlJfUEFMTVQ1X0hPVFNZTkNfQlVUVE9OX04sIDEsICJIb3RTeW5jIEJ1dHRvbiIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X3B4YV9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBwYWxtdDVfcHhhX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShwYWxtdDVfcHhhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXQ1X3B4YV9rZXlzID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbXQ1X3B4YV9rZXlzX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJhY2tsaWdodAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXQ1X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSKTsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBwYWxtdDVfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9CTF9QT1dFUik7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG10NV9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gUEFMTVQ1X01BWF9JTlRFTlNJVFksCisJLmRmdF9icmlnaHRuZXNzCT0gUEFMTVQ1X01BWF9JTlRFTlNJVFksCisJLnB3bV9wZXJpb2RfbnMJPSBQQUxNVDVfUEVSSU9EX05TLAorCS5pbml0CQk9IHBhbG10NV9iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG10NV9iYWNrbGlnaHRfbm90aWZ5LAorCS5leGl0CQk9IHBhbG10NV9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10NV9iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXQ1X2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtdDVfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAxKTsKKwlpZiAoZXJyKQorCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10NV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnN0YXJ0dXAJCT0gcGFsbXQ1X2lyZGFfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gcGFsbXQ1X2lyZGFfc2h1dGRvd24sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gcGFsbXQ1X3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLmdwaW9fdmJ1cwkJPSBHUElPX05SX1BBTE1UNV9VU0JfREVURUNUX04sCisJLmdwaW9fdmJ1c19pbnZlcnRlZAk9IDEsCisJLmdwaW9fcHVsbHVwCQk9IEdQSU9fTlJfUEFMTVQ1X1VTQl9QT1dFUiwKKwkuZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQJPSAwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUG93ZXIgc3VwcGx5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwb3dlcl9zdXBwbHlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QsICJDQUJMRV9TVEFURV9BQyIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMTsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldHVybiAwOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNUKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtdDVfaXNfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNUKTsKK30KKworc3RhdGljIGNoYXIgKnBhbG10NV9zdXBwbGljYW50c1tdID0geworCSJtYWluLWJhdHRlcnkiLAorfTsKKworc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CisJLmluaXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9pbml0LAorCS5pc19hY19vbmxpbmUgICAgPSBwYWxtdDVfaXNfYWNfb25saW5lLAorCS5leGl0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfZXhpdCwKKwkuc3VwcGxpZWRfdG8gICAgID0gcGFsbXQ1X3N1cHBsaWNhbnRzLAorCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHBhbG10NV9zdXBwbGljYW50cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb3dlcl9zdXBwbHkgPSB7CisJLm5hbWUgPSAicGRhLXBvd2VyIiwKKwkuaWQgICA9IC0xLAorCS5kZXYgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwb3dlcl9zdXBwbHlfaW5mbywKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV005N3h4IGJhdHRlcnkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gd205N3h4X2JhdHRfcGRhdGEgPSB7CisJLmJhdHRfYXV4CT0gV005N1hYX0FVWF9JRDMsCisJLnRlbXBfYXV4CT0gV005N1hYX0FVWF9JRDIsCisJLmNoYXJnZV9ncGlvCT0gLTEsCisJLm1heF92b2x0YWdlCT0gUEFMTVQ1X0JBVF9NQVhfVk9MVEFHRSwKKwkubWluX3ZvbHRhZ2UJPSBQQUxNVDVfQkFUX01JTl9WT0xUQUdFLAorCS5iYXR0X211bHQJPSAxMDAwLAorCS5iYXR0X2Rpdgk9IDQxNCwKKwkudGVtcF9tdWx0CT0gMSwKKwkudGVtcF9kaXYJPSAxLAorCS5iYXR0X3RlY2gJPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAorCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFTb0MgYXVkaW8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBhbG0yN3hfYXNvY19pbmZvIHBhbG0yN3hfYXNvY19wZGF0YSA9IHsKKwkuamFja19ncGlvCT0gR1BJT19OUl9QQUxNVDVfRUFSUEhPTkVfREVURUNULAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtdDVfbGNkX21vZGVzW10gPSB7Cit7CisJLnBpeGNsb2NrCT0gNTc2OTIsCisJLnhyZXMJCT0gMzIwLAorCS55cmVzCQk9IDQ4MCwKKwkuYnBwCQk9IDE2LAorCisJLmxlZnRfbWFyZ2luCT0gMzIsCisJLnJpZ2h0X21hcmdpbgk9IDEsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDEsCisKKwkuaHN5bmNfbGVuCT0gNCwKKwkudnN5bmNfbGVuCT0gMSwKK30sCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtdDVfbGNkX3NjcmVlbiA9IHsKKwkubW9kZXMJCT0gcGFsbXQ1X2xjZF9tb2RlcywKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShwYWxtdDVfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjaGluZSBpbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorCSZwYWxtdDVfcHhhX2tleXMsCisjZW5kaWYKKwkmcGFsbXQ1X2JhY2tsaWdodCwKKwkmcG93ZXJfc3VwcGx5LAorfTsKKworLyogc2V0dXAgdWRjIEdQSU9zIGluaXRpYWwgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfdWRjX2luaXQodm9pZCkKK3sKKwlpZiAoIWdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9VU0JfUE9XRVIsICJVREMgVmJ1cyIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9VU0JfUE9XRVIsIDEpOworCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG10NV9waW5fY29uZmlnKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG10NV9sY2Rfc2NyZWVuKTsKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtdDVfbWNpX3BsYXRmb3JtX2RhdGEpOworCXBhbG10NV91ZGNfaW5pdCgpOworCXB4YV9zZXRfdWRjX2luZm8oJnBhbG10NV91ZGNfaW5mbyk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9maWNwX2luZm8oJnBhbG10NV9maWNwX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfa2V5cGFkX2luZm8oJnBhbG10NV9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisJd205N3h4X2JhdF9zZXRfcGRhdGEoJndtOTd4eF9iYXR0X3BkYXRhKTsKKwlwYWxtMjd4X2Fzb2Nfc2V0X3BkYXRhKCZwYWxtMjd4X2Fzb2NfcGRhdGEpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFBBTE1UNSwgIlBhbG0gVHVuZ3N0ZW58VDUiKQorCS5waHlzX2lvCT0gUEFMTVQ1X1BIWVNfSU9fU1RBUlQsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBwYWxtdDVfaW5pdAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKaW5kZXggYTlkOTRmNS4uYjQ5MGMwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKQEAgLTMyLDEyICszMiwxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcGFsbXR4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggMmY3MzBkYS4uYjg4ZWI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwpAQCAtMzMsMTMgKzMzLDExIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9wYWxtejcyLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwppbmRleCAzNjEzNWEwLi42YWJmYTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwpAQCAtMjksMTAgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9wY20wMjcuaD4KICNpbmNsdWRlICJnZW5lcmljLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggMzQ4NDFjNy4uNjExMjc0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMzEsMTMgKzMxLDEyIEBACiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvcGNtOTkwX2Jhc2Vib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCkBAIC0zODEsMTQgKzM4MCw0OSBAQAogCS5ncGlvX2Jhc2UJPSBOUl9CVUlMVElOX0dQSU8gKyAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rW10gPSB7Ci0JewotCQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkJLmdwaW8JPSBOUl9CVUlMVElOX0dQSU8gKyAxLAotCX0sIHsKLQkJLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCi0JCS5ncGlvCT0gLUVOWElPLAorc3RhdGljIGludCBncGlvX2J1c19zd2l0Y2g7CisKK3N0YXRpYyBpbnQgcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmxpbmssCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKGdwaW9fYnVzX3N3aXRjaCA8PSAwKSB7CisJCWlmIChmbGFncyA9PSBTT0NBTV9EQVRBV0lEVEhfMTApCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9fYnVzX3N3aXRjaCwgMSk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShncGlvX2J1c19zd2l0Y2gsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmxpbmspCit7CisJaW50IHJldDsKKworCWlmICghZ3Bpb19idXNfc3dpdGNoKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChOUl9CVUlMVElOX0dQSU8gKyAxLCAiY2FtZXJhIik7CisJCWlmICghcmV0KSB7CisJCQlncGlvX2J1c19zd2l0Y2ggPSBOUl9CVUlMVElOX0dQSU8gKyAxOworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9fYnVzX3N3aXRjaCwgMCk7CisJCX0gZWxzZQorCQkJZ3Bpb19idXNfc3dpdGNoID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ3Bpb19idXNfc3dpdGNoID4gMCkKKwkJcmV0dXJuIFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fREFUQVdJRFRIXzEwOworCWVsc2UKKwkJcmV0dXJuIFNPQ0FNX0RBVEFXSURUSF8xMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCBhYm92ZSAqLworCS5xdWVyeV9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbSwKKwkuc2V0X2J1c19wYXJhbSA9IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbSwKIH07CiAKIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwpAQCAtMzk5LDEwICs0MzMsMTAgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcGNhOTUzNl9kYXRhLAogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OXYwMjIiLCAweDQ4KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLCAvKiBXaXRoIGV4dGVuZGVyICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0wMDEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLCAvKiBXaXRoIGV4dGVuZGVyICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19WSURFT19QWEEyN3ggfHxDT05GSUdfVklERU9fUFhBMjd4X01PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggMTY0ZWIwYi4uODg0YjE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0xNCwxNSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9sdWJib2NrLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiBzdHJ1Y3QgcHhhX2NwdV9wbV9mbnMgKnB4YV9jcHVfcG1fZm5zOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnNsZWVwX3NhdmU7CkBAIC01Nyw5ICs1MCw5IEBACiAKIAkJLyogaWYgaW52YWxpZCwgZGlzcGxheSBtZXNzYWdlIGFuZCB3YWl0IGZvciBhIGhhcmR3YXJlIHJlc2V0ICovCiAJCWlmIChjaGVja3N1bSAhPSBzbGVlcF9zYXZlX2NoZWNrc3VtKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSwotCQkJTFVCX0hFWExFRCA9IDB4YmFkYmFkYzU7Ci0jZW5kaWYKKworCQkJbHViYm9ja19zZXRfaGV4bGVkKDB4YmFkYmFkYzUpOworCiAJCQl3aGlsZSAoMSkKIAkJCQlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IGY5MDkzYmUuLjAzNmJiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0zNiw5ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC01MDMsMTIgKzUwMSwxMiBAQAogCiBzdGF0aWMgdm9pZCBwb29kbGVfcG93ZXJvZmYodm9pZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwb29kbGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wd20uYwppbmRleCAzY2E3ZmZjLi5mY2RkMzc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wd20uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wd20uYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogCiAvKiBQV00gcmVnaXN0ZXJzIGFuZCBiaXRzIGRlZmluaXRpb25zICovCiAjZGVmaW5lIFBXTUNSCQkoMHgwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKaW5kZXggNmM1NzUyMi4uNzdjMjY5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKQEAgLTI1LDkgKzI1LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgpAQCAtMzEwLDE0ICszMDksMTQgQEAKIHZvaWQgX19pbml0IHB4YTI1eF9pbml0X2lycSh2b2lkKQogewogCXB4YV9pbml0X2lycSgzMiwgcHhhMjV4X3NldF93YWtlKTsKLQlweGFfaW5pdF9ncGlvKDg1LCBweGEyNXhfc2V0X3dha2UpOworCXB4YV9pbml0X2dwaW8oSVJRX0dQSU9fMl94LCAyLCA4NCwgcHhhMjV4X3NldF93YWtlKTsKIH0KIAogI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4CiB2b2lkIF9faW5pdCBweGEyNnhfaW5pdF9pcnEodm9pZCkKIHsKIAlweGFfaW5pdF9pcnEoMzIsIHB4YTI1eF9zZXRfd2FrZSk7Ci0JcHhhX2luaXRfZ3Bpbyg5MCwgcHhhMjV4X3NldF93YWtlKTsKKwlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgODksIHB4YTI1eF9zZXRfd2FrZSk7CiB9CiAjZW5kaWYKIApAQCAtMzU1LDcgKzM1NCw3IEBACiAKIAkJY2xrc19yZWdpc3RlcihweGEyNXhfY2xrcmVncywgQVJSQVlfU0laRShweGEyNXhfY2xrcmVncykpOwogCi0JCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDE2KSkpCisJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDE2KSkpCiAJCQlyZXR1cm4gcmV0OwogCiAJCXB4YTI1eF9pbml0X3BtKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IDQxMWJlYzUuLmE0MjVlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC0yMSw5ICsyMSw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KQEAgLTMzMiw3ICszMzEsNyBAQAogdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpCiB7CiAJcHhhX2luaXRfaXJxKDM0LCBweGEyN3hfc2V0X3dha2UpOwotCXB4YV9pbml0X2dwaW8oMTIxLCBweGEyN3hfc2V0X3dha2UpOworCXB4YV9pbml0X2dwaW8oSVJRX0dQSU9fMl94LCAyLCAxMjAsIHB4YTI3eF9zZXRfd2FrZSk7CiB9CiAKIC8qCkBAIC0zODEsNyArMzgwLDcgQEAKIAogCQljbGtzX3JlZ2lzdGVyKHB4YTI3eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTI3eF9jbGtyZWdzKSk7CiAKLQkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoMzIpKSkKKwkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CiAKIAkJcHhhMjd4X2luaXRfcG0oKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKaW5kZXggNzNkMDRkOC4uMmYzMzk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwppbmRleCA4M2ZiNjA5Li40YmE2ZDIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwpAQCAtMTcsMTUgKzE3LDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMzAwLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCBweGEzMDBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTMwMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0gewogCiAJTUZQX0FERFJfWChHUElPMCwgICBHUElPMiwgICAweDAwYjQpLAogCU1GUF9BRERSX1goR1BJTzMsICAgR1BJTzI2LCAgMHgwMjdjKSwKQEAgLTc0LDcgKzcyLDcgQEAKIH07CiAKIC8qIG92ZXJyaWRlIHB4YTMwMCBNRlAgcmVnaXN0ZXIgYWRkcmVzc2VzICovCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhMzEwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGEzMTBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAlNRlBfQUREUl9YKEdQSU8zMCwgIEdQSU85OCwgICAweDA0MTgpLAogCU1GUF9BRERSX1goR1BJTzdfMiwgR1BJTzEyXzIsIDB4MDUyQyksCiAKQEAgLTEwMCwxMyArOTgsMTMgQEAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTMwMF9pbml0KHZvaWQpCiB7CiAJaWYgKGNwdV9pc19weGEzMDAoKSB8fCBjcHVfaXNfcHhhMzEwKCkpIHsKLQkJcHhhM3h4X2luaXRfbWZwKCk7Ci0JCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMwMF9tZnBfYWRkcl9tYXApOworCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKKwkJbWZwX2luaXRfYWRkcihweGEzMDBfbWZwX2FkZHJfbWFwKTsKIAkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShjb21tb25fY2xrcmVncykpOwogCX0KIAogCWlmIChjcHVfaXNfcHhhMzEwKCkpIHsKLQkJcHhhM3h4X21mcF9pbml0X2FkZHIocHhhMzEwX21mcF9hZGRyX21hcCk7CisJCW1mcF9pbml0X2FkZHIocHhhMzEwX21mcF9hZGRyX21hcCk7CiAJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzEwX2Nsa3JlZ3MpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKaW5kZXggMzZmMDY2MS4uOGIzZDk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKQEAgLTE3LDE2ICsxNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMyMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMzIwLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCBweGEzMjBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTMyMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0gewogCiAJTUZQX0FERFJfWChHUElPMCwgIEdQSU80LCAgIDB4MDEyNCksCiAJTUZQX0FERFJfWChHUElPNSwgIEdQSU85LCAgIDB4MDI4QyksCkBAIC04OSw4ICs4Niw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBweGEzMjBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzIwKCkpIHsKLQkJcHhhM3h4X2luaXRfbWZwKCk7Ci0JCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMyMF9tZnBfYWRkcl9tYXApOworCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKKwkJbWZwX2luaXRfYWRkcihweGEzMjBfbWZwX2FkZHJfbWFwKTsKIAkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMjBfY2xrcmVncykpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCA0OTA4OTM4Li5iMDJkNDU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CkBAIC01MzgsNyArNTM5LDcgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcbiI6IDoiciIodmFsdWUpKTsKIAogCXB4YV9pbml0X2lycSg1NiwgcHhhM3h4X3NldF93YWtlKTsKLQlweGFfaW5pdF9ncGlvKDEyOCwgTlVMTCk7CisJcHhhX2luaXRfZ3BpbyhJUlFfR1BJT18yX3gsIDIsIDEyNywgTlVMTCk7CiB9CiAKIC8qCkBAIC01OTQsNyArNTk1LDcgQEAKIAogCQljbGtzX3JlZ2lzdGVyKHB4YTN4eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTN4eF9jbGtyZWdzKSk7CiAKLQkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoMzIpKSkKKwkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CiAKIAkJcHhhM3h4X2luaXRfcG0oKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKaW5kZXggMTNlNmJmZC4uNzExMzE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKQEAgLTE2LDEwICsxNiw5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGE5MzAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgogCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhOTMwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGE5MzBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSKEdQSU8wLCAweDAyZTApLAogCU1GUF9BRERSKEdQSU8xLCAweDAyZGMpLApAQCAtMTgwLDggKzE3OSw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBweGE5MzBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhOTMwKCkpIHsKLQkJcHhhM3h4X2luaXRfbWZwKCk7Ci0JCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTkzMF9tZnBfYWRkcl9tYXApOworCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKKwkJbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Jlc2V0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jCmluZGV4IDAwYjJkYzIuLmRmMjlkNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Jlc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcmVzZXQuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW9zdC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KIAogdW5zaWduZWQgaW50IHJlc2V0X3N0YXR1czsKQEAgLTgxLDcgKzgxLDcgQEAKIAlPU01SMyA9IE9TQ1IgKyAzNjg2NDA7CS8qIC4uLiBpbiAxMDAgbXMgKi8KIH0KIAotdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljbGVhcl9yZXNldF9zdGF0dXMoUkVTRVRfU1RBVFVTX0FMTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwppbmRleCA1ZDAyYTczLi5mZjgyMzk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCkBAIC0yNSwxMSArMjUsOSBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGE5MzAuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhOTMwLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCmluZGV4IGYwODQ1YzEuLjE2YjRlYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUwppbmRleCBhNjJjODM3Li4yZWQ5NWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KIAogI2RlZmluZSBNRFJFRlJfS0RJVgkweDIwMGE0MDAwCS8vIGFsbCBiYW5rcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggMGQ2MmQzMS4uOGM2MWRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC00NCw5ICs0NCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC03MDksMTAgKzcwNywxMCBAQAogCiBzdGF0aWMgdm9pZCBzcGl0el9wb3dlcm9mZih2b2lkKQogewotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdnJywgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNwaXR6X3Jlc3RhcnQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgc3BpdHpfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBCb290bG9hZGVyIG1hZ2ljIGZvciBhIHJlYm9vdCAqLwogCWlmKChNU0MwICYgMHhmZmZmMDAwMCkgPT0gMHg3ZmYwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCmluZGV4IDA3MmU3N2MuLjJlNDQ5MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYwpAQCAtMjQsNyArMjQsNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGl0ei5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgInNoYXJwc2wuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKaW5kZXggNmY0MjAwNC4uOTY1ZTM4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KIAogI2RlZmluZSBUSU1FT1VUIDEwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhbmRieS5TIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhbmRieS5TCmluZGV4IGYzODIxY2YuLjI5ZjVmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3N0YW5kYnkuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KIAogCQkudGV4dApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKaW5kZXggNThlZjA4YS4uYjc1MzUzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCkBAIC0yMiw5ICsyMiw4IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTkzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGE5MzAuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwppbmRleCA5NTY1NmE3Li44ZWIzODMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCkBAIC0yMiw4ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW9zdC5oPgogCiAvKgogICogVGhpcyBpcyBQWEEncyBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgYSByZXNvbHV0aW9uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggMzMzMmU1ZC4uNmU4YWRlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMzYsOCArMzYsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgpAQCAtODc2LDEwICs4NzYsMTAgQEAKIAogc3RhdGljIHZvaWQgdG9zYV9wb3dlcm9mZih2b2lkKQogewotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdnJywgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRvc2FfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCB0b3NhX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogQm9vdGxvYWRlciBtYWdpYyBmb3IgYSByZWJvb3QgKi8KIAlpZigoTVNDMCAmIDB4ZmZmZjAwMDApID09IDB4N2ZmMDAwMDApCkBAIC05MTksNyArOTE5LDcgQEAKIAlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZweGFfc3NwX21hc3Rlcl9pbmZvKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOwogCi0JY2xrX2FkZF9hbGlhcygiQ0xLX0NLM1A2TUkiLCAmdGM2MzkzeGJfZGV2aWNlLmRldiwgIkdQSU8xMV9DTEsiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsIHRjNjM5M3hiX2RldmljZS5uYW1lLCAiR1BJTzExX0NMSyIsIE5VTEwpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCBhNzJlM2FkLi5mNzljOWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTM5LDEwICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC90cml6ZXBzNC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IDRiMzEyMGQuLjBlNjUzNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtNDIsMTIgKzQyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL3ZpcGVyLmg+CiAKQEAgLTk1Niw3ICs5NTMsNyBAQAogCX0sCiAJewogCQkudmlydHVhbCA9IFZJUEVSX1BDMTA0SU9fQkFTRSwKLQkJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKF9QQ01DSUExSU8pLAorCQkucGZuICAgICA9IF9fcGh5c190b19wZm4oMHgzMDAwMDAwMCksCiAJCS5sZW5ndGggID0gMHgwMDgwMDAwMCwKIAkJLnR5cGUgICAgPSBNVF9ERVZJQ0UsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKaW5kZXggNDY1Mzg4OC4uYzFmNzMyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKQEAgLTE4LDkgKzE4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMzAwLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL3p5bG9uaXRlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMKaW5kZXggMjhlNGU2Mi4uNGUxYzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzIwLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMjAuaD4KICNpbmNsdWRlIDxtYWNoL3p5bG9uaXRlLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggYWQ5MTE4NS4uYjZlYzEwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtMzUsNiArMzUsNyBAQAogCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMU1QQ29yZSBwbGF0Zm9ybSIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgSEFWRV9QQVRBX1BMQVRGT1JNCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IE1QQ29yZSBQbGF0Zm9ybSBCYXNlYm9hcmQuCiAJICBQQjExTVBDb3JlIGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCkBAIC01MSw2ICs1Miw3IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQi1BOCBwbGF0Zm9ybSIKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgSEFWRV9QQVRBX1BMQVRGT1JNCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IENvcnRleC1BOCBQbGF0Zm9ybSBCYXNlYm9hcmQuCiAJICBQQi1BOCBpcyBhIHBsYXRmb3JtIHdpdGggYW4gb24tYm9hcmQgQ29ydGV4LUE4IGFuZCBoYXMgc3VwcG9ydCBmb3IKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggYmQyYWE0Zi4uZDY3NjY2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTUwLDYgKzE1MSw0NCBAQAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2V0aF9kZXZpY2UpOwogfQogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3VzYl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJpc3AxNzYwIiwKKwkubnVtX3Jlc291cmNlcwkJPSAyLAorfTsKKworaW50IHJlYWx2aWV3X3VzYl9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlyZWFsdmlld191c2JfZGV2aWNlLnJlc291cmNlID0gcmVzOworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X3VzYl9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IHBhdGFfcGxhdGZvcm1faW5mbyBwYXRhX3BsYXRmb3JtX2RhdGEgPSB7CisJLmlvcG9ydF9zaGlmdAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYXRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX0NGX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfQ0ZfQkFTRSArIDB4ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX0NGX0JBU0UgKyAweDEwMCwKKwkJLmVuZAkJPSBSRUFMVklFV19DRl9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfY2ZfZGV2aWNlID0geworCS5uYW1lCQkJPSAicGF0YV9wbGF0Zm9ybSIsCisJLmlkCQkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHBhdGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gcGF0YV9yZXNvdXJjZXMsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYXRhX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfaTJjX3Jlc291cmNlID0gewogCS5zdGFydAkJPSBSRUFMVklFV19JMkNfQkFTRSwKIAkuZW5kCQk9IFJFQUxWSUVXX0kyQ19CQVNFICsgU1pfNEsgLSAxLApAQCAtMTU4LDExICsxOTcsMjUgQEAKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlID0gewogCS5uYW1lCQk9ICJ2ZXJzYXRpbGUtaTJjIiwKLQkuaWQJCT0gLTEsCisJLmlkCQk9IDAsCiAJLm51bV9yZXNvdXJjZXMJPSAxLAogCS5yZXNvdXJjZQk9ICZyZWFsdmlld19pMmNfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHJlYWx2aWV3X2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicnRjLWRzMTMwNyIsIDB4ZDAgPj4gMSksCisJCS50eXBlID0gImRzMTMzOCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJlYWx2aWV3X2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHJlYWx2aWV3X2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHJlYWx2aWV3X2kyY19ib2FyZF9pbmZvKSk7Cit9CithcmNoX2luaXRjYWxsKHJlYWx2aWV3X2kyY19pbml0KTsKKwogI2RlZmluZSBSRUFMVklFV19TWVNNQ0kJKF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfTUNJX09GRlNFVCkKIAogc3RhdGljIHVuc2lnbmVkIGludCByZWFsdmlld19tbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKaW5kZXggNDQyNjliMS4uMjFjMDg2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfZmxhc2hfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfY2ZfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfaTJjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGE7CiBleHRlcm4gc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwpAQCAtNjIsNSArNjMsNiBAQAogZXh0ZXJuIHZvaWQgcmVhbHZpZXdfdGltZXJfaW5pdCh1bnNpZ25lZCBpbnQgdGltZXJfaXJxKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBudW0pOwogZXh0ZXJuIGludCByZWFsdmlld19ldGhfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICpyZXMpOworZXh0ZXJuIGludCByZWFsdmlld191c2JfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiYTguaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiYTguaAppbmRleCBjOGJlZDhmLi4zMDdmOTdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYmE4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGJhOC5oCkBAIC00NSw4ICs0NSw2IEBACiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfRE1DX0JBU0UJCQkweDEwMEUwMDAwCS8qIERNQyBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfU01DX0JBU0UJCQkweDEwMEUxMDAwCS8qIFNNQyBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfQ0FOX0JBU0UJCQkweDEwMEUyMDAwCS8qIENBTiBidXMgKi8KLSNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DRl9CQVNFCQkJMHgxODAwMDAwMAkvKiBDb21wYWN0IGZsYXNoICovCi0jZGVmaW5lIFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UJCTB4MTgwMDMwMDAJLyogU01DIGZvciBDb21wYWN0IGZsYXNoICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfR0lDX0NQVV9CQVNFCQkweDFFMDAwMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLwogI2RlZmluZSBSRUFMVklFV19QQkE4X0ZMQVNIMF9CQVNFCQkweDQwMDAwMDAwCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfRkxBU0gwX1NJWkUJCVNaXzY0TQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggNzkzYTNhMy4uYzhmNTA4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCkBAIC0yMDQsNiArMjA0LDEyIEBACiAjZGVmaW5lIFJFQUxWSUVXX0xUX0JBU0UgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogTG9naWMgVGlsZSBleHBhbnNpb24gKi8KIAogLyoKKyAqIENvbXBhY3RGbGFzaAorICovCisjZGVmaW5lIFJFQUxWSUVXX0NGX0JBU0UJCTB4MTgwMDAwMDAJLyogQ29tcGFjdEZsYXNoICovCisjZGVmaW5lIFJFQUxWSUVXX0NGX01FTV9CQVNFCQkweDE4MDAzMDAwCS8qIFNNQyBmb3IgQ29tcGFjdEZsYXNoICovCisKKy8qCiAgKiBEaXNrIG9uIENoaXAKICAqLwogI2RlZmluZSBSRUFMVklFV19ET0NfQkFTRSAgICAgICAgICAgICAweDJDMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGEyZjYxYzcuLjFhMTVhNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zNCw3ICszNCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOwogCXVuc2lnbmVkIGludCB2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYmVkMzllZC4uYzIwZmJlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMjY0LDYgKzI2NCwxOSBAQAogCXJldHVybiByZWFsdmlld19ldGhfcmVnaXN0ZXIobmFtZSwgcmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlcyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfZWJfaXNwMTc2MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19FQl9VU0JfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19FQl9VU0JfQkFTRSArIFNaXzEyOEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBJUlFfRUJfVVNCLAorCQkuZW5kCQk9IElSUV9FQl9VU0IsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGdpY19pbml0X2lycSh2b2lkKQogewogCWlmIChjb3JlX3RpbGVfZWIxMW1wKCkgfHwgY29yZV90aWxlX2E5bXAoKSkgewpAQCAtMzIzLDYgKzMzNiw4IEBACiAJLyogcGxhdGZvcm0gZGV2aWNlcyAqLwogCXJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXNbMV0uc3RhcnQJPSBJUlFfRUIxMU1QX0VUSDsKIAlyZWFsdmlld19lYl9ldGhfcmVzb3VyY2VzWzFdLmVuZAk9IElSUV9FQjExTVBfRVRIOworCXJlYWx2aWV3X2ViX2lzcDE3NjFfcmVzb3VyY2VzWzFdLnN0YXJ0CT0gSVJRX0VCMTFNUF9VU0I7CisJcmVhbHZpZXdfZWJfaXNwMTc2MV9yZXNvdXJjZXNbMV0uZW5kCT0gSVJRX0VCMTFNUF9VU0I7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19lYl90aW1lcl9pbml0KHZvaWQpCkBAIC0zNjYsNiArMzgxLDcgQEAKIAlyZWFsdmlld19mbGFzaF9yZWdpc3RlcigmcmVhbHZpZXdfZWJfZmxhc2hfcmVzb3VyY2UsIDEpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7CiAJZXRoX2RldmljZV9yZWdpc3RlcigpOworCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKaW5kZXggOGYwNjgzYy4uYTY0Yjg0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0yMjIsNiArMjIyLDE5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfcGIxMTc2X2lzcDE3NjFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMTc2X1VTQl9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTE3Nl9VU0JfQkFTRSArIFNaXzEyOEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBJUlFfUEIxMTc2X1VTQiwKKwkJLmVuZAkJPSBJUlFfUEIxMTc2X1VTQiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogQVJNMTE3NiBEZXZDaGlwIEdJQywgcHJpbWFyeSAqLwpAQCAtMjYwLDYgKzI3Myw4IEBACiAKIAlyZWFsdmlld19mbGFzaF9yZWdpc3RlcigmcmVhbHZpZXdfcGIxMTc2X2ZsYXNoX3Jlc291cmNlLCAxKTsKIAlyZWFsdmlld19ldGhfcmVnaXN0ZXIoTlVMTCwgcmVhbHZpZXdfcGIxMTc2X3Ntc2M5MTF4X3Jlc291cmNlcyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKKwlyZWFsdmlld191c2JfcmVnaXN0ZXIocmVhbHZpZXdfcGIxMTc2X2lzcDE3NjFfcmVzb3VyY2VzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwppbmRleCAzZWJkYjJkLi5lYTFlNjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKQEAgLTIzMCwzMSArMjMwLDE5IEBACiAJfSwKIH07CiAKLXN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYjExbXBfY2ZfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTFtcF9pc3AxNzYxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCMTFNUF9DRl9CQVNFLAotCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTFNUF9DRl9CQVNFICsgU1pfNEsgLSAxLAorCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX1VTQl9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTFNUF9VU0JfQkFTRSArIFNaXzEyOEsgLSAxLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfTUVNX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX01FTV9CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAkJPSAtMSwJCS8qIEZJWE1FOiBGaW5kIGNvcnJlY3QgaXJxICovCi0JCS5lbmQJCT0gLTEsCisJCS5zdGFydAkJPSBJUlFfVEMxMU1QX1VTQiwKKwkJLmVuZAkJPSBJUlFfVEMxMU1QX1VTQiwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3BiMTFtcF9jZl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImNvbXBhY3RmbGFzaCIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHBsZGN0cmw7CkBAIC0zMDgsNyArMjk2LDggQEAKIAkJCQlBUlJBWV9TSVpFKHJlYWx2aWV3X3BiMTFtcF9mbGFzaF9yZXNvdXJjZSkpOwogCXJlYWx2aWV3X2V0aF9yZWdpc3RlcihOVUxMLCByZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfcGIxMW1wX2NmX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19jZl9kZXZpY2UpOworCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19wYjExbXBfaXNwMTc2MV9yZXNvdXJjZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKaW5kZXggMzRjOTQ0My4uZDZhYzFlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKQEAgLTIyMSwzMSArMjIxLDE5IEBACiAJfSwKIH07CiAKLXN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYmE4X2NmX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYmE4X2lzcDE3NjFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEJBOF9DRl9CQVNFLAotCQkuZW5kCQk9IFJFQUxWSUVXX1BCQThfQ0ZfQkFTRSArIFNaXzRLIC0gMSwKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfVVNCX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9VU0JfQkFTRSArIFNaXzEyOEsgLSAxLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAkJPSBSRUFMVklFV19QQkE4X0NGX01FTV9CQVNFLAotCQkuZW5kCQk9IFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CQk9IC0xLAkJLyogRklYTUU6IEZpbmQgY29ycmVjdCBpcnEgKi8KLQkJLmVuZAkJPSAtMSwKKwkJLnN0YXJ0CQk9IElSUV9QQkE4X1VTQiwKKwkJLmVuZAkJPSBJUlFfUEJBOF9VU0IsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19wYmE4X2NmX2RldmljZSA9IHsKLQkubmFtZQkJPSAiY29tcGFjdGZsYXNoIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfcGJhOF9jZl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHJlYWx2aWV3X3BiYThfY2ZfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGdpY19pbml0X2lycSh2b2lkKQogewogCS8qIEFSTSBQQi1BOCBvbi1ib2FyZCBHSUMgKi8KQEAgLTI3Niw3ICsyNjQsOCBAQAogCQkJCUFSUkFZX1NJWkUocmVhbHZpZXdfcGJhOF9mbGFzaF9yZXNvdXJjZSkpOwogCXJlYWx2aWV3X2V0aF9yZWdpc3RlcihOVUxMLCByZWFsdmlld19wYmE4X3Ntc2M5MTF4X3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X3BiYThfY2ZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2NmX2RldmljZSk7CisJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BiYThfaXNwMTc2MV9yZXNvdXJjZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMKaW5kZXggNzk1OGEzMC4uYzQ3ZDk3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMKQEAgLTI2LDYgKzI2LDE2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KIAorc3RydWN0IGlvbWRfZG1hIHsKKwlzdHJ1Y3QgZG1hX3N0cnVjdAlkbWE7CisJdW5zaWduZWQgaW50CQlzdGF0ZTsKKwl1bnNpZ25lZCBsb25nCQliYXNlOwkJLyogQ29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8KKwlpbnQJCQlpcnE7CQkvKiBDb250cm9sbGVyIElSUSAqLworCXN0cnVjdCBzY2F0dGVybGlzdAljdXJfc2c7CQkvKiBDdXJyZW50IGNvbnRyb2xsZXIgYnVmZmVyICovCisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJdW5zaWduZWQgaW50CQlkbWFfbGVuOworfTsKKwogI2lmIDAKIHR5cGVkZWYgZW51bSB7CiAJZG1hX3NpemVfOAk9IDEsCkBAIC00NCwxNSArNTQsMTUgQEAKICNkZWZpbmUgQ1IJKElPTURfSU8wQ1IgLSBJT01EX0lPMENVUkEpCiAjZGVmaW5lIFNUCShJT01EX0lPMFNUIC0gSU9NRF9JTzBDVVJBKQogCi1zdGF0aWMgdm9pZCBpb21kX2dldF9uZXh0X3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2dldF9uZXh0X3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdCBpb21kX2RtYSAqaWRtYSkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCwgb2Zmc2V0LCBmbGFncyA9IDA7CiAKLQlpZiAoZG1hLT5zZykgewotCQlzZy0+ZG1hX2FkZHJlc3MgPSBkbWEtPnNnLT5kbWFfYWRkcmVzczsKKwlpZiAoaWRtYS0+ZG1hLnNnKSB7CisJCXNnLT5kbWFfYWRkcmVzcyA9IGlkbWEtPmRtYV9hZGRyOwogCQlvZmZzZXQgPSBzZy0+ZG1hX2FkZHJlc3MgJiB+UEFHRV9NQVNLOwogCi0JCWVuZCA9IG9mZnNldCArIGRtYS0+c2ctPmxlbmd0aDsKKwkJZW5kID0gb2Zmc2V0ICsgaWRtYS0+ZG1hX2xlbjsKIAogCQlpZiAoZW5kID4gUEFHRV9TSVpFKQogCQkJZW5kID0gUEFHRV9TSVpFOwpAQCAtNjIsMTUgKzcyLDE3IEBACiAKIAkJc2ctPmxlbmd0aCA9IGVuZCAtIFRSQU5TRkVSX1NJWkU7CiAKLQkJZG1hLT5zZy0+bGVuZ3RoIC09IGVuZCAtIG9mZnNldDsKLQkJZG1hLT5zZy0+ZG1hX2FkZHJlc3MgKz0gZW5kIC0gb2Zmc2V0OworCQlpZG1hLT5kbWFfbGVuIC09IGVuZCAtIG9mZnNldDsKKwkJaWRtYS0+ZG1hX2FkZHIgKz0gZW5kIC0gb2Zmc2V0OwogCi0JCWlmIChkbWEtPnNnLT5sZW5ndGggPT0gMCkgewotCQkJaWYgKGRtYS0+c2djb3VudCA+IDEpIHsKLQkJCQlkbWEtPnNnKys7Ci0JCQkJZG1hLT5zZ2NvdW50LS07CisJCWlmIChpZG1hLT5kbWFfbGVuID09IDApIHsKKwkJCWlmIChpZG1hLT5kbWEuc2djb3VudCA+IDEpIHsKKwkJCQlpZG1hLT5kbWEuc2cgPSBzZ19uZXh0KGlkbWEtPmRtYS5zZyk7CisJCQkJaWRtYS0+ZG1hX2FkZHIgPSBpZG1hLT5kbWEuc2ctPmRtYV9hZGRyZXNzOworCQkJCWlkbWEtPmRtYV9sZW4gPSBpZG1hLT5kbWEuc2ctPmxlbmd0aDsKKwkJCQlpZG1hLT5kbWEuc2djb3VudC0tOwogCQkJfSBlbHNlIHsKLQkJCQlkbWEtPnNnID0gTlVMTDsKKwkJCQlpZG1hLT5kbWEuc2cgPSBOVUxMOwogCQkJCWZsYWdzIHw9IERNQV9FTkRfUzsKIAkJCX0KIAkJfQpAQCAtODUsOCArOTcsOCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW9tZF9kbWFfaGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlkbWFfdCAqZG1hID0gKGRtYV90ICopZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGRtYS0+ZG1hX2Jhc2U7CisJc3RydWN0IGlvbWRfZG1hICppZG1hID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGlkbWEtPmJhc2U7CiAKIAlkbyB7CiAJCXVuc2lnbmVkIGludCBzdGF0dXM7CkBAIC05NSw5MyArMTA3LDk5IEBACiAJCWlmICghKHN0YXR1cyAmIERNQV9TVF9JTlQpKQogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JCWlmICgoZG1hLT5zdGF0ZSBeIHN0YXR1cykgJiBETUFfU1RfQUIpCi0JCQlpb21kX2dldF9uZXh0X3NnKCZkbWEtPmN1cl9zZywgZG1hKTsKKwkJaWYgKChpZG1hLT5zdGF0ZSBeIHN0YXR1cykgJiBETUFfU1RfQUIpCisJCQlpb21kX2dldF9uZXh0X3NnKCZpZG1hLT5jdXJfc2csIGlkbWEpOwogCiAJCXN3aXRjaCAoc3RhdHVzICYgKERNQV9TVF9PRkwgfCBETUFfU1RfQUIpKSB7CiAJCWNhc2UgRE1BX1NUX09GTDoJCQkvKiBPSUEgKi8KIAkJY2FzZSBETUFfU1RfQUI6CQkJCS8qIC5JQiAqLwotCQkJaW9tZF93cml0ZWwoZG1hLT5jdXJfc2cuZG1hX2FkZHJlc3MsIGJhc2UgKyBDVVJBKTsKLQkJCWlvbWRfd3JpdGVsKGRtYS0+Y3VyX3NnLmxlbmd0aCwgYmFzZSArIEVOREEpOwotCQkJZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKKwkJCWlvbWRfd3JpdGVsKGlkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkEpOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmxlbmd0aCwgYmFzZSArIEVOREEpOworCQkJaWRtYS0+c3RhdGUgPSBETUFfU1RfQUI7CiAJCQlicmVhazsKIAogCQljYXNlIERNQV9TVF9PRkwgfCBETUFfU1RfQUI6CQkvKiBPSUIgKi8KIAkJY2FzZSAwOgkJCQkJLyogLklBICovCi0JCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkIpOwotCQkJaW9tZF93cml0ZWwoZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQik7Ci0JCQlkbWEtPnN0YXRlID0gMDsKKwkJCWlvbWRfd3JpdGVsKGlkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkIpOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmxlbmd0aCwgYmFzZSArIEVOREIpOworCQkJaWRtYS0+c3RhdGUgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoc3RhdHVzICYgRE1BX1NUX09GTCAmJgotCQkgICAgZG1hLT5jdXJfc2cubGVuZ3RoID09IChETUFfRU5EX1N8RE1BX0VORF9MKSkKKwkJICAgIGlkbWEtPmN1cl9zZy5sZW5ndGggPT0gKERNQV9FTkRfU3xETUFfRU5EX0wpKQogCQkJYnJlYWs7CiAJfSB3aGlsZSAoMSk7CiAKLQlkbWEtPnN0YXRlID0gfkRNQV9TVF9BQjsKKwlpZG1hLT5zdGF0ZSA9IH5ETUFfU1RfQUI7CiAJZGlzYWJsZV9pcnEoaXJxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBpb21kX3JlcXVlc3RfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyBpbnQgaW9tZF9yZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoZG1hLT5kbWFfaXJxLCBpb21kX2RtYV9oYW5kbGUsCi0JCQkgICBJUlFGX0RJU0FCTEVELCBkbWEtPmRldmljZV9pZCwgZG1hKTsKKwlzdHJ1Y3QgaW9tZF9kbWEgKmlkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgaW9tZF9kbWEsIGRtYSk7CisKKwlyZXR1cm4gcmVxdWVzdF9pcnEoaWRtYS0+aXJxLCBpb21kX2RtYV9oYW5kbGUsCisJCQkgICBJUlFGX0RJU0FCTEVELCBpZG1hLT5kbWEuZGV2aWNlX2lkLCBpZG1hKTsKIH0KIAotc3RhdGljIHZvaWQgaW9tZF9mcmVlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2ZyZWVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCWZyZWVfaXJxKGRtYS0+ZG1hX2lycSwgZG1hKTsKKwlzdHJ1Y3QgaW9tZF9kbWEgKmlkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgaW9tZF9kbWEsIGRtYSk7CisKKwlmcmVlX2lycShpZG1hLT5pcnEsIGlkbWEpOwogfQogCi1zdGF0aWMgdm9pZCBpb21kX2VuYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIHZvaWQgaW9tZF9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gaWRtYS0+YmFzZTsKIAl1bnNpZ25lZCBpbnQgY3RybCA9IFRSQU5TRkVSX1NJWkUgfCBETUFfQ1JfRTsKIAotCWlmIChkbWEtPmludmFsaWQpIHsKLQkJZG1hLT5pbnZhbGlkID0gMDsKKwlpZiAoaWRtYS0+ZG1hLmludmFsaWQpIHsKKwkJaWRtYS0+ZG1hLmludmFsaWQgPSAwOwogCiAJCS8qCiAJCSAqIENvcGUgd2l0aCBJU0Etc3R5bGUgZHJpdmVycyB3aGljaCBleHBlY3QgY2FjaGUKIAkJICogY29oZXJlbmNlLgogCQkgKi8KLQkJaWYgKCFkbWEtPnNnKSB7Ci0JCQlkbWEtPnNnID0gJmRtYS0+YnVmOwotCQkJZG1hLT5zZ2NvdW50ID0gMTsKLQkJCWRtYS0+YnVmLmxlbmd0aCA9IGRtYS0+Y291bnQ7Ci0JCQlkbWEtPmJ1Zi5kbWFfYWRkcmVzcyA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsCi0JCQkJZG1hLT5hZGRyLCBkbWEtPmNvdW50LAotCQkJCWRtYS0+ZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCA/CisJCWlmICghaWRtYS0+ZG1hLnNnKSB7CisJCQlpZG1hLT5kbWEuc2cgPSAmaWRtYS0+ZG1hLmJ1ZjsKKwkJCWlkbWEtPmRtYS5zZ2NvdW50ID0gMTsKKwkJCWlkbWEtPmRtYS5idWYubGVuZ3RoID0gaWRtYS0+ZG1hLmNvdW50OworCQkJaWRtYS0+ZG1hLmJ1Zi5kbWFfYWRkcmVzcyA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsCisJCQkJaWRtYS0+ZG1hLmFkZHIsIGlkbWEtPmRtYS5jb3VudCwKKwkJCQlpZG1hLT5kbWEuZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCA/CiAJCQkJRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CiAJCX0KIAogCQlpb21kX3dyaXRlYihETUFfQ1JfQywgZG1hX2Jhc2UgKyBDUik7Ci0JCWRtYS0+c3RhdGUgPSBETUFfU1RfQUI7CisJCWlkbWEtPnN0YXRlID0gRE1BX1NUX0FCOwogCX0KLQkJCi0JaWYgKGRtYS0+ZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCkKKworCWlmIChpZG1hLT5kbWEuZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCkKIAkJY3RybCB8PSBETUFfQ1JfRDsKIAogCWlvbWRfd3JpdGViKGN0cmwsIGRtYV9iYXNlICsgQ1IpOwotCWVuYWJsZV9pcnEoZG1hLT5kbWFfaXJxKTsKKwllbmFibGVfaXJxKGlkbWEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvbWRfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIHZvaWQgaW9tZF9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKLQl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gZG1hLT5kbWFfYmFzZTsKKwlzdHJ1Y3QgaW9tZF9kbWEgKmlkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgaW9tZF9kbWEsIGRtYSk7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGlkbWEtPmJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoZG1hLT5zdGF0ZSAhPSB+RE1BX1NUX0FCKQotCQlkaXNhYmxlX2lycShkbWEtPmRtYV9pcnEpOworCWlmIChpZG1hLT5zdGF0ZSAhPSB+RE1BX1NUX0FCKQorCQlkaXNhYmxlX2lycShpZG1hLT5pcnEpOwogCWlvbWRfd3JpdGViKDAsIGRtYV9iYXNlICsgQ1IpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBpb21kX3NldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hLCBpbnQgY3ljbGUpCitzdGF0aWMgaW50IGlvbWRfc2V0X2RtYV9zcGVlZCh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSwgaW50IGN5Y2xlKQogewogCWludCB0Y3IsIHNwZWVkOwogCkBAIC0xOTcsNyArMjE1LDcgQEAKIAl0Y3IgPSBpb21kX3JlYWRiKElPTURfRE1BVENSKTsKIAlzcGVlZCAmPSAzOwogCi0Jc3dpdGNoIChjaGFubmVsKSB7CisJc3dpdGNoIChjaGFuKSB7CiAJY2FzZSBETUFfMDoKIAkJdGNyID0gKHRjciAmIH4weDAzKSB8IHNwZWVkOwogCQlicmVhazsKQEAgLTIzNiwxNiArMjU0LDIyIEBACiAJLm5hbWUJPSAiZmxvcHB5ZG1hIgogfTsKIAotc3RhdGljIHZvaWQgZmxvcHB5X2VuYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RydWN0IGZsb3BweV9kbWEgeworCXN0cnVjdCBkbWFfc3RydWN0CWRtYTsKKwl1bnNpZ25lZCBpbnQJCWZpcTsKK307CisKK3N0YXRpYyB2b2lkIGZsb3BweV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogeworCXN0cnVjdCBmbG9wcHlfZG1hICpmZG1hID0gY29udGFpbmVyX29mKGRtYSwgc3RydWN0IGZsb3BweV9kbWEsIGRtYSk7CiAJdm9pZCAqZmlxaGFuZGxlcl9zdGFydDsKIAl1bnNpZ25lZCBpbnQgZmlxaGFuZGxlcl9sZW5ndGg7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAotCWlmIChkbWEtPnNnKQorCWlmIChmZG1hLT5kbWEuc2cpCiAJCUJVRygpOwogCi0JaWYgKGRtYS0+ZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCkgeworCWlmIChmZG1hLT5kbWEuZG1hX21vZGUgPT0gRE1BX01PREVfUkVBRCkgewogCQlleHRlcm4gdW5zaWduZWQgY2hhciBmbG9wcHlfZmlxaW5fc3RhcnQsIGZsb3BweV9maXFpbl9lbmQ7CiAJCWZpcWhhbmRsZXJfc3RhcnQgPSAmZmxvcHB5X2ZpcWluX3N0YXJ0OwogCQlmaXFoYW5kbGVyX2xlbmd0aCA9ICZmbG9wcHlfZmlxaW5fZW5kIC0gJmZsb3BweV9maXFpbl9zdGFydDsKQEAgLTI1NSw4ICsyNzksOCBAQAogCQlmaXFoYW5kbGVyX2xlbmd0aCA9ICZmbG9wcHlfZmlxb3V0X2VuZCAtICZmbG9wcHlfZmlxb3V0X3N0YXJ0OwogCX0KIAotCXJlZ3MuQVJNX3I5ICA9IGRtYS0+Y291bnQ7Ci0JcmVncy5BUk1fcjEwID0gKHVuc2lnbmVkIGxvbmcpZG1hLT5hZGRyOworCXJlZ3MuQVJNX3I5ICA9IGZkbWEtPmRtYS5jb3VudDsKKwlyZWdzLkFSTV9yMTAgPSAodW5zaWduZWQgbG9uZylmZG1hLT5kbWEuYWRkcjsKIAlyZWdzLkFSTV9mcCAgPSAodW5zaWduZWQgbG9uZylGTE9QUFlETUFfQkFTRTsKIAogCWlmIChjbGFpbV9maXEoJmZoKSkgewpAQCAtMjY2LDE2ICsyOTAsMTcgQEAKIAogCXNldF9maXFfaGFuZGxlcihmaXFoYW5kbGVyX3N0YXJ0LCBmaXFoYW5kbGVyX2xlbmd0aCk7CiAJc2V0X2ZpcV9yZWdzKCZyZWdzKTsKLQllbmFibGVfZmlxKGRtYS0+ZG1hX2lycSk7CisJZW5hYmxlX2ZpcShmZG1hLT5maXEpOwogfQogCi1zdGF0aWMgdm9pZCBmbG9wcHlfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIHZvaWQgZmxvcHB5X2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCWRpc2FibGVfZmlxKGRtYS0+ZG1hX2lycSk7CisJc3RydWN0IGZsb3BweV9kbWEgKmZkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgZmxvcHB5X2RtYSwgZG1hKTsKKwlkaXNhYmxlX2ZpcShmZG1hLT5maXEpOwogCXJlbGVhc2VfZmlxKCZmaCk7CiB9CiAKLXN0YXRpYyBpbnQgZmxvcHB5X2dldF9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyBpbnQgZmxvcHB5X2dldF9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CiAJZ2V0X2ZpcV9yZWdzKCZyZWdzKTsKQEAgLTI5Miw3ICszMTcsNyBAQAogLyoKICAqIFRoaXMgaXMgdmlydHVhbCBETUEgLSB3ZSBkb24ndCBuZWVkIGFueXRoaW5nIGhlcmUuCiAgKi8KLXN0YXRpYyB2b2lkIHNvdW5kX2VuYWJsZV9kaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBzb3VuZF9lbmFibGVfZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CiB9CiAKQEAgLTMwMiw4ICszMjcsMjQgQEAKIAkuZGlzYWJsZQk9IHNvdW5kX2VuYWJsZV9kaXNhYmxlX2RtYSwKIH07CiAKLXZvaWQgX19pbml0IGFyY2hfZG1hX2luaXQoZG1hX3QgKmRtYSkKK3N0YXRpYyBzdHJ1Y3QgaW9tZF9kbWEgaW9tZF9kbWFbNl07CisKK3N0YXRpYyBzdHJ1Y3QgZmxvcHB5X2RtYSBmbG9wcHlfZG1hID0geworCS5kbWEJCT0geworCQkuZF9vcHMJPSAmZmxvcHB5X2RtYV9vcHMsCisJfSwKKwkuZmlxCQk9IEZJUV9GTE9QUFlEQVRBLAorfTsKKworc3RhdGljIGRtYV90IHNvdW5kX2RtYSA9IHsKKwkuZF9vcHMJCT0gJnNvdW5kX2RtYV9vcHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBycGNfZG1hX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCiAJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzBDUik7CiAJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzFDUik7CiAJaW9tZF93cml0ZWIoMCwgSU9NRF9JTzJDUik7CkBAIC0zMTEsMzEgKzM1MiwzOSBAQAogCiAJaW9tZF93cml0ZWIoMHhhMCwgSU9NRF9ETUFUQ1IpOwogCi0JZG1hW0RNQV8wXS5kbWFfYmFzZQkJPSBJT01EX0lPMENVUkE7Ci0JZG1hW0RNQV8wXS5kbWFfaXJxCQk9IElSUV9ETUEwOwotCWRtYVtETUFfMF0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BXzFdLmRtYV9iYXNlCQk9IElPTURfSU8xQ1VSQTsKLQlkbWFbRE1BXzFdLmRtYV9pcnEJCT0gSVJRX0RNQTE7Ci0JZG1hW0RNQV8xXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfMl0uZG1hX2Jhc2UJCT0gSU9NRF9JTzJDVVJBOwotCWRtYVtETUFfMl0uZG1hX2lycQkJPSBJUlFfRE1BMjsKLQlkbWFbRE1BXzJdLmRfb3BzCQk9ICZpb21kX2RtYV9vcHM7Ci0JZG1hW0RNQV8zXS5kbWFfYmFzZQkJPSBJT01EX0lPM0NVUkE7Ci0JZG1hW0RNQV8zXS5kbWFfaXJxCQk9IElSUV9ETUEzOwotCWRtYVtETUFfM10uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BX1MwXS5kbWFfYmFzZQkJPSBJT01EX1NEMENVUkE7Ci0JZG1hW0RNQV9TMF0uZG1hX2lycQkJPSBJUlFfRE1BUzA7Ci0JZG1hW0RNQV9TMF0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BX1MxXS5kbWFfYmFzZQkJPSBJT01EX1NEMUNVUkE7Ci0JZG1hW0RNQV9TMV0uZG1hX2lycQkJPSBJUlFfRE1BUzE7Ci0JZG1hW0RNQV9TMV0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BX1ZJUlRVQUxfRkxPUFBZXS5kbWFfaXJxCT0gRklRX0ZMT1BQWURBVEE7Ci0JZG1hW0RNQV9WSVJUVUFMX0ZMT1BQWV0uZF9vcHMJPSAmZmxvcHB5X2RtYV9vcHM7Ci0JZG1hW0RNQV9WSVJUVUFMX1NPVU5EXS5kX29wcwk9ICZzb3VuZF9kbWFfb3BzOwotCiAJLyoKIAkgKiBTZXR1cCBETUEgY2hhbm5lbHMgMiwzIHRvIGJlIGZvciBwb2R1bGVzCiAJICogYW5kIGNoYW5uZWxzIDAsMSBmb3IgaW50ZXJuYWwgZGV2aWNlcwogCSAqLwogCWlvbWRfd3JpdGViKERNQV9FWFRfSU8zfERNQV9FWFRfSU8yLCBJT01EX0RNQUVYVCk7CisKKwlpb21kX2RtYVtETUFfMF0uYmFzZQk9IElPTURfSU8wQ1VSQTsKKwlpb21kX2RtYVtETUFfMF0uaXJxCT0gSVJRX0RNQTA7CisJaW9tZF9kbWFbRE1BXzFdLmJhc2UJPSBJT01EX0lPMUNVUkE7CisJaW9tZF9kbWFbRE1BXzFdLmlycQk9IElSUV9ETUExOworCWlvbWRfZG1hW0RNQV8yXS5iYXNlCT0gSU9NRF9JTzJDVVJBOworCWlvbWRfZG1hW0RNQV8yXS5pcnEJPSBJUlFfRE1BMjsKKwlpb21kX2RtYVtETUFfM10uYmFzZQk9IElPTURfSU8zQ1VSQTsKKwlpb21kX2RtYVtETUFfM10uaXJxCT0gSVJRX0RNQTM7CisJaW9tZF9kbWFbRE1BX1MwXS5iYXNlCT0gSU9NRF9TRDBDVVJBOworCWlvbWRfZG1hW0RNQV9TMF0uaXJxCT0gSVJRX0RNQVMwOworCWlvbWRfZG1hW0RNQV9TMV0uYmFzZQk9IElPTURfU0QxQ1VSQTsKKwlpb21kX2RtYVtETUFfUzFdLmlycQk9IElSUV9ETUFTMTsKKworCWZvciAoaSA9IERNQV8wOyBpIDw9IERNQV9TMTsgaSsrKSB7CisJCWlvbWRfZG1hW2ldLmRtYS5kX29wcyA9ICZpb21kX2RtYV9vcHM7CisKKwkJcmV0ID0gaXNhX2RtYV9hZGQoaSwgJmlvbWRfZG1hW2ldLmRtYSk7CisJCWlmIChyZXQpCisJCQlwcmludGsoIklPTURETUEldTogdW5hYmxlIHRvIHJlZ2lzdGVyOiAlZFxuIiwgaSwgcmV0KTsKKwl9CisKKwlyZXQgPSBpc2FfZG1hX2FkZChETUFfVklSVFVBTF9GTE9QUFksICZmbG9wcHlfZG1hLmRtYSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKCJJT01ERkxPUFBZOiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCXJldCA9IGlzYV9kbWFfYWRkKERNQV9WSVJUVUFMX1NPVU5ELCAmc291bmRfZG1hKTsKKwlpZiAocmV0KQorCQlwcmludGsoIklPTURTT1VORDogdW5hYmxlIHRvIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gMDsKIH0KK2NvcmVfaW5pdGNhbGwocnBjX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmggYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IGJhZDcyMDUuLjY3YmZjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApAQCAtMjMsNSArMjMsNyBAQAogCiAjZGVmaW5lIERNQV9GTE9QUFkJCURNQV9WSVJUVUFMX0ZMT1BQWQogCisjZGVmaW5lIElPTURfRE1BX0JPVU5EQVJZCShQQUdFX1NJWkUgLSAxKQorCiAjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBiZDcyNjhiLi40NWM3YjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaW9tZF93cml0ZWIoMCwgSU9NRF9ST01DUjApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UxZWM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby1ucnMuaApAQCAtMCwwICsxLDIzIEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBHUElPIGJhbmsgbnVtYmVyaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKKworI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDAwNDc2YTUuLjUxYTg4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMywzICsyMyw2IEBACiAjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKDI1NiArIENPTkZJR19TM0MyNFhYX0dQSU9fRVhUUkEpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgorCisjZGVmaW5lIFMzQ19HUElPX0VORAkoUzNDMjQxMF9HUElPX0JBTktIICsgMzIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDQ5ZWZjZTguLjJhMjM4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIElSUV9FSU5UMjIgICAgIFMzQzI0MTBfSVJRKDUwKQogI2RlZmluZSBJUlFfRUlOVDIzICAgICBTM0MyNDEwX0lSUSg1MSkKIAotCisjZGVmaW5lIElSUV9FSU5UX0JJVCh4KQkoKHgpIC0gSVJRX0VJTlQ0ICsgNCkKICNkZWZpbmUgSVJRX0VJTlQoeCkgICAgKCgoeCkgPj0gNCkgPyAoSVJRX0VJTlQ0ICsgKHgpIC0gNCkgOiAoSVJRX0VJTlQwICsgKHgpKSkKIAogI2RlZmluZSBJUlFfTENEX0ZJRk8gICBTM0MyNDEwX0lSUSg1MikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCmluZGV4IDMyMTA3NzYuLjM1YTAzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaApAQCAtMTQsMTYgKzE0LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT19ICiAKLSNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDAwCiAjZGVmaW5lIFMzQzI0WFhfR1BJT19CQVNFKHgpICBTM0MyNDAwX0dQSU9fQkFTRSh4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3lzdGVtLXJlc2V0LmgKaW5kZXggNzYxM2QwYS4uYjg2ODdmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS1yZXNldC5oCkBAIC0yMiw3ICsyMiw3IEBACiBleHRlcm4gdm9pZCAoKnMzYzI0eHhfcmVzZXRfaG9vaykodm9pZCk7CiAKIHN0YXRpYyB2b2lkCi1hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJc3RydWN0IGNsayAqd2R0Y2xrOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCA4MjFhMTY2Li43YTdjNGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogI2lmZGVmIENPTkZJR19QTV9IMTk0MAogCW1lbWNweShwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9SRVNVTUVBVCksIGgxOTQwX3BtX3JldHVybiwgMTAyNCk7CiAjZW5kaWYKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMKaW5kZXggOTY3OGE1My4uOWYxYmE5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEI1LCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHF0MjQxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHF0MjQxMF9kZXZpY2VzKSk7Ci0JczNjMjQxMF9wbV9pbml0KCk7CisJczNjX3BtX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChRVDI0MTAsICJRVDI0MTAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCBhNjk3MGY2Li44N2ZjNDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMzcsMjEgKzM3LDE0IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKLSNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRwotZXh0ZXJuIHZvaWQgcG1fZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSNkZWZpbmUgREJHKGZtdC4uLikgcG1fZGJnKGZtdCkKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3ByZXBhcmUodm9pZCkKIHsKIAkvKiBlbnN1cmUgYXQgbGVhc3QgR1NUQVRVUzMgaGFzIHRoZSByZXN1bWUgYWRkcmVzcyAqLwogCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhzM2MyNDEwX2NwdV9yZXN1bWUpLCBTM0MyNDEwX0dTVEFUVVMzKTsKKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzY19jcHVfcmVzdW1lKSwgUzNDMjQxMF9HU1RBVFVTMyk7CiAKLQlEQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOwotCURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7CisJUzNDX1BNREJHKCJHU1RBVFVTMyAweCUwOHhcbiIsIF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzMpKTsKKwlTM0NfUE1EQkcoIkdTVEFUVVM0IDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTNCkpOwogCiAJaWYgKG1hY2hpbmVfaXNfaDE5NDAoKSkgewogCQl2b2lkICpiYXNlID0gcGh5c190b192aXJ0KEgxOTQwX1NVU1BFTkRfQ0hFQ0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCmluZGV4IGVjZGRiYmIuLjcyYzI2NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCSAqIGNvcnJlY3QgYWRkcmVzcyB0byByZXN1bWUgZnJvbS4gKi8KIAogCV9fcmF3X3dyaXRlbCgweDJCRUQsIFMzQzI0MTJfSU5GT1JNMCk7Ci0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhzM2MyNDEwX2NwdV9yZXN1bWUpLCBTM0MyNDEyX0lORk9STTEpOworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjX2NwdV9yZXN1bWUpLCBTM0MyNDEyX0lORk9STTEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MzAsNyArNjMwLDcgQEAKIAogCS8qIGluaXRpYWxpc2UgdGhlIHBvd2VyIG1hbmFnZW1lbnQgbm93IHdlJ3ZlIHNldHVwIGV2ZXJ5dGhpbmcuICovCiAKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogCiAJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJmppdmVfbmFuZF9pbmZvOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCmluZGV4IDIxN2U5ZTQuLmM5Y2ZlNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCkBAIC04NSw3ICs4NSw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjQxMl9wbV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzM2MyNDEwX3BtX2RvX3NhdmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7CisJczNjX3BtX2RvX3NhdmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4LDcgKzk4LDcgQEAKIAl0bXAgfD0gIFMzQzI0MTJfUFdSQ0ZHX1NUQU5EQllXRklfSURMRTsKIAlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEyX1BXUkNGRyk7CiAKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7CisJczNjX3BtX2RvX3Jlc3RvcmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKaW5kZXggMTJkMzc4Zi4uYmM4ZDhkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogI2lmZGVmIENPTkZJR19QTV9IMTk0MAogCW1lbWNweShwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9SRVNVTUVBVCksIGgxOTQwX3BtX3JldHVybiwgMTAyNCk7CiAjZW5kaWYKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogCiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnJ4MzcxNV9mYl9pbmZvKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyeDM3MTVfZGV2aWNlcywgQVJSQVlfU0laRShyeDM3MTVfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBhZThjMGUzLi44M2NlMmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNzAsNiArNzAsOCBAQAogI2RlZmluZSBJUlFfRUlOVDE3CVMzQzI0MTBfSVJRKDQ5KQogI2RlZmluZSBJUlFfRUlOVDE4CVMzQzI0MTBfSVJRKDUwKQogCisjZGVmaW5lIElSUV9FSU5UX0JJVCh4KSAoKHgpIC0gSVJRX0VJTlQwMCkKKwogLyogU1VCIElSUVMgKi8KICNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgwCQlTM0MyNDEwX0lSUSg1MSkJLyogNjcgKi8KICNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgwCQlTM0MyNDEwX0lSUSg1MikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IGNmZjI3ZDguLmJhZjFjMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtNTIsNiArNTIsOSBAQAogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzAJCSgweDcxMjAwMDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQogCisjZGVmaW5lIFMzQzY0WFhfUEFfTU9ERU0JKDB4NzQxMDgwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfTU9ERU0JUzNDX0FERFIoMHgwMDYwMDAwMCkKKwogLyogcGxhY2UgVklDcyBjbG9zZSB0b2dldGhlciAqLwogI2RlZmluZSBTM0NfVkFfVklDMAkJKFMzQ19WQV9JUlEgKyAweDAwKQogI2RlZmluZSBTM0NfVkFfVklDMQkJKFMzQ19WQV9JUlEgKyAweDEwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNjUyYmJjNC4uMDkwY2ZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJLyogbm90aGluZyBoZXJlIHlldCAqLwogfQogCi1zdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogbm90aGluZyBoZXJlIHlldCAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKaW5kZXggZjk5ZDkwMS4uODFmZmZmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCkBAIC03MSwxOSArNzEsOSBAQAogCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzNjAwPgogCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgogCi1jb25maWcgU0ExMTAwX0gzODAwCi0JYm9vbCAiQ29tcGFxIGlQQVEgSDM4MDAiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiB0aGUgQ29tcGFxIGlQQVEgSDM4MDAKLQkgIHNlcmllcyBoYW5kaGVsZCBjb21wdXRlci4gIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgbWFjaGluZSBhbmQgdGhlCi0JICBMaW51eCBwb3J0IHRvIHRoaXMgbWFjaGluZSBjYW4gYmUgZm91bmQgYXQ6Ci0KLQkgIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvQ29tcGFxL2luZGV4Lmh0bWwjaVBBUV9IMzgwMD4KLQkgIDxodHRwOi8vd3d3LmNvbXBhcS5jb20vcHJvZHVjdHMvaGFuZGhlbGRzL3BvY2tldHBjLz4KLQogY29uZmlnIFNBMTEwMF9IM1hYWAogCWJvb2wKLQlkZXBlbmRzIG9uIFNBMTEwMF9IMzEwMCB8fCBTQTExMDBfSDM2MDAgfHwgU0ExMTAwX0gzODAwCisJZGVwZW5kcyBvbiBTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTQTExMDBfQkFER0U0CkBAIC0xNTcsMTUgKzE0Nyw2IEBACiAJICBUaGlzIGlzbid0IGZvciBhdWRpbyBzdXBwb3J0LCBidXQgZm9yIGF0dGFjaGVkIHNlbnNvcnMgYW5kCiAJICBvdGhlciBkZXZpY2VzLCBlZyBmb3IgQmFkZ2VQQUQgNCBzZW5zb3Igc3VwcG9ydC4KIAotY29uZmlnIEgzNjAwX1NMRUVWRQotCXRyaXN0YXRlICJDb21wYXEgaVBBUSBIYW5kaGVsZCBzbGVldmUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNBMTEwMF9IMzEwMCB8fCBTQTExMDBfSDM2MDAKLQloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGV4dGVuc2lvbiBwYWNrcyAoc2xlZXZlcykKLQkgIGZvciB0aGUgQ29tcGFxIGlQQVEgSDNYWFggc2VyaWVzIG9mIGhhbmRoZWxkIGNvbXB1dGVycy4gIFRoaXMgb3B0aW9uCi0JICBpcyByZXF1aXJlZCBmb3IgdGhlIENGLCBQQ01DSUEsIEJsdWV0b290aCBhbmQgR1NNL0dQUlMgZXh0ZW5zaW9uCi0JICBwYWNrcy4KLQogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCAyMDUyZWI4Li5iYmYyZWJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xNDUsNyArMTQ2LDggQEAKIAkucmVtb3ZlCT0gY29sbGllX3VhcnRfcmVtb3ZlLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgY29sbGllX3VhcnRfaW5pdCh2b2lkKSB7CitzdGF0aWMgaW50IF9faW5pdCBjb2xsaWVfdWFydF9pbml0KHZvaWQpCit7CiAJcmV0dXJuIGxvY29tb19kcml2ZXJfcmVnaXN0ZXIoJmNvbGxpZV91YXJ0X2RyaXZlcik7CiB9CiBkZXZpY2VfaW5pdGNhbGwoY29sbGllX3VhcnRfaW5pdCk7CkBAIC0xOTUsMTggKzE5NywzNCBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgY29sbGllX2ZsYXNoX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSBncGlvX3JlcXVlc3QoQ09MTElFX0dQSU9fVlBFTiwgImZsYXNoIFZwcCBlbmFibGUiKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPTExJRV9HUElPX1ZQRU4sIDEpOworCWlmIChyYykKKwkJZ3Bpb19mcmVlKENPTExJRV9HUElPX1ZQRU4pOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgdm9pZCBjb2xsaWVfc2V0X3ZwcChpbnQgdnBwKQogewotCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BDUiwgcmVhZF9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQQ1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKLQlpZiAodnBwKQotCQl3cml0ZV9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IsIHJlYWRfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUFdSKSB8IENPTExJRV9TQ1BfVlBFTik7Ci0JZWxzZQotCQl3cml0ZV9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IsIHJlYWRfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUFdSKSAmIH5DT0xMSUVfU0NQX1ZQRU4pOworCWdwaW9fc2V0X3ZhbHVlKENPTExJRV9HUElPX1ZQRU4sIHZwcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxpZV9mbGFzaF9leGl0KHZvaWQpCit7CisJZ3Bpb19mcmVlKENPTExJRV9HUElPX1ZQRU4pOwogfQogCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY29sbGllX2ZsYXNoX2RhdGEgPSB7CiAJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLmluaXQJCT0gY29sbGllX2ZsYXNoX2luaXQsCiAJLnNldF92cHAJPSBjb2xsaWVfc2V0X3ZwcCwKKwkuZXhpdAkJPSBjb2xsaWVfZmxhc2hfZXhpdCwKIAkucGFydHMJCT0gY29sbGllX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xsaWVfcGFydGl0aW9ucyksCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllX3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYwppbmRleCBiMzkzMDdmLi40NDRmMjY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC01OCw2ICs1OSw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlncGlvX3JlcXVlc3QoQ09MTElFX0dQSU9fQ0hBUkdFX09OLCAiY2hhcmdlIG9uIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPTExJRV9HUElPX0NIQVJHRV9PTiwgMSk7CisKIAl1Y2IxeDAwX2lvX3NldF9kaXIodWNiLCAwLCBDT0xMSUVfVEMzNTE0M19HUElPX01CQVRfT04gfCBDT0xMSUVfVEMzNTE0M19HUElPX1RNUF9PTiB8CiAJCQkgICAgICAgICAgIENPTExJRV9UQzM1MTQzX0dQSU9fQkJBVF9PTik7CiAJcmV0dXJuOwpAQCAtNzMsMTcgKzc3LDExIEBACiAKIHN0YXRpYyB2b2lkIGNvbGxpZV9jaGFyZ2UoaW50IG9uKQogewotCWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZXNjb29wX2RldmljZTsKLQogCS8qIFphdXJ1cyBzZWVtcyB0byBjb250YWluIExUQzE3MzE7IGl0IHNob3VsZCBrbm93IHdoZW4gdG8KIAkgKiBzdG9wIGNoYXJnaW5nIGl0c2VsZiwgc28gc2V0dGluZyBjaGFyZ2Ugb24gc2hvdWxkIGJlCiAJICogcmVsYXRpdmVseSBoYXJtbGVzcyAoYXMgbG9uZyBhcyBpdCBpcyBub3QgZG9uZSB0b28gb2Z0ZW4pLgogCSAqLwotCWlmIChvbikgewotCQlzZXRfc2Nvb3BfZ3BpbygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgQ09MTElFX1NDUF9DSEFSR0VfT04pOwotCX0gZWxzZSB7Ci0JCXJlc2V0X3Njb29wX2dwaW8oJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIENPTExJRV9TQ1BfQ0hBUkdFX09OKTsKLQl9CisJZ3Bpb19zZXRfdmFsdWUoQ09MTElFX0dQSU9fQ0hBUkdFX09OLCBvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbGxpZV9kaXNjaGFyZ2UoaW50IG9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKaW5kZXggYWYyNWE3OC4uMGViMmYxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCkBAIC00MiwxOSArNDIsMTIgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2gzNjAwLmg+Ci0KLSNpZiBkZWZpbmVkIChDT05GSUdfU0ExMTAwX0gzNjAwKSB8fCBkZWZpbmVkIChDT05GSUdfU0ExMTAwX0gzMTAwKQogI2luY2x1ZGUgPG1hY2gvaDM2MDBfZ3Bpby5oPgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi0jaW5jbHVkZSA8bWFjaC9oMzYwMF9hc2ljLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RydWN0IGlwYXFfbW9kZWxfb3BzIGlwYXFfbW9kZWxfb3BzOwotRVhQT1JUX1NZTUJPTChpcGFxX21vZGVsX29wcyk7Cit2b2lkICgqYXNzaWduX2gzNjAwX2VncGlvKShlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgbGV2ZWwpOworRVhQT1JUX1NZTUJPTChhc3NpZ25faDM2MDBfZWdwaW8pOwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDN4eHhfcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTYzLDQxICs1Niw5IEBACiAJCS5vZmZzZXQJCT0gMCwKIAkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfSwgewotI2lmZGVmIENPTkZJR19NVERfMlBBUlRTX0lQQVEKLQkJLm5hbWUJCT0gIkgzWFhYIHJvb3QgamZmczIiLAorCQkubmFtZQkJPSAiSDNYWFggcm9vdGZzIiwKIAkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKIAkJLm9mZnNldAkJPSAweDAwMDQwMDAwLAotI2Vsc2UKLQkJLm5hbWUJCT0gIkgzWFhYIGtlcm5lbCIsCi0JCS5zaXplCQk9IDB4MDAwODAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDA0MDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCBwYXJhbXMiLAotCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAotCQkub2Zmc2V0CQk9IDB4MDAwQzAwMDAsCi0JfSwgewotI2lmZGVmIENPTkZJR19KRkZTMl9GUwotCQkubmFtZQkJPSAiSDNYWFggcm9vdCBqZmZzMiIsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5vZmZzZXQJCT0gMHgwMDEwMDAwMCwKLSNlbHNlCi0JCS5uYW1lCQk9ICJIM1hYWCBpbml0cmQiLAotCQkuc2l6ZQkJPSAweDAwMTAwMDAwLAotCQkub2Zmc2V0CQk9IDB4MDAxMDAwMDAsCi0JfSwgewotCQkubmFtZQkJPSAiSDNYWFggcm9vdCBjcmFtZnMiLAotCQkuc2l6ZQkJPSAweDAwMzAwMDAwLAotCQkub2Zmc2V0CQk9IDB4MDAyMDAwMDAsCi0JfSwgewotCQkubmFtZQkJPSAiSDNYWFggdXNyIGNyYW1mcyIsCi0JCS5zaXplCQk9IDB4MDA4MDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDUwMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCB1c3IgbG9jYWwiLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkub2Zmc2V0CQk9IDB4MDBkMDAwMDAsCi0jZW5kaWYKLSNlbmRpZgogCX0KIH07CiAKQEAgLTEzMSwxMSArOTIsNyBAQAogCiBzdGF0aWMgdm9pZCBoMzYwMF9pcmRhX3NldF9zcGVlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzcGVlZCkKIHsKLQlpZiAoc3BlZWQgPCA0MDAwMDAwKSB7Ci0JCWNscl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwpOwotCX0gZWxzZSB7Ci0JCXNldF9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwpOwotCX0KKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19JUl9GU0VMLCAhKHNwZWVkIDwgNDAwMDAwMCkpOwogfQogCiBzdGF0aWMgc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YSBoMzYwMF9pcmRhX2RhdGEgPSB7CkBAIC0yNjYsMTIgKzIyMyw2IEBACiAJc2ExMTAwZmJfbGNkX3Bvd2VyID0gaDN4eHhfbGNkX3Bvd2VyOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRvX2JsYW5rKGludCBzZXRwKQotewotCWlmIChpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjaykKLQkJaXBhcV9tb2RlbF9vcHMuYmxhbmtfY2FsbGJhY2soMS1zZXRwKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKiogSDMxMDAgKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmZGVmIENPTkZJR19TQTExMDBfSDMxMDAKQEAgLTI4OSw3ICsyNDAsNiBAQAogCWNhc2UgSVBBUV9FR1BJT19MQ0RfUE9XRVI6CiAJCWVncGlvIHw9IEVHUElPX0gzNjAwX0xDRF9PTjsKIAkJZ3BpbyAgfD0gR1BJT19IMzEwMF9MQ0RfM1ZfT047Ci0JCWRvX2JsYW5rKHNldHApOwogCQlicmVhazsKIAljYXNlIElQQVFfRUdQSU9fTENEX0VOQUJMRToKIAkJYnJlYWs7CkBAIC0zNDMsMjUgKzI5Myw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBoMzEwMF9yZWFkX2VncGlvKHZvaWQpCi17Ci0JcmV0dXJuIGgzMTAwX2VncGlvOwotfQotCi1zdGF0aWMgaW50IGgzMTAwX3BtX2NhbGxiYWNrKGludCByZXEpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCkKLQkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eChyZXEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlwYXFfbW9kZWxfb3BzIGgzMTAwX21vZGVsX29wcyBfX2luaXRkYXRhID0gewotCS5nZW5lcmljX25hbWUJPSAiMzEwMCIsCi0JLmNvbnRyb2wJPSBoMzEwMF9jb250cm9sX2VncGlvLAotCS5yZWFkCQk9IGgzMTAwX3JlYWRfZWdwaW8sCi0JLnBtX2NhbGxiYWNrCT0gaDMxMDBfcG1fY2FsbGJhY2sKLX07Ci0KICNkZWZpbmUgSDMxMDBfRElSRUNUX0VHUElPIChHUElPX0gzMTAwX0JUX09OCSAgXAogCQkJICB8IEdQSU9fSDMxMDBfR1BJTzMJICBcCiAJCQkgIHwgR1BJT19IMzEwMF9RTVVURQkgIFwKQEAgLTM4Nyw3ICszMTgsNyBAQAogCUdBRlIgJj0gfkgzMTAwX0RJUkVDVF9FR1BJTzsKIAogCUgzMTAwX0VHUElPID0gaDMxMDBfZWdwaW87Ci0JaXBhcV9tb2RlbF9vcHMgPSBoMzEwMF9tb2RlbF9vcHM7CisJYXNzaWduX2gzNjAwX2VncGlvID0gaDMxMDBfY29udHJvbF9lZ3BpbzsKIH0KIAogTUFDSElORV9TVEFSVChIMzEwMCwgIkNvbXBhcSBpUEFRIEgzMTAwIikKQEAgLTQyMCw3ICszNTEsNiBAQAogCQkJIEVHUElPX0gzNjAwX0xDRF9QQ0kgfAogCQkJIEVHUElPX0gzNjAwX0xDRF81Vl9PTiB8CiAJCQkgRUdQSU9fSDM2MDBfTFZERF9PTjsKLQkJZG9fYmxhbmsoc2V0cCk7CiAJCWJyZWFrOwogCWNhc2UgSVBBUV9FR1BJT19MQ0RfRU5BQkxFOgogCQlicmVhazsKQEAgLTQ3MSwyNSArNDAxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGgzNjAwX3JlYWRfZWdwaW8odm9pZCkKLXsKLQlyZXR1cm4gaDM2MDBfZWdwaW87Ci19Ci0KLXN0YXRpYyBpbnQgaDM2MDBfcG1fY2FsbGJhY2soaW50IHJlcSkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KQotCQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KHJlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaDM2MDBfbW9kZWxfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmdlbmVyaWNfbmFtZQk9ICIzNjAwIiwKLQkuY29udHJvbAk9IGgzNjAwX2NvbnRyb2xfZWdwaW8sCi0JLnJlYWQJCT0gaDM2MDBfcmVhZF9lZ3BpbywKLQkucG1fY2FsbGJhY2sJPSBoMzYwMF9wbV9jYWxsYmFjawotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGgzNjAwX21hcF9pbyh2b2lkKQogewogCWgzeHh4X21hcF9pbygpOwpAQCAtNTA0LDcgKzQxNSw3IEBACiAJICAgICAgIEdQSU9fTEREMTEgfCBHUElPX0xERDEwIHwgR1BJT19MREQ5ICB8IEdQSU9fTEREODsKIAogCUgzNjAwX0VHUElPID0gaDM2MDBfZWdwaW87CSAgIC8qIE1haW50YWlucyBhY3Jvc3Mgc2xlZXA/ICovCi0JaXBhcV9tb2RlbF9vcHMgPSBoMzYwMF9tb2RlbF9vcHM7CisJYXNzaWduX2gzNjAwX2VncGlvID0gaDM2MDBfY29udHJvbF9lZ3BpbzsKIH0KIAogTUFDSElORV9TVEFSVChIMzYwMCwgIkNvbXBhcSBpUEFRIEgzNjAwIikKQEAgLTUxOSwzODggKzQzMCwzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU0ExMTAwX0gzNjAwICovCiAKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi0KLSNkZWZpbmUgU0VUX0FTSUMxKHgpIFwKLSAgIGRvIHtpZiAoc2V0cCkgeyBIMzgwMF9BU0lDMV9HUElPX09VVCB8PSAoeCk7IH0gZWxzZSB7IEgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH4oeCk7IH19IHdoaWxlKDApCi0KLSNkZWZpbmUgU0VUX0FTSUMyKHgpIFwKLSAgIGRvIHtpZiAoc2V0cCkgeyBIMzgwMF9BU0lDMl9HUElPUElPRCB8PSAoeCk7IH0gZWxzZSB7IEgzODAwX0FTSUMyX0dQSU9QSU9EICY9IH4oeCk7IH19IHdoaWxlKDApCi0KLSNkZWZpbmUgQ0xFQVJfQVNJQzEoeCkgXAotICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH4oeCk7IH0gZWxzZSB7IEgzODAwX0FTSUMxX0dQSU9fT1VUIHw9ICh4KTsgfX0gd2hpbGUoMCkKLQotI2RlZmluZSBDTEVBUl9BU0lDMih4KSBcCi0gICBkbyB7aWYgKHNldHApIHsgSDM4MDBfQVNJQzJfR1BJT1BJT0QgJj0gfih4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzJfR1BJT1BJT0QgfD0gKHgpOyB9fSB3aGlsZSgwKQotCi0KLS8qCi0gIE9uIHNjcmVlbiBlbmFibGUsIHdlIGdldAotCi0gICAgIGgzODAwX3ZpZGVvX3Bvd2VyX29uKDEpCi0gICAgIExDRCBjb250cm9sbGVyIHN0YXJ0cwotICAgICBoMzgwMF92aWRlb19sY2RfZW5hYmxlKDEpCi0KLSAgT24gc2NyZWVuIGRpc2FibGUsIHdlIGdldAotCi0gICAgIGgzODAwX3ZpZGVvX2xjZF9lbmFibGUoMCkKLSAgICAgTENEIGNvbnRyb2xsZXIgc3RvcHMKLSAgICAgaDM4MDBfdmlkZW9fcG93ZXJfb24oMCkKLSovCi0KLQotc3RhdGljIHZvaWQgaDM4MDBfdmlkZW9fcG93ZXJfb24oaW50IHNldHApCi17Ci0JaWYgKHNldHApIHsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gR1BJTzFfTENEX09OOwotCQltc2xlZXAoMzApOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9WR0xfT047Ci0JCW1zbGVlcCg1KTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gR1BJTzFfVkdIX09OOwotCQltc2xlZXAoNTApOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9MQ0RfNVZfT047Ci0JCW1zbGVlcCg1KTsKLQl9IGVsc2UgewotCQltc2xlZXAoNSk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9MQ0RfNVZfT047Ci0JCW1zbGVlcCg1MCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9WR0xfT047Ci0JCW1zbGVlcCg1KTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX1ZHSF9PTjsKLQkJbXNsZWVwKDEwMCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9MQ0RfT047Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF92aWRlb19sY2RfZW5hYmxlKGludCBzZXRwKQotewotCWlmIChzZXRwKSB7Ci0JCW1zbGVlcCgxNyk7CS8vIFdhaXQgb25lIGZyb20gYmVmb3JlIHR1cm5pbmcgb24KLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gR1BJTzFfTENEX1BDSTsKLQl9IGVsc2UgewotCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfTENEX1BDSTsKLQkJbXNsZWVwKDMwKTsJLy8gV2FpdCBiZWZvcmUgdHVybmluZyBvZmYKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgaDM4MDBfY29udHJvbF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgc2V0cCkKLXsKLQlzd2l0Y2ggKHgpIHsKLQljYXNlIElQQVFfRUdQSU9fTENEX1BPV0VSOgotCQloMzgwMF92aWRlb19wb3dlcl9vbihzZXRwKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX0xDRF9FTkFCTEU6Ci0JCWgzODAwX3ZpZGVvX2xjZF9lbmFibGUoc2V0cCk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQ6Ci0JY2FzZSBJUEFRX0VHUElPX0FVRElPX09OOgotCWNhc2UgSVBBUV9FR1BJT19RTVVURToKLQkJcHJpbnRrKCIlczogZXJyb3IgLSBzaG91bGQgbm90IGJlIGNhbGxlZFxuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fT1BUX05WUkFNX09OOgotCQlTRVRfQVNJQzIoR1BJTzJfT1BUX09OX05WUkFNKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX09QVF9PTjoKLQkJU0VUX0FTSUMyKEdQSU8yX09QVF9PTik7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19DQVJEX1JFU0VUOgotCQlTRVRfQVNJQzIoR1BJTzJfT1BUX1BDTV9SRVNFVCk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19PUFRfUkVTRVQ6Ci0JCVNFVF9BU0lDMihHUElPMl9PUFRfUkVTRVQpOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fSVJfT046Ci0JCUNMRUFSX0FTSUMxKEdQSU8xX0lSX09OX04pOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fSVJfRlNFTDoKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX1JTMjMyX09OOgotCQlTRVRfQVNJQzEoR1BJTzFfUlMyMzJfT04pOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fVlBQX09OOgotCQlIMzgwMF9BU0lDMl9GbGFzaFdQX1ZQUF9PTiA9IHNldHA7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaDM4MDBfcmVhZF9lZ3Bpbyh2b2lkKQotewotCXJldHVybiBIMzgwMF9BU0lDMV9HUElPX09VVCB8IChIMzgwMF9BU0lDMl9HUElPUElPRCA8PCAxNik7Ci19Ci0KLS8qIFdlIG5lZWQgdG8gZml4IEFTSUMyIEdQSU8gb3ZlciBzdXNwZW5kL3Jlc3VtZS4gIEF0IHRoZSBtb21lbnQsCi0gICBpdCBkb2Vzbid0IGFwcGVhciB0aGF0IEFTSUMxIEdQSU8gaGFzIHRoZSBzYW1lIHByb2JsZW0gKi8KLQotc3RhdGljIGludCBoMzgwMF9wbV9jYWxsYmFjayhpbnQgcmVxKQotewotCXN0YXRpYyB1MTYgYXNpYzFfZGF0YTsKLQlzdGF0aWMgdTE2IGFzaWMyX2RhdGE7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlwcmludGsoIiVzICVkXG4iLCBfX2Z1bmNfXywgcmVxKTsKLQotCXN3aXRjaCAocmVxKSB7Ci0JY2FzZSBQTV9SRVNVTUU6Ci0JCU1TQzIgPSAoTVNDMiAmIDB4MDAwMGZmZmYpIHwgMHhFNDUxMDAwMDsgIC8qIFNldCBNU0MyIGNvcnJlY3RseSAqLwotCi0JCUgzODAwX0FTSUMyX0dQSU9QSU9EID0gYXNpYzJfZGF0YTsKLQkJSDM4MDBfQVNJQzJfR1BJT0RJUiA9IEdQSU8yX1BFTl9JUlEKLQkJCXwgR1BJTzJfU0RfREVURUNUCi0JCQl8IEdQSU8yX0VBUl9JTl9OCi0JCQl8IEdQSU8yX1VTQl9ERVRFQ1RfTgotCQkJfCBHUElPMl9TRF9DT05fU0xUOwotCi0JCUgzODAwX0FTSUMxX0dQSU9fT1VUID0gYXNpYzFfZGF0YTsKLQotCQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KQotCQkJcmVzdWx0ID0gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KHJlcSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9TVVNQRU5EOgotCQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4ICYmCi0JCSAgICAgKChyZXN1bHQgPSBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKSkgIT0gMCkpCi0JCQlyZXR1cm4gcmVzdWx0OwotCi0JCWFzaWMxX2RhdGEgPSBIMzgwMF9BU0lDMV9HUElPX09VVDsKLQkJYXNpYzJfZGF0YSA9IEgzODAwX0FTSUMyX0dQSU9QSU9EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiB1bnJlY29nbml6ZWQgUE0gY2FsbGJhY2tcbiIsIF9fZnVuY19fKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaDM4MDBfbW9kZWxfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmdlbmVyaWNfbmFtZQk9ICIzODAwIiwKLQkuY29udHJvbAk9IGgzODAwX2NvbnRyb2xfZWdwaW8sCi0JLnJlYWQJCT0gaDM4MDBfcmVhZF9lZ3BpbywKLQkucG1fY2FsbGJhY2sJPSBoMzgwMF9wbV9jYWxsYmFjawotfTsKLQotI2RlZmluZSBNQVhfQVNJQ19JU1JfTE9PUFMgICAgMjAKLQotLyogVGhlIG9yZGVyIG9mIHRoZXNlIGlzIGltcG9ydGFudCAtIHNlZSAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+ICovCi1zdGF0aWMgdTMyIGtwaW9faXJxX21hc2tbXSA9IHsKLQlLUElPX0tFWV9BTEwsCi0JS1BJT19TUElfSU5ULAotCUtQSU9fT1dNX0lOVCwKLQlLUElPX0FEQ19JTlQsCi0JS1BJT19VQVJUXzBfSU5ULAotCUtQSU9fVUFSVF8xX0lOVCwKLQlLUElPX1RJTUVSXzBfSU5ULAotCUtQSU9fVElNRVJfMV9JTlQsCi0JS1BJT19USU1FUl8yX0lOVAotfTsKLQotc3RhdGljIHUzMiBncGlvX2lycV9tYXNrW10gPSB7Ci0JR1BJTzJfUEVOX0lSUSwKLQlHUElPMl9TRF9ERVRFQ1QsCi0JR1BJTzJfRUFSX0lOX04sCi0JR1BJTzJfVVNCX0RFVEVDVF9OLAotCUdQSU8yX1NEX0NPTl9TTFQsCi19OwotCi1zdGF0aWMgdm9pZCBoMzgwMF9JUlFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWludCBpOwotCi0JaWYgKDApIHByaW50aygiJXM6IGludGVycnVwdCByZWNlaXZlZFxuIiwgX19mdW5jX18pOwotCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNfSVNSX0xPT1BTICYmIChHUExSICYgR1BJT19IMzgwMF9BU0lDKTsgaSsrKSB7Ci0JCXUzMiBpcnE7Ci0JCWludCBqOwotCi0JCS8qIEtQSU8gKi8KLQkJaXJxID0gSDM4MDBfQVNJQzJfS1BJSU5URkxBRzsKLQkJaWYgKDApIHByaW50aygiJXMgS1BJTyAweCUwOFhcbiIsIF9fZnVuY19fLCBpcnEpOwotCQlmb3IgKGogPSAwOyBqIDwgSDM4MDBfS1BJT19JUlFfQ09VTlQ7IGorKykKLQkJCWlmIChpcnEgJiBrcGlvX2lycV9tYXNrW2pdKQotCQkJCWhhbmRsZV9lZGdlX2lycShIMzgwMF9LUElPX0lSUV9DT1VOVCArIGosIGlycV9kZXNjICsgSDM4MDBfS1BJT19JUlFfQ09VTlQgKyBqKTsKLQotCQkvKiBHUElPMiAqLwotCQlpcnEgPSBIMzgwMF9BU0lDMl9HUElJTlRGTEFHOwotCQlpZiAoMCkgcHJpbnRrKCIlcyBHUElPIDB4JTA4WFxuIiwgX19mdW5jX18sIGlycSk7Ci0JCWZvciAoaiA9IDA7IGogPCBIMzgwMF9HUElPX0lSUV9DT1VOVDsgaisrKQotCQkJaWYgKGlycSAmIGdwaW9faXJxX21hc2tbal0pCi0JCQkJaGFuZGxlX2VkZ2VfaXJxKEgzODAwX0dQSU9fSVJRX0NPVU5UICsgaiwgaXJxX2Rlc2MgKyBIMzgwMF9HUElPX0lSUV9DT1VOVCArIGopOwotCX0KLQotCWlmIChpID49IE1BWF9BU0lDX0lTUl9MT09QUykKLQkJcHJpbnRrKCIlczogaW50ZXJydXB0IHByb2Nlc3Npbmcgb3ZlcnJ1blxuIiwgX19mdW5jX18pOwotCi0JLyogRm9yIGxldmVsLWJhc2VkIGludGVycnVwdHMgKi8KLQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKLQotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBoMzgwMF9pcnEgPSB7Ci0JLm5hbWUJCT0gImgzODAwX2FzaWMiLAotCS5oYW5kbGVyCT0gaDM4MDBfSVJRX2RlbXV4LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKLX07Ci0KLXUzMiBrcGlvX2ludF9zaGFkb3cgPSAwOwotCi0KLS8qIG1hc2tfYWNrIDwtIElSUSBpcyBmaXJzdCBzZXJ2aWNlZC4KLSAgICAgICBtYXNrIDwtIElSUSBpcyBkaXNhYmxlZC4KLSAgICAgdW5tYXNrIDwtIElSUSBpcyBlbmFibGVkCi0KLSAgICAgVGhlIElOVENMUiByZWdpc3RlcnMgYXJlIHBvb3JseSBkb2N1bWVudGVkLiAgSSBiZWxpZXZlIHRoYXQgd3JpdGluZwotICAgICBhICIxIiB0byB0aGUgcmVnaXN0ZXIgY2xlYXJzIHRoZSBzcGVjaWZpYyBpbnRlcnJ1cHQsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbgotICAgICBpbmRpY2F0ZXMgd3JpdGluZyBhICIwIiBjbGVhcnMgdGhlIGludGVycnVwdC4gIEluIGFueSBjYXNlLCB0aGV5IHNob3VsZG4ndAotICAgICBiZSByZWFkICh0aGF0J3MgdGhlIElOVEZMQUcgcmVnaXN0ZXIpCi0gKi8KLQotc3RhdGljIHZvaWQgaDM4MDBfbWFza19hY2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOwotCWtwaW9faW50X3NoYWRvdyAmPSB+bWFzazsKLQlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OwotCUgzODAwX0FTSUMyX0tQSUlOVENMUiAgPSBtYXNrOwotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2twaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBrcGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0tQSU9fSVJRX1NUQVJUXTsKLQlrcGlvX2ludF9zaGFkb3cgJj0gfm1hc2s7Ci0JSDM4MDBfQVNJQzJfS1BJSU5UU1RBVCA9IGtwaW9faW50X3NoYWRvdzsKLX0KLQotc3RhdGljIHZvaWQgaDM4MDBfdW5tYXNrX2twaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBrcGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0tQSU9fSVJRX1NUQVJUXTsKLQlrcGlvX2ludF9zaGFkb3cgfD0gbWFzazsKLQlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OwotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2Fja19ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiBtYXNrID0gZ3Bpb19pcnFfbWFza1tpcnEgLSBIMzgwMF9HUElPX0lSUV9TVEFSVF07Ci0JSDM4MDBfQVNJQzJfR1BJSU5UU1RBVCAmPSB+bWFzazsKLQlIMzgwMF9BU0lDMl9HUElJTlRDTFIJPSBtYXNrOwotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUICY9IH5tYXNrOwotCX0KLQotc3RhdGljIHZvaWQgaDM4MDBfdW5tYXNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUIHw9IG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBoMzgwMF9pbml0X2lycSh2b2lkKQotewotCWludCBpOwotCi0JLyogSW5pdGlhbGl6ZSBzdGFuZGFyZCBJUlFzICovCi0Jc2ExMTAwX2luaXRfaXJxKCk7Ci0KLQkvKiBEaXNhYmxlIGFsbCBJUlFzIGFuZCBzZXQgdXAgY2xvY2sgKi8KLQlIMzgwMF9BU0lDMl9LUElJTlRTVEFUCSAgID0gIDA7ICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JSDM4MDBfQVNJQzJfR1BJSU5UU1RBVAkgICA9ICAwOwotCi0JSDM4MDBfQVNJQzJfS1BJSU5UQ0xSCSAgID0gIDA7ICAgICAvKiBDbGVhciBhbGwgS1BJTyBpbnRlcnJ1cHRzICovCi0JSDM4MDBfQVNJQzJfR1BJSU5UQ0xSCSAgID0gIDA7ICAgICAvKiBDbGVhciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCi0KLS8vCUgzODAwX0FTSUMyX0tQSUlOVENMUgkgICA9ICAweGZmZmY7CSAgLyogQ2xlYXIgYWxsIEtQSU8gaW50ZXJydXB0cyAqLwotLy8JSDM4MDBfQVNJQzJfR1BJSU5UQ0xSCSAgID0gIDB4ZmZmZjsJICAvKiBDbGVhciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCi0KLQlIMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgfD0gQVNJQzJfQ0xPQ0tfRVgwOyAgIC8qIDMyIGtIWiBjcnlzdGFsIG9uICovCi0JSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlIHw9IEFTSUMyX0lOVENQU19TRVQ7Ci0JSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlCT0gQVNJQzJfSU5UQ1BTX0NQUygweDBlKSB8IEFTSUMyX0lOVENQU19TRVQ7Ci0JSDM4MDBfQVNJQzJfSU5UUl9UaW1lclNldAk9IDE7Ci0KLSNpZiAwCi0JZm9yIChpID0gMDsgaSA8IEgzODAwX0tQSU9fSVJRX0NPVU5UOyBpKyspIHsKLQkJaW50IGlycSA9IGkgKyBIMzgwMF9LUElPX0lSUV9TVEFSVDsKLQkJaXJxX2Rlc2NbaXJxXS52YWxpZCAgICA9IDE7Ci0JCWlycV9kZXNjW2lycV0ucHJvYmVfb2sgPSAxOwotCQlzZXRfaXJxX2NoaXAoaXJxLCAmaDM4MDBfa3Bpb19pcnFjaGlwKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSDM4MDBfR1BJT19JUlFfQ09VTlQ7IGkrKykgewotCQlpbnQgaXJxID0gaSArIEgzODAwX0dQSU9fSVJRX1NUQVJUOwotCQlpcnFfZGVzY1tpcnFdLnZhbGlkICAgID0gMTsKLQkJaXJxX2Rlc2NbaXJxXS5wcm9iZV9vayA9IDE7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZoMzgwMF9ncGlvX2lycWNoaXApOwotCX0KLSNlbmRpZgotCXNldF9pcnFfdHlwZShJUlFfR1BJT19IMzgwMF9BU0lDLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU9fSDM4MDBfQVNJQywgaDM4MDBfSVJRX2RlbXV4KTsKLX0KLQotCi0jZGVmaW5lIEFTSUMxX09VVFBVVFMJIDB4N2ZmZiAgIC8qIEZpcnN0IDE1IGJpdHMgYXJlIHVzZWQgKi8KLQotc3RhdGljIHZvaWQgX19pbml0IGgzODAwX21hcF9pbyh2b2lkKQotewotCWgzeHh4X21hcF9pbygpOwotCi0JLyogQWRkIHdha2V1cCBvbiBBQyBwbHVnL3VucGx1ZyAqLwotCVBXRVIgIHw9IFBXRVJfR1BJTzEyOwotCi0JLyogSW5pdGlhbGl6ZSBoMzgwMC1zcGVjaWZpYyB2YWx1ZXMgaGVyZSAqLwotCUdQQ1IgPSAweDBmZmZmZmZmOwkgLyogQWxsIG91dHB1dHMgYXJlIHNldCBsb3cgYnkgZGVmYXVsdCAqLwotCUdBRlIgPQlHUElPX0gzODAwX0NMS19PVVQgfAotCQlHUElPX0xERDE1IHwgR1BJT19MREQxNCB8IEdQSU9fTEREMTMgfCBHUElPX0xERDEyIHwKLQkJR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OwotCUdQRFIgPQlHUElPX0gzODAwX0NMS19PVVQgfAotCQlHUElPX0gzNjAwX0NPTV9SVFMgIHwgR1BJT19IMzYwMF9MM19DTE9DSyB8Ci0JCUdQSU9fSDM2MDBfTDNfTU9ERSAgfCBHUElPX0gzNjAwX0wzX0RBVEEgIHwKLQkJR1BJT19MREQxNSB8IEdQSU9fTEREMTQgfCBHUElPX0xERDEzIHwgR1BJT19MREQxMiB8Ci0JCUdQSU9fTEREMTEgfCBHUElPX0xERDEwIHwgR1BJT19MREQ5ICB8IEdQSU9fTEREODsKLQlUVUNSID0JVFVDUl8zXzY4NjRNSHo7ICAgLyogU2VlbXMgdG8gYmUgdXNlZCBvbmx5IGZvciB0aGUgQmx1ZXRvb3RoIFVBUlQgKi8KLQotCS8qIEZpeCB0aGUgbWVtb3J5IGJ1cyAqLwotCU1TQzIgPSAoTVNDMiAmIDB4MDAwMGZmZmYpIHwgMHhFNDUxMDAwMDsKLQotCS8qIFNldCB1cCBBU0lDICMxICovCi0JSDM4MDBfQVNJQzFfR1BJT19ESVIJCT0gQVNJQzFfT1VUUFVUUzsJICAgIC8qIEFsbCBvdXRwdXRzICovCi0JSDM4MDBfQVNJQzFfR1BJT19NQVNLCQk9IEFTSUMxX09VVFBVVFM7CSAgICAvKiBObyBpbnRlcnJ1cHRzICovCi0JSDM4MDBfQVNJQzFfR1BJT19TTEVFUF9NQVNLCT0gQVNJQzFfT1VUUFVUUzsKLQlIMzgwMF9BU0lDMV9HUElPX1NMRUVQX0RJUgk9IEFTSUMxX09VVFBVVFM7Ci0JSDM4MDBfQVNJQzFfR1BJT19TTEVFUF9PVVQJPSBHUElPMV9FQVJfT05fTjsKLQlIMzgwMF9BU0lDMV9HUElPX0JBVFRfRkFVTFRfRElSID0gQVNJQzFfT1VUUFVUUzsKLQlIMzgwMF9BU0lDMV9HUElPX0JBVFRfRkFVTFRfT1VUID0gR1BJTzFfRUFSX09OX047Ci0KLQlIMzgwMF9BU0lDMV9HUElPX09VVCA9IEdQSU8xX0lSX09OX04KLQkJCQkgICAgICB8IEdQSU8xX1JTMjMyX09OCi0JCQkJICAgICAgfCBHUElPMV9FQVJfT05fTjsKLQotCS8qIFNldCB1cCBBU0lDICMyICovCi0JSDM4MDBfQVNJQzJfR1BJT1BJT0QJPSBHUElPMl9JTl9ZMV9OIHwgR1BJTzJfSU5fWDFfTjsKLQlIMzgwMF9BU0lDMl9HUE9CRlNUQVQJPSBHUElPMl9JTl9ZMV9OIHwgR1BJTzJfSU5fWDFfTjsKLQotCUgzODAwX0FTSUMyX0dQSU9ESVIJPSBHUElPMl9QRU5fSVJRCi0JCQkJICAgICAgfCBHUElPMl9TRF9ERVRFQ1QKLQkJCQkgICAgICB8IEdQSU8yX0VBUl9JTl9OCi0JCQkJICAgICAgfCBHUElPMl9VU0JfREVURUNUX04KLQkJCQkgICAgICB8IEdQSU8yX1NEX0NPTl9TTFQ7Ci0KLQkvKiBUT0RPIDogU2V0IHNsZWVwIHN0YXRlcyAmIGJhdHRlcnkgZmF1bHQgc3RhdGVzICovCi0KLQkvKiBDbGVhciBWUFAgRW5hYmxlICovCi0JSDM4MDBfQVNJQzJfRmxhc2hXUF9WUFBfT04gPSAwOwotCWlwYXFfbW9kZWxfb3BzID0gaDM4MDBfbW9kZWxfb3BzOwotfQotCi1NQUNISU5FX1NUQVJUKEgzODAwLCAiQ29tcGFxIGlQQVEgSDM4MDAiKQotCS5waHlzX2lvCT0gMHg4MDAwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKDB4ZjgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAotCS5tYXBfaW8JCT0gaDM4MDBfbWFwX2lvLAotCS5pbml0X2lycQk9IGgzODAwX2luaXRfaXJxLAotCS50aW1lcgkJPSAmc2ExMTAwX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBoM3h4eF9tYWNoX2luaXQsCi1NQUNISU5FX0VORAotCi0jZW5kaWYgLyogQ09ORklHX1NBMTEwMF9IMzgwMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2NvbGxpZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2NvbGxpZS5oCmluZGV4IDY5ZTk2MjQuLjllZmI1NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9jb2xsaWUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmgKQEAgLTE0LDIxICsxNCwyMSBAQAogI2RlZmluZSBfX0FTTV9BUkNIX0NPTExJRV9ICiAKIAotI2RlZmluZSBDT0xMSUVfU0NQX0NIQVJHRV9PTglTQ09PUF9HUENSX1BBMTEKKyNkZWZpbmUgQ09MTElFX1NDT09QX0dQSU9fQkFTRQkoR1BJT19NQVggKyAxKQorI2RlZmluZSBDT0xMSUVfR1BJT19DSEFSR0VfT04JKENPTExJRV9TQ09PUF9HUElPX0JBU0UgKyAwKQogI2RlZmluZSBDT0xMSUVfU0NQX0RJQUdfQk9PVDEJU0NPT1BfR1BDUl9QQTEyCiAjZGVmaW5lIENPTExJRV9TQ1BfRElBR19CT09UMglTQ09PUF9HUENSX1BBMTMKICNkZWZpbmUgQ09MTElFX1NDUF9NVVRFX0wJU0NPT1BfR1BDUl9QQTE0CiAjZGVmaW5lIENPTExJRV9TQ1BfTVVURV9SCVNDT09QX0dQQ1JfUEExNQogI2RlZmluZSBDT0xMSUVfU0NQXzVWT04JCVNDT09QX0dQQ1JfUEExNgogI2RlZmluZSBDT0xMSUVfU0NQX0FNUF9PTglTQ09PUF9HUENSX1BBMTcKLSNkZWZpbmUgQ09MTElFX1NDUF9WUEVOCQlTQ09PUF9HUENSX1BBMTgKKyNkZWZpbmUgQ09MTElFX0dQSU9fVlBFTgkoQ09MTElFX1NDT09QX0dQSU9fQkFTRSArIDcpCiAjZGVmaW5lIENPTExJRV9TQ1BfTEJfVk9MX0NIRwlTQ09PUF9HUENSX1BBMTkKIAotI2RlZmluZSBDT0xMSUVfU0NPT1BfSU9fRElSCSggQ09MTElFX1NDUF9DSEFSR0VfT04gfCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SIHwgXAotCQkJCUNPTExJRV9TQ1BfNVZPTiB8IENPTExJRV9TQ1BfQU1QX09OIHwgQ09MTElFX1NDUF9WUEVOIHwgXAorI2RlZmluZSBDT0xMSUVfU0NPT1BfSU9fRElSCSggQ09MTElFX1NDUF9NVVRFX0wgfCBDT0xMSUVfU0NQX01VVEVfUiB8IFwKKwkJCQlDT0xMSUVfU0NQXzVWT04gfCBDT0xMSUVfU0NQX0FNUF9PTiB8IFwKIAkJCQlDT0xMSUVfU0NQX0xCX1ZPTF9DSEcgKQotI2RlZmluZSBDT0xMSUVfU0NPT1BfSU9fT1VUCSggQ09MTElFX1NDUF9NVVRFX0wgfCBDT0xMSUVfU0NQX01VVEVfUiB8IENPTExJRV9TQ1BfVlBFTiB8IFwKLQkJCQlDT0xMSUVfU0NQX0NIQVJHRV9PTiApCisjZGVmaW5lIENPTExJRV9TQ09PUF9JT19PVVQJKCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SICkKIAogLyogR1BJT3MgZm9yIHdoaWNoIHRoZSBnZW5lcmljIGRlZmluaXRpb24gZG9lc24ndCBzYXkgbXVjaCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaDM2MDAuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oCmluZGV4IDljYzQ3ZmQuLjI4MjdmYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFBNX1JFU1VNRQkoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAyKQkvKiBlbnRlciBEMCAqLwogCiAvKiBnZW5lcmFsaXplZCBzdXBwb3J0IGZvciBIM3h4eCBzZXJpZXMgQ29tcGFxIFBvY2tldCBQQydzICovCi0jZGVmaW5lIG1hY2hpbmVfaXNfaDN4eHgoKSAobWFjaGluZV9pc19oMzEwMCgpIHx8IG1hY2hpbmVfaXNfaDM2MDAoKSB8fCBtYWNoaW5lX2lzX2gzODAwKCkpCisjZGVmaW5lIG1hY2hpbmVfaXNfaDN4eHgoKSAobWFjaGluZV9pc19oMzEwMCgpIHx8IG1hY2hpbmVfaXNfaDM2MDAoKSkKIAogLyogUGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgY29ycmVzcG9uZGluZyB0byBjaGlwIHNlbGVjdHMgKi8KICNkZWZpbmUgSDM2MDBfRUdQSU9fUEhZUwkoU0ExMTAwX0NTNV9QSFlTICsgMHgwMTAwMDAwMCkKQEAgLTkzLDc2ICs5Myw3IEBACiAJSVBBUV9FR1BJT19MQ0RfRU5BQkxFLAkgIC8qIEVuYWJsZS9kaXNhYmxlIExDRCBjb250cm9sbGVyICovCiB9OwogCi1zdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgewotCWNvbnN0IGNoYXIgICAgICpnZW5lcmljX25hbWU7Ci0Jdm9pZAkgICAgICAoKmNvbnRyb2wpKGVudW0gaXBhcV9lZ3Bpb190eXBlLCBpbnQpOwotCXVuc2lnbmVkIGxvbmcgKCpyZWFkKSh2b2lkKTsKLQl2b2lkCSAgICAgICgqYmxhbmtfY2FsbGJhY2spKGludCBibGFuayk7Ci0JaW50CSAgICAgICgqcG1fY2FsbGJhY2spKGludCByZXEpOwkgICAgLyogUHJpbWFyeSBtb2RlbCBjYWxsYmFjayAqLwotCWludAkgICAgICAoKnBtX2NhbGxiYWNrX2F1eCkoaW50IHJlcSk7ICAvKiBTZWNvbmRhcnkgY2FsbGJhY2sgKHVzZWQgYnkgSEFMIG1vZHVsZXMpICovCi19OwotCi1leHRlcm4gc3RydWN0IGlwYXFfbW9kZWxfb3BzIGlwYXFfbW9kZWxfb3BzOwotCi1zdGF0aWMgX19pbmxpbmVfXyBjb25zdCBjaGFyICogaDM2MDBfZ2VuZXJpY19uYW1lKHZvaWQpCi17Ci0JcmV0dXJuIGlwYXFfbW9kZWxfb3BzLmdlbmVyaWNfbmFtZTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBhc3NpZ25faDM2MDBfZWdwaW8oZW51bSBpcGFxX2VncGlvX3R5cGUgeCwgaW50IGxldmVsKQotewotCWlmIChpcGFxX21vZGVsX29wcy5jb250cm9sKQotCQlpcGFxX21vZGVsX29wcy5jb250cm9sKHgsbGV2ZWwpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNscl9oMzYwMF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4KQotewotCWlmIChpcGFxX21vZGVsX29wcy5jb250cm9sKQotCQlpcGFxX21vZGVsX29wcy5jb250cm9sKHgsMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2gzNjAwX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCi0JCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCwxKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyByZWFkX2gzNjAwX2VncGlvKHZvaWQpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLnJlYWQpCi0JCXJldHVybiBpcGFxX21vZGVsX29wcy5yZWFkKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCAgaDM2MDBfcmVnaXN0ZXJfYmxhbmtfY2FsbGJhY2sodm9pZCAoKmYpKGludCkpCi17Ci0JaXBhcV9tb2RlbF9vcHMuYmxhbmtfY2FsbGJhY2sgPSBmOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGgzNjAwX3VucmVnaXN0ZXJfYmxhbmtfY2FsbGJhY2sodm9pZCAoKmYpKGludCkpCi17Ci0JaXBhcV9tb2RlbF9vcHMuYmxhbmtfY2FsbGJhY2sgPSBOVUxMOwotfQotCi0KLXN0YXRpYyBfX2lubGluZV9fIGludCAgaDM2MDBfcmVnaXN0ZXJfcG1fY2FsbGJhY2soaW50ICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggPSBmOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGgzNjAwX3VucmVnaXN0ZXJfcG1fY2FsbGJhY2soaW50ICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggPSBOVUxMOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaDM2MDBfcG93ZXJfbWFuYWdlbWVudChpbnQgcmVxKQotewotCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFjaykKLQkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrKHJlcSk7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gdm9pZCAoKmFzc2lnbl9oMzYwMF9lZ3BpbykoZW51bSBpcGFxX2VncGlvX3R5cGUgeCwgaW50IGxldmVsKTsKIAogI2VuZGlmIC8qIEFTU0VNQkxZICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMF9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaDM2MDBfZ3Bpby5oCmluZGV4IDYyYjBiNzguLmEzNmNhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMF9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwX2dwaW8uaApAQCAtNDgsMjIgKzQ4LDExIEBACiAjZGVmaW5lIEdQSU9fSDM2MDBfT1BUX0xPQ0sJCUdQSU9fR1BJTyAoMjIpCiAjZGVmaW5lIEdQSU9fSDM2MDBfT1BUX0RFVAkJR1BJT19HUElPICgyNykKIAotLyogSDM4MDAgc3BlY2lmaWMgcGlucyAqLwotI2RlZmluZSBHUElPX0gzODAwX0FDX0lOICAgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMTIpCi0jZGVmaW5lIEdQSU9fSDM4MDBfQ09NX0RTUiAgICAgICAgICAgICAgR1BJT19HUElPICgxMykKLSNkZWZpbmUgR1BJT19IMzgwMF9NTUNfSU5UICAgICAgICAgICAgICBHUElPX0dQSU8gKDE4KQotI2RlZmluZSBHUElPX0gzODAwX05PUFRfSU5EICAgICAgICAgICAgIEdQSU9fR1BJTyAoMjApICAgLyogQWxtb3N0IGV4YWN0bHkgdGhlIHNhbWUgYXMgR1BJT19IMzYwMF9PUFRfREVUICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfT1BUX0JBVF9GQVVMVCAgICAgICAgR1BJT19HUElPICgyMikKLSNkZWZpbmUgR1BJT19IMzgwMF9DTEtfT1VUICAgICAgICAgICAgICBHUElPX0dQSU8gKDI3KQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBJUlFfR1BJT19IMzYwMF9BQ1RJT05fQlVUVE9OICAgIElSUV9HUElPMTgKICNkZWZpbmUgSVJRX0dQSU9fSDM2MDBfT1BUX0RFVAkJSVJRX0dQSU8yNwogCi0jZGVmaW5lIElSUV9HUElPX0gzODAwX01NQ19JTlQgICAgICAgICAgSVJRX0dQSU8xOAotI2RlZmluZSBJUlFfR1BJT19IMzgwMF9OT1BUX0lORCAgICAgICAgIElSUV9HUElPMjAgLyogYWxtb3N0IHNhbWUgYXMgT1BUX0RFVCAqLwotCiAvKiBIMzEwMCAvIDM2MDAgRUdQSU8gcGlucyAqLwogI2RlZmluZSBFR1BJT19IMzYwMF9WUFBfT04JCSgxIDw8IDApCiAjZGVmaW5lIEVHUElPX0gzNjAwX0NBUkRfUkVTRVQJCSgxIDw8IDEpICAgLyogcmVzZXQgdGhlIGF0dGFjaGVkIHBjbWNpYS9jb21wYWN0Zmxhc2ggY2FyZC4gIGFjdGl2ZSBoaWdoLiAqLwpAQCAtODQsNDU3ICs3Myw1IEBACiAjZGVmaW5lIEVHUElPX0gzNjAwX0xDRF81Vl9PTgkJKDEgPDwgMTQpICAvKiBlbmFibGUgNVYgdG8gTENELiBhY3RpdmUgaGlnaC4gKi8KICNkZWZpbmUgRUdQSU9fSDM2MDBfTFZERF9PTgkJKDEgPDwgMTUpICAvKiBlbmFibGUgOVYgYW5kIC02LjVWIHRvIExDRC4gKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKiBIMzgwMCwgQVNJQyAjMiAqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfQmFzZSAgICAgICAgICAgIChIMzYwMF9FR1BJT19WSVJUKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PRkZTRVQocyx4LHkpICAgIFwKLSAgICAoKigodm9sYXRpbGUgcyAqKSAoX0gzODAwX0FTSUMyX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgXyAjIyB5KSkpCi0jZGVmaW5lIEgzODAwX0FTSUMyX05PRkZTRVQocyx4LG4seSkgXAotICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIG4gIyMgX0Jhc2UgKyBfSDM4MDBfQVNJQzJfICMjIHggIyMgXyAjIyB5KSkpCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fQmFzZSAgICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0RpcmVjdGlvbiAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1csIDE2IGJpdHMgMTppbnB1dCwgMDpvdXRwdXQgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0VHlwZSAgICAgICAgMHgwMDA0ICAgIC8qIFIvVywgMTIgYml0cyAxOmVkZ2UsIDA6bGV2ZWwgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RWRnZVR5cGUgICAgMHgwMDA4ICAgIC8qIFIvVywgMTIgYml0cyAxOnJpc2luZywgMDpmYWxsaW5nICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdExldmVsVHlwZSAgIDB4MDAwQyAgICAvKiBSL1csIDEyIGJpdHMgMTpoaWdoLCAwOmxvdyAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0Q2xlYXIgICAgICAgMHgwMDEwICAgIC8qIFcsICAgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRGbGFnICAgICAgICAweDAwMTAgICAgLyogUiwgICAxMiBiaXRzIC0gcmVhZHMgaW50IHN0YXR1cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19EYXRhICAgICAgICAgICAgICAgICAweDAwMTQgICAgLyogUi9XLCAxNiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0JhdHRGYXVsdE91dCAgICAgICAgIDB4MDAxOCAgICAvKiBSL1csIDE2IGJpdCAtIHNldHMgbGV2ZWwgb24gYmF0dCBmYXVsdCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFbmFibGUgICAgICAweDAwMWMgICAgLyogUi9XLCAxMiBiaXRzIDE6ZW5hYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19BbHRlcm5hdGUgICAgICAgICAgICAweDAwM2MgICAgLyogUi9XLCAxMisxIGJpdHMgLSBzZXQgYWx0ZXJuYXRlIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fRGlyZWN0aW9uICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBEaXJlY3Rpb24gKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdFR5cGUgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0VHlwZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RWRnZVR5cGUgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRFZGdlVHlwZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0TGV2ZWxUeXBlIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRMZXZlbFR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdENsZWFyICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0Q2xlYXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEZsYWcgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgSW50ZXJydXB0RmxhZyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fRGF0YSAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBEYXRhICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19CYXR0RmF1bHRPdXQgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEJhdHRGYXVsdE91dCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RW5hYmxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRFbmFibGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0FsdGVybmF0ZSAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgQWx0ZXJuYXRlICkKLQotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1kxX04gICAgICAgICAgKDEgPDwgMCkgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFkxICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWDAgICAgICAgICAgICAoMSA8PCAxKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWDAgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9JTl9ZMCAgICAgICAgICAgICgxIDw8IDIpICAgLyogT3V0cHV0OiBUb3VjaHNjcmVlbiBZMCAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1gxX04gICAgICAgICAgKDEgPDwgMykgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFgxICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfQlRfUlNUICAgICAgICAgICAoMSA8PCA0KSAgIC8qIE91dHB1dDogQmx1ZXRvb3RoIHJlc2V0ICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfUEVOX0lSUSAgICAgICAgICAoMSA8PCA1KSAgIC8qIElucHV0IDogUGVuIGRvd24gICAgICAgICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfU0RfREVURUNUICAgICAgICAoMSA8PCA2KSAgIC8qIElucHV0IDogU0QgZGV0ZWN0ICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfRUFSX0lOX04gICAgICAgICAoMSA8PCA3KSAgIC8qIElucHV0IDogQXVkaW8gamFjayBwbHVnIGluc2VydGVkICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfT1BUX1BDTV9SRVNFVCAgICAoMSA8PCA4KSAgIC8qIE91dHB1dDogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9PUFRfUkVTRVQgICAgICAgICgxIDw8IDkpICAgLyogT3V0cHV0OiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX1VTQl9ERVRFQ1RfTiAgICAgKDEgPDwgMTApICAvKiBJbnB1dCA6ICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfU0RfQ09OX1NMVCAgICAgICAoMSA8PCAxMSkgIC8qIElucHV0IDogKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19CYXNlICAgICAgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fRGlyZWN0aW9uICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVywgMTIgYml0cyAxOmlucHV0LCAwOm91dHB1dCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRUeXBlICAgICAgICAweDAwMDQgICAgLyogUi9XLCAxMiBiaXRzIDE6ZWRnZSwgMDpsZXZlbCAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgICAweDAwMDggICAgLyogUi9XLCAxMiBiaXRzIDE6cmlzaW5nLCAwOmZhbGxpbmcgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0TGV2ZWxUeXBlICAgMHgwMDBDICAgIC8qIFIvVywgMTIgYml0cyAxOmhpZ2gsIDA6bG93ICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRDbGVhciAgICAgICAweDAwMTAgICAgLyogVywgICAyMCBiaXRzIC0gOCBzcGVjaWFsICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEZsYWcgICAgICAgIDB4MDAxMCAgICAvKiBSLCAgIDIwIGJpdHMgLSA4IHNwZWNpYWwgLSByZWFkcyBpbnQgc3RhdHVzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0RhdGEgICAgICAgICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1csIDE2IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fQmF0dEZhdWx0T3V0ICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVywgMTYgYml0IC0gc2V0cyBsZXZlbCBvbiBiYXR0IGZhdWx0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVuYWJsZSAgICAgIDB4MDAxYyAgICAvKiBSL1csIDIwIGJpdHMgLSA4IHNwZWNpYWwgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fQWx0ZXJuYXRlICAgICAgICAgICAgMHgwMDNjICAgIC8qIFIvVywgNiBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19EaXJlY3Rpb24gICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIERpcmVjdGlvbiApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0VHlwZSAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBJbnRlcnJ1cHRUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdEVkZ2VUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdExldmVsVHlwZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0Q2xlYXIgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTMyLCBLUElPLCBJbnRlcnJ1cHRDbGVhciApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTMyLCBLUElPLCBJbnRlcnJ1cHRGbGFnICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19EYXRhICAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIERhdGEgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0JhdHRGYXVsdE91dCAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgQmF0dEZhdWx0T3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRFbmFibGUgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdEVuYWJsZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQWx0ZXJuYXRlICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBBbHRlcm5hdGUgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fU1BJX0lOVCAgICAgICAgKCAxIDw8IDE2ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19PV01fSU5UICAgICAgICAoIDEgPDwgMTcgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0FEQ19JTlQgICAgICAgICggMSA8PCAxOCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVUFSVF8wX0lOVCAgICAgKCAxIDw8IDE5ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19VQVJUXzFfSU5UICAgICAoIDEgPDwgMjAgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1RJTUVSXzBfSU5UICAgICggMSA8PCAyMSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVElNRVJfMV9JTlQgICAgKCAxIDw8IDIyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19USU1FUl8yX0lOVCAgICAoIDEgPDwgMjMgKQotCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfUkVDT1JEX0JUTl9OICAgICAoMSA8PCAwKSAgIC8qIFJlY29yZCBidXR0b24gKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVcxX04gICAgICAgICgxIDw8IDEpICAgLyogS2V5cGFkICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXMl9OICAgICAgICAoMSA8PCAyKSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXM19OICAgICAgICAoMSA8PCAzKSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXNF9OICAgICAgICAoMSA8PCA0KSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZXzVXNV9OICAgICAgICAoMSA8PCA1KSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0xFRlRfTiAgICAgICAoMSA8PCA2KSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX1JJR0hUX04gICAgICAoMSA8PCA3KSAgIC8qICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQMV9OICAgICAgICAoMSA8PCA4KSAgIC8qIE9sZCAiQ2FsZW5kYXIiICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQMl9OICAgICAgICAoMSA8PCA5KSAgIC8qIE9sZCAiU2NoZWR1bGUiICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQM19OICAgICAgICAoMSA8PCAxMCkgIC8qIE9sZCAiUSIgICAgICAgICovCi0jZGVmaW5lIEtQSU9fSDM4MDBfQVNJQzJfS0VZX0FQNF9OICAgICAgICAoMSA8PCAxMSkgIC8qIE9sZCAiVW5kbyIgICAgICovCi0KLS8qIEFsdGVybmF0ZSBLUElPIGZ1bmN0aW9ucyAoc2V0IGJ5IGRlZmF1bHQpICovCi0jZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzFfTiAgICAgICAgKDEgPDwgMSkgICAvKiBBY3Rpb24ga2V5ICovCi0jZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzJfTiAgICAgICAgKDEgPDwgMikgICAvKiBKMSBvZiBrZXlwYWQgaW5wdXQgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXM19OICAgICAgICAoMSA8PCAzKSAgIC8qIEoyIG9mIGtleXBhZCBpbnB1dCAqLwotI2RlZmluZSBLUElPX0FMVF9IMzgwMF9BU0lDMl9LRVlfNVc0X04gICAgICAgICgxIDw8IDQpICAgLyogSjMgb2Yga2V5cGFkIGlucHV0ICovCi0jZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzVfTiAgICAgICAgKDEgPDwgNSkgICAvKiBKNCBvZiBrZXlwYWQgaW5wdXQgKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0Jhc2UgICAgICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9Db250cm9sICAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9EYXRhICAgICAgICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1NQSV9DaGlwU2VsZWN0RGlzYWJsZWQgICAgMHgwMDA4ICAgIC8qIFcgICA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfQ29udHJvbCAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIENvbnRyb2wgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfRGF0YSAgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIERhdGEgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9TUElfQ2hpcFNlbGVjdERpc2FibGVkICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBTUEksIENoaXBTZWxlY3REaXNhYmxlZCApCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV8wX0Jhc2UgICAgICAgICAgICAgICAgMHgwNjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fMV9CYXNlICAgICAgICAgICAgICAgIDB4MDcwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX1RpbWVCYXNlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX1BlcmlvZFRpbWUgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDEyIGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV9EdXR5VGltZSAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIvVyAxMiBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzBfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBQV00sIDAsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzBfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDAsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMCwgRHV0eVRpbWUgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8xX1RpbWVCYXNlICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgUFdNLCAxLCBUaW1lQmFzZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8xX1BlcmlvZFRpbWUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgUFdNLCAxLCBQZXJpb2RUaW1lICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfRHV0eVRpbWUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDEsIER1dHlUaW1lICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fVElNRUJBU0VfTUFTSyAgICAgICAgICAgICAweGYgICAgLyogTG93IDQgYml0cyBzZXRzIHRpbWUgYmFzZSwgbWF4ID0gOCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fVElNRUJBU0VfRU5BQkxFICAgICggMSA8PCA0ICkgICAgLyogRW5hYmxlIGNsb2NrICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9DTEVBUiAgICAgKCAxIDw8IDUgKSAgICAvKiBDbGVhciB0aGUgUFdNICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF8wX0Jhc2UgICAgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfMV9CYXNlICAgICAgICAgICAgICAgIDB4MDg4MAotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEXzJfQmFzZSAgICAgICAgICAgICAgICAweDA5MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9UaW1lQmFzZSAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyAgNyBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfUGVyaW9kVGltZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX0R1dHlUaW1lICAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIDEyIGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9BdXRvU3RvcENvdW50ICAgICAgICAgMHgwMDBjICAgIC8qIFIvVyAxNiBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzBfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDAsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzBfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDAsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgRHV0eVRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgQXV0b1N0b3BDbG9jayApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzFfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDEsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzFfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDEsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgRHV0eVRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgQXV0b1N0b3BDbG9jayApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzJfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBMRUQsIDIsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEXzJfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBMRUQsIDIsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgRHV0eVRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9BdXRvU3RvcENsb2NrICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgQXV0b1N0b3BDbG9jayApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX01BU0sgICAgICAgICAgICAweDBmICAgIC8qIExvdyA0IGJpdHMgc2V0cyB0aW1lIGJhc2UsIG1heCA9IDEzICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF9USU1FQkFTRV9CTElOSyAgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgYmxpbmtpbmcgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0FVVE9TVE9QICAoIDEgPDwgNSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF9USU1FQkFTRV9BTFdBWVMgICAgKCAxIDw8IDYgKSAgICAvKiBFbmFibGUgYmxpbmsgYWx3YXlzICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfMF9CYXNlICAgICAgICAgICAgICAgMHgwQTAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUXzFfQmFzZSAgICAgICAgICAgICAgIDB4MEMwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9SZWNlaXZlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUiAgICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfVHJhbnNtaXQgICAgICAgICAgICAgMHgwMDAwICAgIC8qICAgVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0ludEVuYWJsZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9JbnRWZXJpZnkgICAgICAgICAgICAweDAwMDggICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfRklGT0NvbnRyb2wgICAgICAgICAgMHgwMDBjICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0xpbmVDb250cm9sICAgICAgICAgIDB4MDAxMCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9Nb2RlbVN0YXR1cyAgICAgICAgICAweDAwMTQgICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfTGluZVN0YXR1cyAgICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX1NjcmF0Y2hQYWQgICAgICAgICAgIDB4MDAxYyAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9EaXZpc29yTGF0Y2hMICAgICAgICAweDAwMjAgICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfRGl2aXNvckxhdGNoSCAgICAgICAgMHgwMDI0ICAgIC8qIFIvVyAgOCBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX1JlY2VpdmUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBSZWNlaXZlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX1RyYW5zbWl0ICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBUcmFuc21pdCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9JbnRFbmFibGUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgSW50RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0ludFZlcmlmeSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBJbnRWZXJpZnkgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRklGT0NvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIEZJRk9Db250cm9sICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0xpbmVDb250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBMaW5lQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9Nb2RlbVN0YXR1cyAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgTW9kZW1TdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfTGluZVN0YXR1cyAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIExpbmVTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfU2NyYXRjaFBhZCAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFNjcmF0Y2hQYWQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRGl2aXNvckxhdGNoTCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIERpdmlzb3JMYXRjaEwgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfRGl2aXNvckxhdGNoSCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIERpdmlzb3JMYXRjaEggKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9SZWNlaXZlICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgUmVjZWl2ZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9UcmFuc21pdCAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgVHJhbnNtaXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfSW50RW5hYmxlICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIEludEVuYWJsZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9JbnRWZXJpZnkgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgSW50VmVyaWZ5ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0ZJRk9Db250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBGSUZPQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9MaW5lQ29udHJvbCAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgTGluZUNvbnRyb2wgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfTW9kZW1TdGF0dXMgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIE1vZGVtU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0xpbmVTdGF0dXMgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBMaW5lU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1NjcmF0Y2hQYWQgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBTY3JhdGNoUGFkICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0Rpdmlzb3JMYXRjaEwgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBEaXZpc29yTGF0Y2hMICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0Rpdmlzb3JMYXRjaEggICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBEaXZpc29yTGF0Y2hIICkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfVElNRVJfQmFzZSAgICAgICAgICAgICAgICAweDBFMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1RJTUVSX0NvbW1hbmQgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyAgOCBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ29tbWFuZCAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgVGltZXIsIENvbW1hbmQgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8wICAgICAgICAgICAgKCAxIDw8IDAgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAwICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8xICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAxICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0dBVF8yICAgICAgICAgICAgKCAxIDw8IDIgKSAgICAvKiBHYXRlIGVuYWJsZSwgY291bnRlciAyICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0NMS18wICAgICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBDbG9jayBlbmFibGUsIGNvdW50ZXIgMCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9DTEtfMSAgICAgICAgICAgICggMSA8PCA0ICkgICAgLyogQ2xvY2sgZW5hYmxlLCBjb3VudGVyIDEgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ0xLXzIgICAgICAgICAgICAoIDEgPDwgNSApICAgIC8qIENsb2NrIGVuYWJsZSwgY291bnRlciAyICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX01PREVfMCAgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiBNb2RlIDAgZW5hYmxlLCBjb3VudGVyIDAgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfTU9ERV8xICAgICAgICAgICAoIDEgPDwgNyApICAgIC8qIE1vZGUgMCBlbmFibGUsIGNvdW50ZXIgMSAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9DTE9DS19CYXNlICAgICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfQ0xPQ0tfRW5hYmxlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICAxOCBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRW5hYmxlICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIENMT0NLLCBFbmFibGUgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FVRElPXzEgICAgICAgICAgICAgIDB4MDAwMSAgICAvKiBFbmFibGUgNC4xIE1IeiBjbG9jayBmb3IgOEtoeiBhbmQgNGtoeiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT18yICAgICAgICAgICAgICAweDAwMDIgICAgLyogRW5hYmxlIDEyLjMgTUh6IGNsb2NrIGZvciA0OEtoeiBhbmQgMzJraHogc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fMyAgICAgICAgICAgICAgMHgwMDA0ICAgIC8qIEVuYWJsZSA1LjYgTUh6IGNsb2NrIGZvciAxMSBrSFogc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fNCAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIEVuYWJsZSAxMS4yODkgTUh6IGNsb2NrIGZvciA0NCBhbmQgMjIga0h6IHNhbXBsZSByYXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FEQyAgICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiAxLjAyNCBNSHogY2xvY2sgdG8gQURDICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NQSSAgICAgICAgICAgICAgKCAxIDw8IDUgKSAgICAvKiA0LjA5NiBNSHogY2xvY2sgdG8gU1BJICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX09XTSAgICAgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiA0LjA5NiBNSHogY2xvY2sgdG8gT1dNICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1BXTSAgICAgICAgICAgICAgKCAxIDw8IDcgKSAgICAvKiAyLjA0OCBNSHogY2xvY2sgdG8gUFdNICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1VBUlRfMSAgICAgICAgICAgKCAxIDw8IDggKSAgICAvKiAyNC41NzYgTUh6IGNsb2NrIHRvIFVBUlQxICh0dXJuIG9mZiBiaXQgMTYpICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1VBUlRfMCAgICAgICAgICAgKCAxIDw8IDkgKSAgICAvKiAyNC41NzYgTUh6IGNsb2NrIHRvIFVBUlQwICh0dXJuIG9mZiBiaXQgMTcpICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzEgICAgICAgICAgICAgKCAxIDw8IDEwICkgICAvKiAxNi45MzQgTUh6IHRvIFNEICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzIgICAgICAgICAgICAgKCAyIDw8IDEwICkgICAvKiAyNC41NzYgTUh6IHRvIFNEICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzMgICAgICAgICAgICAgKCAzIDw8IDEwICkgICAvKiAzMy44NjkgTUh6IHRvIFNEICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NEXzQgICAgICAgICAgICAgKCA0IDw8IDEwICkgICAvKiA0OS4xNTIgTUh6IHRvIFNEICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMCAgICAgICAgICAgICAgKCAxIDw8IDEzICkgICAvKiBFbmFibGUgMzIuNzY4IGtIeiBjcnlzdGFsICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMSAgICAgICAgICAgICAgKCAxIDw8IDE0ICkgICAvKiBFbmFibGUgMjQuNTc2IE1IeiBjcnlzdGFsICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0VYMiAgICAgICAgICAgICAgKCAxIDw8IDE1ICkgICAvKiBFbmFibGUgMzMuODY5IE1IeiBjcnlzdGFsICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX1NMT1dfVUFSVF8xICAgICAgKCAxIDw8IDE2ICkgICAvKiBFbmFibGUgMy42ODYgTUh6IHRvIFVBUlQxICh0dXJuIG9mZiBiaXQgOCkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0xPV19VQVJUXzAgICAgICAoIDEgPDwgMTcgKSAgIC8qIEVuYWJsZSAzLjY4NiBNSHogdG8gVUFSVDAgKHR1cm4gb2ZmIGJpdCA5KSAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9BRENfQmFzZSAgICAgICAgICAgICAgICAgIDB4MTIwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX011bHRpcGxleGVyICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDQgYml0cyAtIGxvdyAzIGJpdHMgc2V0IGNoYW5uZWwgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19Db250cm9sU3RhdHVzICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19EYXRhICAgICAgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIgICAxMCBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQURDX011bHRpcGxleGVyICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggIHU4LCBBREMsIE11bHRpcGxleGVyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfQURDX0NvbnRyb2xTdGF0dXMgICAgIEgzODAwX0FTSUMyX09GRlNFVCggIHU4LCBBREMsIENvbnRyb2xTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfRGF0YSAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEFEQywgRGF0YSApCi0KLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX01VWF9DSEFOTkVMX01BU0sgICAgICAgICAweDA3ICAgIC8qIExvdyAzIGJpdHMgc2V0cyBjaGFubmVsLiAgbWF4ID0gNCAqLwotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfTVVYX0NMS0VOICAgICAgICAgICggMSA8PCAzICkgICAgLyogRW5hYmxlIGNsb2NrICovCi0KLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9BRFBTX01BU0sgICAgICAgICAgICAweDBmICAgIC8qIExvdyA0IGJpdHMgc2V0cyBwcmVzY2FsZSwgbWF4ID0gOCAqLwotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0ZSRUVfUlVOICAgICAgICggMSA8PCA0ICkKLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9JTlRfRU5BQkxFICAgICAoIDEgPDwgNSApCi0jZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19DU1JfU1RBUlQgICAgICAgICAgKCAxIDw8IDYgKSAgICAvKiBTZXQgdG8gc3RhcnQgY29udmVyc2lvbi4gIEdvZXMgdG8gMCB3aGVuIGRvbmUgKi8KLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9FTkFCTEUgICAgICAgICAoIDEgPDwgNyApICAgIC8qIDE6cG93ZXIgdXAgQURDLCAwOnBvd2VyIGRvd24gKi8KLQotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX0Jhc2UgICAgICAgICAgICAgICAgIDB4MTYwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfSU5UUl9NYXNrQW5kRmxhZyAgICAgICAgICAweDAwMDAgICAgLyogUi8oVykgOGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfQ2xvY2tQcmVzY2FsZSAgICAgICAgMHgwMDA0ICAgIC8qIFIvKFcpIDViaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0ICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSLyhXKSA4Yml0cyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTWFza0FuZEZsYWcgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBJTlRSLCBNYXNrQW5kRmxhZyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfQ2xvY2tQcmVzY2FsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBJTlRSLCBDbG9ja1ByZXNjYWxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9UaW1lclNldCAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIFRpbWVyU2V0ICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0dMT0JBTF9NQVNLICAgICAgICggMSA8PCAwICkgICAgLyogR2xvYmFsIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfUE9XRVJfT05fUkVTRVQgICAgKCAxIDw8IDEgKSAgICAvKiAwMTogUG93ZXIgb24gcmVzZXQgKGJpdHMgMSAmIDIgKSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0VYVEVSTkFMX1JFU0VUICAgICggMiA8PCAxICkgICAgLyogMTA6IEV4dGVybmFsIHJlc2V0IChiaXRzIDEgJiAyICkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX1VBUlRfMCAgICAgICAoIDEgPDwgNCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTUFTS19VQVJUXzEgICAgICAgKCAxIDw8IDUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfVElNRVIgICAgICAgICggMSA8PCA2ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX09XTSAgICAgICAgICAoIDEgPDwgNyApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9DTE9DS19QUkVTQ0FMRSAgICAgICAgICAweDBmICAgIC8qIDQgYml0cywgbWF4IDE0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfU0VUICAgICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBUaW1lIGJhc2UgZW5hYmxlICovCi0KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0Jhc2UgICAgICAgICAgICAgICAgICAweDE4MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9Db21tYW5kICAgICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVyA0IGJpdHMgY29tbWFuZCByZWdpc3RlciAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cywgdHJhbnNtaXQgLyByZWNlaXZlIGJ1ZmZlciAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdCAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIENvbW1hbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9JbnRlcnJ1cHRFbmFibGUgICAgICAgMHgwMDBjICAgIC8qIFIvVyBDb21tYW5kIHJlZ2lzdGVyICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fQ2xvY2tEaXZpc29yICAgICAgICAgIDB4MDAxMCAgICAvKiBSL1cgNSBiaXRzIG9mIGRpdmlzb3IgYW5kIHByZS1zY2FsZSAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9Db21tYW5kICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBDb21tYW5kICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0RhdGEgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIERhdGEgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0ICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgSW50ZXJydXB0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdEVuYWJsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIEludGVycnVwdEVuYWJsZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DbG9ja0Rpdmlzb3IgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBDbG9ja0Rpdmlzb3IgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfT05FX1dJUkVfUkVTRVQgKCAxIDw8IDAgKSAgICAvKiBTZXQgdG8gZm9yY2UgcmVzZXQgb24gMS13aXJlIGJ1cyAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX1NSQSAgICAgICAgICAgICggMSA8PCAxICkgICAgLyogU2V0IHRvIHN3aXRjaCB0byBTZWFyY2ggUk9NIGFjY2VsZXJhdG9yIG1vZGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NNRF9EUV9PVVRQVVQgICAgICAoIDEgPDwgMiApICAgIC8qIFdyaXRlIG9ubHkgLSBmb3JjZXMgYnVzIGxvdyAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX0RRX0lOUFVUICAgICAgICggMSA8PCAzICkgICAgLyogUmVhZCBvbmx5IC0gcmVmbGVjdHMgc3RhdGUgb2YgYnVzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVF9QRCAgICAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIFByZXNlbmNlIGRldGVjdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1BEUiAgICAgICAgICAgICggMSA8PCAxICkgICAgLyogUHJlc2VuY2UgZGV0ZWN0IHJlc3VsdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1RCRSAgICAgICAgICAgICggMSA8PCAyICkgICAgLyogVHJhbnNtaXQgYnVmZmVyIGVtcHR5ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfVEVNVCAgICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBUcmFuc21pdCBzaGlmdCByZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1JCRiAgICAgICAgICAgICggMSA8PCA0ICkgICAgLyogUmVjZWl2ZSBidWZmZXIgZnVsbCAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FUEQgICAgICAgICAgKCAxIDw8IDAgKSAgICAvKiBFbmFibGUgcmVjZWl2ZSBidWZmZXIgZnVsbCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0lBUyAgICAgICAgICAoIDEgPDwgMSApICAgIC8qIEVuYWJsZSB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VUQkUgICAgICAgICAoIDEgPDwgMiApICAgIC8qIEVuYWJsZSB0cmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FVE1UICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBJTlRSIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fRVJCRiAgICAgICAgICggMSA8PCA0ICkgICAgLyogRW5hYmxlIHByZXNlbmNlIGRldGVjdCBpbnRlcnJ1cHQgKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfRmxhc2hDdGxfQmFzZSAgICAgICAgICAgICAweDFBMDAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBIMzgwMCwgQVNJQyAjMQotICogVGhpcyBBU0lDIGlzIGFjY2VzZWQgdGhyb3VnaCBBU0lDICMyLCBhbmQKLSAqIG1hcHBlZCBpbnRvIHRoZSAxYzAwIC0gMWYwMCByZWdpb24KLSAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX09GRlNFVChzLHgseSkgICBcCi0gICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMV8gIyMgeCAjIyBfQmFzZSArIChfSDM4MDBfQVNJQzFfICMjIHggIyMgXyAjIyB5IDw8IDEpKSkpCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19CYXNlICAgICAgICAgICAgIDB4MWMwMAotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfU3RhcnRTdG9wQ2xvY2sgICAgIDB4MDAgICAgLyogUi9XIDhiaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TdGF0dXMgICAgICAgICAgICAgMHgwMiAgICAvKiBSICAgU2VlIGJlbG93LCBkZWZhdWx0IDB4MDA0MCAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Nsb2NrUmF0ZSAgICAgICAgICAweDA0ICAgIC8qIFIvVyA4Yml0LCBsb3cgMyBiaXRzIGFyZSBjbG9jayBkaXZpc29yICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfU1BJUmVnaXN0ZXIgICAgICAgIDB4MDggICAgLyogUi9XIDhiaXQsIHNlZSBiZWxvdyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19DbWREYXRhQ29udCAgICAgICAgMHgwYSAgICAvKiBSL1cgOGJpdCwgd3JpdGUgdG8gc3RhcnQgTU1DIGFkYXB0ZXIgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1Jlc3BvbnNlVGltZW91dCAgICAweDBjICAgIC8qIFIvVyA4Yml0LCBjbG9ja3MgYmVmb3JlIHJlc3BvbnNlIHRpbWVvdXQgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVhZFRpbWVvdXQgICAgICAgIDB4MGUgICAgLyogUi9XIDE2Yml0LCBjbG9ja3MgYmVmb3JlIHJlY2VpdmVkIGRhdGEgdGltZW91dCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Jsb2NrTGVuZ3RoICAgICAgICAweDEwICAgIC8qIFIvVyAxMGJpdCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX051bU9mQmxvY2tzICAgICAgICAweDEyICAgIC8qIFIvVyAxNmJpdCwgaW4gYmxvY2sgbW9kZSwgbnVtYmVyIG9mIGJsb2NrcyAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19JbnRlcnJ1cHRNYXNrICAgICAgMHgxYSAgICAvKiBSL1cgOGJpdCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0NvbW1hbmROdW1iZXIgICAgICAweDFjICAgIC8qIFIvVyA2IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19Bcmd1bWVudEggICAgICAgICAgMHgxZSAgICAvKiBSL1cgMTYgYml0cyAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19Bcmd1bWVudEwgICAgICAgICAgMHgyMCAgICAvKiBSL1cgMTYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1Jlc0ZpZm8gICAgICAgICAgICAweDIyICAgIC8qIFIgICA4IHggMTYgYml0cyAtIGNvbnRhaW5zIHJlc3BvbnNlIEZJRk8gKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19CdWZmZXJQYXJ0RnVsbCAgICAgMHgyOCAgICAvKiBSL1cgOCBiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1N0YXJ0U3RvcENsb2NrICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIFN0YXJ0U3RvcENsb2NrICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1N0YXR1cyAgICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DbG9ja1JhdGUgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDbG9ja1JhdGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1BJUmVnaXN0ZXIgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgU1BJUmVnaXN0ZXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ21kRGF0YUNvbnQgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQ21kRGF0YUNvbnQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVzcG9uc2VUaW1lb3V0ICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgUmVzcG9uc2VUaW1lb3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1JlYWRUaW1lb3V0ICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFJlYWRUaW1lb3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0Jsb2NrTGVuZ3RoICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIEJsb2NrTGVuZ3RoICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX051bU9mQmxvY2tzICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIE51bU9mQmxvY2tzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0ludGVycnVwdE1hc2sgICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIEludGVycnVwdE1hc2sgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ29tbWFuZE51bWJlciAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQ29tbWFuZE51bWJlciApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Bcmd1bWVudEggICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgTU1DLCBBcmd1bWVudEggKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQXJndW1lbnRMICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgQXJndW1lbnRMICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1Jlc0ZpZm8gICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIFJlc0ZpZm8gKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQnVmZmVyUGFydEZ1bGwgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgQnVmZmVyUGFydEZ1bGwgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVE9QX0NMT0NLICAgICAgICAgICAgICAgICAgICgxIDw8IDApICAgLyogV3JpdGUgdG8gIlN0YXJ0U3RvcENsb2NrIiByZWdpc3RlciAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBUlRfQ0xPQ0sgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfUkVBRF9USU1FT1VUICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfUkVTUE9OU0VfVElNRU9VVCAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1dSSVRFX0VSUk9SICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1JFQURfRVJST1IgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfU1BJX1JFQURfRVJST1IgICAgICAgICgxIDw8IDQpICAvKiBTUEkgZGF0YSB0b2tlbiBlcnJvciByZWNlaXZlZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0NSQ19SRVNQT05TRV9FUlJPUiAgICAoMSA8PCA1KQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0ZJRk9fRU1QVFkgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0ZJRk9fRlVMTCAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0NMT0NLX0VOQUJMRSAgICAgICAgICAoMSA8PCA4KSAgLyogTXVsdGlNZWRpYUNhcmQgY2xvY2sgc3RvcHBlZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0RBVEFfVFJBTlNGRVJfRE9ORSAgICAoMSA8PCAxMSkgLyogV3JpdGUgb3BlcmF0aW9uLCBpbmRpY2F0ZXMgdHJhbnNmZXIgZmluaXNoZWQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19FTkRfUFJPR1JBTSAgICAgICAgICAgKDEgPDwgMTIpIC8qIEVuZCB3cml0ZSBhbmQgcmVhZCBvcGVyYXRpb25zICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRU5EX0NPTU1BTkRfUkVTUE9OU0UgICgxIDw8IDEzKSAvKiBFbmQgY29tbWFuZCByZXNwb25zZSAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX1NQSV9FTkFCTEUgICAgICAgICAgICgxIDw8IDApICAvKiBFbmFibGVzIFNQSSBtb2RlICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX0NSQ19PTiAgICAgICAgICAgICAgICgxIDw8IDEpICAvKiAxOnR1cm4gb24gQ1JDICAgICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX1NQSV9DU19FTkFCTEUgICAgICAgICgxIDw8IDIpICAvKiAxOnR1cm4gb24gU1BJIENTICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElfUkVHX0NTX0FERFJFU1NfTUFTSyAgICAgIDB4MzggICAgICAvKiBCaXRzIDMsNCw1IGFyZSB0aGUgU1BJIENTIHJlbGF0aXZlIGFkZHJlc3MgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfTk9fUkVTUE9OU0UgIDB4MDAKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfRk9STUFUX1IxICAgICAgICAgICAweDAxCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9SMiAgICAgICAgICAgMHgwMgotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfUjMgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfREFUQV9FTkFCTEUgICAgICAgICAoMSA8PCAyKSAgLyogVGhpcyBjb21tYW5kIGNvbnRhaW5zIGEgZGF0YSB0cmFuc2ZlciAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9XUklURSAgICAgICAgICAgICAgICgxIDw8IDMpICAvKiBUaGlzIGRhdGEgdHJhbnNmZXIgaXMgYSB3cml0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9TVFJFQU1fTU9ERSAgICAgICAgICgxIDw8IDQpICAvKiBUaGlzIGRhdGEgdHJhbnNmZXIgaXMgaW4gc3RyZWFtIG1vZGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfQlVTWV9CSVQgICAgICAgICAgICAoMSA8PCA1KSAgLyogQnVzeSBzaWduYWwgZXhwZWN0ZWQgYWZ0ZXIgY3VycmVudCBjbWQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfSU5JVElBTElaRSAgICAgICAgICAoMSA8PCA2KSAgLyogRW5hYmxlcyB0aGUgODAgYml0cyBmb3IgaW5pdGlhbGl6aW5nIGNhcmQgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfREFUQV9UUkFOU0ZFUl9ET05FICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19QUk9HUkFNX0RPTkUgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0lOVF9NQVNLX0VORF9DT01NQU5EX1JFU1BPTlNFICAgICAoMSA8PCAyKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfQlVGRkVSX1JFQURZICAgICAgICAgICAgICgxIDw8IDMpCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0JVRkZFUl9QQVJUX0ZVTEwgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqKioqKioqIEdQSU8gKioqKioqKioqKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19CYXNlICAgICAgICAweDFlMDAKLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19NYXNrICAgICAgICAgIDB4MzAgICAgLyogUi9XIDA6ZG9uJ3QgbWFzaywgMTptYXNrIGludGVycnVwdCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19EaXJlY3Rpb24gICAgIDB4MzIgICAgLyogUi9XIDA6aW5wdXQsIDE6b3V0cHV0ICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19PdXQgICAgICAgICAgIDB4MzQgICAgLyogUi9XIDA6b3V0cHV0IGxvdywgMTpvdXRwdXQgaGlnaCAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19UcmlnZ2VyVHlwZSAgIDB4MzYgICAgLyogUi9XIDA6bGV2ZWwsIDE6ZWRnZSAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19FZGdlVHJpZ2dlciAgIDB4MzggICAgLyogUi9XIDA6ZmFsbGluZywgMTpyaXNpbmcgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19MZXZlbFRyaWdnZXIgIDB4M0EgICAgLyogUi9XIDA6bG93LCAxOmhpZ2ggbGV2ZWwgZGV0ZWN0ICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19MZXZlbFN0YXR1cyAgIDB4M0MgICAgLyogUi9XIDA6bm9uZSwgMTpkZXRlY3QgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19FZGdlU3RhdHVzICAgIDB4M0UgICAgLyogUi9XIDA6bm9uZSwgMTpkZXRlY3QgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TdGF0ZSAgICAgICAgIDB4NDAgICAgLyogUiAgIFNlZSBtYXNrcyBiZWxvdyAgKGRlZmF1bHQgMCkgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19SZXNldCAgICAgICAgIDB4NDIgICAgLyogUi9XIFNlZSBtYXNrcyBiZWxvdyAgKGRlZmF1bHQgMHgwNCkgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcE1hc2sgICAgIDB4NDQgICAgLyogUi9XIDA6ZG9uJ3QgbWFzaywgMTptYXNrIHRyaWdnZXIgaW4gc2xlZXAgbW9kZSAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fU2xlZXBEaXIgICAgICAweDQ2ICAgIC8qIFIvVyBkaXJlY3Rpb24gMDppbnB1dCwgMTpvdXRwdXQgaW4gc2xlZXAgbW9kZSAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcE91dCAgICAgIDB4NDggICAgLyogUi9XIGxldmVsIDA6bG93LCAxOmhpZ2ggaW4gc2xlZXAgbW9kZSAgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fU3RhdHVzICAgICAgICAweDRBICAgIC8qIFIgICBQaW4gc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdERpciAgMHg0QyAgICAvKiBSL1cgZGlyZWN0aW9uIDA6aW5wdXQsIDE6b3V0cHV0IGluIGJhdHRfZmF1bHQgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19CYXR0RmF1bHRPdXQgIDB4NEUgICAgLyogUi9XIGxldmVsIDA6bG93LCAxOmhpZ2ggaW4gYmF0dF9mYXVsdCAgICAgICAgICAgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX01hc2sgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgTWFzayApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fRGlyZWN0aW9uICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBEaXJlY3Rpb24gKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX091dCAgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgT3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19UcmlnZ2VyVHlwZSAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFRyaWdnZXJUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19FZGdlVHJpZ2dlciAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEVkZ2VUcmlnZ2VyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19MZXZlbFRyaWdnZXIgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIExldmVsVHJpZ2dlciApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fTGV2ZWxTdGF0dXMgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBMZXZlbFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fRWRnZVN0YXR1cyAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBFZGdlU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TdGF0ZSAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIEdQSU8sIFN0YXRlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19SZXNldCAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIEdQSU8sIFJlc2V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcE1hc2sgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwTWFzayApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU2xlZXBEaXIgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTbGVlcERpciApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU2xlZXBPdXQgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTbGVlcE91dCApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fU3RhdHVzICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdERpciBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0RGlyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19CYXR0RmF1bHRPdXQgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEJhdHRGYXVsdE91dCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9NQVNLICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9ESVJFQ1RJT04gICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9PVVQgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9UUklHR0VSX1RZUEUgICAgKDEgPDwgMykKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9FREdFX1RSSUdHRVIgICAgKDEgPDwgNCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TVEFURV9MRVZFTF9UUklHR0VSICAgKDEgPDwgNSkKLQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX1NPRlRXQVJFICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX0FVVE9fU0xFRVAgICAgICAoMSA8PCAxKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1JFU0VUX0ZJUlNUX1BXUl9PTiAgICAoMSA8PCAyKQotCi0vKiBUaGVzZSBhcmUgYWxsIG91dHB1dHMgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9JUl9PTl9OICAgICAgICAgICgxIDw8IDApICAgLyogQXBwbHkgcG93ZXIgdG8gdGhlIElSIE1vZHVsZSAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1NEX1BXUl9PTiAgICAgICAgKDEgPDwgMSkgICAvKiBTZWN1cmUgRGlnaXRhbCBwb3dlciBvbiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1JTMjMyX09OICAgICAgICAgKDEgPDwgMikgICAvKiBUdXJuIG9uIHBvd2VyIHRvIHRoZSBSUzIzMiBjaGlwID8gKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9QVUxTRV9HRU4gICAgICAgICgxIDw8IDMpICAgLyogR29lcyB0byBzcGVha2VyIC8gZWFycGhvbmUgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9DSF9USU1FUiAgICAgICAgICgxIDw8IDQpICAgLyogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfNVZfT04gICAgICAgICgxIDw8IDUpICAgLyogRW5hYmxlcyBMQ0RfNVYgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfT04gICAgICAgICAgICgxIDw8IDYpICAgLyogRW5hYmxlcyBMQ0RfM1YgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9MQ0RfUENJICAgICAgICAgICgxIDw8IDcpICAgLyogQ29ubmVjdHMgdG8gUERXTiBvbiBMQ0QgY29udHJvbGxlciAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1ZHSF9PTiAgICAgICAgICAgKDEgPDwgOCkgICAvKiBEcml2ZXMgVkdIIG9uIHRoZSBMQ0QgKCs5Pz8pICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfVkdMX09OICAgICAgICAgICAoMSA8PCA5KSAgIC8qIERyaXZlcnMgVkdMIG9uIHRoZSBMQ0QgKC02Pz8pICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfRkxfUFdSX09OICAgICAgICAoMSA8PCAxMCkgIC8qIEZyb250bGlnaHQgcG93ZXIgb24gKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9CVF9QV1JfT04gICAgICAgICgxIDw8IDExKSAgLyogQmx1ZXRvb3RoIHBvd2VyIG9uICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfU1BLX09OICAgICAgICAgICAoMSA8PCAxMikgIC8qICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfRUFSX09OX04gICAgICAgICAoMSA8PCAxMykgIC8qICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfQVVEX1BXUl9PTiAgICAgICAoMSA8PCAxNCkgIC8qICovCi0KLS8qIFdyaXRlIGVuYWJsZSBmb3IgdGhlIGZsYXNoICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMxX0ZsYXNoV1BfQmFzZSAgICAgICAgIDB4MUYwMAotI2RlZmluZSBfSDM4MDBfQVNJQzFfRmxhc2hXUF9WUFBfT04gICAgICAgICAweDAwICAgIC8qIFIgICAxOiB3cml0ZSwgMDogcHJvdGVjdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9GbGFzaFdQX1ZQUF9PTiAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHU4LCBGbGFzaFdQLCBWUFBfT04gKQogCiAjZW5kaWYgLyogX0lOQ0xVREVfSDM2MDBfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggMGNiMzY2MC4uYWU4MWY4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xNTMsOCArMTUzLDYgQEAKICAqLwogI2lmZGVmIENPTkZJR19TQTExMTEKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfUzFfQlZEMV9TVFNDSEcgKyAxKQotI2VsaWYgZGVmaW5lZChDT05GSUdfU0ExMTAwX0gzODAwKQotI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9FTkQpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TSEFSUF9MT0NPTU8pCiAjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0xPQ09NT19TUElfVEVORCArIDEpCiAjZWxzZQpAQCAtMTc1LDIzICsxNzMsMyBAQAogI2RlZmluZSBJUlFfTE9DT01PX0xUX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDIpCiAjZGVmaW5lIElSUV9MT0NPTU9fU1BJX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDMpCiAKLS8qIEgzODAwLXNwZWNpZmljIElSUXMgKENPTkZJR19TQTExMDBfSDM4MDApICovCi0jZGVmaW5lIEgzODAwX0tQSU9fSVJRX1NUQVJUICAgIChJUlFfQk9BUkRfU1RBUlQpCi0jZGVmaW5lIElSUV9IMzgwMF9LRVkgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAwKQotI2RlZmluZSBJUlFfSDM4MDBfU1BJICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMSkKLSNkZWZpbmUgSVJRX0gzODAwX09XTSAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDIpCi0jZGVmaW5lIElSUV9IMzgwMF9BREMgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAzKQotI2RlZmluZSBJUlFfSDM4MDBfVUFSVF8wICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNCkKLSNkZWZpbmUgSVJRX0gzODAwX1VBUlRfMSAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDUpCi0jZGVmaW5lIElSUV9IMzgwMF9USU1FUl8wICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA2KQotI2RlZmluZSBJUlFfSDM4MDBfVElNRVJfMSAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNykKLSNkZWZpbmUgSVJRX0gzODAwX1RJTUVSXzIgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDgpCi0jZGVmaW5lIEgzODAwX0tQSU9fSVJRX0NPVU5UICAgIDkKLQotI2RlZmluZSBIMzgwMF9HUElPX0lSUV9TVEFSVCAgICAoSVJRX0JPQVJEX1NUQVJUICsgOSkKLSNkZWZpbmUgSVJRX0gzODAwX1BFTiAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDkpCi0jZGVmaW5lIElSUV9IMzgwMF9TRF9ERVRFQ1QgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMCkKLSNkZWZpbmUgSVJRX0gzODAwX0VBUl9JTiAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDExKQotI2RlZmluZSBJUlFfSDM4MDBfVVNCX0RFVEVDVCAgICAoSVJRX0JPQVJEX1NUQVJUICsgMTIpCi0jZGVmaW5lIElSUV9IMzgwMF9TRF9DT05fU0xUICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMykKLSNkZWZpbmUgSDM4MDBfR1BJT19JUlFfQ09VTlQgICAgNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDYzNzU1Y2EuLjk0MmIxNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEwLDcgKzEwLDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAobW9kZSA9PSAncycpIHsKIAkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYwppbmRleCA4MTg0OGFhLi5mZDc3NmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCkBAIC0yMjYsMTIgKzIyNiwyMiBAQAogCS5pZCAgICAgICAgICAgICA9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugam9ybmFkYV9rYmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJqb3JuYWRhNzIwX2tiZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugam9ybmFkYV90c19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImpvcm5hZGFfdHMiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2ExMTExX2RldmljZSwKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjBfU1NQCiAJJmpvcm5hZGFfc3NwX2RldmljZSwKLSNlbmRpZgogCSZzMWQxM3h4eGZiX2RldmljZSwKKwkmam9ybmFkYV9rYmRfZGV2aWNlLAorCSZqb3JuYWRhX3RzX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGpvcm5hZGE3MjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYwppbmRleCBhMjNmZDNkLi4zNThkODc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYwpAQCAtMTYsMTIgKzE2LDI4IEBACiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKKyNkZWZpbmUgSU9fQkFTRSAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAorI2RlZmluZSBJT19TSVpFICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIElPX1NUQVJUICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUk9NQ0FSRF9TSVpFICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBST01DQVJEX1NUQVJUICAgICAgICAgICAweDEwMDAwMDAwCisKK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKyAgICAgICAgc2hvcnQgdGVtcDsKKyAgICAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKyAgICAgICAgLyogUmVzZXQgdGhlIE1hY2hpbmUgdmlhIHBjWzNdIG9mIHRoZSBzZXF1b2lhIGNoaXBzZXQgKi8KKyAgICAgICAgb3V0dygweDA5LDB4MjQpOworICAgICAgICB0ZW1wPWludygweDI2KTsKKyAgICAgICAgdGVtcCA9IHRlbXAgfCAoMTw8MykgfCAoMTw8MTApOworICAgICAgICBvdXR3KDB4MDksMHgyNCk7CisgICAgICAgIG91dHcodGVtcCwweDI2KTsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLmlvYmFzZQkJPSAweDNmOCwKQEAgLTUwLDE0ICs2NiwzOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4NzAsCisJCS5lbmQJPSAweDczLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfSVNBX1JUQ19BTEFSTSwKKwkJLmVuZAk9IElSUV9JU0FfUlRDX0FMQVJNLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBydGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJydGNfY21vcyIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgc2hhcmtfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKIAlpZiAobWFjaGluZV9pc19zaGFyaygpKQorCXsKKwkgICAgICAgIHJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX2RldmljZSk7CisJCWlmIChyZXQpIHByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJUQyBkZXZpY2U6ICVkXG4iLCByZXQpOwogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwotCi0JcmV0dXJuIHJldDsKKwkJaWYgKHJldCkgcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgU2VyaWFsIGRldmljZTogJWRcbiIsIHJldCk7CisJfQorCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKHNoYXJrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKaW5kZXggNjc3NGI4ZC4uMTBiNWI4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jCkBAIC0xMyw5ICsxMywxMSBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KIAotdm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQorc3RhdGljIGludCBfX2luaXQgc2hhcmtfZG1hX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfSVNBX0RNQQotCWlzYV9pbml0X2RtYShkbWEpOworCWlzYV9pbml0X2RtYSgpOwogI2VuZGlmCisJcmV0dXJuIDA7CiB9Citjb3JlX2luaXRjYWxsKHNoYXJrX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDA4MzZjYjcuLmY5N2E3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMjcsNSArMjcsMyBAQAogCQlibmUJMTAwMWIKIAkJLmVuZG0KIAotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLQkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9mcmFtZWJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTViZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9mcmFtZWJ1ZmZlci5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9mcmFtZWJ1ZmZlci5oCisgKgorICogYnkgQWxleGFuZGVyIFNjaHVsegorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfRlJBTUVCVUZGRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX0ZSQU1FQlVGRkVSX0gKKworLyogZGVmaW5lcyBmb3IgdGhlIEZyYW1lYnVmZmVyICovCisjZGVmaW5lIEZCX1NUQVJUCQkweDA2MDAwMDAwCisjZGVmaW5lIEZCX1NJWkUJCQkweDAxMDAwMDAwCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAwMWJmNzYwLi45NGQ4NGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTEwLDM1ICsxMCw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIE1hcHBpbmcgYXJlYXMKLSAqLwotI2RlZmluZSBJT19CQVNFCQkJMHhlMDAwMDAwMAotCi0jZWxzZQotCi0jZGVmaW5lIElPX0JBU0UJCQkwCi0KLSNlbmRpZgotCi0jZGVmaW5lIElPX1NJWkUJCQkweDA4MDAwMDAwCi0jZGVmaW5lIElPX1NUQVJUCQkweDQwMDAwMDAwCi0jZGVmaW5lIFJPTUNBUkRfU0laRQkJMHgwODAwMDAwMAotI2RlZmluZSBST01DQVJEX1NUQVJUCQkweDEwMDAwMDAwCi0KLQotLyogZGVmaW5lcyBmb3IgdGhlIEZyYW1lYnVmZmVyICovCi0jZGVmaW5lIEZCX1NUQVJUCQkweDA2MDAwMDAwCi0jZGVmaW5lIEZCX1NJWkUJCQkweDAxMDAwMDAwCi0KICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUiAgICAgICAgMHhkZjAxMDAwMAogCi0jZGVmaW5lIFNFUVVPSUFfTEVEX0dSRUVOICAgICAgICgxPDw2KQotI2RlZmluZSBTRVFVT0lBX0xFRF9BTUJFUiAgICAgICAoMTw8NSkKLSNkZWZpbmUgU0VRVU9JQV9MRURfQkFDSyAgICAgICAgKDE8PDcpCi0KICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICAgICAxCiAKICNkZWZpbmUgUENJQklPU19NSU5fSU8gICAgICAgICAgMHg2MDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBjNWNlZTgyLi45Y2NiY2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTExLDEwICsxMSwxMCBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKIAotI2RlZmluZSBQQ0lPX0JBU0UJMHhlMDAwMDAwMAotI2RlZmluZSBJT19TUEFDRV9MSU1JVAkweGZmZmZmZmZmCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAotI2RlZmluZSBfX2lvKGEpCQkoKHZvaWQgX19pb21lbSAqKShQQ0lPX0JBU0UgKyAoYSkpKQotI2RlZmluZSBfX21lbV9wY2koYWRkcikJKGFkZHIpCisjZGVmaW5lIF9faW8oYSkgICAgICAgICAgICAgICAgICgodm9pZCBfX2lvbWVtICopKDB4ZTAwMDAwMDAgKyAoYSkpKQorCisjZGVmaW5lIF9fbWVtX3BjaShhZGRyKSAoYWRkcikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggMDU4NmFjZC4uYzhlOGE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNyw3ICs3LDcgQEAKICNkZWZpbmUgTlJfSVJRUwkJCTE2CiAKICNkZWZpbmUgSVJRX0lTQV9LRVlCT0FSRAkgMQotI2RlZmluZSBSVENfSVJRCQkJIDgKKyNkZWZpbmUgSVJRX0lTQV9SVENfQUxBUk0JIDgKICNkZWZpbmUgSTgwNDJfS0JEX0lSUQkJIDEKICNkZWZpbmUgSTgwNDJfQVVYX0lSUQkJMTIKICNkZWZpbmUgSVJRX0hBUkRESVNLICAgICAgICAgICAgMTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAppbmRleCA4NjQyOThmZi4uOTZjNDNiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApAQCAtNiwxMCArNiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0vKiBVc2Ugb25seSB0aGUgbG93ZXN0IDRNQiwgbm90aGluZyBlbHNlIHdvcmtzLgotICogVGhlIHJlc3QgaXMgbm90IERNQWFibGUuIFNlZSBkZXYgLyAgLnByb3BlcnRpZXMKLSAqIGluIE9wZW5GaXJtd2FyZS4KLSAqLwogI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKICNkZWZpbmUgRE1BX0lTQV9DQVNDQURFICAgICAgICAgNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGM1YWIwMzguLjMwNTNlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yMyw2ICsyMyw3IEBACiB7CiAgIGlmIChub2RlICE9IDApIHJldHVybjsKICAgLyogT25seSB0aGUgZmlyc3QgNCBNQiAoPTEwMjQgUGFnZXMpIGFyZSB1c2FibGUgZm9yIERNQSAqLworICAvKiBTZWUgZGV2IC8gLT4gLnByb3BlcnRpZXMgaW4gT3BlbkZpcm13YXJlLiAqLwogICB6b25lX3NpemVbMV0gPSB6b25lX3NpemVbMF0gLSAxMDI0OwogICB6b25lX3NpemVbMF0gPSAxMDI0OwogICB6aG9sZV9zaXplWzFdID0gemhvbGVfc2l6ZVswXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTQ1YmQ3My4uMjFjMzczYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTYsMjAgKzYsOCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQotewotCXNob3J0IHRlbXA7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkvKiBSZXNldCB0aGUgTWFjaGluZSB2aWEgcGNbM10gb2YgdGhlIHNlcXVvaWEgY2hpcHNldCAqLwotCW91dHcoMHgwOSwweDI0KTsKLQl0ZW1wPWludygweDI2KTsKLQl0ZW1wID0gdGVtcCB8ICgxPDwzKSB8ICgxPDwxMCk7Ci0Jb3V0dygweDA5LDB4MjQpOwotCW91dHcodGVtcCwweDI2KTsKLQotfQorLyogRm91bmQgaW4gYXJjaC9tYWNoLXNoYXJrL2NvcmUuYyAqLworZXh0ZXJuIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAzNzI1ZTE2Li4yMmNjYWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0xMSw3ICsxMSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGludCBjKQogewotCWludCB0OworCXZvbGF0aWxlIGludCB0OwogCiAJU0VSSUFMX0JBU0VbMF0gPSBjOwogCXQ9MHgxMDAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKaW5kZXggOGJkOGQ2Yi4uYzllMzJkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKQEAgLTIyLDEyICsyMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMQogI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkyCisKKyNkZWZpbmUgU0VRVU9JQV9MRURfR1JFRU4gICAgICAgKDE8PDYpCisjZGVmaW5lIFNFUVVPSUFfTEVEX0FNQkVSICAgICAgICgxPDw1KQorI2RlZmluZSBTRVFVT0lBX0xFRF9CQUNLICAgICAgICAoMTw8NykKKwogc3RhdGljIGNoYXIgbGVkX3N0YXRlOwogc3RhdGljIHNob3J0IGh3X2xlZF9zdGF0ZTsKIHN0YXRpYyBzaG9ydCBzYXZlZF9zdGF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCAxYzQzNDk0Li41NjU3NzY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0zMzUsMTEgKzMzNSwyNSBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZXJzYXRpbGVfaTJjX2RldmljZSA9IHsKIAkubmFtZQkJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJCT0gLTEsCisJLmlkCQkJPSAwLAogCS5udW1fcmVzb3VyY2VzCQk9IDEsCiAJLnJlc291cmNlCQk9ICZ2ZXJzYXRpbGVfaTJjX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB2ZXJzYXRpbGVfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtZHMxMzA3IiwgMHhkMCA+PiAxKSwKKwkJLnR5cGUgPSAiZHMxMzM4IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdmVyc2F0aWxlX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHZlcnNhdGlsZV9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgICAgQVJSQVlfU0laRSh2ZXJzYXRpbGVfaTJjX2JvYXJkX2luZm8pKTsKK30KK2FyY2hfaW5pdGNhbGwodmVyc2F0aWxlX2kyY19pbml0KTsKKwogI2RlZmluZSBWRVJTQVRJTEVfU1lTTUNJCShfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTUNJX09GRlNFVCkKIAogdW5zaWduZWQgaW50IG1tY19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGM1OWU2MTAuLjhmZmMxMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl1MzIgdmFsOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKaW5kZXggNDBmZjQwOC4uZGUyOWRkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaApAQCAtNDMsMzUgKzQzLDE2IEBACiBleHRlcm4gdm9pZCB3OTBwOTEwX2luaXRfdWFydHMoc3RydWN0IHc5MHg5MDBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOwogZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CiBleHRlcm4gdm9pZCB3OTBwOTEwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkwcDkxMF9zZXJpYWxfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgdzkweDkwMF90aW1lcjsKIAotI2RlZmluZSBXOTBYOTAwX1JFUyhuYW1lKQkJCQlcCi1zdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF8jI25hbWUjI19yZXNvdXJjZVtdID0gewkJXAotCVswXSA9IHsJCQkJCQlcCi0JCS5zdGFydCA9IG5hbWUjI19QQSwJCQlcCi0JCS5lbmQgICA9IG5hbWUjI19QQSArIDB4MGZmLAkJXAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCVwKLQl9LAkJCQkJCVwKLQlbMV0gPSB7CQkJCQkJXAotCQkuc3RhcnQgPSBJUlFfIyNuYW1lLAkJCVwKLQkJLmVuZCAgID0gSVJRXyMjbmFtZSwJCQlcCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJXAotCX0JCQkJCQlcCi19Ci0KLSNkZWZpbmUgVzkwWDkwMF9ERVZJQ0UoZGV2bmFtZSwgcmVnbmFtZSwgZGV2aWQsIHBsYXRkZXZuYW1lKQkJXAotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwXyMjZGV2bmFtZSA9IHsJCQkJXAotCS5uYW1lCQk9IHBsYXRkZXZuYW1lLAkJCQkJXAotCS5pZAkJPSBkZXZpZCwJCQkJCVwKLQkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKHc5MHg5MDBfIyNyZWduYW1lIyNfcmVzb3VyY2UpLAlcCi0JLnJlc291cmNlIAk9IHc5MHg5MDBfIyNyZWduYW1lIyNfcmVzb3VyY2UsCQkJXAotfQotCi0jZGVmaW5lIFc5MFg5MDBfVUFSVENGRyhwb3J0LCBmbGFnLCB1YywgdWxjLCB1ZmMpCVwKLXsJCQkJCQkJXAotCQkuaHdwb3J0CT0gcG9ydCwJCQkJXAotCQkuZmxhZ3MJPSBmbGFnLAkJCQlcCi0JCS51Y29uCT0gdWMsCQkJCVwKLQkJLnVsY29uCT0gdWxjLAkJCQlcCi0JCS51ZmNvbgk9IHVmYywJCQkJXAorI2RlZmluZSBXOTBYOTAwXzgyNTBQT1JUKG5hbWUpCQkJCQlcCit7CQkJCQkJCQlcCisJLm1lbWJhc2UJPSBuYW1lIyNfQkEsCQkJCVwKKwkubWFwYmFzZQk9IG5hbWUjI19QQSwJCQkJXAorCS5pcnEJCT0gSVJRXyMjbmFtZSwJCQkJXAorCS51YXJ0Y2xrCT0gMTEzMTM2MDAsCQkJCVwKKwkucmVnc2hpZnQJPSAyLAkJCQkJXAorCS5pb3R5cGUJCT0gVVBJT19NRU0sCQkJCVwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAlcCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA5Mzc1M2Y5Li45NDA2NDAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTIxLDcgKzIxLDcgQEAKIHsKIH0KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYwppbmRleCA5ZWJjOTNmLi43MjZmZjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTMyLDI4ICszMyw2NyBAQAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKKy8qdzkwcDkxMCBldmIgbm9yZmxhc2ggZHJpdmVyIGRhdGEgKi8KIAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisjZGVmaW5lIFc5MFA5MTBfRkxBU0hfQkFTRQkweEEwMDAwMDAwCisjZGVmaW5lIFc5MFA5MTBfRkxBU0hfU0laRQkweDQwMDAwMAorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdzkwcDkxMF9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDEgZm9yIGtlcm5lbCAoOTYwSykiLAorCQkuc2l6ZQk9CTB4RjAwMDAsCisJCS5vZmZzZXQJPQkweDEwMDAwLAorCX0sCisJeworCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDIgZm9yIGltYWdlICgxTSkiLAorCQkuc2l6ZQk9CTB4MTAwMDAwLAorCQkub2Zmc2V0CT0JMHgxMDAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0JIk5PUiBQYXJ0aXRpb24gMyBmb3IgdXNlciAoMk0pIiwKKwkJLnNpemUJPQkweDIwMDAwMCwKKwkJLm9mZnNldAk9CTB4MDAyMDAwMDAsCisJfQogfTsKIAotc3RhdGljIHN0cnVjdCB3OTB4OTAwX3VhcnRjZmcgdzkwcDkxMF91YXJ0Y2Znc1tdID0gewotCVc5MFg5MDBfVUFSVENGRygwLCAwLCAwLCAwLCAwKSwKLQlXOTBYOTAwX1VBUlRDRkcoMSwgMCwgMCwgMCwgMCksCi0JVzkwWDkwMF9VQVJUQ0ZHKDIsIDAsIDAsIDAsIDApLAotCVc5MFg5MDBfVUFSVENGRygzLCAwLCAwLCAwLCAwKSwKLQlXOTBYOTAwX1VBUlRDRkcoNCwgMCwgMCwgMCwgMCksCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB3OTBwOTEwX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9CTIsCisJLnBhcnRzCQk9CXc5MHA5MTBfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPQlBUlJBWV9TSVpFKHc5MHA5MTBfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHc5MHA5MTBfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPQlXOTBQOTEwX0ZMQVNIX0JBU0UsCisJCS5lbmQJPQlXOTBQOTEwX0ZMQVNIX0JBU0UgKyBXOTBQOTEwX0ZMQVNIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPQlJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTBwOTEwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPQkicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9CTAsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEgPSAmdzkwcDkxMF9mbGFzaF9kYXRhLAorCQkJfSwKKwkucmVzb3VyY2UJPQl3OTBwOTEwX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9CUFSUkFZX1NJWkUodzkwcDkxMF9mbGFzaF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiB9OwogCiAvKkhlcmUgc2hvdWxkIGJlIHlvdXIgZXZiIHJlc291cnNlLHN1Y2ggYXMgTENEKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnc5MHA5MTBldmJfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmdzkwcDkxMF9zZXJpYWxfZGV2aWNlLAorCSZ3OTBwOTEwX2ZsYXNoX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB3OTBwOTEwZXZiX21hcF9pbyh2b2lkKQogewogCXc5MHA5MTBfbWFwX2lvKHc5MHA5MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHc5MHA5MTBfaW9kZXNjKSk7CiAJdzkwcDkxMF9pbml0X2Nsb2NrcygwKTsKLQl3OTBwOTEwX2luaXRfdWFydHModzkwcDkxMF91YXJ0Y2ZncywgQVJSQVlfU0laRSh3OTBwOTEwX3VhcnRjZmdzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB3OTBwOTEwZXZiX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jCmluZGV4IGFhNzgzYmMuLjJiY2JhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zNiwxMiArMzcsNiBAQAogCiAjaW5jbHVkZSAiY3B1LmgiCiAKLS8qVzkwUDkxMCBoYXMgZml2ZSB1YXJ0cyovCi0KLSNkZWZpbmUgTUFYX1VBUlRfQ09VTlQgNQotc3RhdGljIGludCB1YXJ0X2NvdW50Owotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2c1tNQVhfVUFSVF9DT1VOVC0xXTsKLQogLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHc5MHA5MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTUzLDQ4ICs0OCwxOSBAQAogCS8qSU9ERVNDX0VOVChMQ0QpLCovCiB9OwogCi0vKkluaXQgdGhlIGRldiByZXNvdXJjZSovCisvKiBJbml0aWFsIHNlcmlhbCBwbGF0Zm9ybSBkYXRhICovCiAKLXN0YXRpYyBXOTBYOTAwX1JFUyhVQVJUMCk7Ci1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDEpOwotc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQyKTsKLXN0YXRpYyBXOTBYOTAwX1JFUyhVQVJUMyk7Ci1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDQpOwotc3RhdGljIFc5MFg5MDBfREVWSUNFKHVhcnQwLCBVQVJUMCwgMCwgInc5MHg5MDAtdWFydCIpOwotc3RhdGljIFc5MFg5MDBfREVWSUNFKHVhcnQxLCBVQVJUMSwgMSwgInc5MHg5MDAtdWFydCIpOwotc3RhdGljIFc5MFg5MDBfREVWSUNFKHVhcnQyLCBVQVJUMiwgMiwgInc5MHg5MDAtdWFydCIpOwotc3RhdGljIFc5MFg5MDBfREVWSUNFKHVhcnQzLCBVQVJUMywgMywgInc5MHg5MDAtdWFydCIpOwotc3RhdGljIFc5MFg5MDBfREVWSUNFKHVhcnQ0LCBVQVJUNCwgNCwgInc5MHg5MDAtdWFydCIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWFydF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmdzkweDkwMF91YXJ0MCwKLQkmdzkweDkwMF91YXJ0MSwKLQkmdzkweDkwMF91YXJ0MiwKLQkmdzkweDkwMF91YXJ0MywKLQkmdzkweDkwMF91YXJ0NAorc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHc5MHA5MTBfdWFydF9kYXRhW10gPSB7CisJVzkwWDkwMF84MjUwUE9SVChVQVJUMCksCiB9OwogCi0vKkluaXQgVzkwUDkxMCB1YXJ0IGRldmljZSovCi0KLXZvaWQgX19pbml0IHc5MHA5MTBfaW5pdF91YXJ0cyhzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnICpjZmcsIGludCBubykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OwotCWludCB1YXJ0LCB1YXJ0ZGV2OwotCi0JLypCeSBtaW4oKSB0byBqdWRnZSBjb3VudCBvZiB1YXJ0IGJlIHVzZWQgaW5kZWVkKi8KLQotCXVhcnRkZXYgPSBBUlJBWV9TSVpFKHVhcnRfZGV2aWNlcyk7Ci0Jbm8gPSBtaW4odWFydGRldiwgbm8pOwotCi0JZm9yICh1YXJ0ID0gMDsgdWFydCA8IG5vOyB1YXJ0KyssIGNmZysrKSB7Ci0JCWlmIChjZmctPmh3cG9ydCAhPSB1YXJ0KQotCQkJcHJpbnRrKEtFUk5fRVJSICJ3OTB4OTAwX3VhcnRjZmdbJWRdIGVycm9yXG4iLCB1YXJ0KTsKLQkJcGxhdGRldiA9IHVhcnRfZGV2aWNlc1tjZmctPmh3cG9ydF07Ci0JCXVhcnRfZGV2c1t1YXJ0XSA9IHBsYXRkZXY7Ci0JCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOwotCX0KLQl1YXJ0X2NvdW50ID0gdWFydDsKLX0KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkwcDkxMF9zZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHc5MHA5MTBfdWFydF9kYXRhLAorCX0sCit9OwogCiAvKkluaXQgVzkwUDkxMCBldmIgaW8qLwogCkBAIC0xMjIsMTMgKzg4LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgdzkweDkwMF9hcmNoX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdzkwcDkxMF9pbml0X2NwdSgpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1YXJ0X2RldnMsIHVhcnRfY291bnQpOwotCisJcmV0dXJuIHc5MHA5MTBfaW5pdF9jcHUoKTsKIH0KIGFyY2hfaW5pdGNhbGwodzkweDkwMF9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZDQ5MGYzNy4uMjA5Nzk1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xODYsNiArMTg2LDI0IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTI2VCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgogCisjIEZBNTI2Citjb25maWcgQ1BVX0ZBNTI2CisJYm9vbAorCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfQUJSVF9FVjQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKKwlzZWxlY3QgQ1BVX0NBQ0hFX0ZBCisJc2VsZWN0IENQVV9DT1BZX0ZBIGlmIE1NVQorCXNlbGVjdCBDUFVfVExCX0ZBIGlmIE1NVQorCWhlbHAKKwkgIFRoZSBGQTUyNiBpcyBhIHZlcnNpb24gb2YgdGhlIEFSTXY0IGNvbXBhdGlibGUgcHJvY2Vzc29yIHdpdGgKKwkgIEJyYW5jaCBUYXJnZXQgQnVmZmVyLCBVbmlmaWVkIFRMQiBhbmQgY2FjaGUgbGluZSBzaXplIDE2LgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgRkE1MjYgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKwogIyBBUk05NDBUCiBjb25maWcgQ1BVX0FSTTk0MFQKIAlib29sICJTdXBwb3J0IEFSTTk0MFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKQEAgLTM0MCw2ICszNTgsMTcgQEAKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAlzZWxlY3QgSU9fMzYKIAorIyBNYXJ2ZWxsIFBKMSAoTW9oYXdrKQorY29uZmlnIENQVV9NT0hBV0sKKwlib29sCisJc2VsZWN0IENQVV8zMnY1CisJc2VsZWN0IENQVV9BQlJUX0VWNVQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKKwogIyBGZXJvY2VvbgogY29uZmlnIENQVV9GRVJPQ0VPTgogCWJvb2wKQEAgLTQ4NCw2ICs1MTMsOSBAQAogY29uZmlnIENQVV9DQUNIRV9WSVBUCiAJYm9vbAogCitjb25maWcgQ1BVX0NBQ0hFX0ZBCisJYm9vbAorCiBpZiBNTVUKICMgVGhlIGNvcHktcGFnZSBtb2RlbAogY29uZmlnIENQVV9DT1BZX1YzCkBAIC00OTgsNiArNTMwLDkgQEAKIGNvbmZpZyBDUFVfQ09QWV9GRVJPQ0VPTgogCWJvb2wKIAorY29uZmlnIENQVV9DT1BZX0ZBCisJYm9vbAorCiBjb25maWcgQ1BVX0NPUFlfVjYKIAlib29sCiAKQEAgLTUyOCw2ICs1NjMsMTMgQEAKIAloZWxwCiAJICBGZXJvY2VvbiBUTEIgKHY0d2JpIHdpdGggbm9uLW91dGVyLWNhY2hhYmxlIHBhZ2UgdGFibGUgd2Fsa3MpLgogCitjb25maWcgQ1BVX1RMQl9GQQorCWJvb2wKKwloZWxwCisJICBGYXJhZGF5IEFSTSBGQTUyNiBhcmNoaXRlY3R1cmUsIHVuaWZpZWQgVExCIHdpdGggd3JpdGViYWNrIGNhY2hlCisJICBhbmQgaW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBjYWNoZSBlbnRyeS4gQnJhbmNoIHRhcmdldCBidWZmZXIgaXMKKwkgIGFsc28gc3VwcG9ydGVkLgorCiBjb25maWcgQ1BVX1RMQl9WNgogCWJvb2wKIApAQCAtNTY5LDcgKzYxMSw3IEBACiAKIGNvbmZpZyBBUk1fVEhVTUIKIAlib29sICJTdXBwb3J0IFRodW1iIHVzZXIgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiBDUFVfQVJNNzIwVCB8fCBDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQwVCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfQVJNMTAyMEUgfHwgQ1BVX0FSTTEwMjIgfHwgQ1BVX0FSTTEwMjYgfHwgQ1BVX1hTQ0FMRSB8fCBDUFVfWFNDMyB8fCBDUFVfVjYgfHwgQ1BVX1Y3IHx8IENQVV9GRVJPQ0VPTgorCWRlcGVuZHMgb24gQ1BVX0FSTTcyMFQgfHwgQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX0FSTTEwMjBFIHx8IENQVV9BUk0xMDIyIHx8IENQVV9BUk0xMDI2IHx8IENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX01PSEFXSyB8fCBDUFVfVjYgfHwgQ1BVX1Y3IHx8IENQVV9GRVJPQ0VPTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUga2VybmVsIHN1cHBvcnQgZm9yIHJ1bm5pbmcgdXNlciBzcGFjZQpAQCAtNjM4LDcgKzY4MCw3IEBACiAKIGNvbmZpZyBDUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCWJvb2wgIkZvcmNlIHdyaXRlIHRocm91Z2ggRC1jYWNoZSIKLQlkZXBlbmRzIG9uIChDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQwVCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCkgJiYgIUNQVV9EQ0FDSEVfRElTQUJMRQorCWRlcGVuZHMgb24gKENQVV9BUk03NDBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk05NDBUIHx8IENQVV9BUk05NDZFIHx8IENQVV9BUk0xMDIwIHx8IENQVV9GQTUyNikgJiYgIUNQVV9EQ0FDSEVfRElTQUJMRQogCWRlZmF1bHQgeSBpZiBDUFVfQVJNOTI1VAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBkYXRhIGNhY2hlIGluIHdyaXRldGhyb3VnaCBtb2RlLiBVbmxlc3MgeW91CkBAIC02NTMsNyArNjk1LDcgQEAKIAogY29uZmlnIENQVV9CUFJFRElDVF9ESVNBQkxFCiAJYm9vbCAiRGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbiIKLQlkZXBlbmRzIG9uIENQVV9BUk0xMDIwIHx8IENQVV9WNiB8fCBDUFVfWFNDMyB8fCBDUFVfVjcKKwlkZXBlbmRzIG9uIENQVV9BUk0xMDIwIHx8IENQVV9WNiB8fCBDUFVfTU9IQVdLIHx8IENQVV9YU0MzIHx8IENQVV9WNyB8fCBDUFVfRkE1MjYKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGRpc2FibGUgYnJhbmNoIHByZWRpY3Rpb24uICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC03MDQsNyArNzQ2LDggQEAKIAogY29uZmlnIENBQ0hFX0wyWDAKIAlib29sICJFbmFibGUgdGhlIEwyeDAgb3V0ZXIgY2FjaGUgY29udHJvbGxlciIKLQlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgUkVBTFZJRVdfRUJfQTlNUAorCWRlcGVuZHMgb24gUkVBTFZJRVdfRUJfQVJNMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTE3NiB8fCBcCisJCSAgIFJFQUxWSUVXX0VCX0E5TVAgfHwgQVJDSF9NWDM1IHx8IEFSQ0hfTVgzMQogCWRlZmF1bHQgeQogCXNlbGVjdCBPVVRFUl9DQUNIRQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggNDgwZjc4YS4uNjNlM2Y2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIAogb2JqLSQoQ09ORklHX0FMSUdOTUVOVF9UUkFQKQkrPSBhbGlnbm1lbnQubwogb2JqLSQoQ09ORklHX0RJU0NPTlRJR01FTSkJKz0gZGlzY29udGlnLm8KK29iai0kKENPTkZJR19ISUdITUVNKQkJKz0gaGlnaG1lbS5vCiAKIG9iai0kKENPTkZJR19DUFVfQUJSVF9OT01NVSkJKz0gYWJvcnQtbm9tbXUubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNCkJKz0gYWJvcnQtZXY0Lm8KQEAgLTMyLDYgKzMzLDcgQEAKIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjRXQikJKz0gY2FjaGUtdjR3Yi5vCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y2KQkrPSBjYWNoZS12Ni5vCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y3KQkrPSBjYWNoZS12Ny5vCitvYmotJChDT05GSUdfQ1BVX0NBQ0hFX0ZBKQkrPSBjYWNoZS1mYS5vCiAKIG9iai0kKENPTkZJR19DUFVfQ09QWV9WMykJKz0gY29weXBhZ2UtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DT1BZX1Y0V1QpCSs9IGNvcHlwYWdlLXY0d3QubwpAQCAtNDEsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TQTExMDApCSs9IGNvcHlwYWdlLXY0bWMubwogb2JqLSQoQ09ORklHX0NQVV9YU0NBTEUpCSs9IGNvcHlwYWdlLXhzY2FsZS5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSBjb3B5cGFnZS14c2MzLm8KK29iai0kKENPTkZJR19DUFVfQ09QWV9GQSkJKz0gY29weXBhZ2UtZmEubwogCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WMykJKz0gdGxiLXYzLm8KIG9iai0kKENPTkZJR19DUFVfVExCX1Y0V1QpCSs9IHRsYi12NC5vCkBAIC00OSw2ICs1Miw3IEBACiBvYmotJChDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTikJKz0gdGxiLXY0d2JpLm8JIyByZXVzZSB2NHdiaSBUTEIgZnVuY3Rpb25zCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNikJKz0gdGxiLXY2Lm8KIG9iai0kKENPTkZJR19DUFVfVExCX1Y3KQkrPSB0bGItdjcubworb2JqLSQoQ09ORklHX0NQVV9UTEJfRkEpCSs9IHRsYi1mYS5vCiAKIG9iai0kKENPTkZJR19DUFVfQVJNNjEwKQkrPSBwcm9jLWFybTZfNy5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTcxMCkJKz0gcHJvYy1hcm02XzcubwpAQCAtNjIsNiArNjYsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9BUk05MjZUKQkrPSBwcm9jLWFybTkyNi5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTk0MFQpCSs9IHByb2MtYXJtOTQwLm8KIG9iai0kKENPTkZJR19DUFVfQVJNOTQ2RSkJKz0gcHJvYy1hcm05NDYubworb2JqLSQoQ09ORklHX0NQVV9GQTUyNikJCSs9IHByb2MtZmE1MjYubwogb2JqLSQoQ09ORklHX0NQVV9BUk0xMDIwKQkrPSBwcm9jLWFybTEwMjAubwogb2JqLSQoQ09ORklHX0NQVV9BUk0xMDIwRSkJKz0gcHJvYy1hcm0xMDIwZS5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTEwMjIpCSs9IHByb2MtYXJtMTAyMi5vCkBAIC03MCw2ICs3NSw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NBMTEwMCkJKz0gcHJvYy1zYTExMDAubwogb2JqLSQoQ09ORklHX0NQVV9YU0NBTEUpCSs9IHByb2MteHNjYWxlLm8KIG9iai0kKENPTkZJR19DUFVfWFNDMykJCSs9IHByb2MteHNjMy5vCitvYmotJChDT05GSUdfQ1BVX01PSEFXSykJKz0gcHJvYy1tb2hhd2subwogb2JqLSQoQ09ORklHX0NQVV9GRVJPQ0VPTikJKz0gcHJvYy1mZXJvY2Vvbi5vCiBvYmotJChDT05GSUdfQ1BVX1Y2KQkJKz0gcHJvYy12Ni5vCiBvYmotJChDT05GSUdfQ1BVX1Y3KQkJKz0gcHJvYy12Ny5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNhOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBGYXJhZGF5IENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogQmFzZWQgb24gY2FjaGUtdjR3Yi5TOgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwga2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFByb2Nlc3NvcnM6IEZBNTIwIEZBNTI2IEZBNjI2CQorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGUgc2l6ZSBvZiBvbmUgZGF0YSBjYWNoZSBsaW5lLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkxNgorCisvKgorICogVGhlIHRvdGFsIHNpemUgb2YgdGhlIGRhdGEgY2FjaGUuCisgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9HRU1JTkkKKyNkZWZpbmUgQ0FDSEVfRFNJWkUJODE5MgorI2Vsc2UKKyNkZWZpbmUgQ0FDSEVfRFNJWkUJMTYzODQgCisjZW5kaWYgCisKKy8qIEZJWE1FOiBwdXQgb3B0aW1hbCB2YWx1ZSBoZXJlLiBDdXJyZW50IG9uZSBpcyBqdXN0IGVzdGltYXRpb24gKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCShDQUNIRV9EU0laRSAqIDIpCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYWxsIGNhY2hlIGVudHJpZXMgaW4gYSBwYXJ0aWN1bGFyIGFkZHJlc3MKKyAqCXNwYWNlLgorICovCitFTlRSWShmYV9mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShmYV9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJaXAsICMwCisJbW92CXIyLCAjVk1fRVhFQworX19mbHVzaF93aG9sZV9jYWNoZToKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxNCwgMAkJQCBjbGVhbi9pbnZhbGlkYXRlIEQgY2FjaGUKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkCisgKglhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUsIHBhZ2UgYWxpZ25lZCkKKyAqCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSwgcGFnZSBhbGlnbmVkKQorICoJLSBmbGFncwktIHZtYV9hcmVhX3N0cnVjdCBmbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqLworRU5UUlkoZmFfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJaXAsICMwCisJc3ViCXIzLCByMSwgcjAJCQlAIGNhbGN1bGF0ZSB0b3RhbCBzaXplCisJY21wCXIzLCAjQ0FDSEVfRExJTUlUCQlAIHRvdGFsIHNpemUgPj0gbGltaXQ/CisJYmhzCV9fZmx1c2hfd2hvbGVfY2FjaGUJCUAgZmx1c2ggd2hvbGUgRCBjYWNoZQorCisxOgl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBsaW5lCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCisJbW92CXBjLCBscgorCisvKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogZmFsbCB0aHJvdWdoICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoZmFfY29oZXJlbnRfdXNlcl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQorICoKKyAqCUVuc3VyZSB0aGF0IHRoZSBkYXRhIGhlbGQgaW4gdGhlIHBhZ2Uga2FkZHIgaXMgd3JpdHRlbiBiYWNrCisgKgl0byB0aGUgcGFnZSBpbiBxdWVzdGlvbi4KKyAqCisgKgktIGthZGRyICAgLSBrZXJuZWwgYWRkcmVzcyAoZ3VhcmFudGVlZCB0byBiZSBwYWdlIGFsaWduZWQpCisgKi8KK0VOVFJZKGZhX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisJYWRkCXIxLCByMCwgI1BBR0VfU1oKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxpbmUKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKKyAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KKyAqCWJhY2suCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoZmFfZG1hX2ludl9yYW5nZSkKKwl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGVudHJ5CisJdHN0CXIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoZmFfZG1hX2NsZWFuX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCxlbmQpCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitFTlRSWShmYV9kbWFfZmx1c2hfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1vdglwYywgbHIKKworCV9fSU5JVERBVEEKKworCS50eXBlCWZhX2NhY2hlX2ZucywgI29iamVjdAorRU5UUlkoZmFfY2FjaGVfZm5zKQorCS5sb25nCWZhX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJZmFfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwlmYV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCisJLmxvbmcJZmFfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWZhX2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwlmYV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJZmFfZG1hX2ludl9yYW5nZQorCS5sb25nCWZhX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWZhX2RtYV9mbHVzaF9yYW5nZQorCS5zaXplCWZhX2NhY2hlX2ZucywgLiAtIGZhX2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYyBiL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKaW5kZXggODBjZDIwNy4uZDZkZDgzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCkBAIC0xNCw4ICsxNCwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxwbGF0L2NhY2hlLWZlcm9jZW9uLWwyLmg+Ci0KKyNpbmNsdWRlICJtbS5oIgogCiAvKgogICogTG93LWxldmVsIGNhY2hlIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMuCkBAIC0zNCwxNCArMzgsMzYgQEAKICAqIFRoZSByYW5nZSBvcGVyYXRpb25zIHJlcXVpcmUgdHdvIHN1Y2Nlc3NpdmUgY3AxNSB3cml0ZXMsIGluCiAgKiBiZXR3ZWVuIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gYmUgcHJlZW1wdGVkLgogICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsMl9zdGFydF92YSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworI2lmZGVmIENPTkZJR19ISUdITUVNCisJLyoKKwkgKiBMZXQncyBkbyBvdXIgb3duIGZpeG1hcCBzdHVmZiBpbiBhIG1pbmltYWwgd2F5IGhlcmUuCisJICogQmVjYXVzZSByYW5nZSBvcHMgY2FuJ3QgYmUgZG9uZSBvbiBwaHlzaWNhbCBhZGRyZXNzZXMsCisJICogd2Ugc2ltcGx5IGluc3RhbGwgYSB2aXJ0dWFsIG1hcHBpbmcgZm9yIGl0IG9ubHkgZm9yIHRoZQorCSAqIFRMQiBsb29rdXAgdG8gb2NjdXIsIGhlbmNlIG5vIG5lZWQgdG8gZmx1c2ggdGhlIHVudG91Y2hlZAorCSAqIG1lbW9yeSBtYXBwaW5nLiAgVGhpcyBpcyBwcm90ZWN0ZWQgd2l0aCB0aGUgZGlzYWJsaW5nIG9mCisJICogaW50ZXJydXB0cyBieSB0aGUgY2FsbGVyLgorCSAqLworCXVuc2lnbmVkIGxvbmcgaWR4ID0gS01fTDJfQ0FDSEUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKwlzZXRfcHRlX2V4dChUT1BfUFRFKHZhZGRyKSwgcGZuX3B0ZShwYWRkciA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOworCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSh2YWRkcik7CisJcmV0dXJuIHZhZGRyICsgKHBhZGRyICYgflBBR0VfTUFTSyk7CisjZWxzZQorCXJldHVybiBfX3BoeXNfdG9fdmlydChwYWRkcik7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX3BhKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzE1LCBjOSwgMyIgOiA6ICJyIiAoYWRkcikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbDJfY2xlYW5fbXZhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX3BhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2YV9zdGFydCwgdmFfZW5kLCBmbGFnczsKIAogCS8qCiAJICogTWFrZSBzdXJlICdzdGFydCcgYW5kICdlbmQnIHJlZmVyZW5jZSB0aGUgc2FtZSBwYWdlLCBhcwpAQCAtNTEsMTcgKzc3LDE0IEBACiAJQlVHX09OKChzdGFydCBeIGVuZCkgPj4gUEFHRV9TSElGVCk7CiAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXZhX3N0YXJ0ID0gbDJfc3RhcnRfdmEoc3RhcnQpOworCXZhX2VuZCA9IHZhX3N0YXJ0ICsgKGVuZCAtIHN0YXJ0KTsKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzE1LCBjOSwgNFxuXHQiCiAJCSJtY3IgcDE1LCAxLCAlMSwgYzE1LCBjOSwgNSIKLQkJOiA6ICJyIiAoc3RhcnQpLCAiciIgKGVuZCkpOworCQk6IDogInIiICh2YV9zdGFydCksICJyIiAodmFfZW5kKSk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX3BhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWwyX2NsZWFuX212YV9yYW5nZShfX3BoeXNfdG9fdmlydChzdGFydCksIF9fcGh5c190b192aXJ0KGVuZCkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbDJfY2xlYW5faW52X3BhKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzE1LCBjMTAsIDMiIDogOiAiciIgKGFkZHIpKTsKQEAgLTcyLDkgKzk1LDkgQEAKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzE1LCBjMTEsIDMiIDogOiAiciIgKGFkZHIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyX2ludl9tdmFfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJfaW52X3BhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2YV9zdGFydCwgdmFfZW5kLCBmbGFnczsKIAogCS8qCiAJICogTWFrZSBzdXJlICdzdGFydCcgYW5kICdlbmQnIHJlZmVyZW5jZSB0aGUgc2FtZSBwYWdlLCBhcwpAQCAtODQsMTcgKzEwNywxNCBAQAogCUJVR19PTigoc3RhcnQgXiBlbmQpID4+IFBBR0VfU0hJRlQpOwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2YV9zdGFydCA9IGwyX3N0YXJ0X3ZhKHN0YXJ0KTsKKwl2YV9lbmQgPSB2YV9zdGFydCArIChlbmQgLSBzdGFydCk7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzExLCA0XG5cdCIKIAkJIm1jciBwMTUsIDEsICUxLCBjMTUsIGMxMSwgNSIKLQkJOiA6ICJyIiAoc3RhcnQpLCAiciIgKGVuZCkpOworCQk6IDogInIiICh2YV9zdGFydCksICJyIiAodmFfZW5kKSk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyX2ludl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlsMl9pbnZfbXZhX3JhbmdlKF9fcGh5c190b192aXJ0KHN0YXJ0KSwgX19waHlzX3RvX3ZpcnQoZW5kKSk7Ci19Ci0KIAogLyoKICAqIExpbnV4IHByaW1pdGl2ZXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYyBiL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCmluZGV4IDQ2NGRlODkuLjVkMTgwY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCkBAIC0xNywxMiArMTcsMTQgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgIm1tLmgiCiAKICNkZWZpbmUgQ1JfTDIJKDEgPDwgMjYpCiAKQEAgLTQ3LDIxICs0OSwxMSBAQAogCV9fYXNtX18oIm1jciBwMTUsIDEsICUwLCBjNywgYzExLCAxIiA6IDogInIiIChhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4c2MzX2wyX2NsZWFuX3BhKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl4c2MzX2wyX2NsZWFuX212YShfX3BoeXNfdG9fdmlydChhZGRyKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB4c2MzX2wyX2ludl9tdmEodW5zaWduZWQgbG9uZyBhZGRyKQogewogCV9fYXNtX18oIm1jciBwMTUsIDEsICUwLCBjNywgYzcsIDEiIDogOiAiciIgKGFkZHIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhzYzNfbDJfaW52X3BhKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl4c2MzX2wyX2ludl9tdmEoX19waHlzX3RvX3ZpcnQoYWRkcikpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeHNjM19sMl9pbnZfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsMmN0eXBlLCBzZXRfd2F5OwpAQCAtNzksNTAgKzcxLDEwMyBAQAogCWRzYigpOwogfQogCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNkZWZpbmUgbDJfbWFwX3NhdmVfZmxhZ3MoeCkJCXJhd19sb2NhbF9zYXZlX2ZsYWdzKHgpCisjZGVmaW5lIGwyX21hcF9yZXN0b3JlX2ZsYWdzKHgpCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoeCkKKyNlbHNlCisjZGVmaW5lIGwyX21hcF9zYXZlX2ZsYWdzKHgpCQkoKHgpID0gMCkKKyNkZWZpbmUgbDJfbWFwX3Jlc3RvcmVfZmxhZ3MoeCkJCSgodm9pZCkoeCkpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGwyX21hcF92YSh1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIHByZXZfdmEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXVuc2lnbmVkIGxvbmcgdmEgPSBwcmV2X3ZhICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGxvbmcgcGFfb2Zmc2V0ID0gcGEgPDwgKDMyIC0gUEFHRV9TSElGVCk7CisJaWYgKHVubGlrZWx5KHBhX29mZnNldCA8IChwcmV2X3ZhIDw8ICgzMiAtIFBBR0VfU0hJRlQpKSkpIHsKKwkJLyoKKwkJICogU3dpdGNoaW5nIHRvIGEgbmV3IHBhZ2UuICBCZWNhdXNlIGNhY2hlIG9wcyBhcmUKKwkJICogdXNpbmcgdmlydHVhbCBhZGRyZXNzZXMgb25seSwgd2UgbXVzdCBwdXQgYSBtYXBwaW5nCisJCSAqIGluIHBsYWNlIGZvciBpdC4gIFdlIGFsc28gZW5hYmxlIGludGVycnVwdHMgZm9yIGEKKwkJICogc2hvcnQgd2hpbGUgYW5kIGRpc2FibGUgdGhlbSBhZ2FpbiB0byBwcm90ZWN0IHRoaXMKKwkJICogbWFwcGluZy4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgaWR4OworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlpZHggPSBLTV9MMl9DQUNIRSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCXZhID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyB8IFBTUl9JX0JJVCk7CisJCXNldF9wdGVfZXh0KFRPUF9QVEUodmEpLCBwZm5fcHRlKHBhID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMKSwgMCk7CisJCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSh2YSk7CisJfQorCXJldHVybiB2YSArIChwYV9vZmZzZXQgPj4gKDMyIC0gUEFHRV9TSElGVCkpOworI2Vsc2UKKwlyZXR1cm4gX19waHlzX3RvX3ZpcnQocGEpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIHhzYzNfbDJfaW52X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGZsYWdzOworCiAJaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IC0xdWwpIHsKIAkJeHNjM19sMl9pbnZfYWxsKCk7CiAJCXJldHVybjsKIAl9CiAKKwl2YWRkciA9IC0xOyAgLyogdG8gZm9yY2UgdGhlIGZpcnN0IG1hcHBpbmcgKi8KKwlsMl9tYXBfc2F2ZV9mbGFncyhmbGFncyk7CisKIAkvKgogCSAqIENsZWFuIGFuZCBpbnZhbGlkYXRlIHBhcnRpYWwgZmlyc3QgY2FjaGUgbGluZS4KIAkgKi8KIAlpZiAoc3RhcnQgJiAoQ0FDSEVfTElORV9TSVpFIC0gMSkpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShzdGFydCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSkpOwotCQl4c2MzX2wyX2ludl9wYShzdGFydCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSkpOworCQl2YWRkciA9IGwyX21hcF92YShzdGFydCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSksIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfY2xlYW5fbXZhKHZhZGRyKTsKKwkJeHNjM19sMl9pbnZfbXZhKHZhZGRyKTsKIAkJc3RhcnQgPSAoc3RhcnQgfCAoQ0FDSEVfTElORV9TSVpFIC0gMSkpICsgMTsKIAl9CiAKIAkvKgotCSAqIENsZWFuIGFuZCBpbnZhbGlkYXRlIHBhcnRpYWwgbGFzdCBjYWNoZSBsaW5lLgotCSAqLwotCWlmIChzdGFydCA8IGVuZCAmJiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSkgewotCQl4c2MzX2wyX2NsZWFuX3BhKGVuZCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSkpOwotCQl4c2MzX2wyX2ludl9wYShlbmQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKLQkJZW5kICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JfQotCi0JLyoKIAkgKiBJbnZhbGlkYXRlIGFsbCBmdWxsIGNhY2hlIGxpbmVzIGJldHdlZW4gJ3N0YXJ0JyBhbmQgJ2VuZCcuCiAJICovCi0Jd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCXhzYzNfbDJfaW52X3BhKHN0YXJ0KTsKKwl3aGlsZSAoc3RhcnQgPCAoZW5kICYgfihDQUNIRV9MSU5FX1NJWkUgLSAxKSkpIHsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQsIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfaW52X212YSh2YWRkcik7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKKwkvKgorCSAqIENsZWFuIGFuZCBpbnZhbGlkYXRlIHBhcnRpYWwgbGFzdCBjYWNoZSBsaW5lLgorCSAqLworCWlmIChzdGFydCA8IGVuZCkgeworCQl2YWRkciA9IGwyX21hcF92YShzdGFydCwgdmFkZHIsIGZsYWdzKTsKKwkJeHNjM19sMl9jbGVhbl9tdmEodmFkZHIpOworCQl4c2MzX2wyX2ludl9tdmEodmFkZHIpOworCX0KKworCWwyX21hcF9yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwogCWRzYigpOwogfQogCiBzdGF0aWMgdm9pZCB4c2MzX2wyX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGZsYWdzOworCisJdmFkZHIgPSAtMTsgIC8qIHRvIGZvcmNlIHRoZSBmaXJzdCBtYXBwaW5nICovCisJbDJfbWFwX3NhdmVfZmxhZ3MoZmxhZ3MpOworCiAJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShzdGFydCk7CisJCXZhZGRyID0gbDJfbWFwX3ZhKHN0YXJ0LCB2YWRkciwgZmxhZ3MpOworCQl4c2MzX2wyX2NsZWFuX212YSh2YWRkcik7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKKwlsMl9tYXBfcmVzdG9yZV9mbGFncyhmbGFncyk7CisKIAlkc2IoKTsKIH0KIApAQCAtMTQ4LDE4ICsxOTMsMjYgQEAKIAogc3RhdGljIHZvaWQgeHNjM19sMl9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBmbGFnczsKKwogCWlmIChzdGFydCA9PSAwICYmIGVuZCA9PSAtMXVsKSB7CiAJCXhzYzNfbDJfZmx1c2hfYWxsKCk7CiAJCXJldHVybjsKIAl9CiAKKwl2YWRkciA9IC0xOyAgLyogdG8gZm9yY2UgdGhlIGZpcnN0IG1hcHBpbmcgKi8KKwlsMl9tYXBfc2F2ZV9mbGFncyhmbGFncyk7CisKIAlzdGFydCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQl4c2MzX2wyX2NsZWFuX3BhKHN0YXJ0KTsKLQkJeHNjM19sMl9pbnZfcGEoc3RhcnQpOworCQl2YWRkciA9IGwyX21hcF92YShzdGFydCwgdmFkZHIsIGZsYWdzKTsKKwkJeHNjM19sMl9jbGVhbl9tdmEodmFkZHIpOworCQl4c2MzX2wyX2ludl9tdmEodmFkZHIpOwogCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJfQogCisJbDJfbWFwX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCiAJZHNiKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZhLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS1mYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYTYwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS1mYS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLWZhLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEZhcmFkYXkgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBCYXNlZCBvbiBjb3B5cGFnZS12NHdiLlM6CisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKy8qCisgKiBGYXJhZGF5IG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQorICovCitzdGF0aWMgdm9pZCBfX25ha2VkCitmYV9jb3B5X3VzZXJfcGFnZSh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tKQoreworCWFzbSgiXAorCXN0bWZkCXNwISwge3I0LCBscn0JCQlAIDJcblwKKwltb3YJcjIsICUwCQkJCUAgMVxuXAorMToJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwlzdG1pYQlyMCwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgMSAgIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgbGluZVxuXAorCWFkZAlyMCwgcjAsICMxNgkJCUAgMVxuXAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJcjAsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJcjAsIHIwLCAjMTYJCQlAIDFcblwKKwlzdWJzCXIyLCByMiwgIzEJCQlAIDFcblwKKwlibmUJMWIJCQkJQCAxXG5cCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgMSAgIGRyYWluIFdCXG5cCisJbGRtZmQJc3AhLCB7cjQsIHBjfQkJCUAgMyIKKwk6CisJOiAiSSIgKFBBR0VfU0laRSAvIDMyKSk7Cit9CisKK3ZvaWQgZmFfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwl2b2lkICprdG8sICprZnJvbTsKKworCWt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMCk7CisJa2Zyb20gPSBrbWFwX2F0b21pYyhmcm9tLCBLTV9VU0VSMSk7CisJZmFfY29weV91c2VyX3BhZ2Uoa3RvLCBrZnJvbSk7CisJa3VubWFwX2F0b21pYyhrZnJvbSwgS01fVVNFUjEpOworCWt1bm1hcF9hdG9taWMoa3RvLCBLTV9VU0VSMCk7Cit9CisKKy8qCisgKiBGYXJhZGF5IG9wdGltaXNlZCBjbGVhcl91c2VyX3BhZ2UKKyAqCisgKiBTYW1lIHN0b3J5IGFzIGFib3ZlLgorICovCit2b2lkIGZhX2NsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqcHRyLCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJYXNtIHZvbGF0aWxlKCJcCisJbW92CXIxLCAlMgkJCQlAIDFcblwKKwltb3YJcjIsICMwCQkJCUAgMVxuXAorCW1vdglyMywgIzAJCQkJQCAxXG5cCisJbW92CWlwLCAjMAkJCQlAIDFcblwKKwltb3YJbHIsICMwCQkJCUAgMVxuXAorMToJc3RtaWEJJTAsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJJTAsICUwLCAjMTYJCQlAIDFcblwKKwlzdG1pYQklMCwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDEJCUAgMSAgIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgbGluZVxuXAorCWFkZAklMCwgJTAsICMxNgkJCUAgMVxuXAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMVxuXAorCWJuZQkxYgkJCQlAIDFcblwKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCAxICAgZHJhaW4gV0IiCisJOiAiPXIiIChwdHIpCisJOiAiMCIgKGthZGRyKSwgIkkiIChQQUdFX1NJWkUgLyAzMikKKwk6ICJyMSIsICJyMiIsICJyMyIsICJpcCIsICJsciIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKK30KKworc3RydWN0IGNwdV91c2VyX2ZucyBmYV91c2VyX2ZucyBfX2luaXRkYXRhID0geworCS5jcHVfY2xlYXJfdXNlcl9oaWdocGFnZSA9IGZhX2NsZWFyX3VzZXJfaGlnaHBhZ2UsCisJLmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UJPSBmYV9jb3B5X3VzZXJfaGlnaHBhZ2UsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggZjFlZjU2MS4uNTEwYzE3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CkBAIC01MTcsNiArNTE4LDc0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludCk7CiAKK3N0YXRpYyB2b2lkIGRtYV9jYWNoZV9tYWludF9jb250aWd1b3VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJdm9pZCAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwl2b2lkICgqaW5uZXJfb3ApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKwl2b2lkICgqb3V0ZXJfb3ApKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLworCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KKwkJaW5uZXJfb3AgPSBkbWFjX2NsZWFuX3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2NsZWFuX3JhbmdlOworCQlicmVhazsKKwljYXNlIERNQV9CSURJUkVDVElPTkFMOgkJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlICovCisJCWlubmVyX29wID0gZG1hY19mbHVzaF9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9mbHVzaF9yYW5nZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgeworCQl2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwkJaW5uZXJfb3AodmFkZHIsIHZhZGRyICsgc2l6ZSk7CisJfSBlbHNlIHsKKwkJdmFkZHIgPSBrbWFwX2hpZ2hfZ2V0KHBhZ2UpOworCQlpZiAodmFkZHIpIHsKKwkJCXZhZGRyICs9IG9mZnNldDsKKwkJCWlubmVyX29wKHZhZGRyLCB2YWRkciArIHNpemUpOworCQkJa3VubWFwX2hpZ2gocGFnZSk7CisJCX0KKwl9CisKKwlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwlvdXRlcl9vcChwYWRkciwgcGFkZHIgKyBzaXplKTsKK30KKwordm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyKQoreworCS8qCisJICogQSBzaW5nbGUgc2cgZW50cnkgbWF5IHJlZmVyIHRvIG11bHRpcGxlIHBoeXNpY2FsbHkgY29udGlndW91cworCSAqIHBhZ2VzLiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gcHJvY2VzcyBoaWdobWVtIHBhZ2VzIGluZGl2aWR1YWxseS4KKwkgKiBJZiBoaWdobWVtIGlzIG5vdCBjb25maWd1cmVkIHRoZW4gdGhlIGJ1bGsgb2YgdGhpcyBsb29wIGdldHMKKwkgKiBvcHRpbWl6ZWQgb3V0LgorCSAqLworCXNpemVfdCBsZWZ0ID0gc2l6ZTsKKwlkbyB7CisJCXNpemVfdCBsZW4gPSBsZWZ0OworCQlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkgJiYgbGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFKSB7CisJCQlpZiAob2Zmc2V0ID49IFBBR0VfU0laRSkgeworCQkJCXBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQkJCW9mZnNldCAlPSBQQUdFX1NJWkU7CisJCQl9CisJCQlsZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisJCX0KKwkJZG1hX2NhY2hlX21haW50X2NvbnRpZ3VvdXMocGFnZSwgb2Zmc2V0LCBsZW4sIGRpcik7CisJCW9mZnNldCA9IDA7CisJCXBhZ2UrKzsKKwkJbGVmdCAtPSBsZW47CisJfSB3aGlsZSAobGVmdCk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludF9wYWdlKTsKKwogLyoqCiAgKiBkbWFfbWFwX3NnIC0gbWFwIGEgc2V0IG9mIFNHIGJ1ZmZlcnMgZm9yIHN0cmVhbWluZyBtb2RlIERNQQogICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCkBAIC02MTQsNyArNjgzLDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQkJZG1hX2NhY2hlX21haW50KHNnX3ZpcnQocyksIHMtPmxlbmd0aCwgZGlyKTsKKwkJCWRtYV9jYWNoZV9tYWludF9wYWdlKHNnX3BhZ2UocyksIHMtPm9mZnNldCwKKwkJCQkJICAgICBzLT5sZW5ndGgsIGRpcik7CiAJfQogfQogRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IDBmYTliZjMuLjRlMjgzNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAKICNpZm5kZWYgQ09ORklHX1NNUAotCWlmIChtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpICYmIG1hcHBpbmcgJiYgIW1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKQogCQlzZXRfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKIAllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ5NTRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogYXJjaC9hcm0vbW0vaGlnaG1lbS5jIC0tIEFSTSBoaWdobWVtIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqIENyZWF0ZWQ6CXNlcHRlbWJlciA4LCAyMDA4CisgKiBDb3B5cmlnaHQ6CU1hcnZlbGwgU2VtaWNvbmR1Y3RvcnMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJtbS5oIgorCit2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlyZXR1cm4ga21hcF9oaWdoKHBhZ2UpOworfQorRVhQT1JUX1NZTUJPTChrbWFwKTsKKwordm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm47CisJa3VubWFwX2hpZ2gocGFnZSk7Cit9CitFWFBPUlRfU1lNQk9MKGt1bm1hcCk7CisKK3ZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwlpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisJLyoKKwkgKiBXaXRoIGRlYnVnZ2luZyBlbmFibGVkLCBrdW5tYXBfYXRvbWljIGZvcmNlcyB0aGF0IGVudHJ5IHRvIDAuCisJICogTWFrZSBzdXJlIGl0IHdhcyBpbmRlZWQgcHJvcGVybHkgdW5tYXBwZWQuCisJICovCisJQlVHX09OKCFwdGVfbm9uZSgqKFRPUF9QVEUodmFkZHIpKSkpOworI2VuZGlmCisJc2V0X3B0ZV9leHQoVE9QX1BURSh2YWRkciksIG1rX3B0ZShwYWdlLCBrbWFwX3Byb3QpLCAwKTsKKwkvKgorCSAqIFdoZW4gZGVidWdnaW5nIGlzIG9mZiwga3VubWFwX2F0b21pYyBsZWF2ZXMgdGhlIHByZXZpb3VzIG1hcHBpbmcKKwkgKiBpbiBwbGFjZSwgc28gdGhpcyBUTEIgZmx1c2ggZW5zdXJlcyB0aGUgVExCIGlzIHVwZGF0ZWQgd2l0aCB0aGUKKwkgKiBuZXcgbWFwcGluZy4KKwkgKi8KKwlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworCisJcmV0dXJuICh2b2lkICopdmFkZHI7Cit9CitFWFBPUlRfU1lNQk9MKGttYXBfYXRvbWljKTsKKwordm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBrdmFkZHIgJiBQQUdFX01BU0s7CisJdW5zaWduZWQgaW50IGlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGt2YWRkciA+PSAodm9pZCAqKUZJWEFERFJfU1RBUlQpIHsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKCh2b2lkICopdmFkZHIpOworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisJCUJVR19PTih2YWRkciAhPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KSk7CisJCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBfX3B0ZSgwKSwgMCk7CisJCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSh2YWRkcik7CisjZWxzZQorCQkodm9pZCkgaWR4OyAgLyogdG8ga2lsbCBhIHdhcm5pbmcgKi8KKyNlbmRpZgorCX0KKwlwYWdlZmF1bHRfZW5hYmxlKCk7Cit9CitFWFBPUlRfU1lNQk9MKGt1bm1hcF9hdG9taWMpOworCit2b2lkICprbWFwX2F0b21pY19wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGludCBpZHg7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisKKwlpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOworI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCisJQlVHX09OKCFwdGVfbm9uZSgqKFRPUF9QVEUodmFkZHIpKSkpOworI2VuZGlmCisJc2V0X3B0ZV9leHQoVE9QX1BURSh2YWRkciksIHBmbl9wdGUocGZuLCBrbWFwX3Byb3QpLCAwKTsKKwlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworCisJcmV0dXJuICh2b2lkICopdmFkZHI7Cit9CisKK3N0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKGNvbnN0IHZvaWQgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcHRyOworCXB0ZV90ICpwdGU7CisKKwlpZiAodmFkZHIgPCBGSVhBRERSX1NUQVJUKQorCQlyZXR1cm4gdmlydF90b19wYWdlKHB0cik7CisKKwlwdGUgPSBUT1BfUFRFKHZhZGRyKTsKKwlyZXR1cm4gcHRlX3BhZ2UoKnB0ZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggODBmZDNiNi4uODI3NzgwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CkBAIC00ODUsNyArNDg2LDcgQEAKIAlpbnQgaSwgbm9kZTsKIAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0JbWF4X21hcG5yICAgPSB2aXJ0X3RvX3BhZ2UoaGlnaF9tZW1vcnkpIC0gbWVtX21hcDsKKwltYXhfbWFwbnIgICA9IHBmbl90b19wYWdlKG1heF9wZm4gKyBQSFlTX1BGTl9PRkZTRVQpIC0gbWVtX21hcDsKICNlbmRpZgogCiAJLyogdGhpcyB3aWxsIHB1dCBhbGwgdW51c2VkIGxvdyBtZW1vcnkgb250byB0aGUgZnJlZWxpc3RzICovCkBAIC01MDQsNiArNTA1LDE5IEBACiAJCQkJICAgIF9fcGh5c190b19wZm4oX19wYShzd2FwcGVyX3BnX2RpcikpLCBOVUxMKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkvKiBzZXQgaGlnaG1lbSBwYWdlIGZyZWUgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCWZvcl9lYWNoX25vZGViYW5rIChpLCAmbWVtaW5mbywgbm9kZSkgeworCQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IGJhbmtfcGZuX3N0YXJ0KCZtZW1pbmZvLmJhbmtbaV0pOworCQkJdW5zaWduZWQgbG9uZyBlbmQgPSBiYW5rX3Bmbl9lbmQoJm1lbWluZm8uYmFua1tpXSk7CisJCQlpZiAoc3RhcnQgPj0gbWF4X2xvd19wZm4gKyBQSFlTX1BGTl9PRkZTRVQpCisJCQkJdG90YWxoaWdoX3BhZ2VzICs9IGZyZWVfYXJlYShzdGFydCwgZW5kLCBOVUxMKTsKKwkJfQorCX0KKwl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7CisjZW5kaWYKKwogCS8qCiAJICogU2luY2Ugb3VyIG1lbW9yeSBtYXkgbm90IGJlIGNvbnRpZ3VvdXMsIGNhbGN1bGF0ZSB0aGUKIAkgKiByZWFsIG51bWJlciBvZiBwYWdlcyB3ZSBoYXZlIGluIHRoaXMgc3lzdGVtCkBAIC01MjEsOSArNTM1LDEwIEBACiAJaW5pdHNpemUgPSBfX2luaXRfZW5kIC0gX19pbml0X2JlZ2luOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJNZW1vcnk6ICVsdUtCIGF2YWlsYWJsZSAoJWRLIGNvZGUsICIKLQkJIiVkSyBkYXRhLCAlZEsgaW5pdClcbiIsCisJCSIlZEsgZGF0YSwgJWRLIGluaXQsICVsdUsgaGlnaG1lbSlcbiIsCiAJCSh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAotCQljb2Rlc2l6ZSA+PiAxMCwgZGF0YXNpemUgPj4gMTAsIGluaXRzaXplID4+IDEwKTsKKwkJY29kZXNpemUgPj4gMTAsIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKKwkJKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7CiAKIAlpZiAoUEFHRV9TSVpFID49IDE2Mzg0ICYmIG51bV9waHlzcGFnZXMgPD0gMTI4KSB7CiAJCWV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfbWVtb3J5OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0uaCBiL2FyY2gvYXJtL21tL21tLmgKaW5kZXggOTViYmUxMS4uYzRmNmYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW0uaAorKysgYi9hcmNoL2FybS9tbS9tbS5oCkBAIC0xLDcgKzEsNiBAQAotLyogdGhlIHVwcGVyLW1vc3QgcGFnZSB0YWJsZSBwb2ludGVyICovCi0KICNpZmRlZiBDT05GSUdfTU1VCiAKKy8qIHRoZSB1cHBlci1tb3N0IHBhZ2UgdGFibGUgcG9pbnRlciAqLwogZXh0ZXJuIHBtZF90ICp0b3BfcG1kOwogCiAjZGVmaW5lIFRPUF9QVEUoeCkJcHRlX29mZnNldF9rZXJuZWwodG9wX3BtZCwgeCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggZDRkMDgyYy4uYjQzOGZjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTE4LDkgKzE4LDExIEBACiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTI0Myw2ICsyNDUsMTAgQEAKIAkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QsCiAJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAogCX0sCisJW01UX01FTU9SWV9OT05DQUNIRURdID0geworCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFLAorCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKKwl9LAogfTsKIAogY29uc3Qgc3RydWN0IG1lbV90eXBlICpnZXRfbWVtX3R5cGUodW5zaWduZWQgaW50IHR5cGUpCkBAIC00MDYsOSArNDEyLDI4IEBACiAJCWtlcm5fcGdwcm90IHw9IExfUFRFX1NIQVJFRDsKIAkJdmVjc19wZ3Byb3QgfD0gTF9QVEVfU0hBUkVEOwogCQltZW1fdHlwZXNbTVRfTUVNT1JZXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKKwkJbWVtX3R5cGVzW01UX01FTU9SWV9OT05DQUNIRURdLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9TOwogI2VuZGlmCiAJfQogCisJLyoKKwkgKiBOb24tY2FjaGVhYmxlIE5vcm1hbCAtIGludGVuZGVkIGZvciBtZW1vcnkgYXJlYXMgdGhhdCBtdXN0CisJICogbm90IGNhdXNlIGRpcnR5IGNhY2hlIGxpbmUgd3JpdGViYWNrcyB3aGVuIHVzZWQKKwkgKi8KKwlpZiAoY3B1X2FyY2ggPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKKwkJaWYgKGNwdV9hcmNoID49IENQVV9BUkNIX0FSTXY3ICYmIChjciAmIENSX1RSRSkpIHsKKwkJCS8qIE5vbi1jYWNoZWFibGUgTm9ybWFsIGlzIFhDQiA9IDAwMSAqLworCQkJbWVtX3R5cGVzW01UX01FTU9SWV9OT05DQUNIRURdLnByb3Rfc2VjdCB8PQorCQkJCVBNRF9TRUNUX0JVRkZFUkVEOworCQl9IGVsc2UgeworCQkJLyogRm9yIGJvdGggQVJNdjYgYW5kIG5vbi1URVgtcmVtYXBwaW5nIEFSTXY3ICovCisJCQltZW1fdHlwZXNbTVRfTUVNT1JZX05PTkNBQ0hFRF0ucHJvdF9zZWN0IHw9CisJCQkJUE1EX1NFQ1RfVEVYKDEpOworCQl9CisJfSBlbHNlIHsKKwkJbWVtX3R5cGVzW01UX01FTU9SWV9OT05DQUNIRURdLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9CVUZGRVJBQkxFOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgdiA9IHBncHJvdF92YWwocHJvdGVjdGlvbl9tYXBbaV0pOwogCQlwcm90ZWN0aW9uX21hcFtpXSA9IF9fcGdwcm90KHYgfCB1c2VyX3BncHJvdCk7CkBAIC02NzcsNiArNzAyLDEwIEBACiAJCQlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgewogCQkJCXByaW50ayhLRVJOX0NSSVQgIk5SX0JBTktTIHRvbyBsb3csICIKIAkJCQkJCSAiaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIpOworCQkJfSBlbHNlIGlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKKwkJCQlwcmludGsoS0VSTl9DUklUICJISUdITUVNIGlzIG5vdCB5ZXQgc3VwcG9ydGVkICIKKwkJCQkJCSAid2l0aCBWSVBUIGFsaWFzaW5nIGNhY2hlLCAiCisJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJbWVtbW92ZShiYW5rICsgMSwgYmFuaywKIAkJCQkJKG1lbWluZm8ubnJfYmFua3MgLSBpKSAqIHNpemVvZigqYmFuaykpOwpAQCAtNjk0LDcgKzcyMyw3IEBACiAJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCiAJCSAqLwogCQlpZiAoX192YShiYW5rLT5zdGFydCkgPj0gVk1BTExPQ19NSU4gfHwKLQkJICAgIF9fdmEoYmFuay0+c3RhcnQpIDwgUEFHRV9PRkZTRVQpIHsKKwkJICAgIF9fdmEoYmFuay0+c3RhcnQpIDwgKHZvaWQgKilQQUdFX09GRlNFVCkgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJJZ25vcmluZyBSQU0gYXQgJS44bHgtJS44bHggIgogCQkJICAgICAgICIodm1hbGxvYyByZWdpb24gb3ZlcmxhcCkuXG4iLAogCQkJICAgICAgIGJhbmstPnN0YXJ0LCBiYW5rLT5zdGFydCArIGJhbmstPnNpemUgLSAxKTsKQEAgLTg5NSw2ICs5MjQsMTcgQEAKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGttYXBfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19ISUdITUVNCisJcG1kX3QgKnBtZCA9IHBtZF9vZmZfayhQS01BUF9CQVNFKTsKKwlwdGVfdCAqcHRlID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoMiAqIFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpOworCUJVR19PTighcG1kX25vbmUoKnBtZCkgfHwgIXB0ZSk7CisJX19wbWRfcG9wdWxhdGUocG1kLCBfX3BhKHB0ZSkgfCBfUEFHRV9LRVJORUxfVEFCTEUpOworCXBrbWFwX3BhZ2VfdGFibGUgPSBwdGUgKyBQVFJTX1BFUl9QVEU7CisjZW5kaWYKK30KKwogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMsIGluaXRpYWxpc2VzIHRoZSB6b25lIG1lbW9yeQogICogbWFwcywgYW5kIHNldHMgdXAgdGhlIHplcm8gcGFnZSwgYmFkIHBhZ2UgYW5kIGJhZCBwYWdlIHRhYmxlcy4KQEAgLTkwOCw2ICs5NDgsNyBAQAogCXByZXBhcmVfcGFnZV90YWJsZSgpOwogCWJvb3RtZW1faW5pdCgpOwogCWRldmljZW1hcHNfaW5pdChtZGVzYyk7CisJa21hcF9pbml0KCk7CiAKIAl0b3BfcG1kID0gcG1kX29mZl9rKDB4ZmZmZjAwMDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOGE5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlM6IE1NVSBmdW5jdGlvbnMgZm9yIEZBNTI2CisgKgorICogIFdyaXR0ZW4gYnkgOiBMdWtlIExlZQorICogIENvcHlyaWdodCAoQykgMjAwNSBGYXJhZGF5IENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgZmE1MjYuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaHdjYXAuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMTYKKworCS50ZXh0CisvKgorICogY3B1X2ZhNTI2X3Byb2NfaW5pdCgpCisgKi8KK0VOVFJZKGNwdV9mYTUyNl9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2ZhNTI2X3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X2ZhNTI2X3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlmYV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCW5vcAorCW5vcAorCWxkbWZkCXNwISwge3BjfQorCisvKgorICogY3B1X2ZhNTI2X3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfcmVzZXQpCisvKiBUT0RPOiBVc2UgQ1A4IGlmIHBvc3NpYmxlLi4uICovCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNpZmRlZiBDT05GSUdfTU1VCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgorCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCisJYmljCWlwLCBpcCwgIzB4MDgwMAkJCUAgQlRCIG9mZgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW5vcAorCW5vcAorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9mYTUyNl9kb19pZGxlKCkKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfZG9faWRsZSkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIFdhaXQgZm9yIGludGVycnVwdAorCW1vdglwYywgbHIKKworCitFTlRSWShjcHVfZmE1MjZfZGNhY2hlX2NsZWFuX2FyZWEpCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFCisJYmhpCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X2ZhNTI2X3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTQKK0VOVFJZKGNwdV9mYTUyNl9zd2l0Y2hfbW0pCisjaWZkZWYgQ09ORklHX01NVQorCW1vdglpcCwgIzAKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxNCwgMAkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSB3aG9sZSBEIGNhY2hlCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIgc2luY2UgbW0gY2hhbmdlZAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIFVUTEIKKyNlbmRpZgorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9mYTUyNl9zZXRfcHRlX2V4dChwdGVwLCBwdGUsIGV4dCkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTQKK0VOVFJZKGNwdV9mYTUyNl9zZXRfcHRlX2V4dCkKKyNpZmRlZiBDT05GSUdfTU1VCisJYXJtdjNfc2V0X3B0ZV9leHQKKwltb3YJcjAsIHIwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2VuZGlmCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX2ZhNTI2X3NldHVwLCAjZnVuY3Rpb24KK19fZmE1MjZfc2V0dXA6CisJLyogT24gcmV0dXJuIG9mIHRoaXMgcm91dGluZSwgcjAgbXVzdCBjYXJyeSBjb3JyZWN0IGZsYWdzIGZvciBDRkcgcmVnaXN0ZXIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA1CQlAIGludmFsaWRhdGUgSVNjcmF0Y2hwYWQgUkFNCisKKwltb3YJcjAsICMxCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMSwgMAkJQCB0dXJuLW9uIEVDUgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIgQWxsCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCisJbW92CXIwLCAjMHgxZgkJCUAgRG9tYWlucyAwLCAxID0gbWFuYWdlciwgMiA9IGNsaWVudAorCW1jcglwMTUsIDAsIHIwLCBjMywgYzAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCisKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0CisJbGRyCXI1LCBmYTUyNl9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgZmE1MjZfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisJbW92CXBjLCBscgorCS5zaXplCV9fZmE1MjZfc2V0dXAsIC4gLSBfX2ZhNTI2X3NldHVwCisKKwkvKgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuLjExIDEwMDEgLjExMSAxMTAxCisJICoKKwkgKi8KKwkudHlwZQlmYTUyNl9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlmYTUyNl9jcjFfc2V0LCAjb2JqZWN0CitmYTUyNl9jcjFfY2xlYXI6CisJLndvcmQJMHgzZjNmCitmYTUyNl9jcjFfc2V0OgorCS53b3JkCTB4Mzk3RAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2ZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CisJLndvcmQJdjRfZWFybHlfYWJvcnQKKwkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJY3B1X2ZhNTI2X3Byb2NfaW5pdAorCS53b3JkCWNwdV9mYTUyNl9wcm9jX2ZpbgorCS53b3JkCWNwdV9mYTUyNl9yZXNldAorCS53b3JkICAgY3B1X2ZhNTI2X2RvX2lkbGUKKwkud29yZAljcHVfZmE1MjZfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfZmE1MjZfc3dpdGNoX21tCisJLndvcmQJY3B1X2ZhNTI2X3NldF9wdGVfZXh0CisJLnNpemUJZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY0IgorCS5zaXplCWNwdV9hcmNoX25hbWUsIC4gLSBjcHVfYXJjaF9uYW1lCisKKwkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToKKwkuYXNjaXoJInY0IgorCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQorCisJLnR5cGUJY3B1X2ZhNTI2X25hbWUsICNvYmplY3QKK2NwdV9mYTUyNl9uYW1lOgorCS5hc2NpegkiRkE1MjYiCisJLnNpemUJY3B1X2ZhNTI2X25hbWUsIC4gLSBjcHVfZmE1MjZfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfX2ZhNTI2X3Byb2NfaW5mbywjb2JqZWN0CitfX2ZhNTI2X3Byb2NfaW5mbzoKKwkubG9uZwkweDY2MDE1MjYxCisJLmxvbmcJMHhmZjAxZmZmMQorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19mYTUyNl9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGCisJLmxvbmcJY3B1X2ZhNTI2X25hbWUKKwkubG9uZwlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJZmFfdGxiX2ZucworCS5sb25nCWZhX3VzZXJfZm5zCisJLmxvbmcJZmFfY2FjaGVfZm5zCisJLnNpemUJX19mYTUyNl9wcm9jX2luZm8sIC4gLSBfX2ZhNTI2X3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZjUwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUzogTU1VIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBQSjEgY29yZQorICoKKyAqICBQSjEgKGNvZGVuYW1lIE1vaGF3aykgaXMgYSBoeWJyaWQgb2YgdGhlIHhzY2FsZTMgYW5kIE1hcnZlbGwncyBvd24gY29yZS4KKyAqCisgKiAgSGVhdmlseSBiYXNlZCBvbiBwcm9jLWFybTkyNi5TIGFuZCBwcm9jLXhzYzMuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gYXJlYSB3aGljaCB3aWxsIGJlIGZsdXNoZWQuICBJZiB0aGUKKyAqIGFyZWEgaXMgbGFyZ2VyIHRoYW4gdGhpcywgdGhlbiB3ZSBmbHVzaCB0aGUgd2hvbGUgY2FjaGUuCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CisKKy8qCisgKiBUaGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBMMSBEIGNhY2hlLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogY3B1X21vaGF3a19wcm9jX2luaXQoKQorICovCitFTlRSWShjcHVfbW9oYXdrX3Byb2NfaW5pdCkKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfbW9oYXdrX3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X21vaGF3a19wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJYmwJbW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTgwMAkJCUAgLi4uaXouLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMDYJCQlAIC4uLi4uLi4uLi4uLi5jYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfbW9oYXdrX3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqCisgKiAoc2FtZSBhcyBhcm05MjYpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCWlwLCBpcCwgIzB4MDAwNwkJCUAgLi4uLi4uLi4uLi4uLmNhbQorCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KKwltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwltb3YJcGMsIHIwCisKKy8qCisgKiBjcHVfbW9oYXdrX2RvX2lkbGUoKQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfbW9oYXdrX2RvX2lkbGUpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgd2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhcgorICoJYWRkcmVzcyBzcGFjZS4KKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorCW1vdglyMiwgI1ZNX0VYRUMKKwltb3YJaXAsICMwCitfX2ZsdXNoX3dob2xlX2NhY2hlOgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAwCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBhbGwgRCBjYWNoZQorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgMAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX3JhbmdlKHN0YXJ0LCBlbmQsIGZsYWdzKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUKKyAqCXNwZWNpZmllZCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKgorICogKHNhbWUgYXMgYXJtOTI2KQorICovCitFTlRSWShtb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJaXAsICMwCisJc3ViCXIzLCByMSwgcjAJCQlAIGNhbGN1bGF0ZSB0b3RhbCBzaXplCisJY21wCXIzLCAjQ0FDSEVfRExJTUlUCisJYmd0CV9fZmx1c2hfd2hvbGVfY2FjaGUKKzE6CXRzdAlyMiwgI1ZNX0VYRUMKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkobW9oYXdrX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkobW9oYXdrX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisJYWRkCXIxLCByMCwgI1BBR0VfU1oKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfaW52X3JhbmdlKQorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfY2xlYW5fcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfZmx1c2hfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworRU5UUlkobW9oYXdrX2NhY2hlX2ZucykKKwkubG9uZwltb2hhd2tfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwkubG9uZwltb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwltb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCW1vaGF3a19jb2hlcmVudF9rZXJuX3JhbmdlCisJLmxvbmcJbW9oYXdrX2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwltb2hhd2tfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCW1vaGF3a19kbWFfaW52X3JhbmdlCisJLmxvbmcJbW9oYXdrX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKKworRU5UUlkoY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYSkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUKKwliaGkJMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9tb2hhd2tfc3dpdGNoX21tKHBnZCkKKyAqCisgKiBTZXQgdGhlIHRyYW5zbGF0aW9uIGJhc2UgcG9pbnRlciB0byBiZSBhcyBkZXNjcmliZWQgYnkgcGdkLgorICoKKyAqIHBnZDogbmV3IHBhZ2UgdGFibGVzCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19zd2l0Y2hfbW0pCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAwCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBhbGwgRCBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlvcnIJcjAsIHIwLCAjMHgxOAkJCUAgY2FjaGUgdGhlIHBhZ2UgdGFibGUgaW4gTDIKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfbW9oYXdrX3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQorICoKKyAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19zZXRfcHRlX2V4dCkKKwlhcm12M19zZXRfcHRlX2V4dAorCW1vdglyMCwgcjAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKwlfX0lOSVQKKworCS50eXBlCV9fbW9oYXdrX3NldHVwLCAjZnVuY3Rpb24KK19fbW9oYXdrX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcworCW9ycglyNCwgcjQsICMweDE4CQkJQCBjYWNoZSB0aGUgcGFnZSB0YWJsZSBpbiBMMgorCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKworCW1vdglyMCwgIzAJCQkJQCBkb24ndCBhbGxvdyBDUCBhY2Nlc3MKKwltY3IJcDE1LCAwLCByMCwgYzE1LCBjMSwgMAkJQCB3cml0ZSBDUCBhY2Nlc3MgcmVnaXN0ZXIKKworCWFkcglyNSwgbW9oYXdrX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlcgorCWJpYwlyMCwgcjAsIHI1CisJb3JyCXIwLCByMCwgcjYKKwltb3YJcGMsIGxyCisKKwkuc2l6ZQlfX21vaGF3a19zZXR1cCwgLiAtIF9fbW9oYXdrX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4wMTEgMTAwMSAuLjAwIDAxMDEKKwkgKgorCSAqLworCS50eXBlCW1vaGF3a19jcnZhbCwgI29iamVjdAorbW9oYXdrX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDdmM2YsIG1tdXNldD0weDAwMDAzOTA1LCB1Y3NldD0weDAwMDAxMTM0CisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK21vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY1dF9lYXJseV9hYm9ydAorCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAljcHVfbW9oYXdrX3Byb2NfaW5pdAorCS53b3JkCWNwdV9tb2hhd2tfcHJvY19maW4KKwkud29yZAljcHVfbW9oYXdrX3Jlc2V0CisJLndvcmQJY3B1X21vaGF3a19kb19pZGxlCisJLndvcmQJY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYQorCS53b3JkCWNwdV9tb2hhd2tfc3dpdGNoX21tCisJLndvcmQJY3B1X21vaGF3a19zZXRfcHRlX2V4dAorCS5zaXplCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY1dGUiCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjUiCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkudHlwZQljcHVfbW9oYXdrX25hbWUsICNvYmplY3QKK2NwdV9tb2hhd2tfbmFtZToKKwkuYXNjaXoJIk1hcnZlbGwgODhTVjMzMXgiCisJLnNpemUJY3B1X21vaGF3a19uYW1lLCAuIC0gY3B1X21vaGF3a19uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fODhzdjMzMXhfcHJvY19pbmZvLCNvYmplY3QKK19fODhzdjMzMXhfcHJvY19pbmZvOgorCS5sb25nCTB4NTYxNTgwMDAJCQlAIE1hcnZlbGwgODhTVjMzMXggKE1PSEFXSykKKwkubG9uZwkweGZmZmZmMDAwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX21vaGF3a19zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV9tb2hhd2tfbmFtZQorCS5sb25nCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwltb2hhd2tfY2FjaGVfZm5zCisJLnNpemUJX184OHN2MzMxeF9wcm9jX2luZm8sIC4gLSBfXzg4c3YzMzF4X3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vdGxiLWZhLlMgYi9hcmNoL2FybS9tbS90bGItZmEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njk0ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vdGxiLWZhLlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS90bGItZmEuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRmFyYWRheSBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIHRsYi12NHdiaS5TOgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbiA0LCBGYXJhZGF5IHZhcmlhdGlvbi4KKyAqICBUaGlzIGFzc3VtZSBhbiB1bmlmaWVkIFRMQnMsIHdpdGggYSB3cml0ZSBidWZmZXIsIGFuZCBicmFuY2ggdGFyZ2V0IGJ1ZmZlciAoQlRCKQorICoKKyAqICBQcm9jZXNzb3JzOiBGQTUyMCBGQTUyNiBGQTYyNgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisKKy8qCisgKglmbHVzaF91c2VyX3RsYl9yYW5nZShzdGFydCwgZW5kLCBtbSkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSByYW5nZSBzdGFydCBhZGRyZXNzCisgKgktIGVuZCAgIC0gcmFuZ2UgZW5kIGFkZHJlc3MKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KKwkuYWxpZ24JNAorRU5UUlkoZmFfZmx1c2hfdXNlcl90bGJfcmFuZ2UpCisJdm1hX3ZtX21tIGlwLCByMgorCWFjdF9tbQlyMwkJCQlAIGdldCBjdXJyZW50LT5hY3RpdmVfbW0KKwllb3JzCXIzLCBpcCwgcjMJCQlAID09IG1tID8KKwltb3ZuZQlwYywgbHIJCQkJQCBubywgd2UgZG9udCBkbyBhbnl0aGluZworCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMQkJQCBpbnZhbGlkYXRlIFVUTEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMywgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbW92CXBjLCBscgorCisKK0VOVFJZKGZhX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMQkJQCBpbnZhbGlkYXRlIFVUTEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMywgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworCV9fSU5JVERBVEEKKworCS50eXBlCWZhX3RsYl9mbnMsICNvYmplY3QKK0VOVFJZKGZhX3RsYl9mbnMpCisJLmxvbmcJZmFfZmx1c2hfdXNlcl90bGJfcmFuZ2UKKwkubG9uZwlmYV9mbHVzaF9rZXJuX3RsYl9yYW5nZQorCS5sb25nCWZhX3RsYl9mbGFncworCS5zaXplCWZhX3RsYl9mbnMsIC4gLSBmYV90bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGNlZmMyMWMuLmQ4MDVhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC0xOCwxNSArMTgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLSNpbmNsdWRlICIuLi9rZXJuZWwvc3RhY2t0cmFjZS5oIgorI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIHN0YXRpYyBpbnQgcmVwb3J0X3RyYWNlKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwgdm9pZCAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgKmRlcHRoID0gZDsKIAogCWlmICgqZGVwdGgpIHsKLQkJb3Byb2ZpbGVfYWRkX3RyYWNlKGZyYW1lLT5scik7CisJCW9wcm9maWxlX2FkZF90cmFjZShmcmFtZS0+cGMpOwogCQkoKmRlcHRoKS0tOwogCX0KIApAQCAtNzAsOSArNjksMTIgQEAKIAlzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCA9ICgoc3RydWN0IGZyYW1lX3RhaWwgKikgcmVncy0+QVJNX2ZwKSAtIDE7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewotCQl1bnNpZ25lZCBsb25nIGJhc2UgPSAoKHVuc2lnbmVkIGxvbmcpcmVncykgJiB+KFRIUkVBRF9TSVpFIC0gMSk7Ci0JCXdhbGtfc3RhY2tmcmFtZShyZWdzLT5BUk1fZnAsIGJhc2UsIGJhc2UgKyBUSFJFQURfU0laRSwKLQkJCQlyZXBvcnRfdHJhY2UsICZkZXB0aCk7CisJCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOworCQlmcmFtZS5mcCA9IHJlZ3MtPkFSTV9mcDsKKwkJZnJhbWUuc3AgPSByZWdzLT5BUk1fc3A7CisJCWZyYW1lLmxyID0gcmVncy0+QVJNX2xyOworCQlmcmFtZS5wYyA9IHJlZ3MtPkFSTV9wYzsKKwkJd2Fsa19zdGFja2ZyYW1lKCZmcmFtZSwgcmVwb3J0X3RyYWNlLCAmZGVwdGgpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwppbmRleCA5Y2MyYjE2Li4xN2QwZTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKQEAgLTMsNyArMyw3IEBACiBtZW51ICJGcmVlc2NhbGUgTVhDIEltcGxlbWVudGF0aW9ucyIKIAogY2hvaWNlCi0JcHJvbXB0ICJNWEMvaU1YIEJhc2UgVHlwZSIKKwlwcm9tcHQgIkZyZWVzY2FsZSBDUFUgZmFtaWx5OiIKIAlkZWZhdWx0IEFSQ0hfTVgzCiAKIGNvbmZpZyBBUkNIX01YMQpAQCAtMTUsMTIgKzE1LDE0IEBACiBjb25maWcgQVJDSF9NWDIKIAlib29sICJNWDItYmFzZWQiCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyIGZhbWlseQogCiBjb25maWcgQVJDSF9NWDMKIAlib29sICJNWDMtYmFzZWQiCiAJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMyBmYW1pbHkKIApAQCAtNDMsNCArNDUsMTAgQEAKIAkgIHJlcXVpcmVtZW50cyBmb3IgdGltaW5nLgogCSAgU2F5IE4gaGVyZSwgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lhbGl6ZWQgcmVxdWlyZW1lbnQuCiAKK2NvbmZpZyBNWENfUFdNCisJdHJpc3RhdGUgIkVuYWJsZSBQV00gZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9NWEMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIGkuTVggUFdNIGNvbnRyb2xsZXIocykuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCmluZGV4IGRiNzRhOTIuLjA1NTQwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCkBAIC0zLDcgKzMsOCBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vCitvYmoteSA6PSBpcnEubyBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vIGNwdS5vIHN5c3RlbS5vCiAKIG9iai0kKENPTkZJR19BUkNIX01YMSkgKz0gaW9tdXgtbXgxLW14Mi5vIGRtYS1teDEtbXgyLm8KIG9iai0kKENPTkZJR19BUkNIX01YMikgKz0gaW9tdXgtbXgxLW14Mi5vIGRtYS1teDEtbXgyLm8KK29iai0kKENPTkZJR19NWENfUFdNKSAgKz0gcHdtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCmluZGV4IDBhMzhmMGIuLjkyZTEzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYwpAQCAtNDgsNiArNDgsMTEgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCisgKiBBbGwgdGhlIGNvZGUgaW5zaWRlICNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwKKyAqIE1YQyBhcmNoaXRlY3R1cmVzIGhhdmUgc3dpdGNoZWQgdG8gdXNpbmcgY2xrZGV2LgorICovCisjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWCisvKgogICogUmV0cmlldmUgYSBjbG9jayBieSBuYW1lLgogICoKICAqIE5vdGUgdGhhdCB3ZSBmaXJzdCB0cnkgdG8gdXNlIGRldmljZSBpZCBvbiB0aGUgYnVzCkBAIC0xMTAsNiArMTE1LDcgQEAKIAlyZXR1cm4gY2xrOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTE4Nyw2ICsxOTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCisjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWCiAvKiBEZWNyZW1lbnQgdGhlIGNsb2NrJ3MgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLwogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTE5NCw2ICsyMDEsNyBAQAogCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKyNlbmRpZgogCiAvKiBSb3VuZCB0aGUgcmVxdWVzdGVkIGNsb2NrIHJhdGUgdG8gdGhlIG5lYXJlc3Qgc3VwcG9ydGVkCiAgKiByYXRlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmF0ZS4KQEAgLTI1Nyw2ICsyNjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CiAKKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKIC8qCiAgKiBBZGQgYSBuZXcgY2xvY2sgdG8gdGhlIGNsb2NrIHRyZWUuCiAgKi8KQEAgLTMyNyw0ICszMzYsNDkgQEAKIH0KIAogbGF0ZV9pbml0Y2FsbChteGNfc2V0dXBfcHJvY19lbnRyeSk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KICNlbmRpZgorCisvKgorICogR2V0IHRoZSByZXN1bHRpbmcgY2xvY2sgcmF0ZSBmcm9tIGEgUExMIHJlZ2lzdGVyIHZhbHVlIGFuZCB0aGUgaW5wdXQKKyAqIGZyZXF1ZW5jeS4gUExMcyB3aXRoIHRoaXMgcmVnaXN0ZXIgbGF5b3V0IGNhbiBhdCBsZWFzdCBiZSBmb3VuZCBvbgorICogTVgxLCBNWDIxLCBNWDI3IGFuZCBNWDMxCisgKgorICogICAgICAgICAgICAgICAgICBtZmkgKyBtZm4gLyAobWZkICsgMSkKKyAqICBmID0gMiAqIGZfcmVmICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgcGQgKyAxCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXhjX2RlY29kZV9wbGwodW5zaWduZWQgaW50IHJlZ192YWwsIHUzMiBmcmVxKQoreworCWxvbmcgbG9uZyBsbDsKKwlpbnQgbWZuX2FiczsKKwl1bnNpZ25lZCBpbnQgbWZpLCBtZm4sIG1mZCwgcGQ7CisKKwltZmkgPSAocmVnX3ZhbCA+PiAxMCkgJiAweGY7CisJbWZuID0gcmVnX3ZhbCAmIDB4M2ZmOworCW1mZCA9IChyZWdfdmFsID4+IDE2KSAmIDB4M2ZmOworCXBkID0gIChyZWdfdmFsID4+IDI2KSAmIDB4ZjsKKworCW1maSA9IG1maSA8PSA1ID8gNSA6IG1maTsKKworCW1mbl9hYnMgPSBtZm47CisKKyNpZiAhZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEgJiYgIWRlZmluZWQgQ09ORklHX0FSQ0hfTVgyMQorCWlmIChtZm4gPj0gMHgyMDApIHsKKwkJbWZuIHw9IDB4RkZGRkZFMDA7CisJCW1mbl9hYnMgPSAtbWZuOworCX0KKyNlbmRpZgorCisJZnJlcSAqPSAyOworCWZyZXEgLz0gcGQgKyAxOworCisJbGwgPSAodW5zaWduZWQgbG9uZyBsb25nKWZyZXEgKiBtZm5fYWJzOworCisJZG9fZGl2KGxsLCBtZmQgKyAxKTsKKwlpZiAobWZuIDwgMCkKKwkJbGwgPSAtbGw7CisJbGwgPSAoZnJlcSAqIG1maSkgKyBsbDsKKworCXJldHVybiBsbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2ZTBkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2NwdS5jCkBAIC0wLDAgKzEsMTEgQEAKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCit1bnNpZ25lZCBpbnQgX19teGNfY3B1X3R5cGU7CitFWFBPUlRfU1lNQk9MKF9fbXhjX2NwdV90eXBlKTsKKwordm9pZCBteGNfc2V0X2NwdV90eXBlKHVuc2lnbmVkIGludCB0eXBlKQoreworCV9fbXhjX2NwdV90eXBlID0gdHlwZTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCmluZGV4IGM2Njc0ODIuLjU2ZjJmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAogaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwppbmRleCAyOTA1ZWM3Li5lMzY0YTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBpbnQgZXJyY29kZSk7CiAJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CiAJdm9pZCAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgIGRtYV9tb2RlOworCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCByZXNieXRlczsKIAlpbnQgZG1hX251bTsKQEAgLTgwMiw3ICs4MDIsNyBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZG1hX2NsayA9IGNsa19nZXQoTlVMTCwgImRtYV9jbGsiKTsKKwlkbWFfY2xrID0gY2xrX2dldChOVUxMLCAiZG1hIik7CiAJY2xrX2VuYWJsZShkbWFfY2xrKTsKIAogCS8qIHJlc2V0IERNQSBtb2R1bGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCBjY2JkOTRhLi5jNjQ4M2JhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0yMDAsOCArMjAwLDggQEAKIHN0YXRpYyBpbnQgbXhjX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7Ci0JX3NldF9ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDEpOwogCW14Y19ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCmluZGV4IDhmMzRhMDUuLjFjYWM5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaApAQCAtNDgsNyArNDgsOCBAQAogICogQmFzZSBhZGRyZXNzIG9mIFBCQyBjb250cm9sbGVyLCBDUzQKICAqLwogI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICAweEVCMDAwMDAwCi0jZGVmaW5lIFBCQ19SRUdfQUREUihvZmZzZXQpICAgIChQQkNfQkFTRV9BRERSRVNTICsgKG9mZnNldCkpCisjZGVmaW5lIFBCQ19SRUdfQUREUihvZmZzZXQpICAgICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCisJCShQQkNfQkFTRV9BRERSRVNTICsgKG9mZnNldCkpCiAKIC8qCiAgKiBQQkMgSW50ZXJ1cHQgbmFtZSBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKaW5kZXggNDUxZDUxMC4uMzE4YzcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCkBAIC0xMSw2ICsxMSw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKIC8qIEJhc2UgYWRkcmVzcyBvZiBQQkMgY29udHJvbGxlciAqLwogI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICBJT19BRERSRVNTKENTNF9CQVNFX0FERFIpCiAvKiBPZmZzZXRzIGZvciB0aGUgUEJDIENvbnRyb2xsZXIgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhZWYxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFNT0JPQVJEX0hfXworCisvKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLworCisjZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2VudW0gbXgzMW1vYm9hcmRfYm9hcmRzIHsKKwlNWDMxTk9CT0FSRAk9IDAsCisJTVgzMURFVkJPQVJECT0gMSwKKwlNWDMxTUFSWEJPVAk9IDIsCit9OworCisvKgorICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZworICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICovCisKK2V4dGVybiB2b2lkIG14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBteDMxbW9ib2FyZF9tYXJ4Ym90X2luaXQodm9pZCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY3NjJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgPHlhbm9rQGVtY3JhZnQuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KKworLyogbWFuZGF0b3J5IGZvciBDT05GSUdfTExfREVCVUcgKi8KKworI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKKyNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisKKy8qIE5PUiBGTEFTSCAqLworI2RlZmluZSBRT05HX05PUl9TSVpFCQkoMTI4KjEwMjQqMTAyNCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1FPTkdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggZDIxZjc4ZS4uNDNhODJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTI2LDkgKzI2LDEzIEBACiBzdHJ1Y3QgbW9kdWxlOwogCiBzdHJ1Y3QgY2xrIHsKKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKKwkvKiBBcyBzb29uIGFzIGkuTVgxIGFuZCBpLk1YMzEgc3dpdGNoZWQgdG8gY2xrZGV2LCB0aGlzCisJICogYmxvY2sgY2FuIGdvIGF3YXkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgY2hhciAqbmFtZTsKKyNlbmRpZgogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKQEAgLTYzLDUgKzY3LDcgQEAKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIAordW5zaWduZWQgbG9uZyBteGNfZGVjb2RlX3BsbCh1bnNpZ25lZCBpbnQgcGxsLCB1MzIgZl9yZWYpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggNjM1MDI4Ny4uYjJmOWI3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtMTIsMTIgKzEyLDE4IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0NPTU1PTl9IX18KIAogc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBjbGs7CiAKIGV4dGVybiB2b2lkIG14Y19tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteGNfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCBteGNfdGltZXJfaW5pdChjb25zdCBjaGFyICpjbGtfdGltZXIpOwotZXh0ZXJuIGludCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsayk7CitleHRlcm4gaW50IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CitleHRlcm4gaW50IG14MzVfY2xvY2tzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG14Y19yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIG14Y19zZXRfY3B1X3R5cGUodW5zaWduZWQgaW50IHR5cGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjAyNzY4Yi4uNGY3NzMxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTMxLDYgKzMxLDkgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDMxXzNEUwogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMXBkay5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfUU9ORworI2luY2x1ZGUgPG1hY2gvYm9hcmQtcW9uZy5oPgorI2VuZGlmCiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGE2MTJkOGIuLjQyZTRlZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0yMywxMCArMjMsMTYgQEAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX01YMwotIyBpbmNsdWRlIDxtYWNoL214MzEuaD4KKyNpbmNsdWRlIDxtYWNoL214M3guaD4KKyNpbmNsdWRlIDxtYWNoL214MzEuaD4KKyNpbmNsdWRlIDxtYWNoL214MzUuaD4KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCisjIGluY2x1ZGUgPG1hY2gvbXgyeC5oPgorIyBpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisjICBpbmNsdWRlIDxtYWNoL214MjEuaD4KKyMgZW5kaWYKICMgaWZkZWYgQ09ORklHX01BQ0hfTVgyNwogIyAgaW5jbHVkZSA8bWFjaC9teDI3Lmg+CiAjIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14ZmIuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW14ZmIuaAppbmRleCA4NzBkMGQ5Li43NjJhN2IwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14ZmIuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW14ZmIuaApAQCAtNzYsNiArNzYsOSBAQAogCXVfY2hhciAqIGZpeGVkX3NjcmVlbl9jcHU7CiAJZG1hX2FkZHJfdCBmaXhlZF9zY3JlZW5fZG1hOwogCisJaW50ICgqaW5pdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSopOworCWludCAoKmV4aXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqKTsKKwogCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7CiAJdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLW14Mi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS1teDIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhMzgzYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLW14Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfTVhDX0dQSU9fTVgxX01YMl9ICi0jZGVmaW5lIF9NWENfR1BJT19NWDFfTVgyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLS8qCi0gKiAgR1BJTyBNb2R1bGUgYW5kIEkvTyBNdWx0aXBsZXhlcgotICogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAotICovCi0jZGVmaW5lIFZBX0dQSU9fQkFTRQlJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKQotI2RlZmluZSBNWENfRERJUih4KSAgICAoMHgwMCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19PQ1IxKHgpICAgICgweDA0ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX09DUjIoeCkgICAgKDB4MDggKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNPTkZBMSh4KSAoMHgwYyArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkEyKHgpICgweDEwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDT05GQjEoeCkgKDB4MTQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNPTkZCMih4KSAoMHgxOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19EUih4KSAgICAgICgweDFjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0dJVVMoeCkgICAgKDB4MjAgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfU1NSKHgpICAgICAoMHgyNCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ1IxKHgpICAgICgweDI4ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDUjIoeCkgICAgKDB4MmMgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSU1SKHgpICAgICAoMHgzMCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JU1IoeCkgICAgICgweDM0ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0dQUih4KSAgICAgKDB4MzggKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfU1dSKHgpICAgICAoMHgzYyArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19QVUVOKHgpICAgICgweDQwICsgKCh4KSA8PCA4KSkKLQotI2lmZGVmIENPTkZJR19BUkNIX01YMQotIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgMwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0jIGRlZmluZSBHUElPX1BPUlRfTUFYICA1Ci0jZW5kaWYKLQotI2lmbmRlZiBHUElPX1BPUlRfTUFYCi0jIGVycm9yICJHUElPIGNvbmZpZyBwb3J0IGNvdW50IHVua25vd24hIgotI2VuZGlmCi0KLSNkZWZpbmUgR1BJT19QSU5fTUFTSyAweDFmCi0KLSNkZWZpbmUgR1BJT19QT1JUX1NISUZUIDUKLSNkZWZpbmUgR1BJT19QT1JUX01BU0sgKDB4NyA8PCBHUElPX1BPUlRfU0hJRlQpCi0KLSNkZWZpbmUgR1BJT19QT1JUQSAoMCA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEIgKDEgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlRDICgyIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JURCAoMyA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEUgKDQgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlRGICg1IDw8IEdQSU9fUE9SVF9TSElGVCkKLQotI2RlZmluZSBHUElPX09VVCAgICgxIDw8IDgpCi0jZGVmaW5lIEdQSU9fSU4gICAgKDAgPDwgOCkKLSNkZWZpbmUgR1BJT19QVUVOICAoMSA8PCA5KQotCi0jZGVmaW5lIEdQSU9fUEYgICAgKDEgPDwgMTApCi0jZGVmaW5lIEdQSU9fQUYgICAgKDEgPDwgMTEpCi0KLSNkZWZpbmUgR1BJT19PQ1JfU0hJRlQgMTIKLSNkZWZpbmUgR1BJT19PQ1JfTUFTSyAoMyA8PCBHUElPX09DUl9TSElGVCkKLSNkZWZpbmUgR1BJT19BSU4gICAoMCA8PCBHUElPX09DUl9TSElGVCkKLSNkZWZpbmUgR1BJT19CSU4gICAoMSA8PCBHUElPX09DUl9TSElGVCkKLSNkZWZpbmUgR1BJT19DSU4gICAoMiA8PCBHUElPX09DUl9TSElGVCkKLSNkZWZpbmUgR1BJT19HUElPICAoMyA8PCBHUElPX09DUl9TSElGVCkKLQotI2RlZmluZSBHUElPX0FPVVRfU0hJRlQgMTQKLSNkZWZpbmUgR1BJT19BT1VUX01BU0sgKDMgPDwgR1BJT19BT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0FPVVQgICAgICgwIDw8IEdQSU9fQU9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19BT1VUX0lTUiAoMSA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVF8wICAgKDIgPDwgR1BJT19BT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0FPVVRfMSAgICgzIDw8IEdQSU9fQU9VVF9TSElGVCkKLQotI2RlZmluZSBHUElPX0JPVVRfU0hJRlQgMTYKLSNkZWZpbmUgR1BJT19CT1VUX01BU0sgKDMgPDwgR1BJT19CT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0JPVVQgICAgICAoMCA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVF9JU1IgICgxIDw8IEdQSU9fQk9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19CT1VUXzAgICAgKDIgPDwgR1BJT19CT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0JPVVRfMSAgICAoMyA8PCBHUElPX0JPVVRfU0hJRlQpCi0KLWV4dGVybiB2b2lkIG14Y19ncGlvX21vZGUoaW50IGdwaW9fbW9kZSk7Ci1leHRlcm4gaW50IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCi0JCQkJCWNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiB2b2lkIG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBhc3NpZ25lbWVudHMgZm9yIEdQSU8gYWx0ZXJuYXRlL3ByaW1hcnkgZnVuY3Rpb25zICovCi0KLS8qIEZJWE1FOiBUaGlzIGxpc3QgaXMgbm90IGNvbXBsZXRlZC4gVGhlIGNvcnJlY3QgZGlyZWN0aW9ucyBhcmUKLSAqIG1pc3Npbmcgb24gc29tZSAobWFueSkgcGlucwotICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0jZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCAwKQotI2RlZmluZSBQQTBfQUZfRVRNVFJBQ0VTWU5DICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAwKQotI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRCAgICAoR1BJT19QT1JUQSB8IEdQSU9fSU4gfCAxKQotI2RlZmluZSBQQTFfUEZfVElOICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxKQotI2RlZmluZSBQQTJfUEZfUFdNMCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIpCi0jZGVmaW5lIFBBM19QRl9DU0lfTUNMSyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMpCi0jZGVmaW5lIFBBNF9QRl9DU0lfRDAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQpCi0jZGVmaW5lIFBBNV9QRl9DU0lfRDEgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDUpCi0jZGVmaW5lIFBBNl9QRl9DU0lfRDIgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBBN19QRl9DU0lfRDMgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBBOF9QRl9DU0lfRDQgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBBOV9QRl9DU0lfRDUgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBBMTBfUEZfQ1NJX0Q2ICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQQTExX1BGX0NTSV9ENyAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEExMl9QRl9DU0lfVlNZTkMgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBBMTNfUEZfQ1NJX0hTWU5DICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQQTE0X1BGX0NTSV9QSVhDTEsgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEExNV9QRl9JMkNfU0RBICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEExNl9QRl9JMkNfU0NMICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEExN19BRl9FVE1UUkFDRVBLVDQgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTcpCi0jZGVmaW5lIFBBMTdfQUlOX1NQSTJfU1MgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCAxNykKLSNkZWZpbmUgUEExOF9BRl9FVE1UUkFDRVBLVDUgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBBMTlfQUZfRVRNVFJBQ0VQS1Q2IChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMCkKLSNkZWZpbmUgUEEyMV9QRl9BMCAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBBMjJfUEZfQ1M0ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQTIzX1BGX0NTNSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEEyNF9QRl9BMTYgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBBMjRfQUZfRVRNVFJBQ0VQS1QwIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI0KQotI2RlZmluZSBQQTI1X1BGX0ExNyAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEEyNV9BRl9FVE1UUkFDRVBLVDEgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUpCi0jZGVmaW5lIFBBMjZfUEZfQTE4ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQTI2X0FGX0VUTVRSQUNFUEtUMiAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNikKLSNkZWZpbmUgUEEyN19QRl9BMTkgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBBMjdfQUZfRVRNVFJBQ0VQS1QzIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI3KQotI2RlZmluZSBQQTI4X1BGX0EyMCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEEyOF9BRl9FVE1QSVBFU1RBVDAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjgpCi0jZGVmaW5lIFBBMjlfUEZfQTIxICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQTI5X0FGX0VUTVBJUEVTVEFUMSAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKLSNkZWZpbmUgUEEzMF9QRl9BMjIgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBBMzBfQUZfRVRNUElQRVNUQVQyIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMwKQotI2RlZmluZSBQQTMxX1BGX0EyMyAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEEzMV9BRl9FVE1UUkFDRUNMSyAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzEpCi0jZGVmaW5lIFBCOF9QRl9TRF9EQVQwICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDgpCi0jZGVmaW5lIFBCOF9BRl9NU19QSU8gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBCOV9QRl9TRF9EQVQxICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiAgfCA5KQotI2RlZmluZSBQQjlfQUZfTVNfUEkxICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA5KQotI2RlZmluZSBQQjEwX1BGX1NEX0RBVDIgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gIHwgMTApCi0jZGVmaW5lIFBCMTBfQUZfTVNfU0NMS0kgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEwKQotI2RlZmluZSBQQjExX1BGX1NEX0RBVDMgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEIxMV9BRl9NU19TRElPICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTEpCi0jZGVmaW5lIFBCMTJfUEZfU0RfQ0xLICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQjEyX0FGX01TX1NDTEswICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMikKLSNkZWZpbmUgUEIxM19QRl9TRF9DTUQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgMTMpCi0jZGVmaW5lIFBCMTNfQUZfTVNfQlMgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEzKQotI2RlZmluZSBQQjE0X0FGX1NTSV9SWEZTICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxNCkKLSNkZWZpbmUgUEIxNV9BRl9TU0lfUlhDTEsgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTUpCi0jZGVmaW5lIFBCMTZfQUZfU1NJX1JYREFUICAgIChHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fQUYgfCAxNikKLSNkZWZpbmUgUEIxN19BRl9TU0lfVFhEQVQgICAgKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxNykKLSNkZWZpbmUgUEIxOF9BRl9TU0lfVFhGUyAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBCMTlfQUZfU1NJX1RYQ0xLICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQQjIwX1BGX1VTQkRfQUZFICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEIyMV9QRl9VU0JEX09FICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBCMjJfUEZVU0JEX1JDViAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQjIzX1BGX1VTQkRfU1VTUE5EICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEIyNF9QRl9VU0JEX1ZQICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBCMjVfUEZfVVNCRF9WTSAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQjI2X1BGX1VTQkRfVlBPICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEIyN19QRl9VU0JEX1ZNTyAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBCMjhfUEZfVUFSVDJfQ1RTICAgIChHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBCMjlfUEZfVUFSVDJfUlRTICAgIChHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEIzMF9QRl9VQVJUMl9UWEQgICAgKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEIzMV9QRl9VQVJUMl9SWEQgICAgKEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQQzNfUEZfU1NJX1JYRlMgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQQzRfUEZfU1NJX1JYQ0xLICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQQzVfUEZfU1NJX1JYREFUICAgICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEM2X1BGX1NTSV9UWERBVCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQzdfUEZfU1NJX1RYRlMgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQzhfUEZfU1NJX1RYQ0xLICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQzlfUEZfVUFSVDFfQ1RTICAgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBDMTBfUEZfVUFSVDFfUlRTICAgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEMxMV9QRl9VQVJUMV9UWEQgICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEMxMl9QRl9VQVJUMV9SWEQgICAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQzEzX1BGX1NQSTFfU1BJX1JEWSAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEMxNF9QRl9TUEkxX1NDTEsgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBDMTVfUEZfU1BJMV9TUyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQQzE2X1BGX1NQSTFfTUlTTyAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEMxN19QRl9TUEkxX01PU0kgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBDMjRfQklOX1VBUlQzX1JJICAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI0KQotI2RlZmluZSBQQzI1X0JJTl9VQVJUM19EU1IgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNSkKLSNkZWZpbmUgUEMyNl9BT1VUX1VBUlQzX0RUUiAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgMjYpCi0jZGVmaW5lIFBDMjdfQklOX1VBUlQzX0RDRCAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI3KQotI2RlZmluZSBQQzI4X0JJTl9VQVJUM19DVFMgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyOCkKLSNkZWZpbmUgUEMyOV9BT1VUX1VBUlQzX1JUUyAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgMjkpCi0jZGVmaW5lIFBDMzBfQklOX1VBUlQzX1RYICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCAzMCkKLSNkZWZpbmUgUEMzMV9BT1VUX1VBUlQzX1JYICAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgMzEpCi0jZGVmaW5lIFBENl9QRl9MU0NMSyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEQ3X1BGX1JFViAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BRiB8IDcpCi0jZGVmaW5lIFBEN19BSU5fU1BJMl9TQ0xLICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCA3KQotI2RlZmluZSBQRDhfUEZfQ0xTICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQRDhfQUZfVUFSVDJfRENEICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBEOF9BSU5fU1BJMl9TUyAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4KQotI2RlZmluZSBQRDlfUEZfUFMgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQRDlfQUZfVUFSVDJfUkkgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDkpCi0jZGVmaW5lIFBEOV9BT1VUX1NQSTJfUlhEICAgIChHUElPX1BPUlREIHwgR1BJT19JTiB8IDkpCi0jZGVmaW5lIFBEMTBfUEZfU1BMX1NQUiAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBEMTBfQUZfVUFSVDJfRFNSICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTApCi0jZGVmaW5lIFBEMTBfQUlOX1NQSTJfVFhEICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEQxMV9QRl9DT05UUkFTVCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEQxMl9QRl9BQ0RfT0UgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEQxM19QRl9MUF9IU1lOQyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEQxNF9QRl9GTE1fVlNZTkMgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEQxNV9QRl9MRDAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEQxNl9QRl9MRDEgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEQxN19QRl9MRDIgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEQxOF9QRl9MRDMgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEQxOV9QRl9MRDQgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEQyMF9QRl9MRDUgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEQyMV9QRl9MRDYgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEQyMl9QRl9MRDcgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEQyM19QRl9MRDggICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEQyNF9QRl9MRDkgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEQyNV9QRl9MRDEwICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEQyNl9QRl9MRDExICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEQyN19QRl9MRDEyICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEQyOF9QRl9MRDEzICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEQyOV9QRl9MRDE0ICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEQzMF9QRl9MRDE1ICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEQzMV9QRl9UTVIyT1VUICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBEMzFfQklOX1NQSTJfVFhEICAgIChHUElPX1BPUlREIHwgR1BJT19CSU4gfCAzMSkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0jZGVmaW5lIFBBMF9QRl9VU0JIMl9DTEsJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMCkKLSNkZWZpbmUgUEExX1BGX1VTQkgyX0RJUgkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxKQotI2RlZmluZSBQQTJfUEZfVVNCSDJfREFUQTcJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMikKLSNkZWZpbmUgUEEzX1BGX1VTQkgyX05YVAkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQQTRfUEZfVVNCSDJfU1RQCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQpCi0jZGVmaW5lIFBBNV9QRl9MU0NMSwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQTZfUEZfTEQwCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBBN19QRl9MRDEJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEE4X1BGX0xEMgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQTlfUEZfTEQzCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBBMTBfUEZfTEQ0CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQQTExX1BGX0xENQkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEExMl9QRl9MRDYJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBBMTNfUEZfTEQ3CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQQTE0X1BGX0xEOAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEExNV9QRl9MRDkJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBBMTZfUEZfTEQxMAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEExN19QRl9MRDExCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQTE4X1BGX0xEMTIJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBBMTlfUEZfTEQxMwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEEyMF9QRl9MRDE0CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQQTIxX1BGX0xEMTUJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBBMjJfUEZfTEQxNgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEEyM19QRl9MRDE3CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQQTI0X1BGX1JFVgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEEyNV9QRl9DTFMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBBMjZfUEZfUFMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBBMjdfUEZfU1BMX1NQUgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEEyOF9QRl9IU1lOQwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEEyOV9QRl9WU1lOQwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEEzMF9QRl9DT05UUkFTVAkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQQTMxX1BGX09FX0FDRAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEI0X1BGX1NEMl9EMAkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDQpCi0jZGVmaW5lIFBCNV9QRl9TRDJfRDEJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA1KQotI2RlZmluZSBQQjZfUEZfU0QyX0QyCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNikKLSNkZWZpbmUgUEI3X1BGX1NEMl9EMwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDcpCi0jZGVmaW5lIFBCOF9QRl9TRDJfQ01ECQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgOCkKLSNkZWZpbmUgUEI5X1BGX1NEMl9DTEsJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA5KQotI2RlZmluZSBQQjEwX1BGX0NTSV9EMAkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEIxMF9BRl9VQVJUNl9UWEQJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxMCkKLSNkZWZpbmUgUEIxMV9QRl9DU0lfRDEJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBCMTFfQUZfVUFSVDZfUlhECShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMTEpCi0jZGVmaW5lIFBCMTJfUEZfQ1NJX0QyCQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQjEyX0FGX1VBUlQ2X0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDEyKQotI2RlZmluZSBQQjEzX1BGX0NTSV9EMwkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEIxM19BRl9VQVJUNl9SVFMJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAxMykKLSNkZWZpbmUgUEIxNF9QRl9DU0lfRDQJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBCMTVfUEZfQ1NJX01DTEsJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEIxNl9QRl9DU0lfUElYQ0xLCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBCMTdfUEZfQ1NJX0Q1CQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQjE4X1BGX0NTSV9ENgkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEIxOF9BRl9VQVJUNV9UWEQJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxOCkKLSNkZWZpbmUgUEIxOV9QRl9DU0lfRDcJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBCMTlfQUZfVUFSVDVfUlhECShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMTkpCi0jZGVmaW5lIFBCMjBfUEZfQ1NJX1ZTWU5DCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBCMjBfQUZfVUFSVDVfQ1RTCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjApCi0jZGVmaW5lIFBCMjFfUEZfQ1NJX0hTWU5DCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBCMjFfQUZfVUFSVDVfUlRTCShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMjEpCi0jZGVmaW5lIFBCMjJfUEZfVVNCSDFfU1VTUAkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEIyM19QRl9VU0JfUFdSCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEIyNF9QRl9VU0JfT0NfQgkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEIyNV9QRl9VU0JIMV9SQ1YJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBCMjZfUEZfVVNCSDFfRlMJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBCMjdfUEZfVVNCSDFfT0VfQgkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEIyOF9QRl9VU0JIMV9UWERNCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQjI5X1BGX1VTQkgxX1RYRFAJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBCMzBfUEZfVVNCSDFfUlhETQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEIzMV9QRl9VU0JIMV9SWERQCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQQjI2X0FGX1VBUlQ0X1JUUwkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQjI4X0FGX1VBUlQ0X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDI4KQotI2RlZmluZSBQQjI5X0FGX1VBUlQ0X0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDI5KQotI2RlZmluZSBQQjMxX0FGX1VBUlQ0X1JYRAkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDMxKQotI2RlZmluZSBQQzVfUEZfSTJDMl9TREEJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEM2X1BGX0kyQzJfU0NMCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBDN19QRl9VU0JPVEdfREFUQTUJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQzhfUEZfVVNCT1RHX0RBVEE2CShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEM5X1BGX1VTQk9UR19EQVRBMAkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBDMTBfUEZfVVNCT1RHX0RBVEEyCShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBDMTFfUEZfVVNCT1RHX0RBVEExCShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBDMTJfUEZfVVNCT1RHX0RBVEE0CShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBDMTNfUEZfVVNCT1RHX0RBVEEzCShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBDMTZfUEZfU1NJNF9GUwkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEMxN19QRl9TU0k0X1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQzE4X1BGX1NTSTRfVFhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBDMTlfUEZfU1NJNF9DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEMyMF9QRl9TU0kxX0ZTCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQQzIxX1BGX1NTSTFfUlhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBDMjJfUEZfU1NJMV9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEMyM19QRl9TU0kxX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQQzI0X1BGX1NTSTJfRlMJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBDMjVfUEZfU1NJMl9SWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEMyNl9QRl9TU0kyX1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQzI3X1BGX1NTSTJfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBDMjhfUEZfU1NJM19GUwkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEMyOV9QRl9TU0kzX1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQzMwX1BGX1NTSTNfVFhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBDMzFfUEZfU1NJM19DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEQwX0FJTl9GRUNfVFhEMAkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAwKQotI2RlZmluZSBQRDFfQUlOX0ZFQ19UWEQxCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDEpCi0jZGVmaW5lIFBEMl9BSU5fRkVDX1RYRDIJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMikKLSNkZWZpbmUgUEQzX0FJTl9GRUNfVFhEMwkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAzKQotI2RlZmluZSBQRDRfQU9VVF9GRUNfUlhfRVIJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgNCkKLSNkZWZpbmUgUEQ1X0FPVVRfRkVDX1JYRDEJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgNSkKLSNkZWZpbmUgUEQ2X0FPVVRfRkVDX1JYRDIJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgNikKLSNkZWZpbmUgUEQ3X0FPVVRfRkVDX1JYRDMJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgNykKLSNkZWZpbmUgUEQ4X0FGX0ZFQ19NRElPCQkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FGIHwgOCkKLSNkZWZpbmUgUEQ5X0FJTl9GRUNfTURDCQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCA5KQotI2RlZmluZSBQRDEwX0FPVVRfRkVDX0NSUwkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxMCkKLSNkZWZpbmUgUEQxMV9BT1VUX0ZFQ19UWF9DTEsJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTEpCi0jZGVmaW5lIFBEMTJfQU9VVF9GRUNfUlhEMAkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxMikKLSNkZWZpbmUgUEQxM19BT1VUX0ZFQ19SWF9EVgkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxMykKLSNkZWZpbmUgUEQxNF9BT1VUX0ZFQ19DTFIJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTQpCi0jZGVmaW5lIFBEMTVfQU9VVF9GRUNfQ09MCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDE1KQotI2RlZmluZSBQRDE2X0FJTl9GRUNfVFhfRVIJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMTYpCi0jZGVmaW5lIFBEMTdfUEZfSTJDX0RBVEEJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEQxOF9QRl9JMkNfQ0xLCQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQRDE5X0FGX1VTQkgyX0RBVEE0CShHUElPX1BPUlREIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQRDIwX0FGX1VTQkgyX0RBVEEzCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDIwKQotI2RlZmluZSBQRDIxX0FGX1VTQkgyX0RBVEE2CShHUElPX1BPUlREIHwgR1BJT19BRiB8IDIxKQotI2RlZmluZSBQRDIyX0FGX1VTQkgyX0RBVEEwCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDIyKQotI2RlZmluZSBQRDIzX0FGX1VTQkgyX0RBVEEyCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDIzKQotI2RlZmluZSBQRDI0X0FGX1VTQkgyX0RBVEExCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDI0KQotI2RlZmluZSBQRDI1X1BGX0NTUEkxX1JEWQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAyNSkKLSNkZWZpbmUgUEQyNl9QRl9DU1BJMV9TUzIJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMjYpCi0jZGVmaW5lIFBEMjZfQUZfVVNCSDJfREFUQTUgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDI2KQotI2RlZmluZSBQRDI3X1BGX0NTUEkxX1NTMQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAyNykKLSNkZWZpbmUgUEQyOF9QRl9DU1BJMV9TUzAJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMjgpCi0jZGVmaW5lIFBEMjlfUEZfQ1NQSTFfU0NMSwkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAyOSkKLSNkZWZpbmUgUEQzMF9QRl9DU1BJMV9NSVNPCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fUEYgIHwgMzApCi0jZGVmaW5lIFBEMzFfUEZfQ1NQSTFfTU9TSQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAzMSkKLSNkZWZpbmUgUEYyM19BSU5fRkVDX1RYX0VOCShHUElPX1BPUlRGIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDIzKQotI2RlZmluZSBQRTBfUEZfVVNCT1RHX05YVAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDApCi0jZGVmaW5lIFBFMV9QRl9VU0JPVEdfU1RQCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEUyX1BGX1VTQk9UR19ESVIJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyKQotI2RlZmluZSBQRTNfUEZfVUFSVDJfQ1RTCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEU0X1BGX1VBUlQyX1JUUwkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDQpCi0jZGVmaW5lIFBFNl9QRl9VQVJUMl9UWEQJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQRTdfUEZfVUFSVDJfUlhECShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEU4X1BGX1VBUlQzX1RYRAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBFOV9QRl9VQVJUM19SWEQJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQRTEwX1BGX1VBUlQzX0NUUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQRTExX1BGX1VBUlQzX1JUUwkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQRTEyX1BGX1VBUlQxX1RYRAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQRTEzX1BGX1VBUlQxX1JYRAkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQRTE0X1BGX1VBUlQxX0NUUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQRTE1X1BGX1VBUlQxX1JUUwkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQRTE2X0FGX1JUQ0sJCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTYpCi0jZGVmaW5lIFBFMTZfUEZfUlRDSwkJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEUxOF9QRl9TREhDMV9EMAkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEUxOF9BRl9DU1BJM19NSVNPCShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBFMTlfUEZfU0RIQzFfRDEJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBFMjBfUEZfU0RIQzFfRDIJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBFMjFfUEZfU0RIQzFfRDMJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBFMjFfQUZfQ1NQSTNfU1MJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyMSkKLSNkZWZpbmUgUEUyMl9QRl9TREhDMV9DTUQJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBFMjJfQUZfQ1NQSTNfTU9TSQkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDIyKQotI2RlZmluZSBQRTIyX1BGX1NESEMxX0NMSwkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEUyM19BRl9DU1BJM19TQ0xLCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjMpCi0jZGVmaW5lIFBFMjRfUEZfVVNCT1RHX0NMSwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQRTI1X1BGX1VTQk9UR19EQVRBNwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI1KQotI2VuZGlmCi0KLS8qIGRlY29kZSBpcnEgbnVtYmVyIHRvIHVzZSB3aXRoIElNUih4KSwgSVNSKHgpIGFuZCBmcmllbmRzICovCi0jZGVmaW5lIElSUV9UT19SRUcoaXJxKSAoKGlycSAtIE1YQ19JTlRFUk5BTF9JUlFTKSA+PiA1KQotCi0jZGVmaW5lIElSUV9HUElPQSh4KSAgKE1YQ19HUElPX0lSUV9TVEFSVCArIHgpCi0jZGVmaW5lIElSUV9HUElPQih4KSAgKElSUV9HUElPQSgzMikgKyB4KQotI2RlZmluZSBJUlFfR1BJT0MoeCkgIChJUlFfR1BJT0IoMzIpICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9EKHgpICAoSVJRX0dQSU9DKDMyKSArIHgpCi0jZGVmaW5lIElSUV9HUElPRSh4KSAgKElSUV9HUElPRCgzMikgKyB4KQotCi0jZW5kaWYgLyogX01YQ19HUElPX01YMV9NWDJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjMzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfTVgxX0gKKyNkZWZpbmUgX01YQ19JT01VWF9NWDFfSAorCisjaWZuZGVmIEdQSU9fUE9SVEEKKyNlcnJvciBQbGVhc2UgaW5jbHVkZSBtYWNoL2lvbXV4LmgKKyNlbmRpZgorCisvKiBGSVhNRTogVGhpcyBsaXN0IGlzIG5vdCBjb21wbGV0ZWQuIFRoZSBjb3JyZWN0IGRpcmVjdGlvbnMgYXJlCisqIG1pc3Npbmcgb24gc29tZSAobWFueSkgcGlucworKi8KKworCisvKiBQcmltYXJ5IEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBBMF9BRl9FVE1UUkFDRVNZTkMgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDApCisjZGVmaW5lIFBBMV9BT1VUX1NQSTJfUlhEICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEpCisjZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBBMl9QRl9QV00wICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEEzX1BGX0NTSV9NQ0xLICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEE0X1BGX0NTSV9EMCAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEE1X1BGX0NTSV9EMSAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEE2X1BGX0NTSV9EMiAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEE3X1BGX0NTSV9EMyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEE4X1BGX0NTSV9ENCAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEE5X1BGX0NTSV9ENSAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEExMF9QRl9DU0lfRDYgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBBMTFfUEZfQ1NJX0Q3ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQTEyX1BGX0NTSV9WU1lOQyAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEExM19QRl9DU0lfSFNZTkMgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBBMTRfUEZfQ1NJX1BJWENMSyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQQTE1X1BGX0kyQ19TREEgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQQTE3X0FGX0VUTVRSQUNFUEtUNCAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNykKKyNkZWZpbmUgUEExN19BSU5fU1BJMl9TUyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBBMThfQUZfRVRNVFJBQ0VQS1Q1ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE4KQorI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEEyMF9BRl9FVE1UUkFDRVBLVDcgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjApCisjZGVmaW5lIFBBMjFfUEZfQTAgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQQTIyX1BGX0NTNCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEEyM19QRl9DUzUgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBBMjRfUEZfQTE2ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQQTI0X0FGX0VUTVRSQUNFUEtUMCAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNCkKKyNkZWZpbmUgUEEyNV9QRl9BMTcgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjUpCisjZGVmaW5lIFBBMjVfQUZfRVRNVFJBQ0VQS1QxICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI1KQorI2RlZmluZSBQQTI2X1BGX0ExOCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNikKKyNkZWZpbmUgUEEyNl9BRl9FVE1UUkFDRVBLVDIgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjYpCisjZGVmaW5lIFBBMjdfUEZfQTE5ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI3KQorI2RlZmluZSBQQTI3X0FGX0VUTVRSQUNFUEtUMyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNykKKyNkZWZpbmUgUEEyOF9QRl9BMjAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjgpCisjZGVmaW5lIFBBMjhfQUZfRVRNUElQRVNUQVQwICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI4KQorI2RlZmluZSBQQTI5X1BGX0EyMSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOSkKKyNkZWZpbmUgUEEyOV9BRl9FVE1QSVBFU1RBVDEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkpCisjZGVmaW5lIFBBMzBfUEZfQTIyICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMwKQorI2RlZmluZSBQQTMwX0FGX0VUTVBJUEVTVEFUMiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMCkKKyNkZWZpbmUgUEEzMV9QRl9BMjMgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzEpCisjZGVmaW5lIFBBMzFfQUZfRVRNVFJBQ0VDTEsgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMxKQorI2RlZmluZSBQQjhfUEZfU0RfREFUMCAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCA4KQorI2RlZmluZSBQQjhfQUZfTVNfUElPICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA4KQorI2RlZmluZSBQQjlfUEZfU0RfREFUMSAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCA5KQorI2RlZmluZSBQQjlfQUZfTVNfUEkxICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA5KQorI2RlZmluZSBQQjEwX1BGX1NEX0RBVDIgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCAxMCkKKyNkZWZpbmUgUEIxMF9BRl9NU19TQ0xLSSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBCMTFfUEZfU0RfREFUMyAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQjExX0FGX01TX1NESU8gICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMSkKKyNkZWZpbmUgUEIxMl9QRl9TRF9DTEsgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBCMTJfQUZfTVNfU0NMSzAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEyKQorI2RlZmluZSBQQjEzX1BGX1NEX0NNRCAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCAxMykKKyNkZWZpbmUgUEIxM19BRl9NU19CUyAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBCMTRfQUZfU1NJX1JYRlMgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE0KQorI2RlZmluZSBQQjE1X0FGX1NTSV9SWENMSyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEIxNl9BRl9TU0lfUlhEQVQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDE2KQorI2RlZmluZSBQQjE3X0FGX1NTSV9UWERBVCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQjE4X0FGX1NTSV9UWEZTICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEIxOV9BRl9TU0lfVFhDTEsgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBCMjBfUEZfVVNCRF9BRkUgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQQjIxX1BGX1VTQkRfT0UgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEIyMl9QRl9VU0JEX1JDViAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBCMjNfUEZfVVNCRF9TVVNQTkQgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQQjI0X1BGX1VTQkRfVlAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEIyNV9QRl9VU0JEX1ZNICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUpCisjZGVmaW5lIFBCMjZfUEZfVVNCRF9WUE8gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2KQorI2RlZmluZSBQQjI3X1BGX1VTQkRfVk1PICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNykKKyNkZWZpbmUgUEIyOF9QRl9VQVJUMl9DVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEIyOV9QRl9VQVJUMl9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQjMwX1BGX1VBUlQyX1RYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQQjMxX1BGX1VBUlQyX1JYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBDM19QRl9TU0lfUlhGUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBDNF9QRl9TU0lfUlhDTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBDNV9QRl9TU0lfUlhEQVQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA1KQorI2RlZmluZSBQQzZfUEZfU1NJX1RYREFUICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBDN19QRl9TU0lfVFhGUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBDOF9QRl9TU0lfVFhDTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBDOV9QRl9VQVJUMV9DVFMgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEMxMF9QRl9VQVJUMV9SVFMgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VBUlQxX1RYRCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VBUlQxX1JYRCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTIpCisjZGVmaW5lIFBDMTNfUEZfU1BJMV9TUElfUkRZICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQQzE0X1BGX1NQSTFfU0NMSyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEMxNV9QRl9TUEkxX1NTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBDMTZfUEZfU1BJMV9NSVNPICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQQzE3X1BGX1NQSTFfTU9TSSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNykKKyNkZWZpbmUgUEMyNF9CSU5fVUFSVDNfUkkgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBDMjVfQklOX1VBUlQzX0RTUiAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQQzI2X0FPVVRfVUFSVDNfRFRSICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEMyN19CSU5fVUFSVDNfRENEICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBDMjhfQklOX1VBUlQzX0NUUyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQzI5X0FPVVRfVUFSVDNfUlRTICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEMzMF9CSU5fVUFSVDNfVFggICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IDMwKQorI2RlZmluZSBQQzMxX0FPVVRfVUFSVDNfUlggICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEQ2X1BGX0xTQ0xLICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQRDdfUEZfUkVWICAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQRDdfQUZfVUFSVDJfRFRSICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEQ3X0FJTl9TUEkyX1NDTEsgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDcpCisjZGVmaW5lIFBEOF9QRl9DTFMgICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBEOF9BRl9VQVJUMl9EQ0QgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEQ4X0FJTl9TUEkyX1NTICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDgpCisjZGVmaW5lIFBEOV9QRl9QUyAgICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBEOV9BRl9VQVJUMl9SSSAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEQ5X0FPVVRfU1BJMl9SWEQgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgOSkKKyNkZWZpbmUgUEQxMF9QRl9TUExfU1BSICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEQxMF9BRl9VQVJUMl9EU1IgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEQxMF9BSU5fU1BJMl9UWEQgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTFfUEZfQ09OVFJBU1QgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBEMTJfUEZfQUNEX09FICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBEMTNfUEZfTFBfSFNZTkMgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBEMTRfUEZfRkxNX1ZTWU5DICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMTVfUEZfTEQwICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBEMTZfUEZfTEQxICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBEMTdfUEZfTEQyICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBEMThfUEZfTEQzICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBEMTlfUEZfTEQ0ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBEMjBfUEZfTEQ1ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBEMjFfUEZfTEQ2ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBEMjJfUEZfTEQ3ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIFBEMjNfUEZfTEQ4ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjMpCisjZGVmaW5lIFBEMjRfUEZfTEQ5ICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBEMjVfUEZfTEQxMCAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBEMjZfUEZfTEQxMSAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBEMjdfUEZfTEQxMiAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBEMjhfUEZfTEQxMyAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBEMjlfUEZfTEQxNCAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjkpCisjZGVmaW5lIFBEMzBfUEZfTEQxNSAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBEMzFfUEZfVE1SMk9VVCAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQRDMxX0JJTl9TUEkyX1RYRCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQklOIHwgMzEpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FhYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjEuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+CisqCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyogTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBfTVhDX0lPTVVYX01YMjFfSAorI2RlZmluZSBfTVhDX0lPTVVYX01YMjFfSAorCisjaWZuZGVmIEdQSU9fUE9SVEEKKyNlcnJvciBQbGVhc2UgaW5jbHVkZSBtYWNoL2lvbXV4LmgKKyNlbmRpZgorCisKKy8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEIyMl9QRl9VU0JIMV9CWVAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBCMjVfUEZfVVNCSDFfT04gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQzVfUEZfVVNCT1RHX1NEQSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQQzZfUEZfVVNCT1RHX1NDTCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQQzdfUEZfVVNCT1RHX09OICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQQzhfUEZfVVNCT1RHX0ZTICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQQzlfUEZfVVNCT1RHX09FICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VTQk9UR19UWERNICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEMxMV9QRl9VU0JPVEdfVFhEUCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBDMTJfUEZfVVNCT1RHX1JYRE0gICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1VTQk9UR19SWERQICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEMxNl9QRl9TQVBfRlMgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBDMTdfUEZfU0FQX1JYRCAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQQzE4X1BGX1NBUF9UWEQgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxOCkKKyNkZWZpbmUgUEMxOV9QRl9TQVBfQ0xLICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBFMF9QRl9URVNUX1dCMiAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBFMV9QRl9URVNUX1dCMSAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBFMl9QRl9URVNUX1dCMCAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBGMV9QRl9ORkNFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBGM19QRl9ORkNMRSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBGN19QRl9ORklPMCAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBGOF9QRl9ORklPMSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBGOV9QRl9ORklPMiAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBGMTBfUEZfTkZJTzMgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQRjExX1BGX05GSU80ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEYxMl9QRl9ORklPNSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBGMTNfUEZfTkZJTzYgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQRjE0X1BGX05GSU83ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEYxNl9QRl9SRVMgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTYpCisKKy8qIEFsdGVybmF0ZSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTVfQUZfQk1JX0NMS19DUyAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCA1KQorI2RlZmluZSBQQTZfQUZfQk1JX0QwICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCA2KQorI2RlZmluZSBQQTdfQUZfQk1JX0QxICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCA3KQorI2RlZmluZSBQQThfQUZfQk1JX0QyICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCA4KQorI2RlZmluZSBQQTlfQUZfQk1JX0QzICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCA5KQorI2RlZmluZSBQQTEwX0FGX0JNSV9ENCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMCkKKyNkZWZpbmUgUEExMV9BRl9CTUlfRDUgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTEpCisjZGVmaW5lIFBBMTJfQUZfQk1JX0Q2ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDEyKQorI2RlZmluZSBQQTEzX0FGX0JNSV9ENyAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMykKKyNkZWZpbmUgUEExNF9BRl9CTUlfRDggICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBBMTVfQUZfQk1JX0Q5ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE1KQorI2RlZmluZSBQQTE2X0FGX0JNSV9EMTAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNikKKyNkZWZpbmUgUEExN19BRl9CTUlfRDExICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTcpCisjZGVmaW5lIFBBMThfQUZfQk1JX0QxMiAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE4KQorI2RlZmluZSBQQTE5X0FGX0JNSV9EMTMgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEEyMF9BRl9CTUlfRDE0ICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjApCisjZGVmaW5lIFBBMjFfQUZfQk1JX0QxNSAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIxKQorI2RlZmluZSBQQTIyX0FGX0JNSV9SRUFEX1JFUSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMikKKyNkZWZpbmUgUEEyM19BRl9CTUlfV1JJVEUgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjMpCisjZGVmaW5lIFBBMjlfQUZfQk1JX1JYX0ZVTEwgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI5KQorI2RlZmluZSBQQTMwX0FGX0JNSV9SRUFEICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMCkKKworLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBDMTRfQUlOX1NZU19DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRDIxX0FJTl9VU0JIMl9GUyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEQyMl9BSU5fVVNCSDJfT0UgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIFBEMjNfQUlOX1VTQkgyX1RYRE0gICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQRDI0X0FJTl9VU0JIMl9UWERQICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEU4X0FJTl9JUl9UWEQgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEYwX0FJTl9QQ19SU1QgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEYxX0FJTl9QQ19DRTEgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgUEYyX0FJTl9QQ19DRTIgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEYzX0FJTl9QQ19QT0UgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEY0X0FJTl9QQ19PRSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgUEY1X0FJTl9QQ19SVyAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNSkKKworLyogQklOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBDMTRfQklOX1NZU19DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRDI3X0JJTl9FWFRfRE1BX0dSQU5UICAoR1BJT19QT1JURCB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNykKKworLyogQ0lOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBCMjZfQ0lOX1VTQkgxX1JYREFUICAgIChHUElPX1BPUlRCIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDI2KQorCisvKiBBT1VUIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBMjlfQU9VVF9CTUlfV0FJVCAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQRDE5X0FPVVRfVVNCSDJfUlhETSAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEQyMF9BT1VUX1VTQkgyX1JYRFAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjApCisjZGVmaW5lIFBEMjVfQU9VVF9FWFRfRE1BUkVRICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI1KQorI2RlZmluZSBQRDI2X0FPVVRfVVNCT1RHX1JYREFUICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEU5X0FPVVRfSVJfUlhEICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgOSkKKyNkZWZpbmUgUEY2X0FPVVRfUENfQlZEMiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNikKKyNkZWZpbmUgUEY3X0FPVVRfUENfQlZEMSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEY4X0FPVVRfUENfVlMyICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgOCkKKyNkZWZpbmUgUEY5X0FPVVRfUENfVlMxICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgOSkKKyNkZWZpbmUgUEYxMF9BT1VUX1BDX1dQICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTApCisjZGVmaW5lIFBGMTFfQU9VVF9QQ19SRUFEWSAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDExKQorI2RlZmluZSBQRjEyX0FPVVRfUENfV0FJVCAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMikKKyNkZWZpbmUgUEYxM19BT1VUX1BDX0NEMiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTMpCisjZGVmaW5lIFBGMTRfQU9VVF9QQ19DRDEgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE0KQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMTU4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI3LmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+CisqCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyogTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBfTVhDX0lPTVVYX01YMjdfSAorI2RlZmluZSBfTVhDX0lPTVVYX01YMjdfSAorCisjaWZuZGVmIEdQSU9fUE9SVEEKKyNlcnJvciBQbGVhc2UgaW5jbHVkZSBtYWNoL2lvbXV4LmgKKyNlbmRpZgorCisKKy8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEEwX1BGX1VTQkgyX0NMSyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMCkKKyNkZWZpbmUgUEExX1BGX1VTQkgyX0RJUiAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEEyX1BGX1VTQkgyX0RBVEE3ICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMikKKyNkZWZpbmUgUEEzX1BGX1VTQkgyX05YVCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEE0X1BGX1VTQkgyX1NUUCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEIyMl9QRl9VU0JIMV9TVVNQICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBCMjVfUEZfVVNCSDFfUkNWICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQzVfUEZfSTJDMl9TREEgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNSkKKyNkZWZpbmUgUEM2X1BGX0kyQzJfU0NMICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDYpCisjZGVmaW5lIFBDN19QRl9VU0JPVEdfREFUQTUgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEM4X1BGX1VTQk9UR19EQVRBNiAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQzlfUEZfVVNCT1RHX0RBVEEwICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBDMTBfUEZfVVNCT1RHX0RBVEEyICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBDMTFfUEZfVVNCT1RHX0RBVEExICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBDMTJfUEZfVVNCT1RHX0RBVEE0ICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBDMTNfUEZfVVNCT1RHX0RBVEEzICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBDMTZfUEZfU1NJNF9GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgUEMxN19QRl9TU0k0X1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE3KQorI2RlZmluZSBQQzE4X1BGX1NTSTRfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTgpCisjZGVmaW5lIFBDMTlfUEZfU1NJNF9DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEMyNV9BRl9HUFQ1X1RJTiAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjUpCisjZGVmaW5lIFBDMjdfQUZfR1BUNF9USU4gICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI3KQorI2RlZmluZSBQRDBfUEZfU0QzX0NNRCAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQRDFfUEZfU0QzX0NMSyAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRDJfUEZfQVRBX0RBVEEwICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyKQorI2RlZmluZSBQRDNfUEZfQVRBX0RBVEExICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQRDRfUEZfQVRBX0RBVEEyICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQRDVfUEZfQVRBX0RBVEEzICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQRDZfUEZfQVRBX0RBVEE0ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQRDdfUEZfQVRBX0RBVEE1ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQRDhfUEZfQVRBX0RBVEE2ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQRDlfUEZfQVRBX0RBVEE3ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQRDEwX1BGX0FUQV9EQVRBOCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEQxMV9QRl9BVEFfREFUQTkgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBEMTJfUEZfQVRBX0RBVEExMCAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQRDEzX1BGX0FUQV9EQVRBMTEgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEQxNF9QRl9BVEFfREFUQTEyICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBEMTVfUEZfQVRBX0RBVEExMyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE1KQorI2RlZmluZSBQRDE2X1BGX0FUQV9EQVRBMTQgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxNikKKyNkZWZpbmUgUEUwX1BGX1VTQk9UR19OWFQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQRTFfUEZfVVNCT1RHX1NUUCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEpCisjZGVmaW5lIFBFMl9QRl9VU0JPVEdfRElSICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEUyNF9QRl9VU0JPVEdfQ0xLICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEUyNV9QRl9VU0JPVEdfREFUQTcgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEYxX1BGX05GQ0xFICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEYzX1BGX05GQ0UgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEY3X1BGX1BDX1BPRSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEY4X1BGX1BDX1JXICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEY5X1BGX1BDX0lPSVMxNiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEYxMF9QRl9QQ19SU1QgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBGMTFfUEZfUENfQlZEMiAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQRjEyX1BGX1BDX0JWRDEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEYxM19QRl9QQ19WUzIgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBGMTRfUEZfUENfVlMxICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQRjE2X1BGX1BDX1BXUk9OICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNikKKyNkZWZpbmUgUEYxN19QRl9QQ19SRUFEWSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTcpCisjZGVmaW5lIFBGMThfUEZfUENfV0FJVCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE4KQorI2RlZmluZSBQRjE5X1BGX1BDX0NEMiAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEYyMF9QRl9QQ19DRDEgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjApCisjZGVmaW5lIFBGMjNfUEZfQVRBX0RBVEExNSAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIzKQorCisvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEI0X0FGX01TSENfREFUQTAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA0KQorI2RlZmluZSBQQjVfQUZfTVNIQ19EQVRBMSAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBCNl9BRl9NU0hDX0RBVEEyICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEI3X0FGX01TSENfREFUQTQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQjhfQUZfTVNIQ19CUyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBCOV9BRl9NU0hDX1NDTEsgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEIxMF9BRl9VQVJUNl9UWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEIxMV9BRl9VQVJUNl9SWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDExKQorI2RlZmluZSBQQjEyX0FGX1VBUlQ2X0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQjEzX0FGX1VBUlQ2X1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTMpCisjZGVmaW5lIFBCMThfQUZfVUFSVDVfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBCMTlfQUZfVUFSVDVfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEIyMF9BRl9VQVJUNV9DVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgUEIyMV9BRl9VQVJUNV9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDIxKQorI2RlZmluZSBQQzhfQUZfRkVDX01ESU8gICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCBHUElPX0lOIHwgOCkKKyNkZWZpbmUgUEMyNF9BRl9HUFQ1X1RPVVQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjQpCisjZGVmaW5lIFBDMjZfQUZfR1BUNF9UT1VUICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI2KQorI2RlZmluZSBQRDFfQUZfRVRNVFJBQ0VfUEtUMTUgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxKQorI2RlZmluZSBQRDZfQUZfRVRNVFJBQ0VfUEtUMTQgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA2KQorI2RlZmluZSBQRDdfQUZfRVRNVFJBQ0VfUEtUMTMgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA3KQorI2RlZmluZSBQRDlfQUZfRVRNVFJBQ0VfUEtUMTIgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA5KQorI2RlZmluZSBQRDJfQUZfU0QzX0QwICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyKQorI2RlZmluZSBQRDNfQUZfU0QzX0QxICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAzKQorI2RlZmluZSBQRDRfQUZfU0QzX0QyICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA0KQorI2RlZmluZSBQRDVfQUZfU0QzX0QzICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA1KQorI2RlZmluZSBQRDhfQUZfRkVDX01ESU8gICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX0lOIHwgOCkKKyNkZWZpbmUgUEQxMF9BRl9FVE1UUkFDRV9QS1QxMSAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBEMTFfQUZfRVRNVFJBQ0VfUEtUMTAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQRDEyX0FGX0VUTVRSQUNFX1BLVDkgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMikKKyNkZWZpbmUgUEQxM19BRl9FVE1UUkFDRV9QS1Q4ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBEMTRfQUZfRVRNVFJBQ0VfUEtUNyAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDE0KQorI2RlZmluZSBQRDE1X0FGX0VUTVRSQUNFX1BLVDYgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEQxNl9BRl9FVE1UUkFDRV9QS1Q1ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTYpCisjZGVmaW5lIFBGMV9BRl9FVE1UUkFDRV9QS1QwICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEpCisjZGVmaW5lIFBGM19BRl9FVE1UUkFDRV9QS1QyICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDMpCisjZGVmaW5lIFBGNV9BRl9FVE1QSVBFU1RBVDExICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDUpCisjZGVmaW5lIFBGN19BRl9BVEFfQlVGRkVSX0VOICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBGOF9BRl9BVEFfSU9SRFkgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBGOV9BRl9BVEFfSU5UUlEgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBGMTBfQUZfQVRBX1JFU0VUICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEwKQorI2RlZmluZSBQRjExX0FGX0FUQV9ETUFDSyAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxMSkKKyNkZWZpbmUgUEYxMl9BRl9BVEFfRE1BUkVRICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBGMTNfQUZfQVRBX0RBMCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEzKQorI2RlZmluZSBQRjE0X0FGX0FUQV9EQTEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNCkKKyNkZWZpbmUgUEYxNV9BRl9FVE1UUkFDRV9TWU5DICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTUpCisjZGVmaW5lIFBGMTZfQUZfQVRBX0RBMiAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQRjE3X0FGX0FUQV9DUzAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNykKKyNkZWZpbmUgUEYxOF9BRl9BVEFfQ1MxICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBGMTlfQUZfQVRBX0RJT1cgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQRjIwX0FGX0FUQV9ESU9SICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEYyMl9BRl9FVE1UUkFDRV9DTEsgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMjIpCisjZGVmaW5lIFBGMjNfQUZfRVRNVFJBQ0VfUEtUNCAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDIzKQorCisvKiBBSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEMxNF9BSU5fU1NJMV9NQ0xLICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBDMTVfQUlOX0dQVDZfVE9VVCAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQRDBfQUlOX0ZFQ19UWEQwICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQRDFfQUlOX0ZFQ19UWEQxICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxKQorI2RlZmluZSBQRDJfQUlOX0ZFQ19UWEQyICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQRDNfQUlOX0ZFQ19UWEQzICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAzKQorI2RlZmluZSBQRDlfQUlOX0ZFQ19NREMgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQRDE2X0FJTl9GRUNfVFhfRVIgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEQyN19BSU5fRVhUX0RNQV9HUkFOVCAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBGMjNfQUlOX0ZFQ19UWF9FTiAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIzKQorCisvKiBCSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEMxNF9CSU5fU1NJMl9NQ0xLICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMTQpCisKKy8qIENJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQRDJfQ0lOX1NMQ0RDMV9EQVQwICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQRDNfQ0lOX1NMQ0RDMV9EQVQxICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAzKQorI2RlZmluZSBQRDRfQ0lOX1NMQ0RDMV9EQVQyICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA0KQorI2RlZmluZSBQRDVfQ0lOX1NMQ0RDMV9EQVQzICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQRDZfQ0lOX1NMQ0RDMV9EQVQ0ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQRDdfQ0lOX1NMQ0RDMV9EQVQ1ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQRDhfQ0lOX1NMQ0RDMV9EQVQ2ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRDlfQ0lOX1NMQ0RDMV9EQVQ3ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQRDEwX0NJTl9TTENEQzFfREFUOCAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEQxMV9DSU5fU0xDREMxX0RBVDkgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBEMTJfQ0lOX1NMQ0RDMV9EQVQxMCAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQRDEzX0NJTl9TTENEQzFfREFUMTEgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEQxNF9DSU5fU0xDREMxX0RBVDEyICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMTVfQ0lOX1NMQ0RDMV9EQVQxMyAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQRDE2X0NJTl9TTENEQzFfREFUMTQgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEQyM19DSU5fU0xDREMxX0RBVDE1ICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjMpCisjZGVmaW5lIFBGMjdfQ0lOX0VYVF9ETUFfR1JBTlQgIChHUElPX1BPUlRGIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDI3KQorLyogTENEQ19URVNUeCBvbiBQQnh4IG9taXR0ZWQsIGJlY2F1c2UgaXQncyBub3QgY2xlYXIgd2hhdCB0aGV5IGRvICovCisKKy8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEMxNF9BT1VUX0dQVDZfVElOICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCisjZGVmaW5lIFBENF9BT1VUX0ZFQ19SWF9FUiAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDQpCisjZGVmaW5lIFBENV9BT1VUX0ZFQ19SWEQxICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDUpCisjZGVmaW5lIFBENl9BT1VUX0ZFQ19SWEQyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDYpCisjZGVmaW5lIFBEN19BT1VUX0ZFQ19SWEQzICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBEMTBfQU9VVF9GRUNfQ1JTICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEwKQorI2RlZmluZSBQRDExX0FPVVRfRkVDX1RYX0NMSyAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEQxMl9BT1VUX0ZFQ19SWEQwICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTIpCisjZGVmaW5lIFBEMTNfQU9VVF9GRUNfUlhfRFYgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEzKQorI2RlZmluZSBQRDE0X0FPVVRfRkVDX1JYX0NMSyAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKKyNkZWZpbmUgUEQxNV9BT1VUX0ZFQ19DT0wgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTUpCisKKyNkZWZpbmUgUEMxN19CT1VUX1BDX0lPSVMxNiAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMTcpCisjZGVmaW5lIFBDMThfQk9VVF9QQ19CVkQyICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQQzE5X0JPVVRfUENfQlZEMSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEMyOF9CT1VUX1BDX0JWRDIgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMjgpCisjZGVmaW5lIFBDMjlfQk9VVF9QQ19WUzEgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQzMwX0JPVVRfUENfUkVBRFkgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9CT1VUX1BDX1dBSVQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMzEpCisKKworI2VuZGlmIC8qIF9NWENfR1BJT19NWDFfTVgyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDJ4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNWFlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyeC5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisqIENvcHlyaWdodCAoQykgMjAwOSBieSBIb2xnZXIgU2NodXJpZyA8aHM0MjMzQG1haWwubW4tc29sdXRpb25zLmRlPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX01YQ19JT01VWF9NWDJ4X0gKKyNkZWZpbmUgX01YQ19JT01VWF9NWDJ4X0gKKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworCisvKiBQcmltYXJ5IEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBNV9QRl9MU0NMSyAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEE2X1BGX0xEMCAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQTdfUEZfTEQxICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBBOF9QRl9MRDIgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEE5X1BGX0xEMyAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQTEwX1BGX0xENCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQTExX1BGX0xENSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQTEyX1BGX0xENiAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQTEzX1BGX0xENyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQTE0X1BGX0xEOCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQTE1X1BGX0xEOSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE2X1BGX0xEMTAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQQTE3X1BGX0xEMTEgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE4X1BGX0xEMTIgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQQTE5X1BGX0xEMTMgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQQTIwX1BGX0xEMTQgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQTIxX1BGX0xEMTUgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQQTIyX1BGX0xEMTYgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQQTIzX1BGX0xEMTcgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQQTI0X1BGX1JFViAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQQTI1X1BGX0NMUyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQQTI2X1BGX1BTICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQQTI3X1BGX1NQTF9TUFIgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQQTI4X1BGX0hTWU5DICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQTI5X1BGX1ZTWU5DICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQQTMwX1BGX0NPTlRSQVNUICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQQTMxX1BGX09FX0FDRCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMxKQorI2RlZmluZSBQQjRfUEZfU0QyX0QwICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQQjVfUEZfU0QyX0QxICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQQjZfUEZfU0QyX0QyICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQQjdfUEZfU0QyX0QzICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQQjhfUEZfU0QyX0NNRCAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQQjlfUEZfU0QyX0NMSyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQjEwX1BGX0NTSV9EMCAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQjExX1BGX0NTSV9EMSAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQjEyX1BGX0NTSV9EMiAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQjEzX1BGX0NTSV9EMyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQjE0X1BGX0NTSV9ENCAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQjE1X1BGX0NTSV9NQ0xLICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQjE2X1BGX0NTSV9QSVhDTEsgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQQjE3X1BGX0NTSV9ENSAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQjE4X1BGX0NTSV9ENiAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQQjE5X1BGX0NTSV9ENyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQQjIwX1BGX0NTSV9WU1lOQyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQjIxX1BGX0NTSV9IU1lOQyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQQjIzX1BGX1VTQl9QV1IgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEIyNF9QRl9VU0JfT0MgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjQpCisjZGVmaW5lIFBCMjZfUEZfVVNCSDFfRlMgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2KQorI2RlZmluZSBQQjI3X1BGX1VTQkgxX09FICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNykKKyNkZWZpbmUgUEIyOF9QRl9VU0JIMV9UWERNICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjgpCisjZGVmaW5lIFBCMjlfUEZfVVNCSDFfVFhEUCAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI5KQorI2RlZmluZSBQQjMwX1BGX1VTQkgxX1JYRE0gICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAzMCkKKyNkZWZpbmUgUEIzMV9QRl9VU0JIMV9SWERQICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMzEpCisjZGVmaW5lIFBDMTRfUEZfVE9VVCAgICAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQQzE1X1BGX1RJTiAgICAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSkKKyNkZWZpbmUgUEMyMF9QRl9TU0kxX0ZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIwKQorI2RlZmluZSBQQzIxX1BGX1NTSTFfUlhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjEpCisjZGVmaW5lIFBDMjJfUEZfU1NJMV9UWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMikKKyNkZWZpbmUgUEMyM19QRl9TU0kxX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIzKQorI2RlZmluZSBQQzI0X1BGX1NTSTJfRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjQpCisjZGVmaW5lIFBDMjVfUEZfU1NJMl9SWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNSkKKyNkZWZpbmUgUEMyNl9QRl9TU0kyX1RYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQzI3X1BGX1NTSTJfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjcpCisjZGVmaW5lIFBDMjhfUEZfU1NJM19GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyOCkKKyNkZWZpbmUgUEMyOV9QRl9TU0kzX1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQzMwX1BGX1NTSTNfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzApCisjZGVmaW5lIFBDMzFfUEZfU1NJM19DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEQxN19QRl9JMkNfREFUQSAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEQxOF9QRl9JMkNfQ0xLICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEQxOV9QRl9DU1BJMl9TUzIgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBEMjBfUEZfQ1NQSTJfU1MxICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQRDIxX1BGX0NTUEkyX1NTMCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEQyMl9QRl9DU1BJMl9TQ0xLICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBEMjNfUEZfQ1NQSTJfTUlTTyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQRDI0X1BGX0NTUEkyX01PU0kgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEQyNV9QRl9DU1BJMV9SRFkgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEQyNl9QRl9DU1BJMV9TUzIgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEQyN19QRl9DU1BJMV9TUzEgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEQyOF9QRl9DU1BJMV9TUzAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEQyOV9QRl9DU1BJMV9TQ0xLICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEQzMF9QRl9DU1BJMV9NSVNPICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19JTiB8IDMwKQorI2RlZmluZSBQRDMxX1BGX0NTUEkxX01PU0kgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMxKQorI2RlZmluZSBQRTNfUEZfVUFSVDJfQ1RTICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMpCisjZGVmaW5lIFBFNF9QRl9VQVJUMl9SVFMgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA0KQorI2RlZmluZSBQRTVfUEZfUFdNTyAgICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQRTZfUEZfVUFSVDJfVFhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBFN19QRl9VQVJUMl9SWEQgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA3KQorI2RlZmluZSBQRThfUEZfVUFSVDNfVFhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBFOV9QRl9VQVJUM19SWEQgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRTEwX1BGX1VBUlQzX0NUUyAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRTExX1BGX1VBUlQzX1JUUyAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBFMTJfUEZfVUFSVDFfVFhEICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBFMTNfUEZfVUFSVDFfUlhEICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEUxNF9QRl9VQVJUMV9DVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEUxNV9QRl9VQVJUMV9SVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE1KQorI2RlZmluZSBQRTE2X1BGX1JUQ0sgICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQRTE3X1BGX1JFU0VUX09VVCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxNykKKyNkZWZpbmUgUEUxOF9QRl9TRDFfRDAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTgpCisjZGVmaW5lIFBFMTlfUEZfU0QxX0QxICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE5KQorI2RlZmluZSBQRTIwX1BGX1NEMV9EMiAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEUyMV9QRl9TRDFfRDMgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBFMjJfUEZfU0QxX0NNRCAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQRTIzX1BGX1NEMV9DTEsgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEYwX1BGX05SRkIgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMCkKKyNkZWZpbmUgUEYyX1BGX05GV1AgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMikKKyNkZWZpbmUgUEY0X1BGX05GQUxFICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEY1X1BGX05GUkUgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEY2X1BGX05GV0UgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEYxNV9QRl9DTEtPICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBGMjFfUEZfQ1M0ICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQRjIyX1BGX0NTNSAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMikKKworLyogQWx0ZXJuYXRlIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBCMjZfQUZfVUFSVDRfUlRTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEIyOF9BRl9VQVJUNF9UWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEIyOV9BRl9VQVJUNF9DVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEIzMV9BRl9VQVJUNF9SWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQQzI4X0FGX1NMQ0RDMl9EMCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyOCkKKyNkZWZpbmUgUEMyOV9BRl9TTENEQzJfUlMgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjkpCisjZGVmaW5lIFBDMzBfQUZfU0xDREMyX0NTICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDMwKQorI2RlZmluZSBQQzMxX0FGX1NMQ0RDMl9DTEsgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAzMSkKKyNkZWZpbmUgUEQxOV9BRl9VU0JIMl9EQVRBNCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBEMjBfQUZfVVNCSDJfREFUQTMgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIwKQorI2RlZmluZSBQRDIxX0FGX1VTQkgyX0RBVEE2ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMSkKKyNkZWZpbmUgUEQyMl9BRl9VU0JIMl9EQVRBMCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjIpCisjZGVmaW5lIFBEMjNfQUZfVVNCSDJfREFUQTIgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIzKQorI2RlZmluZSBQRDI0X0FGX1VTQkgyX0RBVEExICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNCkKKyNkZWZpbmUgUEQyNl9BRl9VU0JIMl9EQVRBNSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjYpCisjZGVmaW5lIFBFMF9BRl9LUF9DT0w2ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDApCisjZGVmaW5lIFBFMV9BRl9LUF9ST1c2ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDEpCisjZGVmaW5lIFBFMl9BRl9LUF9ST1c3ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDIpCisjZGVmaW5lIFBFM19BRl9LUF9DT0w3ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDMpCisjZGVmaW5lIFBFNF9BRl9LUF9ST1c3ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDQpCisjZGVmaW5lIFBFNl9BRl9LUF9DT0w2ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDYpCisjZGVmaW5lIFBFN19BRl9LUF9ST1c2ICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBFMTZfQUZfT1dJUkUgICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQRTE4X0FGX0NTUEkzX01JU08gICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTgpCisjZGVmaW5lIFBFMjFfQUZfQ1NQSTNfU1MgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBFMjJfQUZfQ1NQSTNfTU9TSSAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIFBFMjNfQUZfQ1NQSTNfU0NMSyAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjMpCisKKy8qIEFJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTZfQUlOX1NMQ0RDMV9EQVQwICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQTdfQUlOX1NMQ0RDMV9EQVQxICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQThfQUlOX1NMQ0RDMV9EQVQyICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQTBfQUlOX1NMQ0RDMV9EQVQzICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQQTExX0FJTl9TTENEQzFfREFUNSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEExM19BSU5fU0xDREMxX0RBVDcgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBBMTVfQUlOX1NMQ0RDMV9EQVQ5ICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE3X0FJTl9TTENEQzFfREFUMTEgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEExOV9BSU5fU0xDREMxX0RBVDEzICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBBMjFfQUlOX1NMQ0RDMV9EQVQxNSAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQQTIyX0FJTl9FWFRfRE1BR1JBTlQgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEEyNF9BSU5fU0xDREMxX0QwICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBBMjVfQUlOX1NMQ0RDMV9SUyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQQTI2X0FJTl9TTENEQzFfQ1MgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEEyN19BSU5fU0xDREMxX0NMSyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBCNl9BSU5fU0xDREMxX0QwICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBCN19BSU5fU0xDREMxX1JTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBCOF9BSU5fU0xDREMxX0NTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBCOV9BSU5fU0xDREMxX0NMSyAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBCMjVfQUlOX1NMQ0RDMV9EQVQwICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQQjI2X0FJTl9TTENEQzFfREFUMSAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEIyN19BSU5fU0xDREMxX0RBVDIgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBCMjhfQUlOX1NMQ0RDMV9EQVQzICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X0FJTl9TTENEQzFfREFUNCAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEIzMF9BSU5fU0xDREMxX0RBVDUgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBCMzFfQUlOX1NMQ0RDMV9EQVQ2ICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMxKQorI2RlZmluZSBQQzVfQUlOX1NMQ0RDMV9EQVQ3ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQQzZfQUlOX1NMQ0RDMV9EQVQ4ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQzdfQUlOX1NMQ0RDMV9EQVQ5ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQzhfQUlOX1NMQ0RDMV9EQVQxMCAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQzlfQUlOX1NMQ0RDMV9EQVQxMSAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQzEwX0FJTl9TTENEQzFfREFUMTIgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEMxMV9BSU5fU0xDREMxX0RBVDEzICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBDMTJfQUlOX1NMQ0RDMV9EQVQxNCAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQzEzX0FJTl9TTENEQzFfREFUMTUgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEU1X0FJTl9QQ19TUEtPVVQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNSkKKworLyogQklOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBFNV9CSU5fVE9VVDIgICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDUpCisKKy8qIENJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTE0X0NJTl9TTENEQzFfREFUMCAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEExNV9DSU5fU0xDREMxX0RBVDEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTZfQ0lOX1NMQ0RDMV9EQVQyICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQQTE3X0NJTl9TTENEQzFfREFUMyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEExOF9DSU5fU0xDREMxX0RBVDQgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBBMTlfQ0lOX1NMQ0RDMV9EQVQ1ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQQTIwX0NJTl9TTENEQzFfREFUNiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgUEEyMV9DSU5fU0xDREMxX0RBVDcgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBCMzBfQ0lOX1VBUlQ0X0NUUyAgICAgIChHUElPX1BPUlRCIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQRTVfQ0lOX1RPVVQzICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA1KQorCisvKiBBT1VUIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBCMjlfQU9VVF9VQVJUNF9SWEQgICAgIChHUElPX1BPUlRCIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQjMxX0FPVVRfVUFSVDRfUlRTICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEM4X0FPVVRfVVNCT1RHX1RYUl9JTlQgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgOCkKKyNkZWZpbmUgUEMxNV9BT1VUX1dLR0QgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTUpCisjZGVmaW5lIFBGMjFfQU9VVF9EVEFDSyAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDIxKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCmluZGV4IGM5MTk4YzAuLmFiODM4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKQEAgLTkyLDcgKzkyLDcgQEAKIAlNVVhfRVhURE1BUkVRMl9NQlhfU0VMCQk9IDEgPDwgMTUsCiAJTVVYX1RBTVBFUl9ERVRFQ1RfRU4JCT0gMSA8PCAxNiwKIAlNVVhfUEdQX1VTQl80V0lSRQkJPSAxIDw8IDE3LAotCU1VWF9QR0JfVVNCX0NPTU1PTgkJPSAxIDw8IDE4LAorCU1VWF9QR1BfVVNCX0NPTU1PTgkJPSAxIDw8IDE4LAogCU1VWF9TREhDX01FTVNUSUNLMQkJPSAxIDw8IDE5LAogCU1VWF9TREhDX01FTVNUSUNLMgkJPSAxIDw8IDIwLAogCU1VWF9QR1BfU1BMTF9CWVAJCT0gMSA8PCAyMSwKQEAgLTEwOSwyMSArMTA5LDQ0IEBACiB9OwogCiAvKgotICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgotICogc2lnbmFsLgorICogc2V0dXBzIGEgc2luZ2xlIHBpbjoKKyAqIAktIHJlc2VydmVzIHRoZSBwaW4gc28gdGhhdCBpdCBpcyBub3QgY2xhaW1lZCBieSBhbm90aGVyIGRyaXZlcgorICogCS0gc2V0dXBzIHRoZSBpb211eCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAqIAktIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBhcyBhIEdQSU8sIHdlIGNsYWltIGl0IHRocm91ZyBrZXJuZWwgZ3Bpb2xpYgogICovCi12b2lkIGlvbXV4X2NvbmZpZ19ncHIoZW51bSBpb211eF9ncF9mdW5jICwgYm9vbCk7CitpbnQgbXhjX2lvbXV4X3NldHVwX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluLCBjb25zdCBjaGFyICpsYWJlbCk7CisvKgorICogc2V0dXBzIG11dGxpcGxlIHBpbnMKKyAqIGNvbnZlbmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCisgKi8KK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpOwogCiAvKgotICogc2V0IHRoZSBtb2RlIGZvciBhIElPTVVYIHBpbi4KKyAqIHJlbGVhc2VzIGEgc2luZ2xlIHBpbjoKKyAqIAktIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBhIGZ1dHVyZSB1c2UgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIGZyZWVzIHRoZSBHUElPIGlmIHRoZSBwaW4gd2FzIGNvbmZpZ3VyZWQgYXMgR1BJTworICogCS0gRE9FUyBOT1QgcmVjb25maWd1cmUgdGhlIElPTVVYIGluIGl0cyByZXNldCBzdGF0ZQogICovCi1pbnQgbXhjX2lvbXV4X21vZGUodW5zaWduZWQgaW50KTsKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4pOworLyoKKyAqIHJlbGVhc2VzIG11bHRpcGxlIHBpbnMKKyAqIGNvbnZlbnZpZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGZvciBhIHBhcnRpY3VsYXIKICAqIHNpZ25hbC4KICAqLwotdm9pZCBteGNfaW9tdXhfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMsIGJvb2wpOwordm9pZCBteGNfaW9tdXhfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMsIGJvb2wgZW4pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IGNvbmZpZ3VyZXMgdGhlIGlvbXV4IGhhcmR3YXJlLgorICogSXQgaXMgY2FsbGVkIGJ5IHRoZSBzZXR1cCBmdW5jdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGFueW1vcmUuCisgKiBJdCBpcyBoZXJlIHZpc2libGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAqLworaW50IG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7CiAKICNkZWZpbmUgSU9NVVhfUEFETlVNX01BU0sJMHgxZmYKICNkZWZpbmUgSU9NVVhfR1BJT05VTV9TSElGVAk5CkBAIC0xNDQsNiArMTY3LDExIEBACiAJTVhDX0dQSU9fSVJRX1NUQVJUKQogCiAvKgorICogVGhlIG51bWJlciBvZiBncGlvIGRldmljZXMgYW1vbmcgdGhlIHBhZHMKKyAqLworI2RlZmluZSBHUElPX1BPUlRfTUFYIDMKKworLyoKICAqIFRoaXMgZW51bWVyYXRpb24gaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIFNlY3Rpb24KICAqICJzd19wYWRfY3RsICYgc3dfbXV4X2N0bCBkZXRhaWxzIiBvZiB0aGUgTVgzMSBJQyBTcGVjLiBFYWNoIGVudW1lcmF0ZWQKICAqIHZhbHVlIGlzIGNvbnN0cnVjdGVkIGJhc2VkIG9uIHRoZSBydWxlcyBkZXNjcmliZWQgYWJvdmUuCkBAIC00ODAsNiArNTA4LDkgQEAKIAlNWDMxX1BJTl9DQVBUVVJFCT0gSU9NVVhfUElOKCA3LCAgIDMyNyksCiB9OwogCisjZGVmaW5lIFBJTl9NQVggMzI3CisjZGVmaW5lIE5CX1BPUlRTIDEyIC8qIE5CX1BJTlMvMzIsIHdlIGNob3NlIDMyIHBpbnMgcGVyICJQT1JUIiAqLworCiAvKgogICogQ29udmVuaWVuY2UgdmFsdWVzIGZvciB1c2Ugd2l0aCBteGNfaW9tdXhfbW9kZSgpCiAgKgpAQCAtNTA3LDcgKzUzOCw5IEBACiAjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMV9fU1MxCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NTMSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMl9fU1MyCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NTMiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX01PU0lfX01PU0kJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTU9TSV9fU0NMCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX01JU09fX01JU08JSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NSVNPLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTUlTT19fU0RBCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX1NDTEtfX1NDTEsJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9TQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWV9fU1BJX1JEWQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX1NQSV9SRFksIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9DU1BJMl9TUzBfX1NTMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9TUzAsIElPTVVYX0NPTkZJR19GVU5DKQpAQCAtNTI1LDYgKzU1OCwzMyBAQAogI2RlZmluZSBNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMAlJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9EQVRBMCwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfTU9ERShNWDMxX1BJTl9TRDFfQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRAlJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9DTUQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDBfX0xEMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDFfX0xEMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDEsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDJfX0xEMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDIsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDNfX0xEMwkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDRfX0xENAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDVfX0xENQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDUsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDZfX0xENgkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDYsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDdfX0xENwkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDcsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDhfX0xEOAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDgsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDlfX0xEOQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDksIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEwX19MRDEwCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDExX19MRDExCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTEsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEyX19MRDEyCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTIsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEzX19MRDEzCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE0X19MRDE0CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE1X19MRDE1CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTUsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE2X19MRDE2CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTYsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE3X19MRDE3CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTcsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9WU1lOQzNfX1ZTWU5DMwkJSU9NVVhfTU9ERShNWDMxX1BJTl9WU1lOQzMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9IU1lOQ19fSFNZTkMJCUlPTVVYX01PREUoTVgzMV9QSU5fSFNZTkMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9GUFNISUZUX19GUFNISUZUCUlPTVVYX01PREUoTVgzMV9QSU5fRlBTSElGVCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0RSRFkwX19EUkRZMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9EUkRZMCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0QzX1JFVl9fRDNfUkVWCQlJT01VWF9NT0RFKE1YMzFfUElOX0QzX1JFViwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0NPTlRSQVNUX19DT05UUkFTVAlJT01VWF9NT0RFKE1YMzFfUElOX0NPTlRSQVNULCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRDNfU1BMX19EM19TUEwJCUlPTVVYX01PREUoTVgzMV9QSU5fRDNfU1BMLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRDNfQ0xTX19EM19DTFMJCUlPTVVYX01PREUoTVgzMV9QSU5fRDNfQ0xTLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fTENTMF9fR1BJMDNfMjMJCUlPTVVYX01PREUoTVgzMV9QSU5fTENTMCwgSU9NVVhfQ09ORklHX0dQSU8pCiAKIC8qWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIGJ5IGNzcGkyX3NzMCwgY3NwaTJfc3MxLCBjc3BpMV9zczAKICAqIGNzcGkxX3NzMSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfSAorI2RlZmluZSBfTVhDX0lPTVVYX0gKKworLyoKKyogIEdQSU8gTW9kdWxlIGFuZCBJL08gTXVsdGlwbGV4ZXIKKyogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAorKi8KKyNkZWZpbmUgVkFfR1BJT19CQVNFCUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19ERElSKHgpICAgICgweDAwICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX09DUjEoeCkgICAgKDB4MDQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfT0NSMih4KSAgICAoMHgwOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkExKHgpICgweDBjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQTIoeCkgKDB4MTAgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNPTkZCMSh4KSAoMHgxNCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkIyKHgpICgweDE4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0RSKHgpICAgICAgKDB4MWMgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR0lVUyh4KSAgICAoMHgyMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19TU1IoeCkgICAgICgweDI0ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDUjEoeCkgICAgKDB4MjggKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNSMih4KSAgICAoMHgyYyArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JTVIoeCkgICAgICgweDMwICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lTUih4KSAgICAgKDB4MzQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR1BSKHgpICAgICAoMHgzOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19TV1IoeCkgICAgICgweDNjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX1BVRU4oeCkgICAgKDB4NDAgKyAoKHgpIDw8IDgpKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjIGRlZmluZSBHUElPX1BPUlRfTUFYICAzCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKyMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDUKKyNlbmRpZgorCisjaWZuZGVmIEdQSU9fUE9SVF9NQVgKKyMgZXJyb3IgIkdQSU8gY29uZmlnIHBvcnQgY291bnQgdW5rbm93biEiCisjZW5kaWYKKworI2RlZmluZSBHUElPX1BJTl9NQVNLIDB4MWYKKworI2RlZmluZSBHUElPX1BPUlRfU0hJRlQgNQorI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHg3IDw8IEdQSU9fUE9SVF9TSElGVCkKKworI2RlZmluZSBHUElPX1BPUlRBICgwIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JUQiAoMSA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEMgKDIgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlREICgzIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JURSAoNCA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEYgKDUgPDwgR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fT1VUICAgKDEgPDwgOCkKKyNkZWZpbmUgR1BJT19JTiAgICAoMCA8PCA4KQorI2RlZmluZSBHUElPX1BVRU4gICgxIDw8IDkpCisKKyNkZWZpbmUgR1BJT19QRiAgICAoMSA8PCAxMCkKKyNkZWZpbmUgR1BJT19BRiAgICAoMSA8PCAxMSkKKworI2RlZmluZSBHUElPX09DUl9TSElGVCAxMgorI2RlZmluZSBHUElPX09DUl9NQVNLICgzIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0FJTiAgICgwIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0JJTiAgICgxIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0NJTiAgICgyIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0dQSU8gICgzIDw8IEdQSU9fT0NSX1NISUZUKQorCisjZGVmaW5lIEdQSU9fQU9VVF9TSElGVCAxNAorI2RlZmluZSBHUElPX0FPVVRfTUFTSyAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVCAgICAgKDAgPDwgR1BJT19BT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0FPVVRfSVNSICgxIDw8IEdQSU9fQU9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19BT1VUXzAgICAoMiA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVF8xICAgKDMgPDwgR1BJT19BT1VUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fQk9VVF9TSElGVCAxNgorI2RlZmluZSBHUElPX0JPVVRfTUFTSyAoMyA8PCBHUElPX0JPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQk9VVCAgICAgICgwIDw8IEdQSU9fQk9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19CT1VUX0lTUiAgKDEgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVRfMCAgICAoMiA8PCBHUElPX0JPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQk9VVF8xICAgICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKKworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjaW5jbHVkZSA8bWFjaC9pb211eC1teDEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX01YMgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyeC5oPgorI2lmZGVmIENPTkZJR19NQUNIX01YMjEKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUNIX01YMjcKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKyNlbmRpZgorI2VuZGlmCisKKworLyogZGVjb2RlIGlycSBudW1iZXIgdG8gdXNlIHdpdGggSU1SKHgpLCBJU1IoeCkgYW5kIGZyaWVuZHMgKi8KKyNkZWZpbmUgSVJRX1RPX1JFRyhpcnEpICgoaXJxIC0gTVhDX0lOVEVSTkFMX0lSUVMpID4+IDUpCisKKyNkZWZpbmUgSVJRX0dQSU9BKHgpICAoTVhDX0dQSU9fSVJRX1NUQVJUICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9CKHgpICAoSVJRX0dQSU9BKDMyKSArIHgpCisjZGVmaW5lIElSUV9HUElPQyh4KSAgKElSUV9HUElPQigzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0QoeCkgIChJUlFfR1BJT0MoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9FKHgpICAoSVJRX0dQSU9EKDMyKSArIHgpCisKKworZXh0ZXJuIHZvaWQgbXhjX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKTsKK2V4dGVybiBpbnQgbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwljb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMGI4MDgzOS4uZTA3ODNlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTQsNyArMTQsMTIgQEAKICNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwODAwMDAwMCkKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhDMDAwMDAwMCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUNIX01YMjcKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4QTAwMDAwMDApCisjZW5kaWYKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDgwMDAwMDAwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGM0Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAyMDA5IEhvbGdlciBTY2h1cmlnLCBoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGUKKyAqCisgKiBUaGlzIGNvbnRhaW5zIGkuTVgyMS1zcGVjaWZpYyBoYXJkd2FyZSBkZWZpbml0aW9ucy4gRm9yIHRob3NlCisgKiBoYXJkd2FyZSBwaWVjZXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gaS5NWDIxIGFuZCBpLk1YMjcsIGhhdmUgYQorICogbG9vayBhdCBteDJ4LmguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyMV9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyMV9IX18KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgorI2VuZGlmCisKKworLyogTWVtb3J5IHJlZ2lvbnMgYW5kIENTICovCisjZGVmaW5lIFNEUkFNX0JBU0VfQUREUiAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1NEMV9CQVNFX0FERFIgICAgICAgICAgMHhDNDAwMDAwMAorCisjZGVmaW5lIENTMF9CQVNFX0FERFIgICAgICAgICAgIDB4QzgwMDAwMDAKKyNkZWZpbmUgQ1MxX0JBU0VfQUREUiAgICAgICAgICAgMHhDQzAwMDAwMAorI2RlZmluZSBDUzJfQkFTRV9BRERSICAgICAgICAgICAweEQwMDAwMDAwCisjZGVmaW5lIENTM19CQVNFX0FERFIgICAgICAgICAgIDB4RDEwMDAwMDAKKyNkZWZpbmUgQ1M0X0JBU0VfQUREUiAgICAgICAgICAgMHhEMjAwMDAwMAorI2RlZmluZSBDUzVfQkFTRV9BRERSICAgICAgICAgICAweEREMDAwMDAwCisjZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSICAgIDB4RDQwMDAwMDAKKworLyogTkFORCwgU0RSQU0sIFdFSU0gZXRjIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgICAgICAgIDB4REYwMDAwMDAKKyNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUICAgMHhGNDIwMDAwMAorI2RlZmluZSBYX01FTUNfU0laRSAgICAgICAgICAgICBTWl8yNTZLCisKKyNkZWZpbmUgU0RSQU1DX0JBU0VfQUREUiAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDAwMDApCisjZGVmaW5lIEVJTV9CQVNFX0FERFIgICAgICAgICAgIChYX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUiAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4MjAwMCkKKyNkZWZpbmUgTkZDX0JBU0VfQUREUiAgICAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCisKKyNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGRTgwMAkvKiBpbnRlcm5hbCByYW0gKi8KKworLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gMTkyIEdQSU9zIChkb24ndCBmb3JnZXQgdGhlIGJhc2Vib2FyZCEpICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCSg2KjMyICsgMTYpCisKKy8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCisjZGVmaW5lIE1YQ19JTlRfVVNCQ1RSTCAgICAgICAgIDU4CisjZGVmaW5lIE1YQ19JTlRfVVNCQ1RSTCAgICAgICAgIDU4CisjZGVmaW5lIE1YQ19JTlRfVVNCTU5QICAgICAgICAgIDU3CisjZGVmaW5lIE1YQ19JTlRfVVNCRlVOQyAgICAgICAgIDU2CisjZGVmaW5lIE1YQ19JTlRfVVNCSE9TVCAgICAgICAgIDU1CisjZGVmaW5lIE1YQ19JTlRfVVNCRE1BICAgICAgICAgIDU0CisjZGVmaW5lIE1YQ19JTlRfVVNCV0tVUCAgICAgICAgIDUzCisjZGVmaW5lIE1YQ19JTlRfRU1NQURFQyAgICAgICAgIDUwCisjZGVmaW5lIE1YQ19JTlRfRU1NQUVOQyAgICAgICAgIDQ5CisjZGVmaW5lIE1YQ19JTlRfQk1JICAgICAgICAgICAgIDMwCisjZGVmaW5lIE1YQ19JTlRfRklSSSAgICAgICAgICAgIDkKKworLyogZml4ZWQgRE1BIHJlcXVlc3QgbnVtYmVycyAqLworI2RlZmluZSBETUFfUkVRX0JNSV9SWCAgICAgICAgICAyOQorI2RlZmluZSBETUFfUkVRX0JNSV9UWCAgICAgICAgICAyOAorI2RlZmluZSBETUFfUkVRX0ZJUklfUlggICAgICAgICA0CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKaW5kZXggMDMxM2JlNy4uNmU5M2YyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCkBAIC0yLDYgKzIsMTAgQEAKICAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCiAgKgorICogVGhpcyBjb250YWlucyBpLk1YMjctc3BlY2lmaWMgaGFyZHdhcmUgZGVmaW5pdGlvbnMuIEZvciB0aG9zZQorICogaGFyZHdhcmUgcGllY2VzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIGkuTVgyMSBhbmQgaS5NWDI3LCBoYXZlIGEKKyAqIGxvb2sgYXQgbXgyeC5oLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgpAQCAtMjcsMzUgKzMxLDYgQEAKIC8qIElSQU0gKi8KICNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGNEMwMAkvKiBpbnRlcm5hbCByYW0gKi8KIAotLyogUmVnaXN0ZXIgb2ZmZXN0cyAqLwotI2RlZmluZSBBSVBJX0JBU0VfQUREUiAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEFJUElfQkFTRV9BRERSX1ZJUlQgICAgIDB4RjQwMDAwMDAKLSNkZWZpbmUgQUlQSV9TSVpFICAgICAgICAgICAgICAgU1pfMU0KLQotI2RlZmluZSBETUFfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAxMDAwKQotI2RlZmluZSBXRE9HX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAyMDAwKQotI2RlZmluZSBHUFQxX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAzMDAwKQotI2RlZmluZSBHUFQyX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA0MDAwKQotI2RlZmluZSBHUFQzX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA1MDAwKQotI2RlZmluZSBQV01fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA2MDAwKQotI2RlZmluZSBSVENfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA3MDAwKQotI2RlZmluZSBLUFBfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA4MDAwKQotI2RlZmluZSBPV0lSRV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA5MDAwKQotI2RlZmluZSBVQVJUMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBBMDAwKQotI2RlZmluZSBVQVJUMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBCMDAwKQotI2RlZmluZSBVQVJUM19CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBDMDAwKQotI2RlZmluZSBVQVJUNF9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBEMDAwKQotI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBFMDAwKQotI2RlZmluZSBDU1BJMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBGMDAwKQotI2RlZmluZSBTU0kxX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEwMDAwKQotI2RlZmluZSBTU0kyX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDExMDAwKQotI2RlZmluZSBJMkNfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEyMDAwKQotI2RlZmluZSBTREhDMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEzMDAwKQotI2RlZmluZSBTREhDMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE0MDAwKQotI2RlZmluZSBHUElPX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE1MDAwKQotI2RlZmluZSBBVURNVVhfQkFTRV9BRERSICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE2MDAwKQotCi0jZGVmaW5lIENTUEkzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTcwMDApCiAjZGVmaW5lIE1TSENfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTgwMDApCiAjZGVmaW5lIEdQVDVfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTkwMDApCiAjZGVmaW5lIEdQVDRfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MUEwMDApCkBAIC02NCw0MSArMzksMzMgQEAKICNkZWZpbmUgSTJDMl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRDAwMCkKICNkZWZpbmUgU0RIQzNfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRTAwMCkKICNkZWZpbmUgR1BUNl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRjAwMCkKLQotI2RlZmluZSBMQ0RDX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIxMDAwKQotI2RlZmluZSBTTENEQ19CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIyMDAwKQogI2RlZmluZSBWUFVfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIzMDAwKQotI2RlZmluZSBVU0JPVEdfQkFTRV9BRERSICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI0MDAwKQotLyogZm9yIG14MjcqLwogI2RlZmluZSBPVEdfQkFTRV9BRERSICAgICAgICAgICBVU0JPVEdfQkFTRV9BRERSCiAjZGVmaW5lIFNBSEFSQV9CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjUwMDApCi0jZGVmaW5lIEVNTUFfUFBfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjYwMDApCi0jZGVmaW5lIEVNTUFfUFJQX0JBU0VfQUREUiAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjY0MDApCi0jZGVmaW5lIENDTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjcwMDApCi0jZGVmaW5lIFNZU0NUUkxfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4Mjc4MDApCiAjZGVmaW5lIElJTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjgwMDApCi0KICNkZWZpbmUgUlRJQ19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQTAwMCkKICNkZWZpbmUgRkVDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQjAwMCkKICNkZWZpbmUgU0NDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQzAwMCkKICNkZWZpbmUgRVRCX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzQjAwMCkKICNkZWZpbmUgRVRCX1JBTV9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzQzAwMCkKIAotI2RlZmluZSBKQU1fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNFMDAwKQotI2RlZmluZSBNQVhfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNGMDAwKQotCi0vKiBST01QIGFuZCBBVklDICovCisvKiBST00gcGF0Y2ggKi8KICNkZWZpbmUgUk9NUF9CQVNFX0FERFIgICAgICAgICAgMHgxMDA0MTAwMAogCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSICAgICAgICAgIDB4MTAwNDAwMDAKLQotI2RlZmluZSBTQUhCMV9CQVNFX0FERFIgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNBSEIxX0JBU0VfQUREUl9WSVJUICAgIDB4RjQxMDAwMDAKLSNkZWZpbmUgU0FIQjFfU0laRSAgICAgICAgICAgICAgU1pfMU0KLQotI2RlZmluZSBDU0lfQkFTRV9BRERSICAgICAgICAgICAoU0FIQjFfQkFTRV9BRERSICsgMHgwMDAwKQogI2RlZmluZSBBVEFfQkFTRV9BRERSICAgICAgICAgICAoU0FIQjFfQkFTRV9BRERSICsgMHgxMDAwKQogCisvKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KKyNkZWZpbmUgU0RSQU1fQkFTRV9BRERSICAgICAgICAgMHhBMDAwMDAwMAorI2RlZmluZSBDU0QxX0JBU0VfQUREUiAgICAgICAgICAweEIwMDAwMDAwCisKKyNkZWZpbmUgQ1MwX0JBU0VfQUREUiAgICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBDUzFfQkFTRV9BRERSICAgICAgICAgICAweEM4MDAwMDAwCisjZGVmaW5lIENTMl9CQVNFX0FERFIgICAgICAgICAgIDB4RDAwMDAwMDAKKyNkZWZpbmUgQ1MzX0JBU0VfQUREUiAgICAgICAgICAgMHhEMjAwMDAwMAorI2RlZmluZSBDUzRfQkFTRV9BRERSICAgICAgICAgICAweEQ0MDAwMDAwCisjZGVmaW5lIENTNV9CQVNFX0FERFIgICAgICAgICAgIDB4RDYwMDAwMDAKKyNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIgICAgMHhEQzAwMDAwMAorCiAvKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzICovCiAjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgICAgICAgIDB4RDgwMDAwMDAKICNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUICAgMHhGNDIwMDAwMApAQCAtMTEwLDU2ICs3Nyw5IEBACiAjZGVmaW5lIE0zSUZfQkFTRV9BRERSICAgICAgICAgIChYX01FTUNfQkFTRV9BRERSICsgMHgzMDAwKQogI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUiAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4NDAwMCkKIAotLyogTWVtb3J5IHJlZ2lvbnMgYW5kIENTICovCi0jZGVmaW5lIFNEUkFNX0JBU0VfQUREUgkJMHhBMDAwMDAwMAotI2RlZmluZSBDU0QxX0JBU0VfQUREUgkJMHhCMDAwMDAwMAotCi0jZGVmaW5lIENTMF9CQVNFX0FERFIgICAgICAgICAgIDB4QzAwMDAwMDAKLSNkZWZpbmUgQ1MxX0JBU0VfQUREUiAgICAgICAgICAgMHhDODAwMDAwMAotI2RlZmluZSBDUzJfQkFTRV9BRERSICAgICAgICAgICAweEQwMDAwMDAwCi0jZGVmaW5lIENTM19CQVNFX0FERFIgICAgICAgICAgIDB4RDIwMDAwMDAKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUiAgICAgICAgICAgMHhENDAwMDAwMAotI2RlZmluZSBDUzVfQkFTRV9BRERSICAgICAgICAgICAweEQ2MDAwMDAwCi0jZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSICAgIDB4REMwMDAwMDAKLQotLyoKLSAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKLSAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKLSAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKLSAqIGl0IHJldHVybnMgMHhERUFEQkVFRgotICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkgICBcCi0JKHZvaWQgX19pb21lbSAqKSBcCi0JKCgoeCA+PSBBSVBJX0JBU0VfQUREUikgJiYgKHggPCAoQUlQSV9CQVNFX0FERFIgKyBBSVBJX1NJWkUpKSkgPyBcCi0JCUFJUElfSU9fQUREUkVTUyh4KSA6IFwKLQkoKHggPj0gU0FIQjFfQkFTRV9BRERSKSAmJiAoeCA8IChTQUhCMV9CQVNFX0FERFIgKyBTQUhCMV9TSVpFKSkpID8gXAotCQlTQUhCMV9JT19BRERSRVNTKHgpIDogXAotCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBcCi0JCVhfTUVNQ19JT19BRERSRVNTKHgpIDogMHhERUFEQkVFRikKLQotLyogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyICovCi0jZGVmaW5lIEFJUElfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQSV9CQVNFX0FERFIpICsgQUlQSV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkJQUlQSV9JT19BRERSRVNTKHgpCi0KLSNkZWZpbmUgU0FIQjFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gU0FIQjFfQkFTRV9BRERSKSArIFNBSEIxX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLS8qIGZpeGVkIGludGVycnB1dCBudW1iZXJzICovCisvKiBmaXhlZCBpbnRlcnJ1cHQgbnVtYmVycyAqLwogI2RlZmluZSBNWENfSU5UX0NDTQkJNjMKICNkZWZpbmUgTVhDX0lOVF9JSU0JCTYyCi0jZGVmaW5lIE1YQ19JTlRfTENEQwkJNjEKLSNkZWZpbmUgTVhDX0lOVF9TTENEQwkJNjAKICNkZWZpbmUgTVhDX0lOVF9TQUhBUkEJCTU5CiAjZGVmaW5lIE1YQ19JTlRfU0NDX1NDTQkJNTgKICNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OCQk1NwpAQCAtMTY3LDU0ICs4NywxMiBAQAogI2RlZmluZSBNWENfSU5UX1VTQjIJCTU1CiAjZGVmaW5lIE1YQ19JTlRfVVNCMQkJNTQKICNkZWZpbmUgTVhDX0lOVF9WUFUJCTUzCi0jZGVmaW5lIE1YQ19JTlRfRU1NQVBQCQk1MgotI2RlZmluZSBNWENfSU5UX0VNTUFQUlAJCTUxCiAjZGVmaW5lIE1YQ19JTlRfRkVDCQk1MAogI2RlZmluZSBNWENfSU5UX1VBUlQ1CQk0OQogI2RlZmluZSBNWENfSU5UX1VBUlQ2CQk0OAotI2RlZmluZSBNWENfSU5UX0RNQUNIMTUJCTQ3Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxNAkJNDYKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDEzCQk0NQotI2RlZmluZSBNWENfSU5UX0RNQUNIMTIJCTQ0Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMQkJNDMKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDEwCQk0MgotI2RlZmluZSBNWENfSU5UX0RNQUNIOQkJNDEKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDgJCTQwCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g3CQkzOQotI2RlZmluZSBNWENfSU5UX0RNQUNINgkJMzgKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDUJCTM3Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g0CQkzNgotI2RlZmluZSBNWENfSU5UX0RNQUNIMwkJMzUKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDIJCTM0Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxCQkzMwotI2RlZmluZSBNWENfSU5UX0RNQUNIMAkJMzIKLSNkZWZpbmUgTVhDX0lOVF9DU0kJCTMxCiAjZGVmaW5lIE1YQ19JTlRfQVRBCQkzMAotI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMjkKLSNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTI4Ci0jZGVmaW5lIE1YQ19JTlRfV0RPRwkJMjcKLSNkZWZpbmUgTVhDX0lOVF9HUFQxCQkyNgotI2RlZmluZSBNWENfSU5UX0dQVDIJCTI1Ci0jZGVmaW5lIE1YQ19JTlRfR1BUMwkJMjQKLSNkZWZpbmUgTVhDX0lOVF9HUFQJCUlOVF9HUFQxCi0jZGVmaW5lIE1YQ19JTlRfUFdNCQkyMwotI2RlZmluZSBNWENfSU5UX1JUQwkJMjIKLSNkZWZpbmUgTVhDX0lOVF9LUFAJCTIxCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDEJCTIwCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTE5Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDMJCTE4Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDQJCTE3Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE2Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTE1Ci0jZGVmaW5lIE1YQ19JTlRfU1NJMQkJMTQKLSNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMwotI2RlZmluZSBNWENfSU5UX0kyQwkJMTIKLSNkZWZpbmUgTVhDX0lOVF9TREhDMQkJMTEKLSNkZWZpbmUgTVhDX0lOVF9TREhDMgkJMTAKICNkZWZpbmUgTVhDX0lOVF9TREhDMwkJOQotI2RlZmluZSBNWENfSU5UX0dQSU8JCTgKICNkZWZpbmUgTVhDX0lOVF9TREhDCQk3Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTMJCTYKICNkZWZpbmUgTVhDX0lOVF9SVElDCQk1CiAjZGVmaW5lIE1YQ19JTlRfR1BUNAkJNAogI2RlZmluZSBNWENfSU5UX0dQVDUJCTMKQEAgLTIyOCwzNiArMTA2LDkgQEAKICNkZWZpbmUgRE1BX1JFUV9VQVJUNl9UWCAgICAgICAgMzQKICNkZWZpbmUgRE1BX1JFUV9VQVJUNV9SWCAgICAgICAgMzMKICNkZWZpbmUgRE1BX1JFUV9VQVJUNV9UWCAgICAgICAgMzIKLSNkZWZpbmUgRE1BX1JFUV9DU0lfUlggICAgICAgICAgMzEKLSNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCAgICAgICAgMzAKICNkZWZpbmUgRE1BX1JFUV9BVEFfUkNWICAgICAgICAgMjkKICNkZWZpbmUgRE1BX1JFUV9BVEFfVFggICAgICAgICAgMjgKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UWCAgICAgICAgMjcKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SWCAgICAgICAgMjYKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMl9UWCAgICAgICAgMjUKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMl9SWCAgICAgICAgMjQKLSNkZWZpbmUgRE1BX1JFUV9VQVJUM19UWCAgICAgICAgMjMKLSNkZWZpbmUgRE1BX1JFUV9VQVJUM19SWCAgICAgICAgMjIKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNF9UWCAgICAgICAgMjEKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNF9SWCAgICAgICAgMjAKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMV9UWCAgICAgICAgMTkKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMV9SWCAgICAgICAgMTgKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMl9UWCAgICAgICAgMTcKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMl9SWCAgICAgICAgMTYKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMSAgICAgICAgMTUKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMSAgICAgICAgMTQKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMCAgICAgICAgMTMKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMCAgICAgICAgMTIKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMSAgICAgICAgMTEKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1JYMSAgICAgICAgMTAKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMCAgICAgICAgOQotI2RlZmluZSBETUFfUkVRX1NTSTJfUlgwICAgICAgICA4Ci0jZGVmaW5lIERNQV9SRVFfU0RIQzEgICAgICAgICAgIDcKLSNkZWZpbmUgRE1BX1JFUV9TREhDMiAgICAgICAgICAgNgogI2RlZmluZSBETUFfUkVRX01TSEMgICAgICAgICAgICA0Ci0jZGVmaW5lIERNQV9SRVFfRVhUICAgICAgICAgICAgIDMKLSNkZWZpbmUgRE1BX1JFUV9DU1BJM19UWCAgICAgICAgMgotI2RlZmluZSBETUFfUkVRX0NTUEkzX1JYICAgICAgICAxCiAKIC8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVgyNyAqLwogI2RlZmluZSBDSElQX1JFVl8xXzAJCTB4MDAKQEAgLTI2NywyNSArMTE4LDggQEAKIGV4dGVybiBpbnQgbXgyN19yZXZpc2lvbih2b2lkKTsKICNlbmRpZgogCi0vKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLwotI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKLSNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAotI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKLSNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAotI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCi0jZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAotI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKLSNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKLSNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBpcyBhbiBpLk1YMjcgQ1BVICovCi0jZGVmaW5lIGNwdV9pc19teDI3KCkJCSgxKQotCiAvKiB0aGlzIENQVSBzdXBwb3J0cyB1cCB0byAxOTIgR1BJT3MgKGRvbid0IGZvcmdldCB0aGUgYmFzZWJvYXJkISkgKi8KICNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKDE5MiArIDE2KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQwZDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBjb250YWlucyBoYXJkd2FyZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBpLk1YMjEgYW5kCisgKiBpLk1YMjcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyeF9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyeF9IX18KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzIGFyZSBjb21tb24gYmV0d2VlbiBpLk1YMjEgYW5kIGkuTVgyNyAqLworCisvKiBSZWdpc3RlciBvZmZlc3RzICovCisjZGVmaW5lIEFJUElfQkFTRV9BRERSICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQUlQSV9CQVNFX0FERFJfVklSVCAgICAgMHhGNDAwMDAwMAorI2RlZmluZSBBSVBJX1NJWkUgICAgICAgICAgICAgICBTWl8xTQorCisjZGVmaW5lIERNQV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDEwMDApCisjZGVmaW5lIFdET0dfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDIwMDApCisjZGVmaW5lIEdQVDFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDMwMDApCisjZGVmaW5lIEdQVDJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDQwMDApCisjZGVmaW5lIEdQVDNfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDUwMDApCisjZGVmaW5lIFBXTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDYwMDApCisjZGVmaW5lIFJUQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDcwMDApCisjZGVmaW5lIEtQUF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDgwMDApCisjZGVmaW5lIE9XSVJFX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDkwMDApCisjZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEEwMDApCisjZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEIwMDApCisjZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEMwMDApCisjZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEQwMDApCisjZGVmaW5lIENTUEkxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEUwMDApCisjZGVmaW5lIENTUEkyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEYwMDApCisjZGVmaW5lIFNTSTFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTAwMDApCisjZGVmaW5lIFNTSTJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTEwMDApCisjZGVmaW5lIEkyQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTIwMDApCisjZGVmaW5lIFNESEMxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTMwMDApCisjZGVmaW5lIFNESEMyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTQwMDApCisjZGVmaW5lIEdQSU9fQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTUwMDApCisjZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTYwMDApCisjZGVmaW5lIENTUEkzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTcwMDApCisjZGVmaW5lIExDRENfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjEwMDApCisjZGVmaW5lIFNMQ0RDX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjIwMDApCisjZGVmaW5lIFVTQk9UR19CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjQwMDApCisjZGVmaW5lIEVNTUFfUFBfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjYwMDApCisjZGVmaW5lIEVNTUFfUFJQX0JBU0VfQUREUiAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjY0MDApCisjZGVmaW5lIENDTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjcwMDApCisjZGVmaW5lIFNZU0NUUkxfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4Mjc4MDApCisjZGVmaW5lIEpBTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0UwMDApCisjZGVmaW5lIE1BWF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0YwMDApCisKKyNkZWZpbmUgQVZJQ19CQVNFX0FERFIgICAgICAgICAgMHgxMDA0MDAwMAorCisjZGVmaW5lIFNBSEIxX0JBU0VfQUREUiAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0FIQjFfQkFTRV9BRERSX1ZJUlQgICAgMHhGNDEwMDAwMAorI2RlZmluZSBTQUhCMV9TSVpFICAgICAgICAgICAgICBTWl8xTQorCisjZGVmaW5lIENTSV9CQVNFX0FERFIgICAgICAgICAgIChTQUhCMV9CQVNFX0FERFIgKyAweDAwMDApCisKKy8qCisgKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCisgKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4CisgKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCisgKiBpdCByZXR1cm5zIDB4REVBREJFRUYKKyAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAorCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCisJKCgoeCA+PSBBSVBJX0JBU0VfQUREUikgJiYgKHggPCAoQUlQSV9CQVNFX0FERFIgKyBBSVBJX1NJWkUpKSkgPyBcCisJCUFJUElfSU9fQUREUkVTUyh4KSA6IFwKKwkoKHggPj0gU0FIQjFfQkFTRV9BRERSKSAmJiAoeCA8IChTQUhCMV9CQVNFX0FERFIgKyBTQUhCMV9TSVpFKSkpID8gXAorCQlTQUhCMV9JT19BRERSRVNTKHgpIDogXAorCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBcCisJCVhfTUVNQ19JT19BRERSRVNTKHgpIDogMHhERUFEQkVFRikKKworLyogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyICovCisjZGVmaW5lIEFJUElfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQUlQSV9CQVNFX0FERFIpICsgQUlQSV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkJQUlQSV9JT19BRERSRVNTKHgpCisKKyNkZWZpbmUgU0FIQjFfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gU0FIQjFfQkFTRV9BRERSKSArIFNBSEIxX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKy8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCisjZGVmaW5lIE1YQ19JTlRfTENEQwkJNjEKKyNkZWZpbmUgTVhDX0lOVF9TTENEQwkJNjAKKyNkZWZpbmUgTVhDX0lOVF9FTU1BUFAJCTUyCisjZGVmaW5lIE1YQ19JTlRfRU1NQVBSUAkJNTEKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDE1CQk0NworI2RlZmluZSBNWENfSU5UX0RNQUNIMTQJCTQ2CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMwkJNDUKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDEyCQk0NAorI2RlZmluZSBNWENfSU5UX0RNQUNIMTEJCTQzCisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMAkJNDIKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDkJCTQxCisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g4CQk0MAorI2RlZmluZSBNWENfSU5UX0RNQUNINwkJMzkKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDYJCTM4CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g1CQkzNworI2RlZmluZSBNWENfSU5UX0RNQUNINAkJMzYKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDMJCTM1CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gyCQkzNAorI2RlZmluZSBNWENfSU5UX0RNQUNIMQkJMzMKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDAJCTMyCisjZGVmaW5lIE1YQ19JTlRfQ1NJCQkzMQorI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMjkKKyNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTI4CisjZGVmaW5lIE1YQ19JTlRfV0RPRwkJMjcKKyNkZWZpbmUgTVhDX0lOVF9HUFQxCQkyNgorI2RlZmluZSBNWENfSU5UX0dQVDIJCTI1CisjZGVmaW5lIE1YQ19JTlRfR1BUMwkJMjQKKyNkZWZpbmUgTVhDX0lOVF9HUFQJCUlOVF9HUFQxCisjZGVmaW5lIE1YQ19JTlRfUFdNCQkyMworI2RlZmluZSBNWENfSU5UX1JUQwkJMjIKKyNkZWZpbmUgTVhDX0lOVF9LUFAJCTIxCisjZGVmaW5lIE1YQ19JTlRfVUFSVDEJCTIwCisjZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTE5CisjZGVmaW5lIE1YQ19JTlRfVUFSVDMJCTE4CisjZGVmaW5lIE1YQ19JTlRfVUFSVDQJCTE3CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE2CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTE1CisjZGVmaW5lIE1YQ19JTlRfU1NJMQkJMTQKKyNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMworI2RlZmluZSBNWENfSU5UX0kyQwkJMTIKKyNkZWZpbmUgTVhDX0lOVF9TREhDMQkJMTEKKyNkZWZpbmUgTVhDX0lOVF9TREhDMgkJMTAKKyNkZWZpbmUgTVhDX0lOVF9HUElPCQk4CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTMJCTYKKworLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgR1BJT19EUgkJIAkweDFDCisjZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDAKKyNkZWZpbmUgR1BJT19QU1IJIAkweDI0CisjZGVmaW5lIEdQSU9fSUNSMQkgCTB4MjgKKyNkZWZpbmUgR1BJT19JQ1IyCSAJMHgyQworI2RlZmluZSBHUElPX0lNUgkgCTB4MzAKKyNkZWZpbmUgR1BJT19JU1IJIAkweDM0CisjZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgzCisjZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MgorI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UgCTB4MAorI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgxCisjZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAorCisvKiBmaXhlZCBETUEgcmVxdWVzdCBudW1iZXJzICovCisjZGVmaW5lIERNQV9SRVFfQ1NJX1JYICAgICAgICAgIDMxCisjZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQgICAgICAgIDMwCisjZGVmaW5lIERNQV9SRVFfVUFSVDFfVFggICAgICAgIDI3CisjZGVmaW5lIERNQV9SRVFfVUFSVDFfUlggICAgICAgIDI2CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfVFggICAgICAgIDI1CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfUlggICAgICAgIDI0CisjZGVmaW5lIERNQV9SRVFfVUFSVDNfVFggICAgICAgIDIzCisjZGVmaW5lIERNQV9SRVFfVUFSVDNfUlggICAgICAgIDIyCisjZGVmaW5lIERNQV9SRVFfVUFSVDRfVFggICAgICAgIDIxCisjZGVmaW5lIERNQV9SRVFfVUFSVDRfUlggICAgICAgIDIwCisjZGVmaW5lIERNQV9SRVFfQ1NQSTFfVFggICAgICAgIDE5CisjZGVmaW5lIERNQV9SRVFfQ1NQSTFfUlggICAgICAgIDE4CisjZGVmaW5lIERNQV9SRVFfQ1NQSTJfVFggICAgICAgIDE3CisjZGVmaW5lIERNQV9SRVFfQ1NQSTJfUlggICAgICAgIDE2CisjZGVmaW5lIERNQV9SRVFfU1NJMV9UWDEgICAgICAgIDE1CisjZGVmaW5lIERNQV9SRVFfU1NJMV9SWDEgICAgICAgIDE0CisjZGVmaW5lIERNQV9SRVFfU1NJMV9UWDAgICAgICAgIDEzCisjZGVmaW5lIERNQV9SRVFfU1NJMV9SWDAgICAgICAgIDEyCisjZGVmaW5lIERNQV9SRVFfU1NJMl9UWDEgICAgICAgIDExCisjZGVmaW5lIERNQV9SRVFfU1NJMl9SWDEgICAgICAgIDEwCisjZGVmaW5lIERNQV9SRVFfU1NJMl9UWDAgICAgICAgIDkKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1JYMCAgICAgICAgOAorI2RlZmluZSBETUFfUkVRX1NESEMxICAgICAgICAgICA3CisjZGVmaW5lIERNQV9SRVFfU0RIQzIgICAgICAgICAgIDYKKyNkZWZpbmUgRE1BX1JFUV9FWFQgICAgICAgICAgICAgMworI2RlZmluZSBETUFfUkVRX0NTUEkzX1RYICAgICAgICAyCisjZGVmaW5lIERNQV9SRVFfQ1NQSTNfUlggICAgICAgIDEKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAppbmRleCBkZTAyNjY1Li4wYjA2OTQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCkBAIC0xLDM2MCArMSw0NSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCi0vKgotICogTVgzMSBtZW1vcnkgbWFwOgotICoKLSAqIFZpcnQJCVBoeXMJCVNpemUJV2hhdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGODAwMDAwMAkxRkZDMDAwMAkxNksJSVJBTQotICogRjkwMDAwMDAJMzAwMDAwMDAJMjU2TQlMMkNDCi0gKiBGQzAwMDAwMAk0M0YwMDAwMAkxTQlBSVBTIDEKLSAqIEZDMTAwMDAwCTUwMDAwMDAwCTFNCVNQQkEKLSAqIEZDMjAwMDAwCTUzRjAwMDAwCTFNCUFJUFMgMgotICogRkM1MDAwMDAJNjAwMDAwMDAJMTI4TQlST01QQVRDSAotICogRkM0MDAwMDAJNjgwMDAwMDAJMTI4TQlBVklDCi0gKiAgICAgICAgIAk3MDAwMDAwMAkyNTZNCUlQVSAoTUFYIE0yKQotICogICAgICAgICAJODAwMDAwMDAJMjU2TQlDU0QwIFNEUkFNL0REUgotICogICAgICAgICAJOTAwMDAwMDAJMjU2TQlDU0QxIFNEUkFNL0REUgotICogICAgICAgICAJQTAwMDAwMDAJMTI4TQlDUzAgRmxhc2gKLSAqICAgICAgICAgCUE4MDAwMDAwCTEyOE0JQ1MxIEZsYXNoCi0gKiAgICAgICAgIAlCMDAwMDAwMAkzMk0JQ1MyCi0gKiAgICAgICAgIAlCMjAwMDAwMAkzMk0JQ1MzCi0gKiBGNDAwMDAwMAlCNDAwMDAwMAkzMk0JQ1M0Ci0gKiAgICAgICAgIAlCNjAwMDAwMAkzMk0JQ1M1Ci0gKiBGQzMyMDAwMAlCODAwMDAwMAk2NEsJTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycwotICogICAgICAgICAJQzAwMDAwMDAJNjRNCVBDTUNJQS9DRgotICovCi0KLSNkZWZpbmUgQ1MwX0JBU0VfQUREUgkJMHhBMDAwMDAwMAotI2RlZmluZSBDUzFfQkFTRV9BRERSCQkweEE4MDAwMDAwCi0jZGVmaW5lIENTMl9CQVNFX0FERFIJCTB4QjAwMDAwMDAKLSNkZWZpbmUgQ1MzX0JBU0VfQUREUgkJMHhCMjAwMDAwMAotCi0jZGVmaW5lIENTNF9CQVNFX0FERFIJCTB4QjQwMDAwMDAKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUl9WSVJUCTB4RjQwMDAwMDAKLSNkZWZpbmUgQ1M0X1NJWkUJCVNaXzMyTQotCi0jZGVmaW5lIENTNV9CQVNFX0FERFIJCTB4QjYwMDAwMDAKLSNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIJMHhCQzAwMDAwMAotCi0vKgogICogSVJBTQogICovCi0jZGVmaW5lIElSQU1fQkFTRV9BRERSCQkweDFGRkMwMDAwCS8qIGludGVybmFsIHJhbSAqLwotI2RlZmluZSBJUkFNX0JBU0VfQUREUl9WSVJUCTB4RjgwMDAwMDAKLSNkZWZpbmUgSVJBTV9TSVpFCQlTWl8xNksKKyNkZWZpbmUgTVgzMV9JUkFNX0JBU0VfQUREUgkJMHgxRkZDMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVgzMV9JUkFNX1NJWkUJCQlTWl8xNksKIAotLyoKLSAqIEwyQ0MKLSAqLwotI2RlZmluZSBMMkNDX0JBU0VfQUREUgkJMHgzMDAwMDAwMAotI2RlZmluZSBMMkNDX0JBU0VfQUREUl9WSVJUCTB4RjkwMDAwMDAKLSNkZWZpbmUgTDJDQ19TSVpFCQlTWl8xTQotCi0vKgotICogQUlQUyAxCi0gKi8KLSNkZWZpbmUgQUlQUzFfQkFTRV9BRERSCQkweDQzRjAwMDAwCi0jZGVmaW5lIEFJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKLSNkZWZpbmUgQUlQUzFfU0laRQkJU1pfMU0KLQotI2RlZmluZSBNQVhfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKLSNkZWZpbmUgRVZUTU9OX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwODAwMCkKLSNkZWZpbmUgQ0xLQ1RMX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKLSNkZWZpbmUgRVRCX1NMT1Q0X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKLSNkZWZpbmUgRVRCX1NMT1Q1X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKLSNkZWZpbmUgRUNUX0NUSU9fQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDE4MDAwKQotI2RlZmluZSBJMkNfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKLSNkZWZpbmUgSTJDM19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQogI2RlZmluZSBPVEdfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKICNkZWZpbmUgQVRBX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCi0jZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCi0jZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCi0jZGVmaW5lIEkyQzJfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKLSNkZWZpbmUgT1dJUkVfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5QzAwMCkKLSNkZWZpbmUgU1NJMV9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEEwMDAwKQotI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEE0MDAwKQotI2RlZmluZSBLUFBfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBODAwMCkKLSNkZWZpbmUgSU9NVVhDX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBQzAwMCkKICNkZWZpbmUgVUFSVDRfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCMDAwMCkKICNkZWZpbmUgVUFSVDVfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCNDAwMCkKLSNkZWZpbmUgRUNUX0lQMV9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjgwMDApCi0jZGVmaW5lIEVDVF9JUDJfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEJDMDAwKQotCi0vKgotICogU1BCQSBnbG9iYWwgbW9kdWxlIGVuYWJsZWQgIzAKLSAqLwotI2RlZmluZSBTUEJBMF9CQVNFX0FERFIgCTB4NTAwMDAwMDAKLSNkZWZpbmUgU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhGQzEwMDAwMAotI2RlZmluZSBTUEJBMF9TSVpFCQlTWl8xTQogCiAjZGVmaW5lIE1NQ19TREhDMV9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMDQwMDApCiAjZGVmaW5lIE1NQ19TREhDMl9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCi0jZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMEMwMDApCi0jZGVmaW5lIENTUEkyX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMTAwMDApCi0jZGVmaW5lIFNTSTJfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKICNkZWZpbmUgU0lNMV9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDE4MDAwKQogI2RlZmluZSBJSU1fQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxQzAwMCkKLSNkZWZpbmUgQVRBX0RNQV9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjAwMDApCi0jZGVmaW5lIE1TSEMxX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCi0jZGVmaW5lIE1TSEMyX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCi0jZGVmaW5lIFNQQkFfQ1RSTF9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwM0MwMDApCiAKLS8qCi0gKiBBSVBTIDIKLSAqLwotI2RlZmluZSBBSVBTMl9CQVNFX0FERFIJCTB4NTNGMDAwMDAKLSNkZWZpbmUgQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhGQzIwMDAwMAotI2RlZmluZSBBSVBTMl9TSVpFCQlTWl8xTQotI2RlZmluZSBDQ01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKICNkZWZpbmUgQ1NQSTNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4NDAwMCkKICNkZWZpbmUgRklSSV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDhDMDAwKQotI2RlZmluZSBHUFQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCi0jZGVmaW5lIEVQSVQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCi0jZGVmaW5lIEVQSVQyX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCi0jZGVmaW5lIEdQSU8zX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCi0jZGVmaW5lIFNDQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQogI2RlZmluZSBTQ01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBRTAwMCkKICNkZWZpbmUgU01OX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQUYwMDApCi0jZGVmaW5lIFJOR0FfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBCMDAwMCkKLSNkZWZpbmUgSVBVX0NUUkxfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEMwMDAwKQotI2RlZmluZSBBVURNVVhfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEM0MDAwKQogI2RlZmluZSBNUEVHNF9FTkNfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEM4MDAwKQotI2RlZmluZSBHUElPMV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMENDMDAwKQotI2RlZmluZSBHUElPMl9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQwMDAwKQotI2RlZmluZSBTRE1BX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDQwMDApCi0jZGVmaW5lIFJUQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ4MDAwKQotI2RlZmluZSBXRE9HX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwREMwMDApCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEUwMDAwKQotI2RlZmluZSBSVElDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRUMwMDApCiAKLS8qCi0gKiBST01QIGFuZCBBVklDCi0gKi8KLSNkZWZpbmUgUk9NUF9CQVNFX0FERFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgUk9NUF9CQVNFX0FERFJfVklSVAkweEZDNTAwMDAwCi0jZGVmaW5lIFJPTVBfU0laRQkJU1pfMU0KKyNkZWZpbmUgTVgzMV9ORkNfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQogCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSCQkweDY4MDAwMDAwCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSX1ZJUlQJMHhGQzQwMDAwMAotI2RlZmluZSBBVklDX1NJWkUJCVNaXzFNCi0KLS8qCi0gKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzCi0gKi8KLSNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUgkweEI4MDAwMDAwCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFJfVklSVAkweEZDMzIwMDAwCi0jZGVmaW5lIFhfTUVNQ19TSVpFCQlTWl82NEsKLQotI2RlZmluZSBORkNfQkFTRV9BRERSCQkoWF9NRU1DX0JBU0VfQUREUiArIDB4MDAwMCkKLSNkZWZpbmUgRVNEQ1RMX0JBU0VfQUREUgkoWF9NRU1DX0JBU0VfQUREUiArIDB4MTAwMCkKLSNkZWZpbmUgV0VJTV9CQVNFX0FERFIJCShYX01FTUNfQkFTRV9BRERSICsgMHgyMDAwKQotI2RlZmluZSBNM0lGX0JBU0VfQUREUgkJKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCi0jZGVmaW5lIEVNSV9DVExfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHg0MDAwKQotI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUglFTUlfQ1RMX0JBU0VfQUREUgotCi0vKgotICogTWVtb3J5IHJlZ2lvbnMgYW5kIENTCi0gKi8KLSNkZWZpbmUgSVBVX01FTV9CQVNFX0FERFIJMHg3MDAwMDAwMAotI2RlZmluZSBDU0QwX0JBU0VfQUREUgkJMHg4MDAwMDAwMAotI2RlZmluZSBDU0QxX0JBU0VfQUREUgkJMHg5MDAwMDAwMAotI2RlZmluZSBDUzBfQkFTRV9BRERSCQkweEEwMDAwMDAwCi0jZGVmaW5lIENTMV9CQVNFX0FERFIJCTB4QTgwMDAwMDAKLSNkZWZpbmUgQ1MyX0JBU0VfQUREUgkJMHhCMDAwMDAwMAotI2RlZmluZSBDUzNfQkFTRV9BRERSCQkweEIyMDAwMDAwCi0KLSNkZWZpbmUgQ1M0X0JBU0VfQUREUgkJMHhCNDAwMDAwMAotI2RlZmluZSBDUzRfQkFTRV9BRERSX1ZJUlQJMHhGNDAwMDAwMAotI2RlZmluZSBDUzRfU0laRQkJU1pfMzJNCi0KLSNkZWZpbmUgQ1M1X0JBU0VfQUREUgkJMHhCNjAwMDAwMAotI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUgkweEJDMDAwMDAwCi0KLS8qIQotICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQotICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAotICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAotICogaXQgcmV0dXJucyAweERFQURCRUVGCi0gKi8KLSNkZWZpbmUgSU9fQUREUkVTUyh4KSAgIFwKLQkodm9pZCBfX2lvbWVtICopIFwKLQkoKCh4ID49IElSQU1fQkFTRV9BRERSKSAmJiAoeCA8IChJUkFNX0JBU0VfQUREUiArIElSQU1fU0laRSkpKSA/IElSQU1fSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEwyQ0NfQkFTRV9BRERSKSAmJiAoeCA8IChMMkNDX0JBU0VfQUREUiArIEwyQ0NfU0laRSkpKSA/IEwyQ0NfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEFJUFMxX0JBU0VfQUREUikgJiYgKHggPCAoQUlQUzFfQkFTRV9BRERSICsgQUlQUzFfU0laRSkpKSA/IEFJUFMxX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBTUEJBMF9CQVNFX0FERFIpICYmICh4IDwgKFNQQkEwX0JBU0VfQUREUiArIFNQQkEwX1NJWkUpKSkgPyBTUEJBMF9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gQUlQUzJfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBTMl9CQVNFX0FERFIgKyBBSVBTMl9TSVpFKSkpID8gQUlQUzJfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IFJPTVBfQkFTRV9BRERSKSAmJiAoeCA8IChST01QX0JBU0VfQUREUiArIFJPTVBfU0laRSkpKSA/IFJPTVBfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEFWSUNfQkFTRV9BRERSKSAmJiAoeCA8IChBVklDX0JBU0VfQUREUiArIEFWSUNfU0laRSkpKSA/IEFWSUNfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IENTNF9CQVNFX0FERFIpICYmICh4IDwgKENTNF9CQVNFX0FERFIgKyBDUzRfU0laRSkpKSA/IENTNF9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gWF9NRU1DX0JBU0VfQUREUikgJiYgKHggPCAoWF9NRU1DX0JBU0VfQUREUiArIFhfTUVNQ19TSVpFKSkpID8gWF9NRU1DX0lPX0FERFJFU1MoeCk6XAotCTB4REVBREJFRUYpCi0KLS8qCi0gKiBkZWZpbmUgdGhlIGFkZHJlc3MgbWFwcGluZyBtYWNyb3M6IGluIHBoeXNpY2FsIGFkZHJlc3Mgb3JkZXIKLSAqLwotCi0jZGVmaW5lIElSQU1fSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gSVJBTV9CQVNFX0FERFIpICsgSVJBTV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBMMkNDX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIEwyQ0NfQkFTRV9BRERSKSArIEwyQ0NfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQUlQUzFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQUzFfQkFTRV9BRERSKSArIEFJUFMxX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFNQQkEwX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIFNQQkEwX0JBU0VfQUREUikgKyBTUEJBMF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBSVBTMl9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBBSVBTMl9CQVNFX0FERFIpICsgQUlQUzJfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUk9NUF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBST01QX0JBU0VfQUREUikgKyBST01QX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQVZJQ19CQVNFX0FERFIpICsgQVZJQ19CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBDUzRfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQ1M0X0JBU0VfQUREUikgKyBDUzRfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgWF9NRU1DX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFBDTUNJQV9JT19BRERSRVNTKHgpIFwKLQkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQotCi0vKgotICogSW50ZXJydXB0IG51bWJlcnMKLSAqLwotI2RlZmluZSBNWENfSU5UX1BFTl9BRFM3ODQzCTAKLSNkZWZpbmUgTVhDX0lOVF9SRVNWMQkJMQotI2RlZmluZSBNWENfSU5UX0NTODkwMEEJCTIKLSNkZWZpbmUgTVhDX0lOVF9JMkMzCQkzCi0jZGVmaW5lIE1YQ19JTlRfSTJDMgkJNAogI2RlZmluZSBNWENfSU5UX01QRUc0X0VOQ09ERVIJNQotI2RlZmluZSBNWENfSU5UX1JUSUMJCTYKICNkZWZpbmUgTVhDX0lOVF9GSVJJCQk3Ci0jZGVmaW5lIE1YQ19JTlRfTU1DX1NESEMyCTgKKyNkZWZpbmUgTVgzMV9JTlRfTU1DX1NESEMyCTgKICNkZWZpbmUgTVhDX0lOVF9NTUNfU0RIQzEJOQotI2RlZmluZSBNWENfSU5UX0kyQwkJMTAKLSNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMQotI2RlZmluZSBNWENfSU5UX1NTSTEJCTEyCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTEzCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE0Ci0jZGVmaW5lIE1YQ19JTlRfQVRBCQkxNQorI2RlZmluZSBNWDMxX0lOVF9TU0kyCQkxMQorI2RlZmluZSBNWDMxX0lOVF9TU0kxCQkxMgogI2RlZmluZSBNWENfSU5UX01CWAkJMTYKICNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJMTcKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMwkJMTgKLSNkZWZpbmUgTVhDX0lOVF9JSU0JCTE5CiAjZGVmaW5lIE1YQ19JTlRfU0lNMgkJMjAKICNkZWZpbmUgTVhDX0lOVF9TSU0xCQkyMQotI2RlZmluZSBNWENfSU5UX1JOR0EJCTIyCi0jZGVmaW5lIE1YQ19JTlRfRVZUTU9OCQkyMwotI2RlZmluZSBNWENfSU5UX0tQUAkJMjQKLSNkZWZpbmUgTVhDX0lOVF9SVEMJCTI1Ci0jZGVmaW5lIE1YQ19JTlRfUFdNCQkyNgotI2RlZmluZSBNWENfSU5UX0VQSVQyCQkyNwotI2RlZmluZSBNWENfSU5UX0VQSVQxCQkyOAotI2RlZmluZSBNWENfSU5UX0dQVAkJMjkKLSNkZWZpbmUgTVhDX0lOVF9SRVNWMzAJCTMwCi0jZGVmaW5lIE1YQ19JTlRfUkVTVjMxCQkzMQotI2RlZmluZSBNWENfSU5UX1VBUlQyCQkzMgotI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMzMKLSNkZWZpbmUgTVhDX0lOVF9TRE1BCQkzNAorI2RlZmluZSBNWENfSU5UX0NDTV9EVkZTCTMxCiAjZGVmaW5lIE1YQ19JTlRfVVNCMQkJMzUKICNkZWZpbmUgTVhDX0lOVF9VU0IyCQkzNgogI2RlZmluZSBNWENfSU5UX1VTQjMJCTM3CiAjZGVmaW5lIE1YQ19JTlRfVVNCNAkJMzgKLSNkZWZpbmUgTVhDX0lOVF9NU0hDMQkJMzkKICNkZWZpbmUgTVhDX0lOVF9NU0hDMgkJNDAKLSNkZWZpbmUgTVhDX0lOVF9JUFVfRVJSCQk0MQotI2RlZmluZSBNWENfSU5UX0lQVV9TWU4JCTQyCi0jZGVmaW5lIE1YQ19JTlRfUkVTVjQzCQk0MwotI2RlZmluZSBNWENfSU5UX1JFU1Y0NAkJNDQKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMQkJNDUKICNkZWZpbmUgTVhDX0lOVF9VQVJUNAkJNDYKICNkZWZpbmUgTVhDX0lOVF9VQVJUNQkJNDcKLSNkZWZpbmUgTVhDX0lOVF9FQ1QJCTQ4Ci0jZGVmaW5lIE1YQ19JTlRfU0NDX1NDTQkJNDkKLSNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OCQk1MAotI2RlZmluZSBNWENfSU5UX0dQSU8yCQk1MQotI2RlZmluZSBNWENfSU5UX0dQSU8xCQk1MgogI2RlZmluZSBNWENfSU5UX0NDTQkJNTMKICNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTU0Ci0jZGVmaW5lIE1YQ19JTlRfV0RPRwkJNTUKLSNkZWZpbmUgTVhDX0lOVF9HUElPMwkJNTYKLSNkZWZpbmUgTVhDX0lOVF9SRVNWNTcJCTU3Ci0jZGVmaW5lIE1YQ19JTlRfRVhUX1BPV0VSCTU4Ci0jZGVmaW5lIE1YQ19JTlRfRVhUX1RFTVBFUgk1OQotI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MAk2MAotI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MQk2MQotI2RlZmluZSBNWENfSU5UX0VYVF9XRE9HCTYyCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1RWCQk2MwogCi0jZGVmaW5lIFBST0RfU0lHTkFUVVJFCQkweDEJLyogRm9yIE1YMzEgKi8KLQotLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDMxICovCi0jZGVmaW5lIENISVBfUkVWXzFfMAkJMHgxMAotI2RlZmluZSBDSElQX1JFVl8xXzEJCTB4MTEKLSNkZWZpbmUgQ0hJUF9SRVZfMV8yCQkweDEyCi0jZGVmaW5lIENISVBfUkVWXzFfMwkJMHgxMwotI2RlZmluZSBDSElQX1JFVl8yXzAJCTB4MjAKLSNkZWZpbmUgQ0hJUF9SRVZfMl8xCQkweDIxCi0jZGVmaW5lIENISVBfUkVWXzJfMgkJMHgyMgotI2RlZmluZSBDSElQX1JFVl8yXzMJCTB4MjMKLSNkZWZpbmUgQ0hJUF9SRVZfM18wCQkweDMwCi0jZGVmaW5lIENISVBfUkVWXzNfMQkJMHgzMQotI2RlZmluZSBDSElQX1JFVl8zXzIJCTB4MzIKLQotI2RlZmluZSBTWVNURU1fUkVWX01JTgkJQ0hJUF9SRVZfMV8wCi0jZGVmaW5lIFNZU1RFTV9SRVZfTlVNCQkzCi0KLS8qIGdwaW8gYW5kIGdwaW8gYmFzZWQgaW50ZXJydXB0IGhhbmRsaW5nICovCi0jZGVmaW5lIEdQSU9fRFIJCSAJMHgwMAotI2RlZmluZSBHUElPX0dESVIJIAkweDA0Ci0jZGVmaW5lIEdQSU9fUFNSCSAJMHgwOAotI2RlZmluZSBHUElPX0lDUjEJIAkweDBDCi0jZGVmaW5lIEdQSU9fSUNSMgkgCTB4MTAKLSNkZWZpbmUgR1BJT19JTVIJIAkweDE0Ci0jZGVmaW5lIEdQSU9fSVNSCSAJMHgxOAotI2RlZmluZSBHUElPX0lOVF9MT1dfTEVWCTB4MAotI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDEKLSNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFCTB4MgotI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgzCi0jZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAotCi0vKiBNYW5kYXRvcnkgZGVmaW5lcyB1c2VkIGdsb2JhbGx5ICovCi0KLS8qIHRoaXMgQ1BVIHN1cHBvcnRzIHVwIHRvIDk2IEdQSU9zICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCTk2Ci0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9fTVhDX0JPT1RfVU5DT01QUkVTUykKLQotLyogdGhpcyBpcyBhIGkuTVgzMSBDUFUgKi8KLSNkZWZpbmUgY3B1X2lzX214MzEoKQkJKDEpCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKLQotc3RhdGljIGlubGluZSBpbnQgbXgzMV9yZXZpc2lvbih2b2lkKQotewotCXJldHVybiBzeXN0ZW1fcmV2OwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgzMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NjVmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBJUkFNCisgKi8KKyNkZWZpbmUgTVgzNV9JUkFNX0JBU0VfQUREUgkJMHgxMDAwMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVgzNV9JUkFNX1NJWkUJCVNaXzEyOEsKKworI2RlZmluZSBNWENfRkVDX0JBU0VfQUREUgkweDUwMDM4MDAwCisjZGVmaW5lIE1YMzVfTkZDX0JBU0VfQUREUgkweEJCMDAwMDAwCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YQ19JTlRfT1dJUkUJCTIKKyNkZWZpbmUgTVgzNV9JTlRfTU1DX1NESEMxCTcKKyNkZWZpbmUgTVhDX0lOVF9NTUNfU0RIQzIJOAorI2RlZmluZSBNWENfSU5UX01NQ19TREhDMwk5CisjZGVmaW5lIE1YMzVfSU5UX1NTSTEJCTExCisjZGVmaW5lIE1YMzVfSU5UX1NTSTIJCTEyCisjZGVmaW5lIE1YQ19JTlRfR1BVMkQJCTE2CisjZGVmaW5lIE1YQ19JTlRfQVNSQwkJMTcKKyNkZWZpbmUgTVhDX0lOVF9VU0JIUwkJMzUKKyNkZWZpbmUgTVhDX0lOVF9VU0JPVEcJCTM3CisjZGVmaW5lIE1YQ19JTlRfRVNBSQkJNDAKKyNkZWZpbmUgTVhDX0lOVF9DQU4xCQk0MworI2RlZmluZSBNWENfSU5UX0NBTjIJCTQ0CisjZGVmaW5lIE1YQ19JTlRfTUxCCQk0NgorI2RlZmluZSBNWENfSU5UX1NQRElGCQk0NworI2RlZmluZSBNWENfSU5UX0ZFQwkJNTcKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M19jYW1lcmEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkN2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIG14M19jYW1lcmEuaCAtIGkuTVgzeCBjYW1lcmEgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBHdWVubmFkaSBMaWFraG92ZXRza2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX01YM19DQU1FUkFfSF8KKyNkZWZpbmUgX01YM19DQU1FUkFfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjZGVmaW5lIE1YM19DQU1FUkFfQ0xLX1NSQwkxCisjZGVmaW5lIE1YM19DQU1FUkFfRVhUX1ZTWU5DCTIKKyNkZWZpbmUgTVgzX0NBTUVSQV9EUAkJNAorI2RlZmluZSBNWDNfQ0FNRVJBX1BDUAkJOAorI2RlZmluZSBNWDNfQ0FNRVJBX0hTUAkJMHgxMAorI2RlZmluZSBNWDNfQ0FNRVJBX1ZTUAkJMHgyMAorI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF80CTB4NDAKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOAkweDgwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwCTB4MTAwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzE1CTB4MjAwCisKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfTUFTSyAoTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBcCisJCQkJICAgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTAgfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKKworLyoqCisgKiBzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSAtIGkuTVgzeCBjYW1lcmEgcGxhdGZvcm0gZGF0YQorICogQGZsYWdzOglNWDNfQ0FNRVJBXyogZmxhZ3MKKyAqIEBtY2xrXzEwa2h6OgltYXN0ZXIgY2xvY2sgZnJlcXVlbmN5IGluIDEwa0h6IHVuaXRzCisgKiBAZG1hX2RldjoJSVBVIERNQSBkZXZpY2UgdG8gbWF0Y2ggYWdhaW5zdCBpbiBjaGFubmVsIGFsbG9jYXRpb24KKyAqLworc3RydWN0IG14M19jYW1lcmFfcGRhdGEgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtY2xrXzEwa2h6OworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNmYi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M2ZiLmgKaW5kZXggZTM5MWE3Ni4uYWMyNGM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M2ZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M2ZiLmgKQEAgLTE0LDI1ICsxNCwyNSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAKIC8qIFByb3ByaWV0YXJ5IEZCX1NZTkNfIGZsYWdzICovCi0jZGVmaW5lIEZCX1NZTkNfT0VfQUNUX0hJR0ggICAgMHg4MDAwMDAwMAotI2RlZmluZSBGQl9TWU5DX0NMS19JTlZFUlQgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19EQVRBX0lOVkVSVCAgICAweDIwMDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfQ0xLX0lETEVfRU4gICAgMHgxMDAwMDAwMAotI2RlZmluZSBGQl9TWU5DX1NIQVJQX01PREUgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19TV0FQX1JHQiAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfQ0xLX1NFTF9FTiAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBGQl9TWU5DX09FX0FDVF9ISUdICTB4ODAwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19DTEtfSU5WRVJUCTB4NDAwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19EQVRBX0lOVkVSVAkweDIwMDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfQ0xLX0lETEVfRU4JMHgxMDAwMDAwMAorI2RlZmluZSBGQl9TWU5DX1NIQVJQX01PREUJMHgwODAwMDAwMAorI2RlZmluZSBGQl9TWU5DX1NXQVBfUkdCCTB4MDQwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19DTEtfU0VMX0VOCTB4MDIwMDAwMDAKIAogLyoqCiAgKiBzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSAtIG14M2ZiIHBsYXRmb3JtIGRhdGEKICAqCi0gKiBAZG1hX2RldjogICBwb2ludGVyIHRvIHRoZSBkbWEtZGV2aWNlLCB1c2VkIGZvciBkbWEtc2xhdmUgY29ubmVjdGlvbgotICogQG1vZGU6ICAgICAgcG9pbnRlciB0byBhIHBsYXRmb3JtLXByb3ZpZGVkIHBlciBteGNfcmVnaXN0ZXJfZmIoKSB2aWRlb21vZGUKKyAqIEBkbWFfZGV2Oglwb2ludGVyIHRvIHRoZSBkbWEtZGV2aWNlLCB1c2VkIGZvciBkbWEtc2xhdmUgY29ubmVjdGlvbgorICogQG1vZGU6CXBvaW50ZXIgdG8gYSBwbGF0Zm9ybS1wcm92aWRlZCBwZXIgbXhjX3JlZ2lzdGVyX2ZiKCkgdmlkZW9tb2RlCiAgKi8KIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIHsKLSAgICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAgICAgICAgICpkbWFfZGV2OwotICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7Ci0gICAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAgICAgICAqbW9kZTsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9tb2RlczsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7CisJY29uc3QgY2hhcgkJCSpuYW1lOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUJKm1vZGU7CisJaW50CQkJCW51bV9tb2RlczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3OGM2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCisjZW5kaWYKKworLyoKKyAqIE1YMzEgbWVtb3J5IG1hcDoKKyAqCisgKiBWaXJ0CQlQaHlzCQlTaXplCVdoYXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkMwMDAwMDAJNDNGMDAwMDAJMU0JQUlQUyAxCisgKiBGQzEwMDAwMAk1MDAwMDAwMAkxTQlTUEJBCisgKiBGQzIwMDAwMAk1M0YwMDAwMAkxTQlBSVBTIDIKKyAqIEZDNTAwMDAwCTYwMDAwMDAwCTEyOE0JUk9NUEFUQ0gKKyAqIEZDNDAwMDAwCTY4MDAwMDAwCTEyOE0JQVZJQworICogICAgICAgICAJNzAwMDAwMDAJMjU2TQlJUFUgKE1BWCBNMikKKyAqICAgICAgICAgCTgwMDAwMDAwCTI1Nk0JQ1NEMCBTRFJBTS9ERFIKKyAqICAgICAgICAgCTkwMDAwMDAwCTI1Nk0JQ1NEMSBTRFJBTS9ERFIKKyAqICAgICAgICAgCUEwMDAwMDAwCTEyOE0JQ1MwIEZsYXNoCisgKiAgICAgICAgIAlBODAwMDAwMAkxMjhNCUNTMSBGbGFzaAorICogICAgICAgICAJQjAwMDAwMDAJMzJNCUNTMgorICogICAgICAgICAJQjIwMDAwMDAJMzJNCUNTMworICogRjQwMDAwMDAJQjQwMDAwMDAJMzJNCUNTNAorICogICAgICAgICAJQjYwMDAwMDAJMzJNCUNTNQorICogRkMzMjAwMDAJQjgwMDAwMDAJNjRLCU5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKKyAqICAgICAgICAgCUMwMDAwMDAwCTY0TQlQQ01DSUEvQ0YKKyAqLworCisjZGVmaW5lIENTMF9CQVNFX0FERFIJCTB4QTAwMDAwMDAKKyNkZWZpbmUgQ1MxX0JBU0VfQUREUgkJMHhBODAwMDAwMAorI2RlZmluZSBDUzJfQkFTRV9BRERSCQkweEIwMDAwMDAwCisjZGVmaW5lIENTM19CQVNFX0FERFIJCTB4QjIwMDAwMDAKKworI2RlZmluZSBDUzRfQkFTRV9BRERSCQkweEI0MDAwMDAwCisjZGVmaW5lIENTNF9CQVNFX0FERFJfVklSVAkweEY0MDAwMDAwCisjZGVmaW5lIENTNF9TSVpFCQlTWl8zMk0KKworI2RlZmluZSBDUzVfQkFTRV9BRERSCQkweEI2MDAwMDAwCisjZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSCTB4QkMwMDAwMDAKKworLyoKKyAqIEwyQ0MKKyAqLworI2RlZmluZSBMMkNDX0JBU0VfQUREUgkJMHgzMDAwMDAwMAorI2RlZmluZSBMMkNDX1NJWkUJCVNaXzFNCisKKy8qCisgKiBBSVBTIDEKKyAqLworI2RlZmluZSBBSVBTMV9CQVNFX0FERFIJCTB4NDNGMDAwMDAKKyNkZWZpbmUgQUlQUzFfQkFTRV9BRERSX1ZJUlQJMHhGQzAwMDAwMAorI2RlZmluZSBBSVBTMV9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1BWF9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDA0MDAwKQorI2RlZmluZSBFVlRNT05fQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDA4MDAwKQorI2RlZmluZSBDTEtDVExfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDBDMDAwKQorI2RlZmluZSBFVEJfU0xPVDRfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFVEJfU0xPVDVfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDE0MDAwKQorI2RlZmluZSBFQ1RfQ1RJT19CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMTgwMDApCisjZGVmaW5lIEkyQ19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQorI2RlZmluZSBJMkMzX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwODQwMDApCisjZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCisjZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCisjZGVmaW5lIEkyQzJfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKKyNkZWZpbmUgT1dJUkVfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5QzAwMCkKKyNkZWZpbmUgU1NJMV9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEEwMDAwKQorI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEE0MDAwKQorI2RlZmluZSBLUFBfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBODAwMCkKKyNkZWZpbmUgSU9NVVhDX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBQzAwMCkKKyNkZWZpbmUgRUNUX0lQMV9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjgwMDApCisjZGVmaW5lIEVDVF9JUDJfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEJDMDAwKQorCisvKgorICogU1BCQSBnbG9iYWwgbW9kdWxlIGVuYWJsZWQgIzAKKyAqLworI2RlZmluZSBTUEJBMF9CQVNFX0FERFIgCTB4NTAwMDAwMDAKKyNkZWZpbmUgU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhGQzEwMDAwMAorI2RlZmluZSBTUEJBMF9TSVpFCQlTWl8xTQorCisjZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMEMwMDApCisjZGVmaW5lIENTUEkyX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMTAwMDApCisjZGVmaW5lIFNTSTJfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKKyNkZWZpbmUgQVRBX0RNQV9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjAwMDApCisjZGVmaW5lIE1TSEMxX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCisjZGVmaW5lIFNQQkFfQ1RSTF9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwM0MwMDApCisKKy8qCisgKiBBSVBTIDIKKyAqLworI2RlZmluZSBBSVBTMl9CQVNFX0FERFIJCTB4NTNGMDAwMDAKKyNkZWZpbmUgQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhGQzIwMDAwMAorI2RlZmluZSBBSVBTMl9TSVpFCQlTWl8xTQorI2RlZmluZSBDQ01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgR1BUMV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBFUElUMV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDk0MDAwKQorI2RlZmluZSBFUElUMl9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDk4MDAwKQorI2RlZmluZSBHUElPM19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEE0MDAwKQorI2RlZmluZSBTQ0NfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBQzAwMCkKKyNkZWZpbmUgUk5HQV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEIwMDAwKQorI2RlZmluZSBJUFVfQ1RSTF9CQVNFX0FERFIJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQzAwMDApCisjZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQzQwMDApCisjZGVmaW5lIEdQSU8xX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQ0MwMDApCisjZGVmaW5lIEdQSU8yX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDAwMDApCisjZGVmaW5lIFNETUFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBENDAwMCkKKyNkZWZpbmUgUlRDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDgwMDApCisjZGVmaW5lIFdET0dfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEQzAwMCkKKyNkZWZpbmUgUFdNX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRTAwMDApCisjZGVmaW5lIFJUSUNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBFQzAwMCkKKworLyoKKyAqIFJPTVAgYW5kIEFWSUMKKyAqLworI2RlZmluZSBST01QX0JBU0VfQUREUgkJMHg2MDAwMDAwMAorI2RlZmluZSBST01QX0JBU0VfQUREUl9WSVJUCTB4RkM1MDAwMDAKKyNkZWZpbmUgUk9NUF9TSVpFCQlTWl8xTQorCisjZGVmaW5lIEFWSUNfQkFTRV9BRERSCQkweDY4MDAwMDAwCisjZGVmaW5lIEFWSUNfQkFTRV9BRERSX1ZJUlQJMHhGQzQwMDAwMAorI2RlZmluZSBBVklDX1NJWkUJCVNaXzFNCisKKy8qCisgKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzCisgKi8KKyNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUgkweEI4MDAwMDAwCisjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFJfVklSVAkweEZDMzIwMDAwCisjZGVmaW5lIFhfTUVNQ19TSVpFCQlTWl82NEsKKworI2RlZmluZSBFU0RDVExfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBXRUlNX0JBU0VfQUREUgkJKFhfTUVNQ19CQVNFX0FERFIgKyAweDIwMDApCisjZGVmaW5lIE0zSUZfQkFTRV9BRERSCQkoWF9NRU1DX0JBU0VfQUREUiArIDB4MzAwMCkKKyNkZWZpbmUgRU1JX0NUTF9CQVNFX0FERFIJKFhfTUVNQ19CQVNFX0FERFIgKyAweDQwMDApCisjZGVmaW5lIFBDTUNJQV9DVExfQkFTRV9BRERSCUVNSV9DVExfQkFTRV9BRERSCisKKy8qCisgKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKKyAqLworI2RlZmluZSBJUFVfTUVNX0JBU0VfQUREUgkweDcwMDAwMDAwCisjZGVmaW5lIENTRDBfQkFTRV9BRERSCQkweDgwMDAwMDAwCisjZGVmaW5lIENTRDFfQkFTRV9BRERSCQkweDkwMDAwMDAwCisKKy8qIQorICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQorICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAorICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAorICogaXQgcmV0dXJucyAweERFQURCRUVGCisgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KSAgIFwKKwkodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgXAorCSgoKHggPj0gQUlQUzFfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBTMV9CQVNFX0FERFIgKyBBSVBTMV9TSVpFKSkpID8gQUlQUzFfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IFNQQkEwX0JBU0VfQUREUikgJiYgKHggPCAoU1BCQTBfQkFTRV9BRERSICsgU1BCQTBfU0laRSkpKSA/IFNQQkEwX0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBBSVBTMl9CQVNFX0FERFIpICYmICh4IDwgKEFJUFMyX0JBU0VfQUREUiArIEFJUFMyX1NJWkUpKSkgPyBBSVBTMl9JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gUk9NUF9CQVNFX0FERFIpICYmICh4IDwgKFJPTVBfQkFTRV9BRERSICsgUk9NUF9TSVpFKSkpID8gUk9NUF9JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gQVZJQ19CQVNFX0FERFIpICYmICh4IDwgKEFWSUNfQkFTRV9BRERSICsgQVZJQ19TSVpFKSkpID8gQVZJQ19JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gQ1M0X0JBU0VfQUREUikgJiYgKHggPCAoQ1M0X0JBU0VfQUREUiArIENTNF9TSVpFKSkpID8gQ1M0X0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBYX01FTUNfSU9fQUREUkVTUyh4KTpcCisJMHhERUFEQkVFRikKKworLyoKKyAqIGRlZmluZSB0aGUgYWRkcmVzcyBtYXBwaW5nIG1hY3JvczogaW4gcGh5c2ljYWwgYWRkcmVzcyBvcmRlcgorICovCisjZGVmaW5lIEwyQ0NfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTDJDQ19CQVNFX0FERFIpICsgTDJDQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBBSVBTMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBBSVBTMV9CQVNFX0FERFIpICsgQUlQUzFfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgU1BCQTBfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gU1BCQTBfQkFTRV9BRERSKSArIFNQQkEwX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIEFJUFMyX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIEFJUFMyX0JBU0VfQUREUikgKyBBSVBTMl9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBST01QX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIFJPTVBfQkFTRV9BRERSKSArIFJPTVBfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgQVZJQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBBVklDX0JBU0VfQUREUikgKyBBVklDX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YQ19JTlRfSTJDMwkJMworI2RlZmluZSBNWENfSU5UX0kyQzIJCTQKKyNkZWZpbmUgTVhDX0lOVF9SVElDCQk2CisjZGVmaW5lIE1YQ19JTlRfSTJDCQkxMAorI2RlZmluZSBNWENfSU5UX0NTUEkyCQkxMworI2RlZmluZSBNWENfSU5UX0NTUEkxCQkxNAorI2RlZmluZSBNWENfSU5UX0FUQQkJMTUKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMwkJMTgKKyNkZWZpbmUgTVhDX0lOVF9JSU0JCTE5CisjZGVmaW5lIE1YQ19JTlRfUk5HQQkJMjIKKyNkZWZpbmUgTVhDX0lOVF9FVlRNT04JCTIzCisjZGVmaW5lIE1YQ19JTlRfS1BQCQkyNAorI2RlZmluZSBNWENfSU5UX1JUQwkJMjUKKyNkZWZpbmUgTVhDX0lOVF9QV00JCTI2CisjZGVmaW5lIE1YQ19JTlRfRVBJVDIJCTI3CisjZGVmaW5lIE1YQ19JTlRfRVBJVDEJCTI4CisjZGVmaW5lIE1YQ19JTlRfR1BUCQkyOQorI2RlZmluZSBNWENfSU5UX1BPV0VSX0ZBSUwJMzAKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMgkJMzIKKyNkZWZpbmUgTVhDX0lOVF9OQU5ERkMJCTMzCisjZGVmaW5lIE1YQ19JTlRfU0RNQQkJMzQKKyNkZWZpbmUgTVhDX0lOVF9NU0hDMQkJMzkKKyNkZWZpbmUgTVhDX0lOVF9JUFVfRVJSCQk0MQorI2RlZmluZSBNWENfSU5UX0lQVV9TWU4JCTQyCisjZGVmaW5lIE1YQ19JTlRfVUFSVDEJCTQ1CisjZGVmaW5lIE1YQ19JTlRfRUNUCQk0OAorI2RlZmluZSBNWENfSU5UX1NDQ19TQ00JCTQ5CisjZGVmaW5lIE1YQ19JTlRfU0NDX1NNTgkJNTAKKyNkZWZpbmUgTVhDX0lOVF9HUElPMgkJNTEKKyNkZWZpbmUgTVhDX0lOVF9HUElPMQkJNTIKKyNkZWZpbmUgTVhDX0lOVF9XRE9HCQk1NQorI2RlZmluZSBNWENfSU5UX0dQSU8zCQk1NgorI2RlZmluZSBNWENfSU5UX0VYVF9QT1dFUgk1OAorI2RlZmluZSBNWENfSU5UX0VYVF9URU1QRVIJNTkKKyNkZWZpbmUgTVhDX0lOVF9FWFRfU0VOU09SNjAJNjAKKyNkZWZpbmUgTVhDX0lOVF9FWFRfU0VOU09SNjEJNjEKKyNkZWZpbmUgTVhDX0lOVF9FWFRfV0RPRwk2MgorI2RlZmluZSBNWENfSU5UX0VYVF9UVgkJNjMKKworI2RlZmluZSBQUk9EX1NJR05BVFVSRQkJMHgxCS8qIEZvciBNWDMxICovCisKKy8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVgzMSAqLworI2RlZmluZSBDSElQX1JFVl8xXzAJCTB4MTAKKyNkZWZpbmUgQ0hJUF9SRVZfMV8xCQkweDExCisjZGVmaW5lIENISVBfUkVWXzFfMgkJMHgxMgorI2RlZmluZSBDSElQX1JFVl8xXzMJCTB4MTMKKyNkZWZpbmUgQ0hJUF9SRVZfMl8wCQkweDIwCisjZGVmaW5lIENISVBfUkVWXzJfMQkJMHgyMQorI2RlZmluZSBDSElQX1JFVl8yXzIJCTB4MjIKKyNkZWZpbmUgQ0hJUF9SRVZfMl8zCQkweDIzCisjZGVmaW5lIENISVBfUkVWXzNfMAkJMHgzMAorI2RlZmluZSBDSElQX1JFVl8zXzEJCTB4MzEKKyNkZWZpbmUgQ0hJUF9SRVZfM18yCQkweDMyCisKKyNkZWZpbmUgU1lTVEVNX1JFVl9NSU4JCUNISVBfUkVWXzFfMAorI2RlZmluZSBTWVNURU1fUkVWX05VTQkJMworCisvKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLworI2RlZmluZSBHUElPX0RSCQkgCTB4MDAKKyNkZWZpbmUgR1BJT19HRElSCSAJMHgwNAorI2RlZmluZSBHUElPX1BTUgkgCTB4MDgKKyNkZWZpbmUgR1BJT19JQ1IxCSAJMHgwQworI2RlZmluZSBHUElPX0lDUjIJIAkweDEwCisjZGVmaW5lIEdQSU9fSU1SCSAJMHgxNAorI2RlZmluZSBHUElPX0lTUgkgCTB4MTgKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDAKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgxCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRQkweDIKKyNkZWZpbmUgR1BJT19JTlRfRkFMTF9FREdFCTB4MworI2RlZmluZSBHUElPX0lOVF9OT05FCQkweDQKKworLyogTWFuZGF0b3J5IGRlZmluZXMgdXNlZCBnbG9iYWxseSAqLworCisvKiB0aGlzIENQVSBzdXBwb3J0cyB1cCB0byA5NiBHUElPcyAqLworI2RlZmluZSBBUkNIX05SX0dQSU9TCQk5NgorCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiAhZGVmaW5lZChfX01YQ19CT09UX1VOQ09NUFJFU1MpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKKworc3RhdGljIGlubGluZSBpbnQgbXgzMV9yZXZpc2lvbih2b2lkKQoreworCXJldHVybiBzeXN0ZW1fcmV2OworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgzMV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCmluZGV4IGY2Y2FhYjAuLjVmYTJhMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKQEAgLTI0LDEzICsyNCw3NCBAQAogI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCiAjZW5kaWYKIAotLyogY2xlYW4gdXAgYWxsIHRoaW5ncyB0aGF0IGFyZSBub3QgdXNlZCAqLwotI2lmbmRlZiBDT05GSUdfQVJDSF9NWDMKLSMgZGVmaW5lIGNwdV9pc19teDMxKCkgKDApCisjZGVmaW5lIE1YQ19DUFVfTVgxCQkxCisjZGVmaW5lIE1YQ19DUFVfTVgyMQkJMjEKKyNkZWZpbmUgTVhDX0NQVV9NWDI3CQkyNworI2RlZmluZSBNWENfQ1BVX01YMzEJCTMxCisjZGVmaW5lIE1YQ19DUFVfTVgzNQkJMzUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19teGNfY3B1X3R5cGU7CiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfTUFDSF9NWDI3Ci0jIGRlZmluZSBjcHVfaXNfbXgyNygpICgwKQorI2lmZGVmIENPTkZJR19BUkNIX01YMQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgxCisjIGVuZGlmCisjIGRlZmluZSBjcHVfaXNfbXgxKCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDEpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MSgpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgyMQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MjEoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMjEpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MjEoKQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YMjcKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDI3KCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDI3KQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDI3KCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCisjIGlmZGVmIG14Y19jcHVfdHlwZQorIyAgdW5kZWYgbXhjX2NwdV90eXBlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgTVhDX0NQVV9NWDMxCisjIGVuZGlmCisjIGRlZmluZSBjcHVfaXNfbXgzMSgpCQkobXhjX2NwdV90eXBlID09IE1YQ19DUFVfTVgzMSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXgzMSgpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgzNQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MzUoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMzUpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MzUoKQkJKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YMikKQEAgLTM5LDQgKzEwMCw3IEBACiAjZGVmaW5lIENTQ1JfQShuKSAoSU9fQUREUkVTUyhXRUlNX0JBU0VfQUREUikgKyBuICogMHgxMCArIDB4OCkKICNlbmRpZgogCisjZGVmaW5lIGNwdV9pc19teDMoKQkoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKQorI2RlZmluZSBjcHVfaXNfbXgyKCkJKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKKwogI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBiYmZjMzc0Li5lNTYyNDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNiw5ICsyNiw2IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQotewotCWNwdV9yZXNldCgwKTsKLX0KK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19TWVNURU1fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMKaW5kZXggZGY2ZjE4My4uYTM3MTYzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LW14MS1teDIuYwpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLW14Mi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KIAogdm9pZCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9wd20uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3B3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmZiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9wd20uYwpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIHNpbXBsZSBkcml2ZXIgZm9yIFBXTSAoUHVsc2UgV2lkdGggTW9kdWxhdG9yKSBjb250cm9sbGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEZXJpdmVkIGZyb20gcHhhIFBXTSBkcml2ZXIgYnkgZXJpYyBtaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcHdtLmg+CisKKyNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMSB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMjEKKyNkZWZpbmUgUFdNX1ZFUl8xCisKKyNkZWZpbmUgUFdNQ1IJMHgwMAkvKiBQV00gQ29udHJvbCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNU1IJMHgwNAkvKiBQV00gU2FtcGxlIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01QUgkweDA4CS8qIFBXTSBQZXJpb2QgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTUNOUgkweDBDCS8qIFBXTSBDb3VudGVyIFJlZ2lzdGVyCQkqLworCisjZGVmaW5lIFBXTUNSX0hDVFIJCSgxIDw8IDE4KQkJLyogSGFsZndvcmQgRklGTyBEYXRhIFN3YXBwaW5nCSovCisjZGVmaW5lIFBXTUNSX0JDVFIJCSgxIDw8IDE3KQkJLyogQnl0ZSBGSUZPIERhdGEgU3dhcHBpbmcJKi8KKyNkZWZpbmUgUFdNQ1JfU1dSCQkoMSA8PCAxNikJCS8qIFNvZnR3YXJlIFJlc2V0CQkqLworI2RlZmluZSBQV01DUl9DTEtTUkNfUEVSQ0xLCSgwIDw8IDE1KQkJLyogUEVSQ0xLIENsb2NrIFNvdXJjZQkJKi8KKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX0NMSzMyCSgxIDw8IDE1KQkJLyogMzJLSHogQ2xvY2sgU291cmNlCQkqLworI2RlZmluZSBQV01DUl9QUkVTQ0FMRVIoeCkJKCgoeCAtIDEpICYgMHg3RikgPDwgOCkJLyogUFJFU0NBTEVSCQkJKi8KKyNkZWZpbmUgUFdNQ1JfSVJRCQkoMSA8PCA3KQkJLyogSW50ZXJydXB0IFJlcXVlc3QJCSovCisjZGVmaW5lIFBXTUNSX0lSUUVOCQkoMSA8PCA2KQkJLyogSW50ZXJydXB0IFJlcXVlc3QgRW5hYmxlCSovCisjZGVmaW5lIFBXTUNSX0ZJRk9BVgkJKDEgPDwgNSkJCS8qIEZJRk8gQXZhaWxhYmxlCQkqLworI2RlZmluZSBQV01DUl9FTgkJKDEgPDwgNCkJCS8qIEVuYWJsZXMvRGlzYWJsZXMgdGhlIFBXTQkqLworI2RlZmluZSBQV01DUl9SRVBFQVQoeCkJCSgoKHgpICYgMHgwMykgPDwgMikJLyogU2FtcGxlIFJlcGVhdHMJCSovCisjZGVmaW5lIFBXTUNSX0RJVih4KQkJKCgoeCkgJiAweDAzKSA8PCAwKQkvKiBDbG9jayBkaXZpZGVyIDIvNC84LzE2CSovCisKKyNkZWZpbmUgTUFYX0RJVgkJCSgxMjggKiAxNikKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfTUFDSF9NWDI3IHx8IGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzMQorI2RlZmluZSBQV01fVkVSXzIKKworI2RlZmluZSBQV01DUgkweDAwCS8qIFBXTSBDb250cm9sIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01TUgkweDA0CS8qIFBXTSBTdGF0dXMgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTUlSCTB4MDgJLyogUFdNIEludGVycnVwdCBSZWdpc3RlcgkqLworI2RlZmluZSBQV01TQVIJMHgwQwkvKiBQV00gU2FtcGxlIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01QUgkweDEwCS8qIFBXTSBQZXJpb2QgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTUNOUgkweDE0CS8qIFBXTSBDb3VudGVyIFJlZ2lzdGVyCQkqLworCisjZGVmaW5lIFBXTUNSX0VOCQkoMSA8PCAwKQkJLyogRW5hYmxlcy9EaXNhYmxlcyB0aGUgUFdNCSovCisjZGVmaW5lIFBXTUNSX1JFUEVBVCh4KQkJKCgoeCkgJiAweDAzKSA8PCAxKQkvKiBTYW1wbGUgUmVwZWF0cwkJKi8KKyNkZWZpbmUgUFdNQ1JfU1dSCQkoMSA8PCAzKQkJLyogU29mdHdhcmUgUmVzZXQJCSovCisjZGVmaW5lIFBXTUNSX1BSRVNDQUxFUih4KQkoKCh4IC0gMSkgJiAweEZGRikgPDwgNCkvKiBQUkVTQ0FMRVIJCQkqLworI2RlZmluZSBQV01DUl9DTEtTUkMoeCkJCSgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX09GRgkoMCA8PCAxNikKKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX0lQRwkoMSA8PCAxNikKKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX0lQR19ISUdICSgyIDw8IDE2KQorI2RlZmluZSBQV01DUl9DTEtTUkNfQ0xLMzIJKDMgPDwgMTYpCisjZGVmaW5lIFBXTUNSX1BPVVRDCisjZGVmaW5lIFBXTUNSX0hDVFIJCSgxIDw8IDIwKQkJLyogSGFsZndvcmQgRklGTyBEYXRhIFN3YXBwaW5nCSovCisjZGVmaW5lIFBXTUNSX0JDVFIJCSgxIDw8IDIxKQkJLyogQnl0ZSBGSUZPIERhdGEgU3dhcHBpbmcJKi8KKyNkZWZpbmUgUFdNQ1JfREJHRU4JCSgxIDw8IDIyKQkJLyogRGVidWcgTW9kZQkJCSovCisjZGVmaW5lIFBXTUNSX1dBSVRFTgkJKDEgPDwgMjMpCQkvKiBXYWl0IE1vZGUJCQkqLworI2RlZmluZSBQV01DUl9ET1pFTgkJKDEgPDwgMjQpCQkvKiBEb3plIE1vZGUJCQkqLworI2RlZmluZSBQV01DUl9TVE9QRU4JCSgxIDw8IDI1KQkJLyogU3RvcCBNb2RlCQkJKi8KKyNkZWZpbmUgUFdNQ1JfRldNKHgpCQkoKCh4KSAmIDB4MykgPDwgMjYpCS8qIEZJRk8gV2F0ZXIgTWFyawkJKi8KKworI2RlZmluZSBNQVhfRElWIDQwOTYKKyNlbmRpZgorCisjZGVmaW5lIFBXTVNfU0FNUExFKHgpCQkoKHgpICYgMHhGRkZGKQkJLyogQ29udGFpbnMgYSB0d28tc2FtcGxlIHdvcmQJKi8KKyNkZWZpbmUgUFdNUF9QRVJJT0QoeCkJCSgoeCkgJiAweEZGRkYpCQkvKiBSZXByZXNlbnRzIHRoZSBQV00ncyBwZXJpb2QJKi8KKyNkZWZpbmUgUFdNQ19DT1VOVEVSKHgpCQkoKHgpICYgMHhGRkZGKQkJLyogUmVwcmVzZW50cyB0aGUgY3VycmVudCBjb3VudCB2YWx1ZQkqLworCitzdHJ1Y3QgcHdtX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwljb25zdCBjaGFyCSpsYWJlbDsKKwlzdHJ1Y3QgY2xrCSpjbGs7CisKKwlpbnQJCWNsa19lbmFibGVkOworCXZvaWQgX19pb21lbQkqbW1pb19iYXNlOworCisJdW5zaWduZWQgaW50CXVzZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQJcHdtX2lkOworfTsKKworaW50IHB3bV9jb25maWcoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwgaW50IGR1dHlfbnMsIGludCBwZXJpb2RfbnMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGM7CisJdW5zaWduZWQgbG9uZyBwZXJpb2RfY3ljbGVzLCBkdXR5X2N5Y2xlcywgcHJlc2NhbGU7CisKKwlpZiAocHdtID09IE5VTEwgfHwgcGVyaW9kX25zID09IDAgfHwgZHV0eV9ucyA+IHBlcmlvZF9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljID0gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKKwljID0gYyAqIHBlcmlvZF9uczsKKwlkb19kaXYoYywgMTAwMDAwMDAwMCk7CisJcGVyaW9kX2N5Y2xlcyA9IGM7CisKKwlwcmVzY2FsZSA9IHBlcmlvZF9jeWNsZXMgLyAweDEwMDAwICsgMTsKKworCXBlcmlvZF9jeWNsZXMgLz0gcHJlc2NhbGU7CisJYyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcGVyaW9kX2N5Y2xlcyAqIGR1dHlfbnM7CisJZG9fZGl2KGMsIHBlcmlvZF9ucyk7CisJZHV0eV9jeWNsZXMgPSBjOworCisjaWZkZWYgUFdNX1ZFUl8yCisJd3JpdGVsKGR1dHlfY3ljbGVzLCBwd20tPm1taW9fYmFzZSArIFBXTVNBUik7CisJd3JpdGVsKHBlcmlvZF9jeWNsZXMsIHB3bS0+bW1pb19iYXNlICsgUFdNUFIpOworCXdyaXRlbChQV01DUl9QUkVTQ0FMRVIocHJlc2NhbGUgLSAxKSB8IFBXTUNSX0NMS1NSQ19JUEdfSElHSCB8IFBXTUNSX0VOLAorCQkJcHdtLT5tbWlvX2Jhc2UgKyBQV01DUik7CisjZWxpZiBkZWZpbmVkIFBXTV9WRVJfMQorI2Vycm9yIFBXTSBub3QgeWV0IHdvcmtpbmcgb24gTVgxIC8gTVgyMQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocHdtX2NvbmZpZyk7CisKK2ludCBwd21fZW5hYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJaW50IHJjID0gMDsKKworCWlmICghcHdtLT5jbGtfZW5hYmxlZCkgeworCQlyYyA9IGNsa19lbmFibGUocHdtLT5jbGspOworCQlpZiAoIXJjKQorCQkJcHdtLT5jbGtfZW5hYmxlZCA9IDE7CisJfQorCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wocHdtX2VuYWJsZSk7CisKK3ZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwlpZiAocHdtLT5jbGtfZW5hYmxlZCkgeworCQljbGtfZGlzYWJsZShwd20tPmNsayk7CisJCXB3bS0+Y2xrX2VuYWJsZWQgPSAwOworCX0KK30KK0VYUE9SVF9TWU1CT0wocHdtX2Rpc2FibGUpOworCitzdGF0aWMgREVGSU5FX01VVEVYKHB3bV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQocHdtX2xpc3QpOworCitzdHJ1Y3QgcHdtX2RldmljZSAqcHdtX3JlcXVlc3QoaW50IHB3bV9pZCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwlpbnQgZm91bmQgPSAwOworCisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwd20sICZwd21fbGlzdCwgbm9kZSkgeworCQlpZiAocHdtLT5wd21faWQgPT0gcHdtX2lkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCkgeworCQlpZiAocHdtLT51c2VfY291bnQgPT0gMCkgeworCQkJcHdtLT51c2VfY291bnQrKzsKKwkJCXB3bS0+bGFiZWwgPSBsYWJlbDsKKwkJfSBlbHNlCisJCQlwd20gPSBFUlJfUFRSKC1FQlVTWSk7CisJfSBlbHNlCisJCXB3bSA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKKwlyZXR1cm4gcHdtOworfQorRVhQT1JUX1NZTUJPTChwd21fcmVxdWVzdCk7CisKK3ZvaWQgcHdtX2ZyZWUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisKKwlpZiAocHdtLT51c2VfY291bnQpIHsKKwkJcHdtLT51c2VfY291bnQtLTsKKwkJcHdtLT5sYWJlbCA9IE5VTEw7CisJfSBlbHNlCisJCXByX3dhcm5pbmcoIlBXTSBkZXZpY2UgYWxyZWFkeSBmcmVlZFxuIik7CisKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX2ZyZWUpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteGNfcHdtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCA9IDA7CisKKwlwd20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHdtX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChwd20gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHdtLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwd20iKTsKKworCWlmIChJU19FUlIocHdtLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocHdtLT5jbGspOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXB3bS0+Y2xrX2VuYWJsZWQgPSAwOworCisJcHdtLT51c2VfY291bnQgPSAwOworCXB3bS0+cHdtX2lkID0gcGRldi0+aWQ7CisJcHdtLT5wZGV2ID0gcGRldjsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2NsazsKKwl9CisKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEsIHBkZXYtPm5hbWUpOworCWlmIChyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX2NsazsKKwl9CisKKwlwd20tPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJaWYgKHB3bS0+bW1pb19iYXNlID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcHdtLT5ub2RlLCAmcHdtX2xpc3QpOworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHdtKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKK2Vycl9mcmVlX2NsazoKKwljbGtfcHV0KHB3bS0+Y2xrKTsKK2Vycl9mcmVlOgorCWtmcmVlKHB3bSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhjX3B3bV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKworCXB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChwd20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisJbGlzdF9kZWwoJnB3bS0+bm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisKKwlpb3VubWFwKHB3bS0+bW1pb19iYXNlKTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKworCWNsa19wdXQocHdtLT5jbGspOworCisJa2ZyZWUocHdtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhjX3B3bV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm14Y19wd20iLAorCX0sCisJLnByb2JlCQk9IG14Y19wd21fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChteGNfcHdtX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteGNfcHdtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteGNfcHdtX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKG14Y19wd21faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteGNfcHdtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjX3B3bV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXhjX3B3bV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiIpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9zeXN0ZW0uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jCnNpbWlsYXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbXgyL3N5c3RlbS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW14Yy9zeXN0ZW0uYwppbmRleCA3YjgyNjk3Li43OWMzNzU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9zeXN0ZW0uYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9zeXN0ZW0uYwpAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAogICogQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIHlhbm9rQGVtY3JhZnQuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw0MiArMjMsNDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0vKgotICogUHV0IHRoZSBDUFUgaW50byBpZGxlIG1vZGUuIEl0IGlzIGNhbGxlZCBieSBkZWZhdWx0X2lkbGUoKQotICogaW4gcHJvY2Vzcy5jIGZpbGUuCi0gKi8KLXZvaWQgYXJjaF9pZGxlKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGlzIHNob3VsZCBkbyBhbGwgdGhlIGNsb2NrIHN3aXRjaGluZwotCSAqIGFuZCB3YWl0IGZvciBpbnRlcnJ1cHQgdHJpY2tzLgotCSAqLwotCWNwdV9kb19pZGxlKCk7Ci19Ci0KLSNkZWZpbmUgV0RPR19XQ1JfUkVHICAgICAgICAgICAgICAgICAgICBJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKQotI2RlZmluZSBXRE9HX1dDUl9TUlMgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjZGVmaW5lIFdET0dfV0NSX1JFRwkJSU9fQUREUkVTUyhXRFRfQkFTRV9BRERSKQorI2RlZmluZSBXRE9HX1dDUl9FTkFCTEUJCSgxIDw8IDApCisjZWxzZQorI2RlZmluZSBXRE9HX1dDUl9SRUcJCUlPX0FERFJFU1MoV0RPR19CQVNFX0FERFIpCisjZGVmaW5lIFdET0dfV0NSX0VOQUJMRQkJKDEgPDwgMikKKyNlbmRpZgogCiAvKgogICogUmVzZXQgdGhlIHN5c3RlbS4gSXQgaXMgY2FsbGVkIGJ5IG1hY2hpbmVfcmVzdGFydCgpLgogICovCi12b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQordm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlpZiAoIWNwdV9pc19teDEoKSkgeworCQlzdHJ1Y3QgY2xrICpjbGs7CiAKLQljbGsgPSBjbGtfZ2V0KE5VTEwsICJ3ZG9nX2NsayIpOwotCWlmICghY2xrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiJDYW5ub3QgYWN0aXZhdGUgdGhlIHdhdGNoZG9nLiBHaXZpbmcgdXBcbiIpOwotCQlyZXR1cm47CisJCWNsayA9IGNsa19nZXRfc3lzKCJpbXgtd2R0LjAiLCBOVUxMKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkKKwkJCWNsa19lbmFibGUoY2xrKTsKIAl9CiAKLQljbGtfZW5hYmxlKGNsayk7Ci0KIAkvKiBBc3NlcnQgU1JTIHNpZ25hbCAqLwotCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhXRE9HX1dDUl9SRUcpICYgfldET0dfV0NSX1NSUywgV0RPR19XQ1JfUkVHKTsKKwlfX3Jhd193cml0ZXcoV0RPR19XQ1JfRU5BQkxFLCBXRE9HX1dDUl9SRUcpOworCisJLyogd2FpdCBmb3IgcmVzZXQgdG8gYXNzZXJ0Li4uICovCisJbWRlbGF5KDUwMCk7CisKKwlwcmludGsoS0VSTl9FUlIgIldhdGNoZG9nIHJlc2V0IGZhaWxlZCB0byBhc3NlcnQgcmVzZXRcbiIpOworCisJLyogZGVsYXkgdG8gYWxsb3cgdGhlIHNlcmlhbCBwb3J0IHRvIHNob3cgdGhlIG1lc3NhZ2UgKi8KKwltZGVsYXkoNTApOworCisJLyogd2UnbGwgdGFrZSBhIGp1bXAgdGhyb3VnaCB6ZXJvIGFzIGEgcG9vciBzZWNvbmQgKi8KKwljcHVfcmVzZXQoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMgYi9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKaW5kZXggNzU4YTEyOS4uZWYxYjNjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwpAQCAtMzQsOSArMzQsNiBAQAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tldmVudF9teGM7CiBzdGF0aWMgZW51bSBjbG9ja19ldmVudF9tb2RlIGNsb2NrZXZlbnRfbW9kZSA9IENMT0NLX0VWVF9NT0RFX1VOVVNFRDsKIAotLyogY2xvY2sgc291cmNlIGZvciB0aGUgdGltZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICp0aW1lcl9jbGs7Ci0KIC8qIGNsb2NrIHNvdXJjZSAqLwogCiBzdGF0aWMgY3ljbGVfdCBteGNfZ2V0X2N5Y2xlcyh2b2lkKQpAQCAtNTMsMTMgKzUwLDExIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgbXhjX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG14Y19jbG9ja3NvdXJjZV9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2NsaykKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5zaWduZWQgaW50IGMgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKIAotCWNsb2NrID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7Ci0KLQljbG9ja3NvdXJjZV9teGMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xvY2ssCisJY2xvY2tzb3VyY2VfbXhjLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGMsCiAJCQkJCWNsb2Nrc291cmNlX214Yy5zaGlmdCk7CiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX214Yyk7CiAKQEAgLTE3NywxMyArMTcyLDExIEBACiAJLnJhdGluZwkJPSAyMDAsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBteGNfY2xvY2tldmVudF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBteGNfY2xvY2tldmVudF9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2NsaykKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5zaWduZWQgaW50IGMgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKIAotCWNsb2NrID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7Ci0KLQljbG9ja2V2ZW50X214Yy5tdWx0ID0gZGl2X3NjKGNsb2NrLCBOU0VDX1BFUl9TRUMsCisJY2xvY2tldmVudF9teGMubXVsdCA9IGRpdl9zYyhjLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfbXhjLnNoaWZ0KTsKIAljbG9ja2V2ZW50X214Yy5tYXhfZGVsdGFfbnMgPQogCQkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZlLCAmY2xvY2tldmVudF9teGMpOwpAQCAtMTk3LDE0ICsxOTAsOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBteGNfdGltZXJfaW5pdChjb25zdCBjaGFyICpjbGtfdGltZXIpCit2b2lkIF9faW5pdCBteGNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGspCiB7Ci0JdGltZXJfY2xrID0gY2xrX2dldChOVUxMLCBjbGtfdGltZXIpOwotCWlmICghdGltZXJfY2xrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiJDYW5ub3QgZGV0ZXJtaW5lIHRpbWVyIGNsb2NrLiBHaXZpbmcgdXAuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQogCWNsa19lbmFibGUodGltZXJfY2xrKTsKIAogCS8qCkBAIC0yMTksMTAgKzIwNiw5IEBACiAJCSAgICAgVElNRVJfQkFTRSArIE1YQ19UQ1RMKTsKIAogCS8qIGluaXQgYW5kIHJlZ2lzdGVyIHRoZSB0aW1lciB0byB0aGUgZnJhbWV3b3JrICovCi0JbXhjX2Nsb2Nrc291cmNlX2luaXQoKTsKLQlteGNfY2xvY2tldmVudF9pbml0KCk7CisJbXhjX2Nsb2Nrc291cmNlX2luaXQodGltZXJfY2xrKTsKKwlteGNfY2xvY2tldmVudF9pbml0KHRpbWVyX2Nsayk7CiAKIAkvKiBNYWtlIGlycXMgaGFwcGVuICovCiAJc2V0dXBfaXJxKFRJTUVSX0lOVEVSUlVQVCwgJm14Y190aW1lcl9pcnEpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IDQ2ZDNiMGIuLjlkZDY4ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xMSwxNCArMTEsMTcgQEAKIAogY29uZmlnIEFSQ0hfT01BUDEKIAlib29sICJUSSBPTUFQMSIKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBjb25maWcgQVJDSF9PTUFQMgogCWJvb2wgIlRJIE9NQVAyIgogCXNlbGVjdCBDUFVfVjYKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBjb25maWcgQVJDSF9PTUFQMwogCWJvb2wgIlRJIE9NQVAzIgogCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBlbmRjaG9pY2UKIApAQCAtMTA0LDYgKzEwNywxNCBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgT01BUCBNdWx0aWNoYW5uZWwKIAkgIEJ1ZmZlcmVkIFNlcmlhbCBQb3J0LgogCitjb25maWcgT01BUF9NQk9YX0ZXSworCXRyaXN0YXRlICJNYWlsYm94IGZyYW1ld29yayBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBNYWlsYm94IGZyYW1ld29yayBzdXBwb3J0IGZvcgorCSAgRFNQLCBJVkExLjAgYW5kIElWQTIgaW4gT01BUDEvMi8zLgorCiBjaG9pY2UKICAgICAgICAgcHJvbXB0ICJTeXN0ZW0gdGltZXIiCiAJZGVmYXVsdCBPTUFQX01QVV9USU1FUgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCBiZTZhYWI5Li4yZTA2MTQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMzYsNDQgKzM2LDYgQEAKICAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qCi0gKiBSZXR1cm5zIGEgY2xvY2suIE5vdGUgdGhhdCB3ZSBmaXJzdCB0cnkgdG8gdXNlIGRldmljZSBpZCBvbiB0aGUgYnVzCi0gKiBhbmQgY2xvY2sgbmFtZS4gSWYgdGhpcyBmYWlscywgd2UgdHJ5IHRvIHVzZSBjbG9jayBuYW1lIG9ubHkuCi0gKi8KLXN0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0JaW50IGlkbm87Ci0KLQlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQotCQlpZG5vID0gLTE7Ci0JZWxzZQotCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAocC0+aWQgPT0gaWRubyAmJgotCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCWNsayA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotZm91bmQ6Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIGNsazsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldCk7Ci0KIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE0LDIyICs3Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAotaW50IGNsa19nZXRfdXNlY291bnQoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCXJldCA9IGNsay0+dXNlY291bnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3VzZWNvdW50KTsKLQogdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDYsMTMgKzkyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIAotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoY2xrICYmICFJU19FUlIoY2xrKSkKLQkJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogT3B0aW9uYWwgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9jbGsuaAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4NSw2ICsxMjQsMTEgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZSkKIAkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKGNsaywgcmF0ZSk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChjbGstPnJlY2FsYykKKwkJCWNsay0+cmF0ZSA9IGNsay0+cmVjYWxjKGNsayk7CisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIwMCw4ICsxNDQsMTYgQEAKIAkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQpCi0JCXJldCA9ICBhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJaWYgKGNsay0+dXNlY291bnQgPT0gMCkgeworCQlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQpCisJCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJaWYgKGNsay0+cmVjYWxjKQorCQkJCWNsay0+cmF0ZSA9IGNsay0+cmVjYWxjKGNsayk7CisJCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCQl9CisJfSBlbHNlCisJCXJldCA9IC1FQlVTWTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMTAsMTggKzE2Miw3IEBACiAKIHN0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBjbGsgKiByZXQgPSBOVUxMOwotCi0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm4gcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCWlmIChhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudCkKLQkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX2dldF9wYXJlbnQoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGNsay0+cGFyZW50OwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CiAKQEAgLTI1MCwxNCArMTkxLDIwIEBACiBfX3NldHVwKCJtcHVyYXRlPSIsIG9tYXBfY2xrX3NldHVwKTsKIAogLyogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYWx3YXlzIGhhdmUgc2FtZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrICovCi12b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQordW5zaWduZWQgbG9uZyBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybjsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGU7Cit9CiAKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit2b2lkIGNsa19yZXBhcmVudChzdHJ1Y3QgY2xrICpjaGlsZCwgc3RydWN0IGNsayAqcGFyZW50KQoreworCWxpc3RfZGVsX2luaXQoJmNoaWxkLT5zaWJsaW5nKTsKKwlpZiAocGFyZW50KQorCQlsaXN0X2FkZCgmY2hpbGQtPnNpYmxpbmcsICZwYXJlbnQtPmNoaWxkcmVuKTsKKwljaGlsZC0+cGFyZW50ID0gcGFyZW50OworCisJLyogbm93IGRvIHRoZSBkZWJ1Z2ZzIHJlbmFtaW5nIHRvIHJlYXR0YWNoIHRoZSBjaGlsZAorCSAgIHRvIHRoZSBwcm9wZXIgcGFyZW50ICovCiB9CiAKIC8qIFByb3BhZ2F0ZSByYXRlIHRvIGNoaWxkcmVuICovCkBAIC0yNjUsMTcgKzIxMiwxNSBAQAogewogCXN0cnVjdCBjbGsgKmNsa3A7CiAKLQlpZiAodGNsayA9PSBOVUxMIHx8IElTX0VSUih0Y2xrKSkKLQkJcmV0dXJuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChsaWtlbHkoY2xrcC0+cGFyZW50ICE9IHRjbGspKQotCQkJY29udGludWU7Ci0JCWlmIChsaWtlbHkoKHUzMiljbGtwLT5yZWNhbGMpKQotCQkJY2xrcC0+cmVjYWxjKGNsa3ApOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJnRjbGstPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWlmIChjbGtwLT5yZWNhbGMpCisJCQljbGtwLT5yYXRlID0gY2xrcC0+cmVjYWxjKGNsa3ApOworCQlwcm9wYWdhdGVfcmF0ZShjbGtwKTsKIAl9CiB9CiAKK3N0YXRpYyBMSVNUX0hFQUQocm9vdF9jbGtzKTsKKwogLyoqCiAgKiByZWNhbGN1bGF0ZV9yb290X2Nsb2NrcyAtIHJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgYWxsIHJvb3QgY2xvY2tzCiAgKgpAQCAtMjg3LDE4ICsyMzIsMzUgQEAKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmICh1bmxpa2VseSghY2xrcC0+cGFyZW50KSAmJiBsaWtlbHkoKHUzMiljbGtwLT5yZWNhbGMpKQotCQkJY2xrcC0+cmVjYWxjKGNsa3ApOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJnJvb3RfY2xrcywgc2libGluZykgeworCQlpZiAoY2xrcC0+cmVjYWxjKQorCQkJY2xrcC0+cmF0ZSA9IGNsa3AtPnJlY2FsYyhjbGtwKTsKKwkJcHJvcGFnYXRlX3JhdGUoY2xrcCk7CiAJfQogfQogCit2b2lkIGNsa19pbml0X29uZShzdHJ1Y3QgY2xrICpjbGspCit7CisJSU5JVF9MSVNUX0hFQUQoJmNsay0+Y2hpbGRyZW4pOworfQorCiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyoKKwkgKiB0cmFwIG91dCBhbHJlYWR5IHJlZ2lzdGVyZWQgY2xvY2tzCisJICovCisJaWYgKGNsay0+bm9kZS5uZXh0IHx8IGNsay0+bm9kZS5wcmV2KQorCQlyZXR1cm4gMDsKKwogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJaWYgKGNsay0+cGFyZW50KQorCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLCAmY2xrLT5wYXJlbnQtPmNoaWxkcmVuKTsKKwllbHNlCisJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZyb290X2Nsa3MpOworCiAJbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CiAJaWYgKGNsay0+aW5pdCkKIAkJY2xrLT5pbml0KGNsayk7CkBAIC0zMTQsMzkgKzI3NiwxMiBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWxpc3RfZGVsKCZjbGstPnNpYmxpbmcpOwogCWxpc3RfZGVsKCZjbGstPm5vZGUpOwogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3VucmVnaXN0ZXIpOwogCi12b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZSkKLQkJYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGVueV9pZGxlKTsKLQotdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCWlmIChhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZSkKLQkJYXJjaF9jbG9jay0+Y2xrX2FsbG93X2lkbGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2FsbG93X2lkbGUpOwotCiB2b2lkIGNsa19lbmFibGVfaW5pdF9jbG9ja3Modm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwpAQCAtMzU4LDYgKzI5MywyMyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlX2luaXRfY2xvY2tzKTsKIAorLyoKKyAqIExvdyBsZXZlbCBoZWxwZXJzCisgKi8KK3N0YXRpYyBpbnQgY2xrbGxfZW5hYmxlX251bGwoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtsbF9kaXNhYmxlX251bGwoc3RydWN0IGNsayAqY2xrKQoreworfQorCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19udWxsID0geworCS5lbmFibGUJCT0gY2xrbGxfZW5hYmxlX251bGwsCisJLmRpc2FibGUJPSBjbGtsbF9kaXNhYmxlX251bGwsCit9OworCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiB2b2lkIGNsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCiB7CkBAIC0zODMsOCArMzM1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ssICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKGNrLT51c2Vjb3VudCA+IDAgfHwgKGNrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAotCQkJY2stPmVuYWJsZV9yZWcgPT0gMCkKKwkJaWYgKGNrLT5vcHMgPT0gJmNsa29wc19udWxsKQorCQkJY29udGludWU7CisKKwkJaWYgKGNrLT51c2Vjb3VudCA+IDAgfHwgY2stPmVuYWJsZV9yZWcgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCA2ODI1ZmJiLi5kMTc5NzE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX29tYXAyX3NldF9nbG9iYWxzKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfdGFwKG9tYXAyX2dsb2JhbHMpOwotCW9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShvbWFwMl9nbG9iYWxzKTsKKwlvbWFwMl9zZXRfZ2xvYmFsc19zZHJjKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2wob21hcDJfZ2xvYmFscyk7CiAJb21hcDJfc2V0X2dsb2JhbHNfcHJjbShvbWFwMl9nbG9iYWxzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKaW5kZXggYjI2OTAyNC4uODQzZThhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKQEAgLTIzLDEwICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2RlZmluZSBWRVJZX0hJX1JBVEUJOTAwMDAwMDAwCiAKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGU7CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogI2RlZmluZSBNUFVfQ0xLCQkibXB1IgogI2Vsc2UKQEAgLTM5LDYgKzQyLDkgQEAKIAogaW50IG9tYXBfdmVyaWZ5X3NwZWVkKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogeworCWlmIChmcmVxX3RhYmxlKQorCQlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgZnJlcV90YWJsZSk7CisKIAlpZiAocG9saWN5LT5jcHUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03MCwxMiArNzYsMjYgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAlpbnQgcmV0ID0gMDsKIAorCS8qIEVuc3VyZSBkZXNpcmVkIHJhdGUgaXMgd2l0aGluIGFsbG93ZWQgcmFuZ2UuICBTb21lIGdvdmVub3JzCisJICogKG9uZGVtYW5kKSB3aWxsIGp1c3QgcGFzcyB0YXJnZXRfZnJlcT0wIHRvIGdldCB0aGUgbWluaW11bS4gKi8KKwlpZiAodGFyZ2V0X2ZyZXEgPCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEpCisJCXRhcmdldF9mcmVxID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxOworCWlmICh0YXJnZXRfZnJlcSA+IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSkKKwkJdGFyZ2V0X2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7CisKIAlmcmVxcy5vbGQgPSBvbWFwX2dldHNwZWVkKDApOwogCWZyZXFzLm5ldyA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssIHRhcmdldF9mcmVxICogMTAwMCkgLyAxMDAwOwogCWZyZXFzLmNwdSA9IDA7CiAKKwlpZiAoZnJlcXMub2xkID09IGZyZXFzLm5ldykKKwkJcmV0dXJuIHJldDsKKwogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7Ci0JcmV0ID0gY2xrX3NldF9yYXRlKG1wdV9jbGssIHRhcmdldF9mcmVxICogMTAwMCk7CisjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImNwdWZyZXEtb21hcDogdHJhbnNpdGlvbjogJXUgLS0+ICV1XG4iLAorCSAgICAgICBmcmVxcy5vbGQsIGZyZXFzLm5ldyk7CisjZW5kaWYKKwlyZXQgPSBjbGtfc2V0X3JhdGUobXB1X2NsaywgZnJlcXMubmV3ICogMTAwMCk7CiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtODMsMTYgKzEwMywzMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogeworCWludCByZXN1bHQgPSAwOworCiAJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgTVBVX0NMSyk7CiAJaWYgKElTX0VSUihtcHVfY2xrKSkKIAkJcmV0dXJuIFBUUl9FUlIobXB1X2Nsayk7CiAKIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAlwb2xpY3ktPmN1ciA9IHBvbGljeS0+bWluID0gcG9saWN5LT5tYXggPSBvbWFwX2dldHNwZWVkKDApOwotCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssIDApIC8gMTAwMDsKLQlwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCBWRVJZX0hJX1JBVEUpIC8gMTAwMDsKLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gQ1BVRlJFUV9FVEVSTkFMOworCisJY2xrX2luaXRfY3B1ZnJlcV90YWJsZSgmZnJlcV90YWJsZSk7CisJaWYgKGZyZXFfdGFibGUpIHsKKwkJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIGZyZXFfdGFibGUpOworCQlpZiAoIXJlc3VsdCkKKwkJCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKGZyZXFfdGFibGUsCisJCQkJCQkJcG9saWN5LT5jcHUpOworCX0gZWxzZSB7CisJCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssIDApIC8gMTAwMDsKKwkJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywKKwkJCQkJCQlWRVJZX0hJX1JBVEUpIC8gMTAwMDsKKwl9CisKKwkvKiBGSVhNRTogd2hhdCdzIHRoZSBhY3R1YWwgdHJhbnNpdGlvbiB0aW1lPyAqLworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMCAqIDEwMDAgKiAxMDAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMsNiArMTM4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpvbWFwX2NwdWZyZXFfYXR0cltdID0geworCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKKwlOVUxMLAorfTsKKwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBvbWFwX2RyaXZlciA9IHsKIAkuZmxhZ3MJCT0gQ1BVRlJFUV9TVElDS1ksCiAJLnZlcmlmeQkJPSBvbWFwX3ZlcmlmeV9zcGVlZCwKQEAgLTExMSw2ICsxNTEsNyBAQAogCS5pbml0CQk9IG9tYXBfY3B1X2luaXQsCiAJLmV4aXQJCT0gb21hcF9jcHVfZXhpdCwKIAkubmFtZQkJPSAib21hcCIsCisJLmF0dHIJCT0gb21hcF9jcHVmcmVxX2F0dHIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2NwdWZyZXFfaW5pdCh2b2lkKQpAQCAtMTE5LDMgKzE2MCwxMSBAQAogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfY3B1ZnJlcV9pbml0KTsKKworLyoKKyAqIGlmIGV2ZXIgd2Ugd2FudCB0byByZW1vdmUgdGhpcywgdXBvbiBjbGVhbnVwIGNhbGw6CisgKgorICogY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigpCisgKiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cigpCisgKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKaW5kZXggMjA4ZGJiMS4uODdmYjdmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yMjgsNiArMjI4LDkgQEAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKKworCS8qIHJldHVybiBkZXZpY2UgaGFuZGxlIHRvIGJvYXJkIHNldHVwIGNvZGUgKi8KKwlkYXRhLT5kZXYgPSAmcGRldi0+ZGV2OwogCXJldHVybiAwOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IDQ3ZWM3N2EuLjIxY2MwMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTEyMyw2ICsxMjMsNyBAQAogCiBzdGF0aWMgaW50IGRtYV9sY2hfY291bnQ7CiBzdGF0aWMgaW50IGRtYV9jaGFuX2NvdW50Oworc3RhdGljIGludCBvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzOwogCiBzdGF0aWMgc3BpbmxvY2tfdCBkbWFfY2hhbl9sb2NrOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9sY2ggKmRtYV9jaGFuOwpAQCAtNzM3LDcgKzczOCw3IEBACiAJCSAqIGlkLgogCQkgKi8KIAkJZG1hX3dyaXRlKGRldl9pZCB8ICgxIDw8IDEwKSwgQ0NSKGZyZWVfY2gpKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwN3h4KCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJZG1hX3dyaXRlKGRldl9pZCwgQ0NSKGZyZWVfY2gpKTsKIAl9CiAKQEAgLTE5MDAsNyArMTkwMSw3IEBACiAvKiBTVEFUVVMgcmVnaXN0ZXIgY291bnQgaXMgZnJvbSAxLTMyIHdoaWxlIG91ciBpcyAwLTMxICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQl1MzIgdmFsOworCXUzMiB2YWwsIGVuYWJsZV9yZWc7CiAJaW50IGk7CiAKIAl2YWwgPSBkbWFfcmVhZChJUlFTVEFUVVNfTDApOwpAQCAtMTkwOSw2ICsxOTEwLDggQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIERNQSBJUlFcbiIpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQorCWVuYWJsZV9yZWcgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOworCXZhbCAmPSBlbmFibGVfcmVnOyAvKiBEaXNwYXRjaCBvbmx5IHJlbGV2YW50IGludGVycnVwdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZG1hX2xjaF9jb3VudCAmJiB2YWwgIT0gMDsgaSsrKSB7CiAJCWlmICh2YWwgJiAxKQogCQkJb21hcDJfZG1hX2hhbmRsZV9jaChpKTsKQEAgLTIzMjEsNiArMjMyNCwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkgJiYgb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVscworCQkJJiYgKG9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHMgPD0gZG1hX2xjaF9jb3VudCkpCisJCWRtYV9sY2hfY291bnQgPSBvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzOworCiAJZG1hX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfbGNoKSAqIGRtYV9sY2hfY291bnQsCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWFfY2hhbikKQEAgLTIzMzksNyArMjM0Niw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTV4eCBpbml0aWFsaXplZFxuIik7CiAJCWRtYV9jaGFuX2NvdW50ID0gOTsKIAkJZW5hYmxlXzE1MTBfbW9kZSA9IDE7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDczMCgpKSB7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDd4eCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCiAJCSAgICAgICBkbWFfcmVhZChIV19JRCkpOwogCQlwcmludGsoS0VSTl9JTkZPICJETUEgY2FwYWJpbGl0aWVzOiAlMDh4OiUwOHg6JTA0eDolMDR4OiUwNHhcbiIsCkBAIC0yMzcxLDcgKzIzNzgsNyBAQAogCQl1OCByZXZpc2lvbiA9IGRtYV9yZWFkKFJFVklTSU9OKSAmIDB4ZmY7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHJldmlzaW9uICVkLiVkXG4iLAogCQkgICAgICAgcmV2aXNpb24gPj4gNCwgcmV2aXNpb24gJiAweGYpOwotCQlkbWFfY2hhbl9jb3VudCA9IE9NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKKwkJZG1hX2NoYW5fY291bnQgPSBkbWFfbGNoX2NvdW50OwogCX0gZWxzZSB7CiAJCWRtYV9jaGFuX2NvdW50ID0gMDsKIAkJcmV0dXJuIDA7CkBAIC0yNDM3LDQgKzI0NDQsMTcgQEAKIAogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZG1hKTsKIAorLyoKKyAqIFJlc2VydmUgdGhlIG9tYXAgU0RNQSBjaGFubmVscyB1c2luZyBjbWRsaW5lIGJvb3RhcmcKKyAqICJvbWFwX2RtYV9yZXNlcnZlX2NoPSIuIFRoZSB2YWxpZCByYW5nZSBpcyAxIHRvIDMyCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZG1hX2NtZGxpbmVfcmVzZXJ2ZV9jaChjaGFyICpzdHIpCit7CisJaWYgKGdldF9vcHRpb24oJnN0ciwgJm9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHMpICE9IDEpCisJCW9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHMgPSAwOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJvbWFwX2RtYV9yZXNlcnZlX2NoPSIsIG9tYXBfZG1hX2NtZGxpbmVfcmVzZXJ2ZV9jaCk7CisKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKaW5kZXggZTRmMGNlMC4uYmZkNDc1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtdGltZXIuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KQEAgLTM2Miw2ICszNjMsNyBAQAogCiAJcmV0dXJuIHRpbWVyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9yZXF1ZXN0KTsKIAogc3RydWN0IG9tYXBfZG1fdGltZXIgKm9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYyhpbnQgaWQpCiB7CkBAIC0zODUsNiArMzg3LDcgQEAKIAogCXJldHVybiB0aW1lcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYyk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9mcmVlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTM5NSw2ICszOTgsNyBAQAogCVdBUk5fT04oIXRpbWVyLT5yZXNlcnZlZCk7CiAJdGltZXItPnJlc2VydmVkID0gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfZnJlZSk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNDA2LDYgKzQxMCw3IEBACiAKIAl0aW1lci0+ZW5hYmxlZCA9IDE7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX2VuYWJsZSk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9kaXNhYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTQxNywxMSArNDIyLDEzIEBACiAKIAl0aW1lci0+ZW5hYmxlZCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX2Rpc2FibGUpOwogCiBpbnQgb21hcF9kbV90aW1lcl9nZXRfaXJxKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKIAlyZXR1cm4gdGltZXItPmlycTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfZ2V0X2lycSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogCkBAIC00NTIsNiArNDU5LDcgQEAKIAogCXJldHVybiBpbnB1dG1hc2s7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayk7CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAzKQogCkBAIC00NTksNiArNDY3LDcgQEAKIHsKIAlyZXR1cm4gdGltZXItPmZjbGs7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX2dldF9mY2xrKTsKIAogX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQogewpAQCAtNDY2LDYgKzQ3NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfbW9kaWZ5X2lkbGVjdF9tYXNrKTsKIAogI2VuZGlmCiAKQEAgLTQ3Myw2ICs0ODMsNyBAQAogewogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1RSSUdHRVJfUkVHLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfdHJpZ2dlcik7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC00ODQsNiArNDk1LDcgQEAKIAkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc3RhcnQpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc3RvcChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC00OTUsNiArNTA3LDcgQEAKIAkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc3RvcCk7CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCkBAIC01MDcsNiArNTIwLDcgQEAKIAlsIHw9IHNvdXJjZSA8PCBuOwogCW9tYXBfd3JpdGVsKGwsIE1PRF9DT05GX0NUUkxfMSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UpOwogCiAjZWxzZQogCkBAIC01MjMsNiArNTM3LDcgQEAKIAkgKiBjYXVzZSBhbiBhYm9ydC4gKi8KIAlfX2RlbGF5KDE1MDAwMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UpOwogCiAjZW5kaWYKIApAQCAtNTQxLDYgKzU1Niw3IEBACiAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9UUklHR0VSX1JFRywgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9sb2FkKTsKIAogLyogT3B0aW1pemVkIHNldF9sb2FkIHdoaWNoIHJlbW92ZXMgY29zdGx5IHNwaW4gd2FpdCBpbiB0aW1lcl9zdGFydCAqLwogdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGF1dG9yZWxvYWQsCkBAIC01NjAsNiArNTc2LDcgQEAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRywgbG9hZCk7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfbG9hZF9zdGFydCk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfbWF0Y2goc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgZW5hYmxlLAogCQkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2gpCkBAIC01NzQsNiArNTkxLDcgQEAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTUFUQ0hfUkVHLCBtYXRjaCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9tYXRjaCk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfcHdtKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGRlZl9vbiwKIAkJCSAgIGludCB0b2dnbGUsIGludCB0cmlnZ2VyKQpAQCAtNTkwLDYgKzYwOCw3IEBACiAJbCB8PSB0cmlnZ2VyIDw8IDEwOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X3B3bSk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfcHJlc2NhbGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHByZXNjYWxlcikKIHsKQEAgLTYwMyw2ICs2MjIsNyBAQAogCX0KIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9wcmVzY2FsZXIpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLAogCQkJCSAgdW5zaWduZWQgaW50IHZhbHVlKQpAQCAtNjEwLDYgKzYzMCw3IEBACiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfSU5UX0VOX1JFRywgdmFsdWUpOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1dBS0VVUF9FTl9SRUcsIHZhbHVlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUpOwogCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX3N0YXR1cyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC02MTksMTEgKzY0MCwxMyBAQAogCiAJcmV0dXJuIGw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3N0YXR1cyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9TVEFUX1JFRywgdmFsdWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMpOwogCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNjMzLDExICs2NTYsMTMgQEAKIAogCXJldHVybiBsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRywgdmFsdWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl93cml0ZV9jb3VudGVyKTsKIAogaW50IG9tYXBfZG1fdGltZXJzX2FjdGl2ZSh2b2lkKQogewpAQCAtNjU4LDYgKzY4Myw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcnNfYWN0aXZlKTsKIAogaW50IF9faW5pdCBvbWFwX2RtX3RpbWVyX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IGY4NTZhOTAuLmQzZmE0MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtODEsNiArODEsMjIgQEAKICNkZWZpbmUgT01BUDczMF9HUElPX0lOVF9TVEFUVVMJCTB4MTQKIAogLyoKKyAqIE9NQVA4NTAgc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBPTUFQODUwX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYzAwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPMl9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmM4MDApCisjZGVmaW5lIE9NQVA4NTBfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweGZmZmJkMDAwKQorI2RlZmluZSBPTUFQODUwX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZDgwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPNV9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmUwMDApCisjZGVmaW5lIE9NQVA4NTBfR1BJTzZfQkFTRQkJSU9fQUREUkVTUygweGZmZmJlODAwKQorI2RlZmluZSBPTUFQODUwX0dQSU9fREFUQV9JTlBVVAkJMHgwMAorI2RlZmluZSBPTUFQODUwX0dQSU9fREFUQV9PVVRQVVQJMHgwNAorI2RlZmluZSBPTUFQODUwX0dQSU9fRElSX0NPTlRST0wJMHgwOAorI2RlZmluZSBPTUFQODUwX0dQSU9fSU5UX0NPTlRST0wJMHgwYworI2RlZmluZSBPTUFQODUwX0dQSU9fSU5UX01BU0sJCTB4MTAKKyNkZWZpbmUgT01BUDg1MF9HUElPX0lOVF9TVEFUVVMJCTB4MTQKKworLyoKICAqIG9tYXAyNHh4IHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KICNkZWZpbmUgT01BUDI0MlhfR1BJTzFfQkFTRQkJSU9fQUREUkVTUygweDQ4MDE4MDAwKQpAQCAtMTU5LDcgKzE3NSw4IEBACiAjZGVmaW5lIE1FVEhPRF9HUElPXzE1MTAJMQogI2RlZmluZSBNRVRIT0RfR1BJT18xNjEwCTIKICNkZWZpbmUgTUVUSE9EX0dQSU9fNzMwCQkzCi0jZGVmaW5lIE1FVEhPRF9HUElPXzI0WFgJNAorI2RlZmluZSBNRVRIT0RfR1BJT184NTAJCTQKKyNkZWZpbmUgTUVUSE9EX0dQSU9fMjRYWAk1CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE2MTBbNV0gPSB7CkBAIC0xOTAsNiArMjA3LDE5IEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCitzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfODUwWzddID0geworCXsgT01BUF9NUFVJT19CQVNFLCAgICAgSU5UXzg1MF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUDg1MF9HUElPMV9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTksxLCAgSUhfR1BJT19CQVNFLAlNRVRIT0RfR1BJT184NTAgfSwKKwl7IE9NQVA4NTBfR1BJTzJfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMiwgIElIX0dQSU9fQkFTRSArIDMyLAlNRVRIT0RfR1BJT184NTAgfSwKKwl7IE9NQVA4NTBfR1BJTzNfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMywgIElIX0dQSU9fQkFTRSArIDY0LAlNRVRIT0RfR1BJT184NTAgfSwKKwl7IE9NQVA4NTBfR1BJTzRfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LNCwgIElIX0dQSU9fQkFTRSArIDk2LAlNRVRIT0RfR1BJT184NTAgfSwKKwl7IE9NQVA4NTBfR1BJTzVfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LNSwgIElIX0dQSU9fQkFTRSArIDEyOCwgTUVUSE9EX0dQSU9fODUwIH0sCisJeyBPTUFQODUwX0dQSU82X0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzYsICBJSF9HUElPX0JBU0UgKyAxNjAsIE1FVEhPRF9HUElPXzg1MCB9LAorfTsKKyNlbmRpZgorCisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAogCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMjQyeFs0XSA9IHsKQEAgLTIzNiw3ICsyNjYsNyBAQAogCQkJcmV0dXJuICZncGlvX2JhbmtbMF07CiAJCXJldHVybiAmZ3Bpb19iYW5rWzEgKyAoZ3BpbyA+PiA0KV07CiAJfQotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwN3h4KCkpIHsKIAkJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkKIAkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOwogCQlyZXR1cm4gJmdwaW9fYmFua1sxICsgKGdwaW8gPj4gNSldOwpAQCAtMjUxLDcgKzI4MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9ncGlvX2luZGV4KGludCBncGlvKQogewotCWlmIChjcHVfaXNfb21hcDczMCgpKQorCWlmIChjcHVfaXNfb21hcDd4eCgpKQogCQlyZXR1cm4gZ3BpbyAmIDB4MWY7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQlyZXR1cm4gZ3BpbyAmIDB4MWY7CkBAIC0yNzMsNyArMzAzLDcgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKChjcHVfaXNfb21hcDE2eHgoKSkgJiYgZ3BpbyA8IDY0KQogCQlyZXR1cm4gMDsKLQlpZiAoY3B1X2lzX29tYXA3MzAoKSAmJiBncGlvIDwgMTkyKQorCWlmIChjcHVfaXNfb21hcDd4eCgpICYmIGdwaW8gPCAxOTIpCiAJCXJldHVybiAwOwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiBncGlvIDwgMTI4KQogCQlyZXR1cm4gMDsKQEAgLTMxOCw2ICszNDgsMTEgQEAKIAkJcmVnICs9IE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTDsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fRElSX0NPTlRST0w7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX09FOwpAQCAtMzgwLDYgKzQxNSwxNiBAQAogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0RBVEFfT1VUUFVUOworCQlsID0gX19yYXdfcmVhZGwocmVnKTsKKwkJaWYgKGVuYWJsZSkKKwkJCWwgfD0gMSA8PCBncGlvOworCQllbHNlCisJCQlsICY9IH4oMSA8PCBncGlvKTsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKQEAgLTQyNiw2ICs0NzEsMTEgQEAKIAkJcmVnICs9IE9NQVA3MzBfR1BJT19EQVRBX0lOUFVUOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19EQVRBX0lOUFVUOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19EQVRBSU47CkBAIC01OTgsNiArNjQ4LDE4IEBACiAJCQlnb3RvIGJhZDsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fSU5UX0NPTlRST0w7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKQorCQkJbCB8PSAxIDw8IGdwaW87CisJCWVsc2UgaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCQlsICY9IH4oMSA8PCBncGlvKTsKKwkJZWxzZQorCQkJZ290byBiYWQ7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXNldF8yNHh4X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBncGlvLCB0cmlnZ2VyKTsKQEAgLTY3OCw2ICs3NDAsMTEgQEAKIAkJcmVnICs9IE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19JTlRfU1RBVFVTOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwpAQCAtNzM2LDYgKzgwMywxMyBAQAogCQlpbnYgPSAxOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19JTlRfTUFTSzsKKwkJbWFzayA9IDB4ZmZmZmZmZmY7CisJCWludiA9IDE7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0lSUUVOQUJMRTE7CkBAIC03OTksNiArODczLDE2IEBACiAJCQlsIHw9IGdwaW9fbWFzazsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fSU5UX01BU0s7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCAmPSB+KGdwaW9fbWFzayk7CisJCWVsc2UKKwkJCWwgfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlpZiAoZW5hYmxlKQpAQCAtOTgzLDYgKzEwNjcsMTAgQEAKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzczMCkKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUzsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzg1MCkKKwkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQODUwX0dQSU9fSU5UX1NUQVRVUzsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKQEAgLTEzNzIsNiArMTQ2MCwxMyBAQAogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfNzMwOwogCX0KICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwlpZiAoY3B1X2lzX29tYXA4NTAoKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJPTUFQODUwIEdQSU8gaGFyZHdhcmVcbiIpOworCQlncGlvX2JhbmtfY291bnQgPSA3OworCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfODUwOworCX0KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKIAlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKQEAgLTE0MjAsNyArMTUxNSw3IEBACiAJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19JUlFTVEFUVVMxKTsKIAkJCV9fcmF3X3dyaXRldygweDAwMTQsIGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX1NZU0NPTkZJRyk7CiAJCX0KLQkJaWYgKGNwdV9pc19vbWFwNzMwKCkgJiYgYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzczMCkgeworCQlpZiAoY3B1X2lzX29tYXA3eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fNzMwKSB7CiAJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArIE9NQVA3MzBfR1BJT19JTlRfTUFTSyk7CiAJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArIE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTKTsKIApAQCAtMTc0Myw2ICsxODM4LDkgQEAKIAljYXNlIE1FVEhPRF9HUElPXzczMDoKIAkJcmVnICs9IE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTDsKIAkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fRElSX0NPTlRST0w7CisJCWJyZWFrOwogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CiAJCWJyZWFrOwpAQCAtMTc2Miw3ICsxODYwLDggQEAKIAogCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKIAkJCWdwaW8gPSBPTUFQX01QVUlPKDApOwotCQllbHNlIGlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSB8fCBjcHVfaXNfb21hcDczMCgpKQorCQllbHNlIGlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSB8fCBjcHVfaXNfb21hcDczMCgpIHx8CisJCQkJY3B1X2lzX29tYXA4NTAoKSkKIAkJCWJhbmt3aWR0aCA9IDMyOwogCiAJCWZvciAoaiA9IDA7IGogPCBiYW5rd2lkdGg7IGorKywgZ3BpbysrLCBtYXNrIDw8PSAxKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKaW5kZXggNDY3NTMxZS4uYTMwMzA3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwpAQCAtOTgsNiArOTgsOCBAQAogc3RhdGljIGNvbnN0IGludCBvbWFwMzR4eF9waW5zW11bMl0gPSB7fTsKICNlbmRpZgogCisjZGVmaW5lIE9NQVBfSTJDX0NNRExJTkVfU0VUVVAJKEJJVCgzMSkpCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2kyY19tdXhfcGlucyhpbnQgYnVzKQogewogCWludCBzY2wsIHNkYTsKQEAgLTExOSwxNCArMTIxLDkgQEAKIAlvbWFwX2NmZ19yZWcoc2NsKTsKIH0KIAotaW50IF9faW5pdCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCSAgdW5zaWduZWQgbGVuKQorc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfbnJfcG9ydHModm9pZCkKIHsKLQlpbnQgcG9ydHMsIGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXJlc291cmNlX3NpemVfdCBiYXNlLCBpcnE7CisJaW50IHBvcnRzID0gMDsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKIAkJcG9ydHMgPSAxOwpAQCAtMTM1LDE3ICsxMzIsMTYgQEAKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJcG9ydHMgPSAzOwogCi0JQlVHX09OKGJ1c19pZCA8IDEgfHwgYnVzX2lkID4gcG9ydHMpOworCXJldHVybiBwb3J0czsKK30KIAotCWlmIChpbmZvKSB7Ci0JCWVyciA9IGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGJ1c19pZCwgaW5mbywgbGVuKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQorc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfYWRkX2J1cyhpbnQgYnVzX2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIGlycTsKIAogCXBkZXYgPSAmb21hcF9pMmNfZGV2aWNlc1tidXNfaWQgLSAxXTsKLQkqKHUzMiAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2xrcmF0ZTsKLQogCWlmIChidXNfaWQgPT0gMSkgewogCQlyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAkJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CkBAIC0xNjMsMyArMTU5LDgxIEBACiAJb21hcF9pMmNfbXV4X3BpbnMoYnVzX2lkIC0gMSk7CiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKIH0KKworLyoqCisgKiBvbWFwX2kyY19idXNfc2V0dXAgLSBQcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciB0aGUgSTJDIGJ1cyBzcGVlZAorICogQHN0cjogU3RyaW5nIG9mIG9wdGlvbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IEkyQyBidXMgc3BlZWQgZm9yIGdpdmVuIEkyQworICogYnVzIHdpdGggYSBjb21tYW5kIGxpbmUgb3B0aW9uLgorICoKKyAqIEZvcm1hdDogaTJjX2J1cz1idXNfaWQsY2xrcmF0ZSAoaW4ga0h6KQorICoKKyAqIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfYnVzX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpbnQgcG9ydHM7CisJaW50IGludHNbM107CisKKwlwb3J0cyA9IG9tYXBfaTJjX25yX3BvcnRzKCk7CisJZ2V0X29wdGlvbnMoc3RyLCAzLCBpbnRzKTsKKwlpZiAoaW50c1swXSA8IDIgfHwgaW50c1sxXSA8IDEgfHwgaW50c1sxXSA+IHBvcnRzKQorCQlyZXR1cm4gMDsKKwlpMmNfcmF0ZVtpbnRzWzFdIC0gMV0gPSBpbnRzWzJdOworCWkyY19yYXRlW2ludHNbMV0gLSAxXSB8PSBPTUFQX0kyQ19DTURMSU5FX1NFVFVQOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpMmNfYnVzPSIsIG9tYXBfaTJjX2J1c19zZXR1cCk7CisKKy8qCisgKiBSZWdpc3RlciBidXNzZXMgZGVmaW5lZCBpbiBjb21tYW5kIGxpbmUgYnV0IHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkIHdpdGgKKyAqIG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyBmcm9tIGJvYXJkIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1c19jbWRsaW5lKHZvaWQpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpMmNfcmF0ZSk7IGkrKykKKwkJaWYgKGkyY19yYXRlW2ldICYgT01BUF9JMkNfQ01ETElORV9TRVRVUCkgeworCQkJaTJjX3JhdGVbaV0gJj0gfk9NQVBfSTJDX0NNRExJTkVfU0VUVVA7CisJCQllcnIgPSBvbWFwX2kyY19hZGRfYnVzKGkgKyAxKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisJCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CitzdWJzeXNfaW5pdGNhbGwob21hcF9yZWdpc3Rlcl9pMmNfYnVzX2NtZGxpbmUpOworCisvKioKKyAqIG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyAtIHJlZ2lzdGVyIEkyQyBidXMgd2l0aCBkZXZpY2UgZGVzY3JpcHRvcnMKKyAqIEBidXNfaWQ6IGJ1cyBpZCBjb3VudGluZyBmcm9tIG51bWJlciAxCisgKiBAY2xrcmF0ZTogY2xvY2sgcmF0ZSBvZiB0aGUgYnVzIGluIGtIegorICogQGluZm86IHBvaW50ZXIgaW50byBJMkMgZGV2aWNlIGRlc2NyaXB0b3IgdGFibGUgb3IgTlVMTAorICogQGxlbjogbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSB0YWJsZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCisgKi8KK2ludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCisJCQkgIHVuc2lnbmVkIGxlbikKK3sKKwlpbnQgZXJyOworCisJQlVHX09OKGJ1c19pZCA8IDEgfHwgYnVzX2lkID4gb21hcF9pMmNfbnJfcG9ydHMoKSk7CisKKwlpZiAoaW5mbykgeworCQllcnIgPSBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhidXNfaWQsIGluZm8sIGxlbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghaTJjX3JhdGVbYnVzX2lkIC0gMV0pCisJCWkyY19yYXRlW2J1c19pZCAtIDFdID0gY2xrcmF0ZTsKKwlpMmNfcmF0ZVtidXNfaWQgLSAxXSAmPSB+T01BUF9JMkNfQ01ETElORV9TRVRVUDsKKworCXJldHVybiBvbWFwX2kyY19hZGRfYnVzKGJ1c19pZCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ0NDllLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAyNDMwIFNEUCBib2FyZC4KLSAqCi0gKiBCYXNlZCBvbiBib2FyZC1oNC5oIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfMjQzMFNEUF9ICi0KLS8qIFBsYWNlaG9sZGVyIGZvciAyNDMwU0RQIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRVRIUl9TVEFSVAkJMHgwODAwMDMwMAotI2RlZmluZSBPTUFQMjRYWF9FVEhSX0dQSU9fSVJRCQkxNDkKLSNkZWZpbmUgU0RQMjQzMF9DUzBfQkFTRQkJMHgwNDAwMDAwMAotCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1leHRlcm4gdm9pZCBzZHAyNDMwX2ZsYXNoX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBzZHAyNDMwX3VzYl9pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFiZDVlOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTYW1zdW5nIE9NQVAyNFhYIEFwb2xsb24gYm9hcmQuCi0gKgotICogSW5pdGlhbCBjcmVhdGlvbiBieSBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9ICi0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi1leHRlcm4gdm9pZCBhcG9sbG9uX21tY19pbml0KHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIGludCBhcG9sbG9uX3BsdXModm9pZCkKLXsKLQkvKiBUaGUgYXBvbGxvbiBwbHVzIGhhcyBJRENPREUgcmV2aXNpb24gNSAqLwotCXJldHVybiBvbWFwX3JldigpICYgMHhjMDsKLX0KLQotLyogUGxhY2Vob2xkZXIgZm9yIEFQT0xMT04gc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBBUE9MTE9OX0VUSFJfR1BJT19JUlEJCTc0Ci0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWZzYW1wbGUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtZnNhbXBsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjNjNWFlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtZnNhbXBsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtZnNhbXBsZS5oCi0gKgotICogQm9hcmQtc3BlY2lmaWMgZ29vZGllcyBmb3IgVEkgRi1TYW1wbGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jLgotICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZTQU1QTEVfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlNBTVBMRV9ICi0KLS8qIGZzYW1wbGUgaXMgcHJldHR5IGNsb3NlIHRvIHAyLXNhbXBsZSAqLwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGVyc2V1czIuaD4KLQotI2RlZmluZSBmc2FtcGxlX2NwbGRfcmVhZChyZWcpIF9fcmF3X3JlYWRiKHJlZykKLSNkZWZpbmUgZnNhbXBsZV9jcGxkX3dyaXRlKHZhbCwgcmVnKSBfX3Jhd193cml0ZWIodmFsLCByZWcpCi0KLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JBU0UgICAgMHhFODEwMDAwMAotI2RlZmluZSBGU0FNUExFX0NQTERfU0laRSAgICBTWl80SwotI2RlZmluZSBGU0FNUExFX0NQTERfU1RBUlQgICAweDA1MDgwMDAwCi0KLSNkZWZpbmUgRlNBTVBMRV9DUExEX1JFR19BICAgKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwMCkKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1NXSVRDSCAgKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwMikKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1VBUlQgICAgKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwMikKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1JFR19CICAgKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwNCkKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1ZFUlNJT04gKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwNikKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1NFVF9DTFIgKEZTQU1QTEVfQ1BMRF9CQVNFICsgMHgwNikKLQotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX0JUX1JFU0VUICAgICAgICAgMAotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX0xDRF9SRVNFVCAgICAgICAgMQotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX0NBTV9QV0ROICAgICAgICAgMgotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX0NIQVJHRVJfRU5BQkxFICAgMwotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX1NEX01NQ19FTiAgICAgICAgNAotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX2FHUFNfUFdSRU4gICAgICAgNQotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX0JBQ0tMSUdIVCAgICAgICAgNgotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX2FHUFNfRU5fUkVTRVQgICAgNwotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX2FHUFNfU0xFRVB4X04gICAgOAotI2RlZmluZSBGU0FNUExFX0NQTERfQklUX09UR19SRVNFVCAgICAgICAgOQotCi0jZGVmaW5lIGZzYW1wbGVfY3BsZF9zZXQoYml0KSBcCi0gICAgZnNhbXBsZV9jcGxkX3dyaXRlKCgoKGJpdCkgJiAxNSkgPDwgNCkgfCAweDBmLCBGU0FNUExFX0NQTERfU0VUX0NMUikKLQotI2RlZmluZSBmc2FtcGxlX2NwbGRfY2xlYXIoYml0KSBcCi0gICAgZnNhbXBsZV9jcGxkX3dyaXRlKDB4ZjAgfCAoKGJpdCkgJiAxNSksIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzZmEwZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oNC5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAyNDIwIEg0IGJvYXJkLgotICoKLSAqIEluaXRpYWwgY3JlYXRpb24gYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDRfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDRfSAotCi0vKiBNTUMgUHJvdG90eXBlcyAqLwotZXh0ZXJuIHZvaWQgaDRfbW1jX2luaXQodm9pZCk7Ci0KLS8qIFBsYWNlaG9sZGVyIGZvciBINCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9INF9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaW5ub3ZhdG9yLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWlubm92YXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWUzZTc5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaW5ub3ZhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1pbm5vdmF0b3IuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKLQotI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNVhYKQotCi0jaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCi0jZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQkJRDI1Nk1fMVgxNl80QgotI2VuZGlmCi0KLSNkZWZpbmUgT01BUDE1MTBQMV9JTUlGX1BSSV9WQUxVRQkJMHgwMAotI2RlZmluZSBPTUFQMTUxMFAxX0VNSUZTX1BSSV9WQUxVRQkJMHgwMAotI2RlZmluZSBPTUFQMTUxMFAxX0VNSUZGX1BSSV9WQUxVRQkJMHgwMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCBmcGdhX3dyaXRlKHVuc2lnbmVkIGNoYXIgdmFsLCBpbnQgcmVnKTsKLXVuc2lnbmVkIGNoYXIgZnBnYV9yZWFkKGludCByZWcpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwotCi0jaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0KLS8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwotI2RlZmluZSBJTk5PVkFUT1IxNjEwX0VUSFJfU1RBUlQJMHgwNDAwMDMwMAotCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE2MTAgKi8KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjMzOTk2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMyBMRFAuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9MRFBfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfTERQX0gKLQotZXh0ZXJuIHZvaWQgdHdsNDAzMF9iY2lfYmF0dGVyeV9pbml0KHZvaWQpOwotCi0jZGVmaW5lIFRXTDQwMzBfSVJRTlVNCQlJTlRfMzRYWF9TWVNfTklSUQotI2RlZmluZSBMRFBfU01DOTExWF9DUyAgICAgICAgIDEKLSNkZWZpbmUgTERQX1NNQzkxMVhfR1BJTyAgICAgICAxNTIKLSNkZWZpbmUgREVCVUdfQkFTRSAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIE9NQVAzNFhYX0VUSFJfU1RBUlQgICAgREVCVUdfQkFTRQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9MRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1ub2tpYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1ub2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWJiZTAwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbm9raWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1ub2tpYS5oCi0gKgotICogIEluZm9ybWF0aW9uIHN0cnVjdHVyZXMgZm9yIE5va2lhLXNwZWNpZmljIGJvYXJkIGNvbmZpZyBkYXRhCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNQlOb2tpYSBDb3Jwb3JhdGlvbgotICovCi0KLSNpZm5kZWYgX09NQVBfQk9BUkRfTk9LSUFfSAotI2RlZmluZSBfT01BUF9CT0FSRF9OT0tJQV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIE9NQVBfVEFHX05PS0lBX0JUCTB4NGUwMQotI2RlZmluZSBPTUFQX1RBR19XTEFOX0NYMzExMFgJMHg0ZTAyCi0jZGVmaW5lIE9NQVBfVEFHX0NCVVMJCTB4NGUwMwotI2RlZmluZSBPTUFQX1RBR19FTV9BU0lDX0JCNQkweDRlMDQKLQotCi0jZGVmaW5lIEJUX0NISVBfQ1NSCQkxCi0jZGVmaW5lIEJUX0NISVBfVEkJCTIKLQotI2RlZmluZSBCVF9TWVNDTEtfMTIJCTEKLSNkZWZpbmUgQlRfU1lTQ0xLXzM4XzQJCTIKLQotc3RydWN0IG9tYXBfYmx1ZXRvb3RoX2NvbmZpZyB7Ci0JdTggICAgY2hpcF90eXBlOwotCXU4ICAgIGJ0X3dha2V1cF9ncGlvOwotCXU4ICAgIGhvc3Rfd2FrZXVwX2dwaW87Ci0JdTggICAgcmVzZXRfZ3BpbzsKLQl1OCAgICBidF91YXJ0OwotCXU4ICAgIGJkX2FkZHJbNl07Ci0JdTggICAgYnRfc3lzY2xrOwotfTsKLQotc3RydWN0IG9tYXBfd2xhbl9jeDMxMTB4X2NvbmZpZyB7Ci0JdTggIGNoaXBfdHlwZTsKLQlzMTYgcG93ZXJfZ3BpbzsKLQlzMTYgaXJxX2dwaW87Ci0JczE2IHNwaV9jc19ncGlvOwotfTsKLQotc3RydWN0IG9tYXBfY2J1c19jb25maWcgewotCXMxNiBjbGtfZ3BpbzsKLQlzMTYgZGF0X2dwaW87Ci0JczE2IHNlbF9ncGlvOwotfTsKLQotc3RydWN0IG9tYXBfZW1fYXNpY19iYjVfY29uZmlnIHsKLQlzMTYgcmV0dV9pcnFfZ3BpbzsKLQlzMTYgdGFodm9faXJxX2dwaW87Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4MGQ1Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAzIEJFQUdMRS4KLSAqCi0gKiBJbml0aWFsIGNyZWF0aW9uIGJ5IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQM19CRUFHTEVfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9ICi0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9zay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODUwY2IxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vc2suaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQNTkxMiBPU0sgYm9hcmQuCi0gKgotICogV3JpdHRlbiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9PU0tfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfT1NLX0gKLQotLyogQXQgT01BUDU5MTIgT1NLIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCi0jZGVmaW5lIE9NQVBfT1NLX0VUSFJfU1RBUlQJCTB4MDQ4MDAzMDAKLQotLyogVFBTNjUwMTAgaGFzIGZvdXIgR1BJT3MuICBuUEcgYW5kIExFRDIgY2FuIGJlIHRyZWF0ZWQgbGlrZSBHUElPcyB3aXRoCi0gKiBhbHRlcm5hdGUgcGluIGNvbmZpZ3VyYXRpb25zIGZvciBoYXJkd2FyZS1jb250cm9sbGVkIGJsaW5raW5nLgotICovCi0jZGVmaW5lIE9TS19UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQotIwlkZWZpbmUgT1NLX1RQU19HUElPX1VTQl9QV1JfRU4JKE9TS19UUFNfR1BJT19CQVNFICsgMCkKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDMJKE9TS19UUFNfR1BJT19CQVNFICsgMSkKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19MQU5fUkVTRVQJKE9TS19UUFNfR1BJT19CQVNFICsgMikKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19EU1BfUFdSX0VOCShPU0tfVFBTX0dQSU9fQkFTRSArIDMpCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0Q5CShPU0tfVFBTX0dQSU9fQkFTRSArIDQpCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0QyCShPU0tfVFBTX0dQSU9fQkFTRSArIDUpCi0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX09TS19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjYWU2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW92ZXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogYm9hcmQtb3Zlcm8uaCAoR3Vtc3RpeCBPdmVybykKLSAqCi0gKiBJbml0aWFsIGNvZGU6IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT1ZFUk9fSAotI2RlZmluZSBfX0FTTV9BUkNIX09WRVJPX0gKLQotI2RlZmluZSBPVkVST19HUElPX0JUX1hHQVRFCTE1Ci0jZGVmaW5lIE9WRVJPX0dQSU9fVzJXX05SRVNFVAkxNgotI2RlZmluZSBPVkVST19HUElPX0JUX05SRVNFVAkxNjQKLSNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX0NQRU4JMTY4Ci0jZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQJMTgzCi0KLSNlbmRpZiAvKiBfX19fQVNNX0FSQ0hfT1ZFUk9fSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10ZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwNmNkZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXRlLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW4gRSBkZXZpY2UuCi0gKgotICogTWFpbnRhaW50ZXJzIDoJaHR0cDovL3BhbG10ZWxpbnV4LnNmLm5ldAotICoJCQlwYWxtdGVsaW51eC1kZXZlbG9wcGVyc0BsaXN0cy5zZi5uZXQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19PTUFQX0JPQVJEX1BBTE1URV9ICi0jZGVmaW5lIF9fT01BUF9CT0FSRF9QQUxNVEVfSAotCi0jZGVmaW5lIFBBTE1URV9VU0JERVRFQ1RfR1BJTwkwCi0jZGVmaW5lIFBBTE1URV9VU0JfT1JfRENfR1BJTwkxCi0jZGVmaW5lIFBBTE1URV9UU0NfR1BJTwkJNAotI2RlZmluZSBQQUxNVEVfUElOVERBVl9HUElPCTYKLSNkZWZpbmUgUEFMTVRFX01NQ19XUF9HUElPCTgKLSNkZWZpbmUgUEFMTVRFX01NQ19QT1dFUl9HUElPCTkKLSNkZWZpbmUgUEFMTVRFX0hEUV9HUElPCQkxMQotI2RlZmluZSBQQUxNVEVfSEVBRFBIT05FU19HUElPCTE0Ci0jZGVmaW5lIFBBTE1URV9TUEVBS0VSX0dQSU8JMTUKLSNkZWZpbmUgUEFMTVRFX0RDX0dQSU8JCU9NQVBfTVBVSU8oMikKLSNkZWZpbmUgUEFMTVRFX01NQ19TV0lUQ0hfR1BJTwlPTUFQX01QVUlPKDQpCi0jZGVmaW5lIFBBTE1URV9NTUMxX0dQSU8JT01BUF9NUFVJTyg2KQotI2RlZmluZSBQQUxNVEVfTU1DMl9HUElPCU9NQVBfTVBVSU8oNykKLSNkZWZpbmUgUEFMTVRFX01NQzNfR1BJTwlPTUFQX01QVUlPKDExKQotCi0jZW5kaWYJLyogX19PTUFQX0JPQVJEX1BBTE1URV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10dC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5ZjM4Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXRlLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW58VCBkZXZpY2UuCi0gKgotICogTWFpbnRhaW50ZXJzIDoJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19PTUFQX0JPQVJEX1BBTE1UVF9ICi0jZGVmaW5lIF9fT01BUF9CT0FSRF9QQUxNVFRfSAotCi0jZGVmaW5lIFBBTE1UVF9VU0JERVRFQ1RfR1BJTwkwCi0jZGVmaW5lIFBBTE1UVF9DQUJMRV9HUElPCTEKLSNkZWZpbmUgUEFMTVRUX0xFRF9HUElPCQkzCi0jZGVmaW5lIFBBTE1UVF9QRU5JUlFfR1BJTwk2Ci0jZGVmaW5lIFBBTE1UVF9NTUNfV1BfR1BJTwk4Ci0jZGVmaW5lIFBBTE1UVF9IRFFfR1BJTwkJMTEKLQotI2VuZGlmCS8qIF9fT01BUF9CT0FSRF9QQUxNVFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtejcxLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG16NzEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkN2Q1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG16NzEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG16NzEuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgUGFsbSBaaXJlNzEgZGV2aWNlLgotICoKLSAqIE1haW50YWludGVycyA6CU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fT01BUF9CT0FSRF9QQUxNWjcxX0gKLSNkZWZpbmUgX19PTUFQX0JPQVJEX1BBTE1aNzFfSAotCi0jZGVmaW5lIFBBTE1aNzFfVVNCREVURUNUX0dQSU8JMAotI2RlZmluZSBQQUxNWjcxX1BFTklSUV9HUElPCTYKLSNkZWZpbmUgUEFMTVo3MV9NTUNfV1BfR1BJTwk4Ci0jZGVmaW5lIFBBTE1aNzFfSERRX0dQSU8gCTExCi0KLSNkZWZpbmUgUEFMTVo3MV9IT1RTWU5DX0dQSU8JT01BUF9NUFVJTygxKQotI2RlZmluZSBQQUxNWjcxX0NBQkxFX0dQSU8JT01BUF9NUFVJTygyKQotI2RlZmluZSBQQUxNWjcxX1NMSURFUl9HUElPCU9NQVBfTVBVSU8oMykKLSNkZWZpbmUgUEFMTVo3MV9NTUNfSU5fR1BJTwlPTUFQX01QVUlPKDQpCi0KLSNlbmRpZgkvKiBfX09NQVBfQk9BUkRfUEFMTVo3MV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBlcnNldXMyLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBlcnNldXMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNmMzZDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wZXJzZXVzMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBlcnNldXMyLmgKLSAqCi0gKiAgQ29weXJpZ2h0IDIwMDMgYnkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiAgICBPTUFQNzMwIC8gUGVyc2V1czIgc3VwcG9ydCBieSBKZWFuIFBpaGV0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuIChodHRwOi8vd3d3LnJpZGdlcnVuLmNvbSkKLSAqIEF1dGhvcjogUmlkZ2VSdW4sIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAotCi0jaW5jbHVkZSA8bWFjaC9mcGdhLmg+Ci0KLSNpZm5kZWYgT01BUF9TRFJBTV9ERVZJQ0UKLSNkZWZpbmUgT01BUF9TRFJBTV9ERVZJQ0UJCUQyNTZNXzFYMTZfNEIKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtdm9pY2VibHVlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXZvaWNlYmx1ZS5oCmluZGV4IGVkNmQzNDYuLjI3OTE2YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtdm9pY2VibHVlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC12b2ljZWJsdWUuaApAQCAtMTQsNyArMTQsNiBAQAogZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9lbmFibGUodm9pZCk7CiBleHRlcm4gdm9pZCB2b2ljZWJsdWVfd2R0X2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCB2b2ljZWJsdWVfd2R0X3Bpbmcodm9pZCk7Ci1leHRlcm4gdm9pZCB2b2ljZWJsdWVfcmVzZXQodm9pZCk7CiAKICNlbmRpZiAvKiAgX19BU01fQVJDSF9WT0lDRUJMVUVfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggOTQ2Njc3Mi4uNTBlYTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaApAQCAtMTcsNyArMTcsNiBAQAogLyogRGlmZmVyZW50IHBlcmlwaGVyYWwgaWRzICovCiAjZGVmaW5lIE9NQVBfVEFHX0NMT0NLCQkweDRmMDEKICNkZWZpbmUgT01BUF9UQUdfU0VSSUFMX0NPTlNPTEUgMHg0ZjAzCi0jZGVmaW5lIE9NQVBfVEFHX1VTQgkJMHg0ZjA0CiAjZGVmaW5lIE9NQVBfVEFHX0xDRAkJMHg0ZjA1CiAjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENICTB4NGYwNgogI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDcKQEAgLTEzMyw5ICsxMzIsNiBAQAogCWNoYXIgdmVyc2lvblsxMl07CiB9OwogCi0KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW5va2lhLmg+Ci0KIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSB7CiAJdTE2IHRhZzsKIAl1MTYgbGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwYzQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19NQUNIX0NMS0RFVl9ICisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Nsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCA3MTkyOTg1Li4wNzNhMmM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCkBAIC0xNywxMSArMTcsMTYgQEAKIHN0cnVjdCBjbGs7CiBzdHJ1Y3QgY2xvY2tkb21haW47CiAKK3N0cnVjdCBjbGtvcHMgeworCWludAkJCSgqZW5hYmxlKShzdHJ1Y3QgY2xrICopOworCXZvaWQJCQkoKmRpc2FibGUpKHN0cnVjdCBjbGsgKik7Cit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAogc3RydWN0IGNsa3NlbF9yYXRlIHsKLQl1OAkJCWRpdjsKIAl1MzIJCQl2YWw7CisJdTgJCQlkaXY7CiAJdTgJCQlmbGFnczsKIH07CiAKQEAgLTM0LDI0ICszOSwyOCBAQAogCXZvaWQgX19pb21lbQkJKm11bHRfZGl2MV9yZWc7CiAJdTMyCQkJbXVsdF9tYXNrOwogCXUzMgkJCWRpdjFfbWFzazsKLQl1MTYJCQlsYXN0X3JvdW5kZWRfbTsKLQl1OAkJCWxhc3Rfcm91bmRlZF9uOwotCXVuc2lnbmVkIGxvbmcJCWxhc3Rfcm91bmRlZF9yYXRlOwotCXVuc2lnbmVkIGludAkJcmF0ZV90b2xlcmFuY2U7Ci0JdTE2CQkJbWF4X211bHRpcGxpZXI7Ci0JdTgJCQltYXhfZGl2aWRlcjsKLQl1MzIJCQltYXhfdG9sZXJhbmNlOwotIyAgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLQl1OAkJCW1vZGVzOworCXN0cnVjdCBjbGsJCSpjbGtfYnlwYXNzOworCXN0cnVjdCBjbGsJCSpjbGtfcmVmOwogCXZvaWQgX19pb21lbQkJKmNvbnRyb2xfcmVnOwogCXUzMgkJCWVuYWJsZV9tYXNrOworCXVuc2lnbmVkIGludAkJcmF0ZV90b2xlcmFuY2U7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9yb3VuZGVkX3JhdGU7CisJdTE2CQkJbGFzdF9yb3VuZGVkX207CisJdTgJCQlsYXN0X3JvdW5kZWRfbjsKKwl1OAkJCW1pbl9kaXZpZGVyOworCXU4CQkJbWF4X2RpdmlkZXI7CisJdTMyCQkJbWF4X3RvbGVyYW5jZTsKKwl1MTYJCQltYXhfbXVsdGlwbGllcjsKKyMgIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJdTgJCQltb2RlczsKKwl2b2lkIF9faW9tZW0JCSphdXRvaWRsZV9yZWc7CisJdm9pZCBfX2lvbWVtCQkqaWRsZXN0X3JlZzsKKwl1MzIJCQlhdXRvaWRsZV9tYXNrOworCXUzMgkJCWZyZXFzZWxfbWFzazsKKwl1MzIJCQlpZGxlc3RfbWFzazsKIAl1OAkJCWF1dG9fcmVjYWxfYml0OwogCXU4CQkJcmVjYWxfZW5fYml0OwogCXU4CQkJcmVjYWxfc3RfYml0OwotCXZvaWQgX19pb21lbQkJKmF1dG9pZGxlX3JlZzsKLQl1MzIJCQlhdXRvaWRsZV9tYXNrOwotCXZvaWQgX19pb21lbQkJKmlkbGVzdF9yZWc7Ci0JdTgJCQlpZGxlc3RfYml0OwogIyAgZW5kaWYKIH07CiAKQEAgLTU5LDIxICs2OCwyMSBAQAogCiBzdHJ1Y3QgY2xrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7Ci0Jc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IHN0cnVjdCBjbGtvcHMJKm9wczsKIAljb25zdCBjaGFyCQkqbmFtZTsKIAlpbnQJCQlpZDsKIAlzdHJ1Y3QgY2xrCQkqcGFyZW50OworCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRyZW47CisJc3RydWN0IGxpc3RfaGVhZAlzaWJsaW5nOwkvKiBub2RlIGZvciBjaGlsZHJlbiAqLwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7CiAJX191MzIJCQlmbGFnczsKIAl2b2lkIF9faW9tZW0JCSplbmFibGVfcmVnOwotCV9fdTgJCQllbmFibGVfYml0OwotCV9fczgJCQl1c2Vjb3VudDsKLQl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CisJdW5zaWduZWQgbG9uZwkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CiAJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKIAlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwogCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7Ci0JaW50CQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7Ci0Jdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKKwlfX3U4CQkJZW5hYmxlX2JpdDsKKwlfX3M4CQkJdXNlY291bnQ7CiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAl1OAkJCWZpeGVkX2RpdjsKIAl2b2lkIF9faW9tZW0JCSpjbGtzZWxfcmVnOwpAQCAtOTksNyArMTA4LDYgQEAKIAlsb25nCQkoKmNsa19yb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAJaW50CQkoKmNsa19zZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCWludAkJKCpjbGtfc2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpOwotCXN0cnVjdCBjbGsgKgkoKmNsa19nZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQJCSgqY2xrX2FsbG93X2lkbGUpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZAkJKCpjbGtfZGVueV9pZGxlKShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQJCSgqY2xrX2Rpc2FibGVfdW51c2VkKShzdHJ1Y3QgY2xrICpjbGspOwpAQCAtMTEwLDQyICsxMTgsMzMgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBtcHVyYXRlOwogCi1leHRlcm4gaW50IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICogY3VzdG9tX2Nsb2Nrcyk7CitleHRlcm4gaW50IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICpjdXN0b21fY2xvY2tzKTsKK2V4dGVybiB2b2lkIGNsa19pbml0X29uZShzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIGNsa19yZXBhcmVudChzdHJ1Y3QgY2xrICpjaGlsZCwgc3RydWN0IGNsayAqcGFyZW50KTsKIGV4dGVybiB2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3Modm9pZCk7Ci1leHRlcm4gdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOwotZXh0ZXJuIHZvaWQgY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKLWV4dGVybiB2b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKLWV4dGVybiBpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKK2V4dGVybiB2b2lkIGNsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOworI2VuZGlmCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19udWxsOwogCiAvKiBDbG9jayBmbGFncyAqLwotI2RlZmluZSBSQVRFX0NLQ1RMCQkoMSA8PCAwKQkvKiBNYWluIGZpeGVkIHJhdGlvIGNsb2NrcyAqLworLyogYml0IDAgaXMgZnJlZSAqLwogI2RlZmluZSBSQVRFX0ZJWEVECQkoMSA8PCAxKQkvKiBGaXhlZCBjbG9jayByYXRlICovCi0jZGVmaW5lIFJBVEVfUFJPUEFHQVRFUwkJKDEgPDwgMikJLyogUHJvZ3JhbSBjaGlsZHJlbiB0b28gKi8KLSNkZWZpbmUgVklSVFVBTF9DTE9DSwkJKDEgPDwgMykJLyogQ29tcG9zaXRlIGNsb2NrIGZyb20gdGFibGUgKi8KLSNkZWZpbmUgQUxXQVlTX0VOQUJMRUQJCSgxIDw8IDQpCS8qIENsb2NrIGNhbm5vdCBiZSBkaXNhYmxlZCAqLworLyogYml0cyAyLTQgYXJlIGZyZWUgKi8KICNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkoMSA8PCA1KQkvKiBVc2UgMzItYml0IGFjY2VzcyAqLwotI2RlZmluZSBWSVJUVUFMX0lPX0FERFJFU1MJKDEgPDwgNikJLyogQ2xvY2sgaW4gdmlydHVhbCBhZGRyZXNzICovCiAjZGVmaW5lIENMT0NLX0lETEVfQ09OVFJPTAkoMSA8PCA3KQogI2RlZmluZSBDTE9DS19OT19JRExFX1BBUkVOVAkoMSA8PCA4KQogI2RlZmluZSBERUxBWUVEX0FQUAkJKDEgPDwgOSkJLyogRGVsYXkgYXBwbGljYXRpb24gb2YgY2xvY2sgKi8KICNkZWZpbmUgQ09ORklHX1BBUlRJQ0lQQU5UCSgxIDw8IDEwKQkvKiBGdW5kYW1lbnRhbCBjbG9jayAqLwogI2RlZmluZSBFTkFCTEVfT05fSU5JVAkJKDEgPDwgMTEpCS8qIEVuYWJsZSB1cG9uIGZyYW1ld29yayBpbml0ICovCiAjZGVmaW5lIElOVkVSVF9FTkFCTEUgICAgICAgICAgICgxIDw8IDEyKSAgICAgICAvKiAwIGVuYWJsZXMsIDEgZGlzYWJsZXMgKi8KLS8qIGJpdHMgMTMtMjAgYXJlIGN1cnJlbnRseSBmcmVlICovCi0jZGVmaW5lIENMT0NLX0lOX09NQVAzMTAJKDEgPDwgMjEpCi0jZGVmaW5lIENMT0NLX0lOX09NQVA3MzAJKDEgPDwgMjIpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAxNTEwCSgxIDw8IDIzKQotI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAkoMSA8PCAyNCkKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0MlgJKDEgPDwgMjUpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAyNDNYCSgxIDw8IDI2KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMzQzWAkoMSA8PCAyNykJLyogY2xvY2tzIGNvbW1vbiB0byBhbGwgMzQzWCAqLwotI2RlZmluZSBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0sJKDEgPDwgMjgpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAzNDMwRVMxCSgxIDw8IDI5KQkvKiAzNDMwRVMxIGNsb2NrcyBvbmx5ICovCi0jZGVmaW5lIENMT0NLX0lOX09NQVAzNDMwRVMyCSgxIDw8IDMwKQkvKiAzNDMwRVMyIGNsb2NrcyBvbmx5ICovCisvKiBiaXRzIDEzLTMxIGFyZSBjdXJyZW50bHkgZnJlZSAqLwogCiAvKiBDbGtzZWxfcmF0ZSBmbGFncyAqLwogI2RlZmluZSBERUZBVUxUX1JBVEUJCSgxIDw8IDApCkBAIC0xNTcsOSArMTU2LDQgQEAKICNkZWZpbmUgUkFURV9JTl8yNFhYCQkoUkFURV9JTl8yNDJYIHwgUkFURV9JTl8yNDNYKQogCiAKLS8qIENNX0NMS1NFTDJfUExMLkNPUkVfQ0xLX1NSQyBvcHRpb25zICgyNFhYKSAqLwotI2RlZmluZSBDT1JFX0NMS19TUkNfMzJLCQkwCi0jZGVmaW5lIENPUkVfQ0xLX1NSQ19EUExMCQkxCi0jZGVmaW5lIENPUkVfQ0xLX1NSQ19EUExMX1gyCQkyCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCmluZGV4IDFmNTFmMDEuLmI5ZDBkZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9ja2RvbWFpbi5oCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKICAqCiAgKiBPTUFQMi8zIGNsb2NrZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKICAqCkBAIC00OCwxMSArNDgsMTMgQEAKICAqLwogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgewogCi0JLyogTmFtZSBvZiB0aGUgcG93ZXJkb21haW4gdG8gYWRkIGEgd2tkZXAvc2xlZXBkZXAgb24gKi8KLQljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCXVuaW9uIHsKKwkJLyogTmFtZSBvZiB0aGUgcG93ZXJkb21haW4gdG8gYWRkIGEgd2tkZXAvc2xlZXBkZXAgb24gKi8KKwkJY29uc3QgY2hhciAqbmFtZTsKIAotCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCQkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIChsb29rZWQgdXAgYXQgY2xrZG1faW5pdCgpIHRpbWUpICovCisJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOworCX0gcHdyZG07CiAKIAkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGRlcCBpcyB2YWxpZCBvbiAqLwogCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOwpAQCAtNjQsOCArNjYsMTMgQEAKIAkvKiBDbG9ja2RvbWFpbiBuYW1lICovCiAJY29uc3QgY2hhciAqbmFtZTsKIAotCS8qIFBvd2VyZG9tYWluIGVuY2xvc2luZyB0aGlzIGNsb2NrZG9tYWluICovCi0JY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKwl1bmlvbiB7CisJCS8qIFBvd2VyZG9tYWluIGVuY2xvc2luZyB0aGlzIGNsb2NrZG9tYWluICovCisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCisJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOworCX0gcHdyZG07CiAKIAkvKiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZyAqLwogCWNvbnN0IHUxNiBjbGt0cmN0cmxfbWFzazsKQEAgLTc5LDkgKzg2LDYgQEAKIAkvKiBVc2Vjb3VudCB0cmFja2luZyAqLwogCWF0b21pY190IHVzZWNvdW50OwogCi0JLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCi0Jc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKLQogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IGU3NDZlYzcuLjBlY2YzNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtNjUsNyArNjUsNyBAQAogCiAvKiBUaGVzZSBnZXQgY2FsbGVkIGZyb20gb21hcDJfc2V0X2dsb2JhbHNfeHh4eCgpLCBkbyBub3QgY2FsbCB0aGVzZSAqLwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKLXZvaWQgb21hcDJfc2V0X2dsb2JhbHNfbWVtb3J5KHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7Cit2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3NkcmMoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfY29udHJvbChzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19wcmNtKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGE4ZTExNzguLjk4YjE0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtNTYsNiArNTYsMTQgQEAKICMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAogIyBlbmRpZgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDg1MAorIyBlbmRpZgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKICMgaWZkZWYgT01BUF9OQU1FCiAjICB1bmRlZiAgTVVMVElfT01BUDEKQEAgLTEwNSw3ICsxMTMsNyBAQAogLyoKICAqIE1hY3JvcyB0byBncm91cCBPTUFQIGludG8gY3B1IGNsYXNzZXMuCiAgKiBUaGVzZSBjYW4gYmUgdXNlZCBpbiBtb3N0IHBsYWNlcy4KLSAqIGNwdV9pc19vbWFwN3h4KCk6CVRydWUgZm9yIE9NQVA3MzAKKyAqIGNwdV9pc19vbWFwN3h4KCk6CVRydWUgZm9yIE9NQVA3MzAsIE9NQVA4NTAKICAqIGNwdV9pc19vbWFwMTV4eCgpOglUcnVlIGZvciBPTUFQMTUxMCwgT01BUDU5MTAgYW5kIE9NQVAzMTAKICAqIGNwdV9pc19vbWFwMTZ4eCgpOglUcnVlIGZvciBPTUFQMTYxMCwgT01BUDU5MTIgYW5kIE9NQVAxNzEwCiAgKiBjcHVfaXNfb21hcDI0eHgoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMywgT01BUDI0MzAKQEAgLTE1Myw2ICsxNjEsMTAgQEAKICMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCWlzX29tYXA3eHgoKQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKKyMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJaXNfb21hcDE1eHgoKQpAQCAtMTY2LDYgKzE3OCwxMCBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCisjIGVuZGlmCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTEKQEAgLTIxOSw2ICsyMzUsNyBAQAogICogVGhlc2UgYXJlIG9ubHkgcmFyZWx5IG5lZWRlZC4KICAqIGNwdV9pc19vbWFwMzMwKCk6CVRydWUgZm9yIE9NQVAzMzAKICAqIGNwdV9pc19vbWFwNzMwKCk6CVRydWUgZm9yIE9NQVA3MzAKKyAqIGNwdV9pc19vbWFwODUwKCk6CVRydWUgZm9yIE9NQVA4NTAKICAqIGNwdV9pc19vbWFwMTUxMCgpOglUcnVlIGZvciBPTUFQMTUxMAogICogY3B1X2lzX29tYXAxNjEwKCk6CVRydWUgZm9yIE9NQVAxNjEwCiAgKiBjcHVfaXNfb21hcDE2MTEoKToJVHJ1ZSBmb3IgT01BUDE2MTEKQEAgLTI0MSw2ICsyNTgsNyBAQAogCiBJU19PTUFQX1RZUEUoMzEwLCAweDAzMTApCiBJU19PTUFQX1RZUEUoNzMwLCAweDA3MzApCitJU19PTUFQX1RZUEUoODUwLCAweDA4NTApCiBJU19PTUFQX1RZUEUoMTUxMCwgMHgxNTEwKQogSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYxMCkKIElTX09NQVBfVFlQRSgxNjExLCAweDE2MTEpCkBAIC0yNTUsNiArMjczLDcgQEAKIAogI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJMApAQCAtMjcyLDEyICsyOTEsMjIgQEAKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA4NTAKKyMgIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKKyMgZW5kaWYKICNlbHNlCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTEKICMgZW5kaWYKICNlbmRpZgorI2Vsc2UKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQorIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCisjICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMQorIyBlbmRpZgorI2VuZGlmCiAKIC8qCiAgKiBXaGV0aGVyIHdlIGhhdmUgTVVMVElfT01BUDEgb3Igbm90LCB3ZSBzdGlsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoCkBAIC0zMjAsNyArMzQ5LDcgQEAKICNlbmRpZgogCiAvKiBNYWNyb3MgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgT01BUDEgb3IgT01BUDIgKi8KLSNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkJKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgXAorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKQkoY3B1X2lzX29tYXA3eHgoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCBcCiAJCQkJY3B1X2lzX29tYXAxNnh4KCkpCiAjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMigpCShjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKIApAQCAtMzU1LDEzICszODQsMjcgQEAKICAqIHVzZSBvbWFwX2NoaXBfaXMoKS4KICAqCiAgKi8KLSNkZWZpbmUgQ0hJUF9JU19PTUFQMjQyMCAgICAgICAoMSA8PCAwKQotI2RlZmluZSBDSElQX0lTX09NQVAyNDMwICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENISVBfSVNfT01BUDM0MzAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTMSAgICAoMSA8PCAzKQotI2RlZmluZSBDSElQX0lTX09NQVAzNDMwRVMyICAgICgxIDw8IDQpCisjZGVmaW5lIENISVBfSVNfT01BUDI0MjAJCSgxIDw8IDApCisjZGVmaW5lIENISVBfSVNfT01BUDI0MzAJCSgxIDw8IDEpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzAJCSgxIDw8IDIpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzEJCSgxIDw8IDMpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzIJCSgxIDw8IDQpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzNfMAkJKDEgPDwgNSkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18xCQkoMSA8PCA2KQogCi0jZGVmaW5lIENISVBfSVNfT01BUDI0WFggICAgICAgKENISVBfSVNfT01BUDI0MjAgfCBDSElQX0lTX09NQVAyNDMwKQorI2RlZmluZSBDSElQX0lTX09NQVAyNFhYCQkoQ0hJUF9JU19PTUFQMjQyMCB8IENISVBfSVNfT01BUDI0MzApCisKKy8qCisgKiAiR0UiIGhlcmUgcmVwcmVzZW50cyAiZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIiBpbiB0ZXJtcyBvZiBFUworICogbGV2ZWxzLiAgU28gQ0hJUF9HRV9PTUFQMzQzMEVTMiBpcyBpbnRlbmRlZCB0byBtYXRjaCBhbGwgT01BUDM0MzAKKyAqIGNoaXBzIGF0IEVTMiBhbmQgYmV5b25kLCBidXQgbm90LCBmb3IgZXhhbXBsZSwgYW55IE9NQVAgbGluZXMgYWZ0ZXIKKyAqIE9NQVAzLgorICovCisjZGVmaW5lIENISVBfR0VfT01BUDM0MzBFUzIJCShDSElQX0lTX09NQVAzNDMwRVMyIHwgXAorCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18wIHwgXAorCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18xKQorI2RlZmluZSBDSElQX0dFX09NQVAzNDMwRVMzXzEJCShDSElQX0lTX09NQVAzNDMwRVMzXzEpCisKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7CiBpbnQgb21hcF90eXBlKHZvaWQpOwpAQCAtMzc4LDUgKzQyMSwzIEBACiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOwogCiAjZW5kaWYgICAgLyogZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDhkOWRmZTMuLjJiMjJhODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0zMSw3ICszMSw4IEBACiAKICNkZWZpbmUgT01BUF9NUFVJT19CQVNFCQkJMHhmZmZiNTAwMAogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorI2lmIChkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkpCisKICNkZWZpbmUgT01BUF9NUFVJT19JTlBVVF9MQVRDSAkJMHgwMAogI2RlZmluZSBPTUFQX01QVUlPX09VVFBVVAkJMHgwMgogI2RlZmluZSBPTUFQX01QVUlPX0lPX0NOVEwJCTB4MDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKaW5kZXggNDViNjc4NC4uOTIxYjE2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKQEAgLTEwMyw2ICsxMDMsNiBAQAogZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CiBleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKTsKIGV4dGVybiBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpOwotZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGdwbWNfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNjU4OWRkYi4uM2RjNDIzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjg2LDc4ICsyODYsNCBAQAogI2luY2x1ZGUgIm9tYXAyNHh4LmgiCiAjaW5jbHVkZSAib21hcDM0eHguaCIKIAotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEJvYXJkIHNwZWNpZmljIGRlZmluZXMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUgotI2luY2x1ZGUgImJvYXJkLWlubm92YXRvci5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0gyCi0jaW5jbHVkZSAiYm9hcmQtaDIuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgotI2luY2x1ZGUgImJvYXJkLXBlcnNldXMyLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfRlNBTVBMRQotI2luY2x1ZGUgImJvYXJkLWZzYW1wbGUuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9IMwotI2luY2x1ZGUgImJvYXJkLWgzLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfSDQKLSNpbmNsdWRlICJib2FyZC1oNC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFAKLSNpbmNsdWRlICJib2FyZC0yNDMwc2RwLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRQotI2luY2x1ZGUgImJvYXJkLW9tYXAzYmVhZ2xlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfTERQCi0jaW5jbHVkZSAiYm9hcmQtbGRwLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfQVBPTExPTgotI2luY2x1ZGUgImJvYXJkLWFwb2xsb24uaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9PU0sKLSNpbmNsdWRlICJib2FyZC1vc2suaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCi0jaW5jbHVkZSAiYm9hcmQtdm9pY2VibHVlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVRFCi0jaW5jbHVkZSAiYm9hcmQtcGFsbXRlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVo3MQotI2luY2x1ZGUgImJvYXJkLXBhbG16NzEuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVFQKLSNpbmNsdWRlICJib2FyZC1wYWxtdHQuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfU1gxCi0jaW5jbHVkZSAiYm9hcmQtc3gxLmgiCi0jZW5kaWYKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxFUl9fICovCi0KICNlbmRpZgkvKiBfX0FTTV9BUkNIX09NQVBfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGQ5MmJmNzkuLjA2MTBkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE4NSwxMSArMTg1LDEzIEBACiAjZGVmaW5lIG9tYXBfd3JpdGV3KHYsYSkJX19yYXdfd3JpdGV3KHYsIElPX0FERFJFU1MoYSkpCiAjZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkJX19yYXdfd3JpdGVsKHYsIElPX0FERFJFU1MoYSkpCiAKK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zOworCiBleHRlcm4gdm9pZCBvbWFwMV9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDFfaW5pdF9jb21tb25faHcodm9pZCk7CiAKIGV4dGVybiB2b2lkIG9tYXAyX21hcF9jb21tb25faW8odm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCk7CiAKICNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCxzLHQpCW9tYXBfaW9yZW1hcChwLHMsdCkKICNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJb21hcF9pb3VubWFwKHYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IGJlZDUyNzQuLjdmNTdlZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMDUsNiArMTA1LDI5IEBACiAjZGVmaW5lIElOVF83MzBfU1BHSU9fV1IJMjkKIAogLyoKKyAqIE9NQVAtODUwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCisgKi8KKyNkZWZpbmUgSU5UXzg1MF9JSDJfRklRCQkwCisjZGVmaW5lIElOVF84NTBfSUgyX0lSUQkJMQorI2RlZmluZSBJTlRfODUwX1VTQl9OT05fSVNPCTIKKyNkZWZpbmUgSU5UXzg1MF9VU0JfSVNPCQkzCisjZGVmaW5lIElOVF84NTBfSUNSCQk0CisjZGVmaW5lIElOVF84NTBfRUFDCQk1CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMQk2CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMgk3CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMwk4CisjZGVmaW5lIElOVF84NTBfTWNCU1AyVFgJMTAKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDJSWAkxMQorI2RlZmluZSBJTlRfODUwX01jQlNQMlJYX09WRgkxMgorI2RlZmluZSBJTlRfODUwX0xDRF9MSU5FCTE0CisjZGVmaW5lIElOVF84NTBfR1NNX1BST1RFQ1QJMTUKKyNkZWZpbmUgSU5UXzg1MF9USU1FUjMJCTE2CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LNQkxNworI2RlZmluZSBJTlRfODUwX0dQSU9fQkFOSzYJMTgKKyNkZWZpbmUgSU5UXzg1MF9TUEdJT19XUgkyOQorCisKKy8qCiAgKiBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgogICoKICAqIE5PVEU6IFNlZSBhbHNvIHRoZSBPTUFQLTE1MTAgYW5kIDE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgYmVsb3cKQEAgLTIzNyw2ICsyNjAsNjQgQEAKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxNQkoNjIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9OQU5ECQkoNjMgKyBJSDJfQkFTRSkKIAorLyoKKyAqIE9NQVAtODUwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAyCisgKi8KKyNkZWZpbmUgSU5UXzg1MF9IV19FUlJPUlMJKDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ORklRX1BXUl9GQUlMCSgxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfQ0ZDRAkJKDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9DRklSRVEJCSgzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfSTJDCQkoNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1BDQwkJKDUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NUFVfRVhUX05JUlEJKDYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TUElfMTAwS18xCSg3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfU1lSRU5fU1BJCSg4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVkxZTlEJCSg5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LNAkoMTAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFUWAkoMTEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFSWAkoMTIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFSWF9PRgkoMTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VQVJUX01PREVNX0lSREFfMiAoMTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VQVJUX01PREVNXzEJKDE1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTUNTSQkJKDE2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfdVdpcmVUWAkJKDE3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfdVdpcmVSWAkJKDE4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfU01DX0NECQkoMTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TTUNfSVJFUQkoMjAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9IRFFfMVdJUkUJKDIxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVElNRVIzMksJKDIyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTU1DX1NESU8JKDIzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVVBMRAkJKDI0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVVNCX0hIQ18xCSgyNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VTQl9ISENfMgkoMjggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VU0JfR0VOSQkoMjkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VU0JfT1RHCQkoMzAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9DQU1FUkFfSUYJKDMxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfUk5HCQkoMzIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9EVUFMX01PREVfVElNRVIgKDMzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfREJCX1JGX0VOCSgzNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01QVUlPX0tFWVBBRAkoMzUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TSEExX01ENQkoMzYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TUElfMTAwS18yCSgzNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1JOR19JRExFCSgzOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01QVUlPCQkoMzkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9MTFBDX0xDRF9DVFJMX0NBTl9CRV9PRkYJKDQwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTExQQ19PRV9GQUxMSU5HICg0MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0xMUENfT0VfUklTSU5HCSg0MiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0xMUENfVlNZTkMJKDQzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfV0FLRV9VUF9SRVEJKDQ2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NINgkJKDUzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NINwkJKDU0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIOAkJKDU1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIOQkJKDU2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTAJKDU3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTEJKDU4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTIJKDU5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTMJKDYwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTQJKDYxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTkFORAkJKDYzICsgSUgyX0JBU0UpCisKICNkZWZpbmUgSU5UXzI0WFhfU1lTX05JUlEJNwogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAJMTIKICNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExCTEzCkBAIC0zNDEsNyArNDIyLDcgQEAKIAogI2RlZmluZQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCiAKLS8qIE1heC4gMTI4IGxldmVsIDIgSVJRcyAoT01BUDE2MTApLCAxOTIgR1BJT3MgKE9NQVA3MzApIGFuZAorLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMC84NTApIGFuZAogICogMTYgTVBVSU8gbGluZXMgKi8KICNkZWZpbmUgT01BUF9NQVhfR1BJT19MSU5FUwkxOTIKICNkZWZpbmUgSUhfR1BJT19CQVNFCQkoMTI4ICsgSUgyX0JBU0UpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21haWxib3guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCmluZGV4IDdjYmVkOTMuLmI3YTY5OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCkBAIC0zMyw2ICszMyw5IEBACiAJdm9pZAkJKCpkaXNhYmxlX2lycSkoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSk7CiAJdm9pZAkJKCphY2tfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKIAlpbnQJCSgqaXNfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKKwkvKiBjdHggKi8KKwl2b2lkCQkoKnNhdmVfY3R4KShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KTsKKwl2b2lkCQkoKnJlc3RvcmVfY3R4KShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KTsKIH07CiAKIHN0cnVjdCBvbWFwX21ib3hfcXVldWUgewpAQCAtNTMsNyArNTYsNyBAQAogCiAJbWJveF9tc2dfdAkJc2VxX3NuZCwgc2VxX3JjdjsKIAotCXN0cnVjdCBkZXZpY2UJCWRldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCiAJc3RydWN0IG9tYXBfbWJveAkqbmV4dDsKIAl2b2lkCQkJKnByaXY7CkBAIC02Nyw3ICs3MCwyNyBAQAogc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICopOwogdm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKik7CiAKLWludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqKTsKK2ludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgb21hcF9tYm94ICopOwogaW50IG9tYXBfbWJveF91bnJlZ2lzdGVyKHN0cnVjdCBvbWFwX21ib3ggKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX21ib3hfc2F2ZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpZiAoIW1ib3gtPm9wcy0+c2F2ZV9jdHgpIHsKKwkJZGV2X2VycihtYm94LT5kZXYsICIlczpcdG5vIHNhdmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW1ib3gtPm9wcy0+c2F2ZV9jdHgobWJveCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX21ib3hfcmVzdG9yZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpZiAoIW1ib3gtPm9wcy0+cmVzdG9yZV9jdHgpIHsKKwkJZGV2X2VycihtYm94LT5kZXYsICIlczpcdG5vIHJlc3RvcmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW1ib3gtPm9wcy0+cmVzdG9yZV9jdHgobWJveCk7Cit9CisKICNlbmRpZiAvKiBNQUlMQk9YX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAppbmRleCAxMTNjMjQ2Li5iYjE1NGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCkBAIC0zNDQsOCArMzQ0LDYgQEAKIAl1OCBkbWFfcnhfc3luYywgZG1hX3R4X3N5bmM7CiAJdTE2IHJ4X2lycSwgdHhfaXJxOwogCXN0cnVjdCBvbWFwX21jYnNwX29wcyAqb3BzOwotCWNoYXIgY29uc3QgKipjbGtfbmFtZXM7Ci0JaW50IG51bV9jbGtzOwogfTsKIAogc3RydWN0IG9tYXBfbWNic3AgewpAQCAtMzc3LDggKzM3NSw4IEBACiAJLyogUHJvdGVjdCB0aGUgZmllbGQgLmZyZWUsIHdoaWxlIGNoZWNraW5nIGlmIHRoZSBtY2JzcCBpcyBpbiB1c2UgKi8KIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IGNsayAqKmNsa3M7Ci0JaW50IG51bV9jbGtzOworCXN0cnVjdCBjbGsgKmljbGs7CisJc3RydWN0IGNsayAqZmNsazsKIH07CiBleHRlcm4gc3RydWN0IG9tYXBfbWNic3AgKiptY2JzcF9wdHI7CiBleHRlcm4gaW50IG9tYXBfbWNic3BfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBkNmI1Y2E2Li45OWVkNTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTYxLDkgKzYxLDExIEBACiAjZGVmaW5lIGxidXNfdG9fdmlydCh4KQkJKCh4KSAtIE9NQVAxNTEwX0xCX09GRlNFVCArIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBpc19sYnVzX2RldmljZShkZXYpCShjcHVfaXNfb21hcDE1eHgoKSAmJiBkZXYgJiYgKHN0cm5jbXAoZGV2X25hbWUoZGV2KSwgIm9oY2kiLCA0KSA9PSAwKSkKIAotI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCBwYWdlKQkoe2lzX2xidXNfZGV2aWNlKGRldikgPyBcCi0JCQkJCShkbWFfYWRkcl90KXZpcnRfdG9fbGJ1cyhwYWdlX2FkZHJlc3MocGFnZSkpIDogXAotCQkJCQkoZG1hX2FkZHJfdClfX3ZpcnRfdG9fcGh5cyhwYWdlX2FkZHJlc3MocGFnZSkpO30pCisjZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpCVwKKwkoeyBkbWFfYWRkcl90IF9fZG1hID0gcGFnZV90b19waHlzKHBhZ2UpOyBcCisJICAgaWYgKGlzX2xidXNfZGV2aWNlKGRldikpIFwKKwkJX19kbWEgPSBfX2RtYSAtIFBIWVNfT0ZGU0VUICsgT01BUDE1MTBfTEJfT0ZGU0VUOyBcCisJICAgX19kbWE7IH0pCiAKICNkZWZpbmUgX19hcmNoX2RtYV90b192aXJ0KGRldiwgYWRkcikJKHsgKHZvaWQgKikgKGlzX2xidXNfZGV2aWNlKGRldikgPyBcCiAJCQkJCQlsYnVzX3RvX3ZpcnQoYWRkcikgOiBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaAppbmRleCA3M2E5ZTE1Li40NDM1YmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTM3LDYgKzM3LDggQEAKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgeworCS8qIGJhY2stbGluayB0byBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAkvKiBudW1iZXIgb2Ygc2xvdHMgcGVyIGNvbnRyb2xsZXIgKi8KIAl1bnNpZ25lZCBucl9zbG90czoyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggZjQzNjJiOC4uODVhNjIxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC02MSw2ICs2MSwxNiBAQAogCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKIAkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAogCisjZGVmaW5lIE1VWF9SRUdfODUwKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiT01BUDg1MF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5tdXhfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR184NTAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfbmFtZSA9ICJPTUFQODUwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLnB1bGxfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbHNlCiAKICNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKQEAgLTgzLDYgKzkzLDE1IEBACiAJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAogCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCiAKKyNkZWZpbmUgTVVYX1JFR184NTAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgXAorCQkJCQkubXV4X3JlZyA9IE9NQVA4NTBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgXAorCQkJCQkubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUdfODUwKHJlZywgYml0LCBzdGF0dXMpCS5wdWxsX3JlZyA9IE9NQVA4NTBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKKwkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAorCiAjZW5kaWYgLyogQ09ORklHX09NQVBfTVVYX0RFQlVHICovCiAKICNkZWZpbmUgTVVYX0NGRyhkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXApAQCAtOTgsNyArMTE3LDcgQEAKIAogCiAvKgotICogT01BUDczMCBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlnIGZvciB0aGUgcGluIG11eC4KKyAqIE9NQVA3MzAvODUwIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWcgZm9yIHRoZSBwaW4gbXV4LgogICogLSBjb25maWcgcmVncyBhcmUgdGhlIE9NQVA3MzBfSU9fQ09ORl94IHJlZ3MgKHNlZSBvbWFwNzMwLmgpIHJlZ3MgYW5kCiAgKiAgIG5vdCB0aGUgRlVOQ19NVVhfQ1RSTF94IHJlZ3MgZnJvbSBoYXJkd2FyZS5oCiAgKiAtIGZvciBwdWxsLXVwL2Rvd24sIG9ubHkgaGFzIG9uZSBlbmFibGUgYml0IHdoaWNoIGlzIGlzIGluIHRoZSBzYW1lIHJlZ2lzdGVyCkBAIC0xMTQsNiArMTMzLDE3IEBACiAJUFVfUERfUkVHKE5BLCAwKQkJXAogfSwKIAorI2RlZmluZSBNVVhfQ0ZHXzg1MChkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXAorCQkgICBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsIGRlYnVnX3N0YXR1cylcCit7CQkJCQkJCVwKKwkubmFtZSA9CSBkZXNjLAkJCQkJXAorCS5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywJCQkJXAorCU1VWF9SRUdfODUwKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKQkJXAorCVBVTExfUkVHXzg1MChtdXhfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMpCVwKKwlQVV9QRF9SRUcoTkEsIDApCQlcCit9LAorCisKICNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAogCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCiB7CQkJCQkJCQlcCkBAIC0yMjEsNiArMjUxLDI2IEBACiAJVzE3XzczMF9VU0JfVkJVU0ksCiB9OwogCitlbnVtIG9tYXA4NTBfaW5kZXggeworCS8qIE9NQVAgODUwIGtleWJvYXJkICovCisJRTJfODUwX0tCUjAsCisJSjdfODUwX0tCUjEsCisJRTFfODUwX0tCUjIsCisJRjNfODUwX0tCUjMsCisJRDJfODUwX0tCUjQsCisJQzJfODUwX0tCQzAsCisJRDNfODUwX0tCQzEsCisJRTRfODUwX0tCQzIsCisJRjRfODUwX0tCQzMsCisJRTNfODUwX0tCQzQsCisKKwkvKiBVU0IgKi8KKwlBQTE3Xzg1MF9VU0JfRE0sCisJVzE2Xzg1MF9VU0JfUFVfRU4sCisJVzE3Xzg1MF9VU0JfVkJVU0ksCit9OworCisKIGVudW0gb21hcDF4eHhfaW5kZXggewogCS8qIFVBUlQxIChCVF9VQVJUX0dBVElORykqLwogCVVBUlQxX1RYID0gMCwKQEAgLTc4OCw3ICs4MzgsMjAgQEAKIAkgKiAgLSAiX0RPV04iIHN1ZmZpeCAoR1BJTzNfRE9XTikgd2l0aCBpbnRlcm5hbCBwdWxsZG93bgogCSAqICAtICJfT1VUIiBzdWZmaXggKEdQSU8zX09VVCkgZm9yIG91dHB1dC1vbmx5IHBpbnMgKHVubGlrZSAyNHh4KQogCSAqLworCUFGMjZfMzRYWF9HUElPMCwKKwlBRjIyXzM0WFhfR1BJTzksCiAJQUg4XzM0WFhfR1BJTzI5LAorCVU4XzM0WFhfR1BJTzU0X09VVCwKKwlVOF8zNFhYX0dQSU81NF9ET1dOLAorCUw4XzM0WFhfR1BJTzYzLAorCUcyNV8zNFhYX0dQSU84Nl9PVVQsCisJQUc0XzM0WFhfR1BJTzEzNF9PVVQsCisJQUU0XzM0WFhfR1BJTzEzNl9PVVQsCisJQUY2XzM0WFhfR1BJTzE0MF9VUCwKKwlBRTZfMzRYWF9HUElPMTQxLAorCUFGNV8zNFhYX0dQSU8xNDIsCisJQUU1XzM0WFhfR1BJTzE0MywKKwlIMTlfMzRYWF9HUElPMTY0X09VVCwKIAlKMjVfMzRYWF9HUElPMTcwLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMzR4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMzR4eC5oCmluZGV4IDhlMDQ3OWYuLmFiNjQwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDM0eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAzNHh4LmgKQEAgLTQ5LDExICs0OSwzOSBAQAogI2RlZmluZSBPTUFQMzQzWF9DVFJMX0JBU0UJT01BUDM0M1hfU0NNX0JBU0UKIAogI2RlZmluZSBPTUFQMzRYWF9JQ19CQVNFCTB4NDgyMDAwMDAKKworI2RlZmluZSBPTUFQMzQzMF9JU1BfQkFTRQkJKEw0XzM0WFhfQkFTRSArIDB4QkMwMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQlVGRl9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDAxMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQ1AyX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MDQwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NDRENfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgwNjAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfSElTVF9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDBBMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9IM0FfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgwQzAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfUFJFVl9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDBFMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9SRVNaX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MTAwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1NCTF9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDEyMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9NTVVfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxNDAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMkFfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxODAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MTk3MCkKKworI2RlZmluZSBPTUFQMzQzMF9JU1BfRU5ECQkoT01BUDM0MzBfSVNQX0JBU0UgICAgICAgICArIDB4MDZGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ0JVRkZfRU5ECQkoT01BUDM0MzBfSVNQX0NCVUZGX0JBU0UgICArIDB4MDc3KQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ0NQMl9FTkQJCShPTUFQMzQzMF9JU1BfQ0NQMl9CQVNFICAgICsgMHgxRUYpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQ0RDX0VORAkJKE9NQVAzNDMwX0lTUF9DQ0RDX0JBU0UgICAgKyAweDBBNykKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0hJU1RfRU5ECQkoT01BUDM0MzBfSVNQX0hJU1RfQkFTRSAgICArIDB4MDQ3KQorI2RlZmluZSBPTUFQMzQzMF9JU1BfSDNBX0VORAkJKE9NQVAzNDMwX0lTUF9IM0FfQkFTRSAgICAgKyAweDA1RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1BSRVZfRU5ECQkoT01BUDM0MzBfSVNQX1BSRVZfQkFTRSAgICArIDB4MDlGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfUkVTWl9FTkQJCShPTUFQMzQzMF9JU1BfUkVTWl9CQVNFICAgICsgMHgwQUIpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9TQkxfRU5ECQkoT01BUDM0MzBfSVNQX1NCTF9CQVNFICAgICArIDB4MEZCKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfTU1VX0VORAkJKE9NQVAzNDMwX0lTUF9NTVVfQkFTRSAgICAgKyAweDA2RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NTSTJBX0VORAkJKE9NQVAzNDMwX0lTUF9DU0kyQV9CQVNFICAgKyAweDE2RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NTSTJQSFlfRU5ECShPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFICsgMHgwMDcpCisKICNkZWZpbmUgT01BUDM0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCiAjZGVmaW5lIE9NQVAzNFhYX0hTVVNCX09UR19CQVNFCShMNF8zNFhYX0JBU0UgKyAweEFCMDAwKQogI2RlZmluZSBPTUFQMzRYWF9IU1VTQl9IT1NUX0JBU0UJKEw0XzM0WFhfQkFTRSArIDB4NjQwMDApCiAjZGVmaW5lIE9NQVAzNFhYX1VTQlRMTF9CQVNFCShMNF8zNFhYX0JBU0UgKyAweDYyMDAwKQogCisjZGVmaW5lIE9NQVAzNFhYX01BSUxCT1hfQkFTRQkJKEw0XzM0WFhfQkFTRSArIDB4OTQwMDApCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXA4NTAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDg1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2Y2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXA4NTAuaApAQCAtMCwwICsxLDEwMiBAQAorLyogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwODUwLmgKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDg1MCBwcm9jZXNzb3IuCisgKgorICogRGVyaXZlZCBmcm9tIG9tYXA3MzAuaCBieSBaZWJlZGlhaCBDLiBNY0NsdXJlIDx6bWNAbHVyaWFuLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQODUwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQODUwX0gKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJhc2UgYWRkcmVzc2VzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogU3ludGF4OiBYWF9CQVNFID0gVmlydHVhbCBiYXNlIGFkZHJlc3MsIFhYX1NUQVJUID0gUGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgT01BUDg1MF9EU1BfQkFTRQkweEUwMDAwMDAwCisjZGVmaW5lIE9NQVA4NTBfRFNQX1NJWkUJMHg1MDAwMAorI2RlZmluZSBPTUFQODUwX0RTUF9TVEFSVAkweEUwMDAwMDAwCisKKyNkZWZpbmUgT01BUDg1MF9EU1BSRUdfQkFTRQkweEUxMDAwMDAwCisjZGVmaW5lIE9NQVA4NTBfRFNQUkVHX1NJWkUJU1pfMTI4SworI2RlZmluZSBPTUFQODUwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQODUwIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9DT05GSUdfQkFTRQkweGZmZmUxMDAwCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl8wCTB4ZmZmZTEwNzAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEJMHhmZmZlMTA3NAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMgkweGZmZmUxMDc4CisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl8zCTB4ZmZmZTEwN2MKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzQJMHhmZmZlMTA4MAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfNQkweGZmZmUxMDg0CisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl82CTB4ZmZmZTEwODgKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzcJMHhmZmZlMTA4YworI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfOAkweGZmZmUxMDkwCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl85CTB4ZmZmZTEwOTQKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEwCTB4ZmZmZTEwOTgKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzExCTB4ZmZmZTEwOWMKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEyCTB4ZmZmZTEwYTAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEzCTB4ZmZmZTEwYTQKKworI2RlZmluZSBPTUFQODUwX01PREVfMQkJMHhmZmZlMTAxMAorI2RlZmluZSBPTUFQODUwX01PREVfMgkJMHhmZmZlMTAxNAorCisvKiBDU01JIHNwZWNpYWxzOiBpbiB0ZXJtcyBvZiBiYXNlICsgb2Zmc2V0ICovCisjZGVmaW5lIE9NQVA4NTBfTU9ERTJfT0ZGU0VUCTB4MTQKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA4NTAgdHJhZmZpYyBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9DRkdfMAkweGZmZmVjYzEwCisjZGVmaW5lIE9NQVA4NTBfRkxBU0hfQUNGR18wCTB4ZmZmZWNjNTAKKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9DRkdfMQkweGZmZmVjYzE0CisjZGVmaW5lIE9NQVA4NTBfRkxBU0hfQUNGR18xCTB4ZmZmZWNjNTQKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA4NTAgRFNQIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9JQ1JfQkFTRQkweGZmZmJiODAwCisjZGVmaW5lIE9NQVA4NTBfRFNQX01fQ1RMCTB4ZmZmYmI4MDQKKyNkZWZpbmUgT01BUDg1MF9EU1BfTU1VX0JBU0UJMHhmZmZlZDIwMAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT01BUDg1MCBQQ0NfVVBMRCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVA4NTBfUENDX1VQTERfQ1RSTF9CQVNFCSgweGZmZmUwOTAwKQorI2RlZmluZSBPTUFQODUwX1BDQ19VUExEX0NUUkwJCShPTUFQODUwX1BDQ19VUExEX0NUUkxfQkFTRSArIDB4MDApCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQODUwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IDM3ZTJmMGYuLmNlNmVlNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTExOCwxOCArMTE4LDYgQEAKIGV4dGVybiB2b2lkIHByZXZlbnRfaWRsZV9zbGVlcCh2b2lkKTsKIGV4dGVybiB2b2lkIGFsbG93X2lkbGVfc2xlZXAodm9pZCk7CiAKLS8qKgotICogY2xrX2RlbnlfaWRsZSAtIFByZXZlbnRzIHRoZSBjbG9jayBmcm9tIGJlaW5nIGlkbGVkIGR1cmluZyBNUFUgaWRsZQotICogQGNsazogY2xvY2sgc2lnbmFsIGhhbmRsZQotICovCi12b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKLQotLyoqCi0gKiBjbGtfYWxsb3dfaWRsZSAtIENvdW50ZXJzIHByZXZpb3VzIGNsa19kZW55X2lkbGUKLSAqIEBjbGs6IGNsb2NrIHNpZ25hbCBoYW5kbGUKLSAqLwotdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKaW5kZXggMjgwNmE5Yy4uNjljOWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaApAQCAtNTAsOSArNTAsOSBAQAogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgY2xvY2tkb21haW5zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBvd2VyZG9tYWluLgotICogQ09SRSBwb3dlcmRvbWFpbiBpcyBwcm9iYWJseSB0aGUgd29yc3QgY2FzZS4KKyAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDMgaXMgdGhlIHdvcnN0IGNhc2UKICAqLwotI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTMKKyNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwk0CiAKIC8qIFhYWCBBIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IG51bWJlci4gV2hhdCBpcyByZWFzb25hYmxlIGhlcmU/ICovCiAjZGVmaW5lIFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCAxMDAwMDAKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiBpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOwogaW50IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIGludCBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wcmNtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaAppbmRleCA1NmViYTBmLi4yNGFjM2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaApAQCAtMjAsMTAgKzIwLDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX09NQVBfUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX09NQVBfUFJDTV9ICiAKIHUzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCk7Cit2b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NkcmMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCmluZGV4IGE5OGM2YzMuLmFkYzczNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCkBAIC00LDEwICs0LDEyIEBACiAvKgogICogT01BUDIvMyBTRFJDL1NNUyByZWdpc3RlciBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIFRvbnkgTGluZGdyZW4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTY0LDE0ICs2Niw2MiBAQAogICogU01TIHJlZ2lzdGVyIGFjY2VzcwogICovCiAKLQotI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAyNDNYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKLSNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCQkJCQlcCisJCQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDI0M1hfU01TX1JFR0FERFIocmVnKQkJCQkJXAorCQkJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAzNDNYX1NNU19SRUdBRERSKHJlZykJCQkJCVwKKwkJCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQogCiAvKiBTTVMgcmVnaXN0ZXIgb2Zmc2V0cyAtIHJlYWQvd3JpdGUgd2l0aCBzbXNfe3JlYWQsd3JpdGV9X3JlZygpICovCiAKICNkZWZpbmUgU01TX1NZU0NPTkZJRwkJMHgwMTAKIC8qIFJFVklTSVQ6IGZpbGwgaW4gb3RoZXIgU01TIHJlZ2lzdGVycyBoZXJlICovCiAKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qKgorICogc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgLSBTRFJDIHBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gU0RSQyBjbG9jayByYXRlCisgKiBAcmF0ZTogU0RSQyBjbG9jayByYXRlIChpbiBIeikKKyAqIEBhY3RpbV9jdHJsYTogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX0FDVElNX0NUUkxBIGZvciB0aGlzIHJhdGUKKyAqIEBhY3RpbV9jdHJsYjogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX0FDVElNX0NUUkxCIGZvciB0aGlzIHJhdGUKKyAqIEByZnJfY3RybDogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX1JGUl9DVFJMIGZvciB0aGlzIHJhdGUKKyAqIEBtcjogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX01SIGZvciB0aGlzIHJhdGUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhIHByZS1jb21wdXRlZCBzZXQgb2YgcmVnaXN0ZXIgdmFsdWVzIGZvciB0aGUKKyAqIFNEUkMgZm9yIGEgZ2l2ZW4gU0RSQyBjbG9jayByYXRlIGFuZCBTRFJBTSBjaGlwLiAgVGhlc2UgYXJlCisgKiBpbnRlbmRlZCB0byBiZSBwcmUtY29tcHV0ZWQgYW5kIHNwZWNpZmllZCBpbiBhbiBhcnJheSBpbiB0aGUgYm9hcmQtKi5jCisgKiBmaWxlcy4gIFRoZSBzdHJ1Y3R1cmUgaXMga2V5ZWQgb2ZmIHRoZSAncmF0ZScgZmllbGQuCisgKi8KK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zIHsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdTMyIGFjdGltX2N0cmxhOworCXUzMiBhY3RpbV9jdHJsYjsKKwl1MzIgcmZyX2N0cmw7CisJdTMyIG1yOworfTsKKwordm9pZCBfX2luaXQgb21hcDJfc2RyY19pbml0KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCk7CitzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqb21hcDJfc2RyY19nZXRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgcik7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCitzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgeworCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCisJdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLworCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCisJdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KKwl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KK307CisKK2V4dGVybiB2b2lkIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOworCit1MzIgb21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQodm9pZCk7Cit1MzIgb21hcDJ4eHhfc2RyY19yZXByb2dyYW0odTMyIGxldmVsLCB1MzIgZm9yY2UpOworCisjZW5kaWYgIC8qIENPTkZJR19BUkNIX09NQVAyICovCisKKyNlbmRpZiAgLyogX19BU1NFTUJMRVJfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDA2OTIzZjIuLjEwNjBlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtOSwxMiArOSwxNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSA8bWFjaC9wcmNtLmg+CisKICNpZm5kZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCiAjZGVmaW5lIHZvaWNlYmx1ZV9yZXNldCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbHNlCitleHRlcm4gdm9pZCB2b2ljZWJsdWVfcmVzZXQodm9pZCk7CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCWNwdV9kb19pZGxlKCk7CkBAIC0zOCw3ICs0MCw3IEBACiAJCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpKQogCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC91c2IuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvdXNiLmgKaW5kZXggYTU2YTYxMC4uNjlmMGNlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC91c2IuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3VzYi5oCkBAIC0yNyw4ICsyNywxOCBAQAogI2RlZmluZSBVRENfQkFTRQkJCU9NQVAyX1VEQ19CQVNFCiAjZGVmaW5lIE9NQVBfT0hDSV9CQVNFCQkJT01BUDJfT0hDSV9CQVNFCiAKKyNpZmRlZiBDT05GSUdfVVNCX01VU0JfU09DCitleHRlcm4gdm9pZCB1c2JfbXVzYl9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfbXVzYl9pbml0KHZvaWQpCit7Cit9CiAjZW5kaWYKIAorI2VuZGlmCisKK3ZvaWQgb21hcF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwppbmRleCBiNTJjZTA1Li4wYWJmYmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKQEAgLTEsMTAgKzEsOSBAQAogLyoKICAqIE9NQVAgbWFpbGJveCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBDb250YWN0OiBUb3NoaWhpcm8gS29iYXlhc2hpIDx0b3NoaWhpcm8ua29iYXlhc2hpQG5va2lhLmNvbT4KLSAqCQlSZXN0cnVjdHVyZWQgYnkgSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgorICogQ29udGFjdDogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMiwyMSArMjEsOTggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KKwogI2luY2x1ZGUgPG1hY2gvbWFpbGJveC5oPgotI2luY2x1ZGUgIm1haWxib3guaCIKKworc3RhdGljIGludCBlbmFibGVfc2VxX2JpdDsKK21vZHVsZV9wYXJhbShlbmFibGVfc2VxX2JpdCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9zZXFfYml0LCAiRW5hYmxlIHNlcXVlbmNlIGJpdCBjaGVja2luZy4iKTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKm1ib3hlczsKIHN0YXRpYyBERUZJTkVfUldMT0NLKG1ib3hlc19sb2NrKTsKIAorLyoKKyAqIE1haWxib3ggc2VxdWVuY2UgYml0IEFQSQorICovCisKKy8qIHNlcV9yY3Ygc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggYW55IHZhbHVlIG90aGVyIHRoYW4KKyAqIDAgYW5kIDEgPDwgMzEsIHRvIGFsbG93IGVpdGhlciB2YWx1ZSBmb3IgdGhlIGZpcnN0CisgKiBtZXNzYWdlLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJaWYgKCFlbmFibGVfc2VxX2JpdCkKKwkJcmV0dXJuOworCisJLyogYW55IHZhbHVlIG90aGVyIHRoYW4gMCBhbmQgMSA8PCAzMSAqLworCW1ib3gtPnNlcV9yY3YgPSAweGZmZmZmZmZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCit7CisJaWYgKCFlbmFibGVfc2VxX2JpdCkKKwkJcmV0dXJuOworCisJLyogYWRkIHNlcV9zbmQgdG8gbXNnICovCisJKm1zZyA9ICgqbXNnICYgMHg3ZmZmZmZmZikgfCBtYm94LT5zZXFfc25kOworCS8qIGZsaXAgc2VxX3NuZCAqLworCW1ib3gtPnNlcV9zbmQgXj0gMSA8PCAzMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKK3sKKwltYm94X21zZ190IHNlcTsKKworCWlmICghZW5hYmxlX3NlcV9iaXQpCisJCXJldHVybiAwOworCisJc2VxID0gbXNnICYgKDEgPDwgMzEpOworCWlmIChzZXEgPT0gbWJveC0+c2VxX3JjdikKKwkJcmV0dXJuIC0xOworCW1ib3gtPnNlcV9yY3YgPSBzZXE7CisJcmV0dXJuIDA7Cit9CisKKy8qIE1haWxib3ggRklGTyBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIG1ib3hfbXNnX3QgbWJveF9maWZvX3JlYWQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5maWZvX3JlYWQobWJveCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9maWZvX3dyaXRlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCW1ib3gtPm9wcy0+Zmlmb193cml0ZShtYm94LCBtc2cpOworfQorc3RhdGljIGlubGluZSBpbnQgbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19lbXB0eShtYm94KTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19mdWxsKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19mdWxsKG1ib3gpOworfQorCisvKiBNYWlsYm94IElSUSBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJbWJveC0+b3BzLT5lbmFibGVfaXJxKG1ib3gsIGlycSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQoreworCW1ib3gtPm9wcy0+ZGlzYWJsZV9pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKK3sKKwlpZiAobWJveC0+b3BzLT5hY2tfaXJxKQorCQltYm94LT5vcHMtPmFja19pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGlzX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+aXNfaXJxKG1ib3gsIGlycSk7Cit9CisKIC8qIE1haWxib3ggU2VxdWVuY2UgQml0IGZ1bmN0aW9uICovCiB2b2lkIG9tYXBfbWJveF9pbml0X3NlcShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewpAQCAtMTM2LDcgKzIxMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChtYm94LT5yeHEtPmNhbGxiYWNrID09IE5VTEwpIHsKLQkJc3lzZnNfbm90aWZ5KCZtYm94LT5kZXYua29iaiwgTlVMTCwgIm1ib3giKTsKKwkJc3lzZnNfbm90aWZ5KCZtYm94LT5kZXYtPmtvYmosIE5VTEwsICJtYm94Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIwNCw3ICsyODAsNyBAQAogCS8qIG5vIG1vcmUgbWVzc2FnZXMgaW4gdGhlIGZpZm8uIGNsZWFyIElSUSBzb3VyY2UuICovCiAJYWNrX21ib3hfaXJxKG1ib3gsIElSUV9SWCk7CiAJZW5hYmxlX21ib3hfaXJxKG1ib3gsIElSUV9SWCk7Ci0Jbm9tZW06Citub21lbToKIAlzY2hlZHVsZV93b3JrKCZtYm94LT5yeHEtPndvcmspOwogfQogCkBAIC0yODYsNyArMzYyLDcgQEAKIHN0YXRpYyBDTEFTU19BVFRSKG1ib3gsIFNfSVJVR08sIG1ib3hfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgb21hcF9tYm94X2NsYXNzID0gewotCS5uYW1lID0gIm9tYXBfbWJveCIsCisJLm5hbWUgPSAib21hcC1tYWlsYm94IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptYm94X3F1ZXVlX2FsbG9jKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCkBAIC0zMzMsMjEgKzQwOSw2IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCW1ib3gtPmRldi5jbGFzcyA9ICZvbWFwX21ib3hfY2xhc3M7Ci0JZGV2X3NldF9uYW1lKCZtYm94LT5kZXYsICIlcyIsIG1ib3gtPm5hbWUpOwotCWRldl9zZXRfZHJ2ZGF0YSgmbWJveC0+ZGV2LCBtYm94KTsKLQotCXJldCA9IGRldmljZV9yZWdpc3RlcigmbWJveC0+ZGV2KTsKLQlpZiAodW5saWtlbHkocmV0KSkKLQkJZ290byBmYWlsX2RldmljZV9yZWc7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImRldmljZV9jcmVhdGVfZmlsZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGZhaWxfY3JlYXRlX21ib3g7Ci0JfQotCiAJcmV0ID0gcmVxdWVzdF9pcnEobWJveC0+aXJxLCBtYm94X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCQltYm94LT5uYW1lLCBtYm94KTsKIAlpZiAodW5saWtlbHkocmV0KSkgewpAQCAtMzc3LDEwICs0MzgsNiBAQAogIGZhaWxfYWxsb2NfdHhxOgogCWZyZWVfaXJxKG1ib3gtPmlycSwgbWJveCk7CiAgZmFpbF9yZXF1ZXN0X2lycToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOwotIGZhaWxfY3JlYXRlX21ib3g6Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJm1ib3gtPmRldik7Ci0gZmFpbF9kZXZpY2VfcmVnOgogCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKIAkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKIApAQCAtMzkzLDggKzQ1MCw2IEBACiAJbWJveF9xdWV1ZV9mcmVlKG1ib3gtPnJ4cSk7CiAKIAlmcmVlX2lycShtYm94LT5pcnEsIG1ib3gpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7Ci0JY2xhc3NfdW5yZWdpc3Rlcigmb21hcF9tYm94X2NsYXNzKTsKIAogCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKIAkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKQEAgLTQ0MCw3ICs0OTUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfcHV0KTsKIAotaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoraW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG9tYXBfbWJveCAqKnRtcDsKQEAgLTQ1MCwxNCArNTA1LDMxIEBACiAJaWYgKG1ib3gtPm5leHQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwltYm94LT5kZXYgPSBkZXZpY2VfY3JlYXRlKCZvbWFwX21ib3hfY2xhc3MsCisJCQkJICBwYXJlbnQsIDAsIG1ib3gsICIlcyIsIG1ib3gtPm5hbWUpOworCWlmIChJU19FUlIobWJveC0+ZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIobWJveC0+ZGV2KTsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zeXNmczsKKwogCXdyaXRlX2xvY2soJm1ib3hlc19sb2NrKTsKIAl0bXAgPSBmaW5kX21ib3hlcyhtYm94LT5uYW1lKTsKLQlpZiAoKnRtcCkKKwlpZiAoKnRtcCkgewogCQlyZXQgPSAtRUJVU1k7Ci0JZWxzZQotCQkqdG1wID0gbWJveDsKKwkJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJCWdvdG8gZXJyX2ZpbmQ7CisJfQorCSp0bXAgPSBtYm94OwogCXdyaXRlX3VubG9jaygmbWJveGVzX2xvY2spOwogCisJcmV0dXJuIDA7CisKK2Vycl9maW5kOgorCWRldmljZV9yZW1vdmVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKK2Vycl9zeXNmczoKKwlkZXZpY2VfdW5yZWdpc3RlcihtYm94LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9yZWdpc3Rlcik7CkBAIC00NzMsNiArNTQ1LDggQEAKIAkJCSp0bXAgPSBtYm94LT5uZXh0OwogCQkJbWJveC0+bmV4dCA9IE5VTEw7CiAJCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKKwkJCWRldmljZV91bnJlZ2lzdGVyKG1ib3gtPmRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQl0bXAgPSAmKCp0bXApLT5uZXh0OwpAQCAtNTAxLDQgKzU3NSw2IEBACiBzdWJzeXNfaW5pdGNhbGwob21hcF9tYm94X2NsYXNzX2luaXQpOwogbW9kdWxlX2V4aXQob21hcF9tYm94X2NsYXNzX2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm9tYXAgbWFpbGJveDogaW50ZXJydXB0IGRyaXZlbiBtZXNzYWdpbmciKTsKK01PRFVMRV9BVVRIT1IoIlRvc2hpaGlybyBLb2JheWFzaGkgYW5kIEhpcm9zaGkgRE9ZVSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YzY3NDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogTWFpbGJveCBpbnRlcm5hbCBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KLSAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9NQUlMQk9YX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSAotCi0vKgotICogTWFpbGJveCBzZXF1ZW5jZSBiaXQgQVBJCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQotIyAgZGVmaW5lIE1CT1hfVVNFX1NFUV9CSVQKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi0jICBkZWZpbmUgTUJPWF9VU0VfU0VRX0JJVAotI2VuZGlmCi0KLSNpZmRlZiBNQk9YX1VTRV9TRVFfQklUCi0vKiBzZXFfcmN2IHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIGFueSB2YWx1ZSBvdGhlciB0aGFuCi0gKiAwIGFuZCAxIDw8IDMxLCB0byBhbGxvdyBlaXRoZXIgdmFsdWUgZm9yIHRoZSBmaXJzdAotICogbWVzc2FnZS4gICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfaW5pdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCS8qIGFueSB2YWx1ZSBvdGhlciB0aGFuIDAgYW5kIDEgPDwgMzEgKi8KLQltYm94LT5zZXFfcmN2ID0gMHhmZmZmZmZmZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfc2VxX3RvZ2dsZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190ICogbXNnKQotewotCS8qIGFkZCBzZXFfc25kIHRvIG1zZyAqLwotCSptc2cgPSAoKm1zZyAmIDB4N2ZmZmZmZmYpIHwgbWJveC0+c2VxX3NuZDsKLQkvKiBmbGlwIHNlcV9zbmQgKi8KLQltYm94LT5zZXFfc25kIF49IDEgPDwgMzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfc2VxX3Rlc3Qoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgbWJveF9tc2dfdCBtc2cpCi17Ci0JbWJveF9tc2dfdCBzZXEgPSBtc2cgJiAoMSA8PCAzMSk7Ci0JaWYgKHNlcSA9PSBtYm94LT5zZXFfcmN2KQotCQlyZXR1cm4gLTE7Ci0JbWJveC0+c2VxX3JjdiA9IHNlcTsKLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfaW5pdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfc2VxX3RvZ2dsZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190ICogbXNnKQotewotfQotc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKiBNYWlsYm94IEZJRk8gaGFuZGxlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBtYm94X21zZ190IG1ib3hfZmlmb19yZWFkKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci0JcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19yZWFkKG1ib3gpOwotfQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfZmlmb193cml0ZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKLXsKLQltYm94LT5vcHMtPmZpZm9fd3JpdGUobWJveCwgbXNnKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19lbXB0eShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCXJldHVybiBtYm94LT5vcHMtPmZpZm9fZW1wdHkobWJveCk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtYm94X2ZpZm9fZnVsbChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCXJldHVybiBtYm94LT5vcHMtPmZpZm9fZnVsbChtYm94KTsKLX0KLQotLyogTWFpbGJveCBJUlEgaGFuZGxlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQotewotCW1ib3gtPm9wcy0+ZW5hYmxlX2lycShtYm94LCBpcnEpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKLXsKLQltYm94LT5vcHMtPmRpc2FibGVfaXJxKG1ib3gsIGlycSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCi17Ci0JaWYgKG1ib3gtPm9wcy0+YWNrX2lycSkKLQkJbWJveC0+b3BzLT5hY2tfaXJxKG1ib3gsIGlycSk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBpc19tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQotewotCXJldHVybiBtYm94LT5vcHMtPmlzX2lycShtYm94LCBpcnEpOwotfQotCi0jZW5kaWYJCQkJLyogX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBlNTg0MmUzLi4yOGIwYTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjE0LDcgKzIxNCw2IEBACiBpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0JaW50IGk7CiAJaW50IGVycjsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKQEAgLTIyMywyMyArMjIyLDIzIEBACiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QpCi0JCW1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtY2JzcC0+bnVtX2Nsa3M7IGkrKykKLQkJY2xrX2VuYWJsZShtY2JzcC0+Y2xrc1tpXSk7Ci0KIAlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKIAlpZiAoIW1jYnNwLT5mcmVlKSB7CiAJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwKIAkJCW1jYnNwLT5pZCk7CiAJCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAltY2JzcC0+ZnJlZSA9IDA7CiAJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAorCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QpCisJCW1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKKworCWNsa19lbmFibGUobWNic3AtPmljbGspOworCWNsa19lbmFibGUobWNic3AtPmZjbGspOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0cmFuc21pdHRlciwgcmVjZWl2ZXIgYW5kIHNhbXBsZS1yYXRlIGdlbmVyYXRvciBhcmUKIAkgKiBub3QgcnVubmluZyBiZWZvcmUgYWN0aXZhdGluZyBJUlFzLgpAQCAtMjc4LDcgKzI3Nyw2IEBACiB2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCWludCBpOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwpAQCAtMjg5LDggKzI4NywxNCBAQAogCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUpCiAJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKIAotCWZvciAoaSA9IG1jYnNwLT5udW1fY2xrcyAtIDE7IGkgPj0gMDsgaS0tKQotCQljbGtfZGlzYWJsZShtY2JzcC0+Y2xrc1tpXSk7CisJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOworCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKKworCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBGcmVlIElSUXMgKi8KKwkJZnJlZV9pcnEobWNic3AtPnJ4X2lycSwgKHZvaWQgKiltY2JzcCk7CisJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOworCX0KIAogCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCWlmIChtY2JzcC0+ZnJlZSkgewpAQCAtMzAyLDEyICszMDYsNiBAQAogCiAJbWNic3AtPmZyZWUgPSAxOwogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7Ci0KLQlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKLQkJLyogRnJlZSBJUlFzICovCi0JCWZyZWVfaXJxKG1jYnNwLT5yeF9pcnEsICh2b2lkICopbWNic3ApOwotCQlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKLQl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CiAKQEAgLTg3Niw3ICs4NzQsNiBAQAogCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBpZCA9IHBkZXYtPmlkIC0gMTsKLQlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcGRhdGEpIHsKQEAgLTg5OSw3ICs4OTYsNiBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQotCW1jYnNwX3B0cltpZF0gPSBtY2JzcDsKIAogCXNwaW5fbG9ja19pbml0KCZtY2JzcC0+bG9jayk7CiAJbWNic3AtPmlkID0gaWQgKyAxOwpAQCAtOTIxLDM5ICs5MTcsMzIgQEAKIAltY2JzcC0+ZG1hX3J4X3N5bmMgPSBwZGF0YS0+ZG1hX3J4X3N5bmM7CiAJbWNic3AtPmRtYV90eF9zeW5jID0gcGRhdGEtPmRtYV90eF9zeW5jOwogCi0JaWYgKHBkYXRhLT5udW1fY2xrcykgewotCQltY2JzcC0+bnVtX2Nsa3MgPSBwZGF0YS0+bnVtX2Nsa3M7Ci0JCW1jYnNwLT5jbGtzID0ga3phbGxvYyhtY2JzcC0+bnVtX2Nsa3MgKiBzaXplb2Yoc3RydWN0IGNsayAqKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWNic3AtPmNsa3MpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IG1jYnNwLT5udW1fY2xrczsgaSsrKSB7Ci0JCQltY2JzcC0+Y2xrc1tpXSA9IGNsa19nZXQoJnBkZXYtPmRldiwgcGRhdGEtPmNsa19uYW1lc1tpXSk7Ci0JCQlpZiAoSVNfRVJSKG1jYnNwLT5jbGtzW2ldKSkgewotCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIkludmFsaWQgJXMgY29uZmlndXJhdGlvbiBmb3IgTWNCU1AlZC5cbiIsCi0JCQkJCXBkYXRhLT5jbGtfbmFtZXNbaV0sIG1jYnNwLT5pZCk7Ci0JCQkJcmV0ID0gUFRSX0VSUihtY2JzcC0+Y2xrc1tpXSk7Ci0JCQkJZ290byBlcnJfY2xrOwotCQkJfQotCQl9CisJbWNic3AtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKG1jYnNwLT5pY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5pY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9pY2xrOworCX0KIAorCW1jYnNwLT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihtY2JzcC0+ZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihtY2JzcC0+ZmNsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgZmNrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZmNsazsKIAl9CiAKIAltY2JzcC0+cGRhdGEgPSBwZGF0YTsKIAltY2JzcC0+ZGV2ID0gJnBkZXYtPmRldjsKKwltY2JzcF9wdHJbaWRdID0gbWNic3A7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNic3ApOwogCXJldHVybiAwOwogCi1lcnJfY2xrOgotCXdoaWxlIChpLS0pCi0JCWNsa19wdXQobWNic3AtPmNsa3NbaV0pOwotCWtmcmVlKG1jYnNwLT5jbGtzKTsKK2Vycl9mY2xrOgorCWNsa19wdXQobWNic3AtPmljbGspOworZXJyX2ljbGs6CiAJaW91bm1hcChtY2JzcC0+aW9fYmFzZSk7CiBlcnJfaW9yZW1hcDoKLQltY2JzcC0+ZnJlZSA9IDA7CisJa2ZyZWUobWNic3ApOwogZXhpdDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTYxLDcgKzk1MCw2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwX21jYnNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaWYgKG1jYnNwKSB7CkBAIC05NzAsMTggKzk1OCwxNSBAQAogCQkJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQogCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUobWNic3AtPmlkKTsKIAotCQlmb3IgKGkgPSBtY2JzcC0+bnVtX2Nsa3MgLSAxOyBpID49IDA7IGktLSkgewotCQkJY2xrX2Rpc2FibGUobWNic3AtPmNsa3NbaV0pOwotCQkJY2xrX3B1dChtY2JzcC0+Y2xrc1tpXSk7Ci0JCX0KKwkJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOworCQljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CisJCWNsa19wdXQobWNic3AtPmZjbGspOworCQljbGtfcHV0KG1jYnNwLT5pY2xrKTsKIAogCQlpb3VubWFwKG1jYnNwLT5pb19iYXNlKTsKIAotCQlpZiAobWNic3AtPm51bV9jbGtzKSB7Ci0JCQlrZnJlZShtY2JzcC0+Y2xrcyk7Ci0JCQltY2JzcC0+Y2xrcyA9IE5VTEw7Ci0JCQltY2JzcC0+bnVtX2Nsa3MgPSAwOwotCQl9CisJCW1jYnNwLT5mY2xrID0gTlVMTDsKKwkJbWNic3AtPmljbGsgPSBOVUxMOwogCQltY2JzcC0+ZnJlZSA9IDA7CiAJCW1jYnNwLT5kZXYgPSBOVUxMOwogCX0KQEAgLTEwMDIsNCArOTg3LDMgQEAKIAkvKiBSZWdpc3RlciB0aGUgTWNCU1AgZHJpdmVyICovCiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9tY2JzcF9kcml2ZXIpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBiZTdiY2FmLi5mYTUyOTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7CiAJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAxX1NSQU1fUEE7CiAKLQkJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCWlmIChjcHVfaXNfb21hcDd4eCgpKQogCQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwkvKiAyMDBLICovCiAJCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJb21hcF9zcmFtX3NpemUgPSAweDMwMDAwOwkvKiAxOTJLICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggZTI3OGRlNi4uNTA5ZjJlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtNzI5LDMwICs3MjksMTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGxhdGZvcm1fZGF0YTsKLQotc3RhdGljIGludCBfX2luaXQKLW9tYXBfdXNiX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IG9tYXBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCiB7Ci0JY29uc3Qgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnOwotCi0JY29uZmlnID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VTQiwgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyk7Ci0JaWYgKGNvbmZpZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVVNCOiBObyBib2FyZC1zcGVjaWZpYyAiCi0JCQkJInBsYXRmb3JtIGNvbmZpZyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwbGF0Zm9ybV9kYXRhID0gKmNvbmZpZzsKLQogCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX290Z19pbml0KCZwbGF0Zm9ybV9kYXRhKTsKKwkJb21hcF9vdGdfaW5pdChwZGF0YSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9tYXBfMTUxMF91c2JfaW5pdCgmcGxhdGZvcm1fZGF0YSk7Ci0JZWxzZSB7CisJCW9tYXBfMTUxMF91c2JfaW5pdChwZGF0YSk7CisJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIlVTQjogTm8gaW5pdCBmb3IgeW91ciBjaGlwIHlldFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKIH0KIAotc3Vic3lzX2luaXRjYWxsKG9tYXBfdXNiX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwppbmRleCAwZDEyYzIxLi4zMmViOWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwpAQCAtMTksNyArMTksOCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiBzdGF0aWMgY29uc3QgY2hhciAqZ3Bpb19sYWJlbFtHUElPX01BWF07ICAvKiBub24gbnVsbCBmb3IgYWxsb2NhdGVkIEdQSU9zICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkW0JJVFNfVE9fTE9OR1MoR1BJT19NQVgpXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW9fdmFsaWRfaW5wdXRbQklUU19UT19MT05HUyhHUElPX01BWCldOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZF9vdXRwdXRbQklUU19UT19MT05HUyhHUElPX01BWCldOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfZGlyZWN0aW9uKHVuc2lnbmVkIHBpbiwgaW50IGlucHV0KQogewpAQCAtNTMsNyArNTQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KSkgewogCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgzLDcgKzg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB1OwogCi0JaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9vdXRwdXQpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTYxLDcgKzE2Miw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCWlmIChwaW4gPj0gR1BJT19NQVggfHwKKwkgICAgISh0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpIHx8CisJICAgICAgdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX291dHB1dCkpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTgzLDcgKzE4Niw5IEBACiAKIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIHBpbikKIHsKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fAorCSAgICAhKHRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9pbnB1dCkgfHwKKwkgICAgICB0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KSkpIHsKIAkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOwogCQlyZXR1cm47CiAJfQpAQCAtMjA4LDEyICsyMTMsMTggQEAKIAlfX3NldF9kaXJlY3Rpb24ocGluLCAwKTsKIH0KIAotdm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpCit2b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCBtb2RlKQogewotCWlmICh2YWxpZCkKLQkJX19zZXRfYml0KHBpbiwgZ3Bpb192YWxpZCk7CisJaWYgKG1vZGUgPT0gMSkKKwkJbW9kZSA9IEdQSU9fSU5QVVRfT0sgfCBHUElPX09VVFBVVF9PSzsKKwlpZiAobW9kZSAmIEdQSU9fSU5QVVRfT0spCisJCV9fc2V0X2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpOwogCWVsc2UKLQkJX19jbGVhcl9iaXQocGluLCBncGlvX3ZhbGlkKTsKKwkJX19jbGVhcl9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KTsKKwlpZiAobW9kZSAmIEdQSU9fT1VUUFVUX09LKQorCQlfX3NldF9iaXQocGluLCBncGlvX3ZhbGlkX291dHB1dCk7CisJZWxzZQorCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KTsKIH0KIAogdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBlYzc0M2U4Li4zM2Y2YzZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCkBAIC0yNSw5ICsyNSwxMyBAQAogICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KICAqLwogdm9pZCBvcmlvbl9ncGlvX3NldF91bnVzZWQodW5zaWduZWQgcGluKTsKLXZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpOwogdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7CiAKKyNkZWZpbmUgR1BJT19CSURJX09LCQkoMSA8PCAwKQorI2RlZmluZSBHUElPX0lOUFVUX09LCQkoMSA8PCAxKQorI2RlZmluZSBHUElPX09VVFBVVF9PSwkJKDEgPDwgMikKK3ZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgbW9kZSk7CisKIC8qCiAgKiBHUElPIGludGVycnVwdCBoYW5kbGluZy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvbXZzZGlvLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9tdnNkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNhODg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvbXZzZGlvLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L212c2Rpby5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVZTRElPX0gKKyNkZWZpbmUgX19NQUNIX01WU0RJT19ICisKKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisKK3N0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbTsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJaW50IGdwaW9fY2FyZF9kZXRlY3Q7CisJaW50IGdwaW9fd3JpdGVfcHJvdGVjdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtcHhhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1OGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL0tjb25maWcKQEAgLTAsMCArMSwzIEBACitpZiBQTEFUX1BYQQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXB4YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjJjNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBjb2RlIGNvbW1vbiBhY3Jvc3MgZGlmZmVyZW50IFBYQSBwcm9jZXNzb3IgZmFtaWxpZXMKKyMKKworb2JqLXkJOj0gZG1hLm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCitvYmotJChDT05GSUdfUFhBM3h4KQkJKz0gbWZwLm8KK29iai0kKENPTkZJR19BUkNIX01NUCkJCSs9IG1mcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtcHhhL2RtYS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXB4YS9kbWEuYwppbmRleCA3ZGUxN2ZjLi43MGFlZWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYwogICoKICAqICBQWEEgRE1BIHJlZ2lzdHJhdGlvbiBhbmQgSVJRIGRpc3BhdGNoaW5nCiAgKgpAQCAtMjMsOCArMjMsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotCiBzdHJ1Y3QgZG1hX2NoYW5uZWwgewogCWNoYXIgKm5hbWU7CiAJcHhhX2RtYV9wcmlvIHByaW87CkBAIC0zNiw4ICszNCw4IEBACiBzdGF0aWMgaW50IG51bV9kbWFfY2hhbm5lbHM7CiAKIGludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsIHB4YV9kbWFfcHJpbyBwcmlvLAotCQkJIHZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAotCQkgCSB2b2lkICpkYXRhKQorCQkJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCisJCQl2b2lkICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGZvdW5kID0gMDsKQEAgLTExMyw3ICsxMTEsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IF9faW5pdCBweGFfaW5pdF9kbWEoaW50IG51bV9jaCkKK2ludCBfX2luaXQgcHhhX2luaXRfZG1hKGludCBpcnEsIGludCBudW1fY2gpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTMxLDcgKzEyOSw3IEBACiAJCWRtYV9jaGFubmVsc1tpXS5wcmlvID0gbWluKChpICYgMHhmKSA+PiAyLCBETUFfUFJJT19MT1cpOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9ETUEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkRNQSIsIE5VTEwpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZG1hX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELCAiRE1BIiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlwcmludGsgKEtFUk5fQ1JJVCAiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOwogCQlrZnJlZShkbWFfY2hhbm5lbHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODE5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCisgKgorICogIEdlbmVyaWMgUFhBIEdQSU8gaGFuZGxpbmcKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworaW50IHB4YV9sYXN0X2dwaW87CisKK3N0cnVjdCBweGFfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJdm9pZCBfX2lvbWVtCSpyZWdiYXNlOworCWNoYXIgbGFiZWxbMTBdOworCisJdW5zaWduZWQgbG9uZwlpcnFfbWFzazsKKwl1bnNpZ25lZCBsb25nCWlycV9lZGdlX3Jpc2U7CisJdW5zaWduZWQgbG9uZwlpcnFfZWRnZV9mYWxsOworCisjaWZkZWYgQ09ORklHX1BNCisJdW5zaWduZWQgbG9uZwlzYXZlZF9ncGxyOworCXVuc2lnbmVkIGxvbmcJc2F2ZWRfZ3BkcjsKKwl1bnNpZ25lZCBsb25nCXNhdmVkX2dyZXI7CisJdW5zaWduZWQgbG9uZwlzYXZlZF9nZmVyOworI2VuZGlmCit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitzdGF0aWMgc3RydWN0IHB4YV9ncGlvX2NoaXAgKnB4YV9ncGlvX2NoaXBzOworCisjZGVmaW5lIGZvcl9lYWNoX2dwaW9fY2hpcChpLCBjKQkJCVwKKwlmb3IgKGkgPSAwLCBjID0gJnB4YV9ncGlvX2NoaXBzWzBdOyBpIDw9IHB4YV9sYXN0X2dwaW87IGkgKz0gMzIsIGMrKykKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmdwaW9fY2hpcF9iYXNlKHN0cnVjdCBncGlvX2NoaXAgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCwgY2hpcCktPnJlZ2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB4YV9ncGlvX2NoaXAgKmdwaW9fdG9fY2hpcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiAmcHhhX2dwaW9fY2hpcHNbZ3Bpb190b19iYW5rKGdwaW8pXTsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdwaW9fY2hpcF9iYXNlKGNoaXApOworCXVpbnQzMl90IHZhbHVlLCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXZhbHVlID0gX19yYXdfcmVhZGwoYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGNoaXAtPmJhc2UgKyBvZmZzZXQpKQorCQl2YWx1ZSB8PSBtYXNrOworCWVsc2UKKwkJdmFsdWUgJj0gfm1hc2s7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBiYXNlICsgR1BEUl9PRkZTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ3Bpb19jaGlwX2Jhc2UoY2hpcCk7CisJdWludDMyX3QgdG1wLCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBiYXNlICsgKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJdG1wID0gX19yYXdfcmVhZGwoYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGNoaXAtPmJhc2UgKyBvZmZzZXQpKQorCQl0bXAgJj0gfm1hc2s7CisJZWxzZQorCQl0bXAgfD0gbWFzazsKKwlfX3Jhd193cml0ZWwodG1wLCBiYXNlICsgR1BEUl9PRkZTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZ3Bpb19jaGlwX2Jhc2UoY2hpcCkgKyBHUExSX09GRlNFVCkgJiAoMSA8PCBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBweGFfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgb2Zmc2V0LCBncGlvX2NoaXBfYmFzZShjaGlwKSArCisJCQkJKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBweGFfaW5pdF9ncGlvX2NoaXAoaW50IGdwaW9fZW5kKQoreworCWludCBpLCBncGlvLCBuYmFua3MgPSBncGlvX3RvX2JhbmsoZ3Bpb19lbmQpICsgMTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqY2hpcHM7CisKKwkvKiB0aGlzIGlzIGVhcmx5LCB3ZSBoYXZlIHRvIHVzZSBib290bWVtIGFsbG9jYXRvciwgYW5kIHdlIHJlYWxseQorCSAqIHdhbnQgdGhpcyB0byBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgZm9yIGRpZmZlcmVudCAnZ3Bpb19lbmQnCisJICovCisJY2hpcHMgPSBhbGxvY19ib290bWVtX2xvdyhuYmFua3MgKiBzaXplb2Yoc3RydWN0IHB4YV9ncGlvX2NoaXApKTsKKwlpZiAoY2hpcHMgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgR1BJTyBjaGlwc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwLCBncGlvID0gMDsgaSA8IG5iYW5rczsgaSsrLCBncGlvICs9IDMyKSB7CisJCXN0cnVjdCBncGlvX2NoaXAgKmMgPSAmY2hpcHNbaV0uY2hpcDsKKworCQlzcHJpbnRmKGNoaXBzW2ldLmxhYmVsLCAiZ3Bpby0lZCIsIGkpOworCQljaGlwc1tpXS5yZWdiYXNlID0gKHZvaWQgX19pb21lbSAqKUdQSU9fQkFOSyhpKTsKKworCQljLT5iYXNlICA9IGdwaW87CisJCWMtPmxhYmVsID0gY2hpcHNbaV0ubGFiZWw7CisKKwkJYy0+ZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwkJYy0+ZGlyZWN0aW9uX291dHB1dCA9IHB4YV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJCWMtPmdldCA9IHB4YV9ncGlvX2dldDsKKwkJYy0+c2V0ID0gcHhhX2dwaW9fc2V0OworCisJCS8qIG51bWJlciBvZiBHUElPcyBvbiBsYXN0IGJhbmsgbWF5IGJlIGxlc3MgdGhhbiAzMiAqLworCQljLT5uZ3BpbyA9IChncGlvICsgMzEgPiBncGlvX2VuZCkgPyAoZ3Bpb19lbmQgLSBncGlvICsgMSkgOiAzMjsKKwkJZ3Bpb2NoaXBfYWRkKGMpOworCX0KKwlweGFfZ3Bpb19jaGlwcyA9IGNoaXBzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YV9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjOworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBsb25nIGdwZHIsIG1hc2sgPSBHUElPX2JpdChncGlvKTsKKworCWMgPSBncGlvX3RvX2NoaXAoZ3Bpbyk7CisKKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9QUk9CRSkgeworCQkvKiBEb24ndCBtZXNzIHdpdGggZW5hYmxlZCBHUElPcyB1c2luZyBwcmVjb25maWd1cmVkIGVkZ2VzIG9yCisJCSAqIEdQSU9zIHNldCB0byBhbHRlcm5hdGUgZnVuY3Rpb24gb3IgdG8gb3V0cHV0IGR1cmluZyBwcm9iZQorCQkgKi8KKwkJaWYgKChjLT5pcnFfZWRnZV9yaXNlIHwgYy0+aXJxX2VkZ2VfZmFsbCkgJiBHUElPX2JpdChncGlvKSkKKwkJCXJldHVybiAwOworCisJCWlmIChfX2dwaW9faXNfb2NjdXBpZWQoZ3BpbykpCisJCQlyZXR1cm4gMDsKKworCQl0eXBlID0gSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkc7CisJfQorCisJZ3BkciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CisKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQlfX3Jhd193cml0ZWwoZ3BkciB8IG1hc2ssICBjLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKGdwZHIgJiB+bWFzaywgYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCWMtPmlycV9lZGdlX3Jpc2UgfD0gbWFzazsKKwllbHNlCisJCWMtPmlycV9lZGdlX3Jpc2UgJj0gfm1hc2s7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJYy0+aXJxX2VkZ2VfZmFsbCB8PSBtYXNrOworCWVsc2UKKwkJYy0+aXJxX2VkZ2VfZmFsbCAmPSB+bWFzazsKKworCV9fcmF3X3dyaXRlbChjLT5pcnFfZWRnZV9yaXNlICYgYy0+aXJxX21hc2ssIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX2ZhbGwgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKworCXByX2RlYnVnKCIlczogSVJRJWQgKEdQSU8lZCkgLSBlZGdlJXMlc1xuIiwgX19mdW5jX18sIGlycSwgZ3BpbywKKwkJKCh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpICA/ICIgcmlzaW5nIiAgOiAiIiksCisJCSgodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykgPyAiIGZhbGxpbmciIDogIiIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGxvb3AsIGdwaW8sIGdwaW9fYmFzZSwgbjsKKwl1bnNpZ25lZCBsb25nIGdlZHI7CisKKwlkbyB7CisJCWxvb3AgPSAwOworCQlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQkJZ3Bpb19iYXNlID0gYy0+Y2hpcC5iYXNlOworCisJCQlnZWRyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKwkJCWdlZHIgPSBnZWRyICYgYy0+aXJxX21hc2s7CisJCQlfX3Jhd193cml0ZWwoZ2VkciwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKworCQkJbiA9IGZpbmRfZmlyc3RfYml0KCZnZWRyLCBCSVRTX1BFUl9MT05HKTsKKwkJCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgeworCQkJCWxvb3AgPSAxOworCisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9fdG9faXJxKGdwaW9fYmFzZSArIG4pKTsKKwkJCQluID0gZmluZF9uZXh0X2JpdCgmZ2VkciwgQklUU19QRVJfTE9ORywgbiArIDEpOworCQkJfQorCQl9CisJfSB3aGlsZSAobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKworCV9fcmF3X3dyaXRlbChHUElPX2JpdChncGlvKSwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcHhhX21hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKwl1aW50MzJfdCBncmVyLCBnZmVyOworCisJYy0+aXJxX21hc2sgJj0gfkdQSU9fYml0KGdwaW8pOworCisJZ3JlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCkgJiB+R1BJT19iaXQoZ3Bpbyk7CisJZ2ZlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHRkVSX09GRlNFVCkgJiB+R1BJT19iaXQoZ3Bpbyk7CisJX19yYXdfd3JpdGVsKGdyZXIsIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGdmZXIsIGMtPnJlZ2Jhc2UgKyBHRkVSX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKworCWMtPmlycV9tYXNrIHw9IEdQSU9fYml0KGdwaW8pOworCV9fcmF3X3dyaXRlbChjLT5pcnFfZWRnZV9yaXNlICYgYy0+aXJxX21hc2ssIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX2ZhbGwgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbXV4ZWRfZ3Bpb19jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IHB4YV9hY2tfbXV4ZWRfZ3BpbywKKwkubWFzawkJPSBweGFfbWFza19tdXhlZF9ncGlvLAorCS51bm1hc2sJCT0gcHhhX3VubWFza19tdXhlZF9ncGlvLAorCS5zZXRfdHlwZQk9IHB4YV9ncGlvX2lycV90eXBlLAorfTsKKwordm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgbXV4X2lycSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBzZXRfd2FrZV90IGZuKQoreworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjOworCWludCBncGlvLCBpcnE7CisKKwlweGFfbGFzdF9ncGlvID0gZW5kOworCisJLyogSW5pdGlhbGl6ZSBHUElPIGNoaXBzICovCisJcHhhX2luaXRfZ3Bpb19jaGlwKGVuZCk7CisKKwkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KKwlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQlfX3Jhd193cml0ZWwoMCwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKDAsIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJCV9fcmF3X3dyaXRlbCh+MCxjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworCX0KKworCWZvciAoaXJxICA9IGdwaW9fdG9faXJxKHN0YXJ0KTsgaXJxIDw9IGdwaW9fdG9faXJxKGVuZCk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKG11eF9pcnEsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOworCXB4YV9tdXhlZF9ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBweGFfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKKwlpbnQgZ3BpbzsKKworCWZvcl9lYWNoX2dwaW9fY2hpcChncGlvLCBjKSB7CisJCWMtPnNhdmVkX2dwbHIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR1BMUl9PRkZTRVQpOworCQljLT5zYXZlZF9ncGRyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwkJYy0+c2F2ZWRfZ3JlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJCWMtPnNhdmVkX2dmZXIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworCisJCS8qIENsZWFyIEdQSU8gdHJhbnNpdGlvbiBkZXRlY3QgYml0cyAqLworCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGdwaW87CisKKwlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQkvKiByZXN0b3JlIGxldmVsIHdpdGggc2V0L2NsZWFyICovCisJCV9fcmF3X3dyaXRlbCggYy0+c2F2ZWRfZ3BsciwgYy0+cmVnYmFzZSArIEdQU1JfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKH5jLT5zYXZlZF9ncGxyLCBjLT5yZWdiYXNlICsgR1BDUl9PRkZTRVQpOworCisJCV9fcmF3X3dyaXRlbChjLT5zYXZlZF9ncmVyLCBjLT5yZWdiYXNlICsgR1JFUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwoYy0+c2F2ZWRfZ2ZlciwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKGMtPnNhdmVkX2dwZHIsIGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgcHhhX2dwaW9fc3VzcGVuZAlOVUxMCisjZGVmaW5lIHB4YV9ncGlvX3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gImdwaW8iLAorCS5zdXNwZW5kCT0gcHhhX2dwaW9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9ncGlvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YV9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGFfZ3Bpb19zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwocHhhX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvZG1hLmggYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiOTFkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9kbWEuaApAQCAtMCwwICsxLDg1IEBACisjaWZuZGVmIF9fUExBVF9ETUFfSAorI2RlZmluZSBfX1BMQVRfRE1BX0gKKworI2RlZmluZSBETUFDX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopKERNQUNfUkVHU19WSVJUICsgKHgpKSkpCisKKyNkZWZpbmUgRENTUihuKQkJRE1BQ19SRUcoKG4pIDw8IDIpCisjZGVmaW5lIERBTEdOCQlETUFDX1JFRygweDAwYTApICAvKiBETUEgQWxpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lIERJTlQJCURNQUNfUkVHKDB4MDBmMCkgIC8qIERNQSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRERBRFIobikJRE1BQ19SRUcoMHgwMjAwICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFNBRFIobikJRE1BQ19SRUcoMHgwMjA0ICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFRBRFIobikJRE1BQ19SRUcoMHgwMjA4ICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRENNRChuKQkJRE1BQ19SRUcoMHgwMjBjICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFJDTVIobikJRE1BQ19SRUcoKCgobikgPCA2NCkgPyAweDAxMDAgOiAweDExMDApICsgXAorCQkJCSAoKChuKSAmIDB4M2YpIDw8IDIpKQorCisjZGVmaW5lIERDU1JfUlVOCSgxIDw8IDMxKQkvKiBSdW4gQml0IChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfTk9ERVNDCSgxIDw8IDMwKQkvKiBOby1EZXNjcmlwdG9yIEZldGNoIChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfU1RPUElSUUVOCSgxIDw8IDI5KQkvKiBTdG9wIEludGVycnVwdCBFbmFibGUgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9SRVFQRU5ECSgxIDw8IDgpCS8qIFJlcXVlc3QgUGVuZGluZyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBEQ1NSX1NUT1BTVEFURQkoMSA8PCAzKQkvKiBTdG9wIFN0YXRlIChyZWFkLW9ubHkpICovCisjZGVmaW5lIERDU1JfRU5ESU5UUgkoMSA8PCAyKQkvKiBFbmQgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfU1RBUlRJTlRSCSgxIDw8IDEpCS8qIFN0YXJ0IEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX0JVU0VSUgkoMSA8PCAwKQkvKiBCdXMgRXJyb3IgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCisKKyNkZWZpbmUgRENTUl9FT1JJUlFFTgkoMSA8PCAyOCkgICAgICAgLyogRW5kIG9mIFJlY2VpdmUgSW50ZXJydXB0IEVuYWJsZSAoUi9XKSAqLworI2RlZmluZSBEQ1NSX0VPUkpNUEVOCSgxIDw8IDI3KSAgICAgICAvKiBKdW1wIHRvIG5leHQgZGVzY3JpcHRvciBvbiBFT1IgKi8KKyNkZWZpbmUgRENTUl9FT1JTVE9QRU4JKDEgPDwgMjYpICAgICAgIC8qIFNUT1Agb24gYW4gRU9SICovCisjZGVmaW5lIERDU1JfU0VUQ01QU1QJKDEgPDwgMjUpICAgICAgIC8qIFNldCBEZXNjcmlwdG9yIENvbXBhcmUgU3RhdHVzICovCisjZGVmaW5lIERDU1JfQ0xSQ01QU1QJKDEgPDwgMjQpICAgICAgIC8qIENsZWFyIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9DTVBTVAkoMSA8PCAxMCkgICAgICAgLyogVGhlIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9FT1JJTlRSCSgxIDw8IDkpICAgICAgICAvKiBUaGUgZW5kIG9mIFJlY2VpdmUgKi8KKworI2RlZmluZSBEUkNNUl9NQVBWTEQJKDEgPDwgNykJLyogTWFwIFZhbGlkIChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERSQ01SX0NITE5VTQkweDFmCQkvKiBtYXNrIGZvciBDaGFubmVsIE51bWJlciAocmVhZCAvIHdyaXRlKSAqLworCisjZGVmaW5lIEREQURSX0RFU0NBRERSCTB4ZmZmZmZmZjAJLyogQWRkcmVzcyBvZiBuZXh0IGRlc2NyaXB0b3IgKG1hc2spICovCisjZGVmaW5lIEREQURSX1NUT1AJKDEgPDwgMCkJLyogU3RvcCAocmVhZCAvIHdyaXRlKSAqLworCisjZGVmaW5lIERDTURfSU5DU1JDQUREUgkoMSA8PCAzMSkJLyogU291cmNlIEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCisjZGVmaW5lIERDTURfSU5DVFJHQUREUgkoMSA8PCAzMCkJLyogVGFyZ2V0IEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCisjZGVmaW5lIERDTURfRkxPV1NSQwkoMSA8PCAyOSkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSBzb3VyY2UuICovCisjZGVmaW5lIERDTURfRkxPV1RSRwkoMSA8PCAyOCkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSB0YXJnZXQuICovCisjZGVmaW5lIERDTURfU1RBUlRJUlFFTgkoMSA8PCAyMikJLyogU3RhcnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ01EX0VORElSUUVOCSgxIDw8IDIxKQkvKiBFbmQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ01EX0VORElBTgkoMSA8PCAxOCkJLyogRGV2aWNlIEVuZGlhbi1uZXNzLiAqLworI2RlZmluZSBEQ01EX0JVUlNUOAkoMSA8PCAxNikJLyogOCBieXRlIGJ1cnN0ICovCisjZGVmaW5lIERDTURfQlVSU1QxNgkoMiA8PCAxNikJLyogMTYgYnl0ZSBidXJzdCAqLworI2RlZmluZSBEQ01EX0JVUlNUMzIJKDMgPDwgMTYpCS8qIDMyIGJ5dGUgYnVyc3QgKi8KKyNkZWZpbmUgRENNRF9XSURUSDEJKDEgPDwgMTQpCS8qIDEgYnl0ZSB3aWR0aCAqLworI2RlZmluZSBEQ01EX1dJRFRIMgkoMiA8PCAxNCkJLyogMiBieXRlIHdpZHRoIChIYWxmV29yZCkgKi8KKyNkZWZpbmUgRENNRF9XSURUSDQJKDMgPDwgMTQpCS8qIDQgYnl0ZSB3aWR0aCAoV29yZCkgKi8KKyNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KKworLyoKKyAqIERlc2NyaXB0b3Igc3RydWN0dXJlIGZvciBQWEEncyBETUEgZW5naW5lCisgKiBOb3RlOiB0aGlzIHN0cnVjdHVyZSBtdXN0IGFsd2F5cyBiZSBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBweGFfZG1hX2Rlc2MgeworCXZvbGF0aWxlIHUzMiBkZGFkcjsJLyogUG9pbnRzIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKyBmbGFncyAqLworCXZvbGF0aWxlIHUzMiBkc2FkcjsJLyogRFNBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCisJdm9sYXRpbGUgdTMyIGR0YWRyOwkvKiBEVEFEUiB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwl2b2xhdGlsZSB1MzIgZGNtZDsJLyogRENNRCB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KK30gcHhhX2RtYV9kZXNjOworCit0eXBlZGVmIGVudW0geworCURNQV9QUklPX0hJR0ggPSAwLAorCURNQV9QUklPX01FRElVTSA9IDEsCisJRE1BX1BSSU9fTE9XID0gMgorfSBweGFfZG1hX3ByaW87CisKKy8qCisgKiBETUEgcmVnaXN0cmF0aW9uCisgKi8KKworaW50IF9faW5pdCBweGFfaW5pdF9kbWEoaW50IGlycSwgaW50IG51bV9jaCk7CisKK2ludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsCisJCQkgcHhhX2RtYV9wcmlvIHByaW8sCisJCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCisJCQkgdm9pZCAqZGF0YSk7CisKK3ZvaWQgcHhhX2ZyZWVfZG1hIChpbnQgZG1hX2NoKTsKKworI2VuZGlmIC8qIF9fUExBVF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNDhjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfX1BMQVRfR1BJT19ICisjZGVmaW5lIF9fUExBVF9HUElPX0gKKworLyoKKyAqIFdlIGhhbmRsZSB0aGUgR1BJT3MgYnkgYmFua3MsIGVhY2ggYmFuayBjb3ZlcnMgdXAgdG8gMzIgR1BJT3Mgd2l0aAorICogb25lIHNldCBvZiByZWdpc3RlcnMuIFRoZSByZWdpc3RlciBvZmZzZXRzIGFyZSBvcmdhbml6ZWQgYmVsb3c6CisgKgorICogICAgICAgICAgIEdQTFIgICAgR1BEUiAgICBHUFNSICAgIEdQQ1IgICAgR1JFUiAgICBHRkVSICAgIEdFRFIKKyAqIEJBTksgMCAtIDB4MDAwMCAgMHgwMDBDICAweDAwMTggIDB4MDAyNCAgMHgwMDMwICAweDAwM0MgIDB4MDA0OAorICogQkFOSyAxIC0gMHgwMDA0ICAweDAwMTAgIDB4MDAxQyAgMHgwMDI4ICAweDAwMzQgIDB4MDA0MCAgMHgwMDRDCisgKiBCQU5LIDIgLSAweDAwMDggIDB4MDAxNCAgMHgwMDIwICAweDAwMkMgIDB4MDAzOCAgMHgwMDQ0ICAweDAwNTAKKyAqCisgKiBCQU5LIDMgLSAweDAxMDAgIDB4MDEwQyAgMHgwMTE4ICAweDAxMjQgIDB4MDEzMCAgMHgwMTNDICAweDAxNDgKKyAqIEJBTksgNCAtIDB4MDEwNCAgMHgwMTEwICAweDAxMUMgIDB4MDEyOCAgMHgwMTM0ICAweDAxNDAgIDB4MDE0QworICogQkFOSyA1IC0gMHgwMTA4ICAweDAxMTQgIDB4MDEyMCAgMHgwMTJDICAweDAxMzggIDB4MDE0NCAgMHgwMTUwCisgKgorICogTk9URToKKyAqICAgQkFOSyAzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTI3eCBhbmQgbGF0ZXIgcHJvY2Vzc29ycy4KKyAqICAgQkFOSyA0IGFuZCA1IGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQWEE5MzUKKyAqLworCisjZGVmaW5lIEdQSU9fQkFOSyhuKQkoR1BJT19SRUdTX1ZJUlQgKyBCQU5LX09GRihuKSkKKworI2RlZmluZSBHUExSX09GRlNFVAkweDAwCisjZGVmaW5lIEdQRFJfT0ZGU0VUCTB4MEMKKyNkZWZpbmUgR1BTUl9PRkZTRVQJMHgxOAorI2RlZmluZSBHUENSX09GRlNFVAkweDI0CisjZGVmaW5lIEdSRVJfT0ZGU0VUCTB4MzAKKyNkZWZpbmUgR0ZFUl9PRkZTRVQJMHgzQworI2RlZmluZSBHRURSX09GRlNFVAkweDQ4CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkKKwkJcmV0dXJuIEdQTFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKKwllbHNlCisJCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChncGlvKSAmJiAoZ3BpbyA8IE5SX0JVSUxUSU5fR1BJTykpIHsKKwkJaWYgKHZhbHVlKQorCQkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCQllbHNlCisJCQlHUENSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJfSBlbHNlCisJCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJCV9fZ3Bpb19jYW5zbGVlcAorCisvKiBOT1RFOiBzb21lIFBYQXMgaGF2ZSBmZXdlciBvbi1jaGlwIEdQSU9zIChsaWtlIFBYQTI1NSwgd2l0aCA4NSkuCisgKiBUaG9zZSBjYXNlcyBjdXJyZW50bHkgY2F1c2UgaG9sZXMgaW4gdGhlIEdQSU8gbnVtYmVyIHNwYWNlLCB0aGUKKyAqIGFjdHVhbCBudW1iZXIgb2YgdGhlIGxhc3QgR1BJTyBpcyByZWNvcmRlZCBieSAncHhhX2xhc3RfZ3BpbycuCisgKi8KK2V4dGVybiBpbnQgcHhhX2xhc3RfZ3BpbzsKKwordHlwZWRlZiBpbnQgKCpzZXRfd2FrZV90KSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pOworCitleHRlcm4gdm9pZCBweGFfaW5pdF9ncGlvKGludCBtdXhfaXJxLCBpbnQgc3RhcnQsIGludCBlbmQsIHNldF93YWtlX3QgZm4pOworI2VuZGlmIC8qIF9fUExBVF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAxOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCisgKgorICogICBDb21tb24gTXVsdGktRnVuY3Rpb24gUGluIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogMjAwNy04LTIxOiBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqICAgICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfTUZQX0gKKyNkZWZpbmUgX19BU01fUExBVF9NRlBfSAorCisjZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCisKKy8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KK2VudW0geworCU1GUF9QSU5fSU5WQUxJRCA9IC0xLAorCisJTUZQX1BJTl9HUElPMCA9IDAsCisJTUZQX1BJTl9HUElPMSwKKwlNRlBfUElOX0dQSU8yLAorCU1GUF9QSU5fR1BJTzMsCisJTUZQX1BJTl9HUElPNCwKKwlNRlBfUElOX0dQSU81LAorCU1GUF9QSU5fR1BJTzYsCisJTUZQX1BJTl9HUElPNywKKwlNRlBfUElOX0dQSU84LAorCU1GUF9QSU5fR1BJTzksCisJTUZQX1BJTl9HUElPMTAsCisJTUZQX1BJTl9HUElPMTEsCisJTUZQX1BJTl9HUElPMTIsCisJTUZQX1BJTl9HUElPMTMsCisJTUZQX1BJTl9HUElPMTQsCisJTUZQX1BJTl9HUElPMTUsCisJTUZQX1BJTl9HUElPMTYsCisJTUZQX1BJTl9HUElPMTcsCisJTUZQX1BJTl9HUElPMTgsCisJTUZQX1BJTl9HUElPMTksCisJTUZQX1BJTl9HUElPMjAsCisJTUZQX1BJTl9HUElPMjEsCisJTUZQX1BJTl9HUElPMjIsCisJTUZQX1BJTl9HUElPMjMsCisJTUZQX1BJTl9HUElPMjQsCisJTUZQX1BJTl9HUElPMjUsCisJTUZQX1BJTl9HUElPMjYsCisJTUZQX1BJTl9HUElPMjcsCisJTUZQX1BJTl9HUElPMjgsCisJTUZQX1BJTl9HUElPMjksCisJTUZQX1BJTl9HUElPMzAsCisJTUZQX1BJTl9HUElPMzEsCisJTUZQX1BJTl9HUElPMzIsCisJTUZQX1BJTl9HUElPMzMsCisJTUZQX1BJTl9HUElPMzQsCisJTUZQX1BJTl9HUElPMzUsCisJTUZQX1BJTl9HUElPMzYsCisJTUZQX1BJTl9HUElPMzcsCisJTUZQX1BJTl9HUElPMzgsCisJTUZQX1BJTl9HUElPMzksCisJTUZQX1BJTl9HUElPNDAsCisJTUZQX1BJTl9HUElPNDEsCisJTUZQX1BJTl9HUElPNDIsCisJTUZQX1BJTl9HUElPNDMsCisJTUZQX1BJTl9HUElPNDQsCisJTUZQX1BJTl9HUElPNDUsCisJTUZQX1BJTl9HUElPNDYsCisJTUZQX1BJTl9HUElPNDcsCisJTUZQX1BJTl9HUElPNDgsCisJTUZQX1BJTl9HUElPNDksCisJTUZQX1BJTl9HUElPNTAsCisJTUZQX1BJTl9HUElPNTEsCisJTUZQX1BJTl9HUElPNTIsCisJTUZQX1BJTl9HUElPNTMsCisJTUZQX1BJTl9HUElPNTQsCisJTUZQX1BJTl9HUElPNTUsCisJTUZQX1BJTl9HUElPNTYsCisJTUZQX1BJTl9HUElPNTcsCisJTUZQX1BJTl9HUElPNTgsCisJTUZQX1BJTl9HUElPNTksCisJTUZQX1BJTl9HUElPNjAsCisJTUZQX1BJTl9HUElPNjEsCisJTUZQX1BJTl9HUElPNjIsCisJTUZQX1BJTl9HUElPNjMsCisJTUZQX1BJTl9HUElPNjQsCisJTUZQX1BJTl9HUElPNjUsCisJTUZQX1BJTl9HUElPNjYsCisJTUZQX1BJTl9HUElPNjcsCisJTUZQX1BJTl9HUElPNjgsCisJTUZQX1BJTl9HUElPNjksCisJTUZQX1BJTl9HUElPNzAsCisJTUZQX1BJTl9HUElPNzEsCisJTUZQX1BJTl9HUElPNzIsCisJTUZQX1BJTl9HUElPNzMsCisJTUZQX1BJTl9HUElPNzQsCisJTUZQX1BJTl9HUElPNzUsCisJTUZQX1BJTl9HUElPNzYsCisJTUZQX1BJTl9HUElPNzcsCisJTUZQX1BJTl9HUElPNzgsCisJTUZQX1BJTl9HUElPNzksCisJTUZQX1BJTl9HUElPODAsCisJTUZQX1BJTl9HUElPODEsCisJTUZQX1BJTl9HUElPODIsCisJTUZQX1BJTl9HUElPODMsCisJTUZQX1BJTl9HUElPODQsCisJTUZQX1BJTl9HUElPODUsCisJTUZQX1BJTl9HUElPODYsCisJTUZQX1BJTl9HUElPODcsCisJTUZQX1BJTl9HUElPODgsCisJTUZQX1BJTl9HUElPODksCisJTUZQX1BJTl9HUElPOTAsCisJTUZQX1BJTl9HUElPOTEsCisJTUZQX1BJTl9HUElPOTIsCisJTUZQX1BJTl9HUElPOTMsCisJTUZQX1BJTl9HUElPOTQsCisJTUZQX1BJTl9HUElPOTUsCisJTUZQX1BJTl9HUElPOTYsCisJTUZQX1BJTl9HUElPOTcsCisJTUZQX1BJTl9HUElPOTgsCisJTUZQX1BJTl9HUElPOTksCisJTUZQX1BJTl9HUElPMTAwLAorCU1GUF9QSU5fR1BJTzEwMSwKKwlNRlBfUElOX0dQSU8xMDIsCisJTUZQX1BJTl9HUElPMTAzLAorCU1GUF9QSU5fR1BJTzEwNCwKKwlNRlBfUElOX0dQSU8xMDUsCisJTUZQX1BJTl9HUElPMTA2LAorCU1GUF9QSU5fR1BJTzEwNywKKwlNRlBfUElOX0dQSU8xMDgsCisJTUZQX1BJTl9HUElPMTA5LAorCU1GUF9QSU5fR1BJTzExMCwKKwlNRlBfUElOX0dQSU8xMTEsCisJTUZQX1BJTl9HUElPMTEyLAorCU1GUF9QSU5fR1BJTzExMywKKwlNRlBfUElOX0dQSU8xMTQsCisJTUZQX1BJTl9HUElPMTE1LAorCU1GUF9QSU5fR1BJTzExNiwKKwlNRlBfUElOX0dQSU8xMTcsCisJTUZQX1BJTl9HUElPMTE4LAorCU1GUF9QSU5fR1BJTzExOSwKKwlNRlBfUElOX0dQSU8xMjAsCisJTUZQX1BJTl9HUElPMTIxLAorCU1GUF9QSU5fR1BJTzEyMiwKKwlNRlBfUElOX0dQSU8xMjMsCisJTUZQX1BJTl9HUElPMTI0LAorCU1GUF9QSU5fR1BJTzEyNSwKKwlNRlBfUElOX0dQSU8xMjYsCisJTUZQX1BJTl9HUElPMTI3LAorCU1GUF9QSU5fR1BJTzBfMiwKKwlNRlBfUElOX0dQSU8xXzIsCisJTUZQX1BJTl9HUElPMl8yLAorCU1GUF9QSU5fR1BJTzNfMiwKKwlNRlBfUElOX0dQSU80XzIsCisJTUZQX1BJTl9HUElPNV8yLAorCU1GUF9QSU5fR1BJTzZfMiwKKwlNRlBfUElOX0dQSU83XzIsCisJTUZQX1BJTl9HUElPOF8yLAorCU1GUF9QSU5fR1BJTzlfMiwKKwlNRlBfUElOX0dQSU8xMF8yLAorCU1GUF9QSU5fR1BJTzExXzIsCisJTUZQX1BJTl9HUElPMTJfMiwKKwlNRlBfUElOX0dQSU8xM18yLAorCU1GUF9QSU5fR1BJTzE0XzIsCisJTUZQX1BJTl9HUElPMTVfMiwKKwlNRlBfUElOX0dQSU8xNl8yLAorCU1GUF9QSU5fR1BJTzE3XzIsCisKKwlNRlBfUElOX1VMUElfU1RQLAorCU1GUF9QSU5fVUxQSV9OWFQsCisJTUZQX1BJTl9VTFBJX0RJUiwKKworCU1GUF9QSU5fblhDVlJFTiwKKwlNRlBfUElOX0RGX0NMRV9uT0UsCisJTUZQX1BJTl9ERl9uQURWMV9BTEUsCisJTUZQX1BJTl9ERl9TQ0xLX0UsCisJTUZQX1BJTl9ERl9TQ0xLX1MsCisJTUZQX1BJTl9uQkUwLAorCU1GUF9QSU5fbkJFMSwKKwlNRlBfUElOX0RGX25BRFYyX0FMRSwKKwlNRlBfUElOX0RGX0lOVF9SbkIsCisJTUZQX1BJTl9ERl9uQ1MwLAorCU1GUF9QSU5fREZfbkNTMSwKKwlNRlBfUElOX25MVUEsCisJTUZQX1BJTl9uTExBLAorCU1GUF9QSU5fREZfbldFLAorCU1GUF9QSU5fREZfQUxFX25XRSwKKwlNRlBfUElOX0RGX25SRV9uT0UsCisJTUZQX1BJTl9ERl9BRERSMCwKKwlNRlBfUElOX0RGX0FERFIxLAorCU1GUF9QSU5fREZfQUREUjIsCisJTUZQX1BJTl9ERl9BRERSMywKKwlNRlBfUElOX0RGX0lPMCwKKwlNRlBfUElOX0RGX0lPMSwKKwlNRlBfUElOX0RGX0lPMiwKKwlNRlBfUElOX0RGX0lPMywKKwlNRlBfUElOX0RGX0lPNCwKKwlNRlBfUElOX0RGX0lPNSwKKwlNRlBfUElOX0RGX0lPNiwKKwlNRlBfUElOX0RGX0lPNywKKwlNRlBfUElOX0RGX0lPOCwKKwlNRlBfUElOX0RGX0lPOSwKKwlNRlBfUElOX0RGX0lPMTAsCisJTUZQX1BJTl9ERl9JTzExLAorCU1GUF9QSU5fREZfSU8xMiwKKwlNRlBfUElOX0RGX0lPMTMsCisJTUZQX1BJTl9ERl9JTzE0LAorCU1GUF9QSU5fREZfSU8xNSwKKwlNRlBfUElOX0RGX25DUzBfU01fbkNTMiwKKwlNRlBfUElOX0RGX25DUzFfU01fbkNTMywKKwlNRlBfUElOX1NNX25DUzAsCisJTUZQX1BJTl9TTV9uQ1MxLAorCU1GUF9QSU5fREZfV0VuLAorCU1GUF9QSU5fREZfUkVuLAorCU1GUF9QSU5fREZfQ0xFX1NNX09FbiwKKwlNRlBfUElOX0RGX0FMRV9TTV9XRW4sCisJTUZQX1BJTl9ERl9SRFkwLAorCU1GUF9QSU5fREZfUkRZMSwKKworCU1GUF9QSU5fU01fU0NMSywKKwlNRlBfUElOX1NNX0JFMCwKKwlNRlBfUElOX1NNX0JFMSwKKwlNRlBfUElOX1NNX0FEViwKKwlNRlBfUElOX1NNX0FEVk1VWCwKKwlNRlBfUElOX1NNX1JEWSwKKworCU1GUF9QSU5fTU1DMV9EQVQ3LAorCU1GUF9QSU5fTU1DMV9EQVQ2LAorCU1GUF9QSU5fTU1DMV9EQVQ1LAorCU1GUF9QSU5fTU1DMV9EQVQ0LAorCU1GUF9QSU5fTU1DMV9EQVQzLAorCU1GUF9QSU5fTU1DMV9EQVQyLAorCU1GUF9QSU5fTU1DMV9EQVQxLAorCU1GUF9QSU5fTU1DMV9EQVQwLAorCU1GUF9QSU5fTU1DMV9DTUQsCisJTUZQX1BJTl9NTUMxX0NMSywKKwlNRlBfUElOX01NQzFfQ0QsCisJTUZQX1BJTl9NTUMxX1dQLAorCisJLyogYWRkaXRpb25hbCBwaW5zIG9uIFBYQTkzMCAqLworCU1GUF9QSU5fR1NJTV9VSU8sCisJTUZQX1BJTl9HU0lNX1VDTEssCisJTUZQX1BJTl9HU0lNX1VERVQsCisJTUZQX1BJTl9HU0lNX25VUlNULAorCU1GUF9QSU5fUE1JQ19JTlQsCisJTUZQX1BJTl9SRFksCisKKwlNRlBfUElOX01BWCwKK307CisKKy8qCisgKiBhIHBvc3NpYmxlIE1GUCBjb25maWd1cmF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IGludGVnZXIKKyAqCisgKiBiaXQgIDAuLiA5IC0gTUZQIFBpbiBOdW1iZXIgKDEwMjQgUGlucyBNYXhpbXVtKQorICogYml0IDEwLi4xMiAtIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3Rpb24KKyAqIGJpdCAxMy4uMTUgLSBEcml2ZSBTdHJlbmd0aAorICogYml0IDE2Li4xOCAtIExvdyBQb3dlciBNb2RlIFN0YXRlCisgKiBiaXQgMTkuLjIwIC0gTG93IFBvd2VyIE1vZGUgRWRnZSBEZXRlY3Rpb24KKyAqIGJpdCAyMS4uMjIgLSBSdW4gTW9kZSBQdWxsIFN0YXRlCisgKgorICogdG8gZmFjaWxpdGF0ZSB0aGUgZGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHByb3ZpZGVkCisgKgorICogTUZQX0NGR19ERUZBVUxUIC0gZGVmYXVsdCBNRlAgY29uZmlndXJhdGlvbiB2YWx1ZSwgd2l0aAorICogCQkgIGFsdGVybmF0ZSBmdW5jdGlvbiA9IDAsCisgKiAJCSAgZHJpdmUgc3RyZW5ndGggPSBmYXN0IDNtQSAoTUZQX0RTMDNYKQorICogCQkgIGxvdyBwb3dlciBtb2RlID0gZGVmYXVsdAorICogCQkgIGVkZ2UgZGV0ZWN0aW9uID0gbm9uZQorICoKKyAqIE1GUF9DRkcJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24KKyAqIE1GUF9DRkdfRFJWCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uIGFuZAorICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aAorICogTUZQX0NGR19MUE0JLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCisgKiAJCSAgbG93IHBvd2VyIG1vZGUKKyAqIE1GUF9DRkdfWAktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiwKKyAqIAkJICBwaW4gZHJpdmUgc3RyZW5ndGggYW5kIGxvdyBwb3dlciBtb2RlCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1mcF9jZmdfdDsKKworI2RlZmluZSBNRlBfUElOKHgpCQkoKHgpICYgMHgzZmYpCisKKyNkZWZpbmUgTUZQX0FGMAkJCSgweDAgPDwgMTApCisjZGVmaW5lIE1GUF9BRjEJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBNRlBfQUYyCQkJKDB4MiA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGMwkJCSgweDMgPDwgMTApCisjZGVmaW5lIE1GUF9BRjQJCQkoMHg0IDw8IDEwKQorI2RlZmluZSBNRlBfQUY1CQkJKDB4NSA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGNgkJCSgweDYgPDwgMTApCisjZGVmaW5lIE1GUF9BRjcJCQkoMHg3IDw8IDEwKQorI2RlZmluZSBNRlBfQUZfTUFTSwkJKDB4NyA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGKHgpCQkoKCh4KSA+PiAxMCkgJiAweDcpCisKKyNkZWZpbmUgTUZQX0RTMDFYCQkoMHgwIDw8IDEzKQorI2RlZmluZSBNRlBfRFMwMlgJCSgweDEgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzAzWAkJKDB4MiA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMDRYCQkoMHgzIDw8IDEzKQorI2RlZmluZSBNRlBfRFMwNlgJCSgweDQgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzA4WAkJKDB4NSA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMTBYCQkoMHg2IDw8IDEzKQorI2RlZmluZSBNRlBfRFMxM1gJCSgweDcgPDwgMTMpCisjZGVmaW5lIE1GUF9EU19NQVNLCQkoMHg3IDw8IDEzKQorI2RlZmluZSBNRlBfRFMoeCkJCSgoKHgpID4+IDEzKSAmIDB4NykKKworI2RlZmluZSBNRlBfTFBNX0RFRkFVTFQJCSgweDAgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRFJJVkVfTE9XCSgweDEgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRFJJVkVfSElHSAkoMHgyIDw8IDE2KQorI2RlZmluZSBNRlBfTFBNX1BVTExfTE9XCSgweDMgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fUFVMTF9ISUdICSgweDQgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRkxPQVQJCSgweDUgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fSU5QVVQJCSgweDYgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fU1RBVEVfTUFTSwkoMHg3IDw8IDE2KQorI2RlZmluZSBNRlBfTFBNX1NUQVRFKHgpCSgoKHgpID4+IDE2KSAmIDB4NykKKworI2RlZmluZSBNRlBfTFBNX0VER0VfTk9ORQkoMHgwIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfUklTRQkoMHgxIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfRkFMTAkoMHgyIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfQk9USAkoMHgzIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfTUFTSwkoMHgzIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0UoeCkJCSgoKHgpID4+IDE5KSAmIDB4MykKKworI2RlZmluZSBNRlBfUFVMTF9OT05FCQkoMHgwIDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCisKKyNkZWZpbmUgTUZQX0NGR19ERUZBVUxUCQkoTUZQX0FGMCB8IE1GUF9EUzAzWCB8IE1GUF9MUE1fREVGQVVMVCB8XAorCQkJCSBNRlBfTFBNX0VER0VfTk9ORSB8IE1GUF9QVUxMX05PTkUpCisKKyNkZWZpbmUgTUZQX0NGRyhwaW4sIGFmKQkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfk1GUF9BRl9NQVNLKSB8XAorCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmKSkKKworI2RlZmluZSBNRlBfQ0ZHX0RSVihwaW4sIGFmLCBkcnYpCVwKKwkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYpKQorCisjZGVmaW5lIE1GUF9DRkdfTFBNKHBpbiwgYWYsIGxwbSkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfTFBNXyMjbHBtKSkKKworI2RlZmluZSBNRlBfQ0ZHX1gocGluLCBhZiwgZHJ2LCBscG0pCVwKKwkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYgfCBNRlBfTFBNXyMjbHBtKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NTVApCisvKgorICogZWFjaCBNRlAgcGluIHdpbGwgaGF2ZSBhIE1GUFIgcmVnaXN0ZXIsIHNpbmNlIHRoZSBvZmZzZXQgb2YgdGhlCisgKiByZWdpc3RlciB2YXJpZXMgYmV0d2VlbiBwcm9jZXNzb3JzLCB0aGUgcHJvY2Vzc29yIHNwZWNpZmljIGNvZGUKKyAqIHNob3VsZCBpbml0aWFsaXplIHRoZSBwaW4gb2Zmc2V0cyBieSBtZnBfaW5pdCgpCisgKgorICogbWZwX2luaXRfYmFzZSgpIC0gYWNjZXB0cyBhIHZpcnR1YWwgYmFzZSBmb3IgYWxsIE1GUFIgcmVnaXN0ZXJzIGFuZAorICogaW5pdGlhbGl6ZSB0aGUgTUZQIHRhYmxlIHRvIGEgZGVmYXVsdCBzdGF0ZQorICoKKyAqIG1mcF9pbml0X2FkZHIoKSAtIGFjY2VwdHMgYSB0YWJsZSBvZiAibWZwX2FkZHJfbWFwIiBzdHJ1Y3R1cmUsIHdoaWNoCisgKiByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvICJlbmQiLCB3aXRoIHRoZSBvZmZzZXQKKyAqIGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUgcGluLCBsZXQgImVuZCIgPSAtMS4KKyAqCisgKiB1c2UKKyAqCisgKiBNRlBfQUREUl9YKCkgdG8gZGVmaW5lIGEgcmFuZ2Ugb2YgcGlucworICogTUZQX0FERFIoKSAgIHRvIGRlZmluZSBhIHNpbmdsZSBwaW4KKyAqIE1GUF9BRERSX0VORCB0byBzaWduYWwgdGhlIGVuZCBvZiBwaW4gb2Zmc2V0IGRlZmluaXRpb25zCisgKi8KK3N0cnVjdCBtZnBfYWRkcl9tYXAgeworCXVuc2lnbmVkIGludAlzdGFydDsKKwl1bnNpZ25lZCBpbnQJZW5kOworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OworfTsKKworI2RlZmluZSBNRlBfQUREUl9YKHN0YXJ0LCBlbmQsIG9mZnNldCkgXAorCXsgTUZQX1BJTl8jI3N0YXJ0LCBNRlBfUElOXyMjZW5kLCBvZmZzZXQgfQorCisjZGVmaW5lIE1GUF9BRERSKHBpbiwgb2Zmc2V0KSBcCisJeyBNRlBfUElOXyMjcGluLCAtMSwgb2Zmc2V0IH0KKworI2RlZmluZSBNRlBfQUREUl9FTkQJeyBNRlBfUElOX0lOVkFMSUQsIDAgfQorCit2b2lkIF9faW5pdCBtZnBfaW5pdF9iYXNlKHVuc2lnbmVkIGxvbmcgbWZwcl9iYXNlKTsKK3ZvaWQgX19pbml0IG1mcF9pbml0X2FkZHIoc3RydWN0IG1mcF9hZGRyX21hcCAqbWFwKTsKKworLyoKKyAqIG1mcF97cmVhZCwgd3JpdGV9KCkJLSBmb3IgZGlyZWN0IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBNRlBSIHJlZ2lzdGVyCisgKiBtZnBfY29uZmlnKCkJCS0gZm9yIGNvbmZpZ3VyaW5nIGEgZ3JvdXAgb2YgTUZQUiByZWdpc3RlcnMKKyAqIG1mcF9jb25maWdfbHBtKCkJLSBjb25maWd1cmluZyBhbGwgbG93IHBvd2VyIE1GUFIgcmVnaXN0ZXJzIGZvciBzdXNwZW5kCisgKiBtZnBfY29uZmlnX3J1bigpCS0gY29uZmlndXJpbmcgYWxsIHJ1biB0aW1lICBNRlBSIHJlZ2lzdGVycyBhZnRlciByZXN1bWUKKyAqLwordW5zaWduZWQgbG9uZyBtZnBfcmVhZChpbnQgbWZwKTsKK3ZvaWQgbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgbWZwcl92YWwpOwordm9pZCBtZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKK3ZvaWQgbWZwX2NvbmZpZ19ydW4odm9pZCk7Cit2b2lkIG1mcF9jb25maWdfbHBtKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19QWEEzeHggfHwgQ09ORklHX0FSQ0hfTU1QICovCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTZjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisgKgorICogICBNdWx0aS1GdW5jdGlvbiBQaW4gU3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNYXJ2ZWxsIEludGVybmF0aW9uIEx0ZC4KKyAqCisgKiAyMDA3LTA4LTIxOiBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqICAgICAgICAgICAgIGluaXRpYWwgdmVyc2lvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KKworI2RlZmluZSBNRlBSX1NJWkUJKFBBR0VfU0laRSkKKworLyogTUZQUiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUZQUl9QVUxMX1NFTAkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgTUZQUl9QVUxMVVBfRU4JCSgweDEgPDwgMTQpCisjZGVmaW5lIE1GUFJfUFVMTERPV05fRU4JKDB4MSA8PCAxMykKKyNkZWZpbmUgTUZQUl9TTEVFUF9TRUwJCSgweDEgPDwgOSkKKyNkZWZpbmUgTUZQUl9TTEVFUF9PRV9OCQkoMHgxIDw8IDcpCisjZGVmaW5lIE1GUFJfRURHRV9DTEVBUgkJKDB4MSA8PCA2KQorI2RlZmluZSBNRlBSX0VER0VfRkFMTF9FTgkoMHgxIDw8IDUpCisjZGVmaW5lIE1GUFJfRURHRV9SSVNFX0VOCSgweDEgPDwgNCkKKworI2RlZmluZSBNRlBSX1NMRUVQX0RBVEEoeCkJKCh4KSA8PCA4KQorI2RlZmluZSBNRlBSX0RSSVZFKHgpCQkoKCh4KSAmIDB4NykgPDwgMTApCisjZGVmaW5lIE1GUFJfQUZfU0VMKHgpCQkoKCh4KSAmIDB4NykgPDwgMCkKKworI2RlZmluZSBNRlBSX0VER0VfTk9ORQkJKDApCisjZGVmaW5lIE1GUFJfRURHRV9SSVNFCQkoTUZQUl9FREdFX1JJU0VfRU4pCisjZGVmaW5lIE1GUFJfRURHRV9GQUxMCQkoTUZQUl9FREdFX0ZBTExfRU4pCisjZGVmaW5lIE1GUFJfRURHRV9CT1RICQkoTUZQUl9FREdFX1JJU0UgfCBNRlBSX0VER0VfRkFMTCkKKworLyoKKyAqIFRhYmxlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbG93IHBvd2VyIG1vZGVzIG91dHB1dHMsIHdpdGggYWN0dWFsIHNldHRpbmdzCisgKiB1c2VkIGluIHBhcmVudGhlc2VzIGZvciBkb24ndC1jYXJlIHZhbHVlcy4gRXhjZXB0IGZvciB0aGUgZmxvYXQgb3V0cHV0LAorICogdGhlIGNvbmZpZ3VyZWQgZHJpdmVuIGFuZCBwdWxsZWQgbGV2ZWxzIG1hdGNoLCBzbyBpZiB0aGVyZSBpcyBhIG5lZWQgZm9yCisgKiBub24tTFBNIHB1bGxlZCBvdXRwdXQsIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gY291bGQgcHJvYmFibHkgYmUgdXNlZC4KKyAqCisgKiBPdXRwdXQgdmFsdWUgIHNsZWVwX29lX24gIHNsZWVwX2RhdGEgIHB1bGx1cF9lbiAgcHVsbGRvd25fZW4gIHB1bGxfc2VsCisgKiAgICAgICAgICAgICAgICAgKGJpdCA3KSAgICAoYml0IDgpICAgIChiaXQgMTQpICAgICAoYml0IDEzKSAgIChiaXQgMTUpCisgKgorICogSW5wdXQgICAgICAgICAgICAwICAgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgMAorICogRHJpdmUgMCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgIDAgICAgICAgICAgIFgoMSkgICAgICAgMAorICogRHJpdmUgMSAgICAgICAgICAwICAgICAgICAgIDEgICAgICAgICAgIFgoMSkgICAgICAgIDAJICAwCisgKiBQdWxsIGhpICgxKSAgICAgIDEgICAgICAgICAgWCgxKSAgICAgICAgMSAgICAgICAgICAgMAkgIDAKKyAqIFB1bGwgbG8gKDApICAgICAgMSAgICAgICAgICBYKDApICAgICAgICAwICAgICAgICAgICAxCSAgMAorICogWiAoZmxvYXQpICAgICAgICAxICAgICAgICAgIFgoMCkgICAgICAgIDAgICAgICAgICAgIDAJICAwCisgKi8KKyNkZWZpbmUgTUZQUl9MUE1fSU5QVVQJCSgwKQorI2RlZmluZSBNRlBSX0xQTV9EUklWRV9MT1cJKE1GUFJfU0xFRVBfREFUQSgwKSB8IE1GUFJfUFVMTERPV05fRU4pCisjZGVmaW5lIE1GUFJfTFBNX0RSSVZFX0hJR0ggICAgCShNRlBSX1NMRUVQX0RBVEEoMSkgfCBNRlBSX1BVTExVUF9FTikKKyNkZWZpbmUgTUZQUl9MUE1fUFVMTF9MT1cgICAgICAJKE1GUFJfTFBNX0RSSVZFX0xPVyAgfCBNRlBSX1NMRUVQX09FX04pCisjZGVmaW5lIE1GUFJfTFBNX1BVTExfSElHSCAgICAgCShNRlBSX0xQTV9EUklWRV9ISUdIIHwgTUZQUl9TTEVFUF9PRV9OKQorI2RlZmluZSBNRlBSX0xQTV9GTE9BVCAgICAgICAgIAkoTUZQUl9TTEVFUF9PRV9OKQorI2RlZmluZSBNRlBSX0xQTV9NQVNLCQkoMHhlMDgwKQorCisvKgorICogVGhlIHB1bGx1cCBhbmQgcHVsbGRvd24gc3RhdGUgb2YgdGhlIE1GUCBwaW4gYXQgcnVuIG1vZGUgaXMgYnkgZGVmYXVsdAorICogZGV0ZXJtaW5lZCBieSB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRlIGZ1bmN0aW9uLiBJbiBjYXNlIHRoYXQgc29tZSBidWdneQorICogZGV2aWNlcyBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciwgIHRoZSBkZWZpbml0aW9ucyBiZWxvdworICogaW5kaWNhdGVzIHRoZSBzZXR0aW5nIG9mIGNvcnJlc3BvbmRpbmcgTUZQUiBiaXRzCisgKgorICogRGVmaW5pdGlvbiAgICAgICBwdWxsX3NlbCAgcHVsbHVwX2VuICBwdWxsZG93bl9lbgorICogTUZQUl9QVUxMX05PTkUgICAgICAgMCAgICAgICAgIDAgICAgICAgIDAKKyAqIE1GUFJfUFVMTF9MT1cgICAgICAgIDEgICAgICAgICAwICAgICAgICAxCisgKiBNRlBSX1BVTExfSElHSCAgICAgICAxICAgICAgICAgMSAgICAgICAgMAorICogTUZQUl9QVUxMX0JPVEggICAgICAgMSAgICAgICAgIDEgICAgICAgIDEKKyAqLworI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCisjZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKKyNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCisjZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQorCisvKiBtZnBfc3Bpbl9sb2NrIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgTUZQIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KKyAqIChtb3N0IGxpa2VseSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbikgaXMgYXRvbWljLCBhbmQgdGhhdAorICogbWZwX3RhYmxlW10gaXMgY29uc2lzdGVudAorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mcF9zcGluX2xvY2spOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICptZnByX21taW9fYmFzZTsKKworc3RydWN0IG1mcF9waW4geworCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogLTEgZm9yIG5vdCBjb25maWd1cmVkICovCisJdW5zaWduZWQgbG9uZwltZnByX29mZjsJLyogTUZQUnh4IFJlZ2lzdGVyIG9mZnNldCAqLworCXVuc2lnbmVkIGxvbmcJbWZwcl9ydW47CS8qIFJ1bi1Nb2RlIFJlZ2lzdGVyIFZhbHVlICovCisJdW5zaWduZWQgbG9uZwltZnByX2xwbTsJLyogTG93IFBvd2VyIE1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZwX3BpbiBtZnBfdGFibGVbTUZQX1BJTl9NQVhdOworCisvKiBtYXBwaW5nIG9mIE1GUF9MUE1fKiBkZWZpbml0aW9ucyB0byBNRlBSX0xQTV8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfbHBtW10gPSB7CisJTUZQUl9MUE1fSU5QVVQsCisJTUZQUl9MUE1fRFJJVkVfTE9XLAorCU1GUFJfTFBNX0RSSVZFX0hJR0gsCisJTUZQUl9MUE1fUFVMTF9MT1csCisJTUZQUl9MUE1fUFVMTF9ISUdILAorCU1GUFJfTFBNX0ZMT0FULAorfTsKKworLyogbWFwcGluZyBvZiBNRlBfUFVMTF8qIGRlZmluaXRpb25zIHRvIE1GUFJfUFVMTF8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfcHVsbFtdID0geworCU1GUFJfUFVMTF9OT05FLAorCU1GUFJfUFVMTF9MT1csCisJTUZQUl9QVUxMX0hJR0gsCisJTUZQUl9QVUxMX0JPVEgsCit9OworCisvKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfZWRnZVtdID0geworCU1GUFJfRURHRV9OT05FLAorCU1GUFJfRURHRV9SSVNFLAorCU1GUFJfRURHRV9GQUxMLAorCU1GUFJfRURHRV9CT1RILAorfTsKKworI2RlZmluZSBtZnByX3JlYWRsKG9mZikJCQlcCisJX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKKworI2RlZmluZSBtZnByX3dyaXRlbChvZmYsIHZhbCkJCVwKKwlfX3Jhd193cml0ZWwodmFsLCBtZnByX21taW9fYmFzZSArIChvZmYpKQorCisjZGVmaW5lIG1mcF9jb25maWd1cmVkKHApCSgocCktPmNvbmZpZyAhPSAtMSkKKworLyoKKyAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQorICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCisgKi8KKyNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX3J1bihzdHJ1Y3QgbWZwX3BpbiAqcCkKK3sKKwlpZiAobWZwX2NvbmZpZ3VyZWQocCkpCisJCW1mcHJfd3JpdGVsKHAtPm1mcHJfb2ZmLCBwLT5tZnByX3J1bik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21mcF9jb25maWdfbHBtKHN0cnVjdCBtZnBfcGluICpwKQoreworCWlmIChtZnBfY29uZmlndXJlZChwKSkgeworCQl1bnNpZ25lZCBsb25nIG1mcHJfY2xyID0gKHAtPm1mcHJfcnVuICYgfk1GUFJfRURHRV9CT1RIKSB8IE1GUFJfRURHRV9DTEVBUjsKKwkJaWYgKG1mcHJfY2xyICE9IHAtPm1mcHJfcnVuKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIG1mcHJfY2xyKTsKKwkJaWYgKHAtPm1mcHJfbHBtICE9IG1mcHJfY2xyKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfbHBtKTsKKwl9Cit9CisKK3ZvaWQgbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZncywgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgbWZwX2NmZ3MrKykgeworCQl1bnNpZ25lZCBsb25nIHRtcCwgYyA9ICptZnBfY2ZnczsKKwkJc3RydWN0IG1mcF9waW4gKnA7CisJCWludCBwaW4sIGFmLCBkcnYsIGxwbSwgZWRnZSwgcHVsbDsKKworCQlwaW4gPSBNRlBfUElOKGMpOworCQlCVUdfT04ocGluID49IE1GUF9QSU5fTUFYKTsKKwkJcCA9ICZtZnBfdGFibGVbcGluXTsKKworCQlhZiAgPSBNRlBfQUYoYyk7CisJCWRydiA9IE1GUF9EUyhjKTsKKwkJbHBtID0gTUZQX0xQTV9TVEFURShjKTsKKwkJZWRnZSA9IE1GUF9MUE1fRURHRShjKTsKKwkJcHVsbCA9IE1GUF9QVUxMKGMpOworCisJCS8qIHJ1bi1tb2RlIHB1bGwgc2V0dGluZ3Mgd2lsbCBjb25mbGljdCB3aXRoIE1GUFIgYml0cyBvZgorCQkgKiBsb3cgcG93ZXIgbW9kZSBzdGF0ZSwgIGNhbGN1bGF0ZSBtZnByX3J1biBhbmQgbWZwcl9scG0KKwkJICogaW5kaXZpZHVhbGx5IGlmIHB1bGwgIT0gTUZQX1BVTExfTk9ORQorCQkgKi8KKwkJdG1wID0gTUZQUl9BRl9TRUwoYWYpIHwgTUZQUl9EUklWRShkcnYpOworCisJCWlmIChsaWtlbHkocHVsbCA9PSBNRlBfUFVMTF9OT05FKSkgeworCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOworCQkJcC0+bWZwcl9scG0gPSBwLT5tZnByX3J1bjsKKwkJfSBlbHNlIHsKKwkJCXAtPm1mcHJfbHBtID0gdG1wIHwgbWZwcl9scG1bbHBtXSB8IG1mcHJfZWRnZVtlZGdlXTsKKwkJCXAtPm1mcHJfcnVuID0gdG1wIHwgbWZwcl9wdWxsW3B1bGxdOworCQl9CisKKwkJcC0+Y29uZmlnID0gYzsgX19tZnBfY29uZmlnX3J1bihwKTsKKwl9CisKKwltZnByX3N5bmMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbWZwX3JlYWQoaW50IG1mcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CisKKwlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisJdmFsID0gbWZwcl9yZWFkbChtZnBfdGFibGVbbWZwXS5tZnByX29mZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBtZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKKwltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKKwltZnByX3N5bmMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgX19pbml0IG1mcF9pbml0X2Jhc2UodW5zaWduZWQgbG9uZyBtZnByX2Jhc2UpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIHRoZSB0YWJsZSB3aXRoIGRlZmF1bHQgLSB1bmNvbmZpZ3VyZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBpKyspCisJCW1mcF90YWJsZVtpXS5jb25maWcgPSAtMTsKKworCW1mcHJfbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKW1mcHJfYmFzZTsKK30KKwordm9pZCBfX2luaXQgbWZwX2luaXRfYWRkcihzdHJ1Y3QgbWZwX2FkZHJfbWFwICptYXApCit7CisJc3RydWN0IG1mcF9hZGRyX21hcCAqcDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJZm9yIChwID0gbWFwOyBwLT5zdGFydCAhPSBNRlBfUElOX0lOVkFMSUQ7IHArKykgeworCQlvZmZzZXQgPSBwLT5vZmZzZXQ7CisJCWkgPSBwLT5zdGFydDsKKworCQlkbyB7CisJCQltZnBfdGFibGVbaV0ubWZwcl9vZmYgPSBvZmZzZXQ7CisJCQltZnBfdGFibGVbaV0ubWZwcl9ydW4gPSAwOworCQkJbWZwX3RhYmxlW2ldLm1mcHJfbHBtID0gMDsKKwkJCW9mZnNldCArPSA0OyBpKys7CisJCX0gd2hpbGUgKChpIDw9IHAtPmVuZCkgJiYgKHAtPmVuZCAhPSAtMSkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBtZnBfY29uZmlnX2xwbSh2b2lkKQoreworCXN0cnVjdCBtZnBfcGluICpwID0gJm1mcF90YWJsZVswXTsKKwlpbnQgcGluOworCisJZm9yIChwaW4gPSAwOyBwaW4gPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IHBpbisrLCBwKyspCisJCV9fbWZwX2NvbmZpZ19scG0ocCk7Cit9CisKK3ZvaWQgbWZwX2NvbmZpZ19ydW4odm9pZCkKK3sKKwlzdHJ1Y3QgbWZwX3BpbiAqcCA9ICZtZnBfdGFibGVbMF07CisJaW50IHBpbjsKKworCWZvciAocGluID0gMDsgcGluIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBwaW4rKywgcCsrKQorCQlfX21mcF9jb25maWdfcnVuKHApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQppbmRleCAzOTE5NWY5Li44ZDc4MTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsMTEgQEAKIG9iai15CQkJCSs9IGdwaW8ubwogb2JqLXkJCQkJKz0gZ3Bpby1jb25maWcubwogCisjIFBNIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubworb2JqLSQoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0spCSs9IHBtLWNoZWNrLm8KKwogIyBkZXZpY2VzCiAKIG9iai0kKENPTkZJR19TM0NfREVWX0hTTU1DKQkrPSBkZXYtaHNtbWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc5Nzc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3BtLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHMzY19wbV9pbml0CisgKgorICogY2FsbGVkIGZyb20gYm9hcmQgYXQgaW5pdGlhbGlzYXRpb24gdGltZSB0byBzZXR1cCB0aGUgcG93ZXIKKyAqIG1hbmFnZW1lbnQKKyovCisKKyNpZmRlZiBDT05GSUdfUE0KKworZXh0ZXJuIF9faW5pdCBpbnQgczNjX3BtX2luaXQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUSBtYXNrIG92ZXIgc2xlZXAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzazsKKworLyogSVJRIG1hc2tzIGZvciBJUlFzIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgKHNlZSBpcnEuYykgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OworCisvKiBwZXItY3B1IHNsZWVwIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKworLyogRmxhZ3MgZm9yIFBNIENvbnRyb2wgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOworCisvKiBmcm9tIHNsZWVwLlMgKi8KKworZXh0ZXJuIGludCAgczNjX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOworZXh0ZXJuIHZvaWQgczNjX2NwdV9yZXN1bWUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3N1c3BlbmQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19zbGVlcF9zYXZlX3BoeXM7CisKKy8qIHNsZWVwIHNhdmUgaW5mbyAqLworCisvKioKKyAqIHN0cnVjdCBzbGVlcF9zYXZlIC0gc2F2ZSBpbmZvcm1hdGlvbiBmb3Igc2hhcmVkIHBlcmlwaGVyYWxzLgorICogQHJlZzogUG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgdG8gc2F2ZS4KKyAqIEB2YWw6IEhvbGRlciBmb3IgdGhlIHZhbHVlIHNhdmVkIGZyb20gcmVnLgorICoKKyAqIFRoaXMgZGVzY3JpYmVzIGEgbGlzdCBvZiByZWdpc3RlcnMgd2hpY2ggaXMgdXNlZCBieSB0aGUgcG0gY29yZSBhbmQKKyAqIG90aGVyIHN1YnN5c3RlbSB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHZhbHVlcyBvdmVyIHN1c3BlbmQuCisgKi8KK3N0cnVjdCBzbGVlcF9zYXZlIHsKKwl2b2lkIF9faW9tZW0JKnJlZzsKKwl1bnNpZ25lZCBsb25nCXZhbDsKK307CisKKyNkZWZpbmUgU0FWRV9JVEVNKHgpIFwKKwl7IC5yZWcgPSAoeCkgfQorCisvKioKKyAqIHN0cnVjdCBwbV91YXJ0X3NhdmUgLSBzYXZlIGJsb2NrIGZvciBjb3JlIFVBUlQKKyAqIEB1bGNvbjogU2F2ZSB2YWx1ZSBmb3IgUzNDMjQxMF9VTENPTgorICogQHVjb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUNPTgorICogQHVmY29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VGQ09OCisgKiBAdW1jb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVU1DT04KKyAqIEB1YnJkaXY6IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUJSRElWCisgKgorICogU2F2ZSBibG9jayBmb3IgVUFSVCByZWdpc3RlcnMgdG8gYmUgaGVsZCBvdmVyIHNsZWVwIGFuZCByZXN0b3JlZCBpZiB0aGV5CisgKiBhcmUgbmVlZGVkIChzYXkgYnkgZGVidWcpLgorKi8KK3N0cnVjdCBwbV91YXJ0X3NhdmUgeworCXUzMgl1bGNvbjsKKwl1MzIJdWNvbjsKKwl1MzIJdWZjb247CisJdTMyCXVtY29uOworCXUzMgl1YnJkaXY7Cit9OworCisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIHNhdmUvcmVzdG9yZSBsaXN0cyBvZiByZWdpc3RlcnMuICovCisKK2V4dGVybiB2b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7CitleHRlcm4gdm9pZCBzM2NfcG1fZG9fcmVzdG9yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gaW50IHMzY19pcnFleHRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSk7CitleHRlcm4gaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgczNjX2lycWV4dF93YWtlIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9pcnFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfaXJxX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKKy8qIFBNIGRlYnVnIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKKy8qKgorICogczNjX3BtX2RiZygpIC0gbG93IGxldmVsIGRlYnVnIGZ1bmN0aW9uIGZvciB1c2UgaW4gc3VzcGVuZC9yZXN1bWUuCisgKiBAbXNnOiBUaGUgbWVzc2FnZSB0byBwcmludC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgbWFpbmx5IHRvIGRlYnVnIHRoZSByZXN1bWUgcHJvY2VzcyBiZWZvcmUgdGhlIHN5c3RlbQorICogY2FuIHJlbHkgb24gcHJpbnRrL2NvbnNvbGUgb3V0cHV0LiBJdCB1c2VzIHRoZSBsb3ctbGV2ZWwgZGVidWdnaW5nIG91dHB1dAorICogcm91dGluZSBwcmludGFzY2lpKCkgdG8gZG8gaXRzIHdvcmsuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9kYmcoY29uc3QgY2hhciAqbXNnLCAuLi4pOworCisjZGVmaW5lIFMzQ19QTURCRyhmbXQuLi4pIHMzY19wbV9kYmcoZm10KQorI2Vsc2UKKyNkZWZpbmUgUzNDX1BNREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQorI2VuZGlmCisKKy8qIHN1c3BlbmQgbWVtb3J5IGNoZWNraW5nICovCisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDSworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3ByZXBhcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fY2hlY2tfcmVzdG9yZSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzY19wbV9jaGVja19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3N0b3JlKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX2NsZWFudXAoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3N0b3JlKCkgICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKioKKyAqIHMzY19wbV9jb25maWd1cmVfZXh0aW50KCkgLSBlbnN1cmUgcGlucyBhcmUgY29ycmVjdGx5IHNldCBmb3IgSVJRCisgKgorICogU2V0dXAgYWxsIHRoZSBuZWNlc3NhcnkgR1BJTyBwaW5zIGZvciB3YWtpbmcgdGhlIHN5c3RlbSBvbiBleHRlcm5hbAorICogaW50ZXJydXB0LgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fcmVzdG9yZV9ncGlvcygpIC0gcmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGdwaW9zIGFmdGVyIHNsZWVwLgorICoKKyAqIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPIHBpbnMgYWZ0ZXIgc2xlZXAsIHdoaWNoIG1heSBpbnZvbHZlIGVuc3VyaW5nCisgKiB0aGF0IHdlIGRvIG5vdCBnbGl0Y2ggdGhlIHN0YXRlIG9mIHRoZSBwaW5zIGZyb20gdGhhdCB0aGUgYm9vdGxvYWRlcidzCisgKiByZXN1bWUgY29kZSBoYXMgZG9uZS4KKyovCitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fc2F2ZV9ncGlvcygpIC0gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zIGZvciByZXN0b3JpbmcgYWZ0ZXIgc2xlZXAuCisgKgorICogU2F2ZSB0aGUgR1BJTyBzdGF0ZXMgZm9yIHJlc290cmF0aW9uIG9uIHJlc3VtZS4gU2VlIHMzY19wbV9yZXN0b3JlX2dwaW9zKCkuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpOworCisvKioKKyAqIHMzY19wbV9jYl9mbHVzaGNhY2hlIC0gY2FsbGJhY2sgZm9yIGFzc2VtYmx5IGNvZGUKKyAqCisgKiBDYWxsYmFjayB0byBpc3N1ZSBmbHVzaF9jYWNoZV9hbGwoKSBhcyB0aGlzIGNhbGwgaXMKKyAqIG5vdCBhIGRpcmVjdGx5IGNhbGxhYmxlIG9iamVjdC4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKaW5kZXggNjA2MWRlOC4uZGM2NmE0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC05MCw3ICs5MCwxMCBAQAogewogfQogCi0jZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLCBhZCkJCQlcCisJZG8gewkJCQkJCQlcCisJCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopKGFkKSkgPSAoZCk7IFwKKwl9IHdoaWxlICgwKQogCiAvKiBDT05GSUdfUzNDX0JPT1RfV0FUQ0hET0cKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9wbS1jaGVjay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYyNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYwpAQCAtMCwwICsxLDI0MiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYworICogIG9yaWdpbmFsbHkgaW4gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51aworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQb3dlciBNYW5nYW1lbnQgLSBzdXNwZW5kL3Jlc3VtZSBtZW1vcnkgY29ycnVwdGl1b24gY2hlY2suCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisKKyNpZiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgPCAxCisjZXJyb3IgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIG11c3QgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZQorI2VuZGlmCisKKy8qIHN1c3BlbmQgY2hlY2tpbmcgY29kZS4uLgorICoKKyAqIHRoaXMgbmV4dCBhcmVhIGRvZXMgYSBzZXQgb2YgY3JjIGNoZWNrcyBvdmVyIGFsbCB0aGUgaW5zdGFsbGVkCisgKiBtZW1vcnksIHNvIHRoZSBzeXN0ZW0gY2FuIHZlcmlmeSBpZiB0aGUgcmVzdW1lIHdhcyBvay4KKyAqCisgKiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgZGVmaW5lcyB0aGUgYmxvY2stc2l6ZSBmb3IgdGhlIENSQywKKyAqIGluY3JlYXNpbmcgaXQgd2lsbCBtZWFuIHRoYXQgdGhlIGFyZWEgY29ycnVwdGVkIHdpbGwgYmUgbGVzcyBlYXN5IHRvIHNwb3QsCisgKiBhbmQgcmVkdWNpbmcgdGhlIHNpemUgd2lsbCBjYXVzZSB0aGUgQ1JDIHNhdmUgYXJlYSB0byBncm93CisqLworCisjZGVmaW5lIENIRUNLX0NIVU5LU0laRSAoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFICogMTAyNCkKKworc3RhdGljIHUzMiBjcmNfc2l6ZTsJLyogc2l6ZSBuZWVkZWQgZm9yIHRoZSBjcmMgYmxvY2sgKi8KK3N0YXRpYyB1MzIgKmNyY3M7CS8qIGFsbG9jYXRlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCisKK3R5cGVkZWYgdTMyICoocnVuX2ZuX3QpKHN0cnVjdCByZXNvdXJjZSAqcHRyLCB1MzIgKmFyZyk7CisKKy8qIHMzY19wbV9ydW5fcmVzCisgKgorICogZ28gdGhyb3VnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbGlzdCwgYW5kIGxvb2sgZm9yIHN5c3RlbSByYW0KKyovCisKK3N0YXRpYyB2b2lkIHMzY19wbV9ydW5fcmVzKHN0cnVjdCByZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJd2hpbGUgKHB0ciAhPSBOVUxMKSB7CisJCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCisJCQlzM2NfcG1fcnVuX3JlcyhwdHItPmNoaWxkLCBmbiwgYXJnKTsKKworCQlpZiAoKHB0ci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKKwkJICAgIHN0cmNtcChwdHItPm5hbWUsICJTeXN0ZW0gUkFNIikgPT0gMCkgeworCQkJUzNDX1BNREJHKCJGb3VuZCBzeXN0ZW0gUkFNIGF0ICUwOGx4Li4lMDhseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXB0ci0+c3RhcnQsCisJCQkJICAodW5zaWduZWQgbG9uZylwdHItPmVuZCk7CisJCQlhcmcgPSAoZm4pKHB0ciwgYXJnKTsKKwkJfQorCisJCXB0ciA9IHB0ci0+c2libGluZzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9ydW5fc3lzcmFtKHJ1bl9mbl90IGZuLCB1MzIgKmFyZykKK3sKKwlzM2NfcG1fcnVuX3JlcygmaW9tZW1fcmVzb3VyY2UsIGZuLCBhcmcpOworfQorCitzdGF0aWMgdTMyICpzM2NfcG1fY291bnRyYW0oc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQoreworCXUzMiBzaXplID0gKHUzMikocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxOworCisJc2l6ZSArPSBDSEVDS19DSFVOS1NJWkUtMTsKKwlzaXplIC89IENIRUNLX0NIVU5LU0laRTsKKworCVMzQ19QTURCRygiQXJlYSAlMDhseC4uJTA4bHgsICVkIGJsb2Nrc1xuIiwKKwkJICAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCwgc2l6ZSk7CisKKwkqdmFsICs9IHNpemUgKiBzaXplb2YodTMyKTsKKwlyZXR1cm4gdmFsOworfQorCisvKiBzM2NfcG1fcHJlcGFyZV9jaGVjaworICoKKyAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKKyAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKKyAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKKyAqIGtub3cgYWJvdXQuCisqLworCit2b2lkIHMzY19wbV9jaGVja19wcmVwYXJlKHZvaWQpCit7CisJY3JjX3NpemUgPSAwOworCisJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX2NvdW50cmFtLCAmY3JjX3NpemUpOworCisJUzNDX1BNREJHKCJzM2NfcG1fcHJlcGFyZV9jaGVjazogJXUgY2hlY2tzIG5lZWRlZFxuIiwgY3JjX3NpemUpOworCisJY3JjcyA9IGttYWxsb2MoY3JjX3NpemUrNCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNyY3MgPT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYWxsb2NhdGVkIENSQyBzYXZlIGFyZWFcbiIpOworfQorCitzdGF0aWMgdTMyICpzM2NfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzY19wbV9jaGVja19zdG9yZQorICoKKyAqIGNvbXB1dGUgdGhlIENSQyB2YWx1ZXMgZm9yIHRoZSBtZW1vcnkgYmxvY2tzIGJlZm9yZSB0aGUgZmluYWwKKyAqIHNsZWVwLgorKi8KKwordm9pZCBzM2NfcG1fY2hlY2tfc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2NfcG1fcnVuX3N5c3JhbShzM2NfcG1fbWFrZWNoZWNrLCBjcmNzKTsKK30KKworLyogaW5fcmVnaW9uCisgKgorICogcmV0dXJuIFRSVUUgaWYgdGhlIGFyZWEgZGVmaW5lZCBieSBwdHIuLnB0citzaXplIGNvbnRhaW5zIHRoZQorICogd2hhdC4ud2hhdCt3aGF0c3oKKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQoreworCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQorCQlyZXR1cm4gMDsKKworCWlmICh3aGF0ID4gKHB0citzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBzM2NfcG1fcnVuY2hlY2soKSAtIGhlbHBlciB0byBjaGVjayBhIHJlc291cmNlIG9uIHJlc3RvcmUuCisgKiBAcmVzOiBUaGUgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWs6IFBvaW50ZXIgdG8gbGlzdCBvZiBDUkMzMiB2YWx1ZXMgdG8gY2hlY2suCisgKgorICogQ2FsbGVkIGZyb20gdGhlIHMzY19wbV9jaGVja19yZXN0b3JlKCkgdmlhIHMzY19wbV9ydW5fc3lzcmFtKCksIHRoaXMKKyAqIGZ1bmN0aW9uIHJ1bnMgdGhlIGdpdmVuIG1lbW9yeSByZXNvdXJjZSBjaGVja2luZyBpdCBhZ2FpbnN0IHRoZSBzdG9yZWQKKyAqIENSQyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaXMgcmVzdG9yZWQuIFRoZSBmdW5jdGlvbiB0cmllcyB0byBza2lwIGFzCisgKiBtYW55IG9mIHRoZSBhcmVhcyB1c2VkIGR1cmluZyB0aGUgc3VzcGVuZCBwcm9jZXNzLgorICovCitzdGF0aWMgdTMyICpzM2NfcG1fcnVuY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQoreworCXZvaWQgKnNhdmVfYXQgPSBwaHlzX3RvX3ZpcnQoczNjX3NsZWVwX3NhdmVfcGh5cyk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl2b2lkICpzdGtwYWdlOworCXZvaWQgKnB0cjsKKwl1MzIgY2FsYzsKKworCXN0a3BhZ2UgPSAodm9pZCAqKSgodTMyKSZjYWxjICYgflBBR0VfTUFTSyk7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHN0a3BhZ2UsIDQwOTYpKSB7CisJCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc3RhY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7CisJCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLworCisJCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKKwkJaWYgKGNhbGMgIT0gKnZhbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJSZXN0b3JlIENSQyBlcnJvciBhdCAiCisJCQkgICAgICAgIiUwOGx4ICglMDh4IHZzICUwOHgpXG4iLCBhZGRyLCBjYWxjLCAqdmFsKTsKKworCQkJUzNDX1BNREJHKCJSZXN0b3JlIENSQyBlcnJvciBhdCAlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwKKwkJCSAgICBhZGRyLCBjYWxjLCAqdmFsKTsKKwkJfQorCisJc2tpcF9jaGVjazoKKwkJdmFsKys7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIC0gbWVtb3J5IGNoZWNrIGNhbGxlZCBvbiByZXN1bWUKKyAqCisgKiBjaGVjayB0aGUgQ1JDcyBhZnRlciB0aGUgcmVzdG9yZSBldmVudCBhbmQgZnJlZSB0aGUgbWVtb3J5IHVzZWQKKyAqIHRvIGhvbGQgdGhlbQorKi8KK3ZvaWQgczNjX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2NfcG1fcnVuX3N5c3JhbShzM2NfcG1fcnVuY2hlY2ssIGNyY3MpOworfQorCisvKioKKyAqIHMzY19wbV9jaGVja19jbGVhbnVwKCkgLSBmcmVlIG1lbW9yeSByZXNvdXJjZXMKKyAqCisgKiBGcmVlIHRoZSByZXNvdXJjZXMgdGhhdCB3aGVyZSBhbGxvY2F0ZWQgYnkgdGhlIHN1c3BlbmQKKyAqIG1lbW9yeSBjaGVjayBjb2RlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgZnJvbSB0aGUKKyAqIHMzY19wbV9jaGVja19yZXN0b3JlKCkgZnVuY3Rpb24gYXMgd2UgY2Fubm90IGNhbGwgYW55CisgKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBzbGVlcCBkdXJpbmcgdGhhdCByZXN1bWUuCisgKi8KK3ZvaWQgczNjX3BtX2NoZWNrX2NsZWFudXAodm9pZCkKK3sKKwlrZnJlZShjcmNzKTsKKwljcmNzID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxMTgyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKQEAgLTAsMCArMSwzNjMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDQsMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MgY29tbW9uIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQgdG8gcmFtKSBzdXBwb3J0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L3BtLWNvcmUuaD4KKworLyogZm9yIGV4dGVybmFsIHVzZSAqLworCit1bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKKworLyogRGVidWcgY29kZToKKyAqCisgKiBUaGlzIGNvZGUgc3VwcG9ydHMgZGVidWcgb3V0cHV0IHRvIHRoZSBsb3cgbGV2ZWwgVUFSVHMgZm9yIHVzZSBvbgorICogcmVzdW1lIGJlZm9yZSB0aGUgY29uc29sZSBsYXllciBpcyBhdmFpbGFibGUuCisqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKK2V4dGVybiB2b2lkIHByaW50YXNjaWkoY29uc3QgY2hhciAqKTsKKwordm9pZCBzM2NfcG1fZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmE7CisJY2hhciBidWZmWzI1Nl07CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwl2c3ByaW50ZihidWZmLCBmbXQsIHZhKTsKKwl2YV9lbmQodmEpOworCisJcHJpbnRhc2NpaShidWZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9kZWJ1Z19pbml0KHZvaWQpCit7CisJLyogcmVzdGFydCB1YXJ0IGNsb2NrcyBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8gb3V0cHV0ICovCisJczNjX3BtX2RlYnVnX2luaXRfdWFydCgpOworfQorCisjZWxzZQorI2RlZmluZSBzM2NfcG1fZGVidWdfaW5pdCgpIGRvIHsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogQ09ORklHX1MzQzI0MTBfUE1fREVCVUcgKi8KKworLyogU2F2ZSB0aGUgVUFSVCBjb25maWd1cmF0aW9ucyBpZiB3ZSBhcmUgY29uZmlndXJlZCBmb3IgZGVidWcuICovCisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRworCitzdHJ1Y3QgcG1fdWFydF9zYXZlIHVhcnRfc2F2ZVtDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOworCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV91YXJ0KHVuc2lnbmVkIGludCB1YXJ0LCBzdHJ1Y3QgcG1fdWFydF9zYXZlICpzYXZlKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IFMzQ19WQV9VQVJUeCh1YXJ0KTsKKworCXNhdmUtPnVsY29uID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUxDT04pOworCXNhdmUtPnVjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VQ09OKTsKKwlzYXZlLT51ZmNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VGQ09OKTsKKwlzYXZlLT51bWNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VNQ09OKTsKKwlzYXZlLT51YnJkaXYgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VQlJESVYpOworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV91YXJ0cyh2b2lkKQoreworCXN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUgPSB1YXJ0X3NhdmU7CisJdW5zaWduZWQgaW50IHVhcnQ7CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTOyB1YXJ0KyssIHNhdmUrKykKKwkJczNjX3BtX3NhdmVfdWFydCh1YXJ0LCBzYXZlKTsKK30KKworc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydCh1bnNpZ25lZCBpbnQgdWFydCwgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBTM0NfVkFfVUFSVHgodWFydCk7CisKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWxjb24sIHJlZ3MgKyBTM0MyNDEwX1VMQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWNvbiwgIHJlZ3MgKyBTM0MyNDEwX1VDT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51ZmNvbiwgcmVncyArIFMzQzI0MTBfVUZDT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51bWNvbiwgcmVncyArIFMzQzI0MTBfVU1DT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51YnJkaXYsIHJlZ3MgKyBTM0MyNDEwX1VCUkRJVik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnRzKHZvaWQpCit7CisJc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKKwl1bnNpZ25lZCBpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQorCQlzM2NfcG1fcmVzdG9yZV91YXJ0KHVhcnQsIHNhdmUpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpIHsgfQorc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydHModm9pZCkgeyB9CisjZW5kaWYKKworLyogVGhlIElSUSBleHQtaW50IGNvZGUgZ29lcyBoZXJlLCBpdCBpcyB0b28gc21hbGwgdG8gY3VycmVudGx5IGJvdGhlcgorICogd2l0aCBpdHMgb3duIGZpbGUuICovCisKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzawk9IDB4ZmZmZmZmZmZMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOworCitpbnQgczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgSVJRX0VJTlRfQklUKGlycW5vKTsKKworCWlmICghKHMzY19pcnF3YWtlX2VpbnRhbGxvdyAmIGJpdCkpCisJCXJldHVybiAtRU5PRU5UOworCisJcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAorCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKKworCWlmICghc3RhdGUpCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrIHw9IGJpdDsKKwllbHNlCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrICY9IH5iaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlICovCisKKy8qKgorICogczNjX3BtX2RvX3NhdmUoKSAtIHNhdmUgYSBzZXQgb2YgcmVnaXN0ZXJzIGZvciByZXN0b3JhdGlvbiBvbiByZXN1bWUuCisgKiBAcHRyOiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHJlZ2lzdGVycy4KKyAqIEBjb3VudDogU2l6ZSBvZiB0aGUgcHRyIGFycmF5LgorICoKKyAqIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlZ2lzdGVycyBnaXZlbiwgc2F2aW5nIHRoZWlyIGNvbnRlbnRzIGluIHRoZQorICogYXJyYXkgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIHdoZW4gd2Ugd2FrZXVwLgorICovCit2b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwdHItPnZhbCA9IF9fcmF3X3JlYWRsKHB0ci0+cmVnKTsKKwkJUzNDX1BNREJHKCJzYXZlZCAlcCB2YWx1ZSAlMDhseFxuIiwgcHRyLT5yZWcsIHB0ci0+dmFsKTsKKwl9Cit9CisKKy8qKgorICogczNjX3BtX2RvX3Jlc3RvcmUoKSAtIHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIHNhdmUgbGlzdC4KKyAqIEBwdHI6IFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcmVnaXN0ZXJzLgorICogQGNvdW50OiBTaXplIG9mIHRoZSBwdHIgYXJyYXkuCisgKgorICogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNhdmVkIGZyb20gczNjX3BtX2RvX3NhdmUoKS4KKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIFMzQ19QTURCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCisgKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKKyovCisKK3ZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZXN0b3JlICVwIChyZXN0b3JlICUwOGx4LCB3YXMgJTA4eClcbiIsCisJCSAgICAgICBwdHItPnJlZywgcHRyLT52YWwsIF9fcmF3X3JlYWRsKHB0ci0+cmVnKSk7CisKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7CisJfQorfQorCisvKioKKyAqIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoKSAtIGVhcmx5IHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gc2F2ZSBsaXN0LgorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBzM2NfcG1fZG9fcmVzdG9yZSgpIGV4Y2VwdCB3ZSB0cnkgYW5kIG1pbmltaXNlIHRoZQorICogc2lkZSBlZmZlY3RzIG9mIHRoZSBmdW5jdGlvbiBpbiBjYXNlIHJlZ2lzdGVycyB0aGF0IGhhcmR3YXJlIG1pZ2h0IG5lZWQKKyAqIHRvIHdvcmsgaGFzIGJlZW4gcmVzdG9yZWQuCisgKgorICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQorICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCisqLworCit2b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKQorCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKK30KKworLyogczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzCisgKgorICogcHJpbnQgYW55IElSUXMgYXNzZXJ0ZWQgYXQgcmVzdW1lIHRpbWUgKGllLCB3ZSB3b2tlIGZyb20pCisqLworc3RhdGljIHZvaWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaW50IGk7CisKKwl3aGljaCAmPSB+bWFzazsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAod2hpY2ggJiAoMUw8PGkpKSB7CisJCQlTM0NfUE1EQkcoIklSUSAlZCBhc3NlcnRlZCBhdCByZXN1bWVcbiIsIHN0YXJ0K2kpOworCQl9CisJfQorfQorCisKK3ZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Cit2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKworI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQorCisvKiBzM2NfcG1fZW50ZXIKKyAqCisgKiBjZW50cmFsIGNvbnRyb2wgZm9yIHNsZWVwL3Jlc3VtZSBwcm9jZXNzCisqLworCitzdGF0aWMgaW50IHMzY19wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKKworCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCisKKwlzM2NfcG1fZGVidWdfaW5pdCgpOworCisJUzNDX1BNREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CisKKwlpZiAocG1fY3B1X3ByZXAgPT0gTlVMTCB8fCBwbV9jcHVfc2xlZXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogbm8gY3B1IHNsZWVwIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQorCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KKwkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKKwkqLworCisJaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKKwkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHdha2UtdXAgc291cmNlcyFcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQWJvcnRpbmcgc2xlZXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCisKKwlzM2Nfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7CisKKwlTM0NfUE1EQkcoInMzY19zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjX3NsZWVwX3NhdmVfcGh5cyk7CisKKwkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KKworCXMzY19wbV9zYXZlX2dwaW9zKCk7CisJczNjX3BtX3NhdmVfdWFydHMoKTsKKwlzM2NfcG1fc2F2ZV9jb3JlKCk7CisKKwkvKiBzZXQgdGhlIGlycSBjb25maWd1cmF0aW9uIGZvciB3YWtlICovCisKKwlzM2NfcG1fY29uZmlndXJlX2V4dGludCgpOworCisJUzNDX1BNREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCisJICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKKworCXMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcygpOworCisJLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGFyYXRpb24gKi8KKworCXBtX2NwdV9wcmVwKCk7CisKKwkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLworCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKKworCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLworCisJczNjX3BtX2FyY2hfc3RvcF9jbG9ja3MoKTsKKworCS8qIHMzY19jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCisJICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc3RvcmVzIGl0CisJICogZHVyaW5nIHRoZSByZXN1bWUuICAqLworCisJczNjX2NwdV9zYXZlKHJlZ3Nfc2F2ZSk7CisKKwkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgdXNpbmcgdGhlIGtlcm5lbCdzIGNwdSBpbml0IGNvZGUuICovCisKKwljcHVfaW5pdCgpOworCisJLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCisKKwlzM2NfcG1fcmVzdG9yZV9jb3JlKCk7CisJczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKKwlzM2NfcG1fcmVzdG9yZV9ncGlvcygpOworCisJczNjX3BtX2RlYnVnX2luaXQoKTsKKworCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KKworCXMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXMoKTsKKworCVMzQ19QTURCRygiJXM6IHBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIsIF9fZnVuY19fKTsKKworCXMzY19wbV9jaGVja19yZXN0b3JlKCk7CisKKwkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KKworCVMzQ19QTURCRygiUzNDIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxiYWNrIGZyb20gYXNzZW1ibHkgY29kZSAqLwordm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCitzdGF0aWMgaW50IHMzY19wbV9wcmVwYXJlKHZvaWQpCit7CisJLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KKworCXMzY19wbV9jaGVja19wcmVwYXJlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9maW5pc2godm9pZCkKK3sKKwlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHMzY19wbV9vcHMgPSB7CisJLmVudGVyCQk9IHMzY19wbV9lbnRlciwKKwkucHJlcGFyZQk9IHMzY19wbV9wcmVwYXJlLAorCS5maW5pc2gJCT0gczNjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKKy8qIHMzY19wbV9pbml0CisgKgorICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKKyAqIGl0LgorKi8KKworaW50IF9faW5pdCBzM2NfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUzNDIFBvd2VyIE1hbmFnZW1lbnQsIENvcHlyaWdodCAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwlzdXNwZW5kX3NldF9vcHMoJnMzY19wbV9vcHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IDFlMDc2N2IuLjYzNmNiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDcgQEAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC1jbG9jay5vCiBvYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KK29iai0kKENPTkZJR19QTSkJCSs9IGlycS1wbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBzbGVlcC5vCiBvYmotJChDT05GSUdfSEFWRV9QV00pCQkrPSBwd20ubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfQ0xPQ0spCSs9IHMzYzI0MTAtY2xvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwppbmRleCAzZDQ4MzcwLi4xYTgzNDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwpAQCAtMjAxLDUgKzIwMSw1IEBACiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrX2RldnMsIEFSUkFZX1NJWkUoc21ka19kZXZzKSk7CiAKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDU0MjA2MmYuLjE5MzJiN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTE4Miw3ICsxODIsNyBAQAogICogd2l0aCB0aGUgY2FjaGVzIGVuYWJsZWQuIEl0IHNlZW1zIGF0IGxlYXN0IHRoZSBTM0MyNDQwIGhhcyBhIHByb2JsZW0KICAqIHJlc2V0dGluZyBpZiB0aGVyZSBpcyBidXMgYWN0aXZpdHkgaW50ZXJydXB0ZWQgYnkgdGhlIHJlc2V0LgogICovCi1zdGF0aWMgdm9pZCBzM2MyNHh4X3BtX3Jlc3RhcnQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgczNjMjR4eF9wbV9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmIChtb2RlICE9ICdzJykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTkxLDEyICsxOTEsMTIgQEAKIAkJX19jcHVjX2ZsdXNoX2tlcm5fYWxsKCk7CiAJCV9fY3B1Y19mbHVzaF91c2VyX2FsbCgpOwogCi0JCWFyY2hfcmVzZXQobW9kZSk7CisJCWFyY2hfcmVzZXQobW9kZSwgY21kKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIAogCS8qIGZhbGxiYWNrLCBvciB1bmhhbmRsZWQgKi8KLQlhcm1fbWFjaGluZV9yZXN0YXJ0KG1vZGUpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQobW9kZSwgY21kKTsKIH0KIAogdm9pZCBfX2luaXQgczNjMjR4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvaXJxLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oCmluZGV4IDQ1NzQ2YTkuLjY5ZTFiZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvaXJxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaApAQCAtMTAsNiArMTAsMTIgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKICNkZWZpbmUgaXJxZGJmKHguLi4pCiAjZGVmaW5lIGlycWRiZjIoeC4uLikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tYXAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWFwLmgKaW5kZXggZmVmOGVhOC4uZWVkOGY3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tYXAuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oCkBAIC0zMSw2ICszMSw4IEBACiAjZGVmaW5lIFMzQzI0WFhfU1pfVUFSVAkgICBTWl8xTQogI2RlZmluZSBTM0NfVUFSVF9PRkZTRVQJICAgKDB4NDAwMCkKIAorI2RlZmluZSBTM0NfVkFfVUFSVHgodWFydCkgKFMzQ19WQV9VQVJUICsgKCh1YXJ0ICogUzNDX1VBUlRfT0ZGU0VUKSkpCisKIC8qIFRpbWVycyAqLwogI2RlZmluZSBTM0MyNFhYX1ZBX1RJTUVSICAgUzNDX1ZBX1RJTUVSCiAjZGVmaW5lIFMzQzI0MTBfUEFfVElNRVIgICAoMHg1MTAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0tY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1ODgyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0tY29yZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcGxsLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzI0eHggLSBQTSBjb3JlIHN1cHBvcnQgZm9yIGFyY2gvYXJtL3BsYXQtczNjL3BtLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fZGVidWdfaW5pdF91YXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7CisKKwkvKiByZS1zdGFydCB1YXJ0IGNsb2NrcyAqLworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMDsKKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDE7CisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyOworCisJX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMF9DTEtDT04pOworCXVkZWxheSgxMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9wcmVwYXJlX2lycXModm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfaW50bWFzaywgUzNDMjQxMF9JTlRNU0spOworCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9laW50bWFzaywgUzNDMjQxMF9FSU5UTUFTSyk7CisKKwkvKiBhY2sgYW55IG91dHN0YW5kaW5nIGV4dGVybmFsIGludGVycnVwdHMgYmVmb3JlIHdlIGdvIHRvIHNsZWVwICovCisKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCksIFMzQzI0MTBfRUlOVFBFTkQpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0lOVFBORCksIFMzQzI0MTBfSU5UUE5EKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLCBTM0MyNDEwX1NSQ1BORCk7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3N0b3BfY2xvY2tzKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKDB4MDAsIFMzQzI0MTBfQ0xLQ09OKTsgIC8qIHR1cm4gb2ZmIGNsb2NrcyBvdmVyIHNsZWVwICovCit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKGludCBzdGFydCwgdW5zaWduZWQgbG9uZyB3aGljaCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBtYXNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXModm9pZCkKK3sKKwlTM0NfUE1EQkcoInBvc3Qgc2xlZXA6IElSUXMgMHglMDh4LCAweCUwOHhcbiIsCisJCSAgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAorCQkgIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpKTsKKworCXMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UMCwgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAorCQkJCXMzY19pcnF3YWtlX2ludG1hc2spOworCisJczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQ0LTQsIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLAorCQkJCXMzY19pcnF3YWtlX2VpbnRtYXNrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0uaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MjM2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLS8qIHMzYzI0MTBfcG1faW5pdAotICoKLSAqIGNhbGxlZCBmcm9tIGJvYXJkIGF0IGluaXRpYWxpc2F0aW9uIHRpbWUgdG8gc2V0dXAgdGhlIHBvd2VyCi0gKiBtYW5hZ2VtZW50Ci0qLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLWV4dGVybiBfX2luaXQgaW50IHMzYzI0MTBfcG1faW5pdCh2b2lkKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgczNjMjQxMF9wbV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUSBtYXNrIG92ZXIgc2xlZXAgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2s7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzazsKLQotLyogSVJRIG1hc2tzIGZvciBJUlFzIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgKHNlZSBpcnEuYykgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OwotCi0vKiBwZXItY3B1IHNsZWVwIGZ1bmN0aW9ucyAqLwotCi1leHRlcm4gdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKLWV4dGVybiB2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKLQotLyogRmxhZ3MgZm9yIFBNIENvbnRyb2wgKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOwotCi0vKiBmcm9tIHNsZWVwLlMgKi8KLQotZXh0ZXJuIGludCAgczNjMjQxMF9jcHVfc2F2ZSh1bnNpZ25lZCBsb25nICpzYXZlYmxrKTsKLWV4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3N1c3BlbmQodm9pZCk7Ci1leHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9yZXN1bWUodm9pZCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzOwotCi0vKiBzbGVlcCBzYXZlIGluZm8gKi8KLQotc3RydWN0IHNsZWVwX3NhdmUgewotCXZvaWQgX19pb21lbQkqcmVnOwotCXVuc2lnbmVkIGxvbmcJdmFsOwotfTsKLQotI2RlZmluZSBTQVZFX0lURU0oeCkgXAotCXsgLnJlZyA9ICh4KSB9Ci0KLWV4dGVybiB2b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOwotZXh0ZXJuIHZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiBpbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotZXh0ZXJuIGludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldik7Ci0jZWxzZQotI2RlZmluZSBzM2MyNHh4X2lycV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjR4eF9pcnFfcmVzdW1lICBOVUxMCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2FjZjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtb20uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MyNFhYIC0gSVJRIFBNIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgorCisvKiBzdGF0ZSBmb3IgSVJRcyBvdmVyIHNsZWVwICovCisKKy8qIGRlZmF1bHQgaXMgdG8gYWxsb3cgZm9yIEVJTlQwLi5FSU5UMTUsIGFuZCBJUlFfUlRDIGFzIHdha2V1cCBzb3VyY2VzCisgKgorICogc2V0IGJpdCB0byAxIGluIGFsbG93IGJpdGZpZWxkIHRvIGVuYWJsZSB0aGUgd2FrZXVwIHNldHRpbmdzIG9uIGl0CisqLworCit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93CT0gMUwgPDwgKElSUV9SVEMgLSBJUlFfRUlOVDApIHwgMHhmTDsKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93CT0gMHgwMDAwZmZmMEw7CisKK2ludCBzM2NfaXJxX3dha2UodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBpcnFiaXQgPSAxIDw8IChpcnFubyAtIElSUV9FSU5UMCk7CisKKwlpZiAoIShzM2NfaXJxd2FrZV9pbnRhbGxvdyAmIGlycWJpdCkpCisJCXJldHVybiAtRU5PRU5UOworCisJcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAorCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKKworCWlmICghc3RhdGUpCisJCXMzY19pcnF3YWtlX2ludG1hc2sgfD0gaXJxYml0OworCWVsc2UKKwkJczNjX2lycXdha2VfaW50bWFzayAmPSB+aXJxYml0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBpcnFfc2F2ZVtdID0geworCVNBVkVfSVRFTShTM0MyNDEwX0lOVE1TSyksCisJU0FWRV9JVEVNKFMzQzI0MTBfSU5UU1VCTVNLKSwKK307CisKKy8qIHRoZSBleHRpbnQgdmFsdWVzIG1vdmUgYmV0d2VlbiB0aGUgczNjMjQxMC9zM2MyNDQwIGFuZCB0aGUgczNjMjQxMgorICogc28gd2UgdXNlIGFuIGFycmF5IHRvIGhvbGQgdGhlbSwgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZgorICogdGhlIHJlZ2lzdGVyIGF0IHJ1bi10aW1lCisqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2V4dGludFszXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludGZsdFs0XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludG1hc2s7CisKK2ludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQorCQlzYXZlX2V4dGludFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKKwkJc2F2ZV9laW50Zmx0W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOworCisJczNjX3BtX2RvX3NhdmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKKwlzYXZlX2VpbnRtYXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9leHRpbnQpOyBpKyspCisJCV9fcmF3X3dyaXRlbChzYXZlX2V4dGludFtpXSwgUzNDMjRYWF9FWFRJTlQwICsgKGkqNCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9laW50Zmx0KTsgaSsrKQorCQlfX3Jhd193cml0ZWwoc2F2ZV9laW50Zmx0W2ldLCBTM0MyNFhYX0VJTkZMVDAgKyAoaSo0KSk7CisKKwlzM2NfcG1fZG9fcmVzdG9yZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRtYXNrLCBTM0MyNFhYX0VJTlRNQVNLKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCmluZGV4IDAxOTJlY2QuLjk1ODczNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcyAKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTYsMzggKzE2LDYgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqIENoYW5nZWxvZzoKLSAqCi0gKiAgIDIyLUp1bC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgICAgICAgICAgICBGaXhlZCBjb21waWxlIHdhcm5pbmdzCi0gKgotICogICAyMi1KdWwtMjAwNCAgUm9jIFd1IDxjb29sb25leUB5YWhvby5jb20uY24+Ci0gKiAgICAgICAgICAgICAgICBGaXhlZCBzM2NfZXh0aXJxX3R5cGUKLSAqCi0gKiAgIDIxLUp1bC0yMDA0ICBBcm5hdWQgUGF0YXJkIChSdHApIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgotICogICAgICAgICAgICAgICAgQWRkaXRpb24gb2YgQURDL1RDIGRlbXV4Ci0gKgotICogICAwNC1PY3QtMjAwNCAgS2xhdXMgRmV0c2NoZXIgPGsuZmV0c2NoZXJAZmV0cm9uLmRlPgotICoJCSAgRml4IGZvciBzZXRfaXJxX3R5cGUoKSBvbiBsb3cgRUlOVCBudW1iZXJzCi0gKgotICogICAwNS1PY3QtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJCSAgVGlkeSB1cCBLRidzIHBhdGNoIGFuZCBzb3J0IG91dCBuZXcgcmVsZWFzZQotICoKLSAqICAgMDUtT2N0LTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCQkgIEFkZCBzdXBwb3J0IGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2xzCi0gKgotICogICAwNC1Ob3YtMjAwNCAgQmVuIERvb2tzCi0gKgkJICBGaXggc3RhbmRhcmQgSVJRIHdha2UgZm9yIEVJTlQwLi40IGFuZCBSVEMKLSAqCi0gKiAgIDIyLUZlYi0yMDA1ICBCZW4gRG9va3MKLSAqCQkgIEZpeGVkIGVkZ2UtdHJpZ2dlcmluZyBvbiBBREMgSVJRCi0gKgotICogICAyOC1KdW4tMjAwNSAgQmVuIERvb2tzCi0gKgkJICBNYXJrIElSUV9MQ0QgdmFsaWQKLSAqCi0gKiAgIDI1LUp1bC0yMDA1ICBCZW4gRG9va3MKLSAqCQkgIFNwbGl0IHRoZSBTM0MyNDQwIElSUSBjb2RlIHRvIHNlcGFyYXRlIGZpbGUKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC01NSw4MSArMjMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlycXR5cGUuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wbS5oPgogI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAKLS8qIHdha2V1cCBpcnEgY29udHJvbCAqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLS8qIHN0YXRlIGZvciBJUlFzIG92ZXIgc2xlZXAgKi8KLQotLyogZGVmYXVsdCBpcyB0byBhbGxvdyBmb3IgRUlOVDAuLkVJTlQxNSwgYW5kIElSUV9SVEMgYXMgd2FrZXVwIHNvdXJjZXMKLSAqCi0gKiBzZXQgYml0IHRvIDEgaW4gYWxsb3cgYml0ZmllbGQgdG8gZW5hYmxlIHRoZSB3YWtldXAgc2V0dGluZ3Mgb24gaXQKLSovCi0KLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50YWxsb3cJPSAxTCA8PCAoSVJRX1JUQyAtIElSUV9FSU5UMCkgfCAweGZMOwotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRtYXNrCT0gMHhmZmZmZmZmZkw7Ci11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdwk9IDB4MDAwMGZmZjBMOwotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOwotCi1pbnQKLXMzY19pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKLQotCWlmICghKHMzY19pcnF3YWtlX2ludGFsbG93ICYgaXJxYml0KSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCi0JICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOwotCi0JaWYgKCFzdGF0ZSkKLQkJczNjX2lycXdha2VfaW50bWFzayB8PSBpcnFiaXQ7Ci0JZWxzZQotCQlzM2NfaXJxd2FrZV9pbnRtYXNrICY9IH5pcnFiaXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgKGlycW5vIC0gRVhUSU5UX09GRik7Ci0KLQlpZiAoIShzM2NfaXJxd2FrZV9laW50YWxsb3cgJiBiaXQpKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKLQkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7Ci0KLQlpZiAoIXN0YXRlKQotCQlzM2NfaXJxd2FrZV9laW50bWFzayB8PSBiaXQ7Ci0JZWxzZQotCQlzM2NfaXJxd2FrZV9laW50bWFzayAmPSB+Yml0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCi0jZGVmaW5lIHMzY19pcnFfd2FrZSBOVUxMCi0jZW5kaWYKLQotCiBzdGF0aWMgdm9pZAogczNjX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKIHsKQEAgLTU5MCw1OSArNDkzLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGlycV9zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKFMzQzI0MTBfSU5UTVNLKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9JTlRTVUJNU0spLAotfTsKLQotLyogdGhlIGV4dGludCB2YWx1ZXMgbW92ZSBiZXR3ZWVuIHRoZSBzM2MyNDEwL3MzYzI0NDAgYW5kIHRoZSBzM2MyNDEyCi0gKiBzbyB3ZSB1c2UgYW4gYXJyYXkgdG8gaG9sZCB0aGVtLCBhbmQgdG8gY2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mCi0gKiB0aGUgcmVnaXN0ZXIgYXQgcnVuLXRpbWUKLSovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZXh0aW50WzNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50Zmx0WzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50bWFzazsKLQotaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9leHRpbnQpOyBpKyspCi0JCXNhdmVfZXh0aW50W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FWFRJTlQwICsgKGkqNCkpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9laW50Zmx0KTsgaSsrKQotCQlzYXZlX2VpbnRmbHRbaV0gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTkZMVDAgKyAoaSo0KSk7Ci0KLQlzM2MyNDEwX3BtX2RvX3NhdmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKLQlzYXZlX2VpbnRtYXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9leHRpbnQpOyBpKyspCi0JCV9fcmF3X3dyaXRlbChzYXZlX2V4dGludFtpXSwgUzNDMjRYWF9FWFRJTlQwICsgKGkqNCkpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9laW50Zmx0KTsgaSsrKQotCQlfX3Jhd193cml0ZWwoc2F2ZV9laW50Zmx0W2ldLCBTM0MyNFhYX0VJTkZMVDAgKyAoaSo0KSk7Ci0KLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKLQlfX3Jhd193cml0ZWwoc2F2ZV9laW50bWFzaywgUzNDMjRYWF9FSU5UTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgczNjMjR4eF9pcnFfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzYzI0eHhfaXJxX3Jlc3VtZSAgTlVMTAotI2VuZGlmCi0KIC8qIHMzYzI0eHhfaW5pdF9pcnEKICAqCiAgKiBJbml0aWFsaXNlIFMzQzI0MTAgSVJRIHN5c3RlbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCmluZGV4IDIxZGZhNzQuLmRhMGQzMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogCV9fcmF3X3dyaXRlbChnc3RhdHVzNCwgUzNDMjQxMF9HU1RBVFVTNCk7CiAKLQlyZXR1cm4gczNjMjQxMF9wbV9pbml0KCk7CisJcmV0dXJuIHMzY19wbV9pbml0KCk7CiB9CiAKIGFyY2hfaW5pdGNhbGwocG1fc2ltdGVjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYwppbmRleCAzNGVmMThlLi4wNjJhMjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYwpAQCAtMzEsMTQgKzMxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CkBAIC00OSwxMCArNDQsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9wbS5oPgogCi0vKiBmb3IgZXh0ZXJuYWwgdXNlICovCi0KLXVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOwotCiAjZGVmaW5lIFBGWCAiczNjMjR4eC1wbTogIgogCiBzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgY29yZV9zYXZlW10gPSB7CkBAIC0xMjAsMzI4ICsxMTEsMTQgQEAKIAlTQVZFX0lURU0oUzNDMjQxMF9EQ0xLQ09OKSwKIH07CiAKLSNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRwogCi0jZGVmaW5lIFNBVkVfVUFSVCh2YSkgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VTENPTiksIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUNPTiksIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUZDT04pLCBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VNQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VQlJESVYpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSB1YXJ0X3NhdmVbXSA9IHsKLQlTQVZFX1VBUlQoUzNDMjRYWF9WQV9VQVJUMCksCi0JU0FWRV9VQVJUKFMzQzI0WFhfVkFfVUFSVDEpLAotI2lmbmRlZiBDT05GSUdfQ1BVX1MzQzI0MDAKLQlTQVZFX1VBUlQoUzNDMjRYWF9WQV9VQVJUMiksCi0jZW5kaWYKLX07Ci0KLS8qIGRlYnVnCi0gKgotICogd2Ugc2VuZCB0aGUgZGVidWcgdG8gcHJpbnRhc2NpaSgpIHRvIGFsbG93IGl0IHRvIGJlIHNlZW4gaWYgdGhlCi0gKiBzeXN0ZW0gbmV2ZXIgd2FrZXMgdXAgZnJvbSB0aGUgc2xlZXAKLSovCi0KLWV4dGVybiB2b2lkIHByaW50YXNjaWkoY29uc3QgY2hhciAqKTsKLQotdm9pZCBwbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCB2YTsKLQljaGFyIGJ1ZmZbMjU2XTsKLQotCXZhX3N0YXJ0KHZhLCBmbXQpOwotCXZzcHJpbnRmKGJ1ZmYsIGZtdCwgdmEpOwotCXZhX2VuZCh2YSk7Ci0KLQlwcmludGFzY2lpKGJ1ZmYpOwotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2RlYnVnX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKTsKLQotCS8qIHJlLXN0YXJ0IHVhcnQgY2xvY2tzICovCi0JdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQwOwotCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMTsKLQl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDI7Ci0KLQlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEwX0NMS0NPTik7Ci0JdWRlbGF5KDEwKTsKLX0KLQotI2RlZmluZSBEQkcoZm10Li4uKSBwbV9kYmcoZm10KQotI2Vsc2UKLSNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQotCi0jZGVmaW5lIHMzYzI0MTBfcG1fZGVidWdfaW5pdCgpIGRvIHsgfSB3aGlsZSgwKQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgdWFydF9zYXZlW10gPSB7fTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMF9QTV9DSEVDSykgJiYgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFICE9IDAKLQotLyogc3VzcGVuZCBjaGVja2luZyBjb2RlLi4uCi0gKgotICogdGhpcyBuZXh0IGFyZWEgZG9lcyBhIHNldCBvZiBjcmMgY2hlY2tzIG92ZXIgYWxsIHRoZSBpbnN0YWxsZWQKLSAqIG1lbW9yeSwgc28gdGhlIHN5c3RlbSBjYW4gdmVyaWZ5IGlmIHRoZSByZXN1bWUgd2FzIG9rLgotICoKLSAqIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSBkZWZpbmVzIHRoZSBibG9jay1zaXplIGZvciB0aGUgQ1JDLAotICogaW5jcmVhc2luZyBpdCB3aWxsIG1lYW4gdGhhdCB0aGUgYXJlYSBjb3JydXB0ZWQgd2lsbCBiZSBsZXNzIGVhc3kgdG8gc3BvdCwKLSAqIGFuZCByZWR1Y2luZyB0aGUgc2l6ZSB3aWxsIGNhdXNlIHRoZSBDUkMgc2F2ZSBhcmVhIHRvIGdyb3cKLSovCi0KLSNkZWZpbmUgQ0hFQ0tfQ0hVTktTSVpFIChDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgKiAxMDI0KQotCi1zdGF0aWMgdTMyIGNyY19zaXplOwkvKiBzaXplIG5lZWRlZCBmb3IgdGhlIGNyYyBibG9jayAqLwotc3RhdGljIHUzMiAqY3JjczsJLyogYWxsb2NhdGVkIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KLQotdHlwZWRlZiB1MzIgKihydW5fZm5fdCkoc3RydWN0IHJlc291cmNlICpwdHIsIHUzMiAqYXJnKTsKLQotLyogczNjMjQxMF9wbV9ydW5fcmVzCi0gKgotICogZ28gdGhvcnVnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbGlzdCwgYW5kIGxvb2sgZm9yIHN5c3RlbSByYW0KLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcnVuX3JlcyhzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgcnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQotewotCXdoaWxlIChwdHIgIT0gTlVMTCkgewotCQlpZiAocHRyLT5jaGlsZCAhPSBOVUxMKQotCQkJczNjMjQxMF9wbV9ydW5fcmVzKHB0ci0+Y2hpbGQsIGZuLCBhcmcpOwotCi0JCWlmICgocHRyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgotCQkgICAgc3RyY21wKHB0ci0+bmFtZSwgIlN5c3RlbSBSQU0iKSA9PSAwKSB7Ci0JCQlEQkcoIkZvdW5kIHN5c3RlbSBSQU0gYXQgJTA4bHguLiUwOGx4XG4iLAotCQkJICAgIHB0ci0+c3RhcnQsIHB0ci0+ZW5kKTsKLQkJCWFyZyA9IChmbikocHRyLCBhcmcpOwotCQl9Ci0KLQkJcHRyID0gcHRyLT5zaWJsaW5nOwotCX0KLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9ydW5fc3lzcmFtKHJ1bl9mbl90IGZuLCB1MzIgKmFyZykKLXsKLQlzM2MyNDEwX3BtX3J1bl9yZXMoJmlvbWVtX3Jlc291cmNlLCBmbiwgYXJnKTsKLX0KLQotc3RhdGljIHUzMiAqczNjMjQxMF9wbV9jb3VudHJhbShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0JdTMyIHNpemUgPSAodTMyKShyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzE7Ci0KLQlzaXplICs9IENIRUNLX0NIVU5LU0laRS0xOwotCXNpemUgLz0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JREJHKCJBcmVhICUwOGx4Li4lMDhseCwgJWQgYmxvY2tzXG4iLCByZXMtPnN0YXJ0LCByZXMtPmVuZCwgc2l6ZSk7Ci0KLQkqdmFsICs9IHNpemUgKiBzaXplb2YodTMyKTsKLQlyZXR1cm4gdmFsOwotfQotCi0vKiBzM2MyNDEwX3BtX3ByZXBhcmVfY2hlY2sKLSAqCi0gKiBwcmVwYXJlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBDUkNzLiBUaGlzCi0gKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBmaW5hbCBzYXZlLCBhcyBpdCB3aWxsIHJlcXVpcmUgbWVtb3J5Ci0gKiBhbGxvY2F0aW5nLCBhbmQgdGh1cyB0b3VjaGluZyBiaXRzIG9mIHRoZSBrZXJuZWwgd2UgZG8gbm90Ci0gKiBrbm93IGFib3V0LgotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19wcmVwYXJlKHZvaWQpCi17Ci0JY3JjX3NpemUgPSAwOwotCi0JczNjMjQxMF9wbV9ydW5fc3lzcmFtKHMzYzI0MTBfcG1fY291bnRyYW0sICZjcmNfc2l6ZSk7Ci0KLQlEQkcoInMzYzI0MTBfcG1fcHJlcGFyZV9jaGVjazogJXUgY2hlY2tzIG5lZWRlZFxuIiwgY3JjX3NpemUpOwotCi0JY3JjcyA9IGttYWxsb2MoY3JjX3NpemUrNCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNyY3MgPT0gTlVMTCkKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYWxsb2NhdGVkIENSQyBzYXZlIGFyZWFcbiIpOwotfQotCi1zdGF0aWMgdTMyICpzM2MyNDEwX3BtX21ha2VjaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBsZWZ0OwotCi0JZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOwotCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKLQkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKLQotCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKLQkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7Ci0KLQkJKnZhbCA9IGNyYzMyX2xlKH4wLCBwaHlzX3RvX3ZpcnQoYWRkciksIGxlZnQpOwotCQl2YWwrKzsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi0vKiBzM2MyNDEwX3BtX2NoZWNrX3N0b3JlCi0gKgotICogY29tcHV0ZSB0aGUgQ1JDIHZhbHVlcyBmb3IgdGhlIG1lbW9yeSBibG9ja3MgYmVmb3JlIHRoZSBmaW5hbAotICogc2xlZXAuCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3N0b3JlKHZvaWQpCi17Ci0JaWYgKGNyY3MgIT0gTlVMTCkKLQkJczNjMjQxMF9wbV9ydW5fc3lzcmFtKHMzYzI0MTBfcG1fbWFrZWNoZWNrLCBjcmNzKTsKLX0KLQotLyogaW5fcmVnaW9uCi0gKgotICogcmV0dXJuIFRSVUUgaWYgdGhlIGFyZWEgZGVmaW5lZCBieSBwdHIuLnB0citzaXplIGNvbnRhdGlucyB0aGUKLSAqIHdoYXQuLndoYXQrd2hhdHN6Ci0qLwotCi1zdGF0aWMgaW5saW5lIGludCBpbl9yZWdpb24odm9pZCAqcHRyLCBpbnQgc2l6ZSwgdm9pZCAqd2hhdCwgc2l6ZV90IHdoYXRzeikKLXsKLQlpZiAoKHdoYXQrd2hhdHN6KSA8IHB0cikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAod2hhdCA+IChwdHIrc2l6ZSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzYzI0MTBfcG1fcnVuY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQotewotCXZvaWQgKnNhdmVfYXQgPSBwaHlzX3RvX3ZpcnQoczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMpOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBsb25nIGxlZnQ7Ci0Jdm9pZCAqcHRyOwotCXUzMiBjYWxjOwotCi0JZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOwotCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKLQkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKLQotCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKLQkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7Ci0KLQkJcHRyID0gcGh5c190b192aXJ0KGFkZHIpOwotCi0JCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBjcmNzLCBjcmNfc2l6ZSkpIHsKLQkJCURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBjcmMgYmxvY2sgaW5cbiIsIGFkZHIpOwotCQkJZ290byBza2lwX2NoZWNrOwotCQl9Ci0KLQkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHNhdmVfYXQsIDMyKjQgKSkgewotCQkJREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHNhdmUgYmxvY2sgaW5cbiIsIGFkZHIpOwotCQkJZ290byBza2lwX2NoZWNrOwotCQl9Ci0KLQkJLyogY2FsY3VsYXRlIGFuZCBjaGVjayB0aGUgY2hlY2tzdW0gKi8KLQotCQljYWxjID0gY3JjMzJfbGUofjAsIHB0ciwgbGVmdCk7Ci0JCWlmIChjYWxjICE9ICp2YWwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlJlc3RvcmUgQ1JDIGVycm9yIGF0ICIKLQkJCSAgICAgICAiJTA4bHggKCUwOHggdnMgJTA4eClcbiIsIGFkZHIsIGNhbGMsICp2YWwpOwotCi0JCQlEQkcoIlJlc3RvcmUgQ1JDIGVycm9yIGF0ICUwOGx4ICglMDh4IHZzICUwOHgpXG4iLAotCQkJICAgIGFkZHIsIGNhbGMsICp2YWwpOwotCQl9Ci0KLQlza2lwX2NoZWNrOgotCQl2YWwrKzsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi0vKiBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUKLSAqCi0gKiBjaGVjayB0aGUgQ1JDcyBhZnRlciB0aGUgcmVzdG9yZSBldmVudCBhbmQgZnJlZSB0aGUgbWVtb3J5IHVzZWQKLSAqIHRvIGhvbGQgdGhlbQotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKHZvaWQpCi17Ci0JaWYgKGNyY3MgIT0gTlVMTCkgewotCQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9ydW5jaGVjaywgY3Jjcyk7Ci0JCWtmcmVlKGNyY3MpOwotCQljcmNzID0gTlVMTDsKLQl9Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19wcmVwYXJlKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZSgpIGRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3N0b3JlKCkgICBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi0vKiBoZWxwZXIgZnVuY3Rpb25zIHRvIHNhdmUgYW5kIHJlc3RvcmUgcmVnaXN0ZXIgc3RhdGUgKi8KLQotdm9pZCBzM2MyNDEwX3BtX2RvX3NhdmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQotewotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7Ci0JCXB0ci0+dmFsID0gX19yYXdfcmVhZGwocHRyLT5yZWcpOwotCQlEQkcoInNhdmVkICVwIHZhbHVlICUwOGx4XG4iLCBwdHItPnJlZywgcHRyLT52YWwpOwotCX0KLX0KLQotLyogczNjMjQxMF9wbV9kb19yZXN0b3JlCi0gKgotICogcmVzdG9yZSB0aGUgc3lzdGVtIGZyb20gdGhlIGdpdmVuIGxpc3Qgb2Ygc2F2ZWQgcmVnaXN0ZXJzCi0gKgotICogTm90ZSwgd2UgZG8gbm90IHVzZSBEQkcoKSBpbiBoZXJlLCBhcyB0aGUgc3lzdGVtIG1heSBub3QgaGF2ZQotICogcmVzdG9yZSB0aGUgVUFSVHMgc3RhdGUgeWV0Ci0qLwotCi12b2lkIHMzYzI0MTBfcG1fZG9fcmVzdG9yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCi17Ci0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInJlc3RvcmUgJXAgKHJlc3RvcmUgJTA4bHgsIHdhcyAlMDh4KVxuIiwKLQkJICAgICAgIHB0ci0+cmVnLCBwdHItPnZhbCwgX19yYXdfcmVhZGwocHRyLT5yZWcpKTsKLQotCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKLQl9Ci19Ci0KLS8qIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlCi0gKgotICogc2ltaWxhciB0byBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZQotICoKLSAqIFdBUk5JTkc6IERvIG5vdCBwdXQgYW55IGRlYnVnIGluIGhlcmUgdGhhdCBtYXkgZWZmZWN0IG1lbW9yeSBvciB1c2UKLSAqIHBlcmlwaGVyYWxzLCBhcyB0aGluZ3MgbWF5IGJlIGNoYW5naW5nIQotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQotewotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7Ci0JCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOwotCX0KLX0KLQotLyogczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzCi0gKgotICogcHJpbnQgYW55IElSUXMgYXNzZXJ0ZWQgYXQgcmVzdW1lIHRpbWUgKGllLCB3ZSB3b2tlIGZyb20pCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAotCQkJCQl1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JaW50IGk7Ci0KLQl3aGljaCAmPSB+bWFzazsKLQotCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgewotCQlpZiAoKHdoaWNoKSAmICgxTDw8aSkpIHsKLQkJCURCRygiSVJRICVkIGFzc2VydGVkIGF0IHJlc3VtZVxuIiwgc3RhcnQraSk7Ci0JCX0KLQl9Ci19Ci0KLS8qIHMzYzI0MTBfcG1fY2hlY2tfcmVzdW1lX3BpbgorLyogczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4KICAqCiAgKiBjaGVjayB0byBzZWUgaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3Igc2xlZXAgbW9kZSwgYW5kCiAgKiBtYWtlIGFueSBuZWNlc3NhcnkgYWRqdXN0bWVudHMgaWYgaXQgaXMgbm90CiAqLwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycW9mZnMpCitzdGF0aWMgdm9pZCBzM2NfcG1fY2hlY2tfcmVzdW1lX3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxb2ZmcykKIHsKIAl1bnNpZ25lZCBsb25nIGlycXN0YXRlOwogCXVuc2lnbmVkIGxvbmcgcGluc3RhdGU7CkBAIC00NTYsMjEgKzEzMywyMSBAQAogCiAJaWYgKCFpcnFzdGF0ZSkgewogCQlpZiAocGluc3RhdGUgPT0gUzNDMjQxMF9HUElPX0lSUSkKLQkJCURCRygiTGVhdmluZyBJUlEgJWQgKHBpbiAlZCkgZW5hYmxlZFxuIiwgaXJxLCBwaW4pOworCQkJUzNDX1BNREJHKCJMZWF2aW5nIElSUSAlZCAocGluICVkKSBlbmFibGVkXG4iLCBpcnEsIHBpbik7CiAJfSBlbHNlIHsKIAkJaWYgKHBpbnN0YXRlID09IFMzQzI0MTBfR1BJT19JUlEpIHsKLQkJCURCRygiRGlzYWJsaW5nIElSUSAlZCAocGluICVkKVxuIiwgaXJxLCBwaW4pOworCQkJUzNDX1BNREJHKCJEaXNhYmxpbmcgSVJRICVkIChwaW4gJWQpXG4iLCBpcnEsIHBpbik7CiAJCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBpbiwgUzNDMjQxMF9HUElPX0lOUFVUKTsKIAkJfQogCX0KIH0KIAotLyogczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50CisvKiBzM2NfcG1fY29uZmlndXJlX2V4dGludAogICoKICAqIGNvbmZpZ3VyZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMKICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKQordm9pZCBzM2NfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKQogewogCWludCBwaW47CiAKQEAgLTQ4MCwxMSArMTU3LDExIEBACiAJKi8KIAogCWZvciAocGluID0gUzNDMjQxMF9HUEYwOyBwaW4gPD0gUzNDMjQxMF9HUEY3OyBwaW4rKykgewotCQlzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCBwaW4gLSBTM0MyNDEwX0dQRjApOworCQlzM2NfcG1fY2hlY2tfcmVzdW1lX3BpbihwaW4sIHBpbiAtIFMzQzI0MTBfR1BGMCk7CiAJfQogCiAJZm9yIChwaW4gPSBTM0MyNDEwX0dQRzA7IHBpbiA8PSBTM0MyNDEwX0dQRzc7IHBpbisrKSB7Ci0JCXMzYzI0MTBfcG1fY2hlY2tfcmVzdW1lX3BpbihwaW4sIChwaW4gLSBTM0MyNDEwX0dQRzApKzgpOworCQlzM2NfcG1fY2hlY2tfcmVzdW1lX3BpbihwaW4sIChwaW4gLSBTM0MyNDEwX0dQRzApKzgpOwogCX0KIH0KIApAQCAtNDk0LDEyICsxNzEsMTIgQEAKICNkZWZpbmUgT0ZGU19EQVQJKFMzQzI0MTBfR1BBREFUIC0gUzNDMjQxMF9HUEFDT04pCiAjZGVmaW5lIE9GRlNfVVAJCShTM0MyNDEwX0dQQlVQICAtIFMzQzI0MTBfR1BCQ09OKQogCi0vKiBzM2MyNDEwX3BtX3NhdmVfZ3Bpb3MoKQorLyogczNjX3BtX3NhdmVfZ3Bpb3MoKQogICoKICAqIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPcwogICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fc2F2ZV9ncGlvcyh2b2lkKQordm9pZCBzM2NfcG1fc2F2ZV9ncGlvcyh2b2lkKQogewogCXN0cnVjdCBncGlvX3NsZWVwICpncHMgPSBncGlvX3NhdmU7CiAJdW5zaWduZWQgaW50IGdwaW87CkBAIC01MzgsNyArMjE1LDEwIEBACiAJcmV0dXJuIGNvbiA9PSAxOwogfQogCi0vKiBzM2MyNDEwX3BtX3Jlc3RvcmVfZ3BpbygpCisvKioKKyAqIHMzYzI0MTBfcG1fcmVzdG9yZV9ncGlvKCkgLSByZXN0b3JlIHRoZSBnaXZlbiBHUElPIGJhbmsKKyAqIEBpbmRleDogVGhlIG51bWJlciBvZiB0aGUgR1BJTyBiYW5rIGJlaW5nIHJlc3VtZWQuCisgKiBAZ3BzOiBUaGUgc2xlZXAgY29uZmdpdXJhdGlvbiBmb3IgdGhlIGJhbmsuCiAgKgogICogUmVzdG9yZSBvbmUgb2YgdGhlIEdQSU8gYmFua3MgdGhhdCB3YXMgc2F2ZWQgZHVyaW5nIHN1c3BlbmQuIFRoaXMgaXMKICAqIG5vdCBhcyBzaW1wbGUgYXMgb25jZSB0aG91Z2h0LCBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGdsaXRjaGVzCkBAIC02NDYsOCArMzI2LDggQEAKIAkJX19yYXdfd3JpdGVsKGdwcy0+Z3B1cCwgYmFzZSArIE9GRlNfVVApOwogCX0KIAotCURCRygiR1BJT1slZF0gQ09OICUwOGx4ID0+ICUwOGx4LCBEQVQgJTA4bHggPT4gJTA4bHhcbiIsCi0JICAgIGluZGV4LCBvbGRfZ3Bjb24sIGdwc19ncGNvbiwgb2xkX2dwZGF0LCBncHNfZ3BkYXQpOworCVMzQ19QTURCRygiR1BJT1slZF0gQ09OICUwOGx4ID0+ICUwOGx4LCBEQVQgJTA4bHggPT4gJTA4bHhcbiIsCisJCSAgaW5kZXgsIG9sZF9ncGNvbiwgZ3BzX2dwY29uLCBvbGRfZ3BkYXQsIGdwc19ncGRhdCk7CiB9CiAKIApAQCAtNjU2LDcgKzMzNiw3IEBACiAgKiBSZXN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJT3MKICAqLwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3Jlc3RvcmVfZ3Bpb3Modm9pZCkKK3ZvaWQgczNjX3BtX3Jlc3RvcmVfZ3Bpb3Modm9pZCkKIHsKIAlzdHJ1Y3QgZ3Bpb19zbGVlcCAqZ3BzID0gZ3Bpb19zYXZlOwogCWludCBncGlvOwpAQCAtNjY2LDE1MCArMzQ2LDE1IEBACiAJfQogfQogCi12b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOwotdm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7Ci0KLSNkZWZpbmUgYW55X2FsbG93ZWQobWFzaywgYWxsb3cpICgoKG1hc2spICYgKGFsbG93KSkgIT0gKGFsbG93KSkKLQotLyogczNjMjQxMF9wbV9lbnRlcgotICoKLSAqIGNlbnRyYWwgY29udHJvbCBmb3Igc2xlZXAvcmVzdW1lIHByb2Nlc3MKLSovCi0KLXN0YXRpYyBpbnQgczNjMjQxMF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit2b2lkIHMzY19wbV9yZXN0b3JlX2NvcmUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZ3Nfc2F2ZVsxNl07Ci0KLQkvKiBlbnN1cmUgdGhlIGRlYnVnIGlzIGluaXRpYWxpc2VkIChpZiBlbmFibGVkKSAqLwotCi0JczNjMjQxMF9wbV9kZWJ1Z19pbml0KCk7Ci0KLQlEQkcoInMzYzI0MTBfcG1fZW50ZXIoJWQpXG4iLCBzdGF0ZSk7Ci0KLQlpZiAocG1fY3B1X3ByZXAgPT0gTlVMTCB8fCBwbV9jcHVfc2xlZXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvcjogbm8gY3B1IHNsZWVwIGZ1bmN0aW9ucyBzZXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHdha2UtdXAgd2l0aC4uLiBiYWQgdGhpbmdzIHNlZW0KLQkgKiB0byBoYXBwZW4gaWYgeW91IHN1c3BlbmQgd2l0aCBubyB3YWtldXAgKHN5c3RlbSB3aWxsIG9mdGVuCi0JICogcmVxdWlyZSBhIGZ1bGwgcG93ZXItY3ljbGUpCi0JKi8KLQotCWlmICghYW55X2FsbG93ZWQoczNjX2lycXdha2VfaW50bWFzaywgczNjX2lycXdha2VfaW50YWxsb3cpICYmCi0JICAgICFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9laW50bWFzaywgczNjX2lycXdha2VfZWludGFsbG93KSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBzb3VyY2VzIGVuYWJsZWQgZm9yIHdha2UtdXAhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQWJvcnRpbmcgc2xlZXBcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBwcmVwYXJlIGNoZWNrIGFyZWEgaWYgY29uZmlndXJlZCAqLwotCi0JczNjMjQxMF9wbV9jaGVja19wcmVwYXJlKCk7Ci0KLQkvKiBzdG9yZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgcmVjb3ZlcnkgYmxvY2sgKi8KLQotCXMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7Ci0KLQlEQkcoInMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzPTB4JTA4bHhcbiIsIHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzKTsKLQotCS8qIHNhdmUgYWxsIG5lY2Vzc2FyeSBjb3JlIHJlZ2lzdGVycyBub3QgY292ZXJlZCBieSB0aGUgZHJpdmVycyAqLwotCi0JczNjMjQxMF9wbV9zYXZlX2dwaW9zKCk7Ci0JczNjMjQxMF9wbV9kb19zYXZlKG1pc2Nfc2F2ZSwgQVJSQVlfU0laRShtaXNjX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3NhdmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fc2F2ZSh1YXJ0X3NhdmUsIEFSUkFZX1NJWkUodWFydF9zYXZlKSk7Ci0KLQkvKiBzZXQgdGhlIGlycSBjb25maWd1cmF0aW9uIGZvciB3YWtlICovCi0KLQlzM2MyNDEwX3BtX2NvbmZpZ3VyZV9leHRpbnQoKTsKLQotCURCRygic2xlZXA6IGlycSB3YWtldXAgbWFza3M6ICUwOGx4LCUwOGx4XG4iLAotCSAgICBzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50bWFzayk7Ci0KLQlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfaW50bWFzaywgUzNDMjQxMF9JTlRNU0spOwotCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9laW50bWFzaywgUzNDMjQxMF9FSU5UTUFTSyk7Ci0KLQkvKiBhY2sgYW55IG91dHN0YW5kaW5nIGV4dGVybmFsIGludGVycnVwdHMgYmVmb3JlIHdlIGdvIHRvIHNsZWVwICovCi0KLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCksIFMzQzI0MTBfRUlOVFBFTkQpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0lOVFBORCksIFMzQzI0MTBfSU5UUE5EKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLCBTM0MyNDEwX1NSQ1BORCk7Ci0KLQkvKiBjYWxsIGNwdSBzcGVjaWZpYyBwcmVwYXJhdGlvbiAqLwotCi0JcG1fY3B1X3ByZXAoKTsKLQotCS8qIGZsdXNoIGNhY2hlIGJhY2sgdG8gcmFtICovCi0KLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCXMzYzI0MTBfcG1fY2hlY2tfc3RvcmUoKTsKLQotCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLwotCi0JX19yYXdfd3JpdGVsKDB4MDAsIFMzQzI0MTBfQ0xLQ09OKTsgIC8qIHR1cm4gb2ZmIGNsb2NrcyBvdmVyIHNsZWVwICovCi0KLQkvKiBzM2MyNDEwX2NwdV9zYXZlIHdpbGwgYWxzbyBhY3QgYXMgb3VyIHJldHVybiBwb2ludCBmcm9tIHdoZW4KLQkgKiB3ZSByZXN1bWUgYXMgaXQgc2F2ZXMgaXRzIG93biByZWdpc3RlciBzdGF0ZSwgc28gdXNlIHRoZSByZXR1cm4KLQkgKiBjb2RlIHRvIGRpZmZlcmVudGlhdGUgcmV0dXJuIGZyb20gc2F2ZSBhbmQgcmV0dXJuIGZyb20gc2xlZXAgKi8KLQotCWlmIChzM2MyNDEwX2NwdV9zYXZlKHJlZ3Nfc2F2ZSkgPT0gMCkgewotCQlmbHVzaF9jYWNoZV9hbGwoKTsKLQkJcG1fY3B1X3NsZWVwKCk7Ci0JfQotCi0JLyogcmVzdG9yZSB0aGUgY3B1IHN0YXRlICovCi0KLQljcHVfaW5pdCgpOwotCi0JLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCi0KLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19yZXN0b3JlKG1pc2Nfc2F2ZSwgQVJSQVlfU0laRShtaXNjX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUodWFydF9zYXZlLCBBUlJBWV9TSVpFKHVhcnRfc2F2ZSkpOwotCXMzYzI0MTBfcG1fcmVzdG9yZV9ncGlvcygpOwotCi0JczNjMjQxMF9wbV9kZWJ1Z19pbml0KCk7Ci0KLQkvKiBjaGVjayB3aGF0IGlycSAoaWYgYW55KSByZXN0b3JlZCB0aGUgc3lzdGVtICovCi0KLQlEQkcoInBvc3Qgc2xlZXA6IElSUXMgMHglMDh4LCAweCUwOHhcbiIsCi0JICAgIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKLQkgICAgX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCkpOwotCi0JczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UMCwgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAotCQkJCSAgICBzM2NfaXJxd2FrZV9pbnRtYXNrKTsKLQotCXMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDQtNCwgX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCksCi0JCQkJICAgIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKLQotCURCRygicG9zdCBzbGVlcCwgcHJlcGFyaW5nIHRvIHJldHVyblxuIik7Ci0KLQlzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUoKTsKLQotCS8qIG9rLCBsZXQncyByZXR1cm4gZnJvbSBzbGVlcCAqLwotCi0JREJHKCJTM0MyNDEwIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7Ci0JcmV0dXJuIDA7CisJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CisJczNjX3BtX2RvX3Jlc3RvcmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHMzYzI0MTBfcG1fb3BzID0gewotCS5lbnRlcgkJPSBzM2MyNDEwX3BtX2VudGVyLAotCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAotfTsKLQotLyogczNjMjQxMF9wbV9pbml0Ci0gKgotICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCi0gKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKLSAqIGl0LgotKi8KLQotaW50IF9faW5pdCBzM2MyNDEwX3BtX2luaXQodm9pZCkKK3ZvaWQgczNjX3BtX3NhdmVfY29yZSh2b2lkKQogewotCXByaW50aygiUzNDMjQxMCBQb3dlciBNYW5hZ2VtZW50LCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwotCi0Jc3VzcGVuZF9zZXRfb3BzKCZzM2MyNDEwX3BtX29wcyk7Ci0JcmV0dXJuIDA7CisJczNjX3BtX2RvX3NhdmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOworCXMzY19wbV9kb19zYXZlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKIH0KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKaW5kZXggYzFkZTZiYi4uMTM2NDMxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogCiBzdGF0aWMgaW50IHMzYzI0NHhfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JczNjMjQxMF9wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXMzY19wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHMzYzI0NHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JczNjMjQxMF9wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXMzY19wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCmluZGV4IDc2NTk0YjIuLmU3M2UzYjZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwpAQCAtNDEsMjUgKzQxLDEzIEBACiAKIAkudGV4dAogCi0JLyogczNjMjQxMF9jcHVfc2F2ZQotCSAqCi0JICogc2F2ZSBlbm91Z2ggb2YgdGhlIENQVSBzdGF0ZSB0byBhbGxvdyB1cyB0byByZS1zdGFydAotCSAqIHBtLmMgY29kZS4gYXMgd2Ugc3RvcmUgaXRlbXMgbGlrZSB0aGUgc3AvbHIsIHdlIHdpbGwKLQkgKiBlbmQgdXAgcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBjcHUgcmVzdW1lcwotCSAqIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMgc2V0IHRvIG1hcmsgdGhpcy4KLQkgKgotCSAqIFRoaXMgYXJhbmdlbWVudCBtZWFucyB3ZSBhdm9pZCBoYXZpbmcgdG8gZmx1c2ggdGhlIGNhY2hlCi0JICogZnJvbSB0aGlzIGNvZGUuCisJLyogczNjX2NwdV9zYXZlCiAJICoKIAkgKiBlbnRyeToKLQkgKglyMCA9IHBvaW50ZXIgdG8gc2F2ZSBibG9jawotCSAqCi0JICogZXhpdDoKLQkgKglyMCA9IDAgPT4gd2Ugc3RvcmVkIGV2ZXJ5dGhpbmcKLQkgKgkgICAgIDEgPT4gcmVzdW1lZCBmcm9tIHNsZWVwCisJICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQogCSovCiAKLUVOVFJZKHMzYzI0MTBfY3B1X3NhdmUpCitFTlRSWShzM2NfY3B1X3NhdmUpCiAJc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9CiAKIAlAQCBzdG9yZSBjby1wcm9jZXNzb3IgcmVnaXN0ZXJzCkBAIC03MSwyMCArNTksMjUgQEAKIAogCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0KIAotCW1vdglyMCwgIzAKLQlsZG1mZAlzcCwgeyByNCAtIHIxMiwgcGMgfQorCUBAIHdyaXRlIG91ciBzdGF0ZSBiYWNrIHRvIFJBTQorCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCiAKKwlAQCBqdW1wIHRvIGZpbmFsIGNvZGUgdG8gc2VuZCBzeXN0ZW0gdG8gc2xlZXAKKwlsZHIJcjAsID1wbV9jcHVfc2xlZXAKKwlAQGxkcglwYywgWyByMCBdCisJbGRyCXIwLCBbIHIwIF0KKwltb3YJcGMsIHIwCisJCiAJQEAgcmV0dXJuIHRvIHRoZSBjYWxsZXIsIGFmdGVyIGhhdmluZyB0aGUgTU1VCiAJQEAgdHVybmVkIG9uLCB0aGlzIHJlc3RvcmVzIHRoZSBsYXN0IGJpdHMgZnJvbSB0aGUKIAlAQCBzdGFjawogcmVzdW1lX3dpdGhfbW11OgotCW1vdglyMCwgIzEKIAlsZG1mZAlzcCEsIHsgcjQgLSByMTIsIHBjIH0KIAogCS5sdG9yZwogCiAJQEAgdGhlIG5leHQgYml0cyBzaXQgaW4gdGhlIC5kYXRhIHNlZ21lbnQsIGV2ZW4gdGhvdWdoIHRoZXkKLQlAQCBoYXBwZW4gdG8gYmUgY29kZS4uLiB0aGUgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgbmVlZHMgdG8gYmUKKwlAQCBoYXBwZW4gdG8gYmUgY29kZS4uLiB0aGUgczNjX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQogCUBAIGFjY2Vzc2VkIGJ5IHRoZSByZXN1bWUgY29kZSBiZWZvcmUgaXQgY2FuIHJlc3RvcmUgdGhlIE1NVS4KIAlAQCBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGhhcyB0byBiZSBjbG9zZSBlbm91Z2ggZm9yIHRoZQogCUBAIGNvZGUgdG8gcmVhZCBpdC4uLiBzaW5jZSB0aGUgLnRleHQgc2VnbWVudCBuZWVkcyB0byBiZSBSTywKQEAgLTkyLDE5ICs4NSwxOSBAQAogCiAJLmRhdGEKIAotCS5nbG9iYWwJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMKLXMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzOgorCS5nbG9iYWwJczNjX3NsZWVwX3NhdmVfcGh5cworczNjX3NsZWVwX3NhdmVfcGh5czoKIAkud29yZAkwCiAKIAogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQotCSAqIHMzYzI0MTBfY3B1X3Jlc3VtZSBlbnRyeS4KKwkgKiBzM2NfY3B1X3Jlc3VtZSBlbnRyeS4KIAkqLwogCiAJLndvcmQJMHgyYmVkZjAwZAogCi0JLyogczNjMjQxMF9jcHVfcmVzdW1lCisJLyogczNjX2NwdV9yZXN1bWUKIAkgKgogCSAqIHJlc3VtZSBjb2RlIGVudHJ5IGZvciBib290bG9hZGVyIHRvIGNhbGwKIAkgKgpAQCAtMTEzLDcgKzEwNiw3IEBACiAJICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCiAJKi8KIAotRU5UUlkoczNjMjQxMF9jcHVfcmVzdW1lKQorRU5UUlkoczNjX2NwdV9yZXN1bWUpCiAJbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUKIAltc3IJY3Bzcl9jLCByMAogCkBAIC0xNDUsNyArMTM4LDcgQEAKIAltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKIAltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcwogCi0JbGRyCXIwLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jaworCWxkcglyMCwgczNjX3NsZWVwX3NhdmVfcGh5cwkJQCBhZGRyZXNzIG9mIHJlc3RvcmUgYmxvY2sKIAlsZG1pYQlyMCwgeyByNCAtIHIxMyB9CiAKIAltY3IJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAkJQCBQSUQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYwppbmRleCBmYmRlMTgzLi45MWY0OWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jCkBAIC05Niw2ICs5NiwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9HUElPKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0M2NFhYX1ZBX01PREVNLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9NT0RFTSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8tbWVtcG9ydC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8tbWVtcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzQyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby1tZW1wb3J0LmgKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8tbWVtcG9ydC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEdQSU8gbWVtb3J5IHBvcnQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfUzNDNjRYWF9SRUdTX0dQSU9fTUVNUE9SVF9ICisjZGVmaW5lIF9fQVNNX1BMQVRfUzNDNjRYWF9SRUdTX0dQSU9fTUVNUE9SVF9IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDNjRYWF9NRU0wQ09OU1RPUAlTM0M2NFhYX0dQSU9SRUcoMHgxQjApCisjZGVmaW5lIFMzQzY0WFhfTUVNMUNPTlNUT1AJUzNDNjRYWF9HUElPUkVHKDB4MUI0KQorCisjZGVmaW5lIFMzQzY0WFhfTUVNMENPTlNMUDAJUzNDNjRYWF9HUElPUkVHKDB4MUMwKQorI2RlZmluZSBTM0M2NFhYX01FTTBDT05TTFAxCVMzQzY0WFhfR1BJT1JFRygweDFDNCkKKyNkZWZpbmUgUzNDNjRYWF9NRU0xQ09OU0xQCVMzQzY0WFhfR1BJT1JFRygweDFDOCkKKworI2RlZmluZSBTM0M2NFhYX01FTTBEUlZDT04JUzNDNjRYWF9HUElPUkVHKDB4MUQwKQorI2RlZmluZSBTM0M2NFhYX01FTTFEUlZDT04JUzNDNjRYWF9HUElPUkVHKDB4MUQ0KQorCisjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19NRU1QT1JUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKaW5kZXggNzViODczZC4uODFmN2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby5oCkBAIC0xMywyMyArMTMsMTc1IEBACiAKIC8qIEJhc2UgYWRkcmVzc2VzIGZvciBlYWNoIG9mIHRoZSBiYW5rcyAqLwogCi0jZGVmaW5lIFMzQzY0WFhfR1BBX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDAwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEJfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDIwKQotI2RlZmluZSBTM0M2NFhYX0dQQ19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwNDApCi0jZGVmaW5lIFMzQzY0WFhfR1BEX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDA2MCkKLSNkZWZpbmUgUzNDNjRYWF9HUEVfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDgwKQotI2RlZmluZSBTM0M2NFhYX0dQRl9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwQTApCi0jZGVmaW5lIFMzQzY0WFhfR1BHX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDBDMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEhfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMEUwKQotI2RlZmluZSBTM0M2NFhYX0dQSV9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxMDApCi0jZGVmaW5lIFMzQzY0WFhfR1BKX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDEyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEtfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODAwKQotI2RlZmluZSBTM0M2NFhYX0dQTF9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDA4MTApCi0jZGVmaW5lIFMzQzY0WFhfR1BNX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDgyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE5fQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODMwKQotI2RlZmluZSBTM0M2NFhYX0dQT19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxNDApCi0jZGVmaW5lIFMzQzY0WFhfR1BQX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDE2MCkKLSNkZWZpbmUgUzNDNjRYWF9HUFFfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMTgwKQorI2RlZmluZSBTM0M2NFhYX0dQSU9SRUcocmVnKQkoUzNDNjRYWF9WQV9HUElPICsgKHJlZykpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEFfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMDAwKQorI2RlZmluZSBTM0M2NFhYX0dQQl9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwMjApCisjZGVmaW5lIFMzQzY0WFhfR1BDX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDA0MCkKKyNkZWZpbmUgUzNDNjRYWF9HUERfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMDYwKQorI2RlZmluZSBTM0M2NFhYX0dQRV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwODApCisjZGVmaW5lIFMzQzY0WFhfR1BGX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDBBMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEdfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMEMwKQorI2RlZmluZSBTM0M2NFhYX0dQSF9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwRTApCisjZGVmaW5lIFMzQzY0WFhfR1BJX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDEwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEpfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTIwKQorI2RlZmluZSBTM0M2NFhYX0dQS19CQVNFCVMzQzY0WFhfR1BJT1JFRygweDA4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BMX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDgxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE1fQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwODIwKQorI2RlZmluZSBTM0M2NFhYX0dQTl9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDA4MzApCisjZGVmaW5lIFMzQzY0WFhfR1BPX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDE0MCkKKyNkZWZpbmUgUzNDNjRYWF9HUFBfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTYwKQorI2RlZmluZSBTM0M2NFhYX0dQUV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAxODApCisKKy8qIFNQQ09OICovCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTgkJUzNDNjRYWF9HUElPUkVHKDB4MUEwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0NBTV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fU0hJRlQJCSgzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzJtQQkJKDB4MCA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzRtQQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzdtQQkJKDB4MiA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzltQQkJKDB4MyA8PCAzMCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV9TSElGVAkoMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJXzJtQQkJKDB4MCA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNTUElfNG1BCQkoMHgxIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV83bUEJCSgweDIgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJXzltQQkJKDB4MyA8PCAyOCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ19TSElGVAkoMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DXzJtQQkJKDB4MCA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNNTUNfNG1BCQkoMHgxIDw8IDI2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ183bUEJCSgweDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DXzltQQkJKDB4MyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9MQ0RfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEX1NISUZUCQkoMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF8ybUEJCSgweDAgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF80bUEJCSgweDEgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF83bUEJCSgweDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF85bUEJCSgweDMgPDwgMjQpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fU0hJRlQJKDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV8ybUEJCSgweDAgPDwgMjIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX01PREVNXzRtQQkJKDB4MSA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fN21BCQkoMHgyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV85bUEJCSgweDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9uUlNUT1VUX09FTgkJKDEgPDwgMjEpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fU1BJQ0xLMV9NQVNLCSgweDMgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfU0hJRlQJKDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzJtQQkoMHgwIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzRtQQkoMHgxIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzdtQQkoMHgyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzltQQkoMHgzIDw8IDE4KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EUVNfUFVEX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EUVNfUFVEX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfRElTQUJMRUQJKDB4MCA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfRE9XTgkJKDB4MSA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfVVAJCSgweDIgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMV9NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX1NISUZUCQkoMTQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDFfRElTQUJMRUQJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMV9ET1dOCQkoMHgxIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX1VQCQkoMHgyIDw8IDE0KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDBfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9TSElGVAkJKDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQwX0RJU0FCTEVECSgweDAgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDBfRE9XTgkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9VUAkJKDB4MiA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfU0hJRlQJCSg4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfRElTQUJMRUQJKDB4MCA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfRE9XTgkJKDB4MSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfVVAJCSgweDIgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX1VTQkhfRE1QRAkJCSgxIDw8IDcpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9EUFBECQkJKDEgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9VU0JIX1BVU1cyCQkoMSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX1VTQkhfUFVTVzEJCSgxIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9TVVNQTkQJCSgxIDw8IDMpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1NISUZUCQkoMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX0hPU1QJCSgweDAgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1JHQgkJKDB4MSA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfNjA2XzY1NgkJKDB4MiA8PCAwKQorCisKKy8qIEV4dGVybmFsIGludGVycnVwdCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0M2NFhYX0VJTlQxMkNPTglTM0M2NFhYX0dQSU9SRUcoMHgyMDApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDM0Q09OCVMzQzY0WFhfR1BJT1JFRygweDIwNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNTZDT04JUzNDNjRYWF9HUElPUkVHKDB4MjA4KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ3OENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMEMpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDlDT04JUzNDNjRYWF9HUElPUkVHKDB4MjEwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDEyRkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIyMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRGTFRDT04JUzNDNjRYWF9HUElPUkVHKDB4MjI0KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ1NkZMVENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMjgpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDc4RkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIyQykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOUZMVENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMzApCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMTJNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0MCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0NCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNTZNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0OCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNzhNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0QykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOU1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjUwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDEyUEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDM0UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDU2UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjgpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDc4UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNkMpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDlQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI3MCkKKworI2RlZmluZSBTM0M2NFhYX1BSSU9SSVRZCVMzQzY0WFhfR1BJT1JFRygweDI4MCkKKyNkZWZpbmUgUzNDNjRYWF9QUklPUklUWV9BUkIoeCkJKDEgPDwgKHgpKQorCisjZGVmaW5lIFMzQzY0WFhfU0VSVklDRQkJUzNDNjRYWF9HUElPUkVHKDB4Mjg0KQorI2RlZmluZSBTM0M2NFhYX1NFUlZJQ0VQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI4OCkKKworI2RlZmluZSBTM0M2NFhYX0VJTlQwQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MDApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04xCVMzQzY0WFhfR1BJT1JFRygweDkwNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjAJUzNDNjRYWF9HUElPUkVHKDB4OTEwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMQlTM0M2NFhYX0dQSU9SRUcoMHg5MTQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04yCVMzQzY0WFhfR1BJT1JFRygweDkxOCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjMJUzNDNjRYWF9HUElPUkVHKDB4OTFDKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBNQVNLCVMzQzY0WFhfR1BJT1JFRygweDkyMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMFBFTkQJUzNDNjRYWF9HUElPUkVHKDB4OTI0KQorCisvKiBHUElPIHNsZWVwIGNvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQCVMzQzY0WFhfR1BJT1JFRygweDg4MCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX1RET19QVUxMRE9XTgkoMSA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9DS0UxSU5JVAkoMSA8PCA1KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfUlNUT1VUX01BU0sJKDB4MyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9SU1RPVVRfT1VUMAkoMHgwIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX1JTVE9VVF9PVVQxCSgweDEgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfUlNUT1VUX0hJWgkoMHgyIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfTUFTSwkoMHgzIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfT1VUMAkoMHgwIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfT1VUMQkoMHgxIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfSU5QCSgweDIgPDwgMCkKKworCisjZGVmaW5lIFMzQzY0WFhfU0xQRU4JCVMzQzY0WFhfR1BJT1JFRygweDkzMCkKKworI2RlZmluZSBTM0M2NFhYX1NMUEVOX1VTRV94U0xQCQkoMSA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NMUEVOX0NGR19CWVNMUEVOCSgxIDw8IDEpCiAKICNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfUkVHU19HUElPX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtbW9kZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY3NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmgKQEAgLTAsMCArMSwzMSBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NFhYIC0gbW9kZW0gYmxvY2sgcmVnaXN0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQzY0WFhfUkVHU19NT0RFTV9ICisjZGVmaW5lIF9fUExBVF9TM0M2NFhYX1JFR1NfTU9ERU1fSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzY0WFhfTU9ERU1SRUcoeCkJKFMzQzY0WFhfVkFfTU9ERU0gKyAoeCkpCisKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9JTlQyQVAJCQlTM0M2NFhYX01PREVNUkVHKDB4MCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9JTlQyTU9ERU0JCQlTM0M2NFhYX01PREVNUkVHKDB4NCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9NSUZDT04JCQlTM0M2NFhYX01PREVNUkVHKDB4OCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9NSUZQQ09OCQkJUzNDNjRYWF9NT0RFTVJFRygweEMpCisjZGVmaW5lIFMzQzY0WFhfTU9ERU1fSU5UQ0xSCQkJUzNDNjRYWF9NT0RFTVJFRygweDEwKQorI2RlZmluZSBTM0M2NFhYX01PREVNX0RNQV9UWEFERFIJCVMzQzY0WFhfTU9ERU1SRUcoMHgxNCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9ETUFfUlhBRERSCQlTM0M2NFhYX01PREVNUkVHKDB4MTgpCisKKyNkZWZpbmUgTUlGUENPTl9JTlQyTV9MRVZFTAkJCSgxIDw8IDQpCisjZGVmaW5lIE1JRlBDT05fTENEX0JZUEFTUwkJCSgxIDw8IDMpCisKKyNlbmRpZiAvKiBfX1BMQVRfUzNDNjRYWF9SRUdTX01PREVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaAppbmRleCBkOGVkODI5Li42OWI3OGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oCkBAIC0xNyw2ICsxNywxMCBAQAogCiAjZGVmaW5lIFMzQ19TWVNSRUcoeCkJCShTM0NfVkFfU1lTICsgKHgpKQogCisjZGVmaW5lIFMzQzY0WFhfQUhCX0NPTjAJUzNDX1NZU1JFRygweDEwMCkKKyNkZWZpbmUgUzNDNjRYWF9BSEJfQ09OMQlTM0NfU1lTUkVHKDB4MTA0KQorI2RlZmluZSBTM0M2NFhYX0FIQl9DT04yCVMzQ19TWVNSRUcoMHgxMDgpCisKICNkZWZpbmUgUzNDNjRYWF9PVEhFUlMJCVMzQ19TWVNSRUcoMHg5MDApCiAKICNkZWZpbmUgUzNDNjRYWF9PVEhFUlNfVVNCTUFTSwkoMSA8PCAxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzBkOTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzY29uLXBvd2VyLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NFhYIC0gc3lzY29uIHBvd2VyIGFuZCBzbGVlcCBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9TM0M2NFhYX1JFR1NfU1lTQ09OX1BPV0VSX0gKKyNkZWZpbmUgX19QTEFUX1MzQzY0WFhfUkVHU19TWVNDT05fUE9XRVJfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzY0WFhfUFdSX0NGRwkJCQlTM0NfU1lTUkVHKDB4ODA0KQorCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX09TQ19PVEdfRElTQUJMRQkJKDEgPDwgMTcpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzJfRElTQUJMRQkJKDEgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzFfRElTQUJMRQkJKDEgPDwgMTUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzBfRElTQUJMRQkJKDEgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0hTSV9ESVNBQkxFCQkoMSA8PCAxMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfVFNfRElTQUJMRQkJKDEgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX1JUQ19USUNLX0RJU0FCTEUJCSgxIDw8IDExKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19SVENfQUxBUk1fRElTQUJMRQkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfTVNNX0RJU0FCTEUJCSgxIDw8IDkpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0tFWV9ESVNBQkxFCQkoMSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19CQVRGX0RJU0FCTEUJCSgxIDw8IDcpCisKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9NQVNLCQkoMHgzIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfU0hJRlQJCSg1KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX0lHTk9SRQkJKDB4MCA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX0lETEUJCSgweDEgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9TVE9QCQkoMHgyIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfU0xFRVAJCSgweDMgPDwgNSkKKworI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfQkFURkxUX01BU0sJCSgweDMgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9TSElGVAkJKDMpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19CQVRGTFRfSUdOT1JFCSgweDAgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9JUlEJCSgweDEgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9TTEVFUAkJKDB4MyA8PCAzKQorCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19CQVRfV0FLRQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfT1NDMjdfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVF9NQVNLCQkJUzNDX1NZU1JFRygweDgwOCkKKworI2RlZmluZSBTM0M2NFhYX05PUk1BTF9DRkcJCQlTM0NfU1lTUkVHKDB4ODEwKQorCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0lST01fT04JCSgxIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fRVRNX09OCQkoMSA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX1NfT04JCSgxIDw8IDE1KQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fRl9PTgkJKDEgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9QX09OCQkoMSA8PCAxMykKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX0lfT04JCSgxIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fR19PTgkJKDEgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9WX09OCQkoMSA8PCA5KQorCisjZGVmaW5lIFMzQzY0WFhfU1RPUF9DRkcJCQlTM0NfU1lTUkVHKDB4ODE0KQorCisjZGVmaW5lIFMzQzY0WFhfU1RPUENGR19NRU1PUllfQVJNX09OCQkoMSA8PCAyOSkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX1RPUF9NRU1PUllfT04JCSgxIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX1NUT1BDRkdfQVJNX0xPR0lDX09OCQkoMSA8PCAxNykKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX1RPUF9MT0dJQ19PTgkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX09TQ19FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9TTEVFUF9DRkcJCQlTM0NfU1lTUkVHKDB4ODE4KQorCisjZGVmaW5lIFMzQzY0WFhfU0xFRVBDRkdfT1NDX0VOCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX1NUT1BfTUVNX0NGRwkJCVMzQ19TWVNSRUcoMHg4MWMpCisKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX01PREVNSUZfUkVUQUlOCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19IT1NUSUZfUkVUQUlOCSgxIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19PVEdfUkVUQUlOCQkoMSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfSFNNQ0NfUkVUQUlOCQkoMSA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfSVJPTV9SRVRBSU4JCSgxIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19JUkRBX1JFVEFJTgkJKDEgPDwgMSkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX05GQ09OX1JFVEFJTgkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX09TQ19TVEFCTEUJCQlTM0NfU1lTUkVHKDB4ODI0KQorI2RlZmluZSBTM0M2NFhYX1BXUl9TVEFCTEUJCQlTM0NfU1lTUkVHKDB4ODI4KQorCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQX1NUQVQJCQlTM0NfU1lTUkVHKDB4OTA4KQorCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMyCQkJKDEgPDwgMTEpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMxCQkJKDEgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMwCQkJKDEgPDwgOSkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX0hTSQkJCSgxIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9CQVRGTFQJCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NU00JCQkoMSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfS0VZCQkJKDEgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX1RTCQkJKDEgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX1JUQ19USUNLCQkoMSA8PCAyKQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfUlRDX0FMQVJNCQkoMSA8PCAxKQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfRUlOVAkJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9CTEtfUFdSX1NUQVQJCQlTM0NfU1lTUkVHKDB4OTBjKQorCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9HCQkJKDEgPDwgNykKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0VUTQkJCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9TCQkJKDEgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0YJCQkoMSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfUAkJCSgxIDw8IDMpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9JCQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX1YJCQkoMSA8PCAxKQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfVE9QCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0lORk9STTAJCQkJUzNDX1NZU1JFRygweEEwMCkKKyNkZWZpbmUgUzNDNjRYWF9JTkZPUk0xCQkJCVMzQ19TWVNSRUcoMHhBMDQpCisjZGVmaW5lIFMzQzY0WFhfSU5GT1JNMgkJCQlTM0NfU1lTUkVHKDB4QTA4KQorI2RlZmluZSBTM0M2NFhYX0lORk9STTMJCQkJUzNDX1NZU1JFRygweEEwQykKKworI2VuZGlmIC8qIF9fUExBVF9TM0M2NFhYX1JFR1NfU1lTQ09OX1BPV0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKaW5kZXggY2Y1MjQ4Mi4uNDdlNTE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKQEAgLTI3LDIwICsyNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0vKiBHUElPIGlzIDB4N0YwMDh4eHgsICovCi0jZGVmaW5lIFMzQzY0WFhfR1BJT1JFRyh4KQkoUzNDNjRYWF9WQV9HUElPICsgKHgpKQotCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04wCVMzQzY0WFhfR1BJT1JFRygweDkwMCkKLSNkZWZpbmUgUzNDNjRYWF9FSU5UMENPTjEJUzNDNjRYWF9HUElPUkVHKDB4OTA0KQotI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MTApCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04xCVMzQzY0WFhfR1BJT1JFRygweDkxNCkKLSNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjIJUzNDNjRYWF9HUElPUkVHKDB4OTE4KQotI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMwlTM0M2NFhYX0dQSU9SRUcoMHg5MUMpCi0KLSNkZWZpbmUgUzNDNjRYWF9FSU5UME1BU0sJUzNDNjRYWF9HUElPUkVHKDB4OTIwKQotI2RlZmluZSBTM0M2NFhYX0VJTlQwUEVORAlTM0M2NFhYX0dQSU9SRUcoMHg5MjQpCi0KLQogI2RlZmluZSBlaW50X29mZnNldChpcnEpCSgoaXJxKSAtIElSUV9FSU5UKDApKQogI2RlZmluZSBlaW50X2lycV90b19iaXQoaXJxKQkoMSA8PCBlaW50X29mZnNldChpcnEpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBiNDIxMWQ4Li45NDVlMGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBUaHUgTWFyIDEyIDE4OjAxOjQ1IDIwMDkKKyMgTGFzdCB1cGRhdGU6IE1vbiBNYXIgMjMgMjA6MDk6MDEgMjAwOQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0yMTI0LDMgKzIxMjQsMTEgQEAKIGZtendlYm1vZHVsCQlNQUNIX0ZNWldFQk1PRFVMCUZNWldFQk1PRFVMCQkyMTM0CiByZDc4eDAwX21hc2EJCU1BQ0hfUkQ3OFgwMF9NQVNBCVJENzhYMDBfTUFTQQkJMjEzNQogc21hbGxvZ2dlcgkJTUFDSF9TTUFMTE9HR0VSCQlTTUFMTE9HR0VSCQkyMTM2CitjY3c5cDkyMTUJCU1BQ0hfQ0NXOVA5MjE1CQlDQ1c5UDkyMTUJCTIxMzcKK2RtMzU1X2xlb3BhcmQJCU1BQ0hfRE0zNTVfTEVPUEFSRAlETTM1NV9MRU9QQVJECQkyMTM4Cit0czIxOQkJCU1BQ0hfVFMyMTkJCVRTMjE5CQkJMjEzOQordG55X2E5MjYzCQlNQUNIX1ROWV9BOTI2MwkJVE5ZX0E5MjYzCQkyMTQwCithcG9sbG8JCQlNQUNIX0FQT0xMTwkJQVBPTExPCQkJMjE0MQorYXQ5MWNhcDlzdGsJCU1BQ0hfQVQ5MUNBUDlTVEsJQVQ5MUNBUDlTVEsJCTIxNDIKK3NwYzMwMAkJCU1BQ0hfU1BDMzAwCQlTUEMzMDAJCQkyMTQzCitla28JCQlNQUNIX0VLTwkJRUtPCQkJMjE0NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcC5oIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCmluZGV4IDhkZTg2ZTQuLmM4Yzk4ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnAuaAorKysgYi9hcmNoL2FybS92ZnAvdmZwLmgKQEAgLTM3Nyw2ICszNzcsNCBAQAogCXUzMiBmbGFnczsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BNKQogZXh0ZXJuIHZvaWQgdmZwX3NhdmVfc3RhdGUodm9pZCAqbG9jYXRpb24sIHUzMiBmcGV4Yyk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBody5TIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKaW5kZXggYzkyYTA4Yi4uYTVhNGU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKQEAgLTE3Miw3ICsxNzIsNiBAQAogCQkJCQlAIHJldHJ5IHRoZSBmYXVsdGVkIGluc3RydWN0aW9uCiBFTkRQUk9DKHZmcF9zdXBwb3J0X2VudHJ5KQogCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKIEVOVFJZKHZmcF9zYXZlX3N0YXRlKQogCUAgU2F2ZSB0aGUgY3VycmVudCBWRlAgc3RhdGUKIAlAIHIwIC0gc2F2ZSBsb2NhdGlvbgpAQCAtMTkwLDcgKzE4OSw2IEBACiAJc3RtaWEJcjAsIHtyMSwgcjIsIHIzLCByMTJ9CUAgc2F2ZSBGUEVYQywgRlBTQ1IsIEZQSU5TVCwgRlBJTlNUMgogCW1vdglwYywgbHIKIEVORFBST0ModmZwX3NhdmVfc3RhdGUpCi0jZW5kaWYKIAogbGFzdF9WRlBfY29udGV4dF9hZGRyZXNzOgogCS53b3JkCWxhc3RfVkZQX2NvbnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCA5ZjQ3NmExLi43NTQ1N2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0zNzcsNiArMzc3LDU1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdmZwX3BtX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKKy8qCisgKiBTeW5jaHJvbmlzZSB0aGUgaGFyZHdhcmUgVkZQIHN0YXRlIG9mIGEgdGhyZWFkIG90aGVyIHRoYW4gY3VycmVudCB3aXRoIHRoZQorICogc2F2ZWQgb25lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHB0cmFjZSBtZWNoYW5pc20uCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCS8qCisJICogT24gU01QIHN5c3RlbXMsIHRoZSBWRlAgc3RhdGUgaXMgYXV0b21hdGljYWxseSBzYXZlZCBhdCBldmVyeQorCSAqIGNvbnRleHQgc3dpdGNoLiBXZSBtYXJrIHRoZSB0aHJlYWQgVkZQIHN0YXRlIGFzIGJlbG9uZ2luZyB0byBhCisJICogbm9uLWV4aXN0ZW50IENQVSBzbyB0aGF0IHRoZSBzYXZlZCBvbmUgd2lsbCBiZSByZWxvYWRlZCB3aGVuCisJICogbmVlZGVkLgorCSAqLworCXRocmVhZC0+dmZwc3RhdGUuaGFyZC5jcHUgPSBOUl9DUFVTOworfQorI2Vsc2UKK3ZvaWQgdmZwX3N5bmNfc3RhdGUoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKKwl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKKworCS8qCisJICogSWYgVkZQIGlzIGVuYWJsZWQsIHRoZSBwcmV2aW91cyBzdGF0ZSB3YXMgYWxyZWFkeSBzYXZlZCBhbmQKKwkgKiBsYXN0X1ZGUF9jb250ZXh0IHVwZGF0ZWQuCisJICovCisJaWYgKGZwZXhjICYgRlBFWENfRU4pCisJCWdvdG8gb3V0OworCisJaWYgKCFsYXN0X1ZGUF9jb250ZXh0W2NwdV0pCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBTYXZlIHRoZSBsYXN0IFZGUCBzdGF0ZSBvbiB0aGlzIENQVS4KKwkgKi8KKwlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKKwl2ZnBfc2F2ZV9zdGF0ZShsYXN0X1ZGUF9jb250ZXh0W2NwdV0sIGZwZXhjKTsKKwlmbXhyKEZQRVhDLCBmcGV4Yyk7CisKKwkvKgorCSAqIFNldCB0aGUgY29udGV4dCB0byBOVUxMIHRvIGZvcmNlIGEgcmVsb2FkIHRoZSBuZXh0IHRpbWUgdGhlIHRocmVhZAorCSAqIHVzZXMgdGhlIFZGUC4KKwkgKi8KKwlsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPSBOVUxMOworCitvdXQ6CisJcHV0X2NwdSgpOworfQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogLyoKQEAgLTQyNyw2ICs0NzYsMTggQEAKIAkJICogaW4gcGxhY2U7IHJlcG9ydCBWRlAgc3VwcG9ydCB0byB1c2Vyc3BhY2UuCiAJCSAqLwogCQllbGZfaHdjYXAgfD0gSFdDQVBfVkZQOworI2lmZGVmIENPTkZJR19WRlB2MworCQlpZiAoVkZQX2FyY2ggPj0gMykgeworCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUHYzOworCisJCQkvKgorCQkJICogQ2hlY2sgZm9yIFZGUHYzIEQxNi4gQ1BVcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24KKwkJCSAqIG9ubHkgaGF2ZSAxNiB4IDY0Yml0IHJlZ2lzdGVycy4KKwkJCSAqLworCQkJaWYgKCgoZm1yeChNVkZSMCkgJiBNVkZSMF9BX1NJTURfTUFTSykpID09IDEpCisJCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUHYzRDE2OworCQl9CisjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVPTgogCQkvKgogCQkgKiBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBBZHZhbmNlZCBTSU1ECmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDI4MWY0YjYuLmMxMjFkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBGZWIgMjAgMTA6MDE6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LjcKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldApAQCAtNDMsNyArNDIsNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTMxNCw3ICszMTMsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19CRklOX0dQVElNRVJTPXkKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CkBAIC0zNzUsNyArMzc0LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNjM0LDYgKzYzMiw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKQEAgLTc5Myw2ICs3OTIsNyBAQAogIwogQ09ORklHX1NQSV9CRklOPXkKICMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogCiAjCkBAIC04MTYsNiArODE2LDEyIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODY1LDcgKzg3MSwyNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19TREhfQkZJTj1tCitDT05GSUdfU0RIX0JGSU5fTUlTU0lOR19DTURfUFVMTFVQX1dPUktBUk9VTkQ9eQorQ09ORklHX1NESF9CRklOX0VOQUJMRV9TRElPX0lSUT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTEyMSw3ICsxMTQ2LDYgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCX1RFU1RDQVNFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19WRVJCT1NFPXkKIENPTkZJR19ERUJVR19NTVJTPXkKICMgQ09ORklHX0RFQlVHX0hXRVJSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDhlMmI4NTUuLjNlNTYyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTQyLDcgKzQyLDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTUsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzIsMTUgKzEzMiwyMCBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCi1DT05GSUdfQkZfUkVWXzBfMD15Ci0jIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzAgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzE9eQogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldApAQCAtMzEzLDcgKzMxOCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTM3NCw3ICszNzksNiBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC01ODMsNyArNTg3LDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02MzcsNiArNjQzLDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC04MTUsNiArODIyLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODM4LDYgKzg0Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKQEAgLTg5Niw2ICs5MDUsMTIgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCkBAIC05MDQsOCArOTE5LDEwIEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC05NDAsNTUgKzk1Nyw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX1NPVU5EPW0KLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NQST15Ci0KLSMKLSMgQUxTQSBCbGFja2ZpbiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQkxBQ0tGSU5fQUQxODM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CRklOX0FENzMzMjIgaXMgbm90IHNldAotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DPW0KLUNPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKLUNPTkZJR19TTkRfQkY1WFhfSTJTPW0KLUNPTkZJR19TTkRfQkY1WFhfU09DX1NTTTI2MDI9bQotIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BRDczMzExIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQkY1WFhfQUM5Nz1tCi1DT05GSUdfU05EX0JGNVhYX01NQVBfU1VQUE9SVD15Ci0jIENPTkZJR19TTkRfQkY1WFhfTVVMVElDSEFOX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1NORF9CRjVYWF9TT0NfU1BPUlQ9bQotQ09ORklHX1NORF9CRjVYWF9TT0NfSTJTPW0KLUNPTkZJR19TTkRfQkY1WFhfU09DX0FDOTc9bQotQ09ORklHX1NORF9CRjVYWF9TT0NfQUQxOTgwPW0KLUNPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNPTAKLSMgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0FEMTk4MD1tCi1DT05GSUdfU05EX1NPQ19TU00yNjAyPW0KLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz1tCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldApAQCAtMTA2MywxMyArMTAzMiwxNSBAQAogQ09ORklHX1VTQl9NVVNCX1NPQz15CiAKICMKLSMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0CiAjCiBDT05GSUdfVVNCX01VU0JfSE9TVD15CiAjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX01VU0JfRE1BX1BPTEw9eQogIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMDgxLDE4ICsxMDUyLDMzIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTExMjQsNiArMTExMCwzMCBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTE1OCwxMiArMTE2OCwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xMzg0LDYgKzEzOTYsMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTQyMyw2ICsxNDQyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCBhNTAwNTBmLi45MTFiNWRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNiwxNCArMzYsMTMgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzMsMTUgKzEzMiwyMCBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCi1DT05GSUdfQkZfUkVWXzBfMD15Ci0jIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzAgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzE9eQogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldApAQCAtMzE0LDcgKzMxOCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTM3NSw3ICszNzksNiBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC02MjYsNyArNjI5LDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02ODEsNiArNjg2LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03NTUsOCArNzYxLDggQEAKICMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAogIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CRjV4eF9QUEk9bQorQ09ORklHX0JGSU5fU1BPUlQ9bQogIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXSV9MQ0QgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRT1tCkBAIC04NTksNiArODY1LDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODcxLDYwICs4NzgsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC05NDAsNiArODk0LDEyIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtOTQ4LDggKzkwOCwxMCBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTAwMCw2ICs5NjIsNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KIENPTkZJR19MQ0RfTFRWMzUwUVY9bQpAQCAtMTE1MiwxMyArMTExNSwxNSBAQAogQ09ORklHX1VTQl9NVVNCX1NPQz15CiAKICMKLSMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0CiAjCiBDT05GSUdfVVNCX01VU0JfSE9TVD15CiAjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX01VU0JfRE1BX1BPTEw9eQogIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMTcwLDE4ICsxMTM1LDMzIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEyMTMsNiArMTE5MywzMCBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTI0NywxMiArMTI1MSwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xNDczLDYgKzE0NzksMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNTEyLDYgKzE1MjUsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCmluZGV4IDBhMmEwMGQuLjRjNDFlMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM2LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzMywxMCArMTMyLDE1IEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKIENPTkZJR19CRl9SRVZfTUlOPTMKIENPTkZJR19CRl9SRVZfTUFYPTYKQEAgLTE1Nyw3ICsxNjEsNiBAQAogIyBDT05GSUdfQkZJTjUzM19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IODYwNl9IVlNJU1RFTUFTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41MzJfSVAwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTMzX0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzMy8yLzEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMjc3LDcgKzI4MCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQpAQCAtNTc1LDYgKzU3OCw3IEBACiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02MDgsNiArNjEyLDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03MTQsNiArNzE5LDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzI2LDIyICs3MzIsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtNzUyLDYgKzc0MywxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTc2MCw3ICs3NTcsNyBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODI2LDYgKzgyMyw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldApAQCAtMTA0Niw2ICsxMDQ0LDEzIEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTA4NCw2ICsxMDg5LDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBlYjAyNzU4Li45YzQ4MmNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNiwxNCArMzYsMTMgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzMsMTAgKzEzMiwxNSBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0zCiBDT05GSUdfQkZfUkVWX01BWD02CkBAIC0xNTcsNyArMTYxLDYgQEAKICMgQ09ORklHX0JGSU41MzNfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAogIyBDT05GSUdfSDg2MDZfSFZTSVNURU1BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTMyX0lQMFggaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19CRjUzM19CT0FSRCBpcyBub3Qgc2V0CiAKICMKICMgQkY1MzMvMi8xIFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTI3Nyw3ICsyODAsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0JGSU5fR1BUSU1FUlMgaXMgbm90IHNldAorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTU3OCw3ICs1ODEsOSBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTYxMiw2ICs2MTcsNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQVg4ODE4MCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKQEAgLTY3MSwxMCArNjc3LDEwIEBACiAjIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NJTVBMRV9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUEkgaXMgbm90IHNldAotQ09ORklHX0JGSU5fU1BPUlQ9eQorQ09ORklHX0JGNXh4X1BQST1tCitDT05GSUdfQkZJTl9TUE9SVD1tCiAjIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAotQ09ORklHX1RXSV9MQ0Q9bQorIyBDT05GSUdfVFdJX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KIENPTkZJR19TSU1QTEVfR1BJTz1tCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC03NjUsNiArNzcxLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzc3LDYwICs3ODQsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC04NDEsNiArNzk1LDEyIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODUxLDYgKzgxMSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC05MDksNiArODcwLDcgQEAKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxOCwxMiArOTgwLDE0IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKQEAgLTEyNDQsNiArMTIwOCwxMyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTEyODIsNiArMTI1Myw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggOWU2MmI5Zi4uNTkxZjZlZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgotIyBUdWUgRGVjIDMwIDE3OjI0OjM3IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM3LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NywxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzNCwxMCArMTMyLDE1IEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKIENPTkZJR19CRl9SRVZfTUlOPTIKIENPTkZJR19CRl9SRVZfTUFYPTMKQEAgLTE4NCw3ICsxODcsNiBAQAogIyBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9UQ00gaXMgbm90IHNldAogIyBDT05GSUdfUE5BVjEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTVNJR19NSU5PVEFVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTM3X0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC01ODksNyArNTkxLDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02NDQsNiArNjQ4LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03MDYsMTAgKzcxMSwxMCBAQAogIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19CRjV4eF9QUEk9bQogQ09ORklHX0JGSU5fU1BPUlQ9bQogIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKLUNPTkZJR19UV0lfTENEPW0KKyMgQ09ORklHX1RXSV9MQ0QgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRT1tCiBDT05GSUdfU0lNUExFX0dQSU89bQogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtODA4LDYgKzgxMyw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMCw2MCArODI2LDcgQEAKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtODg0LDYgKzgzNywxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTg5NCw2ICs4NTMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtOTU3LDYgKzkxNyw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKQEAgLTEwNzQsMTIgKzEwMzUsMTQgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldApAQCAtMTMwMCw2ICsxMjYzLDEzIEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTMzOCw2ICsxMzA4LDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZwppbmRleCBkZDZhZDZiLi4xYThlOGMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC00Miw3ICs0Miw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU1LDEzICs1NSwxMyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX0FJTz15CisjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldApAQCAtMTMyLDEwICsxMzIsMTUgQEAKIENPTkZJR19CRjUzOD15CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKIENPTkZJR19CRl9SRVZfTUlOPTQKIENPTkZJR19CRl9SRVZfTUFYPTUKQEAgLTI5Myw3ICsyOTgsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19CRklOX0dQVElNRVJTPXkKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CkBAIC0zNTQsNyArMzU5LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNjQ1LDYgKzY0OSw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKQEAgLTY5MCw3ICs2OTUsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEk9eQotQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OT1tCitDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5PXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKQEAgLTcxOCw4ICs3MjMsOCBAQAogIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1NQT1JUPXkKK0NPTkZJR19CRjV4eF9QUEk9bQorQ09ORklHX0JGSU5fU1BPUlQ9bQogIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXSV9MQ0QgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRT1tCkBAIC03NjIsNyArNzY3LDcgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKK0NPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CkBAIC03NzQsNyArNzc5LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCi1DT05GSUdfSTJDX0JMQUNLRklOX1RXST15CitDT05GSUdfSTJDX0JMQUNLRklOX1RXST1tCiBDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haPTEwMAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC04MTgsNiArODIzLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODMwLDYwICs4MzYsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC04OTQsNiArODQ3LDEyIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtOTA0LDYgKzg2Myw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC05NTQsNiArOTE0LDcgQEAKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNywxMiArOTY4LDE0IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKQEAgLTEyMzMsNiArMTE5NiwxMyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xMjcxLDYgKzEyNDEsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCmluZGV4IDZiYzJmYjEuLjJjZDFjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM2LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzMywxNiArMTMyLDIxIEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiBDT05GSUdfQkY1NDg9eQorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCi1DT05GSUdfQkZfUkVWXzBfMD15CisjIENPTkZJR19CRl9SRVZfMF8wIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzEgaXMgbm90IHNldAotIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWXzBfMj15CiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfNSBpcyBub3Qgc2V0CkBAIC0zNDgsNyArMzUyLDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19CRklOX0dQVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNPXkKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8xTSBpcyBub3Qgc2V0CkBAIC00MTMsNyArNDE3LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNTEyLDkgKzUxNSw5IEBACiAjCiBDT05GSUdfSVJUVFlfU0lSPW0KIENPTkZJR19CRklOX1NJUj1tCi1DT05GSUdfQkZJTl9TSVIzPXkKICMgQ09ORklHX0JGSU5fU0lSMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NJUjIgaXMgbm90IHNldAorQ09ORklHX0JGSU5fU0lSMz15CiBDT05GSUdfU0lSX0JGSU5fRE1BPXkKICMgQ09ORklHX1NJUl9CRklOX1BJTyBpcyBub3Qgc2V0CiAKQEAgLTUzOCw3ICs1NDEsOCBAQAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtNTU0LDcgKzU1OCw5IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldApAQCAtNjY4LDcgKzY3NCw5IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNzQzLDYgKzc1MSw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQpAQCAtNzUxLDggKzc2MCwxNiBAQAogIyBXaXJlbGVzcyBMQU4KICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9bQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPW0KK0NPTkZJR19QT1dFUk9GMl9CTE9DS1NJWkVfT05MWT15CisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODQ0LDggKzg2MSw4IEBACiAjIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NJTVBMRV9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkY1eHhfUFBJPW0KK0NPTkZJR19CRklOX1NQT1JUPW0KICMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RNQV9JTlRFUkZBQ0U9bQpAQCAtOTUwLDYgKzk2Nyw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2Miw2MCArOTgwLDcgQEAKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtMTAzMSw2ICs5OTYsMTIgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCkBAIC0xMDM5LDggKzEwMTAsMTAgQEAKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTEwOTIsNiArMTA2NSw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNDMsMTUgKzEyMTcsMTUgQEAKIENPTkZJR19VU0JfTVVTQl9TT0M9eQogCiAjCi0jIEJsYWNrZmluIGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0IgU3VwcG9ydAogIwogQ09ORklHX1VTQl9NVVNCX0hPU1Q9eQogIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NVVNCX1BJT19PTkxZPXkKK0NPTkZJR19NVVNCX0RNQV9QT0xMPXkKICMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI2MywxMSArMTIzNywxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogCiAjCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKIENPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzIxLDcgKzEyOTUsMzEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotQ09ORklHX01NQz1tCisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKQEAgLTEzMzcsOCArMTMzNSw5IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotQ09ORklHX1NESF9CRklOPW0KK0NPTkZJR19TREhfQkZJTj15CiAjIENPTkZJR19TREhfQkZJTl9NSVNTSU5HX0NNRF9QVUxMVVBfV09SS0FST1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19TREhfQkZJTl9FTkFCTEVfU0RJT19JUlEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMzczLDEyICsxMzcyLDE0IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKQEAgLTE2NDEsNiArMTY0MiwxMyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2ODAsNiArMTY4OCw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKaW5kZXggNjk3MTRmYi4uNGE2ZWE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LjcKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldApAQCAtMzYsMTQgKzM2LDEzIEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU2LDEzICs1NSwxMyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX0FJTz15CisjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldApAQCAtMTMzLDEwICsxMzIsMTUgQEAKICMgQ09ORklHX0JGNTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQyTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0NE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDdNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldAogQ09ORklHX0JGNTYxPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0zCkBAIC0xNjYsNyArMTcwLDYgQEAKIENPTkZJR19CRklONTYxX0VaS0lUPXkKICMgQ09ORklHX0JGSU41NjFfVEVQTEEgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTYxX0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjU2MSBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC0zMTYsNyArMzE5LDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19CRklOX0dQVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CkBAIC0zODIsNyArMzg1LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNjEyLDYgKzYxNCw3IEBACiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02NDUsNiArNjQ4LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03NTEsNiArNzU1LDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzYzLDIyICs3NjgsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtNzg5LDYgKzc3OSwxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTc5Nyw3ICs3OTMsNyBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTA0MSw2ICsxMDM3LDEzIEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTA3OSw2ICsxMDgyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcKaW5kZXggMDE3YzZlYS4uZWYxYTJjOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZwpAQCAtNDMsNyArNDMsNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01Niw3ICs1Niw3IEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZwppbmRleCBkODgwZWY3Li5lMmZjNTg4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKQEAgLTQzLDcgKzQzLDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU2LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwppbmRleCAwODUyMTFiLi42NWE4YmJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnCmluZGV4IDc1MDIwM2UuLjliN2U5ZDc4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwpAQCAtNDYsNyArNDYsNyBAQAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01Nyw3ICs1Nyw3IEBACiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcKaW5kZXggZGVjOGE3ZC4uNTY5NTIzYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZwppbmRleCBmNDEwNDMwLi4wMzViNjM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwppbmRleCAzNDZiYzdhLi43MDE1ZTQyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZwppbmRleCBiZDU1M2RhLi5kZmM4ZTFkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKQEAgLTQ1LDcgKzQ1LDcgQEAKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU2LDcgKzU2LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCmluZGV4IDdkYjkzODcuLjk1YTVmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcKaW5kZXggYWQwOTY3MC4uNzhlMjQwOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM1LDEzICszNSwxMiBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTMsMTMgKzUyLDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzAsMTAgKzEyOSwxNSBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0yCiBDT05GSUdfQkZfUkVWX01BWD0zCkBAIC0xODAsNyArMTg0LDYgQEAKICMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfVENNIGlzIG5vdCBzZXQKIENPTkZJR19QTkFWMTA9eQogIyBDT05GSUdfQ0FNU0lHX01JTk9UQVVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQkY1MzdfQk9BUkQgaXMgbm90IHNldAogCiAjCiAjIEJGNTM3IFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTM0MSw3ICszNDQsNiBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC01MzgsNyArNTQwLDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01OTMsNiArNTk3LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03NzYsNiArNzgxLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk5LDYgKzgwNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKQEAgLTg0NSw2ICs4NTIsMTIgQEAKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODUzLDggKzg2NiwxMCBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtOTEwLDYgKzkyNSw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKQEAgLTk2Niw3ICs5ODIsNyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKQEAgLTEwMDMsMTIgKzEwMTksMTQgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldApAQCAtMTE5Niw2ICsxMjE0LDEwIEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xMjMwLDYgKzEyNTIsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZwppbmRleCBhNDY1MjljLi4yYmMwNzc5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1NSVjFfZGVmY29uZmlnCkBAIC00OSw3ICs0OSw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTYxLDcgKzYxLDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwppbmRleCA5N2ExZjFkLi5lNjViM2E0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwpAQCAtMzksNyArMzksNyBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTUxLDEzICs1MSwxMyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX0FJTz15CisjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCmluZGV4IDEzMDZlNmIuLjAyOTJkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKQEAgLTExMCw3ICsxMTAsNyBAQAogc3RydWN0IGJmaW41eHhfc3BpX21hc3RlciB7CiAJdTE2IG51bV9jaGlwc2VsZWN0OwogCXU4IGVuYWJsZV9kbWE7Ci0JdTE2IHBpbl9yZXFbNF07CisJdTE2IHBpbl9yZXFbN107CiB9OwogCiAvKiBzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEgZm9yIFNQSSBzbGF2ZSBkZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3Nwb3J0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc3BvcnQuaAppbmRleCA2NWE2NTFkLi5iNTU4OTA4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc3BvcnQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc3BvcnQuaApAQCAtOSw2ICs5LDEzIEBACiAjaWZuZGVmIF9fQkZJTl9TUE9SVF9IX18KICNkZWZpbmUgX19CRklOX1NQT1JUX0hfXwogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2VuZGlmCisKICNkZWZpbmUgU1BPUlRfTUFKT1IJMjM3CiAjZGVmaW5lIFNQT1JUX05SX0RFVlMJMgogCkBAIC0xMTksNyArMTI2LDcgQEAKIAlpbnQgdHhfbGVuOwogCWludCB0eF9zZW50OwogCi0JaW50IHNwb3J0X2Vycl9pcnE7CisJaW50IGVycl9pcnE7CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIG11dHVhbCBleGNsdXNpb24gc2VtYXBob3JlICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBkNGEwODJlLi5mZTEzOTYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMTEwLDcgKzExMCw3IEBACiAqIE1PRElGSUNBVElPTiBISVNUT1JZIDoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIEJGNTQ4X0ZBTUlMWQorI2lmbmRlZiBDT05GSUdfQkY1NHgKIHZvaWQgc2V0X2dwaW9fZGlyKHVuc2lnbmVkLCB1bnNpZ25lZCBzaG9ydCk7CiB2b2lkIHNldF9ncGlvX2luZW4odW5zaWduZWQsIHVuc2lnbmVkIHNob3J0KTsKIHZvaWQgc2V0X2dwaW9fcG9sYXIodW5zaWduZWQsIHVuc2lnbmVkIHNob3J0KTsKQEAgLTMwMyw3ICszMDMsMTAgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gKGdwaW8gKyBHUElPX0lSUV9CQVNFKTsKKwlpZiAobGlrZWx5KGdwaW8gPCBNQVhfQkxBQ0tGSU5fR1BJT1MpKQorCQlyZXR1cm4gZ3BpbyArIEdQSU9fSVJRX0JBU0U7CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncHRpbWVycy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncHRpbWVycy5oCmluZGV4IDA1MjBkMmEuLmIwZjg0N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3B0aW1lcnMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwdGltZXJzLmgKQEAgLTE1LDE2ICsxNSwxNiBAQAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogCiAvKgotICogQkY1MzcvQkY1Mjc6IDggdGltZXJzOgorICogQkY1MXgvQkY1MngvQkY1Mzc6IDggdGltZXJzOgogICovCi0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTF4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpCiAjIGRlZmluZSBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMgOAogIyBkZWZpbmUgVElNRVIwX0dST1VQX1JFRyAgICAgIFRJTUVSX0VOQUJMRQogI2VuZGlmCiAvKgogICogQkY1NHg6IDExIHRpbWVycyAoQkY1NDI6IDggdGltZXJzKToKICAqLwotI2lmIGRlZmluZWQoQkY1NDhfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQogIyBpZmRlZiBDT05GSUdfQkY1NDIKICMgIGRlZmluZSBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMgOAogIyBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCmluZGV4IDUxZGFjNTUuLmEwNjc4ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCkBAIC02OSw3ICs2OSw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fcG9ydF90ICogY29uc3QgZ3Bpb19hcnJheVtdID0gewogI2lmIGRlZmluZWQoQkY1MzNfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTM4X0ZBTUlMWSkKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopIEZJT19GTEFHX0QsCi0jZWxpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1MngpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopIFBPUlRGSU8sCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKSBQT1JUR0lPLAogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKikgUE9SVEhJTywKQEAgLTc3LDcgKzc3LDcgQEAKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopIEZJTzBfRkxBR19ELAogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKikgRklPMV9GTEFHX0QsCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKSBGSU8yX0ZMQUdfRCwKLSNlbGlmIGRlZmluZWQoQkY1NDhfRkFNSUxZKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKVBPUlRBX0ZFUiwKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopUE9SVEJfRkVSLAogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKilQT1JUQ19GRVIsCkBAIC05Myw3ICs5Myw3IEBACiAjZW5kaWYKIH07CiAKLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgKiBjb25zdCBwb3J0X2ZlcltdID0gewogCSh1bnNpZ25lZCBzaG9ydCAqKSBQT1JURl9GRVIsCiAJKHVuc2lnbmVkIHNob3J0ICopIFBPUlRHX0ZFUiwKQEAgLTEwOSwxMSArMTA5LDExIEBACiAKIHN0YXRpYyBjb25zdAogdTggcG11eF9vZmZzZXRbXVsxNl0gPSB7Ci0jICBpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkKKyMgIGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KQogCXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMiwgNCwgNiwgOCwgOCwgMTAsIDEwIH0sIC8qIFBPUlRGICovCiAJeyAwLCAwLCAwLCAwLCAwLCAyLCAyLCA0LCA0LCA2LCA4LCAxMCwgMTAsIDEwLCAxMiwgMTIgfSwgLyogUE9SVEcgKi8KIAl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDQsIDQsIDQsIDQsIDQsIDQsIDQgfSwgLyogUE9SVEggKi8KLSMgIGVsaWYgZGVmaW5lZChCRjUxOF9GQU1JTFkpCisjICBlbGlmIGRlZmluZWQoQ09ORklHX0JGNTF4KQogCXsgMCwgMiwgMiwgMiwgMiwgMiwgMiwgNCwgNiwgNiwgNiwgOCwgOCwgOCwgOCwgMTAgfSwgLyogUE9SVEYgKi8KIAl7IDAsIDAsIDAsIDIsIDQsIDYsIDYsIDYsIDgsIDEwLCAxMCwgMTIsIDE0LCAxNCwgMTQsIDE0IH0sIC8qIFBPUlRHICovCiAJeyAwLCAwLCAwLCAwLCAyLCAyLCA0LCA2LCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAgfSwgLyogUE9SVEggKi8KQEAgLTEzOSw3ICsxMzksNyBAQAogCiBpbmxpbmUgaW50IGNoZWNrX2dwaW8odW5zaWduZWQgZ3BpbykKIHsKLSNpZiBkZWZpbmVkKEJGNTQ4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKIAlpZiAoZ3BpbyA9PSBHUElPX1BCMTUgfHwgZ3BpbyA9PSBHUElPX1BDMTQgfHwgZ3BpbyA9PSBHUElPX1BDMTUKIAkgICAgfHwgZ3BpbyA9PSBHUElPX1BIMTQgfHwgZ3BpbyA9PSBHUElPX1BIMTUKIAkgICAgfHwgZ3BpbyA9PSBHUElPX1BKMTQgfHwgZ3BpbyA9PSBHUElPX1BKMTUpCkBAIC0xODcsMTMgKzE4NywxMyBAQAogCWlmIChjaGVja19ncGlvKGdwaW8pKQogCQlyZXR1cm47CiAKLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJaWYgKHVzYWdlID09IEdQSU9fVVNBR0UpCiAJCSpwb3J0X2ZlcltncGlvX2JhbmsoZ3BpbyldICY9IH5ncGlvX2JpdChncGlvKTsKIAllbHNlCiAJCSpwb3J0X2ZlcltncGlvX2JhbmsoZ3BpbyldIHw9IGdwaW9fYml0KGdwaW8pOwogCVNTWU5DKCk7Ci0jZWxpZiBkZWZpbmVkKEJGNTQ4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTR4KQogCWlmICh1c2FnZSA9PSBHUElPX1VTQUdFKQogCQlncGlvX2FycmF5W2dwaW9fYmFuayhncGlvKV0tPnBvcnRfZmVyICY9IH5ncGlvX2JpdChncGlvKTsKIAllbHNlCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJfQogCX0KIH0KLSNlbGlmIGRlZmluZWQoQkY1NDhfRkFNSUxZKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCiBpbmxpbmUgdm9pZCBwb3J0bXV4X3NldHVwKHVuc2lnbmVkIHNob3J0IHBlcikKIHsKIAl1MzIgcG11eDsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAJcmV0dXJuIChwbXV4ID4+ICgyICogZ3Bpb19zdWJfbihpZGVudCkpICYgMHgzKTsKIH0KLSNlbGlmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIGlubGluZSB2b2lkIHBvcnRtdXhfc2V0dXAodW5zaWduZWQgc2hvcnQgcGVyKQogewogCXUxNiBwbXV4LCBpZGVudCA9IFBfSURFTlQocGVyKSwgZnVuY3Rpb24gPSBQX0ZVTkNUMk1VWChwZXIpOwpAQCAtMzIyLDcgKzMyMiw3IEBACiBhcmNoX2luaXRjYWxsKGJmaW5fZ3Bpb19pbml0KTsKIAogCi0jaWZuZGVmIEJGNTQ4X0ZBTUlMWQorI2lmbmRlZiBDT05GSUdfQkY1NHgKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBGVU5DVElPTlM6IEJsYWNrZmluIEdlbmVyYWwgUHVycG9zZSBQb3J0cyBBY2Nlc3MgRnVuY3Rpb25zCkBAIC00ODksNyArNDg5LDcgQEAKIAlJUlFfUFJPR19JTlRCLCBJUlFfUE9SVEdfSU5UQiwgSVJRX01BQ19UWAogI2VsaWYgZGVmaW5lZChCRjUzOF9GQU1JTFkpCiAJSVJRX1BPUlRGX0lOVEIKLSNlbGlmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAlJUlFfUE9SVEZfSU5UQiwgSVJRX1BPUlRHX0lOVEIsIElSUV9QT1JUSF9JTlRCCiAjZWxpZiBkZWZpbmVkKEJGNTYxX0ZBTUlMWSkKIAlJUlFfUFJPRzBfSU5UQiwgSVJRX1BST0cxX0lOVEIsIElSUV9QUk9HMl9JTlRCCkBAIC01ODYsNyArNTg2LDcgQEAKIAkJZ3Bpb19hcnJheVtiYW5rXS0+bWFza2IgPSAwOwogCiAJCWlmIChtYXNrKSB7Ci0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogCQkJZ3Bpb19iYW5rX3NhdmVkW2JhbmtdLmZlciAgID0gKnBvcnRfZmVyW2JhbmtdOwogI2VuZGlmCiAJCQlncGlvX2Jhbmtfc2F2ZWRbYmFua10uaW5lbiAgPSBncGlvX2FycmF5W2JhbmtdLT5pbmVuOwpAQCAtNjMxLDcgKzYzMSw3IEBACiAJCWJhbmsgPSBncGlvX2JhbmsoaSk7CiAKIAkJaWYgKG1hc2spIHsKLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJCQkqcG9ydF9mZXJbYmFua10gICAJPSBncGlvX2Jhbmtfc2F2ZWRbYmFua10uZmVyOwogI2VuZGlmCiAJCQlncGlvX2FycmF5W2JhbmtdLT5pbmVuICA9IGdwaW9fYmFua19zYXZlZFtiYW5rXS5pbmVuOwpAQCAtNjU3LDkgKzY1Nyw5IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9CTEFDS0ZJTl9HUElPUzsgaSArPSBHUElPX0JBTktTSVpFKSB7CiAJCWJhbmsgPSBncGlvX2JhbmsoaSk7CiAKLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJCWdwaW9fYmFua19zYXZlZFtiYW5rXS5mZXIgPSAqcG9ydF9mZXJbYmFua107Ci0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAkJZ3Bpb19iYW5rX3NhdmVkW2JhbmtdLm11eCA9ICpwb3J0X211eFtiYW5rXTsKICNlbHNlCiAJCWlmIChiYW5rID09IDApCkBAIC02ODUsOCArNjg1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JMQUNLRklOX0dQSU9TOyBpICs9IEdQSU9fQkFOS1NJWkUpIHsKIAkJYmFuayA9IGdwaW9fYmFuayhpKTsKIAotI2lmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUxOF9GQU1JTFkpCi0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCisjaWYgZGVmaW5lZChDT05GSUdfQkY1MngpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogCQkqcG9ydF9tdXhbYmFua10gPSBncGlvX2Jhbmtfc2F2ZWRbYmFua10ubXV4OwogI2Vsc2UKIAkJaWYgKGJhbmsgPT0gMCkKQEAgLTcxMCw3ICs3MTAsNyBAQAogCiAKICNlbmRpZgotI2Vsc2UgLyogQkY1NDhfRkFNSUxZICovCisjZWxzZSAvKiBDT05GSUdfQkY1NHggKi8KICNpZmRlZiBDT05GSUdfUE0KIAogdTMyIGJmaW5fcG1fc3RhbmRieV9zZXR1cCh2b2lkKQpAQCAtNzYyLDcgKzc2Miw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdldF9ncGlvX2Rpcik7CiAKLSNlbmRpZiAvKiBCRjU0OF9GQU1JTFkgKi8KKyNlbmRpZiAvKiBDT05GSUdfQkY1NHggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCkBAIC04MDIsNyArODAyLDggQEAKIAkgKi8KIAlpZiAodW5saWtlbHkoIWNoZWNrX2dwaW8oaWRlbnQpICYmCiAJICAgIHJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhpZGVudCldICYgZ3Bpb19iaXQoaWRlbnQpKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzOiBQZXJpcGhlcmFsICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYXMgR1BJTyBieSAlcyAhXG4iLAogCQkgICAgICAgX19mdW5jX18sIGlkZW50LCBnZXRfbGFiZWwoaWRlbnQpKTsKQEAgLTgxNyw3ICs4MTgsNyBAQAogCQkgKiBiZSByZXF1ZXN0ZWQgYW5kIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzCiAJCSAqLwogCi0jaWZkZWYgQkY1NDhfRkFNSUxZCisjaWZkZWYgQ09ORklHX0JGNTR4CiAJCWlmICghKChwZXIgJiBQX01BWVNIQVJFKSAmJiBnZXRfcG9ydG11eChwZXIpID09IFBfRlVOQ1QyTVVYKHBlcikpKSB7CiAjZWxzZQogCQlpZiAoIShwZXIgJiBQX01BWVNIQVJFKSkgewpAQCAtODMwLDcgKzgzMSw4IEBACiAJCQlpZiAoY21wX2xhYmVsKGlkZW50LCBsYWJlbCkgPT0gMCkKIAkJCQlnb3RvIGFueXdheTsKIAotCQkJZHVtcF9zdGFjaygpOworCQkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJCQlkdW1wX3N0YWNrKCk7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IFBlcmlwaGVyYWwgJWQgZnVuY3Rpb24gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBieSAlcyAhXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBpZGVudCwgUF9GVU5DVDJNVVgocGVyKSwgZ2V0X2xhYmVsKGlkZW50KSk7CkBAIC05NDYsMTQgKzk0OCwxNiBAQAogCX0KIAogCWlmICh1bmxpa2VseShyZXNlcnZlZF9ncGlvX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSB7Ci0JCWR1bXBfc3RhY2soKTsKKwkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJCWR1bXBfc3RhY2soKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBieSAlcyAhXG4iLAogCQkgICAgICAgZ3BpbywgZ2V0X2xhYmVsKGdwaW8pKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAodW5saWtlbHkocmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImJmaW4tZ3BpbzogR1BJTyAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIGFzIFBlcmlwaGVyYWwgYnkgJXMgIVxuIiwKIAkJICAgICAgIGdwaW8sIGdldF9sYWJlbChncGlvKSk7CkBAIC05NjQsNyArOTY4LDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBhcyBncGlvLWlycSEiCiAJCSAgICAgICAiIChEb2N1bWVudGF0aW9uL2JsYWNrZmluL2JmaW4tZ3Bpby1ub3Rlcy50eHQpXG4iLCBncGlvKTsKIAl9Ci0jaWZuZGVmIEJGNTQ4X0ZBTUlMWQorI2lmbmRlZiBDT05GSUdfQkY1NHgKIAllbHNlIHsJLyogUmVzZXQgUE9MQVIgc2V0dGluZyB3aGVuIGFjcXVpcmluZyBhIGdwaW8gZm9yIHRoZSBmaXJzdCB0aW1lICovCiAJCXNldF9ncGlvX3BvbGFyKGdwaW8sIDApOwogCX0KQEAgLTk5Myw3ICs5OTcsOCBAQAogCWxvY2FsX2lycV9zYXZlX2h3KGZsYWdzKTsKIAogCWlmICh1bmxpa2VseSghKHJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpKSB7Ci0JCWR1bXBfc3RhY2soKTsKKwkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJCWR1bXBfc3RhY2soKTsKIAkJZ3Bpb19lcnJvcihncGlvKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC0xMDE3LDcgKzEwMjIsOCBAQAogCWxvY2FsX2lycV9zYXZlX2h3KGZsYWdzKTsKIAogCWlmICh1bmxpa2VseShyZXNlcnZlZF9ncGlvX2lycV9tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImJmaW4tZ3BpbzogR1BJTyAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIGFzIGdwaW8taXJxICFcbiIsCiAJCSAgICAgICBncGlvKTsKQEAgLTEwMjUsNyArMTAzMSw4IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmICh1bmxpa2VseShyZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSB7Ci0JCWR1bXBfc3RhY2soKTsKKwkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJCWR1bXBfc3RhY2soKTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYXMgUGVyaXBoZXJhbCBieSAlcyAhXG4iLAogCQkgICAgICAgZ3BpbywgZ2V0X2xhYmVsKGdwaW8pKTsKQEAgLTEwNTcsNyArMTA2NCw4IEBACiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCiAJaWYgKHVubGlrZWx5KCEocmVzZXJ2ZWRfZ3Bpb19pcnFfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpKSB7Ci0JCWR1bXBfc3RhY2soKTsKKwkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJCWR1bXBfc3RhY2soKTsKIAkJZ3Bpb19lcnJvcihncGlvKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC0xMDcyLDcgKzEwODAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19iZmluX2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCiB7Ci0jaWZkZWYgQkY1NDhfRkFNSUxZCisjaWZkZWYgQ09ORklHX0JGNTR4CiAJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5kaXJfY2xlYXIgPSBncGlvX2JpdChncGlvKTsKICNlbHNlCiAJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5kaXIgJj0gfmdwaW9fYml0KGdwaW8pOwpAQCAtMTEwMCwxMyArMTEwOCwxMyBAQAogCiB2b2lkIGJmaW5fZ3Bpb19pcnFfcHJlcGFyZSh1bnNpZ25lZCBncGlvKQogewotI2lmZGVmIEJGNTQ4X0ZBTUlMWQorI2lmZGVmIENPTkZJR19CRjU0eAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZW5kaWYKIAogCXBvcnRfc2V0dXAoZ3BpbywgR1BJT19VU0FHRSk7CiAKLSNpZmRlZiBCRjU0OF9GQU1JTFkKKyNpZmRlZiBDT05GSUdfQkY1NHgKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAJX19iZmluX2dwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOwogCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKQEAgLTExMzUsNyArMTE0Myw3IEBACiAKIAlncGlvX2FycmF5W2dwaW9fYmFuayhncGlvKV0tPmluZW4gJj0gfmdwaW9fYml0KGdwaW8pOwogCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLSNpZmRlZiBCRjU0OF9GQU1JTFkKKyNpZmRlZiBDT05GSUdfQkY1NHgKIAlncGlvX2FycmF5W2dwaW9fYmFuayhncGlvKV0tPmRpcl9zZXQgPSBncGlvX2JpdChncGlvKTsKICNlbHNlCiAJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5kaXIgfD0gZ3Bpb19iaXQoZ3Bpbyk7CkBAIC0xMTUwLDcgKzExNTgsNyBAQAogCiBpbnQgYmZpbl9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQogewotI2lmZGVmIEJGNTQ4X0ZBTUlMWQorI2lmZGVmIENPTkZJR19CRjU0eAogCXJldHVybiAoMSAmIChncGlvX2FycmF5W2dwaW9fYmFuayhncGlvKV0tPmRhdGEgPj4gZ3Bpb19zdWJfbihncGlvKSkpOwogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNGI0MzQxZC4uMjc5NTJhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xODMsNiArMTgzLDcgQEAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2V0ZXh0X2wxID0gLjsKIAl9CisJQVNTRVJUIChTSVpFT0YoLnRleHRfbDEpIDw9IEwxX0NPREVfTEVOR1RILCAiTDEgdGV4dCBvdmVyZmxvdyEiKQogCiAJLmRhdGFfbDEgTDFfREFUQV9BX1NUQVJUIDogQVQoTE9BREFERFIoLnRleHRfbDEpICsgU0laRU9GKC50ZXh0X2wxKSkKIAl7CkBAIC0yMDAsNiArMjAxLDcgQEAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2Vic3NfbDEgPSAuOwogCX0KKwlBU1NFUlQgKFNJWkVPRiguZGF0YV9hX2wxKSA8PSBMMV9EQVRBX0FfTEVOR1RILCAiTDEgZGF0YSBBIG92ZXJmbG93ISIpCiAKIAkuZGF0YV9iX2wxIEwxX0RBVEFfQl9TVEFSVCA6IEFUKExPQURBRERSKC5kYXRhX2wxKSArIFNJWkVPRiguZGF0YV9sMSkpCiAJewpAQCAtMjE0LDYgKzIxNiw3IEBACiAJCS4gPSBBTElHTig0KTsKIAkJX19lYnNzX2JfbDEgPSAuOwogCX0KKwlBU1NFUlQgKFNJWkVPRiguZGF0YV9iX2wxKSA8PSBMMV9EQVRBX0JfTEVOR1RILCAiTDEgZGF0YSBCIG92ZXJmbG93ISIpCiAKIAlfX2wyX2xtYV9zdGFydCA9IExPQURBRERSKC5kYXRhX2JfbDEpICsgU0laRU9GKC5kYXRhX2JfbDEpOwogCkBAIC0yMzksNiArMjQyLDcgQEAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2Vic3NfbDIgPSAuOwogCX0KKwlBU1NFUlQgKFNJWkVPRigudGV4dF9kYXRhX2wxKSA8PSBMMl9MRU5HVEgsICJMMiBvdmVyZmxvdyEiKQogCiAJLyogRm9yY2UgdHJhaWxpbmcgYWxpZ25tZW50IG9mIG91ciBpbml0IHNlY3Rpb24gc28gdGhhdCB3aGVuIHdlCiAJICogZnJlZSBvdXIgaW5pdCBtZW1vcnksIHdlIGRvbid0IGxlYXZlIGJlaGluZCBhIHBhcnRpYWwgcGFnZS4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBkMWEyYjljLi4yNjdiYjdjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0zMiw4ICszMiw2IEBACiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCiAjZGVmaW5lIF9NQUNIX0JMQUNLRklOX0hfCiAKLSNkZWZpbmUgQkY1MThfRkFNSUxZCi0KICNpbmNsdWRlICJiZjUxOC5oIgogI2luY2x1ZGUgIm1lbV9tYXAuaCIKICNpbmNsdWRlICJkZWZCRjUxMi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKaW5kZXggOTUyMWUxNy4uZGZlNDkyZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCkBAIC00NSw0ICs0NSw3MSBAQAogCiAvKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1MTQgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCiAKKy8qIFJlbW92YWJsZSBTdG9yYWdlIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUlNJX1BXUl9DVEwoKSAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BXUl9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QV1JfQ1RMKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9QV1JfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NMS19DVEwoKQkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NMS19DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DTEtfQ1RMKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9DTEtfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0FSR1VNRU5UKCkgICAgICAgYmZpbl9yZWFkMzIoUlNJX0FSR1VNRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9BUkdVTUVOVCh2YWwpICAgYmZpbl93cml0ZTMyKFJTSV9BUkdVTUVOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NPTU1BTkQoKSAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NPTU1BTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NPTU1BTkQodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX0NPTU1BTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQX0NNRCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9SRVNQX0NNRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUF9DTUQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfUkVTUF9DTUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTAoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTApCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMCh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMSgpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UxKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UyKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UyKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTIodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTMoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMyh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfVElNRVIoKSAgICAgYmZpbl9yZWFkMzIoUlNJX0RBVEFfVElNRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfVElNRVIodmFsKSBiZmluX3dyaXRlMzIoUlNJX0RBVEFfVElNRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0xHVEgoKSAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0xHVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfTEdUSCh2YWwpICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfTEdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfQ1RMKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9DVEwodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9DTlQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfQ05UKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfU1RBVFVTKCkgICAgICAgICBiZmluX3JlYWQzMihSU0lfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9TVEFUVVModmFsKSAgICAgYmZpbl93cml0ZTMyKFJTSV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9TVEFUVVNfQ0xSKCkgICAgIGJmaW5fcmVhZDE2KFJTSV9TVEFUVVNDTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfU1RBVFVTX0NMUih2YWwpIGJmaW5fd3JpdGUxNihSU0lfU1RBVFVTQ0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9NQVNLMCgpICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9NQVNLMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfTUFTSzAodmFsKSAgICAgIGJmaW5fd3JpdGUzMihSU0lfTUFTSzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9NQVNLMSgpICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9NQVNLMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfTUFTSzEodmFsKSAgICAgIGJmaW5fd3JpdGUzMihSU0lfTUFTSzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9GSUZPX0NOVCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9GSUZPX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRklGT19DTlQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfRklGT19DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DRUFUQV9DVEwoKSAgICAgIGJmaW5fcmVhZDE2KFJTSV9DRUFUQV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DRUFUQV9DVEwodmFsKSAgYmZpbl93cml0ZTE2KFJTSV9DRUFUQV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfRklGTygpICAgICAgICAgICBiZmluX3JlYWQzMihSU0lfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRklGTyh2YWwpICAgICAgIGJmaW5fd3JpdGUzMihSU0lfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0VfU1RBVFVTKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0VTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9FX1NUQVRVUyh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9FU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0VfTUFTSygpICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0VNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9FX01BU0sodmFsKSAgICAgYmZpbl93cml0ZTE2KFJTSV9FTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NGRygpICAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0ZHKHZhbCkgICAgICAgIGJmaW5fd3JpdGUxNihSU0lfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkRfV0FJVF9FTigpICAgICBiZmluX3JlYWQxNihSU0lfUkRfV0FJVF9FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkRfV0FJVF9FTih2YWwpIGJmaW5fd3JpdGUxNihSU0lfUkRfV0FJVF9FTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDAoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDAodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQxKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQxKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMigpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMih2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDMoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDModmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ0KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ0KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ0KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ0LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENSgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENSh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDYoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDYodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ3KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ3KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ3KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ3LCB2YWwpCisKICNlbmRpZiAvKiBfQ0RFRl9CRjUxNF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCA0ZTI2Y2NmLi4xNGRmNDNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTIxMCw0ICsyMTAsNzEgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0FCT1JUKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0FCT1JUKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0FCT1JUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19BQk9SVCwgdmFsKQogCisvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUFdSX0NUTCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfUFdSX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DTEtfQ1RMKCkJICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DTEtfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0xLX0NUTCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfQ0xLX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9BUkdVTUVOVCgpICAgICAgIGJmaW5fcmVhZDMyKFJTSV9BUkdVTUVOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQVJHVU1FTlQodmFsKSAgIGJmaW5fd3JpdGUzMihSU0lfQVJHVU1FTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DT01NQU5EKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DT01NQU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DT01NQU5EKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9DT01NQU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUF9DTUQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfUkVTUF9DTUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BfQ01EKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX1JFU1BfQ01ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UwKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UwKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTAodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTEoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMSh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMigpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UyKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UzKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UzKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTModmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX1RJTUVSKCkgICAgIGJmaW5fcmVhZDMyKFJTSV9EQVRBX1RJTUVSKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX1RJTUVSKHZhbCkgYmZpbl93cml0ZTMyKFJTSV9EQVRBX1RJTUVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9MR1RIKCkgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9MR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0xHVEgodmFsKSAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0xHVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0NUTCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfQ1RMKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfQ05UKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0NOVCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1NUQVRVUygpICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfU1RBVFVTKHZhbCkgICAgIGJmaW5fd3JpdGUzMihSU0lfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfU1RBVFVTX0NMUigpICAgICBiZmluX3JlYWQxNihSU0lfU1RBVFVTQ0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1NUQVRVU19DTFIodmFsKSBiZmluX3dyaXRlMTYoUlNJX1NUQVRVU0NMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfTUFTSzAoKSAgICAgICAgICBiZmluX3JlYWQzMihSU0lfTUFTSzApCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX01BU0swKHZhbCkgICAgICBiZmluX3dyaXRlMzIoUlNJX01BU0swLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfTUFTSzEoKSAgICAgICAgICBiZmluX3JlYWQzMihSU0lfTUFTSzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX01BU0sxKHZhbCkgICAgICBiZmluX3dyaXRlMzIoUlNJX01BU0sxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfRklGT19DTlQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfRklGT19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0ZJRk9fQ05UKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0ZJRk9fQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0VBVEFfQ1RMKCkgICAgICBiZmluX3JlYWQxNihSU0lfQ0VBVEFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0VBVEFfQ1RMKHZhbCkgIGJmaW5fd3JpdGUxNihSU0lfQ0VBVEFfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0ZJRk8oKSAgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0ZJRk8odmFsKSAgICAgICBiZmluX3dyaXRlMzIoUlNJX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9FX1NUQVRVUygpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9FU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRV9TVEFUVVModmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfRVNUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9FX01BU0soKSAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9FTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRV9NQVNLKHZhbCkgICAgIGJmaW5fd3JpdGUxNihSU0lfRU1BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DRkcoKSAgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NGRyh2YWwpICAgICAgICBiZmluX3dyaXRlMTYoUlNJX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JEX1dBSVRfRU4oKSAgICAgYmZpbl9yZWFkMTYoUlNJX1JEX1dBSVRfRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JEX1dBSVRfRU4odmFsKSBiZmluX3dyaXRlMTYoUlNJX1JEX1dBSVRfRU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQwKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQwKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMSgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMSh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDIoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDIodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQzKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQzKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQzKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENCgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENCh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDUoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDUodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ2KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ2KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ2KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ2LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENygpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENyh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENywgdmFsKQorCiAjZW5kaWYgLyogX0NERUZfQkY1MTZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCmluZGV4IDU0M2YyOTEuLjU2ZWU1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKQEAgLTExMCw0ICsxMTAsMTM5IEBACiAjZGVmaW5lIFJTSV9QSUQ2ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkY4IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDYgKi8KICNkZWZpbmUgUlNJX1BJRDcgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRkMgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgNyAqLwogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCisjaWYgMAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLworI2VuZGlmCisjZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCisjZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCisKICNlbmRpZiAvKiBfREVGX0JGNTE0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAppbmRleCAxNDlhMjY5Li5kZmM5Mzg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCkBAIC00ODcsNCArNDg3LDEzOSBAQAogI2RlZmluZSBSU0lfUElENiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGOCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA2ICovCiAjZGVmaW5lIFJTSV9QSUQ3ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkZDIC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDcgKi8KIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLworLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9DT01NQU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0lEWCAgMHgzZiAgICAgICAvKiBDb21tYW5kIEluZGV4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9SU1AgIDB4NDAgICAgICAgLyogUmVzcG9uc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9MX1JTUCAgMHg4MCAgICAgICAvKiBMb25nIFJlc3BvbnNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfSU5UX0UgIDB4MTAwICAgICAgLyogQ29tbWFuZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgQ01EX1BFTkRfRSAgMHgyMDAgICAgICAvKiBDb21tYW5kIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTURfRSAgMHg0MDAgICAgICAvKiBDb21tYW5kIEVuYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9QV1JfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBXUl9PTiAgMHgzICAgICAgICAvKiBQb3dlciBPbiAqLworI2lmIDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRCRCAgMHgzYyAgICAgICAvKiBUQkQgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgICAgICAgICAgICAgU0RfQ01EX09EICAweDQwICAgICAgIC8qIE9wZW4gRHJhaW4gT3V0cHV0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFJPRF9DVEwgIDB4ODAgICAgICAgLyogUm9kIENvbnRyb2wgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfQ0xLX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTEtESVYgIDB4ZmYgICAgICAgLyogTUNfQ0xLIERpdmlzb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTEtfRSAgMHgxMDAgICAgICAvKiBNQ19DTEsgQnVzIENsb2NrIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBXUl9TVl9FICAweDIwMCAgICAgIC8qIFBvd2VyIFNhdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgIENMS0RJVl9CWVBBU1MgIDB4NDAwICAgICAgLyogQnlwYXNzIERpdmlzb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBXSURFX0JVUyAgMHg4MDAgICAgICAvKiBXaWRlIEJ1cyBNb2RlIEVuYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRVNQX0NNRCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTUF9DTUQgIDB4M2YgICAgICAgLyogUmVzcG9uc2UgQ29tbWFuZCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9EQVRBX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRFRYX0UgIDB4MSAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRFRYX0RJUiAgMHgyICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERUWF9NT0RFICAweDQgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRFRYX0RNQV9FICAweDggICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRE1BIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgRFRYX0JMS19MR1RIICAweGYwICAgICAgIC8qIERhdGEgVHJhbnNmZXIgQmxvY2sgTGVuZ3RoICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBDTURfQ1JDX0ZBSUwgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsICovCisjZGVmaW5lICAgICAgICAgICAgICBEQVRfQ1JDX0ZBSUwgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCAqLworI2RlZmluZSAgICAgICAgICAgICAgIENNRF9USU1FX09VVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBEQVRfVElNRV9PVVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFRYX1VOREVSUlVOICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFJYX09WRVJSVU4gIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuICovCisjZGVmaW5lICAgICAgICAgICAgICBDTURfUkVTUF9FTkQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENNRF9TRU5UICAweDgwICAgICAgIC8qIENNRCBTZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERBVF9FTkQgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgU1RBUlRfQklUX0VSUiAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBEQVRfQkxLX0VORCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfQUNUICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0FDVCAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJYX0FDVCAgMHgyMDAwICAgICAvKiBSZWNlaXZlIEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19TVEFUICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX1NUQVQgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19GVUxMICAweDEwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRnVsbCAqLworI2RlZmluZSAgICAgICAgICAgICAgUlhfRklGT19GVUxMICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1pFUk8gIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFJYX0RBVF9aRVJPICAweDgwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBUWF9EQVRfUkRZICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfRklGT19SRFkgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9TVEFUVVNfQ0xSICovCisKKyNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfU1RBVCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX1NUQVQgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfU1RBVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX1NUQVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fU1RBVCAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fU1RBVCAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX1NUQVQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfU1RBVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfU1RBVCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfU1RBVCAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX1NUQVQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgU3RhdHVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX01BU0swICovCisKKyNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfTUFTSyAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgTWFzayAqLworI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9NQVNLICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgTWFzayAqLworI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9NQVNLICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX01BU0sgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX01BU0sgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gTWFzayAqLworI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9NQVNLICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX01BU0sgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX01BU0sgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9NQVNLICAweDEwMCAgICAgIC8qIERhdGEgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfTUFTSyAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgTWFzayAqLworI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9NQVNLICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9BQ1RfTUFTSyAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBUWF9BQ1RfTUFTSyAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgIFJYX0FDVF9NQVNLICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX1NUQVRfTUFTSyAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lICAgICAgICAgUlhfRklGT19TVEFUX01BU0sgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lICAgICAgICAgVFhfRklGT19GVUxMX01BU0sgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBSWF9GSUZPX0ZVTExfTUFTSyAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgVFhfRklGT19aRVJPX01BU0sgIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lICAgICAgICAgIFJYX0RBVF9aRVJPX01BU0sgIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgIFRYX0RBVF9SRFlfTUFTSyAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgIFJYX0ZJRk9fUkRZX01BU0sgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0ZJRk9fQ05UICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgRklGT19DT1VOVCAgMHg3ZmZmICAgICAvKiBGSUZPIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIFNESU9fSU5UX0RFVCAgMHgyICAgICAgICAvKiBTRElPIEludCBEZXRlY3RlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFNEX0NBUkRfREVUICAweDEwICAgICAgIC8qIFNEIENhcmQgRGV0ZWN0ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0RJT19NU0sgIDB4MiAgICAgICAgLyogTWFzayBTRElPIEludCBEZXRlY3RlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTQ0RfTVNLICAweDQwICAgICAgIC8qIE1hc2sgQ2FyZCBEZXRlY3QgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfQ0ZHICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0xLU19FTiAgMHgxICAgICAgICAvKiBDbG9ja3MgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNENEUgIDB4NCAgICAgICAgLyogU0RJTyA0LUJpdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1XRSAgMHg4ICAgICAgICAvKiBNb3ZpbmcgV2luZG93IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RfUlNUICAweDEwICAgICAgIC8qIFNETU1DIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQVVBfU0REQVQgIDB4MjAgICAgICAgLyogUHVsbC11cCBTRF9EQVQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUFVQX1NEREFUMyAgMHg0MCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBEX1NEREFUMyAgMHg4MCAgICAgICAvKiBQdWxsLWRvd24gU0RfREFUMyAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRF9XQUlUX0VOICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLworCiAjZW5kaWYgLyogX0RFRl9CRjUxNl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggMjk3ODIxZS4uNDE3YWJjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMzIsOCArMzIsNiBAQAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwogI2RlZmluZSBfTUFDSF9CTEFDS0ZJTl9IXwogCi0jZGVmaW5lIEJGNTI3X0ZBTUlMWQotCiAjaW5jbHVkZSAiYmY1MjcuaCIKICNpbmNsdWRlICJtZW1fbWFwLmgiCiAjaW5jbHVkZSAiZGVmQkY1MjIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwppbmRleCBjZDA0YzVlLi4wNTcyOTI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCkBAIC04NDMsNiArODQzLDcxIEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0JGSU5fU1BPUlRfTU9EVUxFKQorCisvKiBTUE9SVCBTUEkgY29udHJvbGxlciBkYXRhICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX21hc3RlciBiZmluX3Nwb3J0X3NwaTBfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAxLCAvKiBtYXN0ZXIgb25seSBzdXBwb3J0cyBvbmUgZGV2aWNlICovCisJLmVuYWJsZV9kbWEgPSAwLCAgLyogbWFzdGVyIGRvbid0IHN1cHBvcnQgRE1BICovCisJLnBpbl9yZXEgPSB7UF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9EUlBSSSwKKwkJUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX1RGUywgUF9TUE9SVDBfUkZTLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zcG9ydF9zcGkwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTUE9SVDBfVENSMSwKKwkJLmVuZCAgID0gU1BPUlQwX1RDUjEgKyAweEZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TUE9SVDBfRVJST1IsCisJCS5lbmQgICA9IElSUV9TUE9SVDBfRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydF9zcGkwX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwb3J0LXNwaSIsCisJLmlkID0gMSwgLyogQnVzIG51bWJlciAqLworCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3Nwb3J0X3NwaTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGJmaW5fc3BvcnRfc3BpMF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3Nwb3J0X3NwaTBfaW5mbywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX21hc3RlciBiZmluX3Nwb3J0X3NwaTFfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAxLCAvKiBtYXN0ZXIgb25seSBzdXBwb3J0cyBvbmUgZGV2aWNlICovCisJLmVuYWJsZV9kbWEgPSAwLCAgLyogbWFzdGVyIGRvbid0IHN1cHBvcnQgRE1BICovCisJLnBpbl9yZXEgPSB7UF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9EUlBSSSwKKwkJUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX1RGUywgUF9TUE9SVDFfUkZTLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zcG9ydF9zcGkxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTUE9SVDFfVENSMSwKKwkJLmVuZCAgID0gU1BPUlQxX1RDUjEgKyAweEZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TUE9SVDFfRVJST1IsCisJCS5lbmQgICA9IElSUV9TUE9SVDFfRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydF9zcGkxX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwb3J0LXNwaSIsCisJLmlkID0gMiwgLyogQnVzIG51bWJlciAqLworCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3Nwb3J0X3NwaTFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGJmaW5fc3BvcnRfc3BpMV9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3Nwb3J0X3NwaTFfaW5mbywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCX0sCit9OworCisjZW5kaWYgIC8qIHNwb3J0IHNwaSBtYXN0ZXIgYW5kIGRldmljZXMgKi8KKwogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1KSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2RldmljZSA9IHsKIAkubmFtZSA9ICJiZjUzNy1scTAzNSIsCkBAIC0xMDczLDYgKzExMzgsMTQxIEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTUlDX0FEUDU1MjApIHx8IGRlZmluZWQoQ09ORklHX1BNSUNfQURQNTUyMF9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworCS8qCisJICogIEFEUDU1MjAvNTUwMSBCYWNrbGlnaHQgRGF0YQorCSAqLworCitzdGF0aWMgc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgYWRwNTUyMF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkuZmFkZV9pbiAJCT0gRkFERV9UXzEyMDBtcywKKwkuZmFkZV9vdXQgCQk9IEZBREVfVF8xMjAwbXMsCisJLmZhZGVfbGVkX2xhdyAJCT0gQkxfTEFXX0xJTkVBUiwKKwkuZW5fYW1ibF9zZW5zIAkJPSAxLAorCS5hYm1sX2ZpbHQgCQk9IEJMX0FNQkxfRklMVF82NDBtcywKKwkubDFfZGF5bGlnaHRfbWF4IAk9IEJMX0NVUl9tQSgxNSksCisJLmwxX2RheWxpZ2h0X2RpbSAJPSBCTF9DVVJfbUEoMCksCisJLmwyX29mZmljZV9tYXggCQk9IEJMX0NVUl9tQSg3KSwKKwkubDJfb2ZmaWNlX2RpbSAJCT0gQkxfQ1VSX21BKDApLAorCS5sM19kYXJrX21heCAJCT0gQkxfQ1VSX21BKDMpLAorCS5sM19kYXJrX2RpbSAJCT0gQkxfQ1VSX21BKDApLAorCS5sMl90cmlwIAkJPSBMMl9DT01QX0NVUlJfdUEoNzAwKSwKKwkubDJfaHlzdCAJCT0gTDJfQ09NUF9DVVJSX3VBKDUwKSwKKwkubDNfdHJpcCAJCT0gTDNfQ09NUF9DVVJSX3VBKDgwKSwKKwkubDNfaHlzdCAJCT0gTDNfQ09NUF9DVVJSX3VBKDIwKSwKK307CisKKwkvKgorCSAqICBBRFA1NTIwLzU1MDEgTEVEcyBEYXRhCisJICovCisKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2luZm8gYWRwNTUyMF9sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJhZHA1NTIwLWxlZDEiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gIm5vbmUiLAorCQkuZmxhZ3MgPSBGTEFHX0lEX0FEUDU1MjBfTEVEMV9BRFA1NTAxX0xFRDAgfCBMRURfT0ZGVF82MDBtcywKKwl9LAorI2lmZGVmIEFEUDU1MjBfRU5fQUxMX0xFRFMKKwl7CisJCS5uYW1lID0gImFkcDU1MjAtbGVkMiIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAibm9uZSIsCisJCS5mbGFncyA9IEZMQUdfSURfQURQNTUyMF9MRUQyX0FEUDU1MDFfTEVEMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWRwNTUyMC1sZWQzIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJub25lIiwKKwkJLmZsYWdzID0gRkxBR19JRF9BRFA1NTIwX0xFRDNfQURQNTUwMV9MRUQyLAorCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9sZWRzX3BsYXRmcm9tX2RhdGEgYWRwNTUyMF9sZWRzX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShhZHA1NTIwX2xlZHMpLAorCS5sZWRzID0gYWRwNTUyMF9sZWRzLAorCS5mYWRlX2luID0gRkFERV9UXzYwMG1zLAorCS5mYWRlX291dCA9IEZBREVfVF82MDBtcywKKwkubGVkX29uX3RpbWUgPSBMRURfT05UXzYwMG1zLAorfTsKKworCS8qCisJICogIEFEUDU1MjAgR1BJTyBEYXRhCisJICovCisKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9ncGlvX3BsYXRmcm9tX2RhdGEgYWRwNTUyMF9ncGlvX2RhdGEgPSB7CisJLmdwaW9fc3RhcnQgPSA1MCwKKwkuZ3Bpb19lbl9tYXNrID0gR1BJT19DMSB8IEdQSU9fQzIgfCBHUElPX1IyLAorCS5ncGlvX3B1bGx1cF9tYXNrID0gR1BJT19DMSB8IEdQSU9fQzIgfCBHUElPX1IyLAorfTsKKworCS8qCisJICogIEFEUDU1MjAgS2V5cGFkIERhdGEKKwkgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRwNTUyMF9rZXltYXBbQURQNTUyMF9LRVlNQVBTSVpFXSA9IHsKKwlbS0VZKDAsIDApXQk9IEtFWV9HUkFWRSwKKwlbS0VZKDAsIDEpXQk9IEtFWV8xLAorCVtLRVkoMCwgMildCT0gS0VZXzIsCisJW0tFWSgwLCAzKV0JPSBLRVlfMywKKwlbS0VZKDEsIDApXQk9IEtFWV80LAorCVtLRVkoMSwgMSldCT0gS0VZXzUsCisJW0tFWSgxLCAyKV0JPSBLRVlfNiwKKwlbS0VZKDEsIDMpXQk9IEtFWV83LAorCVtLRVkoMiwgMCldCT0gS0VZXzgsCisJW0tFWSgyLCAxKV0JPSBLRVlfOSwKKwlbS0VZKDIsIDIpXQk9IEtFWV8wLAorCVtLRVkoMiwgMyldCT0gS0VZX01JTlVTLAorCVtLRVkoMywgMCldCT0gS0VZX0VRVUFMLAorCVtLRVkoMywgMSldCT0gS0VZX0JBQ0tTTEFTSCwKKwlbS0VZKDMsIDIpXQk9IEtFWV9CQUNLU1BBQ0UsCisJW0tFWSgzLCAzKV0JPSBLRVlfRU5URVIsCit9OworCitzdGF0aWMgc3RydWN0IGFkcDU1MjBfa2V5c19wbGF0ZnJvbV9kYXRhIGFkcDU1MjBfa2V5c19kYXRhID0geworCS5yb3dzX2VuX21hc2sJPSBST1dfUjMgfCBST1dfUjIgfCBST1dfUjEgfCBST1dfUjAsCisJLmNvbHNfZW5fbWFzawk9IENPTF9DMyB8IENPTF9DMiB8IENPTF9DMSB8IENPTF9DMCwKKwkua2V5bWFwCQk9IGFkcDU1MjBfa2V5bWFwLAorCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShhZHA1NTIwX2tleW1hcCksCisJLnJlcGVhdAkJPSAwLAorfTsKKworCS8qCisJICogIEFEUDU1MjAvNTUwMSBNdWx0aWZ1Y3Rpb24gRGV2aWNlIEluaXQgRGF0YQorCSAqLworCitzdGF0aWMgc3RydWN0IGFkcDU1MjBfc3ViZGV2X2luZm8gYWRwNTUyMF9zdWJkZXZzW10gPSB7CisJeworCQkubmFtZSA9ICJhZHA1NTIwLWJhY2tsaWdodCIsCisJCS5pZCA9IElEX0FEUDU1MjAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFkcDU1MjBfYmFja2xpZ2h0X2RhdGEsCisJfSwKKwl7CisJCS5uYW1lID0gImFkcDU1MjAtbGVkIiwKKwkJLmlkID0gSURfQURQNTUyMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWRwNTUyMF9sZWRzX2RhdGEsCisJfSwKKwl7CisJCS5uYW1lID0gImFkcDU1MjAtZ3BpbyIsCisJCS5pZCA9IElEX0FEUDU1MjAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFkcDU1MjBfZ3Bpb19kYXRhLAorCX0sCisJeworCQkubmFtZSA9ICJhZHA1NTIwLWtleXMiLAorCQkuaWQgPSBJRF9BRFA1NTIwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhZHA1NTIwX2tleXNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhZHA1NTIwX3BsYXRmb3JtX2RhdGEgYWRwNTUyMF9wZGV2X2RhdGEgPSB7CisJLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRShhZHA1NTIwX3N1YmRldnMpLAorCS5zdWJkZXZzID0gYWRwNTUyMF9zdWJkZXZzLAorfTsKKworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQUQ3MTQyKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19BRDcxNDJfTU9EVUxFKQogCXsKQEAgLTExMDUsNiArMTMwNSwxMyBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkcDU1ODhfa3BhZF9kYXRhLAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QTUlDX0FEUDU1MjApIHx8IGRlZmluZWQoQ09ORklHX1BNSUNfQURQNTUyMF9NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygicG1pYy1hZHA1NTIwIiwgMHgzMiksCisJCS5pcnEgPSBJUlFfUEY3LAorCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkcDU1MjBfcGRldl9kYXRhLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtMTEyMCw4ICsxMzI3LDExIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk1fTU9EVUxFKQotI2RlZmluZSBQQVRBX0lOVAlJUlFfUEY1CisjZGVmaW5lIENGX0lERV9OQU5EX0NBUkRfVVNFX0hERF9JTlRFUkZBQ0UKKy8qICNkZWZpbmUgQ0ZfSURFX05BTkRfQ0FSRF9VU0VfQ0ZfSU5fQ09NTU9OX01FTU9SWV9NT0RFICovCiAKKyNpZmRlZiBDRl9JREVfTkFORF9DQVJEX1VTRV9IRERfSU5URVJGQUNFCisjZGVmaW5lIFBBVEFfSU5UCUlSUV9QRjUKIHN0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIGJmaW5fcGF0YV9wbGF0Zm9ybV9kYXRhID0gewogCS5pb3BvcnRfc2hpZnQgPSAxLAogCS5pcnFfZmxhZ3MgPSBJUlFGX1RSSUdHRVJfSElHSCB8IElSUUZfRElTQUJMRUQsCkBAIC0xMTQ0LDYgKzEzNTQsMjQgQEAKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CisjZWxpZiBkZWZpbmVkKENGX0lERV9OQU5EX0NBUkRfVVNFX0NGX0lOX0NPTU1PTl9NRU1PUllfTU9ERSkKK3N0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIGJmaW5fcGF0YV9wbGF0Zm9ybV9kYXRhID0geworCS5pb3BvcnRfc2hpZnQgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3BhdGFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSAweDIwMjExODIwLAorCQkuZW5kID0gMHgyMDIxMTgzRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IDB4MjAyMTE4MUMsCisJCS5lbmQgPSAweDIwMjExODFGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3BhdGFfZGV2aWNlID0gewogCS5uYW1lID0gInBhdGFfcGxhdGZvcm0iLApAQCAtMTIzMiw2ICsxNDYwLDExIEBACiAJJmJmaW5fc3BpMF9kZXZpY2UsCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9TUE9SVF9NT0RVTEUpCisJJmJmaW5fc3BvcnRfc3BpMF9kZXZpY2UsCisJJmJmaW5fc3BvcnRfc3BpMV9kZXZpY2UsCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1KSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNV9NT0RVTEUpCiAJJmJmaW5fZmJfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggMGMwZTNlMi4uY2Y2YzE1MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMzIsOCArMzIsNiBAQAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwogI2RlZmluZSBfTUFDSF9CTEFDS0ZJTl9IXwogCi0jZGVmaW5lIEJGNTQ4X0ZBTUlMWQotCiAjaW5jbHVkZSAiYmY1NDguaCIKICNpbmNsdWRlICJtZW1fbWFwLmgiCiAjaW5jbHVkZSAiYW5vbWFseS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCmluZGV4IGY0OGE2YWUuLmJjZTVhODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKQEAgLTI4Nyw3ICsyODcsNyBAQAogc3RhdGljIGludCBiZmluX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gKHN0YXRlID09IFBNX1NVU1BFTkRfU1RBTkRCWQotI2lmbmRlZiBCRjUzM19GQU1JTFkKKyNpZiAhKGRlZmluZWQoQkY1MzNfRkFNSUxZKSB8fCBkZWZpbmVkKENPTkZJR19CRjU2MSkpCiAJLyoKIAkgKiBPbiBCRjUzMy8yLzE6CiAJICogSWYgd2UgZW50ZXIgSGliZXJuYXRlIHRoZSBTQ0tFIFBpbiBpcyBkcml2ZW4gTG93LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oCmluZGV4IGI5OTZhM2MuLjM5NTg3MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pZGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaWRlLmgKQEAgLTMwLDEwMSArMzAsMjggQEAKICNkZWZpbmUgX002OEtfSURFX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaWZkZWYgQ09ORklHX0FUQVJJCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0YXJpX3N0ZG1hLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUMKLSNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgotI2VuZGlmCi0KIC8qCiAgKiBHZXQgcmlkIG9mIGRlZnMgZnJvbSBpby5oIC0gaWRlIGhhcyBpdHMgcHJpdmF0ZSBhbmQgY29uZmxpY3RpbmcgdmVyc2lvbnMKICAqIFNpbmNlIHNvIGZhciBubyBzaW5nbGUgbTY4ayBwbGF0Zm9ybSB1c2VzIElTQS9QQ0kgSS9PIHNwYWNlIGZvciBJREUsIHdlCiAgKiBhbHdheXMgdXNlIHRoZSBgcmF3JyBNTUlPIHZlcnNpb25zCiAgKi8KLSN1bmRlZiBpbmIKLSN1bmRlZiBpbncKLSN1bmRlZiBpbnN3Ci0jdW5kZWYgaW5sCi0jdW5kZWYgaW5zbAotI3VuZGVmIG91dGIKLSN1bmRlZiBvdXR3Ci0jdW5kZWYgb3V0c3cKLSN1bmRlZiBvdXRsCi0jdW5kZWYgb3V0c2wKICN1bmRlZiByZWFkYgogI3VuZGVmIHJlYWR3Ci0jdW5kZWYgcmVhZGwKICN1bmRlZiB3cml0ZWIKICN1bmRlZiB3cml0ZXcKLSN1bmRlZiB3cml0ZWwKIAotI2RlZmluZSBpbmIJCQkJaW5fOAotI2RlZmluZSBpbncJCQkJaW5fYmUxNgotI2RlZmluZSBpbnN3KHBvcnQsIGFkZHIsIG4pCQlyYXdfaW5zdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgaW5sCQkJCWluX2JlMzIKLSNkZWZpbmUgaW5zbChwb3J0LCBhZGRyLCBuKQkJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIG91dGIodmFsLCBwb3J0KQkJCW91dF84KHBvcnQsIHZhbCkKLSNkZWZpbmUgb3V0dyh2YWwsIHBvcnQpCQkJb3V0X2JlMTYocG9ydCwgdmFsKQotI2RlZmluZSBvdXRzdyhwb3J0LCBhZGRyLCBuKQkJcmF3X291dHN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSBvdXRsKHZhbCwgcG9ydCkJCQlvdXRfYmUzMihwb3J0LCB2YWwpCi0jZGVmaW5lIG91dHNsKHBvcnQsIGFkZHIsIG4pCQlyYXdfb3V0c2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCiAjZGVmaW5lIHJlYWRiCQkJCWluXzgKICNkZWZpbmUgcmVhZHcJCQkJaW5fYmUxNgogI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pCXJhd19pbnN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSByZWFkbAkJCQlpbl9iZTMyCiAjZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCiAjZGVmaW5lIHdyaXRlYih2YWwsIHBvcnQpCQlvdXRfOChwb3J0LCB2YWwpCiAjZGVmaW5lIHdyaXRldyh2YWwsIHBvcnQpCQlvdXRfYmUxNihwb3J0LCB2YWwpCiAjZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgd3JpdGVsKHZhbCwgcG9ydCkJCW91dF9iZTMyKHBvcnQsIHZhbCkKICNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikJcmF3X291dHNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQotI2lmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19RNDApCi0jZGVmaW5lIGluc3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X2luc3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIG91dHN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERQotI2RlZmluZSBJREVfQVJDSF9MT0NLCi0KLWV4dGVybiBpbnQgZmFsY29uaWRlX2ludHJfbG9jazsKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBpZGVfcmVsZWFzZV9sb2NrICh2b2lkKQotewotCWlmIChNQUNIX0lTX0FUQVJJKSB7Ci0JCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKLQkJCXByaW50aygiaWRlX3JlbGVhc2VfbG9jazogYnVnXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQlmYWxjb25pZGVfaW50cl9sb2NrID0gMDsKLQkJc3RkbWFfcmVsZWFzZSgpOwotCX0KLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZAotaWRlX2dldF9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKLXsKLQlpZiAoTUFDSF9JU19BVEFSSSkgewotCQlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7Ci0JCQlpZiAoaW5faW50ZXJydXB0KCkgPiAwKQotCQkJCXBhbmljKCAiRmFsY29uIElERSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0IiApOwotCQkJc3RkbWFfbG9jayhoYW5kbGVyLCBkYXRhKTsKLQkJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAxOwotCQl9Ci0JfQotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUgKi8KLQotI2RlZmluZSBJREVfQVJDSF9BQ0tfSU5UUgotI2RlZmluZSBpZGVfYWNrX2ludHIoaHdpZikJKChod2lmKS0+YWNrX2ludHIgPyAoaHdpZiktPmFja19pbnRyKGh3aWYpIDogMSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTTY4S19JREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCAyMDZjYjc5Li5kYzc4NzE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtNzcsNyArNzcsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBNQUNIX0RFQ1NUQVRJT04KIAlib29sICJERUNzdGF0aW9ucyIKQEAgLTEzMiw3ICsxMzEsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNZU19TVVBQT1JUU18xMDBIWgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJIFRoaXMgYSBmYW1pbHkgb2YgbWFjaGluZXMgYmFzZWQgb24gdGhlIE1JUFMgUjQwMzAgY2hpcHNldCB3aGljaCB3YXMKIAkgdXNlZCBieSBzZXZlcmFsIHZlbmRvcnMgdG8gYnVpbGQgUklTQy9vcyBhbmQgV2luZG93cyBOVCB3b3Jrc3RhdGlvbnMuCkBAIC0xNTQsNyArMTUyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEJST0tFTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIExFTU9URV9GVUxPTkcKIAlib29sICJMZW1vdGUgRnVsb25nIG1pbmktUEMiCkBAIC0xNzUsNyArMTcyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQV9TVVBQT1JUX0JST0tFTgogCXNlbGVjdCBDUFVfSEFTX1dCCiAJaGVscApAQCAtMjUwLDcgKzI0Niw2IEBACiAJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IENTUkNfUjRLCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIE5YUF9TVEIyMjAKIAlib29sICJOWFAgU1RCMjIwIGJvYXJkIgpAQCAtMzY0LDcgKzM1OSw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJaGVscAogCSAgVGhpcyBhcmUgdGhlIFNHSSBPcmlnaW4gMjAwLCBPcmlnaW4gMjAwMCBhbmQgT255eCAyIEdyYXBoaWNzCiAJICB3b3Jrc3RhdGlvbnMuICBUbyBjb21waWxlIGEgTGludXgga2VybmVsIHRoYXQgcnVucyBvbiB0aGVzZSwgc2F5IFkKQEAgLTU2Myw3ICs1NTcsNiBAQAogCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBDU1JDX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKQEAgLTcwMCw4ICs2OTMsNyBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIHkKIAogIwogIyBTZWxlY3Qgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuCkBAIC05MjAsNyArOTEyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IENQVV9NSVBTUjJfSVJRX1ZJCiAKQEAgLTkzOSw3ICs5MzAsNiBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAKIGNvbmZpZyBTV0FQX0lPX1NQQUNFCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMjJkYWIyZS4uOGQ1NDRjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtNzIwLDExICs3MjAsMTcgQEAKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0uIG1pc3Npbmctc3lzY2FsbHMgRVhUUkFfQ0ZMQUdTPSItbWFiaT0zMiIKIGVuZGlmCiAKK2luc3RhbGw6CisJJChRKWluc3RhbGwgLUQgLW0gNzU1IHZtbGludXggJChJTlNUQUxMX1BBVEgpL3ZtbGludXgtJChLRVJORUxSRUxFQVNFKQorCSQoUSlpbnN0YWxsIC1EIC1tIDY0NCAuY29uZmlnICQoSU5TVEFMTF9QQVRIKS9jb25maWctJChLRVJORUxSRUxFQVNFKQorCSQoUSlpbnN0YWxsIC1EIC1tIDY0NCBTeXN0ZW0ubWFwICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ubWFwLSQoS0VSTkVMUkVMRUFTRSkKKwogYXJjaGNsZWFuOgogCUAkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9ib290CiAJQCQoTUFLRSkgJChjbGVhbik9YXJjaC9taXBzL2xhc2F0CiAKIGRlZmluZSBhcmNoaGVscAorCWVjaG8gJyAgaW5zdGFsbCAgICAgICAgICAgICAgLSBpbnN0YWxsIGtlcm5lbCBpbnRvICQoSU5TVEFMTF9QQVRIKScKIAllY2hvICcgIHZtbGludXguZWNvZmYgICAgICAgIC0gRUNPRkYgYm9vdCBpbWFnZScKIAllY2hvICcgIHZtbGludXguYmluICAgICAgICAgIC0gUmF3IGJpbmFyeSBib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51eC5zcmVjICAgICAgICAgLSBTUkVDIGJvb3QgaW1hZ2UnCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwppbmRleCA3ZjhlZjEzLi44MTI4YWViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKQEAgLTEzNCw0ICsxMzQsNCBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpby5jCmluZGV4IGU2NjBkZGQuLjkxYTljNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCBPcGVuV3J0Lm9yZywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgT3BlbldydC5vcmcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKiAgCUFyY2hpdGVjdHVyZSBzcGVjaWZpYyBHUElPIHN1cHBvcnQKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0yNywxMjIgKzI3LDE3NSBAQAogICogCW90aGVycyBoYXZlIGEgc2Vjb25kIG9uZSA6IEdQSU8yCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKLSNkZWZpbmUgZ3BpbzEgc3lzCitzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXZvaWQgX19pb21lbQkJKnJlZ2Jhc2U7Cit9OworCiAjaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0KLXN0YXRpYyBzdHJ1Y3QgYXUxeDAwX2dwaW8yICpjb25zdCBncGlvMiA9IChzdHJ1Y3QgYXUxeDAwX2dwaW8yICopIEdQSU8yX0JBU0U7Ci0jZGVmaW5lIEdQSU8yX09VVFBVVF9FTkFCTEVfTUFTSyAJMHgwMDAxMDAwMAotCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMl9yZWFkKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCWdwaW8gLT0gQVUxWFhYX0dQSU9fQkFTRTsKLQlyZXR1cm4gKChncGlvMi0+cGluc3RhdGUgPj4gZ3BpbykgJiAweDAxKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisJcmV0dXJuIHJlYWRsKGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfU1QpICYgbWFzazsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2dwaW8yX3dyaXRlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIGF1MTAwMF9ncGlvMl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7CisJdTMyIG1hc2sgPSAoKEdQSU8yX09VVF9FTl9NQVNLIDw8IG9mZnNldCkgfCAoISF2YWx1ZSA8PCBvZmZzZXQpKTsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZ3BpbzItPm91dHB1dCA9IChHUElPMl9PVVRQVVRfRU5BQkxFX01BU0sgPDwgZ3BpbykgfCAoKCEhdmFsdWUpIDw8IGdwaW8pOworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX09VVCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMl9kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8yX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JZ3BpbyAtPSBBVTFYWFhfR1BJT19CQVNFOwotCWdwaW8yLT5kaXIgJj0gfigweDAxIDw8IGdwaW8pOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG1wID0gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCXRtcCAmPSB+bWFzazsKKwl3cml0ZWwodG1wLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX0RJUik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7Ci0JZ3BpbzItPmRpciB8PSAweDAxIDw8IGdwaW87Ci0JZ3BpbzItPm91dHB1dCA9IChHUElPMl9PVVRQVVRfRU5BQkxFX01BU0sgPDwgZ3BpbykgfCAoKCEhdmFsdWUpIDw8IGdwaW8pOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIG91dF9tYXNrID0gKChHUElPMl9PVVRfRU5fTUFTSyA8PCBvZmZzZXQpIHwgKCEhdmFsdWUgPDwgb2Zmc2V0KSk7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG1wID0gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCXRtcCB8PSBtYXNrOworCXdyaXRlbCh0bXAsIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfRElSKTsKKwl3cml0ZWwob3V0X21hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfT1VUKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KLQogI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKSAqLwogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMV9yZWFkKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXJldHVybiAoZ3BpbzEtPnBpbnN0YXRlcmQgPj4gZ3BpbykgJiAweDAxOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKwlyZXR1cm4gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMV9TVCkgJiBtYXNrOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZ3BpbzFfd3JpdGUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgYXUxMDAwX2dwaW8xX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogeworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIHJlZ19vZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCiAJaWYgKHZhbHVlKQotCQlncGlvMS0+b3V0cHV0c2V0ID0gKDB4MDEgPDwgZ3Bpbyk7CisJCXJlZ19vZmZzZXQgPSBBVTEwMDBfR1BJTzFfT1VUOwogCWVsc2UKLQkJLyogT3V0cHV0IGEgemVybyAqLwotCQlncGlvMS0+b3V0cHV0Y2xyID0gKDB4MDEgPDwgZ3Bpbyk7CisJCXJlZ19vZmZzZXQgPSBBVTEwMDBfR1BJTzFfQ0xSOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgcmVnX29mZnNldCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMV9kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JZ3BpbzEtPnBpbmlucHV0ZW4gPSAoMHgwMSA8PCBncGlvKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisJd3JpdGVsKG1hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzFfU1QpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzFfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvMS0+dHJpb3V0Y2xyID0gKDB4MDEgJiBncGlvKTsKLQlhdTF4eHhfZ3BpbzFfd3JpdGUoZ3BpbywgdmFsdWUpOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8xX1RSSV9PVVQpOworCWF1MTAwMF9ncGlvMV9zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MXh4eF9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJcmV0dXJuIDA7Ci0jZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8yX3JlYWQoZ3Bpbyk7CitzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCBhdTEwMDBfZ3Bpb19jaGlwW10gPSB7CisJWzBdID0geworCQkucmVnYmFzZQkJCT0gKHZvaWQgX19pb21lbSAqKVNZU19CQVNFLAorCQkuY2hpcCA9IHsKKwkJCS5sYWJlbAkJCT0gImF1MTAwMC1ncGlvMSIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9pbnB1dCwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0CT0gYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQsCisJCQkuZ2V0CQkJPSBhdTEwMDBfZ3BpbzFfZ2V0LAorCQkJLnNldAkJCT0gYXUxMDAwX2dwaW8xX3NldCwKKwkJCS5iYXNlCQkJPSAwLAorCQkJLm5ncGlvCQkJPSAzMiwKKwkJfSwKKwl9LAorI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQorCVsxXSA9IHsKKwkJLnJlZ2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICA9ICh2b2lkIF9faW9tZW0gKilHUElPMl9CQVNFLAorCQkuY2hpcCA9IHsKKwkJCS5sYWJlbCAgICAgICAgICAgICAgICAgID0gImF1MTAwMC1ncGlvMiIsCisJCQkuZGlyZWN0aW9uX2lucHV0ICAgICAgICA9IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25faW5wdXQsCisJCQkuZGlyZWN0aW9uX291dHB1dCAgICAgICA9IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25fb3V0cHV0LAorCQkJLmdldCAgICAgICAgICAgICAgICAgICAgPSBhdTEwMDBfZ3BpbzJfZ2V0LAorCQkJLnNldCAgICAgICAgICAgICAgICAgICAgPSBhdTEwMDBfZ3BpbzJfc2V0LAorCQkJLmJhc2UgICAgICAgICAgICAgICAgICAgPSBBVTFYWFhfR1BJT19CQVNFLAorCQkJLm5ncGlvICAgICAgICAgICAgICAgICAgPSAzMiwKKwkJfSwKKwl9LAogI2VuZGlmCi0JZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8xX3JlYWQoZ3Bpbyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGF1MXh4eF9ncGlvX2dldF92YWx1ZSk7Cit9OwogCi12b2lkIGF1MXh4eF9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfZ3Bpb19pbml0KHZvaWQpCiB7Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQk7Ci0jZWxzZQotCQlhdTF4eHhfZ3BpbzJfd3JpdGUoZ3BpbywgdmFsdWUpOwotI2VuZGlmCi0JZWxzZQotCQlhdTF4eHhfZ3BpbzFfd3JpdGUoZ3BpbywgdmFsdWUpOwotfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19zZXRfdmFsdWUpOwotCi1pbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbHNlCi0JCXJldHVybiBhdTF4eHhfZ3BpbzJfZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCWdwaW9jaGlwX2FkZCgmYXUxMDAwX2dwaW9fY2hpcFswXS5jaGlwKTsKKyNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKKwlncGlvY2hpcF9hZGQoJmF1MTAwMF9ncGlvX2NoaXBbMV0uY2hpcCk7CiAjZW5kaWYKIAotCXJldHVybiBhdTF4eHhfZ3BpbzFfZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOworYXJjaF9pbml0Y2FsbChhdTEwMDBfZ3Bpb19pbml0KTsKIAotaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotI2VuZGlmCi0KLQlyZXR1cm4gYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwppbmRleCA5NTMwMzI5Li4wZDY4ZTE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgpAQCAtMTMxLDYgKzEzMiwxMiBAQAogCS5yZXNvdXJjZQk9IGlkZV9yZXNvdXJjZXMKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtY19kYXRhID0geworCS5mbGFncwk9IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFXzE2QklULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MWMxMTFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJzbWM5MXgtcmVncyIsCkBAIC0xNDYsNiArMTUzLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxYzExMV9kZXZpY2UgPSB7CisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jX2RhdGEsCisJfSwKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxYzExMV9yZXNvdXJjZXMpLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQppbmRleCAxYzJhN2ZhLi5kNjkwM2MzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQpAQCAtMTQsMyArMTQsNSBAQAogb2JqLXkgKz0gb2N0ZW9uLW1lbWNweS5vCiAKIG9iai0kKENPTkZJR19TTVApICAgICAgICAgICAgICAgICAgICAgKz0gc21wLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9mbGFzaF9zZXR1cC5jCmluZGV4IDU1M2QzNmMuLjAwOGY2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZmxhc2hfc2V0dXAuYwpAQCAtNTcsNyArNTcsNyBAQAogCQlmbGFzaF9tYXAuYmFua3dpZHRoID0gMTsKIAkJZmxhc2hfbWFwLnZpcnQgPSBpb3JlbWFwKGZsYXNoX21hcC5waHlzLCBmbGFzaF9tYXAuc2l6ZSk7CiAJCXByX25vdGljZSgiQm9vdGJ1cyBmbGFzaDogU2V0dGluZyBmbGFzaCBmb3IgJWx1TUIgZmxhc2ggYXQgIgotCQkJICAiMHglMDhseFxuIiwgZmxhc2hfbWFwLnNpemUgPj4gMjAsIGZsYXNoX21hcC5waHlzKTsKKwkJCSAgIjB4JTA4bGx4XG4iLCBmbGFzaF9tYXAuc2l6ZSA+PiAyMCwgZmxhc2hfbWFwLnBoeXMpOwogCQlzaW1wbGVfbWFwX2luaXQoJmZsYXNoX21hcCk7CiAJCW15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmZmxhc2hfbWFwKTsKIAkJaWYgKG15bXRkKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggZmM3Mjk4NC4uMWMxOWFmOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NvcmVfZW9pKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1NXMDsKIAkvKgogCSAqIElmIGFuIElSUSBpcyBiZWluZyBwcm9jZXNzZWQgd2hpbGUgd2UgYXJlIGRpc2FibGluZyBpdCB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jIGIvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvaXJxLmMKaW5kZXggYzI1ODNlYy4uMmJiYzQxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvaXJxLmMKKysrIGIvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvaXJxLmMKQEAgLTgwLDkgKzgwLDkgQEAKIAl1MzIgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRU1NQTJSSF9JUlE7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKEVNTUEyUkhfSVJRX0JBU0UgKyBpLAotCQkJCQkgJmVtbWEycmhfaXJxX2NvbnRyb2xsZXIsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoRU1NQTJSSF9JUlFfQkFTRSArIGksCisJCQkJCSAgICAgICZlbW1hMnJoX2lycV9jb250cm9sbGVyLAorCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIH0KIAogc3RhdGljIHZvaWQgZW1tYTJyaF9zd19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMjAsOSArMTIwLDkgQEAKIAl1MzIgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRU1NQTJSSF9JUlFfU1c7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyBpLAotCQkJCQkgJmVtbWEycmhfc3dfaXJxX2NvbnRyb2xsZXIsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoRU1NQTJSSF9TV19JUlFfQkFTRSArIGksCisJCQkJCSAgICAgICZlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyLAorCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIH0KIAogc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKQEAgLTE0OSw2ICsxNDksMTIgQEAKIAogc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKKwlpcnEgLT0gRU1NQTJSSF9HUElPX0lSUV9CQVNFOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9TVCwgfigxIDw8IGlycSkpOworfQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CiAJdTMyIHJlZzsKIAogCWlycSAtPSBFTU1BMlJIX0dQSU9fSVJRX0JBU0U7CkBAIC0xNTksMjcgKzE2NSwxMiBAQAogCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2VuZCh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiByZWc7Ci0KLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKSB7Ci0KLQkJaXJxIC09IEVNTUEyUkhfR1BJT19JUlFfQkFTRTsKLQotCQlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLKTsKLQkJcmVnIHw9IDEgPDwgaXJxOwotCQllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnKTsKLQl9Ci19Ci0KIHN0cnVjdCBpcnFfY2hpcCBlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXIgPSB7CiAJLm5hbWUgPSAiZW1tYTJyaF9ncGlvX2lycSIsCiAJLmFjayA9IGVtbWEycmhfZ3Bpb19pcnFfYWNrLAogCS5tYXNrID0gZW1tYTJyaF9ncGlvX2lycV9kaXNhYmxlLAotCS5tYXNrX2FjayA9IGVtbWEycmhfZ3Bpb19pcnFfYWNrLAorCS5tYXNrX2FjayA9IGVtbWEycmhfZ3Bpb19pcnFfbWFza19hY2ssCiAJLnVubWFzayA9IGVtbWEycmhfZ3Bpb19pcnFfZW5hYmxlLAotCS5lbmQgPSBlbW1hMnJoX2dwaW9faXJxX2VuZCwKIH07CiAKIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9pbml0KHZvaWQpCkBAIC0xODcsOCArMTc4LDkgQEAKIAl1MzIgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRU1NQTJSSF9JUlFfR1BJTzsgaSsrKQotCQlzZXRfaXJxX2NoaXAoRU1NQTJSSF9HUElPX0lSUV9CQVNFICsgaSwKLQkJCSAgICAgJmVtbWEycmhfZ3Bpb19pcnFfY29udHJvbGxlcik7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfR1BJT19JUlFfQkFTRSArIGksCisJCQkJCSAgICAgICZlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXIsCisJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7CkBAIC0yMTMsOCArMjA1LDcgQEAKIAkJICAgIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX0VOXzApOwogCiAjaWZkZWYgRU1NQTJSSF9TV19DQVNDQURFCi0JaWYgKGludFN0YXR1cyAmCi0JICAgICgxIDw8ICgoRU1NQTJSSF9TV19DQVNDQURFIC0gRU1NQTJSSF9JUlFfSU5UMCkgJiAoMzIgLSAxKSkpKSB7CisJaWYgKGludFN0YXR1cyAmICgxVUwgPDwgRU1NQTJSSF9TV19DQVNDQURFKSkgewogCQl1MzIgc3dJbnRTdGF0dXM7CiAJCXN3SW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9TV19JTlQpCiAJCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOKTsKQEAgLTIyNSw2ICsyMTYsOCBAQAogCQkJfQogCQl9CiAJfQorCS8qIFNraXAgUy9XIGludGVycnVwdCAqLworCWludFN0YXR1cyAmPSB+KDFVTCA8PCBFTU1BMlJIX1NXX0NBU0NBREUpOwogI2VuZGlmCiAKIAlmb3IgKGkgPSAwLCBiaXRtYXNrID0gMTsgaSA8IDMyOyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKQEAgLTIzOCw4ICsyMzEsNyBAQAogCQkgICAgZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMSk7CiAKICNpZmRlZiBFTU1BMlJIX0dQSU9fQ0FTQ0FERQotCWlmIChpbnRTdGF0dXMgJgotCSAgICAoMSA8PCAoKEVNTUEyUkhfR1BJT19DQVNDQURFIC0gRU1NQTJSSF9JUlFfSU5UMCkgJiAoMzIgLSAxKSkpKSB7CisJaWYgKGludFN0YXR1cyAmICgxVUwgPDwgKEVNTUEyUkhfR1BJT19DQVNDQURFICUgMzIpKSkgewogCQl1MzIgZ3Bpb0ludFN0YXR1czsKIAkJZ3Bpb0ludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX1NUKQogCQkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLKTsKQEAgLTI1MCw2ICsyNDIsOCBAQAogCQkJfQogCQl9CiAJfQorCS8qIFNraXAgR1BJTyBpbnRlcnJ1cHQgKi8KKwlpbnRTdGF0dXMgJj0gfigxVUwgPDwgKEVNTUEyUkhfR1BJT19DQVNDQURFICUgMzIpKTsKICNlbmRpZgogCiAJZm9yIChpID0gMzIsIGJpdG1hc2sgPSAxOyBpIDwgNjQ7IGkrKywgYml0bWFzayA8PD0gMSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKaW5kZXggZDVmNDdlNC4uODBhZTEyZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgIHBsYXRfc2VyaWFsODI1MF9wb3J0IHBsYXRmb3JtX3NlcmlhbF9wb3J0c1tdID0gewogCVswXSA9IHsKIAkJLm1lbWJhc2U9ICh2b2lkIF9faW9tZW0qKUtTRUcxQUREUihFTU1BMlJIX1BGVVIwX0JBU0UgKyAzKSwKKwkJLm1hcGJhc2UgPSBFTU1BMlJIX1BGVVIwX0JBU0UgKyAzLAogCQkuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjAsCiAJCS51YXJ0Y2xrID0gRU1NQTJSSF9TRVJJQUxfQ0xPQ0ssCiAJCS5yZWdzaGlmdCA9IDQsCkBAIC0xMTcsNiArMTE4LDcgQEAKIAkJLmZsYWdzID0gRU1NQTJSSF9TRVJJQUxfRkxBR1MsCiAgICAgICAgfSwgWzFdID0gewogCQkubWVtYmFzZSA9ICh2b2lkIF9faW9tZW0qKUtTRUcxQUREUihFTU1BMlJIX1BGVVIxX0JBU0UgKyAzKSwKKwkJLm1hcGJhc2UgPSBFTU1BMlJIX1BGVVIxX0JBU0UgKyAzLAogCQkuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjEsCiAJCS51YXJ0Y2xrID0gRU1NQTJSSF9TRVJJQUxfQ0xPQ0ssCiAJCS5yZWdzaGlmdCA9IDQsCkBAIC0xMjQsNiArMTI2LDcgQEAKIAkJLmZsYWdzID0gRU1NQTJSSF9TRVJJQUxfRkxBR1MsCiAgICAgICAgfSwgWzJdID0gewogCQkubWVtYmFzZSA9ICh2b2lkIF9faW9tZW0qKUtTRUcxQUREUihFTU1BMlJIX1BGVVIyX0JBU0UgKyAzKSwKKwkJLm1hcGJhc2UgPSBFTU1BMlJIX1BGVVIyX0JBU0UgKyAzLAogCQkuaXJxID0gRU1NQTJSSF9JUlFfUEZVUjIsCiAJCS51YXJ0Y2xrID0gRU1NQTJSSF9TRVJJQUxfQ0xPQ0ssCiAJCS5yZWdzaGlmdCA9IDQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggYzAxODcyNy4uM2JkYzBlMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMjA5LDggKzIwOSw3IEBACiAJICogTUlQUzMyIGNsYXNzIHByb2Nlc3NvcnMKIAkgKi8KIAlDUFVfNEtDLCBDUFVfNEtFQywgQ1BVXzRLU0MsIENQVV8yNEssIENQVV8zNEssIENQVV8xMDA0SywgQ1BVXzc0SywKLQlDUFVfQVUxMDAwLCBDUFVfQVUxMTAwLCBDUFVfQVUxMjAwLCBDUFVfQVUxMjEwLCBDUFVfQVUxMjUwLCBDUFVfQVUxNTAwLAotCUNQVV9BVTE1NTAsIENQVV9QUjQ0NTAsIENQVV9CQ00zMzAyLCBDUFVfQkNNNDcxMCwKKwlDUFVfQUxDSEVNWSwgQ1BVX1BSNDQ1MCwgQ1BVX0JDTTMzMDIsIENQVV9CQ000NzEwLAogCiAJLyoKIAkgKiBNSVBTNjQgY2xhc3MgcHJvY2Vzc29ycwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKaW5kZXggMTM0ZTFmYy4uYTEyZDk3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCkBAIC04Nyw3ICs4Nyw3IEBACiAJOiAiPXIiICh0bXApKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjEpICYmICFkZWZpbmVkKENPTkZJR19NQUNIX0FMQ0hFTVkpCiAKIC8qCiAgKiBUaGVzZSBhcmUgc2xpZ2h0bHkgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB3ZSBndWFyYW50ZWUgUjEga2VybmVscyB0bwpAQCAtMTM5LDcgKzEzOSw3IEBACiB9IHdoaWxlICgwKQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1I1NTAwKQorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1I1NTAwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0FMQ0hFTVkpCiAKIC8qCiAgKiBSMTAwMDAgcm9ja3MgLSBhbGwgaGF6YXJkcyBoYW5kbGVkIGluIGhhcmR3YXJlLCBzbyB0aGlzIGJlY29tZXMgYSBub2JyYWluZXIuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkZjBjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX0FVMVgwMF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FVMVgwMF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorCisjZGVmaW5lIGNwdV9oYXNfdGxiCQkJMQorI2RlZmluZSBjcHVfaGFzXzRrZXgJCQkxCisjZGVmaW5lIGNwdV9oYXNfM2tfY2FjaGUJCTAKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzX3R4MzlfY2FjaGUJCTAKKyNkZWZpbmUgY3B1X2hhc19mcHUJCQkwCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJCTEKKyNkZWZpbmUgY3B1X2hhc193YXRjaAkJCTEKKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJCTEKKyNkZWZpbmUgY3B1X2hhc192Y2UJCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCQkwCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkJMQorI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkJMQorI2RlZmluZSBjcHVfaGFzX2xsc2MJCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkJMAorI2RlZmluZSBjcHVfaGFzX21kbXgJCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczNkCQkJMAorI2RlZmluZSBjcHVfaGFzX3NtYXJ0bWlwcwkJMAorI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCQkwCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkJMAorI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMzMnIyCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjEJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzNjRyMgkJMAorI2RlZmluZSBjcHVfaGFzX2RzcAkJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzbXQJCQkwCisjZGVmaW5lIGNwdV9oYXNfdXNlcmxvY2FsCQkwCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdHMJCQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRfemVyb19yZWcJCTAKKyNkZWZpbmUgY3B1X2hhc192aW50CQkJMAorI2RlZmluZSBjcHVfaGFzX3ZlaWMJCQkwCisjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMAorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJCTMyCisjZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJCTMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FVMVgwMF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKaW5kZXggMmRjNjFlMC4uMzRkOWI3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCkBAIC01LDY1ICs1LDI5IEBACiAKICNkZWZpbmUgQVUxWFhYX0dQSU9fQkFTRQkyMDAKIAotc3RydWN0IGF1MXgwMF9ncGlvMiB7Ci0JdTMyCWRpcjsKLQl1MzIJcmVzZXJ2ZWQ7Ci0JdTMyCW91dHB1dDsKLQl1MzIJcGluc3RhdGU7Ci0JdTMyCWludGVuOwotCXUzMgllbmFibGU7Ci19OworLyogR1BJTyBiYW5rIDEgb2Zmc2V0cyAqLworI2RlZmluZSBBVTEwMDBfR1BJTzFfVFJJX09VVAkweDAxMDAKKyNkZWZpbmUgQVUxMDAwX0dQSU8xX09VVAkweDAxMDgKKyNkZWZpbmUgQVUxMDAwX0dQSU8xX1NUCQkweDAxMTAKKyNkZWZpbmUgQVUxMDAwX0dQSU8xX0NMUgkweDAxMEMKIAotZXh0ZXJuIGludCBhdTF4eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBhdTF4eHhfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIGludCBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CisvKiBHUElPIGJhbmsgMiBvZmZzZXRzICovCisjZGVmaW5lIEFVMTAwMF9HUElPMl9ESVIJMHgwMAorI2RlZmluZSBBVTEwMDBfR1BJTzJfUlNWRAkweDA0CisjZGVmaW5lIEFVMTAwMF9HUElPMl9PVVQJMHgwOAorI2RlZmluZSBBVTEwMDBfR1BJTzJfU1QJCTB4MEMKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX0lOVAkweDEwCisjZGVmaW5lIEFVMTAwMF9HUElPMl9FTgkJMHgxNAogCisjZGVmaW5lIEdQSU8yX09VVF9FTl9NQVNLCTB4MDAwMTAwMDAKIAotLyogV3JhcHBlcnMgZm9yIHRoZSBhcmNoLW5ldXRyYWwgR1BJTyBBUEkgKi8KKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJTlVMTAogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLwotCXJldHVybiAwOwotfQorI2RlZmluZSBncGlvX2dldF92YWx1ZSBfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlIF9fZ3Bpb19zZXRfdmFsdWUKIAotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLX0KKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcCBfX2dwaW9fY2Fuc2xlZXAKIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gYXUxeHh4X2dwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXJldHVybiBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gYXUxeHh4X2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWF1MXh4eF9ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGdwaW87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxOwotfQotCi0vKiBGb3IgY2Fuc2xlZXAgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CiAKICNlbmRpZiAvKiBfQVUxWFhYX0dQSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCmluZGV4IDdmMGIwMzQuLmMwZGExYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaApAQCAtNzEsOCArNzEsNiBAQAogCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSUQgKCgoKih2b2xhdGlsZSB1MzIgKilpb3JlbWFwKE1JUFNfUkVWSVNJT05fUkVHLCA0KSkgPj4gMTApICYgMHgzZikKIAotZXh0ZXJuIGludCBtaXBzX3JldmlzaW9uX2NvcmlkOwotCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9PVEhFUgkgICAwCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDCSAgIDEKICNkZWZpbmUgTUlQU19SRVZJU0lPTl9TQ09OX1NPQ0lUU0NQCSAgIDIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAtb3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCmluZGV4IDQzYzIwN2U3Li42NGZmYzAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAtb3BzLmgKQEAgLTE1LDYgKzE1LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAorc3RydWN0IHRhc2tfc3RydWN0OworCiBzdHJ1Y3QgcGxhdF9zbXBfb3BzIHsKIAl2b2lkICgqc2VuZF9pcGlfc2luZ2xlKShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKIAl2b2lkICgqc2VuZF9pcGlfbWFzaykoY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAwODg0OTQ3Li4xMGU4MjQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtNzYsNyArNzYsNyBAQAogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCiAJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgotCQkiNToJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKKwkJIglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNjoJYm5legklW3RpY2tldF0sIDZiCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgMQkJCQlcbiIKQEAgLTg1LDcgKzg1LDcgQEAKIAkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCi0JCSIJYgk1YgkJCQkJXG4iCisJCSIJYgk0YgkJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKQEAgLTExMyw3ICsxMTMsNyBAQAogCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKLQkJIjU6CXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCisJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCi0JCSIJYgk1YgkJCQkJXG4iCisJCSIJYgk0YgkJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYmNiYjhkNi4uNzk1NmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTQsMTIgKzQsMTggQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywKKyAqICAgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KICNpZm5kZWYgX0FTTV9UWVBFU19ICiAjZGVmaW5lIF9BU01fVFlQRVNfSAogCi0jaWYgX01JUFNfU1pMT05HID09IDY0CisvKgorICogV2UgZG9uJ3QgdXNlIGludC1sNjQuaCBmb3IgdGhlIGtlcm5lbCBhbnltb3JlIGJ1dCBzdGlsbCB1c2UgaXQgZm9yCisgKiB1c2Vyc3BhY2UgdG8gYXZvaWQgY29kZSBjaGFuZ2VzLgorICovCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkgJiYgIWRlZmluZWQoX19LRVJORUxfXykKICMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWw2NC5oPgogI2Vsc2UKICMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwppbmRleCBjNjcyYzA4Li5mMGZkNjM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKKysrIGIvYXJjaC9taXBzL2phenovamF6emRtYS5jCkBAIC02OCw4ICs2OCw3IEBACiAJICovCiAJcGd0YmwgPSAoVkRNQV9QR1RCTF9FTlRSWSAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsCiAJCQkJCQkgICAgZ2V0X29yZGVyKFZETUFfUEdUQkxfU0laRSkpOwotCWlmICghcGd0YmwpCi0JCUJVRygpOworCUJVR19PTighcGd0YmwpOwogCWRtYV9jYWNoZV93YmFja19pbnYoKHVuc2lnbmVkIGxvbmcpcGd0YmwsIFZETUFfUEdUQkxfU0laRSk7CiAJcGd0YmwgPSAoVkRNQV9QR1RCTF9FTlRSWSAqKUtTRUcxQUREUihwZ3RibCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDFiZGJjYWQuLmIxM2I4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTgzLDEzICsxODMsNyBAQAogCWNhc2UgQ1BVX1RYNDlYWDoKIAkJY3B1X3dhaXQgPSByNGtfd2FpdF9pcnFvZmY7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX0FVMTAwMDoKLQljYXNlIENQVV9BVTExMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTU1MDoKLQljYXNlIENQVV9BVTEyMDA6Ci0JY2FzZSBDUFVfQVUxMjEwOgotCWNhc2UgQ1BVX0FVMTI1MDoKKwljYXNlIENQVV9BTENIRU1ZOgogCQljcHVfd2FpdCA9IGF1MWtfd2FpdDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfMjBLQzoKQEAgLTc4MywzNyArNzc3LDMwIEBACiAJc3dpdGNoIChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDApIHsKIAljYXNlIFBSSURfSU1QX0FVMV9SRVYxOgogCWNhc2UgUFJJRF9JTVBfQVUxX1JFVjI6CisJCWMtPmNwdXR5cGUgPSBDUFVfQUxDSEVNWTsKIAkJc3dpdGNoICgoYy0+cHJvY2Vzc29yX2lkID4+IDI0KSAmIDB4ZmYpIHsKIAkJY2FzZSAwOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEwMDA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMDAwIjsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTUwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTE1MDAiOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMTAwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTEwMCI7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTE1NTA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxNTUwIjsKIAkJCWJyZWFrOwogCQljYXNlIDQ6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTIwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTEyMDAiOwotCQkJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmKSA9PSAyKSB7Ci0JCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEyNTA7CisJCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpID09IDIpCiAJCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTI1MCI7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSA1OgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEyMTA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMjEwIjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcGFuaWMoIlVua25vd24gQXUgQ29yZSEiKTsKKwkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTF4eHgiOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYwppbmRleCA5NjNjMTZkLi42YThjZDI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKQEAgLTE0MCwxNCArMTQwLDE2IEBACiAKIAkJc3dpdGNoIChpbXAtPmltX3R5cGUpIHsKIAkJY2FzZSBNU0MwMV9JUlFfRURHRToKLQkJCXNldF9pcnFfY2hpcChpcnFiYXNlK24sICZtc2NfZWRnZWlycV90eXBlKTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycWJhc2UgKyBuLAorCQkJCSZtc2NfZWRnZWlycV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlpZiAoY3B1X2hhc192ZWljKQogCQkJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtuKjgsIE1TQzAxX0lDX1NVUF9FREdFX0JJVCk7CiAJCQllbHNlCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgTVNDMDFfSUNfU1VQX0VER0VfQklUIHwgaW1wLT5pbV9sdmwpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVNDMDFfSVJRX0xFVkVMOgotCQkJc2V0X2lycV9jaGlwKGlycWJhc2UrbiwgJm1zY19sZXZlbGlycV90eXBlKTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycWJhc2UrbiwKKwkJCQkmbXNjX2xldmVsaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQkJaWYgKGNwdV9oYXNfdmVpYykKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCAwKTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKaW5kZXggMGVlMjU2Ny4uNTVjOGEzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCSAqLwogCWlmIChjcHVfaGFzX21pcHNtdCkKIAkJZm9yIChpID0gaXJxX2Jhc2U7IGkgPCBpcnFfYmFzZSArIDI7IGkrKykKLQkJCXNldF9pcnFfY2hpcChpLCAmbWlwc19tdF9jcHVfaXJxX2NvbnRyb2xsZXIpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZtaXBzX210X2NwdV9pcnFfY29udHJvbGxlciwKKwkJCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CiAKIAlmb3IgKGkgPSBpcnFfYmFzZSArIDI7IGkgPCBpcnFfYmFzZSArIDg7IGkrKykKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZtaXBzX2NwdV9pcnFfY29udHJvbGxlciwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggMmE0NzI3MS4uNjI0MmJjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCBtZXJnZV82NChhMiwgYTMpKTsKIH0KIAotU1lTQ0FMTF9ERUZJTkU1KDMyX2xsc2VlaywgdW5zaWduZWQgbG9uZywgZmQsIHVuc2lnbmVkIGxvbmcsIG9mZnNldF9oaWdoLAotCXVuc2lnbmVkIGxvbmcsIG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiwgcmVzdWx0LAotCXVuc2lnbmVkIGxvbmcsIG9yaWdpbikKK1NZU0NBTExfREVGSU5FNSgzMl9sbHNlZWssIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgb2Zmc2V0X2hpZ2gsCisJCXVuc2lnbmVkIGludCwgb2Zmc2V0X2xvdywgbG9mZl90IF9fdXNlciAqLCByZXN1bHQsCisJCXVuc2lnbmVkIGludCwgb3JpZ2luKQogewogCXJldHVybiBzeXNfbGxzZWVrKGZkLCBvZmZzZXRfaGlnaCwgb2Zmc2V0X2xvdywgcmVzdWx0LCBvcmlnaW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDQ0MzBhMWYuLjI5NTBiOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTI3Nyw3ICsyNzcsOCBAQAogCSAqIG5vdCBzZWxlY3RlZC4gT25jZSB0aGF0IGRvbmUgd2UgY2FuIGRldGVybWluZSB0aGUgbG93IGJvdW5kCiAJICogb2YgdXNhYmxlIG1lbW9yeS4KIAkgKi8KLQlyZXNlcnZlZF9lbmQgPSBtYXgoaW5pdF9pbml0cmQoKSwgUEZOX1VQKF9fcGFfc3ltYm9sKCZfZW5kKSkpOworCXJlc2VydmVkX2VuZCA9IG1heChpbml0X2luaXRyZCgpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIFBGTl9VUChfX3BhX3N5bWJvbCgmX2VuZCkpKTsKIAogCS8qCiAJICogbWF4X2xvd19wZm4gaXMgbm90IGEgbnVtYmVyIG9mIHBhZ2VzLiBUaGUgbnVtYmVyIG9mIHBhZ2VzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC11cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtdXAuYwppbmRleCBlYWQ2YzMwLi44NzhlMzczIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC11cC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMKQEAgLTEzLDcgKzEzLDcgQEAKIC8qCiAgKiBTZW5kIGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHQKICAqLwotdm9pZCB1cF9zZW5kX2lwaV9zaW5nbGUoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3N0YXRpYyB2b2lkIHVwX3NlbmRfaXBpX3NpbmdsZShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogCXBhbmljKEtFUk5fRVJSICIlcyBjYWxsZWQiLCBfX2Z1bmNfXyk7CiB9CkBAIC0yNywzMSArMjcsMzEgQEAKICAqICBBZnRlciB3ZSd2ZSBkb25lIGluaXRpYWwgYm9vdCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gYWxsb3cgdGhlCiAgKiAgYm9hcmQgY29kZSB0byBjbGVhbiB1cCBzdGF0ZSwgaWYgbmVlZGVkCiAgKi8KLXZvaWQgX19jcHVpbml0IHVwX2luaXRfc2Vjb25kYXJ5KHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgdXBfaW5pdF9zZWNvbmRhcnkodm9pZCkKIHsKIH0KIAotdm9pZCBfX2NwdWluaXQgdXBfc21wX2ZpbmlzaCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHVwX3NtcF9maW5pc2godm9pZCkKIHsKIH0KIAogLyogSG9vayBmb3IgYWZ0ZXIgYWxsIENQVXMgYXJlIG9ubGluZSAqLwotdm9pZCB1cF9jcHVzX2RvbmUodm9pZCkKK3N0YXRpYyB2b2lkIHVwX2NwdXNfZG9uZSh2b2lkKQogewogfQogCiAvKgogICogRmlybXdhcmUgQ1BVIHN0YXJ0dXAgaG9vawogICovCi12b2lkIF9fY3B1aW5pdCB1cF9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgdXBfYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewogfQogCi12b2lkIF9faW5pdCB1cF9zbXBfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB1cF9zbXBfc2V0dXAodm9pZCkKIHsKIH0KIAotdm9pZCBfX2luaXQgdXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3N0YXRpYyB2b2lkIF9faW5pdCB1cF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwppbmRleCAzZGE5NDcwLi5jOTM3NTA2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAotdm9sYXRpbGUgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwkvKiBCaXRtYXNrIG9mIHN0YXJ0ZWQgc2Vjb25kYXJpZXMgKi8KK3N0YXRpYyB2b2xhdGlsZSBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CS8qIEJpdG1hc2sgb2Ygc3RhcnRlZCBzZWNvbmRhcmllcyAqLwogaW50IF9fY3B1X251bWJlcl9tYXBbTlJfQ1BVU107CQkvKiBNYXAgcGh5c2ljYWwgdG8gbG9naWNhbCAqLwogaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwkJLyogTWFwIGxvZ2ljYWwgdG8gcGh5c2ljYWwgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDI5ZmFkYWMuLmU4M2RhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTEyNzcsOCArMTI3Nyw3IEBACiAJdTMyICp3OwogCXVuc2lnbmVkIGNoYXIgKmI7CiAKLQlpZiAoIWNwdV9oYXNfdmVpYyAmJiAhY3B1X2hhc192aW50KQotCQlCVUcoKTsKKwlCVUdfT04oIWNwdV9oYXNfdmVpYyAmJiAhY3B1X2hhc192aW50KTsKIAogCWlmIChhZGRyID09IE5VTEwpIHsKIAkJaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKSBkb19kZWZhdWx0X3ZpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCA4NzFlODI4Li41OGQ5MDc1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtMTAyNiwxMyArMTAyNiw3IEBACiAJCWMtPmljYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX1ZUQUc7CiAJCWJyZWFrOwogCi0JY2FzZSBDUFVfQVUxMDAwOgotCWNhc2UgQ1BVX0FVMTUwMDoKLQljYXNlIENQVV9BVTExMDA6Ci0JY2FzZSBDUFVfQVUxNTUwOgotCWNhc2UgQ1BVX0FVMTIwMDoKLQljYXNlIENQVV9BVTEyMTA6Ci0JY2FzZSBDUFVfQVUxMjUwOgorCWNhc2UgQ1BVX0FMQ0hFTVk6CiAJCWMtPmljYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX0lDX0ZfREM7CiAJCWJyZWFrOwogCX0KQEAgLTEyNDQsNyArMTIzOCw3IEBACiAJLyoKIAkgKiBBdTExMDAgZXJyYXRhIGFjdHVhbGx5IGtlZXBzIHNpbGVuY2UgYWJvdXQgdGhpcyBiaXQsIHNvIHdlIHNldCBpdAogCSAqIGp1c3QgaW4gY2FzZSBmb3IgdGhvc2UgcmV2aXNpb25zIHRoYXQgcmVxdWlyZSBpdCB0byBiZSBzZXQgYWNjb3JkaW5nCi0JICogdG8gYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY3B1dGFibGUuYworCSAqIHRvIHRoZSAobm93IGdvbmUpIGNwdSB0YWJsZS4KIAkgKi8KIAljYXNlIDB4MDIwMzAyMDA6IC8qIEF1MTEwMCBBQiAqLwogCWNhc2UgMHgwMjAzMDIwMTogLyogQXUxMTAwIEJBICovCkBAIC0xMzE0LDExICsxMzA4LDEwIEBACiAJCWJyZWFrOwogCS8qCiAJICogV2UgbmVlZCB0byBjYXRjaCB0aGUgZWFybHkgQWxjaGVteSBTT0NzIHdpdGgKLQkgKiB0aGUgd3JpdGUtb25seSBjb19jb25maWcub2QgYml0IGFuZCBzZXQgaXQgYmFjayB0byBvbmUuLi4KKwkgKiB0aGUgd3JpdGUtb25seSBjb19jb25maWcub2QgYml0IGFuZCBzZXQgaXQgYmFjayB0byBvbmUgb246CisJICogQXUxMDAwIHJldiBEQSwgSEEsIEhCOyAgQXUxMTAwIEFCLCBCQSwgQkMsIEF1MTUwMCBBQgogCSAqLwotCWNhc2UgQ1BVX0FVMTAwMDogLyogcmV2LiBEQSwgSEEsIEhCICovCi0JY2FzZSBDUFVfQVUxMTAwOiAvKiByZXYuIEFCLCBCQSwgQkMgPz8gKi8KLQljYXNlIENQVV9BVTE1MDA6IC8qIHJldi4gQUIgKi8KKwljYXNlIENQVV9BTENIRU1ZOgogCQlhdTF4MDBfZml4dXBfY29uZmlnX29kKCk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwppbmRleCA4ZjJjZDhlLi4wNjBkMjhkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKQEAgLTE3LDggKzE3LDcgQEAKIAogdm9pZCBfX2t1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCUJVRygpOworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJcmV0dXJuOwogCWt1bm1hcF9oaWdoKHBhZ2UpOwpAQCAtNDYsOCArNDUsNyBAQAogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCi0JaWYgKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKQotCQlCVUcoKTsKKwlCVUdfT04oIXB0ZV9ub25lKCooa21hcF9wdGUgLSBpZHgpKSk7CiAjZW5kaWYKIAlzZXRfcHRlKGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIGttYXBfcHJvdCkpOwogCWxvY2FsX2ZsdXNoX3RsYl9vbmUoKHVuc2lnbmVkIGxvbmcpdmFkZHIpOwpAQCAtNjYsOCArNjQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHZhZGRyICE9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4raWR4KSkKLQkJQlVHKCk7CisJQlVHX09OKHZhZGRyICE9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpKTsKIAogCS8qCiAJICogZm9yY2Ugb3RoZXIgbWFwcGluZ3MgdG8gT29wcyBpZiB0aGV5J2xsIHRyeSB0byBhY2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDEzN2MxNGIuLmQ5MzQ4OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMzA3LDggKzMwNyw3IEBACiAJCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCQkJCXB0ZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwogCQkJCQlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcHRlKSk7Ci0JCQkJCWlmIChwdGUgIT0gcHRlX29mZnNldF9rZXJuZWwocG1kLCAwKSkKLQkJCQkJCUJVRygpOworCQkJCQlCVUdfT04ocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpOwogCQkJCX0KIAkJCQl2YWRkciArPSBQTURfU0laRTsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMgYi9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCmluZGV4IDU5OTQ1YjkuLjBjNDMyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9taXBzL21tL2lvcmVtYXAuYwpAQCAtMjcsOCArMjcsNyBAQAogCWVuZCA9IGFkZHJlc3MgKyBzaXplOwogCWlmIChlbmQgPiBQTURfU0laRSkKIAkJZW5kID0gUE1EX1NJWkU7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwogCXBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwogCWRvIHsKIAkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgewpAQCAtNTIsOCArNTEsNyBAQAogCWlmIChlbmQgPiBQR0RJUl9TSVpFKQogCQllbmQgPSBQR0RJUl9TSVpFOwogCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKIAlkbyB7CiAJCXB0ZV90ICogcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHJlc3MpOwogCQlpZiAoIXB0ZSkKQEAgLTc1LDggKzczLDcgQEAKIAlwaHlzX2FkZHIgLT0gYWRkcmVzczsKIAlkaXIgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOworCUJVR19PTihhZGRyZXNzID49IGVuZCk7CiAJZG8gewogCQlwdWRfdCAqcHVkOwogCQlwbWRfdCAqcG1kOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCBmMzM1Y2Y2Li4wNjE1YjYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtMjkyLDEzICsyOTIsNiBAQAogCWNhc2UgQ1BVX1I0MzAwOgogCWNhc2UgQ1BVXzVLQzoKIAljYXNlIENQVV9UWDQ5WFg6Ci0JY2FzZSBDUFVfQVUxMDAwOgotCWNhc2UgQ1BVX0FVMTEwMDoKLQljYXNlIENQVV9BVTE1MDA6Ci0JY2FzZSBDUFVfQVUxNTUwOgotCWNhc2UgQ1BVX0FVMTIwMDoKLQljYXNlIENQVV9BVTEyMTA6Ci0JY2FzZSBDUFVfQVUxMjUwOgogCWNhc2UgQ1BVX1BSNDQ1MDoKIAkJdWFzbV9pX25vcChwKTsKIAkJdGxidyhwKTsKQEAgLTMyMSw2ICszMTQsNyBAQAogCWNhc2UgQ1BVX1I1NTAwOgogCQlpZiAobTRrY190bGJwX3dhcigpKQogCQkJdWFzbV9pX25vcChwKTsKKwljYXNlIENQVV9BTENIRU1ZOgogCQl0bGJ3KHApOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYwppbmRleCA0ODMyYWYyLi40NzUwMzhhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYwpAQCAtNDgsNyArNDgsNyBAQAogCiBpbnQgaW5pdF9kZWJ1ZyA9IDA7CiAKLWludCBtaXBzX3JldmlzaW9uX2NvcmlkOworc3RhdGljIGludCBtaXBzX3JldmlzaW9uX2NvcmlkOwogaW50IG1pcHNfcmV2aXNpb25fc2NvbmlkOwogCiAvKiBCb25pdG82NCBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlciBiYXNlLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctYmVyci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctYmVyci5jCmluZGV4IDdkMDVlNjguLjA0Y2ViYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1iZXJyLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlwcmludGsoIlNsaWNlICVjIGdvdCAlY2JlIGF0IDB4JWx4XG4iLCAnQScgKyBjcHUsIGRhdGEgPyAnZCcgOiAnaScsCiAJICAgICAgIHJlZ3MtPmNwMF9lcGMpOwogCXByaW50aygiSHViIGluZm9ybWF0aW9uOlxuIik7Ci0JcHJpbnRrKCJFUlJfSU5UX1BFTkQgPSAweCUwNmx4XG4iLCBMT0NBTF9IVUJfTChQSV9FUlJfSU5UX1BFTkQpKTsKKwlwcmludGsoIkVSUl9JTlRfUEVORCA9IDB4JTA2bGx4XG4iLCBMT0NBTF9IVUJfTChQSV9FUlJfSU5UX1BFTkQpKTsKIAllcnJzdDAgPSBMT0NBTF9IVUJfTChjcHUgPyBQSV9FUlJfU1RBVFVTMF9CIDogUElfRVJSX1NUQVRVUzBfQSk7CiAJZXJyc3QxID0gTE9DQUxfSFVCX0woY3B1ID8gUElfRVJSX1NUQVRVUzFfQiA6IFBJX0VSUl9TVEFUVVMxX0EpOwogCWR1bXBfaHViX2luZm9ybWF0aW9uKGVycnN0MCwgZXJyc3QxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMKaW5kZXggNjQ0NTllNy4uYTFmMjFkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMKQEAgLTE0Myw4ICsxNDMsOCBAQAogCXBlbmQwID0gUkVNT1RFX0hVQl9MKG5hc2lkLCBQSV9JTlRfUEVORDApOwogCXBlbmQxID0gUkVNT1RFX0hVQl9MKG5hc2lkLCBQSV9JTlRfUEVORDEpOwogCi0JcHJpbnRrKCJQSV9JTlRfTUFTSzA6ICUxNmx4IFBJX0lOVF9NQVNLMTogJTE2bHhcbiIsIG1hc2swLCBtYXNrMSk7Ci0JcHJpbnRrKCJQSV9JTlRfUEVORDA6ICUxNmx4IFBJX0lOVF9QRU5EMTogJTE2bHhcbiIsIHBlbmQwLCBwZW5kMSk7CisJcHJpbnRrKCJQSV9JTlRfTUFTSzA6ICUxNkx4IFBJX0lOVF9NQVNLMTogJTE2THhcbiIsIG1hc2swLCBtYXNrMSk7CisJcHJpbnRrKCJQSV9JTlRfUEVORDA6ICUxNkx4IFBJX0lOVF9QRU5EMTogJTE2THhcbiIsIHBlbmQwLCBwZW5kMSk7CiAJcHJpbnRrKCJcblxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggMGQ2YjY2Ni4uMGFlZmM1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTMyNSwxNiArMzI1LDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBtYWNlX2ludDsKIAotCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBNQUNFSVNBX1BBUkFMTEVMX0lSUToKLQljYXNlIE1BQ0VJU0FfU0VSSUFMMV9URE1BUFJfSVJROgotCWNhc2UgTUFDRUlTQV9TRVJJQUwyX1RETUFQUl9JUlE6Ci0JCS8qIGVkZ2UgdHJpZ2dlcmVkICovCi0JCW1hY2VfaW50ID0gbWFjZS0+cGVyaWYuY3RybC5pc3RhdDsKLQkJbWFjZV9pbnQgJj0gfigxIDw8IChpcnEgLSBNQUNFSVNBX0FVRElPX1NXX0lSUSkpOwotCQltYWNlLT5wZXJpZi5jdHJsLmlzdGF0ID0gbWFjZV9pbnQ7Ci0JCWJyZWFrOwotCX0KKwkvKiBlZGdlIHRyaWdnZXJlZCAqLworCW1hY2VfaW50ID0gbWFjZS0+cGVyaWYuY3RybC5pc3RhdDsKKwltYWNlX2ludCAmPSB+KDEgPDwgKGlycSAtIE1BQ0VJU0FfQVVESU9fU1dfSVJRKSk7CisJbWFjZS0+cGVyaWYuY3RybC5pc3RhdCA9IG1hY2VfaW50OworCiAJZGlzYWJsZV9tYWNlaXNhX2lycShpcnEpOwogfQogCkBAIC0zNDQsNyArMzM5LDE2IEBACiAJCWVuYWJsZV9tYWNlaXNhX2lycShpcnEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9pbnRlcnJ1cHQgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9sZXZlbF9pbnRlcnJ1cHQgPSB7CisJLm5hbWUJCT0gIklQMzIgTUFDRSBJU0EiLAorCS5hY2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKKwkubWFzawkJPSBkaXNhYmxlX21hY2Vpc2FfaXJxLAorCS5tYXNrX2Fjawk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCisJLnVubWFzawkJPSBlbmFibGVfbWFjZWlzYV9pcnEsCisJLmVuZAkJPSBlbmRfbWFjZWlzYV9pcnEsCit9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9lZGdlX2ludGVycnVwdCA9IHsKIAkubmFtZQkJPSAiSVAzMiBNQUNFIElTQSIsCiAJLmFjawkJPSBtYXNrX2FuZF9hY2tfbWFjZWlzYV9pcnEsCiAJLm1hc2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKQEAgLTUwMCwyNyArNTA0LDUwIEBACiAJZm9yIChpcnEgPSBDUklNRV9JUlFfQkFTRTsgaXJxIDw9IElQMzJfSVJRX01BWDsgaXJxKyspIHsKIAkJc3dpdGNoIChpcnEpIHsKIAkJY2FzZSBNQUNFX1ZJRF9JTjFfSVJRIC4uLiBNQUNFX1BDSV9CUklER0VfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCZpcDMyX21hY2VfaW50ZXJydXB0LAorCQkJCWhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBNQUNFUENJX1NDU0kwX0lSUSAuLi4gIE1BQ0VQQ0lfU0hBUkVEMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmaXAzMl9tYWNlcGNpX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmlwMzJfbWFjZXBjaV9pbnRlcnJ1cHQsIGhhbmRsZV9sZXZlbF9pcnEsCisJCQkJImxldmVsIik7CiAJCQlicmVhazsKKwogCQljYXNlIENSSU1FX0dCRTBfSVJRIC4uLiBDUklNRV9HQkUzX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKIAkJY2FzZSBDUklNRV9DUFVFUlJfSVJROgogCQljYXNlIENSSU1FX01FTUVSUl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfbGV2ZWxfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmY3JpbWVfbGV2ZWxfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9SRV9FTVBUWV9FX0lSUSAuLi4gQ1JJTUVfUkVfSURMRV9FX0lSUToKIAkJY2FzZSBDUklNRV9TT0ZUMF9JUlEgLi4uIENSSU1FX1NPRlQyX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKKwogCQljYXNlIENSSU1FX1ZJQ0VfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNyaW1lX2VkZ2VfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAkJCWJyZWFrOworCisJCWNhc2UgTUFDRUlTQV9QQVJBTExFTF9JUlE6CisJCWNhc2UgTUFDRUlTQV9TRVJJQUwxX1RETUFQUl9JUlE6CisJCWNhc2UgTUFDRUlTQV9TRVJJQUwyX1RETUFQUl9JUlE6CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmlwMzJfbWFjZWlzYV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLAorCQkJCSJlZGdlIik7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZWlzYV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2Vpc2FfbGV2ZWxfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCmluZGV4IGNhOTNlY2YuLjgyOGNlMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCkBAIC0zNiw3ICszNiw3IEBACiAJCWlmIChiYXNlICsgc2l6ZSA+ICgyNTYgPDwgMjApKQogCQkJYmFzZSArPSBDUklNRV9ISV9NRU1fQkFTRTsKIAotCQlwcmludGsoIkNSSU1FIE1DOiBiYW5rICV1IGJhc2UgMHglMDE2bHggc2l6ZSAlbHVNaUJcbiIsCisJCXByaW50aygiQ1JJTUUgTUM6IGJhbmsgJXUgYmFzZSAweCUwMTZMeCBzaXplICVMdU1pQlxuIiwKIAkJCWJhbmssIGJhc2UsIHNpemUgPj4gMjApOwogCQlhZGRfbWVtb3J5X3JlZ2lvbihiYXNlLCBzaXplLCBCT09UX01FTV9SQU0pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCAxMmI0NjVkLi4zNTIzNTJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBCQ00xNDgwX05SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJmJjbTE0ODBfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmJjbTE0ODBfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCQliY20xNDgwX2lycV9vd25lcltpXSA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCA4MDhhYzI5Li5jMDhmZjU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0IxMjUwX05SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJnNiMTI1MF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc2IxMjUwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2IxMjUwX2lycV9vd25lcltpXSA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9hMjByLmMgYi9hcmNoL21pcHMvc25pL2EyMHIuYwppbmRleCAzZjhjZjVlLi43ZGQ3NmZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL2EyMHIuYworKysgYi9hcmNoL21pcHMvc25pL2EyMHIuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSBTTklfQTIwUl9JUlFfQkFTRSArIDIgOyBpIDwgU05JX0EyMFJfSVJRX0JBU0UgKyA4OyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmYTIwcl9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmYTIwcl9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gYTIwcl9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CiAJc2V0dXBfaXJxKFNOSV9BMjBSX0lSUV9CQVNFICsgMywgJnNuaV9pc2FfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpbXQuYyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwppbmRleCA4MzQ2NTBmLi43NGU2YzY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaW10LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2ltdC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCS8qIEFjdHVhbGx5IHdlJ3ZlIGdvdCBtb3JlIGludGVycnVwdHMgdG8gaGFuZGxlIC4uLiAgKi8KIAlmb3IgKGkgPSBQQ0lNVF9JUlFfSU5UMjsgaSA8PSBQQ0lNVF9JUlFfU0NTSTsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnBjaW10X2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZwY2ltdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gc25pX3BjaW10X2h3aW50OwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlExfElFX0lSUTMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9wY2l0LmMgYi9hcmNoL21pcHMvc25pL3BjaXQuYwppbmRleCBlNWYxMmNmLi4wNzFhOTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaXQuYworKysgYi9hcmNoL21pcHMvc25pL3BjaXQuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCWZvciAoaSA9IFNOSV9QQ0lUX0lOVF9TVEFSVDsgaSA8PSBTTklfUENJVF9JTlRfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmcGNpdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHID0gMDsKIAlzbmlfaHdpbnQgPSBzbmlfcGNpdF9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMSk7CkBAIC0yNTksNyArMjU5LDcgQEAKIAogCW1pcHNfY3B1X2lycV9pbml0KCk7CiAJZm9yIChpID0gU05JX1BDSVRfSU5UX1NUQVJUOyBpIDw9IFNOSV9QQ0lUX0lOVF9FTkQ7IGkrKykKLQkJc2V0X2lycV9jaGlwKGksICZwY2l0X2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZwY2l0X2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkqKHZvbGF0aWxlIHUzMiAqKVNOSV9QQ0lUX0lOVF9SRUcgPSAweDQwMDAwMDAwOwogCXNuaV9od2ludCA9IHNuaV9wY2l0X2h3aW50X2NwbHVzOwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcm0yMDAuYyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwppbmRleCA1MzEwYWE3Li5iNDM1MmEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3JtMjAwLmMKKysrIGIvYXJjaC9taXBzL3NuaS9ybTIwMC5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCS8qIEFjdHVhbGx5IHdlJ3ZlIGdvdCBtb3JlIGludGVycnVwdHMgdG8gaGFuZGxlIC4uLiAgKi8KIAlmb3IgKGkgPSBTTklfUk0yMDBfSU5UX1NUQVJUOyBpIDw9IFNOSV9STTIwMF9JTlRfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmcm0yMDBfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnJtMjAwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlzbmlfaHdpbnQgPSBzbmlfcm0yMDBfaHdpbnQ7CiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTApOwogCXNldHVwX2lycShTTklfUk0yMDBfSU5UX1NUQVJUICsgMCwgJnNuaV9ybTIwMF9pODI1OUFfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L0tjb25maWcgYi9hcmNoL21pcHMvdHh4OS9LY29uZmlnCmluZGV4IDIyNmU4YmIuLjBkYjdjZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3R4eDkvS2NvbmZpZwpAQCAtMjAsNyArMjAsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCiBjb25maWcgVE9TSElCQV9KTVIzOTI3CiAJYm9vbCAiVG9zaGliYSBKTVItVFgzOTI3IGJvYXJkIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA3NGNjMzEyLi5hZDZiMWMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTExLDYgKzExMSw3IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVApAQCAtMzEyLDcgKzMxMyw3IEBACiAKIGNvbmZpZyBLRVhFQwogCWJvb2wgImtleGVjIHN5c3RlbSBjYWxsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gKFBQQ19QUlBNQzI4MDAgfHwgUFBDX01VTFRJUExBVEZPUk0pICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gQk9PSzNTICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290CkBAIC00MDksNiArNDEwLDE4IEBACiAJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgbgogCitjb25maWcgU1REQklOVVRJTFMKKwlib29sICJVc2luZyBzdGFuZGFyZCBiaW51dGlscyBzZXR0aW5ncyIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFR1cm5pbmcgdGhpcyBvcHRpb24gb2ZmIGFsbG93cyB5b3UgdG8gc2VsZWN0IDI1NktCIFBBR0VfU0laRSBvbiA0NHguCisJICBOb3RlLCB0aGF0IGtlcm5lbCB3aWxsIGJlIGFibGUgdG8gcnVuIG9ubHkgdGhvc2UgYXBwbGljYXRpb25zLAorCSAgd2hpY2ggaGFkIGJlZW4gY29tcGlsZWQgdXNpbmcgYmludXRpbHMgbGF0ZXIgdGhhbiAyLjE3LjUwLjAuMyB3aXRoCisJICAnLXptYXgtcGFnZS1zaXplJyBzZXQgdG8gMjU2SyAodGhlIGRlZmF1bHQgaXMgNjRLKS4gT3IsIGlmIHVzaW5nCisJICB0aGUgb2xkZXIgYmludXRpbHMsIHlvdSBjYW4gcGF0Y2ggdGhlbSB3aXRoIGEgdHJpdmlhbCBwYXRjaCwgd2hpY2gKKwkgIGNoYW5nZXMgdGhlIEVMRl9NQVhQQUdFU0laRSBkZWZpbml0aW9uIGZyb20gMHgxMDAwMCB0byAweDQwMDAwLgorCiBjaG9pY2UKIAlwcm9tcHQgIlBhZ2Ugc2l6ZSIKIAlkZWZhdWx0IFBQQ180S19QQUdFUwpAQCAtNDQ0LDYgKzQ1NywxOSBAQAogCWJvb2wgIjY0ayBwYWdlIHNpemUiIGlmIDQ0eCB8fCBQUENfU1REX01NVV82NAogCXNlbGVjdCBQUENfSEFTX0hBU0hfNjRLIGlmIFBQQ19TVERfTU1VXzY0CiAKK2NvbmZpZyBQUENfMjU2S19QQUdFUworCWJvb2wgIjI1NmsgcGFnZSBzaXplIiBpZiA0NHgKKwlkZXBlbmRzIG9uICFTVERCSU5VVElMUyAmJiAoIVNITUVNIHx8IEJST0tFTikKKwloZWxwCisJICBNYWtlIHRoZSBwYWdlIHNpemUgMjU2ay4KKworCSAgQXMgdGhlIEVMRiBzdGFuZGFyZCBvbmx5IHJlcXVpcmVzIGFsaWdubWVudCB0byBzdXBwb3J0IHBhZ2UKKwkgIHNpemVzIHVwIHRvIDY0aywgeW91IHdpbGwgbmVlZCB0byBjb21waWxlIGFsbCBvZiB5b3VyIHVzZXIKKwkgIHNwYWNlIGFwcGxpY2F0aW9ucyB3aXRoIGEgbm9uLXN0YW5kYXJkIGJpbnV0aWxzIHNldHRpbmdzCisJICAoc2VlIHRoZSBTVERCSU5VVElMUyBkZXNjcmlwdGlvbiBmb3IgZGV0YWlscykuCisKKwkgIFNheSBOIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKIGVuZGNob2ljZQogCiBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgpAQCAtNDU2LDYgKzQ4Miw4IEBACiAJZGVmYXVsdCAiOSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzE2S19QQUdFUwogCXJhbmdlIDcgNjQgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjciIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ182NEtfUEFHRVMKKwlyYW5nZSA1IDY0IGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18yNTZLX1BBR0VTCisJZGVmYXVsdCAiNSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzI1NktfUEFHRVMKIAlyYW5nZSAxMSA2NAogCWRlZmF1bHQgIjExIgogCWhlbHAKQEAgLTU5NCw2ICs2MjIsNyBAQAogY29uZmlnIEZTTF9QQ0kKICAJYm9vbAogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCisJc2VsZWN0IFBDSV9RVUlSS1MKIAogY29uZmlnIDR4eF9TT0MKIAlib29sCkBAIC03MzAsNiArNzU5LDIyIEBACiAJaGV4ICJNYXhpbXVtIGxvdyBtZW1vcnkgc2l6ZSAoaW4gYnl0ZXMpIiBpZiBMT1dNRU1fU0laRV9CT09MCiAJZGVmYXVsdCAiMHgzMDAwMDAwMCIKIAorY29uZmlnIExPV01FTV9DQU1fTlVNX0JPT0wKKwlib29sICJTZXQgbnVtYmVyIG9mIENBTXMgdG8gdXNlIHRvIG1hcCBsb3cgbWVtb3J5IgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiBGU0xfQk9PS0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ0FNIHNsb3RzIHRoYXQKKwkgIHdpbGwgYmUgdXNlZCB0byBtYXAgbG93IG1lbW9yeS4gIFRoZXJlIGFyZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHNsb3RzCisJICBhdmFpbGFibGUgYW5kIGV2ZW4gbW9yZSBsaW1pdGVkIG51bWJlciB0aGF0IHdpbGwgZml0IGluIHRoZSBMMSBNTVUuCisJICBIb3dldmVyLCB1c2luZyBtb3JlIGVudHJpZXMgd2lsbCBhbGxvdyBtYXBwaW5nIG1vcmUgbG93IG1lbW9yeS4gIFRoaXMKKwkgIGNhbiBiZSB1c2VmdWwgaW4gb3B0aW1pemluZyB0aGUgbGF5b3V0IG9mIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTE9XTUVNX0NBTV9OVU0KKwlpbnQgIk51bWJlciBvZiBDQU1zIHRvIHVzZSB0byBtYXAgbG93IG1lbW9yeSIgaWYgTE9XTUVNX0NBTV9OVU1fQk9PTAorCWRlZmF1bHQgMworCiBjb25maWcgUkVMT0NBVEFCTEUKIAlib29sICJCdWlsZCBhIHJlbG9jYXRhYmxlIGtlcm5lbCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBBRFZBTkNFRF9PUFRJT05TICYmIEZMQVRNRU0gJiYgRlNMX0JPT0tFCkBAIC03OTQsNyArODM5LDcgQEAKIAogY29uZmlnIFBIWVNJQ0FMX0FMSUdOCiAJaGV4Ci0JZGVmYXVsdCAiMHgxMDAwMDAwMCIgaWYgRlNMX0JPT0tFCisJZGVmYXVsdCAiMHgwNDAwMDAwMCIgaWYgRlNMX0JPT0tFCiAJaGVscAogCSAgVGhpcyB2YWx1ZSBwdXRzIHRoZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIG9uIHBoeXNpY2FsIGFkZHJlc3MKIAkgIHdoZXJlIGtlcm5lbCBpcyBsb2FkZWQgYW5kIHJ1biBmcm9tLiBLZXJuZWwgaXMgY29tcGlsZWQgZm9yIGFuCkBAIC04MTUsMzEgKzg2MCw2IEBACiAJZGVmYXVsdCAiMHg4MDAwMDAwMCIgaWYgUFBDX1BSRVAgfHwgUFBDXzh4eAogCWRlZmF1bHQgIjB4YzAwMDAwMDAiCiAKLWNvbmZpZyBDT05TSVNURU5UX1NUQVJUX0JPT0wKLQlib29sICJTZXQgY3VzdG9tIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wgYWRkcmVzcyIKLQlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIGJhc2UgdmlydHVhbCBhZGRyZXNzCi0JICBvZiB0aGUgY29uc2lzdGVudCBtZW1vcnkgcG9vbC4gIFRoaXMgcG9vbCBvZiB2aXJ0dWFsCi0JICBtZW1vcnkgaXMgdXNlZCB0byBtYWtlIGNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb25zLgotCi1jb25maWcgQ09OU0lTVEVOVF9TVEFSVAotCWhleCAiQmFzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgY29uc2lzdGVudCBtZW1vcnkgcG9vbCIgaWYgQ09OU0lTVEVOVF9TVEFSVF9CT09MCi0JZGVmYXVsdCAiMHhmZDAwMDAwMCIgaWYgKE5PVF9DT0hFUkVOVF9DQUNIRSAmJiA4eHgpCi0JZGVmYXVsdCAiMHhmZjEwMDAwMCIgaWYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0KLWNvbmZpZyBDT05TSVNURU5UX1NJWkVfQk9PTAotCWJvb2wgIlNldCBjdXN0b20gY29uc2lzdGVudCBtZW1vcnkgcG9vbCBzaXplIgotCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiBOT1RfQ09IRVJFTlRfQ0FDSEUKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUKLQkgIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wuICBUaGlzIHBvb2wgb2YgdmlydHVhbCBtZW1vcnkKLQkgIGlzIHVzZWQgdG8gbWFrZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9ucy4KLQotY29uZmlnIENPTlNJU1RFTlRfU0laRQotCWhleCAiU2l6ZSBvZiBjb25zaXN0ZW50IG1lbW9yeSBwb29sIiBpZiBDT05TSVNURU5UX1NJWkVfQk9PTAotCWRlZmF1bHQgIjB4MDAyMDAwMDAiIGlmIE5PVF9DT0hFUkVOVF9DQUNIRQotCiBjb25maWcgUElOX1RMQgogCWJvb2wgIlBpbm5lZCBLZXJuZWwgVExCcyAoODYwIE9OTFkpIgogCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiA4eHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggMDhmN2NjMC4uMjIwOTFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTEyOSw3ICsxMjksNyBAQAogCiBjb25maWcgQk9PVFhfVEVYVAogCWJvb2wgIlN1cHBvcnQgZm9yIGVhcmx5IGJvb3QgdGV4dCBjb25zb2xlIChCb290WCBvciBPcGVuRmlybXdhcmUgb25seSkiCi0JZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIFBQQ19PRiAmJiBQUENfQk9PSzNTCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWUgcHJvZ3Jlc3MgbWVzc2FnZXMgZnJvbSB0aGUgYm9vdCBmaXJtd2FyZSBpbiB0ZXh0CiAJICBtb2RlLiBSZXF1aXJlcyBlaXRoZXIgQm9vdFggb3IgT3BlbiBGaXJtd2FyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCA3MmQxN2Y1Li41NTFmYzU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC0xNDcsOCArMTQ3LDggQEAKIAkJCQkgICBhcmNoL3Bvd2VycGMvbW0vIFwKIAkJCQkgICBhcmNoL3Bvd2VycGMvbGliLyBcCiAJCQkJICAgYXJjaC9wb3dlcnBjL3N5c2Rldi8gXAotCQkJCSAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvCi1jb3JlLSQoQ09ORklHX01BVEhfRU1VTEFUSU9OKQkrPSBhcmNoL3Bvd2VycGMvbWF0aC1lbXUvCisJCQkJICAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy8gXAorCQkJCSAgIGFyY2gvcG93ZXJwYy9tYXRoLWVtdS8KIGNvcmUtJChDT05GSUdfWE1PTikJCSs9IGFyY2gvcG93ZXJwYy94bW9uLwogY29yZS0kKENPTkZJR19LVk0pIAkJKz0gYXJjaC9wb3dlcnBjL2t2bS8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCBlODRkZjMzLi40NDU4YWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtNzAsNyArNzAsNyBAQAogCQljdWJvb3Qta2F0bWFpLmMgY3Vib290LXJhaW5pZXIuYyByZWRib290LTh4eC5jIGVwODI0OGUuYyBcCiAJCWN1Ym9vdC13YXJwLmMgY3Vib290LTg1eHgtY3BtMi5jIGN1Ym9vdC15b3NlbWl0ZS5jIHNpbXBsZWJvb3QuYyBcCiAJCXZpcnRleDQwNS1oZWFkLlMgdmlydGV4LmMgcmVkYm9vdC04M3h4LmMgY3Vib290LXNhbTQ0MGVwLmMgXAotCQljdWJvb3QtYWNhZGlhLmMKKwkJY3Vib290LWFjYWRpYS5jIGN1Ym9vdC1hbWlnYW9uZS5jCiBzcmMtYm9vdCA6PSAkKHNyYy13bGliKSAkKHNyYy1wbGF0KSBlbXB0eS5jCiAKIHNyYy1ib290IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sICQoc3JjLWJvb3QpKQpAQCAtMjM1LDcgKzIzNSw5IEBACiAJCQkJCSAgIGR0YkltYWdlLmFkZGVyODc1LXJlZGJvb3QKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vNTJ4eC9LY29uZmlnCi1pbWFnZS0kKENPTkZJR19QUENfTElURTUyMDApCQkrPSBjdUltYWdlLmxpdGU1MjAwIGN1SW1hZ2UubGl0ZTUyMDBiCitpbWFnZS0kKENPTkZJR19QUENfTElURTUyMDApCQkrPSBjdUltYWdlLmxpdGU1MjAwIGxpdGU1MjAwLmR0YgoraW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMGIgbGl0ZTUyMDBiLmR0YgoraW1hZ2UtJChDT05GSUdfUFBDX01FRElBNTIwMCkJCSs9IGN1SW1hZ2UubWVkaWE1MjAwIG1lZGlhNTIwMC5kdGIKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vODJ4eC9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19NUEM4MjcyX0FEUykJCSs9IGN1SW1hZ2UubXBjODI3MmFkcwpAQCAtMjc0LDYgKzI3Niw5IEBACiBpbWFnZS0kKENPTkZJR19NUEM3NDQ4SFBDMikJCSs9IGN1SW1hZ2UubXBjNzQ0OGhwYzIKIGltYWdlLSQoQ09ORklHX1BQQ19DMkspCQkJKz0gY3VJbWFnZS5jMmsKIAorIyBCb2FyZCBwb3J0IGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS9hbWlnYW9uZS9LY29uZmlnCitpbWFnZS0kKENPTkZJR19BTUlHQU9ORSkJCSs9IGN1SW1hZ2UuYW1pZ2FvbmUKKwogIyBGb3IgMzItYml0IHBvd2VybWFjcywgYnVpbGQgdGhlIENPRkYgYW5kIG1pYm9vdCBpbWFnZXMKICMgYXMgd2VsbCBhcyB0aGUgRUxGIGltYWdlcy4KIGlmZXEgKCQoQ09ORklHX1BQQzMyKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtYW1pZ2FvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIE9sZCBVLWJvb3QgY29tcGF0aWJpbGl0eSBmb3IgQW1pZ2FPbmUKKyAqCisgKiBBdXRob3I6IEdlcmhhcmQgUGlyY2hlciAoZ2VyaGFyZF9waXJjaGVyQGdteC5uZXQpCisgKgorICogICBCYXNlZCBvbiBjdWJvb3QtODN4eC5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgImN1Ym9vdC5oIgorCisjaW5jbHVkZSAicHBjYm9vdC5oIgorCitzdGF0aWMgYmRfdCBiZDsKKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZml4dXBzKHZvaWQpCit7CisJZHRfZml4dXBfbWVtb3J5KGJkLmJpX21lbXN0YXJ0LCBiZC5iaV9tZW1zaXplKTsKKwlkdF9maXh1cF9jcHVfY2xvY2tzKGJkLmJpX2ludGZyZXEsIGJkLmJpX2J1c2ZyZXEgLyA0LCBiZC5iaV9idXNmcmVxKTsKK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlDVUJPT1RfSU5JVCgpOworCWZkdF9pbml0KF9kdGJfc3RhcnQpOworCXNlcmlhbF9jb25zb2xlX2luaXQoKTsKKwlwbGF0Zm9ybV9vcHMuZml4dXBzID0gcGxhdGZvcm1fZml4dXBzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FtaWdhb25lLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NDlmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBBbWlnYU9uZSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHZXJoYXJkIFBpcmNoZXIgKGdlcmhhcmRfcGlyY2hlckBnbXgubmV0KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkFtaWdhT25lIjsKKwljb21wYXRpYmxlID0gImV5ZXRlY2gsYW1pZ2FvbmUiOworCWNvaGVyZW5jeS1vZmY7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2NwdXMgPSA8MT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIDMzLjMgTUh6LCBmcm9tIFUtYm9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIFUtYm9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAwPjsJCQkJLy8gRnJvbSBVLWJvb3QKKwl9OworCisJcGNpQDgwMDAwMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJtYWktbG9naWMsYXJ0aWNpYS1zIjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAwIDB4MDBjMDAwMDAJLy8gUENJIEkvTworCQkgICAgICAgICAgMHgwMjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4N2QwMDAwMDAJLy8gUENJIG1lbW9yeQorCQkgICAgICAgICAgMHgwMjAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZDAwMDAwMCAwIDB4MDEwMDAwMDA+OwkvLyBQQ0kgYWxpYXMgbWVtb3J5IChJU0EpCisJCS8vIENvbmZpZ3VyYXRpb24gYWRkcmVzcyBhbmQgZGF0YSByZWdpc3Rlci4KKwkJcmVnID0gPDB4ZmVjMDBjZjggNAorCQkgICAgICAgMHhmZWUwMGNmYyA0PjsKKwkJODI1OS1pbnRlcnJ1cHQtYWNrbm93bGVkZ2UgPSA8MHhmZWYwMDAwMD47CisJCS8vIERvIG5vdCBkZWZpbmUgYSBpbnRlcnJ1cHQtcGFyZW50IGhlcmUsIGlmIHRoZXJlIGlzIG5vCisJCS8vIGludGVycnVwdC1tYXAgcHJvcGVydHkuCisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKworCQlpc2FANyB7CisJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOworCQkJY29tcGF0aWJsZSA9ICJwY2ljbGFzcywwNjAxIjsKKwkJCXZlbmRvci1pZCA9IDwweDAwMDAxMTA2PjsKKwkJCWRldmljZS1pZCA9IDwweDAwMDAwNjg2PjsKKwkJCXJldmlzaW9uLWlkID0gPDB4MDAwMDAwMTA+OworCQkJY2xhc3MtY29kZSA9IDwweDAwMDYwMTAwPjsKKwkJCXN1YnN5c3RlbS1pZCA9IDwwPjsKKwkJCXN1YnN5c3RlbS12ZW5kb3ItaWQgPSA8MD47CisJCQlkZXZzZWwtc3BlZWQgPSA8MHgwMDAwMDAwMT47CisJCQltaW4tZ3JhbnQgPSA8MD47CisJCQltYXgtbGF0ZW5jeSA9IDwwPjsKKwkJCS8qIEZpcnN0IDY0ayBmb3IgSS9PIGF0IDB4MCBvbiBQQ0kgbWFwcGVkIHRvIDB4MCBvbiBJU0EuICovCisJCQlyYW5nZXMgPSA8MHgwMDAwMDAwMSAwIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaTgyNTk+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCWRtYS1jb250cm9sbGVyQDAgeworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDIwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDAwMCAweDAwMDAwMDIwCisJCQkJICAgICAgIDEgMHgwMDAwMDA4MCAweDAwMDAwMDEwCisJCQkJICAgICAgIDEgMHgwMDAwMDBjMCAweDAwMDAwMDIwPjsKKwkJCX07CisKKwkJCWk4MjU5OiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDAwMCI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDAyMCAweDAwMDAwMDAyCisJCQkJICAgICAgIDEgMHgwMDAwMDBhMCAweDAwMDAwMDAyCisJCQkJICAgICAgIDEgMHgwMDAwMDRkMCAweDAwMDAwMDAyPjsKKwkJCQlyZXNlcnZlZC1pbnRlcnJ1cHRzID0gPDI+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQl9OworCisJCQl0aW1lckA0MCB7CisJCQkJLy8gQWxzbyBhZGRzIHBjc3BrciB0byBwbGF0Zm9ybSBkZXZpY2VzLgorCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDEwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDA0MCAweDAwMDAwMDIwPjsKKwkJCX07CisKKwkJCTgwNDJANjAgeworCQkJCWRldmljZV90eXBlID0gIjgwNDIiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNjAgMHgwMDAwMDAwMQorCQkJCSAgICAgICAxIDB4MDAwMDAwNjQgMHgwMDAwMDAwMT47CisJCQkJaW50ZXJydXB0cyA9IDwxIDMgMTIgMz47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlrZXlib2FyZEAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsMzAzIjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisKKwkJCQltb3VzZUAxIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsZjAzIjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQl9OworCisJCQlydGNANzAgeworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDA3MCAweDAwMDAwMDAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggMz47CisJCQl9OworCisJCQlzZXJpYWxAM2Y4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDUwMSIsInBucFBOUCw1MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzZjggMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDw0IDM+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQl9OworCisJCQlzZXJpYWxAMmY4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDUwMSIsInBucFBOUCw1MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAyZjggMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDwzIDM+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQl9OworCisJCQlwYXJhbGxlbEAzNzggeworCQkJCWRldmljZV90eXBlID0gInBhcmFsbGVsIjsKKwkJCQkvLyBObyBFQ1Agc3VwcG9ydCBmb3Igbm93LCBvdGhlcndpc2UgYWRkICJwbnBQTlAsNDAxIi4KKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw0MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzNzggMHgwMDAwMDAwMworCQkJCSAgICAgICAxIDB4MDAwMDA3NzggMHgwMDAwMDAwMz47CisJCQl9OworCisJCQlmZGNAM2YwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJmZGMiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDcwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDNmMCAweDAwMDAwMDA4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDYgMz47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlkaXNrQDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wY2lAODAwMDAwMDAvaXNhQDcvc2VyaWFsQDNmOCI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCmluZGV4IDUyNGFmN2UuLjdkYTg0ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCkBAIC0xODEsNzAgKzE4MSw3NiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDA4IGU1IDExIDMyIDMzIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDA4IGU1IDExIDMyIDM0IF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKaW5kZXggNDQ0N2RlZi4uNWZkMWFkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCkBAIC0xNDksNiArMTQ5LDIwIEBACiAJCQkJCS8qUlhERSovICAweDUgMHg0PjsKIAkJfTsKIAorICAgICAgICAgICAgICAgIFVTQjA6IGVoY2lAYmZmZDA0MDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJpYm0sdXNiLWVoY2ktNDYwZXgiLCAidXNiLWVoY2kiOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDB4MWQgND47CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8NCAweGJmZmQwNDAwIDB4OTAgNCAweGJmZmQwNDkwIDB4NzA+OworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBVU0IxOiB1c2JAYmZmZDAwMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJvaGNpLWxlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDw0IDB4YmZmZDAwMDAgMHg2MD47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMyPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MHgxZSA0PjsKKyAgICAgICAgICAgICAgICB9OworCiAJCVBPQjA6IG9wYiB7CiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZXgiLCAiaWJtLG9wYiI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI1Miw2ICsyNjYsMjAgQEAKIAkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNANjggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic3RtLG00MXQ4MCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE5IDB4OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dG1ANDggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHg0OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4MTQgMHg4PjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IDJmNzRjYzQuLmNlZTgwODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJzY2hpbmRsZXIsY201MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC02Niw3ICs2Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIApAQCAtNzQsODQgKzc0LDc2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTYxLDcgKzE1Myw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xNzAsNDggKzE2MSwzNCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDIyMDAgewkJLy8gUFNDMgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyNDAwIHsJCS8vIFBTQzMKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDI+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkJcmVnID0gPDB4MjQwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMmMwMCB7CQkvLyBQU0M2Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDw1PjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKQEAgLTIyMSwxMCArMTk4LDggQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwpAQCAtMjM1LDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yNDUsOSArMjE5LDggQEAKIAkJfTsKIAl9OwogCi0JbHBiIHsKLQkJbW9kZWwgPSAiZnNsLGxwYiI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlyYW5nZXMgPSA8MCAwIDB4ZmMwMDAwMDAgMHgyMDAwMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzNjE4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogRGlnc3kgTVRDIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTZW1paGFsZgorICoKKyAqIEJhc2VkIG9uIHRoZSBDTTUyMDAgYnkgTS4gQmFsYWtvd2ljegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImludGVyY29udHJvbCxkaWdzeS1tdGMiOworCWNvbXBhdGlibGUgPSAiaW50ZXJjb250cm9sLGRpZ3N5LW10YyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJCS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47CS8vIDMyTUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWZzbCxoYXMtd2R0OworCQl9OworCisJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJfTsKKworCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCX07CisKKwkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQl9OworCisJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJfTsKKworCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCX07CisKKwkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQl9OworCisJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXNwaUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKKwkJCXJlZyA9IDwweGYwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47CisJCX07CisKKwkJdXNiQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKKwkJCXJlZyA9IDwweDEwMDAgMHhmZj47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjYwMCB7CQkvLyBQU0M0CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDI2MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDExIDA+OworCQl9OworCisJCXNlcmlhbEAyODAwIHsJCS8vIFBTQzUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTIgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisKKwkJCXJ0Y0A1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJbHBiIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MTAwMDAwMD47CisKKwkJLy8gMTYtYml0IGZsYXNoIGRldmljZSBhdCBMb2NhbFBsdXMgQnVzIENTMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJbGFiZWwgPSAicm9vdCI7CisJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDMwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMGEwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQGYwMDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MHgwMGYwMDAwMCAweDEwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDdhZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBHRSBGYW51YyBQUEM5QSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IFNCUyBDTTYgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwNyBTQlMgVGVjaG5vbG9naWVzIEdtYkggJiBDby4gS0cKKyAqIEFuZDogbXBjODY0MV9ocGNuLmR0cyAoTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZSkKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqLworCisvKgorICogQ29tcGlsZWQgd2l0aCBkdGMgLUkgZHRzIC1PIGR0YiAtbyBnZWZfcHBjOWEuZHRiIGdlZl9wcGM5YS5kdHMKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiR0VGX1BQQzlBIjsKKwljb21wYXRpYmxlID0gImdlZixwcGM5YSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCQlQb3dlclBDLDg2NDFAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47CS8vIHNldCBieSB1Ym9vdAorCX07CisKKwlsb2NhbGJ1c0BmZWYwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwCS8vIEZQR0EKKwkJCSAgNSAwIDB4ZmMwMDgwMDAgMHgwMDAwODAwMAkvLyBBRklYIEZQR0EKKwkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMAkvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47CS8vIElPIEZQR0EgKDMyLWJpdCkKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1wYWdlZC1mbGFzaCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MSAweDAgMHg4MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAgMHg3ODAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDc4MDAwMDAgMHg4MDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJZnBnYUA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZnBnYS1yZWdzIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OworCQl9OworCisJCXdkdEA0LDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZnBnYS13ZHQiLCAiZ2VmLGZwZ2Etd2R0LTEuMDAiLAorCQkJCSJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMDAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYSAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisJCS8qIFNlY29uZCB3YXRjaGRvZyBhdmFpbGFibGUsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgb25lLgorCQl3ZHRANCwyMDEwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2Etd2R0IiwgImdlZixmcGdhLXdkdC0xLjAwIiwKKwkJCQkiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDEwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWIgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworCQkqLworCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2EtcGljIiwgImdlZixmcGdhLXBpYy0xLjAwIjsKKwkJCXJlZyA9IDwweDQgMHg0MDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweDgKKwkJCQkgICAgICAweDk+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKwkJZ2VmX2dwaW86IGdwaW9ANywxNDAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWdwaW8iLCAiZ2VmLHNiYzYxMC1ncGlvIjsKKwkJCXJlZyA9IDwweDcgMHgxNDAwMCAweDI0PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKwl9OworCisJc29jQGZlZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXNvYyIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisKKwkJaTJjMTogaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKworCQkJaHdtb25ANDggeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG05MiI7CisJCQkJcmVnID0gPDB4NDg+OworCQkJfTsKKworCQkJaHdtb25ANGMgeworCQkJCWNvbXBhdGlibGUgPSAiYWRpLGFkdDc0NjEiOworCQkJCXJlZyA9IDwweDRjPjsKKwkJCX07CisKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJlcHNvbixyeDg1ODEiOworCQkJCXJlZyA9IDwweDAwMDAwMDUxPjsKKwkJCX07CisKKwkJCWV0aUA2YiB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxNjgyIjsKKwkJCQlyZWcgPSA8MHg2Yj47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgMHgyIDB4MjAgMHgyIDB4MjEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJhIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxYyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZlZjA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmZWYwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDQwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAweDAgMHgwMDQwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDQwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY5MTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogR0UgRmFudWMgU0JDMzEwIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogU0JTIENNNiBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqIENvcHlyaWdodCAyMDA3IFNCUyBUZWNobm9sb2dpZXMgR21iSCAmIENvLiBLRworICogQW5kOiBtcGM4NjQxX2hwY24uZHRzIChNUEM4NjQxIEhQQ04gRGV2aWNlIFRyZWUgU291cmNlKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICovCisKKy8qCisgKiBDb21waWxlZCB3aXRoIGR0YyAtSSBkdHMgLU8gZHRiIC1vIGdlZl9zYmMzMTAuZHRiIGdlZl9zYmMzMTAuZHRzCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkdFRl9TQkMzMTAiOworCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCQlQb3dlclBDLDg2NDFAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47CS8vIHNldCBieSB1Ym9vdAorCX07CisKKwlsb2NhbGJ1c0BmZWYwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDEwMDAwPjsJLy8gRlBHQQorCisJCS8qIGZsYXNoQDAsMCBpcyBhIG1pcnJvciBvZiBwYXJ0IG9mIHRoZSBtZW1vcnkgaW4gZmxhc2hAMSwwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDEwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisJCSovCisKKwkJZmxhc2hAMSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwxIDAgMHg4MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDc4MDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3ODAwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MDc4MDAwMDAgMHgwMDgwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQlmcGdhQDQsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXJlZ3MiOworCQkJcmVnID0gPDB4NCAweDAgMHg0MD47CisJCX07CisKKwkJd2R0QDQsMjAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAid2F0Y2hkb2ciOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMDAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYSAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisvKgorCQl3ZHRANCwyMDEwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJ3YXRjaGRvZyI7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXdkdCI7CisJCQlyZWcgPSA8MHg0IDB4MjAxMCAweDg+OworCQkJaW50ZXJydXB0cyA9IDwweDFiIDB4ND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJfTsKKyovCisJCWdlZl9waWM6IHBpY0A0LDQwMDAgeworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS1waWMiOworCQkJcmVnID0gPDB4NCAweDQwMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4OAorCQkJCSAgICAgIDB4OT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQl9OworCQlnZWZfZ3BpbzogZ3Bpb0A0LDgwMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImdlZixzYmMzMTAtZ3BpbyI7CisJCQlyZWcgPSA8MHg0IDB4ODAwMCAweDI0PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKwl9OworCisJc29jQGZlZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZmVmMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGZlZjAwMDAwIDB4MTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKworCQlpMmMxOiBpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4NTgxIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDA1MT47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWh3bW9uQDQ4IHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtOTIiOworCQkJCXJlZyA9IDwweDQ4PjsKKwkJCX07CisKKwkJCWh3bW9uQDRjIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZHQ3NDYxIjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQl9OworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OSAweDQ+OworCQkJCQlyZWcgPSA8MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDQ+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgxZiAweDIgMHgyMCAweDIgMHgyMSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDFjIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmVmMDgwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGZlZjA4MDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4NDAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGZlMDAwMDAwIDB4MCAweDAwNDAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MHgxOCAweDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgyCisJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MgorCQkJMHgwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDIKKwkJCTB4MDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgyCisJCT47CisKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwIDB4NDAwMDAwMDAKKworCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwIDB4MDA0MDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCmluZGV4IGU3OGMzNTUuLjY1ODJkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MHhmODAwNTAwMCAweDEwMDA+OworCQlyZWcgPSA8MHhmZWYwNTAwMCAweDEwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIApAQCAtMjAyLDM0ICsyMDIsMzcgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKLQkJCQlyZWcgPSA8MT47Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47Ci0JCQkJcmVnID0gPDM+OwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMKaW5kZXggM2JmZmY0Ny4uMzA4ZmU3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cwpAQCAtMTI0LDY3ICsxMjQsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7CQkJCQkvKiBGb3IgVFNFQ3MgKi8KLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCVBIWTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJUEhZMjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCi0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCS8qIE1hYyBhZGRyZXNzIGZpbGxlZCBpbiBieSBib290d3JhcHBlciAqLwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZQSFkxPjsKKworCQkJbWRpb0A1MjAgewkJCQkJLyogRm9yIFRTRUNzICovCisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJUEhZMjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQkvKiBNYWMgYWRkcmVzcyBmaWxsZWQgaW4gYnkgYm9vdHdyYXBwZXIgKi8KIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDIzIDB4MiAweDI0IDB4MiAweDI4IDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmUEhZMj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IDNmN2E1ZGMuLmRlMzBiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAiZnNsLGxpdGU1MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01OCw5NiArNTksNzQgQEAKIAkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBpYyI7CiAJCQlyZWcgPSA8MHg1MDAgMHg4MD47CiAJCX07CiAKIAkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIAogCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4NjIwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCXJlZyA9IDwweDYzMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8ND47CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDB4NjUwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw2PjsKIAkJCXJlZyA9IDwweDY2MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nz47CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCkBAIC0xNTUsMzkgKzEzNCwzMyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKLQkJCWRldmljZV90eXBlID0gImRtYS1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOwogCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKIAkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKIAkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKIAkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAogCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTE5NiwxMyArMTY5LDEwIEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBhYzk3IG1vZGUgZXhhbXBsZQpAQCAtMjExLDcgKzE4MSw2IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8MT47CiAJCS8vCXJlZyA9IDwweDIyMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDMyBpbiBDT0RFQyBtb2RlIGV4YW1wbGUKQEAgLTIyMCwyNyArMTg5LDIyIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8Mj47CiAJCS8vCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNCBpbiB1YXJ0IG1vZGUgZXhhbXBsZQogCQkvL3NlcmlhbEAyNjAwIHsJCS8vIFBTQzQKLQkJLy8JZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCS8vCWNlbGwtaW5kZXggPSA8Mz47CiAJCS8vCXJlZyA9IDwweDI2MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMTEgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjgwMCB7CQkvLyBQU0M1Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDQ+OwogCQkvLwlyZWcgPSA8MHgyODAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDEyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M2IGluIHNwaSBtb2RlIGV4YW1wbGUKQEAgLTI0OSwxNiArMjEzLDEzIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8NT47CiAJCS8vCXJlZyA9IDwweDJjMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yNjgsMzAgKzIyOSwyNCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDEgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDE+OwogCQkJfTsKIAkJfTsKIAogCQlhdGFAM2EwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJhdGEiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjk5LDE0ICsyNTQsMTIgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iOwogCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OwogCQl9OwogCX07CkBAIC0zMjUsNyArMjc4LDYgQEAKIAkJCQkgMHhjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgogCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAogCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCA2M2UzYmI0Li5jNjNlMzU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAiZnNsLGxpdGU1MjAwYiI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNTgsMTM2ICs1OSwxMTIgQEAKIAkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOwogCQkJcmVnID0gPDB4NTAwIDB4ODA+OwogCQl9OwogCiAJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCiAJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8ND47CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw1PjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDY+OwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nz47CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQljYW5AOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIAotCQlncGlvQGIwMCB7CisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW9AYzAwIHsKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8MHhmMDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwogCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJkbWEtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKIAkJCXJlZyA9IDwweDEyMDAgMHg4MD47CiAJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xOTYsMTMgKzE3MywxMCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIFBTQzIgaW4gYWM5NyBtb2RlIGV4YW1wbGUKQEAgLTIxMSw3ICsxODUsNiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDE+OwogCQkvLwlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDIgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzMgaW4gQ09ERUMgbW9kZSBleGFtcGxlCkBAIC0yMjAsMjcgKzE5MywyMiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDI+OwogCQkvLwlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzQgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjYwMCB7CQkvLyBQU0M0Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDM+OwogCQkvLwlyZWcgPSA8MHgyNjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDExIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M1IGluIHVhcnQgbW9kZSBleGFtcGxlCiAJCS8vc2VyaWFsQDI4MDAgewkJLy8gUFNDNQotCQkvLwlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJLy8JY2VsbC1pbmRleCA9IDw0PjsKIAkJLy8JcmVnID0gPDB4MjgwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAxMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNiBpbiBzcGkgbW9kZSBleGFtcGxlCkBAIC0yNDksNDkgKzIxNyw0MCBAQAogCQkvLwljZWxsLWluZGV4ID0gPDU+OwogCQkvLwlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDQgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKIAkJbWRpb0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwgImZzbCxtcGM1MjAwLW1kaW8iOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKLQkJCWRldmljZV90eXBlID0gImF0YSI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKQEAgLTI5OSwxNCArMjU4LDEzIEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CisKIAkJc3JhbUA4MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CiAJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CiAJCX07CiAJfTsKQEAgLTMzMCw3ICsyODgsNiBAQAogCQkJCSAweGM4MDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCiAJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCiAJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTdkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIEZyZWVzY2FsZSBNZWRpYTUyMDAgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorICogU3RldmVuIENhdmFuYWdoIDxzY2F2YW5hZ2hAc2VjcmV0bGFiLmNhPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImZzbCxtZWRpYTUyMDAiOworCWNvbXBhdGlibGUgPSAiZnNsLG1lZGlhNTIwMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJYWxpYXNlcyB7CisJCWNvbnNvbGUgPSAmY29uc29sZTsKKwkJZXRoZXJuZXQwID0gJmV0aDA7CisJfTsKKworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJmNvbnNvbGU7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MzMwMDAwMDA+OwkvLyAzMyBNSHosIHRoZXNlIHdlcmUgY29uZmlndXJlZCBieSBVLUJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MTMyMDAwMDAwPjsJCS8vIDEzMiBNSHoKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzOTYwMDAwMDA+OwkJLy8gMzk2IE1IegorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsJLy8gMTI4TUIgUkFNCisJfTsKKworCXNvY0BmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDEzMjAwMDAwMD47Ly8gMTMyIE1IegorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlmc2wsaGFzLXdkdDsKKwkJfTsKKworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCX07CisKKwkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQl9OworCisJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJfTsKKworCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCX07CisKKwkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQl9OworCisJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJfTsKKworCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCX07CisKKwkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKKwkJCXJlZyA9IDwweDgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKKwkJfTsKKworCQljYW5AOTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OworCQkJcmVnID0gPDB4OTAwIDB4ODA+OworCQl9OworCisJCWNhbkA5ODAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CisJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47CisJCQlyZWcgPSA8MHg5ODAgMHg4MD47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlzcGlAZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CisJCQlyZWcgPSA8MHhmMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OworCQl9OworCisJCXVzYkAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA2IDA+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCS8vIFBTQzYgaW4gdWFydCBtb2RlCisJCWNvbnNvbGU6IHNlcmlhbEAyYzAwIHsJCS8vIFBTQzYKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJY2VsbC1pbmRleCA9IDw1PjsKKwkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoMDogZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1lZGlhNTIwMF9mcGdhIDAgMiAvLyAxc3Qgc2xvdAorCQkJCSAweGMwMDAgMCAwIDIgJm1lZGlhNTIwMF9mcGdhIDAgMworCQkJCSAweGMwMDAgMCAwIDMgJm1lZGlhNTIwMF9mcGdhIDAgNAorCQkJCSAweGMwMDAgMCAwIDQgJm1lZGlhNTIwMF9mcGdhIDAgNQorCisJCQkJIDB4YzgwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCAzIC8vIDJuZCBzbG90CisJCQkJIDB4YzgwMCAwIDAgMiAmbWVkaWE1MjAwX2ZwZ2EgMCA0CisJCQkJIDB4YzgwMCAwIDAgMyAmbWVkaWE1MjAwX2ZwZ2EgMCA1CisJCQkJIDB4YzgwMCAwIDAgNCAmbWVkaWE1MjAwX2ZwZ2EgMCAyCisKKwkJCQkgMHhkMDAwIDAgMCAxICZtZWRpYTUyMDBfZnBnYSAwIDQgLy8gbWluaVBDSQorCQkJCSAweGQwMDAgMCAwIDIgJm1lZGlhNTIwMF9mcGdhIDAgNQorCisJCQkJIDB4ZTAwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCA1IC8vIENvcmFsSVAKKwkJCQk+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPCAwIDAgMHhmYzAwMDAwMCAweDAyMDAwMDAwCisJCQkgICAxIDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCisJCQkgICAyIDAgMHhmMDAxMDAwMCAweDAwMDEwMDAwCisJCQkgICAzIDAgMHhmMDAyMDAwMCAweDAwMDEwMDAwID47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1kLGFtMjlsdjI4bWwiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDB4MCAweDIwMDAwMDA+OwkJLy8gMzIgTUIKKwkJCWJhbmstd2lkdGggPSA8ND47CQkJLy8gV2lkdGggaW4gYnl0ZXMgb2YgdGhlIGZsYXNoIGJhbmsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsJCQkvLyBUd28gZGV2aWNlcyBvbiBlYWNoIGJhbmsKKwkJfTsKKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWQsYW0yOWx2MjhtbCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDEgMCAweDIwMDAwMDA+OwkJCS8vIDMyIE1CCisJCQliYW5rLXdpZHRoID0gPDQ+OwkJCS8vIFdpZHRoIGluIGJ5dGVzIG9mIHRoZSBmbGFzaCBiYW5rCisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CQkJLy8gVHdvIGRldmljZXMgb24gZWFjaCBiYW5rCisJCX07CisKKwkJbWVkaWE1MjAwX2ZwZ2E6IGZwZ2FAMiwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1lZGlhNTIwMC1mcGdhIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsJLy8gMDpiYW5rIDE6aWQ7IG5vIHR5cGUgZmllbGQKKwkJCXJlZyA9IDwyIDAgMHgxMDAwMD47CisKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAwIDMJLy8gSVJRIGJhbmsgMAorCQkJICAgICAgICAgICAgICAxIDEgMz47CS8vIElSUSBiYW5rIDEKKwkJfTsKKworCQl1YXJ0QDMsMCB7CisJCQljb21wYXRpYmxlID0gInRpLHRsMTZjNzUyYnB0IjsKKwkJCXJlZyA9IDwzIDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtZWRpYTUyMDBfZnBnYT47CisJCQlpbnRlcnJ1cHRzID0gPDAgMCAgMCAxPjsgLy8gMiBpcnFzCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCmluZGV4IDUyYmE2ZjkuLjdiZThjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJwcm9tZXNzLG1vdGlvbnBybyI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjYsNyArNjcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKQEAgLTc0LDM1ICs3NCwzMCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJbW90aW9ucHJvLWxlZEA2NjAgewkvLyBNb3Rpb24tUFJPIHN0YXR1cyBMRUQKQEAgLTExMCw3ICsxMDUsNiBAQAogCQkJbGFiZWwgPSAibW90aW9ucHJvLXN0YXR1c2xlZCI7CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlibGluay1kZWxheSA9IDwxMDA+OyAvLyAxMDAgbXNlYwogCQl9OwogCkBAIC0xMTksNDkgKzExMyw0NiBAQAogCQkJbGFiZWwgPSAibW90aW9ucHJvLXJlYWR5bGVkIjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTcxLDcgKzE2Miw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xODAsMTIgKzE3MCw5IEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0MyIGluIHNwaSBtYXN0ZXIgbW9kZSAKQEAgLTE5NCwyNiArMTgxLDIwIEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0M1IGluIHVhcnQgbW9kZQogCQlzZXJpYWxAMjgwMCB7CQkvLyBQU0M1Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDw0PjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yMjMsMTAgKzIwNCw4IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDIgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDI+OwogCQkJfTsKIAkJfTsKQEAgLTIzNSw3ICsyMTQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjQ0LDcgKzIyMiw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQlydGNANjggewpAQCAtMjU5LDggKzIzNiw4IEBACiAJCX07CiAJfTsKIAotCWxwYiB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMApAQCAtMjczLDcgKzI1MCw2IEBACiAJCQljb21wYXRpYmxlID0gInByb21lc3MsbW90aW9ucHJvLWtvbGxtb3JnZW4iOwogCQkJcmVnID0gPDEgMCAweDEwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIDgtYml0IGJvYXJkIENQTEQgb24gTG9jYWxQbHVzIEJ1cyBDUzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCmluZGV4IDNlYmY3ZWMuLjc2MWZhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJc2xlZXAgPSA8JnBtYyAweDIwMDAwMDAwPjsKLQkJCXJhbmdlczsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CkBAIC0xOTUsMTEgKzE5NSwxMSBAQAogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJZnNsLG1hZ2ljLXBhY2tldDsKIAotCQkJbWRpb0AyNDUyMCB7CisJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CiAJCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewogCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OwpAQCAtMjIxLDYgKzIyMSw3IEBACiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM0IDB4OCAzMyAweDggMzIgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwpAQCAtMjI5LDExICsyMzAsMTEgQEAKIAkJCXNsZWVwID0gPCZwbWMgMHgxMDAwMDAwMD47CiAJCQlmc2wsbWFnaWMtcGFja2V0OwogCi0JCQltZGlvQDI1NTIwIHsKKwkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OwogCiAJCQkJdGJpMTogdGJpLXBoeUAxMSB7CiAJCQkJCXJlZyA9IDwweDExPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCmluZGV4IDcxNzg0MTYuLjNmNGM1ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMjIsNiArMjIsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xODgsNjYgKzE5MCw3NCBAQAogCQkJcGh5X3R5cGUgPSAidXRtaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5MCA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzQ5LDQgKzM1OSw2NiBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMTAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzAwMDAwMDAgMHhjMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkMTAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzAwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwppbmRleCBiNWVkYTk0Li4xYWUzOGYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwpAQCAtMTcwLDU3ICsxNzAsNTIgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJLyogVml0ZXNzZSA4MjAxICovCi0JCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4MWM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MWM+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJLyogVml0ZXNzZSA4MjAxICovCisJCQkJcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDFjPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CkBAIC0yMjgsNiArMjIzLDE4IEBACiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKaW5kZXggYzg3YTYwMS4uNjYyYWJlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCkBAIC0xNDksMzcgKzE0OSw0MSBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQkvKiBWaXRlc3NlIDgyMDEgKi8KLQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgxYz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxYz47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQkvKiBWaXRlc3NlIDgyMDEgKi8KKwkJCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4MWM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwppbmRleCBkOWFkYmEwLi5kOWYwYTIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKQEAgLTE2Nyw2OSArMTY3LDc2IEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKaW5kZXggMWQxNGQ3MC4uOTYzNzA4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCkBAIC0yMyw2ICsyMyw4IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOwogCX07CiAKIAljcHVzIHsKQEAgLTEyNywyMSArMTI5LDM4IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKKwkJc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKIAotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOwotCQkJCXJlZyA9IDwweDY4PjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQl9OworCQkJfTsKKworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0xNzQsNzAgKzE5Myw4MyBAQAogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJZHJfbW9kZSA9ICJob3N0IjsKIAkJCXBoeV90eXBlID0gInVscGkiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zMDksMTQgKzM0MSw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQlzZGhjQDJlMDAwIHsKLQkJCW1vZGVsID0gImVTREhDIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJc2F0YUAxODAwMCB7CkBAIC0zMjQsNiArMzQ5LDcgQEAKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDBjMD47CiAJCX07CiAKIAkJc2F0YUAxOTAwMCB7CkBAIC0zMzEsNiArMzU3LDcgQEAKIAkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAzMD47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzQ2LDYgKzM3MywxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTQwMCw2ICs0MzQsNyBAQAogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMDMwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC00MDksNCArNDQ0LDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwppbmRleCA5NDEzYWYzLi4wNTMzMzkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKQEAgLTIyLDYgKzIyLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTA3LDI2ICsxMDksNzIgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7Ci0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7Ci0JCQkJcmVnID0gPDB4Njg+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCWdwaW8yOiBncGlvLWNvbnRyb2xsZXJAZDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCXNsZWVwLW5leHVzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKKworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlkdHRANDggeworCQkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCQlyZWcgPSA8MHg0OD47CisJCQkJfTsKKworCQkJCWF0MjRANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJfTsKKworCQkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc3ZXJkYiIsCisJCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7CisJCQkJCXJlZyA9IDwweDBhPjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCX07CiAJCQl9OwogCi0JCQltY3VfcGlvOiBtY3VAYSB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzdlcmRiIiwKLQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOwotCQkJCXJlZyA9IDwweDBhPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE5Nyw2NCArMjQ1LDc2IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCXBoeV90eXBlID0gInVscGkiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0yODcsNiArMzQ3LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTI5NCw2ICszNTUsNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMwMSw2ICszNjMsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMTYsNiArMzc5LDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzQxLDYgKzQxMSw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC0zNTAsNCArNDIxLDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwppbmRleCBiODVmYzAyLi42NTFmZjJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKQEAgLTIzLDYgKzIzLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTI3LDIxICsxMjksMzggQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgeworCQlzbGVlcC1uZXh1cyB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOwogCi0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7Ci0JCQkJcmVnID0gPDB4Njg+OwotCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCX07CisJCQl9OworCisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTIxMyw3MCArMjMyLDgzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlkcl9tb2RlID0gImhvc3QiOwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTMwOSwxNCArMzQxLDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OwotCQl9OwotCi0JCXNkaGNAMmUwMDAgewotCQkJbW9kZWwgPSAiZVNESEMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiOwotCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMzIsNiArMzU3LDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzg3LDYgKzQxOSw3IEBACiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMDMwMDAwMCAweDAgMHgwMDEwMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwpAQCAtMzk1LDQgKzQyOCw2OCBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMCAweGE4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDMwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAgMHhjODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDBjMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKaW5kZXggMjNjMTBjZS4uNWQ5MGU4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCkBAIC0yMiw2ICsyMiw4IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOwogCX07CiAKIAljcHVzIHsKQEAgLTEwNywyNiArMTA5LDcyIEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOwotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwotCQkJCXJlZyA9IDwweDY4PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlncGlvMjogZ3Bpby1jb250cm9sbGVyQGQwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc1IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlzbGVlcC1uZXh1cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CisKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJZHR0QDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CisKKwkJCQlhdDI0QDUwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzI1NiI7CisJCQkJCXJlZyA9IDwweDUwPjsKKwkJCQl9OworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCX07CisKKwkJCQltY3VfcGlvOiBtY3VAYSB7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OGVyZGIiLAorCQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOworCQkJCQlyZWcgPSA8MHgwYT47CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQl9OwogCQkJfTsKIAotCQkJbWN1X3BpbzogbWN1QGEgewotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc4ZXJkYiIsCi0JCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKLQkJCQlyZWcgPSA8MHgwYT47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0xOTcsNjIgKzI0NSw3NiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMjg1LDYgKzM0Nyw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzAwLDYgKzM2MywxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTMyNSw2ICszOTUsNyBAQAogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtMzM0LDQgKzQwNSw2OCBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMCAweGE4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDMwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAgMHhjODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDBjMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKaW5kZXggYWNmMDZjNC4uZDZmMjA4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCkBAIC0xMjcsMjEgKzEyNywzOCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7CisJCXNsZWVwLW5leHVzIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CiAKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKLQkJCQlyZWcgPSA8MHg2OD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJfTsKKwkJCX07CisKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMjEzLDY5ICsyMzAsODMgQEAKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKLQkJfTsKLQotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTMwOCwxNCArMzM5LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OwotCQl9OwotCi0JCXNkaGNAMmUwMDAgewotCQkJbW9kZWwgPSAiZVNESEMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiOwotCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTMyMyw2ICszNDcsNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMzMCw2ICszNTUsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQlzYXRhQDFhMDAwIHsKQEAgLTMzNyw2ICszNjMsNyBAQAogCQkJcmVnID0gPDB4MWEwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDYgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDBjPjsKIAkJfTsKIAogCQlzYXRhQDFiMDAwIHsKQEAgLTM0NCw2ICszNzEsNyBAQAogCQkJcmVnID0gPDB4MWIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDAzPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zNTksNiArMzg3LDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtNDEzLDYgKzQ0OCw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUwMzAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCmluZGV4IDcyY2RjM2MuLjk4YWU5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwpAQCAtMTA3LDI2ICsxMDcsNzIgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7Ci0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7Ci0JCQkJcmVnID0gPDB4Njg+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCWdwaW8yOiBncGlvLWNvbnRyb2xsZXJAZDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCXNsZWVwLW5leHVzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKKworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlkdHRANDggeworCQkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCQlyZWcgPSA8MHg0OD47CisJCQkJfTsKKworCQkJCWF0MjRANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJfTsKKworCQkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc5ZXJkYiIsCisJCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7CisJCQkJCXJlZyA9IDwweDBhPjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCX07CiAJCQl9OwogCi0JCQltY3VfcGlvOiBtY3VAYSB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzllcmRiIiwKLQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOwotCQkJCXJlZyA9IDwweDBhPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE5Nyw2MyArMjQzLDc2IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCXBoeV90eXBlID0gInVscGkiOwotCQl9OwotCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMjg2LDYgKzM0NSw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJc2F0YUAxODAwMCB7CkBAIC0yOTMsNiArMzUzLDcgQEAKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDBjMD47CiAJCX07CiAKIAkJc2F0YUAxOTAwMCB7CkBAIC0zMDAsNiArMzYxLDcgQEAKIAkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAzMD47CiAJCX07CiAKIAkJc2F0YUAxYTAwMCB7CkBAIC0zMDcsNiArMzY5LDcgQEAKIAkJCXJlZyA9IDwweDFhMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ2IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwYz47CiAJCX07CiAKIAkJc2F0YUAxYjAwMCB7CkBAIC0zMTQsNiArMzc3LDcgQEAKIAkJCXJlZyA9IDwweDFiMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwMz47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzI5LDYgKzM5MywxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTM1NCw2ICs0MjUsNyBAQAogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cwppbmRleCAzYzkwNWRmLi5iMzFjNTA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cwpAQCAtMTM3LDQyICsxMzcsNiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47Ci0JCQkJcmVnID0gPDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCXVzYkAyMjAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LXVzYjItbXBoIiwgImZzbC11c2IyLW1waCI7CiAJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OwpAQCAtMTk0LDMxICsxNTgsNzMgQEAKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJdXNiQDJiMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwppbmRleCA3OTU3MGZmLi5kZGQ2N2JlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCkBAIC0xMjYsOTcgKzEyNiwxMDYgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiRkVDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8NDEgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCmluZGV4IDIyMTAzNmEuLmU0NTA5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTEyNiw2NiArMTI2LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cwppbmRleCAwNjY4ZDEwNC4uN2M2OTMyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKQEAgLTk4LDQ0ICs5OCw2IEBACiAJCQlkZnNycjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQlkbWFAMjEzMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTE3OCwzMSArMTQwLDc0IEBACiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwppbmRleCBkZjc3NGE3Li44MDRlOTAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCkBAIC0xNDIsMTI5ICsxNDIsMTQxIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIC8qIGVUU0VDIDMvNCBhcmUgY3VycmVudGx5IGJyb2tlbgogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCmluZGV4IDA1M2IwMWUuLjk0ODRmMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKQEAgLTEyNiw2NiArMTI2LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCmluZGV4IDExYjFiY2IuLmNjMmFjZjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKQEAgLTExNSw3OCArMTE1LDg0IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3IDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggMTk1NWJkOS4uOWQ1MmUzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwpAQCAtMTQ5LDc4ICsxNDksODQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlANyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxIDE+OwotCQkJCXJlZyA9IDwweDc+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyIDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKICAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDcgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxIDE+OworCQkJCQlyZWcgPSA8MHg3PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MiAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyIDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKaW5kZXggMzU5YzNiNy4uNmU3OWE0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTVBDODU3MiBEUyBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzEyLDEyOSArMzEyLDE0MSBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC02NDMsNyArNjU1LDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQkJdWxpMTU3NUAwIHsKIAkJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC02NTQsNyArNjY2LDcgQEAKIAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkJICAweDAgMHgxMDAwMDA+OworCQkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCQlpc2FAMWUgewogCQkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtNzQ0LDcgKzc1Niw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogCkBAIC03ODEsNyArNzkzLDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc18zNmIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc18zNmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDgxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzXzM2Yi5kdHMKQEAgLTAsMCArMSw3OTkgQEAKKy8qCisgKiBNUEM4NTcyIERTIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJmc2wsTVBDODU3MkRTIjsKKwljb21wYXRpYmxlID0gImZzbCxNUEM4NTcyRFMiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlldGhlcm5ldDIgPSAmZW5ldDI7CisJCWV0aGVybmV0MyA9ICZlbmV0MzsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTcyQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisKKwkJUG93ZXJQQyw4NTcyQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZmUwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhmIDB4ZmZlMDUwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGYgMHhlODAwMDAwMCAweDA4MDAwMDAwCisJCQkgIDB4MSAweDAgMHhmIDB4ZTAwMDAwMDAgMHgwODAwMDAwMAorCQkJICAweDIgMHgwIDB4ZiAweGZmYTAwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHgzIDB4MCAweGYgMHhmZmRmMDAwMCAweDAwMDA4MDAwCisJCQkgIDB4NCAweDAgMHhmIDB4ZmZhNDAwMDAgMHgwMDA0MDAwMAorCQkJICAweDUgMHgwIDB4ZiAweGZmYTgwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHg2IDB4MCAweGYgMHhmZmFjMDAwMCAweDAwMDQwMDAwPjsKKworCQlub3JAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKworCQkJcmFtZGlza0AwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MDMwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWRpYWdub3N0aWNAMzAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDMwMDAwMDAgMHgwMGUwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJZGlua0AzZTAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwM2UwMDAwMCAweDAwMjAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlrZXJuZWxANDAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDQwMDAwMDAgMHgwMDQwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJamZmczJANDQwMDAwMCB7CisJCQkJcmVnID0gPDB4MDQ0MDAwMDAgMHgwM2IwMDAwMD47CisJCQl9OworCisJCQlkdGJAN2YwMDAwMCB7CisJCQkJcmVnID0gPDB4MDdmMDAwMDAgMHgwMDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJdS1ib290QDdmODAwMDAgeworCQkJCXJlZyA9IDwweDA3ZjgwMDAwIDB4MDAwODAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJbmFuZEAyLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZmNtLW5hbmQiLAorCQkJCSAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwweDIgMHgwIDB4NDAwMDA+OworCisJCQl1LWJvb3RAMCB7CisJCQkJcmVnID0gPDB4MCAweDAyMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlqZmZzMkAyMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMjAwMDAwMCAweDEwMDAwMDAwPjsKKwkJCX07CisKKwkJCXJhbWRpc2tAMTIwMDAwMDAgeworCQkJCXJlZyA9IDwweDEyMDAwMDAwIDB4MDgwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWtlcm5lbEAxYTAwMDAwMCB7CisJCQkJcmVnID0gPDB4MWEwMDAwMDAgMHgwNDAwMDAwMD47CisJCQl9OworCisJCQlkdGJAMWUwMDAwMDAgeworCQkJCXJlZyA9IDwweDFlMDAwMDAwIDB4MDEwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWVtcHR5QDFmMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxZjAwMDAwMCAweDIxMDAwMDAwPjsKKwkJCX07CisJCX07CisKKwkJbmFuZEA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NCAweDAgMHg0MDAwMD47CisJCX07CisKKwkJbmFuZEA1LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NSAweDAgMHg0MDAwMD47CisJCX07CisKKwkJbmFuZEA2LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NiAweDAgMHg0MDAwMD47CisJCX07CisJfTsKKworCXNvYzg1NzJAZmZmZTAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZiAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZiAweGZmZTAwMDAwIDAgMHgxMDAwPjsJLy8gQ0NTUkJBUiAmIHNvYyByZWdzLCByZW1vdmUgb25jZSBwYXJzZSBjb2RlIGZvciBpbW1yYmFzZSBmaXhlZAorCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHg2MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCX07CisKKwkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDwweDEwMDAwMD47IC8vIEwyLCAxTQorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlkbWFAYzMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweGMzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHhjMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzYgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzcgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OworCQkJfTsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLAorCQkJCSAgICAgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmZlMDgwMDAgeworCQljZWxsLWluZGV4ID0gPDA+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwODAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzAwMDAwIDB4MCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGZmMDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgxMSBmdW5jIDAgLSBQQ0kgc2xvdCAxICovCisJCQkweDg4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgMSAtIFBDSSBzbG90IDEgKi8KKwkJCTB4ODkwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDg5MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4OTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyAyIC0gUENJIHNsb3QgMSAqLworCQkJMHg4YTAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhhMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4YTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDMgLSBQQ0kgc2xvdCAxICovCisJCQkweDhiMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4YjAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhiMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNCAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGMwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhjMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YzAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyA1IC0gUENJIHNsb3QgMSAqLworCQkJMHg4ZDAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhkMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ZDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDYgLSBQQ0kgc2xvdCAxICovCisJCQkweDhlMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ZTAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhlMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNyAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGYwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhmMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZjAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAwIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDEgLSBQQ0kgc2xvdCAyICovCisJCQkweDkxMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5MTAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDkxMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgMiAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTIwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkyMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MjAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAzIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MzAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkzMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MzAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDQgLSBQQ0kgc2xvdCAyICovCisJCQkweDk0MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NDAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk0MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgNSAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTUwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk1MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NTAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyA2IC0gUENJIHNsb3QgMiAqLworCQkJMHg5NjAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDk2MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5NjAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDcgLSBQQ0kgc2xvdCAyICovCisJCQkweDk3MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NzAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk3MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvLyBJRFNFTCAweDFjICBVU0IKKwkJCTB4ZTAwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHhjIDB4MgorCQkJMHhlMTAwIDB4MCAweDAgMHgyICZpODI1OSAweDkgMHgyCisJCQkweGUyMDAgMHgwIDB4MCAweDMgJmk4MjU5IDB4YSAweDIKKwkJCTB4ZTMwMCAweDAgMHgwIDB4NCAmaTgyNTkgMHhiIDB4MgorCisJCQkvLyBJRFNFTCAweDFkICBBdWRpbworCQkJMHhlODAwIDB4MCAweDAgMHgxICZpODI1OSAweDYgMHgyCisKKwkJCS8vIElEU0VMIDB4MWUgTGVnYWN5CisJCQkweGYwMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NyAweDIKKwkJCTB4ZjEwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg3IDB4MgorCisJCQkvLyBJRFNFTCAweDFmIElERS9TQVRBCisJCQkweGY4MDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4ZSAweDIKKwkJCTB4ZjkwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg1IDB4MgorCisJCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CisJCQl1bGkxNTc1QDAgeworCQkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJICAweDAgMHgxMDAwMD47CisJCQkJaXNhQDFlIHsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCQlyZWcgPSA8MHhmMDAwIDB4MCAweDAgMHgwIDB4MD47CisJCQkJCXJhbmdlcyA9IDwweDEgMHgwIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCQkgIDB4MTAwMD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKKworCQkJCQlpODI1OTogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAgeworCQkJCQkJcmVnID0gPDB4MSAweDIwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweGEwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweDRkMCAweDI+OworCQkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCQljb21wYXRpYmxlID0gImNocnAsaWljIjsKKwkJCQkJCWludGVycnVwdHMgPSA8OSAyPjsKKwkJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQl9OworCisJCQkJCWk4MDQyQDYwIHsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQlyZWcgPSA8MHgxIDB4NjAgMHgxIDB4MSAweDY0IDB4MT47CisJCQkJCQlpbnRlcnJ1cHRzID0gPDEgMyAxMiAzPjsKKwkJCQkJCWludGVycnVwdC1wYXJlbnQgPQorCQkJCQkJCTwmaTgyNTk+OworCisJCQkJCQlrZXlib2FyZEAwIHsKKwkJCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJCQljb21wYXRpYmxlID0gInBucFBOUCwzMDMiOworCQkJCQkJfTsKKworCQkJCQkJbW91c2VAMSB7CisJCQkJCQkJcmVnID0gPDB4MT47CisJCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsZjAzIjsKKwkJCQkJCX07CisJCQkJCX07CisKKwkJCQkJcnRjQDcwIHsKKwkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7CisJCQkJCQlyZWcgPSA8MHgxIDB4NzAgMHgyPjsKKwkJCQkJfTsKKworCQkJCQlncGlvQDQwMCB7CisJCQkJCQlyZWcgPSA8MHgxIDB4NDAwIDB4ODA+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCisJfTsKKworCXBjaTE6IHBjaWVAZmZmZTA5MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMDkwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDB4YyAweDIwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMxMDAwMCAweDAgMHgwMDAxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI1IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg2IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGZmZmUwYTAwMCB7CisJCWNlbGwtaW5kZXggPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTBhMDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHg0MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMjAwMDAgMHgwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTAuZHRzCmluZGV4IGZkNDYyZWYuLjJiYzBjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUwLmR0cwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoaXMgZHRzIGZpbGUgYWxsb3dzIGNvcmUwIHRvIGhhdmUgbWVtb3J5LCBsMiwgaTJjLCBkbWExLCBnbG9iYWwtdXRpbCwgZXRoMCwKICAqIGV0aDEsIGNyeXB0bywgcGNpMCwgcGNpMS4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTQ4LDM1ICsxNDgsMzggQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgewpAQCAtMjI3LDcgKzIzMCw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKIAkJCTMxIDMyIDMzIDM3IDM4IDM5ICAgICAgIC8qIGVuZXQyIGVuZXQzICovCi0JCQk3NiA3NyA3OCA3OSAyNyA0MgkvKiBkbWEyIHBjaTIgc2VyaWFsKi8KKwkJCTc2IDc3IDc4IDc5IDI2IDQyCS8qIGRtYTIgcGNpMiBzZXJpYWwqLwogCQkJMHhlMCAweGUxIDB4ZTIgMHhlMyAgICAgLyogbXNpICovCiAJCQkweGU0IDB4ZTUgMHhlNiAweGU3CiAJCQk+OwpAQCAtMzc2LDcgKzM3OSw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCXVsaTE1NzVAMCB7CiAJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtMzg3LDcgKzM5MCw3IEBACiAKIAkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkJICAweDAgMHgxMDAwMD47CiAJCQkJaXNhQDFlIHsKIAkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTQ3Nyw3ICs0ODAsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUxLmR0cwppbmRleCBlMzUyMzBmLi4xNTljYjNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMS5kdHMKQEAgLTcsNyArNyw3IEBACiAgKgogICogUGxlYXNlIG5vdGUgdG8gYWRkICItYiAxIiBmb3IgY29yZTEncyBkdHMgY29tcGlsaW5nLgogICoKLSAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAogCQkJMTggMTYgMTAgNDIgNDUgNTgJLyogTUVNIEwyIG1kaW8gc2VyaWFsIGNyeXB0byAqLwogCQkJMjkgMzAgMzQgMzUgMzYgNDAJLyogZW5ldDAgZW5ldDEgKi8KLQkJCTI0IDI2IDIwIDIxIDIyIDIzCS8qIHBjaWUwIHBjaWUxIGRtYTEgKi8KKwkJCTI0IDI1IDIwIDIxIDIyIDIzCS8qIHBjaTAgcGNpMSBkbWExICovCiAJCQk0MwkJCS8qIGkyYyAqLwogCQkJMHgxIDB4MiAweDMgMHg0ICAgICAgICAgLyogcGNpIHNsb3QgKi8KIAkJCTB4OSAweGEgMHhiIDB4YyAgICAgICAgIC8qIHVzYiAqLwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKaW5kZXggZjcyNGQ3Mi4uMWJkM2ViZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKQEAgLTIxNyw2ICsyMTcsNyBAQAogCQkJY29kZWMtaGFuZGxlID0gPCZjczQyNzA+OwogCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OwogCQkJZnNsLGNhcHR1cmUtZG1hID0gPCZkbWEwMT47CisJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKIAkJfTsKIAogCQlzc2lAMTYxMDAgewpAQCAtMjI1LDYgKzIyNiw3IEBACiAJCQlyZWcgPSA8MHgxNjEwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8NjMgMj47CisJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cwppbmRleCA0NDgxNTMyLi5kNzJiZWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKQEAgLTE4MCwxMzMgKzE4MCwxNDQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAkJCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKaW5kZXggYmUyYzExYy4uODk1ODM0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKQEAgLTE5LDYgKzE5LDcgQEAKIAljb21wYXRpYmxlID0gInBoeXRlYyxwY20wMzAiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI5LDI2ICszMCwyNiBAQAogCQkJcmVnID0gPDA+OwogCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwogCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwotCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8qIEwxLCAxNksgICAgICAgICAgKi8KLQkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvKiBMMSwgMTZLICAgICAgICAgICovCi0JCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8qIEZyb20gQm9vdGxvYWRlciAgKi8KLQkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIEJvb3Rsb2FkZXIgICovCi0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIEJvb3Rsb2FkZXIgICovCisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8qIDY0TUIgKi8KKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKIAl9OwogCiAJc29jNTIwMEBmMDAwMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7Ci0JCXJhbmdlcyA9IDwweDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKLQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZyb20gYm9vdGxvYWRlciAqLwotCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBib290bG9hZGVyICovCisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgogCiAJCWNkbUAyMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKQEAgLTU2LDg3ICs1Nyw3MCBAQAogCQl9OwogCiAJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgewotCQkJLyogNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsgKi8KKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOwogCQkJcmVnID0gPDB4NTAwIDB4ODA+OwogCQl9OwogCi0JCXRpbWVyQDYwMCB7CS8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciAqLworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg5IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCi0JCXRpbWVyQDYxMCB7CS8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciAqLworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhhIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CiAJCX07CiAKLQkJZ3B0MjogdGltZXJANjIwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGIgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDM6IHRpbWVyQDYzMCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhjIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ0OiB0aW1lckA2NDAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDQ6IHRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw0PjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4ZCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0NTogdGltZXJANjUwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQ1OiB0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGUgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDY6IHRpbWVyQDY2MCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0NjogdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDY+OwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhmIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ3OiB0aW1lckA2NzAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDc6IHRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw3PjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4MTAgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwpAQCAtMTQ0LDQwICsxMjgsMzMgQEAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDUgMHgwIDB4MSAweDYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgxMSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgxMiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCiAJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDcgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb193a3VwOiBncGlvLXdrdXBAYzAwIHsKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg4IDB4MCAweDAgMHgzIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwpAQCAtMTg1LDI2ICsxNjIsMjIgQEAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHhkIDB4MCAweDIgMHhlIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg2IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKLQkJCWRldmljZV90eXBlID0gImRtYS1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOwogCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKLQkJCWludGVycnVwdHMgPSA8MHgzIDB4MCAweDAgIDB4MyAweDEgMHgwICAweDMgMHgyIDB4MCAgMHgzIDB4MyAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4NCAweDAgIDB4MyAweDUgMHgwICAweDMgMHg2IDB4MCAgMHgzIDB4NyAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4OCAweDAgIDB4MyAweDkgMHgwICAweDMgMHhhIDB4MCAgMHgzIDB4YiAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4YyAweDAgIDB4MyAweGQgMHgwICAweDMgMHhlIDB4MCAgMHgzIDB4ZiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMjEzLDI0ICsxODYsMTkgQEAKIAkJfTsKIAogCQlhYzk3QDIwMDAgeyAvKiBQU0MxIGluIGFjOTcgbW9kZSAqLwotCQkJZGV2aWNlX3R5cGUgPSAic291bmQiOwogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1wc2MtYWM5NyIsImZzbCxtcGM1MjAwYi1wc2MtYWM5NyI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDIgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OwogCQl9OwogCiAJCS8qIFBTQzIgcG9ydCBpcyB1c2VkIGJ5IENBTjEvMiAqLwogCiAJCXNlcmlhbEAyNDAwIHsgLyogUFNDMyBpbiBVQVJUIG1vZGUgKi8KLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgzIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKIAkJfTsKIAogCQkvKiBQU0M0IGlzID8/PyAqLwpAQCAtMjM4LDU1ICsyMDYsNDQgQEAKIAkJLyogUFNDNSBpcyA/Pz8gKi8KIAogCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CiAJCX07CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCiAJCW1kaW9AMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsICJmc2wsbXBjNTIwMC1tZGlvIjsKLQkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvKiBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMgKi8KLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NSAweDA+OwkvKiB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4gKi8KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KIAotCQkJcGh5MDpldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCQlyZWcgPSA8MHgwPjsKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKLQkJCWRldmljZV90eXBlID0gImF0YSI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDcgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OwogCQl9OwogCiAJCWkyY0AzZDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHhmIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yOTQsMTAgKzI1MSw4IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MTAgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwpAQCAtMzA3LDcgKzI2Miw3IEBACiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CiAJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CiAJCX07CiAKQEAgLTM0MCwyMiArMjk1LDIxIEBACiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CiAJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47Ci0JCWludGVycnVwdC1tYXAgPSA8MHhjMDAwIDB4MCAweDAgMHgxICZtcGM1MjAwX3BpYyAweDAgMHgwIDB4MyAvKiAxc3Qgc2xvdCAqLwotCQkJCSAweGMwMDAgMHgwIDB4MCAweDIgJm1wYzUyMDBfcGljIDB4MSAweDEgMHgzCi0JCQkJIDB4YzAwMCAweDAgMHgwIDB4MyAmbXBjNTIwMF9waWMgMHgxIDB4MiAweDMKLQkJCQkgMHhjMDAwIDB4MCAweDAgMHg0ICZtcGM1MjAwX3BpYyAweDEgMHgzIDB4MworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1wYzUyMDBfcGljIDAgMCAzIC8vIDFzdCBzbG90CisJCQkJIDB4YzAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAxIDMKKwkJCQkgMHhjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDEgMyAzCiAKLQkJCQkgMHhjODAwIDB4MCAweDAgMHgxICZtcGM1MjAwX3BpYyAweDEgMHgxIDB4MyAvKiAybmQgc2xvdCAqLwotCQkJCSAweGM4MDAgMHgwIDB4MCAweDIgJm1wYzUyMDBfcGljIDB4MSAweDIgMHgzCi0JCQkJIDB4YzgwMCAweDAgMHgwIDB4MyAmbXBjNTIwMF9waWMgMHgxIDB4MyAweDMKLQkJCQkgMHhjODAwIDB4MCAweDAgMHg0ICZtcGM1MjAwX3BpYyAweDAgMHgwIDB4Mz47CisJCQkJIDB4YzgwMCAwIDAgMSAmbXBjNTIwMF9waWMgMSAxIDMgLy8gMm5kIHNsb3QKKwkJCQkgMHhjODAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGM4MDAgMCAwIDMgJm1wYzUyMDBfcGljIDEgMyAzCisJCQkJIDB4YzgwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKLQkJaW50ZXJydXB0cyA9IDwweDIgMHg4IDB4MCAweDIgMHg5IDB4MCAweDIgMHhhIDB4MD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAotCQkJICAweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGIwMDAwMDAwIDB4MCAweDAxMDAwMDAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjAwMDAwMDAgMCAweDAxMDAwMDAwPjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMDQyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogcGh5Q09SRS1NUEM1MjAwQi1JTyAocGNtMDMyKSBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBQZW5ndXRyb25peAorICogU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogSnVlcmdlbiBCZWlzZXJ0IDxqLmJlaXNlcnRAcGVuZ3V0cm9uaXguZGU+CisgKiBXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJwaHl0ZWMscGNtMDMyIjsKKwljb21wYXRpYmxlID0gInBoeXRlYyxwY20wMzIiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsJLy8gMTI4TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZnNsLGhhcy13ZHQ7CisJCX07CisKKwkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQl9OworCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NDogdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDU6IHRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ2OiB0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NzogdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CisJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47CisJCX07CisKKwkJY2FuQDkwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKKwkJCXJlZyA9IDwweDkwMCAweDgwPjsKKwkJfTsKKworCQljYW5AOTgwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OworCQkJcmVnID0gPDB4OTgwIDB4ODA+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJc3BpQGYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOworCQkJcmVnID0gPDB4ZjAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKKwkJfTsKKworCQl1c2JAMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOworCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKKwkJCWludGVycnVwdHMgPSA8MiA2IDA+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCWFjOTdAMjAwMCB7CS8qIFBTQzEgaXMgYWM5NyAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLWFjOTciLCJmc2wsbXBjNTIwMC1wc2MtYWM5NyI7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQkvKiBQU0MyIHBvcnQgaXMgdXNlZCBieSBDQU4xLzIgKi8KKworCQlzZXJpYWxAMjQwMCB7IC8qIFBTQzMgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAzIDA+OworCQl9OworCisJCS8qIFBTQzQgaXMgPz8/ICovCisKKwkJLyogUFNDNSBpcyA/Pz8gKi8KKworCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCWNlbGwtaW5kZXggPSA8NT47CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2QwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJCWVlcHJvbUA1MiB7CisJCQkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzMyIjsKKwkJCQlyZWcgPSA8MHg1Mj47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1wYzUyMDBfcGljIDAgMCAzIC8vIDFzdCBzbG90CisJCQkJIDB4YzAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAxIDMKKwkJCQkgMHhjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDEgMyAzCisKKwkJCQkgMHhjODAwIDAgMCAxICZtcGM1MjAwX3BpYyAxIDEgMyAvLyAybmQgc2xvdAorCQkJCSAweGM4MDAgMCAwIDIgJm1wYzUyMDBfcGljIDEgMiAzCisJCQkJIDB4YzgwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAzIDMKKwkJCQkgMHhjODAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgorCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAxIDAgMHhmYzAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDIgMCAweGZiZTAwMDAwIDB4MDAyMDAwMDAKKwkJCSAgMyAwIDB4ZjllMDAwMDAgMHgwMjAwMDAwMAorCQkJICA0IDAgMHhmN2UwMDAwMCAweDAyMDAwMDAwCisJCQkgIDUgMCAweGU2MDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgNiAwIDB4ZTgwMDAwMDAgMHgwMjAwMDAwMAorCQkJICA3IDAgMHhlYTAwMDAwMCAweDAyMDAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidWJvb3RsIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4MDAwNDAwMDAgMHgwMDFjMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJbGFiZWwgPSAiamZmczIiOworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDFkMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1Ym9vdCI7CisJCQkJcmVnID0gPDB4MDFmMDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmNDAwMDAgeworCQkJCWxhYmVsID0gImVudiI7CisJCQkJcmVnID0gPDB4MDFmNDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmODAwMDAgeworCQkJCWxhYmVsID0gIm9mdHJlZSI7CisJCQkJcmVnID0gPDB4MDFmODAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmYzAwMDAgeworCQkJCWxhYmVsID0gInNwYWNlIjsKKwkJCQlyZWcgPSA8MHgwMWZjMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUAyLDAgeworCQkJY29tcGF0aWJsZSA9ICJtdGQtcmFtIjsKKwkJCXJlZyA9IDwyIDAgMHgwMDIwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQl9OworCisgICAgICAgICAgICAgICAgLyoKKwkJICogZXhhbXBsZSBzbmlwcGV0cyBmb3IgRlBHQQorCQkgKgorCQkgKiBmcGdhQDMsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJmcGdhX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDMgMCAweDAyMDAwMDAwPjsKKwkJICogICAgICAgICBiYW5rLXdpZHRoID0gPDQ+OworCQkgKiB9OworCQkgKgorCQkgKiBmcGdhQDQsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJmcGdhX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDQgMCAweDAyMDAwMDAwPjsKKwkJICogICAgICAgICBiYW5rLXdpZHRoID0gPDQ+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgLyoKKwkJICogZXhhbXBsZSBzbmlwcGV0cyBmb3IgZnJlZSBjaGlwc2VsZWN0cworICAgICAgICAgICAgICAgICAqCisJCSAqIGRldmljZUA1LDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiY3VzdG9tX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDUgMCAweDAyMDAwMDAwPjsKKwkJICogfTsKKyAgICAgICAgICAgICAgICAgKgorCQkgKiBkZXZpY2VANiwwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImN1c3RvbV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDw2IDAgMHgwMjAwMDAwMD47CisJCSAqIH07CisgICAgICAgICAgICAgICAgICoKKwkJICogZGV2aWNlQDcsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJjdXN0b21fZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8NyAwIDB4MDIwMDAwMDA+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqLworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MDJjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yZWR3b29kLmR0cwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBSZWR3b29kKDQ2MFNYKQorICoKKyAqIENvcHlyaWdodCAyMDA4IEFNQ0MgPHRtYXJyaUBhbWNjLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dAorICogYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxyZWR3b29kIjsKKwljb21wYXRpYmxlID0gImFtY2MscmVkd29vZCI7CisJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlzZXJpYWwwID0gJlVBUlQwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQltb2RlbCA9ICJQb3dlclBDLDQ2MFNYIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWRjci1yZWcgPSA8MHgwYzAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCVVJQzE6IGludGVycnVwdC1jb250cm9sbGVyMSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJZGNyLXJlZyA9IDwweDBkMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDFlIDB4NCAweDFmIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzI6IGludGVycnVwdC1jb250cm9sbGVyMiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwyPjsKKwkJZGNyLXJlZyA9IDwweDBlMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweGEgMHg0IDB4YiAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlVSUMzOiBpbnRlcnJ1cHQtY29udHJvbGxlcjMgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8Mz47CisJCWRjci1yZWcgPSA8MHgwZjAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHgxMCAweDQgMHgxMSAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlTRFIwOiBzZHIgeworCQljb21wYXRpYmxlID0gImlibSxzZHItNDYwc3giOworCQlkY3ItcmVnID0gPDB4MDBlIDB4MDAyPjsKKwl9OworCisJQ1BSMDogY3ByIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sY3ByLTQ2MHN4IjsKKwkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NjBzeCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ2MHN4IiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBzeCIsICJpYm0sbWNtYWwyIjsKKwkJCWRjci1yZWcgPSA8MHgxODAgMHg2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8ND47CisJCQludW0tcngtY2hhbnMgPSA8MzI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJaW50ZXJydXB0cyA9IDwJLypUWEVPQiovIDB4NiAweDQKKwkJCQkJLypSWEVPQiovIDB4NyAweDQKKwkJCQkJLypTRVJSKi8gIDB4MSAweDQKKwkJCQkJLypUWERFKi8gIDB4MiAweDQKKwkJCQkJLypSWERFKi8gIDB4MyAweDQKKwkJCQkJLypDT0FMIFRYMCovIDB4MTggMHgyCisJCQkJCS8qQ09BTCBUWDEqLyAweDE5IDB4MgorCQkJCQkvKkNPQUwgVFgyKi8gMHgxYSAweDIKKwkJCQkJLypDT0FMIFRYMyovIDB4MWIgMHgyCisJCQkJCS8qQ09BTCBSWDAqLyAweDFjIDB4MgorCQkJCQkvKkNPQUwgUlgxKi8gMHgxZCAweDIKKwkJCQkJLypDT0FMIFJYMiovIDB4MWUgMHgyCisJCQkJCS8qQ09BTCBSWDMqLyAweDFmIDB4Mj47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NjBzeCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHhiMDAwMDAwMCAweDAwMDAwMDA0IDB4YjAwMDAwMDAgMHg1MDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQkJRUJDMDogZWJjIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDYwc3giLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwweDAxMiAweDAwMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJLyogcmFuZ2VzIHByb3BlcnR5IGlzIHN1cHBsaWVkIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8MHg2IDB4ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisKKwkJCQlub3JfZmxhc2hAMCwwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhbWQsczI5Z2w1MTJuIiwgImNmaS1mbGFzaCI7CisJCQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAgMHgwMDAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJhbWRpc2siOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMTQwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxNjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gImpmZnMyIjsKKwkJCQkJCXJlZyA9IDwweDAxNjAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWEwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQkJCXJlZyA9IDwweDAxYTAwMDAwIDB4MDI1NjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AM2Y2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDNmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAzZmEwMDAwIHsKKwkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwM2ZhMDAwMCAweDAwMDYwMDAwPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDIwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMjAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAyMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDQ+OworCQkJfTsKKworCQkJUkdNSUkwOiBlbWFjLXJnbWlpQGVmNjAwOTAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00NjBzeCIsICJpYm0scmdtaWkiOworCQkJCXJlZyA9IDwweGVmNjAwOTAwIDB4MDAwMDAwMDg+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwYTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MHN4IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMHgwICZVSUMwIDB4MTMgMHg0CisJCQkJCQkgLypXYWtlKi8gICAweDEgJlVJQzIgMHgxZCAweDQ+OworCQkJCXJlZyA9IDwweGVmNjAwYTAwIDB4MDAwMDAwNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQl9OworCisJfTsKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGxiL29wYi9zZXJpYWxAZWY2MDAyMDAiOworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKaW5kZXggOGQzNjVhNS4uYTM2ZGJiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwpAQCAtMTU5LDY4ICsxNTksNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDB4OD47Ci0JCQkJcmVnID0gPDB4MWE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OworCQkJCQlyZWcgPSA8MHgxOT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIxIDB4OD47CisJCQkJCXJlZyA9IDwweDFhPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKaW5kZXggMmJhZjRhNS4uOWM1MDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwpAQCAtMjM0LDY2ICsyMzQsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OwotCQkJCXJlZyA9IDwweDFhPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47CisJCQkJCXJlZyA9IDwweDE5PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OworCQkJCQlyZWcgPSA8MHgxYT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cwppbmRleCAwMTU0MmY3Li5iNzcyNDA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzCkBAIC0xMzksNzcgKzEzOSw4MyBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OwotCQkJCXJlZyA9IDwweDFhPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxYiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKLQkJCQlyZWcgPSA8MHgxYj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMWMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg4IDB4MT47Ci0JCQkJcmVnID0gPDB4MWM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDYgMHgxPjsKKwkJCQkJcmVnID0gPDB4MTk+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg3IDB4MT47CisJCQkJCXJlZyA9IDwweDFhPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxYiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDE+OworCQkJCQlyZWcgPSA8MHgxYj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKKwkJCQkJcmVnID0gPDB4MWM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cwppbmRleCAzNmRiOTgxLi5lM2U5MTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMKQEAgLTE5MiwxMzIgKzE5MiwxNDQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMWYgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MWY+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwICAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxZiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxZj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc29jcmF0ZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NvY3JhdGVzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQwZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NvY3JhdGVzLmR0cwpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgdGhlIFNvY3JhdGVzIGJvYXJkIChNUEM4NTQ0KS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRW1jcmFmdCBTeXN0ZW1zLgorICogU2VyZ2VpIFBvc2VsZW5vdiwgPHNwb3NlbGVub3ZAZW1jcmFmdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiYWJiLHNvY3JhdGVzIjsKKwljb21wYXRpYmxlID0gImFiYixzb2NyYXRlcyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTQ0QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMD47CS8vIEZpbGxlZCBpbiBieSBVLUJvb3QKKwl9OworCisJc29jODU0NEBlMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweGUwMDAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhlMDAwMDAwMCAweDAwMDAxMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIGluIGJ5IFUtQm9vdAorCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWltbXIiLCAic2ltcGxlLWJ1cyI7CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OwkvLyBMMiwgMjU2SworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWR0dEAyOCB7CisJCQkJY29tcGF0aWJsZSA9ICJ3aW5ib25kLHc4Mzc4MmQiOworCQkJCXJlZyA9IDwweDI4PjsKKwkJCX07CisJCQlydGNAMzIgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4MDI1IjsKKwkJCQlyZWcgPSA8MHgzMj47CisJCQkJaW50ZXJydXB0cyA9IDw3IDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJfTsKKwkJCWR0dEA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHM3NSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKwkJCXRzQDRhIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHRzYzIwMDMiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQl9OworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCX07CisKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1sb2NhbGJ1cyIsCisJCSAgICAgICAgICAgICAiZnNsLHBxMy1sb2NhbGJ1cyIsCisJCQkgICAgICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDQwPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmMwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAyIDAgMHhjODAwMDAwMCAweDA0MDAwMDAwCisJCQkgIDMgMCAweGMwMDAwMDAwIDB4MDAxMDAwMDAKKwkJCT47IC8qIE92ZXJ3cml0dGVuIGJ5IFUtQm9vdCAqLworCisJCW5vcl9mbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWQsczI5Z2wyNTZuIiwgImNmaS1mbGFzaCI7CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJcmVnID0gPDB4MCAweDAwMDAwMCAweDQwMDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAgMHgxZTAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQlsYWJlbCA9ICJkdGIiOworCQkJCXJlZyA9IDwweDFlMDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJyb290IjsKKwkJCQlyZWcgPSA8MHgyMDAwMDAgMHgyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDQwMDAwMCAweDNiODAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzZjgwMDAwIHsKKwkJCQlsYWJlbCA9ICJlbnYiOworCQkJCXJlZyA9IDwweDNmODAwMDAgMHg0MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzZmMwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwweDNmYzAwMDAgMHg0MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQlkaXNwbGF5QDIsMCB7CisJCQljb21wYXRpYmxlID0gImZ1aml0c3UsbGltZSI7CisJCQlyZWcgPSA8MiAweDAgMHg0MDAwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDw2IDE+OworCQl9OworCisJCWZwZ2FfcGljOiBmcGdhLXBpY0AzLDEwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzLWZwZ2EtcGljIjsKKwkJCXJlZyA9IDwzIDB4MTAgMHgxMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCS8qIElSUXMgMiwgMTAsIDExLCBhY3RpdmUgbG93LCBsZXZlbC1zZW5zaXRpdmUgKi8KKwkJCWludGVycnVwdHMgPSA8MiAxIDEwIDEgMTEgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCX07CisKKwkJc3BpQDMsNjAgeworCQkJY29tcGF0aWJsZSA9ICJhYmIsc29jcmF0ZXMtc3BpIjsKKwkJCXJlZyA9IDwzIDB4NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDggNCAwPjsJLy8gbnVtYmVyLCB0eXBlLCByb3V0aW5nCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZmcGdhX3BpYz47CisJCX07CisKKwkJbmFuZEAzLDcwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzLW5hbmQiOworCQkJcmVnID0gPDMgMHg3MCAweDA0PjsKKwkJCWJhbmstd2lkdGggPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGF0YUAwIHsKKwkJCQlsYWJlbCA9ICJkYXRhIjsKKwkJCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OworCQkJfTsKKwkJfTsKKworCQljYW5AMywxMDAgeworCQkJY29tcGF0aWJsZSA9ICJwaGlsaXBzLHNqYTEwMDAiOworCQkJcmVnID0gPDMgMHgxMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgOCAxPjsJLy8gbnVtYmVyLCB0eXBlLCByb3V0aW5nCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZmcGdhX3BpYz47CisJCX07CisJfTsKKworCXBjaTA6IHBjaUBlMDAwODAwMCB7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQlyZWcgPSA8MHhlMDAwODAwMCAweDEwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OworCisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCS8qIElEU0VMIDB4MTEgKi8KKwkJCQkgMHg4ODAwIDB4MCAweDAgMSAmbXBpYyA1IDEKKwkJCQkvKiBJRFNFTCAweDEyICovCisJCQkJIDB4OTAwMCAweDAgMHgwIDEgJm1waWMgNCAxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHgwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDEwMDAwMDA+OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4X2dwM184NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCmluZGV4IGZmZjMzZmUuLjhiMTczOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCkBAIC0xMjQsNjYgKzEyNCw3MiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgND47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSA0PjsKLQkJCQlyZWcgPSA8ND47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDQ+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgND47CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk0PjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCmluZGV4IDkwNjMwMmUuLmM5NTkwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKQEAgLTE3LDYgKzE3LDcgQEAKIAljb21wYXRpYmxlID0gInRxYyx0cW01MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC02NiwzNiArNjcsMzMgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKIAkJY2FuQDkwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIjsKIAkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iOwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTA1LDcgKzEwMyw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xMTQsMzkgKzExMSwyOCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDIyMDAgewkJLy8gUFNDMgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMjQwMCB7CQkvLyBQU0MzCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwyPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIApAQCAtMTU2LDEwICsxNDIsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwpAQCAtMTY4LDcgKzE1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTE3Nyw3ICsxNjAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQkgcnRjQDY4IHsKQEAgLTE5Miw5ICsxNzQsOCBAQAogCQl9OwogCX07CiAKLQlscGIgewotCQltb2RlbCA9ICJmc2wsbHBiIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbHBiIjsKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzID0gPDAgMCAweGZjMDAwMDAwIDB4MDIwMDAwMDA+OwpAQCAtMjIzLDcgKzIwNCw2IEBACiAJCQkJIDB4YzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKIAkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MTAwMDAwMDAKIAkJCSAgMHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cwppbmRleCBhNjkzZjAxLi5hYzk0MTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzCkBAIC04NCw2ICs4NCwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzEsOTQgKzEzNiwxMDMgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJGRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDw0MSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCmluZGV4IDllM2Y1ZjBkLi5jNzFiYjVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCkBAIC04Myw2ICs4MywxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzAsNzIgKzEzNSw3OCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzCmluZGV4IDE1MDg2ZWIuLjI4YjFhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMKQEAgLTg1LDYgKzg1LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTE0MywxMzQgKzE0OCwxNDYgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk0OiBldGhlcm5ldC1waHlANCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDw0PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDU+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDU+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5ND47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzY1LDE0ICszODIsMTQgQEAKIAkJY2FuMEAyLDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJY2FuMUAyLDEwMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMKaW5kZXggYjdiNjVmNS4uODI2ZmI2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cwpAQCAtODUsNiArODUsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTQzLDEzNCArMTQ4LDE0NiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDQ+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8NT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8NT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk0PjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zNjUsMTQgKzM4MiwxNCBAQAogCQljYW4wQDIsMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQljYW4xQDIsMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cwppbmRleCBjZjkyYjRlLi5hMTMzZGVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzCkBAIC04Myw2ICs4MywxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzAsNzIgKzEzNSw3OCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzCmluZGV4IDllMWFiMmQuLjY0OWUyZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMKQEAgLTg1LDYgKzg1LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTEzMiw3MiArMTM3LDc4IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpAQCAtMzM1LDE0ICszNDYsMTQgQEAKIAkJY2FuMEAyLDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJY2FuMUAyLDEwMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdmlydGV4NDQwLW1sNTA3LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCmluZGV4IGRjOGU3OGUuLjUyZDhjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCkBAIC03LDYgKzcsMTUgQEAKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogLS0tCisgKgorICogRGV2aWNlIFRyZWUgR2VuZXJhdG9yIHZlcnNpb246IDEuMQorICoKKyAqIENBVVRJT046IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBsaWJnZW4uCisgKiBWZXJzaW9uOiBYaWxpbnggRURLIDEwLjEuMDMgRURLX0tfU1AzLjYKKyAqCisgKiBYUFMgcHJvamVjdCBkaXJlY3Rvcnk6IG1sNTA3X3BwYzQ0MF9lbWJfcmVmCiAgKi8KIAogL2R0cy12MS87CkBAIC0yMiw4ICszMSw4IEBACiAJCXJlZyA9IDwgMCAweDEwMDAwMDAwID47CiAJfSA7CiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCBpcD1vbiByb290PS9kZXYvcmFtIjsKLQkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYkAwL3NlcmlhbEA4M2UwMDAwMCI7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAgcm9vdD0vZGV2L3JhbSI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJlJTMjMyX1VhcnRfMTsKIAl9IDsKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xMzYsMTkgKzE0NSwxOSBAQAogCQkJCWNvbXBhdGlibGUgPSAieGxueCxsbC1kbWEtMS4wMC5hIjsKIAkJCQlkY3ItcmVnID0gPCAweDgwIDB4MTEgPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCQlpbnRlcnJ1cHRzID0gPCA5IDIgMHhhIDIgPjsKKwkJCQlpbnRlcnJ1cHRzID0gPCAxMCAyIDExIDIgPjsKIAkJCX0gOwogCQl9IDsKIAl9IDsKIAlwbGJfdjQ2XzA6IHBsYkAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInhsbngscGxiLXY0Ni0xLjAyLmEiLCAic2ltcGxlLWJ1cyI7CisJCWNvbXBhdGlibGUgPSAieGxueCxwbGItdjQ2LTEuMDMuYSIsICJzaW1wbGUtYnVzIjsKIAkJcmFuZ2VzIDsKIAkJRElQX1N3aXRjaGVzXzhCaXQ6IGdwaW9AODE0NjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ncGlvLTEuMDAuYSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCWludGVycnVwdHMgPSA8IDYgMiA+OworCQkJaW50ZXJydXB0cyA9IDwgNyAyID47CiAJCQlyZWcgPSA8IDB4ODE0NjAwMDAgMHgxMDAwMCA+OwogCQkJeGxueCxhbGwtaW5wdXRzID0gPDE+OwogCQkJeGxueCxhbGwtaW5wdXRzLTIgPSA8MD47CkBAIC0xNjMsNiArMTcyLDg2IEBACiAJCQl4bG54LHRyaS1kZWZhdWx0ID0gPDB4ZmZmZmZmZmY+OwogCQkJeGxueCx0cmktZGVmYXVsdC0yID0gPDB4ZmZmZmZmZmY+OwogCQl9IDsKKwkJRkxBU0g6IGZsYXNoQGZjMDAwMDAwIHsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQljb21wYXRpYmxlID0gInhsbngseHBzLW1jaC1lbWMtMi4wMC5hIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8IDB4ZmMwMDAwMDAgMHgyMDAwMDAwID47CisJCQl4bG54LGZhbWlseSA9ICJ2aXJ0ZXg1IjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMCA9IDwweDE+OworCQkJeGxueCxpbmNsdWRlLWRhdGF3aWR0aC1tYXRjaGluZy0xID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtZGF0YXdpZHRoLW1hdGNoaW5nLTIgPSA8MHgwPjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMyA9IDwweDA+OworCQkJeGxueCxpbmNsdWRlLW5lZ2VkZ2UtaW9yZWdzID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtcGxiLWlwaWYgPSA8MHgxPjsKKwkJCXhsbngsaW5jbHVkZS13cmJ1ZiA9IDwweDE+OworCQkJeGxueCxtYXgtbWVtLXdpZHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gtbmF0aXZlLWR3aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWNoLXBsYi1jbGstcGVyaW9kLXBzID0gPDB4MjcxMD47CisJCQl4bG54LG1jaC1zcGxiLWF3aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWNoMC1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDAtcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMC1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDEtYWNjZXNzYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gxLXByb3RvY29sID0gPDB4MD47CisJCQl4bG54LG1jaDEtcmRkYXRhYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gyLWFjY2Vzc2J1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMi1wcm90b2NvbCA9IDwweDA+OworCQkJeGxueCxtY2gyLXJkZGF0YWJ1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMy1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDMtcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMy1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1lbTAtd2lkdGggPSA8MHgxMD47CisJCQl4bG54LG1lbTEtd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1lbTItd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1lbTMtd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG51bS1iYW5rcy1tZW0gPSA8MHgxPjsKKwkJCXhsbngsbnVtLWNoYW5uZWxzID0gPDB4Mj47CisJCQl4bG54LHByaW9yaXR5LW1vZGUgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTAgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTEgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTIgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTMgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTAgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTEgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTIgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTMgPSA8MHgyPjsKKwkJCXhsbngsdGF2ZHYtcHMtbWVtLTAgPSA8MHgxYWRiMD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0xID0gPDB4M2E5OD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0yID0gPDB4M2E5OD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0zID0gPDB4M2E5OD47CisJCQl4bG54LHRjZWR2LXBzLW1lbS0wID0gPDB4MWFkYjA+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMSA9IDwweDNhOTg+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMiA9IDwweDNhOTg+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMyA9IDwweDNhOTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMCA9IDwweDg4Yjg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMSA9IDwweDFiNTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMiA9IDwweDFiNTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMyA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMCA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMSA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMiA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMyA9IDwweDFiNTg+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMCA9IDwweDg4Yjg+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMSA9IDwweDA+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMiA9IDwweDA+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMyA9IDwweDA+OworCQkJeGxueCx0d2MtcHMtbWVtLTAgPSA8MHgyYWY4PjsKKwkJCXhsbngsdHdjLXBzLW1lbS0xID0gPDB4M2E5OD47CisJCQl4bG54LHR3Yy1wcy1tZW0tMiA9IDwweDNhOTg+OworCQkJeGxueCx0d2MtcHMtbWVtLTMgPSA8MHgzYTk4PjsKKwkJCXhsbngsdHdwLXBzLW1lbS0wID0gPDB4MTExNzA+OworCQkJeGxueCx0d3AtcHMtbWVtLTEgPSA8MHgyZWUwPjsKKwkJCXhsbngsdHdwLXBzLW1lbS0yID0gPDB4MmVlMD47CisJCQl4bG54LHR3cC1wcy1tZW0tMyA9IDwweDJlZTA+OworCQkJeGxueCx4Y2wwLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDAtd3JpdGV4ZmVyID0gPDB4MT47CisJCQl4bG54LHhjbDEtbGluZXNpemUgPSA8MHg0PjsKKwkJCXhsbngseGNsMS13cml0ZXhmZXIgPSA8MHgxPjsKKwkJCXhsbngseGNsMi1saW5lc2l6ZSA9IDwweDQ+OworCQkJeGxueCx4Y2wyLXdyaXRleGZlciA9IDwweDE+OworCQkJeGxueCx4Y2wzLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDMtd3JpdGV4ZmVyID0gPDB4MT47CisJCX0gOwogCQlIYXJkX0V0aGVybmV0X01BQzogeHBzLWxsLXRlbWFjQDgxYzAwMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC0xODUsNiArMjc0LDE5IEBACiAJCQkJeGxueCx0eGZpZm8gPSA8MHgxMDAwPjsKIAkJCX0gOwogCQl9IDsKKwkJSUlDX0VFUFJPTTogaTJjQDgxNjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtaWljLTIuMDAuYSI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKKwkJCWludGVycnVwdHMgPSA8IDYgMiA+OworCQkJcmVnID0gPCAweDgxNjAwMDAwIDB4MTAwMDAgPjsKKwkJCXhsbngsY2xrLWZyZXEgPSA8MHg1ZjVlMTAwPjsKKwkJCXhsbngsZmFtaWx5ID0gInZpcnRleDUiOworCQkJeGxueCxncG8td2lkdGggPSA8MHgxPjsKKwkJCXhsbngsaWljLWZyZXEgPSA8MHgxODZhMD47CisJCQl4bG54LHNjbC1pbmVydGlhbC1kZWxheSA9IDwweDA+OworCQkJeGxueCxzZGEtaW5lcnRpYWwtZGVsYXkgPSA8MHgwPjsKKwkJCXhsbngsdGVuLWJpdC1hZHIgPSA8MHgwPjsKKwkJfSA7CiAJCUxFRHNfOEJpdDogZ3Bpb0A4MTQwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWdwaW8tMS4wMC5hIjsKIAkJCXJlZyA9IDwgMHg4MTQwMDAwMCAweDEwMDAwID47CkBAIC0yMjAsNyArMzIyLDcgQEAKIAkJUHVzaF9CdXR0b25zXzVCaXQ6IGdwaW9AODE0NDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ncGlvLTEuMDAuYSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCWludGVycnVwdHMgPSA8IDcgMiA+OworCQkJaW50ZXJydXB0cyA9IDwgOCAyID47CiAJCQlyZWcgPSA8IDB4ODE0NDAwMDAgMHgxMDAwMCA+OwogCQkJeGxueCxhbGwtaW5wdXRzID0gPDE+OwogCQkJeGxueCxhbGwtaW5wdXRzLTIgPSA8MD47CkBAIC0yMzcsMTMgKzMzOSwxMyBAQAogCQl9IDsKIAkJUlMyMzJfVWFydF8xOiBzZXJpYWxAODNlMDAwMDAgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47Ci0JCQljb21wYXRpYmxlID0gInhsbngseHBzLXVhcnQxNjU1MC0yLjAwLmEiLCAibnMxNjU1MCI7Ci0JCQljdXJyZW50LXNwZWVkID0gPDB4MjU4MD47CisJCQljb21wYXRpYmxlID0gInhsbngseHBzLXVhcnQxNjU1MC0yLjAwLmIiLCAibnMxNjU1MCI7CisJCQljdXJyZW50LXNwZWVkID0gPDk2MDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OwotCQkJaW50ZXJydXB0cyA9IDwgOCAyID47CisJCQlpbnRlcnJ1cHRzID0gPCA5IDIgPjsKIAkJCXJlZyA9IDwgMHg4M2UwMDAwMCAweDEwMDAwID47Ci0JCQlyZWctb2Zmc2V0ID0gPDM+OworCQkJcmVnLW9mZnNldCA9IDwweDEwMDM+OwogCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJeGxueCxmYW1pbHkgPSAidmlydGV4NSI7CiAJCQl4bG54LGhhcy1leHRlcm5hbC1yY2xrID0gPDA+OwpAQCAtMjY4LDcgKzM3MCw3IEBACiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWludGMtMS4wMC5hIjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyIDsKIAkJCXJlZyA9IDwgMHg4MTgwMDAwMCAweDEwMDAwID47Ci0JCQl4bG54LG51bS1pbnRyLWlucHV0cyA9IDwweGI+OworCQkJeGxueCxudW0taW50ci1pbnB1dHMgPSA8MHhjPjsKIAkJfSA7CiAJCXhwc190aW1lYmFzZV93ZHRfMTogeHBzLXRpbWViYXNlLXdkdEA4M2EwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLXRpbWViYXNlLXdkdC0xLjAwLmIiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYwppbmRleCA4YjM2MDdjLi5mMjE1NmYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYwpAQCAtMTE3LDcgKzExNyw4IEBACiAJaWYgKGRldnAgPT0gTlVMTCkKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgIm5zMTY1NTAiKSkKKwlpZiAoZHRfaXNfY29tcGF0aWJsZShkZXZwLCAibnMxNjU1MCIpIHx8CisJICAgIGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgInBucFBOUCw1MDEiKSkKIAkJcmMgPSBuczE2NTUwX2NvbnNvbGVfaW5pdChkZXZwLCAmc2VyaWFsX2NkKTsKIAllbHNlIGlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJtYXJ2ZWxsLG12NjQzNjAtbXBzYyIpKQogCQlyYyA9IG1wc2NfY29uc29sZV9pbml0KGRldnAsICZzZXJpYWxfY2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlciBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKaW5kZXggOTY1YzIzNy4uM2FjNzVhZSAxMDA3NTUKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCkBAIC0xODYsNiArMTg2LDkgQEAKICAgICAqLW1wYzg1KnwqLXRxbTg1KnwqLXNiYzg1KikKICAgICAgICAgcGxhdGZvcm1vPSRvYmplY3QvY3Vib290LTg1eHgubwogICAgICAgICA7OworICAgICotYW1pZ2FvbmUpCisgICAgICAgIGxpbmtfYWRkcmVzcz0nMHg4MDAwMDAnCisgICAgICAgIDs7CiAgICAgZXNhYwogICAgIDs7CiBwczMpCkBAIC0yMTEsMTEgKzIxNCwxMSBAQAogICAgIGJpbmFyeT15CiAgICAgOzsKIHNpbXBsZWJvb3QtdmlydGV4NDQwLSopCi0gICAgcGxhdGZvcm1vPSIkb2JqZWN0L3NpbXBsZWJvb3QubyAkb2JqZWN0L3ZpcnRleC5vIgorICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9maXhlZC1oZWFkLm8gJG9iamVjdC9zaW1wbGVib290Lm8gJG9iamVjdC92aXJ0ZXgubyIKICAgICBiaW5hcnk9eQogICAgIDs7CiBzaW1wbGVib290LSopCi0gICAgcGxhdGZvcm1vPSIkb2JqZWN0L3NpbXBsZWJvb3QubyIKKyAgICBwbGF0Zm9ybW89IiRvYmplY3QvZml4ZWQtaGVhZC5vICRvYmplY3Qvc2ltcGxlYm9vdC5vIgogICAgIGJpbmFyeT15CiAgICAgOzsKIGFzcDgzNHgtcmVkYm9vdCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCmluZGV4IDgxY2RjYzQuLmY5YTA4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjozNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIE1vbiBGZWIgIDIgMTM6MTM6MDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC03NCw2ICs3NCwxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTQ3LDExICsxNTYsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0zNzMsNiArMzc3LDcgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC0zODQsNiArMzg5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCkBAIC00NjYsNiArNDcyLDE1IEBACiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTUzMywxMyArNTQ4LDEzNiBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0lCTV9JSUM9eQorIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRDc0MTQ9eQorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTU1Niw3ICs2OTQsMTIgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC01NzQsNiArNzE3LDcgQEAKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCiBDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTU5MCw3ICs3MzQsMTA5IEBACiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9MSUJVU1VBTD15CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY1NDMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTE3NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBXZWQgRmViICA0IDE0OjMxOjA5IDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAorIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CisjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKK0NPTkZJR19SRURXT09EPXkKKyMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDNDR4X1NJTVBMRT15CisjIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfNDYwU1g9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNJT049eQorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorQ09ORklHX0ZVU0lPTl9TQVM9eQorQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAorIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorQ09ORklHX0kyTz15CitDT05GSUdfSTJPX0xDVF9OT1RJRllfT05fQ0hBTkdFUz15CitDT05GSUdfSTJPX0VYVF9BREFQVEVDPXkKKyMgQ09ORklHX0kyT19DT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX1BST0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUM9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCitDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CitDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9eQorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfSUJNX0lJQz15CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSWVBURD15CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009eQorQ09ORklHX0NSWVBUT19HQ009eQorQ09ORklHX0NSWVBUT19TRVFJVj15CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ1RSPXkKK0NPTkZJR19DUllQVE9fQ1RTPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKK0NPTkZJR19DUllQVE9fUENCQz15CitDT05GSUdfQ1JZUFRPX1hUUz15CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz15CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ0PXkKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD15CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M5MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKQEAgLTAsMCArMSwxNDEwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYuMgorIyBTYXQgT2N0IDE4IDExOjA2OjEzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CitDT05GSUdfU09DUkFURVM9eQorIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9BTElHTj0weDEwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0NBTj15CitDT05GSUdfQ0FOX1JBVz15CitDT05GSUdfQ0FOX0JDTT15CisKKyMKKyMgQ0FOIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19DQU5fVkNBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fT0xEX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1NMQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fU0pBMTAwMD15CitDT05GSUdfQ0FOX1NKQTEwMDBfTUVNX09GPXkKKyMgQ09ORklHX0NBTl9FTVNfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9JWFhBVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1BFQUtfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9LVkFTRVJfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9NU0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1NPQ1JBVEVTPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD04MDAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwMz15CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1NPQ1JBVEVTPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKK0NPTkZJR19IV01PTl9WSUQ9eQorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4Mzc4MUQ9eQorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKK0NPTkZJR19GQl9CT1RIX0VORElBTj15CisjIENPTkZJR19GQl9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKK0NPTkZJR19GQl9NQjg2MlhYPXkKKyMgQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUI4NjJYWF9MSU1FPXkKKyMgQ09ORklHX0ZCX1BSRV9JTklUX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GU0xfRElVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlg4MDI1PXkKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUFBDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJjMTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTg4OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNworIyBGcmkgTWFyIDEzIDE1OjM2OjExIDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1BQQzlBPXkKKyMgQ09ORklHX0dFRl9TQkMzMTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VGX1NCQzYxMCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9SQVc9bQorIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorQ09ORklHX1dBTl9ST1VURVI9bQorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KK0NPTkZJR19ORVRfU0NIX0hUQj1tCitDT05GSUdfTkVUX1NDSF9IRlNDPW0KK0NPTkZJR19ORVRfU0NIX0FUTT1tCitDT05GSUdfTkVUX1NDSF9QUklPPW0KKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRFJJVkVSUz15CisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GT1JFMjAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1NPTE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9BVE09bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19EUzE2ODI9eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE05MD15CitDT05GSUdfU0VOU09SU19MTTkyPXkKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1dEVD15CisjIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CisjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JYODU4MT15CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjM2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTYxMyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBXZWQgSmFuIDI4IDIzOjA1OjM0IDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX0dFRl9TQkMzMTA9eQorIyBDT05GSUdfR0VGX1NCQzYxMCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorQ09ORklHX1BDSV9NU0k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfTE9XTUVNX0NBTV9OVU09MworQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9TRkYgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19EUzE2ODI9eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTkwPXkKK0NPTkZJR19TRU5TT1JTX0xNOTI9eQorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfV0RUPXkKKyMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SWDg1ODE9eQorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NTAKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2NjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKQEAgLTAsMCArMSwxNjM2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIFN1biBGZWIgIDEgMTQ6MjI6NDIgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNQorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CitDT05GSUdfQU1JR0FPTkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorIyBDT05GSUdfTkZfTkFUX1RGVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUX1NJUD1tCisjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19QQVJQT1JUPXkKK0NPTkZJR19QQVJQT1JUX1BDPXkKKyMgQ09ORklHX1BBUlBPUlRfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQorIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorQ09ORklHX0JMS19ERVZfRkQ9eQorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1RJTUlOR1M9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0lJTUFHRT15CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfODEzOUNQPXkKK0NPTkZJR184MTM5VE9PPXkKK0NPTkZJR184MTM5VE9PX1BJTz15CisjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAorIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1BDU1BLUj15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKK0NPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9CQUNLTElHSFQ9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKK0NPTkZJR19GQl8zREZYPXkKKyMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9bQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlM9eQorIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19KQkQyPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorQ09ORklHX1hNT049eQorQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX0lSUVNUQUNLUz15CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQorQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fSEFTSDI9bQorQ09ORklHX0NSWVBUT19STkcyPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IDgxYWZjOGIuLmFmMGNkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBNb24gSmFuIDI2IDIxOjQwOjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgRnJpIEZlYiAgNiAwOTo0ODo1MyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM4OCw3ICszODgsMTAgQEAKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MDIsNyArNTA1LDcgQEAKICMKICMgRUVQUk9NIHN1cHBvcnQKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fQVQyND15CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQpAQCAtNjc4LDcgKzY4MSw3IEBACiAjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTFhUX1BIWT15CiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKQEAgLTgxNSw4ICs4MTgsNiBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC0xMjgxLDcgKzEyODIsNjEgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggODhjNjI5NS4uMjUyNDAxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMjA2Nyw5ICsyMDY3LDkgQEAKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKICMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaAppbmRleCAxMDdkOWI5Li4zN2MzMmFiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oCkBAIC0xMSw5ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0jZGVmaW5lIFBQQ19OT1BfSU5TVFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgUFBDX0xXU1lOQ19JTlNUUgkweDdjMjAwNGFjCisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIAogLyogRmxhZ3MgZm9yIGNyZWF0ZV9icmFuY2g6CiAgKiAiYiIgICA9PSBjcmVhdGVfYnJhbmNoKGFkZHIsIHRhcmdldCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDIxMTcyYmEuLjgwZjMxNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0xNDUsNiArMTQ1LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9VU0VfVEIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDQwKQogI2RlZmluZSBDUFVfRlRSX0wyQ1NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA4MCkKICNkZWZpbmUgQ1BVX0ZUUl82MDEJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBDUFVfRlRSX0RCRUxMCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDIwMCkKICNkZWZpbmUgQ1BVX0ZUUl9DQU5fTkFQCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDQwMCkKICNkZWZpbmUgQ1BVX0ZUUl9MM0NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDgwMCkKICNkZWZpbmUgQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMTAwMCkKQEAgLTM3NSw3ICszNzYsOCBAQAogCSAgICBDUFVfRlRSX05PRFNJU1JBTElHTiB8IENQVV9GVFJfTk9FWEVDVVRFKQogI2RlZmluZSBDUFVfRlRSU19FNTAwTUMJKENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBcCi0JICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9FWEVDVVRFKQorCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwKKwkgICAgQ1BVX0ZUUl9EQkVMTCkKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxMTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBwcm92aWRlcyBtYXNrcyBhbmQgb3Bjb2RlIGltYWdlcyBmb3IgdXNlIGJ5IGNvZGUgZ2VuZXJhdGlvbiwgZW11bGF0aW9uCisgKiBhbmQgZm9yIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgbWlnaHQgbm90IGtub3cgYWJvdXQKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfREJFTExfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfREJFTExfSAorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKworI2RlZmluZSBQUENfREJFTExfTVNHX0JSRENBU1QJKDB4MDQwMDAwMDApCisjZGVmaW5lIFBQQ19EQkVMTF9UWVBFKHgpCSgoKHgpICYgMHhmKSA8PCAyOCkKK2VudW0gcHBjX2RiZWxsIHsKKwlQUENfREJFTEwgPSAwLAkJLyogZG9vcmJlbGwgKi8KKwlQUENfREJFTExfQ1JJVCA9IDEsCS8qIGNyaXRpY2FsIGRvb3JiZWxsICovCisJUFBDX0dfREJFTEwgPSAyLAkvKiBndWVzdCBkb29yYmVsbCAqLworCVBQQ19HX0RCRUxMX0NSSVQgPSAzLAkvKiBndWVzdCBjcml0aWNhbCBkb29yYmVsbCAqLworCVBQQ19HX0RCRUxMX01DID0gNCwJLyogZ3Vlc3QgbWNoZWNrIGRvb3JiZWxsICovCit9OworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGJlbGxfc21wX21lc3NhZ2VbTlJfQ1BVU107CitleHRlcm4gdm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcGNfbXNnc25kKGVudW0gcHBjX2RiZWxsIHR5cGUsIHUzMiBmbGFncywgdTMyIHRhZykKK3sKKwl1MzIgbXNnID0gUFBDX0RCRUxMX1RZUEUodHlwZSkgfCAoZmxhZ3MgJiBQUENfREJFTExfTVNHX0JSRENBU1QpIHwKKwkJCSh0YWcgJiAweDA3ZmZmZmZmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fIChQUENfTVNHU05EKCUwKSA6IDogInIiIChtc2cpKTsKK30KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19EQkVMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDg2Y2VmN2QuLmM2OWYyYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xMDksMTggKzEwOSw4IEBACiAJICogb25seSBJU0EgRE1BIGRldmljZSB3ZSBzdXBwb3J0IGlzIHRoZSBmbG9wcHkgYW5kIHdlIGhhdmUgYSBoYWNrCiAJICogaW4gdGhlIGZsb3BweSBkcml2ZXIgZGlyZWN0bHkgdG8gZ2V0IGEgZGV2aWNlIGZvciB1cy4KIAkgKi8KLQotCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkgfHwgZGV2LT5hcmNoZGF0YS5kbWFfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKKwlpZiAodW5saWtlbHkoZGV2ID09IE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKLSNlbHNlCi0JCS8qIFVzZSBkZWZhdWx0IG9uIDMyLWJpdCBpZiBkbWFfb3BzIGlzIG5vdCBzZXQgdXAgKi8KLQkJLyogVE9ETzogTG9uZyB0ZXJtLCB3ZSBzaG91bGQgZml4IGRyaXZlcnMgc28gdGhhdCBkZXYgYW5kCi0JCSAqIGFyY2hkYXRhIGRtYV9vcHMgYXJlIHNldCB1cCBmb3IgYWxsIGJ1c2VzLgotCQkgKi8KLQkJcmV0dXJuICZkbWFfZGlyZWN0X29wczsKLSNlbmRpZgotCX0KIAogCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9vcHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYjU2MDBjZS4uMWE4NTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtOCw2ICs4LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CkBAIC0xNzgsNyArMTc5LDggQEAKICAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCiAgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwogCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgICgweDIwMDAwMDAwKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmFuZG9taXplX2V0X2R5bih1bnNpZ25lZCBsb25nIGJhc2UpOworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCShyYW5kb21pemVfZXRfZHluKDB4MjAwMDAwMDApKQogCiAvKgogICogT3VyIHJlZ2lzdGVycyBhcmUgYWx3YXlzIHVuc2lnbmVkIGxvbmdzLCB3aGV0aGVyIHdlJ3JlIGEgMzIgYml0CkBAIC0yNzAsNiArMjcyLDE0IEBACiAJCQkJICAgICAgIGludCB1c2VzX2ludGVycCk7CiAjZGVmaW5lIFZEU09fQVVYX0VOVChhLGIpIE5FV19BVVhfRU5UKGEsYik7CiAKKy8qIDFHQiBmb3IgNjRiaXQsIDhNQiBmb3IgMzJiaXQgKi8KKyNkZWZpbmUgU1RBQ0tfUk5EX01BU0sgKGlzXzMyYml0X3Rhc2soKSA/IFwKKwkoMHg3ZmYgPj4gKFBBR0VfU0hJRlQgLSAxMikpIDogXAorCSgweDNmZmZmID4+IChQQUdFX1NISUZUIC0gMTIpKSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNkZWZpbmUgYXJjaF9yYW5kb21pemVfYnJrIGFyY2hfcmFuZG9taXplX2JyaworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDg0MjhiMzguLmQ2MGZkMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTYxLDcgKzYxLDcgQEAKICAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCiAgKi8KICNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgXAotCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OQ0cpCiAKICNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkgXAogCQlfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBlNWYyYWU4Li5kZGUxMjk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC01LDcgKzUsNDQgQEAKICNkZWZpbmUgTUNPVU5UX0FERFIJCSgobG9uZykoX21jb3VudCkpCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNCAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZiBfX0FTU0VNQkxZX18KKworLyogQmFzZWQgb2ZmIG9mIG9iamR1bXAgb3B0cHV0IGZyb20gZ2xpYmMgKi8KKworI2RlZmluZSBNQ09VTlRfU0FWRV9GUkFNRQkJCVwKKwlzdHd1CXIxLC00OChyMSk7CQkJXAorCXN0dwlyMywgMTIocjEpOwkJCVwKKwlzdHcJcjQsIDE2KHIxKTsJCQlcCisJc3R3CXI1LCAyMChyMSk7CQkJXAorCXN0dwlyNiwgMjQocjEpOwkJCVwKKwltZmxyCXIzOwkJCQlcCisJbHd6CXI0LCA1MihyMSk7CQkJXAorCW1mY3IJcjU7CQkJCVwKKwlzdHcJcjcsIDI4KHIxKTsJCQlcCisJc3R3CXI4LCAzMihyMSk7CQkJXAorCXN0dwlyOSwgMzYocjEpOwkJCVwKKwlzdHcJcjEwLDQwKHIxKTsJCQlcCisJc3R3CXIzLCA0NChyMSk7CQkJXAorCXN0dwlyNSwgOChyMSkKKworI2RlZmluZSBNQ09VTlRfUkVTVE9SRV9GUkFNRQkJCVwKKwlsd3oJcjYsIDgocjEpOwkJCVwKKwlsd3oJcjAsIDQ0KHIxKTsJCQlcCisJbHd6CXIzLCAxMihyMSk7CQkJXAorCW10Y3RyCXIwOwkJCQlcCisJbHd6CXI0LCAxNihyMSk7CQkJXAorCW10Y3IJcjY7CQkJCVwKKwlsd3oJcjUsIDIwKHIxKTsJCQlcCisJbHd6CXI2LCAyNChyMSk7CQkJXAorCWx3eglyMCwgNTIocjEpOwkJCVwKKwlsd3oJcjcsIDI4KHIxKTsJCQlcCisJbHd6CXI4LCAzMihyMSk7CQkJXAorCW10bHIJcjA7CQkJCVwKKwlsd3oJcjksIDM2KHIxKTsJCQlcCisJbHd6CXIxMCw0MChyMSk7CQkJXAorCWFkZGkJcjEsIHIxLCA0OAorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiBleHRlcm4gdm9pZCBfbWNvdW50KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCAwNGU0YTYyLi41NDUwMjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTM5LDE1ICszOSwxNSBAQAogICogY2h1bmsgb2YgUkFNLgogICovCiAvKgotICogV2UgdXNlIG9uZSBmdWxsIHB0ZSB0YWJsZSB3aXRoIDRLIHBhZ2VzLiBBbmQgd2l0aCAxNksvNjRLIHBhZ2VzIHB0ZQotICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIgYW5kIDUxMk1CIHJlc3AuKSB0aGF0IGJvdGggRklYTUFQCi0gKiBhbmQgUEtNQVAgY2FuIGJlIHBsYWNlZCBpbiBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgMTAyNCBwYWdlcyBmb3IKLSAqIFBLTUFQIGluIGNhc2Ugb2YgMTZLLzY0SyBwYWdlcy4KKyAqIFdlIHVzZSBvbmUgZnVsbCBwdGUgdGFibGUgd2l0aCA0SyBwYWdlcy4gQW5kIHdpdGggMTZLLzY0Sy8yNTZLIHBhZ2VzIHB0ZQorICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIvNTEyTUIvMkdCIHJlc3AuKSwgc28gdGhhdCBib3RoIEZJWE1BUAorICogYW5kIFBLTUFQIGNhbiBiZSBwbGFjZWQgaW4gYSBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgNTEyIHBhZ2VzIGZvciBQS01BUAorICogaW4gY2FzZSBvZiAxNksvNjRLLzI1NksgcGFnZSBzaXplcy4KICAqLwogI2lmZGVmIENPTkZJR19QUENfNEtfUEFHRVMKICNkZWZpbmUgUEtNQVBfT1JERVIJUFRFX1NISUZUCiAjZWxzZQotI2RlZmluZSBQS01BUF9PUkRFUgkxMAorI2RlZmluZSBQS01BUF9PUkRFUgk5CiAjZW5kaWYKICNkZWZpbmUgTEFTVF9QS01BUAkoMSA8PCBQS01BUF9PUkRFUikKICNpZm5kZWYgQ09ORklHX1BQQ180S19QQUdFUwpAQCAtOTksNyArOTksNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKICNlbmRpZgotCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsIGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwlfX3NldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSwgMSk7CiAJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgdmFkZHIpOwogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZjc1YTVmYy4uYjdlMDM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBzaG91bGQgd2UgaGFuZGxlIHRoaXMgdmlhIGxvc3QgaW50ZXJydXB0cyBhbmQgSVBJcwogICogb3Igc2hvdWxkIHdlIG5vdCBjYXJlIGxpa2Ugd2UgZG8gbm93ID8gLS1CZW5ILgogICovCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7CitzdHJ1Y3QgaXJxX2NoaXA7CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQ5NGNkOGIuLjAwMWYyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC02MzIsNiArNjMyLDkgQEAKICAqICAgaW9yZW1hcF9mbGFncyBhbmQgY2Fubm90IGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBvbmUKICAqICAgb2YgdGhlIHByZXZpb3VzIG9uZXMpCiAgKgorICogKiBfX2lvcmVtYXBfY2FsbGVyIGlzIHRoZSBzYW1lIGFzIGFib3ZlIGJ1dCB0YWtlcyBhbiBleHBsaWNpdCBjYWxsZXIKKyAqICAgcmVmZXJlbmNlIHJhdGhlciB0aGFuIHVzaW5nIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQorICoKICAqICogX19pb3VubWFwLCBpcyB0aGUgbG93IGxldmVsIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgaW91bm1hcCBhbmQgY2Fubm90CiAgKiAgIGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBpb3VubWFwKQogICoKQEAgLTY0Niw2ICs2NDksOSBAQAogCiBleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCiBleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcF9hdChwaHlzX2FkZHJfdCBwYSwgdm9pZCAqZWEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggMjVhYWE5Ny4uNjgyMzVmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtOTcsNyArOTcsNyBAQAogCXU2NAlzYXZlZF9ncHI0OwkJLy8gU2F2ZWQgR1BSNCAgICAgICAgICAgICAgICAgICB4MjgteDJGCiAJdTY0CXNhdmVkX2dwcjU7CQkvLyBTYXZlZCBHUFI1ICAgICAgICAgICAgICAgICAgIHgzMC14MzcKIAotCXU4CXJlc2VydmVkNDsJCS8vIFJlc2VydmVkCQkJeDM4LXgzOAorCXU4CWR0bF9lbmFibGVfbWFzazsJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIG1hc2sJeDM4LXgzOAogCXU4CWRvbmF0ZV9kZWRpY2F0ZWRfY3B1OwkvLyBEb25hdGUgZGVkaWNhdGVkIENQVSBjeWNsZXMgIHgzOS14MzkKIAl1OAlmcHJlZ3NfaW5fdXNlOwkJLy8gRlAgcmVncyBpbiB1c2UgICAgICAgICAgICAgICB4M0EteDNBCiAJdTgJcG1jcmVnc19pbl91c2U7CQkvLyBQTUMgcmVncyBpbiB1c2UgICAgICAgICAgICAgIHgzQi14M0IKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENBQ0hFX0xJTkVfNC01IDB4MDE4MCAtIDB4MDI3RiBDb250YWlucyBQTUMgaW50ZXJydXB0IGRhdGEKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQl1MzIJcGFnZV9pbnM7CQkJLy8gQ01PIEhpbnQgLSAjIHBhZ2UgaW5zIGJ5IE9TICB4MDAteDA0Ci0JdTgJcG1jX3NhdmVfYXJlYVsyNTJdOwkvLyBQTUMgaW50ZXJydXB0IEFyZWEgICAgICAgICAgIHgwNC14RkYKKwl1MzIJcGFnZV9pbnM7CQkvLyBDTU8gSGludCAtICMgcGFnZSBpbnMgYnkgT1MgIHgwMC14MDMKKwl1OAlyZXNlcnZlZDhbMTQ4XTsJCS8vIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgeDA0LXg5NworCXZvbGF0aWxlIHU2NCBkdGxfaWR4OwkJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIGhlYWQgaWR4CXg5OC14OUYKKwl1OAlyZXNlcnZlZDlbOTZdOwkJLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICB4QTAteEZGCiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDB4NDAwKSkpOwogCiBleHRlcm4gc3RydWN0IGxwcGFjYSBscHBhY2FbXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDI3NDBjNDQuLjBlZmRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtOTAsNyArOTAsNyBAQAogCXZvaWQJCSgqdGNlX2ZsdXNoKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7CiAKIAl2b2lkIF9faW9tZW0gKgkoKmlvcmVtYXApKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOwogCXZvaWQJCSgqaW91bm1hcCkodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbik7CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMyNyw4ICszMjcsNiBAQAogICovCiAvKiBQcmludCBhIGJvb3QgcHJvZ3Jlc3MgbWVzc2FnZS4gKi8KIHZvaWQgcHBjNjRfYm9vdF9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKLS8qIFByaW50IGEgdGVybWluYXRpb24gbWVzc2FnZSAocHJpbnQgb25seSAtLSBkb2VzIG5vdCBzdG9wIHRoZSBrZXJuZWwpICovCi12b2lkIHBwYzY0X3Rlcm1pbmF0ZV9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGxvZ19lcnJvcihjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtNDR4LmgKaW5kZXggMjdjYzZmZC4uM2M4NjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oCkBAIC04Myw2ICs4Myw4IEBACiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl8xNksKICNlbGlmIChQQUdFX1NISUZUID09IDE2KQogI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfNjRLCisjZWxpZiAoUEFHRV9TSElGVCA9PSAxOCkKKyNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzI1NksKICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIFBBR0VfU0laRSIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NGNmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKy8qCisgKiBGcmVlc2NhbGUgQm9vay1FL0Jvb2stM2UgKElTQSAyLjA2KykgTU1VIHN1cHBvcnQKKyAqLworCisvKiBCb29rLTNlIGRlZmluZWQgcGFnZSBzaXplcyAqLworI2RlZmluZSBCT09LM0VfUEFHRVNaXzFLCTAKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8ySwkxCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNEsJMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhLCTMKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xNksJNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMySwk1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRLCTYKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xMjhLCTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZLCTgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJLCTkKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xTQkxMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJNCTExCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNE0JMTIKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl84TQkxMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2TQkxNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMyTQkxNQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzY0TQkxNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOE0JMTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZNCTE4CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNTEyTQkxOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFHQgkyMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJHQgkyMQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzRHQgkyMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhHQgkyMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2R0IJMjQKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8zMkdCCTI1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRHQgkyNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOEdCCTI3CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMjU2R0IJMjgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJHQgkyOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFUQgkzMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJUQgkzMQorCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfTlYoeCkJKCh4KSAmIDB4MDAwMDBGRkYpCisKKyNkZWZpbmUgTUFTMV9WQUxJRCAJMHg4MDAwMDAwMAorI2RlZmluZSBNQVMxX0lQUk9UCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUFTMV9USUQoeCkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfSU5ECTB4MDAwMDIwMDAKKyNkZWZpbmUgTUFTMV9UUwkJMHgwMDAwMTAwMAorI2RlZmluZSBNQVMxX1RTSVpFKHgpCSgoeCA8PCA3KSAmIDB4MDAwMDBGODApCisKKyNkZWZpbmUgTUFTMl9FUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMyX1gwCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzJfWDEJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTMl9XCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BUzJfSQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVMyX00JCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTMl9HCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BUzJfRQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMyX0VQTl9NQVNLKHNpemUpCQkofjAgPDwgKHNpemUgKyAxMCkpCisjZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCisjZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAorI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCisjZGVmaW5lIE1BUzRfSU5ERAkweDAwMDA4MDAwCisjZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKKyNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAorI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCisjZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0CisjZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAorI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKKyNkZWZpbmUgTUFTNl9JU0laRSh4KQlNQVMxX1RTSVpFKHgpCisjZGVmaW5lIE1BUzZfU0FTCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUFTNl9TUElECU1BUzZfU1BJRDAKKworI2RlZmluZSBNQVM3X1JQTgkweEZGRkZGRkZGCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWlkOworCXVuc2lnbmVkIGludAlhY3RpdmU7CisJdW5zaWduZWQgbG9uZwl2ZHNvX2Jhc2U7Cit9IG1tX2NvbnRleHRfdDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyODViNjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLSNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLS8qCi0gKiBGcmVlc2NhbGUgQm9vay1FIE1NVSBzdXBwb3J0Ci0gKi8KLQotLyogQm9vay1FIGRlZmluZWQgcGFnZSBzaXplcyAqLwotI2RlZmluZSBCT09LRV9QQUdFU1pfMUsJCTAKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRLCQkxCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNksJMgotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRLCTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NksJNAotI2RlZmluZSBCT09LRV9QQUdFU1pfMU0JCTUKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRNCQk2Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNk0JNwotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRNCTgKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1Nk0JOQotI2RlZmluZSBCT09LRV9QQUdFU1pfMUdCCTEwCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl80R0IJMTEKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2R0IJMTIKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzY0R0IJMTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NkdCCTE0Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xVEIJMTUKLQotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkoKHggPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQotI2RlZmluZSBNQVMwX05WKHgpCSgoeCkgJiAweDAwMDAwRkZGKQotCi0jZGVmaW5lIE1BUzFfVkFMSUQgCTB4ODAwMDAwMDAKLSNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQotI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKLQotI2RlZmluZSBNQVMyX0VQTgkweEZGRkZGMDAwCi0jZGVmaW5lIE1BUzJfWDAJCTB4MDAwMDAwNDAKLSNkZWZpbmUgTUFTMl9YMQkJMHgwMDAwMDAyMAotI2RlZmluZSBNQVMyX1cJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTMl9JCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzJfTQkJMHgwMDAwMDAwNAotI2RlZmluZSBNQVMyX0cJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTMl9FCQkweDAwMDAwMDAxCi0jZGVmaW5lIE1BUzJfRVBOX01BU0soc2l6ZSkJCSh+MCA8PCAoMiooc2l6ZSkgKyAxMCkpCi0jZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCi0KLSNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAotI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCi0jZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKLSNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAotI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCi0jZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKLSNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAotI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgotI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCi0KLSNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCi0jZGVmaW5lIE1BUzRfVElERFNFTAkweDAwMEYwMDAwCi0jZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKLSNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAotI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQotCi0jZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAotI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKLSNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQotI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAotCi0jZGVmaW5lIE1BUzdfUlBOCTB4RkZGRkZGRkYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQJaWQ7Ci0JdW5zaWduZWQgaW50CWFjdGl2ZTsKLQl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsKLX0gbW1fY29udGV4dF90OwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfRlNMX0JPT0tFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCA2OGI3NTI2Li45OGMxMDRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTI4NCw4ICsyODQsNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIG51bWJlcl9vZl9wYWdlcyk7CiBleHRlcm4gdm9pZCBkZW1vdGVfc2VnbWVudF80ayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDZlNzYzOTkuLmNiZjE1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKQEAgLTM2LDkgKzM2LDkgQEAKICAqLwogI2RlZmluZSBNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUCUFTTV9DT05TVCgweDAwMDQwMDAwKQogCi0vKiBFbmFibGUgdXNlIG9mIHRsYmlseCBpbnZhbGlkYXRlLWJ5LVBJRCB2YXJpYW50LgorLyogRW5hYmxlIHVzZSBvZiB0bGJpbHggaW52YWxpZGF0ZSBpbnN0cnVjdGlvbnMuCiAgKi8KLSNkZWZpbmUgTU1VX0ZUUl9VU0VfVExCSUxYX1BJRAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCisjZGVmaW5lIE1NVV9GVFJfVVNFX1RMQklMWAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCiAKIC8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIG91dHN0YW5kaW5nCiAgKiBicm9hZGNhc3QgdGxiaXZheCBvciB0bGJzeW5jLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHVzZSBhIHNwaW5sb2NrCkBAIC00Niw2ICs0NiwxMiBAQAogICovCiAjZGVmaW5lIE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTAlBU01fQ09OU1QoMHgwMDEwMDAwMCkKIAorLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGRvZXNuJ3QgaGFuZGxlIHdheSBzZWxlY3Rpb24KKyAqIHByb3Blcmx5IGFuZCBuZWVkcyBTVyB0byB0cmFjayBhbmQgdXBkYXRlIHRoZSBMUlUgc3RhdGUuICBUaGlzCisgKiBpcyBzcGVjaWZpYyB0byBhbiBlcnJhdGEgb24gZTMwMGMyL2MzL2M0IGNsYXNzIHBhcnRzCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVCUFTTV9DT05TVCgweDAwMjAwMDAwKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCkBAIC01Niw2ICs2MiwxMCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhcnRfX19tbXVfZnRyX2ZpeHVwLCBfX3N0b3BfX19tbXVfZnRyX2ZpeHVwOwogCisvKiBNTVUgaW5pdGlhbGl6YXRpb24gKDY0LWJpdCBvbmx5IGZvIG5vdykgKi8KK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAKQEAgLTcxLDkgKzgxLDkgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKIC8qIDQ0eC1zdHlsZSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCiAjICBpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyogRnJlZXNjYWxlIEJvb2stRSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCi0jICBpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRV9NTVUpCisvKiBGcmVlc2NhbGUgQm9vay1FIHNvZnR3YXJlIGxvYWRlZCBUTEIgb3IgQm9vay0zZSAoSVNBIDIuMDYrKSBNTVUgKi8KKyMgIGluY2x1ZGUgPGFzbS9tbXUtYm9vazNlLmg+CiAjZWxpZiBkZWZpbmVkIChDT05GSUdfUFBDXzh4eCkKIC8qIE1vdG9yb2xhL0ZyZWVzY2FsZSA4eHggc29mdHdhcmUgbG9hZGVkIFRMQiAqLwogIyAgaW5jbHVkZSA8YXNtL21tdS04eHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYWI0ZjE5Mi4uYjcwNjM2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJLyogTWFyayB0aGlzIGNvbnRleHQgaGFzIGJlZW4gdXNlZCBvbiB0aGUgbmV3IENQVSAqLwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CiAKIAkvKiAzMi1iaXQga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgUEdESVIgaW4gdGhlIHRocmVhZCBzdHJ1Y3QgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCmluZGV4IDgxYTIzOTMuLjUyZTA0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaApAQCAtMjczLDYgKzI3Myw3IEBACiBleHRlcm4gdm9pZCBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfbWFwX2NvbW1vbl9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIGludCBtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KGludCBwc2NfaWQsIGludCBjbGtkaXYpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtcGM1Mnh4X2dldF94dGFsX2ZyZXEoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfcmVzdGFydChjaGFyICpjbWQpOwogCiAvKiBtcGM1Mnh4X3BpYy5jICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxOTdkNTY5Li4zMmNiZjE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTE5LDEyICsxOSwxNCBAQAogI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogCiAvKgotICogT24gcmVndWxhciBQUEMzMiBwYWdlIHNpemUgaXMgNEsgKGJ1dCB3ZSBzdXBwb3J0IDRLLzE2Sy82NEsgcGFnZXMKKyAqIE9uIHJlZ3VsYXIgUFBDMzIgcGFnZSBzaXplIGlzIDRLIChidXQgd2Ugc3VwcG9ydCA0Sy8xNksvNjRLLzI1NksgcGFnZXMKICAqIG9uIFBQQzQ0eCkuIEZvciBQUEM2NCB3ZSBzdXBwb3J0IGVpdGhlciA0SyBvciA2NEsgc29mdHdhcmUKICAqIHBhZ2Ugc2l6ZS4gV2hlbiB1c2luZyA2NEsgcGFnZXMgaG93ZXZlciwgd2hldGhlciB3ZSBhcmUgcmVhbGx5IHN1cHBvcnRpbmcKICAqIDY0SyBwYWdlcyBpbiBIVyBvciBub3QgaXMgaXJyZWxldmFudCB0byB0aG9zZSBkZWZpbml0aW9ucy4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDXzI1NktfUEFHRVMpCisjZGVmaW5lIFBBR0VfU0hJRlQJCTE4CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKQogI2RlZmluZSBQQUdFX1NISUZUCQkxNgogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDXzE2S19QQUdFUykKICNkZWZpbmUgUEFHRV9TSElGVAkJMTQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCmluZGV4IDE0NThkOTUuLmEwZTNmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaApAQCAtMTksNyArMTksMTEgQEAKICNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAkwCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfMjU2S19QQUdFUworI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSBQVEVfVF9MT0cyIC0gMikJLyogMS80IG9mIGEgcGFnZSAqLworI2Vsc2UKICNkZWZpbmUgUFRFX1NISUZUCShQQUdFX1NISUZUIC0gUFRFX1RfTE9HMikJLyogZnVsbCBwYWdlICovCisjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiY2E0ZTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFXzRLX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSAotLyoKLSAqIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAgVGhlIFBURSBsZXZlbCBtdXN0IHVzZSBhIDY0YiByZWNvcmQKLSAqIGZvciBlYWNoIHBhZ2UgdGFibGUgZW50cnkuICBUaGUgUE1EIGFuZCBQR0QgbGV2ZWwgdXNlIGEgMzJiIHJlY29yZCBmb3IKLSAqIGVhY2ggZW50cnkgYnkgYXNzdW1pbmcgdGhhdCBlYWNoIGVudHJ5IGlzIHBhZ2UgYWxpZ25lZC4KLSAqLwotI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgOQotI2RlZmluZSBQTURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQVURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgOQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHB0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBVRF9UQUJMRV9TSVpFCShzaXplb2YocHVkX3QpIDw8IFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUFVECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLwotI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQTURfU0hJRlQKLQotLyogUFVEX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQVURfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVURfU0laRQkoMVVMIDw8IFBVRF9TSElGVCkKLSNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIGZvdXJ0aC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJKFBVRF9TSElGVCArIFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKLQotLyogUFRFIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCi0jZGVmaW5lIF9QQUdFX1NFQ09OREFSWSAweDgwMDAgLyogc29mdHdhcmU6IEhQVEUgaXMgaW4gc2Vjb25kYXJ5IGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0dST1VQX0lYICAweDcwMDAgLyogc29mdHdhcmU6IEhQVEUgaW5kZXggd2l0aGluIGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0ZfU0VDT05EICBfUEFHRV9TRUNPTkRBUlkKLSNkZWZpbmUgX1BBR0VfRl9HSVggICAgIF9QQUdFX0dST1VQX0lYCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgxMDAwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLS8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgXAotCQkJIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYKQotCi0vKiBUaGVyZSBpcyBubyA0SyBQRk4gaGFjayBvbiA0SyBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV80S19QRk4JMAotCi0vKiBQQUdFX01BU0sgZ2l2ZXMgdGhlIHJpZ2h0IGFuc3dlciBiZWxvdywgYnV0IG9ubHkgYnkgYWNjaWRlbnQgKi8KLS8qIEl0IHNob3VsZCBiZSBwcmVzZXJ2aW5nIHRoZSBoaWdoIDQ4IGJpdHMgYW5kIHRoZW4gc3BlY2lmaWNhbGx5ICovCi0vKiBwcmVzZXJ2aW5nIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0hQVEVGTEFHUyB8IF9QQUdFX1NQRUNJQUwpCi0KLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCi0jZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KLSNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLwotI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKLQotLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCi0jZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQotCi0jaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKLSNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCi0jZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCi0jZWxzZQotI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQotI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKLSNlbmRpZgotI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKLQlkbyB7CQkJCQkJCSAgICAgICAgIFwKLQkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAotCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKQotCi0jaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKLSNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKLSNlbHNlCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SwotI2VuZGlmCi0KLS8qCi0gKiA0LWxldmVsIHBhZ2UgdGFibGVzIHJlbGF0ZWQgYml0cwotICovCi0KLSNkZWZpbmUgcGdkX25vbmUocGdkKQkJKCFwZ2RfdmFsKHBnZCkpCi0jZGVmaW5lIHBnZF9iYWQocGdkKQkJKHBnZF92YWwocGdkKSA9PSAwKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMCkKLSNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkocGdkX3ZhbCgqKHBnZHApKSA9IDApCi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkJKHBnZF92YWwocGdkKSAmIH5QR0RfTUFTS0VEX0JJVFMpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXZpcnRfdG9fcGFnZShwZ2RfcGFnZV92YWRkcihwZ2QpKQotCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkcCwgYWRkcikJXAotICAoKChwdWRfdCAqKSBwZ2RfcGFnZV92YWRkcigqKHBnZHApKSkgKyBcCi0gICAgKCgoYWRkcikgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKSkpCi0KLSNkZWZpbmUgcHVkX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHVkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdWRfdmFsKGUpKQotCi0jZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLCAocHJvdCkpCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKaW5kZXggODIwYjVmMC4uYmE0NWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCkBAIC0xOSw1NSArMTksNiBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgotICogVGhlIFBvd2VyUEMgTU1VIHVzZXMgYSBoYXNoIHRhYmxlIGNvbnRhaW5pbmcgUFRFcywgdG9nZXRoZXIgd2l0aAotICogYSBzZXQgb2YgMTYgc2VnbWVudCByZWdpc3RlcnMgKG9uIDMyLWJpdCBpbXBsZW1lbnRhdGlvbnMpLCB0byBkZWZpbmUKLSAqIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KLSAqCi0gKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5Ci0gKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKLSAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQotICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2h0YWJsZS5TCi0gKiAocHJvY2VkdXJlIGhhc2hfcGFnZSkgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgcHRlcyBmcm9tIHRoZQotICogdHJlZSBhbmQgcHV0dGluZyB0aGVtIGludG8gdGhlIGhhc2ggdGFibGUgd2hlbiBuZWNlc3NhcnksIGFuZAotICogdXBkYXRpbmcgdGhlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBiaXRzIGluIHRoZSBwYWdlIHRhYmxlIHRyZWUuCi0gKi8KLQotLyoKLSAqIFRoZSBQb3dlclBDIE1QQzh4eCB1c2VzIGEgVExCIHdpdGggaGFyZHdhcmUgYXNzaXN0ZWQsIHNvZnR3YXJlIHRhYmxld2Fsay4KLSAqIFdlIGFsc28gdXNlIHRoZSB0d28gbGV2ZWwgdGFibGVzLCBidXQgd2UgY2FuIHB1dCB0aGUgcmVhbCBiaXRzIGluIHRoZW0KLSAqIG5lZWRlZCBmb3IgdGhlIFRMQiBhbmQgdGFibGV3YWxrLiAgVGhlc2UgZGVmaW5pdGlvbnMgcmVxdWlyZSBNeF9DVFIuUFBNID0gMCwKLSAqIE14X0NUUi5QUENTID0gMCwgYW5kIE1EX0NUUi5UV0FNID0gMS4gIFRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgaGFzCi0gKiBhZGRpdGlvbmFsIHBhZ2UgcHJvdGVjdGlvbiAod2hlbiBNeF9DVFIuUFBDUyA9IDEpIHRoYXQgYWxsb3dzIFRMQiBoaXQKLSAqIGJhc2VkIHVwb24gdXNlci9zdXBlciBhY2Nlc3MuICBUaGUgVExCIGRvZXMgbm90IGhhdmUgYWNjZXNzZWQgbm9yIHdyaXRlCi0gKiBwcm90ZWN0LiAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIFRMQiBnZXQgbG9hZGVkIHdpdGggYW4gZW50cnkgaXQgaXMKLSAqIGFjY2Vzc2VkLCBhbmQgb3ZlcmxvYWQgdGhlIGNoYW5nZWQgYml0IGZvciB3cml0ZSBwcm90ZWN0LiAgV2UgdXNlCi0gKiB0d28gYml0cyBpbiB0aGUgc29mdHdhcmUgcHRlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHNldCB0byB6ZXJvIGluCi0gKiB0aGUgVExCIGVudHJ5ICgyNCBhbmQgMjUpIGZvciB0aGVzZSBpbmRpY2F0b3JzLiAgQWx0aG91Z2ggdGhlIGxldmVsIDEKLSAqIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGd1YXJkZWQgYW5kIHdyaXRldGhyb3VnaC9jb3B5YmFjayBiaXRzLCB3ZSBjYW4KLSAqIHNldCB0aGVzZSBhdCB0aGUgcGFnZSBsZXZlbCBzaW5jZSB0aGV5IGdldCBjb3BpZWQgZnJvbSB0aGUgTXhfVFdDCi0gKiByZWdpc3RlciB3aGVuIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLiAgV2Ugd2lsbCB1c2UgYml0IDI3IGZvciBndWFyZCwgc2luY2UKLSAqIHRoYXQgaXMgd2hlcmUgaXQgZXhpc3RzIGluIHRoZSBNRF9UV0MsIGFuZCBiaXQgMjYgZm9yIHdyaXRldGhyb3VnaC4KLSAqIFRoZXNlIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIHRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgYXQgVExCIGxvYWQgdGltZSwgYW5kCi0gKiBjb3BpZWQgdG8gdGhlIE1EX1RXQyBiZWZvcmUgaXQgZ2V0cyBsb2FkZWQuCi0gKiBMYXJnZSBwYWdlIHNpemVzIGFkZGVkLiAgV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHNpemVzLCA0SyBhbmQgOE0uCi0gKiBUaGlzIGFsc28gYWxsb3dzIGEgVExCIGhhbmRlciBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBjYW4gZGlyZWN0bHkKLSAqIGxvYWQgdGhlIFBNRCBpbnRvIE1EX1RXQy4gIFRoZSA4TSBwYWdlcyBhcmUgb25seSB1c2VkIGZvciBrZXJuZWwKLSAqIG1hcHBpbmcgb2Ygd2VsbCBrbm93biBhcmVhcy4gIFRoZSBQTUQgKFBHRCkgZW50cmllcyBjb250YWluIGNvbnRyb2wKLSAqIGZsYWdzIGluIGFkZGl0aW9uIHRvIHRoZSBhZGRyZXNzLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUKLSAqIHNvZnR3YXJlIG5vIGxvbmdlciBhc3N1bWVzIHRoZXNlIGFyZSBvbmx5IHBvaW50ZXJzLgotICovCi0KLS8qCi0gKiBBdCBwcmVzZW50LCBhbGwgUG93ZXJQQyA0MDAtY2xhc3MgcHJvY2Vzc29ycyBzaGFyZSBhIHNpbWlsYXIgVExCCi0gKiBhcmNoaXRlY3R1cmUuIFRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBzaWRlcyBzaGFyZSBhIHVuaWZpZWQsCi0gKiA2NC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIGlzIG1haW50YWluZWQgdG90YWxseSB1bmRlcgotICogc29mdHdhcmUgY29udHJvbC4gSW4gYWRkaXRpb24sIHRoZSBpbnN0cnVjdGlvbiBzaWRlIGhhcyBhCi0gKiBoYXJkd2FyZS1tYW5hZ2VkLCA0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKLSAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKLSAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkgKHNlZSAibW11LmgiIGZvciBkZWZpbml0aW9ucykuCi0gKi8KLQotLyoKICAqIFRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IFBURXMgYXJlIDMyLWJpdHMgYW5kIHdlIGhhdmUgYSAxLXBhZ2UKICAqIDEwMjQtZW50cnkgcGdkaXIgcG9pbnRpbmcgdG8gMS1wYWdlIDEwMjQtZW50cnkgUFRFIHBhZ2VzLiAgLS0gcGF1bHVzCiAgKgpAQCAtMTM1LDQwOSArODYsMjIgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KQotCi0vKiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgZ290Y2hhcyBoZXJlLiAgVGhlIDQweCBoYXJkd2FyZSBUTEJMTwotICAgZmllbGQgbG9va3MgbGlrZSB0aGlzOgotCi0gICAwICAxICAyICAzICA0ICAuLi4gMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKLSAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBFWCBXUiBaU0VMLi4uLi4uLiAgVyAgSSAgTSAgRwotCi0gICBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKLQotICAgLSBiaXRzIDIwIGFuZCAyMSBtdXN0IGJlIGNsZWFyZWQsIGJlY2F1c2Ugd2UgdXNlIDRrIHBhZ2VzICg0MHggY2FuCi0gICAgIHN1cHBvcnQgZG93biB0byAxayBwYWdlcyksIHRoaXMgaXMgZG9uZSBpbiB0aGUgVExCTWlzcyBleGNlcHRpb24KLSAgICAgaGFuZGxlci4KLSAgIC0gV2UgdXNlIG9ubHkgem9uZXMgMCAoZm9yIGtlcm5lbCBwYWdlcykgYW5kIDEgKGZvciB1c2VyIHBhZ2VzKQotICAgICBvZiB0aGUgMTYgYXZhaWxhYmxlLiAgQml0IDI0LTI2IG9mIHRoZSBUTEIgYXJlIGNsZWFyZWQgaW4gdGhlIFRMQgotICAgICBtaXNzIGhhbmRsZXIuICBCaXQgMjcgaXMgUEFHRV9VU0VSLCB0aHVzIHNlbGVjdGluZyB0aGUgY29ycmVjdAotICAgICB6b25lLgotICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHR3byBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQotICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDMwIGJpdHMuICBCZWNhdXNlIDQweCBkb2Vzbid0IHN1cHBvcnQgU01QCi0gICAgIGFueXdheSwgTSBpcyBpcnJlbGV2YW50IHNvIHdlIGJvcnJvdyBpdCBmb3IgUEFHRV9QUkVTRU5ULiAgQml0IDMwCi0gICAgIGlzIGNsZWFyZWQgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgYmVmb3JlIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLgotICAgLSBBbGwgb3RoZXIgYml0cyBvZiB0aGUgUFRFIGFyZSBsb2FkZWQgaW50byBUTEJMTyB3aXRob3V0Ci0gICAgIG1vZGlmaWNhdGlvbiwgbGVhdmluZyB1cyBvbmx5IHRoZSBiaXRzIDIwLCAyMSwgMjQsIDI1LCAyNiwgMzAgZm9yCi0gICAgIHNvZnR3YXJlIFBURSBiaXRzLiAgV2UgYWN0dWFsbHkgdXNlIHVzZSBiaXRzIDIxLCAyNCwgMjUsIGFuZAotICAgICAzMCByZXNwZWN0aXZlbHkgZm9yIHRoZSBzb2Z0d2FyZSBiaXRzOiBBQ0NFU1NFRCwgRElSVFksIFJXLCBhbmQKLSAgICAgUFJFU0VOVC4KLSovCi0KLS8qIERlZmluaXRpb25zIGZvciA0MHggZW1iZWRkZWQgY2hpcHMuICovCi0jZGVmaW5lCV9QQUdFX0dVQVJERUQJMHgwMDEJLyogRzogcGFnZSBpcyBndWFyZGVkIGZyb20gcHJlZmV0Y2ggKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMQkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDIJLyogc29mdHdhcmU6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCi0jZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KLSNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KLSNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgyMDAJLyogaGFyZHdhcmU6IEVYIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJLyogc29mdHdhcmU6IFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDQwMAkvKiBQTUQgcG9pbnRzIHRvIHBhZ2Ugb2YgUFRFcyAqLwotI2RlZmluZSBfUE1EX0JBRAkweDgwMgotI2RlZmluZSBfUE1EX1NJWkUJMHgwZTAJLyogc2l6ZSBmaWVsZCwgIT0gMCBmb3IgbGFyZ2UtcGFnZSBQTUQgZW50cnkgKi8KLSNkZWZpbmUgX1BNRF9TSVpFXzRNCTB4MGMwCi0jZGVmaW5lIF9QTURfU0laRV8xNk0JMHgwZTAKLSNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWR2YWwpCSgxMDI0IDw8ICgoKHBtZHZhbCkgJiBfUE1EX1NJWkUpID4+IDQpKQotCi0vKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDQweCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQorI2luY2x1ZGUgPGFzbS9wdGUtNDB4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR180NHgpCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIFBQQzQ0MAotICoKLSAqIEJlY2F1c2Ugb2YgdGhlIDMgd29yZCBUTEIgZW50cmllcyB0byBzdXBwb3J0IDM2LWJpdCBhZGRyZXNzaW5nLAotICogdGhlIGF0dHJpYnV0ZSBhcmUgZGlmZmljdWx0IHRvIG1hcCBpbiBzdWNoIGEgZmFzaGlvbiB0aGF0IHRoZXkKLSAqIGFyZSBlYXNpbHkgbG9hZGVkIGR1cmluZyBleGNlcHRpb24gcHJvY2Vzc2luZy4gIEkgZGVjaWRlZCB0bwotICogb3JnYW5pemUgdGhlIGVudHJ5IHNvIHRoZSBFUlBOIGlzIHRoZSBvbmx5IHBvcnRpb24gaW4gdGhlCi0gKiB1cHBlciB3b3JkIG9mIHRoZSBQVEUgYW5kIHRoZSBhdHRyaWJ1dGUgYml0cyBiZWxvdyBhcmUgcGFja2VkCi0gKiBpbiBhcyBzZW5zaWJseSBhcyB0aGV5IGNhbiBiZSBpbiB0aGUgYXJlYSBiZWxvdyBhIDRLQiBwYWdlIHNpemUKLSAqIG9yaWVudGVkIFJQTi4gIFRoaXMgYXQgbGVhc3QgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoZSBSUE4gYW5kCi0gKiBFUlBOIGZpZWxkcyBpbiB0aGUgVExCLiAtTWF0dAotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKLSAqIGxlc3MgdGhhbiA0S0IuCi0gKgotICoKLSAqIFBQQyA0NDAgY29yZSBoYXMgZm9sbG93aW5nIFRMQiBhdHRyaWJ1dGUgZmllbGRzOwotICoKLSAqICAgVExCMToKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLSAgLSAgLSAgLSAgLSAgLSBFUlBOLi4uLi4uLgotICoKLSAqICAgVExCMjoKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIC0gIC0gIC0gIC0gIC0gICAgLSBVMCBVMSBVMiBVMyBXICBJICBNICBHICBFICAgLSBVWCBVVyBVUiBTWCBTVyBTUgotICoKLSAqIE5ld2VyIDQ0MCBjb3JlcyAoNDQweDYgYXMgdXNlZCBvbiBBTUNDIDQ2MEVYLzQ2MEdUKSBoYXZlIGFkZGl0aW9uYWwKLSAqIFRMQjIgc3RvcmFnZSBhdHRpYnV0ZSBmaWVsZHMuIFRob3NlIGFyZToKLSAqCi0gKiAgIFRMQjI6Ci0gKiAgIDAuLi4xMCAgICAxMSAgIDEyICAgMTMgICAxNCAgIDE1ICAgMTYuLi4zMQotICogICBubyBjaGFuZ2UgV0wxICBJTDFJIElMMUQgSUwySSBJTDJEIG5vIGNoYW5nZQotICoKLSAqIFRoZXJlIGFyZSBzb21lIGNvbnN0cmFpbnMgYW5kIG9wdGlvbnMsIHRvIGRlY2lkZSBtYXBwaW5nIHNvZnR3YXJlIGJpdHMKLSAqIGludG8gVExCIGVudHJ5LgotICoKLSAqICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBDQUNIRSBDT0hFUkVOVCBiaXQgKE0pIGhhcyBubyBlZmZlY3Qgb24gb3JpZ2luYWwgUFBDNDQwIGNvcmVzLAotICogICAgIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IFNNUC4gSG93ZXZlciwgc29tZSBsYXRlciA0NjAgdmFyaWFudHMKLSAqICAgICBoYXZlIC1zb21lLSBmb3JtIG9mIFNNUCBzdXBwb3J0IGFuZCBzbyBJIGtlZXAgdGhlIGJpdCB0aGVyZSBmb3IKLSAqICAgICBmdXR1cmUgdXNlCi0gKgotICogV2l0aCB0aGUgUFBDIDQ0eCBMaW51eCBpbXBsZW1lbnRhdGlvbiwgdGhlIDAtMTF0aCBMU0JzIG9mIHRoZSBQVEUgYXJlIHVzZWQKLSAqIGZvciBtZW1vcnkgcHJvdGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyAoc2VlIFBURSBzdHJ1Y3R1cmUgaW4KLSAqIGluY2x1ZGUvYXNtLXBwYy9tbXUuaCkuICBUaGUgX1BBR0VfWFhYIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBtYXAgdG8gdGhlCi0gKiBhYm92ZSBiaXRzLiAgTm90ZSB0aGF0IHRoZSBiaXQgdmFsdWVzIGFyZSBDUFUgc3BlY2lmaWMsIG5vdCBhcmNoaXRlY3R1cmUKLSAqIHNwZWNpZmljLgotICoKLSAqIFRoZSBrZXJuZWwgUFRFIGVudHJ5IGhvbGRzIGFuIGFyY2gtZGVwZW5kZW50IHN3cF9lbnRyeSBzdHJ1Y3R1cmUgdW5kZXIKLSAqIGNlcnRhaW4gc2l0dWF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGluIHN1Y2ggc2l0dWF0aW9ucyBzb21lIHBvcnRpb24gb2YKLSAqIHRoZSBQVEUgYml0cyBhcmUgdXNlZCBhcyBhIHN3cF9lbnRyeS4gSW4gdGhlIFBQQyBpbXBsZW1lbnRhdGlvbiwgdGhlCi0gKiAzLTI0dGggTFNCIGFyZSBzaGFyZWQgd2l0aCBzd3BfZW50cnksIGhvd2V2ZXIgdGhlIDAtMm5kIHRocmVlIExTQiBzdGlsbAotICogaG9sZCBwcm90ZWN0aW9uIHZhbHVlcy4gVGhhdCBtZWFucyB0aGUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGFyZQotICogcmVzZXJ2ZWQgZm9yIGJvdGggUFRFIGFuZCBTV0FQIGVudHJ5IGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IHRocmVlCi0gKiBMU0JzLgotICoKLSAqIFRoZXJlIGFyZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXZhaWxhYmxlIGZvciBTV0FQIGVudHJ5OgotICoJX1BBR0VfUFJFU0VOVAotICoJX1BBR0VfRklMRQotICoJX1BBR0VfSEFTSFBURSAoaWYgSFcgaGFzKQotICoKLSAqIFNvIHRob3NlIHRocmVlIGJpdHMgaGF2ZSB0byBiZSBpbnNpZGUgb2YgMC0ybmQgTFNCIG9mIFBURS4KLSAqCi0gKi8KLQotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAwMDAyMDAJCS8qIEg6IE0gYml0ICovCi0jZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLwotCi0vKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KKyNpbmNsdWRlIDxhc20vcHRlLTQ0eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyoKLSAgIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMzoKLQotICAgMzIgMzMgMzQgMzUgMzYgIC4uLiA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MwotICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBVMCBVMSBVMiBVMyBVWCBTWCBVVyBTVyBVUiBTUgotCi0gICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotCi0gICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIEZTTCBCb29rLUUgQ29yZXMgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAxCS8qIFM6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMgkvKiBTOiBVc2VyIHBhZ2UgKG1hcHMgdG8gVVIpICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDQJLyogUzogV3JpdGUgcGVybWlzc2lvbiAoU1cpICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDgJLyogUzogUGFnZSBkaXJ0eSAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMjAJLyogUzogUGFnZSByZWZlcmVuY2VkICovCi0KLSNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwNDAJLyogSDogRSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMDgwCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLwotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLwotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmZmZmZmMDAwMFVMTAotI2VuZGlmCi0KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKLSNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLQorI2luY2x1ZGUgPGFzbS9wdGUtZnNsLWJvb2tlLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR184eHgpCi0vKiBEZWZpbml0aW9ucyBmb3IgOHh4IGVtYmVkZGVkIGNoaXBzLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMQkvKiBQYWdlIGlzIHZhbGlkICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCi0KLS8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCi0gKiBpbnRvIHRoZSBUTEIuCi0gKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgwCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KLQotLyogU2V0dGluZyBhbnkgYml0cyBpbiB0aGUgbmliYmxlIHdpdGggdGhlIGZvbGxvdyB0d28gY29udHJvbHMgd2lsbAotICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCi0gKiBhcmUgYWx3YXlzIHplcm8uCi0gKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAxMDAJLyogaC93IHdyaXRlIGVuYWJsZTogbmV2ZXIgc2V0IGluIExpbnV4IFBURSAqLwotI2RlZmluZSBfUEFHRV9VU0VSCTB4MDgwMAkvKiBPbmUgb2YgdGhlIFBQIGJpdHMsIHRoZSBvdGhlciBpcyBVU0VSJn5SVyAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKLSNkZWZpbmUgX1BNRF9CQUQJMHgwZmYwCi0jZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYwotI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCi0KLSNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKLQotLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA4eHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCi0jZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCi0KKyNpbmNsdWRlIDxhc20vcHRlLTh4eC5oPgogI2Vsc2UgLyogQ09ORklHXzZ4eCAqLwotLyogRGVmaW5pdGlvbnMgZm9yIDYweCwgNzQwLzc1MCwgZXRjLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCS8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDAyCS8qIGhhc2hfcGFnZSBoYXMgbWFkZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA0CS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAkvKiB1c2VybW9kZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDA4CS8qIEc6IHByb2hpYml0IHNwZWN1bGF0aXZlIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAxMAkvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAyMAkvKiBJOiBjYWNoZSBpbmhpYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDA0MAkvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwCS8qIEM6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCi0jZWxzZQotI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoMzIuaD4KICNlbmRpZgogCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotCi0jZW5kaWYKLQotLyoKLSAqIFNvbWUgYml0cyBhcmUgb25seSB1c2VkIG9uIHNvbWUgY3B1IGZhbWlsaWVzLi4uCi0gKi8KLSNpZm5kZWYgX1BBR0VfSEFTSFBURQotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUFRFX05PTkVfTUFTSwotI2RlZmluZSBfUFRFX05PTkVfTUFTSyAwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfU0hBUkVECi0jZGVmaW5lIF9QQUdFX1NIQVJFRAkwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfSFdXUklURQotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9IV0VYRUMKLSNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9FWEVDCi0jZGVmaW5lIF9QQUdFX0VYRUMJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0VORElBTgotI2RlZmluZSBfUEFHRV9FTkRJQU4JMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0NPSEVSRU5UCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCi0jaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAotI2VuZGlmCi0jaWZuZGVmIF9QTURfU0laRQotI2RlZmluZSBfUE1EX1NJWkUJMAotI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCi0jZW5kaWYKLQotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IFwKLQkJCSBfUEFHRV9TUEVDSUFMKQotCi0KLSNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAotCQkJIF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX0VORElBTiB8IFwKLQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCi0JCQkgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQykKLQotLyoKLSAqIFdlIGRlZmluZSAyIHNldHMgb2YgYmFzZSBwcm90IGJpdHMsIG9uZSBmb3IgYmFzaWMgcGFnZXMgKGllLAotICogY2FjaGVhYmxlIGtlcm5lbCBhbmQgdXNlciBwYWdlcykgYW5kIG9uZSBmb3Igbm9uIGNhY2hlYWJsZQotICogcGFnZXMuIFdlIGFsd2F5cyBzZXQgX1BBR0VfQ09IRVJFTlQgd2hlbiBTTVAgaXMgZW5hYmxlZCBvcgotICogdGhlIHByb2Nlc3NvciBtaWdodCBuZWVkIGl0IGZvciBETUEgY29oZXJlbmN5LgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKLSNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCi0jZWxzZQotI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCi0jZW5kaWYKLSNkZWZpbmUgX1BBR0VfQkFTRV9OQwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTk9fQ0FDSEUpCi0KLSNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKQotI2RlZmluZSBfUEFHRV9LRVJORUwJKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUkVOQUJMRSkKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX05DCShfUEFHRV9CQVNFX05DIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfV1JFTkFCTEUpCi0KLSNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKLS8qIE9uIHN0YW5kYXJkIFBQQyBNTVUsIG5vIHVzZXIgYWNjZXNzIGltcGxpZXMga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzLAotICogc28gdG8gd3JpdGUtcHJvdGVjdCBrZXJuZWwgbWVtb3J5IHdlIG11c3QgdHVybiBvbiB1c2VyIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9VU0VSKQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCShfUEFHRV9CQVNFIHwgX1BBR0VfU0hBUkVEKQotI2VuZGlmCi0KLSNkZWZpbmUgX1BBR0VfSU8JKF9QQUdFX0tFUk5FTF9OQyB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIF9QQUdFX1JBTQkoX1BBR0VfS0VSTkVMIHwgX1BBR0VfSFdFWEVDKQotCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCi0JZGVmaW5lZChDT05GSUdfS1BST0JFUykKLS8qIFdlIHdhbnQgdGhlIGRlYnVnZ2VycyB0byBiZSBhYmxlIHRvIHNldCBicmVha3BvaW50cyBhbnl3aGVyZSwgc28KLSAqIGRvbid0IHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0ICovCi0jZGVmaW5lIF9QQUdFX1JBTV9URVhUCV9QQUdFX1JBTQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJKF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0hXRVhFQykKLSNlbmRpZgotCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9CQVNFKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoX1BBR0VfUkFNKQotI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCV9fcGdwcm90KF9QQUdFX0lPKQotCi0vKgotICogVGhlIFBvd2VyUEMgY2FuIG9ubHkgZG8gZXhlY3V0ZSBwcm90ZWN0aW9uIG9uIGEgc2VnbWVudCAoMjU2TUIpIGJhc2lzLAotICogbm90IG9uIGEgcGFnZSBiYXNpcy4gIFNvIHdlIGNvbnNpZGVyIGV4ZWN1dGUgcGVybWlzc2lvbiB0aGUgc2FtZSBhcyByZWFkLgotICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4KLSAqIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCi0gKi8KLSNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWV9YCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRF9YCi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisvKiBBbmQgaGVyZSB3ZSBpbmNsdWRlIGNvbW1vbiBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBNYWtlIHN1cmUgd2UgZ2V0IGEgbGluayBlcnJvciBpZiBQTURfUEFHRV9TSVpFIGlzIGV2ZXIgY2FsbGVkIG9uIGEKLSAqIGtlcm5lbCB3aXRob3V0IGxhcmdlIHBhZ2UgUE1EIHN1cHBvcnQgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUodm9pZCk7CiAKLS8qCi0gKiBDb252ZXJzaW9ucyBiZXR3ZWVuIFBURSB2YWx1ZXMgYW5kIHBhZ2UgZnJhbWUgbnVtYmVycy4KLSAqLwotCi0vKiBpbiBzb21lIGNhc2Ugd2Ugd2FudCB0byBhZGRpdGlvbmFseSBhZGp1c3Qgd2hlcmUgdGhlIHBmbiBpcyBpbiB0aGUgcHRlIHRvCi0gKiBhbGxvdyByb29tIGZvciBtb3JlIGZsYWdzICovCi0jaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCi0jZGVmaW5lIFBGTl9TSElGVF9PRkZTRVQJKFBBR0VfU0hJRlQgKyA4KQotI2Vsc2UKLSNkZWZpbmUgUEZOX1NISUZUX09GRlNFVAkoUEFHRV9TSElGVCkKLSNlbmRpZgotCi0jZGVmaW5lIHB0ZV9wZm4oeCkJCShwdGVfdmFsKHgpID4+IFBGTl9TSElGVF9PRkZTRVQpCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQotCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHB0ZV9iYXNpY190KShwZm4pIDw8IFBGTl9TSElGVF9PRkZTRVQpIHxcCi0JCQkJCXBncHJvdF92YWwocHJvdCkpCi0jZGVmaW5lIG1rX3B0ZShwYWdlLCBwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBwcm90KQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQogI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApIFwKIAlkbyB7IHB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIDApOyB9IHdoaWxlICgwKQogCkBAIC01NDYsNDMgKzExMCw2IEBACiAjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAmIF9QTURfUFJFU0VOVF9NQVNLKQogI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCWRvIHsgcG1kX3ZhbCgqKHBtZHApKSA9IDA7IH0gd2hpbGUgKDApCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKLXsKLQlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKLQlyZXR1cm4gcHRlOwotfQotCiAvKgogICogV2hlbiBmbHVzaGluZyB0aGUgdGxiIGVudHJ5IGZvciBhIHBhZ2UsIHdlIGFsc28gbmVlZCB0byBmbHVzaCB0aGUgaGFzaAogICogdGFibGUgZW50cnkuICBmbHVzaF9oYXNoX3BhZ2VzIGlzIGFzc2VtYmxlciAoZm9yIHNwZWVkKSBpbiBoYXNodGFibGUuUy4KQEAgLTU5OSwxMSArMTI2LDE5IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIC8qCi0gKiBBdG9taWMgUFRFIHVwZGF0ZXMuCisgKiBQVEUgdXBkYXRlcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gZXhpc3RpbmcKKyAqIHZhbGlkIFBURSBpcyB1cGRhdGVkLiBUaGlzIGRvZXMgLW5vdC0gaW5jbHVkZSBzZXRfcHRlX2F0KCkKKyAqIHdoaWNoIG5vd2FkYXlzIG9ubHkgc2V0cyBhIG5ldyBQVEUuCiAgKgotICogcHRlX3VwZGF0ZSBjbGVhcnMgYW5kIHNldHMgYml0IGF0b21pY2FsbHksIGFuZCByZXR1cm5zCi0gKiB0aGUgb2xkIHB0ZSB2YWx1ZS4gIEluIHRoZSA2NC1iaXQgUFRFIGNhc2Ugd2UgbG9jayBhcm91bmQgdGhlCi0gKiBsb3cgUFRFIHdvcmQgc2luY2Ugd2UgZXhwZWN0IEFMTCBmbGFnIGJpdHMgdG8gYmUgdGhlcmUKKyAqIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBNTVUsIHdlIG1heSBuZWVkIHRvIHVzZSBhdG9taWMgdXBkYXRlcworICogYW5kIHRoZSBQVEUgbWF5IGJlIGVpdGhlciAzMiBvciA2NCBiaXQgd2lkZS4gSW4gdGhlIGxhdGVyIGNhc2UsCisgKiB3aGVuIHVzaW5nIGF0b21pYyB1cGRhdGVzLCBvbmx5IHRoZSBsb3cgcGFydCBvZiB0aGUgUFRFIGlzCisgKiBhY2Nlc3NlZCBhdG9taWNhbGx5LgorICoKKyAqIEluIGFkZGl0aW9uLCBvbiA0NHgsIHdlIGFsc28gbWFpbnRhaW4gYSBnbG9iYWwgZmxhZyBpbmRpY2F0aW5nCisgKiB0aGF0IGFuIGV4ZWN1dGFibGUgdXNlciBtYXBwaW5nIHdhcyBtb2RpZmllZCwgd2hpY2ggaXMgbmVlZGVkCisgKiB0byBwcm9wZXJseSBmbHVzaCB0aGUgdmlydHVhbGx5IHRhZ2dlZCBpbnN0cnVjdGlvbiBjYWNoZSBvZgorICogdGhvc2UgaW1wbGVtZW50YXRpb25zLgogICovCiAjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdXBkYXRlKHB0ZV90ICpwLApAQCAtNjY4LDQ0ICsyMDMsNiBAQAogI2VuZGlmIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KIAogLyoKLSAqIHNldF9wdGUgc3RvcmVzIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCi0gKiBPbiBtYWNoaW5lcyB3aGljaCB1c2UgYW4gTU1VIGhhc2ggdGFibGUgd2UgYXZvaWQgY2hhbmdpbmcgdGhlCi0gKiBfUEFHRV9IQVNIUFRFIGJpdC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotI2lmIChfUEFHRV9IQVNIUFRFICE9IDApICYmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKLQlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLSNpZiBfUEFHRV9IQVNIUFRFICE9IDAKLQlpZiAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQlmbHVzaF9oYXNoX2VudHJ5KG1tLCBwdGVwLCBhZGRyKTsKLSNlbmRpZgotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JCXN0dyVVMCVYMCAlMiwlMFxuXAotCQllaWVpb1xuXAotCQlzdHclVTAlWDAgJUwyLCUxIgotCTogIj1tIiAoKnB0ZXApLCAiPW0iICgqKCh1bnNpZ25lZCBjaGFyICopcHRlcCs0KSkKLQk6ICJyIiAocHRlKSA6ICJtZW1vcnkiKTsKLSNlbHNlCi0JKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQkgICAgICB8IChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSkpOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKQotCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKLSNlbmRpZgotCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLX0KLQotLyoKICAqIDIuNiBjYWxscyB0aGlzIHdpdGhvdXQgZmx1c2hpbmcgdGhlIFRMQiBlbnRyeTsgdGhpcyBpcyB3cm9uZwogICogZm9yIG91ciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9uLCB3ZSBmaXggdGhhdCB1cCBoZXJlLgogICovCkBAIC03NDUsMjQgKzI0MiwxNCBAQAogfQogCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQogewogCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKLQkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyk7CisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfAorCQkgX1BBR0VfSFdFWEVDIHwgX1BBR0VfRVhFQyk7CiAJcHRlX3VwZGF0ZShwdGVwLCAwLCBiaXRzKTsKIH0KIAotI2RlZmluZSAgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAotKHsJCQkJCQkJCQkgICBcCi0JaW50IF9fY2hhbmdlZCA9ICFwdGVfc2FtZSgqKF9fcHRlcCksIF9fZW50cnkpOwkJCSAgIFwKLQlpZiAoX19jaGFuZ2VkKSB7CQkJCQkJICAgXAotCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOyAgICAgICAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCi0KICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSEFTSFBURSkgPT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZmRjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF80S19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0gKKy8qCisgKiBFbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbC4gIFRoZSBQVEUgbGV2ZWwgbXVzdCB1c2UgYSA2NGIgcmVjb3JkCisgKiBmb3IgZWFjaCBwYWdlIHRhYmxlIGVudHJ5LiAgVGhlIFBNRCBhbmQgUEdEIGxldmVsIHVzZSBhIDMyYiByZWNvcmQgZm9yCisgKiBlYWNoIGVudHJ5IGJ5IGFzc3VtaW5nIHRoYXQgZWFjaCBlbnRyeSBpcyBwYWdlIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgUFRFX0lOREVYX1NJWkUgIDkKKyNkZWZpbmUgUE1EX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUFRFX1RBQkxFX1NJWkUJKHNpemVvZihwdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVURfVEFCTEVfU0laRQkoc2l6ZW9mKHB1ZF90KSA8PCBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJKHNpemVvZihwZ2RfdCkgPDwgUEdEX0lOREVYX1NJWkUpCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BVRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUE1EX1NISUZUCisKKy8qIFBVRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUFVEX1NISUZUCShQTURfU0hJRlQgKyBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFVEX1NJWkUJKDFVTCA8PCBQVURfU0hJRlQpCisjZGVmaW5lIFBVRF9NQVNLCSh+KFBVRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBmb3VydGgtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQVURfU0hJRlQgKyBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCisjZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAorLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLworI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKKworCisvKgorICogNC1sZXZlbCBwYWdlIHRhYmxlcyByZWxhdGVkIGJpdHMKKyAqLworCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCShwZ2RfdmFsKHBnZCkgPT0gMCkKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkocGdkX3ZhbChwZ2QpICE9IDApCisjZGVmaW5lIHBnZF9jbGVhcihwZ2RwKQkJKHBnZF92YWwoKihwZ2RwKSkgPSAwKQorI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCShwZ2RfdmFsKHBnZCkgJiB+UEdEX01BU0tFRF9CSVRTKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQl2aXJ0X3RvX3BhZ2UocGdkX3BhZ2VfdmFkZHIocGdkKSkKKworI2RlZmluZSBwdWRfb2Zmc2V0KHBnZHAsIGFkZHIpCVwKKyAgKCgocHVkX3QgKikgcGdkX3BhZ2VfdmFkZHIoKihwZ2RwKSkpICsgXAorICAgICgoKGFkZHIpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpKQorCisjZGVmaW5lIHB1ZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB1ZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHVkX3ZhbChlKSkKKworLyoKKyAqIE9uIGFsbCA0SyBzZXR1cHMsIHJlbWFwXzRrX3BmbigpIGVxdWF0ZXMgdG8gcmVtYXBfcGZuX3JhbmdlKCkgKi8KKyNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQlcCisJcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsIChwcm90KSkKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNjRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjMDg1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworCisjZGVmaW5lIFBURV9JTkRFWF9TSVpFICAxMgorI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTIKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUJMAorI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocmVhbF9wdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKKworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUEFHRV9TSElGVAorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLworI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QvUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkweDFmZgorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IGIwZjE4YmUuLmM0MGRiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMTEsOSArMTEsOSBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS02NGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC02NGsuaD4KICNlbHNlCi0jaW5jbHVkZSA8YXNtL3BndGFibGUtNGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC00ay5oPgogI2VuZGlmCiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKQEAgLTI1LDYgKzI1LDggQEAKICAgICAgICAgICAgICAgICAJICAgIFBVRF9JTkRFWF9TSVpFICsgUEdEX0lOREVYX1NJWkUgKyBQQUdFX1NISUZUKQogI2RlZmluZSBQR1RBQkxFX1JBTkdFIChBU01fQ09OU1QoMSkgPDwgUEdUQUJMRV9FQUREUl9TSVpFKQogCisKKy8qIFNvbWUgc2FuaXR5IGNoZWNraW5nICovCiAjaWYgVEFTS19TSVpFX1VTRVI2NCA+IFBHVEFCTEVfUkFOR0UKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgcGFnZXRhYmxlIHJhbmdlCiAjZW5kaWYKQEAgLTMzLDcgKzM1LDYgQEAKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgdXNlciBWU0lEIHJhbmdlCiAjZW5kaWYKIAotCiAvKgogICogRGVmaW5lIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSB2bWFsbG9jIFZNIGFyZWEuCiAgKi8KQEAgLTc2LDgyICs3NywxMSBAQAogCiAKIC8qCi0gKiBDb21tb24gYml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQotICogKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIEFkZGl0aW9uYWwKLSAqIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS0qLmgKKyAqIEluY2x1ZGUgdGhlIFBURSBiaXRzIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCi0jZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwOAotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQlVTWQkweDA4MDAgLyogc29mdHdhcmU6IFBURSAmIGhhc2ggYXJlIGJ1c3kgKi8KKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC5oPgorI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKLS8qIFN0cm9uZyBBY2Nlc3MgT3JkZXJpbmcgKi8KLSNkZWZpbmUgX1BBR0VfU0FPCShfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX1dSRU5BQkxFCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKQotCi0vKiBfX3BncHJvdCBkZWZpbmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggKi8KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKLQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9DSQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgICAgICAgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0FHUAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSkKLSNkZWZpbmUgSEFWRV9QQUdFX0FHUAotCi0jZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCi0JCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9XUklURVRIUlUgfAkJXAotCQkJIF9QQUdFXzRLX1BGTiB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CQlcCi0JCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0VYRUMpCi0vKiBQVEVJRFggbmliYmxlICovCi0jZGVmaW5lIF9QVEVJRFhfU0VDT05EQVJZCTB4OAotI2RlZmluZSBfUFRFSURYX0dST1VQX0lYCTB4NwotCi0KLS8qCi0gKiBQT1dFUjQgYW5kIG5ld2VyIGhhdmUgcGVyIHBhZ2UgZXhlY3V0ZSBwcm90ZWN0aW9uLCBvbGRlciBjaGlwcyBjYW4gb25seQotICogZG8gdGhpcyBvbiBhIHNlZ21lbnQgKDI1Nk1CKSBiYXNpcy4KLSAqCi0gKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgotICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KLSAqCi0gKiBOb3RlIGR1ZSB0byB0aGUgd2F5IHZtIGZsYWdzIGFyZSBsYWlkIG91dCwgdGhlIGJpdHMgYXJlIFhXUgotICovCi0jZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX1gKLSNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9YCi0KLSNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfWAotI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfWAogCiAjaWZkZWYgQ09ORklHX1BQQ19NTV9TTElDRVMKICNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKQEAgLTE2MSwzMyArOTEsMzkgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCi0gKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAotICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KLSAqCi0gKiBta19wdGUgdGFrZXMgYSAoc3RydWN0IHBhZ2UgKikgYXMgaW5wdXQKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdmFyaW91cyBQVEUgYWNjZXNzb3JzLCBpdCdzCisgKiB1c2VkIGluIGFsbCBjYXNlcyBleGNlcHQgQm9vazNTIHdpdGggNjRLIHBhZ2VzIHdoZXJlIHdlIGhhdmUgYQorICogY29uY2VwdCBvZiBzdWItcGFnZXMKICAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKyNpZm5kZWYgX19yZWFsX3B0ZQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKLXsKLQlwdGVfdCBwdGU7CisjaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKKyNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCisjZWxzZQorI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQorI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKKyNlbmRpZgorI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKIAorI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKKwlkbyB7CQkJCQkJCSAgICAgICAgIFwKKwkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAorCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKIAotCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUFRFX1JQTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7Ci0JcmV0dXJuIHB0ZTsKLX0KKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCkKIAotI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKLSAgKF9fcHRlKChwdGVfdmFsKF9wdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpCisjaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKKyNlbHNlCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SworI2VuZGlmCiAKLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorI2VuZGlmIC8qIF9fcmVhbF9wdGUgKi8KKwogCiAvKiBwdGVfY2xlYXIgbW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4KT4+UFRFX1JQTl9TSElGVCkpKQotI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKLQogI2RlZmluZSBQTURfQkFEX0JJVFMJCShQVEVfVEFCTEVfU0laRS0xKQogI2RlZmluZSBQVURfQkFEX0JJVFMJCShQTURfVEFCTEVfU0laRS0xKQogCkBAIC0yMzUsMzYgKzE3MSw2IEBACiAvKiBUaGlzIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSB2bWFsbG9jIHBhZ2VzICovCiAjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQogCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7fQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SVyk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkpOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKSB7Ci0JcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHBncHJvdF90IHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQotewotCXJldHVybiBfX3BncHJvdChwdGVfdmFsKHB0ZSkgJiBQQUdFX1BST1RfQklUUyk7Ci19CiAKIC8qIEF0b21pYyBQVEUgdXBkYXRlcyAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCkBAIC0yNzIsNiArMTc4LDcgQEAKIAkJCQkgICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCSAgICAgICBpbnQgaHVnZSkKIHsKKyNpZmRlZiBQVEVfQVRPTUlDX1VQREFURVMKIAl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCkBAIC0yODQsNiArMTkxLDEzIEBACiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCksICI9bSIgKCpwdGVwKQogCTogInIiIChwdGVwKSwgInIiIChjbHIpLCAibSIgKCpwdGVwKSwgImkiIChfUEFHRV9CVVNZKQogCTogImNjIiApOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkICYgfmNscik7CisjZW5kaWYKKwkvKiBodWdlIHBhZ2VzIHVzZSB0aGUgb2xkIHBhZ2UgdGFibGUgbG9jayAqLworCWlmICghaHVnZSkKKwkJYXNzZXJ0X3B0ZV9sb2NrZWQobW0sIGFkZHIpOwogCiAJaWYgKG9sZCAmIF9QQUdFX0hBU0hQVEUpCiAJCWhwdGVfbmVlZF9mbHVzaChtbSwgYWRkciwgcHRlcCwgb2xkLCBodWdlKTsKQEAgLTM1OSwyNiArMjczLDE3IEBACiAJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgfjBVTCwgMCk7CiB9CiAKLS8qCi0gKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKQotCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwotCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwotCSpwdGVwID0gcHRlOwotfQogCiAvKiBTZXQgdGhlIGRpcnR5IGFuZC9vciBhY2Nlc3NlZCBiaXRzIGF0b21pY2FsbHkgaW4gYSBsaW51eCBQVEUsIHRoaXMKICAqIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBmbHVzaCB0aGUgaGFzaCBlbnRyeQogICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwotc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQorc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8CisJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKTsKKworI2lmZGVmIFBURV9BVE9NSUNfVVBEQVRFUwogCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTM5MSwxNiArMjk2LDExIEBACiAJOiI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCiAJOiJyIiAoYml0cyksICJyIiAocHRlcCksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCiAJOiJjYyIpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkIHwgYml0cyk7CisjZW5kaWYKIH0KLSNkZWZpbmUgIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKLSh7CQkJCQkJCQkJICAgXAotCWludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihfX3B0ZXApLCBfX2VudHJ5KTsJCQkgICBcCi0JaWYgKF9fY2hhbmdlZCkgewkJCQkJCSAgIFwKLQkJX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KTsgICAgCSAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMDdmNTVlNi4uZWIxN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02LDcgKzYsMTcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKIHN0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK2V4dGVybiB2b2lkIGFzc2VydF9wdGVfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworI2Vsc2UgLyogQ09ORklHX0RFQlVHX1ZNICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3B0ZV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKK30KKyNlbmRpZiAvKiAhQ09ORklHX0RFQlVHX1ZNICovCisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKQEAgLTE3LDYgKzI3LDEzMCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisvKiBHZW5lcmljIGFjY2Vzc29ycyB0byBQVEUgYml0cyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfcHJlc2VudChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiB+X1BURV9OT05FX01BU0spID09IDA7IH0KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsgfQorCisvKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqCisgKiBFdmVuIGlmIFBURXMgY2FuIGJlIHVuc2lnbmVkIGxvbmcgbG9uZywgYSBQRk4gaXMgYWx3YXlzIGFuIHVuc2lnbmVkCisgKiBsb25nIGZvciBub3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcGdwcm90KSB7CisJcmV0dXJuIF9fcHRlKCgocHRlX2Jhc2ljX3QpKHBmbikgPDwgUFRFX1JQTl9TSElGVCkgfAorCQkgICAgIHBncHJvdF92YWwocGdwcm90KSk7IH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkJeworCXJldHVybiBwdGVfdmFsKHB0ZSkgPj4gUFRFX1JQTl9TSElGVDsgfQorCisvKiBLZWVwIHRoZXNlIGFzIGEgbWFjcm9zIHRvIGF2b2lkIGluY2x1ZGUgZGVwZW5kZW5jeSBtZXNzICovCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworLyogR2VuZXJpYyBtb2RpZmllcnMgZm9yIFBURSBiaXRzICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpIHsKKwlyZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKworLyogSW5zZXJ0IGEgUFRFLCB0b3AtbGV2ZWwgZnVuY3Rpb24gaXMgb3V0IG9mIGxpbmUuIEl0IHVzZXMgYW4gaW5saW5lCisgKiBsb3cgbGV2ZWwgZnVuY3Rpb24gaW4gdGhlIHJlc3BlY3RpdmUgcGd0YWJsZS0qIGZpbGVzCisgKi8KK2V4dGVybiB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCSAgICAgICBwdGVfdCBwdGUpOworCisvKiBUaGlzIGxvdyBsZXZlbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgYWN0dWFsIFBURSBpbnNlcnRpb24KKyAqIFNldHRpbmcgdGhlIFBURSBkZXBlbmRzIG9uIHRoZSBNTVUgdHlwZSBhbmQgb3RoZXIgZmFjdG9ycy4gSXQncworICogYW4gaG9ycmlibGUgbWVzcyB0aGF0IEknbSBub3QgZ29pbmcgdG8gdHJ5IHRvIGNsZWFuIHVwIG5vdyBidXQKKyAqIEknbSBrZWVwaW5nIGl0IGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbiBzcHJlYWQgYXJvdW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCBpbnQgcGVyY3B1KQoreworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJLyogRmlyc3QgY2FzZSBpcyAzMi1iaXQgSGFzaCBNTVUgaW4gU01QIG1vZGUgd2l0aCAzMi1iaXQgUFRFcy4gV2UgdXNlIHRoZQorCSAqIGhlbHBlciBwdGVfdXBkYXRlKCkgd2hpY2ggZG9lcyBhbiBhdG9taWMgdXBkYXRlLiBXZSBuZWVkIHRvIGRvIHRoYXQKKwkgKiBiZWNhdXNlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY2FuIGNsZWFyIF9QQUdFX0hBU0hQVEUuIElmIGl0J3MgYQorCSAqIHBlci1DUFUgUFRFIHN1Y2ggYXMgYSBrbWFwX2F0b21pYywgd2UgZG8gYSBzaW1wbGUgdXBkYXRlIHByZXNlcnZpbmcKKwkgKiB0aGUgaGFzaCBiaXRzIGluc3RlYWQgKGllLCBzYW1lIGFzIHRoZSBub24tU01QIGNhc2UpCisJICovCisJaWYgKHBlcmNwdSkKKwkJKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQorCQkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKwllbHNlCisJCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwkvKiBTZWNvbmQgY2FzZSBpcyAzMi1iaXQgd2l0aCA2NC1iaXQgUFRFIGluIFNNUCBtb2RlLiBJbiB0aGlzIGNhc2UsIHdlCisJICogY2FuIGp1c3Qgc3RvcmUgYXMgbG9uZyBhcyB3ZSBkbyB0aGUgdHdvIGhhbHZlcyBpbiB0aGUgcmlnaHQgb3JkZXIKKwkgKiB3aXRoIGEgYmFycmllciBpbiBiZXR3ZWVuLiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgdGFrZSBjYXJlLAorCSAqIGluIHRoZSBoYXNoIGNvZGUsIHRvIHByZS1pbnZhbGlkYXRlIGlmIHRoZSBQVEUgd2FzIGFscmVhZHkgaGFzaGVkLAorCSAqIHdoaWNoIHN5bmNocm9uaXplcyB1cyB3aXRoIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbi4KKwkgKiBJbiB0aGUgcGVyY3B1IGNhc2UsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIHNpbXBsZSB1cGRhdGUgcHJlc2VydmluZworCSAqIHRoZSBoYXNoIGJpdHMKKwkgKi8KKwlpZiAocGVyY3B1KSB7CisJCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisJCXJldHVybjsKKwl9CisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeShtbSwgcHRlcCwgYWRkcik7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorCQlzdHclVTAlWDAgJTIsJTBcblwKKwkJZWllaW9cblwKKwkJc3R3JVUwJVgwICVMMiwlMSIKKwk6ICI9bSIgKCpwdGVwKSwgIj1tIiAoKigodW5zaWduZWQgY2hhciAqKXB0ZXArNCkpCisJOiAiciIgKHB0ZSkgOiAibWVtb3J5Iik7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKQorCS8qIFRoaXJkIGNhc2UgaXMgMzItYml0IGhhc2ggdGFibGUgaW4gVVAgbW9kZSwgd2UgbmVlZCB0byBwcmVzZXJ2ZQorCSAqIHRoZSBfUEFHRV9IQVNIUFRFIGJpdCBzaW5jZSB3ZSBtYXkgbm90IGhhdmUgaW52YWxpZGF0ZWQgdGhlIHByZXZpb3VzCisJICogdHJhbnNsYXRpb24gaW4gdGhlIGhhc2ggeWV0IChkb25lIGluIGEgc3Vic2VxdWVudCBmbHVzaF90bGJfeHh4KCkpCisJICogYW5kIHNlZSB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgdGhhdCB0aGlzIFBURSBuZWVkcyBpbnZhbGlkYXRpbmcKKwkgKi8KKwkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisKKyNlbHNlCisJLyogQW55dGhpbmcgZWxzZSBqdXN0IHN0b3JlcyB0aGUgUFRFIG5vcm1hbGx5LiBUaGF0IGNvdmVycyBhbGwgNjQtYml0CisJICogY2FzZXMsIGFuZCAzMi1iaXQgbm9uLWhhc2ggd2l0aCA2NC1iaXQgUFRFcyBpbiBVUCBtb2RlCisJICovCisJKnB0ZXAgPSBwdGU7CisjZW5kaWYKK30KKworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworZXh0ZXJuIGludCBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpOworCiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE0ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogcHJvdmlkZXMgbWFza3MgYW5kIG9wY29kZSBpbWFnZXMgZm9yIHVzZSBieSBjb2RlIGdlbmVyYXRpb24sIGVtdWxhdGlvbgorICogYW5kIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1pZ2h0IG5vdCBrbm93IGFib3V0CisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFBDX09QQ09ERV9ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgorCisvKiBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgKi8KKyNkZWZpbmUgUFBDX0lOU1RfRENCQQkJCTB4N2MwMDA1ZWMKKyNkZWZpbmUgUFBDX0lOU1RfRENCQV9NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX0RDQkFMCQkJMHg3YzIwMDVlYworI2RlZmluZSBQUENfSU5TVF9EQ0JaTAkJCTB4N2MyMDA3ZWMKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTAkJCTB4N2MwMDAwMWUKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTF9NQVNLCQkweGZjMDAwMDNlCisjZGVmaW5lIFBQQ19JTlNUX0xTV0kJCQkweDdjMDAwNGFhCisjZGVmaW5lIFBQQ19JTlNUX0xTV1gJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKKyNkZWZpbmUgUFBDX0lOU1RfTUNSWFIJCQkweDdjMDAwNDAwCisjZGVmaW5lIFBQQ19JTlNUX01DUlhSX01BU0sJCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgUFBDX0lOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2CisjZGVmaW5lIFBQQ19JTlNUX01GU1BSX1BWUl9NQVNLCQkweGZjMWZmZmZmCisjZGVmaW5lIFBQQ19JTlNUX01TR1NORAkJCTB4N2MwMDAxOWMKKyNkZWZpbmUgUFBDX0lOU1RfTk9QCQkJMHg2MDAwMDAwMAorI2RlZmluZSBQUENfSU5TVF9QT1BDTlRCCQkweDdjMDAwMGY0CisjZGVmaW5lIFBQQ19JTlNUX1BPUENOVEJfTUFTSwkJMHhmYzAwMDdmZQorI2RlZmluZSBQUENfSU5TVF9SRkNJCQkJMHg0YzAwMDA2NgorI2RlZmluZSBQUENfSU5TVF9SRkRJCQkJMHg0YzAwMDA0ZQorI2RlZmluZSBQUENfSU5TVF9SRk1DSQkJCTB4NGMwMDAwNGMKKworI2RlZmluZSBQUENfSU5TVF9TVFJJTkcJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSwkweGZjMDAwNjdlCisKKyNkZWZpbmUgUFBDX0lOU1RfU1RTV0kJCQkweDdjMDAwNWFhCisjZGVmaW5lIFBQQ19JTlNUX1NUU1dYCQkJMHg3YzAwMDUyYQorI2RlZmluZSBQUENfSU5TVF9UTEJJTFgJCQkweDdjMDAwNjI2CisjZGVmaW5lIFBQQ19JTlNUX1dBSVQJCQkweDdjMDAwMDdjCisKKy8qIG1hY3JvcyB0byBpbnNlcnQgZmllbGRzIGludG8gb3Bjb2RlcyAqLworI2RlZmluZSBfX1BQQ19SQShhKQkoKGEgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgX19QUENfUkIoYikJKChiICYgMHgxZikgPDwgMTEpCisjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgodCAmIDB4MykgPDwgMjEpCisjZGVmaW5lIF9fUFBDX1dDKHcpCSgodyAmIDB4MykgPDwgMjEpCisKKy8qIERlYWwgd2l0aCBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIGFyZW4ndCBhd2FyZSBvZiAqLworI2RlZmluZQlQUENfRENCQUwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQkFMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZQlQUENfRENCWkwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQlpMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCisJCQkJCV9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKKyNkZWZpbmUgUFBDX1JGREkJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGREkpCisjZGVmaW5lIFBQQ19SRk1DSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZNQ0kpCisjZGVmaW5lIFBQQ19UTEJJTFgodCwgYSwgYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfVExCSUxYIHwgXAorCQkJCQlfX1BQQ19UX1RMQih0KSB8IF9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19UTEJJTFhfQUxMKGEsIGIpCVBQQ19UTEJJTFgoMCwgYSwgYikKKyNkZWZpbmUgUFBDX1RMQklMWF9QSUQoYSwgYikJUFBDX1RMQklMWCgxLCBhLCBiKQorI2RlZmluZSBQUENfVExCSUxYX1ZBKGEsIGIpCVBQQ19UTEJJTFgoMywgYSwgYikKKyNkZWZpbmUgUFBDX1dBSVQodykJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1dBSVQgfCBcCisJCQkJCV9fUFBDX1dDKHcpKQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKaW5kZXggMWEwZDYyOC4uZjU5YTY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZXJyb3IgX19GSUxFX18gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhc3NlbWJsZXIgZmlsZXMKQEAgLTE2NywxMSArMTY4LDYgQEAKICNkZWZpbmUgSE1UX01FRElVTV9ISUdIIG9yCTUsNSw1CQkjIG1lZGl1bSBoaWdoIHByaW9yaXR5CiAjZGVmaW5lIEhNVF9ISUdICW9yCTMsMywzCiAKLS8qIGhhbmRsZSBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1heSBub3Qga25vdyAqLwotI2RlZmluZSBSRkNJCQkubG9uZyAweDRjMDAwMDY2CS8qIHJmY2kgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgUkZESQkJLmxvbmcgMHg0YzAwMDA0ZQkvKiByZmRpIGluc3RydWN0aW9uICovCi0jZGVmaW5lIFJGTUNJCQkubG9uZyAweDRjMDAwMDRjCS8qIHJmbWNpIGluc3RydWN0aW9uICovCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkMzQ2NjQ5Li45ZWVkMjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMTMsNiArMzEzLDI1IEBACiAjZGVmaW5lIEhBVkVfQVJDSF9QSUNLX01NQVBfTEFZT1VUCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUEM2NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jbGVhbl9zcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzXzMyKQoreworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlpZiAoaXNfMzIpCisJCXNwID0gcmVncy0+Z3ByWzFdICYgMHgwZmZmZmZmZmZVTDsKKwllbHNlCisJCXNwID0gcmVncy0+Z3ByWzFdOworCisJcmV0dXJuIHNwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY2xlYW5fc3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc18zMikKK3sKKwlyZXR1cm4gcmVncy0+Z3ByWzFdOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCmluZGV4IGNkMjRhYzEuLjA0MjdiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCkBAIC03MzAsNyArNzMwLDcgQEAKIGV4dGVybiBpbnQgcHMzYXZfY21kX3ZpZGVvX2dldF9tb25pdG9yX2luZm8oc3RydWN0IHBzM2F2X3BrdF9hdl9nZXRfbW9uaXRvcl9pbmZvICosCiAJCQkJCSAgICB1MzIpOwogCi1leHRlcm4gaW50IHBzM2F2X3NldF92aWRlb19tb2RlKHUzMik7CitleHRlcm4gaW50IHBzM2F2X3NldF92aWRlb19tb2RlKGludCk7CiBleHRlcm4gaW50IHBzM2F2X3NldF9hdWRpb19tb2RlKHUzMiwgdTMyLCB1MzIsIHUzMiwgdTMyKTsKIGV4dGVybiBpbnQgcHMzYXZfZ2V0X2F1dG9fbW9kZSh2b2lkKTsKIGV4dGVybiBpbnQgcHMzYXZfZ2V0X21vZGUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCmluZGV4IGU3MjMzYTguLjkwZGJlZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogaW9jdGwgKi8KICNkZWZpbmUgUFMzRkJfSU9DVExfU0VUTU9ERSAgICAgICBfSU9XKCdyJywgIDEsIGludCkgLyogc2V0IHZpZGVvIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjMwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV80MHhfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFXzQweF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQXQgcHJlc2VudCwgYWxsIFBvd2VyUEMgNDAwLWNsYXNzIHByb2Nlc3NvcnMgc2hhcmUgYSBzaW1pbGFyIFRMQgorICogYXJjaGl0ZWN0dXJlLiBUaGUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgc2lkZXMgc2hhcmUgYSB1bmlmaWVkLAorICogNjQtZW50cnksIGZ1bGx5LWFzc29jaWF0aXZlIFRMQiB3aGljaCBpcyBtYWludGFpbmVkIHRvdGFsbHkgdW5kZXIKKyAqIHNvZnR3YXJlIGNvbnRyb2wuIEluIGFkZGl0aW9uLCB0aGUgaW5zdHJ1Y3Rpb24gc2lkZSBoYXMgYQorICogaGFyZHdhcmUtbWFuYWdlZCwgNC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIHNlcnZlcyBhcyBhCisgKiBmaXJzdCBsZXZlbCB0byB0aGUgc2hhcmVkIFRMQi4gVGhlc2UgdHdvIFRMQnMgYXJlIGtub3duIGFzIHRoZSBVVExCCisgKiBhbmQgSVRMQiwgcmVzcGVjdGl2ZWx5IChzZWUgIm1tdS5oIiBmb3IgZGVmaW5pdGlvbnMpLgorICoKKyAqIFRoZXJlIGFyZSBzZXZlcmFsIHBvdGVudGlhbCBnb3RjaGFzIGhlcmUuICBUaGUgNDB4IGhhcmR3YXJlIFRMQkxPCisgKiBmaWVsZCBsb29rcyBsaWtlIHRoaXM6CisgKgorICogMCAgMSAgMiAgMyAgNCAgLi4uIDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIDAgIDAgRVggV1IgWlNFTC4uLi4uLi4gIFcgIEkgIE0gIEcKKyAqCisgKiBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKKyAqCisgKiAtIGJpdHMgMjAgYW5kIDIxIG11c3QgYmUgY2xlYXJlZCwgYmVjYXVzZSB3ZSB1c2UgNGsgcGFnZXMgKDQweCBjYW4KKyAqICAgc3VwcG9ydCBkb3duIHRvIDFrIHBhZ2VzKSwgdGhpcyBpcyBkb25lIGluIHRoZSBUTEJNaXNzIGV4Y2VwdGlvbgorICogICBoYW5kbGVyLgorICogLSBXZSB1c2Ugb25seSB6b25lcyAwIChmb3Iga2VybmVsIHBhZ2VzKSBhbmQgMSAoZm9yIHVzZXIgcGFnZXMpCisgKiAgIG9mIHRoZSAxNiBhdmFpbGFibGUuICBCaXQgMjQtMjYgb2YgdGhlIFRMQiBhcmUgY2xlYXJlZCBpbiB0aGUgVExCCisgKiAgIG1pc3MgaGFuZGxlci4gIEJpdCAyNyBpcyBQQUdFX1VTRVIsIHRodXMgc2VsZWN0aW5nIHRoZSBjb3JyZWN0CisgKiAgIHpvbmUuCisgKiAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdHdvIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMzAgYml0cy4gIEJlY2F1c2UgNDB4IGRvZXNuJ3Qgc3VwcG9ydCBTTVAKKyAqICAgYW55d2F5LCBNIGlzIGlycmVsZXZhbnQgc28gd2UgYm9ycm93IGl0IGZvciBQQUdFX1BSRVNFTlQuICBCaXQgMzAKKyAqICAgaXMgY2xlYXJlZCBpbiB0aGUgVExCIG1pc3MgaGFuZGxlciBiZWZvcmUgdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuCisgKiAtIEFsbCBvdGhlciBiaXRzIG9mIHRoZSBQVEUgYXJlIGxvYWRlZCBpbnRvIFRMQkxPIHdpdGhvdXQKKyAqICAgbW9kaWZpY2F0aW9uLCBsZWF2aW5nIHVzIG9ubHkgdGhlIGJpdHMgMjAsIDIxLCAyNCwgMjUsIDI2LCAzMCBmb3IKKyAqICAgc29mdHdhcmUgUFRFIGJpdHMuICBXZSBhY3R1YWxseSB1c2UgdXNlIGJpdHMgMjEsIDI0LCAyNSwgYW5kCisgKiAgIDMwIHJlc3BlY3RpdmVseSBmb3IgdGhlIHNvZnR3YXJlIGJpdHM6IEFDQ0VTU0VELCBESVJUWSwgUlcsIGFuZAorICogICBQUkVTRU5ULgorICovCisKKyNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMQkvKiBHOiBwYWdlIGlzIGd1YXJkZWQgZnJvbSBwcmVmZXRjaCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAxCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMgkvKiBzb2Z0d2FyZTogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLworI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLworI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDIwMAkvKiBoYXJkd2FyZTogRVggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMAkvKiBzb2Z0d2FyZTogUjogcGFnZSByZWZlcmVuY2VkICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4NDAwCS8qIFBNRCBwb2ludHMgdG8gcGFnZSBvZiBQVEVzICovCisjZGVmaW5lIF9QTURfQkFECTB4ODAyCisjZGVmaW5lIF9QTURfU0laRQkweDBlMAkvKiBzaXplIGZpZWxkLCAhPSAwIGZvciBsYXJnZS1wYWdlIFBNRCBlbnRyeSAqLworI2RlZmluZSBfUE1EX1NJWkVfNE0JMHgwYzAKKyNkZWZpbmUgX1BNRF9TSVpFXzE2TQkweDBlMAorCisjZGVmaW5lIFBNRF9QQUdFX1NJWkUocG1kdmFsKQkoMTAyNCA8PCAoKChwbWR2YWwpICYgX1BNRF9TSVpFKSA+PiA0KSkKKworLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA0MHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCisjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfNDB4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTk4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oCkBAIC0wLDAgKzEsMTAyIEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfNDR4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV80NHhfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBQUEM0NDAKKyAqCisgKiBCZWNhdXNlIG9mIHRoZSAzIHdvcmQgVExCIGVudHJpZXMgdG8gc3VwcG9ydCAzNi1iaXQgYWRkcmVzc2luZywKKyAqIHRoZSBhdHRyaWJ1dGUgYXJlIGRpZmZpY3VsdCB0byBtYXAgaW4gc3VjaCBhIGZhc2hpb24gdGhhdCB0aGV5CisgKiBhcmUgZWFzaWx5IGxvYWRlZCBkdXJpbmcgZXhjZXB0aW9uIHByb2Nlc3NpbmcuICBJIGRlY2lkZWQgdG8KKyAqIG9yZ2FuaXplIHRoZSBlbnRyeSBzbyB0aGUgRVJQTiBpcyB0aGUgb25seSBwb3J0aW9uIGluIHRoZQorICogdXBwZXIgd29yZCBvZiB0aGUgUFRFIGFuZCB0aGUgYXR0cmlidXRlIGJpdHMgYmVsb3cgYXJlIHBhY2tlZAorICogaW4gYXMgc2Vuc2libHkgYXMgdGhleSBjYW4gYmUgaW4gdGhlIGFyZWEgYmVsb3cgYSA0S0IgcGFnZSBzaXplCisgKiBvcmllbnRlZCBSUE4uICBUaGlzIGF0IGxlYXN0IG1ha2VzIGl0IGVhc3kgdG8gbG9hZCB0aGUgUlBOIGFuZAorICogRVJQTiBmaWVsZHMgaW4gdGhlIFRMQi4gLU1hdHQKKyAqCisgKiBUaGlzIGlzbid0IGVudGlyZWx5IHRydWUgYW55bW9yZSwgYXQgbGVhc3Qgc29tZSBiaXRzIGFyZSBub3cKKyAqIGVhc2llciB0byBtb3ZlIGludG8gdGhlIFRMQiBmcm9tIHRoZSBQVEUuIC1CZW5ILgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKKyAqIGxlc3MgdGhhbiA0S0IuCisgKgorICoKKyAqIFBQQyA0NDAgY29yZSBoYXMgZm9sbG93aW5nIFRMQiBhdHRyaWJ1dGUgZmllbGRzOworICoKKyAqICAgVExCMToKKyAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLSAgLSAgLSAgLSAgLSAgLSBFUlBOLi4uLi4uLgorICoKKyAqICAgVExCMjoKKyAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiAgIC0gIC0gIC0gIC0gIC0gICAgLSBVMCBVMSBVMiBVMyBXICBJICBNICBHICBFICAgLSBVWCBVVyBVUiBTWCBTVyBTUgorICoKKyAqIE5ld2VyIDQ0MCBjb3JlcyAoNDQweDYgYXMgdXNlZCBvbiBBTUNDIDQ2MEVYLzQ2MEdUKSBoYXZlIGFkZGl0aW9uYWwKKyAqIFRMQjIgc3RvcmFnZSBhdHRpYnV0ZSBmaWVsZHMuIFRob3NlIGFyZToKKyAqCisgKiAgIFRMQjI6CisgKiAgIDAuLi4xMCAgICAxMSAgIDEyICAgMTMgICAxNCAgIDE1ICAgMTYuLi4zMQorICogICBubyBjaGFuZ2UgV0wxICBJTDFJIElMMUQgSUwySSBJTDJEIG5vIGNoYW5nZQorICoKKyAqIFRoZXJlIGFyZSBzb21lIGNvbnN0cmFpbnMgYW5kIG9wdGlvbnMsIHRvIGRlY2lkZSBtYXBwaW5nIHNvZnR3YXJlIGJpdHMKKyAqIGludG8gVExCIGVudHJ5LgorICoKKyAqICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgorICoKKyAqICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgorICoKKyAqICAgLSBDQUNIRSBDT0hFUkVOVCBiaXQgKE0pIGhhcyBubyBlZmZlY3Qgb24gb3JpZ2luYWwgUFBDNDQwIGNvcmVzLAorICogICAgIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IFNNUC4gSG93ZXZlciwgc29tZSBsYXRlciA0NjAgdmFyaWFudHMKKyAqICAgICBoYXZlIC1zb21lLSBmb3JtIG9mIFNNUCBzdXBwb3J0IGFuZCBzbyBJIGtlZXAgdGhlIGJpdCB0aGVyZSBmb3IKKyAqICAgICBmdXR1cmUgdXNlCisgKgorICogV2l0aCB0aGUgUFBDIDQ0eCBMaW51eCBpbXBsZW1lbnRhdGlvbiwgdGhlIDAtMTF0aCBMU0JzIG9mIHRoZSBQVEUgYXJlIHVzZWQKKyAqIGZvciBtZW1vcnkgcHJvdGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyAoc2VlIFBURSBzdHJ1Y3R1cmUgaW4KKyAqIGluY2x1ZGUvYXNtLXBwYy9tbXUuaCkuICBUaGUgX1BBR0VfWFhYIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBtYXAgdG8gdGhlCisgKiBhYm92ZSBiaXRzLiAgTm90ZSB0aGF0IHRoZSBiaXQgdmFsdWVzIGFyZSBDUFUgc3BlY2lmaWMsIG5vdCBhcmNoaXRlY3R1cmUKKyAqIHNwZWNpZmljLgorICoKKyAqIFRoZSBrZXJuZWwgUFRFIGVudHJ5IGhvbGRzIGFuIGFyY2gtZGVwZW5kZW50IHN3cF9lbnRyeSBzdHJ1Y3R1cmUgdW5kZXIKKyAqIGNlcnRhaW4gc2l0dWF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGluIHN1Y2ggc2l0dWF0aW9ucyBzb21lIHBvcnRpb24gb2YKKyAqIHRoZSBQVEUgYml0cyBhcmUgdXNlZCBhcyBhIHN3cF9lbnRyeS4gSW4gdGhlIFBQQyBpbXBsZW1lbnRhdGlvbiwgdGhlCisgKiAzLTI0dGggTFNCIGFyZSBzaGFyZWQgd2l0aCBzd3BfZW50cnksIGhvd2V2ZXIgdGhlIDAtMm5kIHRocmVlIExTQiBzdGlsbAorICogaG9sZCBwcm90ZWN0aW9uIHZhbHVlcy4gVGhhdCBtZWFucyB0aGUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGFyZQorICogcmVzZXJ2ZWQgZm9yIGJvdGggUFRFIGFuZCBTV0FQIGVudHJ5IGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IHRocmVlCisgKiBMU0JzLgorICoKKyAqIFRoZXJlIGFyZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXZhaWxhYmxlIGZvciBTV0FQIGVudHJ5OgorICoJX1BBR0VfUFJFU0VOVAorICoJX1BBR0VfRklMRQorICoJX1BBR0VfSEFTSFBURSAoaWYgSFcgaGFzKQorICoKKyAqIFNvIHRob3NlIHRocmVlIGJpdHMgaGF2ZSB0byBiZSBpbnNpZGUgb2YgMC0ybmQgTFNCIG9mIFBURS4KKyAqCisgKi8KKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCisjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAwMDAyMDAJCS8qIEg6IE0gYml0ICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLworCisvKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfNDR4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNmUzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV84eHhfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFXzh4eF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlIFBvd2VyUEMgTVBDOHh4IHVzZXMgYSBUTEIgd2l0aCBoYXJkd2FyZSBhc3Npc3RlZCwgc29mdHdhcmUgdGFibGV3YWxrLgorICogV2UgYWxzbyB1c2UgdGhlIHR3byBsZXZlbCB0YWJsZXMsIGJ1dCB3ZSBjYW4gcHV0IHRoZSByZWFsIGJpdHMgaW4gdGhlbQorICogbmVlZGVkIGZvciB0aGUgVExCIGFuZCB0YWJsZXdhbGsuICBUaGVzZSBkZWZpbml0aW9ucyByZXF1aXJlIE14X0NUUi5QUE0gPSAwLAorICogTXhfQ1RSLlBQQ1MgPSAwLCBhbmQgTURfQ1RSLlRXQU0gPSAxLiAgVGhlIGxldmVsIDIgZGVzY3JpcHRvciBoYXMKKyAqIGFkZGl0aW9uYWwgcGFnZSBwcm90ZWN0aW9uICh3aGVuIE14X0NUUi5QUENTID0gMSkgdGhhdCBhbGxvd3MgVExCIGhpdAorICogYmFzZWQgdXBvbiB1c2VyL3N1cGVyIGFjY2Vzcy4gIFRoZSBUTEIgZG9lcyBub3QgaGF2ZSBhY2Nlc3NlZCBub3Igd3JpdGUKKyAqIHByb3RlY3QuICBXZSBhc3N1bWUgdGhhdCBpZiB0aGUgVExCIGdldCBsb2FkZWQgd2l0aCBhbiBlbnRyeSBpdCBpcworICogYWNjZXNzZWQsIGFuZCBvdmVybG9hZCB0aGUgY2hhbmdlZCBiaXQgZm9yIHdyaXRlIHByb3RlY3QuICBXZSB1c2UKKyAqIHR3byBiaXRzIGluIHRoZSBzb2Z0d2FyZSBwdGUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgc2V0IHRvIHplcm8gaW4KKyAqIHRoZSBUTEIgZW50cnkgKDI0IGFuZCAyNSkgZm9yIHRoZXNlIGluZGljYXRvcnMuICBBbHRob3VnaCB0aGUgbGV2ZWwgMQorICogZGVzY3JpcHRvciBjb250YWlucyB0aGUgZ3VhcmRlZCBhbmQgd3JpdGV0aHJvdWdoL2NvcHliYWNrIGJpdHMsIHdlIGNhbgorICogc2V0IHRoZXNlIGF0IHRoZSBwYWdlIGxldmVsIHNpbmNlIHRoZXkgZ2V0IGNvcGllZCBmcm9tIHRoZSBNeF9UV0MKKyAqIHJlZ2lzdGVyIHdoZW4gdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuICBXZSB3aWxsIHVzZSBiaXQgMjcgZm9yIGd1YXJkLCBzaW5jZQorICogdGhhdCBpcyB3aGVyZSBpdCBleGlzdHMgaW4gdGhlIE1EX1RXQywgYW5kIGJpdCAyNiBmb3Igd3JpdGV0aHJvdWdoLgorICogVGhlc2Ugd2lsbCBnZXQgbWFza2VkIGZyb20gdGhlIGxldmVsIDIgZGVzY3JpcHRvciBhdCBUTEIgbG9hZCB0aW1lLCBhbmQKKyAqIGNvcGllZCB0byB0aGUgTURfVFdDIGJlZm9yZSBpdCBnZXRzIGxvYWRlZC4KKyAqIExhcmdlIHBhZ2Ugc2l6ZXMgYWRkZWQuICBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gc2l6ZXMsIDRLIGFuZCA4TS4KKyAqIFRoaXMgYWxzbyBhbGxvd3MgYSBUTEIgaGFuZGVyIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGNhbiBkaXJlY3RseQorICogbG9hZCB0aGUgUE1EIGludG8gTURfVFdDLiAgVGhlIDhNIHBhZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGtlcm5lbAorICogbWFwcGluZyBvZiB3ZWxsIGtub3duIGFyZWFzLiAgVGhlIFBNRCAoUEdEKSBlbnRyaWVzIGNvbnRhaW4gY29udHJvbAorICogZmxhZ3MgaW4gYWRkaXRpb24gdG8gdGhlIGFkZHJlc3MsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoZQorICogc29mdHdhcmUgbm8gbG9uZ2VyIGFzc3VtZXMgdGhlc2UgYXJlIG9ubHkgcG9pbnRlcnMuCisgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMgkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLworCisvKiBUaGVzZSBmaXZlIHNvZnR3YXJlIGJpdHMgbXVzdCBiZSBtYXNrZWQgb3V0IHdoZW4gdGhlIGVudHJ5IGlzIGxvYWRlZAorICogaW50byB0aGUgVExCLgorICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA4CS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAxMAkvKiBzb2Z0d2FyZTogZ3VhcmRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDIwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDQwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDA4MAkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisKKy8qIFNldHRpbmcgYW55IGJpdHMgaW4gdGhlIG5pYmJsZSB3aXRoIHRoZSBmb2xsb3cgdHdvIGNvbnRyb2xzIHdpbGwKKyAqIHJlcXVpcmUgYSBUTEIgZXhjZXB0aW9uIGhhbmRsZXIgY2hhbmdlLiAgSXQgaXMgYXNzdW1lZCB1bnVzZWQgYml0cworICogYXJlIGFsd2F5cyB6ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgwMTAwCS8qIGgvdyB3cml0ZSBlbmFibGU6IG5ldmVyIHNldCBpbiBMaW51eCBQVEUgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA4MDAJLyogT25lIG9mIHRoZSBQUCBiaXRzLCB0aGUgb3RoZXIgaXMgVVNFUiZ+UlcgKi8KKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMHgwMDAxCisjZGVmaW5lIF9QTURfQkFECTB4MGZmMAorI2RlZmluZSBfUE1EX1BBR0VfTUFTSwkweDAwMGMKKyNkZWZpbmUgX1BNRF9QQUdFXzhNCTB4MDAwYworCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLIF9QQUdFX0FDQ0VTU0VECisKKy8qIFVudGlsIG15IHJld29yayBpcyBmaW5pc2hlZCwgOHh4IHN0aWxsIG5lZWRzIGF0b21pYyBQVEUgdXBkYXRlcyAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisvKiBXZSBuZWVkIHRvIGFkZCBfUEFHRV9TSEFSRUQgdG8ga2VybmVsIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfU0hBUkVEKQorI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFXzh4eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc0MGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMCwwICsxLDE4MCBAQAorLyogSW5jbHVkZWQgZnJvbSBhc20vcGd0YWJsZS0qLmggb25seSAhICovCisKKy8qCisgKiBTb21lIGJpdHMgYXJlIG9ubHkgdXNlZCBvbiBzb21lIGNwdSBmYW1pbGllcy4uLiBNYWtlIHN1cmUgdGhhdCBhbGwKKyAqIHRoZSB1bmRlZmluZWQgZ2V0cyBhIHNlbnNpYmxlIGRlZmF1bHQKKyAqLworI2lmbmRlZiBfUEFHRV9IQVNIUFRFCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1NIQVJFRAorI2RlZmluZSBfUEFHRV9TSEFSRUQJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hXV1JJVEUKKyNkZWZpbmUgX1BBR0VfSFdXUklURQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFdFWEVDCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfRVhFQworI2RlZmluZSBfUEFHRV9FWEVDCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9FTkRJQU4KKyNkZWZpbmUgX1BBR0VfRU5ESUFOCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9DT0hFUkVOVAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfV1JJVEVUSFJVCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfU1BFQ0lBTAorI2RlZmluZSBfUEFHRV9TUEVDSUFMCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV80S19QRk4KKyNkZWZpbmUgX1BBR0VfNEtfUEZOCQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfUFNJWkUKKyNkZWZpbmUgX1BBR0VfUFNJWkUJCTAKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1BSRVNFTlRfTUFTSworI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSwlfUE1EX1BSRVNFTlQKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1NJWkUKKyNkZWZpbmUgX1BNRF9TSVpFCTAKKyNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWQpCWJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUoKQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0tFUk5FTF9STworI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0tFUk5FTF9SVworI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hQVEVGTEFHUworI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgX1BBR0VfSEFTSFBURQorI2VuZGlmCisjaWZuZGVmIF9QVEVfTk9ORV9NQVNLCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCV9QQUdFX0hQVEVGTEFHUworI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBsaW5rIGVycm9yIGlmIFBNRF9QQUdFX1NJWkUgaXMgZXZlciBjYWxsZWQgb24gYQorICoga2VybmVsIHdpdGhvdXQgbGFyZ2UgcGFnZSBQTUQgc3VwcG9ydAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSh2b2lkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogTG9jYXRpb24gb2YgdGhlIFBGTiBpbiB0aGUgUFRFLiBNb3N0IDMyLWJpdCBwbGF0Zm9ybXMgdXNlIHRoZSBzYW1lCisgKiBhcyBfUEFHRV9TSElGVCBoZXJlIChpZSwgbmF0dXJhbGx5IGFsaWduZWQpLgorICogUGxhdGZvcm0gd2hvIGRvbid0IGp1c3QgcHJlLWRlZmluZSB0aGUgdmFsdWUgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQgaGVyZQorICovCisjaWZuZGVmIFBURV9SUE5fU0hJRlQKKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoUEFHRV9TSElGVCkKKyNlbmRpZgorCisvKiBUaGUgbWFzayBjb252ZXJlZCBieSB0aGUgUlBOIG11c3QgYmUgYSBVTEwgb24gMzItYml0IHBsYXRmb3JtcyB3aXRoCisgKiA2NC1iaXQgUFRFcworICovCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKKyNkZWZpbmUgUFRFX1JQTl9NQVgJKDFVTEwgPDwgKDY0IC0gUFRFX1JQTl9TSElGVCkpCisjZGVmaW5lIFBURV9SUE5fTUFTSwkofigoMVVMTDw8UFRFX1JQTl9TSElGVCktMSkpCisjZWxzZQorI2RlZmluZSBQVEVfUlBOX01BWAkoMVVMIDw8ICgzMiAtIFBURV9SUE5fU0hJRlQpKQorI2RlZmluZSBQVEVfUlBOX01BU0sJKH4oKDFVTDw8UFRFX1JQTl9TSElGVCktMSkpCisjZW5kaWYKKworLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNjcm9zcworICogcGdwcm90IGNoYW5nZXMKKyAqLworI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TUEVDSUFMKQorCisvKiBNYXNrIG9mIGJpdHMgcmV0dXJuZWQgYnkgcHRlX3BncHJvdCgpICovCisjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKKwkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBfUEFHRV80S19QRk4gfCBcCisJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgXAorCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCisKKy8qCisgKiBXZSBkZWZpbmUgMiBzZXRzIG9mIGJhc2UgcHJvdCBiaXRzLCBvbmUgZm9yIGJhc2ljIHBhZ2VzIChpZSwKKyAqIGNhY2hlYWJsZSBrZXJuZWwgYW5kIHVzZXIgcGFnZXMpIGFuZCBvbmUgZm9yIG5vbiBjYWNoZWFibGUKKyAqIHBhZ2VzLiBXZSBhbHdheXMgc2V0IF9QQUdFX0NPSEVSRU5UIHdoZW4gU01QIGlzIGVuYWJsZWQgb3IKKyAqIHRoZSBwcm9jZXNzb3IgbWlnaHQgbmVlZCBpdCBmb3IgRE1BIGNvaGVyZW5jeS4KKyAqLworI2RlZmluZSBfUEFHRV9CQVNFX05DCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9QU0laRSkKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKQorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9CQVNFX05DIHwgX1BBR0VfQ09IRVJFTlQpCisjZWxzZQorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9CQVNFX05DKQorI2VuZGlmCisKKy8qIFBlcm1pc3Npb24gbWFza3MgdXNlZCB0byBnZW5lcmF0ZSB0aGUgX19QIGFuZCBfX1MgdGFibGUsCisgKgorICogTm90ZTpfX3BncHJvdCBpcyBkZWZpbmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKyAqCisgKiBXcml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zIGZvciBub3cgKHdlIGNvdWxkIG1ha2Ugd3JpdGUtb25seQorICogcGFnZXMgb24gQm9va0UgYnV0IHdlIGRvbid0IGJvdGhlciBmb3Igbm93KS4gRXhlY3V0ZSBwZXJtaXNzaW9uIGNvbnRyb2wgaXMKKyAqIHBvc3NpYmxlIG9uIHBsYXRmb3JtcyB0aGF0IGRlZmluZSBfUEFHRV9FWEVDCisgKgorICogTm90ZSBkdWUgdG8gdGhlIHdheSB2bSBmbGFncyBhcmUgbGFpZCBvdXQsIHRoZSBiaXRzIGFyZSBYV1IKKyAqLworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfQkFTRSkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVykKKyNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX0NPUFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisKKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfWAorI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9YCisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisKKy8qIFBlcm1pc3Npb24gbWFza3MgdXNlZCBmb3Iga2VybmVsIG1hcHBpbmdzICovCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUlcpCisjZGVmaW5lIFBBR0VfS0VSTkVMX05DCV9fcGdwcm90KF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9LRVJORUxfUlcgfCBcCisJCQkJIF9QQUdFX05PX0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9OQ0cJX19wZ3Byb3QoX1BBR0VfQkFTRV9OQyB8IF9QQUdFX0tFUk5FTF9SVyB8IFwKKwkJCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUlcgfCBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9ST1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0VYRUMpCisKKy8qIFByb3RlY3Rpb24gdXNlZCBmb3Iga2VybmVsIHRleHQuIFdlIHdhbnQgdGhlIGRlYnVnZ2VycyB0byBiZSBhYmxlIHRvCisgKiBzZXQgYnJlYWtwb2ludHMgYW55d2hlcmUsIHNvIGRvbid0IHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0CisgKiBvbiBwbGF0Zm9ybXMgd2hlcmUgc3VjaCBjb250cm9sIGlzIHBvc3NpYmxlLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCisJZGVmaW5lZChDT05GSUdfS1BST0JFUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfVEVYVAlQQUdFX0tFUk5FTF9YCisjZWxzZQorI2RlZmluZSBQQUdFX0tFUk5FTF9URVhUCVBBR0VfS0VSTkVMX1JPWAorI2VuZGlmCisKKy8qIE1ha2UgbW9kdWxlcyBjb2RlIGhhcHB5LiBXZSBkb24ndCBzZXQgUk8geWV0ICovCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJUEFHRV9LRVJORUxfWAorCisvKiBBZHZlcnRpc2Ugc3BlY2lhbCBtYXBwaW5nIHR5cGUgZm9yIEFHUCAqLworI2RlZmluZSBQQUdFX0FHUAkJKFBBR0VfS0VSTkVMX05DKQorI2RlZmluZSBIQVZFX1BBR0VfQUdQCisKKy8qIEFkdmVydGlzZSBzdXBwb3J0IGZvciBfUEFHRV9TUEVDSUFMICovCisjaWZkZWYgX1BBR0VfU1BFQ0lBTAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtZnNsLWJvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODIwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV9GU0xfQk9PS0VfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9ICisjaWZkZWYgX19LRVJORUxfXworCisvKiBQVEUgYml0IGRlZmluaXRpb25zIGZvciBGcmVlc2NhbGUgQm9va0UgU1cgbG9hZGVkIFRMQiBNTVUgYmFzZWQKKyAqIHByb2Nlc3NvcnMKKyAqCisgICBNTVUgQXNzaXN0IFJlZ2lzdGVyIDM6CisKKyAgIDMyIDMzIDM0IDM1IDM2ICAuLi4gNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMKKyAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIDAgIDAgVTAgVTEgVTIgVTMgVVggU1ggVVcgU1cgVVIgU1IKKworICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKworICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKyovCisKKy8qIERlZmluaXRpb25zIGZvciBGU0wgQm9vay1FIENvcmVzICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMQkvKiBTOiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDAwMDIJLyogUzogVXNlciBwYWdlIChtYXBzIHRvIFVSKSAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDIJLyogUzogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwMDA0CS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKFNXKSAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDA4CS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMTAJLyogSDogU1ggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwMDIwCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworCisjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDQwCS8qIEg6IEUgYml0ICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDA4MAkvKiBIOiBHIGJpdCAqLworI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAwCS8qIEg6IE0gYml0ICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAyMDAJLyogSDogSSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MDAJLyogSDogVyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwODAwIC8qIFM6IFNwZWNpYWwgcGFnZSAqLworCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLworI2RlZmluZSBfUFRFX05PTkVfTUFTSwkweGZmZmZmZmZmZmZmZjAwMDBVTEwKKy8qIFdlIGV4dGVuZCB0aGUgc2l6ZSBvZiB0aGUgUFRFIGZsYWdzIGFyZWEgd2hlbiB1c2luZyA2NC1iaXQgUFRFcyAqLworI2RlZmluZSBQVEVfUlBOX1NISUZUCShQQUdFX1NISUZUICsgOCkKKyNlbmRpZgorCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2gzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU1NzFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfSEFTSDMyX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV9IQVNIMzJfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZSAiY2xhc3NpYyIgMzItYml0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3dlclBDIE1NVSB1c2VzIGEgaGFzaAorICogdGFibGUgY29udGFpbmluZyBQVEVzLCB0b2dldGhlciB3aXRoIGEgc2V0IG9mIDE2IHNlZ21lbnQgcmVnaXN0ZXJzLAorICogdG8gZGVmaW5lIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KKyAqCisgKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5CisgKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKKyAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQorICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2hfbG93XzMyLlMKKyAqIChwcm9jZWR1cmUgaGFzaF9wYWdlKSBpcyByZXNwb25zaWJsZSBmb3IgZXh0cmFjdGluZyBwdGVzIGZyb20gdGhlCisgKiB0cmVlIGFuZCBwdXR0aW5nIHRoZW0gaW50byB0aGUgaGFzaCB0YWJsZSB3aGVuIG5lY2Vzc2FyeSwgYW5kCisgKiB1cGRhdGluZyB0aGUgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGJpdHMgaW4gdGhlIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEJLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMHgwMDIJLyogaGFzaF9wYWdlIGhhcyBtYWRlIGFuIEhQVEUgZm9yIHRoaXMgcHRlICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDQJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDA0CS8qIHVzZXJtb2RlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDgJLyogRzogcHJvaGliaXQgc3BlY3VsYXRpdmUgYWNjZXNzICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDEwCS8qIE06IGVuZm9yY2UgbWVtb3J5IGNvaGVyZW5jZSAoU01QIHN5c3RlbXMpICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDIwCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDQwCS8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwODAJLyogQzogcGFnZSBjaGFuZ2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MTAwCS8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9FWEVDCTB4MjAwCS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDQwMAkvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4ODAwCS8qIHNvZnR3YXJlOiBTcGVjaWFsIHBhZ2UgKi8KKworI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKy8qIFdlIG5ldmVyIGNsZWFyIHRoZSBoaWdoIHdvcmQgb2YgdGhlIHB0ZSAqLworI2RlZmluZSBfUFRFX05PTkVfTUFTSwkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHwgX1BBR0VfSEFTSFBURSkKKyNlbHNlCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCV9QQUdFX0hBU0hQVEUKKyNlbmRpZgorCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisvKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KKyNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV9IQVNIMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzNGU4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC00ay5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIFRvIGJlIGluY2x1ZGUgYnkgcGd0YWJsZS1oYXNoNjQuaCBvbmx5ICovCisKKy8qIFBURSBiaXRzICovCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMHgwNDAwIC8qIHNvZnR3YXJlOiBwdGUgaGFzIGFuIGFzc29jaWF0ZWQgSFBURSAqLworI2RlZmluZSBfUEFHRV9TRUNPTkRBUlkgMHg4MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGlzIGluIHNlY29uZGFyeSBncm91cCAqLworI2RlZmluZSBfUEFHRV9HUk9VUF9JWCAgMHg3MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGluZGV4IHdpdGhpbiBncm91cCAqLworI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgX1BBR0VfU0VDT05EQVJZCisjZGVmaW5lIF9QQUdFX0ZfR0lYICAgICBfUEFHRV9HUk9VUF9JWAorI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MTAwMDAgLyogc29mdHdhcmU6IHNwZWNpYWwgcGFnZSAqLworCisvKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IFwKKwkJCSBfUEFHRV9TRUNPTkRBUlkgfCBfUEFHRV9HUk9VUF9JWCkKKworLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCisjZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0ay5oCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaAppbmRleCA3Mzg5MDAzLi5lMDVkMjZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS02NGsuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaApAQCAtMSwyMiArMSw4MCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSAorLyogVG8gYmUgaW5jbHVkZSBieSBwZ3RhYmxlLWhhc2g2NC5oIG9ubHkgKi8KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKy8qIEFkZGl0aW9uYWwgUFRFIGJpdHMgKGRvbid0IGNoYW5nZSB3aXRob3V0IGNoZWNraW5nIGFzbSBpbiBoYXNoX2xvdy5TKSAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwMDA0MDAgLyogc29mdHdhcmU6IHNwZWNpYWwgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IUFRFX1NVQgkweDBmZmZmMDAwIC8qIGNvbWJvIG9ubHk6IHN1YiBwYWdlcyBIUFRFIGJpdHMgKi8KKyNkZWZpbmUgX1BBR0VfSFBURV9TVUIwCTB4MDgwMDAwMDAgLyogY29tYm8gb25seTogZmlyc3Qgc3ViIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfQ09NQk8JMHgxMDAwMDAwMCAvKiB0aGlzIGlzIGEgY29tYm8gNGsgcGFnZSAqLworI2RlZmluZSBfUEFHRV80S19QRk4JMHgyMDAwMDAwMCAvKiBQRk4gaXMgZm9yIGEgc2luZ2xlIDRrIHBhZ2UgKi8KIAorLyogRm9yIDY0SyBwYWdlLCB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgX1BBR0VfSEFTSFBURSBiaXQuIEluc3RlYWQsCisgKiB3ZSBzZXQgdGhhdCB0byBiZSB0aGUgd2hvbGUgc3ViLWJpdHMgbWFzay4gVGhlIEMgY29kZSB3aWxsIG9ubHkKKyAqIHRlc3QgdGhpcywgc28gYSBtdWx0aS1iaXQgbWFzayB3aWxsIHdvcmsuIEZvciBjb21ibyBwYWdlcywgdGhpcworICogaXMgZXF1aXZhbGVudCBhcyBlZmZlY3RpdmVseSwgdGhlIG9sZCBfUEFHRV9IQVNIUFRFIHdhcyBhbiBPUiBvZgorICogYWxsIHRoZSBzdWIgYml0cy4gRm9yIHJlYWwgNjRrIHBhZ2VzLCB3ZSBub3cgaGF2ZSB0aGUgYXNzZW1ibHkgc2V0CisgKiBfUEFHRV9IUFRFX1NVQjAgaW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgSElEWCBiaXRzIHdoaWNoIG92ZXJsYXAKKyAqIHRoYXQgbWFzay4gVGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIEhJRFggYml0cyBhcmUgbmV2ZXIgc2V0IG9uCisgKiBhIFBURSB0aGF0IGlzbid0IGhhc2hlZCwgd2hpY2ggaXMgdGhlIGNhc2UgdG9kYXkuCisgKgorICogQSBsaXR0bGUgbml0IGlzIGZvciB0aGUgaHVnZSBwYWdlIEMgY29kZSwgd2hpY2ggZG9lcyB0aGUgaGFzaGluZworICogaW4gQywgd2UgbmVlZCB0byBwcm92aWRlIHdoaWNoIGJpdCB0byB1c2UuCisgKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQlfUEFHRV9IUFRFX1NVQgogCi0jZGVmaW5lIFBURV9JTkRFWF9TSVpFICAxMgotI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTIKLSNkZWZpbmUgUFVEX0lOREVYX1NJWkUJMAotI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgNAorLyogTm90ZSB0aGUgZnVsbCBwYWdlIGJpdHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBmb3Igbm9ybWFsCisgKiA0ayBwYWdlcyBhcyB0aGUgc2FtZSBhc3NzZW1ibHkgd2lsbCBiZSB1c2VkIHRvIGluc2VydCA2NEsgcGFnZXMKKyAqIHdldGhlciB0aGUga2VybmVsIGhhcyBDT05GSUdfUFBDXzY0S19QQUdFUyBvciBub3QKKyAqLworI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgMHgwMDAwODAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLworI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgMHgwMDAwNzAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLworCisvKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IF9QQUdFX0NPTUJPKQorCisvKiBTaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUuCisgKgorICogVGhhdCBnaXZlcyB1cyBhIG1heCBSUE4gb2YgMzQgYml0cywgd2hpY2ggbWVhbnMgYSBtYXggb2YgNTAgYml0cworICogb2YgYWRkcmVzc2FibGUgcGh5c2ljYWwgc3BhY2UsIG9yIDQ2IGJpdHMgZm9yIHRoZSBzcGVjaWFsIDRrIFBGTnMuCisgKi8KKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMzApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocmVhbF9wdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKIAotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorLyoKKyAqIFdpdGggNjRLIHBhZ2VzIG9uIGhhc2ggdGFibGUsIHdlIGhhdmUgYSBzcGVjaWFsIFBURSBmb3JtYXQgdGhhdAorICogdXNlcyBhIHNlY29uZCAiaGFsZiIgb2YgdGhlIHBhZ2UgdGFibGUgdG8gZW5jb2RlIHN1Yi1wYWdlIGluZm9ybWF0aW9uCisgKiBpbiBvcmRlciB0byBkZWFsIHdpdGggNjRLIG1hZGUgb2YgNEsgSFcgcGFnZXMuIFRodXMgd2Ugb3ZlcnJpZGUgdGhlCisgKiBnZW5lcmljIGFjY2Vzc29ycyBhbmQgaXRlcmF0b3JzIGhlcmUKKyAqLworI2RlZmluZSBfX3JlYWxfcHRlKGUscCkgCSgocmVhbF9wdGVfdCkgeyBcCisJKGUpLCBwdGVfdmFsKCooKHApICsgUFRSU19QRVJfUFRFKSkgfSkKKyNkZWZpbmUgX19ycHRlX3RvX2hpZHgocixpbmRleCkJKChwdGVfdmFsKChyKS5wdGUpICYgX1BBR0VfQ09NQk8pID8gXAorICAgICAgICAoKChyKS5oaWR4ID4+ICgoaW5kZXgpPDwyKSkgJiAweGYpIDogKChwdGVfdmFsKChyKS5wdGUpID4+IDEyKSAmIDB4ZikpCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCisjZGVmaW5lIF9fcnB0ZV9zdWJfdmFsaWQocnB0ZSwgaW5kZXgpIFwKKwkocHRlX3ZhbChycHRlLnB0ZSkgJiAoX1BBR0VfSFBURV9TVUIwID4+IChpbmRleCkpKQorCisvKiBUcmljazogd2Ugc2V0IF9fZW5kIHRvIHZhICsgNjRrLCB3aGljaCBoYXBwZW5zIHdvcmtzIGZvcgorICogYSAxNk0gcGFnZSBhcyB3ZWxsIGFzIHdlIHdhbnQgb25seSBvbmUgaXRlcmF0aW9uCisgKi8KKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX3N1YnBhZ2VzKHJwdGUsIHBzaXplLCB2YSwgaW5kZXgsIHNoaWZ0KQkgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fZW5kID0gdmEgKyBQQUdFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgX19zcGxpdCA9IChwc2l6ZSA9PSBNTVVfUEFHRV80SyB8fCAgICAgICAgICAgICAgICAgXAorCQkJCSAgICBwc2l6ZSA9PSBNTVVfUEFHRV82NEtfQVApOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJZm9yIChpbmRleCA9IDA7IHZhIDwgX19lbmQ7IGluZGV4KyssIHZhICs9ICgxTCA8PCBzaGlmdCkpIHsgXAorCQkgICAgICAgIGlmICghX19zcGxpdCB8fCBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSkgZG8geyBcCisKKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCk7IH0gfSB3aGlsZSgwKQorCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlcCisJKCgocHRlKSAmIF9QQUdFX0NPTUJPKT8gTU1VX1BBR0VfNEs6IE1NVV9QQUdFXzY0SykKKworI2RlZmluZSByZW1hcF80a19wZm4odm1hLCBhZGRyLCBwZm4sIHByb3QpCQkJCVwKKwlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwJCVwKKwkJCV9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFXzRLX1BGTikpCisKIAogI2lmZGVmIENPTkZJR19QUENfU1VCUEFHRV9QUk9UCiAvKgpAQCAtNTUsMTAxICsxMTMsMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfU1VCUEFHRV9QUk9UICovCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCi0KLS8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLwotI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQQUdFX1NISUZUCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQotCi0vKiBBZGRpdGlvbmFsIFBURSBiaXRzIChkb24ndCBjaGFuZ2Ugd2l0aG91dCBjaGVja2luZyBhc20gaW4gaGFzaF9sb3cuUykgKi8KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwNDAwIC8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfSFBURV9TVUIJMHgwZmZmZjAwMCAvKiBjb21ibyBvbmx5OiBzdWIgcGFnZXMgSFBURSBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0hQVEVfU1VCMAkweDA4MDAwMDAwIC8qIGNvbWJvIG9ubHk6IGZpcnN0IHN1YiBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0NPTUJPCTB4MTAwMDAwMDAgLyogdGhpcyBpcyBhIGNvbWJvIDRrIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfNEtfUEZOCTB4MjAwMDAwMDAgLyogUEZOIGlzIGZvciBhIHNpbmdsZSA0ayBwYWdlICovCi0KLS8qIEZvciA2NEsgcGFnZSwgd2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIF9QQUdFX0hBU0hQVEUgYml0LiBJbnN0ZWFkLAotICogd2Ugc2V0IHRoYXQgdG8gYmUgdGhlIHdob2xlIHN1Yi1iaXRzIG1hc2suIFRoZSBDIGNvZGUgd2lsbCBvbmx5Ci0gKiB0ZXN0IHRoaXMsIHNvIGEgbXVsdGktYml0IG1hc2sgd2lsbCB3b3JrLiBGb3IgY29tYm8gcGFnZXMsIHRoaXMKLSAqIGlzIGVxdWl2YWxlbnQgYXMgZWZmZWN0aXZlbHksIHRoZSBvbGQgX1BBR0VfSEFTSFBURSB3YXMgYW4gT1Igb2YKLSAqIGFsbCB0aGUgc3ViIGJpdHMuIEZvciByZWFsIDY0ayBwYWdlcywgd2Ugbm93IGhhdmUgdGhlIGFzc2VtYmx5IHNldAotICogX1BBR0VfSFBURV9TVUIwIGluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIEhJRFggYml0cyB3aGljaCBvdmVybGFwCi0gKiB0aGF0IG1hc2suIFRoaXMgaXMgZmluZSBhcyBsb25nIGFzIHRoZSBISURYIGJpdHMgYXJlIG5ldmVyIHNldCBvbgotICogYSBQVEUgdGhhdCBpc24ndCBoYXNoZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHRvZGF5LgotICoKLSAqIEEgbGl0dGxlIG5pdCBpcyBmb3IgdGhlIGh1Z2UgcGFnZSBDIGNvZGUsIHdoaWNoIGRvZXMgdGhlIGhhc2hpbmcKLSAqIGluIEMsIHdlIG5lZWQgdG8gcHJvdmlkZSB3aGljaCBiaXQgdG8gdXNlLgotICovCi0jZGVmaW5lIF9QQUdFX0hBU0hQVEUJX1BBR0VfSFBURV9TVUIKLQotLyogTm90ZSB0aGUgZnVsbCBwYWdlIGJpdHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBmb3Igbm9ybWFsCi0gKiA0ayBwYWdlcyBhcyB0aGUgc2FtZSBhc3NzZW1ibHkgd2lsbCBiZSB1c2VkIHRvIGluc2VydCA2NEsgcGFnZXMKLSAqIHdldGhlciB0aGUga2VybmVsIGhhcyBDT05GSUdfUFBDXzY0S19QQUdFUyBvciBub3QKLSAqLwotI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgMHgwMDAwODAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLwotI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgMHgwMDAwNzAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLwotCi0vKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IF9QQUdFX0NPTUJPKQotCi0vKiBTaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUuCi0gKgotICogVGhhdCBnaXZlcyB1cyBhIG1heCBSUE4gb2YgMzQgYml0cywgd2hpY2ggbWVhbnMgYSBtYXggb2YgNTAgYml0cwotICogb2YgYWRkcmVzc2FibGUgcGh5c2ljYWwgc3BhY2UsIG9yIDQ2IGJpdHMgZm9yIHRoZSBzcGVjaWFsIDRrIFBGTnMuCi0gKi8KLSNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMzApCi0jZGVmaW5lIFBURV9SUE5fTUFYCSgxVUwgPDwgKDY0IC0gUFRFX1JQTl9TSElGVCkpCi0jZGVmaW5lIFBURV9SUE5fTUFTSwkofigoMVVMPDxQVEVfUlBOX1NISUZUKS0xKSkKLQotLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNjcm9zcwotICogcGdwcm90IGNoYW5nZXMKLSAqLwotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TUEVDSUFMKQotCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLwotI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QvUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KLSNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkweDFmZgotCi0vKiBNYW5pcHVsYXRlICJycHRlIiB2YWx1ZXMgKi8KLSNkZWZpbmUgX19yZWFsX3B0ZShlLHApIAkoKHJlYWxfcHRlX3QpIHsgXAotCShlKSwgcHRlX3ZhbCgqKChwKSArIFBUUlNfUEVSX1BURSkpIH0pCi0jZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCSgocHRlX3ZhbCgocikucHRlKSAmIF9QQUdFX0NPTUJPKSA/IFwKLSAgICAgICAgKCgocikuaGlkeCA+PiAoKGluZGV4KTw8MikpICYgMHhmKSA6ICgocHRlX3ZhbCgocikucHRlKSA+PiAxMikgJiAweGYpKQotI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCSgocikucHRlKQotI2RlZmluZSBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSBcCi0JKHB0ZV92YWwocnB0ZS5wdGUpICYgKF9QQUdFX0hQVEVfU1VCMCA+PiAoaW5kZXgpKSkKLQotCi0vKiBUcmljazogd2Ugc2V0IF9fZW5kIHRvIHZhICsgNjRrLCB3aGljaCBoYXBwZW5zIHdvcmtzIGZvcgotICogYSAxNk0gcGFnZSBhcyB3ZWxsIGFzIHdlIHdhbnQgb25seSBvbmUgaXRlcmF0aW9uCi0gKi8KLSNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX3N1YnBhZ2VzKHJwdGUsIHBzaXplLCB2YSwgaW5kZXgsIHNoaWZ0KQkgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fZW5kID0gdmEgKyBQQUdFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgX19zcGxpdCA9IChwc2l6ZSA9PSBNTVVfUEFHRV80SyB8fCAgICAgICAgICAgICAgICAgXAotCQkJCSAgICBwc2l6ZSA9PSBNTVVfUEFHRV82NEtfQVApOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZm9yIChpbmRleCA9IDA7IHZhIDwgX19lbmQ7IGluZGV4KyssIHZhICs9ICgxTCA8PCBzaGlmdCkpIHsgXAotCQkgICAgICAgIGlmICghX19zcGxpdCB8fCBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSkgZG8geyBcCi0KLSNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCk7IH0gfSB3aGlsZSgwKQotCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlcCi0JKCgocHRlKSAmIF9QQUdFX0NPTUJPKT8gTU1VX1BBR0VfNEs6IE1NVV9QQUdFXzY0SykKLQotI2RlZmluZSByZW1hcF80a19wZm4odm1hLCBhZGRyLCBwZm4sIHByb3QpCQkJCVwKLQlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwJCVwKLQkJCV9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFXzRLX1BGTikpCi0KLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOWVlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFX0hBU0g2NF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfSEFTSDY0X0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBDb21tb24gYml0cyBiZXR3ZWVuIDRLIGFuZCA2NEsgcGFnZXMgaW4gYSBsaW51eC1zdHlsZSBQVEUuCisgKiBUaGVzZSBtYXRjaCB0aGUgYml0cyBpbiB0aGUgKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkKKyAqIGFzIHBvc3NpYmxlLiBBZGRpdGlvbmFsIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS1oYXNoNjQtKi5oCisgKgorICogTm90ZTogV2Ugb25seSBzdXBwb3J0IHVzZXIgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gU3VwZXJ2aXNvciBhbHdheXMKKyAqIGhhdmUgZnVsbCByZWFkL3dyaXRlIHRvIHBhZ2VzIGFib3ZlIFBBR0VfT0ZGU0VUIChwYWdlcyBiZWxvdyB0aGF0CisgKiBhbHdheXMgdXNlIHRoZSB1c2VyIGFjY2VzcyBwZXJtaXNzaW9ucykuCisgKgorICogV2UgY291bGQgY3JlYXRlIHNlcGFyYXRlIGtlcm5lbCByZWFkLW9ubHkgaWYgd2UgdXNlZCB0aGUgMyBQUCBiaXRzCisgKiBjb21iaW5hdGlvbnMgdGhhdCBuZXdlciBwcm9jZXNzb3JzIHByb3ZpZGUgYnV0IHdlIGN1cnJlbnRseSBkb24ndC4KKyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX1VTRVIJCTB4MDAwMiAvKiBtYXRjaGVzIG9uZSBvZiB0aGUgUFAgYml0cyAqLworI2RlZmluZSBfUEFHRV9GSUxFCQkweDAwMDIgLyogKCFwcmVzZW50IG9ubHkpIHNvZnR3YXJlOiBwdGUgaG9sZHMgZmlsZSBvZmZzZXQgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECQkweDAwMDgKKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJCTB4MDAxMCAvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCQkweDAwNDAgLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkJMHgwMDgwIC8qIEM6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9SVwkJMHgwMjAwIC8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0JVU1kJCTB4MDgwMCAvKiBzb2Z0d2FyZTogUFRFICYgaGFzaCBhcmUgYnVzeSAqLworCisvKiBObyBzZXBhcmF0ZSBrZXJuZWwgcmVhZC1vbmx5ICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpIC8qIHVzZXIgYWNjZXNzIGJsb2NrZWQgYnkga2V5ICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkJIF9QQUdFX0tFUk5FTF9SVworCisvKiBTdHJvbmcgQWNjZXNzIE9yZGVyaW5nICovCisjZGVmaW5lIF9QQUdFX1NBTwkJKF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfQ09IRVJFTlQpCisKKy8qIE5vIHBhZ2Ugc2l6ZSBlbmNvZGluZyBpbiB0aGUgbGludXggUFRFICovCisjZGVmaW5lIF9QQUdFX1BTSVpFCQkwCisKKy8qIFBURUlEWCBuaWJibGUgKi8KKyNkZWZpbmUgX1BURUlEWF9TRUNPTkRBUlkJMHg4CisjZGVmaW5lIF9QVEVJRFhfR1JPVVBfSVgJMHg3CisKKy8qIEhhc2ggdGFibGUgYmFzZWQgcGxhdGZvcm1zIG5lZWQgYXRvbWljIHVwZGF0ZXMgb2YgdGhlIGxpbnV4IFBURSAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC02NGsuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoNjQtNGsuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0hBU0g2NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKaW5kZXggZjQ4NGEzNC4uYzlmZjFlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaApAQCAtMTU1LDYgKzE1NSw4IEBACiAjZGVmaW5lICAgQ1RSTF9SVU5MQVRDSAkweDEKICNkZWZpbmUgU1BSTl9EQUJSCTB4M0Y1CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCiAjZGVmaW5lICAgREFCUl9UUkFOU0xBVElPTgkoMVVMIDw8IDIpCisjZGVmaW5lICAgREFCUl9EQVRBX1dSSVRFCSgxVUwgPDwgMSkKKyNkZWZpbmUgICBEQUJSX0RBVEFfUkVBRAkoMVVMIDw8IDApCiAjZGVmaW5lIFNQUk5fREFCUjIJMHgxM0QJLyogZTMwMCAqLwogI2RlZmluZSBTUFJOX0RBQlJYCTB4M0Y3CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyIEV4dGVuc2lvbiAqLwogI2RlZmluZSAgIERBQlJYX1VTRVIJKDFVTCA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDY3NDUzNzYuLmE1NmY0ZDYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIF9fQVNNX1BPV0VSUENfUkVHX0JPT0tFX0hfXwogCiAvKiBNYWNoaW5lIFN0YXRlIFJlZ2lzdGVyIChNU1IpIEZpZWxkcyAqLworI2RlZmluZSBNU1JfR1MJCSgxPDwyOCkgLyogR3Vlc3Qgc3RhdGUgKi8KICNkZWZpbmUgTVNSX1VDTEUJKDE8PDI2KQkvKiBVc2VyLW1vZGUgY2FjaGUgbG9jayBlbmFibGUgKi8KICNkZWZpbmUgTVNSX1NQRQkJKDE8PDI1KQkvKiBFbmFibGUgU1BFICovCiAjZGVmaW5lIE1TUl9EV0UJCSgxPDwxMCkJLyogRGVidWcgV2FpdCBFbmFibGUgKi8KQEAgLTExMCw2ICsxMTEsNyBAQAogI2RlZmluZSBTUFJOX0wxQ1NSMAkweDNGMgkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0wxQ1NSMQkweDNGMwkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX01NVUNTUjAJMHgzRjQJLyogTU1VIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTU1VQ0ZHCTB4M0Y3CS8qIE1NVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fUElUCTB4M0RCCS8qIFByb2dyYW1tYWJsZSBJbnRlcnZhbCBUaW1lciAqLwogI2RlZmluZSBTUFJOX0JVQ1NSCTB4M0Y1CS8qIEJyYW5jaCBVbml0IENvbnRyb2wgYW5kIFN0YXR1cyAqLwogI2RlZmluZSBTUFJOX0wyQ1NSMAkweDNGOQkvKiBMMiBEYXRhIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMmE0YmUxOS4uZjYxMjc5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtNTMxLDcgKzUzMSw3IEBACiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pIF9fY21weGNoZzY0X2xvY2FsX2dlbmVyaWMoKHB0ciksIChvKSwgKG4pKQogI2VuZGlmCiAKLSNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfYWxpZ25fc3RhY2sodW5zaWduZWQgbG9uZyBzcCk7CiAKIC8qIFVzZWQgaW4gdmVyeSBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24uICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyByZWxvY19vZmZzZXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDk2NjVhMjYuLjlhYmE1YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMiw4ICsxMiwxMCBAQAogCiAvKiBXZSBoYXZlIDhrIHN0YWNrcyBvbiBwcGMzMiBhbmQgMTZrIG9uIHBwYzY0ICovCiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKICNkZWZpbmUgVEhSRUFEX1NISUZUCQkxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDXzI1NktfUEFHRVMpCisjZGVmaW5lIFRIUkVBRF9TSElGVAkJMTUKICNlbHNlCiAjZGVmaW5lIFRIUkVBRF9TSElGVAkJMTMKICNlbmRpZgpAQCAtMTU0LDYgKzE1NiwxMyBAQAogCXRpLT5sb2NhbF9mbGFncyB8PSBfVExGX1JFU1RPUkVfU0lHTUFTSzsKIAlzZXRfYml0KFRJRl9TSUdQRU5ESU5HLCAmdGktPmZsYWdzKTsKIH0KKworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBpc18zMmJpdF90YXNrKCkJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKKyNlbHNlCisjZGVmaW5lIGlzXzMyYml0X3Rhc2soKQkoMSkKKyNlbmRpZgorCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKaW5kZXggNjQxOGNlZS4uY2QyMWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykoY2hhciBjKTsKK2V4dGVybiB2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBleHRlcm4gaW50ICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDhkMWE0MTkuLjcxOTAxZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTIgKzE4LDEwIEBACiBDRkxBR1NfUkVNT1ZFX3Byb21faW5pdC5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBDRkxBR1NfUkVNT1ZFX2J0ZXh0Lm8gPSAtcGcgLW1uby1zY2hlZC1lcGlsb2cKIENGTEFHU19SRU1PVkVfcHJvbS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi0KLWlmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotIyBkeW5hbWljIGZ0cmFjZSBzZXR1cC4KKyMgZG8gbm90IHRyYWNlIHRyYWNlciBjb2RlCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi1lbmRpZgotCisjIHRpbWVycyB1c2VkIGJ5IHRyYWNpbmcKK0NGTEFHU19SRU1PVkVfdGltZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBlbmRpZgogCiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXApAQCAtNjEsNiArNTksNyBAQAogb2JqNjQtJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcF9hc202NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vIG1vZHVsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR180NHgpCQkrPSBjcHVfc2V0dXBfNDR4Lm8KK29iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBjcHVfc2V0dXBfZnNsX2Jvb2tlLm8gZGJlbGwubwogCiBleHRyYS0kKENPTkZJR19QUENfU1REX01NVSkJOj0gaGVhZF8zMi5vCiBleHRyYS0kKENPTkZJR19QUEM2NCkJCTo9IGhlYWRfNjQubwpAQCAtNzYsNyArNzUsNyBAQAogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwotb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubworb2JqLSQoQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUpCSs9IHByb21faW5pdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHBwY19rc3ltcy5vCiBvYmotJChDT05GSUdfQk9PVFhfVEVYVCkJKz0gYnRleHQubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCkBAIC05NCw2ICs5Myw3IEBACiBvYmo2NC0kKENPTkZJR19BVURJVCkJCSs9IGNvbXBhdF9hdWRpdC5vCiAKIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiAKIG9iai0kKENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSkgKz0gc29mdGVtdTh4eC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCA3M2NiNmEzLi41ZmZjZmFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl7IDQsIFNUK0YrUytVIH0sCS8qIDExIDEgMTAxMDogc3Rmc3V4ICovCiAJeyA4LCBTVCtGK1UgfSwJCS8qIDExIDEgMTAxMTogc3RmZHV4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTEwMCAqLwotCUlOVkFMSUQsCQkvKiAxMSAxIDExMDEgKi8KKwl7IDQsIExEK0YgfSwJCS8qIDExIDEgMTEwMTogbGZpd3p4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTExMCAqLwogCUlOVkFMSUQsCQkvKiAxMSAxIDExMTEgKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNDJmZTRkYS4uMWU0MGJjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjg0LDkgKzI4NCw2IEBACiAjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEFib3V0IHRoZSBDUFUgZmVhdHVyZXMgdGFibGUgKi8KLQlERUZJTkUoQ1BVX1NQRUNfRU5UUllfU0laRSwgc2l6ZW9mKHN0cnVjdCBjcHVfc3BlYykpOwotCURFRklORShDUFVfU1BFQ19QVlJfTUFTSywgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBwdnJfbWFzaykpOwotCURFRklORShDUFVfU1BFQ19QVlJfVkFMVUUsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgcHZyX3ZhbHVlKSk7CiAJREVGSU5FKENQVV9TUEVDX0ZFQVRVUkVTLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIGNwdV9mZWF0dXJlcykpOwogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAlERUZJTkUoQ1BVX1NQRUNfUkVTVE9SRSwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfcmVzdG9yZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwppbmRleCAxMGI0YWIxLi43ZDYwNmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwpAQCAtMzQsNiArMzQsNyBAQAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV80NjBleCkKIF9HTE9CQUwoX19zZXR1cF9jcHVfNDYwZ3QpCitfR0xPQkFMKF9fc2V0dXBfY3B1XzQ2MHN4KQogCW1mbHIJcjQKIAlibAlfX2luaXRfZnB1XzQ0eAogCWJsCV9fZml4dXBfNDQwQV9tY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNzJkMWQ3My4uNTRmNzY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTE1LDkgKzE1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjAzKQogCW1mbHIJcjQKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIxMCwwCisJbXRzcHIJU1BSTl9TUFJHNCxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbG93IGxldmVsIENQVSBzZXR1cCBmdW5jdGlvbnMuCisgKiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKK19HTE9CQUwoX19zZXR1cF9jcHVfZTIwMCkKKwkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KKwltZnNwcglyMyxTUFJOX0hJRDAKKwlvcmkJcjMscjMsSElEMF9EQVBVRU5AbAorCW10c3ByCVNQUk5fSElEMCxyMworCWIJX19zZXR1cF9lMjAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDB2MSkKK19HTE9CQUwoX19zZXR1cF9jcHVfZTUwMHYyKQorCWIJX19zZXR1cF9lNTAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDBtYykKKwliCV9fc2V0dXBfZTUwMG1jX2l2b3JzCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA5MjNmODdhLi5jZDFiNjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNSw2ICszNSwxMCBAQAogICogYW5kIHBwYzY0CiAgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2UyMDAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjEodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwbWModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NDBlcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGVweCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGd4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwpAQCAtNDMsNiArNDcsNyBAQAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDQweDUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NjBleCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ2MGd0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDYwc3godW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyAqc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC03MjYsNiArNzMxLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCByZXYgMi4wIG11c3QgZGlzYWJsZSBISUQwW0RQTV0gKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCkBAIC03NDEsNiArNzQ4LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCAoQWxsIHJldnMgZXhjZXB0IDIuMCkgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCkBAIC03NTYsNiArNzY1LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc1MEdYICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtNzcxLDYgKzc4Miw4IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwZngsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDAvNzUwIChMMkNSIGJpdCBuZWVkIGZpeHVwIGZvciA3NDApICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtMTA3Nyw3ICsxMDkwLDggQEAKIAkJLmNwdV9uYW1lCQk9ICJlMzAwYzIiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0UzMDBDMiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUywKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMgfAorCQkJTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzYwMywKQEAgLTEwOTAsNyArMTEwNCw4IEBACiAJCS5jcHVfbmFtZQkJPSAiZTMwMGMzIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FMzAwLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUiwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTIHwKKwkJCU1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV82MDMsCkBAIC0xMTA1LDcgKzExMjAsOCBAQAogCQkuY3B1X25hbWUJCT0gImUzMDBjNCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTMwMCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVIsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUyB8CisJCQlNTVVfRlRSX05FRURfRFRMQl9TV19MUlUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNjAzLApAQCAtMTYzNCw2ICsxNjUwLDE5IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAogCX0sCisJeyAvKiA0NjBTWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmZmYwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDEzNTQxODAwLAorCQkuY3B1X25hbWUJCT0gIjQ2MFNYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80NHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNDYwc3gsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCkBAIC0xNjg3LDYgKzE3MTYsNyBAQAogCQkJUFBDX0ZFQVRVUkVfVU5JRklFRF9DQUNIRSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTIwMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lMjAwLAogCQkucGxhdGZvcm0JCT0gInBwYzU1NTQiLAogCX0KQEAgLTE3MDYsNiArMTczNiw3IEBACiAJCS5udW1fcG1jcwkJPSA0LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjL2U1MDAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRlNMX0VNQiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9lNTAwdjEsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZTUwMCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM4NTQwIiwKIAl9LApAQCAtMTcyNCw2ICsxNzU1LDcgQEAKIAkJLm51bV9wbWNzCQk9IDQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGMvZTUwMCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9GU0xfRU1CLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X2U1MDB2MiwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lNTAwLAogCQkucGxhdGZvcm0JCT0gInBwYzg1NDgiLAogCX0sCkBAIC0xNzMzLDEyICsxNzY1LDE0IEBACiAJCS5jcHVfbmFtZQkJPSAiZTUwMG1jIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAorCQkJTU1VX0ZUUl9VU0VfVExCSUxYLAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LAogCQkuZGNhY2hlX2JzaXplCQk9IDY0LAogCQkubnVtX3BtY3MJCT0gNCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwIiwgLyogeHh4IC0gZ2FsYWssIGU1MDBtYz8gKi8KIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0ZTTF9FTUIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTUwMG1jLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2U1MDAsCiAJCS5wbGF0Zm9ybQkJPSAicHBjZTUwMG1jIiwKIAl9LApAQCAtMTc2Miw3NCArMTc5Niw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9zcGVjIHRoZV9jcHVfc3BlYzsKIAorc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9zcGVjKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMgKnMpCit7CisJc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKKwlzdHJ1Y3QgY3B1X3NwZWMgb2xkOworCisJdCA9IFBUUlJFTE9DKHQpOworCW9sZCA9ICp0OworCisJLyogQ29weSBldmVyeXRoaW5nLCB0aGVuIGRvIGZpeHVwcyAqLworCSp0ID0gKnM7CisKKwkvKgorCSAqIElmIHdlIGFyZSBvdmVycmlkaW5nIGEgcHJldmlvdXMgdmFsdWUgZGVyaXZlZCBmcm9tIHRoZSByZWFsCisJICogUFZSIHdpdGggYSBuZXcgdmFsdWUgb2J0YWluZWQgdXNpbmcgYSBsb2dpY2FsIFBWUiB2YWx1ZSwKKwkgKiBkb24ndCBtb2RpZnkgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgZmllbGRzLgorCSAqLworCWlmIChvbGQubnVtX3BtY3MgJiYgIXMtPm51bV9wbWNzKSB7CisJCXQtPm51bV9wbWNzID0gb2xkLm51bV9wbWNzOworCQl0LT5wbWNfdHlwZSA9IG9sZC5wbWNfdHlwZTsKKwkJdC0+b3Byb2ZpbGVfdHlwZSA9IG9sZC5vcHJvZmlsZV90eXBlOworCQl0LT5vcHJvZmlsZV9tbWNyYV9zaWh2ID0gb2xkLm9wcm9maWxlX21tY3JhX3NpaHY7CisJCXQtPm9wcm9maWxlX21tY3JhX3NpcHIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfc2lwcjsKKwkJdC0+b3Byb2ZpbGVfbW1jcmFfY2xlYXIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfY2xlYXI7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UgYmVmb3JlIGFuZAorCQkgKiBoYXZlIHB1bGxlZCB0aGUgZGVmYXVsdCBjYXNlIGJlY2F1c2UgdGhlIHJlYWwgUFZSIHdhcworCQkgKiBub3QgZm91bmQgaW5zaWRlIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseQorCQkgKiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkgbW9kZS4gSW4gdGhhdCBjYXNlLCBsZXQgdGhlCisJCSAqIG9wcm9maWxlciBrbm93IHdoaWNoIHNldCBvZiBjb21wYXRpYmlsaXR5IGNvdW50ZXJzIHRvCisJCSAqIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUgb3Byb2ZpbGVfY3B1X3R5cGUgc3RyaW5nCisJCSAqIGlzIHNldCB0byB0aGF0IG9mIGNvbXBhdGliaWxpdHkgbW9kZS4gSWYgdGhlCisJCSAqIG9wcm9maWxlX2NwdV90eXBlIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlCisJCSAqIHBvc3NpYmx5IG92ZXJyaWRpbmcgYSByZWFsIFBWUiB3aXRoIGEgbG9naWNhbCBvbmUsCisJCSAqIGFuZCwgaW4gdGhhdCBjYXNlLCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvcgorCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KKwkJICovCisJCWlmIChvbGQub3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKKwkJCXQtPm9wcm9maWxlX2NwdV90eXBlID0gcy0+b3Byb2ZpbGVfY3B1X3R5cGU7CisJfQorCisJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKKworCS8qCisJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCisJICogd2UncmUgY2FsbGVkIHdpdGggcmVhbCBwdnIgZmlyc3QuCisJICovCisJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQorCQkqUFRSUkVMT0MoJnBvd2VycGNfYmFzZV9wbGF0Zm9ybSkgPSB0LT5wbGF0Zm9ybTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKwkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgc2V0dXBfY3B1IGZvcgorCSAqIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUgdGhhdCBhdCBhIGxhdGVyIHRpbWUsIGZvciBub3csCisJICoganVzdCB1c2UgI2lmZGVmLiBXZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uCisJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKKwkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgorCSAqLworCWlmIChzLT5jcHVfc2V0dXApIHsKKwkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KK30KKwogc3RydWN0IGNwdV9zcGVjICogX19pbml0IGlkZW50aWZ5X2NwdSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgaW50IHB2cikKIHsKIAlzdHJ1Y3QgY3B1X3NwZWMgKnMgPSBjcHVfc3BlY3M7Ci0Jc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKIAlpbnQgaTsKIAogCXMgPSBQVFJSRUxPQyhzKTsKLQl0ID0gUFRSUkVMT0ModCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcHVfc3BlY3MpOyBpKysscysrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdV9zcGVjcyk7IGkrKyxzKyspIHsKIAkJaWYgKChwdnIgJiBzLT5wdnJfbWFzaykgPT0gcy0+cHZyX3ZhbHVlKSB7Ci0JCQkvKgotCQkJICogSWYgd2UgYXJlIG92ZXJyaWRpbmcgYSBwcmV2aW91cyB2YWx1ZSBkZXJpdmVkCi0JCQkgKiBmcm9tIHRoZSByZWFsIFBWUiB3aXRoIGEgbmV3IHZhbHVlIG9idGFpbmVkCi0JCQkgKiB1c2luZyBhIGxvZ2ljYWwgUFZSIHZhbHVlLCBkb24ndCBtb2RpZnkgdGhlCi0JCQkgKiBwZXJmb3JtYW5jZSBtb25pdG9yIGZpZWxkcy4KLQkJCSAqLwotCQkJaWYgKHQtPm51bV9wbWNzICYmICFzLT5udW1fcG1jcykgewotCQkJCXQtPmNwdV9uYW1lID0gcy0+Y3B1X25hbWU7Ci0JCQkJdC0+Y3B1X2ZlYXR1cmVzID0gcy0+Y3B1X2ZlYXR1cmVzOwotCQkJCXQtPmNwdV91c2VyX2ZlYXR1cmVzID0gcy0+Y3B1X3VzZXJfZmVhdHVyZXM7Ci0JCQkJdC0+aWNhY2hlX2JzaXplID0gcy0+aWNhY2hlX2JzaXplOwotCQkJCXQtPmRjYWNoZV9ic2l6ZSA9IHMtPmRjYWNoZV9ic2l6ZTsKLQkJCQl0LT5jcHVfc2V0dXAgPSBzLT5jcHVfc2V0dXA7Ci0JCQkJdC0+Y3B1X3Jlc3RvcmUgPSBzLT5jcHVfcmVzdG9yZTsKLQkJCQl0LT5wbGF0Zm9ybSA9IHMtPnBsYXRmb3JtOwotCQkJCS8qCi0JCQkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UKLQkJCQkgKiBiZWZvcmUgYW5kIGhhdmUgcHVsbGVkIHRoZSBkZWZhdWx0IGNhc2UKLQkJCQkgKiBiZWNhdXNlIHRoZSByZWFsIFBWUiB3YXMgbm90IGZvdW5kIGluc2lkZQotCQkJCSAqIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseSBydW5uaW5nIGluCi0JCQkJICogY29tcGF0aWJpbGl0eSBtb2RlLiBJbiB0aGF0IGNhc2UsIGxldCB0aGUKLQkJCQkgKiBvcHJvZmlsZXIga25vdyB3aGljaCBzZXQgb2YgY29tcGF0aWJpbGl0eQotCQkJCSAqIGNvdW50ZXJzIHRvIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZSBzdHJpbmcgaXMgc2V0IHRvIHRoYXQgb2YKLQkJCQkgKiBjb21wYXRpYmlsaXR5IG1vZGUuIElmIHRoZSBvcHJvZmlsZV9jcHVfdHlwZQotCQkJCSAqIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlIHBvc3NpYmx5Ci0JCQkJICogb3ZlcnJpZGluZyBhIHJlYWwgUFZSIHdpdGggYSBsb2dpY2FsIG9uZSwgYW5kLAotCQkJCSAqIGluIHRoYXQgY2FzZSwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KLQkJCQkgKi8KLQkJCQlpZiAodC0+b3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKLQkJCQkJdC0+b3Byb2ZpbGVfY3B1X3R5cGUgPSBzLT5vcHJvZmlsZV9jcHVfdHlwZTsKLQkJCX0gZWxzZQotCQkJCSp0ID0gKnM7Ci0JCQkqUFRSUkVMT0MoJmN1cl9jcHVfc3BlYykgPSAmdGhlX2NwdV9zcGVjOwotCi0JCQkvKgotCQkJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCi0JCQkgKiB3ZSdyZSBjYWxsZWQgd2l0aCByZWFsIHB2ciBmaXJzdC4KLQkJCSAqLwotCQkJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQotCQkJCSpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9IHQtPnBsYXRmb3JtOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkJLyogcHBjNjQgYW5kIGJvb2tlIGV4cGVjdCBpZGVudGlmeV9jcHUgdG8gYWxzbyBjYWxsCi0JCQkgKiBzZXR1cF9jcHUgZm9yIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUKLQkJCSAqIHRoYXQgYXQgYSBsYXRlciB0aW1lLCBmb3Igbm93LCBqdXN0IHVzZSAjaWZkZWYuCi0JCQkgKiB3ZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKLQkJCSAqIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwKLQkJCSAqIG1vZGUgb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KLQkJCSAqLwotCQkJaWYgKHMtPmNwdV9zZXR1cCkgewotCQkJCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KKwkJCXNldHVwX2NwdV9zcGVjKG9mZnNldCwgcyk7CiAJCQlyZXR1cm4gczsKIAkJfQorCX0KKwogCUJVRygpOworCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDE5NjcxYWMuLjVmYjY2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogYnJhbmNoIHRvICJhZGRyIiB3ZSBqdW1wIHRvICgiYWRkciIgKyAzMiBNQikuIEFsdGhvdWdoIGl0IHJlcXVpcmVzCiAJICogdHdvIGluc3RydWN0aW9ucyBpdCBkb2Vzbid0IHJlcXVpcmUgYW55IHJlZ2lzdGVycy4KIAkgKi8KLQlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfTk9QX0lOU1RSKTsKKwlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfSU5TVF9OT1ApOwogCXBhdGNoX2JyYW5jaCgrK3AsIGFkZHIgKyBQSFlTSUNBTF9TVEFSVCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorCisjaWZkZWYgQ09ORklHX1NNUAordW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKKwordm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit7CisJaW50IGk7CisKKwlpZih0YXJnZXQgPCBOUl9DUFVTKSB7CisJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbdGFyZ2V0XSk7CisJCXBwY19tc2dzbmQoUFBDX0RCRUxMLCAwLCB0YXJnZXQpOworCX0KKwllbHNlIGlmKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOworCQkJc2V0X2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtpXSk7CisJCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaSk7CisJCX0KKwl9CisJZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOworCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgUFBDX0RCRUxMX01TR19CUkRDQVNULCAwKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA2ZjdlYjdlLi40ZGQzOGYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02Myw3ICs2Myw3IEBACiAKIAkuZ2xvYmwJY3JpdF90cmFuc2Zlcl90b19oYW5kbGVyCiBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFX01NVQogCW1mc3ByCXIwLFNQUk5fTUFTMAogCXN0dwlyMCxNQVMwKHIxMSkKIAltZnNwcglyMCxTUFJOX01BUzEKQEAgLTc4LDcgKzc4LDcgQEAKIAltZnNwcglyMCxTUFJOX01BUzcKIAlzdHcJcjAsTUFTNyhyMTEpCiAjZW5kaWYgLyogQ09ORklHX1BIWVNfNjRCSVQgKi8KLSNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0VfTU1VICovCiAjaWZkZWYgQ09ORklHXzQ0eAogCW1mc3ByCXIwLFNQUk5fTU1VQ1IKIAlzdHcJcjAsTU1VQ1IocjExKQpAQCAtOTE0LDcgKzkxNCw3IEBACiAJbXRzcHIJU1BSTl8jI2V4Y19sdmxfc3JyMCxyOTsJCQkJCVwKIAltdHNwcglTUFJOXyMjZXhjX2x2bF9zcnIxLHIxMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNFX01NVSkKICNpZmRlZiBDT05GSUdfUEhZU182NEJJVAogI2RlZmluZQlSRVNUT1JFX01BUzcJCQkJCQkJXAogCWx3eglyMTEsTUFTNyhyMSk7CQkJCQkJXApAQCAtOTU2LDcgKzk1Niw3IEBACiAJbHd6CXIxMCxjcml0X3NycjFAbChyMTApOwogCW10c3ByCVNQUk5fU1JSMCxyOTsKIAltdHNwcglTUFJOX1NSUjEscjEwOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBSRkNJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBQUENfUkZDSSkKICNlbmRpZiAvKiBDT05GSUdfNDB4ICovCiAKICNpZmRlZiBDT05GSUdfQk9PS0UKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCXN0dwlyMTAsS1NQX0xJTUlUKHI5KQogCVJFU1RPUkVfeFNSUihTUlIwLFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFJGQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFBQQ19SRkNJKQogCiAJLmdsb2JsCXJldF9mcm9tX2RlYnVnX2V4YwogcmV0X2Zyb21fZGVidWdfZXhjOgpAQCAtOTgxLDcgKzk4MSw3IEBACiAJUkVTVE9SRV94U1JSKFNSUjAsU1JSMSk7CiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX01NVV9SRUdTOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBSRkRJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBQUENfUkZESSkKIAogCS5nbG9ibAlyZXRfZnJvbV9tY2hlY2tfZXhjCiByZXRfZnJvbV9tY2hlY2tfZXhjOgpAQCAtOTkyLDcgKzk5Miw3IEBACiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX3hTUlIoRFNSUjAsRFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUkZNQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUFBDX1JGTUNJKQogI2VuZGlmIC8qIENPTkZJR19CT09LRSAqLwogCiAvKgpAQCAtMTE3Niw1OSArMTE3NiwyNyBAQAogCWJjdHIKIAogX0dMT0JBTChmdHJhY2VfY2FsbGVyKQotCS8qIEJhc2VkIG9mZiBvZiBvYmpkdW1wIG9wdHB1dCBmcm9tIGdsaWJjICovCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKwlNQ09VTlRfU0FWRV9GUkFNRQorCS8qIHIzIGVuZHMgdXAgd2l0aCBsaW5rIHJlZ2lzdGVyICovCiAJc3ViaQlyMywgcjMsIE1DT1VOVF9JTlNOX1NJWkUKIC5nbG9ibCBmdHJhY2VfY2FsbAogZnRyYWNlX2NhbGw6CiAJYmwJZnRyYWNlX3N0dWIKIAlub3AKLQlsd3oJcjYsIDgocjEpCi0JbHd6CXIwLCA0NChyMSkKLQlsd3oJcjMsIDEyKHIxKQotCW10Y3RyCXIwCi0JbHd6CXI0LCAxNihyMSkKLQltdGNyCXI2Ci0JbHd6CXI1LCAyMChyMSkKLQlsd3oJcjYsIDI0KHIxKQotCWx3eglyMCwgNTIocjEpCi0JbHd6CXI3LCAyOChyMSkKLQlsd3oJcjgsIDMyKHIxKQotCW10bHIJcjAKLQlsd3oJcjksIDM2KHIxKQotCWx3eglyMTAsNDAocjEpCi0JYWRkaQlyMSwgcjEsIDQ4CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCisJTUNPVU5UX1JFU1RPUkVfRlJBTUUKKwkvKiBvbGQgbGluayByZWdpc3RlciBlbmRzIHVwIGluIGN0ciByZWcgKi8KIAliY3RyCiAjZWxzZQogX0dMT0JBTChtY291bnQpCiBfR0xPQkFMKF9tY291bnQpCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKworCU1DT1VOVF9TQVZFX0ZSQU1FCiAKIAlzdWJpCXIzLCByMywgTUNPVU5UX0lOU05fU0laRQogCUxPQURfUkVHX0FERFIocjUsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbikKQEAgLTEyMzYsMjggKzEyMDQsNTUgQEAKIAogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAogCi0JbHd6CXI2LCA4KHIxKQotCWx3eglyMCwgNDQocjEpCi0JbHd6CXIzLCAxMihyMSkKLQltdGN0cglyMAotCWx3eglyNCwgMTYocjEpCi0JbXRjcglyNgotCWx3eglyNSwgMjAocjEpCi0JbHd6CXI2LCAyNChyMSkKLQlsd3oJcjAsIDUyKHIxKQotCWx3eglyNywgMjgocjEpCi0JbHd6CXI4LCAzMihyMSkKLQltdGxyCXIwCi0JbHd6CXI5LCAzNihyMSkKLQlsd3oJcjEwLDQwKHIxKQotCWFkZGkJcjEsIHIxLCA0OAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwliCWZ0cmFjZV9ncmFwaF9jYWxsZXIKKyNlbmRpZgorCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCiAJYmN0cgogI2VuZGlmCiAKIF9HTE9CQUwoZnRyYWNlX3N0dWIpCiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisJLyogbG9hZCByNCB3aXRoIGxvY2FsIGFkZHJlc3MgKi8KKwlsd3oJcjQsIDQ0KHIxKQorCXN1YmkJcjQsIHI0LCBNQ09VTlRfSU5TTl9TSVpFCisKKwkvKiBnZXQgdGhlIHBhcmVudCBhZGRyZXNzICovCisJYWRkaQlyMywgcjEsIDUyCisKKwlibAlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCisJLyogb2xkIGxpbmsgcmVnaXN0ZXIgZW5kcyB1cCBpbiBjdHIgcmVnICovCisJYmN0cgorCitfR0xPQkFMKHJldHVybl90b19oYW5kbGVyKQorCS8qIG5lZWQgdG8gc2F2ZSByZXR1cm4gdmFsdWVzICovCisJc3R3dQlyMSwgLTMyKHIxKQorCXN0dwlyMywgMjAocjEpCisJc3R3CXI0LCAxNihyMSkKKwlzdHcJcjMxLCAxMihyMSkKKwltcglyMzEsIHIxCisKKwlibAlmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlub3AKKworCS8qIHJldHVybiB2YWx1ZSBoYXMgcmVhbCByZXR1cm4gYWRkcmVzcyAqLworCW10bHIJcjMKKworCWx3eglyMywgMjAocjEpCisJbHd6CXI0LCAxNihyMSkKKwlsd3oJcjMxLDEyKHIxKQorCWx3eglyMSwgMChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCiAjZW5kaWYgLyogQ09ORklHX01DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDM4M2VkNmUuLmFiZmMzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTkwOCw2ICs5MDgsMTIgQEAKIGZ0cmFjZV9jYWxsOgogCWJsCWZ0cmFjZV9zdHViCiAJbm9wCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCiAJbGQJcjAsIDEyOChyMSkKIAltdGxyCXIwCiAJYWRkaQlyMSwgcjEsIDExMgpAQCAtOTMxLDEzICs5MzcsOTAgQEAKIAlsZAlyNSwwKHI1KQogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAorCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJYglmdHJhY2VfZ3JhcGhfY2FsbGVyCisjZW5kaWYKIAlsZAlyMCwgMTI4KHIxKQogCW10bHIJcjAKIAlhZGRpCXIxLCByMSwgMTEyCiBfR0xPQkFMKGZ0cmFjZV9zdHViKQogCWJscgogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorX0dMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbGVyKQorCS8qIGxvYWQgcjQgd2l0aCBsb2NhbCBhZGRyZXNzICovCisJbGQJcjQsIDEyOChyMSkKKwlzdWJpCXI0LCByNCwgTUNPVU5UX0lOU05fU0laRQorCisJLyogZ2V0IHRoZSBwYXJlbnQgYWRkcmVzcyAqLworCWxkCXIxMSwgMTEyKHIxKQorCWFkZGkJcjMsIHIxMSwgMTYKKworCWJsCS5wcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCWxkCXIwLCAxMjgocjEpCisJbXRscglyMAorCWFkZGkJcjEsIHIxLCAxMTIKKwlibHIKKworX0dMT0JBTChyZXR1cm5fdG9faGFuZGxlcikKKwkvKiBuZWVkIHRvIHNhdmUgcmV0dXJuIHZhbHVlcyAqLworCXN0ZAlyNCwgIC0yNChyMSkKKwlzdGQJcjMsICAtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisJbXIJcjMxLCByMQorCXN0ZHUJcjEsIC0xMTIocjEpCisKKwlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJbm9wCisKKwkvKiByZXR1cm4gdmFsdWUgaGFzIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwltdGxyCXIzCisKKwlsZAlyMSwgMChyMSkKKwlsZAlyNCwgIC0yNChyMSkKKwlsZAlyMywgIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCisJLyogSnVtcCBiYWNrIHRvIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwlibHIKKworX0dMT0JBTChtb2RfcmV0dXJuX3RvX2hhbmRsZXIpCisJLyogbmVlZCB0byBzYXZlIHJldHVybiB2YWx1ZXMgKi8KKwlzdGQJcjQsICAtMzIocjEpCisJc3RkCXIzLCAgLTI0KHIxKQorCS8qIHNhdmUgVE9DICovCisJc3RkCXIyLCAgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCW1yCXIzMSwgcjEKKwlzdGR1CXIxLCAtMTEyKHIxKQorCisJLyoKKwkgKiBXZSBhcmUgaW4gYSBtb2R1bGUgdXNpbmcgdGhlIG1vZHVsZSdzIFRPQy4KKwkgKiBTd2l0Y2ggdG8gb3VyIFRPQyB0byBydW4gaW5zaWRlIHRoZSBjb3JlIGtlcm5lbC4KKwkgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjQsZnRyYWNlX3JldHVybl90b19oYW5kbGVyKQorCWxkCXIyLCA4KHI0KQorCisJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW5vcAorCisJLyogcmV0dXJuIHZhbHVlIGhhcyByZWFsIHJldHVybiBhZGRyZXNzICovCisJbXRscglyMworCisJbGQJcjEsIDAocjEpCisJbGQJcjQsICAtMzIocjEpCisJbGQJcjMsICAtMjQocjEpCisJbGQJcjIsICAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDYwYzYwY2MuLjViNWQxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBUaGFua3MgZ29lcyBvdXQgdG8gUC5BLiBTZW1pLCBJbmMgZm9yIHN1cHBseWluZyBtZSB3aXRoIGEgUFBDNjQgYm94LgogICoKKyAqIEFkZGVkIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBjb2RlLCB0YWtlbiBmcm9tIHg4NiB0aGF0IHdhcyB3cml0dGVuCisgKiBieSBGcmVkZXJpYyBXZWlzYmVja2VyLCBhbmQgcG9ydGVkIHRvIFBQQyBieSBTdGV2ZW4gUm9zdGVkdC4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0yMCwxNCArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCi0jaWYgMAotI2RlZmluZSBERUJVR1AgcHJpbnRrCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm10ICwgLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gUFBDX05PUF9JTlNUUjsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgYWRkcgogI2Vsc2UKQEAgLTM1LDM3ICszMCwyMyBAQAogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpCiAjZW5kaWYKIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9jYWxjX29mZnNldChsb25nIGlwLCBsb25nIGFkZHIpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitzdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiAoaW50KShhZGRyIC0gaXApOworCXJldHVybiBQUENfSU5TVF9OT1A7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2Vfbm9wX3JlcGxhY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2Z0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGluaykKIHsKLQlyZXR1cm4gKGNoYXIgKikmZnRyYWNlX25vcDsKLX0KKwl1bnNpZ25lZCBpbnQgb3A7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9wOwotCi0JLyoKLQkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGp1c3QgdXNlIGNyZWF0ZV9mdW5jdGlvbl9jYWxsLCBidXQgdGhhdCB3aWxsCi0JICogdXBkYXRlIHRoZSBjb2RlIGl0c2VsZi4gSGVyZSB3ZSBuZWVkIHRvIGp1c3QgcmV0dXJuIHRoZQotCSAqIGluc3RydWN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgbW9kaWZpZWQsIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZQotCSAqIGNvZGUuCi0JICovCiAJYWRkciA9IEdFVF9BRERSKGFkZHIpOwogCi0JLyogU2V0IHRvICJibCBhZGRyIiAqLwotCW9wID0gMHg0ODAwMDAwMSB8IChmdHJhY2VfY2FsY19vZmZzZXQoaXAsIGFkZHIpICYgMHgwM2ZmZmZmYyk7CisJLyogaWYgKGxpbmspIHNldCBvcCB0byAnYmwnIGVsc2UgJ2InICovCisJb3AgPSBjcmVhdGVfYnJhbmNoKCh1bnNpZ25lZCBpbnQgKilpcCwgYWRkciwgbGluayA/IDEgOiAwKTsKIAotCS8qCi0JICogTm8gbG9ja2luZyBuZWVkZWQsIHRoaXMgbXVzdCBiZSBjYWxsZWQgdmlhIGtzdG9wX21hY2hpbmUKLQkgKiB3aGljaCBpbiBlc3NlbmNlIGlzIGxpa2UgcnVubmluZyBvbiBhIHVuaXByb2Nlc3NvciBtYWNoaW5lLgotCSAqLwotCXJldHVybiAodW5zaWduZWQgY2hhciAqKSZvcDsKKwlyZXR1cm4gb3A7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTc3LDEwICs1OCw5IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLAotCQkgICB1bnNpZ25lZCBjaGFyICpuZXdfY29kZSkKK2Z0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewotCXVuc2lnbmVkIGNoYXIgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisJdW5zaWduZWQgaW50IHJlcGxhY2VkOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtOTMsMTUgKzczLDE1IEBACiAJICovCiAKIAkvKiByZWFkIHRoZSB0ZXh0IHdlIHdhbnQgdG8gbW9kaWZ5ICovCi0JaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQoJnJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiBNYWtlIHN1cmUgaXQgaXMgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUgKi8KLQlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwlpZiAocmVwbGFjZWQgIT0gb2xkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlcGxhY2UgdGhlIHRleHQgd2l0aCB0aGUgbmV3IHRleHQgKi8KLQlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsIG5ld19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZuZXcsIE1DT1VOVF9JTlNOX1NJWkUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJZmx1c2hfaWNhY2hlX3JhbmdlKGlwLCBpcCArIDgpOwpAQCAtMTE5LDYgKzk5LDggQEAKIAlyZXR1cm4gY3JlYXRlX2JyYW5jaCgodW5zaWduZWQgaW50ICopaXAsIGFkZHIsIDApOwogfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwogc3RhdGljIGludCBpc19ibF9vcCh1bnNpZ25lZCBpbnQgb3ApCiB7CiAJcmV0dXJuIChvcCAmIDB4ZmMwMDAwMDMpID09IDB4NDgwMDAwMDE7CkBAIC0xNzUsNyArMTU3LDcgQEAKIAkgKiAweGU4LCAweDRjLCAweDAwLCAweDI4LCAgICBsZCAgICAgIHIyLDQwKHIxMikKIAkgKi8KIAotCURFQlVHUCgiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKIAogCS8qIEZpbmQgd2hlcmUgdGhlIHRyYW1wb2xpbmUganVtcHMgdG8gKi8KIAlpZiAocHJvYmVfa2VybmVsX3JlYWQoam1wLCAodm9pZCAqKXRyYW1wLCBzaXplb2Yoam1wKSkpIHsKQEAgLTE4Myw3ICsxNjUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlERUJVR1AoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDgyMDAwMCkgfHwKQEAgLTE5OSwxOCArMTgxLDE4IEBACiAJb2Zmc2V0ID0gKCh1bnNpZ25lZCkoKHVuc2lnbmVkIHNob3J0KWptcFswXSkgPDwgMTYpICsKIAkJKGludCkoKHNob3J0KWptcFsxXSk7CiAKLQlERUJVR1AoIiAleCAiLCBvZmZzZXQpOworCXByX2RlYnVnKCIgJXggIiwgb2Zmc2V0KTsKIAogCS8qIGdldCB0aGUgYWRkcmVzcyB0aGlzIGp1bXBzIHRvbyAqLwogCXRyYW1wID0gbW9kLT5hcmNoLnRvYyArIG9mZnNldCArIDMyOwotCURFQlVHUCgidG9jOiAlbHgiLCB0cmFtcCk7CisJcHJfZGVidWcoInRvYzogJWx4IiwgdHJhbXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgOCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAlbHhcbiIsIHRyYW1wKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4XG4iLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHhcbiIsIGptcFswXSwgam1wWzFdKTsKIAogCXB0ciA9ICgodW5zaWduZWQgbG9uZylqbXBbMF0gPDwgMzIpICsgam1wWzFdOwogCkBAIC0yODcsNyArMjY5LDcgQEAKIAkgKiAgMHg0ZSwgMHg4MCwgMHgwNCwgMHgyMCAgYmN0cgogCSAqLwogCi0JREVCVUdQKCJpcDolbHgganVtcHMgdG8gJWx4IiwgaXAsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCIsIGlwLCB0cmFtcCk7CiAKIAkvKiBGaW5kIHdoZXJlIHRoZSB0cmFtcG9saW5lIGp1bXBzIHRvICovCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgc2l6ZW9mKGptcCkpKSB7CkBAIC0yOTUsNyArMjc3LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4ICIsIGptcFswXSwgam1wWzFdKTsKKwlwcl9kZWJ1ZygiICUwOHggJTA4eCAiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDYwMDAwMCkgfHwKQEAgLTMxMSw3ICsyOTMsNyBAQAogCWlmICh0cmFtcCAmIDB4ODAwMCkKIAkJdHJhbXAgLT0gMHgxMDAwMDsKIAotCURFQlVHUCgiICV4ICIsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiICV4ICIsIHRyYW1wKTsKIAogCWlmICh0cmFtcCAhPSBhZGRyKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMzIwLDcgKzMwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW9wID0gUFBDX05PUF9JTlNUUjsKKwlvcCA9IFBQQ19JTlNUX05PUDsKIAogCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKilpcCwgJm9wLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTMzMCwxMiArMzEyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogUFBDNjQgKi8KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJICAgIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC0zNDQsMTEgKzMyNywxMiBAQAogCSAqLwogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwotCQlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyKTsKKwkJb2xkID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkciwgMSk7CiAJCW5ldyA9IGZ0cmFjZV9ub3BfcmVwbGFjZSgpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBXZSBzaG91bGQgZWl0aGVyIGFscmVhZHkgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZQpAQCAtMzczLDkgKzM1NywxMyBAQAogCQltb2QgPSByZWMtPmFyY2gubW9kOwogCiAJcmV0dXJuIF9fZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBhZGRyKTsKLQorI2Vsc2UKKwkvKiBXZSBzaG91bGQgbm90IGdldCBoZXJlIHdpdGhvdXQgbW9kdWxlcyAqLworCXJldHVybiAtRUlOVkFMOworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiB9CiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogI2lmZGVmIENPTkZJR19QUEM2NAogc3RhdGljIGludAogX19mdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTM5Miw3ICszODAsNyBAQAogCSAqICBiICs4OyBsZCByMiw0MChyMSkKIAkgKi8KIAlpZiAoKChvcFswXSAhPSAweDQ4MDAwMDA4KSB8fCAob3BbMV0gIT0gMHhlODQxMDAyOCkpICYmCi0JICAgICgob3BbMF0gIT0gUFBDX05PUF9JTlNUUikgfHwgKG9wWzFdICE9IFBQQ19OT1BfSU5TVFIpKSkgeworCSAgICAoKG9wWzBdICE9IFBQQ19JTlNUX05PUCkgfHwgKG9wWzFdICE9IFBQQ19JTlNUX05PUCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QcyBidXQgaGF2ZSAleCAleFxuIiwgb3BbMF0sIG9wWzFdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDE0LDcgKzQwMiw3IEBACiAJLyogbGQgcjIsNDAocjEpICovCiAJb3BbMV0gPSAweGU4NDEwMDI4OwogCi0JREVCVUdQKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOworCXByX2RlYnVnKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWlwLCBvcCwgTUNPVU5UX0lOU05fU0laRSAqIDIpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDM1LDcgKzQyMyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogSXQgc2hvdWxkIGJlIHBvaW50aW5nIHRvIGEgbm9wICovCi0JaWYgKG9wICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAob3AgIT0gUFBDX0lOU1RfTk9QKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QIGJ1dCBoYXZlICV4XG4iLCBvcCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ1NCw3ICs0NDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlERUJVR1AoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CisJcHJfZGVidWcoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CiAKIAlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZvcCwgTUNPVU5UX0lOU05fU0laRSkpCiAJCXJldHVybiAtRVBFUk07CkBAIC00NjQsMTEgKzQ1MiwxMiBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC00NzgsMTAgKzQ2NywxMSBAQAogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwogCQlvbGQgPSBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKLQkJbmV3ID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkcik7CisJCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIGFkZHIsIDEpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBCZWluZyB0aGF0IHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gbm9wLCBpdCBoYWQgYmV0dGVyCkBAIC00OTMsMTYgKzQ4MywyMCBAQAogCX0KIAogCXJldHVybiBfX2Z0cmFjZV9tYWtlX2NhbGwocmVjLCBhZGRyKTsKKyNlbHNlCisJLyogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSB3aXRob3V0IG1vZHVsZXMgKi8KKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogfQogCiBpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCiB7CiAJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKIAlpbnQgcmV0OwogCi0JbWVtY3B5KG9sZCwgJmZ0cmFjZV9jYWxsLCBNQ09VTlRfSU5TTl9TSVpFKTsKLQluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKwlvbGQgPSAqKHVuc2lnbmVkIGludCAqKSZmdHJhY2VfY2FsbDsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jLCAxKTsKIAlyZXQgPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKIAogCXJldHVybiByZXQ7CkBAIC01MTcsMyArNTExLDExNSBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK2V4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0dWIodm9pZCk7CisKK2ludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKworaW50IGZ0cmFjZV9kaXNhYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgbW9kX3JldHVybl90b19oYW5kbGVyKHZvaWQpOworI2VuZGlmCisKKy8qCisgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCisgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgorICovCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKKwlpbnQgZmF1bHRlZDsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXI7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKKwkJcmV0dXJuOworCisjaWYgQ09ORklHX1BQQzY0CisJLyogbm9uIGNvcmUga2VybmVsIGNvZGUgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgVE9DICovCisJaWYgKFJFR0lPTl9JRChzZWxmX2FkZHIpICE9IEtFUk5FTF9SRUdJT05fSUQpCisJCXJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmbW9kX3JldHVybl90b19oYW5kbGVyOworI2VuZGlmCisKKwlyZXR1cm5faG9va2VyID0gR0VUX0FERFIocmV0dXJuX2hvb2tlcik7CisKKwkvKgorCSAqIFByb3RlY3QgYWdhaW5zdCBmYXVsdCwgZXZlbiBpZiBpdCBzaG91bGRuJ3QKKwkgKiBoYXBwZW4uIFRoaXMgdG9vbCBpcyB0b28gbXVjaCBpbnRydXNpdmUgdG8KKwkgKiBpZ25vcmUgc3VjaCBhIHByb3RlY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlKAorCQkiMTogIiBQUENfTEwgIiVbb2xkXSwgMCglW3BhcmVudF0pXG4iCisJCSIyOiAiIFBQQ19TVEwgIiVbcmV0dXJuX2hvb2tlcl0sIDAoJVtwYXJlbnRdKVxuIgorCQkiICAgbGkgJVtmYXVsdGVkXSwgMFxuIgorCQkiMzpcbiIKKworCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjQ6IGxpICVbZmF1bHRlZF0sIDFcbiIKKwkJIiAgIGIgM2JcbiIKKwkJIi5wcmV2aW91c1xuIgorCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQlQUENfTE9OR19BTElHTiAiXG4iCisJCQlQUENfTE9ORyAiMWIsNGJcbiIKKwkJCVBQQ19MT05HICIyYiw0YlxuIgorCQkiLnByZXZpb3VzIgorCisJCTogW29sZF0gIj1yIiAob2xkKSwgW2ZhdWx0ZWRdICI9ciIgKGZhdWx0ZWQpCisJCTogW3BhcmVudF0gInIiIChwYXJlbnQpLCBbcmV0dXJuX2hvb2tlcl0gInIiIChyZXR1cm5faG9va2VyKQorCQk6ICJtZW1vcnkiCisJKTsKKworCWlmICh1bmxpa2VseShmYXVsdGVkKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCisJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCQkqcGFyZW50ID0gb2xkOworCQlyZXR1cm47CisJfQorCisJdHJhY2UuZnVuYyA9IHNlbGZfYWRkcjsKKworCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0byAqLworCWlmICghZnRyYWNlX2dyYXBoX2VudHJ5KCZ0cmFjZSkpIHsKKwkJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKwkJKnBhcmVudCA9IG9sZDsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBkNzk0YTYzLi41NGU2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTA4LDE4ICsxMDgsMjEgQEAKICAqIGJlY2F1c2UgT0YgbWF5IGhhdmUgSS9PIGRldmljZXMgbWFwcGVkIGludG8gdGhhdCBhcmVhCiAgKiAocGFydGljdWxhcmx5IG9uIENIUlApLgogICovCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJY21wd2kJMCxyNSwwCiAJYmVxCTFmCiAKKyNpZmRlZiBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORQogCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KIAliY2wJMjAsMzEsJCs0CiAwOgltZmxyCXI4CQkJLyogcjggPSBydW50aW1lIGFkZHIgaGVyZSAqLwogCWFkZGlzCXI4LHI4LChfc3RleHQgLSAwYilAaGEKIAlhZGRpCXI4LHI4LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCiAJYmwJcHJvbV9pbml0CisjZW5kaWYgLyogQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKLSNlbmRpZgogCiAvKgogICogQ2hlY2sgZm9yIEJvb3RYIHNpZ25hdHVyZSB3aGVuIHN1cHBvcnRpbmcgUG93ZXJNYWMgYW5kIGJyYW5jaCB0bwpAQCAtNDcyLDEyICs0NzUsMTEgQEAKIAkuID0gMHgxMDAwCiBJbnN0cnVjdGlvblRMQk1pc3M6CiAvKgotICogcjA6CXN0b3JlZCBjdHIKKyAqIHIwOglzY3JhdGNoCiAgKiByMToJbGludXggc3R5bGUgcHRlICggbGF0ZXIgYmVjb21lcyBwcGMgaGFyZHdhcmUgcHRlICkKICAqIHIyOglwdHIgdG8gbGludXgtc3R5bGUgcHRlCiAgKiByMzoJc2NyYXRjaAogICovCi0JbWZjdHIJcjAKIAkvKiBHZXQgUFRFIChsaW51eC1zdHlsZSkgYW5kIGNoZWNrIGFjY2VzcyAqLwogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAlsaXMJcjEsUEFHRV9PRkZTRVRAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KQEAgLTQ5NiwyOCArNDk4LDI3IEBACiAJcmx3aW5tLglyMixyMiwwLDAsMTkJCS8qIGV4dHJhY3QgYWRkcmVzcyBvZiBwdGUgcGFnZSAqLwogCWJlcS0JSW5zdHJ1Y3Rpb25BZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlJbnN0cnVjdGlvbkFkZHJlc3NJbnZhbGlkIC8qIHJldHVybiBpZiBhY2Nlc3Mgbm90IHBlcm1pdHRlZCAqLwotCW9yaQlyMyxyMyxfUEFHRV9BQ0NFU1NFRAkvKiBzZXQgX1BBR0VfQUNDRVNTRUQgaW4gcHRlICovCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KIAkvKgogCSAqIE5PVEUhIFdlIGFyZSBhc3N1bWluZyB0aGlzIGlzIG5vdCBhbiBTTVAgc3lzdGVtLCBvdGhlcndpc2UKIAkgKiB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSB0aGUgcHRlIGF0b21pY2FsbHkgd2l0aCBsd2FyeC9zdHdjeC4KIAkgKi8KLQlzdHcJcjMsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KKwlzdHcJcjAsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW5tCXIxLHIzLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLwotCXJsd2lubQlyMixyMywzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMSxyMCwzMi0xMCwzMSwzMQkvKiBfUEFHRV9SVyAtPiBQUCBsc2IgKi8KKwlybHdpbm0JcjIscjAsMzItNywzMSwzMQkvKiBfUEFHRV9ESVJUWSAtPiBQUCBsc2IgKi8KIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLworCXJsd2ltaQlyMCxyMCwzMi0xLDMwLDMwCS8qIF9QQUdFX1VTRVIgLT4gUFAgbXNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCi0JYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCisJYW5kYwlyMSxyMCxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCiBCRUdJTl9GVFJfU0VDVElPTgogCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQotCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwogCW1mc3ByCXIzLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLwogCW10Y3JmCTB4ODAscjMKQEAgLTUyOCw3ICs1MjksNiBAQAogCiAJYWRkaXMJcjEscjEsMHgyMDAwCiAJbXRzcHIJU1BSTl9EU0lTUixyMQkvKiAoc2hvdWxkbid0IGJlIG5lZWRlZCkgKi8KLQltdGN0cglyMAkJLyogUmVzdG9yZSBDVFIgKi8KIAlhbmRpLglyMixyMywweEZGRkYJLyogQ2xlYXIgdXBwZXIgYml0cyBvZiBTUlIxICovCiAJb3IJcjIscjIscjEKIAltdHNwcglTUFJOX1NSUjEscjIKQEAgLTU0OSwxMiArNTQ5LDExIEBACiAJLiA9IDB4MTEwMAogRGF0YUxvYWRUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC01NzMsMzggKzU3Miw0OCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KKwlvcmkJcjAscjAsX1BBR0VfQUNDRVNTRUQJLyogc2V0IF9QQUdFX0FDQ0VTU0VEIGluIHB0ZSAqLwogCS8qCiAJICogTk9URSEgV2UgYXJlIGFzc3VtaW5nIHRoaXMgaXMgbm90IGFuIFNNUCBzeXN0ZW0sIG90aGVyd2lzZQogCSAqIHdlIHdvdWxkIG5lZWQgdG8gdXBkYXRlIHRoZSBwdGUgYXRvbWljYWxseSB3aXRoIGx3YXJ4L3N0d2N4LgogCSAqLwotCXN0dwlyMywwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLwogCS8qIENvbnZlcnQgbGludXgtc3R5bGUgUFRFIHRvIGxvdyB3b3JkIG9mIFBQQy1zdHlsZSBQVEUgKi8KLQlybHdpbm0JcjEscjMsMzItMTAsMzEsMzEJLyogX1BBR0VfUlcgLT4gUFAgbHNiICovCi0Jcmx3aW5tCXIyLHIzLDMyLTcsMzEsMzEJLyogX1BBR0VfRElSVFkgLT4gUFAgbHNiICovCisJcmx3aW5tCXIxLHIwLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMixyMCwzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLwogCWFuZAlyMSxyMSxyMgkJLyogd3JpdGFibGUgaWYgX1JXIGFuZCBfRElSVFkgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwotCXJsd2ltaQlyMyxyMywzMi0xLDMxLDMxCS8qIF9QQUdFX1VTRVIgLT4gUFAgbHNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwogCW9yaQlyMSxyMSwweGUwNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgKi8KLQlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KKwlhbmRjCXIxLHIwLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KIEJFR0lOX0ZUUl9TRUNUSU9OCiAJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCi0JbWZzcHIJcjMsU1BSTl9ETUlTUworCW1mc3ByCXIyLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLworCW10Y3JmCTB4ODAscjIKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIwLDEKKwltZnNwcglyMSxTUFJOX1NQUkc0CisJcmx3aW5tCXIyLHIzLDIwLDI3LDMxCQkvKiBHZXQgQWRkcmVzcyBiaXRzIDE1OjE5ICovCisJc2x3CXIwLHIwLHIyCisJeG9yCXIxLHIwLHIxCisJc3J3CXIwLHIxLHIyCisJbXRzcHIgICBTUFJOX1NQUkc0LHIxCisJbWZzcHIJcjIsU1BSTl9TUlIxCisJcmx3aW1pCXIyLHIwLDMxLTE0LDE0LDE0CisJbXRzcHIgICBTUFJOX1NSUjEscjIKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVKQogCXRsYmxkCXIzCi0JbWZzcHIJcjMsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCi0JbXRjcmYJMHg4MCxyMwogCXJmaQogRGF0YUFkZHJlc3NJbnZhbGlkOgogCW1mc3ByCXIzLFNQUk5fU1JSMQogCXJsd2lubQlyMSxyMyw5LDYsNgkvKiBHZXQgbG9hZC9zdG9yZSBiaXQgKi8KIAlhZGRpcwlyMSxyMSwweDIwMDAKIAltdHNwcglTUFJOX0RTSVNSLHIxCi0JbXRjdHIJcjAJCS8qIFJlc3RvcmUgQ1RSICovCiAJYW5kaS4JcjIscjMsMHhGRkZGCS8qIENsZWFyIHVwcGVyIGJpdHMgb2YgU1JSMSAqLwogCW10c3ByCVNQUk5fU1JSMSxyMgogCW1mc3ByCXIxLFNQUk5fRE1JU1MJLyogR2V0IGZhaWxpbmcgYWRkcmVzcyAqLwpAQCAtNjI0LDEyICs2MzMsMTEgQEAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC02NDgsMjcgKzY1NiwzOCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCiAJLyoKIAkgKiBOT1RFISBXZSBhcmUgYXNzdW1pbmcgdGhpcyBpcyBub3QgYW4gU01QIHN5c3RlbSwgb3RoZXJ3aXNlCiAJICogd2Ugd291bGQgbmVlZCB0byB1cGRhdGUgdGhlIHB0ZSBhdG9taWNhbGx5IHdpdGggbHdhcngvc3R3Y3guCiAJICovCi0Jc3R3CXIzLDAocjIpCQkvKiB1cGRhdGUgUFRFIChhY2Nlc3NlZC9kaXJ0eSBiaXRzKSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQvZGlydHkgYml0cykgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwogCWxpCXIxLDB4ZTA1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAmIFBQIGxzYiAqLwotCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLworCWFuZGMJcjEscjAscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLwogQkVHSU5fRlRSX1NFQ1RJT04KIAlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKLQltZnNwcglyMyxTUFJOX0RNSVNTCisJbWZzcHIJcjIsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCisJbXRjcmYJMHg4MCxyMgorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJbGkJcjAsMQorCW1mc3ByCXIxLFNQUk5fU1BSRzQKKwlybHdpbm0JcjIscjMsMjAsMjcsMzEJCS8qIEdldCBBZGRyZXNzIGJpdHMgMTU6MTkgKi8KKwlzbHcJcjAscjAscjIKKwl4b3IJcjEscjAscjEKKwlzcncJcjAscjEscjIKKwltdHNwciAgIFNQUk5fU1BSRzQscjEKKwltZnNwcglyMixTUFJOX1NSUjEKKwlybHdpbWkJcjIscjAsMzEtMTQsMTQsMTQKKwltdHNwciAgIFNQUk5fU1JSMSxyMgorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX05FRURfRFRMQl9TV19MUlUpCiAJdGxibGQJcjMKLQltZnNwcglyMyxTUFJOX1NSUjEJCS8qIE5lZWQgdG8gcmVzdG9yZSBDUjAgKi8KLQltdGNyZgkweDgwLHIzCiAJcmZpCiAKICNpZm5kZWYgQ09ORklHX0FMVElWRUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZWJhZWRhZi4uNTBlZjUwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAJYgkuX19hZnRlcl9wcm9tX3N0YXJ0CiAKIF9JTklUX1NUQVRJQyhfX2Jvb3RfZnJvbV9wcm9tKQorI2lmZGVmIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FCiAJLyogU2F2ZSBwYXJhbWV0ZXJzICovCiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CkBAIC0xMzkwLDcgKzEzOTEsMTAgQEAKIAkvKiBEbyBhbGwgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggT0YgY2xpZW50IGludGVyZmFjZSAqLwogCW1yCXI4LHIyNgogCWJsCS5wcm9tX2luaXQKLQkvKiBXZSBuZXZlciByZXR1cm4gKi8KKyNlbmRpZiAvKiAjQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGZjZTJkZjkuLjk1ZjM5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC0xMCw2ICsxMCwxNSBAQAogCQltdHNwcglTUFJOX0lWT1IjI3ZlY3Rvcl9udW1iZXIscjI2OwlcCiAJCXN5bmMKIAorI2lmIChUSFJFQURfU0hJRlQgPCAxNSkKKyNkZWZpbmUgQUxMT0NfU1RBQ0tfRlJBTUUocmVnLCB2YWwpCQkJXAorCWFkZGkgcmVnLHJlZyx2YWwKKyNlbHNlCisjZGVmaW5lIEFMTE9DX1NUQUNLX0ZSQU1FKHJlZywgdmFsKQkJCVwKKwlhZGRpcwlyZWcscmVnLHZhbEBoYTsJCQkJXAorCWFkZGkJcmVnLHJlZyx2YWxAbAorI2VuZGlmCisKICNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cJCQkJCQkgICAgIFwKIAltdHNwcglTUFJOX1NQUkcwLHIxMDsJCS8qIHNhdmUgdHdvIHJlZ2lzdGVycyB0byB3b3JrIHdpdGggKi9cCiAJbXRzcHIJU1BSTl9TUFJHMSxyMTE7CQkJCQkJICAgICBcCkBAIC0yMCw3ICsyOSw3IEBACiAJYmVxCTFmOwkJCQkJCQkgICAgIFwKIAltZnNwcglyMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKIAlsd3oJcjEsVEhSRUFEX0lORk8tVEhSRUFEKHIxKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgICAqL1wKLQlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFOwkJCQkJICAgICBcCisJQUxMT0NfU1RBQ0tfRlJBTUUocjEsIFRIUkVBRF9TSVpFKTsJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXAogCW1yCXIxMSxyMTsJCQkJCQkJICAgICBcCiAJc3R3CXIxMCxfQ0NSKHIxMSk7ICAgICAgICAgIC8qIHNhdmUgdmFyaW91cyByZWdpc3RlcnMJICAgKi9cCkBAIC03MCwxMCArNzksMTAgQEAKIAogLyogb25seSBvbiBlNTAwbWMvZTIwMCAqLwogI2RlZmluZSBERUJVR19TVEFDS19CQVNFCWRiZ2lycV9jdHgKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5Ci0jZWxzZQorI2lmZGVmIENPTkZJR19FMjAwCiAjZGVmaW5lIERFQlVHX1NQUkcJCVNQUk5fU1BSRzZXCisjZWxzZQorI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5CiAjZW5kaWYKIAogI2RlZmluZSBFWENfTFZMX0ZSQU1FX09WRVJIRUFECShUSFJFQURfU0laRSAtIElOVF9GUkFNRV9TSVpFIC0gRVhDX0xWTF9TSVpFKQpAQCAtMjc5LDcgKzI4OCw3IEBACiAJbHd6CXIxMSxHUFIxMShyOCk7CQkJCQkJICAgICAgXAogCW1mc3ByCXI4LERFQlVHX1NQUkc7CQkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAotCVJGREk7CQkJCQkJCQkgICAgICBcCisJUFBDX1JGREk7CQkJCQkJCQkgICAgICBcCiAJYgkuOwkJCQkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAJLyogY29udGludWUgbm9ybWFsIGhhbmRsaW5nIGZvciBhIGRlYnVnIGV4Y2VwdGlvbi4uLiAqLwkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDM2ZmZiMzUuLjRjMjI2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTEwMywxMCArMTAzLDE1IEBACiAJb3IJcjcscjcscjQKIAltdHNwcglTUFJOX01BUzYscjcKIAl0bGJzeAkwLHI2CQkJCS8qIHNlYXJjaCBNU1JbSVNdLCBTUElEPVBJRDAgKi8KLSNpZm5kZWYgQ09ORklHX0UyMDAKIAltZnNwcglyNyxTUFJOX01BUzEKIAlhbmRpcy4JcjcscjcsTUFTMV9WQUxJREBoCiAJYm5lCW1hdGNoX1RMQgorCisJbWZzcHIJcjcsU1BSTl9NTVVDRkcKKwlybHdpbm0JcjcscjcsMjEsMjgsMzEJCQkvKiBleHRyYWN0IE1NVUNGR1tOUElEU10gKi8KKwljbXB3aQlyNywzCisJYm5lCW1hdGNoX1RMQgkJCS8qIHNraXAgaWYgTlBJRFMgIT0gMyAqLworCiAJbWZzcHIJcjcsU1BSTl9QSUQxCiAJc2x3aQlyNyxyNywxNgogCW9yCXI3LHI3LHI0CkBAIC0xMjAsNyArMTI1LDcgQEAKIAlvcglyNyxyNyxyNAogCW10c3ByCVNQUk5fTUFTNixyNwogCXRsYnN4CTAscjYJCQkJLyogRmFsbCB0aHJvdWdoLCB3ZSBoYWQgdG8gbWF0Y2ggKi8KLSNlbmRpZgorCiBtYXRjaF9UTEI6CiAJbWZzcHIJcjcsU1BSTl9NQVMwCiAJcmx3aW5tCXIzLHI3LDE2LDIwLDMxCQkJLyogRXh0cmFjdCBNQVMwKEVudHJ5KSAqLwpAQCAtMTY4LDcgKzE3Myw3IEBACiAKIAkvKiBncmFiIGFuZCBmaXh1cCB0aGUgUlBOICovCiAJbWZzcHIJcjYsU1BSTl9NQVMxCS8qIGV4dHJhY3QgTUFTMVtTSVpFXSAqLwotCXJsd2lubQlyNixyNiwyNSwyNywzMAorCXJsd2lubQlyNixyNiwyNSwyNywzMQogCWxpCXI4LC0xCiAJYWRkaQlyNixyNiwxMAogCXNsdwlyNixyOCxyNgkvKiBjb252ZXJ0IHRvIG1hc2sgKi8KQEAgLTE5NCw3ICsxOTksNyBAQAogCXhvcmkJcjYscjQsMQkJLyogU2V0dXAgVE1QIG1hcHBpbmcgaW4gdGhlIG90aGVyIEFkZHJlc3Mgc3BhY2UgKi8KIAlzbHdpCXI2LHI2LDEyCiAJb3JpcwlyNixyNiwoTUFTMV9WQUxJRHxNQVMxX0lQUk9UKUBoCi0Jb3JpCXI2LHI2LChNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzEscjYKIAltZnNwcglyNixTUFJOX01BUzIKIAlsaQlyNywwCQkvKiB0ZW1wIEVQTiA9IDAgKi8KQEAgLTIxNSwxNCArMjIwLDE5IEBACiAKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCisJbXRzcHIgICBTUFJOX01BUzYscjYKIAltdHNwcglTUFJOX1BJRDAscjYKLSNpZm5kZWYgQ09ORklHX0UyMDAKKworCW1mc3ByCXI3LFNQUk5fTU1VQ0ZHCisJcmx3aW5tCXI3LHI3LDIxLDI4LDMxCQkJLyogZXh0cmFjdCBNTVVDRkdbTlBJRFNdICovCisJY21wd2kJcjcsMworCWJuZQkyZgkJCQkvKiBza2lwIGlmIE5QSURTICE9IDMgKi8KKwogCW10c3ByCVNQUk5fUElEMSxyNgogCW10c3ByCVNQUk5fUElEMixyNgotI2VuZGlmCi0JbXRzcHIJU1BSTl9NQVM2LHI2CiAKIC8qIDUuIEludmFsaWRhdGUgbWFwcGluZyB3ZSBzdGFydGVkIGluICovCisyOgogCWxpcwlyNywweDEwMDAJLyogU2V0IE1BUzAoVExCU0VMKSA9IDEgKi8KIAlybHdpbWkJcjcscjMsMTYsNCwxNQkvKiBTZXR1cCBNQVMwID0gVExCU0VMIHwgRVNFTChyMykgKi8KIAltdHNwcglTUFJOX01BUzAscjcKQEAgLTI0NywxMCArMjU3LDEwIEBACiAJbGlzCXI2LDB4MTAwMAkJLyogU2V0IE1BUzAoVExCU0VMKSA9IFRMQjEoMSksIEVTRUwgPSAwICovCiAJbXRzcHIJU1BSTl9NQVMwLHI2CiAJbGlzCXI2LChNQVMxX1ZBTElEfE1BUzFfSVBST1QpQGgKLQlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzY0TSkpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl82NE0pKUBsCiAJbXRzcHIJU1BSTl9NQVMxLHI2Ci0JbGlzCXI2LE1BUzJfVkFMKFBBR0VfT0ZGU0VULCBCT09LRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAotCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PS0VfUEFHRVNaXzY0TSwgTV9JRl9TTVApQGwKKwlsaXMJcjYsTUFTMl9WQUwoUEFHRV9PRkZTRVQsIEJPT0szRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAorCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PSzNFX1BBR0VTWl82NE0sIE1fSUZfU01QKUBsCiAJbXRzcHIJU1BSTl9NQVMyLHI2CiAJbXRzcHIJU1BSTl9NQVMzLHI4CiAJdGxid2UKQEAgLTI5OCwyNiArMzA4LDE0IEBACiAJU0VUX0lWT1IoMTIsIFdhdGNoZG9nVGltZXIpOwogCVNFVF9JVk9SKDEzLCBEYXRhVExCRXJyb3IpOwogCVNFVF9JVk9SKDE0LCBJbnN0cnVjdGlvblRMQkVycm9yKTsKLQlTRVRfSVZPUigxNSwgRGVidWdEZWJ1Zyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJU0VUX0lWT1IoMTUsIERlYnVnQ3JpdCk7Ci0jZW5kaWYKLQlTRVRfSVZPUigzMiwgU1BFVW5hdmFpbGFibGUpOwotCVNFVF9JVk9SKDMzLCBTUEVGbG9hdGluZ1BvaW50RGF0YSk7Ci0JU0VUX0lWT1IoMzQsIFNQRUZsb2F0aW5nUG9pbnRSb3VuZCk7Ci0jaWZuZGVmIENPTkZJR19FMjAwCi0JU0VUX0lWT1IoMzUsIFBlcmZvcm1hbmNlTW9uaXRvcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotCVNFVF9JVk9SKDM2LCBEb29yYmVsbCk7Ci0jZW5kaWYKIAogCS8qIEVzdGFibGlzaCB0aGUgaW50ZXJydXB0IHZlY3RvciBiYXNlICovCiAJbGlzCXI0LGludGVycnVwdF9iYXNlQGgJLyogSVZQUiBvbmx5IHVzZXMgdGhlIGhpZ2ggMTYtYml0cyAqLwogCW10c3ByCVNQUk5fSVZQUixyNAogCiAJLyogU2V0dXAgdGhlIGRlZmF1bHRzIGZvciBUTEIgZW50cmllcyAqLwotCWxpCXIyLChNQVM0X1RTSVpFRChCT09LRV9QQUdFU1pfNEspKUBsCisJbGkJcjIsKE1BUzRfVFNJWkVEKEJPT0szRV9QQUdFU1pfNEspKUBsCiAjaWZkZWYgQ09ORklHX0UyMDAKIAlvcmlzCXIyLHIyLE1BUzRfVExCU0VMRCgxKUBoCiAjZW5kaWYKQEAgLTMyOSwxMiArMzI3LDYgQEAKIAlvcmlzCXIyLHIyLEhJRDBfRE9aRUBoCiAJbXRzcHIJU1BSTl9ISUQwLCByMgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0UyMDAKLQkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KLQltZnNwcglyMixTUFJOX0hJRDAKLQlvcmkJcjIscjIsSElEMF9EQVBVRU5AbAotCW10c3ByCVNQUk5fSElEMCxyMgotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkKIAkvKgpAQCAtNzA2LDE1ICs2OTgsMTMgQEAKIAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICovCiAJRVhDRVBUSU9OKDB4MjA2MCwgUGVyZm9ybWFuY2VNb25pdG9yLCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbiwgRVhDX1hGRVJfU1REKQogCi0jaWZkZWYgQ09ORklHX1BQQ19FNTAwTUMKLQlFWENFUFRJT04oMHgyMDcwLCBEb29yYmVsbCwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKLSNlbmRpZgorCUVYQ0VQVElPTigweDIwNzAsIERvb3JiZWxsLCBkb29yYmVsbF9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKKworCUNSSVRJQ0FMX0VYQ0VQVElPTigweDIwODAsIENyaXRpY2FsRG9vcmJlbGwsIHVua25vd25fZXhjZXB0aW9uKQogCiAJLyogRGVidWcgSW50ZXJydXB0ICovCiAJREVCVUdfREVCVUdfRVhDRVBUSU9OCi0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJREVCVUdfQ1JJVF9FWENFUFRJT04KLSNlbmRpZgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCkBAIC04OTcsNiArODg3LDQ3IEBACiAgKiBHbG9iYWwgZnVuY3Rpb25zCiAgKi8KIAorLyogQWRqdXN0IG9yIHNldHVwIElWT1JzIGZvciBlMjAwICovCitfR0xPQkFMKF9fc2V0dXBfZTIwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0RlYnVnQGwKKwltdHNwcglTUFJOX0lWT1IxNSxyMworCWxpCXIzLFNQRVVuYXZhaWxhYmxlQGwKKwltdHNwcglTUFJOX0lWT1IzMixyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnREYXRhQGwKKwltdHNwcglTUFJOX0lWT1IzMyxyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnRSb3VuZEBsCisJbXRzcHIJU1BSTl9JVk9SMzQscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMHYxL3YyICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0NyaXRAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsU1BFVW5hdmFpbGFibGVAbAorCW10c3ByCVNQUk5fSVZPUjMyLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludERhdGFAbAorCW10c3ByCVNQUk5fSVZPUjMzLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludFJvdW5kQGwKKwltdHNwcglTUFJOX0lWT1IzNCxyMworCWxpCXIzLFBlcmZvcm1hbmNlTW9uaXRvckBsCisJbXRzcHIJU1BSTl9JVk9SMzUscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMG1jICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMG1jX2l2b3JzKQorCWxpCXIzLERlYnVnRGVidWdAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsUGVyZm9ybWFuY2VNb25pdG9yQGwKKwltdHNwcglTUFJOX0lWT1IzNSxyMworCWxpCXIzLERvb3JiZWxsQGwKKwltdHNwcglTUFJOX0lWT1IzNixyMworCWxpCXIzLENyaXRpY2FsRG9vcmJlbGxAbAorCW10c3ByCVNQUk5fSVZPUjM3LHIzCisJc3luYworCWJscgorCiAvKgogICogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpCiAgKgpAQCAtMTA4OSw3ICsxMTIwLDcgQEAKIAltdHNwcglTUFJOX1NQUkczLHI0CiAKIAkvKiBTZXR1cCB0aGUgZGVmYXVsdHMgZm9yIFRMQiBlbnRyaWVzICovCi0JbGkJcjQsKE1BUzRfVFNJWkVEKEJPT0tFX1BBR0VTWl80SykpQGwKKwlsaQlyNCwoTUFTNF9UU0laRUQoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzQscjQKIAogCS8qIEp1bXAgdG8gc3RhcnRfc2Vjb25kYXJ5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAxYjU1ZmZkLi41NTc2MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogewogCWludCBpID0gKihsb2ZmX3QgKil2LCBqOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIHN0YXRpYyBpbnQgdmlycV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlycV9kZXNjX3QgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IGNoYXIgKnA7CiAJY2hhciBub25lW10gPSAibm9uZSI7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA4OTkyYjAzLi44ZmJiMTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTMyOSw3ICszMjksNyBAQAogICAgcmVzdG9yZSByMi4gKi8KIHN0YXRpYyBpbnQgcmVzdG9yZV9yMih1MzIgKmluc3RydWN0aW9uLCBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19JTlNUX05PUCkgewogCQlwcmludGsoIiVzOiBFeHBlY3Qgbm9vcCBhZnRlciByZWxvY2F0ZSwgZ290ICUwOHhcbiIsCiAJCSAgICAgICBtZS0+bmFtZSwgKmluc3RydWN0aW9uKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDBmNDE4MTIuLjljNjllN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2VlaC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhvc2Vfc3BpbmxvY2spOworTElTVF9IRUFEKGhvc2VfbGlzdCk7CiAKIC8qIFhYWCBraWxsIHRoYXQgc29tZSBkYXkgLi4uICovCiBzdGF0aWMgaW50IGdsb2JhbF9waGJfbnVtYmVyOwkJLyogR2xvYmFsIHBoYiBjb3VudGVyICovCkBAIC00OSw3ICs1MCw3IEBACiB1bnNpZ25lZCBpbnQgcHBjX3BjaV9mbGFncyA9IDA7CiAKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzOworc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzID0gJmRtYV9kaXJlY3Rfb3BzOwogCiB2b2lkIHNldF9wY2lfZG1hX29wcyhzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzKQogewpAQCAtMTEzLDE5ICsxMTQsMjQgQEAKIAkJa2ZyZWUocGhiKTsKIH0KIAorc3RhdGljIHJlc291cmNlX3NpemVfdCBwY2liaW9zX2lvX3NpemUoY29uc3Qgc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCXJldHVybiBob3NlLT5wY2lfaW9fc2l6ZTsKKyNlbHNlCisJcmV0dXJuIGhvc2UtPmlvX3Jlc291cmNlLmVuZCAtIGhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0ICsgMTsKKyNlbmRpZgorfQorCiBpbnQgcGNpYmlvc192YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQl1bnNpZ25lZCBsb25nIHNpemU7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKIAlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JCXNpemUgPSBob3NlLT5wY2lfaW9fc2l6ZTsKLSNlbHNlCi0JCXNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLSBob3NlLT5pb19yZXNvdXJjZS5zdGFydCArIDE7Ci0jZW5kaWYKKwkJc2l6ZSA9IHBjaWJpb3NfaW9fc2l6ZShob3NlKTsKIAkJaWYgKGFkZHJlc3MgPj0gaG9zZS0+aW9fYmFzZV92aXJ0ICYmCiAJCSAgICBhZGRyZXNzIDwgKGhvc2UtPmlvX2Jhc2VfdmlydCArIHNpemUpKSB7CiAJCQlyZXQgPSAxOwpAQCAtMTM2LDYgKzE0MiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCXJlc291cmNlX3NpemVfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gfjA7CisKKwlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7CisJCXNpemUgPSBwY2liaW9zX2lvX3NpemUoaG9zZSk7CisJCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgorCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBzaXplKSkgeworCQkJdW5zaWduZWQgbG9uZyBiYXNlID0KKwkJCQkodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwkJCXJldCA9IGJhc2UgKyAoYWRkcmVzcyAtIGhvc2UtPmlvX2Jhc2VfcGh5cyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmaG9zZV9zcGlubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZHJlc3NfdG9fcGlvKTsKKwogLyoKICAqIFJldHVybiB0aGUgZG9tYWluIG51bWJlciBmb3IgdGhpcyBidXMuCiAgKi8KQEAgLTE0NTMsNyArMTQ4Miw3IEBACiAJICogd2UgcHJvY2VlZCB0byBhc3NpZ25pbmcgdGhpbmdzIHRoYXQgd2VyZSBsZWZ0IHVuYXNzaWduZWQKIAkgKi8KIAlpZiAoIShwcGNfcGNpX2ZsYWdzICYgUFBDX1BDSV9QUk9CRV9PTkxZKSkgewotCQlwcl9kZWJ1ZygiUENJOiBBc3NpZ25pbmcgdW5hc3NpZ25lZCByZXNvdWNlcy4uLlxuIik7CisJCXByX2RlYnVnKCJQQ0k6IEFzc2lnbmluZyB1bmFzc2lnbmVkIHJlc291cmNlcy4uLlxuIik7CiAJCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCmluZGV4IDEzMmNkODAuLmQ0NzM2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CkBAIC00Myw4ICs0NCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgcGNpX2Fzc2lnbl9hbGxfYnVzZXM7CiAKLUxJU1RfSEVBRChob3NlX2xpc3QpOwotCiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKIC8qIFRoaXMgd2lsbCByZW1haW4gTlVMTCBmb3Igbm93LCB1bnRpbCBpc2EtYnJpZGdlLmMgaXMgbWFkZSBjb21tb24KQEAgLTIxOSwxNiArMjE4LDIzIEBACiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpzY2FuX09GX2Zvcl9wY2lfZGV2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRldmZuKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNucDsKIAljb25zdCB1MzIgKnJlZzsKIAl1bnNpZ25lZCBpbnQgcHNpemU7CiAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBhcmVudCwgbnApIHsKIAkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJnBzaXplKTsKLQkJaWYgKHJlZyA9PSBOVUxMIHx8IHBzaXplIDwgNCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKKyAgICAgICAgICAgICAgICBpZiAocmVnICYmIHBzaXplID49IDQgJiYgKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKIAkJCXJldHVybiBucDsKKworCQkvKiBOb3RlOiBzb21lIE9GcyBjcmVhdGUgYSBwYXJlbnQgbm9kZSAibXVsdGlmdW5jLWRldmljZSIgYXMKKwkJICogYSBmYWtlIHJvb3QgZm9yIGFsbCBmdW5jdGlvbnMgb2YgYSBtdWx0aS1mdW5jdGlvbiBkZXZpY2UsCisJCSAqIHdlIGdvIGRvd24gdGhlbSBhcyB3ZWxsLiAqLworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKG5wLT5uYW1lLCAibXVsdGlmdW5jLWRldmljZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnAgPSBzY2FuX09GX2Zvcl9wY2lfZGV2KG5wLCBkZXZmbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY25wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY25wOworICAgICAgICAgICAgICAgIH0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00OTEsMjQgKzQ5Nyw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zZSwgdG1wLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKLQkJdW5zaWduZWQgaW50IHNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLQotCQkJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKyAxOwotCQlpZiAoYWRkcmVzcyA+PSBob3NlLT5pb19iYXNlX3BoeXMgJiYKLQkJICAgIGFkZHJlc3MgPCAoaG9zZS0+aW9fYmFzZV9waHlzICsgc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2FkZHJlc3NfdG9fcGlvKTsKLQogLyoKICAqIE51bGwgUENJIGNvbmZpZyBhY2Nlc3MgZnVuY3Rpb25zLCBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBjYW4ndAogICogZmluZCBhIGhvc2UuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCBlYThlZGE4Li5iZTU3NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTQzLDggKzQzLDYgQEAKIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2UgPSBJU0FfSU9fQkFTRTsKIEVYUE9SVF9TWU1CT0wocGNpX2lvX2Jhc2UpOwogCi1MSVNUX0hFQUQoaG9zZV9saXN0KTsKLQogc3RhdGljIHZvaWQgZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CkBAIC01MjQsMjMgKzUyMiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX21hcF9pb19zcGFjZSk7CiAKLXVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvc2UsIHRtcCwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0JCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgotCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBob3NlLT5wY2lfaW9fc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hZGRyZXNzX3RvX3Bpbyk7Ci0KLQogI2RlZmluZSBJT0JBU0VfQlJJREdFX05VTUJFUgkwCiAjZGVmaW5lIElPQkFTRV9NRU1PUlkJCTEKICNkZWZpbmUgSU9CQVNFX0lPCQkyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGZiNzA0OWMuLmVhYzA2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTAwOCw2ICsxMDExLDE0IEBACiAJdW5zaWduZWQgbG9uZyBzcCwgaXAsIGxyLCBuZXdzcDsKIAlpbnQgY291bnQgPSAwOwogCWludCBmaXJzdGZyYW1lID0gMTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaW50IGN1cnJfZnJhbWUgPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKwlleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworI2VuZGlmCisjZW5kaWYKIAogCXNwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOwogCWlmICh0c2sgPT0gTlVMTCkKQEAgLTEwMzAsNiArMTA0MSwxMyBAQAogCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOwogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQkJcHJpbnRrKCIgKCVwUykiLAorCQkJCSAgICAgICAodm9pZCAqKWN1cnJlbnQtPnJldF9zdGFja1tjdXJyX2ZyYW1lXS5yZXQpOworCQkJCWN1cnJfZnJhbWUtLTsKKwkJCX0KKyNlbmRpZgogCQkJaWYgKGZpcnN0ZnJhbWUpCiAJCQkJcHJpbnRrKCIgKHVucmVsaWFibGUpIik7CiAJCQlwcmludGsoIlxuIik7CkBAIC0xMTIyLDMgKzExNDAsNDMgQEAKIH0KIAogI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKwordW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApCit7CisJaWYgKCEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX05PX1JBTkRPTUlaRSkgJiYgcmFuZG9taXplX3ZhX3NwYWNlKQorCQlzcCAtPSBnZXRfcmFuZG9tX2ludCgpICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gc3AgJiB+MHhmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHJuZCA9IDA7CisKKwkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCisJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDIzLVBBR0VfU0hJRlQpKSk7CisJZWxzZQorCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMzAtUEFHRV9TSElGVCkpKTsKKworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKK30KKwordW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CisKKwlpZiAocmV0IDwgYmFzZSkKKwkJcmV0dXJuIGJhc2U7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmMDBmODMxLi41ZWM2YTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMTA3NSwxMSArMTA3NSw2IEBACiAJCURCRygicmVzZXJ2aW5nOiAlbGx4IC0+ICVsbHhcbiIsIGJhc2UsIHNpemUpOwogCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKIAl9Ci0KLSNpZiAwCi0JREJHKCJtZW1vcnkgcmVzZXJ2ZWQsIGxtYnMgOlxuIik7Ci0gICAgICAJbG1iX2R1bXBfYWxsKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKQEAgLTEyMjEsNiArMTIxNiw3IEBACiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxpbWl0KTsKIAogCWxtYl9hbmFseXplKCk7CisJbG1iX2R1bXBfYWxsKCk7CiAKIAlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggN2YxYjMzZC4uMmUwMjZjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0yMjgzLDYgKzIyODMsOCBAQAogCSAqLwogCXByb21faW5pdF9zdGRvdXQoKTsKIAorCXByb21fcHJpbnRmKCJQcmVwYXJpbmcgdG8gYm9vdCAlcyIsIFJFTE9DKGxpbnV4X2Jhbm5lcikpOworCiAJLyoKIAkgKiBHZXQgZGVmYXVsdCBtYWNoaW5lIHR5cGUuIEF0IHRoaXMgcG9pbnQsIHdlIGRvIG5vdCBkaWZmZXJlbnRpYXRlCiAJICogYmV0d2VlbiBwU2VyaWVzIFNNUCBhbmQgcFNlcmllcyBMUEFSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCmluZGV4IGVhM2EyZWMuLjFhYzEzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCkBAIC0yMCw3ICsyMCw3IEBACiBfZW5kIGVudGVyX3Byb20gbWVtY3B5IG1lbXNldCByZWxvY19vZmZzZXQgX19zZWNvbmRhcnlfaG9sZAogX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIF9fc3RhcnQKIHN0cmNtcCBzdHJjcHkgc3RybGNweSBzdHJsZW4gc3RybmNtcCBzdHJzdHIgbG9nb19saW51eF9jbHV0MjI0Ci1yZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIiCityZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIgbGludXhfYmFubmVyIgogCiBOTT0iJDEiCiBPQko9IiQyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCBmZGZlMTRjLi5lZTRjNzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgewogCWF0b21pY190IHdvcmtpbmc7IC8qIG51bWJlciBvZiBjcHVzIGFjY2Vzc2luZyB0aGlzIHN0cnVjdCAqLworCWF0b21pY190IGRvbmU7CiAJaW50IHRva2VuOyAvKiBpYm0sc3VzcGVuZC1tZSAqLwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7IC8qIHdhaXQgb24gdGhpcyB1bnRpbCB3b3JraW5nID09IDAgKi8KQEAgLTY4OSw3ICs2OTAsNyBAQAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogc3RhdGljIHZvaWQgcnRhc19wZXJjcHVfc3VzcGVuZF9tZSh2b2lkICppbmZvKQogewotCWxvbmcgcmM7CisJbG9uZyByYyA9IEhfU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nIG1zcl9zYXZlOwogCWludCBjcHU7CiAJc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KQEAgLTcwMSw3ICs3MDIsOCBAQAogCW1zcl9zYXZlID0gbWZtc3IoKTsKIAltdG1zcihtc3Jfc2F2ZSAmIH4oTVNSX0VFKSk7CiAKLQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0pPSU4pOworCXdoaWxlIChyYyA9PSBIX1NVQ0NFU1MgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5kb25lKSkKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9KT0lOKTsKIAogCW10bXNyKG1zcl9zYXZlKTsKIApAQCAtNzI0LDYgKzcyNiw5IEBACiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJjKTsKIAkJZGF0YS0+ZXJyb3IgPSByYzsKIAl9CisKKwlhdG9taWNfc2V0KCZkYXRhLT5kb25lLCAxKTsKKwogCS8qIFRoaXMgY3B1IGRpZCB0aGUgc3VzcGVuZCBvciBnb3QgYW4gZXJyb3I7IGluIGVpdGhlciBjYXNlLAogCSAqIHdlIG5lZWQgdG8gcHJvZCBhbGwgb3RoZXIgb3RoZXIgY3B1cyBvdXQgb2Ygam9pbiBzdGF0ZS4KIAkgKiBFeHRyYSBwcm9kcyBhcmUgaGFybWxlc3MuCkBAIC03NjYsNiArNzcxLDcgQEAKIAl9CiAKIAlhdG9taWNfc2V0KCZkYXRhLndvcmtpbmcsIDApOworCWF0b21pY19zZXQoJmRhdGEuZG9uZSwgMCk7CiAJZGF0YS50b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxzdXNwZW5kLW1lIik7CiAJZGF0YS5lcnJvciA9IDA7CiAJZGF0YS5jb21wbGV0ZSA9ICZkb25lOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggNzA1ZmM0Yi4uOTc3NGY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC02NjksMyArNjcxLDM3IEBACiB9CiBhcmNoX2luaXRjYWxsKHBvd2VycGNfZGVidWdmc19pbml0KTsKICNlbmRpZgorCitzdGF0aWMgaW50IHBwY19kZmx0X2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCisJLyogV2UgYXJlIG9ubHkgaW50ZXJldGVkIGluIGRldmljZSBhZGRpdGlvbiAqLworCWlmIChhY3Rpb24gIT0gQlVTX05PVElGWV9BRERfREVWSUNFKQorCQlyZXR1cm4gMDsKKworCXNldF9kbWFfb3BzKGRldiwgJmRtYV9kaXJlY3Rfb3BzKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcGNfZGZsdF9wbGF0X2J1c19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBwY19kZmx0X2J1c19ub3RpZnksCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjX2RmbHRfb2ZfYnVzX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gcHBjX2RmbHRfYnVzX25vdGlmeSwKKwkucHJpb3JpdHkgPSBJTlRfTUFYLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfYnVzX25vdGlmaWVyKHZvaWQpCit7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJnBwY19kZmx0X3BsYXRfYnVzX25vdGlmaWVyKTsKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJm9mX3BsYXRmb3JtX2J1c190eXBlLCAmcHBjX2RmbHRfb2ZfYnVzX25vdGlmaWVyKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHNldHVwX2J1c19ub3RpZmllcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggMmQzNDE5Ni4uYzQxMGM2MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMjAyLDggKzIwMiw2IEBACiAKIAkvKiBGaXggdXAgcGFjYSBmaWVsZHMgcmVxdWlyZWQgZm9yIHRoZSBib290IGNwdSAqLwogCWdldF9wYWNhKCktPmNwdV9zdGFydCA9IDE7Ci0JZ2V0X3BhY2EoKS0+c3RhYl9yZWFsID0gX19wYSgodTY0KSZpbml0aWFsX3N0YWIpOwotCWdldF9wYWNhKCktPnN0YWJfYWRkciA9ICh1NjQpJmluaXRpYWxfc3RhYjsKIAogCS8qIFByb2JlIHRoZSBtYWNoaW5lIHR5cGUgKi8KIAlwcm9iZV9tYWNoaW5lKCk7CkBAIC0yMTIsMjAgKzIxMCw4IEBACiAKIAlEQkcoIkZvdW5kLCBJbml0aWFsaXppbmcgbWVtb3J5IG1hbmFnZW1lbnQuLi5cbiIpOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBNTVUgSGFzaCB0YWJsZSBhbmQgY3JlYXRlIHRoZSBsaW5lYXIgbWFwcGluZwotCSAqIG9mIG1lbW9yeS4gSGFzIHRvIGJlIGRvbmUgYmVmb3JlIHN0YWIvc2xiIGluaXRpYWxpemF0aW9uIGFzCi0JICogdGhpcyBpcyBjdXJyZW50bHkgd2hlcmUgdGhlIHBhZ2Ugc2l6ZSBlbmNvZGluZyBpcyBvYnRhaW5lZAotCSAqLwotCWh0YWJfaW5pdGlhbGl6ZSgpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHN0YWIgLyBTTEIgbWFuYWdlbWVudCBleGNlcHQgb24gaVNlcmllcwotCSAqLwotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQotCQlzbGJfaW5pdGlhbGl6ZSgpOwotCWVsc2UgaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQotCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9yZWFsKTsKKwkvKiBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlIG9yIFRMQiBoYW5kbGluZyAqLworCWVhcmx5X2luaXRfbW11KCk7CiAKIAlEQkcoIiA8LSBlYXJseV9zZXR1cCgpXG4iKTsKIH0KQEAgLTIzMywyMiArMjE5LDExIEBACiAjaWZkZWYgQ09ORklHX1NNUAogdm9pZCBlYXJseV9zZXR1cF9zZWNvbmRhcnkodm9pZCkKIHsKLQlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKmxwYWNhID0gZ2V0X3BhY2EoKTsKLQogCS8qIE1hcmsgaW50ZXJydXB0cyBlbmFibGVkIGluIFBBQ0EgKi8KLQlscGFjYS0+c29mdF9lbmFibGVkID0gMDsKKwlnZXRfcGFjYSgpLT5zb2Z0X2VuYWJsZWQgPSAwOwogCi0JLyogSW5pdGlhbGl6ZSBoYXNoIHRhYmxlIGZvciB0aGF0IENQVSAqLwotCWh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkoKTsKLQotCS8qIEluaXRpYWxpemUgU1RBQi9TTEIuIFdlIHVzZSBhIHZpcnR1YWwgYWRkcmVzcyBhcyBpdCB3b3JrcwotCSAqIGluIHJlYWwgbW9kZSBvbiBwU2VyaWVzIGFuZCB3ZSB3YW50IGEgdmlydXRhbCBhZGRyZXNzIG9uCi0JICogaVNlcmllcyBhbnl3YXkKLQkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKLQkJc2xiX2luaXRpYWxpemUoKTsKLQllbHNlCi0JCXN0YWJfaW5pdGlhbGl6ZShscGFjYS0+c3RhYl9hZGRyKTsKKwkvKiBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlIG9yIFRMQiBoYW5kbGluZyAqLworCWVhcmx5X2luaXRfbW11X3NlY29uZGFyeSgpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtNTc4LDEzICs1NTMsNiBAQAogCXByaW50aygiW2Jvb3RdJTA0eCAlc1xuIiwgc3JjLCBtc2cpOwogfQogCi0vKiBQcmludCBhIHRlcm1pbmF0aW9uIG1lc3NhZ2UgKHByaW50IG9ubHkgLS0gZG9lcyBub3Qgc3RvcCB0aGUga2VybmVsKSAqLwotdm9pZCBwcGM2NF90ZXJtaW5hdGVfbXNnKHVuc2lnbmVkIGludCBzcmMsIGNvbnN0IGNoYXIgKm1zZykKLXsKLQlwcGM2NF9kb19tc2coUFBDNjRfTElOVVhfRlVOQ1RJT058UFBDNjRfVEVSTV9NRVNTQUdFfHNyYywgbXNnKTsKLQlwcmludGsoIlt0ZXJtaW5hdGVdJTA0eCAlc1xuIiwgc3JjLCBtc2cpOwotfQotCiB2b2lkIGNwdV9kaWUodm9pZCkKIHsKIAlpZiAocHBjX21kLmNwdV9kaWUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYwppbmRleCBhNTQ0MDVlLi4wMGI1MDc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTI2LDEyICsyNiwxMiBAQAogICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzaWduYWwgZnJhbWUKICAqLwogdm9pZCBfX3VzZXIgKiBnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkgICBzaXplX3QgZnJhbWVfc2l6ZSkKKwkJCSAgIHNpemVfdCBmcmFtZV9zaXplLCBpbnQgaXNfMzIpCiB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkc3AsIG5ld3NwOwogCiAgICAgICAgIC8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICovCi0gICAgICAgIG9sZHNwID0gcmVncy0+Z3ByWzFdOworICAgICAgICBvbGRzcCA9IGdldF9jbGVhbl9zcChyZWdzLCBpc18zMik7CiAKIAkvKiBDaGVjayBmb3IgYWx0IHN0YWNrICovCiAJaWYgKChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmgKaW5kZXggYjQyN2JmOC4uNmMwZGRmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2luZm9fZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBfX3VzZXIgKiBnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJICBzaXplX3QgZnJhbWVfc2l6ZSk7CisJCQkJICBzaXplX3QgZnJhbWVfc2l6ZSwgaW50IGlzXzMyKTsKIGV4dGVybiB2b2lkIHJlc3RvcmVfc2lnbWFzayhzaWdzZXRfdCAqc2V0KTsKIAogZXh0ZXJuIGludCBoYW5kbGVfc2lnbmFsMzIodW5zaWduZWQgbG9uZyBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCkBAIC0zOSwyMiArMzksMTIgQEAKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCi1zdGF0aWMgaW5saW5lIGludCBpc18zMmJpdF90YXNrKHZvaWQpCi17Ci0JcmV0dXJuIHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKTsKLX0KLQogZXh0ZXJuIGludCBoYW5kbGVfcnRfc2lnbmFsNjQoaW50IHNpZ25yLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAogCQkJICAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqc2V0LAogCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiAjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KIAotc3RhdGljIGlubGluZSBpbnQgaXNfMzJiaXRfdGFzayh2b2lkKQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfcnRfc2lnbmFsNjQoaW50IHNpZ25yLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAogCQkJCSAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqc2V0LAogCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCBiMTNhYmYzLi5kNjcwNDI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAJLyogU2V0IHVwIFNpZ25hbCBGcmFtZSAqLwogCS8qIFB1dCBhIFJlYWwgVGltZSBDb250ZXh0IG9udG8gc3RhY2sgKi8KLQlydF9zZiA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpydF9zZikpOworCXJ0X3NmID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKnJ0X3NmKSwgMSk7CiAJYWRkciA9IHJ0X3NmOwogCWlmICh1bmxpa2VseShydF9zZiA9PSBOVUxMKSkKIAkJZ290byBiYWRmcmFtZTsKQEAgLTExODIsNyArMTE4Miw3IEBACiAJdW5zaWduZWQgbG9uZyBuZXdzcCA9IDA7CiAKIAkvKiBTZXQgdXAgU2lnbmFsIEZyYW1lICovCi0JZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSksIDEpOwogCWlmICh1bmxpa2VseShmcmFtZSA9PSBOVUxMKSkKIAkJZ290byBiYWRmcmFtZTsKIAlzYyA9IChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKikgJmZyYW1lLT5zY3R4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggZTEzMjg5MS4uMmZlNmZjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAl1bnNpZ25lZCBsb25nIG5ld3NwID0gMDsKIAlsb25nIGVyciA9IDA7CiAKLQlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSkpOworCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSwgMCk7CiAJaWYgKHVubGlrZWx5KGZyYW1lID09IE5VTEwpKQogCQlnb3RvIGJhZGZyYW1lOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggNGEyZWUwOC4uZjQxYWVjOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTM0LDQ0ICsxMzQsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocHBjX2VuYWJsZV9wbWNzKTsKIAotI2lmIGRlZmluZWQoQ09ORklHXzZ4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDNjQpCi0vKiBYWFggY29udmVydCB0byBydXN0eSdzIG9uX29uZV9jcHUgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ1bl9vbl9jcHUodW5zaWduZWQgbG9uZyBjcHUsCi0JCQkgICAgICAgIHVuc2lnbmVkIGxvbmcgKCpmdW5jKSh1bnNpZ25lZCBsb25nKSwKLQkJCQl1bnNpZ25lZCBsb25nIGFyZykKLXsKLQljcHVtYXNrX3Qgb2xkX2FmZmluaXR5ID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXVuc2lnbmVkIGxvbmcgcmV0OwotCi0JLyogc2hvdWxkIHJldHVybiAtRUlOVkFMIHRvIHVzZXJzcGFjZSAqLwotCWlmIChzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGZ1bmMoYXJnKTsKLQotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkX2FmZmluaXR5KTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQogI2RlZmluZSBTWVNGU19QTUNTRVRVUChOQU1FLCBBRERSRVNTKSBcCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkXyMjTkFNRSh1bnNpZ25lZCBsb25nIGp1bmspIFwKK3N0YXRpYyB2b2lkIHJlYWRfIyNOQU1FKHZvaWQgKnZhbCkgXAogeyBcCi0JcmV0dXJuIG1mc3ByKEFERFJFU1MpOyBcCisJKih1bnNpZ25lZCBsb25nICopdmFsID0gbWZzcHIoQUREUkVTUyk7CVwKIH0gXAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfIyNOQU1FKHVuc2lnbmVkIGxvbmcgdmFsKSBcCitzdGF0aWMgdm9pZCB3cml0ZV8jI05BTUUodm9pZCAqdmFsKSBcCiB7IFwKIAlwcGNfZW5hYmxlX3BtY3MoKTsgXAotCW10c3ByKEFERFJFU1MsIHZhbCk7IFwKLQlyZXR1cm4gMDsgXAorCW10c3ByKEFERFJFU1MsICoodW5zaWduZWQgbG9uZyAqKXZhbCk7CVwKIH0gXAogc3RhdGljIHNzaXplX3Qgc2hvd18jI05BTUUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgXAogCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIFwKIAkJCWNoYXIgKmJ1ZikgXAogeyBcCiAJc3RydWN0IGNwdSAqY3B1ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGNwdSwgc3lzZGV2KTsgXAotCXVuc2lnbmVkIGxvbmcgdmFsID0gcnVuX29uX2NwdShjcHUtPnN5c2Rldi5pZCwgcmVhZF8jI05BTUUsIDApOyBcCisJdW5zaWduZWQgbG9uZyB2YWw7IFwKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LT5zeXNkZXYuaWQsIHJlYWRfIyNOQU1FLCAmdmFsLCAxKTsJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgdmFsKTsgXAogfSBcCiBzdGF0aWMgc3NpemVfdCBfX3VzZWQgXApAQCAtMTgzLDcgKzE2Miw3IEBACiAJaW50IHJldCA9IHNzY2FuZihidWYsICIlbHgiLCAmdmFsKTsgXAogCWlmIChyZXQgIT0gMSkgXAogCQlyZXR1cm4gLUVJTlZBTDsgXAotCXJ1bl9vbl9jcHUoY3B1LT5zeXNkZXYuaWQsIHdyaXRlXyMjTkFNRSwgdmFsKTsgXAorCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUtPnN5c2Rldi5pZCwgd3JpdGVfIyNOQU1FLCAmdmFsLCAxKTsgXAogCXJldHVybiBjb3VudDsgXAogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggNTQ1N2U5NS4uNjc4ZmJmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNTIsNiArNTIsMTAgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKyNpbmNsdWRlIDxhc20vZGJlbGwuaD4KKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQogaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNjM3LDI5ICs2NDEsNiBAQAogICogYml0cyBpcyBmYXN0ZXIgYW5kIGVhc2llci4KICAqCiAgKi8KLSNkZWZpbmUgSU5TVF9NRlNQUl9QVlIJCTB4N2MxZjQyYTYKLSNkZWZpbmUgSU5TVF9NRlNQUl9QVlJfTUFTSwkweGZjMWZmZmZmCi0KLSNkZWZpbmUgSU5TVF9EQ0JBCQkweDdjMDAwNWVjCi0jZGVmaW5lIElOU1RfRENCQV9NQVNLCQkweGZjMDAwN2ZlCi0KLSNkZWZpbmUgSU5TVF9NQ1JYUgkJMHg3YzAwMDQwMAotI2RlZmluZSBJTlNUX01DUlhSX01BU0sJCTB4ZmMwMDA3ZmUKLQotI2RlZmluZSBJTlNUX1NUUklORwkJMHg3YzAwMDQyYQotI2RlZmluZSBJTlNUX1NUUklOR19NQVNLCTB4ZmMwMDA3ZmUKLSNkZWZpbmUgSU5TVF9TVFJJTkdfR0VOX01BU0sJMHhmYzAwMDY3ZQotI2RlZmluZSBJTlNUX0xTV0kJCTB4N2MwMDA0YWEKLSNkZWZpbmUgSU5TVF9MU1dYCQkweDdjMDAwNDJhCi0jZGVmaW5lIElOU1RfU1RTV0kJCTB4N2MwMDA1YWEKLSNkZWZpbmUgSU5TVF9TVFNXWAkJMHg3YzAwMDUyYQotCi0jZGVmaW5lIElOU1RfUE9QQ05UQgkJMHg3YzAwMDBmNAotI2RlZmluZSBJTlNUX1BPUENOVEJfTUFTSwkweGZjMDAwN2ZlCi0KLSNkZWZpbmUgSU5TVF9JU0VMCQkweDdjMDAwMDFlCi0jZGVmaW5lIElOU1RfSVNFTF9NQVNLCQkweGZjMDAwMDNlCi0KIHN0YXRpYyBpbnQgZW11bGF0ZV9zdHJpbmdfaW5zdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3R3b3JkKQogewogCXU4IHJUID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CkBAIC02NzAsMjAgKzY1MSwyMCBAQAogCWludCBwb3MgPSAwOwogCiAJLyogRWFybHkgb3V0IGlmIHdlIGFyZSBhbiBpbnZhbGlkIGZvcm0gb2YgbHN3eCAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSA9PSBJTlNUX0xTV1gpCisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19NQVNLKSA9PSBQUENfSU5TVF9MU1dYKQogCQlpZiAoKHJUID09IHJBKSB8fCAoclQgPT0gTkJfUkIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlFQSA9IChyQSA9PSAwKSA/IDAgOiByZWdzLT5ncHJbckFdOwogCi0Jc3dpdGNoIChpbnN0d29yZCAmIElOU1RfU1RSSU5HX01BU0spIHsKLQkJY2FzZSBJTlNUX0xTV1g6Ci0JCWNhc2UgSU5TVF9TVFNXWDoKKwlzd2l0Y2ggKGluc3R3b3JkICYgUFBDX0lOU1RfU1RSSU5HX01BU0spIHsKKwkJY2FzZSBQUENfSU5TVF9MU1dYOgorCQljYXNlIFBQQ19JTlNUX1NUU1dYOgogCQkJRUEgKz0gTkJfUkI7CiAJCQludW1fYnl0ZXMgPSByZWdzLT54ZXIgJiAweDdmOwogCQkJYnJlYWs7Ci0JCWNhc2UgSU5TVF9MU1dJOgotCQljYXNlIElOU1RfU1RTV0k6CisJCWNhc2UgUFBDX0lOU1RfTFNXSToKKwkJY2FzZSBQUENfSU5TVF9TVFNXSToKIAkJCW51bV9ieXRlcyA9IChOQl9SQiA9PSAwKSA/IDMyIDogTkJfUkI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTY5NSw5ICs2NzYsOSBAQAogCQl1OCB2YWw7CiAJCXUzMiBzaGlmdCA9IDggKiAoMyAtIChwb3MgJiAweDMpKTsKIAotCQlzd2l0Y2ggKChpbnN0d29yZCAmIElOU1RfU1RSSU5HX01BU0spKSB7Ci0JCQljYXNlIElOU1RfTFNXWDoKLQkJCWNhc2UgSU5TVF9MU1dJOgorCQlzd2l0Y2ggKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19NQVNLKSkgeworCQkJY2FzZSBQUENfSU5TVF9MU1dYOgorCQkJY2FzZSBQUENfSU5TVF9MU1dJOgogCQkJCWlmIChnZXRfdXNlcih2YWwsICh1OCBfX3VzZXIgKilFQSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJCS8qIGZpcnN0IHRpbWUgdXBkYXRpbmcgdGhpcyByZWcsCkBAIC03MDYsOCArNjg3LDggQEAKIAkJCQkJcmVncy0+Z3ByW3JUXSA9IDA7CiAJCQkJcmVncy0+Z3ByW3JUXSB8PSB2YWwgPDwgc2hpZnQ7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIElOU1RfU1RTV0k6Ci0JCQljYXNlIElOU1RfU1RTV1g6CisJCQljYXNlIFBQQ19JTlNUX1NUU1dJOgorCQkJY2FzZSBQUENfSU5TVF9TVFNXWDoKIAkJCQl2YWwgPSByZWdzLT5ncHJbclRdID4+IHNoaWZ0OwogCQkJCWlmIChwdXRfdXNlcih2YWwsICh1OCBfX3VzZXIgKilFQSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzc1LDE4ICs3NTYsMTggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiBFbXVsYXRlIHRoZSBtZnNwciByRCwgUFZSLiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX01GU1BSX1BWUl9NQVNLKSA9PSBJTlNUX01GU1BSX1BWUikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9NRlNQUl9QVlJfTUFTSykgPT0gUFBDX0lOU1RfTUZTUFJfUFZSKSB7CiAJCXJkID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CiAJCXJlZ3MtPmdwcltyZF0gPSBtZnNwcihTUFJOX1BWUik7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIEVtdWxhdGluZyB0aGUgZGNiYSBpbnNuIGlzIGp1c3QgYSBuby1vcC4gICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfRENCQV9NQVNLKSA9PSBJTlNUX0RDQkEpCisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX0RDQkFfTUFTSykgPT0gUFBDX0lOU1RfRENCQSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBFbXVsYXRlIHRoZSBtY3J4ciBpbnNuLiAgKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9NQ1JYUl9NQVNLKSA9PSBJTlNUX01DUlhSKSB7CisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX01DUlhSX01BU0spID09IFBQQ19JTlNUX01DUlhSKSB7CiAJCWludCBzaGlmdCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFjOwogCQl1bnNpZ25lZCBsb25nIG1zayA9IDB4ZjAwMDAwMDBVTCA+PiBzaGlmdDsKIApAQCAtNzk2LDE2ICs3NzcsMTYgQEAKIAl9CiAKIAkvKiBFbXVsYXRlIGxvYWQvc3RvcmUgc3RyaW5nIGluc24uICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfU1RSSU5HX0dFTl9NQVNLKSA9PSBJTlNUX1NUUklORykKKwlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfU1RSSU5HX0dFTl9NQVNLKSA9PSBQUENfSU5TVF9TVFJJTkcpCiAJCXJldHVybiBlbXVsYXRlX3N0cmluZ19pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAogCS8qIEVtdWxhdGUgdGhlIHBvcGNudGIgKFBvcHVsYXRpb24gQ291bnQgQnl0ZXMpIGluc3RydWN0aW9uLiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX1BPUENOVEJfTUFTSykgPT0gSU5TVF9QT1BDTlRCKSB7CisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1BPUENOVEJfTUFTSykgPT0gUFBDX0lOU1RfUE9QQ05UQikgewogCQlyZXR1cm4gZW11bGF0ZV9wb3BjbnRiX2luc3QocmVncywgaW5zdHdvcmQpOwogCX0KIAogCS8qIEVtdWxhdGUgaXNlbCAoSW50ZWdlciBTZWxlY3QpIGluc3RydWN0aW9uICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfSVNFTF9NQVNLKSA9PSBJTlNUX0lTRUwpIHsKKwlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfSVNFTF9NQVNLKSA9PSBQUENfSU5TVF9JU0VMKSB7CiAJCXJldHVybiBlbXVsYXRlX2lzZWwocmVncywgaW5zdHdvcmQpOwogCX0KIApAQCAtMTE0NCw2ICsxMTI1LDI0IEBACiAjZW5kaWYgLyogQ09ORklHX1ZTWCAqLwogCiAjaWZkZWYgQ09ORklHX0ZTTF9CT09LRQorCit2b2lkIGRvb3JiZWxsX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgbXNnOworCisJaWYgKG51bV9vbmxpbmVfY3B1cygpIDwgMikKKwkJcmV0dXJuOworCisJZm9yIChtc2cgPSAwOyBtc2cgPCA0OyBtc2crKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtjcHVdKSkKKwkJCXNtcF9tZXNzYWdlX3JlY3YobXNnKTsKKyNlbHNlCisJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVjZWl2ZWQgZG9vcmJlbGwgb24gbm9uLXNtcCBzeXN0ZW1cbiIpOworI2VuZGlmCit9CisKIHZvaWQgQ2FjaGVMb2NraW5nRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCmluZGV4IDdkNmM5YmIuLmZjOWFmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KIAogdm9pZCAoKnVkYmdfcHV0YykoY2hhciBjKTsKK3ZvaWQgKCp1ZGJnX2ZsdXNoKSh2b2lkKTsKIGludCAoKnVkYmdfZ2V0Yykodm9pZCk7CiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CiAKQEAgLTc2LDYgKzc3LDkgQEAKIAkJCXdoaWxlICgoYyA9ICpzKyspICE9ICdcMCcpCiAJCQkJdWRiZ19wdXRjKGMpOwogCQl9CisKKwkJaWYgKHVkYmdfZmx1c2gpCisJCQl1ZGJnX2ZsdXNoKCk7CiAJfQogI2lmIDAKIAllbHNlIHsKQEAgLTk4LDYgKzEwMiw5IEBACiAJCX0KIAl9CiAKKwlpZiAodWRiZ19mbHVzaCkKKwkJdWRiZ19mbHVzaCgpOworCiAJcmV0dXJuIG4gLSByZW1haW47CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKaW5kZXggN2I3ZGE4Yy4uMDM2MmE4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKQEAgLTQ4LDE0ICs0OCwyMSBAQAogCiBzdGF0aWMgc3RydWN0IE5TMTY1NTAgX19pb21lbSAqdWRiZ19jb21wb3J0OwogCi1zdGF0aWMgdm9pZCB1ZGJnXzU1MF9wdXRjKGNoYXIgYykKK3N0YXRpYyB2b2lkIHVkYmdfNTUwX2ZsdXNoKHZvaWQpCiB7CiAJaWYgKHVkYmdfY29tcG9ydCkgewogCQl3aGlsZSAoKGluXzgoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJb3V0XzgoJnVkYmdfY29tcG9ydC0+dGhyLCBjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNTUwX3B1dGMoY2hhciBjKQoreworCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJaWYgKGMgPT0gJ1xuJykKIAkJCXVkYmdfNTUwX3B1dGMoJ1xyJyk7CisJCXVkYmdfNTUwX2ZsdXNoKCk7CisJCW91dF84KCZ1ZGJnX2NvbXBvcnQtPnRociwgYyk7CiAJfQogfQogCkBAIC0xMDgsNiArMTE1LDcgQEAKIAkJLyogQ2xlYXIgJiBlbmFibGUgRklGT3MgKi8KIAkJb3V0XzgoJnVkYmdfY29tcG9ydC0+ZmNyICwweDA3KTsKIAkJdWRiZ19wdXRjID0gdWRiZ181NTBfcHV0YzsKKwkJdWRiZ19mbHVzaCA9IHVkYmdfNTUwX2ZsdXNoOwogCQl1ZGJnX2dldGMgPSB1ZGJnXzU1MF9nZXRjOwogCQl1ZGJnX2dldGNfcG9sbCA9IHVkYmdfNTUwX2dldGNfcG9sbDsKIAl9CkBAIC0xNDksMTQgKzE1NywyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BQQ19NQVBMRQotdm9pZCB1ZGJnX21hcGxlX3JlYWxfcHV0YyhjaGFyIGMpCit2b2lkIHVkYmdfbWFwbGVfcmVhbF9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChyZWFsX3JlYWRiKCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCXJlYWxfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJfQorfQorCit2b2lkIHVkYmdfbWFwbGVfcmVhbF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnX21hcGxlX3JlYWxfcHV0YygnXHInKTsKKwkJdWRiZ19tYXBsZV9yZWFsX2ZsdXNoKCk7CisJCXJlYWxfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CiAJfQogfQogCkBAIC0xNjUsMjAgKzE4MCwyOCBAQAogCXVkYmdfY29tcG9ydCA9IChzdHJ1Y3QgTlMxNjU1MCBfX2lvbWVtICopMHhmNDAwMDNmODsKIAogCXVkYmdfcHV0YyA9IHVkYmdfbWFwbGVfcmVhbF9wdXRjOworCXVkYmdfZmx1c2ggPSB1ZGJnX21hcGxlX3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gTlVMTDsKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NQVBMRSAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19QQVNFTUkKLXZvaWQgdWRiZ19wYXNfcmVhbF9wdXRjKGNoYXIgYykKK3ZvaWQgdWRiZ19wYXNfcmVhbF9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChyZWFsXzIwNV9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCiAJCQkvKiB3YWl0IGZvciBpZGxlICovOwotCQlyZWFsXzIwNV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3ZvaWQgdWRiZ19wYXNfcmVhbF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnX3Bhc19yZWFsX3B1dGMoJ1xyJyk7CisJCXVkYmdfcGFzX3JlYWxfZmx1c2goKTsKKwkJcmVhbF8yMDVfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CiAJfQogfQogCkBAIC0xODcsNiArMjEwLDcgQEAKIAl1ZGJnX2NvbXBvcnQgPSAoc3RydWN0IE5TMTY1NTAgX19pb21lbSAqKTB4ZmNmZjAzZjhVTDsKIAogCXVkYmdfcHV0YyA9IHVkYmdfcGFzX3JlYWxfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ19wYXNfcmVhbF9mbHVzaDsKIAl1ZGJnX2dldGMgPSBOVUxMOwogCXVkYmdfZ2V0Y19wb2xsID0gTlVMTDsKIH0KQEAgLTE5NSwxNCArMjE5LDIxIEBACiAjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHgKICNpbmNsdWRlIDxwbGF0Zm9ybXMvNDR4LzQ0eC5oPgogCi1zdGF0aWMgdm9pZCB1ZGJnXzQ0eF9hczFfcHV0YyhjaGFyIGMpCitzdGF0aWMgaW50IHVkYmdfNDR4X2FzMV9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChhczFfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJYXMxX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKworc3RhdGljIHZvaWQgdWRiZ180NHhfYXMxX3B1dGMoY2hhciBjKQoreworCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJaWYgKGMgPT0gJ1xuJykKIAkJCXVkYmdfNDR4X2FzMV9wdXRjKCdccicpOworCQl1ZGJnXzQ0eF9hczFfZmx1c2goKTsKKwkJYXMxX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMjIyLDE5ICsyNTMsMjcgQEAKIAkJKHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKilQUEM0NHhfRUFSTFlfREVCVUdfVklSVEFERFI7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnXzQ0eF9hczFfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ180NHhfYXMxX2ZsdXNoOwogCXVkYmdfZ2V0YyA9IHVkYmdfNDR4X2FzMV9nZXRjOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4ICovCiAKICNpZmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweAotc3RhdGljIHZvaWQgdWRiZ180MHhfcmVhbF9wdXRjKGNoYXIgYykKK3N0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCiAJCQkvKiB3YWl0IGZvciBpZGxlICovOwotCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKworc3RhdGljIHZvaWQgdWRiZ180MHhfcmVhbF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzQweF9yZWFsX3B1dGMoJ1xyJyk7CisJCXVkYmdfNDB4X3JlYWxfZmx1c2goKTsKKwkJcmVhbF93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKIAl9CiB9CiAKQEAgLTI1NCw2ICsyOTMsNyBAQAogCQlDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweF9QSFlTQUREUjsKIAogCXVkYmdfcHV0YyA9IHVkYmdfNDB4X3JlYWxfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ180MHhfcmVhbF9mbHVzaDsKIAl1ZGJnX2dldGMgPSB1ZGJnXzQweF9yZWFsX2dldGM7CiAJdWRiZ19nZXRjX3BvbGwgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDY3ZjA3ZjQuLmI5ZWYxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTU4LDYgKzU4LDcgQEAKIAkJU0NIRURfVEVYVAogCQlMT0NLX1RFWFQKIAkJS1BST0JFU19URVhUCisJCUlSUUVOVFJZX1RFWFQKIAogI2lmZGVmIENPTkZJR19QUEMzMgogCQkqKC5nb3QxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYyBiL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKaW5kZXggYjdkYzRjMS4uMDA1YTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCkBAIC0yOSwxMjEgKzI5LDExIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyoKLSAqIFRoaXMgYWRkcmVzcyByYW5nZSBkZWZhdWx0cyB0byBhIHZhbHVlIHRoYXQgaXMgc2FmZSBmb3IgYWxsCi0gKiBwbGF0Zm9ybXMgd2hpY2ggY3VycmVudGx5IHNldCBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFLiBJdAotICogY2FuIGJlIGZ1cnRoZXIgY29uZmlndXJlZCBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zIHVuZGVyCi0gKiB0aGUgIkFkdmFuY2VkIFNldHVwIiBtZW51LiAtTWF0dAotICovCi0jZGVmaW5lIENPTlNJU1RFTlRfQkFTRQkoQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQpCi0jZGVmaW5lIENPTlNJU1RFTlRfRU5ECShDT05GSUdfQ09OU0lTVEVOVF9TVEFSVCArIENPTkZJR19DT05TSVNURU5UX1NJWkUpCi0jZGVmaW5lIENPTlNJU1RFTlRfT0ZGU0VUKHgpCSgoKHVuc2lnbmVkIGxvbmcpKHgpIC0gQ09OU0lTVEVOVF9CQVNFKSA+PiBQQUdFX1NISUZUKQotCi0vKgotICogVGhpcyBpcyB0aGUgcGFnZSB0YWJsZSAoMk1CKSBjb3ZlcmluZyB1bmNhY2hlZCwgRE1BIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMKLSAqLwotc3RhdGljIHB0ZV90ICpjb25zaXN0ZW50X3B0ZTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uc2lzdGVudF9sb2NrKTsKLQotLyoKLSAqIFZNIHJlZ2lvbiBoYW5kbGluZyBzdXBwb3J0LgotICoKLSAqIFRoaXMgc2hvdWxkIGJlY29tZSBzb21ldGhpbmcgZ2VuZXJpYywgaGFuZGxpbmcgVk0gcmVnaW9uIGFsbG9jYXRpb25zIGZvcgotICogdm1hbGxvYyBhbmQgc2ltaWxhciAoaW9yZW1hcCwgbW9kdWxlIHNwYWNlLCBldGMpLgotICoKLSAqIEkgZW52aXNhZ2Ugdm1hbGxvYygpJ3Mgc3VwcG9ydGluZyB2bV9zdHJ1Y3QgYmVjb21pbmc6Ci0gKgotICogIHN0cnVjdCB2bV9zdHJ1Y3QgewotICogICAgc3RydWN0IHZtX3JlZ2lvbglyZWdpb247Ci0gKiAgICB1bnNpZ25lZCBsb25nCWZsYWdzOwotICogICAgc3RydWN0IHBhZ2UJKipwYWdlczsKLSAqICAgIHVuc2lnbmVkIGludAlucl9wYWdlczsKLSAqICAgIHVuc2lnbmVkIGxvbmcJcGh5c19hZGRyOwotICogIH07Ci0gKgotICogZ2V0X3ZtX2FyZWEoKSB3b3VsZCB0aGVuIGNhbGwgdm1fcmVnaW9uX2FsbG9jIHdpdGggYW4gYXBwcm9wcmlhdGUKLSAqIHN0cnVjdCB2bV9yZWdpb24gaGVhZCAoZWcpOgotICoKLSAqICBzdHJ1Y3Qgdm1fcmVnaW9uIHZtYWxsb2NfaGVhZCA9IHsKLSAqCS52bV9saXN0CT0gTElTVF9IRUFEX0lOSVQodm1hbGxvY19oZWFkLnZtX2xpc3QpLAotICoJLnZtX3N0YXJ0CT0gVk1BTExPQ19TVEFSVCwKLSAqCS52bV9lbmQJCT0gVk1BTExPQ19FTkQsCi0gKiAgfTsKLSAqCi0gKiBIb3dldmVyLCB2bWFsbG9jX2hlYWQudm1fc3RhcnQgaXMgdmFyaWFibGUgKHR5cGljYWxseSwgaXQgaXMgZGVwZW5kZW50IG9uCi0gKiB0aGUgYW1vdW50IG9mIFJBTSBmb3VuZCBhdCBib290IHRpbWUuKSAgSSB3b3VsZCBpbWFnaW5lIHRoYXQgZ2V0X3ZtX2FyZWEoKQotICogd291bGQgaGF2ZSB0byBpbml0aWFsaXNlIHRoaXMgZWFjaCB0aW1lIHByaW9yIHRvIGNhbGxpbmcgdm1fcmVnaW9uX2FsbG9jKCkuCi0gKi8KLXN0cnVjdCBwcGNfdm1fcmVnaW9uIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXZtX2xpc3Q7Ci0JdW5zaWduZWQgbG9uZwkJdm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZwkJdm1fZW5kOwotfTsKLQotc3RhdGljIHN0cnVjdCBwcGNfdm1fcmVnaW9uIGNvbnNpc3RlbnRfaGVhZCA9IHsKLQkudm1fbGlzdAk9IExJU1RfSEVBRF9JTklUKGNvbnNpc3RlbnRfaGVhZC52bV9saXN0KSwKLQkudm1fc3RhcnQJPSBDT05TSVNURU5UX0JBU0UsCi0JLnZtX2VuZAkJPSBDT05TSVNURU5UX0VORCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqCi1wcGNfdm1fcmVnaW9uX2FsbG9jKHN0cnVjdCBwcGNfdm1fcmVnaW9uICpoZWFkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGhlYWQtPnZtX3N0YXJ0LCBlbmQgPSBoZWFkLT52bV9lbmQgLSBzaXplOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmMsICpuZXc7Ci0KLQluZXcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiksIGdmcCk7Ci0JaWYgKCFuZXcpCi0JCWdvdG8gb3V0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmaGVhZC0+dm1fbGlzdCwgdm1fbGlzdCkgewotCQlpZiAoKGFkZHIgKyBzaXplKSA8IGFkZHIpCi0JCQlnb3RvIG5vc3BjOwotCQlpZiAoKGFkZHIgKyBzaXplKSA8PSBjLT52bV9zdGFydCkKLQkJCWdvdG8gZm91bmQ7Ci0JCWFkZHIgPSBjLT52bV9lbmQ7Ci0JCWlmIChhZGRyID4gZW5kKQotCQkJZ290byBub3NwYzsKLQl9Ci0KLSBmb3VuZDoKLQkvKgotCSAqIEluc2VydCB0aGlzIGVudHJ5IF9iZWZvcmVfIHRoZSBvbmUgd2UgZm91bmQuCi0JICovCi0JbGlzdF9hZGRfdGFpbCgmbmV3LT52bV9saXN0LCAmYy0+dm1fbGlzdCk7Ci0JbmV3LT52bV9zdGFydCA9IGFkZHI7Ci0JbmV3LT52bV9lbmQgPSBhZGRyICsgc2l6ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCXJldHVybiBuZXc7Ci0KLSBub3NwYzoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQlrZnJlZShuZXcpOwotIG91dDoKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBwcGNfdm1fcmVnaW9uICpwcGNfdm1fcmVnaW9uX2ZpbmQoc3RydWN0IHBwY192bV9yZWdpb24gKmhlYWQsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqYzsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmhlYWQtPnZtX2xpc3QsIHZtX2xpc3QpIHsKLQkJaWYgKGMtPnZtX3N0YXJ0ID09IGFkZHIpCi0JCQlnb3RvIG91dDsKLQl9Ci0JYyA9IE5VTEw7Ci0gb3V0OgotCXJldHVybiBjOwotfQotCi0vKgogICogQWxsb2NhdGUgRE1BLWNvaGVyZW50IG1lbW9yeSBzcGFjZSBhbmQgcmV0dXJuIGJvdGggdGhlIGtlcm5lbCByZW1hcHBlZAogICogdmlydHVhbCBhbmQgYnVzIGFkZHJlc3MgZm9yIHRoYXQgc3BhY2UuCiAgKi8KQEAgLTE1MSwyMSArNDEsMjEgQEAKIF9fZG1hX2FsbG9jX2NvaGVyZW50KHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqYzsKIAl1bnNpZ25lZCBsb25nIG9yZGVyOworCWludCBpOworCXVuc2lnbmVkIGludCBucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSk+PlBBR0VfU0hJRlQ7CisJdW5zaWduZWQgaW50IGFycmF5X3NpemUgPSBucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBwYWdlICplbmQ7CiAJdTY0IG1hc2sgPSAweDAwZmZmZmZmLCBsaW1pdDsgLyogSVNBIGRlZmF1bHQgKi8KKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCi0JaWYgKCFjb25zaXN0ZW50X3B0ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgaW5pdGlhbGlzZWRcbiIsIF9fZnVuY19fKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KKwlCVUdfT04oIW1lbV9pbml0X2RvbmUpOwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWxpbWl0ID0gKG1hc2sgKyAxKSAmIH5tYXNrOwotCWlmICgobGltaXQgJiYgc2l6ZSA+PSBsaW1pdCkgfHwgc2l6ZSA+PSAoQ09OU0lTVEVOVF9FTkQgLSBDT05TSVNURU5UX0JBU0UpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvaGVyZW50IGFsbG9jYXRpb24gdG9vIGJpZyAocmVxdWVzdGVkICUjeCBtYXNrICUjTHgpXG4iLAotCQkgICAgICAgc2l6ZSwgbWFzayk7CisJaWYgKGxpbWl0ICYmIHNpemUgPj0gbGltaXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29oZXJlbnQgYWxsb2NhdGlvbiB0b28gYmlnIChyZXF1ZXN0ZWQgIgorCQkJCSIlI3ggbWFzayAlI0x4KVxuIiwgc2l6ZSwgbWFzayk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTc4LDYgKzY4LDggQEAKIAlpZiAoIXBhZ2UpCiAJCWdvdG8gbm9fcGFnZTsKIAorCWVuZCA9IHBhZ2UgKyAoMSA8PCBvcmRlcik7CisKIAkvKgogCSAqIEludmFsaWRhdGUgYW55IGRhdGEgdGhhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZQogCSAqIGtlcm5lbCBkaXJlY3QtbWFwcGVkIHJlZ2lvbiBmb3IgZGV2aWNlIERNQS4KQEAgLTE4OCw0OCArODAsNTkgQEAKIAkJZmx1c2hfZGNhY2hlX3JhbmdlKGthZGRyLCBrYWRkciArIHNpemUpOwogCX0KIAorCXNwbGl0X3BhZ2UocGFnZSwgb3JkZXIpOworCiAJLyoKLQkgKiBBbGxvY2F0ZSBhIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgY29uc2lzdGVudCBtYXBwaW5nIHJlZ2lvbi4KKwkgKiBTZXQgdGhlICJkbWEgaGFuZGxlIgogCSAqLwotCWMgPSBwcGNfdm1fcmVnaW9uX2FsbG9jKCZjb25zaXN0ZW50X2hlYWQsIHNpemUsCi0JCQkgICAgZ2ZwICYgfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKSk7Ci0JaWYgKGMpIHsKLQkJdW5zaWduZWQgbG9uZyB2YWRkciA9IGMtPnZtX3N0YXJ0OwotCQlwdGVfdCAqcHRlID0gY29uc2lzdGVudF9wdGUgKyBDT05TSVNURU5UX09GRlNFVCh2YWRkcik7Ci0JCXN0cnVjdCBwYWdlICplbmQgPSBwYWdlICsgKDEgPDwgb3JkZXIpOworCSpoYW5kbGUgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiAKLQkJc3BsaXRfcGFnZShwYWdlLCBvcmRlcik7CisJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpKTsKKwlpZiAoIWFyZWEpCisJCWdvdG8gb3V0X2ZyZWVfcGFnZXM7CiAKLQkJLyoKLQkJICogU2V0IHRoZSAiZG1hIGhhbmRsZSIKLQkJICovCi0JCSpoYW5kbGUgPSBwYWdlX3RvX3BoeXMocGFnZSk7CisJaWYgKGFycmF5X3NpemUgPiBQQUdFX1NJWkUpIHsKKwkJcGFnZXMgPSB2bWFsbG9jKGFycmF5X3NpemUpOworCQlhcmVhLT5mbGFncyB8PSBWTV9WUEFHRVM7CisJfSBlbHNlIHsKKwkJcGFnZXMgPSBrbWFsbG9jKGFycmF5X3NpemUsIEdGUF9LRVJORUwpOworCX0KKwlpZiAoIXBhZ2VzKQorCQlnb3RvIG91dF9mcmVlX2FyZWE7CiAKLQkJZG8gewotCQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CisJYXJlYS0+cGFnZXMgPSBwYWdlczsKKwlhcmVhLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCi0JCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCQlzZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwKLQkJCQkgICBwdGUsIG1rX3B0ZShwYWdlLCBwZ3Byb3Rfbm9uY2FjaGVkKFBBR0VfS0VSTkVMKSkpOwotCQkJcGFnZSsrOwotCQkJcHRlKys7Ci0JCQl2YWRkciArPSBQQUdFX1NJWkU7Ci0JCX0gd2hpbGUgKHNpemUgLT0gUEFHRV9TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKKwkJcGFnZXNbaV0gPSBwYWdlICsgaTsKIAotCQkvKgotCQkgKiBGcmVlIHRoZSBvdGhlcndpc2UgdW51c2VkIHBhZ2VzLgotCQkgKi8KLQkJd2hpbGUgKHBhZ2UgPCBlbmQpIHsKLQkJCV9fZnJlZV9wYWdlKHBhZ2UpOwotCQkJcGFnZSsrOwotCQl9CisJaWYgKG1hcF92bV9hcmVhKGFyZWEsIHBncHJvdF9ub25jYWNoZWQoUEFHRV9LRVJORUwpLCAmcGFnZXMpKQorCQlnb3RvIG91dF91bm1hcDsKIAotCQlyZXR1cm4gKHZvaWQgKiljLT52bV9zdGFydDsKKwkvKgorCSAqIEZyZWUgdGhlIG90aGVyd2lzZSB1bnVzZWQgcGFnZXMuCisJICovCisJcGFnZSArPSBucl9wYWdlczsKKwl3aGlsZSAocGFnZSA8IGVuZCkgeworCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJcGFnZSsrOwogCX0KIAorCXJldHVybiBhcmVhLT5hZGRyOworb3V0X3VubWFwOgorCXZ1bm1hcChhcmVhLT5hZGRyKTsKKwlpZiAoYXJyYXlfc2l6ZSA+IFBBR0VfU0laRSkKKwkJdmZyZWUocGFnZXMpOworCWVsc2UKKwkJa2ZyZWUocGFnZXMpOworCWdvdG8gb3V0X2ZyZWVfcGFnZXM7CitvdXRfZnJlZV9hcmVhOgorCWZyZWVfdm1fYXJlYShhcmVhKTsKK291dF9mcmVlX3BhZ2VzOgogCWlmIChwYWdlKQogCQlfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpOwotIG5vX3BhZ2U6Citub19wYWdlOgogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChfX2RtYV9hbGxvY19jb2hlcmVudCk7CkBAIC0yMzksMTA0ICsxNDIsMTIgQEAKICAqLwogdm9pZCBfX2RtYV9mcmVlX2NvaGVyZW50KHNpemVfdCBzaXplLCB2b2lkICp2YWRkcikKIHsKLQlzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBhZGRyOwotCXB0ZV90ICpwdGVwOworCXZmcmVlKHZhZGRyKTsKIAotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCi0JYyA9IHBwY192bV9yZWdpb25fZmluZCgmY29uc2lzdGVudF9oZWFkLCAodW5zaWduZWQgbG9uZyl2YWRkcik7Ci0JaWYgKCFjKQotCQlnb3RvIG5vX2FyZWE7Ci0KLQlpZiAoKGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0KSAhPSBzaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyZWVpbmcgd3JvbmcgY29oZXJlbnQgc2l6ZSAoJWxkICE9ICVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBjLT52bV9lbmQgLSBjLT52bV9zdGFydCwgc2l6ZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJc2l6ZSA9IGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0OwotCX0KLQotCXB0ZXAgPSBjb25zaXN0ZW50X3B0ZSArIENPTlNJU1RFTlRfT0ZGU0VUKGMtPnZtX3N0YXJ0KTsKLQlhZGRyID0gYy0+dm1fc3RhcnQ7Ci0JZG8gewotCQlwdGVfdCBwdGUgPSBwdGVwX2dldF9hbmRfY2xlYXIoJmluaXRfbW0sIGFkZHIsIHB0ZXApOwotCQl1bnNpZ25lZCBsb25nIHBmbjsKLQotCQlwdGVwKys7Ci0JCWFkZHIgKz0gUEFHRV9TSVpFOwotCi0JCWlmICghcHRlX25vbmUocHRlKSAmJiBwdGVfcHJlc2VudChwdGUpKSB7Ci0JCQlwZm4gPSBwdGVfcGZuKHB0ZSk7Ci0KLQkJCWlmIChwZm5fdmFsaWQocGZuKSkgewotCQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQkJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQotCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGJhZCBwYWdlIGluIGtlcm5lbCBwYWdlIHRhYmxlXG4iLAotCQkgICAgICAgX19mdW5jX18pOwotCX0gd2hpbGUgKHNpemUgLT0gUEFHRV9TSVpFKTsKLQotCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYy0+dm1fc3RhcnQsIGMtPnZtX2VuZCk7Ci0KLQlsaXN0X2RlbCgmYy0+dm1fbGlzdCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlKGMpOwotCXJldHVybjsKLQotIG5vX2FyZWE6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogdHJ5aW5nIHRvIGZyZWUgaW52YWxpZCBjb2hlcmVudCBhcmVhOiAlcFxuIiwKLQkgICAgICAgX19mdW5jX18sIHZhZGRyKTsKLQlkdW1wX3N0YWNrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fZG1hX2ZyZWVfY29oZXJlbnQpOwogCiAvKgotICogSW5pdGlhbGlzZSB0aGUgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbi4KLSAqLwotc3RhdGljIGludCBfX2luaXQgZG1hX2FsbG9jX2luaXQodm9pZCkKLXsKLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlOwotCWludCByZXQgPSAwOwotCi0JZG8gewotCQlwZ2QgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBDT05TSVNURU5UX0JBU0UpOwotCQlwdWQgPSBwdWRfYWxsb2MoJmluaXRfbW0sIHBnZCwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIENPTlNJU1RFTlRfQkFTRSk7Ci0JCWlmICghcG1kKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBwbWQgdGFibGVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJaWYgKCFwdGUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHB0ZSB0YWJsZXNcbiIsIF9fZnVuY19fKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCi0JCWNvbnNpc3RlbnRfcHRlID0gcHRlOwotCX0gd2hpbGUgKDApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotY29yZV9pbml0Y2FsbChkbWFfYWxsb2NfaW5pdCk7Ci0KLS8qCiAgKiBtYWtlIGFuIGFyZWEgY29uc2lzdGVudC4KICAqLwogdm9pZCBfX2RtYV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwppbmRleCA4YzVhMDNiLi43ZTg4NjViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCkBAIC04NSw3ICs4NSw3IEBACiAJfQogCiAJZm9yICg7IGRlc3QgPCBlbmQ7IGRlc3QrKykKLQkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZGVzdCwgUFBDX05PUF9JTlNUUik7CisJCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19JTlNUX05PUCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAJCWRlc3QgPSAodm9pZCAqKXN0YXJ0ICsgKnN0YXJ0OwotCQlwYXRjaF9pbnN0cnVjdGlvbihkZXN0LCBQUENfTFdTWU5DX0lOU1RSKTsKKwkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZGVzdCwgUFBDX0lOU1RfTFdTWU5DKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQppbmRleCBmOWU1MDZhLi4wYzE2YWI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCkBAIC0xLDYgKzEsNCBAQAogCi1vYmoteQkJCQk6PSBtYXRoLm8gZm1yLm8gbGZkLm8gc3RmZC5vCi0KIG9iai0kKENPTkZJR19NQVRIX0VNVUxBVElPTikJKz0gZmFicy5vIGZhZGQubyBmYWRkcy5vIGZjbXBvLm8gZmNtcHUubyBcCiAJCQkJCWZjdGl3Lm8gZmN0aXd6Lm8gZmRpdi5vIGZkaXZzLm8gXAogCQkJCQlmbWFkZC5vIGZtYWRkcy5vIGZtc3ViLm8gZm1zdWJzLm8gXApAQCAtOSw3ICs3LDggQEAKIAkJCQkJZnJlcy5vIGZyc3AubyBmcnNxcnRlLm8gZnNlbC5vIGxmcy5vIFwKIAkJCQkJZnNxcnQubwlmc3FydHMubyBmc3ViLm8gZnN1YnMubyBcCiAJCQkJCW1jcmZzLm8gbWZmcy5vIG10ZnNiMC5vIG10ZnNiMS5vIFwKLQkJCQkJbXRmc2YubyBtdGZzZmkubyBzdGZpd3gubyBzdGZzLm8KKwkJCQkJbXRmc2YubyBtdGZzZmkubyBzdGZpd3gubyBzdGZzLm8gXAorCQkJCQltYXRoLm8gZm1yLm8gbGZkLm8gc3RmZC5vCiAKIG9iai0kKENPTkZJR19TUEUpCQkrPSBtYXRoX2VmcC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQppbmRleCA5NTNjYzRhLi4xNzI5MGJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogRVhUUkFfQ0ZMQUdTCSs9IC1tbm8tbWluaW1hbC10b2MKIGVuZGlmCiAKLW9iai15CQkJCTo9IGZhdWx0Lm8gbWVtLm8gcGd0YWJsZS5vIFwKK29iai15CQkJCTo9IGZhdWx0Lm8gbWVtLm8gcGd0YWJsZS5vIGd1cC5vIFwKIAkJCQkgICBpbml0XyQoQ09ORklHX1dPUkRfU0laRSkubyBcCiAJCQkJICAgcGd0YWJsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR19QUENfTU1VX05PSEFTSCkJKz0gbW11X2NvbnRleHRfbm9oYXNoLm8gdGxiX25vaGFzaC5vIFwKQEAgLTE0LDcgKzE0LDcgQEAKIGhhc2gtJChDT05GSUdfUFBDX05BVElWRSkJOj0gaGFzaF9uYXRpdmVfNjQubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gaGFzaF91dGlsc182NC5vIFwKIAkJCQkgICBzbGJfbG93Lm8gc2xiLm8gc3RhYi5vIFwKLQkJCQkgICBndXAubyBtbWFwLm8gJChoYXNoLXkpCisJCQkJICAgbW1hcF82NC5vICQoaGFzaC15KQogb2JqLSQoQ09ORklHX1BQQ19TVERfTU1VXzMyKQkrPSBwcGNfbW11XzMyLm8KIG9iai0kKENPTkZJR19QUENfU1REX01NVSkJKz0gaGFzaF9sb3dfJChDT05GSUdfV09SRF9TSVpFKS5vIFwKIAkJCQkgICB0bGJfaGFzaCQoQ09ORklHX1dPUkRfU0laRSkubyBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCmluZGV4IDkxYzdiODYuLjc2OTkzOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCkBAIC0yNTMsNDUgKzI1MywzMyBAQAogI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAogCWlmIChpc19leGVjKSB7Ci0jaWYgIShkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKSkKLQkJLyogcHJvdGVjdGlvbiBmYXVsdCAqLworI2lmZGVmIENPTkZJR19QUENfU1REX01NVQorCQkvKiBQcm90ZWN0aW9uIGZhdWx0IG9uIGV4ZWMgZ28gc3RyYWlnaHQgdG8gZmFpbHVyZSBvbgorCQkgKiBIYXNoIGJhc2VkIE1NVXMgYXMgdGhleSBlaXRoZXIgZG9uJ3Qgc3VwcG9ydCBwZXItcGFnZQorCQkgKiBleGVjdXRlIHBlcm1pc3Npb24sIG9yIGlmIHRoZXkgZG8sIGl0J3MgaGFuZGxlZCBhbHJlYWR5CisJCSAqIGF0IHRoZSBoYXNoIGxldmVsLiBUaGlzIHRlc3Qgd291bGQgcHJvYmFibHkgaGF2ZSB0bworCQkgKiBiZSByZW1vdmVkIGlmIHdlIGNoYW5nZSB0aGUgd2F5IHRoaXMgd29ya3MgdG8gbWFrZSBoYXNoCisJCSAqIHByb2Nlc3NvcnMgdXNlIHRoZSBzYW1lIEkvRCBjYWNoZSBjb2hlcmVuY3kgbWVjaGFuaXNtCisJCSAqIGFzIGVtYmVkZGVkLgorCQkgKi8KIAkJaWYgKGVycm9yX2NvZGUgJiBEU0lTUl9QUk9URkFVTFQpCiAJCQlnb3RvIGJhZF9hcmVhOworI2VuZGlmIC8qIENPTkZJR19QUENfU1REX01NVSAqLworCiAJCS8qCiAJCSAqIEFsbG93IGV4ZWN1dGlvbiBmcm9tIHJlYWRhYmxlIGFyZWFzIGlmIHRoZSBNTVUgZG9lcyBub3QKIAkJICogcHJvdmlkZSBzZXBhcmF0ZSBjb250cm9scyBvdmVyIHJlYWRpbmcgYW5kIGV4ZWN1dGluZy4KKwkJICoKKwkJICogTm90ZTogVGhhdCBjb2RlIHVzZWQgdG8gbm90IGJlIGVuYWJsZWQgZm9yIDR4eC9Cb29rRS4KKwkJICogSXQgaXMgbm93IGFzIEkvRCBjYWNoZSBjb2hlcmVuY3kgZm9yIHRoZXNlIGlzIGRvbmUgYXQKKwkJICogc2V0X3B0ZV9hdCgpIHRpbWUgYW5kIEkgc2VlIG5vIHJlYXNvbiB3aHkgdGhlIHRlc3QKKwkJICogYmVsb3cgd291bGRuJ3QgYmUgdmFsaWQgb24gdGhvc2UgcHJvY2Vzc29ycy4gVGhpcyAtbWF5LQorCQkgKiBicmVhayBwcm9ncmFtcyBjb21waWxlZCB3aXRoIGEgcmVhbGx5IG9sZCBBQkkgdGhvdWdoLgogCQkgKi8KIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpICYmCiAJCSAgICAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9FWEVDVVRFKSB8fAogCQkgICAgICEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUpKSkpCiAJCQlnb3RvIGJhZF9hcmVhOwotI2Vsc2UKLQkJcHRlX3QgKnB0ZXA7Ci0JCXBtZF90ICpwbWRwOwotCi0JCS8qIFNpbmNlIDR4eC9Cb29rLUUgc3VwcG9ydHMgcGVyLXBhZ2UgZXhlY3V0ZSBwZXJtaXNzaW9uLAotCQkgKiB3ZSBsYXppbHkgZmx1c2ggZGNhY2hlIHRvIGljYWNoZS4gKi8KLQkJcHRlcCA9IE5VTEw7Ci0JCWlmIChnZXRfcHRlcHRyKG1tLCBhZGRyZXNzLCAmcHRlcCwgJnBtZHApKSB7Ci0JCQlzcGlubG9ja190ICpwdGwgPSBwdGVfbG9ja3B0cihtbSwgcG1kcCk7Ci0JCQlzcGluX2xvY2socHRsKTsKLQkJCWlmIChwdGVfcHJlc2VudCgqcHRlcCkpIHsKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKCpwdGVwKTsKLQotCQkJCWlmICghdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpKSB7Ci0JCQkJCWZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShwYWdlKTsKLQkJCQkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7Ci0JCQkJfQotCQkJCXB0ZV91cGRhdGUocHRlcCwgMCwgX1BBR0VfSFdFWEVDIHwKLQkJCQkJICAgX1BBR0VfQUNDRVNTRUQpOwotCQkJCWxvY2FsX2ZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7Ci0JCQkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwotCQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7Ci0JCX0KLSNlbmRpZgogCS8qIGEgd3JpdGUgKi8KIAl9IGVsc2UgaWYgKGlzX3dyaXRlKSB7CiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwppbmRleCBlYTZlNDFlLi5iYjNkNjU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKQEAgLTU2LDEwICs1NiwxNCBAQAogCiBleHRlcm4gdm9pZCBsb2FkY2FtX2VudHJ5KHVuc2lnbmVkIGludCBpbmRleCk7CiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19jYW0wLCBfX2NhbTEsIF9fY2FtMjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhbVtDT05GSUdfTE9XTUVNX0NBTV9OVU1dOwogCiAjZGVmaW5lIE5VTV9UTEJDQU1TCSgxNikKIAorI2lmIGRlZmluZWQoQ09ORklHX0xPV01FTV9DQU1fTlVNX0JPT0wpICYmIChDT05GSUdfTE9XTUVNX0NBTV9OVU0gPj0gTlVNX1RMQkNBTVMpCisjZXJyb3IgIkxPV01FTV9DQU1fTlVNIG11c3QgYmUgbGVzcyB0aGFuIE5VTV9UTEJDQU1TIgorI2VuZGlmCisKIHN0cnVjdCB0bGJjYW0gVExCQ0FNW05VTV9UTEJDQU1TXTsKIAogc3RydWN0IHRsYmNhbXJhbmdlIHsKQEAgLTEwNyw3ICsxMTEsNyBAQAogCXVuc2lnbmVkIGludCB0c2l6ZSwgbHo7CiAKIAlhc20gKCJjbnRsencgJTAsJTEiIDogIj1yIiAobHopIDogInIiIChzaXplKSk7Ci0JdHNpemUgPSAoMjEgLSBseikgLyAyOworCXRzaXplID0gMjEgLSBsejsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoKGZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpID09IDApCkBAIC0xNTIsMTkgKzE1NiwxOSBAQAogCWxvYWRjYW1fZW50cnkoaW5kZXgpOwogfQogCi12b2lkIF9faW5pdCBjYW1fbWFwaW5fcmFtKHVuc2lnbmVkIGxvbmcgY2FtMCwgdW5zaWduZWQgbG9uZyBjYW0xLAotCQl1bnNpZ25lZCBsb25nIGNhbTIpCit1bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHZvaWQpCiB7Ci0Jc2V0dGxiY2FtKDAsIFBBR0VfT0ZGU0VULCBtZW1zdGFydF9hZGRyLCBjYW0wLCBfUEFHRV9LRVJORUwsIDApOwotCXRsYmNhbV9pbmRleCsrOwotCWlmIChjYW0xKSB7CisJdW5zaWduZWQgbG9uZyB2aXJ0ID0gUEFHRV9PRkZTRVQ7CisJcGh5c19hZGRyX3QgcGh5cyA9IG1lbXN0YXJ0X2FkZHI7CisKKwl3aGlsZSAoY2FtW3RsYmNhbV9pbmRleF0gJiYgdGxiY2FtX2luZGV4IDwgQVJSQVlfU0laRShjYW0pKSB7CisJCXNldHRsYmNhbSh0bGJjYW1faW5kZXgsIHZpcnQsIHBoeXMsIGNhbVt0bGJjYW1faW5kZXhdLCBQQUdFX0tFUk5FTF9YLCAwKTsKKwkJdmlydCArPSBjYW1bdGxiY2FtX2luZGV4XTsKKwkJcGh5cyArPSBjYW1bdGxiY2FtX2luZGV4XTsKIAkJdGxiY2FtX2luZGV4Kys7Ci0JCXNldHRsYmNhbSgxLCBQQUdFX09GRlNFVCtjYW0wLCBtZW1zdGFydF9hZGRyK2NhbTAsIGNhbTEsIF9QQUdFX0tFUk5FTCwgMCk7CiAJfQotCWlmIChjYW0yKSB7Ci0JCXRsYmNhbV9pbmRleCsrOwotCQlzZXR0bGJjYW0oMiwgUEFHRV9PRkZTRVQrY2FtMCtjYW0xLCBtZW1zdGFydF9hZGRyK2NhbTArY2FtMSwgY2FtMiwgX1BBR0VfS0VSTkVMLCAwKTsKLQl9CisKKwlyZXR1cm4gdmlydCAtIFBBR0VfT0ZGU0VUOwogfQogCiAvKgpAQCAtMTc1LDUxICsxNzksNDYgQEAKIAlmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSgpOwogfQogCi11bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHZvaWQpCi17Ci0JY2FtX21hcGluX3JhbShfX2NhbTAsIF9fY2FtMSwgX19jYW0yKTsKLQotCXJldHVybiBfX2NhbTAgKyBfX2NhbTEgKyBfX2NhbTI7Ci19Ci0KLQogdm9pZCBfX2luaXQKIGFkanVzdF90b3RhbF9sb3dtZW0odm9pZCkKIHsKLQlwaHlzX2FkZHJfdCBtYXhfbG93bWVtX3NpemUgPSBfX21heF9sb3dfbWVtb3J5OwotCXBoeXNfYWRkcl90IGNhbV9tYXhfc2l6ZSA9IDB4MTAwMDAwMDA7CiAJcGh5c19hZGRyX3QgcmFtOworCXVuc2lnbmVkIGludCBtYXhfY2FtID0gKG1mc3ByKFNQUk5fVExCMUNGRykgPj4gMTYpICYgMHhmZjsKKwljaGFyIGJ1ZltBUlJBWV9TSVpFKGNhbSkgKiA1ICsgMV0sICpwID0gYnVmOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmlydCA9IFBBR0VfT0ZGU0VUICYgMHhmZmZmZmZmZlVMOworCXVuc2lnbmVkIGxvbmcgcGh5cyA9IG1lbXN0YXJ0X2FkZHIgJiAweGZmZmZmZmZmVUw7CiAKLQkvKiBhZGp1c3QgQ0FNIHNpemUgdG8gbWF4X2xvd21lbV9zaXplICovCi0JaWYgKG1heF9sb3dtZW1fc2l6ZSA8IGNhbV9tYXhfc2l6ZSkKLQkJY2FtX21heF9zaXplID0gbWF4X2xvd21lbV9zaXplOworCS8qIENvbnZlcnQgKDRebWF4KSBrQiB0byAoMl5tYXgpIGJ5dGVzICovCisJbWF4X2NhbSA9IG1heF9jYW0gKiAyICsgMTA7CiAKLQkvKiBhZGp1c3QgbG93bWVtIHNpemUgdG8gbWF4X2xvd21lbV9zaXplICovCi0JcmFtID0gbWluKG1heF9sb3dtZW1fc2l6ZSwgdG90YWxfbG93bWVtKTsKKwkvKiBhZGp1c3QgbG93bWVtIHNpemUgdG8gX19tYXhfbG93X21lbW9yeSAqLworCXJhbSA9IG1pbigocGh5c19hZGRyX3QpX19tYXhfbG93X21lbW9yeSwgKHBoeXNfYWRkcl90KXRvdGFsX2xvd21lbSk7CiAKIAkvKiBDYWxjdWxhdGUgQ0FNIHZhbHVlcyAqLwotCV9fY2FtMCA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCWlmIChfX2NhbTAgPiBjYW1fbWF4X3NpemUpCi0JCV9fY2FtMCA9IGNhbV9tYXhfc2l6ZTsKLQlyYW0gLT0gX19jYW0wOwotCWlmIChyYW0pIHsKLQkJX19jYW0xID0gMVVMIDw8IDIgKiAoX19pbG9nMihyYW0pIC8gMik7Ci0JCWlmIChfX2NhbTEgPiBjYW1fbWF4X3NpemUpCi0JCQlfX2NhbTEgPSBjYW1fbWF4X3NpemU7Ci0JCXJhbSAtPSBfX2NhbTE7Ci0JfQotCWlmIChyYW0pIHsKLQkJX19jYW0yID0gMVVMIDw8IDIgKiAoX19pbG9nMihyYW0pIC8gMik7Ci0JCWlmIChfX2NhbTIgPiBjYW1fbWF4X3NpemUpCi0JCQlfX2NhbTIgPSBjYW1fbWF4X3NpemU7Ci0JCXJhbSAtPSBfX2NhbTI7Ci0JfQorCV9fbWF4X2xvd19tZW1vcnkgPSAwOworCWZvciAoaSA9IDA7IHJhbSAmJiBpIDwgQVJSQVlfU0laRShjYW0pOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGNhbXNpemUgPSBfX2lsb2cyKHJhbSkgJiB+MVU7CisJCXVuc2lnbmVkIGludCBhbGlnbiA9IF9fZmZzKHZpcnQgfCBwaHlzKSAmIH4xVTsKIAotCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeSBDQU0gbWFwcGluZzogQ0FNMD0lbGRNYiwgQ0FNMT0lbGRNYiwiCi0JCQkiIENBTTI9JWxkTWIgcmVzaWR1YWw6ICVsZE1iXG4iLAotCQkJX19jYW0wID4+IDIwLCBfX2NhbTEgPj4gMjAsIF9fY2FtMiA+PiAyMCwKLQkJCShsb25nIGludCkoKHRvdGFsX2xvd21lbSAtIF9fY2FtMCAtIF9fY2FtMSAtIF9fY2FtMikKLQkJCQkgICA+PiAyMCkpOwotCV9fbWF4X2xvd19tZW1vcnkgPSBfX2NhbTAgKyBfX2NhbTEgKyBfX2NhbTI7CisJCWlmIChjYW1zaXplID4gYWxpZ24pCisJCQljYW1zaXplID0gYWxpZ247CisJCWlmIChjYW1zaXplID4gbWF4X2NhbSkKKwkJCWNhbXNpemUgPSBtYXhfY2FtOworCisJCWNhbVtpXSA9IDFVTCA8PCBjYW1zaXplOworCQlyYW0gLT0gY2FtW2ldOworCQlfX21heF9sb3dfbWVtb3J5ICs9IGNhbVtpXTsKKwkJdmlydCArPSBjYW1baV07CisJCXBoeXMgKz0gY2FtW2ldOworCisJCXAgKz0gc3ByaW50ZihwLCAiJWx1LyIsIGNhbVtpXSA+PiAyMCk7CisJfQorCWZvciAoOyBpIDwgQVJSQVlfU0laRShjYW0pOyBpKyspCisJCXAgKz0gc3ByaW50ZihwLCAiMC8iKTsKKwlwWy0xXSA9ICdcMCc7CisKKwlwcl9pbmZvKCJNZW1vcnkgQ0FNIG1hcHBpbmc6ICVzIE1iLCByZXNpZHVhbDogJWRNYlxuIiwgYnVmLAorCSAgICAgICAgKHVuc2lnbmVkIGludCkoKHRvdGFsX2xvd21lbSAtIF9fbWF4X2xvd19tZW1vcnkpID4+IDIwKSk7CiAJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gbWVtc3RhcnRfYWRkciArIF9fbWF4X2xvd19tZW1vcnk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKaW5kZXggMjhhMTE0ZC4uYmM0MDBjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ndXAuYwpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAorI2lmZGVmIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCisKIC8qCiAgKiBUaGUgcGVyZm9ybWFuY2UgY3JpdGljYWwgbGVhZiBmdW5jdGlvbnMgYXJlIG1hZGUgbm9pbmxpbmUgb3RoZXJ3aXNlIGdjYwogICogaW5saW5lcyBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gd2hpY2ggcmVzdWx0cyBpbiB0b28gbXVjaApAQCAtMTUxLDggKzE1MywxMSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVuLCBlbmQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBnZF90ICpwZ2RwOwotCWludCBwc2l6ZSwgbnIgPSAwOworCWludCBuciA9IDA7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJdW5zaWduZWQgaW50IHNoaWZ0OworCWludCBwc2l6ZTsKKyNlbmRpZgogCiAJcHJfZGVidWcoIiVzKCVseCwleCwlcylcbiIsIF9fZnVuY19fLCBzdGFydCwgbnJfcGFnZXMsIHdyaXRlID8gIndyaXRlIiA6ICJyZWFkIik7CiAKQEAgLTIwNSw4ICsyMTAsMTMgQEAKIAkgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CisJLyogVGhvc2UgYml0cyBhcmUgcmVsYXRlZCB0byBodWdldGxiZnMgaW1wbGVtZW50YXRpb24gYW5kIG9ubHkgZXhpc3QKKwkgKiBvbiA2NC1iaXQgZm9yIG5vdworCSAqLwogCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKIAlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAlpZiAodW5saWtlbHkobW11X2h1Z2VfcHNpemVzW3BzaXplXSkpIHsKQEAgLTIzNiw3ICsyNDYsOSBAQAogCQlkbyB7CiAJCQlwZ2RfdCBwZ2QgPSAqcGdkcDsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCQkJVk1fQlVHX09OKHNoaWZ0ICE9IG1tdV9wc2l6ZV9kZWZzW2dldF9zbGljZV9wc2l6ZShtbSwgYWRkcildLnNoaWZ0KTsKKyNlbmRpZgogCQkJcHJfZGVidWcoIiAgJTAxNmx4OiBub3JtYWwgcGdkICVwXG4iLCBhZGRyLAogCQkJCSAodm9pZCAqKXBnZF92YWwocGdkKSk7CiAJCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CkBAIC0yNzksMyArMjkxLDUgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiB9CisKKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggOGQ1YjQ3NS4uZGI1NTZkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC01MTYsNyArNTE2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGh0YWJfZ2V0X3RhYmxlX3NpemUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG1lbV9zaXplLCBybmRfbWVtX3NpemUsIHB0ZWdfY291bnQ7CisJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZSwgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50LCBwc2l6ZTsKIAogCS8qIElmIGhhc2ggc2l6ZSBpc24ndCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSwgd2UgdHJ5IHRvCiAJICogcmV0cmlldmUgaXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIElmIGl0J3Mgbm90IHRoZXJlIG5laXRoZXIsIHdlCkBAIC01MzQsNyArNTM0LDggQEAKIAkJcm5kX21lbV9zaXplIDw8PSAxOwogCiAJLyogIyBwYWdlcyAvIDIgKi8KLQlwdGVnX2NvdW50ID0gbWF4KHJuZF9tZW1fc2l6ZSA+PiAoMTIgKyAxKSwgMVVMIDw8IDExKTsKKwlwc2l6ZSA9IG1tdV9wc2l6ZV9kZWZzW21tdV92aXJ0dWFsX3BzaXplXS5zaGlmdDsKKwlwdGVnX2NvdW50ID0gbWF4KHJuZF9tZW1fc2l6ZSA+PiAocHNpemUgKyAxKSwgMVVMIDw8IDExKTsKIAogCXJldHVybiBwdGVnX2NvdW50IDw8IDc7CiB9CkBAIC01ODksNyArNTkwLDcgQEAKIAltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX3VwZGF0ZXBwLCBwcGNfbWQuaHB0ZV91cGRhdGVwcCk7CiB9CiAKLXZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFibGU7CiAJdW5zaWduZWQgbG9uZyBwdGVnX2NvdW50OwpAQCAtNzMxLDExICs3MzIsNDMgQEAKICN1bmRlZiBLQgogI3VuZGVmIE1CCiAKLXZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKQordm9pZCBfX2luaXQgZWFybHlfaW5pdF9tbXUodm9pZCkKIHsKKwkvKiBTZXR1cCBpbml0aWFsIFNUQUIgYWRkcmVzcyBpbiB0aGUgUEFDQSAqLworCWdldF9wYWNhKCktPnN0YWJfcmVhbCA9IF9fcGEoKHU2NCkmaW5pdGlhbF9zdGFiKTsKKwlnZXRfcGFjYSgpLT5zdGFiX2FkZHIgPSAodTY0KSZpbml0aWFsX3N0YWI7CisKKwkvKiBJbml0aWFsaXplIHRoZSBNTVUgSGFzaCB0YWJsZSBhbmQgY3JlYXRlIHRoZSBsaW5lYXIgbWFwcGluZworCSAqIG9mIG1lbW9yeS4gSGFzIHRvIGJlIGRvbmUgYmVmb3JlIHN0YWIvc2xiIGluaXRpYWxpemF0aW9uIGFzCisJICogdGhpcyBpcyBjdXJyZW50bHkgd2hlcmUgdGhlIHBhZ2Ugc2l6ZSBlbmNvZGluZyBpcyBvYnRhaW5lZAorCSAqLworCWh0YWJfaW5pdGlhbGl6ZSgpOworCisJLyogSW5pdGlhbGl6ZSBzdGFiIC8gU0xCIG1hbmFnZW1lbnQgZXhjZXB0IG9uIGlTZXJpZXMKKwkgKi8KKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwkJc2xiX2luaXRpYWxpemUoKTsKKwllbHNlIGlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfcmVhbCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIF9faW5pdCBlYXJseV9pbml0X21tdV9zZWNvbmRhcnkodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIGhhc2ggdGFibGUgZm9yIHRoYXQgQ1BVICovCiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKKworCS8qIEluaXRpYWxpemUgU1RBQi9TTEIuIFdlIHVzZSBhIHZpcnR1YWwgYWRkcmVzcyBhcyBpdCB3b3JrcworCSAqIGluIHJlYWwgbW9kZSBvbiBwU2VyaWVzIGFuZCB3ZSB3YW50IGEgdmlydXRhbCBhZGRyZXNzIG9uCisJICogaVNlcmllcyBhbnl3YXkKKwkgKi8KKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwkJc2xiX2luaXRpYWxpemUoKTsKKwllbHNlCisJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX2FkZHIpOwogfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKICAqIENhbGxlZCBieSBhc20gaGFzaHRhYmxlLlMgZm9yIGRvaW5nIGxhenkgaWNhY2hlIGZsdXNoCkBAIC04NTgsNyArODkxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZzaWQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJcHRlX3QgKnB0ZXA7Ci0JY3B1bWFza190IHRtcDsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqdG1wOwogCWludCByYywgdXNlcl9yZWdpb24gPSAwLCBsb2NhbCA9IDA7CiAJaW50IHBzaXplLCBzc2l6ZTsKIApAQCAtOTA2LDggKzkzOSw4IEBACiAJCXJldHVybiAxOwogCiAJLyogQ2hlY2sgQ1BVIGxvY2FsaXR5ICovCi0JdG1wID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAodXNlcl9yZWdpb24gJiYgY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIHRtcCkpCisJdG1wID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmICh1c2VyX3JlZ2lvbiAmJiBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCB0bXApKQogCQlsb2NhbCA9IDE7CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCkBAIC0xMDIzLDcgKzEwNTYsNiBAQAogCXVuc2lnbmVkIGxvbmcgdnNpZDsKIAl2b2lkICpwZ2RpcjsKIAlwdGVfdCAqcHRlcDsKLQljcHVtYXNrX3QgbWFzazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBsb2NhbCA9IDA7CiAJaW50IHNzaXplOwpAQCAtMTA2Niw4ICsxMDk4LDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBJcyB0aGF0IGxvY2FsIHRvIHRoaXMgQ1BVID8gKi8KLQltYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIG1hc2spKQorCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKQogCQlsb2NhbCA9IDE7CiAKIAkvKiBIYXNoIGl0IGluICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggZjAwZjA5YS4uZjY2OGZhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNDcyLDQwICs0NzIsNyBAQAogewogI2lmZGVmIENPTkZJR19QUENfU1REX01NVQogCXVuc2lnbmVkIGxvbmcgYWNjZXNzID0gMCwgdHJhcDsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwogCi0JLyogaGFuZGxlIGktY2FjaGUgY29oZXJlbmN5ICovCi0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpICYmCi0JICAgICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpICYmCi0JICAgIHBmbl92YWxpZChwZm4pKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLSNpZmRlZiBDT05GSUdfOHh4Ci0JCS8qIE9uIDh4eCwgY2FjaGUgY29udHJvbCBpbnN0cnVjdGlvbnMgKHBhcnRpY3VsYXJseQotCQkgKiAiZGNic3QiIGZyb20gZmx1c2hfZGNhY2hlX2ljYWNoZSkgZmF1bHQgYXMgd3JpdGUKLQkJICogb3BlcmF0aW9uIGlmIHRoZXJlIGlzIGFuIHVucG9wdWxhdGVkIFRMQiBlbnRyeQotCQkgKiBmb3IgdGhlIGFkZHJlc3MgaW4gcXVlc3Rpb24uIFRvIHdvcmthcm91bmQgdGhhdCwKLQkJICogd2UgaW52YWxpZGF0ZSB0aGUgVExCIGhlcmUsIHRodXMgYXZvaWRpbmcgZGNic3QKLQkJICogbWlzYmVoYXZpb3VyLgotCQkgKi8KLQkJX3RsYmlsX3ZhKGFkZHJlc3MsIDAgLyogOHh4IGRvZXNuJ3QgY2FyZSBhYm91dCBQSUQgKi8pOwotI2VuZGlmCi0JCS8qIFRoZSBfUEFHRV9VU0VSIHRlc3Qgc2hvdWxkIHJlYWxseSBiZSBfUEFHRV9FWEVDLCBidXQKLQkJICogb2xkZXIgZ2xpYmMgdmVyc2lvbnMgZXhlY3V0ZSBzb21lIGNvZGUgZnJvbSBuby1leGVjCi0JCSAqIHBhZ2VzLCB3aGljaCBmb3Igbm93IHdlIGFyZSBzdXBwb3J0aW5nLiAgSWYgZXhlYy1vbmx5Ci0JCSAqIHBhZ2VzIGFyZSBldmVyIGltcGxlbWVudGVkLCB0aGlzIHdpbGwgaGF2ZSB0byBjaGFuZ2UuCi0JCSAqLwotCQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJiAocHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUikKLQkJICAgICYmICF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpIHsKLQkJCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgewotCQkJCV9fZmx1c2hfZGNhY2hlX2ljYWNoZSgodm9pZCAqKSBhZGRyZXNzKTsKLQkJCX0gZWxzZQotCQkJCWZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShwYWdlKTsKLQkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpOwotCQl9Ci0JfQotCi0jaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VCiAJLyogV2Ugb25seSB3YW50IEhQVEVzIGZvciBsaW51eCBQVEVzIHRoYXQgaGF2ZSBfUEFHRV9BQ0NFU1NFRCBzZXQgKi8KIAlpZiAoIXB0ZV95b3VuZyhwdGUpIHx8IGFkZHJlc3MgPj0gVEFTS19TSVpFKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW1hcC5jIGIvYXJjaC9wb3dlcnBjL21tL21tYXBfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMvbW0vbW1hcC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvbW0vbW1hcF82NC5jCmluZGV4IDg2MDEwZmMuLjBkOTU3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tYXBfNjQuYwpAQCAtMjQsMTYgKzI0LDU3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIFRvcCBvZiBtbWFwIGFyZWEgKGp1c3QgYmVsb3cgdGhlIHByb2Nlc3Mgc3RhY2spLgogICoKLSAqIExlYXZlIGFuIGF0IGxlYXN0IH4xMjggTUIgaG9sZS4KKyAqIExlYXZlIGF0IGxlYXN0IGEgfjEyOCBNQiBob2xlIG9uIDMyYml0IGFwcGxpY2F0aW9ucy4KKyAqCisgKiBPbiA2NGJpdCBhcHBsaWNhdGlvbnMgd2UgcmFuZG9taXNlIHRoZSBzdGFjayBieSAxR0Igc28gd2UgbmVlZCB0bworICogc3BhY2Ugb3VyIG1tYXAgc3RhcnQgYWRkcmVzcyBieSBhIGZ1cnRoZXIgMUdCLCBvdGhlcndpc2UgdGhlcmUgaXMgYQorICogY2hhbmNlIHRoZSBtbWFwIGFyZWEgd2lsbCBlbmQgdXAgY2xvc2VyIHRvIHRoZSBzdGFjayB0aGFuIG91ciB1bGltaXQKKyAqIHJlcXVpcmVzLgogICovCi0jZGVmaW5lIE1JTl9HQVAgKDEyOCoxMDI0KjEwMjQpCisjZGVmaW5lIE1JTl9HQVAzMiAoMTI4KjEwMjQqMTAyNCkKKyNkZWZpbmUgTUlOX0dBUDY0ICgoMTI4ICsgMTAyNCkqMTAyNCoxMDI0VUwpCisjZGVmaW5lIE1JTl9HQVAgKChpc18zMmJpdF90YXNrKCkpID8gTUlOX0dBUDMyIDogTUlOX0dBUDY0KQogI2RlZmluZSBNQVhfR0FQIChUQVNLX1NJWkUvNio1KQogCitzdGF0aWMgaW5saW5lIGludCBtbWFwX2lzX2xlZ2FjeSh2b2lkKQoreworCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfQ09NUEFUX0xBWU9VVCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7Cit9CisKKy8qCisgKiBTaW5jZSBnZXRfcmFuZG9tX2ludCgpIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgd2l0aGluIGEgMSBqaWZmeSB3aW5kb3csCisgKiB3ZSB3aWxsIGFsbW9zdCBhbHdheXMgZ2V0IHRoZSBzYW1lIHJhbmRvbWlzYXRpb24gZm9yIHRoZSBzdGFjayBhbmQgbW1hcAorICogcmVnaW9uLiBUaGlzIHdpbGwgbWVhbiB0aGUgcmVsYXRpdmUgZGlzdGFuY2UgYmV0d2VlbiBzdGFjayBhbmQgbW1hcCB3aWxsCisgKiBiZSB0aGUgc2FtZS4KKyAqCisgKiBUbyBhdm9pZCB0aGlzIHdlIGNhbiBzaGlmdCB0aGUgcmFuZG9tbmVzcyBieSAxIGJpdC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9ybmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJuZCA9IDA7CisKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpIHsKKwkJLyogOE1CIGZvciAzMmJpdCwgMUdCIGZvciA2NGJpdCAqLworCQlpZiAoaXNfMzJiaXRfdGFzaygpKQorCQkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDIyLVBBR0VfU0hJRlQpKSk7CisJCWVsc2UKKwkJCXJuZCA9IChsb25nKShnZXRfcmFuZG9tX2ludCgpICUgKDE8PCgyOS1QQUdFX1NISUZUKSkpOworCX0KKwlyZXR1cm4gKHJuZCA8PCBQQUdFX1NISUZUKSAqIDI7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2Uodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdhcCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyOwpAQCAtNDMsMjQgKzg0LDcgQEAKIAllbHNlIGlmIChnYXAgPiBNQVhfR0FQKQogCQlnYXAgPSBNQVhfR0FQOwogCi0JcmV0dXJuIFRBU0tfU0laRSAtIChnYXAgJiBQQUdFX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtbWFwX2lzX2xlZ2FjeSh2b2lkKQotewotCS8qCi0JICogRm9yY2Ugc3RhbmRhcmQgYWxsb2NhdGlvbiBmb3IgNjQgYml0IHByb2dyYW1zLgotCSAqLwotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfQ09NUEFUX0xBWU9VVCkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7CisJcmV0dXJuIFBBR0VfQUxJR04oVEFTS19TSVpFIC0gZ2FwIC0gbW1hcF9ybmQoKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggNTJhMGNmYy4uYTcwZTMxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtOTcsNyArOTcsNyBAQAogCQltbS0+Y29udGV4dC5pZCA9IE1NVV9OT19DT05URVhUOwogCiAJCS8qIE1hcmsgaXQgc3RhbGUgb24gYWxsIENQVXMgdGhhdCB1c2VkIHRoaXMgbW0gKi8KLQkJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtbS0+Y3B1X3ZtX21hc2spCisJCWZvcl9lYWNoX2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKQogCQkJX19zZXRfYml0KGlkLCBzdGFsZV9tYXBbY3B1XSk7CiAJCXJldHVybiBpZDsKIAl9CkBAIC0zODAsNyArMzgwLDcgQEAKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiTU1VOiBBbGxvY2F0ZWQgJWQgYnl0ZXMgb2YgY29udGV4dCBtYXBzIGZvciAlZCBjb250ZXh0c1xuIiwKKwkgICAgICAgIk1NVTogQWxsb2NhdGVkICV6dSBieXRlcyBvZiBjb250ZXh0IG1hcHMgZm9yICVkIGNvbnRleHRzXG4iLAogCSAgICAgICAyICogQ1RYX01BUF9TSVpFICsgKHNpemVvZih2b2lkICopICogKGxhc3RfY29udGV4dCArIDEpKSwKIAkgICAgICAgbGFzdF9jb250ZXh0IC0gZmlyc3RfY29udGV4dCArIDEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCA1YWMwOGI4Li45MDQ3MTQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTE1OCwzNSArMTU4LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9fY3B1aW5pdCBmaW5kX2NwdV9ub2RlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JdW5zaWduZWQgaW50IGh3X2NwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUgPSBOVUxMOwotCWNvbnN0IHVuc2lnbmVkIGludCAqaW50ZXJydXB0X3NlcnZlciwgKnJlZzsKLQlpbnQgbGVuOwotCi0Jd2hpbGUgKChjcHVfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGNwdV9ub2RlLCAiY3B1IikpICE9IE5VTEwpIHsKLQkJLyogVHJ5IGludGVycnVwdCBzZXJ2ZXIgZmlyc3QgKi8KLQkJaW50ZXJydXB0X3NlcnZlciA9IG9mX2dldF9wcm9wZXJ0eShjcHVfbm9kZSwKLQkJCQkJImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7Ci0KLQkJbGVuID0gbGVuIC8gc2l6ZW9mKHUzMik7Ci0KLQkJaWYgKGludGVycnVwdF9zZXJ2ZXIgJiYgKGxlbiA+IDApKSB7Ci0JCQl3aGlsZSAobGVuLS0pIHsKLQkJCQlpZiAoaW50ZXJydXB0X3NlcnZlcltsZW5dID09IGh3X2NwdWlkKQotCQkJCQlyZXR1cm4gY3B1X25vZGU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkoY3B1X25vZGUsICJyZWciLCAmbGVuKTsKLQkJCWlmIChyZWcgJiYgKGxlbiA+IDApICYmIChyZWdbMF0gPT0gaHdfY3B1aWQpKQotCQkJCXJldHVybiBjcHVfbm9kZTsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCiAvKiBtdXN0IGhvbGQgcmVmZXJlbmNlIHRvIG5vZGUgZHVyaW5nIGNhbGwgKi8KIHN0YXRpYyBjb25zdCBpbnQgKm9mX2dldF9hc3NvY2lhdGl2aXR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewpAQCAtMjkwLDcgKzI2MSw3IEBACiAJcmVmX3BvaW50cyA9IG9mX2dldF9wcm9wZXJ0eShydGFzX3Jvb3QsCiAJCQkiaWJtLGFzc29jaWF0aXZpdHktcmVmZXJlbmNlLXBvaW50cyIsICZsZW4pOwogCi0JaWYgKChsZW4gPj0gMSkgJiYgcmVmX3BvaW50cykgeworCWlmICgobGVuID49IDIgKiBzaXplb2YodW5zaWduZWQgaW50KSkgJiYgcmVmX3BvaW50cykgewogCQlkZXB0aCA9IHJlZl9wb2ludHNbMV07CiAJfSBlbHNlIHsKIAkJZGJnKCJOVU1BOiBpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzIG5vdCBmb3VuZC5cbiIpOwpAQCAtNDcwLDcgKzQ0MSw3IEBACiBzdGF0aWMgaW50IF9fY3B1aW5pdCBudW1hX3NldHVwX2NwdSh1bnNpZ25lZCBsb25nIGxjcHUpCiB7CiAJaW50IG5pZCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjcHUgPSBmaW5kX2NwdV9ub2RlKGxjcHUpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1ID0gb2ZfZ2V0X2NwdV9ub2RlKGxjcHUsIE5VTEwpOwogCiAJaWYgKCFjcHUpIHsKIAkJV0FSTl9PTigxKTsKQEAgLTY1Miw3ICs2MjMsNyBAQAogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpIHsKIAkJaW50IG5pZDsKIAotCQljcHUgPSBmaW5kX2NwdV9ub2RlKGkpOworCQljcHUgPSBvZl9nZXRfY3B1X25vZGUoaSwgTlVMTCk7CiAJCUJVR19PTighY3B1KTsKIAkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKGNwdSk7CiAJCW9mX25vZGVfcHV0KGNwdSk7CkBAIC0xMDQxLDU3ICsxMDEyLDMyIEBACiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIC8qCi0gKiBWYWxpZGF0ZSB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbW9yeSBzZWN0aW9uIHdlIGFyZQotICogdHJ5aW5nIHRvIGFkZC4KLSAqLwotaW50IHZhbGlkX2hvdF9hZGRfc2NuKGludCAqbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1MzIgbG1iX3NpemUsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCi17Ci0Jbm9kZW1hc2tfdCBub2RlczsKLQotCWlmICgqbmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUoKm5pZCkpCi0JCSpuaWQgPSBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7Ci0KLQlpZiAoKHNjbl9hZGRyID49IHN0YXJ0KSAmJiAoc2NuX2FkZHIgPCAoc3RhcnQgKyBsbWJfc2l6ZSkpKSB7Ci0JCW5vZGVzX3NldGFsbChub2Rlcyk7Ci0JCXdoaWxlIChOT0RFX0RBVEEoKm5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9PSAwKSB7Ci0JCQlub2RlX2NsZWFyKCpuaWQsIG5vZGVzKTsKLQkJCSpuaWQgPSBhbnlfb25saW5lX25vZGUobm9kZXMpOwotCQl9Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgbm9kZS4KKyAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uIGZvcgorICogbWVtb3J5IHJlcHJlc2VudGVkIGluIHRoZSBkZXZpY2UgdHJlZSBieSB0aGUgcHJvcGVydHkKKyAqIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkvaWJtLGR5bmFtaWMtbWVtb3J5LgogICovCiBzdGF0aWMgaW50IGhvdF9hZGRfZHJjb25mX3Njbl90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnksCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQogewogCWNvbnN0IHUzMiAqZG07Ci0JdW5zaWduZWQgaW50IG4sIHJjOworCXVuc2lnbmVkIGludCBkcmNvbmZfY2VsbF9jbnQsIHJjOwogCXVuc2lnbmVkIGxvbmcgbG1iX3NpemU7Ci0JaW50IGRlZmF1bHRfbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwotCWludCBuaWQ7CiAJc3RydWN0IGFzc29jX2FycmF5cyBhYTsKKwlpbnQgbmlkID0gLTE7CiAKLQluID0gb2ZfZ2V0X2RyY29uZl9tZW1vcnkobWVtb3J5LCAmZG0pOwotCWlmICghbikKLQkJcmV0dXJuIGRlZmF1bHRfbmlkOzsKKwlkcmNvbmZfY2VsbF9jbnQgPSBvZl9nZXRfZHJjb25mX21lbW9yeShtZW1vcnksICZkbSk7CisJaWYgKCFkcmNvbmZfY2VsbF9jbnQpCisJCXJldHVybiAtMTsKIAogCWxtYl9zaXplID0gb2ZfZ2V0X2xtYl9zaXplKG1lbW9yeSk7CiAJaWYgKCFsbWJfc2l6ZSkKLQkJcmV0dXJuIGRlZmF1bHRfbmlkOworCQlyZXR1cm4gLTE7CiAKIAlyYyA9IG9mX2dldF9hc3NvY19hcnJheXMobWVtb3J5LCAmYWEpOwogCWlmIChyYykKLQkJcmV0dXJuIGRlZmF1bHRfbmlkOworCQlyZXR1cm4gLTE7CiAKLQlmb3IgKDsgbiAhPSAwOyAtLW4pIHsKKwlmb3IgKDsgZHJjb25mX2NlbGxfY250ICE9IDA7IC0tZHJjb25mX2NlbGxfY250KSB7CiAJCXN0cnVjdCBvZl9kcmNvbmZfY2VsbCBkcm1lbTsKIAogCQlyZWFkX2RyY29uZl9jZWxsKCZkcm1lbSwgJmRtKTsKQEAgLTExMDIsMzYgKzEwNDgsMjYgQEAKIAkJICAgIHx8ICEoZHJtZW0uZmxhZ3MgJiBEUkNPTkZfTUVNX0FTU0lHTkVEKSkKIAkJCWNvbnRpbnVlOwogCi0JCW5pZCA9IG9mX2RyY29uZl90b19uaWRfc2luZ2xlKCZkcm1lbSwgJmFhKTsKKwkJaWYgKChzY25fYWRkciA8IGRybWVtLmJhc2VfYWRkcikKKwkJICAgIHx8IChzY25fYWRkciA+PSAoZHJtZW0uYmFzZV9hZGRyICsgbG1iX3NpemUpKSkKKwkJCWNvbnRpbnVlOwogCi0JCWlmICh2YWxpZF9ob3RfYWRkX3NjbigmbmlkLCBkcm1lbS5iYXNlX2FkZHIsIGxtYl9zaXplLAotCQkJCSAgICAgIHNjbl9hZGRyKSkKLQkJCXJldHVybiBuaWQ7CisJCW5pZCA9IG9mX2RyY29uZl90b19uaWRfc2luZ2xlKCZkcm1lbSwgJmFhKTsKKwkJYnJlYWs7CiAJfQogCi0JQlVHKCk7CS8qIHNlY3Rpb24gYWRkcmVzcyBzaG91bGQgYmUgZm91bmQgYWJvdmUgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmlkOwogfQogCiAvKgotICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24uICBTZWN0aW9uCi0gKiBjb3JyZXNwb25kcyB0byBhIFNQQVJTRU1FTSBzZWN0aW9uLCBub3QgYW4gTE1CLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gKiBzZWN0aW9ucyBhcmUgZnVsbHkgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBMTUIuCisgKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbiBmb3IgbWVtb3J5CisgKiByZXByZXNlbnRlZCBpbiB0aGUgZGV2aWNlIHRyZWUgYXMgYSBub2RlIChpLmUuIG1lbW9yeUBYWFhYKSBmb3IKKyAqIGVhY2ggbG1iLgogICovCi1pbnQgaG90X2FkZF9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCitpbnQgaG90X2FkZF9ub2RlX3Njbl90b19uaWQodW5zaWduZWQgbG9uZyBzY25fYWRkcikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSA9IE5VTEw7Ci0JaW50IG5pZDsKLQotCWlmICghbnVtYV9lbmFibGVkIHx8IChtaW5fY29tbW9uX2RlcHRoIDwgMCkpCi0JCXJldHVybiBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7Ci0KLQltZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKTsKLQlpZiAobWVtb3J5KSB7Ci0JCW5pZCA9IGhvdF9hZGRfZHJjb25mX3Njbl90b19uaWQobWVtb3J5LCBzY25fYWRkcik7Ci0JCW9mX25vZGVfcHV0KG1lbW9yeSk7Ci0JCXJldHVybiBuaWQ7Ci0JfQorCWludCBuaWQgPSAtMTsKIAogCXdoaWxlICgobWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobWVtb3J5LCAibWVtb3J5IikpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKQEAgLTExNDUsMjAgKzEwODEsNjIgQEAKIAogCQkvKiByYW5nZXMgaW4gY2VsbCAqLwogCQlyYW5nZXMgPSAobGVuID4+IDIpIC8gKG5fbWVtX2FkZHJfY2VsbHMgKyBuX21lbV9zaXplX2NlbGxzKTsKLWhhX25ld19yYW5nZToKLQkJc3RhcnQgPSByZWFkX25fY2VsbHMobl9tZW1fYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJc2l6ZSA9IHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKIAotCQlpZiAodmFsaWRfaG90X2FkZF9zY24oJm5pZCwgc3RhcnQsIHNpemUsIHNjbl9hZGRyKSkgewotCQkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKLQkJCXJldHVybiBuaWQ7CisJCXdoaWxlIChyYW5nZXMtLSkgeworCQkJc3RhcnQgPSByZWFkX25fY2VsbHMobl9tZW1fYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKKwkJCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKKworCQkJaWYgKChzY25fYWRkciA8IHN0YXJ0KSB8fCAoc2NuX2FkZHIgPj0gKHN0YXJ0ICsgc2l6ZSkpKQorCQkJCWNvbnRpbnVlOworCisJCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKKwkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKC0tcmFuZ2VzKQkJLyogcHJvY2VzcyBhbGwgcmFuZ2VzIGluIGNlbGwgKi8KLQkJCWdvdG8gaGFfbmV3X3JhbmdlOworCQlvZl9ub2RlX3B1dChtZW1vcnkpOworCQlpZiAobmlkID49IDApCisJCQlicmVhazsKIAl9Ci0JQlVHKCk7CS8qIHNlY3Rpb24gYWRkcmVzcyBzaG91bGQgYmUgZm91bmQgYWJvdmUgKi8KLQlyZXR1cm4gMDsKKworCXJldHVybiBuaWQ7CiB9CisKKy8qCisgKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbi4gIFNlY3Rpb24KKyAqIGNvcnJlc3BvbmRzIHRvIGEgU1BBUlNFTUVNIHNlY3Rpb24sIG5vdCBhbiBMTUIuICBJdCBpcyBhc3N1bWVkIHRoYXQKKyAqIHNlY3Rpb25zIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIExNQi4KKyAqLworaW50IGhvdF9hZGRfc2NuX3RvX25pZCh1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKKwlpbnQgbmlkLCBmb3VuZCA9IDA7CisKKwlpZiAoIW51bWFfZW5hYmxlZCB8fCAobWluX2NvbW1vbl9kZXB0aCA8IDApKQorCQlyZXR1cm4gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOworCisJbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7CisJaWYgKG1lbW9yeSkgeworCQluaWQgPSBob3RfYWRkX2RyY29uZl9zY25fdG9fbmlkKG1lbW9yeSwgc2NuX2FkZHIpOworCQlvZl9ub2RlX3B1dChtZW1vcnkpOworCX0gZWxzZSB7CisJCW5pZCA9IGhvdF9hZGRfbm9kZV9zY25fdG9fbmlkKHNjbl9hZGRyKTsKKwl9CisKKwlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKKwkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOworCisJaWYgKE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMpCisJCXJldHVybiBuaWQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKKwkJaWYgKE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJQlVHX09OKCFmb3VuZCk7CisJcmV0dXJuIG5pZDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKaW5kZXggNmQ5NDExNi4uZjVjNmZkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gcm91dGluZXMgZm9yIGRlYWxpbmcgd2l0aCBmcmVlIG9mIHBhZ2UgdGFibGVzCisgKiBBbG9uZyB3aXRoIGNvbW1vbiBwYWdlIHRhYmxlIGhhbmRsaW5nIGNvZGUKICAqCiAgKiAgRGVyaXZlZCBmcm9tIGFyY2gvcG93ZXJwYy9tbS90bGJfNjQuYzoKICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQpAQCAtODEsMTEgKzgyLDEwIEBACiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV9mcmVlX3QgcGdmKQogewogCS8qIFRoaXMgaXMgc2FmZSBzaW5jZSB0bGJfZ2F0aGVyX21tdSBoYXMgZGlzYWJsZWQgcHJlZW1wdGlvbiAqLwotICAgICAgICBjcHVtYXNrX3QgbG9jYWxfY3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc3RydWN0IHB0ZV9mcmVlbGlzdF9iYXRjaCAqKmJhdGNocCA9ICZfX2dldF9jcHVfdmFyKHB0ZV9mcmVlbGlzdF9jdXIpOwogCiAJaWYgKGF0b21pY19yZWFkKCZ0bGItPm1tLT5tbV91c2VycykgPCAyIHx8Ci0JICAgIGNwdXNfZXF1YWwodGxiLT5tbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKSB7CisJICAgIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayh0bGItPm1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSl7CiAJCXBndGFibGVfZnJlZShwZ2YpOwogCQlyZXR1cm47CiAJfQpAQCAtMTE1LDMgKzExNSwxMzMgQEAKIAlwdGVfZnJlZV9zdWJtaXQoKmJhdGNocCk7CiAJKmJhdGNocCA9IE5VTEw7CiB9CisKKy8qCisgKiBIYW5kbGUgaS9kIGNhY2hlIGZsdXNoaW5nLCBjYWxsZWQgZnJvbSBzZXRfcHRlX2F0KCkgb3IgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKCkKKyAqLworc3RhdGljIHB0ZV90IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmICh1bmxpa2VseSghcGZuX3ZhbGlkKHBmbikpKQorCQlyZXR1cm4gcHRlOworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCisJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYgIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKSkgeworCQlwcl9kZWJ1ZygiZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kuLi4gZmx1c2hpbmdcbiIpOworCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7CisJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpOworCX0KKwllbHNlCisJCXByX2RlYnVnKCJkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeS4uLiBhbHJlYWR5IGNsZWFuXG4iKTsKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfSFdFWEVDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXhlY19mYXVsdCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT50aHJlYWQucmVncyAmJiBUUkFQKGN1cnJlbnQtPnRocmVhZC5yZWdzKSA9PSAweDQwMDsKK30KKworLyogV2Ugb25seSB0cnkgdG8gZG8gaS9kIGNhY2hlIGNvaGVyZW5jeSBvbiBzdHVmZiB0aGF0IGxvb2tzIGxpa2UKKyAqIHJlYXNvbmFibHkgIm5vcm1hbCIgUFRFcy4gV2UgY3VycmVudGx5IHJlcXVpcmUgYSBQVEUgdG8gYmUgcHJlc2VudAorICogYW5kIHdlIGF2b2lkIF9QQUdFX1NQRUNJQUwgYW5kIF9QQUdFX05PX0NBQ0hFCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9sb29rc19ub3JtYWwocHRlX3QgcHRlKQoreworCXJldHVybiAocHRlX3ZhbChwdGUpICYKKwkJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9TUEVDSUFMIHwgX1BBR0VfTk9fQ0FDSEUpKSA9PQorCQkoX1BBR0VfUFJFU0VOVCk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKKy8qIFNlcnZlci1zdHlsZSBNTVUgaGFuZGxlcyBjb2hlcmVuY3kgd2hlbiBoYXNoaW5nIGlmIEhXIGV4ZWMgcGVybWlzc2lvbgorICogaXMgc3VwcG9zZWQgcGVyIHBhZ2UgKGN1cnJlbnRseSA2NC1iaXQgb25seSkuIEVsc2UsIHdlIGFsd2F5cyBmbHVzaAorICogdmFsaWQgUFRFcyBpbiBzZXRfcHRlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZV90IHB0ZSwgaW50IHNldF9wdGUpCit7CisJcmV0dXJuIHNldF9wdGUgJiYgcHRlX2xvb2tzX25vcm1hbChwdGUpICYmCisJCSEoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSB8fAorCQkgIGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX05PRVhFQ1VURSkpOworfQorI2VsaWYgX1BBR0VfSFdFWEVDID09IDAKKy8qIEVtYmVkZGVkIHR5cGUgTU1VIHdpdGhvdXQgSFcgZXhlYyBzdXBwb3J0ICg4eHggb25seSBzbyBmYXIpLCB3ZSBmbHVzaAorICogdGhlIGNhY2hlIGZvciBhbnkgcHJlc2VudCBQVEUKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQoreworCXJldHVybiBzZXRfcHRlICYmIHB0ZV9sb29rc19ub3JtYWwocHRlKTsKK30KKyNlbHNlCisvKiBPdGhlciBlbWJlZGRlZCBDUFVzIHdpdGggSFcgZXhlYyBzdXBwb3J0IHBlci1wYWdlLCB3ZSBmbHVzaCBvbiBleGVjCisgKiBmYXVsdCBpZiBIV0VYRUMgaXMgbm90IHNldAorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZV90IHB0ZSwgaW50IHNldF9wdGUpCit7CisJcmV0dXJuIHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJiBpc19leGVjX2ZhdWx0KCkgJiYKKwkJIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9IV0VYRUMpOworfQorI2VuZGlmCisKKy8qCisgKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgorICovCit2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKwlXQVJOX09OKHB0ZV9wcmVzZW50KCpwdGVwKSk7CisjZW5kaWYKKwkvKiBOb3RlOiBtbS0+Y29udGV4dC5pZCBtaWdodCBub3QgeWV0IGhhdmUgYmVlbiBhc3NpZ25lZCBhcworCSAqIHRoaXMgY29udGV4dCBtaWdodCBub3QgaGF2ZSBiZWVuIGFjdGl2YXRlZCB5ZXQgd2hlbiB0aGlzCisJICogaXMgY2FsbGVkLgorCSAqLworCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOworCWlmIChwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZSwgMSkpCisJCXB0ZSA9IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KHB0ZSk7CisKKwkvKiBQZXJmb3JtIHRoZSBzZXR0aW5nIG9mIHRoZSBQVEUgKi8KKwlfX3NldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgMCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHJlbGF4aW5nIGFjY2VzcyB0byBhIFBURS4gSXQncyBhbHNvIGNhbGxlZCBpbiB0aGUgcGFnZQorICogZmF1bHQgcGF0aCB3aGVuIHdlIGRvbid0IGhpdCBhbnkgb2YgdGhlIG1ham9yIGZhdWx0IGNhc2VzLCBpZSwgYSBtaW5vcgorICogdXBkYXRlIG9mIF9QQUdFX0FDQ0VTU0VELCBfUEFHRV9ESVJUWSwgZXRjLi4uIFRoZSBnZW5lcmljIGNvZGUgd2lsbCBoYXZlCisgKiBoYW5kbGVkIHRob3NlIHR3byBmb3IgdXMsIHdlIGFkZGl0aW9uYWxseSBkZWFsIHdpdGggbWlzc2luZyBleGVjdXRlCisgKiBwZXJtaXNzaW9uIGhlcmUgb24gc29tZSBwcm9jZXNzb3JzCisgKi8KK2ludCBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpCit7CisJaW50IGNoYW5nZWQ7CisJaWYgKCFkaXJ0eSAmJiBwdGVfbmVlZF9leGVjX2ZsdXNoKGVudHJ5LCAwKSkKKwkJZW50cnkgPSBkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeShlbnRyeSk7CisJY2hhbmdlZCA9ICFwdGVfc2FtZSgqKHB0ZXApLCBlbnRyeSk7CisJaWYgKGNoYW5nZWQpIHsKKwkJYXNzZXJ0X3B0ZV9sb2NrZWQodm1hLT52bV9tbSwgYWRkcmVzcyk7CisJCV9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZXAsIGVudHJ5KTsKKwkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKHZtYSwgYWRkcmVzcyk7CisJfQorCXJldHVybiBjaGFuZ2VkOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCit2b2lkIGFzc2VydF9wdGVfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisKKwlpZiAobW0gPT0gJmluaXRfbW0pCisJCXJldHVybjsKKwlwZ2QgPSBtbS0+cGdkICsgcGdkX2luZGV4KGFkZHIpOworCUJVR19PTihwZ2Rfbm9uZSgqcGdkKSk7CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCUJVR19PTihwdWRfbm9uZSgqcHVkKSk7CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCUJVR19PTighcG1kX3ByZXNlbnQoKnBtZCkpOworCUJVR19PTighc3Bpbl9pc19sb2NrZWQocHRlX2xvY2twdHIobW0sIHBtZCkpKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfVk0gKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggNThiY2FlYi4uNDMwZDA5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0xMjksNyArMTI5LDggQEAKIHZvaWQgX19pb21lbSAqCiBpb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVELAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXApOwogCkBAIC0xNDMsMjAgKzE0NCwyNyBAQAogCS8qIHdlIGRvbid0IHdhbnQgdG8gbGV0IF9QQUdFX1VTRVIgYW5kIF9QQUdFX0VYRUMgbGVhayBvdXQgKi8KIAlmbGFncyAmPSB+KF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKTsKIAotCXJldHVybiBfX2lvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChpb3JlbWFwX2ZsYWdzKTsKIAogdm9pZCBfX2lvbWVtICoKIF9faW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CisKK3ZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJIHZvaWQgKmNhbGxlcikKK3sKIAl1bnNpZ25lZCBsb25nIHYsIGk7CiAJcGh5c19hZGRyX3QgcDsKIAlpbnQgZXJyOwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIGJhc2UgZmxhZ3MgKi8KIAlpZiAoKGZsYWdzICYgX1BBR0VfUFJFU0VOVCkgPT0gMCkKLQkJZmxhZ3MgfD0gX1BBR0VfS0VSTkVMOworCQlmbGFncyB8PSBQQUdFX0tFUk5FTDsKIAogCS8qIE5vbi1jYWNoZWFibGUgcGFnZSBjYW5ub3QgYmUgY29oZXJlbnQgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9OT19DQUNIRSkKQEAgLTIxMiw3ICsyMjAsNyBAQAogCiAJaWYgKG1lbV9pbml0X2RvbmUpIHsKIAkJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKLQkJYXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVApOworCQlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CiAJCWlmIChhcmVhID09IDApCiAJCQlyZXR1cm4gTlVMTDsKIAkJdiA9ICh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyOwpAQCAtMjg4LDcgKzI5Niw3IEBACiAJcCA9IG1lbXN0YXJ0X2FkZHIgKyBzOwogCWZvciAoOyBzIDwgdG90YWxfbG93bWVtOyBzICs9IFBBR0VfU0laRSkgewogCQlrdGV4dCA9ICgoY2hhciAqKSB2ID49IF9zdGV4dCAmJiAoY2hhciAqKSB2IDwgZXRleHQpOwotCQlmID0ga3RleHQgP19QQUdFX1JBTV9URVhUIDogX1BBR0VfUkFNOworCQlmID0ga3RleHQgPyBQQUdFX0tFUk5FTF9URVhUIDogUEFHRV9LRVJORUw7CiAJCW1hcF9wYWdlKHYsIHAsIGYpOwogI2lmZGVmIENPTkZJR19QUENfU1REX01NVV8zMgogCQlpZiAoa3RleHQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwppbmRleCAzNjVlNjFhLi5iZmE3ZGI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCXVubWFwX2tlcm5lbF9yYW5nZSgodW5zaWduZWQgbG9uZyllYSwgc2l6ZSk7CiB9CiAKLXZvaWQgX19pb21lbSAqIF9faW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgX19pb21lbSAqIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKIAlwaHlzX2FkZHJfdCBwYWxpZ25lZDsKIAl2b2lkIF9faW9tZW0gKnJldDsKQEAgLTE2OCw4ICsxNjgsOSBAQAogCWlmIChtZW1faW5pdF9kb25lKSB7CiAJCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAKLQkJYXJlYSA9IF9fZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCwKLQkJCQkgICAgIGlvcmVtYXBfYm90LCBJT1JFTUFQX0VORCk7CisJCWFyZWEgPSBfX2dldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLAorCQkJCQkgICAgaW9yZW1hcF9ib3QsIElPUkVNQVBfRU5ELAorCQkJCQkgICAgY2FsbGVyKTsKIAkJaWYgKGFyZWEgPT0gTlVMTCkKIAkJCXJldHVybiBOVUxMOwogCQlyZXQgPSBfX2lvcmVtYXBfYXQocGFsaWduZWQsIGFyZWEtPmFkZHIsIHNpemUsIGZsYWdzKTsKQEAgLTE4NiwxOSArMTg3LDI3IEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQogCiB2b2lkIF9faW9tZW0gKiBpb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEOworCXZvaWQgKmNhbGxlciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKIAogCWlmIChwcGNfbWQuaW9yZW1hcCkKLQkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogfQogCiB2b2lkIF9faW9tZW0gKiBpb3JlbWFwX2ZsYWdzKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwl2b2lkICpjYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisKIAkvKiB3cml0ZWFibGUgaW1wbGllcyBkaXJ0eSBmb3Iga2VybmVsIGFkZHJlc3NlcyAqLwogCWlmIChmbGFncyAmIF9QQUdFX1JXKQogCQlmbGFncyB8PSBfUEFHRV9ESVJUWTsKQEAgLTIwNyw4ICsyMTYsOCBAQAogCWZsYWdzICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpOwogCiAJaWYgKHBwY19tZC5pb3JlbWFwKQotCQlyZXR1cm4gcHBjX21kLmlvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOwotCXJldHVybiBfX2lvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOworCQlyZXR1cm4gcHBjX21kLmlvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKaW5kZXggZmU2NWM0MC4uMmQyYTg3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCkBAIC03NCw5ICs3NCw2IEBACiAKIHVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUE9XRVI0Ci0JcmV0dXJuIDA7Ci0jZWxzZQogCXVuc2lnbmVkIGxvbmcgdG90LCBibCwgZG9uZTsKIAl1bnNpZ25lZCBsb25nIG1heF9zaXplID0gKDI1Njw8MjApOwogCkBAIC05NSw3ICs5Miw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlzZXRiYXQoMiwgUEFHRV9PRkZTRVQsIDAsIGJsLCBfUEFHRV9SQU0pOworCXNldGJhdCgyLCBQQUdFX09GRlNFVCwgMCwgYmwsIFBBR0VfS0VSTkVMX1gpOwogCWRvbmUgPSAodW5zaWduZWQgbG9uZyliYXRfYWRkcnNbMl0ubGltaXQgLSBQQUdFX09GRlNFVCArIDE7CiAJaWYgKChkb25lIDwgdG90KSAmJiAhYmF0X2FkZHJzWzNdLmxpbWl0KSB7CiAJCS8qIHVzZSBCQVQzIHRvIGNvdmVyIGEgYml0IG1vcmUgKi8KQEAgLTEwMywxMiArMTAwLDExIEBACiAJCWZvciAoYmwgPSAxMjg8PDEwOyBibCA8IG1heF9zaXplOyBibCA8PD0gMSkKIAkJCWlmIChibCAqIDIgPiB0b3QpCiAJCQkJYnJlYWs7Ci0JCXNldGJhdCgzLCBQQUdFX09GRlNFVCtkb25lLCBkb25lLCBibCwgX1BBR0VfUkFNKTsKKwkJc2V0YmF0KDMsIFBBR0VfT0ZGU0VUK2RvbmUsIGRvbmUsIGJsLCBQQUdFX0tFUk5FTF9YKTsKIAkJZG9uZSA9ICh1bnNpZ25lZCBsb25nKWJhdF9hZGRyc1szXS5saW1pdCAtIFBBR0VfT0ZGU0VUICsgMTsKIAl9CiAKIAlyZXR1cm4gZG9uZTsKLSNlbmRpZgogfQogCiAvKgpAQCAtMTM2LDkgKzEzMiw3IEBACiAJCXdpbWd4cHAgfD0gKGZsYWdzICYgX1BBR0VfUlcpPyBCUFBfUlc6IEJQUF9SWDsKIAkJYmF0WzFdLmJhdHUgPSB2aXJ0IHwgKGJsIDw8IDIpIHwgMjsgLyogVnM9MSwgVnA9MCAqLwogCQliYXRbMV0uYmF0bCA9IEJBVF9QSFlTX0FERFIocGh5cykgfCB3aW1neHBwOwotI2lmbmRlZiBDT05GSUdfS0dEQiAvKiB3YW50IHVzZXIgYWNjZXNzIGZvciBicmVha3BvaW50cyAqLwogCQlpZiAoZmxhZ3MgJiBfUEFHRV9VU0VSKQotI2VuZGlmCiAJCQliYXRbMV0uYmF0dSB8PSAxOyAJLyogVnAgPSAxICovCiAJCWlmIChmbGFncyAmIF9QQUdFX0dVQVJERUQpIHsKIAkJCS8qIEcgYml0IG11c3QgYmUgemVybyBpbiBJQkFUcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKaW5kZXggYzkzMWJjNy4uMWJlMWI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCkBAIC0xMzksMTIgKzEzOSwxMiBAQAogICovCiB2b2lkIF9fZmx1c2hfdGxiX3BlbmRpbmcoc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqYmF0Y2gpCiB7Ci0JY3B1bWFza190IHRtcDsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqdG1wOwogCWludCBpLCBsb2NhbCA9IDA7CiAKIAlpID0gYmF0Y2gtPmluZGV4OwotCXRtcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGNwdXNfZXF1YWwoYmF0Y2gtPm1tLT5jcHVfdm1fbWFzaywgdG1wKSkKKwl0bXAgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhiYXRjaC0+bW0pLCB0bXApKQogCQlsb2NhbCA9IDE7CiAJaWYgKGkgPT0gMSkKIAkJZmx1c2hfaGFzaF9wYWdlKGJhdGNoLT52YWRkclswXSwgYmF0Y2gtPnB0ZVswXSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDM5YWMyMmIuLjdhZjcyOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTMyLDExICsxMzIsMTEgQEAKIAlwaWQgPSBtbS0+Y29udGV4dC5pZDsKIAlpZiAodW5saWtlbHkocGlkID09IE1NVV9OT19DT05URVhUKSkKIAkJZ290byBub19jb250ZXh0OwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKSB7CisJaWYgKCFjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKSB7CiAJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsgLnBpZCA9IHBpZCB9OwotCQlzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdV9tYXNrLCBkb19mbHVzaF90bGJfbW1faXBpLCAmcCwgMSk7CisJCS8qIElnbm9yZXMgc21wX3Byb2Nlc3Nvcl9pZCgpIGV2ZW4gaWYgc2V0LiAqLworCQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1tX2NwdW1hc2sobW0pLAorCQkJCSAgICAgICBkb19mbHVzaF90bGJfbW1faXBpLCAmcCwgMSk7CiAJfQogCV90bGJpbF9waWQocGlkKTsKICBub19jb250ZXh0OgpAQCAtMTQ2LDE2ICsxNDYsMTUgQEAKIAogdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JY3B1bWFza190IGNwdV9tYXNrOworCXN0cnVjdCBjcHVtYXNrICpjcHVfbWFzazsKIAl1bnNpZ25lZCBpbnQgcGlkOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcGlkID0gdm1hID8gdm1hLT52bV9tbS0+Y29udGV4dC5pZCA6IDA7CiAJaWYgKHVubGlrZWx5KHBpZCA9PSBNTVVfTk9fQ09OVEVYVCkpCiAJCWdvdG8gYmFpbDsKLQljcHVfbWFzayA9IHZtYS0+dm1fbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKSB7CisJY3B1X21hc2sgPSBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pOworCWlmICghY3B1bWFza19lcXVhbChjcHVfbWFzaywgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewogCQkvKiBJZiBicm9hZGNhc3QgdGxiaXZheCBpcyBzdXBwb3J0ZWQsIHVzZSBpdCAqLwogCQlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVVNFX1RMQklWQVhfQkNBU1QpKSB7CiAJCQlpbnQgbG9jayA9IG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX0xPQ0tfQkNBU1RfSU5WQUwpOwpAQCAtMTY3LDcgKzE2Niw4IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgdGxiX2ZsdXNoX3BhcmFtIHAgPSB7IC5waWQgPSBwaWQsIC5hZGRyID0gdm1hZGRyIH07Ci0JCQlzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdV9tYXNrLAorCQkJLyogSWdub3JlcyBzbXBfcHJvY2Vzc29yX2lkKCkgZXZlbiBpZiBzZXQgaW4gY3B1X21hc2sgKi8KKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkoY3B1X21hc2ssCiAJCQkJCSAgICAgICBkb19mbHVzaF90bGJfcGFnZV9pcGksICZwLCAxKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMKaW5kZXggZjkwMGEzOS4uNzg4Yjg3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMKQEAgLTExOCwyNSArMTE4LDUwIEBACiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKIC8qCi0gKiBGU0wgQm9va0UgaW1wbGVtZW50YXRpb25zLiBDdXJyZW50bHkgX3BpZCBhbmQgX2FsbCBhcmUgdGhlCi0gKiBzYW1lLiBUaGlzIHdpbGwgY2hhbmdlIHdoZW4gdGxiaWx4IGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBhbmQKLSAqIHBlcmZvcm1zIGludmFsaWRhdGUtYnktUElELiBUaGlzIGNoYW5nZSB3aWxsIGJlIGRyaXZlbiBieQotICogbW11X2ZlYXR1cmVzIGNvbmRpdGlvbmFsCisgKiBGU0wgQm9va0UgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIFNpbmNlIGZlYXR1cmUgc2VjdGlvbnMgYXJlIHVzaW5nIF9TRUNUSU9OX0VMU0Ugd2UgbmVlZAorICogdG8gaGF2ZSB0aGUgbGFyZ2VyIGNvZGUgcGF0aCBiZWZvcmUgdGhlIF9TRUNUSU9OX0VMU0UKICAqLwogCisjZGVmaW5lIE1NVUNTUjBfVExCRkkJKE1NVUNTUjBfVExCMEZJIHwgTU1VQ1NSMF9UTEIxRkkgfCBcCisJCQkgTU1VQ1NSMF9UTEIyRkkgfCBNTVVDU1IwX1RMQjNGSSkKIC8qCiAgKiBGbHVzaCBNTVUgVExCIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IKICAqLwotX0dMT0JBTChfdGxiaWxfcGlkKQogX0dMT0JBTChfdGxiaWxfYWxsKQotI2RlZmluZSBNTVVDU1IwX1RMQkZJCShNTVVDU1IwX1RMQjBGSSB8IE1NVUNTUjBfVExCMUZJIHwgXAotCQkJIE1NVUNTUjBfVExCMkZJIHwgTU1VQ1NSMF9UTEIzRkkpCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KIAlsaQlyMywoTU1VQ1NSMF9UTEJGSSlAbAogCW10c3ByCVNQUk5fTU1VQ1NSMCwgcjMKIDE6CiAJbWZzcHIJcjMsU1BSTl9NTVVDU1IwCiAJYW5kaS4JcjMscjMsTU1VQ1NSMF9UTEJGSUBsCiAJYm5lCTFiCitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCVBQQ19UTEJJTFhfQUxMKDAsMCkKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKE1NVV9GVFJfVVNFX1RMQklMWCkKKwltc3luYworCWlzeW5jCisJYmxyCisKK19HTE9CQUwoX3RsYmlsX3BpZCkKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCXNsd2kJcjMscjMsMTYKKwltZm1zcglyMTAKKwl3cnRlZWkJMAorCW1mc3ByCXI0LFNQUk5fTUFTNgkvKiBzYXZlIE1BUzYgKi8KKwltdHNwcglTUFJOX01BUzYscjMKKwlQUENfVExCSUxYX1BJRCgwLDApCisJbXRzcHIJU1BSTl9NQVM2LHI0CS8qIHJlc3RvcmUgTUFTNiAqLworCXdydGVlCXIxMAorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwlsaQlyMywoTU1VQ1NSMF9UTEJGSSlAbAorCW10c3ByCVNQUk5fTU1VQ1NSMCwgcjMKKzE6CisJbWZzcHIJcjMsU1BSTl9NTVVDU1IwCisJYW5kaS4JcjMscjMsTU1VQ1NSMF9UTEJGSUBsCisJYm5lCTFiCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRlNFVChNTVVfRlRSX1VTRV9UTEJJTFgpCiAJbXN5bmMKIAlpc3luYwogCWJscgpAQCAtMTQ5LDcgKzE3NCw5IEBACiAJbWZtc3IJcjEwCiAJd3J0ZWVpCTAKIAlzbHdpCXI0LHI0LDE2CisJb3JpCXI0LHI0LChNQVM2X0lTSVpFKEJPT0szRV9QQUdFU1pfNEspKUBsCiAJbXRzcHIJU1BSTl9NQVM2LHI0CQkvKiBhc3N1bWUgQVM9MCBmb3Igbm93ICovCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KIAl0bGJzeAkwLHIzCiAJbWZzcHIJcjQsU1BSTl9NQVMxCQkvKiBjaGVjayB2YWxpZCAqLwogCWFuZGlzLglyMyxyNCxNQVMxX1ZBTElEQGgKQEAgLTE1Nyw2ICsxODQsOSBAQAogCXJsd2lubQlyNCxyNCwwLDEsMzEKIAltdHNwcglTUFJOX01BUzEscjQKIAl0bGJ3ZQorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwlQUENfVExCSUxYX1ZBKDAscjMpCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihNTVVfRlRSX1VTRV9UTEJJTFgpCiAJbXN5bmMKIAlpc3luYwogMToJd3J0ZWUJcjEwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYwppbmRleCBjYzU5OWViLi5mOGQzNmY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMKQEAgLTI5LDcgKzI5LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2V0X3ZhbHVlW09QX01BWF9DT1VOVEVSXTsKIAogc3RhdGljIGludCBvcHJvZmlsZV9ydW5uaW5nOwotc3RhdGljIHUzMiBtbWNyMF92YWwsIG1tY3IxX3ZhbCwgbW1jcjJfdmFsOworc3RhdGljIHUzMiBtbWNyMF92YWwsIG1tY3IxX3ZhbCwgbW1jcjJfdmFsLCBudW1fcG1jczsKIAogI2RlZmluZSBNTUNSMF9QTUMxX1NISUZUCTYKICNkZWZpbmUgTU1DUjBfUE1DMl9TSElGVAkwCkBAIC04OCwxMyArODgsMTIgQEAKIAogCW10c3ByKFNQUk5fTU1DUjAsIG1tY3IwX3ZhbCk7CiAJbXRzcHIoU1BSTl9NTUNSMSwgbW1jcjFfdmFsKTsKLQltdHNwcihTUFJOX01NQ1IyLCBtbWNyMl92YWwpOworCWlmIChudW1fcG1jcyA+IDQpCisJCW10c3ByKFNQUk5fTU1DUjIsIG1tY3IyX3ZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBOVU1fQ1RSUyA2Ci0KIC8qIENvbmZpZ3VyZXMgdGhlIGdsb2JhbCBzZXR0aW5ncyBmb3IgdGhlIGNvdW50ZXMgb24gYWxsIENQVXMuICovCiBzdGF0aWMgaW50IGZzbDc0NTBfcmVnX3NldHVwKHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyAqY3RyLAogCQkJICAgICBzdHJ1Y3Qgb3Bfc3lzdGVtX2NvbmZpZyAqc3lzLApAQCAtMTAyLDEyICsxMDEsMTMgQEAKIHsKIAlpbnQgaTsKIAorCW51bV9wbWNzID0gbnVtX2N0cnM7CiAJLyogT3VyIGNvdW50ZXJzIGNvdW50IHVwLCBhbmQgImNvdW50IiByZWZlcnMgdG8KIAkgKiBob3cgbXVjaCBiZWZvcmUgdGhlIG5leHQgaW50ZXJydXB0LCBhbmQgd2UgaW50ZXJydXB0CiAJICogb24gb3ZlcmZsb3cuICBTbyB3ZSBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHZhbHVlCiAJICogd2hpY2ggd2lsbCBnaXZlIHVzICJjb3VudCIgdW50aWwgb3ZlcmZsb3cuCiAJICogVGhlbiB3ZSBzZXQgdGhlIGV2ZW50cyBvbiB0aGUgZW5hYmxlZCBjb3VudGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSUzsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBudW1fY3RyczsgKytpKQogCQlyZXNldF92YWx1ZVtpXSA9IDB4ODAwMDAwMDBVTCAtIGN0cltpXS5jb3VudDsKIAogCS8qIFNldCBldmVudHMgZm9yIENvdW50ZXJzIDEgJiAyICovCkBAIC0xMjMsOSArMTIzLDEwIEBACiAKIAkvKiBTZXQgZXZlbnRzIGZvciBDb3VudGVycyAzLTYgKi8KIAltbWNyMV92YWwgPSBtbWNyMV9ldmVudDMoY3RyWzJdLmV2ZW50KQotCQl8IG1tY3IxX2V2ZW50NChjdHJbM10uZXZlbnQpCi0JCXwgbW1jcjFfZXZlbnQ1KGN0cls0XS5ldmVudCkKLQkJfCBtbWNyMV9ldmVudDYoY3RyWzVdLmV2ZW50KTsKKwkJfCBtbWNyMV9ldmVudDQoY3RyWzNdLmV2ZW50KTsKKwlpZiAobnVtX2N0cnMgPiA0KQorCQltbWNyMV92YWwgfD0gbW1jcjFfZXZlbnQ1KGN0cls0XS5ldmVudCkKKwkJCXwgbW1jcjFfZXZlbnQ2KGN0cls1XS5ldmVudCk7CiAKIAltbWNyMl92YWwgPSAwOwogCkBAIC0xMzksNyArMTQwLDcgQEAKIAogCW10bXNyKG1mbXNyKCkgfCBNU1JfUE1NKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9wbWNzOyArK2kpIHsKIAkJaWYgKGN0cltpXS5lbmFibGVkKQogCQkJY2xhc3NpY19jdHJfd3JpdGUoaSwgcmVzZXRfdmFsdWVbaV0pOwogCQllbHNlCkBAIC0xODQsNyArMTg1LDcgQEAKIAlwYyA9IG1mc3ByKFNQUk5fU0lBUik7CiAJaXNfa2VybmVsID0gaXNfa2VybmVsX2FkZHIocGMpOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DVFJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BtY3M7ICsraSkgewogCQl2YWwgPSBjbGFzc2ljX2N0cl9yZWFkKGkpOwogCQlpZiAodmFsIDwgMCkgewogCQkJaWYgKG9wcm9maWxlX3J1bm5pbmcgJiYgY3RyW2ldLmVuYWJsZWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCmluZGV4IDM0OTZiYzAuLmJmNWM3ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwpAQCAtMTE4LDYgKzExOCwxNyBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwR1QgZXZhbHVhdGlvbiBib2FyZC4KIAorY29uZmlnIFJFRFdPT0QKKwlib29sICJSZWR3b29kIgorCWRlcGVuZHMgb24gNDR4CisJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKKwlzZWxlY3QgNDYwU1gKKwlzZWxlY3QgUENJCisJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwU1ggUmVkd29vZCBib2FyZC4KKwogY29uZmlnIFlPU0VNSVRFCiAJYm9vbCAiWW9zZW1pdGUiCiAJZGVwZW5kcyBvbiA0NHgKQEAgLTIyMCw2ICsyMzEsMTQgQEAKIAlzZWxlY3QgSUJNX05FV19FTUFDX0VNQUM0CiAJc2VsZWN0IElCTV9ORVdfRU1BQ19UQUgKIAorY29uZmlnIDQ2MFNYCisJYm9vbAorCXNlbGVjdCBQUENfRlBVCisJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAorCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKKwlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKKwlzZWxlY3QgSUJNX05FV19FTUFDX1RBSAorCiAjIDQ0eCBlcnJhdGEvd29ya2Fyb3VuZCBjb25maWcgc3ltYm9scywgc2VsZWN0ZWQgYnkgdGhlIENQVSBtb2RlbHMgYWJvdmUKIGNvbmZpZyBJQk00NDBFUF9FUlI0MgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwppbmRleCA3NmZkYzUxLi41YmNkNDQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJImlibSxlYm9ueSIsCiAJImFtY2Msa2F0bWFpIiwKIAkiYW1jYyxyYWluaWVyIiwKKwkiYW1jYyxyZWR3b29kIiwKIAkiYW1jYyxzZXF1b2lhIiwKIAkiYW1jYyx0YWlzaGFuIiwKIAkiYW1jYyx5b3NlbWl0ZSIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKaW5kZXggMzI2ODUyYy4uNGRhYzliMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKQEAgLTEyLDcgKzEyLDcgQEAKIAogY29uZmlnIE1QQzUxMjFfQURTCiAJYm9vbCAiRnJlZXNjYWxlIE1QQzUxMjFFIEFEUyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAlzZWxlY3QgUFBDX01QQzUxMjEKIAlzZWxlY3QgTVBDNTEyMV9BRFNfQ1BMRApAQCAtMjEsNyArMjEsNyBAQAogCiBjb25maWcgTVBDNTEyMV9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBzdXBwb3J0IGZvciBzaW1wbGUgTVBDNTEyMSBiYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IFBQQ19NUEM1MTIxCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZwppbmRleCA2OTZhNWVlLi44YjhlOTU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUENfTVBDNTJ4eAogCWJvb2wgIjUyeHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIKKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBQUENfQ0xPQ0sKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIApAQCAtMjEsNyArMjEsMTMgQEAKIAkgICAgYW5kIGlmIHRoZXJlIGlzIGEgUENJIGJ1cyBub2RlIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLgogCiAJICBCb2FyZHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgZ2VuZXJpYyBwbGF0Zm9ybSBzdXBwb3J0Ci0JICBhcmU6ICd0cWMsdHFtNTIwMCcsICdwcm9tZXNzLG1vdGlvbnBybycsICdzY2hpbmRsZXIsY201MjAwJy4KKwkgIGFyZToKKwkgICAgIGludGVyY29udHJvbCxkaWdzeS1tdGMKKwkgICAgIHBoeXRlYyxwY20wMzAKKwkgICAgIHBoeXRlYyxwY20wMzIKKwkgICAgIHByb21lc3MsbW90aW9ucHJvCisJICAgICBzY2hpbmRsZXIsY201MjAwCisJICAgICB0cWMsdHFtNTIwMAogCiBjb25maWcgUFBDX0VGSUtBCiAJYm9vbCAiYlBsYW4gRWZpa2EgNWsyLiBNUEM1MjAwQiBiYXNlZCBjb21wdXRlciIKQEAgLTM1LDYgKzQxLDExIEBACiAJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eAogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQogCitjb25maWcgUFBDX01FRElBNTIwMAorCWJvb2wgIkZyZWVzY2FsZSBNZWRpYTUyMDAgRXZhbCBCb2FyZCIKKwlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4CisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisKIGNvbmZpZyBQUENfTVBDNTIwMF9CVUdGSVgKIAlib29sICJNUEM1MjAwIChMMjVSKSBidWdmaXggc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKaW5kZXggYjhhNTIwNi4uYmZkNGY1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQpAQCAtMSwxMiArMSwxMyBAQAogIwogIyBNYWtlZmlsZSBmb3IgNTJ4eCBiYXNlZCBib2FyZHMKICMKLW9iai15CQkJCSs9IG1wYzUyeHhfcGljLm8gbXBjNTJ4eF9jb21tb24ubworb2JqLXkJCQkJKz0gbXBjNTJ4eF9waWMubyBtcGM1Mnh4X2NvbW1vbi5vIG1wYzUyeHhfZ3B0Lm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBtcGM1Mnh4X3BjaS5vCiAKIG9iai0kKENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEUpICs9IG1wYzUyMDBfc2ltcGxlLm8KIG9iai0kKENPTkZJR19QUENfRUZJS0EpCQkrPSBlZmlrYS5vCiBvYmotJChDT05GSUdfUFBDX0xJVEU1MjAwKQkrPSBsaXRlNTIwMC5vCitvYmotJChDT05GSUdfUFBDX01FRElBNTIwMCkJKz0gbWVkaWE1MjAwLm8KIAogb2JqLSQoQ09ORklHX1BNKQkJKz0gbXBjNTJ4eF9zbGVlcC5vIG1wYzUyeHhfcG0ubwogaWZlcSAoJChDT05GSUdfUFBDX0xJVEU1MjAwKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBTdXBwb3J0IGZvciAnbWVkaWE1MjAwLXBsYXRmb3JtJyBjb21wYXRpYmxlIGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGNvZGUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYXBlIE1lZGlhNTIwMCBwbGF0Zm9ybQorICogKGJ1aWx0IGFyb3VuZCB0aGUgTVBDNTIwMCBTb0MpLgorICoKKyAqIE5vdGFibGUgY2hhcmFjdGVyaXN0aWMgb2YgdGhlIE1lZGlhNTIwMCBpcyB0aGUgcHJlc2VuY2Ugb2YgYW4gRlBHQQorICogdGhhdCBoYXMgYWxsIGV4dGVybmFsIElSUSBsaW5lcyByb3V0ZWQgdGhyb3VnaCBpdC4gIFRoaXMgZmlsZSBpbXBsZW1lbnRzCisgKiBhIGNhc2NhZGVkIGludGVycnVwdCBjb250cm9sbGVyIGRyaXZlciB3aGljaCBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlCisgKiBWaXJ0dWFsIElSUSBzdWJzeXN0ZW0gYWZ0ZXIgdGhlIHByaW1hcnkgbXBjNTIwMCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogaXMgaW5pdGlhbGl6ZWQuCisgKgorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1MjAwX2dwaW9faWRzW10gX19pbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1ncGlvIiwgfSwKKwl7fQorfTsKKworLyogRlBHQSByZWdpc3RlciBzZXQgKi8KKyNkZWZpbmUgTUVESUE1MjAwX0lSUV9FTkFCTEUgKDB4NDBjKQorI2RlZmluZSBNRURJQTUyMDBfSVJRX1NUQVRVUyAoMHg0MTApCisjZGVmaW5lIE1FRElBNTIwMF9OVU1fSVJRUyAgICg2KQorI2RlZmluZSBNRURJQTUyMDBfSVJRX1NISUZUICAoMzIgLSBNRURJQTUyMDBfTlVNX0lSUVMpCisKK3N0cnVjdCBtZWRpYTUyMDBfaXJxIHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpcnFfaG9zdCAqaXJxaG9zdDsKK307CitzdHJ1Y3QgbWVkaWE1MjAwX2lycSBtZWRpYTUyMDBfaXJxOworCitzdGF0aWMgdm9pZCBtZWRpYTUyMDBfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7CisJdmFsID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7CisJdmFsIHw9IDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFfbWFwW3ZpcnFdLmh3aXJxKTsKKwlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWVkaWE1MjAwX2lycV9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFKTsKKwl2YWwgJj0gfigxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxX21hcFt2aXJxXS5od2lycSkpOworCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCB2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1lZGlhNTIwMF9pcnFfY2hpcCA9IHsKKwkudHlwZW5hbWUgPSAiTWVkaWE1MjAwIEZQR0EiLAorCS51bm1hc2sgPSBtZWRpYTUyMDBfaXJxX3VubWFzaywKKwkubWFzayA9IG1lZGlhNTIwMF9pcnFfbWFzaywKKwkubWFza19hY2sgPSBtZWRpYTUyMDBfaXJxX21hc2ssCit9OworCit2b2lkIG1lZGlhNTIwMF9pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgdmlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWludCBzdWJfdmlycSwgdmFsOworCXUzMiBzdGF0dXMsIGVuYWJsZTsKKworCS8qIE1hc2sgb2ZmIHRoZSBjYXNjYWRlZCBJUlEgKi8KKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCWRlc2MtPmNoaXAtPm1hc2sodmlycSk7CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCisJLyogQXNrIHRoZSBGUEdBIGZvciBJUlEgc3RhdHVzLiAgSWYgJ3ZhbCcgaXMgMCwgdGhlbiBubyBpcnFzCisJICogYXJlIHBlbmRpbmcuICAnZmZzKCknIGlzIDEgYmFzZWQgKi8KKwlzdGF0dXMgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFKTsKKwllbmFibGUgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfU1RBVFVTKTsKKwl2YWwgPSBmZnMoKHN0YXR1cyAmIGVuYWJsZSkgPj4gTUVESUE1MjAwX0lSUV9TSElGVCk7CisJaWYgKHZhbCkgeworCQlzdWJfdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKG1lZGlhNTIwMF9pcnEuaXJxaG9zdCwgdmFsIC0gMSk7CisJCS8qIHByX2RlYnVnKCIlczogdmlycT0laSBzPSUuOHggZT0lLjh4IGh3aXJxPSVpIHN1YnZpcnE9JWlcbiIsCisJCSAqICAgICAgICAgIF9fZnVuY19fLCB2aXJxLCBzdGF0dXMsIGVuYWJsZSwgdmFsIC0gMSwgc3ViX3ZpcnEpOworCQkgKi8KKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHN1Yl92aXJxKTsKKwl9CisKKwkvKiBQcm9jZXNzaW5nIGRvbmU7IGNhbiByZWVuYWJsZSB0aGUgY2FzY2FkZSBub3cgKi8KKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCWRlc2MtPmNoaXAtPmFjayh2aXJxKTsKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQorCQlkZXNjLT5jaGlwLT51bm1hc2sodmlycSk7CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworfQorCitzdGF0aWMgaW50IG1lZGlhNTIwMF9pcnFfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgIGlycV9od19udW1iZXJfdCBodykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisKKwlwcl9kZWJ1ZygiJXM6IGg9JXAsIHZpcnE9JWksIGh3aXJxPSVpXG4iLCBfX2Z1bmNfXywgaCwgdmlycSwgKGludClodyk7CisJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgJm1lZGlhNTIwMF9pcnEpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbWVkaWE1MjAwX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlzZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKKwlkZXNjLT5zdGF0dXMgfD0gSVJRX1RZUEVfTEVWRUxfTE9XIHwgSVJRX0xFVkVMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVkaWE1MjAwX2lycV94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkJIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkJIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLAorCQkJCSB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKK3sKKwlpZiAoaW50c2l6ZSAhPSAyKQorCQlyZXR1cm4gLTE7CisKKwlwcl9kZWJ1ZygiJXM6IGJhbms9JWksIG51bWJlcj0laVxuIiwgX19mdW5jX18sIGludHNwZWNbMF0sIGludHNwZWNbMV0pOworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzFdOworCSpvdXRfZmxhZ3MgPSBJUlFfVFlQRV9OT05FOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBtZWRpYTUyMDBfaXJxX29wcyA9IHsKKwkubWFwID0gbWVkaWE1MjAwX2lycV9tYXAsCisJLnhsYXRlID0gbWVkaWE1MjAwX2lycV94bGF0ZSwKK307CisKKy8qCisgKiBTZXR1cCBNZWRpYTUyMDAgSVJRIG1hcHBpbmcKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1lZGlhNTIwMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZnBnYV9ucDsKKwlpbnQgY2FzY2FkZV92aXJxOworCisJLyogRmlyc3Qgc2V0dXAgdGhlIHJlZ3VsYXIgTVBDNTIwMCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCW1wYzUyeHhfaW5pdF9pcnEoKTsKKworCS8qIE5vdyBmaW5kIHRoZSBGUEdBIElSUSAqLworCWZwZ2FfbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1lZGlhNTIwMC1mcGdhIik7CisJaWYgKCFmcGdhX25wKQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IGZvdW5kIGZwZ2Egbm9kZTogJXNcbiIsIF9fZnVuY19fLCBmcGdhX25wLT5mdWxsX25hbWUpOworCisJbWVkaWE1MjAwX2lycS5yZWdzID0gb2ZfaW9tYXAoZnBnYV9ucCwgMCk7CisJaWYgKCFtZWRpYTUyMDBfaXJxLnJlZ3MpCisJCWdvdG8gb3V0OworCXByX2RlYnVnKCIlczogbWFwcGVkIHRvICVwXG4iLCBfX2Z1bmNfXywgbWVkaWE1MjAwX2lycS5yZWdzKTsKKworCWNhc2NhZGVfdmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGZwZ2FfbnAsIDApOworCWlmICghY2FzY2FkZV92aXJxKQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IGNhc2NhZGVkIG9uIHZpcnE9JWlcbiIsIF9fZnVuY19fLCBjYXNjYWRlX3ZpcnEpOworCisJLyogRGlzYWJsZSBhbGwgRlBHQSBJUlFzICovCisJb3V0X2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUsIDApOworCisJc3Bpbl9sb2NrX2luaXQoJm1lZGlhNTIwMF9pcnEubG9jayk7CisKKwltZWRpYTUyMDBfaXJxLmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChmcGdhX25wLCBJUlFfSE9TVF9NQVBfTElORUFSLAorCQkJCQkgICAgICAgTUVESUE1MjAwX05VTV9JUlFTLAorCQkJCQkgICAgICAgJm1lZGlhNTIwMF9pcnFfb3BzLCAtMSk7CisJaWYgKCFtZWRpYTUyMDBfaXJxLmlycWhvc3QpCisJCWdvdG8gb3V0OworCXByX2RlYnVnKCIlczogYWxsb2NhdGVkIGlycWhvc3RcbiIsIF9fZnVuY19fKTsKKworCW1lZGlhNTIwMF9pcnEuaXJxaG9zdC0+aG9zdF9kYXRhID0gJm1lZGlhNTIwMF9pcnE7CisKKwlzZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxLCAmbWVkaWE1MjAwX2lycSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV92aXJxLCBtZWRpYTUyMDBfaXJxX2Nhc2NhZGUpOworCisJcmV0dXJuOworCisgb3V0OgorCXByX2VycigiQ291bGQgbm90IGZpbmQgTWVkaWE1MjAwIEZQR0E7IFBDSSBpbnRlcnJ1cHRzIHdpbGwgbm90IHdvcmtcbiIpOworfQorCisvKgorICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbWVkaWE1MjAwX3NldHVwX2FyY2godm9pZCkKK3sKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG1wYzUyeHhfZ3BpbyBfX2lvbWVtICpncGlvOworCXUzMiBwb3J0X2NvbmZpZzsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibWVkaWE1MjAwX3NldHVwX2FyY2goKSIsIDApOworCisJLyogTWFwIGltcG9ydGFudCByZWdpc3RlcnMgZnJvbSB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hcCAqLworCW1wYzUyeHhfbWFwX2NvbW1vbl9kZXZpY2VzKCk7CisKKwkvKiBTb21lIG1wYzUyMDAgJiBtcGM1MjAwYiByZWxhdGVkIGNvbmZpZ3VyYXRpb24gKi8KKwltcGM1MjAwX3NldHVwX3hsYl9hcmJpdGVyKCk7CisKKwltcGM1Mnh4X3NldHVwX3BjaSgpOworCisJbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgbXBjNTIwMF9ncGlvX2lkcyk7CisJZ3BpbyA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7CisJaWYgKCFncGlvKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQuIGV4cGVjdCBhYm5vcm1hbCBiZWhhdmlvclxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCBwb3J0IGNvbmZpZyAqLworCXBvcnRfY29uZmlnID0gaW5fYmUzMigmZ3Bpby0+cG9ydF9jb25maWcpOworCisJcG9ydF9jb25maWcgJj0gfjB4MDMwMDAwMDA7CS8qIEFUQSBDUyBpcyBvbiBjc2JfNC81CQkqLworCXBvcnRfY29uZmlnIHw9ICAweDAxMDAwMDAwOworCisJb3V0X2JlMzIoJmdwaW8tPnBvcnRfY29uZmlnLCBwb3J0X2NvbmZpZyk7CisKKwkvKiBVbm1hcCB6b25lICovCisJaW91bm1hcChncGlvKTsKKworfQorCisvKiBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYm9hcmRzICovCitzdGF0aWMgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0geworCSJmc2wsbWVkaWE1MjAwIiwKKwlOVUxMCit9OworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIE1NVSBpcyBvZmYsIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1lZGlhNTIwMF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbm9kZSA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoYm9hcmRbaV0pIHsKKwkJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShub2RlLCBib2FyZFtpXSkpCisJCQlicmVhazsKKwkJaSsrOworCX0KKworCXJldHVybiAoYm9hcmRbaV0gIT0gTlVMTCk7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1lZGlhNTIwMF9wbGF0Zm9ybSkgeworCS5uYW1lCQk9ICJtZWRpYTUyMDAtcGxhdGZvcm0iLAorCS5wcm9iZQkJPSBtZWRpYTUyMDBfcHJvYmUsCisJLnNldHVwX2FyY2gJPSBtZWRpYTUyMDBfc2V0dXBfYXJjaCwKKwkuaW5pdAkJPSBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKKwkuaW5pdF9JUlEJPSBtZWRpYTUyMDBfaW5pdF9pcnEsCisJLmdldF9pcnEJPSBtcGM1Mnh4X2dldF9pcnEsCisJLnJlc3RhcnQJPSBtcGM1Mnh4X3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCmluZGV4IGEzYmRhMGIuLmMzMWU1YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCkBAIC01MCw4ICs1MCwxMCBAQAogCiAvKiBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYm9hcmRzICovCiBzdGF0aWMgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0gewotCSJwcm9tZXNzLG1vdGlvbnBybyIsCisJImludGVyY29udHJvbCxkaWdzeS1tdGMiLAogCSJwaHl0ZWMscGNtMDMwIiwKKwkicGh5dGVjLHBjbTAzMiIsCisJInByb21lc3MsbW90aW9ucHJvIiwKIAkic2NoaW5kbGVyLGNtNTIwMCIsCiAJInRxYyx0cW01MjAwIiwKIAlOVUxMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCmluZGV4IDk4MzY3YTAuLjhlM2RkNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCkBAIC0yOCw5ICsyOCwxMCBAQAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9idXNfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWltbXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZnNsLGxwYiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAogCS8qIGRlcHJlY2lhdGVkIG1hdGNoZXM7IHNob3VsZG4ndCBiZSB1c2VkIGluIG5ldyBkZXZpY2UgdHJlZXMgKi8KKwl7IC5jb21wYXRpYmxlID0gImZzbCxscGIiLCB9LAogCXsgLnR5cGUgPSAiYnVpbHRpbiIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAiLCB9LCAvKiBlZmlrYSAqLwogCXsgLnR5cGUgPSAic29jIiwgLmNvbXBhdGlibGUgPSAibXBjNTIwMCIsIH0sIC8qIGxpdGU1MjAwICovCiAJe30KQEAgLTIwNSw2ICsyMDYsNDMgQEAKIEVYUE9SVF9TWU1CT0wobXBjNTJ4eF9zZXRfcHNjX2Nsa2Rpdik7CiAKIC8qKgorICogbXBjNTJ4eF9nZXRfeHRhbF9mcmVxIC0gR2V0IFNZU19YVEFMX0lOIGZyZXF1ZW5jeSBmb3IgYSBkZXZpY2UKKyAqCisgKiBAbm9kZTogZGV2aWNlIG5vZGUKKyAqCisgKiBSZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGV4dGVybmFsIG9zY2lsbGF0b3IgY2xvY2sgY29ubmVjdGVkCisgKiB0byB0aGUgU1lTX1hUQUxfSU4gcGluLCBvciAwIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICovCit1bnNpZ25lZCBpbnQgbXBjNTJ4eF9nZXRfeHRhbF9mcmVxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBmcmVxOworCisJaWYgKCFtcGM1Mnh4X2NkbSkKKwkJcmV0dXJuIDA7CisKKwlmcmVxID0gbXBjNTJ4eF9maW5kX2lwYl9mcmVxKG5vZGUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5fOCgmbXBjNTJ4eF9jZG0tPmlwYl9jbGtfc2VsKSAmIDB4MSkKKwkJZnJlcSAqPSAyOworCisJdmFsICA9IGluX2JlMzIoJm1wYzUyeHhfY2RtLT5yc3RjZmcpOworCWlmICh2YWwgJiAoMSA8PCA1KSkKKwkJZnJlcSAqPSA4OworCWVsc2UKKwkJZnJlcSAqPSA0OworCWlmICh2YWwgJiAoMSA8PCA2KSkKKwkJZnJlcSAvPSAxMjsKKwllbHNlCisJCWZyZXEgLz0gMTY7CisKKwlyZXR1cm4gZnJlcTsKK30KK0VYUE9SVF9TWU1CT0wobXBjNTJ4eF9nZXRfeHRhbF9mcmVxKTsKKworLyoqCiAgKiBtcGM1Mnh4X3Jlc3RhcnQ6IHBwY19tZC0+cmVzdGFydCBob29rIGZvciBtcGM1MjAwIHVzaW5nIHRoZSB3YXRjaGRvZyB0aW1lcgogICovCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMKaW5kZXggMDdmODlhZS4uMmI4ZDhlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYwpAQCAtMzU0LDg4ICszNTQsNiBAQAogCS5yZW1vdmUgPSBtcGM1Mnh4X2dwaW9jaGlwX3JlbW92ZSwKIH07CiAKLS8qCi0gKiBHUElPIExJQiBBUEkgaW1wbGVtZW50YXRpb24gZm9yIGdwdCBHUElPcy4KLSAqCi0gKiBFYWNoIGdwdCBvbmx5IGhhcyBhIHNpbmdsZSBHUElPLgotICovCi1zdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IG1wYzUyeHhfZ3B0IF9faW9tZW0gKnJlZ3MgPSBtbV9nYy0+cmVnczsKLQotCXJldHVybiAoaW5fYmUzMigmcmVncy0+c3RhdHVzKSAmICgxIDw8ICgzMSAtIDIzKSkpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tcGM1Mnh4X2dwdF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7Ci0KLQlpZiAodmFsKQotCQlvdXRfYmUzMigmcmVncy0+bW9kZSwgMHgzNCk7Ci0JZWxzZQotCQlvdXRfYmUzMigmcmVncy0+bW9kZSwgMHgyNCk7Ci0KLQlwcl9kZWJ1ZygiJXM6IGdwaW86ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBncGlvLCB2YWwpOwotfQotCi1zdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IG1wYzUyeHhfZ3B0IF9faW9tZW0gKnJlZ3MgPSBtbV9nYy0+cmVnczsKLQotCW91dF9iZTMyKCZyZWdzLT5tb2RlLCAweDA0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X2dwdF9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQotewotCW1wYzUyeHhfZ3B0X2dwaW9fc2V0KGdjLCBncGlvLCB2YWwpOwotCXByX2RlYnVnKCIlczogZ3BpbzogJWQgdmFsOiAlZFxuIiwgX19mdW5jX18sIGdwaW8sIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tY2hpcDsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpjaGlwOwotCi0JbW1jaGlwID0ga3phbGxvYyhzaXplb2YoKm1tY2hpcCksIEdGUF9LRVJORUwpOwotCWlmICghbW1jaGlwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNoaXAgPSAmbW1jaGlwLT5vZl9nYzsKLQotCWNoaXAtPmdwaW9fY2VsbHMgICAgICAgICAgPSAyOwotCWNoaXAtPmdjLm5ncGlvICAgICAgICAgICAgPSAxOwotCWNoaXAtPmdjLmRpcmVjdGlvbl9pbnB1dCAgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbjsKLQljaGlwLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0OwotCWNoaXAtPmdjLmdldCAgICAgICAgICAgICAgPSBtcGM1Mnh4X2dwdF9ncGlvX2dldDsKLQljaGlwLT5nYy5zZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF9ncHRfZ3Bpb19zZXQ7Ci0KLQlyZXR1cm4gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG9mZGV2LT5ub2RlLCBtbWNoaXApOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9tYXRjaFtdID0gewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iLAotCX0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfZ3B0X2dwaW9jaGlwX2RyaXZlciA9IHsKLQkubmFtZSA9ICJncGlvX2dwdCIsCi0JLm1hdGNoX3RhYmxlID0gbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfbWF0Y2gsCi0JLnByb2JlID0gbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfcHJvYmUsCi0JLnJlbW92ZSA9IG1wYzUyeHhfZ3Bpb2NoaXBfcmVtb3ZlLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9ncGlvX2luaXQodm9pZCkKIHsKIAlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3drdXBfZ3Bpb2NoaXBfZHJpdmVyKSkKQEAgLTQ0NCw5ICszNjIsNiBAQAogCWlmIChvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfc2ltcGxlX2dwaW9jaGlwX2RyaXZlcikpCiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIHNpbXBsZSBHUElPIGRyaXZlclxuIik7CiAKLQlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X2dwdF9ncGlvY2hpcF9kcml2ZXIpKQotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBncHQgR1BJTyBkcml2ZXJcbiIpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiY2Q0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogTVBDNTIwMCBHZW5lcmFsIFB1cnBvc2UgVGltZXIgZGV2aWNlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBhIGRyaXZlciBmb3IgdGhlIHRoZSBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKGdwdCkgZGV2aWNlcworICogZm91bmQgb24gdGhlIE1QQzUyMDAgU29DLiAgRWFjaCB0aW1lciBoYXMgYW4gSU8gcGluIHdoaWNoIGNhbiBiZSB1c2VkCisgKiBmb3IgR1BJTyBvciBjYW4gYmUgdXNlZCB0byByYWlzZSBpbnRlcnJ1cHRzLiAgVGhlIHRpbWVyIGZ1bmN0aW9uIGNhbgorICogYmUgdXNlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIElPIHBpbiwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbAorICogb3V0cHV0IHNpZ25hbHMgb3IgbWVhc3VyZSBpbnB1dCBzaWduYWxzLgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHUElPIGFuZCBJUlEgY29udHJvbGxlciBmdW5jdGlvbnMgb2YgdGhlIEdQVAorICogZGV2aWNlLiAgVGltZXIgZnVuY3Rpb25zIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgbm9yIGlzIHRoZSB3YXRjaGRvZworICogdGltZXIuCisgKgorICogVG8gdXNlIHRoZSBHUElPIGZ1bmN0aW9uLCB0aGUgZm9sbG93aW5nIHR3byBwcm9wZXJ0aWVzIG11c3QgYmUgYWRkZWQKKyAqIHRvIHRoZSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgZ3B0IGRldmljZSAodHlwaWNhbGx5IGluIHRoZSAuZHRzIGZpbGUKKyAqIGZvciB0aGUgYm9hcmQpOgorICogCWdwaW8tY29udHJvbGxlcjsKKyAqIAkjZ3Bpby1jZWxscyA9IDwgMiA+OworICogVGhpcyBkcml2ZXIgd2lsbCByZWdpc3RlciB0aGUgR1BJTyBwaW4gaWYgaXQgZmluZHMgdGhlIGdwaW8tY29udHJvbGxlcgorICogcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgorICoKKyAqIFRvIHVzZSB0aGUgSVJRIGNvbnRyb2xsZXIgZnVuY3Rpb24sIHRoZSBmb2xsb3dpbmcgdHdvIHByb3BlcnRpZXMgbXVzdAorICogYmUgYWRkZWQgdG8gdGhlIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBncHQgZGV2aWNlOgorICogCWludGVycnVwdC1jb250cm9sbGVyOworICogCSNpbnRlcnJ1cHQtY2VsbHMgPSA8IDEgPjsKKyAqIFRoZSBJUlEgY29udHJvbGxlciBiaW5kaW5nIG9ubHkgdXNlcyBvbmUgY2VsbCB0byBzcGVjaWZ5IHRoZSBpbnRlcnJ1cHQsCisgKiBhbmQgdGhlIElSUSBmbGFncyBhcmUgZW5jb2RlZCBpbiB0aGUgY2VsbC4gIEEgY2VsbCBpcyBub3QgdXNlZCB0byBlbmNvZGUKKyAqIHRoZSBJUlEgbnVtYmVyIGJlY2F1c2UgdGhlIEdQVCBvbmx5IGhhcyBhIHNpbmdsZSBJUlEgc291cmNlLiAgRm9yIGZsYWdzLAorICogYSB2YWx1ZSBvZiAnMScgbWVhbnMgcmlzaW5nIGVkZ2Ugc2Vuc2l0aXZlIGFuZCAnMicgbWVhbnMgZmFsbGluZyBlZGdlLgorICoKKyAqIFRoZSBHUElPIGFuZCB0aGUgSVJRIGNvbnRyb2xsZXIgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUsCisgKiBidXQgaW4gdGhpcyB1c2UgY2FzZSB0aGUgSU8gbGluZSB3aWxsIG9ubHkgd29yayBhcyBhbiBpbnB1dC4gIFRyeWluZyB0bworICogdXNlIGl0IGFzIGEgR1BJTyBvdXRwdXQgd2lsbCBub3Qgd29yay4KKyAqCisgKiBXaGVuIHVzaW5nIHRoZSBHUElPIGxpbmUgYXMgYW4gb3V0cHV0LCBpdCBjYW4gZWl0aGVyIGJlIGRyaXZlbiBhcyBub3JtYWwKKyAqIElPLCBvciBpdCBjYW4gYmUgYW4gT3BlbiBDb2xsZWN0b3IgKE9DKSBvdXRwdXQuICBBdCB0aGUgbW9tZW50IGl0IGlzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgZWl0aGVyIHRoZSBib290bG9hZGVyIG9yIHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlIHRvIHNldAorICogdGhlIG91dHB1dCBtb2RlLiAgVGhpcyBkcml2ZXIgZG9lcyBub3QgY2hhbmdlIHRoZSBvdXRwdXQgbW9kZSBzZXR0aW5nLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTVBDNTJ4eCBncHQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIEdyYW50IExpa2VseSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKioKKyAqIHN0cnVjdCBtcGM1Mnh4X2dwdCAtIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIE1QQzUyeHggR1BUIGRyaXZlcgorICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcmVnczogdmlydHVhbCBhZGRyZXNzIG9mIEdQVCByZWdpc3RlcnMKKyAqIEBsb2NrOiBzcGlubG9jayB0byBjb29yZGluYXRlIGJldHdlZW4gZGlmZmVyZW50IGZ1bmN0aW9ucy4KKyAqIEBvZl9nYzogb2ZfZ3Bpb19jaGlwIGluc3RhbmNlIHN0cnVjdHVyZTsgdXNlZCB3aGVuIEdQSU8gaXMgZW5hYmxlZAorICogQGlycWhvc3Q6IFBvaW50ZXIgdG8gaXJxX2hvc3QgaW5zdGFuY2U7IHVzZWQgd2hlbiBJUlEgbW9kZSBpcyBzdXBwb3J0ZWQKKyAqLworc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVnczsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGlycV9ob3N0ICppcnFob3N0OworCisjaWYgZGVmaW5lZChDT05GSUdfR1BJT0xJQikKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwIG9mX2djOworI2VuZGlmCit9OworCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfTUFTSwkoMHgwNykKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19JQwkJKDB4MDEpCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfT0MJCSgweDAyKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX1BXTQkJKDB4MDMpCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfR1BJTwkoMHgwNCkKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fTUFTSwkoMHgzMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX09VVF9MT1cJKDB4MjApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfR1BJT19PVVRfSElHSAkoMHgzMCkKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTgkJKDB4MDEwMCkKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9NQVNLCSgweDAzMDAwMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfUklTSU5HCSgweDAxMDAwMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfRkFMTElORwkoMHgwMjAwMDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX1RPR0dMRQkoMHgwMzAwMDApCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfU1RBVFVTX0lSUU1BU0sJKDB4MDAwZikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDYXNjYWRlZCBpbnRlcnJ1cHQgY29udHJvbGxlciBob29rcworICovCisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJc2V0Yml0czMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfSVJRX0VOKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXBjNTJ4eF9ncHRfaXJxX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJY2xyYml0czMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfSVJRX0VOKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXBjNTJ4eF9ncHRfaXJxX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisKKwlvdXRfYmUzMigmZ3B0LT5yZWdzLT5zdGF0dXMsIE1QQzUyeHhfR1BUX1NUQVRVU19JUlFNQVNLKTsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogdmlycT0laSB0eXBlPSV4XG4iLCBfX2Z1bmNfXywgdmlycSwgZmxvd190eXBlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwlyZWcgPSBpbl9iZTMyKCZncHQtPnJlZ3MtPm1vZGUpICYgfk1QQzUyeHhfR1BUX01PREVfSUNUX01BU0s7CisJaWYgKGZsb3dfdHlwZSAmIElSUUZfVFJJR0dFUl9SSVNJTkcpCisJCXJlZyB8PSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9SSVNJTkc7CisJaWYgKGZsb3dfdHlwZSAmIElSUUZfVFJJR0dFUl9GQUxMSU5HKQorCQlyZWcgfD0gTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfRkFMTElORzsKKwlvdXRfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBjNTJ4eF9ncHRfaXJxX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIk1QQzUyeHggR1BUIiwKKwkudW5tYXNrID0gbXBjNTJ4eF9ncHRfaXJxX3VubWFzaywKKwkubWFzayA9IG1wYzUyeHhfZ3B0X2lycV9tYXNrLAorCS5hY2sgPSBtcGM1Mnh4X2dwdF9pcnFfYWNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfZ3B0X2lycV9zZXRfdHlwZSwKK307CisKK3ZvaWQgbXBjNTJ4eF9ncHRfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9kYXRhKHZpcnEpOworCWludCBzdWJfdmlycTsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gaW5fYmUzMigmZ3B0LT5yZWdzLT5zdGF0dXMpICYgTVBDNTJ4eF9HUFRfU1RBVFVTX0lSUU1BU0s7CisJaWYgKHN0YXR1cykgeworCQlzdWJfdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKGdwdC0+aXJxaG9zdCwgMCk7CisJCWdlbmVyaWNfaGFuZGxlX2lycShzdWJfdmlycSk7CisJfQorfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2lycV9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaHcpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGgtPmhvc3RfZGF0YTsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogaD0lcCwgdmlycT0laVxuIiwgX19mdW5jX18sIGgsIHZpcnEpOworCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIGdwdCk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtcGM1Mnh4X2dwdF9pcnFfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2lycV94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkJIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkJIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLAorCQkJCSB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gaC0+aG9zdF9kYXRhOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzOiBmbGFncz0laVxuIiwgX19mdW5jX18sIGludHNwZWNbMF0pOworCisJaWYgKChpbnRzaXplIDwgMSkgfHwgKGludHNwZWNbMF0gPCAxKSB8fCAoaW50c3BlY1swXSA+IDMpKSB7CisJCWRldl9lcnIoZ3B0LT5kZXYsICJiYWQgaXJxIHNwZWNpZmllciBpbiAlc1xuIiwgY3QtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpvdXRfaHdpcnEgPSAwOyAvKiBUaGUgR1BUIG9ubHkgaGFzIDEgSVJRIGxpbmUgKi8KKwkqb3V0X2ZsYWdzID0gaW50c3BlY1swXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBtcGM1Mnh4X2dwdF9pcnFfb3BzID0geworCS5tYXAgPSBtcGM1Mnh4X2dwdF9pcnFfbWFwLAorCS54bGF0ZSA9IG1wYzUyeHhfZ3B0X2lycV94bGF0ZSwKK307CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9pcnFfc2V0dXAoc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWludCBjYXNjYWRlX3ZpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE9ubHkgc2V0dXAgY2FzY2FkZWQgSVJRIGlmIGRldmljZSB0cmVlIGNsYWltcyB0aGUgR1BUIGlzCisJICogYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkobm9kZSwgImludGVycnVwdC1jb250cm9sbGVyIiwgTlVMTCkpCisJCXJldHVybjsKKworCWNhc2NhZGVfdmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOworCisJZ3B0LT5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3Qobm9kZSwgSVJRX0hPU1RfTUFQX0xJTkVBUiwgMSwKKwkJCQkgICAgICAmbXBjNTJ4eF9ncHRfaXJxX29wcywgLTEpOworCWlmICghZ3B0LT5pcnFob3N0KSB7CisJCWRldl9lcnIoZ3B0LT5kZXYsICJpcnFfYWxsb2NfaG9zdCgpIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlncHQtPmlycWhvc3QtPmhvc3RfZGF0YSA9IGdwdDsKKworCXNldF9pcnFfZGF0YShjYXNjYWRlX3ZpcnEsIGdwdCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV92aXJxLCBtcGM1Mnh4X2dwdF9pcnFfY2FzY2FkZSk7CisKKwkvKiBTZXQgdG8gSW5wdXQgQ2FwdHVyZSBtb2RlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCWNscnNldGJpdHNfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX01TX01BU0ssCisJCQlNUEM1Mnh4X0dQVF9NT0RFX01TX0lDKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlcygpIGNvbXBsZXRlLiB2aXJxPSVpXG4iLCBfX2Z1bmNfXywgY2FzY2FkZV92aXJxKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdQSU9MSUIgaG9va3MKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpnY190b19tcGM1Mnh4X2dwdChzdHJ1Y3QgZ3Bpb19jaGlwICpnYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRvX29mX2dwaW9fY2hpcChnYyksIHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2LG9mX2djKTsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdjX3RvX21wYzUyeHhfZ3B0KGdjKTsKKworCXJldHVybiAoaW5fYmUzMigmZ3B0LT5yZWdzLT5zdGF0dXMpID4+IDgpICYgMTsKK30KKworc3RhdGljIHZvaWQKK21wYzUyeHhfZ3B0X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHYpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdjX3RvX21wYzUyeHhfZ3B0KGdjKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzOiBncGlvOiVkIHY6JWRcbiIsIF9fZnVuY19fLCBncGlvLCB2KTsKKwlyID0gdiA/IE1QQzUyeHhfR1BUX01PREVfR1BJT19PVVRfSElHSCA6IE1QQzUyeHhfR1BUX01PREVfR1BJT19PVVRfTE9XOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCWNscnNldGJpdHNfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fTUFTSywgcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnY190b19tcGM1Mnh4X2dwdChnYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogZ3BpbzolZFxuIiwgX19mdW5jX18sIGdwaW8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCWNscmJpdHMzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwltcGM1Mnh4X2dwdF9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK21wYzUyeHhfZ3B0X2dwaW9fc2V0dXAoc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWludCByYzsKKworCS8qIE9ubHkgc2V0dXAgR1BJTyBpZiB0aGUgZGV2aWNlIHRyZWUgY2xhaW1zIHRoZSBHUFQgaXMKKwkgKiBhIEdQSU8gY29udHJvbGxlciAqLworCWlmICghb2ZfZmluZF9wcm9wZXJ0eShub2RlLCAiZ3Bpby1jb250cm9sbGVyIiwgTlVMTCkpCisJCXJldHVybjsKKworCWdwdC0+b2ZfZ2MuZ2MubGFiZWwgPSBrc3RyZHVwKG5vZGUtPmZ1bGxfbmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFncHQtPm9mX2djLmdjLmxhYmVsKSB7CisJCWRldl9lcnIoZ3B0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwdC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7CisJZ3B0LT5vZl9nYy5nYy5uZ3BpbyA9IDE7CisJZ3B0LT5vZl9nYy5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW47CisJZ3B0LT5vZl9nYy5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0OworCWdwdC0+b2ZfZ2MuZ2MuZ2V0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19nZXQ7CisJZ3B0LT5vZl9nYy5nYy5zZXQgPSBtcGM1Mnh4X2dwdF9ncGlvX3NldDsKKwlncHQtPm9mX2djLmdjLmJhc2UgPSAtMTsKKwlncHQtPm9mX2djLnhsYXRlID0gb2ZfZ3Bpb19zaW1wbGVfeGxhdGU7CisJbm9kZS0+ZGF0YSA9ICZncHQtPm9mX2djOworCW9mX25vZGVfZ2V0KG5vZGUpOworCisJLyogU2V0dXAgZXh0ZXJuYWwgcGluIGluIEdQSU8gbW9kZSAqLworCWNscnNldGJpdHNfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX01TX01BU0ssCisJCQlNUEM1Mnh4X0dQVF9NT0RFX01TX0dQSU8pOworCisJcmMgPSBncGlvY2hpcF9hZGQoJmdwdC0+b2ZfZ2MuZ2MpOworCWlmIChyYykKKwkJZGV2X2VycihncHQtPmRldiwgImdwaW9jaGlwX2FkZCgpIGZhaWxlZDsgcmM9JWlcbiIsIHJjKTsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlcygpIGNvbXBsZXRlLlxuIiwgX19mdW5jX18pOworfQorI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfR1BJT0xJQikgKi8KK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9ncGlvX3NldHVwKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKSB7IH0KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19HUElPTElCKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG9mX3BsYXRmb3JtIGJ1cyBiaW5kaW5nIGNvZGUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9ncHRfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQ7CisKKwlncHQgPSBremFsbG9jKHNpemVvZiAqZ3B0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdwdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmZ3B0LT5sb2NrKTsKKwlncHQtPmRldiA9ICZvZmRldi0+ZGV2OworCWdwdC0+cmVncyA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwlpZiAoIWdwdC0+cmVncykgeworCQlrZnJlZShncHQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIGdwdCk7CisKKwltcGM1Mnh4X2dwdF9ncGlvX3NldHVwKGdwdCwgb2ZkZXYtPm5vZGUpOworCW1wYzUyeHhfZ3B0X2lycV9zZXR1cChncHQsIG9mZGV2LT5ub2RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2dwdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IiwgfSwKKworCS8qIERlcHJlY2lhdGVkIGNvbXBhdGlibGUgdmFsdWVzOyBkb24ndCB1c2UgZm9yIG5ldyBkdHMgZmlsZXMgKi8KKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdC1ncGlvIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZ3B0IiwgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9ncHRfZHJpdmVyID0geworCS5uYW1lID0gIm1wYzUyeHgtZ3B0IiwKKwkubWF0Y2hfdGFibGUgPSBtcGM1Mnh4X2dwdF9tYXRjaCwKKwkucHJvYmUgPSBtcGM1Mnh4X2dwdF9wcm9iZSwKKwkucmVtb3ZlID0gbXBjNTJ4eF9ncHRfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9ncHRfaW5pdCh2b2lkKQoreworCWlmIChvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfZ3B0X2RyaXZlcikpCisJCXByX2VycigiZXJyb3IgcmVnaXN0ZXJpbmcgTVBDNTJ4eCBHUFQgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorCisvKiBNYWtlIHN1cmUgR1BJT3MgYW5kIElSUXMgZ2V0IHNldCB1cCBiZWZvcmUgYW55b25lIHRyaWVzIHRvIHVzZSB0aGVtICovCitzdWJzeXNfaW5pdGNhbGwobXBjNTJ4eF9ncHRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCmluZGV4IDBhMDkzZjAuLjQ4MGY4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCkBAIC0xNjMsOCArMTYzLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZpbnRyLT5jdHJsLCAxMSAtIGwyaXJxKTsKIH0KIApAQCAtMTc2LDggKzE3NCw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmaW50ci0+Y3RybCwgMTEgLSBsMmlycSk7CiB9CiAKQEAgLTE4OSwxNyArMTg1LDE1IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmaW50ci0+Y3RybCwgMjctbDJpcnEpOwogfQogCiBzdGF0aWMgaW50IG1wYzUyeHhfZXh0aXJxX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKIAl1MzIgY3RybF9yZWcsIHR5cGU7CiAJaW50IGlycTsKIAlpbnQgbDJpcnE7CisJdm9pZCAqaGFuZGxlciA9IGhhbmRsZV9sZXZlbF9pcnE7CiAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKQEAgLTIwNywzMiArMjAxLDIxIEBACiAJcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkIGZsb3dfdHlwZT0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEsIGZsb3dfdHlwZSk7CiAKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewotCWNhc2UgSVJRRl9UUklHR0VSX0hJR0g6Ci0JCXR5cGUgPSAwOwotCQlicmVhazsKLQljYXNlIElSUUZfVFJJR0dFUl9SSVNJTkc6Ci0JCXR5cGUgPSAxOwotCQlicmVhazsKLQljYXNlIElSUUZfVFJJR0dFUl9GQUxMSU5HOgotCQl0eXBlID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfTE9XOgotCQl0eXBlID0gMzsKLQkJYnJlYWs7CisJY2FzZSBJUlFGX1RSSUdHRVJfSElHSDogdHlwZSA9IDA7IGJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX1JJU0lORzogdHlwZSA9IDE7IGhhbmRsZXIgPSBoYW5kbGVfZWRnZV9pcnE7IGJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0ZBTExJTkc6IHR5cGUgPSAyOyBoYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOyBicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9MT1c6IHR5cGUgPSAzOyBicmVhazsKIAlkZWZhdWx0OgogCQl0eXBlID0gMDsKIAl9CiAKLQlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKLQlkZXNjLT5zdGF0dXMgfD0gZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKLQlpZiAoZmxvd190eXBlICYgKElSUV9UWVBFX0xFVkVMX0hJR0ggfCBJUlFfVFlQRV9MRVZFTF9MT1cpKQotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCiAJY3RybF9yZWcgPSBpbl9iZTMyKCZpbnRyLT5jdHJsKTsKIAljdHJsX3JlZyAmPSB+KDB4MyA8PCAoMjIgLSAobDJpcnEgKiAyKSkpOwogCWN0cmxfcmVnIHw9ICh0eXBlIDw8ICgyMiAtIChsMmlycSAqIDIpKSk7CiAJb3V0X2JlMzIoJmludHItPmN0cmwsIGN0cmxfcmVnKTsKIAorCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKHZpcnEsIGhhbmRsZXIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0Nyw2ICsyMzAsMTEgQEAKIC8qCiAgKiBNYWluIGludGVycnVwdCBpcnFfY2hpcAogICovCitzdGF0aWMgaW50IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3sKKwlyZXR1cm4gMDsgLyogRG8gbm90aGluZyBzbyB0aGF0IHRoZSBzZW5zZSBtYXNrIHdpbGwgZ2V0IHVwZGF0ZWQgKi8KK30KKwogc3RhdGljIHZvaWQgbXBjNTJ4eF9tYWluX21hc2sodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJaW50IGlycTsKQEAgLTI1NSw4ICsyNDMsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPm1haW5fbWFzaywgMTYgLSBsMmlycSk7CiB9CiAKQEAgLTI2OCw4ICsyNTQsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9jbHJiaXQoJmludHItPm1haW5fbWFzaywgMTYgLSBsMmlycSk7CiB9CiAKQEAgLTI3OCw2ICsyNjIsNyBAQAogCS5tYXNrID0gbXBjNTJ4eF9tYWluX21hc2ssCiAJLm1hc2tfYWNrID0gbXBjNTJ4eF9tYWluX21hc2ssCiAJLnVubWFzayA9IG1wYzUyeHhfbWFpbl91bm1hc2ssCisJLnNldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAogfTsKIAogLyoKQEAgLTI5MSw4ICsyNzYsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIApAQCAtMzA0LDggKzI4Nyw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX2NscmJpdCgmaW50ci0+cGVyX21hc2ssIDMxIC0gbDJpcnEpOwogfQogCkBAIC0zMTQsNiArMjk1LDcgQEAKIAkubWFzayA9IG1wYzUyeHhfcGVyaXBoX21hc2ssCiAJLm1hc2tfYWNrID0gbXBjNTJ4eF9wZXJpcGhfbWFzaywKIAkudW5tYXNrID0gbXBjNTJ4eF9wZXJpcGhfdW5tYXNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qCkBAIC0zMjcsOCArMzA5LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZzZG1hLT5JbnRNYXNrLCBsMmlycSk7CiB9CiAKQEAgLTM0MCw4ICszMjAsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9jbHJiaXQoJnNkbWEtPkludE1hc2ssIGwyaXJxKTsKIH0KIApAQCAtMzUzLDggKzMzMSw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCW91dF9iZTMyKCZzZG1hLT5JbnRQZW5kLCAxIDw8IGwyaXJxKTsKIH0KIApAQCAtMzYzLDkgKzMzOSwxOSBAQAogCS5tYXNrID0gbXBjNTJ4eF9zZG1hX21hc2ssCiAJLnVubWFzayA9IG1wYzUyeHhfc2RtYV91bm1hc2ssCiAJLmFjayA9IG1wYzUyeHhfc2RtYV9hY2ssCisJLnNldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAogfTsKIAogLyoqCisgKiBtcGM1Mnh4X2lzX2V4dGlycSAtIFJldHVybnMgdHJ1ZSBpZiBod2lycSBudW1iZXIgaXMgZm9yIGFuIGV4dGVybmFsIElSUQorICovCitzdGF0aWMgaW50IG1wYzUyeHhfaXNfZXh0aXJxKGludCBsMSwgaW50IGwyKQoreworCXJldHVybiAoKGwxID09IDApICYmIChsMiA9PSAwKSkgfHwKKwkgICAgICAgKChsMSA9PSAxKSAmJiAobDIgPj0gMSkgJiYgKGwyIDw9IDMpKTsKK30KKworLyoqCiAgKiBtcGM1Mnh4X2lycWhvc3RfeGxhdGUgLSB0cmFuc2xhdGUgdmlycSMgZnJvbSBkZXZpY2UgdHJlZSBpbnRlcnJ1cHRzIHByb3BlcnR5CiAgKi8KIHN0YXRpYyBpbnQgbXBjNTJ4eF9pcnFob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKQEAgLTM4MywzOCArMzY5LDIzIEBACiAKIAlpbnRydmVjdF9sMSA9IChpbnQpaW50c3BlY1swXTsKIAlpbnRydmVjdF9sMiA9IChpbnQpaW50c3BlY1sxXTsKLQlpbnRydmVjdF90eXBlID0gKGludClpbnRzcGVjWzJdOworCWludHJ2ZWN0X3R5cGUgPSAoaW50KWludHNwZWNbMl0gJiAweDM7CiAKIAlpbnRydmVjdF9saW51eCA9IChpbnRydmVjdF9sMSA8PCBNUEM1Mnh4X0lSUV9MMV9PRkZTRVQpICYKIAkJCSBNUEM1Mnh4X0lSUV9MMV9NQVNLOwogCWludHJ2ZWN0X2xpbnV4IHw9IGludHJ2ZWN0X2wyICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAorCSpvdXRfaHdpcnEgPSBpbnRydmVjdF9saW51eDsKKwkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCWlmIChtcGM1Mnh4X2lzX2V4dGlycShpbnRydmVjdF9sMSwgaW50cnZlY3RfbDIpKQorCQkqb3V0X2ZsYWdzID0gbXBjNTJ4eF9tYXBfc2Vuc2VzW2ludHJ2ZWN0X3R5cGVdOworCiAJcHJfZGVidWcoInJldHVybiAleCwgbDE9JWQsIGwyPSVkXG4iLCBpbnRydmVjdF9saW51eCwgaW50cnZlY3RfbDEsCiAJCSBpbnRydmVjdF9sMik7Ci0KLQkqb3V0X2h3aXJxID0gaW50cnZlY3RfbGludXg7Ci0JKm91dF9mbGFncyA9IG1wYzUyeHhfbWFwX3NlbnNlc1tpbnRydmVjdF90eXBlXTsKLQogCXJldHVybiAwOwogfQogCiAvKioKLSAqIG1wYzUyeHhfaXJxeF9nZXR0eXBlIC0gZGV0ZXJtaW5lIHRoZSBJUlEgc2Vuc2UgdHlwZSAobGV2ZWwvZWRnZSkKLSAqCi0gKiBPbmx5IGV4dGVybmFsIElSUXMgbmVlZCB0aGlzLgotICovCi1zdGF0aWMgaW50IG1wYzUyeHhfaXJxeF9nZXR0eXBlKGludCBpcnEpCi17Ci0JaW50IHR5cGU7Ci0JdTMyIGN0cmxfcmVnOwotCi0JY3RybF9yZWcgPSBpbl9iZTMyKCZpbnRyLT5jdHJsKTsKLQl0eXBlID0gKGN0cmxfcmVnID4+ICgyMiAtIGlycSAqIDIpKSAmIDB4MzsKLQotCXJldHVybiBtcGM1Mnh4X21hcF9zZW5zZXNbdHlwZV07Ci19Ci0KLS8qKgogICogbXBjNTJ4eF9pcnFob3N0X21hcCAtIEhvb2sgdG8gbWFwIGZyb20gdmlycSB0byBhbiBpcnFfY2hpcCBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIGludCBtcGM1Mnh4X2lycWhvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCkBAIC00MjIsNjggKzM5Myw0NiBAQAogewogCWludCBsMWlycTsKIAlpbnQgbDJpcnE7Ci0Jc3RydWN0IGlycV9jaGlwICpnb29kX2lycWNoaXA7Ci0Jdm9pZCAqZ29vZF9oYW5kbGU7CisJc3RydWN0IGlycV9jaGlwICppcnFjaGlwOworCXZvaWQgKmhuZGxyOwogCWludCB0eXBlOworCXUzMiByZWc7CiAKIAlsMWlycSA9IChpcnEgJiBNUEM1Mnh4X0lSUV9MMV9NQVNLKSA+PiBNUEM1Mnh4X0lSUV9MMV9PRkZTRVQ7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCiAJLyoKLQkgKiBNb3N0IG9mIG91cnMgSVJRcyB3aWxsIGJlIGxldmVsIGxvdwotCSAqIE9ubHkgZXh0ZXJuYWwgSVJRcyBvbiBzb21lIHBsYXRmb3JtIG1heSBiZSBvdGhlcnMKKwkgKiBFeHRlcm5hbCBJUlFzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGJ5IHRoZSBoYXJkd2FyZSBzbyB0aGV5IGFyZQorCSAqIGhhbmRsZWQgYnkgYSBkZWRpY2F0ZWQgaXJxX2NoaXAgc3RydWN0dXJlLgogCSAqLwotCXR5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJaWYgKG1wYzUyeHhfaXNfZXh0aXJxKGwxaXJxLCBsMmlycSkpIHsKKwkJcmVnID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJCXR5cGUgPSBtcGM1Mnh4X21hcF9zZW5zZXNbKHJlZyA+PiAoMjIgLSBsMmlycSAqIDIpKSAmIDB4M107CisJCWlmICgodHlwZSA9PSBJUlFfVFlQRV9FREdFX0ZBTExJTkcpIHx8CisJCSAgICAodHlwZSA9PSBJUlFfVFlQRV9FREdFX1JJU0lORykpCisJCQlobmRsciA9IGhhbmRsZV9lZGdlX2lycTsKKwkJZWxzZQorCQkJaG5kbHIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbXBjNTJ4eF9leHRpcnFfaXJxY2hpcCwgaG5kbHIpOworCQlwcl9kZWJ1ZygiJXM6IEV4dGVybmFsIElSUSVpIHZpcnE9JXgsIGh3PSV4LiB0eXBlPSV4XG4iLAorCQkJIF9fZnVuY19fLCBsMmlycSwgdmlycSwgKGludClpcnEsIHR5cGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJdCBpcyBhbiBpbnRlcm5hbCBTT0MgaXJxLiAgQ2hvb3NlIHRoZSBjb3JyZWN0IGlycV9jaGlwICovCiAJc3dpdGNoIChsMWlycSkgewotCWNhc2UgTVBDNTJ4eF9JUlFfTDFfQ1JJVDoKLQkJcHJfZGVidWcoIiVzOiBDcml0aWNhbC4gbDI9JXhcbiIsIF9fZnVuY19fLCBsMmlycSk7Ci0KLQkJQlVHX09OKGwyaXJxICE9IDApOwotCi0JCXR5cGUgPSBtcGM1Mnh4X2lycXhfZ2V0dHlwZShsMmlycSk7Ci0JCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X2V4dGlycV9pcnFjaGlwOwotCQlicmVhazsKLQotCWNhc2UgTVBDNTJ4eF9JUlFfTDFfTUFJTjoKLQkJcHJfZGVidWcoIiVzOiBNYWluIElSUVsxLTNdIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCi0JCWlmICgobDJpcnEgPj0gMSkgJiYgKGwyaXJxIDw9IDMpKSB7Ci0JCQl0eXBlID0gbXBjNTJ4eF9pcnF4X2dldHR5cGUobDJpcnEpOwotCQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfZXh0aXJxX2lycWNoaXA7Ci0JCX0gZWxzZSB7Ci0JCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9tYWluX2lycWNoaXA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE1QQzUyeHhfSVJRX0wxX1BFUlA6Ci0JCXByX2RlYnVnKCIlczogUGVyaXBoZXJhbHMuIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9wZXJpcGhfaXJxY2hpcDsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QQzUyeHhfSVJRX0wxX1NETUE6Ci0JCXByX2RlYnVnKCIlczogU0RNQS4gbDI9JXhcbiIsIF9fZnVuY19fLCBsMmlycSk7Ci0JCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X3NkbWFfaXJxY2hpcDsKLQkJYnJlYWs7Ci0KKwljYXNlIE1QQzUyeHhfSVJRX0wxX01BSU46IGlycWNoaXAgPSAmbXBjNTJ4eF9tYWluX2lycWNoaXA7IGJyZWFrOworCWNhc2UgTVBDNTJ4eF9JUlFfTDFfUEVSUDogaXJxY2hpcCA9ICZtcGM1Mnh4X3BlcmlwaF9pcnFjaGlwOyBicmVhazsKKwljYXNlIE1QQzUyeHhfSVJRX0wxX1NETUE6IGlycWNoaXAgPSAmbXBjNTJ4eF9zZG1hX2lycWNoaXA7IGJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2VycigiJXM6IGludmFsaWQgdmlycSByZXF1ZXN0ZWQgKDB4JXgpXG4iLCBfX2Z1bmNfXywgdmlycSk7CisJCXByX2VycigiJXM6IGludmFsaWQgaXJxOiB2aXJxPSVpLCBsMT0laSwgbDI9JWlcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmlycSwgbDFpcnEsIGwyaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKLQkJZ29vZF9oYW5kbGUgPSBoYW5kbGVfZWRnZV9pcnE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdvb2RfaGFuZGxlID0gaGFuZGxlX2xldmVsX2lycTsKLQl9Ci0KLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgZ29vZF9pcnFjaGlwLCBnb29kX2hhbmRsZSk7Ci0KLQlwcl9kZWJ1ZygiJXM6IHZpcnE9JXgsIGh3PSV4LiB0eXBlPSV4XG4iLCBfX2Z1bmNfXywgdmlycSwKLQkJIChpbnQpaXJxLCB0eXBlKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgaXJxY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJcHJfZGVidWcoIiVzOiB2aXJxPSV4LCBsMT0laSwgbDI9JWlcbiIsIF9fZnVuY19fLCB2aXJxLCBsMWlycSwgbDJpcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjIsNiArNDcxLDggQEAKIAkJcGFuaWMoX19GSUxFX18JIjogZmluZF9hbmRfbWFwIGZhaWxlZCBvbiAnbXBjNTIwMC1iZXN0Y29tbScuICIKIAkJCQkiQ2hlY2sgbm9kZSAhIik7CiAKKwlwcl9kZWJ1ZygiTVBDNTIwMCBJUlEgY29udHJvbGxlciBtYXBwZWQgdG8gMHglcFxuIiwgaW50cik7CisKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KIAlvdXRfYmUzMigmc2RtYS0+SW50UGVuZCwgMHhmZmZmZmZmZik7CS8qIDEgbWVhbnMgY2xlYXIgcGVuZGluZyAqLwogCW91dF9iZTMyKCZzZG1hLT5JbnRNYXNrLCAweGZmZmZmZmZmKTsJLyogMSBtZWFucyBkaXNhYmxlZCAqLwpAQCAtNjEzLDggKzU2NCw1IEBACiAJCX0KIAl9CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gdmlycT0lZFxuIiwgX19mdW5jX18sIGlycSwKLQkJIGlycV9saW5lYXJfcmV2bWFwKG1wYzUyeHhfaXJxaG9zdCwgaXJxKSk7Ci0KIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAobXBjNTJ4eF9pcnFob3N0LCBpcnEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwppbmRleCAzMGYwMDhiLi43YzdkZjQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIG1lbnVjb25maWcgUFBDXzgyeHgKIAlib29sICI4Mnh4LWJhc2VkIGJvYXJkcyAoUFEgSUkpIgotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHgKIAogaWYgUFBDXzgyeHgKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwppbmRleCA4M2M2NjRhLi40MzdkMjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIG1lbnVjb25maWcgUFBDXzgzeHgKIAlib29sICI4M3h4LWJhc2VkIGJvYXJkcyIKLQlkZXBlbmRzIG9uIDZ4eCAmJiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvYXNwODM0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2FzcDgzNHguYwppbmRleCBiYjMwZDY3Li5hYTBkODRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvYXNwODM0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMKQEAgLTU4LDYgKzU4LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzF4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKaW5kZXggOTFhMmM4MC4uMGI0Zjg4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpZmRlZiBDT05GSUdfUENJCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCiAJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzE0LXBjaWUiKQorCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwogI2VuZGlmCiAJbXBjODMxeF91c2JfY2ZnKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCmluZGV4IDc2MDkyZDMuLjgxZTQ0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCkBAIC00Miw2ICs0Miw3IEBACiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG1wYzgzNHhfaXR4X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHBxMnByby1sb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYwppbmRleCBmYzNmMmVkLi5kMGE2MzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCmluZGV4IDUzMGVmOTkuLjUxZGY3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCkBAIC04NCwxNCArODQsMTAgQEAKIAkJcHBjX21kLnByb2dyZXNzKCJtcGM4Mzd4X21kc19zZXR1cF9hcmNoKCkiLCAwKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikgewotCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKSB7Ci0JCQlwcl93YXJuaW5nKCIlczogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLlxuIiwKLQkJCQkgICBucC0+ZnVsbF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCiAJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7Ci0JfQorCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODMxNC1wY2llIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKICNlbmRpZgogCW1wYzgzN3htZHNfdXNiX2NmZygpOwogfQpAQCAtMTAwLDYgKzk2LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKaW5kZXggMWQwOTY1NC4uNzZmM2IzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpZmRlZiBDT05GSUdfUENJCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCiAJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzE0LXBjaWUiKQorCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwogI2VuZGlmCiAJbXBjODM3eF91c2JfY2ZnKCk7CiB9CkBAIC00Niw2ICs0OCw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3NiYzgzNHguYwppbmRleCAxNTZjNGUyLi40OTAyM2RiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMKQEAgLTg0LDYgKzg0LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYwppbmRleCBjYzk5YzI4Li4xMWUxZmFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTIxMCw3ICsyMTEsNyBAQAogCWludCByZXQgPSAwOwogCiAJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLXVzYjItZHIiKTsKLQlpZiAoIW5wKQorCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5X3R5cGUiLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCBiNzlkYzcxLi43ZjA2NmFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtNTEsNiArNTEsMTIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IERTIChNUEM4NTQ0IERTKSBib2FyZAogCitjb25maWcgU09DUkFURVMKKwlib29sICJTb2NyYXRlcyIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTb2NyYXRlcyBib2FyZC4KKwogY29uZmlnIEtTSTg1NjAKICAgICAgICAgYm9vbCAiRW1lcnNvbiBLU0k4NTYwIgogICAgICAgICBzZWxlY3QgREVGQVVMVF9VSU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCBmMDc5OGMwLi5hODU3YjM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCkBAIC0xMyw0ICsxMyw1IEBACiBvYmotJChDT05GSUdfVFFNODV4eCkJICArPSB0cW04NXh4Lm8KIG9iai0kKENPTkZJR19TQkM4NTYwKSAgICAgKz0gc2JjODU2MC5vCiBvYmotJChDT05GSUdfU0JDODU0OCkgICAgICs9IHNiYzg1NDgubworb2JqLSQoQ09ORklHX1NPQ1JBVEVTKSAgICArPSBzb2NyYXRlcy5vIHNvY3JhdGVzX2ZwZ2FfcGljLm8KIG9iai0kKENPTkZJR19LU0k4NTYwKQkgICs9IGtzaTg1NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKaW5kZXggODFjZWU3Yi4uZjRkMzZiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCkBAIC0xMDYsOCArMTA2LDYgQEAKIAljcG0yX3BpY19pbml0KG5wKTsKIAlvZl9ub2RlX3B1dChucCk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLCBjcG0yX2Nhc2NhZGUpOwotCi0Jc2V0dXBfaXJxKDAsIE5VTEwpOwogI2VuZGlmCiB9CiAKQEAgLTIyMSw2ICsyMTksNyBAQAogCXsgLnR5cGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAJeyAubmFtZSA9ICJjcG0iLCB9LAogCXsgLm5hbWUgPSAibG9jYWxidXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYwppbmRleCAxYmY1YWVmLi42M2VmY2EyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKQEAgLTkyLDYgKzkyLDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKaW5kZXggMjFmMDA5MC4uOTQzOGE4OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAl7IC5uYW1lID0gImNwbSIsIH0sCiAJeyAubmFtZSA9ICJsb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwppbmRleCBhZWI2YTViLi4wYTllNDkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwpAQCAtMzM2LDYgKzMzNiw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwppbmRleCA3MzI2ZDkwLi5kZTY2ZGU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCA2NThhMzZmLi43ZGQwMjkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMjY1LDYgKzI2NSw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC50eXBlID0gInFlIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxxZSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jCmluZGV4IDdlYzc3Y2UuLmVjZGQ4YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NDguYwpAQCAtMTU0LDYgKzE1NCw3IEBACiAJeyAubmFtZSA9ICJzb2MiLCB9LAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA0NzJmMjU0Li5jYzI3ODA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCXsgLm5hbWUgPSAiY3BtIiwgfSwKIAl7IC5uYW1lID0gImxvY2FsYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggNzlhMGRmMS4uY2MwYjBkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KIApAQCAtODAsMTAgKzgxLDggQEAKIH0KIAogc3RhdGljIHZvaWQgX19pbml0Ci1zbXBfODV4eF9zZXR1cF9jcHUoaW50IGNwdV9ucikKK3NtcF84NXh4X2Jhc2ljX3NldHVwKGludCBjcHVfbnIpCiB7Ci0JbXBpY19zZXR1cF90aGlzX2NwdSgpOwotCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgdGltZXIgaW50ZXJydXB0cyAqLwogCW10c3ByKFNQUk5fVFNSLCBUU1JfRU5XIHwgVFNSX1dJUyB8IFRTUl9ESVMgfCBUU1JfRklTKTsKIApAQCAtOTEsMTUgKzkwLDQzIEBACiAJbXRzcHIoU1BSTl9UQ1IsIFRDUl9ESUUpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQKK3NtcF84NXh4X3NldHVwX2NwdShpbnQgY3B1X25yKQoreworCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKKworCXNtcF84NXh4X2Jhc2ljX3NldHVwKGNwdV9ucik7Cit9CisKIHN0cnVjdCBzbXBfb3BzX3Qgc21wXzg1eHhfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MgPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCi0JLnByb2JlID0gc21wX21waWNfcHJvYmUsCiAJLmtpY2tfY3B1ID0gc21wXzg1eHhfa2lja19jcHUsCi0JLnNldHVwX2NwdSA9IHNtcF84NXh4X3NldHVwX2NwdSwKIH07CiAKLXZvaWQgX19pbml0Ci1tcGM4NXh4X3NtcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzbXBfZHVtbXlfcHJvYmUodm9pZCkKIHsKKwlyZXR1cm4gTlJfQ1BVUzsKK30KKwordm9pZCBfX2luaXQgbXBjODV4eF9zbXBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gTlVMTDsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm9wZW4tcGljIik7CisJaWYgKG5wKSB7CisJCXNtcF84NXh4X29wcy5wcm9iZSA9IHNtcF9tcGljX3Byb2JlOworCQlzbXBfODV4eF9vcHMuc2V0dXBfY3B1ID0gc21wXzg1eHhfc2V0dXBfY3B1OworCQlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gc21wX21waWNfbWVzc2FnZV9wYXNzOworCX0gZWxzZSB7CisJCXNtcF84NXh4X29wcy5wcm9iZSA9IHNtcF9kdW1teV9wcm9iZTsKKwkJc21wXzg1eHhfb3BzLnNldHVwX2NwdSA9IHNtcF84NXh4X2Jhc2ljX3NldHVwOworCX0KKworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EQkVMTCkpCisJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzOworCisJQlVHX09OKCFzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzKTsKKwogCXNtcF9vcHMgPSAmc21wXzg1eHhfb3BzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU4NDQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRW1jcmFmdCBTeXN0ZW1zCisgKiBTZXJnZWkgUG9zZWxlbm92IDxzcG9zZWxlbm92QGVtY3JhZnQuY29tPgorICoKKyAqIEJhc2VkIG9uIE1QQzg1NjAgQURTIGFuZCBhcmNoL3BwYyB0cW04NXh4IHBvcnRzCisgKgorICogTWFpbnRhaW5lZCBieSBLdW1hciBHYWxhIChzZWUgTUFJTlRBSU5FUlMgZm9yIGNvbnRhY3QgaW5mb3JtYXRpb24pCisgKgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGJ5CisgKiAJS3VtYXIgR2FsYSA8a3VtYXIuZ2FsYUBmcmVlc2NhbGUuY29tPgorICogICAgICBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKworI2luY2x1ZGUgInNvY3JhdGVzX2ZwZ2FfcGljLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19waWNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmICghbnApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBvcGVuLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgbWFwIG1waWMgcmVnaXN0ZXIgc3BhY2VcbiIpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsKKwl9CisKKwltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKKwkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCisJCQkwLCAyNTYsICIgT3BlblBJQyAgIik7CisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJbXBpY19pbml0KG1waWMpOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWJiLHNvY3JhdGVzLWZwZ2EtcGljIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIHNvY3JhdGVzLWZwZ2EtcGljIG5vZGVcbiIpOworCQlyZXR1cm47CisJfQorCXNvY3JhdGVzX2ZwZ2FfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNvY3JhdGVzX3NldHVwX2FyY2godm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgorCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJzb2NyYXRlc19zZXR1cF9hcmNoKCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg1NDAtcGNpIikKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworI2VuZGlmCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgc29jcmF0ZXNfb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19pbml0KHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHNvY3JhdGVzX29mX2J1c19pZHMsIE5VTEwpOworfQorCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNvY3JhdGVzX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYWJiLHNvY3JhdGVzIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9tYWNoaW5lKHNvY3JhdGVzKSB7CisJLm5hbWUJCQk9ICJTb2NyYXRlcyIsCisJLnByb2JlCQkJPSBzb2NyYXRlc19wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBzb2NyYXRlc19zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBzb2NyYXRlc19pbml0LAorCS5pbml0X0lSUQkJPSBzb2NyYXRlc19waWNfaW5pdCwKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGVkZjYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcworICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKgorICogVGhlIEZQR0Egc3VwcG9ydHMgOSBpbnRlcnJ1cHQgc291cmNlcywgd2hpY2ggY2FuIGJlIHJvdXRlZCB0byAzCisgKiBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyBvZiB0aGUgTVBJQy4gVGhlIGxpbmUgdG8gYmUgdXNlZCBjYW4gYmUKKyAqIHNwZWNpZmllZCB0aHJvdWdoIHRoZSB0aGlyZCBjZWxsIG9mIEZEVCBwcm9wZXJ0eSAgImludGVycnVwdHMiLgorICovCisKKyNkZWZpbmUgU09DUkFURVNfRlBHQV9OVU1fSVJRUwk5CisKKyNkZWZpbmUgRlBHQV9QSUNfSVJRQ0ZHCQkoMHgwKQorI2RlZmluZSBGUEdBX1BJQ19JUlFNQVNLKG4pCSgweDQgKyAweDQgKiAobikpCisKKyNkZWZpbmUgU09DUkFURVNfRlBHQV9JUlFfTUFTSwkoKDEgPDwgU09DUkFURVNfRlBHQV9OVU1fSVJRUykgLSAxKQorCitzdHJ1Y3Qgc29jcmF0ZXNfZnBnYV9pcnFfaW5mbyB7CisJdW5zaWduZWQgaW50IGlycV9saW5lOworCWludCB0eXBlOworfTsKKworLyoKKyAqIEludGVycnVwdCByb3V0aW5nIGFuZCB0eXBlIHRhYmxlCisgKgorICogSVJRX1RZUEVfTk9ORSBtZWFucyB0aGUgaW50ZXJydXB0IHR5cGUgaXMgY29uZmlndXJhYmxlLAorICogb3RoZXJ3aXNlIGl0J3MgZml4ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KKyAqLworc3RhdGljIHN0cnVjdCBzb2NyYXRlc19mcGdhX2lycV9pbmZvIGZwZ2FfaXJxc1tTT0NSQVRFU19GUEdBX05VTV9JUlFTXSA9IHsKKwlbMF0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzFdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAorCVsyXSA9IHswLCBJUlFfVFlQRV9MRVZFTF9MT1d9LAorCVszXSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbNF0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzVdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs2XSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbN10gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzhdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAorfTsKKworI2RlZmluZSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNvY3JhdGVzX2ZwZ2FfcGljX2xvY2spOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2U7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc29jcmF0ZXNfZnBnYV9pcnFzWzNdOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fYmUzMihzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoaW50IHJlZywgdWludDMyX3QgdmFsKQoreworCW91dF9iZTMyKHNvY3JhdGVzX2ZwZ2FfcGljX2lvYmFzZSArIHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc29jcmF0ZXNfZnBnYV9waWNfZ2V0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVpbnQzMl90IGNhdXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwkvKiBDaGVjayBpcnEgbGluZSByb3V0ZWQgdG8gdGhlIE1QSUMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpcnEgPT0gc29jcmF0ZXNfZnBnYV9pcnFzW2ldKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDMpCisJCXJldHVybiBOT19JUlE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCWNhdXNlID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGkpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gU09DUkFURVNfRlBHQV9OVU1fSVJRUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChjYXVzZSA+PiAoaSArIDE2KSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAoc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QsCisJCQkoaXJxX2h3X251bWJlcl90KWkpOworfQorCit2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKKworCS8qCisJICogU2VlIGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4gaW50ZXJydXB0LCBjYWxsIGdlbmVyaWMgaGFuZGxpbmcgY29kZSBpZgorCSAqIHdlIGRvLgorCSAqLworCWNhc2NhZGVfaXJxID0gc29jcmF0ZXNfZnBnYV9waWNfZ2V0X2lycShpcnEpOworCisJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworfQorCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnEsIGlycV9saW5lOworCXVpbnQzMl90IG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgaXJxX2xpbmU7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrICY9IH4oMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCW1hc2sgfD0gKDEgPDwgKGh3aXJxICsgMTYpKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayB8PSAoMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfZW9pKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgfD0gKDEgPDwgKGh3aXJxICsgMTYpKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLAorCQl1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBwb2xhcml0eTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpZiAoZnBnYV9pcnFzW2h3aXJxXS50eXBlICE9IElSUV9UWVBFX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSB7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlwb2xhcml0eSA9IDE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlwb2xhcml0eSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUUNGRyk7CisJaWYgKHBvbGFyaXR5KQorCQltYXNrIHw9ICgxIDw8IGh3aXJxKTsKKwllbHNlCisJCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFDRkcsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0geworCS50eXBlbmFtZSAgICAgICA9ICIgRlBHQS1QSUMgIiwKKwkuYWNrCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2FjaywKKwkubWFzayAgICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrLAorCS5tYXNrX2FjayAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrLAorCS51bm1hc2sgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX3VubWFzaywKKwkuZW9pCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSwKKwkuc2V0X3R5cGUJPSBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSwKK307CisKK3N0YXRpYyBpbnQgc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCS8qIEFsbCBpbnRlcnJ1cHRzIGFyZSBMRVZFTCBzZW5zaXRpdmUgKi8KKwlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZzb2NyYXRlc19mcGdhX3BpY19jaGlwLAorCQkJaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAl1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQlpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJc3RydWN0IHNvY3JhdGVzX2ZwZ2FfaXJxX2luZm8gKmZwZ2FfaXJxID0gJmZwZ2FfaXJxc1tpbnRzcGVjWzBdXTsKKworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOworCWlmICAoZnBnYV9pcnEtPnR5cGUgPT0gSVJRX1RZUEVfTk9ORSkgeworCQkvKiB0eXBlIGlzIGNvbmZpZ3VyYWJsZSAqLworCQlpZiAoaW50c3BlY1sxXSAhPSBJUlFfVFlQRV9MRVZFTF9MT1cgJiYKKwkJICAgIGludHNwZWNbMV0gIT0gSVJRX1RZUEVfTEVWRUxfSElHSCkgeworCQkJcHJfd2FybmluZygiRlBHQSBQSUM6IGludmFsaWQgaXJxIHR5cGUsICIKKwkJCQkgICAic2V0dGluZyBkZWZhdWx0IGFjdGl2ZSBsb3dcbiIpOworCQkJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKwkJfSBlbHNlIHsKKwkJCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzFdOworCQl9CisJfSBlbHNlIHsKKwkJLyogdHlwZSBpcyBmaXhlZCAqLworCQkqb3V0X2ZsYWdzID0gZnBnYV9pcnEtPnR5cGU7CisJfQorCisJLyogVXNlIHNwZWNpZmllZCBpbnRlcnJ1cHQgcm91dGluZyAqLworCWlmIChpbnRzcGVjWzJdIDw9IDIpCisJCWZwZ2FfaXJxLT5pcnFfbGluZSA9IGludHNwZWNbMl07CisJZWxzZQorCQlwcl93YXJuaW5nKCJGUEdBIFBJQzogaW52YWxpZCBpcnEgcm91dGluZ1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9vcHMgPSB7CisJLm1hcCAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfbWFwLAorCS54bGF0ZSAgPSBzb2NyYXRlc19mcGdhX3BpY19ob3N0X3hsYXRlLAorfTsKKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwkvKiBTZXR1cCBhbiBpcnFfaG9zdCBzdHJ1Y3R1cmUgKi8KKwlzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KHBpYywgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCVNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMsCSZzb2NyYXRlc19mcGdhX3BpY19ob3N0X29wcywKKwkJCVNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMpOworCWlmIChzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdCA9PSBOVUxMKSB7CisJCXByX2VycigiRlBHQSBQSUM6IFVuYWJsZSB0byBhbGxvY2F0ZSBob3N0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc29jcmF0ZXNfZnBnYV9pcnFzW2ldID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocGljLCBpKTsKKwkJaWYgKHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSA9PSBOT19JUlEpIHsKKwkJCXByX3dhcm5pbmcoIkZQR0EgUElDOiBjYW4ndCBnZXQgaXJxJWQuXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSwKKwkJCQlzb2NyYXRlc19mcGdhX3BpY19jYXNjYWRlKTsKKwl9CisKKwlzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgPSBvZl9pb21hcChwaWMsIDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKDApLAorCQkJU09DUkFURVNfRlBHQV9JUlFfTUFTSyA8PCAxNik7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSygxKSwKKwkJCVNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sgPDwgMTYpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soMiksCisJCQlTT0NSQVRFU19GUEdBX0lSUV9NQVNLIDw8IDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisKKwlwcl9pbmZvKCJGUEdBIFBJQzogU2V0dGluZyB1cCBTb2NyYXRlcyBGUEdBIFBJQ1xuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDdkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBTT0NSQVRFU19GUEdBX1BJQ19ICisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfUElDX0gKKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCAwY2NhOGY1Li5mNTU5OTE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwppbmRleCAyOTMzYThlLi41YjBhYjk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCmluZGV4IDhlNTY5MzkuLmZkYWY0ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIFBQQ184Nnh4CiBtZW51Y29uZmlnIFBQQ184Nnh4CiAJYm9vbCAiODZ4eC1iYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBGU0xfU09DCiAJc2VsZWN0IEFMVElWRUMKIAloZWxwCkBAIC0zMSw2ICszMSwyMiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQzg2MTAgSFBDRCBib2FyZC4KIAorY29uZmlnIEdFRl9QUEM5QQorCWJvb2wgIkdFIEZhbnVjIFBQQzlBIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdFIEZhbnVjJ3MgUFBDOUEuCisKK2NvbmZpZyBHRUZfU0JDMzEwCisJYm9vbCAiR0UgRmFudWMgU0JDMzEwIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdFIEZhbnVjJ3MgU0JDMzEwLgorCiBjb25maWcgR0VGX1NCQzYxMAogCWJvb2wgIkdFIEZhbnVjIFNCQzYxMCIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKQEAgLTQ4LDcgKzY0LDcgQEAKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgTVBJQwotCWRlZmF1bHQgeSBpZiBNUEM4NjQxX0hQQ04gfHwgU0JDODY0MUQgfHwgR0VGX1NCQzYxMAorCWRlZmF1bHQgeSBpZiBNUEM4NjQxX0hQQ04gfHwgU0JDODY0MUQgfHwgR0VGX1NCQzYxMCB8fCBHRUZfU0JDMzEwIHx8IEdFRl9QUEM5QQogCiBjb25maWcgTVBDODYxMAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQppbmRleCAzMWU1NDBjLi40YjBkN2IxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCkBAIC05LDMgKzksNSBAQAogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KIGdlZi1ncGlvLSQoQ09ORklHX0dQSU9MSUIpCSs9IGdlZl9ncGlvLm8KIG9iai0kKENPTkZJR19HRUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKK29iai0kKENPTkZJR19HRUZfU0JDMzEwKQkrPSBnZWZfc2JjMzEwLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKK29iai0kKENPTkZJR19HRUZfUFBDOUEpCQkrPSBnZWZfcHBjOWEubyBnZWZfcGljLm8gJChnZWYtZ3Bpby15KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwppbmRleCA4NWIyODAwLi5iMmVhODg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwpAQCAtMzcsOCArMzcsNiBAQAogI2RlZmluZSBHRUZfR1BJT19PVkVSUlVOCTB4MUMKICNkZWZpbmUgR0VGX0dQSU9fTU9ERQkJMHgyMAogCi0jZGVmaW5lIE5VTV9HUElPIDE5Ci0KIHN0YXRpYyB2b2lkIF9nZWZfZ3Bpb19zZXQodm9pZCBfX2lvbWVtICpyZWcsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKQEAgLTEwMywxMCArMTAxLDEwIEBACiBzdGF0aWMgaW50IF9faW5pdCBnZWZfZ3Bpb19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKmdlZl9ncGlvX2NoaXA7CiAKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJnZWYsc2JjNjEwLWdwaW8iKSB7Ci0JCWludCByZXR2YWw7Ci0JCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKmdlZl9ncGlvX2NoaXA7CiAKIAkJcHJfZGVidWcoIiVzOiBJbml0aWFsaXNpbmcgR0VGIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOwogCkBAIC0xMjAsNyArMTE4LDM1IEBACiAKIAkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7Ci0JCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gTlVNX0dQSU87CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gMTk7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmdldCA9IGdlZl9ncGlvX2dldDsKKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2Muc2V0ID0gZ2VmX2dwaW9fc2V0OworCisJCS8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwICovCisJCXJldHZhbCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgZ2VmX2dwaW9fY2hpcCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWtmcmVlKGdlZl9ncGlvX2NoaXApOworCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFkZCBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJfQorCX0KKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImdlZixzYmMzMTAtZ3BpbyIpIHsKKworCQlwcl9kZWJ1ZygiJXM6IEluaXRpYWxpc2luZyBHRUYgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7CisKKwkJLyogQWxsb2NhdGUgY2hpcCBzdHJ1Y3R1cmUgKi8KKwkJZ2VmX2dwaW9fY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpnZWZfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZ2VmX2dwaW9fY2hpcCkgeworCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZVxuIiwKKwkJCQlucC0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gNjsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwogCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTEwNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogR0UgRmFudWMgUFBDOUEgYm9hcmQgc3VwcG9ydAorICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBtcGM4Nnh4X2hwY24uYyAoTVBDODZ4eCBIUENOIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIE5FQyBmaXh1cCBhZGFwdGVkIGZyb20gYXJjaC9taXBzL3BjaS9maXh1cC1sbTJlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPGFzbS9tcGljLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyNpbmNsdWRlICJtcGM4Nnh4LmgiCisjaW5jbHVkZSAiZ2VmX3BpYy5oIgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IHByaW50ayhLRVJOX0VSUiAiUFBDOUE6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpwcGM5YV9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjYXNjYWRlX25vZGUgPSBOVUxMOworCisJbXBjODZ4eF9pbml0X2lycSgpOworCisJLyoKKwkgKiBUaGVyZSBpcyBhIHNpbXBsZSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgbWFpbiBGUEdBLCB0aGlzIG5lZWRzCisJICogdG8gYmUgY2FzY2FkZWQgaW50byB0aGUgTVBJQworCSAqLworCWNhc2NhZGVfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1waWMtMS4wMCIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBQQzlBOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlZ3M7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg2NDEtcGNpZSIpIHsKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworCX0KKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fSU5GTyAiR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIFBQQzlBIDZVIFZNRSBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYscHBjOWEtZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJcHBjOWFfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAocHBjOWFfcmVncyA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG1hcCBib2FyZCByZWdpc3RlcnNcbiIpOworCQlvZl9ub2RlX3B1dChyZWdzKTsKKwl9Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9wcGM5YV9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiA4KSAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgYm9hcmQgKHNvZnR3YXJlKSByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3BwYzlhX2dldF9mcGdhX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9wcGM5YV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CisKKwlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfcHBjOWFfZ2V0X3BjYl9yZXYoKSwKKwkJKCdBJyArIGdlZl9wcGM5YV9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3BwYzlhX2dldF9mcGdhX3JldigpKTsKKworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX25lY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogRG8gbm90IGRvIHRoZSBmaXh1cCBvbiBvdGhlciBwbGF0Zm9ybXMhICovCisJaWYgKCFtYWNoaW5lX2lzKGdlZl9wcGM5YSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9wcGM5YV9uZWNfZml4dXApOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEJTUCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgKiBzdXBwbGllZCBkZXZpY2UtdHJlZSwgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBhY3R1YWwKKyAqIGJvYXJkLiBJdCBpcyBleHBlY3RlZCB0aGF0aSwgaW4gdGhlIGZ1dHVyZSwgYSBrZXJuZWwgbWF5IHN1cHBvcnQgbXVsdGlwbGUKKyAqIGJvYXJkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgZ2VmX3BwYzlhX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHBwYzlhIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSBwbGF0Zm9ybSBkZXZpY2VzXG4iKTsKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9wcGM5YSwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworZGVmaW5lX21hY2hpbmUoZ2VmX3BwYzlhKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBQUEM5QSIsCisJLnByb2JlCQkJPSBnZWZfcHBjOWFfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gZ2VmX3BwYzlhX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9wcGM5YV9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvCQk9IGdlZl9wcGM5YV9zaG93X2NwdWluZm8sCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODZ4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCisjaWZkZWYgQ09ORklHX1BDSQorCS5wY2liaW9zX2ZpeHVwX2J1cwk9IGZzbF9wY2liaW9zX2ZpeHVwX2J1cywKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogR0UgRmFudWMgU0JDMzEwIGJvYXJkIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogbXBjODZ4eF9ocGNuLmMgKE1QQzg2eHggSFBDTiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcykKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBORUMgZml4dXAgYWRhcHRlZCBmcm9tIGFyY2gvbWlwcy9wY2kvZml4dXAtbG0yZS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tcGM4Nnh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorCisjaW5jbHVkZSAibXBjODZ4eC5oIgorI2luY2x1ZGUgImdlZl9waWMuaCIKKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcgKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9FUlIgIlNCQzMxMDogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCit2b2lkIF9faW9tZW0gKnNiYzMxMF9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FzY2FkZV9ub2RlID0gTlVMTDsKKworCW1wYzg2eHhfaW5pdF9pcnEoKTsKKworCS8qCisJICogVGhlcmUgaXMgYSBzaW1wbGUgaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIG1haW4gRlBHQSwgdGhpcyBuZWVkcworCSAqIHRvIGJlIGNhc2NhZGVkIGludG8gdGhlIE1QSUMKKwkgKi8KKwljYXNjYWRlX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZ2VmLGZwZ2EtcGljIik7CisJaWYgKCFjYXNjYWRlX25vZGUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0JDMzEwOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyZWdzOworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NjQxLXBjaWUiKSB7CisJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gIkdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBTQkMzMTAgNlUgVlBYIFNCQ1xuIik7CisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODZ4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwkvKiBSZW1hcCBiYXNpYyBib2FyZCByZWdpc3RlcnMgKi8KKwlyZWdzID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXJlZ3MiKTsKKwlpZiAocmVncykgeworCQlzYmMzMTBfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAoc2JjMzEwX3JlZ3MgPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBtYXAgYm9hcmQgcmVnaXN0ZXJzXG4iKTsKKwkJb2Zfbm9kZV9wdXQocmVncyk7CisJfQorfQorCisvKiBSZXR1cm4gdGhlIFBDQiByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfc2JjMzEwX2dldF9ib2FyZF9pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIHJlZyAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X3BjYl9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjMzEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDgpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBib2FyZCAoc29mdHdhcmUpIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gMTYpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBGUEdBIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2ZwZ2FfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzMxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9zYmMzMTBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiQm9hcmQgSURcdDogMHglMi4yeFxuIiwgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfaWQoKSk7CisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzMxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzMxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCS8qIERvIG5vdCBkbyB0aGUgZml4dXAgb24gb3RoZXIgcGxhdGZvcm1zISAqLworCWlmICghbWFjaGluZV9pcyhnZWZfc2JjMzEwKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUnVubmluZyBORUMgdVBENzIwMTAxIEZpeHVwXG4iKTsKKworCS8qIEVuc3VyZSBvbmx5IHBvcnRzIDEgJiAyIGFyZSBlbmFibGVkICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICZ2YWwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgKHZhbCAmIH43KSB8IDB4Mik7CisKKwkvKiBTeXN0ZW0gY2xvY2sgaXMgNDgtTUh6IE9zY2lsbGF0b3IgYW5kIEVIQ0kgRW5hYmxlZC4gKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTQsIDEgPDwgNSk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORUMsIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiwKKwlnZWZfc2JjMzEwX25lY19maXh1cCk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQlNQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN1cHBsaWVkIGRldmljZS10cmVlLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIGFjdHVhbAorICogYm9hcmQuIEl0IGlzIGV4cGVjdGVkIHRoYXRpLCBpbiB0aGUgZnV0dXJlLCBhIGtlcm5lbCBtYXkgc3VwcG9ydCBtdWx0aXBsZQorICogYm9hcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBnZWZfc2JjMzEwX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHNiYzMxMCIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBfX2luaXQgbXBjODZ4eF90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCS8qIFNldCB0aGUgdGltZSBiYXNlIHRvIHplcm8gKi8KKwltdHNwcihTUFJOX1RCV0wsIDApOworCW10c3ByKFNQUk5fVEJXVSwgMCk7CisKKwl0ZW1wID0gbWZzcHIoU1BSTl9ISUQwKTsKKwl0ZW1wIHw9IEhJRDBfVEJFTjsKKwltdHNwcihTUFJOX0hJRDAsIHRlbXApOworCWFzbSB2b2xhdGlsZSgiaXN5bmMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjMzEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjMzEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkMzMTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzMxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjMzEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmMzMTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjMzEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKaW5kZXggZDZiNzcyYi4uZWEyMzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCkBAIC0xOTQsNiArMTk0LDcgQEAKIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IGU4ZDU0YWMuLjNmNDlhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgbXBjODYxMF9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWltbXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDI3ZTBlNjguLmM0ZWM0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3NiYzg2NDFkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwppbmRleCA1ZmQ3ZWQ0Li4yODg2YTM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCAyMDBiOWNiLi5mZmEyYTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0xLDE0ICsxLDUgQEAKIG1lbnUgIlBsYXRmb3JtIHN1cHBvcnQiCiAKLWNvbmZpZyBQUENfTVVMVElQTEFURk9STQotCWJvb2wKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IDZ4eAotCWRlZmF1bHQgeQotCi1jb25maWcgQ0xBU1NJQzMyCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCi0KIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZyIKQEAgLTI4LDE1ICsxOSwyOCBAQAogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWciCitzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZyIKIAogY29uZmlnIFBQQ19OQVRJVkUKIAlib29sCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4IHx8IFBQQzY0CiAJaGVscAogCSAgU3VwcG9ydCBmb3IgcnVubmluZyBuYXRpdmVseSBvbiB0aGUgaGFyZHdhcmUsIGkuZS4gd2l0aG91dAogCSAgYSBoeXBlcnZpc29yLiBUaGlzIG9wdGlvbiBpcyBub3QgdXNlci1zZWxlY3RhYmxlIGJ1dCBzaG91bGQKIAkgIGJlIHNlbGVjdGVkIGJ5IGFsbCBwbGF0Zm9ybXMgdGhhdCBuZWVkIGl0LgogCitjb25maWcgUFBDX09GX0JPT1RfVFJBTVBPTElORQorCWJvb2wgIlN1cHBvcnQgYm9vdGluZyBmcm9tIE9wZW4gRmlybXdhcmUgb3IgeWFib290IgorCWRlcGVuZHMgb24gNnh4IHx8IFBQQzY0CisJZGVmYXVsdCB5CisJaGVscAorCSAgU3VwcG9ydCBmcm9tIGJvb3RpbmcgZnJvbSBPcGVuIEZpcm13YXJlIG9yIHlhYm9vdCB1c2luZyBhbgorCSAgT3BlbiBGaXJtd2FyZSBjbGllbnQgaW50ZXJmYWNlLiBUaGlzIGVuYWJsZXMgdGhlIGtlcm5lbCB0bworCSAgY29tbXVuaWNhdGUgd2l0aCBvcGVuIGZpcm13YXJlIHRvIHJldHJpZXZlIHN5c3RlbSBpbmZvcm1hdGlvbnMKKwkgIHN1Y2ggYXMgdGhlIGRldmljZSB0cmVlLgorCisJICBJbiBjYXNlIG9mIGRvdWJ0LCBzYXkgWQorCiBjb25maWcgVURCR19SVEFTX0NPTlNPTEUKIAlib29sICJSVEFTIGJhc2VkIGRlYnVnIGNvbnNvbGUiCiAJZGVwZW5kcyBvbiBQUENfUlRBUwpAQCAtNzAsNyArNzQsNyBAQAogCiBjb25maWcgVTNfREFSVAogCWJvb2wKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgbgogCiBjb25maWcgUFBDX1JUQVMKQEAgLTkxLDE1ICs5NSw2IEBACiAJdHJpc3RhdGUgIkZpcm13YXJlIGZsYXNoIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFJUQVNfUFJPQwogCi1jb25maWcgUFBDX1BNSQotCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQTUkiCi0JZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUKLQloZWxwCi0JICBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0bwotCSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyKS4KLQkgIEl0IGlzIHVzZWQgaW4gc29tZSBJQk0gQ2VsbCBibGFkZXMuCi0JZGVmYXVsdCBtCi0KIGNvbmZpZyBNTUlPX05WUkFNCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtMTk2LDcgKzE5MSw3IEBACiAKIGNvbmZpZyBUQVUKIAlib29sICJPbi1jaGlwIENQVSB0ZW1wZXJhdHVyZSBzZW5zb3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENMQVNTSUMzMgorCWRlcGVuZHMgb24gNnh4CiAJaGVscAogCSAgRzMgYW5kIEc0IHByb2Nlc3NvcnMgaGF2ZSBhbiBvbi1jaGlwIHRlbXBlcmF0dXJlIHNlbnNvciBjYWxsZWQgdGhlCiAJICAnVGhlcm1hbCBBc3Npc3QgVW5pdCAoVEFVKScsIHdoaWNoLCBpbiB0aGVvcnksIGNhbiBtZWFzdXJlIHRoZSBvbi1kaWUKQEAgLTI3NCw3ICsyNjksNyBAQAogCiBjb25maWcgQVhPTl9SQU0KIAl0cmlzdGF0ZSAiQXhvbiBERFIyIG1lbW9yeSBkZXZpY2UgZHJpdmVyIgotCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgQkxPQ0sKIAlkZWZhdWx0IG0KIAloZWxwCiAJICBJdCByZWdpc3RlcnMgb25lIGJsb2NrIGRldmljZSBwZXIgQXhvbidzIEREUjIgbWVtb3J5IGJhbmsgZm91bmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKaW5kZXggZTg2OGI1Yy4uOWRhNzk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKQEAgLTU3LDkgKzU3LDE3IEBACiAKIGVuZGNob2ljZQogCisjIFVudGlsIHdlIGhhdmUgYSBjaG9pY2Ugb2YgZXhjbHVzaXZlIENQVSB0eXBlcyBvbiA2NC1iaXQsIHdlIGFsd2F5cworIyB1c2UgUFBDX0JPT0szUy4gT24gMzItYml0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gNnh4IHdoaWNoIGlzCisjICJjbGFzc2ljIiBNTVUKKworY29uZmlnIFBQQ19CT09LM1MKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBQUEM2NCB8fCA2eHgKKwogY29uZmlnIFBPV0VSNF9PTkxZCiAJYm9vbCAiT3B0aW1pemUgZm9yIFBPV0VSNCIKLQlkZXBlbmRzIG9uIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgQ2F1c2UgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciBQT1dFUjQvUE9XRVI1L1BQQzk3MCBwcm9jZXNzb3JzLgpAQCAtNjgsMTYgKzc2LDE2IEBACiAKIGNvbmZpZyBQT1dFUjMKIAlib29sCi0JZGVwZW5kcyBvbiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWRlZmF1bHQgeSBpZiAhUE9XRVI0X09OTFkKIAogY29uZmlnIFBPV0VSNAotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBUVU5FX0NFTEwKIAlib29sICJPcHRpbWl6ZSBmb3IgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIgotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAloZWxwCiAJICBDYXVzZSB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBQUEUgb2YgdGhlIENlbGwgQnJvYWRiYW5kCiAJICBFbmdpbmUuIFRoaXMgd2lsbCBtYWtlIHRoZSBjb2RlIHJ1biBjb25zaWRlcmFibHkgZmFzdGVyIG9uIENlbGwKQEAgLTE0Nyw3ICsxNTUsNyBAQAogCiBjb25maWcgQUxUSVZFQwogCWJvb2wgIkFsdGlWZWMgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIENMQVNTSUMzMiB8fCBQT1dFUjQKKwlkZXBlbmRzIG9uIDZ4eCB8fCBQT1dFUjQKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQWx0aXZlYyBleHRlbnNpb25zIHRvIHRoZQogCSAgUG93ZXJQQyBwcm9jZXNzb3IuIFRoZSBrZXJuZWwgY3VycmVudGx5IHN1cHBvcnRzIHNhdmluZyBhbmQgcmVzdG9yaW5nCkBAIC0yMTAsNiArMjE4LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIVBQQ19TVERfTU1VCiAKK2NvbmZpZyBQUENfQk9PSzNFX01NVQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIEZTTF9CT09LRQorCiBjb25maWcgUFBDX01NX1NMSUNFUwogCWJvb2wKIAlkZWZhdWx0IHkgaWYgSFVHRVRMQl9QQUdFIHx8IChQUENfU1REX01NVV82NCAmJiBQUENfNjRLX1BBR0VTKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKaW5kZXggODA3OWUwYi4uZjc0MTkxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCkBAIC0xOSwzICsxOSw0IEBACiBvYmotJChDT05GSUdfUFBDX0NFTEwpCQkrPSBjZWxsLwogb2JqLSQoQ09ORklHX1BQQ19QUzMpCQkrPSBwczMvCiBvYmotJChDT05GSUdfRU1CRURERUQ2eHgpCSs9IGVtYmVkZGVkNnh4Lworb2JqLSQoQ09ORklHX0FNSUdBT05FKQkJKz0gYW1pZ2FvbmUvCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNDc2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgQU1JR0FPTkUKKwlib29sICJFeWV0ZWNoIEFtaWdhT25lL01BSSBUZXJvbiIKKwlkZXBlbmRzIG9uIDZ4eCAmJiBCUk9LRU5fT05fU01QCisJc2VsZWN0IFBQQ19JODI1OQorCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCisJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IFBDSQorCXNlbGVjdCBOT1RfQ09IRVJFTlRfQ0FDSEUKKwlzZWxlY3QgQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IFBDU1BLUl9QTEFURk9STQorCWhlbHAKKwlTZWxlY3QgQW1pZ2FPbmUgZm9yIHRoZSBmb2xsb3dpbmcgbWFjaGluZXM6CisJLSBBbWlnYU9uZSBTRS9UZXJvbiBDWCAoRzMgb25seSkKKwktIEFtaWdhT25lIFhFL1Rlcm9uIFBYCisJLSB1QTEvVGVyb24gbWluaQorCSAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CisJICA8aHR0cDovL2FtaWdhb25lLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC8+LgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4ODViMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJKz0gc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzAzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBBbWlnYU9uZSBwbGF0Zm9ybSBzZXR1cAorICoKKyAqIENvcHlyaWdodCAyMDA4IEdlcmhhcmQgUGlyY2hlciAoZ2VyaGFyZF9waXJjaGVyQGdteC5uZXQpCisgKgorICogICBCYXNlZCBvbiBvcmlnaW5hbCBhbWlnYW9uZV9zZXR1cC5jIHNvdXJjZSBjb2RlCisgKiBDb3B5cmlnaHQgMjAwMyBieSBIYW5zLUpvZXJnIEZyaWVkZW4gYW5kIFRob21hcyBGcmllZGVuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGlzYWJsZV9MMSh2b2lkKTsKKwordm9pZCBhbWlnYW9uZV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wcmludGYobSwgInZlbmRvclx0XHQ6IEV5ZXRlY2ggTHRkLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFtaWdhb25lX2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCit7CisJY29uc3QgdTMyICpjZmdfYWRkciwgKmNmZ19kYXRhOworCWludCBsZW47CisJY29uc3QgaW50ICpidXNfcmFuZ2U7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOworCisJY2ZnX2FkZHIgPSBvZl9nZXRfYWRkcmVzcyhkZXYsIDAsIE5VTEwsIE5VTEwpOworCWNmZ19kYXRhID0gb2ZfZ2V0X2FkZHJlc3MoZGV2LCAxLCBOVUxMLCBOVUxMKTsKKwlpZiAoKGNmZ19hZGRyID09IE5VTEwpIHx8IChjZmdfZGF0YSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlidXNfcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKChidXNfcmFuZ2UgPT0gTlVMTCkgfHwgKGxlbiA8IDIgKiBzaXplb2YoaW50KSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yICVzLCBhc3N1bWUiCisJCSAgICAgICAiIGJ1cyAwXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CisKKwlob3NlID0gcGNpYmlvc19hbGxvY19jb250cm9sbGVyKGRldik7CisJaWYgKGhvc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CisJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CisKKwlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgY2ZnX2FkZHJbMF0sIGNmZ19kYXRhWzBdLCAwKTsKKworCS8qIEludGVycHJldCB0aGUgInJhbmdlcyIgcHJvcGVydHkgKi8KKwkvKiBUaGlzIGFsc28gbWFwcyB0aGUgSS9PIHJlZ2lvbiBhbmQgc2V0cyBpc2FfaW8vbWVtX2Jhc2UgKi8KKwlwY2lfcHJvY2Vzc19icmlkZ2VfT0ZfcmFuZ2VzKGhvc2UsIGRldiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgYW1pZ2FvbmVfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHBoYiA9IC1FTk9ERVY7CisKKwkvKiBMb29rdXAgUENJIGhvc3QgYnJpZGdlcy4gKi8KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAibWFpLWxvZ2ljLGFydGljaWEtcyIpCisJCXBoYiA9IGFtaWdhb25lX2FkZF9icmlkZ2UobnApOworCisJQlVHX09OKHBoYiAhPSAwKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygiTGludXgvUFBDICJVVFNfUkVMRUFTRSJcbiIsIDApOworfQorCit2b2lkIF9faW5pdCBhbWlnYW9uZV9pbml0X0lSUSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljLCAqbnAgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnByb3AgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaW50X2FjayA9IDA7CisKKwkvKiBTZWFyY2ggZm9yIElTQSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8KKwlwaWMgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbnBQTlAsMDAwIik7CisJQlVHX09OKHBpYyA9PSBOVUxMKTsKKworCS8qIExvb2sgZm9yIGludGVycnVwdCBhY2tub3dsZWRnZSBhZGRyZXNzIGluIHRoZSBQQ0kgcm9vdCBub2RlLiAqLworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgInBjaSIsICJtYWktbG9naWMsYXJ0aWNpYS1zIik7CisJaWYgKG5wKSB7CisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsIE5VTEwpOworCQlpZiAocHJvcCkKKwkJCWludF9hY2sgPSBwcm9wWzBdOworCQlvZl9ub2RlX3B1dChucCk7CisJfQorCisJaWYgKGludF9hY2sgPT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGZpbmQgUENJIGludGVycnVwdCBhY2tub3dsZWRnZSIKKwkJICAgICAgICIgYWRkcmVzcywgcG9sbGluZ1xuIik7CisKKwlpODI1OV9pbml0KHBpYywgaW50X2Fjayk7CisJcHBjX21kLmdldF9pcnEgPSBpODI1OV9pcnE7CisJaXJxX3NldF9kZWZhdWx0X2hvc3QoaTgyNTlfZ2V0X2hvc3QoKSk7Cit9CisKK3ZvaWQgX19pbml0IGFtaWdhb25lX2luaXQodm9pZCkKK3sKKwlyZXF1ZXN0X3JlZ2lvbigweDAwLCAweDIwLCAiZG1hMSIpOworCXJlcXVlc3RfcmVnaW9uKDB4NDAsIDB4MjAsICJ0aW1lciIpOworCXJlcXVlc3RfcmVnaW9uKDB4ODAsIDB4MTAsICJkbWEgcGFnZSByZWciKTsKKwlyZXF1ZXN0X3JlZ2lvbigweGMwLCAweDIwLCAiZG1hMiIpOworfQorCit2b2lkIGFtaWdhb25lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBGbHVzaCBhbmQgZGlzYWJsZSBjYWNoZXMuICovCisJX19mbHVzaF9kaXNhYmxlX0wxKCk7CisKKyAgICAgICAgLyogU2V0IFNSUjAgdG8gdGhlIHJlc2V0IHZlY3RvciBhbmQgdHVybiBvbiBNU1JfSVAuICovCisJbXRzcHIoU1BSTl9TUlIwLCAweGZmZjAwMTAwKTsKKwltdHNwcihTUFJOX1NSUjEsIE1TUl9JUCk7CisKKwkvKiBEbyBhbiByZmkgdG8ganVtcCBiYWNrIHRvIGZpcm13YXJlLiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZmkiIDogOiA6ICJtZW1vcnkiKTsKKworCS8qIE5vdCByZWFjaGVkLiAqLworCXdoaWxlICgxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYW1pZ2FvbmVfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJleWV0ZWNoLGFtaWdhb25lIikpIHsKKwkJLyoKKwkJICogQ29oZXJlbnQgbWVtb3J5IGFjY2VzcyBjYXVzZSBjb21wbGV0ZSBzeXN0ZW0gbG9ja3VwISBUaHVzCisJCSAqIGRpc2FibGUgdGhpcyBDUFUgZmVhdHVyZSwgZXZlbiBpZiB0aGUgQ1BVIG5lZWRzIGl0LgorCQkgKi8KKwkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfkNQVV9GVFJfTkVFRF9DT0hFUkVOVDsKKworCQlJU0FfRE1BX1RIUkVTSE9MRCA9IDB4MDBmZmZmZmY7CisJCURNQV9NT0RFX1JFQUQgPSAweDQ0OworCQlETUFfTU9ERV9XUklURSA9IDB4NDg7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9tYWNoaW5lKGFtaWdhb25lKSB7CisJLm5hbWUJCQk9ICJBbWlnYU9uZSIsCisJLnByb2JlCQkJPSBhbWlnYW9uZV9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBhbWlnYW9uZV9zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBhbWlnYW9uZV9pbml0LAorCS5zaG93X2NwdWluZm8JCT0gYW1pZ2FvbmVfc2hvd19jcHVpbmZvLAorCS5pbml0X0lSUQkJPSBhbWlnYW9uZV9pbml0X0lSUSwKKwkucmVzdGFydAkJPSBhbWlnYW9uZV9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggNWNjMzI3OS4uNDBlMjRjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTIzLDcgKzIzLDcgQEAKIAogY29uZmlnIFBQQ19JQk1fQ0VMTF9CTEFERQogCWJvb2wgIklCTSBDZWxsIEJsYWRlIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0NFTExfTkFUSVZFCiAJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKQEAgLTMxLDcgKzMxLDcgQEAKIAogY29uZmlnIFBQQ19DRUxMRUIKIAlib29sICJUb3NoaWJhJ3MgQ2VsbCBSZWZlcmVuY2UgU2V0ICdDZWxsZWInIEFyY2hpdGVjdHVyZSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMX05BVElWRQogCXNlbGVjdCBIQVNfVFhYOV9TRVJJQUwKIAlzZWxlY3QgUFBDX1VEQkdfQkVBVApAQCAtNDAsOSArNDAsMTQgQEAKIAogY29uZmlnIFBQQ19DRUxMX1FQQUNFCiAJYm9vbCAiSUJNIENlbGwgLSBRUEFDRSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMX0NPTU1PTgogCitjb25maWcgQVhPTl9NU0kKKwlib29sCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgUENJX01TSQorCWRlZmF1bHQgeQorCiBtZW51ICJDZWxsIEJyb2FkYmFuZCBFbmdpbmUgb3B0aW9ucyIKIAlkZXBlbmRzIG9uIFBQQ19DRUxMCiAKQEAgLTk4LDcgKzEwMyw3IEBACiAKIGNvbmZpZyBQUENfSUJNX0NFTExfUE9XRVJCVVRUT04KIAl0cmlzdGF0ZSAiSUJNIENlbGwgQmxhZGUgcG93ZXIgYnV0dG9uIgotCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFICYmIFBQQ19QTUkgJiYgSU5QVVRfRVZERVYKKwlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERSAmJiBJTlBVVF9FVkRFVgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgUG93ZXJidXR0b24gb24gSUJNIENlbGwgYmxhZGVzLgpAQCAtMTE4LDkgKzEyMyw5IEBACiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCSAgSWYgeW91IGRvbid0IGhhdmUgc3VjaCBwcm9jZXNzb3IsIHNheSBOCiAKLWNvbmZpZyBDQkVfQ1BVRlJFUV9QTUkKLQl0cmlzdGF0ZSAiQ0JFIGZyZXF1ZW5jeSBzY2FsaW5nIHVzaW5nIFBNSSBpbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBDQkVfQ1BVRlJFUSAmJiBQUENfUE1JICYmIEVYUEVSSU1FTlRBTAorY29uZmlnIENCRV9DUFVGUkVRX1BNSV9FTkFCTEUKKwlib29sICJDQkUgZnJlcXVlbmN5IHNjYWxpbmcgdXNpbmcgUE1JIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzLCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFBNSSBpbnRlcmZhY2UKQEAgLTEyOCw2ICsxMzMsMjAgQEAKIAkgIHByb2Nlc3NvciB3aWxsIG5vdCBvbmx5IGJlIGFibGUgdG8gcnVuIGF0IGxvd2VyIHNwZWVkLAogCSAgYnV0IGFsc28gYXQgbG93ZXIgY29yZSB2b2x0YWdlLgogCitjb25maWcgQ0JFX0NQVUZSRVFfUE1JCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRX1BNSV9FTkFCTEUKKwlkZWZhdWx0IENCRV9DUFVGUkVRCisKK2NvbmZpZyBQUENfUE1JCisJdHJpc3RhdGUKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRX1BNSSB8fCBQUENfSUJNX0NFTExfUE9XRVJCVVRUT04KKwloZWxwCisJICBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0bworCSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyKS4KKwkgIEl0IGlzIHVzZWQgaW4gc29tZSBJQk0gQ2VsbCBibGFkZXMuCisKIGNvbmZpZyBDQkVfQ1BVRlJFUV9TUFVfR09WRVJOT1IKIAl0cmlzdGF0ZSAiQ0JFIGZyZXF1ZW5jeSBzY2FsaW5nIGJhc2VkIG9uIFNQVSB1c2FnZSIKIAlkZXBlbmRzIG9uIFNQVV9GUyAmJiBDUFVfRlJFUQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCmluZGV4IDQzZWNjYjIuLjgzZmFmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCQkJICAgJChzcHUtbWFuYWdlLXkpIFwKIAkJCQkJICAgc3B1ZnMvCiAKLW9iai0kKENPTkZJR19QQ0lfTVNJKQkJCSs9IGF4b25fbXNpLm8KK29iai0kKENPTkZJR19BWE9OX01TSSkJCQkrPSBheG9uX21zaS5vCiAKICMgcXBhY2Ugc2V0dXAKIG9iai0kKENPTkZJR19QUENfQ0VMTF9RUEFDRSkJCSs9IHFwYWNlX3NldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKaW5kZXggMDU5Y2FkNi4uNWMxMTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKQEAgLTEzMSwxMCArMTMxLDEwIEBACiB9OwogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICppb3dhX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3QgaW93YV9idXMgKmJ1czsKLQl2b2lkIF9faW9tZW0gKnJlcyA9IF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJdm9pZCBfX2lvbWVtICpyZXMgPSBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogCWludCBidXNubzsKIAogCWJ1cyA9IGlvd2FfcGNpX2ZpbmQoMCwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IGVlNTAzM2UuLjU3NDQ1MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9WCQkweDgwMDAwMDAwMDAwMDAwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX01hc2sJMHg2MDAwMDAwMDAwMDAwMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1NQRl9TCQkweDYwMDAwMDAwMDAwMDAwMDB1bAotI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX1AJCTB4NDAwMDAwMDAwMDAwMDAwMHVsCisjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9TUEZfUAkJMHgyMDAwMDAwMDAwMDAwMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X0FERFJfTWFzawkweDAwMDAwMDA3ZmZmZmYwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfUldfTWFzawkJMHgwMDAwMDAwMDAwMDAwODAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X0lPSURfTWFzawkweDAwMDAwMDAwMDAwMDA3ZmZ1bApAQCAtMjQ3LDE3ICsyNDcsMTggQEAKIAogc3RhdGljIGlycXJldHVybl90IGlvY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXQ7CisJdW5zaWduZWQgbG9uZyBzdGF0LCBzcGY7CiAJc3RydWN0IGNiZV9pb21tdSAqaW9tbXUgPSBkYXRhOwogCiAJc3RhdCA9IGluX2JlNjQoaW9tbXUtPnhsYXRlX3JlZ3MgKyBJT0NfSU9fRXhjcFN0YXQpOworCXNwZiA9IHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfU1BGX01hc2s7CiAKIAkvKiBNaWdodCB3YW50IHRvIHJhdGUgbGltaXQgaXQgKi8KIAlwcmludGsoS0VSTl9FUlIgImlvbW11OiBETUEgZXhjZXB0aW9uIDB4JTAxNmx4XG4iLCBzdGF0KTsKIAlwcmludGsoS0VSTl9FUlIgIiAgVj0lZCwgU1BGPVslYyVjXSwgUlc9JXMsIElPSUQ9MHglMDR4XG4iLAogCSAgICAgICAhIShzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1YpLAotCSAgICAgICAoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9TUEZfUykgPyAnUycgOiAnICcsCi0JICAgICAgIChzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1NQRl9QKSA/ICdQJyA6ICcgJywKKwkgICAgICAgKHNwZiA9PSBJT0NfSU9fRXhjcFN0YXRfU1BGX1MpID8gJ1MnIDogJyAnLAorCSAgICAgICAoc3BmID09IElPQ19JT19FeGNwU3RhdF9TUEZfUCkgPyAnUCcgOiAnICcsCiAJICAgICAgIChzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1JXX01hc2spID8gIlJlYWQiIDogIldyaXRlIiwKIAkgICAgICAgKHVuc2lnbmVkIGludCkoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9JT0lEX01hc2spKTsKIAlwcmludGsoS0VSTl9FUlIgIiAgcGFnZT0weCUwMTZseFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKaW5kZXggYmU4NGU2YS4uYzVjZTAyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKQEAgLTgxLDE2ICs4MSw2IEBACiB9CiBtYWNoaW5lX3N1YnN5c19pbml0Y2FsbChxcGFjZSwgcXBhY2VfcHVibGlzaF9kZXZpY2VzKTsKIAotZXh0ZXJuIGludCBxcGFjZV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIHNldCBkbWFfb3BzIGZvciBvZl9wbGF0Zm9ybSBidXMgKi8KLQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPm5hbWUKLQkJCSYmICFzdHJjbXAoZGV2LT5idXMtPm5hbWUsICJvZl9wbGF0Zm9ybSIpKQotCQlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHFwYWNlX3NldHVwX2FyY2godm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU1BVX0JBU0UKQEAgLTExNSw5ICsxMDUsNiBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKLQotCS8qIHNldCBub3RpZmllciBmdW5jdGlvbiAqLwotCXBsYXRmb3JtX25vdGlmeSA9ICZxcGFjZV9ub3RpZnk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHFwYWNlX3Byb2JlKHZvaWQpCkBAIC0xNDEsNiArMTI4LDggQEAKIAkucG93ZXJfb2ZmCQk9IHJ0YXNfcG93ZXJfb2ZmLAogCS5oYWx0CQkJPSBydGFzX2hhbHQsCiAJLmdldF9ib290X3RpbWUJCT0gcnRhc19nZXRfYm9vdF90aW1lLAorCS5nZXRfcnRjX3RpbWUJCT0gcnRhc19nZXRfcnRjX3RpbWUsCisJLnNldF9ydGNfdGltZQkJPSBydGFzX3NldF9ydGNfdGltZSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCT0gcXBhY2VfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRCQk9IGlpY19pbml0X0lSUSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggZTQ4N2FkNi4uOWFiZDIxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCWludCBuciA9IChOUl9DUFVTID4gMSkgPyBOUl9DUFVTIDogTlJfQ1BVUyArIDE7CiAKIAkvKiBHbG9iYWwgVExCSUUgYnJvYWRjYXN0IHJlcXVpcmVkIHdpdGggU1BFcy4gKi8KLQlfX2NwdXNfc2V0YWxsKCZtbS0+Y3B1X3ZtX21hc2ssIG5yKTsKKwliaXRtYXBfZmlsbChjcHVtYXNrX2JpdHMobW1fY3B1bWFzayhtbSkpLCBucik7CiB9CiAKIHZvaWQgc3B1X2Fzc29jaWF0ZV9tbShzdHJ1Y3Qgc3B1ICpzcHUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jCmluZGV4IGM4YjFjZDQuLjk1ZDhkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2ZhdWx0LmMKQEAgLTM5LDYwICszOSw1NiBAQAogCXVuc2lnbmVkIGxvbmcgaXNfd3JpdGU7CiAJaW50IHJldDsKIAotI2lmIDAKLQlpZiAoIUlTX1ZBTElEX0VBKGVhKSkgeworCWlmIChtbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0jZW5kaWYgLyogWFhYICovCi0JaWYgKG1tID09IE5VTEwpIHsKKworCWlmIChtbS0+cGdkID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAobW0tPnBnZCA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXQgPSAtRUZBVUxUOwogCXZtYSA9IGZpbmRfdm1hKG1tLCBlYSk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gYmFkX2FyZWE7Ci0JaWYgKHZtYS0+dm1fc3RhcnQgPD0gZWEpCi0JCWdvdG8gZ29vZF9hcmVhOwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pKQotCQlnb3RvIGJhZF9hcmVhOwotCWlmIChleHBhbmRfc3RhY2sodm1hLCBlYSkpCi0JCWdvdG8gYmFkX2FyZWE7Ci1nb29kX2FyZWE6CisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChlYSA8IHZtYS0+dm1fc3RhcnQpIHsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWlmIChleHBhbmRfc3RhY2sodm1hLCBlYSkpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJaXNfd3JpdGUgPSBkc2lzciAmIE1GQ19EU0lTUl9BQ0NFU1NfUFVUOwogCWlmIChpc193cml0ZSkgewogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgewogCQlpZiAoZHNpc3IgJiBNRkNfRFNJU1JfQUNDRVNTX0RFTklFRCkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMpKSkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCiAJcmV0ID0gMDsKIAkqZmx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGVhLCBpc193cml0ZSk7CiAJaWYgKHVubGlrZWx5KCpmbHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKCpmbHQgJiBWTV9GQVVMVF9PT00pIHsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9IGVsc2UgaWYgKCpmbHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJCUJVRygpOwogCX0KKwogCWlmICgqZmx0ICYgVk1fRkFVTFRfTUFKT1IpCiAJCWN1cnJlbnQtPm1hal9mbHQrKzsKIAllbHNlCiAJCWN1cnJlbnQtPm1pbl9mbHQrKzsKKworb3V0X3VubG9jazoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiByZXQ7Ci0KLWJhZF9hcmVhOgotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIC1FRkFVTFQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaGFuZGxlX21tX2ZhdWx0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCmluZGV4IDY2NTNkZGIuLmRiNTM5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwpAQCAtMzUsNiArMzUsOCBAQAogc3RydWN0IHNwdV9jb250ZXh0ICphbGxvY19zcHVfY29udGV4dChzdHJ1Y3Qgc3B1X2dhbmcgKmdhbmcpCiB7CiAJc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCiAJY3R4ID0ga3phbGxvYyhzaXplb2YgKmN0eCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHgpCiAJCWdvdG8gb3V0OwpAQCAtNjQsNiArNjYsOCBAQAogCV9fc3B1X3VwZGF0ZV9zY2hlZF9pbmZvKGN0eCk7CiAJc3B1X3NldF90aW1lc2xpY2UoY3R4KTsKIAljdHgtPnN0YXRzLnV0aWxfc3RhdGUgPSBTUFVfVVRJTF9JRExFX0xPQURFRDsKKwlrdGltZV9nZXRfdHMoJnRzKTsKKwljdHgtPnN0YXRzLnRzdGFtcCA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CiAKIAlhdG9taWNfaW5jKCZucl9zcHVfY29udGV4dHMpOwogCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggMGRhN2YyYi4uZDZhNTE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC01NjgsMTYgKzU2OCwxNyBAQAogCXN0cnVjdCBzcHVfbHNjc2EgKmxzY3NhID0gY3R4LT5jc2EubHNjc2E7CiAJaW50IHJldDsKIAotCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YgbHNjc2EtPmdwcnMgLSAqcG9zLCBzaXplKTsKLQlpZiAoc2l6ZSA8PSAwKQorCWlmICgqcG9zID49IHNpemVvZihsc2NzYS0+Z3BycykpCiAJCXJldHVybiAtRUZCSUc7CisKKwlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5ncHJzKSAtICpwb3MsIHNpemUpOwogCSpwb3MgKz0gc2l6ZTsKIAogCXJldCA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGNvcHlfZnJvbV91c2VyKGxzY3NhLT5ncHJzICsgKnBvcyAtIHNpemUsCisJcmV0ID0gY29weV9mcm9tX3VzZXIoKGNoYXIgKilsc2NzYS0+Z3BycyArICpwb3MgLSBzaXplLAogCQkJICAgICBidWZmZXIsIHNpemUpID8gLUVGQVVMVCA6IHNpemU7CiAKIAlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwpAQCAtNjIzLDEwICs2MjQsMTEgQEAKIAlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYSA9IGN0eC0+Y3NhLmxzY3NhOwogCWludCByZXQ7CiAKLQlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5mcGNyKSAtICpwb3MsIHNpemUpOwotCWlmIChzaXplIDw9IDApCisJaWYgKCpwb3MgPj0gc2l6ZW9mKGxzY3NhLT5mcGNyKSkKIAkJcmV0dXJuIC1FRkJJRzsKIAorCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YobHNjc2EtPmZwY3IpIC0gKnBvcywgc2l6ZSk7CisKIAlyZXQgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0yNjY1LDcgKzI2NjcsNyBAQAogCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfY29udGVudHNbXSA9IHsKIAl7ICJjYXBhYmlsaXRpZXMiLCAmc3B1ZnNfY2Fwc19mb3BzLCAwNDQ0LCB9LAogCXsgIm1lbSIsICAmc3B1ZnNfbWVtX2ZvcHMsICAwNjY2LCBMU19TSVpFLCB9LAogCXsgInJlZ3MiLCAmc3B1ZnNfcmVnc19mb3BzLCAgMDY2Niwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pLCB9LApAQCAtMjcwNiw3ICsyNzA4LDcgQEAKIAl7fSwKIH07CiAKLXN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfbm9zY2hlZF9jb250ZW50c1tdID0gewogCXsgImNhcGFiaWxpdGllcyIsICZzcHVmc19jYXBzX2ZvcHMsIDA0NDQsIH0sCiAJeyAibWVtIiwgICZzcHVmc19tZW1fZm9wcywgIDA2NjYsIExTX1NJWkUsIH0sCiAJeyAibWJveCIsICZzcHVmc19tYm94X2ZvcHMsIDA0NDQsIH0sCkBAIC0yNzMxLDEyICsyNzMzLDEyIEBACiAJe30sCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0gewogCXsgIi5jdHgiLCAmc3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sCiAJe30sCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0gewogCXsgInJlZ3MiLCBfX3NwdWZzX3JlZ3NfcmVhZCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pfSwKIAl7ICJmcGNyIiwgX19zcHVmc19mcGNyX3JlYWQsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSwKIAl7ICJsc2xyIiwgTlVMTCwgc3B1ZnNfbHNscl9nZXQsIDE5IH0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCmluZGV4IGUzMDllZjcuLjY0ZjA2ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCkBAIC0xODYsOCArMTg2LDkgQEAKIAlyZXR1cm4gc2ltcGxlX3JtZGlyKHBhcmVudCwgZGlyKTsKIH0KIAotc3RhdGljIGludCBzcHVmc19maWxsX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIsIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyICpmaWxlcywKLQkJCSAgaW50IG1vZGUsIHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQorc3RhdGljIGludCBzcHVmc19maWxsX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCWNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyICpmaWxlcywgaW50IG1vZGUsCisJCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnRtcDsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCmluZGV4IGM1OGJkMzYuLjRkZGY3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKQEAgLTExNyw2ICsxMTcsOSBAQAogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKKwkvKiBjbGVhciBwdXJnZSBzdGF0dXMgKi8KKwlvdXRfYmU2NChtZmNfY250bCwgMCk7CisKIAkvKiBwdXQgdGhlIFNQRSBpbiBrZXJuZWwgbW9kZSB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGxvYWRlciAqLwogCXNyMSA9IHNwdV9tZmNfc3IxX2dldChjdHgtPnNwdSk7CiAJc3IxICY9IH5NRkNfU1RBVEUxX1BST0JMRU1fU1RBVEVfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKaW5kZXggM2JmOTA4ZS4uYWUzMTU3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKQEAgLTI0MSw5ICsyNDEsOSBAQAogCXNpemVfdCBzaXplOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdOwotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW107Ci1leHRlcm4gc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX25vc2NoZWRfY29udGVudHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXTsKIAogLyogc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKi8KIGV4dGVybiBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHM7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTsKIAlzaXplX3Qgc2l6ZTsKIH07Ci1leHRlcm4gc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CiBleHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX251bV9ub3RlczsKIAogZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKaW5kZXggMjJiNGI0ZS4uMzdkNDM4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX0NIUlAKIAlib29sICJDb21tb24gSGFyZHdhcmUgUmVmZXJlbmNlIFBsYXRmb3JtIChDSFJQKSBiYXNlZCBtYWNoaW5lcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwppbmRleCAxMzBmZjcyLi4wMzlmYzhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0UgCQkJKDB4ZjIwMDAwMDApCiAjZGVmaW5lIFBFR0FTT1MyX1NSQU1fU0laRQkJCSgyNTYqMTAyNCkKIAotI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCi0jZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgxCQkJKFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgwICsgKFBFR0FTT1MyX1NSQU1fU0laRSAvIDIpICkKKyNkZWZpbmUgUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCisjZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDEJCQkoUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMCArIChQRUdBU09TMl9TUkFNX1NJWkUgLyAyKSApCiAKIAogI2RlZmluZSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFCQkoUEVHQVNPUzJfU1JBTV9TSVpFLzQpCkBAIC00Nyw3NSArNDcsNDIgQEAKIAkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjQzeHhfZXRoX3BvcnQxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkubmFtZQk9ICJldGggcG9ydDEgaXJxIiwKIAkJLnN0YXJ0CT0gOSwKIAkJLmVuZAk9IDksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkID0gewotCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JLnBvcnRfbnVtYmVyCT0gMCwKLQotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMCwKLQkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKLQkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCi0KLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDAgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAotCS5yeF9zcmFtX3NpemUgPSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFLAotCS5yeF9xdWV1ZV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRS8xNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDBfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjQzeHhfZXRoMF9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgxIGlycSIsCi0JCS5zdGFydAk9IDksCi0JCS5lbmQJPSA5LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGV0aDFfcGQgPSB7CitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoX3BvcnQxX3BkID0gewogCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCiAJLnBvcnRfbnVtYmVyCT0gMSwKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig3KSwKIAotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMSwKKwkudHhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMSwKIAkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCiAKLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDEgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAorCS5yeF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIX1BPUlQxICsgUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkucnhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRSwKIAkucnhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fUlhSSU5HX1NJWkUvMTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgxX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aF9wb3J0MV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKIAkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGgxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXY2NDN4eF9ldGgxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfcG9ydDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9wb3J0MV9yZXNvdXJjZXMsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoX3BvcnQxX3BkLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JJmV0aDBfZGV2aWNlLAotCSZldGgxX2RldmljZSwKKwkmZXRoX3BvcnQxX2RldmljZSwKIH07CiAKIC8qKioqKioqKioqKi8KQEAgLTE5MSwxNSArMTU4LDEwIEBACiAKIAkJaWYgKCBFbmFibGVfU1JBTSgpIDwgMCkKIAkJewotCQkJZXRoMF9wZC50eF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC50eF9zcmFtX3NpemUgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX3NpemUgPSAwOwotCi0JCQlldGgxX3BkLnR4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnR4X3NyYW1fc2l6ZSA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fc2l6ZSA9IDA7CisJCQlldGhfcG9ydDFfcGQudHhfc3JhbV9hZGRyID0gMDsKKwkJCWV0aF9wb3J0MV9wZC50eF9zcmFtX3NpemUgPSAwOworCQkJZXRoX3BvcnQxX3BkLnJ4X3NyYW1fYWRkciA9IDA7CisJCQlldGhfcG9ydDFfcGQucnhfc3JhbV9zaXplID0gMDsKIAogI2lmZGVmIEJFX1ZFUkJPU0UKIAkJCXByaW50aygiUGVnYXNvcyBJSS9NYXJ2ZWxsIE1WNjQzNjE6IENhbid0IGVuYWJsZSB0aGUgIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCmluZGV4IDRmOWY4MTguLjI5MWFjOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRU1CRURERUQ2eHgKIAlib29sICJFbWJlZGRlZCA2eHgvN3h4Lzd4eHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDMzIgJiYgQlJPS0VOX09OX1NNUCAmJiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4ICYmIEJST0tFTl9PTl9TTVAKIAogY29uZmlnIExJTktTVEFUSU9OCiAJYm9vbCAiTGlua3N0YXRpb24gLyBLdXJvYm94KEhHKSBmcm9tIEJ1ZmZhbG8iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCmluZGV4IDdkZGQwYTIuLjY0N2U4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19JU0VSSUVTCiAJYm9vbCAiSUJNIExlZ2FjeSBpU2VyaWVzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0lORElSRUNUX0lPCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFIGlmIEVNQkVEREVECiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCA3MDFkOTI5Li45NGY0NDQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yX2VhY2hfaXJxIChpcnEpIHsKLQkJaXJxX2Rlc2NfdCAqZGVzYyA9IGdldF9pcnFfZGVzYyhpcnEpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKIAogCQlpZiAoZGVzYyAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPnN0YXJ0dXApIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDI0NTE5YjkuLmE2Y2QzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC02MTcsNyArNjE3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgX19pb21lbSAqaXNlcmllc19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyZXNzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnCmluZGV4IGE2NDY3YTUuLjFlYTYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX01BUExFCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWJvb2wgIk1hcGxlIDk3MEZYIEV2YWx1YXRpb24gQm9hcmQiCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBNUElDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZwppbmRleCAzNDhlMDYxLi5hMmFlYjMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BBU0VNSQotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJQQSBTZW1pIFNvQy1iYXNlZCBwbGF0Zm9ybXMiCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1QSUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZwppbmRleCAwNTU5OTBjLi4xZTFhMDg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QTUFDCiAJYm9vbCAiQXBwbGUgUG93ZXJNYWMgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gUFBDX0JPT0szUwogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJIGlmIFBQQzMyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCmluZGV4IGJlYjM4MzMuLjIyZWNmYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCkBAIC04Niw2ICs4Niw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZzVfc3dpdGNoX211dGV4KTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNpdGlvbl9sYXRlbmN5OwogCiAjaWZkZWYgQ09ORklHX1BNQUNfU01VCiAKQEAgLTM1Nyw3ICszNTgsNyBAQAogCiBzdGF0aWMgaW50IGc1X2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gdHJhbnNpdGlvbl9sYXRlbmN5OwogCXBvbGljeS0+Y3VyID0gZzVfY3B1X2ZyZXFzW2c1X3F1ZXJ5X2ZyZXEoKV0uZnJlcXVlbmN5OwogCS8qIHNlY29uZGFyeSBDUFVzIGFyZSB0aWVkIHRvIHRoZSBwcmltYXJ5IG9uZSBieSB0aGUKIAkgKiBjcHVmcmVxIGNvcmUgaWYgaW4gdGhlIHNlY29uZGFyeSBwb2xpY3kgd2UgdGVsbCBpdCB0aGF0CkBAIC01MDAsNiArNTAxLDcgQEAKIAlnNV9jcHVfZnJlcXNbMV0uZnJlcXVlbmN5ID0gbWF4X2ZyZXEvMjsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSAxMjAwMDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3Njb21fc3dpdGNoX2ZyZXE7CiAJZzVfcXVlcnlfZnJlcSA9IGc1X3Njb21fcXVlcnlfZnJlcTsKIAlmcmVxX21ldGhvZCA9ICJTQ09NIjsKQEAgLTY3NSw2ICs2NzcsNyBAQAogCWc1X2NwdV9mcmVxc1sxXS5mcmVxdWVuY3kgPSBtaW5fZnJlcTsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CiAJZzVfc3dpdGNoX3ZvbHQgPSBnNV9wZnVuY19zd2l0Y2hfdm9sdDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3BmdW5jX3N3aXRjaF9mcmVxOwogCWc1X3F1ZXJ5X2ZyZXEgPSBnNV9wZnVuY19xdWVyeV9mcmVxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmgKaW5kZXggYzQ0Yzg5Zi4uZDYyMmE4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKLWV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcG1hY19waWM7CitleHRlcm4gc3RydWN0IGlycV9jaGlwIHBtYWNfcGljOwogCiBleHRlcm4gdm9pZCBwbWFjX3BpY19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBwbWFjX2dldF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggOWI3OGY1My4uNDU5MzZjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNzQ2LDQgKzc0Niw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzY0KQogCS5jcHVfZGllCQk9IHBtYWNfY3B1X2RpZSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwkuY3B1X2RpZQkJPSBnZW5lcmljX21hY2hfY3B1X2RpZSwKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHJlcC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKaW5kZXggMjlkNDExMi4uYmY4MzMwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX1BSRVAKIAlib29sICJQb3dlclBDIFJlZmVyZW5jZSBQbGF0Zm9ybSAoUFJlUCkgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMiAmJiBCUk9LRU4KKwlkZXBlbmRzIG9uIDZ4eCAmJiBCUk9LRU4KIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKaW5kZXggNzQwZWY1Ni4uZGZlMzE2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QUzMKIAlib29sICJTb255IFBTMyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMCiAJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCiAJc2VsZWN0IFVTQl9PSENJX0xJVFRMRV9FTkRJQU4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCmluZGV4IGQyODFjYzAuLjlhMmI2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJcmVzdWx0ID0gYWRkX21lbW9yeSgwLCBzdGFydF9hZGRyLCBtYXAucjEuc2l6ZSk7CiAKIAlpZiAocmVzdWx0KSB7Ci0JCURCRygiJXM6JWQ6IGFkZF9tZW1vcnkgZmFpbGVkOiAoJWQpXG4iLAorCQlwcl9lcnIoIiVzOiVkOiBhZGRfbWVtb3J5IGZhaWxlZDogKCVkKVxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXN1bHQgPSBvbmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAKIAlpZiAocmVzdWx0KQotCQlEQkcoIiVzOiVkOiBvbmxpbmVfcGFnZXMgZmFpbGVkOiAoJWQpXG4iLAorCQlwcl9lcnIoIiVzOiVkOiBvbmxpbmVfcGFnZXMgZmFpbGVkOiAoJWQpXG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fLCByZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggZGRjMmEzMC4uZjBlNmYyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BTRVJJRVMKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJYm9vbCAiSUJNIHBTZXJpZXMgJiBuZXcgKFBPV0VSNS1iYXNlZCkgaVNlcmllcyIKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKQEAgLTI1LDYgKzI1LDExIEBACiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBQQ0kKIAlkZWZhdWx0IHkgaWYgIUVNQkVEREVECiAKK2NvbmZpZyBQU0VSSUVTX01TSQorICAgICAgIGJvb2wKKyAgICAgICBkZXBlbmRzIG9uIFBDSV9NU0kgJiYgRUVICisgICAgICAgZGVmYXVsdCB5CisKIGNvbmZpZyBTQ0FOTE9HCiAJdHJpc3RhdGUgIlNjYW5sb2cgZHVtcCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBSVEFTX1BST0MgJiYgUFBDX1BTRVJJRVMKQEAgLTYzLDMgKzY4LDEzIEBACiAJICBtYWtlcyBzZW5zZSBmb3IgYSBzeXN0ZW0gcnVubmluZyBpbiBhbiBMUEFSIHdoZXJlIHRoZSB1bnVzZWQgcGFnZXMKIAkgIHdpbGwgYmUgcmV1c2VkIGZvciBvdGhlciBMUEFScy4gVGhlIGludGVyZmFjZSBhbGxvd3MgZmlybXdhcmUgdG8KIAkgIGJhbGFuY2UgbWVtb3J5IGFjcm9zcyBtYW55IExQQVJzLgorCitjb25maWcgRFRMCisJYm9vbCAiRGlzcGF0Y2ggVHJhY2UgTG9nIgorCWRlcGVuZHMgb24gUFBDX1NQTFBBUiAmJiBERUJVR19GUworCWhlbHAKKwkgIFNQTFBBUiBtYWNoaW5lcyBjYW4gbG9nIGh5cGVydmlzb3IgcHJlZW1wdCAmIGRpc3BhdGNoIGV2ZW50cyB0byBhCisJICBrZXJuZWwgYnVmZmVyLiBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIGxvZ2dpbmcgdGhlc2UgZXZlbnRzLAorCSAgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBhIGRlYnVnZnMgZmlsZS4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggZGZlNTc0YS4uNzkwYzBiOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX0VFSCkJKz0gZWVoLm8gZWVoX2NhY2hlLm8gZWVoX2RyaXZlci5vIGVlaF9ldmVudC5vIGVlaF9zeXNmcy5vCiBvYmotJChDT05GSUdfS0VYRUMpCSs9IGtleGVjLm8KIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vIHBjaV9kbHBhci5vCi1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXNpLm8KK29iai0kKENPTkZJR19QU0VSSUVTX01TSSkJKz0gbXNpLm8KIAogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLWNwdS5vCiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCSs9IGhvdHBsdWctbWVtb3J5Lm8KQEAgLTI1LDMgKzI1LDQgQEAKIG9iai0kKENPTkZJR19IQ0FMTF9TVEFUUykJKz0gaHZDYWxsX2luc3Qubwogb2JqLSQoQ09ORklHX1BIWVBfRFVNUCkJKz0gcGh5cF9kdW1wLm8KIG9iai0kKENPTkZJR19DTU0pCQkrPSBjbW0ubworb2JqLSQoQ09ORklHX0RUTCkJCSs9IGR0bC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmY2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIFZpcnR1YWwgUHJvY2Vzc29yIERpc3BhdGNoIFRyYWNlIExvZworICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDkKKyAqCisgKiBBdXRob3I6IEplcmVteSBLZXJyIDxqa0BvemxhYnMub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCisKKy8qCisgKiBMYXlvdXQgb2YgZW50cmllcyBpbiB0aGUgaHlwZXJ2aXNvcidzIERUTCBidWZmZXIuIEFsdGhvdWdoIHdlIGRvbid0CisgKiBhY3R1YWxseSBhY2Nlc3MgdGhlIGludGVybmFscyBvZiBhbiBlbnRyeSAod2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIHNpemUpLAorICogd2UgbWlnaHQgYXMgd2VsbCBkZWZpbmUgaXQgaGVyZSBmb3IgcmVmZXJlbmNlLgorICovCitzdHJ1Y3QgZHRsX2VudHJ5IHsKKwl1OAlkaXNwYXRjaF9yZWFzb247CisJdTgJcHJlZW1wdF9yZWFzb247CisJdTE2CXByb2Nlc3Nvcl9pZDsKKwl1MzIJZW5xdWV1ZV90b19kaXNwYXRjaF90aW1lOworCXUzMglyZWFkeV90b19lbnF1ZXVlX3RpbWU7CisJdTMyCXdhaXRpbmdfdG9fcmVhZHlfdGltZTsKKwl1NjQJdGltZWJhc2U7CisJdTY0CWZhdWx0X2FkZHI7CisJdTY0CXNycjA7CisJdTY0CXNycjE7Cit9OworCitzdHJ1Y3QgZHRsIHsKKwlzdHJ1Y3QgZHRsX2VudHJ5CSpidWY7CisJc3RydWN0IGRlbnRyeQkJKmZpbGU7CisJaW50CQkJY3B1OworCWludAkJCWJ1Zl9lbnRyaWVzOworCXU2NAkJCWxhc3RfaWR4OworfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZHRsLCBkdGwpOworCisvKgorICogRGlzcGF0Y2ggdHJhY2UgbG9nIGV2ZW50IG1hc2s6CisgKiAweDc6IDB4MTogdm9sdW50YXJ5IHZpcnR1YWwgcHJvY2Vzc29yIHdhaXRzCisgKiAgICAgIDB4MjogdGltZS1zbGljZSBwcmVlbXB0cworICogICAgICAweDQ6IHZpcnR1YWwgcGFydGl0aW9uIG1lbW9yeSBwYWdlIGZhdWx0cworICovCitzdGF0aWMgdTggZHRsX2V2ZW50X21hc2sgPSAweDc7CisKKworLyoKKyAqIFNpemUgb2YgcGVyLWNwdSBsb2cgYnVmZmVycy4gRGVmYXVsdCBpcyBqdXN0IHVuZGVyIDE2IHBhZ2VzIHdvcnRoLgorICovCitzdGF0aWMgaW50IGR0bF9idWZfZW50cmllcyA9ICgxNiAqIDg1KTsKKworCitzdGF0aWMgaW50IGR0bF9lbmFibGUoc3RydWN0IGR0bCAqZHRsKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0LCBod2NwdTsKKworCS8qIG9ubHkgYWxsb3cgb25lIHJlYWRlciAqLworCWlmIChkdGwtPmJ1ZikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24gc2l6ZSBmb3IgdXNlIGR1cmluZyByZWFkICovCisJZHRsLT5idWZfZW50cmllcyA9IGR0bF9idWZfZW50cmllczsKKworCWR0bC0+YnVmID0ga21hbGxvY19ub2RlKGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSksCisJCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShkdGwtPmNwdSkpOworCWlmICghZHRsLT5idWYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1ZmZlciBhbGxvYyBmYWlsZWQgZm9yIGNwdSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHRsLT5jcHUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBSZWdpc3RlciBvdXIgZHRsIGJ1ZmZlciB3aXRoIHRoZSBoeXBlcnZpc29yLiBUaGUgSFYgZXhwZWN0cyB0aGUKKwkgKiBidWZmZXIgc2l6ZSB0byBiZSBwYXNzZWQgaW4gdGhlIHNlY29uZCB3b3JkIG9mIHRoZSBidWZmZXIgKi8KKwkoKHUzMiAqKWR0bC0+YnVmKVsxXSA9IGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisKKwlod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoZHRsLT5jcHUpOworCWFkZHIgPSBfX3BhKGR0bC0+YnVmKTsKKwlyZXQgPSByZWdpc3Rlcl9kdGwoaHdjcHUsIGFkZHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERUTCByZWdpc3RyYXRpb24gZm9yIGNwdSAlZCAoaHcgJWQpICIKKwkJICAgICAgICJmYWlsZWQgd2l0aCAlZFxuIiwgX19mdW5jX18sIGR0bC0+Y3B1LCBod2NwdSwgcmV0KTsKKwkJa2ZyZWUoZHRsLT5idWYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBzZXQgb3VyIGluaXRpYWwgYnVmZmVyIGluZGljZXMgKi8KKwlkdGwtPmxhc3RfaWR4ID0gbHBwYWNhW2R0bC0+Y3B1XS5kdGxfaWR4ID0gMDsKKworCS8qIGVuc3VyZSB0aGF0IG91ciB1cGRhdGVzIHRvIHRoZSBscHBhY2EgZmllbGRzIGhhdmUgb2NjdXJyZWQgYmVmb3JlCisJICogd2UgYWN0dWFsbHkgZW5hYmxlIHRoZSBsb2dnaW5nICovCisJc21wX3dtYigpOworCisJLyogZW5hYmxlIGV2ZW50IGxvZ2dpbmcgKi8KKwlscHBhY2FbZHRsLT5jcHVdLmR0bF9lbmFibGVfbWFzayA9IGR0bF9ldmVudF9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0bF9kaXNhYmxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGR0bC0+Y3B1KTsKKworCWxwcGFjYVtkdGwtPmNwdV0uZHRsX2VuYWJsZV9tYXNrID0gMHgwOworCisJdW5yZWdpc3Rlcl9kdGwoaHdjcHUsIF9fcGEoZHRsLT5idWYpKTsKKworCWtmcmVlKGR0bC0+YnVmKTsKKwlkdGwtPmJ1ZiA9IE5VTEw7CisJZHRsLT5idWZfZW50cmllcyA9IDA7Cit9CisKKy8qIGZpbGUgaW50ZXJmYWNlICovCisKK3N0YXRpYyBpbnQgZHRsX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZHRsICpkdGwgPSBpbm9kZS0+aV9wcml2YXRlOworCWludCByYzsKKworCXJjID0gZHRsX2VuYWJsZShkdGwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZHRsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0bF9maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGR0bCAqZHRsID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlkdGxfZGlzYWJsZShkdGwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkdGxfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAorCQlsb2ZmX3QgKnBvcykKK3sKKwlpbnQgcmMsIGN1cl9pZHgsIGxhc3RfaWR4LCBuX3JlYWQsIG5fcmVxLCByZWFkX3NpemU7CisJc3RydWN0IGR0bCAqZHRsOworCisJaWYgKChsZW4gJSBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZHRsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogcmVxdWVzdGVkIG51bWJlciBvZiBlbnRyaWVzIHRvIHJlYWQgKi8KKwluX3JlcSA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKworCS8qIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcyByZWFkICovCisJbl9yZWFkID0gMDsKKworCWN1cl9pZHggPSBscHBhY2FbZHRsLT5jcHVdLmR0bF9pZHg7CisJbGFzdF9pZHggPSBkdGwtPmxhc3RfaWR4OworCisJaWYgKGN1cl9pZHggLSBsYXN0X2lkeCA+IGR0bC0+YnVmX2VudHJpZXMpIHsKKwkJcHJfZGVidWcoIiVzOiBodiBidWZmZXIgb3ZlcmZsb3cgZm9yIGNwdSAlZCwgc2FtcGxlcyBsb3N0XG4iLAorCQkJCV9fZnVuY19fLCBkdGwtPmNwdSk7CisJfQorCisJY3VyX2lkeCAgJT0gZHRsLT5idWZfZW50cmllczsKKwlsYXN0X2lkeCAlPSBkdGwtPmJ1Zl9lbnRyaWVzOworCisJLyogcmVhZCB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIGlmIHdlJ3ZlIHdyYXBwZWQgKi8KKwlpZiAobGFzdF9pZHggPiBjdXJfaWR4KSB7CisJCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgZHRsLT5idWZfZW50cmllcyAtIGxhc3RfaWR4KTsKKworCQlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQkJcmVhZF9zaXplICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbGFzdF9pZHggPSAwOworCQluX3JlcSAtPSByZWFkX3NpemU7CisJCW5fcmVhZCArPSByZWFkX3NpemU7CisJCWJ1ZiArPSByZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisJfQorCisJLyogLi4gYW5kIG5vdyB0aGUgaGVhZCAqLworCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgY3VyX2lkeCAtIGxhc3RfaWR4KTsKKwlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQlyZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpOworCWlmIChyYykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwluX3JlYWQgKz0gcmVhZF9zaXplOworCWR0bC0+bGFzdF9pZHggKz0gbl9yZWFkOworCisJcmV0dXJuIG5fcmVhZCAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsX2ZvcHMgPSB7CisJLm9wZW4JCT0gZHRsX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IGR0bF9maWxlX3JlbGVhc2UsCisJLnJlYWQJCT0gZHRsX2ZpbGVfcmVhZCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkdGxfZGlyOworCitzdGF0aWMgaW50IGR0bF9zZXR1cF9maWxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwljaGFyIG5hbWVbMTBdOworCisJc3ByaW50ZihuYW1lLCAiY3B1LSVkIiwgZHRsLT5jcHUpOworCisJZHRsLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNDAwLCBkdGxfZGlyLCBkdGwsICZkdGxfZm9wcyk7CisJaWYgKCFkdGwtPmZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHRsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9tYXNrX2ZpbGUsICpidWZfZW50cmllc19maWxlOworCWludCByYywgaTsKKworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNldCB1cCBjb21tb24gZGVidWdmcyBzdHJ1Y3R1cmUgKi8KKworCXJjID0gLUVOT01FTTsKKwlkdGxfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkdGwiLCBwb3dlcnBjX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFkdGxfZGlyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBjcmVhdGUgZHRsIHJvb3QgZGlyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJZXZlbnRfbWFza19maWxlID0gZGVidWdmc19jcmVhdGVfeDgoImR0bF9ldmVudF9tYXNrIiwgMDYwMCwKKwkJCQlkdGxfZGlyLCAmZHRsX2V2ZW50X21hc2spOworCWJ1Zl9lbnRyaWVzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImR0bF9idWZfZW50cmllcyIsIDA2MDAsCisJCQkJZHRsX2RpciwgJmR0bF9idWZfZW50cmllcyk7CisKKwlpZiAoIWV2ZW50X21hc2tfZmlsZSB8fCAhYnVmX2VudHJpZXNfZmlsZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgY3JlYXRlIGR0bCBmaWxlc1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9yZW1vdmVfZGlyOworCX0KKworCS8qIHNldCB1cCB0aGUgcGVyLWNwdSBsb2cgc3RydWN0dXJlcyAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCBkdGwgKmR0bCA9ICZwZXJfY3B1KGR0bCwgaSk7CisJCWR0bC0+Y3B1ID0gaTsKKworCQlyYyA9IGR0bF9zZXR1cF9maWxlKGR0bCk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfZGlyOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkdGxfZGlyKTsKK2VycjoKKwlyZXR1cm4gcmM7Cit9CithcmNoX2luaXRjYWxsKGR0bF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDBhZDU2ZmYuLjM4MDQyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtNzksNiArNzksNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogZWVoX2Rpc2FibGVfaXJxIC0gZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSByZWNvdmVyaW5nIGRldmljZQorICovCitzdGF0aWMgdm9pZCBlZWhfZGlzYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwkvKiBEb24ndCBkaXNhYmxlIE1TSSBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhleSBhcmUKKwkgKiBlZmZlY3RpdmVseSBkaXNhYmxlZCBieSB0aGUgRE1BIFN0b3BwZWQgc3RhdGUKKwkgKiB3aGVuIGFuIEVFSCBlcnJvciBvY2N1cnMuCisJKi8KKwlpZiAoZGV2LT5tc2lfZW5hYmxlZCB8fCBkZXYtPm1zaXhfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKCFpcnFfaW5fdXNlKGRldi0+aXJxKSkKKwkJcmV0dXJuOworCisJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOworCWRpc2FibGVfaXJxX25vc3luYyhkZXYtPmlycSk7Cit9CisKKy8qKgorICogZWVoX2VuYWJsZV9pcnEgLSBlbmFibGUgaW50ZXJydXB0IGZvciB0aGUgcmVjb3ZlcmluZyBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZWVoX2VuYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwlpZiAoKFBDSV9ETihkbiktPmVlaF9tb2RlKSAmIEVFSF9NT0RFX0lSUV9ESVNBQkxFRCkgeworCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+RUVIX01PREVfSVJRX0RJU0FCTEVEOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwl9Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qKgogICogZWVoX3JlcG9ydF9lcnJvciAtIHJlcG9ydCBwY2kgZXJyb3IgdG8gZWFjaCBkZXZpY2UgZHJpdmVyCkBAIC05OCwxMSArMTMyLDggQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9CisJZWVoX2Rpc2FibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKQogCQlyZXR1cm47CkBAIC0xNDcsMTUgKzE3OCwxMiBAQAogewogCWVudW0gcGNpX2Vyc19yZXN1bHQgcmMsICpyZXMgPSB1c2VyZGF0YTsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCiAJaWYgKCFkcml2ZXIpCiAJCXJldHVybjsKIAotCWlmICgoUENJX0ROKGRuKS0+ZWVoX21vZGUpICYgRUVIX01PREVfSVJRX0RJU0FCTEVEKSB7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7Ci0JCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCX0KKwllZWhfZW5hYmxlX2lycShkZXYpOworCiAJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CiAJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KQogCQlyZXR1cm47CkBAIC0xNzQsMTcgKzIwMiwxNCBAQAogc3RhdGljIHZvaWQgZWVoX3JlcG9ydF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAogCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CiAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKChQQ0lfRE4oZG4pLT5lZWhfbW9kZSkgJiBFRUhfTU9ERV9JUlFfRElTQUJMRUQpIHsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfkVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JfQorCWVlaF9lbmFibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZSkKIAkJcmV0dXJuOwpAQCAtMjA4LDE1ICsyMzMsMTIgQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyKQorCWVlaF9kaXNhYmxlX2lycShkZXYpOworCisJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkKIAkJcmV0dXJuOwotCWlmICghZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQpCi0JCXJldHVybjsKKwogCWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKGRldiwgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCmluZGV4IGYxNTIyMmIuLmJmMmUxYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTcxLDExICs3MSwxMyBAQAogCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOwogCiAJLyoKLQkgKiBJZiB0aGUgUlRBUyBjYWxsIHN1Y2NlZWRlZCwgY2hlY2sgdGhlIG51bWJlciBvZiBpcnFzIGlzIGFjdHVhbGx5Ci0JICogd2hhdCB3ZSBhc2tlZCBmb3IuIElmIG5vdCwgcmV0dXJuIGFuIGVycm9yLgorCSAqIElmIHRoZSBSVEFTIGNhbGwgc3VjY2VlZGVkLCByZXR1cm4gdGhlIG51bWJlciBvZiBpcnFzIGFsbG9jYXRlZC4KKwkgKiBJZiBub3QsIG1ha2Ugc3VyZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogCSAqLwotCWlmIChyYyA9PSAwICYmIHJ0YXNfcmV0WzBdICE9IG51bV9pcnFzKQotCQlyYyA9IC1FTk9TUEM7CisJaWYgKHJjID09IDApCisJCXJjID0gcnRhc19yZXRbMF07CisJZWxzZSBpZiAocmMgPiAwKQorCQlyYyA9IC1yYzsKIAogCXByX2RlYnVnKCJydGFzX21zaTogaWJtLGNoYW5nZV9tc2koZnVuYz0lZCxudW09JWQpLCBnb3QgJWQgcmMgPSAlZFxuIiwKIAkJIGZ1bmMsIG51bV9pcnFzLCBydGFzX3JldFswXSwgcmMpOwpAQCAtOTEsNyArOTMsNyBAQAogCWlmICghcGRuKQogCQlyZXR1cm47CiAKLQlpZiAocnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIDApKQorCWlmIChydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9GTiwgMCkgIT0gMCkKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBTZXR0aW5nIE1TSXMgdG8gMCBmYWlsZWQhXG4iKTsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBACiAJcnRhc19kaXNhYmxlX21zaShwZGV2KTsKIH0KIAotc3RhdGljIGludCBjaGVja19yZXFfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYykKK3N0YXRpYyBpbnQgY2hlY2tfcmVxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgY2hhciAqcHJvcF9uYW1lKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kbiAqcGRuOwpAQCAtMTQ0LDI2ICsxNDYsMjM1IEBACiAKIAlkbiA9IHBkbi0+bm9kZTsKIAotCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0scmVxI21zaSIsIE5VTEwpOworCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sIHByb3BfbmFtZSwgTlVMTCk7CiAJaWYgKCFyZXFfbXNpKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogTm8gaWJtLHJlcSNtc2kgb24gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCQlwcl9kZWJ1ZygicnRhc19tc2k6IE5vICVzIG9uICVzXG4iLCBwcm9wX25hbWUsIGRuLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlpZiAoKnJlcV9tc2kgPCBudmVjKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogaWJtLHJlcSNtc2kgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBudmVjKTsKLQkJcmV0dXJuIC1FTk9TUEM7CisJCXByX2RlYnVnKCJydGFzX21zaTogJXMgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBwcm9wX25hbWUsIG52ZWMpOworCisJCWlmICgqcmVxX21zaSA9PSAwKSAvKiBCZSBwYXJhbm9pZCAqLworCQkJcmV0dXJuIC1FTk9TUEM7CisKKwkJcmV0dXJuICpyZXFfbXNpOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNoZWNrX3JlcV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpIik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVxX21zaXgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpLXgiKTsKK30KKworLyogUXVvdGEgY2FsY3VsYXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9wZV90b3RhbF9tc2koc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp0b3RhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWNvbnN0IHUzMiAqcDsKKworCWRuID0gb2Zfbm9kZV9nZXQocGNpX2RldmljZV90b19PRl9ub2RlKGRldikpOworCXdoaWxlIChkbikgeworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHBlLXRvdGFsLSNtc2kiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCXByX2RlYnVnKCJydGFzX21zaTogZm91bmQgcHJvcCBvbiBkbiAlc1xuIiwKKwkJCQlkbi0+ZnVsbF9uYW1lKTsKKwkJCSp0b3RhbCA9ICpwOworCQkJcmV0dXJuIGRuOworCQl9CisKKwkJZG4gPSBvZl9nZXRfbmV4dF9wYXJlbnQoZG4pOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX3BlX2RuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCAqdG90YWwpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKworCS8qIEZvdW5kIG91ciBQRSBhbmQgYXNzdW1lIDggYXQgdGhhdCBwb2ludC4gKi8KKworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwlkbiA9IGZpbmRfZGV2aWNlX3BlKGRuKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFdlIGFjdHVhbGx5IHdhbnQgdGhlIHBhcmVudCAqLworCWRuID0gb2ZfZ2V0X3BhcmVudChkbik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBIYXJkY29kZSBvZiA4IGZvciBvbGQgZmlybXdhcmVzICovCisJKnRvdGFsID0gODsKKwlwcl9kZWJ1ZygicnRhc19tc2k6IHVzaW5nIFBFIGRuICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXJldHVybiBkbjsKK30KKworc3RydWN0IG1zaV9jb3VudHMgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVxdWVzdG9yOworCWludCBudW1fZGV2aWNlczsKKwlpbnQgcmVxdWVzdDsKKwlpbnQgcXVvdGE7CisJaW50IHNwYXJlOworCWludCBvdmVyX3F1b3RhOworfTsKKworc3RhdGljIHZvaWQgKmNvdW50X25vbl9icmlkZ2VfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtc2lfY291bnRzICpjb3VudHMgPSBkYXRhOworCWNvbnN0IHUzMiAqcDsKKwl1MzIgY2xhc3M7CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IGNvdW50aW5nICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJjbGFzcy1jb2RlIiwgTlVMTCk7CisJY2xhc3MgPSBwID8gKnAgOiAwOworCisJaWYgKChjbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKKwkJY291bnRzLT5udW1fZGV2aWNlcysrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjb3VudF9zcGFyZV9tc2lzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zaV9jb3VudHMgKmNvdW50cyA9IGRhdGE7CisJY29uc3QgdTMyICpwOworCWludCByZXE7CisKKwlpZiAoZG4gPT0gY291bnRzLT5yZXF1ZXN0b3IpCisJCXJlcSA9IGNvdW50cy0+cmVxdWVzdDsKKwllbHNlIHsKKwkJLyogV2UgZG9uJ3Qga25vdyBpZiBhIGRyaXZlciB3aWxsIHRyeSB0byB1c2UgTVNJIG9yIE1TSS1YLAorCQkgKiBzbyB3ZSBqdXN0IGhhdmUgdG8gcHVudCBhbmQgdXNlIHRoZSBsYXJnZXIgb2YgdGhlIHR3by4gKi8KKwkJcmVxID0gMDsKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpIiwgTlVMTCk7CisJCWlmIChwKQorCQkJcmVxID0gKnA7CisKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpLXgiLCBOVUxMKTsKKwkJaWYgKHApCisJCQlyZXEgPSBtYXgocmVxLCAoaW50KSpwKTsKKwl9CisKKwlpZiAocmVxIDwgY291bnRzLT5xdW90YSkKKwkJY291bnRzLT5zcGFyZSArPSBjb3VudHMtPnF1b3RhIC0gcmVxOworCWVsc2UgaWYgKHJlcSA+IGNvdW50cy0+cXVvdGEpCisJCWNvdW50cy0+b3Zlcl9xdW90YSsrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXNpX3F1b3RhX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlcXVlc3QpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwZV9kbjsKKwlzdHJ1Y3QgbXNpX2NvdW50cyBjb3VudHM7CisJaW50IHRvdGFsOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiBjYWxjIHF1b3RhIGZvciAlcywgcmVxdWVzdCAlZFxuIiwgcGNpX25hbWUoZGV2KSwKKwkJICByZXF1ZXN0KTsKKworCXBlX2RuID0gZmluZF9wZV90b3RhbF9tc2koZGV2LCAmdG90YWwpOworCWlmICghcGVfZG4pCisJCXBlX2RuID0gZmluZF9wZV9kbihkZXYsICZ0b3RhbCk7CisKKwlpZiAoIXBlX2RuKSB7CisJCXByX2VycigicnRhc19tc2k6IGNvdWxkbid0IGZpbmQgUEUgZm9yICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfZGVidWcoInJ0YXNfbXNpOiBmb3VuZCBQRSAlc1xuIiwgcGVfZG4tPmZ1bGxfbmFtZSk7CisKKwltZW1zZXQoJmNvdW50cywgMCwgc2l6ZW9mKHN0cnVjdCBtc2lfY291bnRzKSk7CisKKwkvKiBXb3JrIG91dCBob3cgbWFueSBkZXZpY2VzIHdlIGhhdmUgYmVsb3cgdGhpcyBQRSAqLworCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBlX2RuLCBjb3VudF9ub25fYnJpZGdlX2RldmljZXMsICZjb3VudHMpOworCisJaWYgKGNvdW50cy5udW1fZGV2aWNlcyA9PSAwKSB7CisJCXByX2VycigicnRhc19tc2k6IGZvdW5kIDAgZGV2aWNlcyB1bmRlciBQRSBmb3IgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJY291bnRzLnF1b3RhID0gdG90YWwgLyBjb3VudHMubnVtX2RldmljZXM7CisJaWYgKHJlcXVlc3QgPD0gY291bnRzLnF1b3RhKQorCQlnb3RvIG91dDsKKworCS8qIGVsc2UsIHdlIGhhdmUgc29tZSBtb3JlIGNhbGN1bGF0aW5nIHRvIGRvICovCisJY291bnRzLnJlcXVlc3RvciA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCWNvdW50cy5yZXF1ZXN0ID0gcmVxdWVzdDsKKwl0cmF2ZXJzZV9wY2lfZGV2aWNlcyhwZV9kbiwgY291bnRfc3BhcmVfbXNpcywgJmNvdW50cyk7CisKKwkvKiBJZiB0aGUgcXVvdGEgaXNuJ3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgdG90YWwsIHdlIGNhbgorCSAqIHVzZSB0aGUgcmVtYWluZGVyIGFzIHNwYXJlIE1TSXMgZm9yIGFueW9uZSB0aGF0IHdhbnRzIHRoZW0uICovCisJY291bnRzLnNwYXJlICs9IHRvdGFsICUgY291bnRzLm51bV9kZXZpY2VzOworCisJLyogRGl2aWRlIGFueSBzcGFyZSBieSB0aGUgbnVtYmVyIG9mIG92ZXItcXVvdGEgcmVxdWVzdG9ycyAqLworCWlmIChjb3VudHMub3Zlcl9xdW90YSkKKwkJY291bnRzLnF1b3RhICs9IGNvdW50cy5zcGFyZSAvIGNvdW50cy5vdmVyX3F1b3RhOworCisJLyogQW5kIGZpbmFsbHkgY2xhbXAgdGhlIHJlcXVlc3QgdG8gdGhlIHBvc3NpYmx5IGFkanVzdGVkIHF1b3RhICovCisJcmVxdWVzdCA9IG1pbihjb3VudHMucXVvdGEsIHJlcXVlc3QpOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiByZXF1ZXN0IGNsYW1wZWQgdG8gcXVvdGEgJWRcbiIsIHJlcXVlc3QpOworb3V0OgorCW9mX25vZGVfcHV0KHBlX2RuKTsKKworCXJldHVybiByZXF1ZXN0OworfQorCiBzdGF0aWMgaW50IHJ0YXNfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKLQkJcHJfZGVidWcoInJ0YXNfbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOworCWludCBxdW90YSwgcmM7CiAKLQlyZXR1cm4gY2hlY2tfcmVxX21zaShwZGV2LCBudmVjKTsKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpCisJCXJjID0gY2hlY2tfcmVxX21zaXgocGRldiwgbnZlYyk7CisJZWxzZQorCQlyYyA9IGNoZWNrX3JlcV9tc2kocGRldiwgbnZlYyk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXF1b3RhID0gbXNpX3F1b3RhX2Zvcl9kZXZpY2UocGRldiwgbnZlYyk7CisKKwlpZiAocXVvdGEgJiYgcXVvdGEgPCBudmVjKQorCQlyZXR1cm4gcXVvdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19tc2l4X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlpbnQgZXhwZWN0ZWQ7CisKKwkvKiBUaGVyZSdzIG5vIHdheSBmb3IgdXMgdG8gZXhwcmVzcyB0byBmaXJtd2FyZSB0aGF0IHdlIHdhbnQKKwkgKiBhIGRpc2NvbnRpZ3VvdXMsIG9yIG5vbi16ZXJvIGJhc2VkLCByYW5nZSBvZiBNU0ktWCBlbnRyaWVzLgorCSAqIFNvIHdlIG11c3QgcmVqZWN0IHN1Y2ggcmVxdWVzdHMuICovCisKKwlleHBlY3RlZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAhPSBleHBlY3RlZCkgeworCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBiYWQgTVNJLVggZW50cmllcy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZXhwZWN0ZWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGFzX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCkBAIC0xNzcsNiArMzg4LDkgQEAKIAlpZiAoIXBkbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVggJiYgY2hlY2tfbXNpeF9lbnRyaWVzKHBkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogVHJ5IHRoZSBuZXcgbW9yZSBleHBsaWNpdCBmaXJtd2FyZSBpbnRlcmZhY2UsIGlmIHRoYXQgZmFpbHMgZmFsbAogCSAqIGJhY2sgdG8gdGhlIG9sZCBpbnRlcmZhY2UuIFRoZSBvbGQgaW50ZXJmYWNlIGlzIGtub3duIHRvIG5ldmVyCkBAIC0xODUsMjEgKzM5OSwyMSBAQAogCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJKSB7CiAJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfTVNJX0ZOLCBudmVjKTsKIAotCQlpZiAocmMpIHsKKwkJaWYgKHJjIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiB0cnlpbmcgdGhlIG9sZCBmaXJtd2FyZSBjYWxsLlxuIik7CiAJCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX0ZOLCBudmVjKTsKIAkJfQogCX0gZWxzZQogCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX01TSVhfRk4sIG52ZWMpOwogCi0JaWYgKHJjKSB7CisJaWYgKHJjICE9IG52ZWMpIHsKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBydGFzX2NoYW5nZV9tc2koKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJaSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSk7CisJCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSsrKTsKIAkJaWYgKGh3aXJxIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBlcnJvciAoJWQpIGdldHRpbmcgaHdpcnFcbiIsIHJjKTsKIAkJCXJldHVybiBod2lycTsKQEAgLTIzNCw4ICs0NDgsOCBAQAogCX0KIAogCS8qIE5vIE1TSSAtPiBNU0lzIGNhbid0IGhhdmUgYmVlbiBhc3NpZ25lZCBieSBmdywgbGVhdmUgTFNJICovCi0JaWYgKGNoZWNrX3JlcV9tc2kocGRldiwgMSkpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicnRhc19tc2k6IG5vIHJlcSNtc2ksIG5vdGhpbmcgdG8gZG8uXG4iKTsKKwlpZiAoY2hlY2tfcmVxX21zaShwZGV2LCAxKSAmJiBjaGVja19yZXFfbXNpeChwZGV2LCAxKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogbm8gcmVxI21zaS94LCBub3RoaW5nIHRvIGRvLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwppbmRleCA1ZTFlZDNkLi5hZDE1MmEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCkBAIC0xMzcsMTEgKzEzNyw5IEBACiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBfX2RldmluaXQgaW5pdF9waGJfZHluYW1pYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwotCWludCBwcmltYXJ5OwogCiAJcHJfZGVidWcoIlBDSTogSW5pdGlhbGl6aW5nIG5ldyBob3RwbHVnIFBIQiAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CiAKLQlwcmltYXJ5ID0gbGlzdF9lbXB0eSgmaG9zZV9saXN0KTsKIAlwaGIgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZG4pOwogCWlmICghcGhiKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggZDk2N2MxOC4uYTI0YTZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCkBAIC00Myw2ICs0MywxNiBAQAogCXJldHVybiB2cGFfY2FsbCgweDMsIGNwdSwgdnBhKTsKIH0KIAorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfZHRsKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBsb25nIHZwYSkKK3sKKwlyZXR1cm4gdnBhX2NhbGwoMHg2LCBjcHUsIHZwYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByZWdpc3Rlcl9kdGwodW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQoreworCXJldHVybiB2cGFfY2FsbCgweDIsIGNwdSwgdnBhKTsKK30KKwogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3BhZ2Vfc2V0X2xvYW5lZCh1bnNpZ25lZCBsb25nIHZwYSkKIHsKIAl1bnNpZ25lZCBsb25nIGNtb19wYWdlX3N6ID0gY21vX2dldF9wYWdlX3NpemUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggYzU5MWEyNS4uYjZmMWIxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQ2OCw5ICs0NjgsMTMgQEAKIAogCQlyYyA9IGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBTZXJpZXNfcmVjb25maWdfY2hhaW4sCiAJCQkJCQkgIGFjdGlvbiwgdmFsdWUpOworCQlpZiAocmMgPT0gTk9USUZZX0JBRCkgeworCQkJcmMgPSBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShucCwgb2xkcHJvcCwgbmV3cHJvcCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTIuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCmluZGV4IGYxYzMzOTUuLmZkOTY5ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCkBAIC01Miw2ICs1Miw3IEBACiAgKiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgZGV2aWNlcy4KICAqLwogY3BtMl9tYXBfdCBfX2lvbWVtICpjcG0yX2ltbXI7CitFWFBPUlRfU1lNQk9MKGNwbTJfaW1tcik7CiAKICNkZWZpbmUgQ1BNX01BUF9TSVpFCSgweDQwMDAwKQkvKiAyNTZrIC0gdGhlIFBRMyByZXNlcnZlIHRoaXMgYW1vdW50CiAJCQkJCSAgIG9mIHNwYWNlIGZvciBDUE0gYXMgaXQgaXMgbGFyZ2VyCkBAIC0xMjksNyArMTMwLDggQEAKIAkJYnJnIC09IDQ7CiAJfQogCWJwICs9IGJyZzsKLQl2YWwgPSAoKChjbGsgLyByYXRlKSAtIDEpIDw8IDEpIHwgQ1BNX0JSR19FTiB8IHNyYzsKKwkvKiBSb3VuZCB0aGUgY2xvY2sgZGl2aWRlciB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiAqLworCXZhbCA9ICgoKGNsayAqIDIgLyByYXRlKSAtIDEpICYgfjEpIHwgQ1BNX0JSR19FTiB8IHNyYzsKIAlpZiAoZGl2MTYpCiAJCXZhbCB8PSBDUE1fQlJHX0RJVjE2OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCmluZGV4IDAwZDNkMTcuLmU0YjZkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCkBAIC01Niw3ICs1Niw3IEBACiB7CiAJaWYgKGNwbV91ZGJnX3R4ZGVzYykgewogI2lmZGVmIENPTkZJR19DUE0yCi0JCXNldGJhdCgxLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAxMDI0KjEwMjQsIF9QQUdFX0lPKTsKKwkJc2V0YmF0KDEsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDEwMjQqMTAyNCwgUEFHRV9LRVJORUxfTkNHKTsKICNlbmRpZgogCQl1ZGJnX3B1dGMgPSB1ZGJnX3B1dGNfY3BtOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggOTgxN2Y2My4uNzgwMjFkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTEsMTIgKzEsMTYgQEAKIC8qCiAgKiBNUEM4M3h4Lzg1eHgvODZ4eCBQQ0kvUENJRSBzdXBwb3J0IHJvdXRpbmcuCiAgKgotICogQ29weXJpZ2h0IDIwMDcsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBJbml0aWFsIGF1dGhvcjogWGlhbmdodWEgWGlhbyA8eC54aWFvQGZyZWVzY2FsZS5jb20+CiAgKiBSZWNvZGU6IFpIQU5HIFdFSSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CiAgKiBSZXdyaXRlIHRoZSByb3V0aW5nIGZvciBGcmVzY2FsZSBQQ0kgYW5kIFBDSSBFeHByZXNzCiAgKiAJUm95IFphbmcgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorICogTVBDODN4eCBQQ0ktRXhwcmVzcyBzdXBwb3J0OgorICogCVRvbnkgTGkgPHRvbnkubGlAZnJlZXNjYWxlLmNvbT4KKyAqIAlBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjcsNiArMzEsMjkgQEAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CiAKK3N0YXRpYyBpbnQgZnNsX3BjaWVfYnVzX2ZpeHVwOworCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogaWYgd2UgYXJlbid0IGEgUENJZSBkb24ndCBib3RoZXIgKi8KKwlpZiAoIXBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpCisJCXJldHVybjsKKworCWRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4OworCWZzbF9wY2llX2J1c19maXh1cCA9IDE7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmc2xfcGNpZV9jaGVja19saW5rKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwl1MzIgdmFsOworCisJZWFybHlfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJRV9MVFNTTSwgJnZhbCk7CisJaWYgKHZhbCA8IFBDSUVfTFRTU01fTDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQogc3RhdGljIGludCBfX2luaXQgc2V0dXBfb25lX2F0bXUoc3RydWN0IGNjc3JfcGNpIF9faW9tZW0gKnBjaSwKIAl1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLApAQCAtMTU5LDI4ICsxODYsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZnNsX3BjaWVfYnVzX2ZpeHVwOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyogaWYgd2UgYXJlbid0IGEgUENJZSBkb24ndCBib3RoZXIgKi8KLQlpZiAoIXBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpCi0JCXJldHVybiA7Ci0KLQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgODsKLQlmc2xfcGNpZV9idXNfZml4dXAgPSAxOwotCXJldHVybiA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZzbF9wY2llX2NoZWNrX2xpbmsoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXUzMiB2YWw7Ci0JZWFybHlfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJRV9MVFNTTSwgJnZhbCk7Ci0JaWYgKHZhbCA8IFBDSUVfTFRTU01fTDApCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiB2b2lkIGZzbF9wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikgYnVzLT5zeXNkYXRhOwpAQCAtMjk0LDggKzI5OSwxODQgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDXzg1eHggfHwgQ09ORklHX1BQQ184Nnh4ICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfODN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX01QQzUxMngpCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTRFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE0LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE1RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODM3N0UsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzcsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzhFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4Mzc4LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworCitzdHJ1Y3QgbXBjODN4eF9wY2llX3ByaXYgeworCXZvaWQgX19pb21lbSAqY2ZnX3R5cGUwOworCXZvaWQgX19pb21lbSAqY2ZnX3R5cGUxOworCXUzMiBkZXZfYmFzZTsKK307CisKKy8qCisgKiBXaXRoIHRoZSBjb252ZW50aW9uIG9mIHUtYm9vdCwgdGhlIFBDSUUgb3V0Ym91bmQgd2luZG93IDAgc2VydmVzCisgKiBhcyBjb25maWd1cmF0aW9uIHRyYW5zYWN0aW9ucyBvdXRib3VuZC4KKyAqLworI2RlZmluZSBQRVhfT1VUV0lOMF9CQVIJCTB4Q0E0CisjZGVmaW5lIFBFWF9PVVRXSU4wX1RBTAkJMHhDQTgKKyNkZWZpbmUgUEVYX09VVFdJTjBfVEFICQkweENBQworCitzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV9leGNsdWRlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gYnVzLT5zeXNkYXRhOworCisJaWYgKGhvc2UtPmluZGlyZWN0X3R5cGUgJiBQUENfSU5ESVJFQ1RfVFlQRV9OT19QQ0lFX0xJTkspCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciB0aGUgSFcgYnVnOiBmb3IgVHlwZSAwIGNvbmZpZ3VyZSB0cmFuc2FjdGlvbnMgdGhlCisJICogUENJLUUgY29udHJvbGxlciBkb2VzIG5vdCBjaGVjayB0aGUgZGV2aWNlIG51bWJlciBiaXRzIGFuZCBqdXN0CisJICogYXNzdW1lcyB0aGF0IHRoZSBkZXZpY2UgbnVtYmVyIGJpdHMgYXJlIDAuCisJICovCisJaWYgKGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vIHx8CisJCQlidXMtPnByaW1hcnkgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pIHsKKwkJaWYgKGRldmZuICYgMHhmOCkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UpIHsKKwkJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuKSkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqbXBjODN4eF9wY2llX3JlbWFwX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgbXBjODN4eF9wY2llX3ByaXYgKnBjaWUgPSBob3NlLT5kbi0+ZGF0YTsKKwl1OCBidXNfbm8gPSBidXMtPm51bWJlciAtIGhvc2UtPmZpcnN0X2J1c25vOworCXUzMiBkZXZfYmFzZSA9IGJ1c19ubyA8PCAyNCB8IGRldmZuIDw8IDE2OworCWludCByZXQ7CisKKwlyZXQgPSBtcGM4M3h4X3BjaWVfZXhjbHVkZV9kZXZpY2UoYnVzLCBkZXZmbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlvZmZzZXQgJj0gMHhmZmY7CisKKwkvKiBUeXBlIDAgKi8KKwlpZiAoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pCisJCXJldHVybiBwY2llLT5jZmdfdHlwZTAgKyBvZmZzZXQ7CisKKwlpZiAocGNpZS0+ZGV2X2Jhc2UgPT0gZGV2X2Jhc2UpCisJCWdvdG8gbWFwcGVkOworCisJb3V0X2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfVEFMLCBkZXZfYmFzZSk7CisKKwlwY2llLT5kZXZfYmFzZSA9IGRldl9iYXNlOworbWFwcGVkOgorCXJldHVybiBwY2llLT5jZmdfdHlwZTEgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9wY2llX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCit7CisJdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKKworCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOworCWlmICghY2ZnX2FkZHIpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJKnZhbCA9IGluXzgoY2ZnX2FkZHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSBpbl9sZTE2KGNmZ19hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnZhbCA9IGluX2xlMzIoY2ZnX2FkZHIpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmNmZ19hZGRyOworCisJY2ZnX2FkZHIgPSBtcGM4M3h4X3BjaWVfcmVtYXBfY2ZnKGJ1cywgZGV2Zm4sIG9mZnNldCk7CisJaWYgKCFjZmdfYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlvdXRfOChjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXRfbGUxNihjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb3V0X2xlMzIoY2ZnX2FkZHIsIHZhbCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtcGM4M3h4X3BjaWVfb3BzID0geworCS5yZWFkID0gbXBjODN4eF9wY2llX3JlYWRfY29uZmlnLAorCS53cml0ZSA9IG1wYzgzeHhfcGNpZV93cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3BjaWVfc2V0dXAoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZWcpCit7CisJc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2ICpwY2llOworCXUzMiBjZmdfYmFyOworCWludCByZXQgPSAtRU5PTUVNOworCisJcGNpZSA9IHphbGxvY19tYXliZV9ib290bWVtKHNpemVvZigqcGNpZSksIEdGUF9LRVJORUwpOworCWlmICghcGNpZSkKKwkJcmV0dXJuIHJldDsKKworCXBjaWUtPmNmZ190eXBlMCA9IGlvcmVtYXAocmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWcpKTsKKwlpZiAoIXBjaWUtPmNmZ190eXBlMCkKKwkJZ290byBlcnIwOworCisJY2ZnX2JhciA9IGluX2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfQkFSKTsKKwlpZiAoIWNmZ19iYXIpIHsKKwkJLyogUENJLUUgaXNuJ3QgY29uZmlndXJlZC4gKi8KKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCXBjaWUtPmNmZ190eXBlMSA9IGlvcmVtYXAoY2ZnX2JhciwgMHgxMDAwKTsKKwlpZiAoIXBjaWUtPmNmZ190eXBlMSkKKwkJZ290byBlcnIxOworCisJV0FSTl9PTihob3NlLT5kbi0+ZGF0YSk7CisJaG9zZS0+ZG4tPmRhdGEgPSBwY2llOworCWhvc2UtPm9wcyA9ICZtcGM4M3h4X3BjaWVfb3BzOworCisJb3V0X2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfVEFILCAwKTsKKwlvdXRfbGUzMihwY2llLT5jZmdfdHlwZTAgKyBQRVhfT1VUV0lOMF9UQUwsIDApOworCisJaWYgKGZzbF9wY2llX2NoZWNrX2xpbmsoaG9zZSkpCisJCWhvc2UtPmluZGlyZWN0X3R5cGUgfD0gUFBDX0lORElSRUNUX1RZUEVfTk9fUENJRV9MSU5LOworCisJcmV0dXJuIDA7CitlcnIxOgorCWlvdW5tYXAocGNpZS0+Y2ZnX3R5cGUwKTsKK2VycjA6CisJa2ZyZWUocGNpZSk7CisJcmV0dXJuIHJldDsKKworfQorCiBpbnQgX19pbml0IG1wYzgzeHhfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKKwlpbnQgcmV0OwogCWludCBsZW47CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCXN0cnVjdCByZXNvdXJjZSByc3JjX3JlZzsKQEAgLTMwMyw2ICs0ODQsMTEgQEAKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShkZXYpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuXG4iLAorCQkJICAgZGV2LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKIAogCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCkBAIC0zNTAsNyArNTM2LDE0IEBACiAJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOwogCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOwogCi0Jc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDQsIDApOworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJmc2wsbXBjODMxNC1wY2llIikpIHsKKwkJcmV0ID0gbXBjODN4eF9wY2llX3NldHVwKGhvc2UsICZyc3JjX3JlZyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjA7CisJfSBlbHNlIHsKKwkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LAorCQkJCSAgIHJzcmNfY2ZnLnN0YXJ0ICsgNCwgMCk7CisJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRlNMIFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKIAkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKQEAgLTM2NSw1ICs1NTgsOCBAQAogCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCBwcmltYXJ5KTsKIAogCXJldHVybiAwOworZXJyMDoKKwlwY2liaW9zX2ZyZWVfY29udHJvbGxlcihob3NlKTsKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfODN4eCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCAxMTVjYjE2Li5hMDFjODlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KQEAgLTMyOCw2ICszMjksOSBAQAogCQlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfZGF0YTsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcCA9IE5VTEw7CiAKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKKwkJCWNvbnRpbnVlOworCiAJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKIAkJbWVtc2V0KCZ1c2JfZGF0YSwgMCwgc2l6ZW9mKHVzYl9kYXRhKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggOWE4OWNkMy4uYTg2ZDNjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKQEAgLTU2OCw4ICs1NjgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCi0JdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2spOwotCXRlbXAgfD0gKDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CisJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CiAKIAkvKiBtYigpIGNhbid0IGd1YXJhbnRlZSB0aGF0IGFjayBpcyBmaW5pc2hlZC4gIEJ1dCBpdCBkb2VzIGZpbmlzaApAQCAtNTkyLDggKzU5MSw3IEBACiAJdGVtcCAmPSB+KDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrLCB0ZW1wKTsKIAotCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrKTsKLQl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCXRlbXAgPSAxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2ssIHRlbXApOwogCiAJLyogbWIoKSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhY2sgaXMgZmluaXNoZWQuICBCdXQgaXQgZG9lcyBmaW5pc2gKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKaW5kZXggZjg0MjE3Yi4uNWEzMmNiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogI2RlZmluZSBjaGVjayh4KQlcCiAJaWYgKCEoeCkpIHByaW50aygibXNpX2JpdG1hcDogdGVzdCBmYWlsZWQgYXQgbGluZSAlZFxuIiwgX19MSU5FX18pOwogCi12b2lkIHRlc3RfYmFzaWNzKHZvaWQpCit2b2lkIF9faW5pdCB0ZXN0X2Jhc2ljcyh2b2lkKQogewogCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKIAlpbnQgaSwgc2l6ZSA9IDUxMjsKQEAgLTE4Niw3ICsxODYsNyBAQAogCWtmcmVlKGJtcC5iaXRtYXApOwogfQogCi12b2lkIHRlc3Rfb2Zfbm9kZSh2b2lkKQordm9pZCBfX2luaXQgdGVzdF9vZl9ub2RlKHZvaWQpCiB7CiAJdTMyIHByb3BfZGF0YVtdID0geyAxMCwgMTAsIDI1LCAzLCA0MCwgMSwgMTAwLCAxMDAsIDIwMCwgMjAgfTsKIAljb25zdCBjaGFyICpleHBlY3RlZF9zdHIgPSAiMC05LDIwLTI0LDI4LTM5LDQxLTk5LDIyMC0yNTUiOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJa2ZyZWUoYm1wLmJpdG1hcCk7CiB9CiAKLWludCBtc2lfYml0bWFwX3NlbGZ0ZXN0KHZvaWQpCitpbnQgX19pbml0IG1zaV9iaXRtYXBfc2VsZnRlc3Qodm9pZCkKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiUnVubmluZyBNU0kgYml0bWFwIHNlbGYtdGVzdHMgLi4uXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMKaW5kZXggYzg1ODc0OS4uYWFhOTE1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG1pX2RhdGEgKmRhdGE7CiAKLXN0YXRpYyBpbnQgcG1pX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBwbWlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXU4IHR5cGU7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCA1NTU4ZDkzLi42YTJkNDczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtMTgzOSw2ICsxODM5LDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCisJcHBjX3BjaV9mbGFncyB8PSBQUENfUENJX0VOQUJMRV9QUk9DX0RPTUFJTlMgfCBQUENfUENJX0NPTVBBVF9ET01BSU5fMDsKKwogI2lmZGVmIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJpYm0scGxiLXBjaWV4IikKIAkJcHBjNHh4X3Byb2JlX3BjaWV4X2JyaWRnZShucCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBhNjRlMzg4Li5lMjc2NTViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTMxMCw3ICszMTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7CiAJLmZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzgsCisJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwKKwlTT0NBTV9EQVRBV0lEVEhfOCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2V1X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCA5NGMwMjk2Li42Zjk0ZjE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19wY2E5NTY0X3BmX3BsYXRmb3JtX2RhdGEgaTJjX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmdwaW8JCQk9IDAsCiAJLmkyY19jbG9ja19zcGVlZAk9IEkyQ19QQ0FfQ09OXzMzMGtIeiwKLQkudGltZW91dAkJPSAxMDAsCisJLnRpbWVvdXQJCT0gSFosCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmNfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IGJjMzViNGMuLjRmZDZhNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTM1Miw4ICszNTIsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7Ci0JLmZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgXAotCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCwKKwkuZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORworCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSAorCXwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlnb3JfY2V1X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYzkwMTJiOS4uNDUxNjFiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC03ODcsNiArNzg3LDExIEBACiAJICAgQWRkaXRpb25hbCBzdXBwb3J0IGZvciBBTUQgc3BlY2lmaWMgTUNFIGZlYXR1cmVzIHN1Y2ggYXMKIAkgICB0aGUgRFJBTSBFcnJvciBUaHJlc2hvbGQuCiAKK2NvbmZpZyBYODZfTUNFX1RIUkVTSE9MRAorCWRlcGVuZHMgb24gWDg2X01DRV9BTUQgfHwgWDg2X01DRV9JTlRFTAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIFg4Nl9NQ0VfTk9ORkFUQUwKIAl0cmlzdGF0ZSAiQ2hlY2sgZm9yIG5vbi1mYXRhbCBlcnJvcnMgb24gQU1EIEF0aGxvbi9EdXJvbiAvIEludGVsIFBlbnRpdW0gNCIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBYODZfTUNFCkBAIC05MzAsNiArOTM1LDEyIEBACiAJICB3aXRoIG1ham9yIDIwMyBhbmQgbWlub3JzIDAgdG8gMzEgZm9yIC9kZXYvY3B1LzAvY3B1aWQgdG8KIAkgIC9kZXYvY3B1LzMxL2NwdWlkLgogCitjb25maWcgWDg2X0NQVV9ERUJVRworCXRyaXN0YXRlICIvc3lzL2tlcm5lbC9kZWJ1Zy94ODYvY3B1LyogLSBDUFUgRGVidWcgc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uLCB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIHg4NiBDUFVzCisJICBpbmZvcm1hdGlvbiB0aHJvdWdoIGRlYnVnZnMuCisKIGNob2ljZQogCXByb21wdCAiSGlnaCBNZW1vcnkgU3VwcG9ydCIKIAlkZWZhdWx0IEhJR0hNRU00RyBpZiAhWDg2X05VTUFRCkBAIC0xMTIyLDcgKzExMzMsNyBAQAogCiBjb25maWcgTk9ERVNfU0hJRlQKIAlpbnQgIk1heGltdW0gTlVNQSBOb2RlcyAoYXMgYSBwb3dlciBvZiAyKSIgaWYgIU1BWFNNUAotCXJhbmdlIDEgOSAgIGlmIFg4Nl82NAorCXJhbmdlIDEgOQogCWRlZmF1bHQgIjkiIGlmIE1BWFNNUAogCWRlZmF1bHQgIjYiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQpAQCAtMTQzMCw3ICsxNDQxLDcgQEAKIGNvbmZpZyBLRVhFQ19KVU1QCiAJYm9vbCAia2V4ZWMganVtcCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBLRVhFQyAmJiBISUJFUk5BVElPTgogCS0tLWhlbHAtLS0KIAkgIEp1bXAgYmV0d2VlbiBvcmlnaW5hbCBrZXJuZWwgYW5kIGtleGVjZWQga2VybmVsIGFuZCBpbnZva2UKIAkgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBhOTVlYWYwLi45MjRlMTU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNDU2LDI0ICs0NTYsOSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgQ1BVX1NVUF9DRU5UQVVSXzMyCitjb25maWcgQ1BVX1NVUF9DRU5UQVVSCiAJZGVmYXVsdCB5CiAJYm9vbCAiU3VwcG9ydCBDZW50YXVyIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKLQlkZXBlbmRzIG9uICE2NEJJVAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBkZXRlY3Rpb24sIHR1bmluZ3MgYW5kIHF1aXJrcyBmb3IgQ2VudGF1ciBwcm9jZXNzb3JzCi0KLQkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYQotCSAgQ2VudGF1ciBDUFUuIERpc2FibGluZyB0aGlzIG9wdGlvbiBvbiBvdGhlciB0eXBlcyBvZiBDUFVzCi0JICBtYWtlcyB0aGUga2VybmVsIGEgdGlueSBiaXQgc21hbGxlci4gRGlzYWJsaW5nIGl0IG9uIGEgQ2VudGF1cgotCSAgQ1BVIG1pZ2h0IHJlbmRlciB0aGUga2VybmVsIHVuYm9vdGFibGUuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDUFVfU1VQX0NFTlRBVVJfNjQKLQlkZWZhdWx0IHkKLQlib29sICJTdXBwb3J0IENlbnRhdXIgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAotCWRlcGVuZHMgb24gNjRCSVQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIENlbnRhdXIgcHJvY2Vzc29ycwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IDE4MzYxOTEuLmYwNWQ4YzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0xNTMsMzQgKzE1MywyMyBAQAogCiBib290IDo9IGFyY2gveDg2L2Jvb3QKIAotUEhPTlkgKz0gekltYWdlIGJ6SW1hZ2UgY29tcHJlc3NlZCB6bGlsbyBiemxpbG8gXAotICAgICAgICAgemRpc2sgYnpkaXNrIGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGlzb2ltYWdlIGluc3RhbGwKK0JPT1RfVEFSR0VUUyA9IGJ6bGlsbyBiemRpc2sgZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaXNvaW1hZ2UgaW5zdGFsbAorCitQSE9OWSArPSBiekltYWdlICQoQk9PVF9UQVJHRVRTKQogCiAjIERlZmF1bHQga2VybmVsIHRvIGJ1aWxkCiBhbGw6IGJ6SW1hZ2UKIAogIyBLQlVJTERfSU1BR0Ugc3BlY2lmeSB0YXJnZXQgaW1hZ2UgYmVpbmcgYnVpbHQKLSAgICAgICAgICAgICAgICAgICAgS0JVSUxEX0lNQUdFIDo9ICQoYm9vdCkvYnpJbWFnZQotekltYWdlIHpsaWxvIHpkaXNrOiBLQlVJTERfSU1BR0UgOj0gJChib290KS96SW1hZ2UKK0tCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL2J6SW1hZ2UKIAotekltYWdlIGJ6SW1hZ2U6IHZtbGludXgKK2J6SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoS0JVSUxEX0lNQUdFKQogCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2FyY2gvJChVVFNfTUFDSElORSkvYm9vdAogCSQoUSlsbiAtZnNuIC4uLy4uL3g4Ni9ib290L2J6SW1hZ2UgJChvYmp0cmVlKS9hcmNoLyQoVVRTX01BQ0hJTkUpL2Jvb3QvJEAKIAotY29tcHJlc3NlZDogekltYWdlCi0KLXpsaWxvIGJ6bGlsbzogdm1saW51eAotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSB6bGlsbwotCi16ZGlzayBiemRpc2s6IHZtbGludXgKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgemRpc2sKLQotZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaXNvaW1hZ2U6IHZtbGludXgKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgJEAKLQotaW5zdGFsbDoKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgaW5zdGFsbAorJChCT09UX1RBUkdFVFMpOiB2bWxpbnV4CisJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkQAogCiBQSE9OWSArPSB2ZHNvX2luc3RhbGwKIHZkc29faW5zdGFsbDoKQEAgLTIwNSw3ICsxOTQsMyBAQAogICBlY2hvICAnICAgICAgICAgICAgICAgICAgRkRBUkdTPSIuLi4iICBhcmd1bWVudHMgZm9yIHRoZSBib290ZWQga2VybmVsJwogICBlY2hvICAnICAgICAgICAgICAgICAgICAgRkRJTklUUkQ9ZmlsZSBpbml0cmQgZm9yIHRoZSBib290ZWQga2VybmVsJwogZW5kZWYKLQotQ0xFQU5fRklMRVMgKz0gYXJjaC94ODYvYm9vdC9mZGltYWdlIFwKLQkgICAgICAgYXJjaC94ODYvYm9vdC9pbWFnZS5pc28gXAotCSAgICAgICBhcmNoL3g4Ni9ib290L210b29scy5jb25mCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQppbmRleCBjNzBlZmY2Li5mYjczN2NlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKQEAgLTYsMjYgKzYsMjQgQEAKICMgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgQ29weXJpZ2h0IChDKSAxOTk0IGJ5IExpbnVzIFRvcnZhbGRzCisjIENoYW5nZWQgYnkgbWFueSwgbWFueSBjb250cmlidXRvcnMgb3ZlciB0aGUgeWVhcnMuCiAjCiAKICMgUk9PVF9ERVYgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHJvb3QtZGV2aWNlIHdoZW4gbWFraW5nIHRoZSBpbWFnZS4KICMgVGhpcyBjYW4gYmUgZWl0aGVyIEZMT1BQWSwgQ1VSUkVOVCwgL2Rldi94eHh4IG9yIGVtcHR5LCBpbiB3aGljaCBjYXNlCiAjIHRoZSBkZWZhdWx0IG9mIEZMT1BQWSBpcyB1c2VkIGJ5ICdidWlsZCcuCiAKLVJPT1RfREVWIDo9IENVUlJFTlQKK1JPT1RfREVWCTo9IENVUlJFTlQKIAogIyBJZiB5b3Ugd2FudCB0byBwcmVzZXQgdGhlIFNWR0EgbW9kZSwgdW5jb21tZW50IHRoZSBuZXh0IGxpbmUgYW5kCiAjIHNldCBTVkdBX01PREUgdG8gd2hhdGV2ZXIgbnVtYmVyIHlvdSB3YW50LgogIyBTZXQgaXQgdG8gLURTVkdBX01PREU9Tk9STUFMX1ZHQSBpZiB5b3UganVzdCB3YW50IHRoZSBFR0EvVkdBIG1vZGUuCiAjIFRoZSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgeW91IHdvdWxkIG9yZGluYXJpbHkgcHJlc3MgYXQgYm9vdHVwLgogCi1TVkdBX01PREUgOj0gLURTVkdBX01PREU9Tk9STUFMX1ZHQQorU1ZHQV9NT0RFCTo9IC1EU1ZHQV9NT0RFPU5PUk1BTF9WR0EKIAotIyBJZiB5b3Ugd2FudCB0aGUgUkFNIGRpc2sgZGV2aWNlLCBkZWZpbmUgdGhpcyB0byBiZSB0aGUgc2l6ZSBpbiBibG9ja3MuCi0KLSNSQU1ESVNLIDo9IC1EUkFNRElTSz01MTIKLQotdGFyZ2V0cwkJOj0gdm1saW51eC5iaW4gc2V0dXAuYmluIHNldHVwLmVsZiB6SW1hZ2UgYnpJbWFnZQordGFyZ2V0cwkJOj0gdm1saW51eC5iaW4gc2V0dXAuYmluIHNldHVwLmVsZiBiekltYWdlCit0YXJnZXRzCQkrPSBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpbWFnZS5pc28gbXRvb2xzLmNvbmYKIHN1YmRpci0JCTo9IGNvbXByZXNzZWQKIAogc2V0dXAteQkJKz0gYTIwLm8gY21kbGluZS5vIGNvcHkubyBjcHUubyBjcHVjaGVjay5vIGVkZC5vCkBAIC03MSwxNyArNjksMTMgQEAKIEtCVUlMRF9DRkxBR1MgKz0gICAkKGNhbGwgY2Mtb3B0aW9uLC1tMzIpCiBLQlVJTERfQUZMQUdTCTo9ICQoS0JVSUxEX0NGTEFHUykgLURfX0FTU0VNQkxZX18KIAotJChvYmopL3pJbWFnZTogIGFzZmxhZ3MteSA6PSAkKFNWR0FfTU9ERSkgJChSQU1ESVNLKQotJChvYmopL2J6SW1hZ2U6IGNjZmxhZ3MteSA6PSAtRF9fQklHX0tFUk5FTF9fCi0kKG9iaikvYnpJbWFnZTogYXNmbGFncy15IDo9ICQoU1ZHQV9NT0RFKSAkKFJBTURJU0spIC1EX19CSUdfS0VSTkVMX18KLSQob2JqKS9iekltYWdlOiBCVUlMREZMQUdTICAgOj0gLWIKKyQob2JqKS9iekltYWdlOiBhc2ZsYWdzLXkgIDo9ICQoU1ZHQV9NT0RFKQogCiBxdWlldF9jbWRfaW1hZ2UgPSBCVUlMRCAgICRACi1jbWRfaW1hZ2UgPSAkKG9iaikvdG9vbHMvYnVpbGQgJChCVUlMREZMQUdTKSAkKG9iaikvc2V0dXAuYmluIFwKLQkgICAgJChvYmopL3ZtbGludXguYmluICQoUk9PVF9ERVYpID4gJEAKK2NtZF9pbWFnZSA9ICQob2JqKS90b29scy9idWlsZCAkKG9iaikvc2V0dXAuYmluICQob2JqKS92bWxpbnV4LmJpbiBcCisJJChST09UX0RFVikgPiAkQAogCi0kKG9iaikvekltYWdlICQob2JqKS9iekltYWdlOiAkKG9iaikvc2V0dXAuYmluIFwKLQkJCSAgICAgICQob2JqKS92bWxpbnV4LmJpbiAkKG9iaikvdG9vbHMvYnVpbGQgRk9SQ0UKKyQob2JqKS9iekltYWdlOiAkKG9iaikvc2V0dXAuYmluICQob2JqKS92bWxpbnV4LmJpbiAkKG9iaikvdG9vbHMvYnVpbGQgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxpbWFnZSkKIAlAZWNobyAnS2VybmVsOiAkQCBpcyByZWFkeScgJyAoIydgY2F0IC52ZXJzaW9uYCcpJwogCkBAIC0xMTYsOSArMTEwLDExIEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKLSMgU2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhcHBlbmQgYXJndW1lbnRzIHRvIHRoZSB6ZGlzay9mZGltYWdlL2lzb2ltYWdlIGtlcm5lbAorIyBTZXQgdGhpcyBpZiB5b3Ugd2FudCB0byBwYXNzIGFwcGVuZCBhcmd1bWVudHMgdG8gdGhlCisjIGJ6ZGlzay9mZGltYWdlL2lzb2ltYWdlIGtlcm5lbAogRkRBUkdTID0KLSMgU2V0IHRoaXMgaWYgeW91IHdhbnQgYW4gaW5pdHJkIGluY2x1ZGVkIHdpdGggdGhlIHpkaXNrL2ZkaW1hZ2UvaXNvaW1hZ2Uga2VybmVsCisjIFNldCB0aGlzIGlmIHlvdSB3YW50IGFuIGluaXRyZCBpbmNsdWRlZCB3aXRoIHRoZQorIyBiemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKIEZESU5JVFJEID0KIAogaW1hZ2VfY21kbGluZSA9IGRlZmF1bHQgbGludXggJChGREFSR1MpICQoaWYgJChGRElOSVRSRCksaW5pdHJkPWluaXRyZC5pbWcsKQpAQCAtMTI3LDcgKzEyMyw3IEBACiAJc2VkIC1lICdzfEBPQkpAfCQob2JqKXxnJyA8ICQ8ID4gJEAKIAogIyBUaGlzIHJlcXVpcmVzIHdyaXRlIGFjY2VzcyB0byAvZGV2L2ZkMAotemRpc2s6ICQoQk9PVElNQUdFKSAkKG9iaikvbXRvb2xzLmNvbmYKK2J6ZGlzazogJChvYmopL2J6SW1hZ2UgJChvYmopL210b29scy5jb25mCiAJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1mb3JtYXQgYToJCQk7IHN5bmMKIAlzeXNsaW51eCAvZGV2L2ZkMAkJCQkJOyBzeW5jCiAJZWNobyAnJChpbWFnZV9jbWRsaW5lKScgfCBcCkBAIC0xMzUsMTAgKzEzMSwxMCBAQAogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAnJChGRElOSVRSRCknIGE6aW5pdHJkLmltZyA7IFwKIAlmaQotCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKEJPT1RJTUFHRSkgYTpsaW51eAk7IHN5bmMKKwlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChvYmopL2J6SW1hZ2UgYTpsaW51eAk7IHN5bmMKIAogIyBUaGVzZSByZXF1aXJlIGJlaW5nIHJvb3Qgb3IgaGF2aW5nIHN5c2xpbnV4IDIuMDIgb3IgaGlnaGVyIGluc3RhbGxlZAotZmRpbWFnZSBmZGltYWdlMTQ0OiAkKEJPT1RJTUFHRSkgJChvYmopL210b29scy5jb25mCitmZGltYWdlIGZkaW1hZ2UxNDQ6ICQob2JqKS9iekltYWdlICQob2JqKS9tdG9vbHMuY29uZgogCWRkIGlmPS9kZXYvemVybyBvZj0kKG9iaikvZmRpbWFnZSBicz0xMDI0IGNvdW50PTE0NDAKIAlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWZvcm1hdCB2OgkJCTsgc3luYwogCXN5c2xpbnV4ICQob2JqKS9mZGltYWdlCQkJCQk7IHN5bmMKQEAgLTE0Nyw5ICsxNDMsOSBAQAogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAnJChGRElOSVRSRCknIHY6aW5pdHJkLmltZyA7IFwKIAlmaQotCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKEJPT1RJTUFHRSkgdjpsaW51eAk7IHN5bmMKKwlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChvYmopL2J6SW1hZ2UgdjpsaW51eAk7IHN5bmMKIAotZmRpbWFnZTI4ODogJChCT09USU1BR0UpICQob2JqKS9tdG9vbHMuY29uZgorZmRpbWFnZTI4ODogJChvYmopL2J6SW1hZ2UgJChvYmopL210b29scy5jb25mCiAJZGQgaWY9L2Rldi96ZXJvIG9mPSQob2JqKS9mZGltYWdlIGJzPTEwMjQgY291bnQ9Mjg4MAogCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtZm9ybWF0IHc6CQkJOyBzeW5jCiAJc3lzbGludXggJChvYmopL2ZkaW1hZ2UJCQkJCTsgc3luYwpAQCAtMTU4LDkgKzE1NCw5IEBACiAJaWYgWyAtZiAnJChGRElOSVRSRCknIF0gOyB0aGVuIFwKIAkJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICckKEZESU5JVFJEKScgdzppbml0cmQuaW1nIDsgXAogCWZpCi0JTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQoQk9PVElNQUdFKSB3OmxpbnV4CTsgc3luYworCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKG9iaikvYnpJbWFnZSB3OmxpbnV4CTsgc3luYwogCi1pc29pbWFnZTogJChCT09USU1BR0UpCitpc29pbWFnZTogJChvYmopL2J6SW1hZ2UKIAktcm0gLXJmICQob2JqKS9pc29pbWFnZQogCW1rZGlyICQob2JqKS9pc29pbWFnZQogCWZvciBpIGluIGxpYiBsaWI2NCBzaGFyZSBlbmQgOyBkbyBcCkBAIC0xNzAsNyArMTY2LDcgQEAKIAkJZmkgOyBcCiAJCWlmIFsgJCRpID0gZW5kIF0gOyB0aGVuIGV4aXQgMSA7IGZpIDsgXAogCWRvbmUKLQljcCAkKEJPT1RJTUFHRSkgJChvYmopL2lzb2ltYWdlL2xpbnV4CisJY3AgJChvYmopL2J6SW1hZ2UgJChvYmopL2lzb2ltYWdlL2xpbnV4CiAJZWNobyAnJChpbWFnZV9jbWRsaW5lKScgPiAkKG9iaikvaXNvaW1hZ2UvaXNvbGludXguY2ZnCiAJaWYgWyAtZiAnJChGRElOSVRSRCknIF0gOyB0aGVuIFwKIAkJY3AgJyQoRkRJTklUUkQpJyAkKG9iaikvaXNvaW1hZ2UvaW5pdHJkLmltZyA7IFwKQEAgLTE4MSwxMiArMTc3LDEzIEBACiAJaXNvaHlicmlkICQob2JqKS9pbWFnZS5pc28gMj4vZGV2L251bGwgfHwgdHJ1ZQogCXJtIC1yZiAkKG9iaikvaXNvaW1hZ2UKIAotemxpbG86ICQoQk9PVElNQUdFKQorYnpsaWxvOiAkKG9iaikvYnpJbWFnZQogCWlmIFsgLWYgJChJTlNUQUxMX1BBVEgpL3ZtbGludXogXTsgdGhlbiBtdiAkKElOU1RBTExfUEFUSCkvdm1saW51eiAkKElOU1RBTExfUEFUSCkvdm1saW51ei5vbGQ7IGZpCiAJaWYgWyAtZiAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcCBdOyB0aGVuIG12ICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ubWFwICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ub2xkOyBmaQotCWNhdCAkKEJPT1RJTUFHRSkgPiAkKElOU1RBTExfUEFUSCkvdm1saW51egorCWNhdCAkKG9iaikvYnpJbWFnZSA+ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6CiAJY3AgU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvCiAJaWYgWyAteCAvc2Jpbi9saWxvIF07IHRoZW4gL3NiaW4vbGlsbzsgZWxzZSAvZXRjL2xpbG8vaW5zdGFsbDsgZmkKIAogaW5zdGFsbDoKLQlzaCAkKHNyY3RyZWUpLyQoc3JjKS9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgJChCT09USU1BR0UpIFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKKwlzaCAkKHNyY3RyZWUpLyQoc3JjKS9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgJChvYmopL2J6SW1hZ2UgXAorCQlTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2hlYWRlci5TIGIvYXJjaC94ODYvYm9vdC9oZWFkZXIuUwppbmRleCA3Y2NmZjQ4Li41ZDg0ZDFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2hlYWRlci5TCisrKyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKQEAgLTI0LDEyICsyNCw4IEBACiAjaW5jbHVkZSAiYm9vdC5oIgogI2luY2x1ZGUgIm9mZnNldHMuaCIKIAotU0VUVVBTRUNUUwk9IDQJCQkvKiBkZWZhdWx0IG5yIG9mIHNldHVwLXNlY3RvcnMgKi8KIEJPT1RTRUcJCT0gMHgwN0MwCQkvKiBvcmlnaW5hbCBhZGRyZXNzIG9mIGJvb3Qtc2VjdG9yICovCi1TWVNTRUcJCT0gREVGX1NZU1NFRwkJLyogc3lzdGVtIGxvYWRlZCBhdCAweDEwMDAwICg2NTUzNikgKi8KLVNZU1NJWkUJCT0gREVGX1NZU1NJWkUJCS8qIHN5c3RlbSBzaXplOiAjIG9mIDE2LWJ5dGUgY2xpY2tzICovCi0JCQkJCS8qIHRvIGJlIGxvYWRlZCAqLwotUk9PVF9ERVYJPSAwCQkJLyogUk9PVF9ERVYgaXMgbm93IHdyaXR0ZW4gYnkgImJ1aWxkIiAqLworU1lTU0VHCQk9IDB4MTAwMAkJLyogaGlzdG9yaWNhbCBsb2FkIGFkZHJlc3MgPj4gNCAqLwogCiAjaWZuZGVmIFNWR0FfTU9ERQogI2RlZmluZSBTVkdBX01PREUgQVNLX1ZHQQpAQCAtOTcsMTIgKzkzLDEyIEBACiAJLnNlY3Rpb24gIi5oZWFkZXIiLCAiYSIKIAkuZ2xvYmwJaGRyCiBoZHI6Ci1zZXR1cF9zZWN0czoJLmJ5dGUgU0VUVVBTRUNUUworc2V0dXBfc2VjdHM6CS5ieXRlIDAJCQkvKiBGaWxsZWQgaW4gYnkgYnVpbGQuYyAqLwogcm9vdF9mbGFnczoJLndvcmQgUk9PVF9SRE9OTFkKLXN5c3NpemU6CS5sb25nIFNZU1NJWkUKLXJhbV9zaXplOgkud29yZCBSQU1ESVNLCitzeXNzaXplOgkubG9uZyAwCQkJLyogRmlsbGVkIGluIGJ5IGJ1aWxkLmMgKi8KK3JhbV9zaXplOgkud29yZCAwCQkJLyogT2Jzb2xldGUgKi8KIHZpZF9tb2RlOgkud29yZCBTVkdBX01PREUKLXJvb3RfZGV2Ogkud29yZCBST09UX0RFVgorcm9vdF9kZXY6CS53b3JkIDAJCQkvKiBGaWxsZWQgaW4gYnkgYnVpbGQuYyAqLwogYm9vdF9mbGFnOgkud29yZCAweEFBNTUKIAogCSMgb2Zmc2V0IDUxMiwgZW50cnkgcG9pbnQKQEAgLTEyMywxNCArMTE5LDE1IEBACiAJCQkJCSMgb3IgZWxzZSBvbGQgbG9hZGxpbi0xLjUgd2lsbCBmYWlsKQogCQkuZ2xvYmwgcmVhbG1vZGVfc3d0Y2gKIHJlYWxtb2RlX3N3dGNoOgkud29yZAkwLCAwCQkjIGRlZmF1bHRfc3dpdGNoLCBTRVRVUFNFRwotc3RhcnRfc3lzX3NlZzoJLndvcmQJU1lTU0VHCitzdGFydF9zeXNfc2VnOgkud29yZAlTWVNTRUcJCSMgb2Jzb2xldGUgYW5kIG1lYW5pbmdsZXNzLCBidXQganVzdAorCQkJCQkjIGluIGNhc2Ugc29tZXRoaW5nIGRlY2lkZWQgdG8gInVzZSIgaXQKIAkJLndvcmQJa2VybmVsX3ZlcnNpb24tNTEyICMgcG9pbnRpbmcgdG8ga2VybmVsIHZlcnNpb24gc3RyaW5nCiAJCQkJCSMgYWJvdmUgc2VjdGlvbiBvZiBoZWFkZXIgaXMgY29tcGF0aWJsZQogCQkJCQkjIHdpdGggbG9hZGxpbi0xLjUgKGhlYWRlciB2MS41KS4gRG9uJ3QKIAkJCQkJIyBjaGFuZ2UgaXQuCiAKLXR5cGVfb2ZfbG9hZGVyOgkuYnl0ZQkwCQkjID0gMCwgb2xkIG9uZSAoTElMTywgTG9hZGxpbiwKLQkJCQkJIyAgICAgIEJvb3RsaW4sIFNZU0xYLCBib290c2VjdC4uLikKK3R5cGVfb2ZfbG9hZGVyOgkuYnl0ZQkwCQkjIDAgbWVhbnMgYW5jaWVudCBib290bG9hZGVyLCBuZXdlcgorCQkJCQkjIGJvb3Rsb2FkZXJzIGtub3cgdG8gY2hhbmdlIHRoaXMuCiAJCQkJCSMgU2VlIERvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBmb3IKIAkJCQkJIyBhc3NpZ25lZCBpZHMKIApAQCAtMTQyLDExICsxMzksNyBAQAogCQkJCQkjIHNwYWNlIGJlaGluZCBzZXR1cC5TIGNhbiBiZSB1c2VkIGZvcgogCQkJCQkjIGhlYXAgcHVycG9zZXMuCiAJCQkJCSMgT25seSB0aGUgbG9hZGVyIGtub3dzIHdoYXQgaXMgZnJlZQotI2lmbmRlZiBfX0JJR19LRVJORUxfXwotCQkuYnl0ZQkwCi0jZWxzZQogCQkuYnl0ZQlMT0FERURfSElHSAotI2VuZGlmCiAKIHNldHVwX21vdmVfc2l6ZTogLndvcmQgIDB4ODAwMAkJIyBzaXplIHRvIG1vdmUsIHdoZW4gc2V0dXAgaXMgbm90CiAJCQkJCSMgbG9hZGVkIGF0IDB4OTAwMDAuIFdlIHdpbGwgbW92ZSBzZXR1cApAQCAtMTU3LDExICsxNTAsNyBAQAogCiBjb2RlMzJfc3RhcnQ6CQkJCSMgaGVyZSBsb2FkZXJzIGNhbiBwdXQgYSBkaWZmZXJlbnQKIAkJCQkJIyBzdGFydCBhZGRyZXNzIGZvciAzMi1iaXQgY29kZS4KLSNpZm5kZWYgX19CSUdfS0VSTkVMX18KLQkJLmxvbmcJMHgxMDAwCQkjICAgMHgxMDAwID0gZGVmYXVsdCBmb3IgekltYWdlCi0jZWxzZQogCQkubG9uZwkweDEwMDAwMAkjIDB4MTAwMDAwID0gZGVmYXVsdCBmb3IgYmlnIGtlcm5lbAotI2VuZGlmCiAKIHJhbWRpc2tfaW1hZ2U6CS5sb25nCTAJCSMgYWRkcmVzcyBvZiBsb2FkZWQgcmFtZGlzayBpbWFnZQogCQkJCQkjIEhlcmUgdGhlIGxvYWRlciBwdXRzIHRoZSAzMi1iaXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvcG0uYyBiL2FyY2gveDg2L2Jvb3QvcG0uYwppbmRleCA4NWExY2Q4Li44MDYyZjg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3BtLmMKKysrIGIvYXJjaC94ODYvYm9vdC9wbS5jCkBAIC0zMyw0NyArMzMsNiBAQAogfQogCiAvKgotICogQSB6SW1hZ2Uga2VybmVsIGlzIGxvYWRlZCBhdCAweDEwMDAwIGJ1dCB3YW50cyB0byBydW4gYXQgMHgxMDAwLgotICogQSBiekltYWdlIGtlcm5lbCBpcyBsb2FkZWQgYW5kIHJ1bnMgYXQgMHgxMDAwMDAuCi0gKi8KLXN0YXRpYyB2b2lkIG1vdmVfa2VybmVsX2Fyb3VuZCh2b2lkKQotewotCS8qIE5vdGU6IHJlbHkgb24gdGhlIGNvbXBpbGUtdGltZSBvcHRpb24gaGVyZSByYXRoZXIgdGhhbgotCSAgIHRoZSBMT0FERURfSElHSCBmbGFnLiAgVGhlIFFlbXUga2VybmVsIGxvYWRlciB1bmNvbmRpdGlvbmFsbHkKLQkgICBzZXRzIHRoZSBsb2FkZmxhZ3MgdG8gemVyby4gKi8KLSNpZm5kZWYgX19CSUdfS0VSTkVMX18KLQl1MTYgZHN0X3NlZywgc3JjX3NlZzsKLQl1MzIgc3lzc2l6ZTsKLQotCWRzdF9zZWcgPSAgMHgxMDAwID4+IDQ7Ci0Jc3JjX3NlZyA9IDB4MTAwMDAgPj4gNDsKLQlzeXNzaXplID0gYm9vdF9wYXJhbXMuaGRyLnN5c3NpemU7IC8qIFNpemUgaW4gMTYtYnl0ZSBwYXJhZ3JhcGhzICovCi0KLQl3aGlsZSAoc3lzc2l6ZSkgewotCQlpbnQgcGFyYXMgID0gKHN5c3NpemUgPj0gMHgxMDAwKSA/IDB4MTAwMCA6IHN5c3NpemU7Ci0JCWludCBkd29yZHMgPSBwYXJhcyA8PCAyOwotCi0JCWFzbSB2b2xhdGlsZSgicHVzaHcgJSVlcyA7ICIKLQkJCSAgICAgInB1c2h3ICUlZHMgOyAiCi0JCQkgICAgICJtb3Z3ICUxLCUlZXMgOyAiCi0JCQkgICAgICJtb3Z3ICUyLCUlZHMgOyAiCi0JCQkgICAgICJ4b3J3ICUlZGksJSVkaSA7ICIKLQkJCSAgICAgInhvcncgJSVzaSwlJXNpIDsgIgotCQkJICAgICAicmVwO21vdnNsIDsgIgotCQkJICAgICAicG9wdyAlJWRzIDsgIgotCQkJICAgICAicG9wdyAlJWVzIgotCQkJICAgICA6ICIrYyIgKGR3b3JkcykKLQkJCSAgICAgOiAiciIgKGRzdF9zZWcpLCAiciIgKHNyY19zZWcpCi0JCQkgICAgIDogImVzaSIsICJlZGkiKTsKLQotCQlzeXNzaXplIC09IHBhcmFzOwotCQlkc3Rfc2VnICs9IHBhcmFzOwotCQlzcmNfc2VnICs9IHBhcmFzOwotCX0KLSNlbmRpZgotfQotCi0vKgogICogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhdCB0aGUgbGVnYWN5IFBJQy4KICAqLwogc3RhdGljIHZvaWQgbWFza19hbGxfaW50ZXJydXB0cyh2b2lkKQpAQCAtMTQ3LDkgKzEwNiw2IEBACiAJLyogSG9vayBiZWZvcmUgbGVhdmluZyByZWFsIG1vZGUsIGFsc28gZGlzYWJsZXMgaW50ZXJydXB0cyAqLwogCXJlYWxtb2RlX3N3aXRjaF9ob29rKCk7CiAKLQkvKiBNb3ZlIHRoZSBrZXJuZWwvc2V0dXAgdG8gdGhlaXIgZmluYWwgcmVzdGluZyBwbGFjZXMgKi8KLQltb3ZlX2tlcm5lbF9hcm91bmQoKTsKLQogCS8qIEVuYWJsZSB0aGUgQTIwIGdhdGUgKi8KIAlpZiAoZW5hYmxlX2EyMCgpKSB7CiAJCXB1dHMoIkEyMCBnYXRlIG5vdCByZXNwb25kaW5nLCB1bmFibGUgdG8gYm9vdC4uLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwppbmRleCAwMTljMTdhLi4zZTBlZGM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKQEAgLTQ3LDYgKzQ3LDcgQEAKIEVORFBST0MocHJvdGVjdGVkX21vZGVfanVtcCkKIAogCS5jb2RlMzIKKwkuc2VjdGlvbiAiLnRleHQzMiIsImF4IgogR0xPQkFMKGluX3BtMzIpCiAJIyBTZXQgdXAgZGF0YSBzZWdtZW50cyBmb3IgZmxhdCAzMi1iaXQgbW9kZQogCW1vdmwJJWVjeCwgJWRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAppbmRleCBkZjkyMzRiLi5iYjhkYzJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkCisrKyBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKQEAgLTE3LDcgKzE3LDggQEAKIAkuaGVhZGVyCQk6IHsgKiguaGVhZGVyKSB9CiAJLmluaXR0ZXh0CTogeyAqKC5pbml0dGV4dCkgfQogCS5pbml0ZGF0YQk6IHsgKiguaW5pdGRhdGEpIH0KLQkudGV4dAkJOiB7ICooLnRleHQqKSB9CisJLnRleHQJCTogeyAqKC50ZXh0KSB9CisJLnRleHQzMgkJOiB7ICooLnRleHQzMikgfQogCiAJLiA9IEFMSUdOKDE2KTsKIAkucm9kYXRhCQk6IHsgKigucm9kYXRhKikgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jIGIvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jCmluZGV4IDQ0ZGMxOTIuLmVlM2E0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYworKysgYi9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewotCWRpZSgiVXNhZ2U6IGJ1aWxkIFstYl0gc2V0dXAgc3lzdGVtIFtyb290ZGV2XSBbPiBpbWFnZV0iKTsKKwlkaWUoIlVzYWdlOiBidWlsZCBzZXR1cCBzeXN0ZW0gW3Jvb3RkZXZdIFs+IGltYWdlXSIpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KQpAQCAtMTQ1LDExICsxNDUsNiBAQAogCXZvaWQgKmtlcm5lbDsKIAl1MzIgY3JjID0gMHhmZmZmZmZmZlVMOwogCi0JaWYgKGFyZ2MgPiAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1iIikpCi0JICB7Ci0JICAgIGlzX2JpZ19rZXJuZWwgPSAxOwotCSAgICBhcmdjLS0sIGFyZ3YrKzsKLQkgIH0KIAlpZiAoKGFyZ2MgPCAzKSB8fCAoYXJnYyA+IDQpKQogCQl1c2FnZSgpOwogCWlmIChhcmdjID4gMykgewpAQCAtMjE2LDggKzIxMSw2IEBACiAJCWRpZSgiVW5hYmxlIHRvIG1tYXAgJyVzJzogJW0iLCBhcmd2WzJdKTsKIAkvKiBOdW1iZXIgb2YgMTYtYnl0ZSBwYXJhZ3JhcGhzLCBpbmNsdWRpbmcgc3BhY2UgZm9yIGEgNC1ieXRlIENSQyAqLwogCXN5c19zaXplID0gKHN6ICsgMTUgKyA0KSAvIDE2OwotCWlmICghaXNfYmlnX2tlcm5lbCAmJiBzeXNfc2l6ZSA+IERFRl9TWVNTSVpFKQotCQlkaWUoIlN5c3RlbSBpcyB0b28gYmlnLiBUcnkgdXNpbmcgYnpJbWFnZSBvciBtb2R1bGVzLiIpOwogCiAJLyogUGF0Y2ggdGhlIHNldHVwIGNvZGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBwYXJhbWV0ZXJzICovCiAJYnVmWzB4MWYxXSA9IHNldHVwX3NlY3RvcnMtMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCmluZGV4IDVkNDc0MmUuLjk1ZDg2Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwpAQCAtMTI5LDQxICsxMjksNDUgQEAKIAlyZXR1cm4gKGluYigweDNjYykgJiAxKSA/IDB4M2Q0IDogMHgzYjQ7CiB9CiAKLXN0YXRpYyB2b2lkIHZnYV9zZXRfNDgwX3NjYW5saW5lcyhpbnQgZW5kKQorc3RhdGljIHZvaWQgdmdhX3NldF80ODBfc2NhbmxpbmVzKGludCBsaW5lcykKIHsKLQl1MTYgY3J0YzsKLQl1OCAgY3NlbDsKKwl1MTYgY3J0YzsJCS8qIENSVEMgYmFzZSBhZGRyZXNzICovCisJdTggIGNzZWw7CQkvKiBDUlRDIG1pc2NlbGxhbmVvdXMgb3V0cHV0IHJlZ2lzdGVyICovCisJdTggIG92Znc7CQkvKiBDUlRDIG92ZXJmbG93IHJlZ2lzdGVyICovCisJaW50IGVuZCA9IGxpbmVzLTE7CiAKIAljcnRjID0gdmdhX2NydGMoKTsKIAorCW92ZncgPSAweDNjIHwgKChlbmQgPj4gKDgtMSkpICYgMHgwMikgfCAoKGVuZCA+PiAoOS02KSkgJiAweDQwKTsKKwogCW91dF9pZHgoMHgwYywgY3J0YywgMHgxMSk7IC8qIFZlcnRpY2FsIHN5bmMgZW5kLCB1bmxvY2sgQ1IwLTcgKi8KIAlvdXRfaWR4KDB4MGIsIGNydGMsIDB4MDYpOyAvKiBWZXJ0aWNhbCB0b3RhbCAqLwotCW91dF9pZHgoMHgzZSwgY3J0YywgMHgwNyk7IC8qIFZlcnRpY2FsIG92ZXJmbG93ICovCisJb3V0X2lkeChvdmZ3LCBjcnRjLCAweDA3KTsgLyogVmVydGljYWwgb3ZlcmZsb3cgKi8KIAlvdXRfaWR4KDB4ZWEsIGNydGMsIDB4MTApOyAvKiBWZXJ0aWNhbCBzeW5jIHN0YXJ0ICovCi0Jb3V0X2lkeChlbmQsIGNydGMsIDB4MTIpOyAvKiBWZXJ0aWNhbCBkaXNwbGF5IGVuZCAqLworCW91dF9pZHgoZW5kLCAgY3J0YywgMHgxMik7IC8qIFZlcnRpY2FsIGRpc3BsYXkgZW5kICovCiAJb3V0X2lkeCgweGU3LCBjcnRjLCAweDE1KTsgLyogVmVydGljYWwgYmxhbmsgc3RhcnQgKi8KIAlvdXRfaWR4KDB4MDQsIGNydGMsIDB4MTYpOyAvKiBWZXJ0aWNhbCBibGFuayBlbmQgKi8KIAljc2VsID0gaW5iKDB4M2NjKTsKIAljc2VsICY9IDB4MGQ7CiAJY3NlbCB8PSAweGUyOwotCW91dGIoY3NlbCwgMHgzY2MpOworCW91dGIoY3NlbCwgMHgzYzIpOwogfQogCiBzdGF0aWMgdm9pZCB2Z2Ffc2V0XzgweDMwKHZvaWQpCiB7Ci0JdmdhX3NldF80ODBfc2NhbmxpbmVzKDB4ZGYpOworCXZnYV9zZXRfNDgwX3NjYW5saW5lcygzMCoxNik7CiB9CiAKIHN0YXRpYyB2b2lkIHZnYV9zZXRfODB4MzQodm9pZCkKIHsKIAl2Z2Ffc2V0XzE0Zm9udCgpOwotCXZnYV9zZXRfNDgwX3NjYW5saW5lcygweGRiKTsKKwl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMzQqMTQpOwogfQogCiBzdGF0aWMgdm9pZCB2Z2Ffc2V0XzgweDYwKHZvaWQpCiB7CiAJdmdhX3NldF84Zm9udCgpOwotCXZnYV9zZXRfNDgwX3NjYW5saW5lcygweGRmKTsKKwl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoNjAqOCk7CiB9CiAKIHN0YXRpYyBpbnQgdmdhX3NldF9tb2RlKHN0cnVjdCBtb2RlX2luZm8gKm1vZGUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggNGVmOTQ5Yy4uZGY4YTMwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtNzUsNyArNzUsNyBAQAogI2RlZmluZSBzZXR1cF9zZWNvbmRhcnlfY2xvY2sgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl9WU01QCisjaWZkZWYgQ09ORklHX1g4Nl82NAogZXh0ZXJuIGludCBpc192c21wX2JveCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpc192c21wX2JveCh2b2lkKQpAQCAtMTA4LDYgKzEwOCwxNiBAQAogZXh0ZXJuIHU2NCBuYXRpdmVfYXBpY19pY3JfcmVhZCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19YODZfWDJBUElDCisvKgorICogTWFrZSBwcmV2aW91cyBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQorICogc2VuZGluZyB0aGUgSVBJIHRocm91Z2ggeDJhcGljIHdybXNyLiBXZSBuZWVkIGEgc2VyaWFsaXppbmcgaW5zdHJ1Y3Rpb24gb3IKKyAqIG1mZW5jZSBmb3IgdGhpcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY193cm1zcl9mZW5jZSh2b2lkKQoreworCWFzbSB2b2xhdGlsZSgibWZlbmNlIiA6IDogOiAibWVtb3J5Iik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY19tc3Jfd3JpdGUodTMyIHJlZywgdTMyIHYpCiB7CiAJaWYgKHJlZyA9PSBBUElDX0RGUiB8fCByZWcgPT0gQVBJQ19JRCB8fCByZWcgPT0gQVBJQ19MRFIgfHwKQEAgLTE4NCw2ICsxOTQsOSBAQAogewogCXJldHVybiAwOwogfQorCisjZGVmaW5lCXgyYXBpYwkwCisKICNlbmRpZgogCiBleHRlcm4gaW50IGdldF9waHlzaWNhbF9icm9hZGNhc3Qodm9pZCk7CkBAIC0zNzksNiArMzkyLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2lycSh2b2lkKQogeworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCS8qCiAJICogYWNrX0FQSUNfaXJxKCkgYWN0dWFsbHkgZ2V0cyBjb21waWxlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbgogCSAqIC4uLiB5dW1taWUuCkBAIC0zODYsNiArNDAwLDcgQEAKIAogCS8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSAqLwogCWFwaWNfd3JpdGUoQVBJQ19FT0ksIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGVmYXVsdF9nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCkBAIC00NzQsMTAgKzQ4OSwxOSBAQAogCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGVmYXVsdF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Cit9CisKK2V4dGVybiBpbnQgZGVmYXVsdF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpOworCisjZW5kaWYKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQogewotCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07CisJcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CkBAIC00OTEsMTUgKzUxNSw2IEBACiAJcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1hc2sxICYgbWFzazIgJiBtYXNrMyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfcGh5c19wa2dfaWQoaW50IGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi1leHRlcm4gaW50IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKTsKLQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWZhdWx0X2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQogewogCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCmluZGV4IDYzMTM0ZTMuLmJjOTUxNGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUJCUFQSUNfRVNSX1NFTkRJTEwJMHgwMDAyMAogI2RlZmluZQkJQVBJQ19FU1JfUkVDVklMTAkweDAwMDQwCiAjZGVmaW5lCQlBUElDX0VTUl9JTExSRUdBCTB4MDAwODAKKyNkZWZpbmUgCUFQSUNfTFZUQ01DSQkweDJmMAogI2RlZmluZQlBUElDX0lDUgkweDMwMAogI2RlZmluZQkJQVBJQ19ERVNUX1NFTEYJCTB4NDAwMDAKICNkZWZpbmUJCUFQSUNfREVTVF9BTExJTkMJMHg4MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCmluZGV4IDY1MjZjZjAuLjZiYTIzZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKQEAgLTEsMTAgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9CT09UX0gKICNkZWZpbmUgX0FTTV9YODZfQk9PVF9ICiAKLS8qIERvbid0IHRvdWNoIHRoZXNlLCB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiAqLwotI2RlZmluZSBERUZfU1lTU0VHCTB4MTAwMAotI2RlZmluZSBERUZfU1lTU0laRQkweDdGMDAKLQogLyogSW50ZXJuYWwgc3ZnYSBzdGFydHVwIGNvbnN0YW50cyAqLwogI2RlZmluZSBOT1JNQUxfVkdBCTB4ZmZmZgkJLyogODB4MjUgbW9kZSAqLwogI2RlZmluZSBFWFRFTkRFRF9WR0EJMHhmZmZlCQkvKiA4MHg1MCBtb2RlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNWIzMDFiNy4uYjM4OTRiZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtOTAsNiArOTAsOSBAQAogaW50IHNldF9tZW1vcnlfYXJyYXlfdWModW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KTsKIGludCBzZXRfbWVtb3J5X2FycmF5X3diKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSk7CiAKK2ludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KTsKK2ludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KTsKKwogLyoKICAqIEZvciBsZWdhY3kgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgQVBJcywgYSBmZXcgZnVuY3Rpb25zCiAgKiBhcmUgcHJvdmlkZWQgdGhhdCB3b3JrIG9uIGEgInN0cnVjdCBwYWdlIi4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdV9kZWJ1Zy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1X2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjIyODAyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdV9kZWJ1Zy5oCkBAIC0wLDAgKzEsMjI2IEBACisjaWZuZGVmIF9BU01fWDg2X0NQVV9ERUJVR19ICisjZGVmaW5lIF9BU01fWDg2X0NQVV9ERUJVR19ICisKKy8qCisgKiBDUFUgeDg2IGFyY2hpdGVjdHVyZSBkZWJ1ZworICoKKyAqIENvcHlyaWdodChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKKyAqLworCisvKiBSZWdpc3RlciBmbGFncyAqLworZW51bSBjcHVfZGVidWdfYml0IHsKKy8qIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVycyAoTVNScykJCQkJCSovCisJQ1BVX01DX0JJVCwJCQkJLyogTWFjaGluZSBDaGVjawkqLworCUNQVV9NT05JVE9SX0JJVCwJCQkvKiBNb25pdG9yCQkqLworCUNQVV9USU1FX0JJVCwJCQkJLyogVGltZQkJCSovCisJQ1BVX1BNQ19CSVQsCQkJCS8qIFBlcmZvcm1hbmNlIE1vbml0b3IJKi8KKwlDUFVfUExBVEZPUk1fQklULAkJCS8qIFBsYXRmb3JtCQkqLworCUNQVV9BUElDX0JJVCwJCQkJLyogQVBJQwkJCSovCisJQ1BVX1BPV0VST05fQklULAkJCS8qIFBvd2VyLW9uCQkqLworCUNQVV9DT05UUk9MX0JJVCwJCQkvKiBDb250cm9sCQkqLworCUNQVV9GRUFUVVJFU19CSVQsCQkJLyogRmVhdHVyZXMgY29udHJvbAkqLworCUNQVV9MQlJBTkNIX0JJVCwJCQkvKiBMYXN0IEJyYW5jaAkJKi8KKwlDUFVfQklPU19CSVQsCQkJCS8qIEJJT1MJCQkqLworCUNQVV9GUkVRX0JJVCwJCQkJLyogRnJlcXVlbmN5CQkqLworCUNQVV9NVFRSX0JJVCwJCQkJLyogTVRSUgkJCSovCisJQ1BVX1BFUkZfQklULAkJCQkvKiBQZXJmb3JtYW5jZQkJKi8KKwlDUFVfQ0FDSEVfQklULAkJCQkvKiBDYWNoZQkJKi8KKwlDUFVfU1lTRU5URVJfQklULAkJCS8qIFN5c2VudGVyCQkqLworCUNQVV9USEVSTV9CSVQsCQkJCS8qIFRoZXJtYWwJCSovCisJQ1BVX01JU0NfQklULAkJCQkvKiBNaXNjZWxsYW5lb3VzCSovCisJQ1BVX0RFQlVHX0JJVCwJCQkJLyogRGVidWcJCSovCisJQ1BVX1BBVF9CSVQsCQkJCS8qIFBBVAkJCSovCisJQ1BVX1ZNWF9CSVQsCQkJCS8qIFZNWAkJCSovCisJQ1BVX0NBTExfQklULAkJCQkvKiBTeXN0ZW0gQ2FsbAkJKi8KKwlDUFVfQkFTRV9CSVQsCQkJCS8qIEJBU0UgQWRkcmVzcwkJKi8KKwlDUFVfVkVSX0JJVCwJCQkJLyogVmVyc2lvbiBJRAkJKi8KKwlDUFVfQ09ORl9CSVQsCQkJCS8qIENvbmZpZ3VyYXRpb24JKi8KKwlDUFVfU01NX0JJVCwJCQkJLyogU3lzdGVtIG1nbXQgbW9kZQkqLworCUNQVV9TVk1fQklULAkJCQkvKlNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUqLworCUNQVV9PU1ZNX0JJVCwJCQkJLyogT1MtVmlzaWJsZSBXb3JrYXJvdW5kKi8KKy8qIFN0YW5kYXJkIFJlZ2lzdGVycwkJCQkJCQkqLworCUNQVV9UU1NfQklULAkJCQkvKiBUYXNrIFN0YWNrIFNlZ21lbnQJKi8KKwlDUFVfQ1JfQklULAkJCQkvKiBDb250cm9sIFJlZ2lzdGVycwkqLworCUNQVV9EVF9CSVQsCQkJCS8qIERlc2NyaXB0b3IgVGFibGUJKi8KKy8qIEVuZCBvZiBSZWdpc3RlcnMgZmxhZ3MJCQkJCQkqLworCUNQVV9SRUdfQUxMX0JJVCwJCQkvKiBTZWxlY3QgYWxsIFJlZ2lzdGVycwkqLworfTsKKworI2RlZmluZQlDUFVfUkVHX0FMTAkJKH4wKQkJLyogU2VsZWN0IGFsbCBSZWdpc3RlcnMJKi8KKworI2RlZmluZQlDUFVfTUMJCQkoMSA8PCBDUFVfTUNfQklUKQorI2RlZmluZQlDUFVfTU9OSVRPUgkJKDEgPDwgQ1BVX01PTklUT1JfQklUKQorI2RlZmluZQlDUFVfVElNRQkJKDEgPDwgQ1BVX1RJTUVfQklUKQorI2RlZmluZQlDUFVfUE1DCQkJKDEgPDwgQ1BVX1BNQ19CSVQpCisjZGVmaW5lCUNQVV9QTEFURk9STQkJKDEgPDwgQ1BVX1BMQVRGT1JNX0JJVCkKKyNkZWZpbmUJQ1BVX0FQSUMJCSgxIDw8IENQVV9BUElDX0JJVCkKKyNkZWZpbmUJQ1BVX1BPV0VST04JCSgxIDw8IENQVV9QT1dFUk9OX0JJVCkKKyNkZWZpbmUJQ1BVX0NPTlRST0wJCSgxIDw8IENQVV9DT05UUk9MX0JJVCkKKyNkZWZpbmUJQ1BVX0ZFQVRVUkVTCQkoMSA8PCBDUFVfRkVBVFVSRVNfQklUKQorI2RlZmluZQlDUFVfTEJSQU5DSAkJKDEgPDwgQ1BVX0xCUkFOQ0hfQklUKQorI2RlZmluZQlDUFVfQklPUwkJKDEgPDwgQ1BVX0JJT1NfQklUKQorI2RlZmluZQlDUFVfRlJFUQkJKDEgPDwgQ1BVX0ZSRVFfQklUKQorI2RlZmluZQlDUFVfTVRSUgkJKDEgPDwgQ1BVX01UVFJfQklUKQorI2RlZmluZQlDUFVfUEVSRgkJKDEgPDwgQ1BVX1BFUkZfQklUKQorI2RlZmluZQlDUFVfQ0FDSEUJCSgxIDw8IENQVV9DQUNIRV9CSVQpCisjZGVmaW5lCUNQVV9TWVNFTlRFUgkJKDEgPDwgQ1BVX1NZU0VOVEVSX0JJVCkKKyNkZWZpbmUJQ1BVX1RIRVJNCQkoMSA8PCBDUFVfVEhFUk1fQklUKQorI2RlZmluZQlDUFVfTUlTQwkJKDEgPDwgQ1BVX01JU0NfQklUKQorI2RlZmluZQlDUFVfREVCVUcJCSgxIDw8IENQVV9ERUJVR19CSVQpCisjZGVmaW5lCUNQVV9QQVQJCQkoMSA8PCBDUFVfUEFUX0JJVCkKKyNkZWZpbmUJQ1BVX1ZNWAkJCSgxIDw8IENQVV9WTVhfQklUKQorI2RlZmluZQlDUFVfQ0FMTAkJKDEgPDwgQ1BVX0NBTExfQklUKQorI2RlZmluZQlDUFVfQkFTRQkJKDEgPDwgQ1BVX0JBU0VfQklUKQorI2RlZmluZQlDUFVfVkVSCQkJKDEgPDwgQ1BVX1ZFUl9CSVQpCisjZGVmaW5lCUNQVV9DT05GCQkoMSA8PCBDUFVfQ09ORl9CSVQpCisjZGVmaW5lCUNQVV9TTU0JCQkoMSA8PCBDUFVfU01NX0JJVCkKKyNkZWZpbmUJQ1BVX1NWTQkJCSgxIDw8IENQVV9TVk1fQklUKQorI2RlZmluZQlDUFVfT1NWTQkJKDEgPDwgQ1BVX09TVk1fQklUKQorI2RlZmluZQlDUFVfVFNTCQkJKDEgPDwgQ1BVX1RTU19CSVQpCisjZGVmaW5lCUNQVV9DUgkJCSgxIDw8IENQVV9DUl9CSVQpCisjZGVmaW5lCUNQVV9EVAkJCSgxIDw8IENQVV9EVF9CSVQpCisKKy8qIFJlZ2lzdGVyIGZpbGUgZmxhZ3MgKi8KK2VudW0gY3B1X2ZpbGVfYml0IHsKKwlDUFVfSU5ERVhfQklULAkJCQkvKiBpbmRleAkJKi8KKwlDUFVfVkFMVUVfQklULAkJCQkvKiB2YWx1ZQkJKi8KK307CisKKyNkZWZpbmUJQ1BVX0ZJTEVfVkFMVUUJCQkoMSA8PCBDUFVfVkFMVUVfQklUKQorCisvKgorICogRGlzcGxheUZhbWlseV9EaXNwbGF5TW9kZWwJUHJvY2Vzc29yIEZhbWlsaWVzL1Byb2Nlc3NvciBOdW1iZXIgU2VyaWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDA1XzAxLCAwNV8wMiwgMDVfMDQJCVBlbnRpdW0sIFBlbnRpdW0gd2l0aCBNTVgKKyAqCisgKiAwNl8wMQkJCVBlbnRpdW0gUHJvCisgKiAwNl8wMywgMDZfMDUJCQlQZW50aXVtIElJIFhlb24sIFBlbnRpdW0gSUkKKyAqIDA2XzA3LCAwNl8wOCwgMDZfMEEsIDA2XzBCCVBlbnRpdW0gSUlJIFhlb24sIFBlbnR1bSBJSUkKKyAqCisgKiAwNl8wOSwgMDYwRAkJCVBlbnRpdW0gTQorICoKKyAqIDA2XzBFCQkJQ29yZSBEdW8sIENvcmUgU29sbworICoKKyAqIDA2XzBGCQkJWGVvbiAzMDAwLCAzMjAwLCA1MTAwLCA1MzAwLCA3MzAwIHNlcmllcywKKyAqCQkJCUNvcmUgMiBRdWFkLCBDb3JlIDIgRXh0cmVtZSwgQ29yZSAyIER1bywKKyAqCQkJCVBlbnRpdW0gZHVhbC1jb3JlCisgKiAwNl8xNwkJCVhlb24gNTIwMCwgNTQwMCBzZXJpZXMsIENvcmUgMiBRdWFkIFE5NjUwCisgKgorICogMDZfMUMJCQlBdG9tCisgKgorICogMEZfMDAsIDBGXzAxLCAwRl8wMgkJWGVvbiwgWGVvbiBNUCwgUGVudGl1bSA0CisgKiAwRl8wMywgMEZfMDQJCQlYZW9uLCBYZW9uIE1QLCBQZW50aXVtIDQsIFBlbnRpdW0gRAorICoKKyAqIDBGXzA2CQkJWGVvbiA3MTAwLCA1MDAwIFNlcmllcywgWGVvbiBNUCwKKyAqCQkJCVBlbnRpdW0gNCwgUGVudGl1bSBECisgKi8KKworLyogUmVnaXN0ZXIgcHJvY2Vzc29ycyBiaXRzICovCitlbnVtIGNwdV9wcm9jZXNzb3JfYml0IHsKKwlDUFVfTk9ORSwKKy8qIEludGVsICovCisJQ1BVX0lOVEVMX1BFTlRJVU1fQklULAorCUNQVV9JTlRFTF9QNl9CSVQsCisJQ1BVX0lOVEVMX1BFTlRJVU1fTV9CSVQsCisJQ1BVX0lOVEVMX0NPUkVfQklULAorCUNQVV9JTlRFTF9DT1JFMl9CSVQsCisJQ1BVX0lOVEVMX0FUT01fQklULAorCUNQVV9JTlRFTF9YRU9OX1A0X0JJVCwKKwlDUFVfSU5URUxfWEVPTl9NUF9CSVQsCisvKiBBTUQgKi8KKwlDUFVfQU1EX0s2X0JJVCwKKwlDUFVfQU1EX0s3X0JJVCwKKwlDUFVfQU1EX0s4X0JJVCwKKwlDUFVfQU1EXzBGX0JJVCwKKwlDUFVfQU1EXzEwX0JJVCwKKwlDUFVfQU1EXzExX0JJVCwKK307CisKKyNkZWZpbmUJQ1BVX0lOVEVMX1BFTlRJVU0JKDEgPDwgQ1BVX0lOVEVMX1BFTlRJVU1fQklUKQorI2RlZmluZQlDUFVfSU5URUxfUDYJCSgxIDw8IENQVV9JTlRFTF9QNl9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9QRU5USVVNX00JKDEgPDwgQ1BVX0lOVEVMX1BFTlRJVU1fTV9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9DT1JFCQkoMSA8PCBDUFVfSU5URUxfQ09SRV9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9DT1JFMgkJKDEgPDwgQ1BVX0lOVEVMX0NPUkUyX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX0FUT00JCSgxIDw8IENQVV9JTlRFTF9BVE9NX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1hFT05fUDQJKDEgPDwgQ1BVX0lOVEVMX1hFT05fUDRfQklUKQorI2RlZmluZQlDUFVfSU5URUxfWEVPTl9NUAkoMSA8PCBDUFVfSU5URUxfWEVPTl9NUF9CSVQpCisKKyNkZWZpbmUJQ1BVX0lOVEVMX1BYCQkoQ1BVX0lOVEVMX1A2IHwgQ1BVX0lOVEVMX1BFTlRJVU1fTSkKKyNkZWZpbmUJQ1BVX0lOVEVMX0NPUkVYCQkoQ1BVX0lOVEVMX0NPUkUgfCBDUFVfSU5URUxfQ09SRTIpCisjZGVmaW5lCUNQVV9JTlRFTF9YRU9OCQkoQ1BVX0lOVEVMX1hFT05fUDQgfCBDUFVfSU5URUxfWEVPTl9NUCkKKyNkZWZpbmUJQ1BVX0NPX0FUCQkoQ1BVX0lOVEVMX0NPUkUgfCBDUFVfSU5URUxfQVRPTSkKKyNkZWZpbmUJQ1BVX0MyX0FUCQkoQ1BVX0lOVEVMX0NPUkUyIHwgQ1BVX0lOVEVMX0FUT00pCisjZGVmaW5lCUNQVV9DWF9BVAkJKENQVV9JTlRFTF9DT1JFWCB8IENQVV9JTlRFTF9BVE9NKQorI2RlZmluZQlDUFVfQ1hfWEUJCShDUFVfSU5URUxfQ09SRVggfCBDUFVfSU5URUxfWEVPTikKKyNkZWZpbmUJQ1BVX1A2X1hFCQkoQ1BVX0lOVEVMX1A2IHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9QTV9DT19BVAkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ09fQVQpCisjZGVmaW5lCUNQVV9DMl9BVF9YRQkJKENQVV9DMl9BVCB8IENQVV9JTlRFTF9YRU9OKQorI2RlZmluZQlDUFVfQ1hfQVRfWEUJCShDUFVfQ1hfQVQgfCBDUFVfSU5URUxfWEVPTikKKyNkZWZpbmUJQ1BVX1A2X0NYX0FUCQkoQ1BVX0lOVEVMX1A2IHwgQ1BVX0NYX0FUKQorI2RlZmluZQlDUFVfUDZfQ1hfWEUJCShDUFVfUDZfWEUgfCBDUFVfSU5URUxfQ09SRVgpCisjZGVmaW5lCUNQVV9QNl9DWF9BVF9YRQkJKENQVV9JTlRFTF9QNiB8IENQVV9DWF9BVF9YRSkKKyNkZWZpbmUJQ1BVX1BNX0NYX0FUX1hFCQkoQ1BVX0lOVEVMX1BFTlRJVU1fTSB8IENQVV9DWF9BVF9YRSkKKyNkZWZpbmUJQ1BVX1BNX0NYX0FUCQkoQ1BVX0lOVEVMX1BFTlRJVU1fTSB8IENQVV9DWF9BVCkKKyNkZWZpbmUJQ1BVX1BNX0NYX1hFCQkoQ1BVX0lOVEVMX1BFTlRJVU1fTSB8IENQVV9DWF9YRSkKKyNkZWZpbmUJQ1BVX1BYX0NYX0FUCQkoQ1BVX0lOVEVMX1BYIHwgQ1BVX0NYX0FUKQorI2RlZmluZQlDUFVfUFhfQ1hfQVRfWEUJCShDUFVfSU5URUxfUFggfCBDUFVfQ1hfQVRfWEUpCisKKy8qIFNlbGVjdCBhbGwgc3VwcG9ydGVkIEludGVsIENQVXMgKi8KKyNkZWZpbmUJQ1BVX0lOVEVMX0FMTAkJKENQVV9JTlRFTF9QRU5USVVNIHwgQ1BVX1BYX0NYX0FUX1hFKQorCisjZGVmaW5lCUNQVV9BTURfSzYJCSgxIDw8IENQVV9BTURfSzZfQklUKQorI2RlZmluZQlDUFVfQU1EX0s3CQkoMSA8PCBDUFVfQU1EX0s3X0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF9LOAkJKDEgPDwgQ1BVX0FNRF9LOF9CSVQpCisjZGVmaW5lCUNQVV9BTURfMEYJCSgxIDw8IENQVV9BTURfMEZfQklUKQorI2RlZmluZQlDUFVfQU1EXzEwCQkoMSA8PCBDUFVfQU1EXzEwX0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF8xMQkJKDEgPDwgQ1BVX0FNRF8xMV9CSVQpCisKKyNkZWZpbmUJQ1BVX0sxMF9QTFVTCQkoQ1BVX0FNRF8xMCB8IENQVV9BTURfMTEpCisjZGVmaW5lCUNQVV9LMEZfUExVUwkJKENQVV9BTURfMEYgfCBDUFVfSzEwX1BMVVMpCisjZGVmaW5lCUNQVV9LOF9QTFVTCQkoQ1BVX0FNRF9LOCB8IENQVV9LMEZfUExVUykKKyNkZWZpbmUJQ1BVX0s3X1BMVVMJCShDUFVfQU1EX0s3IHwgQ1BVX0s4X1BMVVMpCisKKy8qIFNlbGVjdCBhbGwgc3VwcG9ydGVkIEFNRCBDUFVzICovCisjZGVmaW5lCUNQVV9BTURfQUxMCQkoQ1BVX0FNRF9LNiB8IENQVV9LN19QTFVTKQorCisvKiBTZWxlY3QgYWxsIHN1cHBvcnRlZCBDUFVzICovCisjZGVmaW5lCUNQVV9BTEwJCQkoQ1BVX0lOVEVMX0FMTCB8IENQVV9BTURfQUxMKQorCisjZGVmaW5lIE1BWF9DUFVfRklMRVMJCTUxMgorCitzdHJ1Y3QgY3B1X3ByaXZhdGUgeworCXVuc2lnbmVkCQljcHU7CisJdW5zaWduZWQJCXR5cGU7CisJdW5zaWduZWQJCXJlZzsKKwl1bnNpZ25lZAkJZmlsZTsKK307CisKK3N0cnVjdCBjcHVfZGVidWdfYmFzZSB7CisJY2hhcgkJCSpuYW1lOwkJLyogUmVnaXN0ZXIgbmFtZQkqLworCXVuc2lnbmVkCQlmbGFnOwkJLyogUmVnaXN0ZXIgZmxhZwkqLworCXVuc2lnbmVkCQl3cml0ZTsJCS8qIFJlZ2lzdGVyIHdyaXRlIGZsYWcJKi8KK307CisKKy8qCisgKiBDdXJyZW50bHkgaXQgbG9va3Mgc2ltaWxhciB0byBjcHVfZGVidWdfYmFzZSBidXQgb25jZSB3ZSBhZGQgbW9yZSBmaWxlcworICogY3B1X2ZpbGVfYmFzZSB3aWxsIGdvIGluIGRpZmZlcmVudCBkaXJlY3Rpb24KKyAqLworc3RydWN0IGNwdV9maWxlX2Jhc2UgeworCWNoYXIJCQkqbmFtZTsJCS8qIFJlZ2lzdGVyIGZpbGUgbmFtZQkqLworCXVuc2lnbmVkCQlmbGFnOwkJLyogUmVnaXN0ZXIgZmlsZSBmbGFnCSovCisJdW5zaWduZWQJCXdyaXRlOwkJLyogUmVnaXN0ZXIgd3JpdGUgZmxhZwkqLworfTsKKworc3RydWN0IGNwdV9jcHVYX2Jhc2UgeworCXN0cnVjdCBkZW50cnkJCSpkZW50cnk7CS8qIFJlZ2lzdGVyIGRlbnRyeQkqLworCWludAkJCWluaXQ7CQkvKiBSZWdpc3RlciBpbmRleCBmaWxlCSovCit9OworCitzdHJ1Y3QgY3B1X2RlYnVnX3JhbmdlIHsKKwl1bnNpZ25lZAkJbWluOwkJLyogUmVnaXN0ZXIgcmFuZ2UgbWluCSovCisJdW5zaWduZWQJCW1heDsJCS8qIFJlZ2lzdGVyIHJhbmdlIG1heAkqLworCXVuc2lnbmVkCQlmbGFnOwkJLyogU3VwcG9ydGVkIGZsYWdzCSovCisJdW5zaWduZWQJCW1vZGVsOwkJLyogU3VwcG9ydGVkIG1vZGVscwkqLworfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0NQVV9ERUJVR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKaW5kZXggZGMyNzcwNS4uNTYyM2M1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaApAQCAtOTEsNyArOTEsNiBAQAogI2RlZmluZSBzdG9yZV9nZHQoZHRyKSBuYXRpdmVfc3RvcmVfZ2R0KGR0cikKICNkZWZpbmUgc3RvcmVfaWR0KGR0cikgbmF0aXZlX3N0b3JlX2lkdChkdHIpCiAjZGVmaW5lIHN0b3JlX3RyKHRyKSAodHIgPSBuYXRpdmVfc3RvcmVfdHIoKSkKLSNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgYXNtKCJzbGR0ICUwIjoiPW0iIChsZHQpKQogCiAjZGVmaW5lIGxvYWRfVExTKHQsIGNwdSkgbmF0aXZlX2xvYWRfdGxzKHQsIGNwdSkKICNkZWZpbmUgc2V0X2xkdCBuYXRpdmVfc2V0X2xkdApAQCAtMTEyLDYgKzExMSw4IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCiAKKyNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgYXNtKCJzbGR0ICUwIiA6ICI9bSIobGR0KSkKKwogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9pZHRfZW50cnkoZ2F0ZV9kZXNjICppZHQsIGludCBlbnRyeSwKIAkJCQkJICBjb25zdCBnYXRlX2Rlc2MgKmdhdGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCmluZGV4IGJjNjgyMTIuLmZkOGY5ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCkBAIC0xLDIyICsxLDE1IEBACiAjaWZuZGVmIF9BU01fWDg2X0RNSV9ICiAjZGVmaW5lIF9BU01fWDg2X0RNSV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jZGVmaW5lIERNSV9NQVhfREFUQSAyMDQ4Ci0KLWV4dGVybiBpbnQgZG1pX2FsbG9jX2luZGV4OwotZXh0ZXJuIGNoYXIgZG1pX2FsbG9jX2RhdGFbRE1JX01BWF9EQVRBXTsKLQotLyogVGhpcyBpcyBzbyBlYXJseSB0aGF0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5LgotICAgQWxsb2NhdGUgZGF0YSBpbiBhbiBCU1MgYXJyYXkuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9faW5pdCB2b2lkICpkbWlfYWxsb2ModW5zaWduZWQgbGVuKQogewotCWludCBpZHggPSBkbWlfYWxsb2NfaW5kZXg7Ci0JaWYgKChkbWlfYWxsb2NfaW5kZXggKyBsZW4pID4gRE1JX01BWF9EQVRBKQotCQlyZXR1cm4gTlVMTDsKLQlkbWlfYWxsb2NfaW5kZXggKz0gbGVuOwotCXJldHVybiBkbWlfYWxsb2NfZGF0YSArIGlkeDsKKwlyZXR1cm4gZXh0ZW5kX2JyayhsZW4sIHNpemVvZihpbnQpKTsKIH0KIAogLyogVXNlIGVhcmx5IElPIG1hcHBpbmdzIGZvciBETUkgYmVjYXVzZSBpdCdzIGluaXRpYWxpemVkIGVhcmx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKaW5kZXggMDBkNDFjZS4uN2VjYmE0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaApAQCAtNzIsNyArNzIsNyBAQAogZXh0ZXJuIHZvaWQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKTsKIGV4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7CiBleHRlcm4gaW50Ci1zYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBpbnQgbWF4X25yX21hcCwgaW50ICpwbnJfbWFwKTsKK3Nhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLCB1MzIgKnBucl9tYXApOwogZXh0ZXJuIHU2NCBlODIwX3VwZGF0ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKIAkJCSAgICAgICB1bnNpZ25lZCBuZXdfdHlwZSk7CiBleHRlcm4gdTY0IGU4MjBfcmVtb3ZlX3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCmluZGV4IDg1NGQ1MzguLmMyZTZiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKQEAgLTMzLDYgKzMzLDggQEAKIAkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKICNlbmRpZgogCitCVUlMRF9JTlRFUlJVUFQoZ2VuZXJpY19pbnRlcnJ1cHQsIEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUikKKwogLyoKICAqIGV2ZXJ5IHBlbnRpdW0gbG9jYWwgQVBJQyBoYXMgdHdvICdsb2NhbCBpbnRlcnJ1cHRzJywgd2l0aCBhCiAgKiBzb2Z0LWRlZmluYWJsZSB2ZWN0b3IgYXR0YWNoZWQgdG8gYm90aCBpbnRlcnJ1cHRzLCBvbmUgb2YKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggYjU1YjRhNy4uZGIyNGMyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTU1LDI5ICs1NSw0IEBACiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLwogCi0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogU3RhY2sgb2YgcmV0dXJuIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zCi0gKiBvZiBhIHRocmVhZC4KLSAqIFVzZWQgaW4gc3RydWN0IHRocmVhZF9pbmZvCi0gKi8KLXN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQl1bnNpZ25lZCBsb25nIGZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOwotfTsKLQotLyoKLSAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi4KLSAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuCi0gKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlMKLSAqLwotZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDE3NmYwNTguLjAzOWRiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAl1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLwogCXVuc2lnbmVkIGludCBpcnFfc3B1cmlvdXNfY291bnQ7CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgZ2VuZXJpY19pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLwogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7CiAJdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IGJmOTI3NmIuLjAxNGMyYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTYzLDYgKzYzLDcgQEAKIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7CiB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CiB2b2lkICprbWFwX2F0b21pY19wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlKTsKK3ZvaWQgKmttYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCk7CiBzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZSh2b2lkICpwdHIpOwogCiAjaWZuZGVmIENPTkZJR19QQVJBVklSVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCAzNzBlMWM4Li5iNzYyZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMjcsNiArMjcsNyBAQAogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBkdXJpbmcgaW5pdF9JUlEgKi8KIGV4dGVybiB2b2lkIGFwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBlcnJvcl9pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBzcHVyaW91c19pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCB0aGVybWFsX2ludGVycnVwdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZiMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5JVF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0lOSVRfMzJfSAorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpOworI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzayk7CisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBlODIwX3RhYmxlX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgZTgyMF90YWJsZV90b3A7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JTklUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCA1OWNiNGExLi4zNzNjYzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNjIsNyArMTYyLDggQEAKIGV4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiBpbnQgc2F2ZV9JT19BUElDX3NldHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFza19JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQpOwogI2VuZGlmCkBAIC0xNzIsNyArMTczLDcgQEAKIGV4dGVybiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljLCBpbnQgaXJxLAogCQkJICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAogCQkJICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJCSAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3Rvcik7CisJCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IsIGludCBwaW4pOwogZXh0ZXJuIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLAogCQkJICAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpOwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMTA3ZWIyMS4uZjM4NDgxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCpnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCmluZGV4IDIwZTFmZDUuLjAzOTY3NjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X0lSUV9SRU1BUFBJTkdfSAogI2RlZmluZSBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0gKIAotZXh0ZXJuIGludCB4MmFwaWM7Ci0KICNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoeDJhcGljKSA/IGRlc3QgOiBkZXN0IDw8IDgpCiAKICNlbmRpZgkvKiBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDhhMjg1ZjMuLjNjYmQ3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMTEyLDYgKzExMiwxMSBAQAogI2RlZmluZSBMT0NBTF9QRVJGX1ZFQ1RPUgkJMHhlZQogCiAvKgorICogR2VuZXJpYyBzeXN0ZW0gdmVjdG9yIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UKKyAqLworI2RlZmluZSBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IJMHhlZAorCisvKgogICogRmlyc3QgQVBJQyB2ZWN0b3IgYXZhaWxhYmxlIHRvIGRyaXZlcnM6ICh2ZWN0b3JzIDB4MzAtMHhlZSkgd2UKICAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5CiAgKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCmluZGV4IDBjZWI2ZDEuLjMxN2ZmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtOSwxMyArOSwxMyBAQAogIyBkZWZpbmUgUEFHRVNfTlIJCTQKICNlbHNlCiAjIGRlZmluZSBQQV9DT05UUk9MX1BBR0UJMAotIyBkZWZpbmUgUEFfVEFCTEVfUEFHRQkJMQotIyBkZWZpbmUgUEFHRVNfTlIJCTIKKyMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCisjIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkyCisjIGRlZmluZSBQQV9TV0FQX1BBR0UJCTMKKyMgZGVmaW5lIFBBR0VTX05SCQk0CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKICMgZGVmaW5lIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQkyMDQ4Ci0jZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMTM2LDEwICsxMzYsMTEgQEAKIAkJdW5zaWduZWQgaW50IGhhc19wYWUsCiAJCXVuc2lnbmVkIGludCBwcmVzZXJ2ZV9jb250ZXh0KTsKICNlbHNlCi1OT1JFVF9UWVBFIHZvaWQKK3Vuc2lnbmVkIGxvbmcKIHJlbG9jYXRlX2tlcm5lbCh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpIEFUVFJJQl9OT1JFVDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgcHJlc2VydmVfY29udGV4dCk7CiAjZW5kaWYKIAogI2RlZmluZSBBUkNIX0hBU19LSU1BR0VfQVJDSApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCmluZGV4IDkzMjBlMmEuLjEyZDU1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTEsMTQgKzEsMTEgQEAKICNpZm5kZWYgX0FTTV9YODZfTElOS0FHRV9ICiAjZGVmaW5lIF9BU01fWDg2X0xJTktBR0VfSAogCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKICN1bmRlZiBub3RyYWNlCiAjZGVmaW5lIG5vdHJhY2UgX19hdHRyaWJ1dGVfXygobm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIF9fQUxJR04gLnAyYWxpZ24gNCwsMTUKLSNkZWZpbmUgX19BTElHTl9TVFIgIi5wMmFsaWduIDQsLDE1IgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjZGVmaW5lIGFzbWxpbmthZ2UgQ1BQX0FTTUxJTktBR0UgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpCiAvKgpAQCAtNTAsMTYgKzQ3LDIwIEBACiAJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMiksICJnIiAoYXJnMyksIFwKIAkJCSAgICAgICJnIiAoYXJnNCksICJnIiAoYXJnNSksICJnIiAoYXJnNikpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXwogCiAjZGVmaW5lIEdMT0JBTChuYW1lKQlcCiAJLmdsb2JsIG5hbWU7CVwKIAluYW1lOgogCi0jaWZkZWYgQ09ORklHX1g4Nl9BTElHTk1FTlRfMTYKLSNkZWZpbmUgX19BTElHTiAuYWxpZ24gMTYsMHg5MAotI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDE2LDB4OTAiCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfQUxJR05NRU5UXzE2KQorI2RlZmluZSBfX0FMSUdOCQkucDJhbGlnbiA0LCAweDkwCisjZGVmaW5lIF9fQUxJR05fU1RSCV9fc3RyaW5naWZ5KF9fQUxJR04pCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAjZW5kaWYgLyogX0FTTV9YODZfTElOS0FHRV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggMzJjNmUxNy4uNTYzOTMzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTExLDYgKzExLDggQEAKICAqLwogCiAjZGVmaW5lIE1DR19DVExfUAkgKDFVTDw8OCkgICAvKiBNQ0dfQ0FQIHJlZ2lzdGVyIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQ0dfRVhUX1AJICgxVUxMPDw5KSAgIC8qIEV4dGVuZGVkIHJlZ2lzdGVycyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgTUNHX0NNQ0lfUAkgKDFVTEw8PDEwKSAgLyogQ01DSSBzdXBwb3J0ZWQgKi8KIAogI2RlZmluZSBNQ0dfU1RBVFVTX1JJUFYgICgxVUw8PDApICAgLyogcmVzdGFydCBpcCB2YWxpZCAqLwogI2RlZmluZSBNQ0dfU1RBVFVTX0VJUFYgICgxVUw8PDEpICAgLyogaXAgcG9pbnRzIHRvIGNvcnJlY3QgaW5zdHJ1Y3Rpb24gKi8KQEAgLTkwLDE0ICs5MiwyOSBAQAogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCit2b2lkIG1jZV9zZXR1cChzdHJ1Y3QgbWNlICptKTsKIHZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc3lzX2RldmljZSwgZGV2aWNlX21jZSk7CiBleHRlcm4gdm9pZCAoKnRocmVzaG9sZF9jcHVfY2FsbGJhY2spKHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB1bnNpZ25lZCBpbnQgY3B1KTsKIAorLyoKKyAqIFRvIHN1cHBvcnQgbW9yZSB0aGFuIDEyOCB3b3VsZCBuZWVkIHRvIGVzY2FwZSB0aGUgcHJlZGVmaW5lZAorICogTGludXggZGVmaW5lZCBleHRlbmRlZCBiYW5rcyBmaXJzdC4KKyAqLworI2RlZmluZSBNQVhfTlJfQkFOS1MgKE1DRV9FWFRFTkRFRF9CQU5LIC0gMSkKKwogI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCiB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK3ZvaWQgY21jaV9jbGVhcih2b2lkKTsKK3ZvaWQgY21jaV9yZWVuYWJsZSh2b2lkKTsKK3ZvaWQgY21jaV9yZWRpc2NvdmVyKGludCBkeWluZyk7Cit2b2lkIGNtY2lfcmVjaGVjayh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfY2xlYXIodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWNpX3JlZW5hYmxlKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY21jaV9yZWRpc2NvdmVyKGludCBkeWluZykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWNpX3JlY2hlY2sodm9pZCkge30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfQU1ECkBAIC0xMDYsMTEgKzEyMywyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIG1jZV9hbWRfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CiAjZW5kaWYKIAotdm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KHVuc2lnbmVkIGludCBjcHUsIF9fdTY0IHN0YXR1cyk7CitleHRlcm4gaW50IG1jZV9hdmFpbGFibGUoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKKwordm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KF9fdTY0IHN0YXR1cyk7CiAKIGV4dGVybiBhdG9taWNfdCBtY2VfZW50cnk7CiAKIGV4dGVybiB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CisKK3R5cGVkZWYgREVDTEFSRV9CSVRNQVAobWNlX2JhbmtzX3QsIE1BWF9OUl9CQU5LUyk7CitERUNMQVJFX1BFUl9DUFUobWNlX2JhbmtzX3QsIG1jZV9wb2xsX2JhbmtzKTsKKworZW51bSBtY3BfZmxhZ3MgeworCU1DUF9USU1FU1RBTVAgPSAoMSA8PCAwKSwJLyogbG9nIHRpbWUgc3RhbXAgKi8KKwlNQ1BfVUMgPSAoMSA8PCAxKSwJCS8qIGxvZyB1bmNvcnJlY3RlZCBlcnJvcnMgKi8KK307CitleHRlcm4gdm9pZCBtYWNoaW5lX2NoZWNrX3BvbGwoZW51bSBtY3BfZmxhZ3MgZmxhZ3MsIG1jZV9iYW5rc190ICpiKTsKKwogZXh0ZXJuIGludCBtY2Vfbm90aWZ5X3VzZXIodm9pZCk7CiAKICNlbmRpZiAvKiAhQ09ORklHX1g4Nl8zMiAqLwpAQCAtMTIwLDggKzE0OSw4IEBACiAjZWxzZQogI2RlZmluZSBtY2hlY2tfaW5pdChjKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKLWV4dGVybiB2b2lkIHN0b3BfbWNlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVzdGFydF9tY2Uodm9pZCk7CisKK2V4dGVybiB2b2lkICgqbWNlX3RocmVzaG9sZF92ZWN0b3IpKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fWDg2X01DRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2lkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zaWRlZi5oCmluZGV4IDY3MDZiMzAuLjRjYzQ4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zaWRlZi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zaWRlZi5oCkBAIC00Nyw2ICs0Nyw3IEBACiAjZGVmaW5lCSBNU0lfQUREUl9ERVNUX0lEX01BU0sJCTB4MDBmZmZmMAogI2RlZmluZSAgTVNJX0FERFJfREVTVF9JRChkZXN0KQkJKCgoZGVzdCkgPDwgTVNJX0FERFJfREVTVF9JRF9TSElGVCkgJiBcCiAJCQkJCSBNU0lfQUREUl9ERVNUX0lEX01BU0spCisjZGVmaW5lIE1TSV9BRERSX0VYVF9ERVNUX0lEKGRlc3QpCSgoZGVzdCkgJiAweGZmZmZmZjAwKQogCiAjZGVmaW5lIE1TSV9BRERSX0lSX0VYVF9JTlQJCSgxIDw8IDQpCiAjZGVmaW5lIE1TSV9BRERSX0lSX1NIVgkJCSgxIDw8IDMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IGY0ZTUwNWYuLmVjNDFmYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC04MSw2ICs4MSwxMSBAQAogI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHgwMDAwMDQwMgogI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQwkJMHgwMDAwMDQwMwogCisvKiBUaGVzZSBhcmUgY29uc2VjdXRpdmUgYW5kIG5vdCBpbiB0aGUgbm9ybWFsIDRlciBNQ0UgYmFuayBibG9jayAqLworI2RlZmluZSBNU1JfSUEzMl9NQzBfQ1RMMgkJMHgwMDAwMDI4MAorI2RlZmluZSBDTUNJX0VOCQkJKDFVTEwgPDwgMzApCisjZGVmaW5lIENNQ0lfVEhSRVNIT0xEX01BU0sJCTB4ZmZmZlVMTAorCiAjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMAkJCTB4MDAwMDAwYzEKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkJMHgwMDAwMDBjMgogI2RlZmluZSBNU1JfUDZfRVZOVFNFTDAJCQkweDAwMDAwMTg2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKaW5kZXggZjFlNGE3OS4uMGY5MTVhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaApAQCAtMzksNiArMzksMTEgQEAKICNkZWZpbmUgX19WSVJUVUFMX01BU0tfU0hJRlQJMzIKICNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwogCisvKgorICogS2VybmVsIGltYWdlIHNpemUgaXMgbGltaXRlZCB0byA1MTIgTUIgKHNlZSBpbiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TKQorICovCisjZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaAppbmRleCAyZDYyNWRhLi44MjZhZDM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCkBAIC00MCwxNCArNDAsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1zdHJ1Y3QgcGdwcm90OwotCiBleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOwotZXh0ZXJuIHZvaWQgbWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkgICAgICAgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7Ci1leHRlcm4gdm9pZCB1bm1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAwNjE3ZDVjLi43NzI3YWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTMxNyw4ICszMTcsNiBAQAogI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJdm9pZCAoKnNldF9wdGVfYXRvbWljKShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKLQl2b2lkICgqc2V0X3B0ZV9wcmVzZW50KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwogCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgIHB0ZV90ICpwdGVwKTsKIAl2b2lkICgqcG1kX2NsZWFyKShwbWRfdCAqcG1kcCk7CkBAIC0zODksNyArMzg3LDcgQEAKIAogI2RlZmluZSBwYXJhdmlydF90eXBlKG9wKQkJCQlcCiAJW3BhcmF2aXJ0X3R5cGVudW1dICJpIiAoUEFSQVZJUlRfUEFUQ0gob3ApKSwJXAotCVtwYXJhdmlydF9vcHB0cl0gIm0iIChvcCkKKwlbcGFyYXZpcnRfb3BwdHJdICJpIiAoJihvcCkpCiAjZGVmaW5lIHBhcmF2aXJ0X2Nsb2JiZXIoY2xvYmJlcikJCVwKIAlbcGFyYXZpcnRfY2xvYmJlcl0gImkiIChjbG9iYmVyKQogCkBAIC00NDMsNyArNDQxLDcgQEAKICAqIG9mZnNldCBpbnRvIHRoZSBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSBzdHJ1Y3R1cmUsIGFuZCBjYW4gdGhlcmVmb3JlIGJlCiAgKiBmcmVlbHkgY29udmVydGVkIGJhY2sgaW50byBhIHN0cnVjdHVyZSBvZmZzZXQuCiAgKi8KLSNkZWZpbmUgUEFSQVZJUlRfQ0FMTAkiY2FsbCAqJVtwYXJhdmlydF9vcHB0cl07IgorI2RlZmluZSBQQVJBVklSVF9DQUxMCSJjYWxsIColY1twYXJhdmlydF9vcHB0cl07IgogCiAvKgogICogVGhlc2UgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byB3cmFwIGNhbGxzIHRocm91Z2ggb25lIG9mIHRoZSBwYXJhdmlydApAQCAtMTM2NSwxMyArMTM2Myw2IEBACiAJCSAgICBwdGUucHRlLCBwdGUucHRlID4+IDMyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JLyogNSBhcmcgd29yZHMgKi8KLQlwdl9tbXVfb3BzLnNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICBwdGVfdCAqcHRlcCkKIHsKQEAgLTEzODgsMTIgKzEzNzksNiBAQAogCXNldF9wdGUocHRlcCwgcHRlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jc2V0X3B0ZShwdGVwLCBwdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIHB0ZV90ICpwdGVwKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaAppbmRleCBiMGU3MDA1Li4yY2QwN2I5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0FTTV9YODZfUEFUX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBleHRlcm4gaW50IHBhdF9lbmFibGVkOwpAQCAtMTcsNSArMTgsOSBAQAogCiBleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZyk7CitleHRlcm4gdm9pZCBtYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKK2V4dGVybiB2b2lkIHVubWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOwogCiAjZW5kaWYgLyogX0FTTV9YODZfUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IGMxNzc0YWMuLjIzMzQ5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtMjYsMTMgKzI2LDYgQEAKIAluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BtZF9jbGVhcihwbWRfdCAqcG1kcCkKIHsKIAluYXRpdmVfc2V0X3BtZChwbWRwLCBfX3BtZCgwKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAzZjEzY2RmLi4xNzdiMDE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKQEAgLTMxLDIzICszMSw2IEBACiAJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwogfQogCi0vKgotICogU2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBvbiB1c2VyIFBURXMsIGFuZCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyCi0gKiBtdXN0IGhhbmRsZSB0aGUgYWxyZWFkeSByYWN5IHNpdHVhdGlvbiBvZiBzaW11bHRhbmVvdXMgcGFnZSBmYXVsdHMsCi0gKiB3ZSBhcmUganVzdGlmaWVkIGluIG1lcmVseSBjbGVhcmluZyB0aGUgUFRFIHByZXNlbnQgYml0LCBmb2xsb3dlZAotICogYnkgYSBzZXQuICBUaGUgb3JkZXJpbmcgaGVyZSBpcyBpbXBvcnRhbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCXB0ZXAtPnB0ZV9sb3cgPSAwOwotCXNtcF93bWIoKTsKLQlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKLQlzbXBfd21iKCk7Ci0JcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiAJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocHRlcCksIG5hdGl2ZV9wdGVfdmFsKHB0ZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGQwODEyZTEuLjI5ZDk2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMxLDggKzMxLDYgQEAKICNkZWZpbmUgc2V0X3B0ZShwdGVwLCBwdGUpCQluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpCiAjZGVmaW5lIHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkJbmF0aXZlX3NldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkKIAotI2RlZmluZSBzZXRfcHRlX3ByZXNlbnQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkJCQkJXAotCW5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkKICNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcCwgcHRlKQkJCQkJXAogCW5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCA5NzYxMmZjLi4zMWJkMTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC00Miw5ICs0Miw2IEBACiAgKi8KICN1bmRlZiBURVNUX0FDQ0VTU19PSwogCi0vKiBUaGUgYm9vdCBwYWdlIHRhYmxlcyAoYWxsIGNyZWF0ZWQgYXMgYSBzaW5nbGUgYXJyYXkpICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwZzBbXTsKLQogI2lmZGVmIENPTkZJR19YODZfUEFFCiAjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTNsZXZlbC5oPgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAppbmRleCBiZDhkZjNiLi4yNzMzZmFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCkBAIC0yNSw2ICsyNSwxMSBAQAogICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQogICovCiAjZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4ICogMTAyNCAqIDEwMjQpCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworZXh0ZXJuIGJvb2wgX192bWFsbG9jX3N0YXJ0X3NldDsgLyogc2V0IG9uY2UgaGlnaF9tZW1vcnkgaXMgc2V0ICovCisjZW5kaWYKKwogI2RlZmluZSBWTUFMTE9DX1NUQVJUCSgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKQogI2lmZGVmIENPTkZJR19YODZfUEFFCiAjZGVmaW5lIExBU1RfUEtNQVAgNTEyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggNGQyNThhZC4uYjgyMzhkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMjczLDYgKzI3Myw3IEBACiAKIGV4dGVybiBwdGV2YWxfdCBfX3N1cHBvcnRlZF9wdGVfbWFzazsKIGV4dGVybiBpbnQgbnhfZW5hYmxlZDsKK2V4dGVybiB2b2lkIHNldF9ueCh2b2lkKTsKIAogI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lCXBncHJvdF93cml0ZWNvbWJpbmUKIGV4dGVybiBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA3NjEzOTUwLi5hZTg1YThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtNzUsOSArNzUsOSBAQAogI2Vsc2UKIAkvKiBOdW1iZXIgb2YgNEsgcGFnZXMgaW4gRFRMQi9JVExCIGNvbWJpbmVkKGluIHBhZ2VzKTogKi8KIAlpbnQJCQl4ODZfdGxic2l6ZTsKKyNlbmRpZgogCV9fdTgJCQl4ODZfdmlydF9iaXRzOwogCV9fdTgJCQl4ODZfcGh5c19iaXRzOwotI2VuZGlmCiAJLyogQ1BVSUQgcmV0dXJuZWQgY29yZSBpZCBiaXRzOiAqLwogCV9fdTgJCQl4ODZfY29yZWlkX2JpdHM7CiAJLyogTWF4IGV4dGVuZGVkIENQVUlEIGZ1bmN0aW9uIHN1cHBvcnRlZDogKi8KQEAgLTM5MSw2ICszOTEsOSBAQAogREVDTEFSRV9JTklUX1BFUl9DUFUoaXJxX3N0YWNrX3VuaW9uKTsKIAogREVDTEFSRV9QRVJfQ1BVKGNoYXIgKiwgaXJxX3N0YWNrX3B0cik7CitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCBpcnFfY291bnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2VybmVsX2VmbGFnczsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgaWdub3JlX3N5c3JldCh2b2lkKTsKICNlbHNlCS8qIFg4Nl82NCAqLwogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHN0YWNrX2NhbmFyeSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCAyYjhjNTE2Li4xYjdlZTVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTEgKzEsOCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TRUNUSU9OU19ICisjZGVmaW5lIF9BU01fWDg2X1NFQ1RJT05TX0gKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKK2V4dGVybiBjaGFyIF9fYnJrX2Jhc2VbXSwgX19icmtfbGltaXRbXTsKKworI2VuZGlmCS8qIF9BU01fWDg2X1NFQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDA1YzZmNmIuLmJkYzJhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtNjQsNyArNjQsNyBAQAogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KIAogLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KLSNpZmRlZiBDT05GSUdfWDg2X1ZTTVAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiB2b2lkIHZzbXBfaW5pdCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdnNtcF9pbml0KHZvaWQpIHsgfQpAQCAtMTAwLDIwICsxMDAsNTEgQEAKICAqLwogI2RlZmluZSBMT1dNRU1TSVpFKCkJKDB4OWYwMDApCiAKKy8qIGV4Y2VlZGluZ2x5IGVhcmx5IGJyay1saWtlIGFsbG9jYXRvciAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2Jya19lbmQ7Cit2b2lkICpleHRlbmRfYnJrKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworCisvKgorICogUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgYnJrIHNlY3Rpb24uICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KKyAqIHRoZSBmaWxlLCBhbmQgc29tZXdoYXQgZGVzY3JpcHRpdmUuICBUaGUgc2l6ZSBpcyBpbiBieXRlcy4gIE11c3QgYmUKKyAqIHVzZWQgYXQgZmlsZSBzY29wZS4KKyAqCisgKiAoVGhpcyB1c2VzIGEgdGVtcCBmdW5jdGlvbiB0byB3cmFwIHRoZSBhc20gc28gd2UgY2FuIHBhc3MgaXQgdGhlCisgKiBzaXplIHBhcmFtZXRlcjsgb3RoZXJ3aXNlIHdlIHdvdWxkbid0IGJlIGFibGUgdG8uICBXZSBjYW4ndCB1c2UgYQorICogInNlY3Rpb24iIGF0dHJpYnV0ZSBvbiBhIG5vcm1hbCB2YXJpYWJsZSBiZWNhdXNlIGl0IGFsd2F5cyBlbmRzIHVwCisgKiBiZWluZyBAcHJvZ2JpdHMsIHdoaWNoIGVuZHMgdXAgYWxsb2NhdGluZyBzcGFjZSBpbiB0aGUgdm1saW51eAorICogZXhlY3V0YWJsZS4pCisgKi8KKyNkZWZpbmUgUkVTRVJWRV9CUksobmFtZSxzeikJCQkJCQlcCisJc3RhdGljIHZvaWQgX19zZWN0aW9uKC5kaXNjYXJkKSBfX3VzZWQJCQkJXAorCV9fYnJrX3Jlc2VydmF0aW9uX2ZuXyMjbmFtZSMjX18odm9pZCkgewkJCQlcCisJCWFzbSB2b2xhdGlsZSAoCQkJCQkJXAorCQkJIi5wdXNoc2VjdGlvbiAuYnJrX3Jlc2VydmF0aW9uLFwiYXdcIixAbm9iaXRzOyIgXAorCQkJIi5icmsuIiAjbmFtZSAiOiIJCQkJXAorCQkJIiAxOi5za2lwICVjMDsiCQkJCQlcCisJCQkiIC5zaXplIC5icmsuIiAjbmFtZSAiLCAuIC0gMWI7IgkJXAorCQkJIiAucG9wc2VjdGlvbiIJCQkJCVwKKwkJCTogOiAiaSIgKHN6KSk7CQkJCQlcCisJfQorCiAjaWZkZWYgX19pMzg2X18KIAogdm9pZCBfX2luaXQgaTM4Nl9zdGFydF9rZXJuZWwodm9pZCk7CiBleHRlcm4gdm9pZCBwcm9iZV9yb21zKHZvaWQpOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19zdGFydDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX2VuZDsKLQogI2Vsc2UKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqcmVhbF9tb2RlKTsKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMoY2hhciAqcmVhbF9tb2RlX2RhdGEpOwogCiAjZW5kaWYgLyogX19pMzg2X18gKi8KICNlbmRpZiAvKiBfU0VUVVAgKi8KKyNlbHNlCisjZGVmaW5lIFJFU0VSVkVfQlJLKG5hbWUsc3opCQkJCVwKKwkucHVzaHNlY3Rpb24gLmJya19yZXNlcnZhdGlvbiwiYXciLEBub2JpdHM7CVwKKy5icmsubmFtZToJCQkJCQlcCisxOgkuc2tpcCBzejsJCQkJCVwKKwkuc2l6ZSAuYnJrLm5hbWUsLi0xYjsJCQkJXAorCS5wb3BzZWN0aW9uCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCBhODExOTVlLi5iZDM3ZWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTEyLDkgKzEyLDkgQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiBpbnQgdGltZXJfYWNrOwotZXh0ZXJuIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwogZXh0ZXJuIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KK2V4dGVybiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTsKIAogZXh0ZXJuIGludCBub190aW1lcl9jaGVjazsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCA3NzczMjdlLi45ZjRkZmJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTk5LDYgKzE5OSwxMCBAQAogI2RlZmluZSBTQ0lSX0NQVV9BQ1RJVklUWQkweDAyCS8qIG5vdCBpZGxlICovCiAjZGVmaW5lIFNDSVJfQ1BVX0hCX0lOVEVSVkFMCShIWikJLyogb25jZSBwZXIgc2Vjb25kICovCiAKKy8qIExvb3AgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIGJsYWRlcyAqLworI2RlZmluZSBmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShiaWQpCQlcCisJZm9yICgoYmlkKSA9IDA7IChiaWQpIDwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOyAoYmlkKSsrKQorCiAvKgogICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLCBzb2NrZXQgbG9jYWwgcGh5c2ljYWwKICAqIGFkZHJlc3NlcywgYW5kIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKaW5kZXggNWU3OWNhNi4uOWMzNzFlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaApAQCAtMjk2LDYgKzI5Niw4IEBACiBzdGF0aWMgaW5saW5lIGludAogSFlQRVJWSVNPUl91cGRhdGVfZGVzY3JpcHRvcih1NjQgbWEsIHU2NCBkZXNjKQogeworCWlmIChzaXplb2YodTY0KSA9PSBzaXplb2YobG9uZykpCisJCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHVwZGF0ZV9kZXNjcmlwdG9yLCBtYSwgZGVzYyk7CiAJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX2Rlc2NyaXB0b3IsIG1hLCBtYT4+MzIsIGRlc2MsIGRlc2M+PjMyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDFmYzgxMWIuLmM2MTFhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTcwLDcgKzcwLDYgQEAKIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWNfJChCSVRTKS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSByZWxvY2F0ZV9rZXJuZWxfJChCSVRTKS5vIGNyYXNoLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wXyQoQklUUykubwotb2JqLSQoQ09ORklHX1g4Nl9WU01QKQkJKz0gdnNtcF82NC5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGVfJChCSVRTKS5vCiBvYmotJChDT05GSUdfRUZJKSAJCSs9IGVmaS5vIGVmaV8kKEJJVFMpLm8gZWZpX3N0dWJfJChCSVRTKS5vCkBAIC0xMTEsNyArMTEwLDcgQEAKICMjIwogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKLQlvYmotJChDT05GSUdfWDg2X1VWKQkJKz0gdGxiX3V2Lm8gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8KKwlvYmotJChDT05GSUdfWDg2X1VWKQkJKz0gdGxiX3V2Lm8gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8gdXZfdGltZS5vCiAJb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCiAJb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCkBAIC0xMjAsNCArMTE5LDUgQEAKIAlvYmotJChDT05GSUdfQU1EX0lPTU1VKQkJKz0gYW1kX2lvbW11X2luaXQubyBhbWRfaW9tbXUubwogCiAJb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25mLWZhbTEwaF82NC5vCisJb2JqLXkJCQkJKz0gdnNtcF82NC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA2OTA3YjhlLi40YzgwZjE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNDE0LDkgKzQxNCwxNyBAQAogCSAgIHRoYXQgbWlnaHQgZXhlY3V0ZSB0aGUgdG8gYmUgcGF0Y2hlZCBjb2RlLgogCSAgIE90aGVyIENQVXMgYXJlIG5vdCBydW5uaW5nLiAqLwogCXN0b3Bfbm1pKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdG9wX21jZSgpOwotI2VuZGlmCisKKwkvKgorCSAqIERvbid0IHN0b3AgbWFjaGluZSBjaGVjayBleGNlcHRpb25zIHdoaWxlIHBhdGNoaW5nLgorCSAqIE1DRXMgb25seSBoYXBwZW4gd2hlbiBzb21ldGhpbmcgZ290IGNvcnJ1cHRlZCBhbmQgaW4gdGhpcworCSAqIGNhc2Ugd2UgbXVzdCBkbyBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcnJ1cHRpb24uCisJICogSWdub3JpbmcgaXQgaXMgd29yc2UgdGhhbiBhIHVubGlrZWx5IHBhdGNoaW5nIHJhY2UuCisJICogQWxzbyBtYWNoaW5lIGNoZWNrcyB0ZW5kIHRvIGJlIGJyb2FkY2FzdCBhbmQgaWYgb25lIENQVQorCSAqIGdvZXMgaW50byBtYWNoaW5lIGNoZWNrIHRoZSBvdGhlcnMgZm9sbG93IHF1aWNrbHksIHNvIHdlIGRvbid0CisJICogZXhwZWN0IGEgbWFjaGluZSBjaGVjayB0byBjYXVzZSB1bmR1ZSBwcm9ibGVtcyBkdXJpbmcgdG8gY29kZQorCSAqIHBhdGNoaW5nLgorCSAqLwogCiAJYXBwbHlfYWx0ZXJuYXRpdmVzKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCk7CiAKQEAgLTQ1Niw5ICs0NjQsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKV9fc21wX2xvY2tzX2VuZCk7CiAKIAlyZXN0YXJ0X25taSgpOwotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JcmVzdGFydF9tY2UoKTsKLSNlbmRpZgogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBmOWNlY2RmLi44NWViOGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKIApAQCAtODA4LDcgKzgwOSw3IEBACiAJdTMyIHY7CiAKIAkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKKwlpZiAoIXgyYXBpYyAmJiAhYXBpY19waHlzKQogCQlyZXR1cm47CiAKIAltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CkBAIC04NDIsNiArODQzLDE0IEBACiAJCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKIAl9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAorCWlmIChtYXhsdnQgPj0gNikgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUQ01DSSk7CisJCWlmICghKHYgJiBBUElDX0xWVF9NQVNLRUQpKQorCQkJYXBpY193cml0ZShBUElDX0xWVENNQ0ksIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCX0KKyNlbmRpZgorCiAJLyoKIAkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6CiAJICovCkBAIC0xMjQxLDYgKzEyNTAsMTIgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKKworI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCisJLyogUmVjaGVjayBDTUNJIGluZm9ybWF0aW9uIGFmdGVyIGxvY2FsIEFQSUMgaXMgdXAgb24gQ1BVICMwICovCisJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKQorCQljbWNpX3JlY2hlY2soKTsKKyNlbmRpZgogfQogCiB2b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQpAQCAtMTMxOSwxNSArMTMzNCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfODI1OUEoKTsKLQotCXJldCA9IHNhdmVfbWFza19JT19BUElDX3NldHVwKCk7CisJcmV0ID0gc2F2ZV9JT19BUElDX3NldHVwKCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJTYXZpbmcgSU8tQVBJQyBzdGF0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVuZDsKIAl9CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbWFza19JT19BUElDX3NldHVwKCk7CisJbWFza184MjU5QSgpOworCiAJcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOwogCiAJaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgewpAQCAtMTM1MiwxMCArMTM2OCwxMCBAQAogCWVsc2UKIAkJcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyh4MmFwaWNfcHJlZW5hYmxlZCk7CiAKLWVuZDoKIAl1bm1hc2tfODI1OUEoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKK2VuZDoKIAlpZiAoIXJldCkgewogCQlpZiAoIXgyYXBpY19wcmVlbmFibGVkKQogCQkJcHJfaW5mbygiRW5hYmxlZCB4MmFwaWMgYW5kIGludGVycnVwdC1yZW1hcHBpbmdcbiIpOwpAQCAtMTUwOCwxMiArMTUyNCwxMCBAQAogICovCiB2b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogCWlmICh4MmFwaWMpIHsKIAkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbApAQCAtMTk1NywxMiArMTk3MSw5IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogCWlmICh4MmFwaWMpCiAJCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlCi0jZW5kaWYKLQl7CisJZWxzZSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCiAJCSAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCmluZGV4IGY5MzM4MjIuLjAwMTQ3MTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCkBAIC0xNTksMjAgKzE1OSw2IEBACiAJcmV0dXJuIHBoeXNpZF9pc3NldChyZWFkX3hhcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sxID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLQl1bnNpZ25lZCBsb25nIG1hc2syID0gY3B1bWFza19iaXRzKGFuZG1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLQotCXJldHVybiBtYXNrMSAmIG1hc2syOwotfQotCiBzdGF0aWMgaW50IGZsYXRfcGh5c19wa2dfaWQoaW50IGluaXRpYWxfYXBpY19pZCwgaW50IGluZGV4X21zYikKIHsKIAlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOwpAQCAtMjEzLDggKzE5OSw4IEBACiAJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKIAkuYXBpY19pZF9tYXNrCQkJPSAweEZGdSA8PCAyNCwKIAotCS5jcHVfbWFza190b19hcGljaWQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCS5jcHVfbWFza190b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWRfYW5kLAogCiAJLnNlbmRfSVBJX21hc2sJCQk9IGZsYXRfc2VuZF9JUElfbWFzaywKIAkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggMDBlNjA3MS4uZGE5OWZmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzg5LDYgKzM4OSw4IEBACiAJdW5zaWduZWQgaW50IGluZGV4OwogCXVuc2lnbmVkIGludCB1bnVzZWRbM107CiAJdW5zaWduZWQgaW50IGRhdGE7CisJdW5zaWduZWQgaW50IHVudXNlZDJbMTFdOworCXVuc2lnbmVkIGludCBlb2k7CiB9OwogCiBzdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKQEAgLTM5Nyw2ICszOTksMTIgQEAKIAkJKyAobXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyICYgflBBR0VfTUFTSyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX2VvaSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHZlY3RvcikKK3sKKwlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOworCXdyaXRlbCh2ZWN0b3IsICZpb19hcGljLT5lb2kpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKQEAgLTU0NiwxNiArNTU0LDEyIEBACiAKIAkJYXBpYyA9IGVudHJ5LT5hcGljOwogCQlwaW4gPSBlbnRyeS0+cGluOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCS8qCiAJCSAqIFdpdGggaW50ZXJydXB0LXJlbWFwcGluZywgZGVzdGluYXRpb24gaW5mb3JtYXRpb24gY29tZXMKIAkJICogZnJvbSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5LgogCQkgKi8KIAkJaWYgKCFpcnFfcmVtYXBwZWQoaXJxKSkKIAkJCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbHNlCi0JCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbmRpZgogCQlyZWcgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIHBpbioyKTsKIAkJcmVnICY9IH5JT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLOwogCQlyZWcgfD0gdmVjdG9yOwpAQCAtNTg4LDEwICs1OTIsMTIgQEAKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm4gQkFEX0FQSUNJRDsKIAotCWNwdW1hc2tfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbiwgbWFzayk7CisJLyogY2hlY2sgdGhhdCBiZWZvcmUgZGVzYy0+YWRkaW5pdHkgZ2V0IHVwZGF0ZWQgKi8KIAlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOwogCi0JcmV0dXJuIGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBtYXNrKTsKKworCXJldHVybiBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04NDksOSArODU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZWFybHlfaW9hcGljX2VudHJpZXNbTUFYX0lPX0FQSUNTXTsKIAogLyoKLSAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKKyAqIFNhdmVzIGFsbCB0aGUgSU8tQVBJQyBSVEUncwogICovCi1pbnQgc2F2ZV9tYXNrX0lPX0FQSUNfc2V0dXAodm9pZCkKK2ludCBzYXZlX0lPX0FQSUNfc2V0dXAodm9pZCkKIHsKIAl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg3NiwxNiArODgyLDkgQEAKIAl9CiAKIAlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQkJZW50cnkgPSBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dID0KKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKKwkJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQogCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JCQlpZiAoIWVudHJ5Lm1hc2spIHsKLQkJCQllbnRyeS5tYXNrID0gMTsKLQkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JCQl9Ci0JCX0KIAogCXJldHVybiAwOwogCkBAIC04OTgsNiArODk3LDI1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3ZvaWQgbWFza19JT19BUElDX3NldHVwKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWJyZWFrOworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCQkJZW50cnkgPSBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dOworCQkJaWYgKCFlbnRyeS5tYXNrKSB7CisJCQkJZW50cnkubWFzayA9IDE7CisJCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworCQkJfQorCQl9CisJfQorfQorCiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQogewogCWludCBhcGljLCBwaW47CkBAIC0xNDExLDkgKzE0MjksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOwotI2VuZGlmCiAKICNkZWZpbmUgSU9BUElDX0FVVE8gICAgIC0xCiAjZGVmaW5lIElPQVBJQ19FREdFICAgICAwCkBAIC0xNDUyLDcgKzE0NjgsNiBAQAogCWVsc2UKIAkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwogCQlpZiAodHJpZ2dlcikKQEAgLTE0NjQsNyArMTQ3OSw3IEBACiAJCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKKwogCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CiAJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKQEAgLTE0NzgsMTQgKzE0OTMsMTMgQEAKIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWNfaWQsIGludCBpcnEsCiAJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAotCQkgICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQorCQkgICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yLCBpbnQgcGluKQogewogCS8qCiAJICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgogCSAqLwogCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKIAkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpY19pZCk7CiAJCXN0cnVjdCBpcnRlIGlydGU7CkBAIC0xNTA0LDcgKzE1MTgsMTQgQEAKIAogCQlpcnRlLnByZXNlbnQgPSAxOwogCQlpcnRlLmRzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOworCQkvKgorCQkgKiBUcmlnZ2VyIG1vZGUgaW4gdGhlIElSVEUgd2lsbCBhbHdheXMgYmUgZWRnZSwgYW5kIHRoZQorCQkgKiBhY3R1YWwgbGV2ZWwgb3IgZWRnZSB0cmlnZ2VyIHdpbGwgYmUgc2V0dXAgaW4gdGhlIElPLUFQSUMKKwkJICogUlRFLiBUaGlzIHdpbGwgaGVscCBzaW1wbGlmeSBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbi4KKwkJICogRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBjb21tZW50cyBhYm92ZSBleHBsYWluaWcgSU8tQVBJQworCQkgKiBpcnEgbWlncmF0aW9uIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQtcmVtYXBwaW5nLgorCQkgKi8KKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOwogCQlpcnRlLmRsdnJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKIAkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7CiAJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7CkBAIC0xNTE1LDE4ICsxNTM2LDIxIEBACiAJCWlyX2VudHJ5LT56ZXJvID0gMDsKIAkJaXJfZW50cnktPmZvcm1hdCA9IDE7CiAJCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJCS8qCisJCSAqIElPLUFQSUMgUlRFIHdpbGwgYmUgY29uZmlndXJlZCB3aXRoIHZpcnR1YWwgdmVjdG9yLgorCQkgKiBpcnEgaGFuZGxlciB3aWxsIGRvIHRoZSBleHBsaWNpdCBFT0kgdG8gdGhlIGlvLWFwaWMuCisJCSAqLworCQlpcl9lbnRyeS0+dmVjdG9yID0gcGluOworCX0gZWxzZSB7CiAJCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CiAJCWVudHJ5LT5kZXN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOwogCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOworCQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwogCX0KIAogCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwogCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKIAllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwogCiAJLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KIAkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KQEAgLTE1NjEsNyArMTU4NSw3IEBACiAKIAogCWlmIChzZXR1cF9pb2FwaWNfZW50cnkobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIGlycSwgJmVudHJ5LAotCQkJICAgICAgIGRlc3QsIHRyaWdnZXIsIHBvbGFyaXR5LCBjZmctPnZlY3RvcikpIHsKKwkJCSAgICAgICBkZXN0LCB0cmlnZ2VyLCBwb2xhcml0eSwgY2ZnLT52ZWN0b3IsIHBpbikpIHsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0dXAgaW9hcGljIGVudHJ5IGZvciBpb2FwaWMgICVkLCBwaW4gJWRcbiIsCiAJCSAgICAgICBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgcGluKTsKIAkJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKQEAgLTE2NDIsMTAgKzE2NjYsOCBAQAogewogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJcmV0dXJuOwotI2VuZGlmCiAKIAltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKIApAQCAtMjA0MCw4ICsyMDYyLDEzIEBACiAJICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQwogCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQogCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCisJICoKKwkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGZvciBub3cgd2Ugd2lsbCB1c2UgdmlydHVhbCB3aXJlIEEgbW9kZSwKKwkgKiBhcyB2aXJ0dWFsIHdpcmUgQiBpcyBsaXR0bGUgY29tcGxleCAobmVlZCB0byBjb25maWd1cmUgYm90aAorCSAqIElPQVBJQyBSVEUgYXN3ZWxsIGFzIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkpLgorCSAqIEFzIHRoaXMgZ2V0cyBjYWxsZWQgZHVyaW5nIGNyYXNoIGR1bXAsIGtlZXAgdGhpcyBzaW1wbGUgZm9yIG5vdy4KIAkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgeworCWlmIChpb2FwaWNfaTgyNTkucGluICE9IC0xICYmICFpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7CiAJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwogCiAJCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwpAQCAtMjA2MSw3ICsyMDg4LDEwIEBACiAJCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWNfaTgyNTkuYXBpYywgaW9hcGljX2k4MjU5LnBpbiwgZW50cnkpOwogCX0KIAotCWRpc2Nvbm5lY3RfYnNwX0FQSUMoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSk7CisJLyoKKwkgKiBVc2UgdmlydHVhbCB3aXJlIEEgbW9kZSB3aGVuIGludGVycnVwdCByZW1hcHBpbmcgaXMgZW5hYmxlZC4KKwkgKi8KKwlkaXNjb25uZWN0X2JzcF9BUElDKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkICYmIGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMjMwMywzNyArMjMzMywyNCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhpcl9taWdyYXRpb25fd29yaywgaXJfaXJxX21pZ3JhdGlvbik7CiAKIC8qCiAgKiBNaWdyYXRlIHRoZSBJTy1BUElDIGlycSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ci1yZW1hcHBpbmcuCiAgKgotICogRm9yIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUob2YgdmVjdG9yCi0gKiBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCisgKiBGb3IgYm90aCBsZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQsIGlycSBtaWdyYXRpb24gaXMgYSBzaW1wbGUgYXRvbWljCisgKiB1cGRhdGUob2YgdmVjdG9yIGFuZCBjcHUgZGVzdGluYXRpb24pIG9mIElSVEUgYW5kIGZsdXNoIHRoZSBoYXJkd2FyZSBjYWNoZS4KICAqCi0gKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgaW8tYXBpYyBSVEUgYXN3ZWxsIHdpdGggdGhlIHVwZGF0ZQotICogdmVjdG9yIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIG1vZGlmeWluZyBJUlRFIHdpdGggdmVjdG9yIGFuZCBkZXN0aW5hdGlvbi4KLSAqIFNvIGlycSBtaWdyYXRpb24gZm9yIGxldmVsIHRyaWdnZXJlZCBpcyBsaXR0bGUgIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8KLSAqIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbi4gQnV0IHRoZSBnb29kIG5ld3MgaXMsIHdlIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0KLSAqIGZvciBsZXZlbCB0cmlnZ2VyZWQgbWlncmF0aW9uIGFzIHdlIGhhdmUgdG9kYXksIG9ubHkgZGlmZmVyZW5jZSBiZWluZywKLSAqIHdlIG5vdyBpbml0aWF0ZSB0aGUgaXJxIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIHRoZQotICogaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogSW4gZnV0dXJlLCB3aGVuIHdlIGRvIGEgZGlyZWN0ZWQgRU9JIChjb21iaW5lZCB3aXRoIGNwdSBFT0kgYnJvYWRjYXN0Ci0gKiBzdXBwcmVzc2lvbikgdG8gdGhlIElPLUFQSUMsIGxldmVsIHRyaWdnZXJlZCBpcnEgbWlncmF0aW9uIHdpbGwgYWxzbyBiZQotICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCi0gKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCisgKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBlbGltaW5hdGUgdGhlIGlvLWFwaWMgUlRFIG1vZGlmaWNhdGlvbiAod2l0aCB0aGUKKyAqIHVwZGF0ZWQgdmVjdG9yIGluZm9ybWF0aW9uKSwgYnkgdXNpbmcgYSB2aXJ0dWFsIHZlY3RvciAoaW8tYXBpYyBwaW4gbnVtYmVyKS4KKyAqIFJlYWwgdmVjdG9yIHRoYXQgaXMgdXNlZCBmb3IgaW50ZXJydXB0aW5nIGNwdSB3aWxsIGJlIGNvbWluZyBmcm9tCisgKiB0aGUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KICAqLwogc3RhdGljIHZvaWQKIG1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgaXJ0ZSBpcnRlOwotCWludCBtb2RpZnlfaW9hcGljX3J0ZTsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnE7CiAKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhtYXNrLCBjcHVfb25saW5lX21hc2spKQpAQCAtMjM1MSwxMyArMjM2OCw2IEBACiAKIAlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgbWFzayk7CiAKLQltb2RpZnlfaW9hcGljX3J0ZSA9IGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTDsKLQlpZiAobW9kaWZ5X2lvYXBpY19ydGUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQl9Ci0KIAlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwogCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKIApAQCAtMjM3Miw3MyArMjM4MiwxMiBAQAogCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IHJldCA9IC0xOwotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0KLQltYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7Ci0KLQlpZiAoaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhjZmcpKSB7Ci0JCS8qCi0JCSAqIEludGVycnVwdCBpbiBwcm9ncmVzcy4gTWlncmF0aW5nIGlycSBub3cgd2lsbCBjaGFuZ2UgdGhlCi0JCSAqIHZlY3RvciBpbmZvcm1hdGlvbiBpbiB0aGUgSU8tQVBJQyBSVEUgYW5kIHRoYXQgd2lsbCBjb25mdXNlCi0JCSAqIHRoZSBFT0kgYnJvYWRjYXN0IHBlcmZvcm1lZCBieSBjcHUuCi0JCSAqIFNvLCBkZWxheSB0aGUgaXJxIG1pZ3JhdGlvbiB0byB0aGUgbmV4dCBpbnN0YW5jZS4KLQkJICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXJfbWlncmF0aW9uX3dvcmssIDEpOwotCQlnb3RvIHVubWFzazsKLQl9Ci0KLQkvKiBldmVydGhpbmcgaXMgY2xlYXIuIHdlIGhhdmUgcmlnaHQgb2Ygd2F5ICovCi0JbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2MoZGVzYywgZGVzYy0+cGVuZGluZ19tYXNrKTsKLQotCXJldCA9IDA7Ci0JZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCWNwdW1hc2tfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKLQotdW5tYXNrOgotCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKLQkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSB8fAotCQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQl9Ci0JfQotfQotCiAvKgogICogTWlncmF0ZXMgdGhlIElSUSBkZXN0aW5hdGlvbiBpbiB0aGUgcHJvY2VzcyBjb250ZXh0LgogICovCiBzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWNwdW1hc2tfY29weShkZXNjLT5wZW5kaW5nX21hc2ssIG1hc2spOwotCQltaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbF9kZXNjKGRlc2MpOwotCQlyZXR1cm47Ci0JfQotCiAJbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2MoZGVzYywgbWFzayk7CiB9CiBzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLApAQCAtMjQ0OCw2ICsyMzk3LDExIEBACiAKIAlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworfQogI2VuZGlmCiAKIGFzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKQEAgLTI0NjEsNiArMjQxNSw3IEBACiAJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7CiAJCXVuc2lnbmVkIGludCBpcnE7CisJCXVuc2lnbmVkIGludCBpcnI7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAkJc3RydWN0IGlycV9jZmcgKmNmZzsKIAkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwpAQCAtMjQ4MCw2ICsyNDM1LDE4IEBACiAJCWlmICh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IgJiYgY3B1bWFza190ZXN0X2NwdShtZSwgY2ZnLT5kb21haW4pKQogCQkJZ290byB1bmxvY2s7CiAKKwkJaXJyID0gYXBpY19yZWFkKEFQSUNfSVJSICsgKHZlY3RvciAvIDMyICogMHgxMCkpOworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgdmVjdG9yIHRoYXQgbmVlZHMgdG8gYmUgY2xlYW5lZHVwIGlzCisJCSAqIHJlZ2lzdGVyZWQgYXQgdGhlIGNwdSdzIElSUi4gSWYgc28sIHRoZW4gdGhpcyBpcyBub3QKKwkJICogdGhlIGJlc3QgdGltZSB0byBjbGVhbiBpdCB1cC4gTGV0cyBjbGVhbiBpdCB1cCBpbiB0aGUKKwkJICogbmV4dCBhdHRlbXB0IGJ5IHNlbmRpbmcgYW5vdGhlciBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUgorCQkgKiB0byBteXNlbGYuCisJCSAqLworCQlpZiAoaXJyICAmICgxIDw8ICh2ZWN0b3IgJSAzMikpKSB7CisJCQlhcGljLT5zZW5kX0lQSV9zZWxmKElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CiAJCV9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXSA9IC0xOwogCQljZmctPm1vdmVfY2xlYW51cF9jb3VudC0tOwogdW5sb2NrOgpAQCAtMjUyOSw5ICsyNDk2LDQ0IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgdm9pZCBfX2VvaV9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcpCit7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJZm9yICg7OykgeworCisJCWlmICghZW50cnkpCisJCQlicmVhazsKKworCQlhcGljID0gZW50cnktPmFwaWM7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCWlvX2FwaWNfZW9pKGFwaWMsIHBpbik7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZAorZW9pX2lvYXBpY19pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gZGVzYy0+aXJxOworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9fZW9pX2lvYXBpY19pcnEoaXJxLCBjZmcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWFja194MkFQSUNfaXJxKCk7CisJZW9pX2lvYXBpY19pcnEoZGVzYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFja194MmFwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjY2MiwyMCArMjY2NCwyMCBAQAogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJJUi1JTy1BUElDIiwKIAkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKIAkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCiAJLmVvaQkJPSBhY2tfeDJhcGljX2xldmVsLAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5CT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCiAjZW5kaWYKKyNlbmRpZgogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQogewpAQCAtMjkwMSwxMCArMjkwMyw4IEBACiAJICogODI1OUEuCiAJICovCiAJaWYgKHBpbjEgPT0gLTEpIHsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7Ci0jZW5kaWYKIAkJcGluMSA9IHBpbjI7CiAJCWFwaWMxID0gYXBpYzI7CiAJCW5vX3BpbjEgPSAxOwpAQCAtMjk0MCwxMCArMjk0MCw4IEBACiAJCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7CiAJCQlnb3RvIG91dDsKIAkJfQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJcGFuaWMoInRpbWVyIGRvZXNuJ3Qgd29yayB0aHJvdWdoIEludGVycnVwdC1yZW1hcHBlZCBJTy1BUElDIik7Ci0jZW5kaWYKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOwogCQlpZiAoIW5vX3BpbjEpCkBAIC0zMjM3LDkgKzMyMzUsNyBAQAogCWlmIChkZXNjKQogCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWZyZWVfaXJ0ZShpcnEpOwotI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwpAQCAtMzI2NSw3ICszMjYxLDYgQEAKIAogCWRlc3QgPSBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGNmZy0+ZG9tYWluLCBhcGljLT50YXJnZXRfY3B1cygpKTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CiAJCXN0cnVjdCBpcnRlIGlydGU7CiAJCWludCBpcl9pbmRleDsKQEAgLTMyOTEsMTAgKzMyODYsMTMgQEAKIAkJCQkgIE1TSV9BRERSX0lSX1NIViB8CiAJCQkJICBNU0lfQUREUl9JUl9JTkRFWDEoaXJfaW5kZXgpIHwKIAkJCQkgIE1TSV9BRERSX0lSX0lOREVYMihpcl9pbmRleCk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisJfSBlbHNlIHsKKwkJaWYgKHgyYXBpY19lbmFibGVkKCkpCisJCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJIHwKKwkJCQkJICBNU0lfQUREUl9FWFRfREVTVF9JRChkZXN0KTsKKwkJZWxzZQorCQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwogCQltc2ctPmFkZHJlc3NfbG8gPQogCQkJTVNJX0FERFJfQkFTRV9MTyB8CiAJCQkoKGFwaWMtPmlycV9kZXN0X21vZGUgPT0gMCkgPwpAQCAtMzM5NCwxNSArMzM5MiwxNiBAQAogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKIAkubmFtZQkJPSAiSVItUENJLU1TSSIsCiAJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKIAkubWFzawkJPSBtYXNrX21zaV9pcnEsCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eQk9IGlyX3NldF9tc2lfaXJxX2FmZmluaXR5LAogI2VuZGlmCisjZW5kaWYKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCkBAIC0zNDMyLDcgKzM0MzEsNiBAQAogCX0KIAlyZXR1cm4gaW5kZXg7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBzZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywgaW50IGlycSkKIHsKQEAgLTM0NDYsNyArMzQ0NCw2IEBACiAJc2V0X2lycV9tc2koaXJxLCBtc2lkZXNjKTsKIAl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQkvKgpAQCAtMzQ1NSw3ICszNDUyLDYgQEAKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2lyX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAl9IGVsc2UKLSNlbmRpZgogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJpcnEgJWQgZm9yIE1TSS9NU0ktWFxuIiwgaXJxKTsKQEAgLTM0NjksMTEgKzM0NjUsOCBAQAogCWludCByZXQsIHN1Yl9oYW5kbGU7CiAJc3RydWN0IG1zaV9kZXNjICptc2lkZXNjOwogCXVuc2lnbmVkIGludCBpcnFfd2FudDsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IDA7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IE5VTEw7CiAJaW50IGluZGV4ID0gMDsKLSNlbmRpZgogCiAJaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKIAlzdWJfaGFuZGxlID0gMDsKQEAgLTM0ODIsNyArMzQ3NSw2IEBACiAJCWlmIChpcnEgPT0gMCkKIAkJCXJldHVybiAtMTsKIAkJaXJxX3dhbnQgPSBpcnEgKyAxOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCWdvdG8gbm9faXI7CiAKQEAgLTM1MTAsNyArMzUwMiw2IEBACiAJCQlzZXRfaXJ0ZV9pcnEoaXJxLCBpb21tdSwgaW5kZXgsIHN1Yl9oYW5kbGUpOwogCQl9CiBub19pcjoKLSNlbmRpZgogCQlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgbXNpZGVzYywgaXJxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycm9yOwpAQCAtMzUyOCw3ICszNTE5LDcgQEAKIAlkZXN0cm95X2lycShpcnEpOwogfQogCi0jaWZkZWYgQ09ORklHX0RNQVIKKyNpZiBkZWZpbmVkIChDT05GSUdfRE1BUikgfHwgZGVmaW5lZCAoQ09ORklHX0lOVFJfUkVNQVApCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgZG1hcl9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewpAQCAtMzYwOSw3ICszNjAwLDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CiAJLm5hbWUgPSAiSFBFVF9NU0kiLAogCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCiAJLm1hc2sgPSBocGV0X21zaV9tYXNrLApAQCAtNDA0NSwxMSArNDAzNiw5IEBACiAJCQllbHNlCiAJCQkJbWFzayA9IGFwaWMtPnRhcmdldF9jcHVzKCk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQkJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKIAkJCWVsc2UKLSNlbmRpZgogCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7CiAJCX0KIApAQCAtNDE0Miw5ICs0MTMxLDEyIEBACiAJc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKIAogCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJaWYgKG5yX2lvYXBpY3MgPiAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiSU8gQVBJQyByZXNvdXJjZXMgY291bGRuJ3QgYmUgYWxsb2NhdGVkLlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggOGQ3NzQ4ZS4uMTc4MzY1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC02OCw2ICs2OCwxMyBAQAogCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwogCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7CiAJfQorCisJLyoKKwkgKiBOb3cgdGhhdCBhcGljIHJvdXRpbmcgbW9kZWwgaXMgc2VsZWN0ZWQsIGNvbmZpZ3VyZSB0aGUKKwkgKiBmYXVsdCBoYW5kbGluZyBmb3IgaW50ciByZW1hcHBpbmcuCisJICovCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCWVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKCk7CiB9CiAKIC8qIFNhbWUgZm9yIGJvdGggZmxhdCBhbmQgcGh5c2ljYWwuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwppbmRleCA4ZmI4N2I2Li40YTkwM2UyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKQEAgLTU3LDYgKzU3LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KApAQCAtNzMsNiArNzUsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CiAJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCkBAIC05MCw2ICs5NCw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUocXVlcnlfY3B1KSB7CiAJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwppbmRleCAyMzYyNWI5Li5hMjg0MzU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKQEAgLTU4LDYgKzU4LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCkBAIC03Myw2ICs3NSw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKIAkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKQEAgLTg5LDYgKzkzLDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpIHsKIAkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jaGVjay5jIGIvYXJjaC94ODYva2VybmVsL2NoZWNrLmMKaW5kZXggMmFjMGFiNy4uZmM5OTllNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NoZWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NoZWNrLmMKQEAgLTgzLDE1ICs4MywxNSBAQAogCQl1NjQgc2l6ZTsKIAkJYWRkciA9IGZpbmRfZTgyMF9hcmVhX3NpemUoYWRkciwgJnNpemUsIFBBR0VfU0laRSk7CiAKLQkJaWYgKGFkZHIgPT0gMCkKKwkJaWYgKCEoYWRkciArIDEpKQorCQkJYnJlYWs7CisKKwkJaWYgKGFkZHIgPj0gY29ycnVwdGlvbl9jaGVja19zaXplKQogCQkJYnJlYWs7CiAKIAkJaWYgKChhZGRyICsgc2l6ZSkgPiBjb3JydXB0aW9uX2NoZWNrX3NpemUpCiAJCQlzaXplID0gY29ycnVwdGlvbl9jaGVja19zaXplIC0gYWRkcjsKIAotCQlpZiAoc2l6ZSA9PSAwKQotCQkJYnJlYWs7Ci0KIAkJZTgyMF91cGRhdGVfcmFuZ2UoYWRkciwgc2l6ZSwgRTgyMF9SQU0sIEU4MjBfUkVTRVJWRUQpOwogCQlzY2FuX2FyZWFzW251bV9zY2FuX2FyZWFzXS5hZGRyID0gYWRkcjsKIAkJc2Nhbl9hcmVhc1tudW1fc2Nhbl9hcmVhc10uc2l6ZSA9IHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCA4MmRiN2Y0Li40ZTI0MmY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTE0LDExICsxNCwxMiBAQAogb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gYnVncy5vIGNtcHhjaGcubwogb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gYnVnc182NC5vCiAKK29iai0kKENPTkZJR19YODZfQ1BVX0RFQlVHKQkJKz0gY3B1X2RlYnVnLm8KKwogb2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpCQkrPSBpbnRlbC5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpCQkrPSBhbWQubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfQ1lSSVhfMzIpCQkrPSBjeXJpeC5vCi1vYmotJChDT05GSUdfQ1BVX1NVUF9DRU5UQVVSXzMyKQkrPSBjZW50YXVyLm8KLW9iai0kKENPTkZJR19DUFVfU1VQX0NFTlRBVVJfNjQpCSs9IGNlbnRhdXJfNjQubworb2JqLSQoQ09ORklHX0NQVV9TVVBfQ0VOVEFVUikJCSs9IGNlbnRhdXIubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfVFJBTlNNRVRBXzMyKQkrPSB0cmFuc21ldGEubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfVU1DXzMyKQkJKz0gdW1jLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCmluZGV4IDY4ODJhNzMuLjgyMjBhZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAl1MzIgcmVnc1s0XTsKIAljb25zdCBzdHJ1Y3QgY3B1aWRfYml0ICpjYjsKIAotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CiAJCXsgWDg2X0ZFQVRVUkVfSURBLCBDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggMjU0MjNhNS4uN2U0YTQ1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfNjQKICMgaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KQEAgLTE0MSw2ICsxNDIsNTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbWRfazdfc21wX2NoZWNrKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJLyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovCisJaWYgKGMtPmNwdV9pbmRleCA9PSBib290X2NwdV9pZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDZXJ0YWluIEF0aGxvbnMgbWlnaHQgd29yayAoZm9yIHZhcmlvdXMgdmFsdWVzIG9mICd3b3JrJykgaW4gU01QCisJICogYnV0IHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgYXMgTVAgY2FwYWJsZS4KKwkgKi8KKwkvKiBBdGhsb24gNjYwLzY2MSBpcyB2YWxpZC4gKi8KKwlpZiAoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoKGMtPng4Nl9tYXNrID09IDApIHx8CisJICAgIChjLT54ODZfbWFzayA9PSAxKSkpCisJCWdvdG8gdmFsaWRfazc7CisKKwkvKiBEdXJvbiA2NzAgaXMgdmFsaWQgKi8KKwlpZiAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPT0gMCkpCisJCWdvdG8gdmFsaWRfazc7CisKKwkvKgorCSAqIEF0aGxvbiA2NjIsIER1cm9uIDY3MSwgYW5kIEF0aGxvbiA+bW9kZWwgNyBoYXZlIGNhcGFiaWxpdHkKKwkgKiBiaXQuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIEE1IHN0ZXBwaW5nICg2NjIpIG9mIHNvbWUKKwkgKiBBdGhsb24gWFAncyBoYXZlIHRoZSBNUCBiaXQgc2V0LgorCSAqIFNlZSBodHRwOi8vd3d3LmhlaXNlLmRlL25ld3N0aWNrZXIvZGF0YS9qb3ctMTguMTAuMDEtMDAwIGZvcgorCSAqIG1vcmUuCisJICovCisJaWYgKCgoYy0+eDg2X21vZGVsID09IDYpICYmIChjLT54ODZfbWFzayA+PSAyKSkgfHwKKwkgICAgKChjLT54ODZfbW9kZWwgPT0gNykgJiYgKGMtPng4Nl9tYXNrID49IDEpKSB8fAorCSAgICAgKGMtPng4Nl9tb2RlbCA+IDcpKQorCQlpZiAoY3B1X2hhc19tcCkKKwkJCWdvdG8gdmFsaWRfazc7CisKKwkvKiBJZiB3ZSBnZXQgaGVyZSwgbm90IGEgY2VydGlmaWVkIFNNUCBjYXBhYmxlIEFNRCBzeXN0ZW0uICovCisKKwkvKgorCSAqIERvbid0IHRhaW50IGlmIHdlIGFyZSBydW5uaW5nIFNNUCBrZXJuZWwgb24gYSBzaW5nbGUgbm9uLU1QCisJICogYXBwcm92ZWQgQXRobG9uCisJICovCisJV0FSTl9PTkNFKDEsICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKKwkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKKwlpZiAoIXRlc3RfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCkpCisJCWFkZF90YWludChUQUlOVF9VTlNBRkVfU01QKTsKKwordmFsaWRfazc6CisJOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X2FtZF9rNyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIGwsIGg7CkBAIC0xNzUsNiArMjI1LDggQEAKIAl9CiAKIAlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9LNyk7CisKKwlhbWRfazdfc21wX2NoZWNrKGMpOwogfQogI2VuZGlmCiAKQEAgLTQ1MCw3ICs1MDIsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBhbWRfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGFtZF9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJBTUQiLAogCS5jX2lkZW50CT0geyAiQXV0aGVudGljQU1EIiB9LAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyLmMKaW5kZXggODliZmRkOS4uYzk1ZTgzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyLmMKQEAgLTEsMTEgKzEsMTEgQEAKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKIApAQCAtMjc2LDcgKzI3Niw3IEBACiAJCSAqLwogCQljLT54ODZfY2FwYWJpbGl0eVs1XSA9IGNwdWlkX2VkeCgweEMwMDAwMDAxKTsKIAl9Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogQ3lyaXggSUlJIGZhbWlseSBuZWVkcyBDWDggJiBQR0UgZXhwbGljaXRseSBlbmFibGVkLiAqLwogCWlmIChjLT54ODZfbW9kZWwgPj0gNiAmJiBjLT54ODZfbW9kZWwgPD0gOSkgewogCQlyZG1zcihNU1JfVklBX0ZDUiwgbG8sIGhpKTsKQEAgLTI4OCw2ICsyODgsMTEgQEAKIAkvKiBCZWZvcmUgTmVoZW1pYWgsIHRoZSBDMydzIGhhZCAzZE5PVyEgKi8KIAlpZiAoYy0+eDg2X21vZGVsID49IDYgJiYgYy0+eDg2X21vZGVsIDwgOSkKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfM0ROT1cpOworI2VuZGlmCisJaWYgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZikgeworCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZSAqIDI7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKKwl9CiAKIAlkaXNwbGF5X2NhY2hlaW5mbyhjKTsKIH0KQEAgLTMxNiwxNiArMzIxLDI1IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZWFybHlfaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlzd2l0Y2ggKGMtPng4NikgeworI2lmZGVmIENPTkZJR19YODZfMzIKIAljYXNlIDU6CiAJCS8qIEVtdWxhdGUgTVRSUnMgdXNpbmcgQ2VudGF1cidzIE1DUi4gKi8KIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpOwogCQlicmVhazsKKyNlbmRpZgorCWNhc2UgNjoKKwkJaWYgKGMtPng4Nl9tb2RlbCA+PSAweGYpCisJCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOworCQlicmVhazsKIAl9CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1NZU0VOVEVSMzIpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWNoYXIgKm5hbWU7CiAJdTMyICBmY3Jfc2V0ID0gMDsKIAl1MzIgIGZjcl9jbHIgPSAwOwpAQCAtMzM3LDggKzM1MSwxMCBAQAogCSAqIDNETm93IGlzIElEZCBieSBiaXQgMzEgaW4gZXh0ZW5kZWQgQ1BVSUQgKDEqMzIrMzEpIGFueXdheQogCSAqLwogCWNsZWFyX2NwdV9jYXAoYywgMCozMiszMSk7Ci0KKyNlbmRpZgorCWVhcmx5X2luaXRfY2VudGF1cihjKTsKIAlzd2l0Y2ggKGMtPng4NikgeworI2lmZGVmIENPTkZJR19YODZfMzIKIAljYXNlIDU6CiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJCWNhc2UgNDoKQEAgLTQ0MiwxNiArNDU4LDIwIEBACiAJCX0KIAkJc3ByaW50ZihjLT54ODZfbW9kZWxfaWQsICJXaW5DaGlwICVzIiwgbmFtZSk7CiAJCWJyZWFrOwotCisjZW5kaWYKIAljYXNlIDY6CiAJCWluaXRfYzMoYyk7CiAJCWJyZWFrOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdAogY2VudGF1cl9zaXplX2NhY2hlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgdW5zaWduZWQgaW50IHNpemUpCiB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qIFZJQSBDMyBDUFVzICg2NzAtNjhGKSBuZWVkIGZ1cnRoZXIgc2hpZnRpbmcuICovCiAJaWYgKChjLT54ODYgPT0gNikgJiYgKChjLT54ODZfbW9kZWwgPT0gNykgfHwgKGMtPng4Nl9tb2RlbCA9PSA4KSkpCiAJCXNpemUgPj49IDg7CkBAIC00NjQsMTEgKzQ4NCwxMSBAQAogCWlmICgoYy0+eDg2ID09IDYpICYmIChjLT54ODZfbW9kZWwgPT0gOSkgJiYKIAkJCQkoYy0+eDg2X21hc2sgPT0gMSkgJiYgKHNpemUgPT0gNjUpKQogCQlzaXplIC09IDE7Ci0KKyNlbmRpZgogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgY2VudGF1cl9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgY2VudGF1cl9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJDZW50YXVyIiwKIAkuY19pZGVudAk9IHsgIkNlbnRhdXJIYXVscyIgfSwKIAkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF9jZW50YXVyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXJfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE2MjVmNS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXJfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0KLSNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotI2luY2x1ZGUgImNwdS5oIgotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgZWFybHlfaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQlpZiAoYy0+eDg2ID09IDB4NiAmJiBjLT54ODZfbW9kZWwgPj0gMHhmKQotCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwotCi0Jc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfU1lTRU5URVIzMik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWVhcmx5X2luaXRfY2VudGF1cihjKTsKLQotCWlmIChjLT54ODYgPT0gMHg2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGYpIHsKLQkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemUgKiAyOwotCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7Ci0JfQotCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBjZW50YXVyX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKLQkuY192ZW5kb3IJPSAiQ2VudGF1ciIsCi0JLmNfaWRlbnQJPSB7ICJDZW50YXVySGF1bHMiIH0sCi0JLmNfZWFybHlfaW5pdAk9IGVhcmx5X2luaXRfY2VudGF1ciwKLQkuY19pbml0CQk9IGluaXRfY2VudGF1ciwKLQkuY194ODZfdmVuZG9yCT0gWDg2X1ZFTkRPUl9DRU5UQVVSLAotfTsKLQotY3B1X2Rldl9yZWdpc3RlcihjZW50YXVyX2NwdV9kZXYpOwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA4MjZkNWM4Li5lMjk2MmNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTEsNTIgKzEsNTIgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KLSNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL2kzODcuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhdC5oPgotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbnVtYS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdW1hc2suaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9udW1hLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9wYXQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vdXYvdXYuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KLQogI2luY2x1ZGUgImNwdS5oIgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCiAvKiBhbGwgb2YgdGhlc2UgbWFza3MgYXJlIGluaXRpYWxpemVkIGluIHNldHVwX2NwdV9sb2NhbF9tYXNrcygpICovCi1jcHVtYXNrX3Zhcl90IGNwdV9jYWxsaW5fbWFzazsKLWNwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7CitjcHVtYXNrX3Zhcl90IGNwdV9jYWxsb3V0X21hc2s7CitjcHVtYXNrX3Zhcl90IGNwdV9jYWxsaW5fbWFzazsKIAogLyogcmVwcmVzZW50aW5nIGNwdXMgZm9yIHdoaWNoIHNpYmxpbmcgbWFwcyBjYW4gYmUgY29tcHV0ZWQgKi8KIGNwdW1hc2tfdmFyX3QgY3B1X3NpYmxpbmdfc2V0dXBfbWFzazsKQEAgLTYyLDE1ICs2MiwxNSBAQAogCiAjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCiAKLWNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKK2NwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7CiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwogY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKLWNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7CitjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CiAKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2ICp0aGlzX2NwdSBfX2NwdWluaXRkYXRhOworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2ICp0aGlzX2NwdSBfX2NwdWluaXRkYXRhOwogCiBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQoc3RydWN0IGdkdF9wYWdlLCBnZHRfcGFnZSkgPSB7IC5nZHQgPSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtNzksNDggKzc5LDQ4IEBACiAJICogSVJFVCB3aWxsIGNoZWNrIHRoZSBzZWdtZW50IHR5cGVzICBra2VpbCAyMDAwLzEwLzI4CiAJICogQWxzbyBzeXNyZXQgbWFuZGF0ZXMgYSBzcGVjaWFsIEdEVCBsYXlvdXQKIAkgKgotCSAqIFRoZSBUTFMgZGVzY3JpcHRvcnMgYXJlIGN1cnJlbnRseSBhdCBhIGRpZmZlcmVudCBwbGFjZSBjb21wYXJlZCB0byBpMzg2LgorCSAqIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCiAJICogSG9wZWZ1bGx5IG5vYm9keSBleHBlY3RzIHRoZW0gYXQgYSBmaXhlZCBwbGFjZSAoV2luZT8pCiAJICovCi0JW0dEVF9FTlRSWV9LRVJORUwzMl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YjAwIH0gfSB9LAotCVtHRFRfRU5UUllfS0VSTkVMX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZjliMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMMzJfQ1NdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjliMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZjliMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkzMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVIzMl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmYjAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmYzMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmZmIwMCB9IH0gfSwKICNlbHNlCi0JW0dEVF9FTlRSWV9LRVJORUxfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWEwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZhMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmYTAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmYyMDAgfSB9IH0sCiAJLyoKIAkgKiBTZWdtZW50cyB1c2VkIGZvciBjYWxsaW5nIFBuUCBCSU9TIGhhdmUgYnl0ZSBncmFudWxhcml0eS4KIAkgKiBUaGV5IGNvZGUgc2VnbWVudHMgYW5kIGRhdGEgc2VnbWVudHMgaGF2ZSBmaXhlZCA2NGsgbGltaXRzLAogCSAqIHRoZSB0cmFuc2ZlciBzZWdtZW50IHNpemVzIGFyZSBzZXQgYXQgcnVuIHRpbWUuCiAJICovCiAJLyogMzItYml0IGNvZGUgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMl0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19DUzMyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCiAJLyogMTYtYml0IGNvZGUgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNl0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19DUzE2XQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDkyMDAgfSB9IH0sCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMxXSA9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX1RTMV0JCT0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCB9IH0gfSwKIAkvKiAxNi1iaXQgZGF0YSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19UUzJdID0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfVFMyXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAogCS8qCiAJICogVGhlIEFQTSBzZWdtZW50cyBoYXZlIGJ5dGUgZ3JhbnVsYXJpdHkgYW5kIHRoZWlyIGJhc2VzCiAJICogYXJlIHNldCBhdCBydW4gdGltZS4gIEFsbCBoYXZlIDY0ayBsaW1pdHMuCiAJICovCiAJLyogMzItYml0IGNvZGUgKi8KLQlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRV0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfQVBNQklPU19CQVNFXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCiAJLyogMTYtYml0IGNvZGUgKi8KLQlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsxXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMV0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAogCS8qIGRhdGEgKi8KLQlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMl0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5MjAwIH0gfSB9LAogCi0JW0dEVF9FTlRSWV9FU1BGSVhfU1NdID0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMGMwOTIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX1BFUkNQVV0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfRVNQRklYX1NTXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwYzA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUEVSQ1BVXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAogCUdEVF9TVEFDS19DQU5BUllfSU5JVAogI2VuZGlmCiB9IH07CkBAIC0xNjQsMTYgKzE2NCwxNyBAQAogCSAqIHRoZSBDUFVJRC4gQWRkICJ2b2xhdGlsZSIgdG8gbm90IGFsbG93IGdjYyB0bwogCSAqIG9wdGltaXplIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCiAJICovCi0JYXNtIHZvbGF0aWxlICgicHVzaGZsXG5cdCIKLQkJICAgICAgInB1c2hmbFxuXHQiCi0JCSAgICAgICJwb3BsICUwXG5cdCIKLQkJICAgICAgIm1vdmwgJTAsJTFcblx0IgotCQkgICAgICAieG9ybCAlMiwlMFxuXHQiCi0JCSAgICAgICJwdXNobCAlMFxuXHQiCi0JCSAgICAgICJwb3BmbFxuXHQiCi0JCSAgICAgICJwdXNoZmxcblx0IgotCQkgICAgICAicG9wbCAlMFxuXHQiCi0JCSAgICAgICJwb3BmbFxuXHQiCisJYXNtIHZvbGF0aWxlICgicHVzaGZsCQlcblx0IgorCQkgICAgICAicHVzaGZsCQlcblx0IgorCQkgICAgICAicG9wbCAlMAkJXG5cdCIKKwkJICAgICAgIm1vdmwgJTAsICUxCVxuXHQiCisJCSAgICAgICJ4b3JsICUyLCAlMAlcblx0IgorCQkgICAgICAicHVzaGwgJTAJCVxuXHQiCisJCSAgICAgICJwb3BmbAkJXG5cdCIKKwkJICAgICAgInB1c2hmbAkJXG5cdCIKKwkJICAgICAgInBvcGwgJTAJCVxuXHQiCisJCSAgICAgICJwb3BmbAkJXG5cdCIKKwogCQkgICAgICA6ICI9JnIiIChmMSksICI9JnIiIChmMikKIAkJICAgICAgOiAiaXIiIChmbGFnKSk7CiAKQEAgLTE4OCwxOCArMTg5LDIyIEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzcXVhc2hfdGhlX3N0dXBpZF9zZXJpYWxfbnVtYmVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QTikgJiYgZGlzYWJsZV94ODZfc2VyaWFsX25yKSB7Ci0JCS8qIERpc2FibGUgcHJvY2Vzc29yIHNlcmlhbCBudW1iZXIgKi8KLQkJdW5zaWduZWQgbG9uZyBsbywgaGk7Ci0JCXJkbXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7Ci0JCWxvIHw9IDB4MjAwMDAwOwotCQl3cm1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSBzZXJpYWwgbnVtYmVyIGRpc2FibGVkLlxuIik7Ci0JCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUE4pOworCXVuc2lnbmVkIGxvbmcgbG8sIGhpOwogCi0JCS8qIERpc2FibGluZyB0aGUgc2VyaWFsIG51bWJlciBtYXkgYWZmZWN0IHRoZSBjcHVpZCBsZXZlbCAqLwotCQljLT5jcHVpZF9sZXZlbCA9IGNwdWlkX2VheCgwKTsKLQl9CisJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BOKSB8fCAhZGlzYWJsZV94ODZfc2VyaWFsX25yKQorCQlyZXR1cm47CisKKwkvKiBEaXNhYmxlIHByb2Nlc3NvciBzZXJpYWwgbnVtYmVyOiAqLworCisJcmRtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKKwlsbyB8PSAweDIwMDAwMDsKKwl3cm1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJDUFUgc2VyaWFsIG51bWJlciBkaXNhYmxlZC5cbiIpOworCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUE4pOworCisJLyogRGlzYWJsaW5nIHRoZSBzZXJpYWwgbnVtYmVyIG1heSBhZmZlY3QgdGhlIGNwdWlkIGxldmVsICovCisJYy0+Y3B1aWRfbGV2ZWwgPSBjcHVpZF9lYXgoMCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHg4Nl9zZXJpYWxfbnJfc2V0dXAoY2hhciAqcykKQEAgLTIzMiw2ICsyMzcsNyBAQAogCXUzMiBmZWF0dXJlOwogCXUzMiBsZXZlbDsKIH07CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmUgX19jcHVpbml0Y29uc3QKIGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlc1tdID0gewogCXsgWDg2X0ZFQVRVUkVfTVdBSVQsCQkweDAwMDAwMDA1IH0sCkBAIC0yNDMsNyArMjQ5LDExIEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZmlsdGVyX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgYm9vbCB3YXJuKQogewogCWNvbnN0IHN0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSAqZGY7CisKIAlmb3IgKGRmID0gY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmVzOyBkZi0+ZmVhdHVyZTsgZGYrKykgeworCisJCWlmICghY3B1X2hhcyhjLCBkZi0+ZmVhdHVyZSkpCisJCQljb250aW51ZTsKIAkJLyoKIAkJICogTm90ZTogY3B1aWRfbGV2ZWwgaXMgc2V0IHRvIC0xIGlmIHVuYXZhaWxhYmxlLCBidXQKIAkJICogZXh0ZW5kZWRfZXh0ZW5kZWRfbGV2ZWwgaXMgc2V0IHRvIDAgaWYgdW5hdmFpbGFibGUKQEAgLTI1MSwzMiArMjYxLDMyIEBACiAJCSAqIHdoZW4gc2lnbmVkOyBoZW5jZSB0aGUgd2VpcmQgbWVzc2luZyBhcm91bmQgd2l0aAogCQkgKiBzaWducyBoZXJlLi4uCiAJCSAqLwotCQlpZiAoY3B1X2hhcyhjLCBkZi0+ZmVhdHVyZSkgJiYKLQkJICAgICgoczMyKWRmLT5sZXZlbCA8IDAgPworCQlpZiAoISgoczMyKWRmLT5sZXZlbCA8IDAgPwogCQkgICAgICh1MzIpZGYtPmxldmVsID4gKHUzMiljLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA6Ci0JCSAgICAgKHMzMilkZi0+bGV2ZWwgPiAoczMyKWMtPmNwdWlkX2xldmVsKSkgewotCQkJY2xlYXJfY3B1X2NhcChjLCBkZi0+ZmVhdHVyZSk7Ci0JCQlpZiAod2FybikKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJDUFU6IENQVSBmZWF0dXJlICVzIGRpc2FibGVkICIKLQkJCQkgICAgICAgImR1ZSB0byBsYWNrIG9mIENQVUlEIGxldmVsIDB4JXhcbiIsCi0JCQkJICAgICAgIHg4Nl9jYXBfZmxhZ3NbZGYtPmZlYXR1cmVdLAotCQkJCSAgICAgICBkZi0+bGV2ZWwpOwotCQl9CisJCSAgICAgKHMzMilkZi0+bGV2ZWwgPiAoczMyKWMtPmNwdWlkX2xldmVsKSkKKwkJCWNvbnRpbnVlOworCisJCWNsZWFyX2NwdV9jYXAoYywgZGYtPmZlYXR1cmUpOworCQlpZiAoIXdhcm4pCisJCQljb250aW51ZTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiQ1BVOiBDUFUgZmVhdHVyZSAlcyBkaXNhYmxlZCwgbm8gQ1BVSUQgbGV2ZWwgMHgleFxuIiwKKwkJCQl4ODZfY2FwX2ZsYWdzW2RmLT5mZWF0dXJlXSwgZGYtPmxldmVsKTsKIAl9CiB9CiAKIC8qCiAgKiBOYW1pbmcgY29udmVudGlvbiBzaG91bGQgYmU6IDxOYW1lPiBbKDxDb2RlbmFtZT4pXQogICogVGhpcyB0YWJsZSBvbmx5IGlzIHVzZWQgdW5sZXNzIGluaXRfPHZlbmRvcj4oKSBiZWxvdyBkb2Vzbid0IHNldCBpdDsKLSAqIGluIHBhcnRpY3VsYXIsIGlmIENQVUlEIGxldmVscyAweDgwMDAwMDAyLi40IGFyZSBzdXBwb3J0ZWQsIHRoaXMgaXNuJ3QgdXNlZAotICoKKyAqIGluIHBhcnRpY3VsYXIsIGlmIENQVUlEIGxldmVscyAweDgwMDAwMDAyLi40IGFyZSBzdXBwb3J0ZWQsIHRoaXMKKyAqIGlzbid0IHVzZWQKICAqLwogCiAvKiBMb29rIHVwIENQVSBuYW1lcyBieSB0YWJsZSBsb29rdXAuICovCi1zdGF0aWMgY2hhciBfX2NwdWluaXQgKnRhYmxlX2xvb2t1cF9tb2RlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgY29uc3QgY2hhciAqX19jcHVpbml0IHRhYmxlX2xvb2t1cF9tb2RlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0Jc3RydWN0IGNwdV9tb2RlbF9pbmZvICppbmZvOworCWNvbnN0IHN0cnVjdCBjcHVfbW9kZWxfaW5mbyAqaW5mbzsKIAogCWlmIChjLT54ODZfbW9kZWwgPj0gMTYpCiAJCXJldHVybiBOVUxMOwkvKiBSYW5nZSBjaGVjayAqLwpAQCAtMzA3LDggKzMxNywxMCBAQAogCWxvYWRfc3RhY2tfY2FuYXJ5X3NlZ21lbnQoKTsKIH0KIAotLyogQ3VycmVudCBnZHQgcG9pbnRzICVmcyBhdCB0aGUgIm1hc3RlciIgcGVyLWNwdSBhcmVhOiBhZnRlciB0aGlzLAotICogaXQncyBvbiB0aGUgcmVhbCBvbmUuICovCisvKgorICogQ3VycmVudCBnZHQgcG9pbnRzICVmcyBhdCB0aGUgIm1hc3RlciIgcGVyLWNwdSBhcmVhOiBhZnRlciB0aGlzLAorICogaXQncyBvbiB0aGUgcmVhbCBvbmUuCisgKi8KIHZvaWQgc3dpdGNoX3RvX25ld19nZHQoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgZGVzY19wdHIgZ2R0X2Rlc2NyOwpAQCAtMzIxLDcgKzMzMyw3IEBACiAJbG9hZF9wZXJjcHVfc2VnbWVudChjcHUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgKmNwdV9kZXZzW1g4Nl9WRU5ET1JfTlVNXSA9IHt9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2ICpfX2NwdWluaXRkYXRhIGNwdV9kZXZzW1g4Nl9WRU5ET1JfTlVNXSA9IHt9OwogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZGVmYXVsdF9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKQEAgLTM0MCw3ICszNTIsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRkYXRhIGRlZmF1bHRfY3B1ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGRlZmF1bHRfY3B1ID0gewogCS5jX2luaXQJPSBkZWZhdWx0X2luaXQsCiAJLmNfdmVuZG9yID0gIlVua25vd24iLAogCS5jX3g4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV04sCkBAIC0zNTQsMjIgKzM2NiwyNCBAQAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA8IDB4ODAwMDAwMDQpCiAJCXJldHVybjsKIAotCXYgPSAodW5zaWduZWQgaW50ICopIGMtPng4Nl9tb2RlbF9pZDsKKwl2ID0gKHVuc2lnbmVkIGludCAqKWMtPng4Nl9tb2RlbF9pZDsKIAljcHVpZCgweDgwMDAwMDAyLCAmdlswXSwgJnZbMV0sICZ2WzJdLCAmdlszXSk7CiAJY3B1aWQoMHg4MDAwMDAwMywgJnZbNF0sICZ2WzVdLCAmdls2XSwgJnZbN10pOwogCWNwdWlkKDB4ODAwMDAwMDQsICZ2WzhdLCAmdls5XSwgJnZbMTBdLCAmdlsxMV0pOwogCWMtPng4Nl9tb2RlbF9pZFs0OF0gPSAwOwogCi0JLyogSW50ZWwgY2hpcHMgcmlnaHQtanVzdGlmeSB0aGlzIHN0cmluZyBmb3Igc29tZSBkdW1iIHJlYXNvbjsKLQkgICB1bmRvIHRoYXQgYnJhaW4gZGFtYWdlICovCisJLyoKKwkgKiBJbnRlbCBjaGlwcyByaWdodC1qdXN0aWZ5IHRoaXMgc3RyaW5nIGZvciBzb21lIGR1bWIgcmVhc29uOworCSAqIHVuZG8gdGhhdCBicmFpbiBkYW1hZ2U6CisJICovCiAJcCA9IHEgPSAmYy0+eDg2X21vZGVsX2lkWzBdOwogCXdoaWxlICgqcCA9PSAnICcpCi0JICAgICBwKys7CisJCXArKzsKIAlpZiAocCAhPSBxKSB7Ci0JICAgICB3aGlsZSAoKnApCi0JCSAgKnErKyA9ICpwKys7Ci0JICAgICB3aGlsZSAocSA8PSAmYy0+eDg2X21vZGVsX2lkWzQ4XSkKLQkJICAqcSsrID0gJ1wwJzsJLyogWmVyby1wYWQgdGhlIHJlc3QgKi8KKwkJd2hpbGUgKCpwKQorCQkJKnErKyA9ICpwKys7CisJCXdoaWxlIChxIDw9ICZjLT54ODZfbW9kZWxfaWRbNDhdKQorCQkJKnErKyA9ICdcMCc7CS8qIFplcm8tcGFkIHRoZSByZXN0ICovCiAJfQogfQogCkBAIC00MzgsMjggKzQ1MiwzMSBAQAogCiAJaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMSkgewogCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBIeXBlci1UaHJlYWRpbmcgaXMgZGlzYWJsZWRcbiIpOwotCX0gZWxzZSBpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpIHsKLQotCQlpZiAoc21wX251bV9zaWJsaW5ncyA+IG5yX2NwdV9pZHMpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNQVTogVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHNpYmxpbmdzICVkIiwKLQkJCQkJc21wX251bV9zaWJsaW5ncyk7Ci0JCQlzbXBfbnVtX3NpYmxpbmdzID0gMTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKLQkJYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYik7Ci0KLQkJc21wX251bV9zaWJsaW5ncyA9IHNtcF9udW1fc2libGluZ3MgLyBjLT54ODZfbWF4X2NvcmVzOwotCi0JCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKLQotCQljb3JlX2JpdHMgPSBnZXRfY291bnRfb3JkZXIoYy0+eDg2X21heF9jb3Jlcyk7Ci0KLQkJYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKSAmCi0JCQkJCSAgICAgICAoKDEgPDwgY29yZV9iaXRzKSAtIDEpOworCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoc21wX251bV9zaWJsaW5ncyA8PSAxKQorCQlnb3RvIG91dDsKKworCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gbnJfY3B1X2lkcykgeworCQlwcl93YXJuaW5nKCJDUFU6IFVuc3VwcG9ydGVkIG51bWJlciBvZiBzaWJsaW5ncyAlZCIsCisJCQkgICBzbXBfbnVtX3NpYmxpbmdzKTsKKwkJc21wX251bV9zaWJsaW5ncyA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7CisJYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYik7CisKKwlzbXBfbnVtX3NpYmxpbmdzID0gc21wX251bV9zaWJsaW5ncyAvIGMtPng4Nl9tYXhfY29yZXM7CisKKwlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7CisKKwljb3JlX2JpdHMgPSBnZXRfY291bnRfb3JkZXIoYy0+eDg2X21heF9jb3Jlcyk7CisKKwljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKKwkJCQkgICAgICAgKCgxIDw8IGNvcmVfYml0cykgLSAxKTsKKwogb3V0OgogCWlmICgoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MpID4gMSkgewogCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBQaHlzaWNhbCBQcm9jZXNzb3IgSUQ6ICVkXG4iLApAQCAtNDczLDggKzQ5MCw4IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZ2V0X2NwdV92ZW5kb3Ioc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWNoYXIgKnYgPSBjLT54ODZfdmVuZG9yX2lkOwotCWludCBpOwogCXN0YXRpYyBpbnQgcHJpbnRlZDsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBYODZfVkVORE9SX05VTTsgaSsrKSB7CiAJCWlmICghY3B1X2RldnNbaV0pCkBAIC00ODMsNiArNTAwLDcgQEAKIAkJaWYgKCFzdHJjbXAodiwgY3B1X2RldnNbaV0tPmNfaWRlbnRbMF0pIHx8CiAJCSAgICAoY3B1X2RldnNbaV0tPmNfaWRlbnRbMV0gJiYKIAkJICAgICAhc3RyY21wKHYsIGNwdV9kZXZzW2ldLT5jX2lkZW50WzFdKSkpIHsKKwogCQkJdGhpc19jcHUgPSBjcHVfZGV2c1tpXTsKIAkJCWMtPng4Nl92ZW5kb3IgPSB0aGlzX2NwdS0+Y194ODZfdmVuZG9yOwogCQkJcmV0dXJuOwpAQCAtNDkxLDcgKzUwOSw5IEBACiAKIAlpZiAoIXByaW50ZWQpIHsKIAkJcHJpbnRlZCsrOwotCQlwcmludGsoS0VSTl9FUlIgIkNQVTogdmVuZG9yX2lkICclcycgdW5rbm93biwgdXNpbmcgZ2VuZXJpYyBpbml0LlxuIiwgdik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgIkNQVTogdmVuZG9yX2lkICclcycgdW5rbm93biwgdXNpbmcgZ2VuZXJpYyBpbml0LlxuIiwgdik7CisKIAkJcHJpbnRrKEtFUk5fRVJSICJDUFU6IFlvdXIgc3lzdGVtIG1heSBiZSB1bnN0YWJsZS5cbiIpOwogCX0KIApAQCAtNTExLDE0ICs1MzEsMTcgQEAKIAkvKiBJbnRlbC1kZWZpbmVkIGZsYWdzOiBsZXZlbCAweDAwMDAwMDAxICovCiAJaWYgKGMtPmNwdWlkX2xldmVsID49IDB4MDAwMDAwMDEpIHsKIAkJdTMyIGp1bmssIHRmbXMsIGNhcDAsIG1pc2M7CisKIAkJY3B1aWQoMHgwMDAwMDAwMSwgJnRmbXMsICZtaXNjLCAmanVuaywgJmNhcDApOwogCQljLT54ODYgPSAodGZtcyA+PiA4KSAmIDB4ZjsKIAkJYy0+eDg2X21vZGVsID0gKHRmbXMgPj4gNCkgJiAweGY7CiAJCWMtPng4Nl9tYXNrID0gdGZtcyAmIDB4ZjsKKwogCQlpZiAoYy0+eDg2ID09IDB4ZikKIAkJCWMtPng4NiArPSAodGZtcyA+PiAyMCkgJiAweGZmOwogCQlpZiAoYy0+eDg2ID49IDB4NikKIAkJCWMtPng4Nl9tb2RlbCArPSAoKHRmbXMgPj4gMTYpICYgMHhmKSA8PCA0OworCiAJCWlmIChjYXAwICYgKDE8PDE5KSkgewogCQkJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9ICgobWlzYyA+PiA4KSAmIDB4ZmYpICogODsKIAkJCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplOwpAQCAtNTM0LDYgKzU1Nyw3IEBACiAJLyogSW50ZWwtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHgwMDAwMDAwMSAqLwogCWlmIChjLT5jcHVpZF9sZXZlbCA+PSAweDAwMDAwMDAxKSB7CiAJCXUzMiBjYXBhYmlsaXR5LCBleGNhcDsKKwogCQljcHVpZCgweDAwMDAwMDAxLCAmdGZtcywgJmVieCwgJmV4Y2FwLCAmY2FwYWJpbGl0eSk7CiAJCWMtPng4Nl9jYXBhYmlsaXR5WzBdID0gY2FwYWJpbGl0eTsKIAkJYy0+eDg2X2NhcGFiaWxpdHlbNF0gPSBleGNhcDsKQEAgLTU0Miw2ICs1NjYsNyBAQAogCS8qIEFNRC1kZWZpbmVkIGZsYWdzOiBsZXZlbCAweDgwMDAwMDAxICovCiAJeGx2bCA9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKIAljLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA9IHhsdmw7CisKIAlpZiAoKHhsdmwgJiAweGZmZmYwMDAwKSA9PSAweDgwMDAwMDAwKSB7CiAJCWlmICh4bHZsID49IDB4ODAwMDAwMDEpIHsKIAkJCWMtPng4Nl9jYXBhYmlsaXR5WzFdID0gY3B1aWRfZWR4KDB4ODAwMDAwMDEpOwpAQCAtNTQ5LDEzICs1NzQsMTUgQEAKIAkJfQogCX0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPj0gMHg4MDAwMDAwOCkgewogCQl1MzIgZWF4ID0gY3B1aWRfZWF4KDB4ODAwMDAwMDgpOwogCiAJCWMtPng4Nl92aXJ0X2JpdHMgPSAoZWF4ID4+IDgpICYgMHhmZjsKIAkJYy0+eDg2X3BoeXNfYml0cyA9IGVheCAmIDB4ZmY7CiAJfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwllbHNlIGlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BBRSkgfHwgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QU0UzNikpCisJCWMtPng4Nl9waHlzX2JpdHMgPSAzNjsKICNlbmRpZgogCiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcpCkBAIC02MDIsOCArNjI5LDEyIEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSA2NDsKKwljLT54ODZfcGh5c19iaXRzID0gMzY7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDQ4OwogI2Vsc2UKIAljLT54ODZfY2xmbHVzaF9zaXplID0gMzI7CisJYy0+eDg2X3BoeXNfYml0cyA9IDMyOworCWMtPng4Nl92aXJ0X2JpdHMgPSAzMjsKICNlbmRpZgogCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplOwogCkBAIC02MzQsMTIgKzY2NSwxMiBAQAogCiB2b2lkIF9faW5pdCBlYXJseV9jcHVfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjcHVfZGV2ICoqY2RldjsKKwljb25zdCBzdHJ1Y3QgY3B1X2RldiAqY29uc3QgKmNkZXY7CiAJaW50IGNvdW50ID0gMDsKIAotCXByaW50aygiS0VSTkVMIHN1cHBvcnRlZCBjcHVzOlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiS0VSTkVMIHN1cHBvcnRlZCBjcHVzOlxuIik7CiAJZm9yIChjZGV2ID0gX194ODZfY3B1X2Rldl9zdGFydDsgY2RldiA8IF9feDg2X2NwdV9kZXZfZW5kOyBjZGV2KyspIHsKLQkJc3RydWN0IGNwdV9kZXYgKmNwdWRldiA9ICpjZGV2OworCQljb25zdCBzdHJ1Y3QgY3B1X2RldiAqY3B1ZGV2ID0gKmNkZXY7CiAJCXVuc2lnbmVkIGludCBqOwogCiAJCWlmIChjb3VudCA+PSBYODZfVkVORE9SX05VTSkKQEAgLTY1MCw3ICs2ODEsNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CiAJCQlpZiAoIWNwdWRldi0+Y19pZGVudFtqXSkKIAkJCQljb250aW51ZTsKLQkJCXByaW50aygiICAlcyAlc1xuIiwgY3B1ZGV2LT5jX3ZlbmRvciwKKwkJCXByaW50ayhLRVJOX0lORk8gIiAgJXMgJXNcbiIsIGNwdWRldi0+Y192ZW5kb3IsCiAJCQkJY3B1ZGV2LT5jX2lkZW50W2pdKTsKIAkJfQogCX0KQEAgLTcyNiw5ICs3NTcsMTMgQEAKIAljLT54ODZfY29yZWlkX2JpdHMgPSAwOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAljLT54ODZfY2xmbHVzaF9zaXplID0gNjQ7CisJYy0+eDg2X3BoeXNfYml0cyA9IDM2OworCWMtPng4Nl92aXJ0X2JpdHMgPSA0ODsKICNlbHNlCiAJYy0+Y3B1aWRfbGV2ZWwgPSAtMTsJLyogQ1BVSUQgbm90IGRldGVjdGVkICovCiAJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOworCWMtPng4Nl9waHlzX2JpdHMgPSAzMjsKKwljLT54ODZfdmlydF9iaXRzID0gMzI7CiAjZW5kaWYKIAljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZTsKIAltZW1zZXQoJmMtPng4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YgYy0+eDg2X2NhcGFiaWxpdHkpOwpAQCAtNzU5LDggKzc5NCw4IEBACiAJc3F1YXNoX3RoZV9zdHVwaWRfc2VyaWFsX251bWJlcihjKTsKIAogCS8qCi0JICogVGhlIHZlbmRvci1zcGVjaWZpYyBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGZlYXR1cmVzLiAgTm93Ci0JICogd2UgZG8gImdlbmVyaWMgY2hhbmdlcy4iCisJICogVGhlIHZlbmRvci1zcGVjaWZpYyBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGZlYXR1cmVzLgorCSAqIE5vdyB3ZSBkbyAiZ2VuZXJpYyBjaGFuZ2VzLiIKIAkgKi8KIAogCS8qIEZpbHRlciBvdXQgYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIENQVUlEIGxldmVscyB3ZSBkb24ndCBoYXZlICovCkBAIC03NjgsNyArODAzLDcgQEAKIAogCS8qIElmIHRoZSBtb2RlbCBuYW1lIGlzIHN0aWxsIHVuc2V0LCBkbyB0YWJsZSBsb29rdXAuICovCiAJaWYgKCFjLT54ODZfbW9kZWxfaWRbMF0pIHsKLQkJY2hhciAqcDsKKwkJY29uc3QgY2hhciAqcDsKIAkJcCA9IHRhYmxlX2xvb2t1cF9tb2RlbChjKTsKIAkJaWYgKHApCiAJCQlzdHJjcHkoYy0+eDg2X21vZGVsX2lkLCBwKTsKQEAgLTg0MywxMSArODc4LDExIEBACiB9CiAKIHN0cnVjdCBtc3JfcmFuZ2UgewotCXVuc2lnbmVkIG1pbjsKLQl1bnNpZ25lZCBtYXg7CisJdW5zaWduZWQJbWluOworCXVuc2lnbmVkCW1heDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNyX3JhbmdlIG1zcl9yYW5nZV9hcnJheVtdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1zcl9yYW5nZSBtc3JfcmFuZ2VfYXJyYXlbXSBfX2NwdWluaXRjb25zdCA9IHsKIAl7IDB4MDAwMDAwMDAsIDB4MDAwMDA0MTh9LAogCXsgMHhjMDAwMDAwMCwgMHhjMDAwMDQwYn0sCiAJeyAweGMwMDEwMDAwLCAweGMwMDEwMTQyfSwKQEAgLTg1NiwxNCArODkxLDE1IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfbXNyKHZvaWQpCiB7CisJdW5zaWduZWQgaW5kZXhfbWluLCBpbmRleF9tYXg7CiAJdW5zaWduZWQgaW5kZXg7CiAJdTY0IHZhbDsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbmRleF9taW4sIGluZGV4X21heDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1zcl9yYW5nZV9hcnJheSk7IGkrKykgewogCQlpbmRleF9taW4gPSBtc3JfcmFuZ2VfYXJyYXlbaV0ubWluOwogCQlpbmRleF9tYXggPSBtc3JfcmFuZ2VfYXJyYXlbaV0ubWF4OworCiAJCWZvciAoaW5kZXggPSBpbmRleF9taW47IGluZGV4IDwgaW5kZXhfbWF4OyBpbmRleCsrKSB7CiAJCQlpZiAocmRtc3JsX2FtZF9zYWZlKGluZGV4LCAmdmFsKSkKIAkJCQljb250aW51ZTsKQEAgLTg3Myw2ICs5MDksNyBAQAogfQogCiBzdGF0aWMgaW50IHNob3dfbXNyIF9fY3B1aW5pdGRhdGE7CisKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX3Nob3dfbXNyKGNoYXIgKmFyZykKIHsKIAlpbnQgbnVtOwpAQCAtODk0LDEyICs5MzEsMTQgQEAKIAogdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWNoYXIgKnZlbmRvciA9IE5VTEw7CisJY29uc3QgY2hhciAqdmVuZG9yID0gTlVMTDsKIAotCWlmIChjLT54ODZfdmVuZG9yIDwgWDg2X1ZFTkRPUl9OVU0pCisJaWYgKGMtPng4Nl92ZW5kb3IgPCBYODZfVkVORE9SX05VTSkgewogCQl2ZW5kb3IgPSB0aGlzX2NwdS0+Y192ZW5kb3I7Ci0JZWxzZSBpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMCkKLQkJdmVuZG9yID0gYy0+eDg2X3ZlbmRvcl9pZDsKKwl9IGVsc2UgeworCQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMCkKKwkJCXZlbmRvciA9IGMtPng4Nl92ZW5kb3JfaWQ7CisJfQogCiAJaWYgKHZlbmRvciAmJiAhc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwgdmVuZG9yKSkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiJXMgIiwgdmVuZG9yKTsKQEAgLTkyNiwxMCArOTY1LDEyIEBACiBzdGF0aWMgX19pbml0IGludCBzZXR1cF9kaXNhYmxlY3B1aWQoY2hhciAqYXJnKQogewogCWludCBiaXQ7CisKIAlpZiAoZ2V0X29wdGlvbigmYXJnLCAmYml0KSAmJiBiaXQgPCBOQ0FQSU5UUyozMikKIAkJc2V0dXBfY2xlYXJfY3B1X2NhcChiaXQpOwogCWVsc2UKIAkJcmV0dXJuIDA7CisKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImNsZWFyY3B1aWQ9Iiwgc2V0dXBfZGlzYWJsZWNwdWlkKTsKQEAgLTkzOSw2ICs5ODAsNyBAQAogCiBERUZJTkVfUEVSX0NQVV9GSVJTVCh1bmlvbiBpcnFfc3RhY2tfdW5pb24sCiAJCSAgICAgaXJxX3N0YWNrX3VuaW9uKSBfX2FsaWduZWQoUEFHRV9TSVpFKTsKKwogREVGSU5FX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKSA9CiAJaW5pdF9wZXJfY3B1X3ZhcihpcnFfc3RhY2tfdW5pb24uaXJxX3N0YWNrKSArIElSUV9TVEFDS19TSVpFIC0gNjQ7CiAKQEAgLTk0OCwxMiArOTkwLDIxIEBACiAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaXJxX2NvdW50KSA9IC0xOwogCisvKgorICogU3BlY2lhbCBJU1Qgc3RhY2tzIHdoaWNoIHRoZSBDUFUgc3dpdGNoZXMgdG8gd2hlbiBpdCBjYWxscworICogYW4gSVNULW1hcmtlZCBkZXNjcmlwdG9yIGVudHJ5LiBVcCB0byA3IHN0YWNrcyAoaGFyZHdhcmUKKyAqIGxpbWl0KSwgYWxsIG9mIHRoZW0gYXJlIDRLLCBleGNlcHQgdGhlIGRlYnVnIHN0YWNrIHdoaWNoCisgKiBpcyA4Sy4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBleGNlcHRpb25fc3RhY2tfc2l6ZXNbTl9FWENFUFRJT05fU1RBQ0tTXSA9IHsKKwkgIFswIC4uLiBOX0VYQ0VQVElPTl9TVEFDS1MgLSAxXQk9IEVYQ0VQVElPTl9TVEtTWiwKKwkgIFtERUJVR19TVEFDSyAtIDFdCQkJPSBERUJVR19TVEtTWgorfTsKKwogc3RhdGljIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChjaGFyLCBleGNlcHRpb25fc3RhY2tzCiAJWyhOX0VYQ0VQVElPTl9TVEFDS1MgLSAxKSAqIEVYQ0VQVElPTl9TVEtTWiArIERFQlVHX1NUS1NaXSkKIAlfX2FsaWduZWQoUEFHRV9TSVpFKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpZ25vcmVfc3lzcmV0KHZvaWQpOwotCiAvKiBNYXkgbm90IGJlIG1hcmtlZCBfX2luaXQ6IHVzZWQgYnkgc29mdHdhcmUgc3VzcGVuZCAqLwogdm9pZCBzeXNjYWxsX2luaXQodm9pZCkKIHsKQEAgLTk4Myw3ICsxMDM0LDcgQEAKICAqLwogREVGSU5FX1BFUl9DUFUoc3RydWN0IG9yaWdfaXN0LCBvcmlnX2lzdCk7CiAKLSNlbHNlCS8qIHg4Nl82NCAqLworI2Vsc2UJLyogQ09ORklHX1g4Nl82NCAqLwogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzdGFja19jYW5hcnkpOwpAQCAtOTk1LDkgKzEwNDYsMjYgQEAKIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAJcmVncy0+ZnMgPSBfX0tFUk5FTF9QRVJDUFU7CiAJcmVncy0+Z3MgPSBfX0tFUk5FTF9TVEFDS19DQU5BUlk7CisKIAlyZXR1cm4gcmVnczsKIH0KLSNlbmRpZgkvKiB4ODZfNjQgKi8KKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6CisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX2FsbF9kZWJ1Z19yZWdzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCS8qIElnbm9yZSBkYjQsIGRiNSAqLworCQlpZiAoKGkgPT0gNCkgfHwgKGkgPT0gNSkpCisJCQljb250aW51ZTsKKworCQlzZXRfZGVidWdyZWcoMCwgaSk7CisJfQorfQogCiAvKgogICogY3B1X2luaXQoKSBpbml0aWFsaXplcyBzdGF0ZSB0aGF0IGlzIHBlci1DUFUuIFNvbWUgZGF0YSBpcyBhbHJlYWR5CkBAIC0xMDA3LDE1ICsxMDc1LDIwIEBACiAgKiBBIGxvdCBvZiBzdGF0ZSBpcyBhbHJlYWR5IHNldCB1cCBpbiBQREEgaW5pdCBmb3IgNjQgYml0CiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0CisKIHZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7Ci0JaW50IGNwdSA9IHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOwotCXN0cnVjdCBvcmlnX2lzdCAqb3JpZ19pc3QgPSAmcGVyX2NwdShvcmlnX2lzdCwgY3B1KTsKLQl1bnNpZ25lZCBsb25nIHY7CisJc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lOworCXN0cnVjdCB0c3Nfc3RydWN0ICp0OworCXVuc2lnbmVkIGxvbmcgdjsKKwlpbnQgY3B1OwogCWludCBpOwogCisJY3B1ID0gc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKKwlvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOworCiAjaWZkZWYgQ09ORklHX05VTUEKIAlpZiAoY3B1ICE9IDAgJiYgcGVyY3B1X3JlYWQobm9kZV9udW1iZXIpID09IDAgJiYKIAkgICAgY3B1X3RvX25vZGUoY3B1KSAhPSBOVU1BX05PX05PREUpCkBAIC0xMDU2LDE5ICsxMTI5LDE3IEBACiAJICogc2V0IHVwIGFuZCBsb2FkIHRoZSBwZXItQ1BVIFRTUwogCSAqLwogCWlmICghb3JpZ19pc3QtPmlzdFswXSkgewotCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNpemVzW05fRVhDRVBUSU9OX1NUQUNLU10gPSB7Ci0JCSAgWzAgLi4uIE5fRVhDRVBUSU9OX1NUQUNLUyAtIDFdID0gRVhDRVBUSU9OX1NUS1NaLAotCQkgIFtERUJVR19TVEFDSyAtIDFdID0gREVCVUdfU1RLU1oKLQkJfTsKIAkJY2hhciAqZXN0YWNrcyA9IHBlcl9jcHUoZXhjZXB0aW9uX3N0YWNrcywgY3B1KTsKKwogCQlmb3IgKHYgPSAwOyB2IDwgTl9FWENFUFRJT05fU1RBQ0tTOyB2KyspIHsKLQkJCWVzdGFja3MgKz0gc2l6ZXNbdl07CisJCQllc3RhY2tzICs9IGV4Y2VwdGlvbl9zdGFja19zaXplc1t2XTsKIAkJCW9yaWdfaXN0LT5pc3Rbdl0gPSB0LT54ODZfdHNzLmlzdFt2XSA9CiAJCQkJCSh1bnNpZ25lZCBsb25nKWVzdGFja3M7CiAJCX0KIAl9CiAKIAl0LT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gb2Zmc2V0b2Yoc3RydWN0IHRzc19zdHJ1Y3QsIGlvX2JpdG1hcCk7CisKIAkvKgogCSAqIDw9IGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIENQVSB3aWxsIGFjY2VzcyB1cCB0bwogCSAqIDggYml0cyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgSU8gcGVybWlzc2lvbiBiaXRtYXAuCkBAIC0xMDc4LDggKzExNDksNyBAQAogCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJbWUtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotCWlmIChtZS0+bW0pCi0JCUJVRygpOworCUJVR19PTihtZS0+bW0pOwogCWVudGVyX2xhenlfdGxiKCZpbml0X21tLCBtZSk7CiAKIAlsb2FkX3NwMCh0LCAmY3VycmVudC0+dGhyZWFkKTsKQEAgLTEwOTgsMTcgKzExNjgsNyBAQAogCQlhcmNoX2tnZGJfb3BzLmNvcnJlY3RfaHdfYnJlYWsoKTsKIAllbHNlCiAjZW5kaWYKLQl7Ci0JCS8qCi0JCSAqIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczoKLQkJICovCi0JCXNldF9kZWJ1Z3JlZygwVUwsIDApOwotCQlzZXRfZGVidWdyZWcoMFVMLCAxKTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgMik7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDMpOwotCQlzZXRfZGVidWdyZWcoMFVMLCA2KTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgNyk7Ci0JfQorCQljbGVhcl9hbGxfZGVidWdfcmVncygpOwogCiAJZnB1X2luaXQoKTsKIApAQCAtMTEyOSw3ICsxMTg5LDggQEAKIAogCWlmIChjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1LCBjcHVfaW5pdGlhbGl6ZWRfbWFzaykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BVIyVkIGFscmVhZHkgaW5pdGlhbGl6ZWQhXG4iLCBjcHUpOwotCQlmb3IgKDs7KSBsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWZvciAoOzspCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIENQVSMlZFxuIiwgY3B1KTsKQEAgLTExNDUsOCArMTIwNiw3IEBACiAJICovCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3Vyci0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0JaWYgKGN1cnItPm1tKQotCQlCVUcoKTsKKwlCVUdfT04oY3Vyci0+bW0pOwogCWVudGVyX2xhenlfdGxiKCZpbml0X21tLCBjdXJyKTsKIAogCWxvYWRfc3AwKHQsIHRocmVhZCk7CkBAIC0xMTU5LDEzICsxMjE5LDcgQEAKIAlfX3NldF90c3NfZGVzYyhjcHUsIEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MsICZkb3VibGVmYXVsdF90c3MpOwogI2VuZGlmCiAKLQkvKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6ICovCi0Jc2V0X2RlYnVncmVnKDAsIDApOwotCXNldF9kZWJ1Z3JlZygwLCAxKTsKLQlzZXRfZGVidWdyZWcoMCwgMik7Ci0Jc2V0X2RlYnVncmVnKDAsIDMpOwotCXNldF9kZWJ1Z3JlZygwLCA2KTsKLQlzZXRfZGVidWdyZWcoMCwgNyk7CisJY2xlYXJfYWxsX2RlYnVnX3JlZ3MoKTsKIAogCS8qCiAJICogRm9yY2UgRlBVIGluaXRpYWxpemF0aW9uOgpAQCAtMTE4NSw2ICsxMjM5LDQgQEAKIAogCXhzYXZlX2luaXQoKTsKIH0KLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCmluZGV4IGRlNDA5NGEuLjZkZTlhOTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaApAQCAtMywzMyArMywzNCBAQAogI2RlZmluZSBBUkNIX1g4Nl9DUFVfSAogCiBzdHJ1Y3QgY3B1X21vZGVsX2luZm8gewotCWludCB2ZW5kb3I7Ci0JaW50IGZhbWlseTsKLQljaGFyICptb2RlbF9uYW1lc1sxNl07CisJaW50CQl2ZW5kb3I7CisJaW50CQlmYW1pbHk7CisJY29uc3QgY2hhcgkqbW9kZWxfbmFtZXNbMTZdOwogfTsKIAogLyogYXR0ZW1wdCB0byBjb25zb2xpZGF0ZSBjcHUgYXR0cmlidXRlcyAqLwogc3RydWN0IGNwdV9kZXYgewotCWNoYXIJKiBjX3ZlbmRvcjsKKwljb25zdCBjaGFyCSpjX3ZlbmRvcjsKIAogCS8qIHNvbWUgaGF2ZSB0d28gcG9zc2liaWxpdGllcyBmb3IgY3B1aWQgc3RyaW5nICovCi0JY2hhcgkqIGNfaWRlbnRbMl07CQorCWNvbnN0IGNoYXIJKmNfaWRlbnRbMl07CiAKIAlzdHJ1Y3QJCWNwdV9tb2RlbF9pbmZvIGNfbW9kZWxzWzRdOwogCi0Jdm9pZCAgICAgICAgICAgICgqY19lYXJseV9pbml0KShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwotCXZvaWQJCSgqY19pbml0KShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjKTsKLQl2b2lkCQkoKmNfaWRlbnRpZnkpKHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMpOwotCXVuc2lnbmVkIGludAkoKmNfc2l6ZV9jYWNoZSkoc3RydWN0IGNwdWluZm9feDg2ICogYywgdW5zaWduZWQgaW50IHNpemUpOwotCWludAljX3g4Nl92ZW5kb3I7CisJdm9pZCAgICAgICAgICAgICgqY19lYXJseV9pbml0KShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CisJdm9pZAkJKCpjX2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKKwl2b2lkCQkoKmNfaWRlbnRpZnkpKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKKwl1bnNpZ25lZCBpbnQJKCpjX3NpemVfY2FjaGUpKHN0cnVjdCBjcHVpbmZvX3g4NiAqLCB1bnNpZ25lZCBpbnQpOworCWludAkJY194ODZfdmVuZG9yOwogfTsKIAogI2RlZmluZSBjcHVfZGV2X3JlZ2lzdGVyKGNwdV9kZXZYKSBcCi0Jc3RhdGljIHN0cnVjdCBjcHVfZGV2ICpfX2NwdV9kZXZfIyNjcHVfZGV2WCBfX3VzZWQgXAorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqY29uc3QgX19jcHVfZGV2XyMjY3B1X2RldlggX191c2VkIFwKIAlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLng4Nl9jcHVfZGV2LmluaXQiKSkpID0gXAogCSZjcHVfZGV2WDsKIAotZXh0ZXJuIHN0cnVjdCBjcHVfZGV2ICpfX3g4Nl9jcHVfZGV2X3N0YXJ0W10sICpfX3g4Nl9jcHVfZGV2X2VuZFtdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjb25zdCBfX3g4Nl9jcHVfZGV2X3N0YXJ0W10sCisJCQkgICAgKmNvbnN0IF9feDg2X2NwdV9kZXZfZW5kW107CiAKIGV4dGVybiB2b2lkIGRpc3BsYXlfY2FjaGVpbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ZTI5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jCkBAIC0wLDAgKzEsOTAxIEBACisvKgorICogQ1BVIHg4NiBhcmNoaXRlY3R1cmUgZGVidWcgY29kZQorICoKKyAqIENvcHlyaWdodChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKKyAqCisgKiBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1X2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfY3B1WF9iYXNlLCBjcHVfYXJyW0NQVV9SRUdfQUxMX0JJVF0pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfcHJpdmF0ZSAqLCBwcml2X2FycltNQVhfQ1BVX0ZJTEVTXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIGNwdV9tb2RlbGZsYWcpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgY3B1X3ByaXZfY291bnQpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkLCBjcHVfbW9kZWwpOworCitzdGF0aWMgREVGSU5FX01VVEVYKGNwdV9kZWJ1Z19sb2NrKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmNwdV9kZWJ1Z2ZzX2RpcjsKKworc3RhdGljIHN0cnVjdCBjcHVfZGVidWdfYmFzZSBjcHVfYmFzZVtdID0geworCXsgIm1jIiwJCUNQVV9NQywJCTAJfSwKKwl7ICJtb25pdG9yIiwJQ1BVX01PTklUT1IsCTAJfSwKKwl7ICJ0aW1lIiwJQ1BVX1RJTUUsCTAJfSwKKwl7ICJwbWMiLAlDUFVfUE1DLAkxCX0sCisJeyAicGxhdGZvcm0iLAlDUFVfUExBVEZPUk0sCTAJfSwKKwl7ICJhcGljIiwJQ1BVX0FQSUMsCTAJfSwKKwl7ICJwb3dlcm9uIiwJQ1BVX1BPV0VST04sCTAJfSwKKwl7ICJjb250cm9sIiwJQ1BVX0NPTlRST0wsCTAJfSwKKwl7ICJmZWF0dXJlcyIsCUNQVV9GRUFUVVJFUywJMAl9LAorCXsgImxhc3RicmFuY2giLAlDUFVfTEJSQU5DSCwJMAl9LAorCXsgImJpb3MiLAlDUFVfQklPUywJMAl9LAorCXsgImZyZXEiLAlDUFVfRlJFUSwJMAl9LAorCXsgIm10cnIiLAlDUFVfTVRSUiwJMAl9LAorCXsgInBlcmYiLAlDUFVfUEVSRiwJMAl9LAorCXsgImNhY2hlIiwJQ1BVX0NBQ0hFLAkwCX0sCisJeyAic3lzZW50ZXIiLAlDUFVfU1lTRU5URVIsCTAJfSwKKwl7ICJ0aGVybSIsCUNQVV9USEVSTSwJMAl9LAorCXsgIm1pc2MiLAlDUFVfTUlTQywJMAl9LAorCXsgImRlYnVnIiwJQ1BVX0RFQlVHLAkwCX0sCisJeyAicGF0IiwJQ1BVX1BBVCwJMAl9LAorCXsgInZteCIsCUNQVV9WTVgsCTAJfSwKKwl7ICJjYWxsIiwJQ1BVX0NBTEwsCTAJfSwKKwl7ICJiYXNlIiwJQ1BVX0JBU0UsCTAJfSwKKwl7ICJ2ZXIiLAlDUFVfVkVSLAkwCX0sCisJeyAiY29uZiIsCUNQVV9DT05GLAkwCX0sCisJeyAic21tIiwJQ1BVX1NNTSwJMAl9LAorCXsgInN2bSIsCUNQVV9TVk0sCTAJfSwKKwl7ICJvc3ZtIiwJQ1BVX09TVk0sCTAJfSwKKwl7ICJ0c3MiLAlDUFVfVFNTLAkwCX0sCisJeyAiY3IiLAkJQ1BVX0NSLAkJMAl9LAorCXsgImR0IiwJCUNQVV9EVCwJCTAJfSwKKwl7ICJyZWdpc3RlcnMiLAlDUFVfUkVHX0FMTCwJMAl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVfZmlsZV9iYXNlIGNwdV9maWxlW10gPSB7CisJeyAiaW5kZXgiLAlDUFVfUkVHX0FMTCwJMAl9LAorCXsgInZhbHVlIiwJQ1BVX1JFR19BTEwsCTEJfSwKK307CisKKy8qIEludGVsIFJlZ2lzdGVycyBSYW5nZSAqLworc3RhdGljIHN0cnVjdCBjcHVfZGVidWdfcmFuZ2UgY3B1X2ludGVsX3JhbmdlW10gPSB7CisJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCBDUFVfTUMsCUNQVV9JTlRFTF9BTEwJCX0sCisJeyAweDAwMDAwMDA2LCAweDAwMDAwMDA3LCBDUFVfTU9OSVRPUiwJQ1BVX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgQ1BVX1RJTUUsCUNQVV9JTlRFTF9BTEwJCX0sCisJeyAweDAwMDAwMDExLCAweDAwMDAwMDEzLCBDUFVfUE1DLAlDUFVfSU5URUxfUEVOVElVTQl9LAorCXsgMHgwMDAwMDAxNywgMHgwMDAwMDAxNywgQ1BVX1BMQVRGT1JNLAlDUFVfUFhfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDFCLCAweDAwMDAwMDFCLCBDUFVfQVBJQywJQ1BVX1A2X0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwMDJBLCAweDAwMDAwMDJBLCBDUFVfUE9XRVJPTiwJQ1BVX1BYX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDAyQiwgMHgwMDAwMDAyQiwgQ1BVX1BPV0VST04sCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDAyQywgMHgwMDAwMDAyQywgQ1BVX0ZSRVEsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDAzQSwgMHgwMDAwMDAzQSwgQ1BVX0NPTlRST0wsCUNQVV9DWF9BVF9YRQkJfSwKKworCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MywgQ1BVX0xCUkFOQ0gsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwNDQsIDB4MDAwMDAwNDcsIENQVV9MQlJBTkNILAlDUFVfUE1fQ09fQVQJCX0sCisJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYzLCBDUFVfTEJSQU5DSCwJQ1BVX0MyX0FUCQl9LAorCXsgMHgwMDAwMDA2NCwgMHgwMDAwMDA2NywgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9BVE9NCQl9LAorCisJeyAweDAwMDAwMDc5LCAweDAwMDAwMDc5LCBDUFVfQklPUywJQ1BVX1A2X0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDA4OCwgMHgwMDAwMDA4QSwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMDhCLCAweDAwMDAwMDhCLCBDUFVfQklPUywJQ1BVX1A2X0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDA5QiwgMHgwMDAwMDA5QiwgQ1BVX01PTklUT1IsCUNQVV9JTlRFTF9YRU9OCQl9LAorCisJeyAweDAwMDAwMEMxLCAweDAwMDAwMEMyLCBDUFVfUE1DLAlDUFVfUDZfQ1hfQVQJCX0sCisJeyAweDAwMDAwMENELCAweDAwMDAwMENELCBDUFVfRlJFUSwJQ1BVX0NYX0FUCQl9LAorCXsgMHgwMDAwMDBFNywgMHgwMDAwMDBFOCwgQ1BVX1BFUkYsCUNQVV9DWF9BVAkJfSwKKwl7IDB4MDAwMDAwRkUsIDB4MDAwMDAwRkUsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisKKwl7IDB4MDAwMDAxMTYsIDB4MDAwMDAxMTYsIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDExOCwgMHgwMDAwMDExOCwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMTE5LCAweDAwMDAwMTE5LCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QWAkJfSwKKwl7IDB4MDAwMDAxMUEsIDB4MDAwMDAxMUIsIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDExRSwgMHgwMDAwMDExRSwgQ1BVX0NBQ0hFLAlDUFVfUFhfQ1hfQVQJCX0sCisKKwl7IDB4MDAwMDAxNzQsIDB4MDAwMDAxNzYsIENQVV9TWVNFTlRFUiwJQ1BVX1A2X0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDE3OSwgMHgwMDAwMDE3QSwgQ1BVX01DLAlDUFVfUFhfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTdCLCAweDAwMDAwMTdCLCBDUFVfTUMsCUNQVV9QNl9YRQkJfSwKKwl7IDB4MDAwMDAxODYsIDB4MDAwMDAxODcsIENQVV9QTUMsCUNQVV9QNl9DWF9BVAkJfSwKKwl7IDB4MDAwMDAxOTgsIDB4MDAwMDAxOTksIENQVV9QRVJGLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTlBLCAweDAwMDAwMTlBLCBDUFVfVElNRSwJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDE5QiwgMHgwMDAwMDE5RCwgQ1BVX1RIRVJNLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMUEwLCAweDAwMDAwMUEwLCBDUFVfTUlTQywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwMUM5LCAweDAwMDAwMUM5LCBDUFVfTEJSQU5DSCwJQ1BVX1BNX0NYX0FUCQl9LAorCXsgMHgwMDAwMDFENywgMHgwMDAwMDFEOCwgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDFEOSwgMHgwMDAwMDFEOSwgQ1BVX0RFQlVHLAlDUFVfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMURBLCAweDAwMDAwMURBLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMURCLCAweDAwMDAwMURCLCBDUFVfTEJSQU5DSCwJQ1BVX1A2X1hFCQl9LAorCXsgMHgwMDAwMDFEQywgMHgwMDAwMDFEQywgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAxREQsIDB4MDAwMDAxREUsIENQVV9MQlJBTkNILAlDUFVfUFhfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMUUwLCAweDAwMDAwMUUwLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1A2CQl9LAorCisJeyAweDAwMDAwMjAwLCAweDAwMDAwMjBGLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCXsgMHgwMDAwMDI1MCwgMHgwMDAwMDI1MCwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKwl7IDB4MDAwMDAyNTgsIDB4MDAwMDAyNTksIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjY4LCAweDAwMDAwMjZGLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCXsgMHgwMDAwMDI3NywgMHgwMDAwMDI3NywgQ1BVX1BBVCwJQ1BVX0MyX0FUX1hFCQl9LAorCXsgMHgwMDAwMDJGRiwgMHgwMDAwMDJGRiwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKworCXsgMHgwMDAwMDMwMCwgMHgwMDAwMDMwOCwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMzA5LCAweDAwMDAwMzBCLCBDUFVfUE1DLAlDUFVfQzJfQVRfWEUJCX0sCisJeyAweDAwMDAwMzBDLCAweDAwMDAwMzExLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzNDUsIDB4MDAwMDAzNDUsIENQVV9QTUMsCUNQVV9DMl9BVAkJfSwKKwl7IDB4MDAwMDAzNjAsIDB4MDAwMDAzNzEsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDM4RCwgMHgwMDAwMDM5MCwgQ1BVX1BNQywJQ1BVX0MyX0FUCQl9LAorCXsgMHgwMDAwMDNBMCwgMHgwMDAwMDNCRSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwM0MwLCAweDAwMDAwM0NELCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzRTAsIDB4MDAwMDAzRTEsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDNGMCwgMHgwMDAwMDNGMCwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwM0YxLCAweDAwMDAwM0YxLCBDUFVfUE1DLAlDUFVfQzJfQVRfWEUJCX0sCisJeyAweDAwMDAwM0YyLCAweDAwMDAwM0YyLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKworCXsgMHgwMDAwMDQwMCwgMHgwMDAwMDQwMiwgQ1BVX01DLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCBDUFVfTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDQwNCwgMHgwMDAwMDQwNiwgQ1BVX01DLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNDA3LCAweDAwMDAwNDA3LCBDUFVfTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDQwOCwgMHgwMDAwMDQwQSwgQ1BVX01DLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNDBCLCAweDAwMDAwNDBCLCBDUFVfTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDQwQywgMHgwMDAwMDQwRSwgQ1BVX01DLAlDUFVfUE1fQ1hfWEUJCX0sCisJeyAweDAwMDAwNDBGLCAweDAwMDAwNDBGLCBDUFVfTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDQxMCwgMHgwMDAwMDQxMiwgQ1BVX01DLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNDEzLCAweDAwMDAwNDE3LCBDUFVfTUMsCUNQVV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0ODAsIDB4MDAwMDA0OEIsIENQVV9WTVgsCUNQVV9DWF9BVF9YRQkJfSwKKworCXsgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgQ1BVX0RFQlVHLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNjgwLCAweDAwMDAwNjhGLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNkMwLCAweDAwMDAwNkNGLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1hFT04JCX0sCisKKwl7IDB4MDAwMTA3Q0MsIDB4MDAwMTA3RDMsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OX01QCX0sCisKKwl7IDB4QzAwMDAwODAsIDB4QzAwMDAwODAsIENQVV9GRUFUVVJFUywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweEMwMDAwMDgxLCAweEMwMDAwMDgyLCBDUFVfQ0FMTCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweEMwMDAwMDg0LCAweEMwMDAwMDg0LCBDUFVfQ0FMTCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweEMwMDAwMTAwLCAweEMwMDAwMTAyLCBDUFVfQkFTRSwJQ1BVX0lOVEVMX1hFT04JCX0sCit9OworCisvKiBBTUQgUmVnaXN0ZXJzIFJhbmdlICovCitzdGF0aWMgc3RydWN0IGNwdV9kZWJ1Z19yYW5nZSBjcHVfYW1kX3JhbmdlW10gPSB7CisJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCBDUFVfTUMsCUNQVV9LMTBfUExVUywJCX0sCisJeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCBDUFVfVElNRSwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDAxQiwgMHgwMDAwMDAxQiwgQ1BVX0FQSUMsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAwMkEsIDB4MDAwMDAwMkEsIENQVV9QT1dFUk9OLAlDUFVfSzdfUExVUwkJfSwKKwl7IDB4MDAwMDAwOEIsIDB4MDAwMDAwOEIsIENQVV9WRVIsCUNQVV9LOF9QTFVTCQl9LAorCXsgMHgwMDAwMDBGRSwgMHgwMDAwMDBGRSwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKworCXsgMHgwMDAwMDE3NCwgMHgwMDAwMDE3NiwgQ1BVX1NZU0VOVEVSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMTc5LCAweDAwMDAwMTdCLCBDUFVfTUMsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAxRDksIDB4MDAwMDAxRDksIENQVV9ERUJVRywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDFEQiwgMHgwMDAwMDFERSwgQ1BVX0xCUkFOQ0gsCUNQVV9LOF9QTFVTLAkJfSwKKworCXsgMHgwMDAwMDIwMCwgMHgwMDAwMDIwRiwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyNTAsIDB4MDAwMDAyNTAsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMjU4LCAweDAwMDAwMjU5LCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI2OCwgMHgwMDAwMDI2RiwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyNzcsIDB4MDAwMDAyNzcsIENQVV9QQVQsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyRkYsIDB4MDAwMDAyRkYsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisKKwl7IDB4MDAwMDA0MDAsIDB4MDAwMDA0MTMsIENQVV9NQywJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweEMwMDAwMDgwLCAweEMwMDAwMDgwLCBDUFVfRkVBVFVSRVMsCUNQVV9BTURfQUxMLAkJfSwKKwl7IDB4QzAwMDAwODEsIDB4QzAwMDAwODQsIENQVV9DQUxMLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDAwMTAwLCAweEMwMDAwMTAyLCBDUFVfQkFTRSwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAwMDEwMywgMHhDMDAwMDEwMywgQ1BVX1RJTUUsCUNQVV9LMTBfUExVUywJCX0sCisKKwl7IDB4QzAwMTAwMDAsIDB4QzAwMTAwMDcsIENQVV9QTUMsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMTAsIDB4QzAwMTAwMTAsIENQVV9DT05GLAlDUFVfSzdfUExVUywJCX0sCisJeyAweEMwMDEwMDE1LCAweEMwMDEwMDE1LCBDUFVfQ09ORiwJQ1BVX0s3X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxNiwgMHhDMDAxMDAxQSwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMUQsIDB4QzAwMTAwMUQsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDFGLCAweEMwMDEwMDFGLCBDUFVfQ09ORiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAzMCwgMHhDMDAxMDAzNSwgQ1BVX0JJT1MsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNDQsIDB4QzAwMTAwNDgsIENQVV9NQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDA1MCwgMHhDMDAxMDA1NiwgQ1BVX1NNTSwJQ1BVX0swRl9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNTgsIDB4QzAwMTAwNTgsIENQVV9DT05GLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHhDMDAxMDA2MCwgMHhDMDAxMDA2MCwgQ1BVX0NBQ0hFLAlDUFVfQU1EXzExLAkJfSwKKwl7IDB4QzAwMTAwNjEsIDB4QzAwMTAwNjgsIENQVV9TTU0sCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMDY5LCAweEMwMDEwMDZCLCBDUFVfU01NLAlDUFVfQU1EXzExLAkJfSwKKwl7IDB4QzAwMTAwNzAsIDB4QzAwMTAwNzEsIENQVV9TTU0sCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMTExLCAweEMwMDEwMTEzLCBDUFVfU01NLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMTE0LCAweEMwMDEwMTE4LCBDUFVfU1ZNLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHhDMDAxMDE0MCwgMHhDMDAxMDE0MSwgQ1BVX09TVk0sCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDExMDIyLCAweEMwMDExMDIzLCBDUFVfQ09ORiwJQ1BVX0sxMF9QTFVTLAkJfSwKK307CisKKworLyogSW50ZWwgKi8KK3N0YXRpYyBpbnQgZ2V0X2ludGVsX21vZGVsZmxhZyh1bnNpZ25lZCBtb2RlbCkKK3sKKwlpbnQgZmxhZzsKKworCXN3aXRjaCAobW9kZWwpIHsKKwljYXNlIDB4MDUwMToKKwljYXNlIDB4MDUwMjoKKwljYXNlIDB4MDUwNDoKKwkJZmxhZyA9IENQVV9JTlRFTF9QRU5USVVNOworCQlicmVhazsKKwljYXNlIDB4MDYwMToKKwljYXNlIDB4MDYwMzoKKwljYXNlIDB4MDYwNToKKwljYXNlIDB4MDYwNzoKKwljYXNlIDB4MDYwODoKKwljYXNlIDB4MDYwQToKKwljYXNlIDB4MDYwQjoKKwkJZmxhZyA9IENQVV9JTlRFTF9QNjsKKwkJYnJlYWs7CisJY2FzZSAweDA2MDk6CisJY2FzZSAweDA2MEQ6CisJCWZsYWcgPSBDUFVfSU5URUxfUEVOVElVTV9NOworCQlicmVhazsKKwljYXNlIDB4MDYwRToKKwkJZmxhZyA9IENQVV9JTlRFTF9DT1JFOworCQlicmVhazsKKwljYXNlIDB4MDYwRjoKKwljYXNlIDB4MDYxNzoKKwkJZmxhZyA9IENQVV9JTlRFTF9DT1JFMjsKKwkJYnJlYWs7CisJY2FzZSAweDA2MUM6CisJCWZsYWcgPSBDUFVfSU5URUxfQVRPTTsKKwkJYnJlYWs7CisJY2FzZSAweDBGMDA6CisJY2FzZSAweDBGMDE6CisJY2FzZSAweDBGMDI6CisJY2FzZSAweDBGMDM6CisJY2FzZSAweDBGMDQ6CisJCWZsYWcgPSBDUFVfSU5URUxfWEVPTl9QNDsKKwkJYnJlYWs7CisJY2FzZSAweDBGMDY6CisJCWZsYWcgPSBDUFVfSU5URUxfWEVPTl9NUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmxhZyA9IENQVV9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmxhZzsKK30KKworLyogQU1EICovCitzdGF0aWMgaW50IGdldF9hbWRfbW9kZWxmbGFnKHVuc2lnbmVkIG1vZGVsKQoreworCWludCBmbGFnOworCisJc3dpdGNoIChtb2RlbCA+PiA4KSB7CisJY2FzZSAweDY6CisJCWZsYWcgPSBDUFVfQU1EX0s2OworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJZmxhZyA9IENQVV9BTURfSzc7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlmbGFnID0gQ1BVX0FNRF9LODsKKwkJYnJlYWs7CisJY2FzZSAweGY6CisJCWZsYWcgPSBDUFVfQU1EXzBGOworCQlicmVhazsKKwljYXNlIDB4MTA6CisJCWZsYWcgPSBDUFVfQU1EXzEwOworCQlicmVhazsKKwljYXNlIDB4MTE6CisJCWZsYWcgPSBDUFVfQU1EXzExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gQ1BVX05PTkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmbGFnOworfQorCitzdGF0aWMgaW50IGdldF9jcHVfbW9kZWxmbGFnKHVuc2lnbmVkIGNwdSkKK3sKKwlpbnQgZmxhZzsKKworCWZsYWcgPSBwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KTsKKworCXN3aXRjaCAoZmxhZyA+PiAxNikgeworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJZmxhZyA9IGdldF9pbnRlbF9tb2RlbGZsYWcoZmxhZyk7CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWZsYWcgPSBnZXRfYW1kX21vZGVsZmxhZyhmbGFnICYgMHhmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmxhZyA9IENQVV9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmxhZzsKK30KKworc3RhdGljIGludCBnZXRfY3B1X3JhbmdlX2NvdW50KHVuc2lnbmVkIGNwdSkKK3sKKwlpbnQgaW5kZXg7CisKKwlzd2l0Y2ggKHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID4+IDE2KSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpbmRleCA9IEFSUkFZX1NJWkUoY3B1X2ludGVsX3JhbmdlKTsKKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaW5kZXggPSBBUlJBWV9TSVpFKGNwdV9hbWRfcmFuZ2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbmRleCA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIGludCBpc190eXBlZmxhZ192YWxpZCh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIGZsYWcpCit7CisJdW5zaWduZWQgdmVuZG9yLCBtb2RlbGZsYWc7CisJaW50IGksIGluZGV4OworCisJLyogU3RhbmRhcmQgUmVnaXN0ZXJzIHNob3VsZCBiZSBhbHdheXMgdmFsaWQgKi8KKwlpZiAoZmxhZyA+PSBDUFVfVFNTKQorCQlyZXR1cm4gMTsKKworCW1vZGVsZmxhZyA9IHBlcl9jcHUoY3B1X21vZGVsZmxhZywgY3B1KTsKKwl2ZW5kb3IgPSBwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KSA+PiAxNjsKKwlpbmRleCA9IGdldF9jcHVfcmFuZ2VfY291bnQoY3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisJCXN3aXRjaCAodmVuZG9yKSB7CisJCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJCWlmICgoY3B1X2ludGVsX3JhbmdlW2ldLm1vZGVsICYgbW9kZWxmbGFnKSAmJgorCQkJICAgIChjcHVfaW50ZWxfcmFuZ2VbaV0uZmxhZyAmIGZsYWcpKQorCQkJCXJldHVybiAxOworCQkJYnJlYWs7CisJCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCQlpZiAoKGNwdV9hbWRfcmFuZ2VbaV0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCQkgICAgKGNwdV9hbWRfcmFuZ2VbaV0uZmxhZyAmIGZsYWcpKQorCQkJCXJldHVybiAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBJbnZhbGlkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfY3B1X3JhbmdlKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgKm1pbiwgdW5zaWduZWQgKm1heCwKKwkJCSAgICAgIGludCBpbmRleCwgdW5zaWduZWQgZmxhZykKK3sKKwl1bnNpZ25lZCBtb2RlbGZsYWc7CisKKwltb2RlbGZsYWcgPSBwZXJfY3B1KGNwdV9tb2RlbGZsYWcsIGNwdSk7CisJKm1heCA9IDA7CisJc3dpdGNoIChwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KSA+PiAxNikgeworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJaWYgKChjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLm1vZGVsICYgbW9kZWxmbGFnKSAmJgorCQkgICAgKGNwdV9pbnRlbF9yYW5nZVtpbmRleF0uZmxhZyAmIGZsYWcpKSB7CisJCQkqbWluID0gY3B1X2ludGVsX3JhbmdlW2luZGV4XS5taW47CisJCQkqbWF4ID0gY3B1X2ludGVsX3JhbmdlW2luZGV4XS5tYXg7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaWYgKChjcHVfYW1kX3JhbmdlW2luZGV4XS5tb2RlbCAmIG1vZGVsZmxhZykgJiYKKwkJICAgIChjcHVfYW1kX3JhbmdlW2luZGV4XS5mbGFnICYgZmxhZykpIHsKKwkJCSptaW4gPSBjcHVfYW1kX3JhbmdlW2luZGV4XS5taW47CisJCQkqbWF4ID0gY3B1X2FtZF9yYW5nZVtpbmRleF0ubWF4OworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAqbWF4OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIGNhbGxlZCB3aXRoIHNlcSA9IE5VTEwgZm9yIHByaW50ayAqLworc3RhdGljIHZvaWQgcHJpbnRfY3B1X2RhdGEoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIHR5cGUsCisJCQkgICB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXY7CisJdTY0IHZhbCA9IGhpZ2g7CisKKwlpZiAoc2VxKSB7CisJCXByaXYgPSBzZXEtPnByaXZhdGU7CisJCWlmIChwcml2LT5maWxlKSB7CisJCQl2YWwgPSAodmFsIDw8IDMyKSB8IGxvdzsKKwkJCXNlcV9wcmludGYoc2VxLCAiMHglbGx4XG4iLCB2YWwpOworCQl9IGVsc2UKKwkJCXNlcV9wcmludGYoc2VxLCAiICUwOHg6ICUwOHhfJTA4eFxuIiwKKwkJCQkgICB0eXBlLCBoaWdoLCBsb3cpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICIgJTA4eDogJTA4eF8lMDh4XG4iLCB0eXBlLCBoaWdoLCBsb3cpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIGNhbGxlZCB3aXRoIHNlcSA9IE5VTEwgZm9yIHByaW50ayAqLworc3RhdGljIHZvaWQgcHJpbnRfbXNyKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIGZsYWcpCit7CisJdW5zaWduZWQgbXNyLCBtc3JfbWluLCBtc3JfbWF4OworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdjsKKwl1MzIgbG93LCBoaWdoOworCWludCBpLCByYW5nZTsKKworCWlmIChzZXEpIHsKKwkJcHJpdiA9IHNlcS0+cHJpdmF0ZTsKKwkJaWYgKHByaXYtPmZpbGUpIHsKKwkJCWlmICghcmRtc3Jfc2FmZV9vbl9jcHUocHJpdi0+Y3B1LCBwcml2LT5yZWcsCisJCQkJCSAgICAgICAmbG93LCAmaGlnaCkpCisJCQkJcHJpbnRfY3B1X2RhdGEoc2VxLCBwcml2LT5yZWcsIGxvdywgaGlnaCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyYW5nZSA9IGdldF9jcHVfcmFuZ2VfY291bnQoY3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCByYW5nZTsgaSsrKSB7CisJCWlmICghZ2V0X2NwdV9yYW5nZShjcHUsICZtc3JfbWluLCAmbXNyX21heCwgaSwgZmxhZykpCisJCQljb250aW51ZTsKKworCQlmb3IgKG1zciA9IG1zcl9taW47IG1zciA8PSBtc3JfbWF4OyBtc3IrKykgeworCQkJaWYgKHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgbXNyLCAmbG93LCAmaGlnaCkpCisJCQkJY29udGludWU7CisJCQlwcmludF9jcHVfZGF0YShzZXEsIG1zciwgbG93LCBoaWdoKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfdHNzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGFyZzsKKwl1bnNpZ25lZCBpbnQgc2VnOworCisJc2VxX3ByaW50ZihzZXEsICIgUkFYXHQ6ICUwMTZseFxuIiwgcmVncy0+YXgpOworCXNlcV9wcmludGYoc2VxLCAiIFJCWFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmJ4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSQ1hcdDogJTAxNmx4XG4iLCByZWdzLT5jeCk7CisJc2VxX3ByaW50ZihzZXEsICIgUkRYXHQ6ICUwMTZseFxuIiwgcmVncy0+ZHgpOworCisJc2VxX3ByaW50ZihzZXEsICIgUlNJXHQ6ICUwMTZseFxuIiwgcmVncy0+c2kpOworCXNlcV9wcmludGYoc2VxLCAiIFJESVx0OiAlMDE2bHhcbiIsIHJlZ3MtPmRpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSQlBcdDogJTAxNmx4XG4iLCByZWdzLT5icCk7CisJc2VxX3ByaW50ZihzZXEsICIgRVNQXHQ6ICUwMTZseFxuIiwgcmVncy0+c3ApOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNlcV9wcmludGYoc2VxLCAiIFIwOFx0OiAlMDE2bHhcbiIsIHJlZ3MtPnI4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMDlcdDogJTAxNmx4XG4iLCByZWdzLT5yOSk7CisJc2VxX3ByaW50ZihzZXEsICIgUjEwXHQ6ICUwMTZseFxuIiwgcmVncy0+cjEwKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTFcdDogJTAxNmx4XG4iLCByZWdzLT5yMTEpOworCXNlcV9wcmludGYoc2VxLCAiIFIxMlx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxMik7CisJc2VxX3ByaW50ZihzZXEsICIgUjEzXHQ6ICUwMTZseFxuIiwgcmVncy0+cjEzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTRcdDogJTAxNmx4XG4iLCByZWdzLT5yMTQpOworCXNlcV9wcmludGYoc2VxLCAiIFIxNVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxNSk7CisjZW5kaWYKKworCWFzbSgibW92bCAlJWNzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIENTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisJYXNtKCJtb3ZsICUlZHMsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRFNcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBTU1x0OiAgICAgICAgICAgICAlMDRseFxuIiwgcmVncy0+c3MgJiAweGZmZmYpOworCWFzbSgibW92bCAlJWVzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIEVTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisJYXNtKCJtb3ZsICUlZnMsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRlNcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlhc20oIm1vdmwgJSVncywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBHU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCisJc2VxX3ByaW50ZihzZXEsICIgRUZMQUdTXHQ6ICUwMTZseFxuIiwgcmVncy0+ZmxhZ3MpOworCisJc2VxX3ByaW50ZihzZXEsICIgRUlQXHQ6ICUwMTZseFxuIiwgcmVncy0+aXApOworfQorCitzdGF0aWMgdm9pZCBwcmludF9jcih2b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBjcjBcdDogJTAxNmx4XG4iLCByZWFkX2NyMCgpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBjcjJcdDogJTAxNmx4XG4iLCByZWFkX2NyMigpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBjcjNcdDogJTAxNmx4XG4iLCByZWFkX2NyMygpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBjcjRcdDogJTAxNmx4XG4iLCByZWFkX2NyNF9zYWZlKCkpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXFfcHJpbnRmKHNlcSwgIiBjcjhcdDogJTAxNmx4XG4iLCByZWFkX2NyOCgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwcmludF9kZXNjX3B0cihjaGFyICpzdHIsIHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVzY19wdHIgZHQpCit7CisJc2VxX3ByaW50ZihzZXEsICIgJXNcdDogJTAxNmxseFxuIiwgc3RyLCAodTY0KShkdC5hZGRyZXNzIHwgZHQuc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kdCh2b2lkICpzZXEpCit7CisJc3RydWN0IGRlc2NfcHRyIGR0OworCXVuc2lnbmVkIGxvbmcgbGR0OworCisJLyogSURUICovCisJc3RvcmVfaWR0KChzdHJ1Y3QgZGVzY19wdHIgKikmZHQpOworCXByaW50X2Rlc2NfcHRyKCJJRFQiLCBzZXEsIGR0KTsKKworCS8qIEdEVCAqLworCXN0b3JlX2dkdCgoc3RydWN0IGRlc2NfcHRyICopJmR0KTsKKwlwcmludF9kZXNjX3B0cigiR0RUIiwgc2VxLCBkdCk7CisKKwkvKiBMRFQgKi8KKwlzdG9yZV9sZHQobGR0KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMRFRcdDogJTAxNmx4XG4iLCBsZHQpOworCisJLyogVFIgKi8KKwlzdG9yZV90cihsZHQpOworCXNlcV9wcmludGYoc2VxLCAiIFRSXHQ6ICUwMTZseFxuIiwgbGR0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZHIodm9pZCAqYXJnKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gYXJnOworCXVuc2lnbmVkIGxvbmcgZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCS8qIElnbm9yZSBkYjQsIGRiNSAqLworCQlpZiAoKGkgPT0gNCkgfHwgKGkgPT0gNSkpCisJCQljb250aW51ZTsKKwkJZ2V0X2RlYnVncmVnKGRyLCBpKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgZHIlZFx0OiAlMDE2bHhcbiIsIGksIGRyKTsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgIlxuIE1TUlx0OlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2FwaWModm9pZCAqYXJnKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gYXJnOworCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc2VxX3ByaW50ZihzZXEsICIgTEFQSUNcdDpcbiIpOworCXNlcV9wcmludGYoc2VxLCAiIElEXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0lEKSA+PiAyNCk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWUikpOworCXNlcV9wcmludGYoc2VxLCAiIFRBU0tQUklcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1RBU0tQUkkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBBUkJQUklcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfQVJCUFJJKSk7CisJc2VxX3ByaW50ZihzZXEsICIgUFJPQ1BSSVx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfUFJPQ1BSSSkpOworCXNlcV9wcmludGYoc2VxLCAiIExEUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MRFIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBERlJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfREZSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgU1BJVlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19TUElWKSk7CisJc2VxX3ByaW50ZihzZXEsICIgSVNSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0lTUikpOworCXNlcV9wcmludGYoc2VxLCAiIEVTUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19FU1IpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJQ1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSUNSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgSUNSMlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19JQ1IyKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUVFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlRUKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUVEhNUlx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUVEhNUikpOworCXNlcV9wcmludGYoc2VxLCAiIExWVFBDXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVFBDKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUMFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlQwKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUMVx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlQxKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZURVJSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVEVSUikpOworCXNlcV9wcmludGYoc2VxLCAiIFRNSUNUXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1RNSUNUKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVE1DQ1RcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVE1DQ1QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBURENSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1REQ1IpKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKworCXNlcV9wcmludGYoc2VxLCAiXG4gTVNSXHQ6XG4iKTsKK30KKworc3RhdGljIGludCBjcHVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gc2VxLT5wcml2YXRlOworCisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNwdV9iYXNlW3ByaXYtPnR5cGVdLmZsYWcpIHsKKwljYXNlIENQVV9UU1M6CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X3Rzcywgc2VxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQ1I6CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X2NyLCBzZXEsIDEpOworCQlicmVhazsKKwljYXNlIENQVV9EVDoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfZHQsIHNlcSwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RFQlVHOgorCQlpZiAocHJpdi0+ZmlsZSA9PSBDUFVfSU5ERVhfQklUKQorCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfZHIsIHNlcSwgMSk7CisJCXByaW50X21zcihzZXEsIHByaXYtPmNwdSwgY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZyk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0FQSUM6CisJCWlmIChwcml2LT5maWxlID09IENQVV9JTkRFWF9CSVQpCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9hcGljLCBzZXEsIDEpOworCQlwcmludF9tc3Ioc2VxLCBwcml2LT5jcHUsIGNwdV9iYXNlW3ByaXYtPnR5cGVdLmZsYWcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50X21zcihzZXEsIHByaXYtPmNwdSwgY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZyk7CisJCWJyZWFrOworCX0KKwlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNwdV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCWlmICgqcG9zID09IDApIC8qIE9uZSB0aW1lIGlzIGVub3VnaCA7LSkgKi8KKwkJcmV0dXJuIHNlcTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqY3B1X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKworCXJldHVybiBjcHVfc2VxX3N0YXJ0KHNlcSwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgY3B1X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdV9zZXFfb3BzID0geworCS5zdGFydAkJPSBjcHVfc2VxX3N0YXJ0LAorCS5uZXh0CQk9IGNwdV9zZXFfbmV4dCwKKwkuc3RvcAkJPSBjcHVfc2VxX3N0b3AsCisJLnNob3cJCT0gY3B1X3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBjcHVfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlpbnQgZXJyOworCisJZXJyID0gc2VxX29wZW4oZmlsZSwgJmNwdV9zZXFfb3BzKTsKKwlpZiAoIWVycikgeworCQlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXNlcS0+cHJpdmF0ZSA9IHByaXY7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cml0ZV9tc3Ioc3RydWN0IGNwdV9wcml2YXRlICpwcml2LCB1NjQgdmFsKQoreworCXUzMiBsb3csIGhpZ2g7CisKKwloaWdoID0gKHZhbCA+PiAzMikgJiAweGZmZmZmZmZmOworCWxvdyA9IHZhbCAmIDB4ZmZmZmZmZmY7CisKKwlpZiAoIXdybXNyX3NhZmVfb25fY3B1KHByaXYtPmNwdSwgcHJpdi0+cmVnLCBsb3csIGhpZ2gpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRVBFUk07Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY3B1X3JlZ2lzdGVyKHN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiwgY29uc3QgY2hhciAqYnVmKQoreworCWludCByZXQgPSAtRVBFUk07CisJdTY0IHZhbDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU3VwcG9ydGluZyBvbmx5IE1TUnMgKi8KKwlpZiAocHJpdi0+dHlwZSA8IENQVV9UU1NfQklUKQorCQlyZXR1cm4gd3JpdGVfbXNyKHByaXYsIHZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBjcHVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiA9IHNlcS0+cHJpdmF0ZTsKKwljaGFyIGJ1ZlsxOV07CisKKwlpZiAoKHByaXYgPT0gTlVMTCkgfHwgKGNvdW50ID49IHNpemVvZihidWYpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1Zltjb3VudF0gPSAwOworCisJaWYgKChjcHVfYmFzZVtwcml2LT50eXBlXS53cml0ZSkgJiYgKGNwdV9maWxlW3ByaXYtPmZpbGVdLndyaXRlKSkKKwkJaWYgKCF3cml0ZV9jcHVfcmVnaXN0ZXIocHJpdiwgYnVmKSkKKwkJCXJldHVybiBjb3VudDsKKworCXJldHVybiAtRUFDQ0VTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjcHVfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY3B1X3NlcV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS53cml0ZQkJPSBjcHVfd3JpdGUsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgY3B1X2NyZWF0ZV9maWxlKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgcmVnLAorCQkJICAgdW5zaWduZWQgZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7CisKKwkvKiBBbHJlYWR5IGludGlhbGl6ZWQgKi8KKwlpZiAoZmlsZSA9PSBDUFVfSU5ERVhfQklUKQorCQlpZiAocGVyX2NwdShjcHVfYXJyW3R5cGVdLmluaXQsIGNwdSkpCisJCQlyZXR1cm4gMDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+Y3B1ID0gY3B1OworCXByaXYtPnR5cGUgPSB0eXBlOworCXByaXYtPnJlZyA9IHJlZzsKKwlwcml2LT5maWxlID0gZmlsZTsKKwltdXRleF9sb2NrKCZjcHVfZGVidWdfbG9jayk7CisJcGVyX2NwdShwcml2X2Fyclt0eXBlXSwgY3B1KSA9IHByaXY7CisJcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSsrOworCW11dGV4X3VubG9jaygmY3B1X2RlYnVnX2xvY2spOworCisJaWYgKGZpbGUpCisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoY3B1X2ZpbGVbZmlsZV0ubmFtZSwgU19JUlVHTywKKwkJCQkgICAgZGVudHJ5LCAodm9pZCAqKXByaXYsICZjcHVfZm9wcyk7CisJZWxzZSB7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoY3B1X2Jhc2VbdHlwZV0ubmFtZSwgU19JUlVHTywKKwkJCQkgICAgcGVyX2NwdShjcHVfYXJyW3R5cGVdLmRlbnRyeSwgY3B1KSwKKwkJCQkgICAgKHZvaWQgKilwcml2LCAmY3B1X2ZvcHMpOworCQltdXRleF9sb2NrKCZjcHVfZGVidWdfbG9jayk7CisJCXBlcl9jcHUoY3B1X2Fyclt0eXBlXS5pbml0LCBjcHUpID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZjcHVfZGVidWdfbG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3B1X2luaXRfcmVnZmlsZXModW5zaWduZWQgY3B1LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgcmVnLAorCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJdW5zaWduZWQgZmlsZTsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoZmlsZSA9IDA7IGZpbGUgPCAgQVJSQVlfU0laRShjcHVfZmlsZSk7IGZpbGUrKykgeworCQllcnIgPSBjcHVfY3JlYXRlX2ZpbGUoY3B1LCB0eXBlLCByZWcsIGZpbGUsIGRlbnRyeSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3B1X2luaXRfbXNyKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgdHlwZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmNwdV9kZW50cnkgPSBOVUxMOworCXVuc2lnbmVkIHJlZywgcmVnX21pbiwgcmVnX21heDsKKwlpbnQgaSwgcmFuZ2UsIGVyciA9IDA7CisJY2hhciByZWdfZGlyWzEyXTsKKwl1MzIgbG93LCBoaWdoOworCisJcmFuZ2UgPSBnZXRfY3B1X3JhbmdlX2NvdW50KGNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykgeworCQlpZiAoIWdldF9jcHVfcmFuZ2UoY3B1LCAmcmVnX21pbiwgJnJlZ19tYXgsIGksCisJCQkJICAgY3B1X2Jhc2VbdHlwZV0uZmxhZykpCisJCQljb250aW51ZTsKKworCQlmb3IgKHJlZyA9IHJlZ19taW47IHJlZyA8PSByZWdfbWF4OyByZWcrKykgeworCQkJaWYgKHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgcmVnLCAmbG93LCAmaGlnaCkpCisJCQkJY29udGludWU7CisKKwkJCXNwcmludGYocmVnX2RpciwgIjB4JXgiLCByZWcpOworCQkJY3B1X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihyZWdfZGlyLCBkZW50cnkpOworCQkJZXJyID0gY3B1X2luaXRfcmVnZmlsZXMoY3B1LCB0eXBlLCByZWcsIGNwdV9kZW50cnkpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9hbGxyZWcodW5zaWduZWQgY3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGRlbnRyeSAqY3B1X2RlbnRyeSA9IE5VTEw7CisJdW5zaWduZWQgdHlwZTsKKwlpbnQgZXJyID0gMDsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCAgQVJSQVlfU0laRShjcHVfYmFzZSkgLSAxOyB0eXBlKyspIHsKKwkJaWYgKCFpc190eXBlZmxhZ192YWxpZChjcHUsIGNwdV9iYXNlW3R5cGVdLmZsYWcpKQorCQkJY29udGludWU7CisJCWNwdV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY3B1X2Jhc2VbdHlwZV0ubmFtZSwgZGVudHJ5KTsKKwkJcGVyX2NwdShjcHVfYXJyW3R5cGVdLmRlbnRyeSwgY3B1KSA9IGNwdV9kZW50cnk7CisKKwkJaWYgKHR5cGUgPCBDUFVfVFNTX0JJVCkKKwkJCWVyciA9IGNwdV9pbml0X21zcihjcHUsIHR5cGUsIGNwdV9kZW50cnkpOworCQllbHNlCisJCQllcnIgPSBjcHVfY3JlYXRlX2ZpbGUoY3B1LCB0eXBlLCAwLCBDUFVfSU5ERVhfQklULAorCQkJCQkgICAgICBjcHVfZGVudHJ5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9jcHUodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpjcHVfZGVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmNwdWk7CisJY2hhciBjcHVfZGlyWzEyXTsKKwl1bnNpZ25lZCBjcHU7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKSB7CisJCWNwdWkgPSAmY3B1X2RhdGEoY3B1KTsKKwkJaWYgKCFjcHVfaGFzKGNwdWksIFg4Nl9GRUFUVVJFX01TUikpCisJCQljb250aW51ZTsKKwkJcGVyX2NwdShjcHVfbW9kZWwsIGNwdSkgPSAoKGNwdWktPng4Nl92ZW5kb3IgPDwgMTYpIHwKKwkJCQkJICAgKGNwdWktPng4NiA8PCA4KSB8CisJCQkJCSAgIChjcHVpLT54ODZfbW9kZWwpKTsKKwkJcGVyX2NwdShjcHVfbW9kZWxmbGFnLCBjcHUpID0gZ2V0X2NwdV9tb2RlbGZsYWcoY3B1KTsKKworCQlzcHJpbnRmKGNwdV9kaXIsICJjcHUlZCIsIGNwdSk7CisJCWNwdV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY3B1X2RpciwgY3B1X2RlYnVnZnNfZGlyKTsKKwkJZXJyID0gY3B1X2luaXRfYWxscmVnKGNwdSwgY3B1X2RlbnRyeSk7CisKKwkJcHJfaW5mbygiY3B1JWQoJWQpIGRlYnVnIGZpbGVzICVkXG4iLAorCQkJY3B1LCBucl9jcHVfaWRzLCBwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpKTsKKwkJaWYgKHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkgPiBNQVhfQ1BVX0ZJTEVTKSB7CisJCQlwcl9lcnIoIlJlZ2lzdGVyIGZpbGVzIGNvdW50ICVkIGV4Y2VlZHMgbGltaXQgJWRcbiIsCisJCQkJcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSwgTUFYX0NQVV9GSUxFUyk7CisJCQlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpID0gTUFYX0NQVV9GSUxFUzsKKwkJCWVyciA9IC1FTkZJTEU7CisJCX0KKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgY3B1X2RlYnVnX2luaXQodm9pZCkKK3sKKwljcHVfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNwdSIsIGFyY2hfZGVidWdmc19kaXIpOworCisJcmV0dXJuIGNwdV9pbml0X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1X2RlYnVnX2V4aXQodm9pZCkKK3sKKwlpbnQgaSwgY3B1OworCisJaWYgKGNwdV9kZWJ1Z2ZzX2RpcikKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNwdV9kZWJ1Z2ZzX2Rpcik7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8ICBucl9jcHVfaWRzOyBjcHUrKykKKwkJZm9yIChpID0gMDsgaSA8IHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSk7IGkrKykKKwkJCWtmcmVlKHBlcl9jcHUocHJpdl9hcnJbaV0sIGNwdSkpOworfQorCittb2R1bGVfaW5pdChjcHVfZGVidWdfaW5pdCk7Cittb2R1bGVfZXhpdChjcHVfZGVidWdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkphc3dpbmRlciBTaW5naCBSYWpwdXQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BVIERlYnVnIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCmluZGV4IGZmZDBmNWUuLjU5MzE3MWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKQEAgLTYxLDIzICs2MSwyMyBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBDeDg2X2RpcjBfbXNiIF9fY3B1aW5pdGRhdGEgPSAwOwogCi1zdGF0aWMgY2hhciBDeDg2X21vZGVsW11bOV0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4ODZfbW9kZWxbXVs5XSA9IHsKIAkiQ3g0ODYiLCAiQ3g0ODYiLCAiNXg4NiAiLCAiNng4NiIsICJNZWRpYUdYICIsICI2eDg2TVggIiwKIAkiTSBJSSAiLCAiVW5rbm93biIKIH07Ci1zdGF0aWMgY2hhciBDeDQ4Nl9uYW1lW11bNV0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4NDg2X25hbWVbXVs1XSA9IHsKIAkiU0xDIiwgIkRMQyIsICJTTEMyIiwgIkRMQzIiLCAiU1J4IiwgIkRSeCIsCiAJIlNSeDIiLCAiRFJ4MiIKIH07Ci1zdGF0aWMgY2hhciBDeDQ4NlNfbmFtZVtdWzRdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBDeDQ4NlNfbmFtZVtdWzRdID0gewogCSJTIiwgIlMyIiwgIlNlIiwgIlMyZSIKIH07Ci1zdGF0aWMgY2hhciBDeDQ4NkRfbmFtZVtdWzRdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBDeDQ4NkRfbmFtZVtdWzRdID0gewogCSJEWCIsICJEWDIiLCAiPyIsICI/IiwgIj8iLCAiRFg0IgogfTsKIHN0YXRpYyBjaGFyIEN4ODZfY2JbXSBfX2NwdWluaXRkYXRhID0gIj8uNXggQ29yZS9CdXMgQ2xvY2siOwotc3RhdGljIGNoYXIgY3lyaXhfbW9kZWxfbXVsdDFbXSBfX2NwdWluaXRkYXRhID0gIjEyPz80MyI7Ci1zdGF0aWMgY2hhciBjeXJpeF9tb2RlbF9tdWx0MltdIF9fY3B1aW5pdGRhdGEgPSAiMTIyMzM0NDUiOworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgY3lyaXhfbW9kZWxfbXVsdDFbXSA9ICIxMj8/NDMiOworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgY3lyaXhfbW9kZWxfbXVsdDJbXSA9ICIxMjIzMzQ0NSI7CiAKIC8qCiAgKiBSZXNldCB0aGUgc2xvdy1sb29wIChTTE9QKSBiaXQgb24gdGhlIDY4NihMKSB3aGljaCBpcyBzZXQgYnkgc29tZSBvbGQKQEAgLTQzNSw3ICs0MzUsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGN5cml4X2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBjeXJpeF9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJDeXJpeCIsCiAJLmNfaWRlbnQJPSB7ICJDeXJpeEluc3RlYWQiIH0sCiAJLmNfZWFybHlfaW5pdAk9IGVhcmx5X2luaXRfY3lyaXgsCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogY3B1X2Rldl9yZWdpc3RlcihjeXJpeF9jcHVfZGV2KTsKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IG5zY19jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgbnNjX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIk5TQyIsCiAJLmNfaWRlbnQJPSB7ICJHZW9kZSBieSBOU0MiIH0sCiAJLmNfaW5pdAkJPSBpbml0X25zYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCAxYTg5YTJiLi43NDM3ZmExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZHMuaD4KICNpbmNsdWRlIDxhc20vYnVncy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KQEAgLTU0LDYgKzU1LDExIEBACiAJCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSAxMjg7CiAjZW5kaWYKIAorCS8qIENQVUlEIHdvcmthcm91bmQgZm9yIDBGMzMvMEYzNCBDUFUgKi8KKwlpZiAoYy0+eDg2ID09IDB4RiAmJiBjLT54ODZfbW9kZWwgPT0gMHgzCisJICAgICYmIChjLT54ODZfbWFzayA9PSAweDMgfHwgYy0+eDg2X21hc2sgPT0gMHg0KSkKKwkJYy0+eDg2X3BoeXNfYml0cyA9IDM2OworCiAJLyoKIAkgKiBjLT54ODZfcG93ZXIgaXMgODAwMF8wMDA3IGVkeC4gQml0IDggaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZQogCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzLgpAQCAtMTE2LDYgKzEyMiwyOCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbnRlbF9zbXBfY2hlY2soc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBjYWxsaW5nIGlzIGZyb20gaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpID8gKi8KKwlpZiAoYy0+Y3B1X2luZGV4ID09IGJvb3RfY3B1X2lkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE1hc2sgQiwgUGVudGl1bSwgYnV0IG5vdCBQZW50aXVtIE1NWAorCSAqLworCWlmIChjLT54ODYgPT0gNSAmJgorCSAgICBjLT54ODZfbWFzayA+PSAxICYmIGMtPng4Nl9tYXNrIDw9IDQgJiYKKwkgICAgYy0+eDg2X21vZGVsIDw9IDMpIHsKKwkJLyoKKwkJICogUmVtZW1iZXIgd2UgaGF2ZSBCIHN0ZXAgUGVudGlhIHdpdGggYnVncworCQkgKi8KKwkJV0FSTl9PTkNFKDEsICJXQVJOSU5HOiBTTVAgb3BlcmF0aW9uIG1heSBiZSB1bnJlbGlhYmxlIgorCQkJCSAgICAid2l0aCBCIHN0ZXBwaW5nIHByb2Nlc3NvcnMuXG4iKTsKKwl9CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGludGVsX3dvcmthcm91bmRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1bnNpZ25lZCBsb25nIGxvLCBoaTsKQEAgLTE5Miw2ICsyMjAsOCBAQAogI2lmZGVmIENPTkZJR19YODZfTlVNQVEKIAludW1hcV90c2NfZGlzYWJsZSgpOwogI2VuZGlmCisKKwlpbnRlbF9zbXBfY2hlY2soYyk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgX19jcHVpbml0IGludGVsX3dvcmthcm91bmRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTM5MSw3ICs0MjEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBpbnRlbF9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgaW50ZWxfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiSW50ZWwiLAogCS5jX2lkZW50CT0geyAiR2VudWluZUludGVsIiB9LAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDcyOTM1MDguLmM0NzFlYjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMzIsNyArMzIsNyBAQAogfTsKIAogLyogYWxsIHRoZSBjYWNoZSBkZXNjcmlwdG9yIHR5cGVzIHdlIGNhcmUgYWJvdXQgKG5vIFRMQiBvciB0cmFjZSBjYWNoZSBlbnRyaWVzKSAqLwotc3RhdGljIHN0cnVjdCBfY2FjaGVfdGFibGUgY2FjaGVfdGFibGVbXSBfX2NwdWluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2NhY2hlX3RhYmxlIF9fY3B1aW5pdGNvbnN0IGNhY2hlX3RhYmxlW10gPQogewogCXsgMHgwNiwgTFZMXzFfSU5TVCwgOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDA4LCBMVkxfMV9JTlNULCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCkBAIC0yMDYsMTUgKzIwNiwxNSBAQAogCXVuc2lnbmVkIHZhbDsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhc3NvY3NbXSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IF9fY3B1aW5pdGNvbnN0IGFzc29jc1tdID0gewogCVsxXSA9IDEsIFsyXSA9IDIsIFs0XSA9IDQsIFs2XSA9IDgsCiAJWzhdID0gMTYsIFsweGFdID0gMzIsIFsweGJdID0gNDgsCiAJWzB4Y10gPSA2NCwKIAlbMHhmXSA9IDB4ZmZmZiAvLyA/PwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgbGV2ZWxzW10gX19jcHVpbml0ZGF0YSA9IHsgMSwgMSwgMiwgMyB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgdHlwZXNbXSBfX2NwdWluaXRkYXRhID0geyAxLCAyLCAzLCAzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2NwdWluaXRjb25zdCBsZXZlbHNbXSA9IHsgMSwgMSwgMiwgMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX19jcHVpbml0Y29uc3QgdHlwZXNbXSA9IHsgMSwgMiwgMywgMyB9OwogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQKIGFtZF9jcHVpZDQoaW50IGxlYWYsIHVuaW9uIF9jcHVpZDRfbGVhZl9lYXggKmVheCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svTWFrZWZpbGUKaW5kZXggZDdkMjMyMy4uYjJmODk4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfWDg2X01DRV9JTlRFTCkJKz0gbWNlX2ludGVsXzY0Lm8KIG9iai0kKENPTkZJR19YODZfTUNFX0FNRCkJKz0gbWNlX2FtZF82NC5vCiBvYmotJChDT05GSUdfWDg2X01DRV9OT05GQVRBTCkJKz0gbm9uLWZhdGFsLm8KK29iai0kKENPTkZJR19YODZfTUNFX1RIUkVTSE9MRCkgKz0gdGhyZXNob2xkLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKaW5kZXggZGZhZWJjZS4uMzU1MjExOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKQEAgLTYwLDIwICs2MCw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbGRfY3I0IF9faW5pdGRhdGE7Ci0KLXZvaWQgX19pbml0IHN0b3BfbWNlKHZvaWQpCi17Ci0Jb2xkX2NyNCA9IHJlYWRfY3I0KCk7Ci0JY2xlYXJfaW5fY3I0KFg4Nl9DUjRfTUNFKTsKLX0KLQotdm9pZCBfX2luaXQgcmVzdGFydF9tY2Uodm9pZCkKLXsKLQlpZiAob2xkX2NyNCAmIFg4Nl9DUjRfTUNFKQotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfTUNFKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgbWNoZWNrX2Rpc2FibGUoY2hhciAqc3RyKQogewogCW1jZV9kaXNhYmxlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jCmluZGV4IGZlNzk5ODUuLmNhMTQ2MDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jCkBAIC0zLDYgKzMsOCBAQAogICogSzggcGFydHMgQ29weXJpZ2h0IDIwMDIsMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKiBSZXN0IGZyb20gdW5rbm93biBhdXRob3IocykuCiAgKiAyMDA0IEFuZGkgS2xlZW4uIFJld3JvdGUgbW9zdCBvZiBpdC4KKyAqIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEFuZGkgS2xlZW4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjQsNiArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgpAQCAtMzIsNyArMzcsNiBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAKICNkZWZpbmUgTUlTQ19NQ0VMT0dfTUlOT1IgMjI3Ci0jZGVmaW5lIE5SX1NZU0ZTX0JBTktTIDYKIAogYXRvbWljX3QgbWNlX2VudHJ5OwogCkBAIC00Nyw3ICs1MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdG9sZXJhbnQgPSAxOwogc3RhdGljIGludCBiYW5rczsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbmtbTlJfU1lTRlNfQkFOS1NdID0geyBbMCAuLi4gTlJfU1lTRlNfQkFOS1MtMV0gPSB+MFVMIH07CitzdGF0aWMgdTY0ICpiYW5rOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbm90aWZ5X3VzZXI7CiBzdGF0aWMgaW50IHJpcF9tc3I7CiBzdGF0aWMgaW50IG1jZV9ib290bG9nID0gLTE7CkBAIC01OCw2ICs2MiwxOSBAQAogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWNlX3dhaXQpOwogCisvKiBNQ0EgYmFua3MgcG9sbGVkIGJ5IHRoZSBwZXJpb2QgcG9sbGluZyB0aW1lciBmb3IgY29ycmVjdGVkIGV2ZW50cyAqLworREVGSU5FX1BFUl9DUFUobWNlX2JhbmtzX3QsIG1jZV9wb2xsX2JhbmtzKSA9IHsKKwlbMCAuLi4gQklUU19UT19MT05HUyhNQVhfTlJfQkFOS1MpLTFdID0gfjBVTAorfTsKKworLyogRG8gaW5pdGlhbCBpbml0aWFsaXphdGlvbiBvZiBhIHN0cnVjdCBtY2UgKi8KK3ZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pCit7CisJbWVtc2V0KG0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJbS0+Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJkdHNjbGwobS0+dHNjKTsKK30KKwogLyoKICAqIExvY2tsZXNzIE1DRSBsb2dnaW5nIGluZnJhc3RydWN0dXJlLgogICogVGhpcyBhdm9pZHMgZGVhZGxvY2tzIG9uIHByaW50ayBsb2NrcyB3aXRob3V0IGhhdmluZyB0byBicmVhayBsb2Nrcy4gQWxzbwpAQCAtMTE5LDExICsxMzYsMTEgQEAKIAkJCXByaW50X3N5bWJvbCgieyVzfSIsIG0tPmlwKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiVFNDICVMeCAiLCBtLT50c2MpOworCXByaW50ayhLRVJOX0VNRVJHICJUU0MgJWxseCAiLCBtLT50c2MpOwogCWlmIChtLT5hZGRyKQotCQlwcmludGsoIkFERFIgJUx4ICIsIG0tPmFkZHIpOworCQlwcmludGsoIkFERFIgJWxseCAiLCBtLT5hZGRyKTsKIAlpZiAobS0+bWlzYykKLQkJcHJpbnRrKCJNSVNDICVMeCAiLCBtLT5taXNjKTsKKwkJcHJpbnRrKCJNSVNDICVsbHggIiwgbS0+bWlzYyk7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiUnVuIHRocm91Z2ggbWNlbG9nIC0tYXNjaWkgdG8gZGVjb2RlICIKQEAgLTE0OSw4ICsxNjYsMTAgQEAKIAlwYW5pYyhtc2cpOwogfQogCi1zdGF0aWMgaW50IG1jZV9hdmFpbGFibGUoc3RydWN0IGNwdWluZm9feDg2ICpjKQoraW50IG1jZV9hdmFpbGFibGUoc3RydWN0IGNwdWluZm9feDg2ICpjKQogeworCWlmIChtY2VfZG9udF9pbml0KQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0UpICYmIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTUNBKTsKIH0KIApAQCAtMTcyLDcgKzE5MSw3NyBAQAogfQogCiAvKgotICogVGhlIGFjdHVhbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIKKyAqIFBvbGwgZm9yIGNvcnJlY3RlZCBldmVudHMgb3IgZXZlbnRzIHRoYXQgaGFwcGVuZWQgYmVmb3JlIHJlc2V0LgorICogVGhvc2UgYXJlIGp1c3QgbG9nZ2VkIHRocm91Z2ggL2Rldi9tY2Vsb2cuCisgKgorICogVGhpcyBpcyBleGVjdXRlZCBpbiBzdGFuZGFyZCBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLwordm9pZCBtYWNoaW5lX2NoZWNrX3BvbGwoZW51bSBtY3BfZmxhZ3MgZmxhZ3MsIG1jZV9iYW5rc190ICpiKQoreworCXN0cnVjdCBtY2UgbTsKKwlpbnQgaTsKKworCW1jZV9zZXR1cCgmbSk7CisKKwlyZG1zcmwoTVNSX0lBMzJfTUNHX1NUQVRVUywgbS5tY2dzdGF0dXMpOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCWlmICghYmFua1tpXSB8fCAhdGVzdF9iaXQoaSwgKmIpKQorCQkJY29udGludWU7CisKKwkJbS5taXNjID0gMDsKKwkJbS5hZGRyID0gMDsKKwkJbS5iYW5rID0gaTsKKwkJbS50c2MgPSAwOworCisJCWJhcnJpZXIoKTsKKwkJcmRtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMgKyBpKjQsIG0uc3RhdHVzKTsKKwkJaWYgKCEobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1ZBTCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBVbmNvcnJlY3RlZCBldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyCisJCSAqIHdoZW4gaXQgaXMgZW5hYmxlZC4gQnV0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBkaXNhYmxlZCBsb2cKKwkJICogZXZlcnl0aGluZy4KKwkJICoKKwkJICogVEJEIGRvIHRoZSBzYW1lIGNoZWNrIGZvciBNQ0lfU1RBVFVTX0VOIGhlcmU/CisJCSAqLworCQlpZiAoKG0uc3RhdHVzICYgTUNJX1NUQVRVU19VQykgJiYgIShmbGFncyAmIE1DUF9VQykpCisJCQljb250aW51ZTsKKworCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX01JU0NWKQorCQkJcmRtc3JsKE1TUl9JQTMyX01DMF9NSVNDICsgaSo0LCBtLm1pc2MpOworCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX0FERFJWKQorCQkJcmRtc3JsKE1TUl9JQTMyX01DMF9BRERSICsgaSo0LCBtLmFkZHIpOworCisJCWlmICghKGZsYWdzICYgTUNQX1RJTUVTVEFNUCkpCisJCQltLnRzYyA9IDA7CisJCS8qCisJCSAqIERvbid0IGdldCB0aGUgSVAgaGVyZSBiZWNhdXNlIGl0J3MgdW5saWtlbHkgdG8KKwkJICogaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBhY3R1YWwgZXJyb3IgbG9jYXRpb24uCisJCSAqLworCisJCW1jZV9sb2coJm0pOworCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CisKKwkJLyoKKwkJICogQ2xlYXIgc3RhdGUgZm9yIHRoaXMgYmFuay4KKwkJICovCisJCXdybXNybChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMCk7CisJfQorCisJLyoKKwkgKiBEb24ndCBjbGVhciBNQ0dfU1RBVFVTIGhlcmUgYmVjYXVzZSBpdCdzIG9ubHkgZGVmaW5lZCBmb3IKKwkgKiBleGNlcHRpb25zLgorCSAqLworfQorCisvKgorICogVGhlIGFjdHVhbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuIFRoaXMgb25seSBoYW5kbGVzIHJlYWwKKyAqIGV4Y2VwdGlvbnMgd2hlbiBzb21ldGhpbmcgZ290IGNvcnJ1cHRlZCBjb21pbmcgaW4gdGhyb3VnaCBpbnQgMTguCisgKgorICogVGhpcyBpcyBleGVjdXRlZCBpbiBOTUkgY29udGV4dCBub3Qgc3ViamVjdCB0byBub3JtYWwgbG9ja2luZyBydWxlcy4gVGhpcworICogaW1wbGllcyB0aGF0IG1vc3Qga2VybmVsIHNlcnZpY2VzIGNhbm5vdCBiZSBzYWZlbHkgdXNlZC4gRG9uJ3QgZXZlbgorICogdGhpbmsgYWJvdXQgcHV0dGluZyBhIHByaW50ayBpbiB0aGVyZSEKICAqLwogdm9pZCBkb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewpAQCAtMTkwLDE3ICsyNzksMTggQEAKIAkgKiBlcnJvci4KIAkgKi8KIAlpbnQga2lsbF9pdCA9IDA7CisJREVDTEFSRV9CSVRNQVAodG9jbGVhciwgTUFYX05SX0JBTktTKTsKIAogCWF0b21pY19pbmMoJm1jZV9lbnRyeSk7CiAKLQlpZiAoKHJlZ3MKLQkgICAgICYmIG5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLAorCWlmIChub3RpZnlfZGllKERJRV9OTUksICJtYWNoaW5lIGNoZWNrIiwgcmVncywgZXJyb3JfY29kZSwKIAkJCSAgIDE4LCBTSUdLSUxMKSA9PSBOT1RJRllfU1RPUCkKLQkgICAgfHwgIWJhbmtzKQorCQlnb3RvIG91dDI7CisJaWYgKCFiYW5rcykKIAkJZ290byBvdXQyOwogCi0JbWVtc2V0KCZtLCAwLCBzaXplb2Yoc3RydWN0IG1jZSkpOwotCW0uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCW1jZV9zZXR1cCgmbSk7CisKIAlyZG1zcmwoTVNSX0lBMzJfTUNHX1NUQVRVUywgbS5tY2dzdGF0dXMpOwogCS8qIGlmIHRoZSByZXN0YXJ0IElQIGlzIG5vdCB2YWxpZCwgd2UncmUgZG9uZSBmb3IgKi8KIAlpZiAoIShtLm1jZ3N0YXR1cyAmIE1DR19TVEFUVVNfUklQVikpCkBAIC0yMTAsMTggKzMwMCwzMiBAQAogCWJhcnJpZXIoKTsKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7Ci0JCWlmIChpIDwgTlJfU1lTRlNfQkFOS1MgJiYgIWJhbmtbaV0pCisJCV9fY2xlYXJfYml0KGksIHRvY2xlYXIpOworCQlpZiAoIWJhbmtbaV0pCiAJCQljb250aW51ZTsKIAogCQltLm1pc2MgPSAwOwogCQltLmFkZHIgPSAwOwogCQltLmJhbmsgPSBpOwotCQltLnRzYyA9IDA7CiAKIAkJcmRtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMgKyBpKjQsIG0uc3RhdHVzKTsKIAkJaWYgKChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVkFMKSA9PSAwKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogTm9uIHVuY29ycmVjdGVkIGVycm9ycyBhcmUgaGFuZGxlZCBieSBtYWNoaW5lX2NoZWNrX3BvbGwKKwkJICogTGVhdmUgdGhlbSBhbG9uZS4KKwkJICovCisJCWlmICgobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2V0IHRhaW50IGV2ZW4gd2hlbiBtYWNoaW5lIGNoZWNrIHdhcyBub3QgZW5hYmxlZC4KKwkJICovCisJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKKworCQlfX3NldF9iaXQoaSwgdG9jbGVhcik7CisKIAkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19FTikgewogCQkJLyogaWYgUENDIHdhcyBzZXQsIHRoZXJlJ3Mgbm8gd2F5IG91dCAqLwogCQkJbm9fd2F5X291dCB8PSAhIShtLnN0YXR1cyAmIE1DSV9TVEFUVVNfUENDKTsKQEAgLTIzNSw2ICszMzksMTIgQEAKIAkJCQkJbm9fd2F5X291dCA9IDE7CiAJCQkJa2lsbF9pdCA9IDE7CiAJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTWFjaGluZSBjaGVjayBldmVudCB3YXMgbm90IGVuYWJsZWQuIENsZWFyLCBidXQKKwkJCSAqIGlnbm9yZS4KKwkJCSAqLworCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX01JU0NWKQpAQCAtMjQzLDEwICszNTMsNyBAQAogCQkJcmRtc3JsKE1TUl9JQTMyX01DMF9BRERSICsgaSo0LCBtLmFkZHIpOwogCiAJCW1jZV9nZXRfcmlwKCZtLCByZWdzKTsKLQkJaWYgKGVycm9yX2NvZGUgPj0gMCkKLQkJCXJkdHNjbGwobS50c2MpOwotCQlpZiAoZXJyb3JfY29kZSAhPSAtMikKLQkJCW1jZV9sb2coJm0pOworCQltY2VfbG9nKCZtKTsKIAogCQkvKiBEaWQgdGhpcyBiYW5rIGNhdXNlIHRoZSBleGNlcHRpb24/ICovCiAJCS8qIEFzc3VtZSB0aGF0IHRoZSBiYW5rIHdpdGggdW5jb3JyZWN0YWJsZSBlcnJvcnMgZGlkIGl0LApAQCAtMjU1LDE0ICszNjIsOCBAQAogCQkJcGFuaWNtID0gbTsKIAkJCXBhbmljbV9mb3VuZCA9IDE7CiAJCX0KLQotCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CiAJfQogCi0JLyogTmV2ZXIgZG8gYW55dGhpbmcgZmluYWwgaW4gdGhlIHBvbGxpbmcgdGltZXIgKi8KLQlpZiAoIXJlZ3MpCi0JCWdvdG8gb3V0OwotCiAJLyogSWYgd2UgZGlkbid0IGZpbmQgYW4gdW5jb3JyZWN0YWJsZSBlcnJvciwgcGljawogCSAgIHRoZSBsYXN0IG9uZSAoc2hvdWxkbid0IGhhcHBlbiwganVzdCBiZWluZyBzYWZlKS4gKi8KIAlpZiAoIXBhbmljbV9mb3VuZCkKQEAgLTMwOSwxMCArNDEwLDExIEBACiAJLyogbm90aWZ5IHVzZXJzcGFjZSBBU0FQICovCiAJc2V0X3RocmVhZF9mbGFnKFRJRl9NQ0VfTk9USUZZKTsKIAotIG91dDoKIAkvKiB0aGUgbGFzdCB0aGluZyB3ZSBkbyBpcyBjbGVhciBzdGF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQotCQl3cm1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDApOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCB0b2NsZWFyKSkKKwkJCXdybXNybChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMCk7CisJfQogCXdybXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCAwKTsKICBvdXQyOgogCWF0b21pY19kZWMoJm1jZV9lbnRyeSk7CkBAIC0zMzIsMTUgKzQzNCwxMyBAQAogICogYW5kIGhpc3RvcmljYWxseSBoYXMgYmVlbiB0aGUgcmVnaXN0ZXIgdmFsdWUgb2YgdGhlCiAgKiBNU1JfSUEzMl9USEVSTUFMX1NUQVRVUyAoSW50ZWwpIG1zci4KICAqLwotdm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KHVuc2lnbmVkIGludCBjcHUsIF9fdTY0IHN0YXR1cykKK3ZvaWQgbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChfX3U2NCBzdGF0dXMpCiB7CiAJc3RydWN0IG1jZSBtOwogCi0JbWVtc2V0KCZtLCAwLCBzaXplb2YobSkpOwotCW0uY3B1ID0gY3B1OworCW1jZV9zZXR1cCgmbSk7CiAJbS5iYW5rID0gTUNFX1RIRVJNQUxfQkFOSzsKIAltLnN0YXR1cyA9IHN0YXR1czsKLQlyZHRzY2xsKG0udHNjKTsKIAltY2VfbG9nKCZtKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfWDg2X01DRV9JTlRFTCAqLwpAQCAtMzUzLDE4ICs0NTMsMTggQEAKIAogc3RhdGljIGludCBjaGVja19pbnRlcnZhbCA9IDUgKiA2MDsgLyogNSBtaW51dGVzICovCiBzdGF0aWMgaW50IG5leHRfaW50ZXJ2YWw7IC8qIGluIGppZmZpZXMgKi8KLXN0YXRpYyB2b2lkIG1jaGVja190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKG1jaGVja193b3JrLCBtY2hlY2tfdGltZXIpOworc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aW1lcl9saXN0LCBtY2VfdGltZXIpOwogCi1zdGF0aWMgdm9pZCBtY2hlY2tfY2hlY2tfY3B1KHZvaWQgKmluZm8pCitzdGF0aWMgdm9pZCBtY2hlY2tfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogeworCXN0cnVjdCB0aW1lcl9saXN0ICp0ID0gJnBlcl9jcHUobWNlX3RpbWVyLCBkYXRhKTsKKworCVdBUk5fT04oc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGRhdGEpOworCiAJaWYgKG1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQotCQlkb19tYWNoaW5lX2NoZWNrKE5VTEwsIDApOwotfQotCi1zdGF0aWMgdm9pZCBtY2hlY2tfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCW9uX2VhY2hfY3B1KG1jaGVja19jaGVja19jcHUsIE5VTEwsIDEpOworCQltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwKKwkJCQkmX19nZXRfY3B1X3ZhcihtY2VfcG9sbF9iYW5rcykpOwogCiAJLyoKIAkgKiBBbGVydCB1c2Vyc3BhY2UgaWYgbmVlZGVkLiAgSWYgd2UgbG9nZ2VkIGFuIE1DRSwgcmVkdWNlIHRoZQpAQCAtMzc3LDMxICs0NzcsNDEgQEAKIAkJCQkoaW50KXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY2hlY2tfaW50ZXJ2YWwqSFopKTsKIAl9CiAKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jaGVja193b3JrLCBuZXh0X2ludGVydmFsKTsKKwl0LT5leHBpcmVzID0gamlmZmllcyArIG5leHRfaW50ZXJ2YWw7CisJYWRkX3RpbWVyKHQpOwogfQogCitzdGF0aWMgdm9pZCBtY2VfZG9fdHJpZ2dlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJY2FsbF91c2VybW9kZWhlbHBlcih0cmlnZ2VyLCB0cmlnZ2VyX2FyZ3YsIE5VTEwsIFVNSF9OT19XQUlUKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhtY2VfdHJpZ2dlcl93b3JrLCBtY2VfZG9fdHJpZ2dlcik7CisKIC8qCi0gKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LiAgVGhpcyBpcyB3aGVyZSB3ZSBkbwotICogYW55dGhpbmcgd2UgbmVlZCB0byBhbGVydCB1c2Vyc3BhY2UgYWJvdXQgbmV3IE1DRXMuICBUaGlzIGlzIGNhbGxlZAotICogZGlyZWN0bHkgZnJvbSB0aGUgcG9sbGVyIGFuZCBhbHNvIGZyb20gZW50cnkuUyBhbmQgaWRsZSwgdGhhbmtzIHRvCi0gKiBUSUZfTUNFX05PVElGWS4KKyAqIE5vdGlmeSB0aGUgdXNlcihzKSBhYm91dCBuZXcgbWFjaGluZSBjaGVjayBldmVudHMuCisgKiBDYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIGJ1dCBub3QgZnJvbSBtYWNoaW5lIGNoZWNrL05NSQorICogY29udGV4dC4KICAqLwogaW50IG1jZV9ub3RpZnlfdXNlcih2b2lkKQogeworCS8qIE5vdCBtb3JlIHRoYW4gdHdvIG1lc3NhZ2VzIGV2ZXJ5IG1pbnV0ZSAqLworCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJhdGVsaW1pdCwgNjAqSFosIDIpOworCiAJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX01DRV9OT1RJRlkpOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJm5vdGlmeV91c2VyKSkgewotCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3ByaW50OwotCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7Ci0KIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtY2Vfd2FpdCk7Ci0JCWlmICh0cmlnZ2VyWzBdKQotCQkJY2FsbF91c2VybW9kZWhlbHBlcih0cmlnZ2VyLCB0cmlnZ2VyX2FyZ3YsIE5VTEwsCi0JCQkJCQlVTUhfTk9fV0FJVCk7CiAKLQkJaWYgKHRpbWVfYWZ0ZXJfZXEobm93LCBsYXN0X3ByaW50ICsgKGNoZWNrX2ludGVydmFsKkhaKSkpIHsKLQkJCWxhc3RfcHJpbnQgPSBub3c7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIHJpc2sgb2YgbWlzc2luZyBub3RpZmljYXRpb25zIGJlY2F1c2UKKwkJICogd29ya19wZW5kaW5nIGlzIGFsd2F5cyBjbGVhcmVkIGJlZm9yZSB0aGUgZnVuY3Rpb24gaXMKKwkJICogZXhlY3V0ZWQuCisJCSAqLworCQlpZiAodHJpZ2dlclswXSAmJiAhd29ya19wZW5kaW5nKCZtY2VfdHJpZ2dlcl93b3JrKSkKKwkJCXNjaGVkdWxlX3dvcmsoJm1jZV90cmlnZ2VyX3dvcmspOworCisJCWlmIChfX3JhdGVsaW1pdCgmcmF0ZWxpbWl0KSkKIAkJCXByaW50ayhLRVJOX0lORk8gIk1hY2hpbmUgY2hlY2sgZXZlbnRzIGxvZ2dlZFxuIik7Ci0JCX0KIAogCQlyZXR1cm4gMTsKIAl9CkBAIC00MjUsNjMgKzUzNSw3OCBAQAogCiBzdGF0aWMgX19pbml0IGludCBwZXJpb2RpY19tY2hlY2tfaW5pdCh2b2lkKQogewotCW5leHRfaW50ZXJ2YWwgPSBjaGVja19pbnRlcnZhbCAqIEhaOwotCWlmIChuZXh0X2ludGVydmFsKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jaGVja193b3JrLAotCQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUobmV4dF9pbnRlcnZhbCkpOwotCWlkbGVfbm90aWZpZXJfcmVnaXN0ZXIoJm1jZV9pZGxlX25vdGlmaWVyKTsKLQlyZXR1cm4gMDsKKyAgICAgICBpZGxlX25vdGlmaWVyX3JlZ2lzdGVyKCZtY2VfaWRsZV9ub3RpZmllcik7CisgICAgICAgcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKHBlcmlvZGljX21jaGVja19pbml0KTsKIAotCiAvKgogICogSW5pdGlhbGl6ZSBNYWNoaW5lIENoZWNrcyBmb3IgYSBDUFUuCiAgKi8KLXN0YXRpYyB2b2lkIG1jZV9pbml0KHZvaWQgKmR1bW15KQorc3RhdGljIGludCBtY2VfY2FwX2luaXQodm9pZCkKIHsKIAl1NjQgY2FwOwotCWludCBpOworCXVuc2lnbmVkIGI7CiAKIAlyZG1zcmwoTVNSX0lBMzJfTUNHX0NBUCwgY2FwKTsKLQliYW5rcyA9IGNhcCAmIDB4ZmY7Ci0JaWYgKGJhbmtzID4gTUNFX0VYVEVOREVEX0JBTkspIHsKLQkJYmFua3MgPSBNQ0VfRVhURU5ERURfQkFOSzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTUNFOiB3YXJuaW5nOiB1c2luZyBvbmx5ICVkIGJhbmtzXG4iLAotCQkgICAgICAgTUNFX0VYVEVOREVEX0JBTkspOworCWIgPSBjYXAgJiAweGZmOworCWlmIChiID4gTUFYX05SX0JBTktTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJNQ0U6IFVzaW5nIG9ubHkgJXUgbWFjaGluZSBjaGVjayBiYW5rcyBvdXQgb2YgJXVcbiIsCisJCQlNQVhfTlJfQkFOS1MsIGIpOworCQliID0gTUFYX05SX0JBTktTOwogCX0KKworCS8qIERvbid0IHN1cHBvcnQgYXN5bW1ldHJpYyBjb25maWd1cmF0aW9ucyB0b2RheSAqLworCVdBUk5fT04oYmFua3MgIT0gMCAmJiBiICE9IGJhbmtzKTsKKwliYW5rcyA9IGI7CisJaWYgKCFiYW5rKSB7CisJCWJhbmsgPSBrbWFsbG9jKGJhbmtzICogc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCQlpZiAoIWJhbmspCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0KGJhbmssIDB4ZmYsIGJhbmtzICogc2l6ZW9mKHU2NCkpOworCX0KKwogCS8qIFVzZSBhY2N1cmF0ZSBSSVAgcmVwb3J0aW5nIGlmIGF2YWlsYWJsZS4gKi8KIAlpZiAoKGNhcCAmICgxPDw5KSkgJiYgKChjYXAgPj4gMTYpICYgMHhmZikgPj0gOSkKIAkJcmlwX21zciA9IE1TUl9JQTMyX01DR19FSVA7CiAKLQkvKiBMb2cgdGhlIG1hY2hpbmUgY2hlY2tzIGxlZnQgb3ZlciBmcm9tIHRoZSBwcmV2aW91cyByZXNldC4KLQkgICBUaGlzIGFsc28gY2xlYXJzIGFsbCByZWdpc3RlcnMgKi8KLQlkb19tYWNoaW5lX2NoZWNrKE5VTEwsIG1jZV9ib290bG9nID8gLTEgOiAtMik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1jZV9pbml0KHZvaWQgKmR1bW15KQoreworCXU2NCBjYXA7CisJaW50IGk7CisJbWNlX2JhbmtzX3QgYWxsX2JhbmtzOworCisJLyoKKwkgKiBMb2cgdGhlIG1hY2hpbmUgY2hlY2tzIGxlZnQgb3ZlciBmcm9tIHRoZSBwcmV2aW91cyByZXNldC4KKwkgKi8KKwliaXRtYXBfZmlsbChhbGxfYmFua3MsIE1BWF9OUl9CQU5LUyk7CisJbWFjaGluZV9jaGVja19wb2xsKE1DUF9VQywgJmFsbF9iYW5rcyk7CiAKIAlzZXRfaW5fY3I0KFg4Nl9DUjRfTUNFKTsKIAorCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwogCWlmIChjYXAgJiBNQ0dfQ1RMX1ApCiAJCXdybXNyKE1TUl9JQTMyX01DR19DVEwsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwogCiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKLQkJaWYgKGkgPCBOUl9TWVNGU19CQU5LUykKLQkJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMKzQqaSwgYmFua1tpXSk7Ci0JCWVsc2UKLQkJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMKzQqaSwgfjBVTCk7Ci0KKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwrNCppLCBiYW5rW2ldKTsKIAkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKIAl9CiB9CiAKIC8qIEFkZCBwZXIgQ1BVIHNwZWNpZmljIHdvcmthcm91bmRzIGhlcmUgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBtY2VfY3B1X3F1aXJrcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgdm9pZCBtY2VfY3B1X3F1aXJrcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJLyogVGhpcyBzaG91bGQgYmUgZGlzYWJsZWQgYnkgdGhlIEJJT1MsIGJ1dCBpc24ndCBhbHdheXMgKi8KIAlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgewotCQlpZihjLT54ODYgPT0gMTUpCisJCWlmIChjLT54ODYgPT0gMTUgJiYgYmFua3MgPiA0KQogCQkJLyogZGlzYWJsZSBHQVJUIFRCTCB3YWxrIGVycm9yIHJlcG9ydGluZywgd2hpY2ggdHJpcHMgb2ZmCiAJCQkgICBpbmNvcnJlY3RseSB3aXRoIHRoZSBJT01NVSAmIDN3YXJlICYgQ2VyYmVydXMuICovCi0JCQljbGVhcl9iaXQoMTAsICZiYW5rWzRdKTsKKwkJCWNsZWFyX2JpdCgxMCwgKHVuc2lnbmVkIGxvbmcgKikmYmFua1s0XSk7CiAJCWlmKGMtPng4NiA8PSAxNyAmJiBtY2VfYm9vdGxvZyA8IDApCiAJCQkvKiBMb3RzIG9mIGJyb2tlbiBCSU9TIGFyb3VuZCB0aGF0IGRvbid0IGNsZWFyIHRoZW0KIAkJCSAgIGJ5IGRlZmF1bHQgYW5kIGxlYXZlIGNyYXAgaW4gdGhlcmUuIERvbid0IGxvZy4gKi8KQEAgLTUwNCwyMCArNjI5LDM4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtY2VfaW5pdF90aW1lcih2b2lkKQoreworCXN0cnVjdCB0aW1lcl9saXN0ICp0ID0gJl9fZ2V0X2NwdV92YXIobWNlX3RpbWVyKTsKKworCS8qIGRhdGEgcmFjZSBoYXJtbGVzcyBiZWNhdXNlIGV2ZXJ5b25lIHNldHMgdG8gdGhlIHNhbWUgdmFsdWUgKi8KKwlpZiAoIW5leHRfaW50ZXJ2YWwpCisJCW5leHRfaW50ZXJ2YWwgPSBjaGVja19pbnRlcnZhbCAqIEhaOworCWlmICghbmV4dF9pbnRlcnZhbCkKKwkJcmV0dXJuOworCXNldHVwX3RpbWVyKHQsIG1jaGVja190aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0LT5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgbmV4dF9pbnRlcnZhbCk7CisJYWRkX3RpbWVyKHQpOworfQorCiAvKgogICogQ2FsbGVkIGZvciBlYWNoIGJvb3RlZCBDUFUgdG8gc2V0IHVwIG1hY2hpbmUgY2hlY2tzLgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0IG9mZi4KICAqLwogdm9pZCBfX2NwdWluaXQgbWNoZWNrX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCW1jZV9jcHVfcXVpcmtzKGMpOwotCi0JaWYgKG1jZV9kb250X2luaXQgfHwKLQkgICAgIW1jZV9hdmFpbGFibGUoYykpCisJaWYgKCFtY2VfYXZhaWxhYmxlKGMpKQogCQlyZXR1cm47CiAKKwlpZiAobWNlX2NhcF9pbml0KCkgPCAwKSB7CisJCW1jZV9kb250X2luaXQgPSAxOworCQlyZXR1cm47CisJfQorCW1jZV9jcHVfcXVpcmtzKGMpOworCiAJbWNlX2luaXQoTlVMTCk7CiAJbWNlX2NwdV9mZWF0dXJlcyhjKTsKKwltY2VfaW5pdF90aW1lcigpOwogfQogCiAvKgpAQCAtNTczLDcgKzcxNiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqY3B1X3RzYzsKIAlzdGF0aWMgREVGSU5FX01VVEVYKG1jZV9yZWFkX211dGV4KTsKLQl1bnNpZ25lZCBuZXh0OworCXVuc2lnbmVkIHByZXYsIG5leHQ7CiAJY2hhciBfX3VzZXIgKmJ1ZiA9IHVidWY7CiAJaW50IGksIGVycjsKIApAQCAtNTkyLDI1ICs3MzUsMzIgQEAKIAl9CiAKIAllcnIgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBuZXh0OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CisJcHJldiA9IDA7CisJZG8geworCQlmb3IgKGkgPSBwcmV2OyBpIDwgbmV4dDsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKIAotCQl3aGlsZSAoIW1jZWxvZy5lbnRyeVtpXS5maW5pc2hlZCkgewotCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc3RhcnQgKyAyKSkgewotCQkJCW1lbXNldChtY2Vsb2cuZW50cnkgKyBpLDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7Ci0JCQkJZ290byB0aW1lb3V0OworCQkJd2hpbGUgKCFtY2Vsb2cuZW50cnlbaV0uZmluaXNoZWQpIHsKKwkJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzdGFydCArIDIpKSB7CisJCQkJCW1lbXNldChtY2Vsb2cuZW50cnkgKyBpLCAwLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKKwkJCQkJZ290byB0aW1lb3V0OworCQkJCX0KKwkJCQljcHVfcmVsYXgoKTsKIAkJCX0KLQkJCWNwdV9yZWxheCgpOworCQkJc21wX3JtYigpOworCQkJZXJyIHw9IGNvcHlfdG9fdXNlcihidWYsIG1jZWxvZy5lbnRyeSArIGksCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1jZSkpOworCQkJYnVmICs9IHNpemVvZihzdHJ1Y3QgbWNlKTsKK3RpbWVvdXQ6CisJCQk7CiAJCX0KLQkJc21wX3JtYigpOwotCQllcnIgfD0gY29weV90b191c2VyKGJ1ZiwgbWNlbG9nLmVudHJ5ICsgaSwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQkJYnVmICs9IHNpemVvZihzdHJ1Y3QgbWNlKTsKLSB0aW1lb3V0OgotCQk7Ci0JfQogCi0JbWVtc2V0KG1jZWxvZy5lbnRyeSwgMCwgbmV4dCAqIHNpemVvZihzdHJ1Y3QgbWNlKSk7Ci0JbWNlbG9nLm5leHQgPSAwOworCQltZW1zZXQobWNlbG9nLmVudHJ5ICsgcHJldiwgMCwKKwkJICAgICAgIChuZXh0IC0gcHJldikgKiBzaXplb2Yoc3RydWN0IG1jZSkpOworCQlwcmV2ID0gbmV4dDsKKwkJbmV4dCA9IGNtcHhjaGcoJm1jZWxvZy5uZXh0LCBwcmV2LCAwKTsKKwl9IHdoaWxlIChuZXh0ICE9IHByZXYpOwogCiAJc3luY2hyb25pemVfc2NoZWQoKTsKIApAQCAtNjgwLDIwICs4MzAsNiBAQAogCSZtY2VfY2hyZGV2X29wcywKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9sZF9jcjQgX19pbml0ZGF0YTsKLQotdm9pZCBfX2luaXQgc3RvcF9tY2Uodm9pZCkKLXsKLQlvbGRfY3I0ID0gcmVhZF9jcjQoKTsKLQljbGVhcl9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCi12b2lkIF9faW5pdCByZXN0YXJ0X21jZSh2b2lkKQotewotCWlmIChvbGRfY3I0ICYgWDg2X0NSNF9NQ0UpCi0JCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCiAvKgogICogT2xkIHN0eWxlIGJvb3Qgb3B0aW9ucyBwYXJzaW5nLiBPbmx5IGZvciBjb21wYXRpYmlsaXR5LgogICovCkBAIC03MDMsOCArODM5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogbWNlPW9mZiBkaXNhYmxlcyBtYWNoaW5lIGNoZWNrLiBOb3RlIHlvdSBjYW4gcmUtZW5hYmxlIGl0IGxhdGVyCi0gICB1c2luZyBzeXNmcy4KKy8qIG1jZT1vZmYgZGlzYWJsZXMgbWFjaGluZSBjaGVjay4KICAgIG1jZT1UT0xFUkFOQ0VMRVZFTCAobnVtYmVyLCBzZWUgYWJvdmUpCiAgICBtY2U9Ym9vdGxvZyBMb2cgTUNFcyBmcm9tIGJlZm9yZSBib290aW5nLiBEaXNhYmxlZCBieSBkZWZhdWx0IG9uIEFNRC4KICAgIG1jZT1ub2Jvb3Rsb2cgRG9uJ3QgbG9nIE1DRXMgZnJvbSBiZWZvcmUgYm9vdGluZy4gKi8KQEAgLTcyOCw2ICs4NjMsMjkgQEAKICAqIFN5c2ZzIHN1cHBvcnQKICAqLwogCisvKgorICogRGlzYWJsZSBtYWNoaW5lIGNoZWNrcyBvbiBzdXNwZW5kIGFuZCBzaHV0ZG93bi4gV2UgY2FuJ3QgcmVhbGx5IGhhbmRsZQorICogdGhlbSBsYXRlci4KKyAqLworc3RhdGljIGludCBtY2VfZGlzYWJsZSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMICsgaSo0LCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY2Vfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIG1jZV9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgbWNlX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG1jZV9kaXNhYmxlKCk7Cit9CisKIC8qIE9uIHJlc3VtZSBjbGVhciBhbGwgTUNFIHN0YXRlLiBEb24ndCB3YW50IHRvIHNlZSBsZWZ0b3ZlcnMgZnJvbSB0aGUgQklPUy4KICAgIE9ubHkgb25lIENQVSBpcyBhY3RpdmUgYXQgdGhpcyB0aW1lLCB0aGUgb3RoZXJzIGdldCByZWFkZGVkIGxhdGVyIHVzaW5nCiAgICBDUFUgaG90cGx1Zy4gKi8KQEAgLTczOCwyMCArODk2LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1jZV9jcHVfcmVzdGFydCh2b2lkICpkYXRhKQoreworCWRlbF90aW1lcl9zeW5jKCZfX2dldF9jcHVfdmFyKG1jZV90aW1lcikpOworCWlmIChtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKKwkJbWNlX2luaXQoTlVMTCk7CisJbWNlX2luaXRfdGltZXIoKTsKK30KKwogLyogUmVpbml0IE1DRXMgYWZ0ZXIgdXNlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgKi8KIHN0YXRpYyB2b2lkIG1jZV9yZXN0YXJ0KHZvaWQpCiB7Ci0JaWYgKG5leHRfaW50ZXJ2YWwpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1jaGVja193b3JrKTsKLQkvKiBUaW1lciByYWNlIGlzIGhhcm1sZXNzIGhlcmUgKi8KLQlvbl9lYWNoX2NwdShtY2VfaW5pdCwgTlVMTCwgMSk7CiAJbmV4dF9pbnRlcnZhbCA9IGNoZWNrX2ludGVydmFsICogSFo7Ci0JaWYgKG5leHRfaW50ZXJ2YWwpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmssCi0JCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShuZXh0X2ludGVydmFsKSk7CisJb25fZWFjaF9jcHUobWNlX2NwdV9yZXN0YXJ0LCBOVUxMLCAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbWNlX3N5c2NsYXNzID0geworCS5zdXNwZW5kID0gbWNlX3N1c3BlbmQsCisJLnNodXRkb3duID0gbWNlX3NodXRkb3duLAogCS5yZXN1bWUgPSBtY2VfcmVzdW1lLAogCS5uYW1lID0gIm1hY2hpbmVjaGVjayIsCiB9OwpAQCAtNzc4LDE2ICs5NDAsMjYgQEAKIAl9CQkJCQkJCQlcCiAJc3RhdGljIFNZU0RFVl9BVFRSKG5hbWUsIDA2NDQsIHNob3dfICMjIG5hbWUsIHNldF8gIyMgbmFtZSk7CiAKLS8qCi0gKiBUQkQgc2hvdWxkIGdlbmVyYXRlIHRoZXNlIGR5bmFtaWNhbGx5IGJhc2VkIG9uIG51bWJlciBvZiBhdmFpbGFibGUgYmFua3MuCi0gKiBIYXZlIG9ubHkgNiBjb250b2wgYmFua3MgaW4gL3N5c2ZzIHVudGlsIHRoZW4uCi0gKi8KLUFDQ0VTU09SKGJhbmswY3RsLGJhbmtbMF0sbWNlX3Jlc3RhcnQoKSkKLUFDQ0VTU09SKGJhbmsxY3RsLGJhbmtbMV0sbWNlX3Jlc3RhcnQoKSkKLUFDQ0VTU09SKGJhbmsyY3RsLGJhbmtbMl0sbWNlX3Jlc3RhcnQoKSkKLUFDQ0VTU09SKGJhbmszY3RsLGJhbmtbM10sbWNlX3Jlc3RhcnQoKSkKLUFDQ0VTU09SKGJhbms0Y3RsLGJhbmtbNF0sbWNlX3Jlc3RhcnQoKSkKLUFDQ0VTU09SKGJhbms1Y3RsLGJhbmtbNV0sbWNlX3Jlc3RhcnQoKSkKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYmFua19hdHRyczsKKworc3RhdGljIHNzaXplX3Qgc2hvd19iYW5rKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJdTY0IGIgPSBiYW5rW2F0dHIgLSBiYW5rX2F0dHJzXTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx4XG4iLCBiKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2Jhbmsoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6KQoreworCWNoYXIgKmVuZDsKKwl1NjQgbmV3ID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmVuZCwgMCk7CisJaWYgKGVuZCA9PSBidWYpCisJCXJldHVybiAtRUlOVkFMOworCWJhbmtbYXR0ciAtIGJhbmtfYXR0cnNdID0gbmV3OworCW1jZV9yZXN0YXJ0KCk7CisJcmV0dXJuIGVuZC1idWY7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdHJpZ2dlcihzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY2hhciAqYnVmKQpAQCAtODE0LDggKzk4Niw2IEBACiBzdGF0aWMgU1lTREVWX0lOVF9BVFRSKHRvbGVyYW50LCAwNjQ0LCB0b2xlcmFudCk7CiBBQ0NFU1NPUihjaGVja19pbnRlcnZhbCxjaGVja19pbnRlcnZhbCxtY2VfcmVzdGFydCgpKQogc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICptY2VfYXR0cmlidXRlc1tdID0gewotCSZhdHRyX2JhbmswY3RsLCAmYXR0cl9iYW5rMWN0bCwgJmF0dHJfYmFuazJjdGwsCi0JJmF0dHJfYmFuazNjdGwsICZhdHRyX2Jhbms0Y3RsLCAmYXR0cl9iYW5rNWN0bCwKIAkmYXR0cl90b2xlcmFudC5hdHRyLCAmYXR0cl9jaGVja19pbnRlcnZhbCwgJmF0dHJfdHJpZ2dlciwKIAlOVUxMCiB9OwpAQCAtODQ1LDExICsxMDE1LDIyIEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCX0KKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQllcnIgPSBzeXNkZXZfY3JlYXRlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KSwKKwkJCQkJJmJhbmtfYXR0cnNbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjI7CisJfQogCWNwdV9zZXQoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKIAogCXJldHVybiAwOworZXJyb3IyOgorCXdoaWxlICgtLWkgPj0gMCkgeworCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KSwKKwkJCQkJJmJhbmtfYXR0cnNbaV0pOworCX0KIGVycm9yOgotCXdoaWxlIChpLS0pIHsKKwl3aGlsZSAoLS1pID49IDApIHsKIAkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSwKIAkJCQkgICBtY2VfYXR0cmlidXRlc1tpXSk7CiAJfQpAQCAtODY4LDE1ICsxMDQ5LDQ2IEBACiAJZm9yIChpID0gMDsgbWNlX2F0dHJpYnV0ZXNbaV07IGkrKykKIAkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSwKIAkJCW1jZV9hdHRyaWJ1dGVzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSksCisJCQkmYmFua19hdHRyc1tpXSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKIAljcHVfY2xlYXIoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKIH0KIAorLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBtYWNoaW5lIGNoZWNrcyBvbiBvZmZsaW5lZCBDUFVzLiAqLworc3RhdGljIHZvaWQgbWNlX2Rpc2FibGVfY3B1KHZvaWQgKmgpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhY3Rpb24gPSAqKHVuc2lnbmVkIGxvbmcgKiloOworCisJaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKKwkJcmV0dXJuOworCWlmICghKGFjdGlvbiAmIENQVV9UQVNLU19GUk9aRU4pKQorCQljbWNpX2NsZWFyKCk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMICsgaSo0LCAwKTsKK30KKworc3RhdGljIHZvaWQgbWNlX3JlZW5hYmxlX2NwdSh2b2lkICpoKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYWN0aW9uID0gKih1bnNpZ25lZCBsb25nICopaDsKKworCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJCXJldHVybjsKKwlpZiAoIShhY3Rpb24gJiBDUFVfVEFTS1NfRlJPWkVOKSkKKwkJY21jaV9yZWVuYWJsZSgpOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCArIGkqNCwgYmFua1tpXSk7Cit9CisKIC8qIEdldCBub3RpZmllZCB3aGVuIGEgY3B1IGNvbWVzIG9uL29mZi4gQmUgaG90cGx1ZyBmcmllbmRseS4gKi8KIHN0YXRpYyBpbnQgX19jcHVpbml0IG1jZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmcGVyX2NwdShtY2VfdGltZXIsIGNwdSk7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKQEAgLTg5MSw2ICsxMTAzLDIxIEBACiAJCQl0aHJlc2hvbGRfY3B1X2NhbGxiYWNrKGFjdGlvbiwgY3B1KTsKIAkJbWNlX3JlbW92ZV9kZXZpY2UoY3B1KTsKIAkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCWRlbF90aW1lcl9zeW5jKHQpOworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBtY2VfZGlzYWJsZV9jcHUsICZhY3Rpb24sIDEpOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CisJCXQtPmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBuZXh0X2ludGVydmFsKTsKKwkJYWRkX3RpbWVyX29uKHQsIGNwdSk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1jZV9yZWVuYWJsZV9jcHUsICZhY3Rpb24sIDEpOworCQlicmVhazsKKwljYXNlIENQVV9QT1NUX0RFQUQ6CisJCS8qIGludGVudGlvbmFsbHkgaWdub3JpbmcgZnJvemVuIGhlcmUgKi8KKwkJY21jaV9yZWRpc2NvdmVyKGNwdSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQpAQCAtODk5LDYgKzExMjYsMzQgQEAKIAkubm90aWZpZXJfY2FsbCA9IG1jZV9jcHVfY2FsbGJhY2ssCiB9OwogCitzdGF0aWMgX19pbml0IGludCBtY2VfaW5pdF9iYW5rcyh2b2lkKQoreworCWludCBpOworCisJYmFua19hdHRycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKSAqIGJhbmtzLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghYmFua19hdHRycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSA9ICZiYW5rX2F0dHJzW2ldOworCQlhLT5hdHRyLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImJhbmslZCIsIGkpOworCQlpZiAoIWEtPmF0dHIubmFtZSkKKwkJCWdvdG8gbm9tZW07CisJCWEtPmF0dHIubW9kZSA9IDA2NDQ7CisJCWEtPnNob3cgPSBzaG93X2Jhbms7CisJCWEtPnN0b3JlID0gc2V0X2Jhbms7CisJfQorCXJldHVybiAwOworCitub21lbToKKwl3aGlsZSAoLS1pID49IDApCisJCWtmcmVlKGJhbmtfYXR0cnNbaV0uYXR0ci5uYW1lKTsKKwlrZnJlZShiYW5rX2F0dHJzKTsKKwliYW5rX2F0dHJzID0gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RhdGljIF9faW5pdCBpbnQgbWNlX2luaXRfZGV2aWNlKHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTkwNiw2ICsxMTYxLDExIEBACiAKIAlpZiAoIW1jZV9hdmFpbGFibGUoJmJvb3RfY3B1X2RhdGEpKQogCQlyZXR1cm4gLUVJTzsKKworCWVyciA9IG1jZV9pbml0X2JhbmtzKCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbWNlX3N5c2NsYXNzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCmluZGV4IDk4MTc1MDYuLjdkMDFiZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKQEAgLTc5LDYgKzc5LDggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXIsIGJhbmtfbWFwKTsJLyogc2VlIHdoaWNoIGJhbmtzIGFyZSBvbiAqLwogCitzdGF0aWMgdm9pZCBhbWRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKTsKKwogLyoKICAqIENQVSBJbml0aWFsaXphdGlvbgogICovCkBAIC05MCw3ICs5Miw4IEBACiB9OwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvcnJlY3QgY3B1IGFmZmluaXR5ICovCi1zdGF0aWMgbG9uZyB0aHJlc2hvbGRfcmVzdGFydF9iYW5rKHZvaWQgKl90cikKKy8qIENhbGxlZCB2aWEgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCkgKi8KK3N0YXRpYyB2b2lkIHRocmVzaG9sZF9yZXN0YXJ0X2Jhbmsodm9pZCAqX3RyKQogewogCXN0cnVjdCB0aHJlc2hfcmVzdGFydCAqdHIgPSBfdHI7CiAJdTMyIG1jaV9taXNjX2hpLCBtY2lfbWlzY19sbzsKQEAgLTExNyw3ICsxMjAsNiBAQAogCiAJbWNpX21pc2NfaGkgfD0gTUFTS19DT1VOVF9FTl9ISTsKIAl3cm1zcih0ci0+Yi0+YWRkcmVzcywgbWNpX21pc2NfbG8sIG1jaV9taXNjX2hpKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogY3B1IGluaXQgZW50cnkgcG9pbnQsIGNhbGxlZCBmcm9tIG1jZS5jIHdpdGggcHJlZW1wdCBvZmYgKi8KQEAgLTE3NCw2ICsxNzYsOCBAQAogCQkJdHIucmVzZXQgPSAwOwogCQkJdHIub2xkX2xpbWl0ID0gMDsKIAkJCXRocmVzaG9sZF9yZXN0YXJ0X2JhbmsoJnRyKTsKKworCQkJbWNlX3RocmVzaG9sZF92ZWN0b3IgPSBhbWRfdGhyZXNob2xkX2ludGVycnVwdDsKIAkJfQogCX0KIH0KQEAgLTE4NywxOSArMTkxLDEzIEBACiAgKiB0aGUgaW50ZXJydXB0IGdvZXMgb2ZmIHdoZW4gZXJyb3JfY291bnQgcmVhY2hlcyB0aHJlc2hvbGRfbGltaXQuCiAgKiB0aGUgaGFuZGxlciB3aWxsIHNpbXBseSBsb2cgbWNlbG9nIHcvIHNvZnR3YXJlIGRlZmluZWQgYmFuayBudW1iZXIuCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBtY2VfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQorc3RhdGljIHZvaWQgYW1kX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgYmFuaywgYmxvY2s7CiAJc3RydWN0IG1jZSBtOwogCXUzMiBsb3cgPSAwLCBoaWdoID0gMCwgYWRkcmVzcyA9IDA7CiAKLQlhY2tfQVBJQ19pcnEoKTsKLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQotCW1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsKLQlyZHRzY2xsKG0udHNjKTsKLQltLmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwltY2Vfc2V0dXAoJm0pOwogCiAJLyogYXNzdW1lIGZpcnN0IGJhbmsgY2F1c2VkIGl0ICovCiAJZm9yIChiYW5rID0gMDsgYmFuayA8IE5SX0JBTktTOyArK2JhbmspIHsKQEAgLTIzMyw3ICsyMzEsOCBAQAogCiAJCQkvKiBMb2cgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBjYXVzZWQgdGhlIHRocmVzaG9sZAogCQkJICAgZXZlbnQuICovCi0JCQlkb19tYWNoaW5lX2NoZWNrKE5VTEwsIDApOworCQkJbWFjaGluZV9jaGVja19wb2xsKE1DUF9USU1FU1RBTVAsCisJCQkJCSZfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CiAKIAkJCWlmIChoaWdoICYgTUFTS19PVkVSRkxPV19ISSkgewogCQkJCXJkbXNybChhZGRyZXNzLCBtLm1pc2MpOwpAQCAtMjQzLDEzICsyNDIsMTAgQEAKIAkJCQkgICAgICAgKyBiYW5rICogTlJfQkxPQ0tTCiAJCQkJICAgICAgICsgYmxvY2s7CiAJCQkJbWNlX2xvZygmbSk7Ci0JCQkJZ290byBvdXQ7CisJCQkJcmV0dXJuOwogCQkJfQogCQl9CiAJfQotb3V0OgotCWluY19pcnFfc3RhdChpcnFfdGhyZXNob2xkX2NvdW50KTsKLQlpcnFfZXhpdCgpOwogfQogCiAvKgpAQCAtMjgzLDcgKzI3OSw3IEBACiAJdHIuYiA9IGI7CiAJdHIucmVzZXQgPSAwOwogCXRyLm9sZF9saW1pdCA9IDA7Ci0Jd29ya19vbl9jcHUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0ciwgMSk7CiAKIAlyZXR1cm4gZW5kIC0gYnVmOwogfQpAQCAtMzA1LDIzICszMDEsMzIgQEAKIAl0ci5iID0gYjsKIAl0ci5yZXNldCA9IDA7CiAKLQl3b3JrX29uX2NwdShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0cik7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIAogCXJldHVybiBlbmQgLSBidWY7CiB9CiAKLXN0YXRpYyBsb25nIGxvY2FsX2Vycm9yX2NvdW50KHZvaWQgKl9iKQorc3RydWN0IHRocmVzaG9sZF9ibG9ja19jcm9zc19jcHUgeworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKnRiOworCWxvbmcgcmV0dmFsOworfTsKKworc3RhdGljIHZvaWQgbG9jYWxfZXJyb3JfY291bnRfaGFuZGxlcih2b2lkICpfdGJjYykKIHsKLQlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpiID0gX2I7CisJc3RydWN0IHRocmVzaG9sZF9ibG9ja19jcm9zc19jcHUgKnRiY2MgPSBfdGJjYzsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpiID0gdGJjYy0+dGI7CiAJdTMyIGxvdywgaGlnaDsKIAogCXJkbXNyKGItPmFkZHJlc3MsIGxvdywgaGlnaCk7Ci0JcmV0dXJuIChoaWdoICYgMHhGRkYpIC0gKFRIUkVTSE9MRF9NQVggLSBiLT50aHJlc2hvbGRfbGltaXQpOworCXRiY2MtPnJldHZhbCA9IChoaWdoICYgMHhGRkYpIC0gKFRIUkVTSE9MRF9NQVggLSBiLT50aHJlc2hvbGRfbGltaXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2Vycm9yX2NvdW50KHN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHdvcmtfb25fY3B1KGItPmNwdSwgbG9jYWxfZXJyb3JfY291bnQsIGIpKTsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrX2Nyb3NzX2NwdSB0YmNjID0geyAudGIgPSBiLCB9OworCisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgbG9jYWxfZXJyb3JfY291bnRfaGFuZGxlciwgJnRiY2MsIDEpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgdGJjYy5yZXR2YWwpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9lcnJvcl9jb3VudChzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpiLApAQCAtMzI5LDcgKzMzNCw3IEBACiB7CiAJc3RydWN0IHRocmVzaF9yZXN0YXJ0IHRyID0geyAuYiA9IGIsIC5yZXNldCA9IDEsIC5vbGRfbGltaXQgPSAwIH07CiAKLQl3b3JrX29uX2NwdShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0cik7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMzk4LDcgKzQwMyw3IEBACiAJaWYgKChiYW5rID49IE5SX0JBTktTKSB8fCAoYmxvY2sgPj0gTlJfQkxPQ0tTKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocmRtc3Jfc2FmZShhZGRyZXNzLCAmbG93LCAmaGlnaCkpCisJaWYgKHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgYWRkcmVzcywgJmxvdywgJmhpZ2gpKQogCQlyZXR1cm4gMDsKIAogCWlmICghKGhpZ2ggJiBNQVNLX1ZBTElEX0hJKSkgewpAQCAtNDYyLDEyICs0NjcsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgX19jcHVpbml0IGxvbmcgbG9jYWxfYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2Nrcyh2b2lkICpfYmFuaykKK3N0YXRpYyBfX2NwdWluaXQgbG9uZworbG9jYWxfYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYmFuaykKIHsKLQl1bnNpZ25lZCBpbnQgKmJhbmsgPSBfYmFuazsKLQotCXJldHVybiBhbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKHNtcF9wcm9jZXNzb3JfaWQoKSwgKmJhbmssIDAsCi0JCQkJCSBNU1JfSUEzMl9NQzBfTUlTQyArICpiYW5rICogNCk7CisJcmV0dXJuIGFsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoY3B1LCBiYW5rLCAwLAorCQkJCQkgTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNCk7CiB9CiAKIC8qIHN5bWxpbmtzIHNpYmxpbmcgc2hhcmVkIGJhbmtzIHRvIGZpcnN0IGNvcmUuICBmaXJzdCBjb3JlIG93bnMgZGlyL2ZpbGVzLiAqLwpAQCAtNTMwLDcgKzUzNCw3IEBACiAKIAlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IGI7CiAKLQllcnIgPSB3b3JrX29uX2NwdShjcHUsIGxvY2FsX2FsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MsICZiYW5rKTsKKwllcnIgPSBsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGNwdSwgYmFuayk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwppbmRleCBhYTVlMjg3Li41N2RmM2QzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBJbnRlbCBzcGVjaWZpYyBNQ0UgZmVhdHVyZXMuCiAgKiBDb3B5cmlnaHQgMjAwNCBad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGxpbnV4cG93ZXIuY2E+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQW5kaSBLbGVlbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMyw2ICsxNSw3IEBACiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3RoZXJtX3Rocm90Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAogYXNtbGlua2FnZSB2b2lkIHNtcF90aGVybWFsX2ludGVycnVwdCh2b2lkKQogewpAQCAtMjUsNyArMjgsNyBAQAogCiAJcmRtc3JsKE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgbXNyX3ZhbCk7CiAJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIDEpKQotCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KHNtcF9wcm9jZXNzb3JfaWQoKSwgbXNyX3ZhbCk7CisJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQobXNyX3ZhbCk7CiAKIAlpbmNfaXJxX3N0YXQoaXJxX3RoZXJtYWxfY291bnQpOwogCWlycV9leGl0KCk7CkBAIC04NSw3ICs4OCwyMDkgQEAKIAlyZXR1cm47CiB9CiAKKy8qCisgKiBTdXBwb3J0IGZvciBJbnRlbCBDb3JyZWN0IE1hY2hpbmUgQ2hlY2sgSW50ZXJydXB0cy4gVGhpcyBhbGxvd3MKKyAqIHRoZSBDUFUgdG8gcmFpc2UgYW4gaW50ZXJydXB0IHdoZW4gYSBjb3JyZWN0ZWQgbWFjaGluZSBjaGVjayBoYXBwZW5lZC4KKyAqIE5vcm1hbGx5IHdlIHBpY2sgdGhvc2UgdXAgdXNpbmcgYSByZWd1bGFyIHBvbGxpbmcgdGltZXIuCisgKiBBbHNvIHN1cHBvcnRzIHJlbGlhYmxlIGRpc2NvdmVyeSBvZiBzaGFyZWQgYmFua3MuCisgKi8KKworc3RhdGljIERFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfYmFua3Nfb3duZWQpOworCisvKgorICogY21jaV9kaXNjb3Zlcl9sb2NrIHByb3RlY3RzIGFnYWluc3QgcGFyYWxsZWwgZGlzY292ZXJ5IGF0dGVtcHRzCisgKiB3aGljaCBjb3VsZCByYWNlIGFnYWluc3QgZWFjaCBvdGhlci4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhjbWNpX2Rpc2NvdmVyX2xvY2spOworCisjZGVmaW5lIENNQ0lfVEhSRVNIT0xEIDEKKworc3RhdGljIGludCBjbWNpX3N1cHBvcnRlZChpbnQgKmJhbmtzKQoreworCXU2NCBjYXA7CisKKwkvKgorCSAqIFZlbmRvciBjaGVjayBpcyBub3Qgc3RyaWN0bHkgbmVlZGVkLCBidXQgdGhlIGluaXRpYWwKKwkgKiBpbml0aWFsaXphdGlvbiBpcyB2ZW5kb3Iga2V5ZWQgYW5kIHRoaXMKKwkgKiBtYWtlcyBzdXJlIG5vbmUgb2YgdGhlIGJhY2tkb29ycyBhcmUgZW50ZXJlZCBvdGhlcndpc2UuCisJICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNwdV9oYXNfYXBpYyB8fCBsYXBpY19nZXRfbWF4bHZ0KCkgPCA2KQorCQlyZXR1cm4gMDsKKwlyZG1zcmwoTVNSX0lBMzJfTUNHX0NBUCwgY2FwKTsKKwkqYmFua3MgPSBtaW5fdCh1bnNpZ25lZCwgTUFYX05SX0JBTktTLCBjYXAgJiAweGZmKTsKKwlyZXR1cm4gISEoY2FwICYgTUNHX0NNQ0lfUCk7Cit9CisKKy8qCisgKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMgaXMgY2FsbGVkIG9uIGV2ZXJ5IGV2ZW50LgorICogSnVzdCBjYWxsIHRoZSBwb2xsZXIgZGlyZWN0bHkgdG8gbG9nIGFueSBldmVudHMuCisgKiBUaGlzIGNvdWxkIGluIHRoZW9yeSBpbmNyZWFzZSB0aGUgdGhyZXNob2xkIHVuZGVyIGhpZ2ggbG9hZCwKKyAqIGJ1dCBkb2Vzbid0IGZvciBub3cuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCkKK3sKKwltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwgJl9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CisJbWNlX25vdGlmeV91c2VyKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3VwZGF0ZShjaGFyICp0eXBlLCBpbnQgKmhkciwgaW50IG51bSkKK3sKKwlpZiAoKmhkciA9PSAwKQorCQlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQgTUNBIGJhbmtzIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkqaGRyID0gMTsKKwlwcmludGsoS0VSTl9DT05UICIgJXM6JWQiLCB0eXBlLCBudW0pOworfQorCisvKgorICogRW5hYmxlIENNQ0kgKENvcnJlY3RlZCBNYWNoaW5lIENoZWNrIEludGVycnVwdCkgZm9yIGF2YWlsYWJsZSBNQ0UgYmFua3MKKyAqIG9uIHRoaXMgQ1BVLiBVc2UgdGhlIGFsZ29yaXRobSByZWNvbW1lbmRlZCBpbiB0aGUgU0RNIHRvIGRpc2NvdmVyIHNoYXJlZAorICogYmFua3MuCisgKi8KK3N0YXRpYyB2b2lkIGNtY2lfZGlzY292ZXIoaW50IGJhbmtzLCBpbnQgYm9vdCkKK3sKKwl1bnNpZ25lZCBsb25nICpvd25lZCA9ICh2b2lkICopJl9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKTsKKwlpbnQgaGRyID0gMDsKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmY21jaV9kaXNjb3Zlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQl1NjQgdmFsOworCisJCWlmICh0ZXN0X2JpdChpLCBvd25lZCkpCisJCQljb250aW51ZTsKKworCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0NUTDIgKyBpLCB2YWwpOworCisJCS8qIEFscmVhZHkgb3duZWQgYnkgc29tZW9uZSBlbHNlPyAqLworCQlpZiAodmFsICYgQ01DSV9FTikgeworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCBvd25lZCkgfHwgYm9vdCkKKwkJCQlwcmludF91cGRhdGUoIlNIRCIsICZoZHIsIGkpOworCQkJX19jbGVhcl9iaXQoaSwgX19nZXRfY3B1X3ZhcihtY2VfcG9sbF9iYW5rcykpOworCQkJY29udGludWU7CisJCX0KKworCQl2YWwgfD0gQ01DSV9FTiB8IENNQ0lfVEhSRVNIT0xEOworCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTDIgKyBpLCB2YWwpOworCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0NUTDIgKyBpLCB2YWwpOworCisJCS8qIERpZCB0aGUgZW5hYmxlIGJpdCBzdGljaz8gLS0gdGhlIGJhbmsgc3VwcG9ydHMgQ01DSSAqLworCQlpZiAodmFsICYgQ01DSV9FTikgeworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksIG93bmVkKSB8fCBib290KQorCQkJCXByaW50X3VwZGF0ZSgiQ01DSSIsICZoZHIsIGkpOworCQkJX19jbGVhcl9iaXQoaSwgX19nZXRfY3B1X3ZhcihtY2VfcG9sbF9iYW5rcykpOworCQl9IGVsc2UgeworCQkJV0FSTl9PTighdGVzdF9iaXQoaSwgX19nZXRfY3B1X3ZhcihtY2VfcG9sbF9iYW5rcykpKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmY21jaV9kaXNjb3Zlcl9sb2NrKTsKKwlpZiAoaGRyKQorCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCisvKgorICogSnVzdCBpbiBjYXNlIHdlIG1pc3NlZCBhbiBldmVudCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gY2hlY2sKKyAqIGFsbCB0aGUgQ01DSSBvd25lZCBiYW5rcy4KKyAqLwordm9pZCBjbWNpX3JlY2hlY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBiYW5rczsKKworCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkgfHwgIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCXJldHVybjsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbWFjaGluZV9jaGVja19wb2xsKE1DUF9USU1FU1RBTVAsICZfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIERpc2FibGUgQ01DSSBvbiB0aGlzIENQVSBmb3IgYWxsIGJhbmtzIGl0IG93bnMgd2hlbiBpdCBnb2VzIGRvd24uCisgKiBUaGlzIGFsbG93cyBvdGhlciBDUFVzIHRvIGNsYWltIHRoZSBiYW5rcyBvbiByZWRpc2NvdmVyeS4KKyAqLwordm9pZCBjbWNpX2NsZWFyKHZvaWQpCit7CisJaW50IGk7CisJaW50IGJhbmtzOworCXU2NCB2YWw7CisKKwlpZiAoIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmNtY2lfZGlzY292ZXJfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpKQorCQkJY29udGludWU7CisJCS8qIERpc2FibGUgQ01DSSAqLworCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0NUTDIgKyBpLCB2YWwpOworCQl2YWwgJj0gfihDTUNJX0VOfENNQ0lfVEhSRVNIT0xEX01BU0spOworCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTDIgKyBpLCB2YWwpOworCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpOworCX0KKwlzcGluX3VubG9jaygmY21jaV9kaXNjb3Zlcl9sb2NrKTsKK30KKworLyoKKyAqIEFmdGVyIGEgQ1BVIHdlbnQgZG93biBjeWNsZSB0aHJvdWdoIGFsbCB0aGUgb3RoZXJzIGFuZCByZWRpc2NvdmVyCisgKiBNdXN0IHJ1biBpbiBwcm9jZXNzIGNvbnRleHQuCisgKi8KK3ZvaWQgY21jaV9yZWRpc2NvdmVyKGludCBkeWluZykKK3sKKwlpbnQgYmFua3M7CisJaW50IGNwdTsKKwljcHVtYXNrX3Zhcl90IG9sZDsKKworCWlmICghY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJm9sZCwgR0ZQX0tFUk5FTCkpCisJCXJldHVybjsKKwljcHVtYXNrX2NvcHkob2xkLCAmY3VycmVudC0+Y3B1c19hbGxvd2VkKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUgKGNwdSkgeworCQlpZiAoY3B1ID09IGR5aW5nKQorCQkJY29udGludWU7CisJCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSkpCisJCQljb250aW51ZTsKKwkJLyogUmVjaGVjayBiYW5rcyBpbiBjYXNlIENQVXMgZG9uJ3QgYWxsIGhhdmUgdGhlIHNhbWUgKi8KKwkJaWYgKGNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCQljbWNpX2Rpc2NvdmVyKGJhbmtzLCAwKTsKKwl9CisKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBvbGQpOworCWZyZWVfY3B1bWFza192YXIob2xkKTsKK30KKworLyoKKyAqIFJlZW5hYmxlIENNQ0kgb24gdGhpcyBDUFUgaW4gY2FzZSBhIENQVSBkb3duIGZhaWxlZC4KKyAqLwordm9pZCBjbWNpX3JlZW5hYmxlKHZvaWQpCit7CisJaW50IGJhbmtzOworCWlmIChjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQljbWNpX2Rpc2NvdmVyKGJhbmtzLCAwKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9jbWNpKHZvaWQpCit7CisJaW50IGJhbmtzOworCisJaWYgKCFjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQlyZXR1cm47CisKKwltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGludGVsX3RocmVzaG9sZF9pbnRlcnJ1cHQ7CisJY21jaV9kaXNjb3ZlcihiYW5rcywgMSk7CisJLyoKKwkgKiBGb3IgQ1BVICMwIHRoaXMgcnVucyB3aXRoIHN0aWxsIGRpc2FibGVkIEFQSUMsIGJ1dCB0aGF0J3MKKwkgKiBvayBiZWNhdXNlIG9ubHkgdGhlIHZlY3RvciBpcyBzZXQgdXAuIFdlIHN0aWxsIGRvIGFub3RoZXIKKwkgKiBjaGVjayBmb3IgdGhlIGJhbmtzIGxhdGVyIGZvciBDUFUgIzAganVzdCB0byBtYWtlIHN1cmUKKwkgKiB0byBub3QgbWlzcyBhbnkgZXZlbnRzLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRDTUNJLCBUSFJFU0hPTERfQVBJQ19WRUNUT1J8QVBJQ19ETV9GSVhFRCk7CisJY21jaV9yZWNoZWNrKCk7Cit9CisKIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJaW50ZWxfaW5pdF90aGVybWFsKGMpOworCWludGVsX2luaXRfY21jaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhyZXNob2xkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aHJlc2hvbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VlOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhyZXNob2xkLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvbW1vbiBjb3JyZWN0ZWQgTUNFIHRocmVzaG9sZCBoYW5kbGVyIGNvZGU6CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CisKK3N0YXRpYyB2b2lkIGRlZmF1bHRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQoreworCXByaW50ayhLRVJOX0VSUiAiVW5leHBlY3RlZCB0aHJlc2hvbGQgaW50ZXJydXB0IGF0IHZlY3RvciAleFxuIiwKKwkJCSBUSFJFU0hPTERfQVBJQ19WRUNUT1IpOworfQorCit2b2lkICgqbWNlX3RocmVzaG9sZF92ZWN0b3IpKHZvaWQpID0gZGVmYXVsdF90aHJlc2hvbGRfaW50ZXJydXB0OworCithc21saW5rYWdlIHZvaWQgbWNlX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCkKK3sKKwlleGl0X2lkbGUoKTsKKwlpcnFfZW50ZXIoKTsKKwlpbmNfaXJxX3N0YXQoaXJxX3RocmVzaG9sZF9jb3VudCk7CisJbWNlX3RocmVzaG9sZF92ZWN0b3IoKTsKKwlpcnFfZXhpdCgpOworCS8qIEFjayBvbmx5IGF0IHRoZSBlbmQgdG8gYXZvaWQgcG90ZW50aWFsIHJlZW50cnkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQppbmRleCAxOTFmYzA1Li5mNDM2MWI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAotb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBzdGF0ZS5vCitvYmoteQkJOj0gbWFpbi5vIGlmLm8gZ2VuZXJpYy5vIHN0YXRlLm8gY2xlYW51cC5vCiBvYmotJChDT05GSUdfWDg2XzMyKSArPSBhbWQubyBjeXJpeC5vIGNlbnRhdXIubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTBmZTRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwpAQCAtMCwwICsxLDExMDEgQEAKKy8qICBNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcikgY2xlYW51cAorCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IFlpbmdoYWkgTHUKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wYXJhLmg+CisjaW5jbHVkZSAibXRyci5oIgorCisvKiBzaG91bGQgYmUgcmVsYXRlZCB0byBNVFJSX1ZBUl9SQU5HRVMgbnVtcyAqLworI2RlZmluZSBSQU5HRV9OVU0gMjU2CisKK3N0cnVjdCByZXNfcmFuZ2UgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7Cit9OworCitzdGF0aWMgaW50IF9faW5pdAorYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwkvKiBvdXQgb2Ygc2xvdHMgKi8KKwlpZiAobnJfcmFuZ2UgPj0gUkFOR0VfTlVNKQorCQlyZXR1cm4gbnJfcmFuZ2U7CisKKwlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSBzdGFydDsKKwlyYW5nZVtucl9yYW5nZV0uZW5kID0gZW5kOworCisJbnJfcmFuZ2UrKzsKKworCXJldHVybiBucl9yYW5nZTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2FkZF9yYW5nZV93aXRoX21lcmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgaTsKKworCS8qIHRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCXVuc2lnbmVkIGxvbmcgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOworCisJCWlmICghcmFuZ2VbaV0uZW5kKQorCQkJY29udGludWU7CisKKwkJY29tbW9uX3N0YXJ0ID0gbWF4KHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7CisJCWNvbW1vbl9lbmQgPSBtaW4ocmFuZ2VbaV0uZW5kLCBlbmQpOworCQlpZiAoY29tbW9uX3N0YXJ0ID4gY29tbW9uX2VuZCArIDEpCisJCQljb250aW51ZTsKKworCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOworCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOworCisJCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7CisJCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7CisJCXJldHVybiBucl9yYW5nZTsKKwl9CisKKwkvKiBuZWVkIHRvIGFkZCB0aGF0ICovCisJcmV0dXJuIGFkZF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIHN0YXJ0LCBlbmQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3N1YnRyYWN0X3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaiA9IDA7IGogPCBSQU5HRV9OVU07IGorKykgeworCQlpZiAoIXJhbmdlW2pdLmVuZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kKSB7CisJCQlyYW5nZVtqXS5zdGFydCA9IDA7CisJCQlyYW5nZVtqXS5lbmQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kICYmCisJCSAgICByYW5nZVtqXS5zdGFydCA8IGVuZCArIDEpIHsKKwkJCXJhbmdlW2pdLnN0YXJ0ID0gZW5kICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kICYmCisJCSAgICByYW5nZVtqXS5lbmQgPiBzdGFydCAtIDEpIHsKKwkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0ID4gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kKSB7CisJCQkvKiBmaW5kIHRoZSBuZXcgc3BhcmUgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgeworCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaSA8IFJBTkdFX05VTSkgeworCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKKwkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZCArIDE7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAicnVuIG9mIHNsb3QgaW4gcmFuZ2VzXG4iKTsKKwkJCX0KKwkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQoreworCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIxID0geDE7CisJY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjIgPSB4MjsKKwlsb25nIHN0YXJ0MSwgc3RhcnQyOworCisJc3RhcnQxID0gcjEtPnN0YXJ0OworCXN0YXJ0MiA9IHIyLT5zdGFydDsKKworCXJldHVybiBzdGFydDEgLSBzdGFydDI7Cit9CisKK3N0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSB7CisJdW5zaWduZWQgbG9uZyBiYXNlX3BmbjsKKwl1bnNpZ25lZCBsb25nIHNpemVfcGZuOworCW10cnJfdHlwZSB0eXBlOworfTsKKworc3RhdGljIHN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSBfX2luaXRkYXRhIHJhbmdlX3N0YXRlW1JBTkdFX05VTV07CitzdGF0aWMgaW50IF9faW5pdGRhdGEgZGVidWdfcHJpbnQ7CisKK3N0YXRpYyBpbnQgX19pbml0Cit4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7CisJbXRycl90eXBlIHR5cGU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKKwkJCWNvbnRpbnVlOworCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIGJhc2UsCisJCQkJCQliYXNlICsgc2l6ZSAtIDEpOworCX0KKwlpZiAoZGVidWdfcHJpbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFdCIGNoZWNraW5nXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKKwl9CisKKwkvKiB0YWtlIG91dCBVQyByYW5nZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgJiYKKwkJICAgIHR5cGUgIT0gTVRSUl9UWVBFX1dSUFJPVCkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47CisJCWlmICghc2l6ZSkKKwkJCWNvbnRpbnVlOworCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47CisJCWlmIChiYXNlIDwgKDE8PCgyMC1QQUdFX1NISUZUKSkgJiYgbXRycl9zdGF0ZS5oYXZlX2ZpeGVkICYmCisJCSAgICAobXRycl9zdGF0ZS5lbmFibGVkICYgMSkpIHsKKwkJCS8qIFZhciBNVFJSIGNvbnRhaW5zIFVDIGVudHJ5IGJlbG93IDFNPyBTa2lwIGl0OiAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQklPUyBidWc6IFZBUiBNVFJSICVkICIKKwkJCQkiY29udGFpbnMgc3RyYW5nZSBVQyBlbnRyeSB1bmRlciAxTSwgY2hlY2sgIgorCQkJCSJ3aXRoIHlvdXIgc3lzdGVtIHZlbmRvciFcbiIsIGkpOworCQkJaWYgKGJhc2UgKyBzaXplIDw9ICgxPDwoMjAtUEFHRV9TSElGVCkpKQorCQkJCWNvbnRpbnVlOworCQkJc2l6ZSAtPSAoMTw8KDIwLVBBR0VfU0hJRlQpKSAtIGJhc2U7CisJCQliYXNlID0gMTw8KDIwLVBBR0VfU0hJRlQpOworCQl9CisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBiYXNlLCBiYXNlICsgc2l6ZSAtIDEpOworCX0KKwlpZiAoZXh0cmFfcmVtb3ZlX3NpemUpCisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBleHRyYV9yZW1vdmVfYmFzZSwKKwkJCQkgZXh0cmFfcmVtb3ZlX2Jhc2UgKyBleHRyYV9yZW1vdmVfc2l6ZSAgLSAxKTsKKworCS8qIGdldCBuZXcgcmFuZ2UgbnVtICovCisJbnJfcmFuZ2UgPSAwOworCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgeworCQlpZiAoIXJhbmdlW2ldLmVuZCkKKwkJCWNvbnRpbnVlOworCQlucl9yYW5nZSsrOworCX0KKwlpZiAgKGRlYnVnX3ByaW50KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBVQyBjaGVja2luZ1xuIik7CisJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJfQorCisJLyogc29ydCB0aGUgcmFuZ2VzICovCisJc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKKwlpZiAgKGRlYnVnX3ByaW50KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBzb3J0aW5nXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKKwl9CisKKwkvKiBjbGVhciB0aG9zZSBpcyBub3QgdXNlZCAqLworCWZvciAoaSA9IG5yX3JhbmdlOyBpIDwgUkFOR0VfTlVNOyBpKyspCisJCW1lbXNldCgmcmFuZ2VbaV0sIDAsIHNpemVvZihyYW5nZVtpXSkpOworCisJcmV0dXJuIG5yX3JhbmdlOworfQorCitzdGF0aWMgc3RydWN0IHJlc19yYW5nZSBfX2luaXRkYXRhIHJhbmdlW1JBTkdFX05VTV07CitzdGF0aWMgaW50IF9faW5pdGRhdGEgbnJfcmFuZ2U7CisKKyNpZmRlZiBDT05GSUdfTVRSUl9TQU5JVElaRVIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bV9yYW5nZXMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN1bTsKKwlpbnQgaTsKKworCXN1bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXN1bSArPSByYW5nZVtpXS5lbmQgKyAxIC0gcmFuZ2VbaV0uc3RhcnQ7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW50IGVuYWJsZV9tdHJyX2NsZWFudXAgX19pbml0ZGF0YSA9CisJQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxUOworCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCit7CisJZW5hYmxlX210cnJfY2xlYW51cCA9IDA7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZGlzYWJsZV9tdHJyX2NsZWFudXAiLCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXAoY2hhciAqc3RyKQoreworCWVuYWJsZV9tdHJyX2NsZWFudXAgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImVuYWJsZV9tdHJyX2NsZWFudXAiLCBlbmFibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKGNoYXIgKnN0cikKK3sKKwlkZWJ1Z19wcmludCA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibXRycl9jbGVhbnVwX2RlYnVnIiwgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKTsKKworc3RydWN0IHZhcl9tdHJyX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nCXJhbmdlX3N0YXJ0azsKKwl1bnNpZ25lZCBsb25nCXJhbmdlX3NpemVrOworCXVuc2lnbmVkIGxvbmcJY2h1bmtfc2l6ZWs7CisJdW5zaWduZWQgbG9uZwlncmFuX3NpemVrOworCXVuc2lnbmVkIGludAlyZWc7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQKK3NldF92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAorCQl1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCit7CisJdTMyIGJhc2VfbG8sIGJhc2VfaGksIG1hc2tfbG8sIG1hc2tfaGk7CisJdTY0IGJhc2UsIG1hc2s7CisKKwlpZiAoIXNpemVrKSB7CisJCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCAwLCAwLCAwLCAwKTsKKwkJcmV0dXJuOworCX0KKworCW1hc2sgPSAoMVVMTCA8PCBhZGRyZXNzX2JpdHMpIC0gMTsKKwltYXNrICY9IH4oKCgodTY0KXNpemVrKSA8PCAxMCkgLSAxKTsKKworCWJhc2UgID0gKCh1NjQpYmFzZWspIDw8IDEwOworCisJYmFzZSB8PSB0eXBlOworCW1hc2sgfD0gMHg4MDA7CisKKwliYXNlX2xvID0gYmFzZSAmICgoMVVMTDw8MzIpIC0gMSk7CisJYmFzZV9oaSA9IGJhc2UgPj4gMzI7CisKKwltYXNrX2xvID0gbWFzayAmICgoMVVMTDw8MzIpIC0gMSk7CisJbWFza19oaSA9IG1hc2sgPj4gMzI7CisKKwlmaWxsX210cnJfdmFyX3JhbmdlKHJlZywgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2F2ZV92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAorCQl1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA9IGJhc2VrID4+IChQQUdFX1NISUZUIC0gMTApOworCXJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPSBzaXplayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKKwlyYW5nZV9zdGF0ZVtyZWddLnR5cGUgPSB0eXBlOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NldF92YXJfbXRycl9hbGwodW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWZvciAocmVnID0gMDsgcmVnIDwgbnVtX3Zhcl9yYW5nZXM7IHJlZysrKSB7CisJCWJhc2VrID0gcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJc2l6ZWsgPSByYW5nZV9zdGF0ZVtyZWddLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbcmVnXS50eXBlOworCisJCXNldF92YXJfbXRycihyZWcsIGJhc2VrLCBzaXplaywgdHlwZSwgYWRkcmVzc19iaXRzKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvX3NpemVfZmFjdG9yKHVuc2lnbmVkIGxvbmcgc2l6ZWssIGNoYXIgKmZhY3RvcnApCit7CisJY2hhciBmYWN0b3I7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gc2l6ZWs7CisKKwlpZiAoYmFzZSAmICgoMTw8MTApIC0gMSkpIHsKKwkJLyogbm90IE1CIGFsaWdubWVudCAqLworCQlmYWN0b3IgPSAnSyc7CisJfSBlbHNlIGlmIChiYXNlICYgKCgxPDwyMCkgLSAxKSkgeworCQlmYWN0b3IgPSAnTSc7CisJCWJhc2UgPj49IDEwOworCX0gZWxzZSB7CisJCWZhY3RvciA9ICdHJzsKKwkJYmFzZSA+Pj0gMjA7CisJfQorCisJKmZhY3RvcnAgPSBmYWN0b3I7CisKKwlyZXR1cm4gYmFzZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQKK3JhbmdlX3RvX210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydGssCisJICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zaXplaywgdW5zaWduZWQgY2hhciB0eXBlKQoreworCWlmICghcmFuZ2Vfc2l6ZWsgfHwgKHJlZyA+PSBudW1fdmFyX3JhbmdlcykpCisJCXJldHVybiByZWc7CisKKwl3aGlsZSAocmFuZ2Vfc2l6ZWspIHsKKwkJdW5zaWduZWQgbG9uZyBtYXhfYWxpZ24sIGFsaWduOworCQl1bnNpZ25lZCBsb25nIHNpemVrOworCisJCS8qIENvbXB1dGUgdGhlIG1heGltdW0gc2l6ZSBJIGNhbiBtYWtlIGEgcmFuZ2UgKi8KKwkJaWYgKHJhbmdlX3N0YXJ0aykKKwkJCW1heF9hbGlnbiA9IGZmcyhyYW5nZV9zdGFydGspIC0gMTsKKwkJZWxzZQorCQkJbWF4X2FsaWduID0gMzI7CisJCWFsaWduID0gZmxzKHJhbmdlX3NpemVrKSAtIDE7CisJCWlmIChhbGlnbiA+IG1heF9hbGlnbikKKwkJCWFsaWduID0gbWF4X2FsaWduOworCisJCXNpemVrID0gMSA8PCBhbGlnbjsKKwkJaWYgKGRlYnVnX3ByaW50KSB7CisJCQljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2Jhc2UsIHNpemVfYmFzZTsKKworCQkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJhbmdlX3N0YXJ0aywKKwkJCQkJCQkgJnN0YXJ0X2ZhY3RvciksCisJCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplaywgJnNpemVfZmFjdG9yKSwKKworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHRpbmcgdmFyaWFibGUgTVRSUiAlZCwgIgorCQkJCSJiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCisJCQkJcmVnLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCisJCQkJc2l6ZV9iYXNlLCBzaXplX2ZhY3RvciwKKwkJCQkodHlwZSA9PSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkgPyAiVUMiIDoKKwkJCQkgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSQkFDSykgPyAiV0IiIDogIk90aGVyIikKKwkJCQkpOworCQl9CisJCXNhdmVfdmFyX210cnIocmVnKyssIHJhbmdlX3N0YXJ0aywgc2l6ZWssIHR5cGUpOworCQlyYW5nZV9zdGFydGsgKz0gc2l6ZWs7CisJCXJhbmdlX3NpemVrIC09IHNpemVrOworCQlpZiAocmVnID49IG51bV92YXJfcmFuZ2VzKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByZWc7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBfX2luaXQKK3JhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0cnVjdCB2YXJfbXRycl9zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGxvbmcgYmFzZWssCisJCQl1bnNpZ25lZCBsb25nIHNpemVrKQoreworCXVuc2lnbmVkIGxvbmcgaG9sZV9iYXNlaywgaG9sZV9zaXplazsKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9iYXNlaywgc2Vjb25kX3NpemVrOworCXVuc2lnbmVkIGxvbmcgcmFuZ2UwX2Jhc2VrLCByYW5nZTBfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyByYW5nZV9iYXNlaywgcmFuZ2Vfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBjaHVua19zaXplazsKKwl1bnNpZ25lZCBsb25nIGdyYW5fc2l6ZWs7CisKKwlob2xlX2Jhc2VrID0gMDsKKwlob2xlX3NpemVrID0gMDsKKwlzZWNvbmRfYmFzZWsgPSAwOworCXNlY29uZF9zaXplayA9IDA7CisJY2h1bmtfc2l6ZWsgPSBzdGF0ZS0+Y2h1bmtfc2l6ZWs7CisJZ3Jhbl9zaXplayA9IHN0YXRlLT5ncmFuX3NpemVrOworCisJLyogYWxpZ24gd2l0aCBncmFuIHNpemUsIHByZXZlbnQgc21hbGwgYmxvY2sgdXNlZCB1cCBNVFJScyAqLworCXJhbmdlX2Jhc2VrID0gQUxJR04oc3RhdGUtPnJhbmdlX3N0YXJ0aywgZ3Jhbl9zaXplayk7CisJaWYgKChyYW5nZV9iYXNlayA+IGJhc2VrKSAmJiBiYXNlaykKKwkJcmV0dXJuIHNlY29uZF9zaXplazsKKwlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLT0gKHJhbmdlX2Jhc2VrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0ayk7CisJcmFuZ2Vfc2l6ZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc2l6ZWssIGdyYW5fc2l6ZWspOworCisJd2hpbGUgKHJhbmdlX3NpemVrID4gc3RhdGUtPnJhbmdlX3NpemVrKSB7CisJCXJhbmdlX3NpemVrIC09IGdyYW5fc2l6ZWs7CisJCWlmICghcmFuZ2Vfc2l6ZWspCisJCQlyZXR1cm4gMDsKKwl9CisJc3RhdGUtPnJhbmdlX3NpemVrID0gcmFuZ2Vfc2l6ZWs7CisKKwkvKiB0cnkgdG8gYXBwZW5kIHNvbWUgc21hbGwgaG9sZSAqLworCXJhbmdlMF9iYXNlayA9IHN0YXRlLT5yYW5nZV9zdGFydGs7CisJcmFuZ2UwX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBjaHVua19zaXplayk7CisKKwkvKiBubyBpbmNyZWFzZSAqLworCWlmIChyYW5nZTBfc2l6ZWsgPT0gc3RhdGUtPnJhbmdlX3NpemVrKSB7CisJCWlmIChkZWJ1Z19wcmludCkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZVg6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQlyYW5nZTBfYmFzZWs8PDEwLAorCQkJCShyYW5nZTBfYmFzZWsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWspPDwxMCk7CisJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKKwkJCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBvbmx5IGN1dCBiYWNrLCB3aGVuIGl0IGlzIG5vdCB0aGUgbGFzdCAqLworCWlmIChzaXplaykgeworCQl3aGlsZSAocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrID4gKGJhc2VrICsgc2l6ZWspKSB7CisJCQlpZiAocmFuZ2UwX3NpemVrID49IGNodW5rX3NpemVrKQorCQkJCXJhbmdlMF9zaXplayAtPSBjaHVua19zaXplazsKKwkJCWVsc2UKKwkJCQlyYW5nZTBfc2l6ZWsgPSAwOworCisJCQlpZiAoIXJhbmdlMF9zaXplaykKKwkJCQlicmVhazsKKwkJfQorCX0KKworc2Vjb25kX3RyeToKKwlyYW5nZV9iYXNlayA9IHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplazsKKworCS8qIG9uZSBob2xlIGluIHRoZSBtaWRkbGUgKi8KKwlpZiAocmFuZ2VfYmFzZWsgPiBiYXNlayAmJiByYW5nZV9iYXNlayA8PSAoYmFzZWsgKyBzaXplaykpCisJCXNlY29uZF9zaXplayA9IHJhbmdlX2Jhc2VrIC0gYmFzZWs7CisKKwlpZiAocmFuZ2UwX3NpemVrID4gc3RhdGUtPnJhbmdlX3NpemVrKSB7CisKKwkJLyogb25lIGhvbGUgaW4gbWlkZGxlIG9yIGF0IGVuZCAqLworCQlob2xlX3NpemVrID0gcmFuZ2UwX3NpemVrIC0gc3RhdGUtPnJhbmdlX3NpemVrIC0gc2Vjb25kX3NpemVrOworCisJCS8qIGhvbGUgc2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuIGhhbGYgb2YgcmFuZ2UwIHNpemUgKi8KKwkJaWYgKGhvbGVfc2l6ZWsgPj0gKHJhbmdlMF9zaXplayA+PiAxKSAmJgorCQkgICAgcmFuZ2UwX3NpemVrID49IGNodW5rX3NpemVrKSB7CisJCQlyYW5nZTBfc2l6ZWsgLT0gY2h1bmtfc2l6ZWs7CisJCQlzZWNvbmRfc2l6ZWsgPSAwOworCQkJaG9sZV9zaXplayA9IDA7CisKKwkJCWdvdG8gc2Vjb25kX3RyeTsKKwkJfQorCX0KKworCWlmIChyYW5nZTBfc2l6ZWspIHsKKwkJaWYgKGRlYnVnX3ByaW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlMDogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCXJhbmdlMF9iYXNlazw8MTAsCisJCQkJKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAorCQkJCXJhbmdlMF9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CisJfQorCisJaWYgKHJhbmdlMF9zaXplayA8IHN0YXRlLT5yYW5nZV9zaXplaykgeworCQkvKiBuZWVkIHRvIGhhbmRsZSBsZWZ0IG92ZXIgKi8KKwkJcmFuZ2Vfc2l6ZWsgPSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSByYW5nZTBfc2l6ZWs7CisKKwkJaWYgKGRlYnVnX3ByaW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIHJhbmdlX2Jhc2VrPDwxMCwKKwkJCQkgKHJhbmdlX2Jhc2VrICsgcmFuZ2Vfc2l6ZWspPDwxMCk7CisJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlX2Jhc2VrLAorCQkJCSByYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CisJfQorCisJaWYgKGhvbGVfc2l6ZWspIHsKKwkJaG9sZV9iYXNlayA9IHJhbmdlX2Jhc2VrIC0gaG9sZV9zaXplayAtIHNlY29uZF9zaXplazsKKwkJaWYgKGRlYnVnX3ByaW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgImhvbGU6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgaG9sZV9iYXNlazw8MTAsCisJCQkJIChob2xlX2Jhc2VrICsgaG9sZV9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgaG9sZV9iYXNlaywKKwkJCQkgaG9sZV9zaXplaywgTVRSUl9UWVBFX1VOQ0FDSEFCTEUpOworCX0KKworCXJldHVybiBzZWNvbmRfc2l6ZWs7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X3Zhcl9tdHJyX3JhbmdlKHN0cnVjdCB2YXJfbXRycl9zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4sCisJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZV9wZm4pCit7CisJdW5zaWduZWQgbG9uZyBiYXNlaywgc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBzZWNvbmRfc2l6ZWsgPSAwOworCisJaWYgKHN0YXRlLT5yZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCisJCXJldHVybjsKKworCWJhc2VrID0gYmFzZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJc2l6ZWsgPSBzaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKworCS8qIFNlZSBpZiBJIGNhbiBtZXJnZSB3aXRoIHRoZSBsYXN0IHJhbmdlICovCisJaWYgKChiYXNlayA8PSAxMDI0KSB8fAorCSAgICAoc3RhdGUtPnJhbmdlX3N0YXJ0ayArIHN0YXRlLT5yYW5nZV9zaXplayA9PSBiYXNlaykpIHsKKwkJdW5zaWduZWQgbG9uZyBlbmRrID0gYmFzZWsgKyBzaXplazsKKwkJc3RhdGUtPnJhbmdlX3NpemVrID0gZW5kayAtIHN0YXRlLT5yYW5nZV9zdGFydGs7CisJCXJldHVybjsKKwl9CisJLyogV3JpdGUgdGhlIHJhbmdlIG10cnJzICovCisJaWYgKHN0YXRlLT5yYW5nZV9zaXplayAhPSAwKQorCQlzZWNvbmRfc2l6ZWsgPSByYW5nZV90b19tdHJyX3dpdGhfaG9sZShzdGF0ZSwgYmFzZWssIHNpemVrKTsKKworCS8qIEFsbG9jYXRlIGFuIG1zciAqLworCXN0YXRlLT5yYW5nZV9zdGFydGsgPSBiYXNlayArIHNlY29uZF9zaXplazsKKwlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgID0gc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7Cit9CisKKy8qIG1pbmludW0gc2l6ZSBvZiBtdHJyIGJsb2NrIHRoYXQgY2FuIHRha2UgaG9sZSAqLworc3RhdGljIHU2NCBtdHJyX2NodW5rX3NpemUgX19pbml0ZGF0YSA9ICgyNTZVTEw8PDIwKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9jaHVua19zaXplX29wdChjaGFyICpwKQoreworCWlmICghcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXRycl9jaHVua19zaXplID0gbWVtcGFyc2UocCwgJnApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm10cnJfY2h1bmtfc2l6ZSIsIHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQpOworCisvKiBncmFuaXR5IG9mIG10cnIgb2YgYmxvY2sgKi8KK3N0YXRpYyB1NjQgbXRycl9ncmFuX3NpemUgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KGNoYXIgKnApCit7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdHJyX2dyYW5fc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtdHJyX2dyYW5fc2l6ZSIsIHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdCk7CisKK3N0YXRpYyBpbnQgbnJfbXRycl9zcGFyZV9yZWcgX19pbml0ZGF0YSA9CisJCQkJIENPTkZJR19NVFJSX1NBTklUSVpFUl9TUEFSRV9SRUdfTlJfREVGQVVMVDsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9zcGFyZV9yZWcoY2hhciAqYXJnKQoreworCWlmIChhcmcpCisJCW5yX210cnJfc3BhcmVfcmVnID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oIm10cnJfc3BhcmVfcmVnX25yIiwgcGFyc2VfbXRycl9zcGFyZV9yZWcpOworCitzdGF0aWMgaW50IF9faW5pdAoreDg2X3NldHVwX3Zhcl9tdHJycyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAorCQkgICAgdTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUpCit7CisJc3RydWN0IHZhcl9tdHJyX3N0YXRlIHZhcl9zdGF0ZTsKKwlpbnQgaTsKKwlpbnQgbnVtX3JlZzsKKworCXZhcl9zdGF0ZS5yYW5nZV9zdGFydGsJPSAwOworCXZhcl9zdGF0ZS5yYW5nZV9zaXplawk9IDA7CisJdmFyX3N0YXRlLnJlZwkJPSAwOworCXZhcl9zdGF0ZS5jaHVua19zaXplawk9IGNodW5rX3NpemUgPj4gMTA7CisJdmFyX3N0YXRlLmdyYW5fc2l6ZWsJPSBncmFuX3NpemUgPj4gMTA7CisKKwltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOworCisJLyogV3JpdGUgdGhlIHJhbmdlIGV0YyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQlzZXRfdmFyX210cnJfcmFuZ2UoJnZhcl9zdGF0ZSwgcmFuZ2VbaV0uc3RhcnQsCisJCQkJICAgcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQgKyAxKTsKKworCS8qIFdyaXRlIHRoZSBsYXN0IHJhbmdlICovCisJaWYgKHZhcl9zdGF0ZS5yYW5nZV9zaXplayAhPSAwKQorCQlyYW5nZV90b19tdHJyX3dpdGhfaG9sZSgmdmFyX3N0YXRlLCAwLCAwKTsKKworCW51bV9yZWcgPSB2YXJfc3RhdGUucmVnOworCS8qIENsZWFyIG91dCB0aGUgZXh0cmEgTVRSUidzICovCisJd2hpbGUgKHZhcl9zdGF0ZS5yZWcgPCBudW1fdmFyX3JhbmdlcykgeworCQlzYXZlX3Zhcl9tdHJyKHZhcl9zdGF0ZS5yZWcsIDAsIDAsIDApOworCQl2YXJfc3RhdGUucmVnKys7CisJfQorCisJcmV0dXJuIG51bV9yZWc7Cit9CisKK3N0cnVjdCBtdHJyX2NsZWFudXBfcmVzdWx0IHsKKwl1bnNpZ25lZCBsb25nIGdyYW5fc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBjaHVua19zaXplazsKKwl1bnNpZ25lZCBsb25nIGxvc2VfY292ZXJfc2l6ZWs7CisJdW5zaWduZWQgaW50IG51bV9yZWc7CisJaW50IGJhZDsKK307CisKKy8qCisgKiBncmFuX3NpemU6IDY0SywgMTI4SywgMjU2SywgNTEySywgMU0sIDJNLCAuLi4sIDJHCisgKiBjaHVuayBzaXplOiBncmFuX3NpemUsIC4uLiwgMkcKKyAqIHNvIHdlIG5lZWQgKDErMTYpKjgKKyAqLworI2RlZmluZSBOVU1fUkVTVUxUCTEzNgorI2RlZmluZSBQU0hJRlQJCShQQUdFX1NISUZUIC0gMTApCisKK3N0YXRpYyBzdHJ1Y3QgbXRycl9jbGVhbnVwX3Jlc3VsdCBfX2luaXRkYXRhIHJlc3VsdFtOVU1fUkVTVUxUXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWluX2xvc3NfcGZuW1JBTkdFX05VTV07CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSh2b2lkKQoreworCWludCBpOworCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2Jhc2UsIHNpemVfYmFzZTsKKwltdHJyX3R5cGUgdHlwZTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisKKwkJc2l6ZV9iYXNlID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJCWlmICghc2l6ZV9iYXNlKQorCQkJY29udGludWU7CisKKwkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZV9iYXNlLCAmc2l6ZV9mYWN0b3IpLAorCQlzdGFydF9iYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzdGFydF9iYXNlLCAmc3RhcnRfZmFjdG9yKSwKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlZyAlZCwgYmFzZTogJWxkJWNCLCByYW5nZTogJWxkJWNCLCB0eXBlICVzXG4iLAorCQkJaSwgc3RhcnRfYmFzZSwgc3RhcnRfZmFjdG9yLAorCQkJc2l6ZV9iYXNlLCBzaXplX2ZhY3RvciwKKwkJCSh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKSA/ICJVQyIgOgorCQkJICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JQUk9UKSA/ICJXUCIgOgorCQkJICAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSQkFDSykgPyAiV0IiIDogIk90aGVyIikpCisJCQkpOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgbXRycl9uZWVkX2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKwltdHJyX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJLyogZXh0cmEgb25lIGZvciBhbGwgMCAqLworCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKKworCS8qIGNoZWNrIGVudHJpZXMgbnVtYmVyICovCisJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47CisJCWlmICh0eXBlID49IE1UUlJfTlVNX1RZUEVTKQorCQkJY29udGludWU7CisJCWlmICghc2l6ZSkKKwkJCXR5cGUgPSBNVFJSX05VTV9UWVBFUzsKKwkJaWYgKHR5cGUgPT0gTVRSUl9UWVBFX1dSUFJPVCkKKwkJCXR5cGUgPSBNVFJSX1RZUEVfVU5DQUNIQUJMRTsKKwkJbnVtW3R5cGVdKys7CisJfQorCisJLyogY2hlY2sgaWYgd2UgZ290IFVDIGVudHJpZXMgKi8KKwlpZiAoIW51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0pCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCisJaWYgKG51bVtNVFJSX1RZUEVfV1JCQUNLXSArIG51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0gIT0KKwkJbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJhbmdlX3N1bXM7CitzdGF0aWMgdm9pZCBfX2luaXQgbXRycl9jYWxjX3JhbmdlX3N0YXRlKHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplLAorCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX3NpemUsCisJCQkJCSBpbnQgaSkKK3sKKwlpbnQgbnVtX3JlZzsKKwlzdGF0aWMgc3RydWN0IHJlc19yYW5nZSByYW5nZV9uZXdbUkFOR0VfTlVNXTsKKwlzdGF0aWMgaW50IG5yX3JhbmdlX25ldzsKKwl1bnNpZ25lZCBsb25nIHJhbmdlX3N1bXNfbmV3OworCisJLyogY29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZSAqLworCW51bV9yZWcgPSB4ODZfc2V0dXBfdmFyX210cnJzKHJhbmdlLCBucl9yYW5nZSwKKwkJCQkJCWNodW5rX3NpemUsIGdyYW5fc2l6ZSk7CisKKwkvKiB3ZSBnb3QgbmV3IHNldHRpbmcgaW4gcmFuZ2Vfc3RhdGUsIGNoZWNrIGl0ICovCisJbWVtc2V0KHJhbmdlX25ldywgMCwgc2l6ZW9mKHJhbmdlX25ldykpOworCW5yX3JhbmdlX25ldyA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2VfbmV3LCAwLAorCQkJCWV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSk7CisJcmFuZ2Vfc3Vtc19uZXcgPSBzdW1fcmFuZ2VzKHJhbmdlX25ldywgbnJfcmFuZ2VfbmV3KTsKKworCXJlc3VsdFtpXS5jaHVua19zaXplayA9IGNodW5rX3NpemUgPj4gMTA7CisJcmVzdWx0W2ldLmdyYW5fc2l6ZWsgPSBncmFuX3NpemUgPj4gMTA7CisJcmVzdWx0W2ldLm51bV9yZWcgPSBudW1fcmVnOworCWlmIChyYW5nZV9zdW1zIDwgcmFuZ2Vfc3Vtc19uZXcpIHsKKwkJcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWsgPQorCQkJKHJhbmdlX3N1bXNfbmV3IC0gcmFuZ2Vfc3VtcykgPDwgUFNISUZUOworCQlyZXN1bHRbaV0uYmFkID0gMTsKKwl9IGVsc2UKKwkJcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWsgPQorCQkJKHJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldykgPDwgUFNISUZUOworCisJLyogZG91YmxlIGNoZWNrIGl0ICovCisJaWYgKCFyZXN1bHRbaV0uYmFkICYmICFyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaykgeworCQlpZiAobnJfcmFuZ2VfbmV3ICE9IG5yX3JhbmdlIHx8CisJCQltZW1jbXAocmFuZ2UsIHJhbmdlX25ldywgc2l6ZW9mKHJhbmdlKSkpCisJCQkJcmVzdWx0W2ldLmJhZCA9IDE7CisJfQorCisJaWYgKCFyZXN1bHRbaV0uYmFkICYmIChyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcgPAorCQkJCW1pbl9sb3NzX3BmbltudW1fcmVnXSkpIHsKKwkJbWluX2xvc3NfcGZuW251bV9yZWddID0KKwkJCXJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGludCBpKQoreworCWNoYXIgZ3Jhbl9mYWN0b3IsIGNodW5rX2ZhY3RvciwgbG9zZV9mYWN0b3I7CisJdW5zaWduZWQgbG9uZyBncmFuX2Jhc2UsIGNodW5rX2Jhc2UsIGxvc2VfYmFzZTsKKworCWdyYW5fYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5ncmFuX3NpemVrLCAmZ3Jhbl9mYWN0b3IpLAorCWNodW5rX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uY2h1bmtfc2l6ZWssICZjaHVua19mYWN0b3IpLAorCWxvc2VfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrLCAmbG9zZV9mYWN0b3IpLAorCXByaW50ayhLRVJOX0lORk8gIiVzZ3Jhbl9zaXplOiAlbGQlYyBcdGNodW5rX3NpemU6ICVsZCVjIFx0IiwKKwkJCXJlc3VsdFtpXS5iYWQgPyAiKkJBRCoiIDogIiAiLAorCQkJZ3Jhbl9iYXNlLCBncmFuX2ZhY3RvciwgY2h1bmtfYmFzZSwgY2h1bmtfZmFjdG9yKTsKKwlwcmludGsoS0VSTl9DT05UICJudW1fcmVnOiAlZCAgXHRsb3NlIGNvdmVyIFJBTTogJXMlbGQlY1xuIiwKKwkJCXJlc3VsdFtpXS5udW1fcmVnLCByZXN1bHRbaV0uYmFkID8gIi0iIDogIiIsCisJCQlsb3NlX2Jhc2UsIGxvc2VfZmFjdG9yKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXRycl9zZWFyY2hfb3B0aW1hbF9pbmRleCh2b2lkKQoreworCWludCBpOworCWludCBudW1fcmVnX2dvb2Q7CisJaW50IGluZGV4X2dvb2Q7CisKKwlpZiAobnJfbXRycl9zcGFyZV9yZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCisJCW5yX210cnJfc3BhcmVfcmVnID0gbnVtX3Zhcl9yYW5nZXMgLSAxOworCW51bV9yZWdfZ29vZCA9IC0xOworCWZvciAoaSA9IG51bV92YXJfcmFuZ2VzIC0gbnJfbXRycl9zcGFyZV9yZWc7IGkgPiAwOyBpLS0pIHsKKwkJaWYgKCFtaW5fbG9zc19wZm5baV0pCisJCQludW1fcmVnX2dvb2QgPSBpOworCX0KKworCWluZGV4X2dvb2QgPSAtMTsKKwlpZiAobnVtX3JlZ19nb29kICE9IC0xKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVTVUxUOyBpKyspIHsKKwkJCWlmICghcmVzdWx0W2ldLmJhZCAmJgorCQkJICAgIHJlc3VsdFtpXS5udW1fcmVnID09IG51bV9yZWdfZ29vZCAmJgorCQkJICAgICFyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaykgeworCQkJCWluZGV4X2dvb2QgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGluZGV4X2dvb2Q7Cit9CisKKworaW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQoreworCXVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplOworCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZSwgZGVmLCBkdW1teTsKKwltdHJyX3R5cGUgdHlwZTsKKwl1NjQgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplOworCWludCBpbmRleF9nb29kOworCWludCBpOworCisJaWYgKCFpc19jcHUoSU5URUwpIHx8IGVuYWJsZV9tdHJyX2NsZWFudXAgPCAxKQorCQlyZXR1cm4gMDsKKwlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOworCWRlZiAmPSAweGZmOworCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCisJCXJldHVybiAwOworCisJLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLworCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOworCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7CisJCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKKwkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7CisJfQorCisJLyogY2hlY2sgaWYgd2UgbmVlZCBoYW5kbGUgaXQgYW5kIGNhbiBoYW5kbGUgaXQgKi8KKwlpZiAoIW10cnJfbmVlZF9jbGVhbnVwKCkpCisJCXJldHVybiAwOworCisJLyogcHJpbnQgb3JpZ2luYWwgdmFyIE1UUlJzIGF0IGZpcnN0LCBmb3IgZGVidWdnaW5nOiAqLworCXByaW50ayhLRVJOX0RFQlVHICJvcmlnaW5hbCB2YXJpYWJsZSBNVFJSc1xuIik7CisJcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUoKTsKKworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7CisJZXh0cmFfcmVtb3ZlX3NpemUgPSAwOworCWV4dHJhX3JlbW92ZV9iYXNlID0gMSA8PCAoMzIgLSBQQUdFX1NISUZUKTsKKwlpZiAobXRycl90b20yKQorCQlleHRyYV9yZW1vdmVfc2l6ZSA9CisJCQkobXRycl90b20yID4+IFBBR0VfU0hJRlQpIC0gZXh0cmFfcmVtb3ZlX2Jhc2U7CisJbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCAwLCBleHRyYV9yZW1vdmVfYmFzZSwKKwkJCQkJICBleHRyYV9yZW1vdmVfc2l6ZSk7CisJLyoKKwkgKiBbMCwgMU0pIHNob3VsZCBhbHdheXMgYmUgY292ZXJyZWQgYnkgdmFyIG10cnIgd2l0aCBXQgorCSAqIGFuZCBmaXhlZCBtdHJycyBzaG91bGQgdGFrZSBlZmZlY3RpdmUgYmVmb3JlIHZhciBtdHJyIGZvciBpdAorCSAqLworCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLAorCQkJCQkoMVVMTDw8KDIwIC0gUEFHRV9TSElGVCkpIC0gMSk7CisJLyogc29ydCB0aGUgcmFuZ2VzICovCisJc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKKworCXJhbmdlX3N1bXMgPSBzdW1fcmFuZ2VzKHJhbmdlLCBucl9yYW5nZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAidG90YWwgUkFNIGNvdmVycmVkOiAlbGRNXG4iLAorCSAgICAgICByYW5nZV9zdW1zID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKKworCWlmIChtdHJyX2NodW5rX3NpemUgJiYgbXRycl9ncmFuX3NpemUpIHsKKwkJaSA9IDA7CisJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShtdHJyX2NodW5rX3NpemUsIG10cnJfZ3Jhbl9zaXplLAorCQkJCSAgICAgIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSwgaSk7CisKKwkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKworCQlpZiAoIXJlc3VsdFtpXS5iYWQpIHsKKwkJCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJOZXcgdmFyaWFibGUgTVRSUnNcbiIpOworCQkJcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUoKTsKKwkJCXJldHVybiAxOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gImludmFsaWQgbXRycl9ncmFuX3NpemUgb3IgbXRycl9jaHVua19zaXplLCAiCisJCSAgICAgICAid2lsbCBmaW5kIG9wdGltYWwgb25lXG4iKTsKKwl9CisKKwlpID0gMDsKKwltZW1zZXQobWluX2xvc3NfcGZuLCAweGZmLCBzaXplb2YobWluX2xvc3NfcGZuKSk7CisJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworCWZvciAoZ3Jhbl9zaXplID0gKDFVTEw8PDE2KTsgZ3Jhbl9zaXplIDwgKDFVTEw8PDMyKTsgZ3Jhbl9zaXplIDw8PSAxKSB7CisKKwkJZm9yIChjaHVua19zaXplID0gZ3Jhbl9zaXplOyBjaHVua19zaXplIDwgKDFVTEw8PDMyKTsKKwkJICAgICBjaHVua19zaXplIDw8PSAxKSB7CisKKwkJCWlmIChpID49IE5VTV9SRVNVTFQpCisJCQkJY29udGludWU7CisKKwkJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShjaHVua19zaXplLCBncmFuX3NpemUsCisJCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKKwkJCWlmIChkZWJ1Z19wcmludCkgeworCQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKKwkJCX0KKworCQkJaSsrOworCQl9CisJfQorCisJLyogdHJ5IHRvIGZpbmQgdGhlIG9wdGltYWwgaW5kZXggKi8KKwlpbmRleF9nb29kID0gbXRycl9zZWFyY2hfb3B0aW1hbF9pbmRleCgpOworCisJaWYgKGluZGV4X2dvb2QgIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgb3B0aW1hbCBzZXR0aW5nIGZvciBtdHJyIGNsZWFuIHVwXG4iKTsKKwkJaSA9IGluZGV4X2dvb2Q7CisJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CisKKwkJLyogY29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZSAqLworCQljaHVua19zaXplID0gcmVzdWx0W2ldLmNodW5rX3NpemVrOworCQljaHVua19zaXplIDw8PSAxMDsKKwkJZ3Jhbl9zaXplID0gcmVzdWx0W2ldLmdyYW5fc2l6ZWs7CisJCWdyYW5fc2l6ZSA8PD0gMTA7CisJCXg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLCBjaHVua19zaXplLCBncmFuX3NpemUpOworCQlzZXRfdmFyX210cnJfYWxsKGFkZHJlc3NfYml0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOZXcgdmFyaWFibGUgTVRSUnNcbiIpOworCQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKiBwcmludCBvdXQgYWxsICovCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVTVUxUOyBpKyspCisJCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIm10cnJfY2xlYW51cDogY2FuIG5vdCBmaW5kIG9wdGltYWwgdmFsdWVcbiIpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSBzcGVjaWZ5IG10cnJfZ3Jhbl9zaXplL210cnJfY2h1bmtfc2l6ZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkaXNhYmxlX210cnJfdHJpbTsKKworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXAoY2hhciAqc3RyKQoreworCWRpc2FibGVfbXRycl90cmltID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfdHJpbSIsIGRpc2FibGVfbXRycl90cmltX3NldHVwKTsKKworLyoKKyAqIE5ld2VyIEFNRCBLOHMgYW5kIGxhdGVyIENQVXMgaGF2ZSBhIHNwZWNpYWwgbWFnaWMgTVNSIHdheSB0byBmb3JjZSBXQgorICogZm9yIG1lbW9yeSA+NEdCLiBDaGVjayBmb3IgdGhhdCBoZXJlLgorICogTm90ZSB0aGlzIHdvbid0IGNoZWNrIGlmIHRoZSBNVFJScyA8IDRHQiB3aGVyZSB0aGUgbWFnaWMgYml0IGRvZXNuJ3QKKyAqIGFwcGx5IHRvIGFyZSB3cm9uZywgYnV0IHNvIGZhciB3ZSBkb24ndCBrbm93IG9mIGFueSBzdWNoIGNhc2UgaW4gdGhlIHdpbGQuCisgKi8KKyNkZWZpbmUgVG9tMkVuYWJsZWQgKDFVIDw8IDIxKQorI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IgKDFVIDw8IDIyKQorCitpbnQgX19pbml0IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKQoreworCXUzMiBsLCBoOworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKKwkJcmV0dXJuIDA7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgMHhmIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxMSkKKwkJcmV0dXJuIDA7CisJLyogSW4gY2FzZSBzb21lIGh5cGVydmlzb3IgZG9lc24ndCBwYXNzIFNZU0NGRyB0aHJvdWdoICovCisJaWYgKHJkbXNyX3NhZmUoTVNSX0s4X1NZU0NGRywgJmwsICZoKSA8IDApCisJCXJldHVybiAwOworCS8qCisJICogTWVtb3J5IGJldHdlZW4gNEdCIGFuZCB0b3Agb2YgbWVtIGlzIGZvcmNlZCBXQiBieSB0aGlzIG1hZ2ljIGJpdC4KKwkgKiBSZXNlcnZlZCBiZWZvcmUgSzhSZXZGLCBidXQgc2hvdWxkIGJlIHplcm8gdGhlcmUuCisJICovCisJaWYgKChsICYgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkgPT0KKwkJIChUb20yRW5hYmxlZCB8IFRvbTJGb3JjZU1lbVR5cGVXQikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IF9faW5pdCByZWFsX3RyaW1fbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKQoreworCXU2NCB0cmltX3N0YXJ0LCB0cmltX3NpemU7CisJdHJpbV9zdGFydCA9IHN0YXJ0X3BmbjsKKwl0cmltX3N0YXJ0IDw8PSBQQUdFX1NISUZUOworCXRyaW1fc2l6ZSA9IGxpbWl0X3BmbjsKKwl0cmltX3NpemUgPDw9IFBBR0VfU0hJRlQ7CisJdHJpbV9zaXplIC09IHRyaW1fc3RhcnQ7CisKKwlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2UodHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JBTSwKKwkJCQlFODIwX1JFU0VSVkVEKTsKK30KKy8qKgorICogbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSAtIHRyaW0gUkFNIG5vdCBjb3ZlcmVkIGJ5IE1UUlJzCisgKiBAZW5kX3BmbjogZW5kaW5nIHBhZ2UgZnJhbWUgbnVtYmVyCisgKgorICogU29tZSBidWdneSBCSU9TZXMgZG9uJ3Qgc2V0dXAgdGhlIE1UUlJzIHByb3Blcmx5IGZvciBzeXN0ZW1zIHdpdGggY2VydGFpbgorICogbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiAgVGhpcyByb3V0aW5lIGNoZWNrcyB0aGF0IHRoZSBoaWdoZXN0IE1UUlIgbWF0Y2hlcworICogdGhlIGVuZCBvZiBtZW1vcnksIHRvIG1ha2Ugc3VyZSB0aGUgTVRSUnMgaGF2aW5nIGEgd3JpdGUgYmFjayB0eXBlIGNvdmVyCisgKiBhbGwgb2YgdGhlIG1lbW9yeSB0aGUga2VybmVsIGlzIGludGVuZGluZyB0byB1c2UuIElmIG5vdCwgaXQnbGwgdHJpbSBhbnkKKyAqIG1lbW9yeSBvZmYgdGhlIGVuZCBieSBhZGp1c3RpbmcgZW5kX3BmbiwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUga2VybmVsJ3MKKyAqIGFsbG9jYXRpb24gcG9vbHMsIHdhcm5pbmcgdGhlIHVzZXIgd2l0aCBhbiBvYm5veGlvdXMgbWVzc2FnZS4KKyAqLworaW50IF9faW5pdCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKK3sKKwl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemUsIGhpZ2hlc3RfcGZuID0gMCwgZGVmLCBkdW1teTsKKwltdHJyX3R5cGUgdHlwZTsKKwl1NjQgdG90YWxfdHJpbV9zaXplOworCisJLyogZXh0cmEgb25lIGZvciBhbGwgMCAqLworCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IHRyaW0gdW5jYWNoYWJsZSBtZW1vcnkgb24gbWFjaGluZXMgdGhhdAorCSAqIHN1cHBvcnQgdGhlIEludGVsIE1UUlIgYXJjaGl0ZWN0dXJlOgorCSAqLworCWlmICghaXNfY3B1KElOVEVMKSB8fCBkaXNhYmxlX210cnJfdHJpbSkKKwkJcmV0dXJuIDA7CisJcmRtc3IoTVRSUmRlZlR5cGVfTVNSLCBkZWYsIGR1bW15KTsKKwlkZWYgJj0gMHhmZjsKKwlpZiAoZGVmICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQorCQlyZXR1cm4gMDsKKworCS8qIGdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGUgKi8KKwltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKKwkJcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm4gPSBiYXNlOworCQlyYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA9IHNpemU7CisJCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOworCX0KKworCS8qIEZpbmQgaGlnaGVzdCBjYWNoZWQgcGZuICovCisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCisJCQljb250aW51ZTsKKwkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOworCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47CisJCWlmIChoaWdoZXN0X3BmbiA8IGJhc2UgKyBzaXplKQorCQkJaGlnaGVzdF9wZm4gPSBiYXNlICsgc2l6ZTsKKwl9CisKKwkvKiBrdm0vcWVtdSBkb2Vzbid0IGhhdmUgbXRyciBzZXQgcmlnaHQsIGRvbid0IHRyaW0gdGhlbSBhbGwgKi8KKwlpZiAoIWhpZ2hlc3RfcGZuKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVSBNVFJScyBhbGwgYmxhbmsgLSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KKwltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCWlmICh0eXBlID49IE1UUlJfTlVNX1RZUEVTKQorCQkJY29udGludWU7CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKCFzaXplKQorCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOworCQludW1bdHlwZV0rKzsKKwl9CisKKwkvKiBubyBlbnRyeSBmb3IgV0I/ICovCisJaWYgKCFudW1bTVRSUl9UWVBFX1dSQkFDS10pCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCisJaWYgKG51bVtNVFJSX1RZUEVfV1JCQUNLXSArIG51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0gIT0KKwkJbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQorCQlyZXR1cm4gMDsKKworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7CisJbnJfcmFuZ2UgPSAwOworCWlmIChtdHJyX3RvbTIpIHsKKwkJcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gKDFVTEw8PCgzMiAtIFBBR0VfU0hJRlQpKTsKKwkJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IChtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSAxOworCQlpZiAoaGlnaGVzdF9wZm4gPCByYW5nZVtucl9yYW5nZV0uZW5kICsgMSkKKwkJCWhpZ2hlc3RfcGZuID0gcmFuZ2VbbnJfcmFuZ2VdLmVuZCArIDE7CisJCW5yX3JhbmdlKys7CisJfQorCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIDAsIDApOworCisJdG90YWxfdHJpbV9zaXplID0gMDsKKwkvKiBjaGVjayB0aGUgaGVhZCAqLworCWlmIChyYW5nZVswXS5zdGFydCkKKwkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkoMCwgcmFuZ2VbMF0uc3RhcnQpOworCS8qIGNoZWNrIHRoZSBob2xlcyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgeworCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCisJCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAorCQkJCQkJCSAgICByYW5nZVtpKzFdLnN0YXJ0KTsKKwl9CisJLyogY2hlY2sgdGhlIHRvcCAqLworCWkgPSBucl9yYW5nZSAtIDE7CisJaWYgKHJhbmdlW2ldLmVuZCArIDEgPCBlbmRfcGZuKQorCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAorCQkJCQkJCSBlbmRfcGZuKTsKKworCWlmICh0b3RhbF90cmltX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQklPUyBidWc6IENQVSBNVFJScyBkb24ndCBjb3ZlciIKKwkJCSIgYWxsIG9mIG1lbW9yeSwgbG9zaW5nICVsbHVNQiBvZiBSQU0uXG4iLAorCQkJdG90YWxfdHJpbV9zaXplID4+IDIwKTsKKworCQlpZiAoIWNoYW5nZWRfYnlfbXRycl9jbGVhbnVwKQorCQkJV0FSTl9PTigxKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgbXRyclxuIik7CisJCXVwZGF0ZV9lODIwKCk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDBjMGE0NTUuLjM3ZjI4ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwpAQCAtMzMsMTMgKzMzLDMxIEBACiBzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGUgPSB7fTsKIEVYUE9SVF9TWU1CT0xfR1BMKG10cnJfc3RhdGUpOwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgbXRycl9zaG93Owotc3RhdGljIGludCBfX2luaXQgbXRycl9kZWJ1ZyhjaGFyICpvcHQpCisvKioKKyAqIEJJT1MgaXMgZXhwZWN0ZWQgdG8gY2xlYXIgTXRyckZpeERyYW1Nb2RFbiBiaXQsIHNlZSBmb3IgZXhhbXBsZQorICogIkJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgdGhlIEFNRCBBdGhsb24gNjQgYW5kIEFNRAorICogT3B0ZXJvbiBQcm9jZXNzb3JzIiAoMjYwOTQgUmV2LiAzLjMwIEZlYnJ1YXJ5IDIwMDYpLCBzZWN0aW9uCisgKiAiMTMuMi4xLjIgU1lTQ0ZHIFJlZ2lzdGVyIjogIlRoZSBNdHJyRml4RHJhbU1vZEVuIGJpdCBzaG91bGQgYmUgc2V0CisgKiB0byAxIGR1cmluZyBCSU9TIGluaXRhbGl6YXRpb24gb2YgdGhlIGZpeGVkIE1UUlJzLCB0aGVuIGNsZWFyZWQgdG8KKyAqIDAgZm9yIG9wZXJhdGlvbi4iCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZCkKIHsKLQltdHJyX3Nob3cgPSAxOwotCXJldHVybiAwOworCXUzMiBsbywgaGk7CisKKwlpZiAoISgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJgorCSAgICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweDBmKSkpCisJCXJldHVybjsKKworCXJkbXNyKE1TUl9LOF9TWVNDRkcsIGxvLCBoaSk7CisJaWYgKGxvICYgSzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZKSB7CisJCXByaW50ayhLRVJOX0VSUiBGV19XQVJOICJNVFJSOiBDUFUgJXU6IFNZU0NGR1tNdHJyRml4RHJhbU1vZEVuXSIKKwkJICAgICAgICIgbm90IGNsZWFyZWQgYnkgQklPUywgY2xlYXJpbmcgdGhpcyBiaXRcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlsbyAmPSB+SzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZOworCQltdHJyX3dybXNyKE1TUl9LOF9TWVNDRkcsIGxvLCBoaSk7CisJfQogfQotZWFybHlfcGFyYW0oIm10cnIuc2hvdyIsIG10cnJfZGVidWcpOwogCiAvKgogICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIE1UUlIgdHlwZSBmb3IgdGhlIHJlZ2lvbgpAQCAtMTc0LDYgKzE5Miw4IEBACiAJdW5zaWduZWQgaW50ICpwID0gKHVuc2lnbmVkIGludCAqKSBmcnM7CiAJaW50IGk7CiAKKwlrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4oKTsKKwogCXJkbXNyKE1UUlJmaXg2NEtfMDAwMDBfTVNSLCBwWzBdLCBwWzFdKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCkBAIC0xODgsMTggKzIwOCw5NCBAQAogCQlnZXRfZml4ZWRfcmFuZ2VzKG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfZml4ZWQodW5zaWduZWQgYmFzZSwgdW5zaWduZWQgc3RlcCwgY29uc3QgbXRycl90eXBlKnR5cGVzKQorc3RhdGljIHVuc2lnbmVkIF9faW5pdGRhdGEgbGFzdF9maXhlZF9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBfX2luaXRkYXRhIGxhc3RfZml4ZWRfZW5kOworc3RhdGljIG10cnJfdHlwZSBfX2luaXRkYXRhIGxhc3RfZml4ZWRfdHlwZTsKKworc3RhdGljIHZvaWQgX19pbml0IHByaW50X2ZpeGVkX2xhc3Qodm9pZCkKK3sKKwlpZiAoIWxhc3RfZml4ZWRfZW5kKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiICAlMDVYLSUwNVggJXNcbiIsIGxhc3RfZml4ZWRfc3RhcnQsCisJCWxhc3RfZml4ZWRfZW5kIC0gMSwgbXRycl9hdHRyaWJfdG9fc3RyKGxhc3RfZml4ZWRfdHlwZSkpOworCisJbGFzdF9maXhlZF9lbmQgPSAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX2ZpeGVkX2xhc3QodW5zaWduZWQgYmFzZSwgdW5zaWduZWQgZW5kLAorCQkJCSAgICAgICBtdHJyX3R5cGUgdHlwZSkKK3sKKwlsYXN0X2ZpeGVkX3N0YXJ0ID0gYmFzZTsKKwlsYXN0X2ZpeGVkX2VuZCA9IGVuZDsKKwlsYXN0X2ZpeGVkX3R5cGUgPSB0eXBlOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZml4ZWQodW5zaWduZWQgYmFzZSwgdW5zaWduZWQgc3RlcCwKKwkJCSAgICAgICBjb25zdCBtdHJyX3R5cGUgKnR5cGVzKQogewogCXVuc2lnbmVkIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpLCArK3R5cGVzLCBiYXNlICs9IHN0ZXApCi0JCXByaW50ayhLRVJOX0lORk8gIk1UUlIgJTA1WC0lMDVYICVzXG4iLAotCQkJYmFzZSwgYmFzZSArIHN0ZXAgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIoKnR5cGVzKSk7CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSwgKyt0eXBlcywgYmFzZSArPSBzdGVwKSB7CisJCWlmIChsYXN0X2ZpeGVkX2VuZCA9PSAwKSB7CisJCQl1cGRhdGVfZml4ZWRfbGFzdChiYXNlLCBiYXNlICsgc3RlcCwgKnR5cGVzKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsYXN0X2ZpeGVkX2VuZCA9PSBiYXNlICYmIGxhc3RfZml4ZWRfdHlwZSA9PSAqdHlwZXMpIHsKKwkJCWxhc3RfZml4ZWRfZW5kID0gYmFzZSArIHN0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBuZXcgc2VnbWVudHM6IGdhcCBvciBkaWZmZXJlbnQgdHlwZSAqLworCQlwcmludF9maXhlZF9sYXN0KCk7CisJCXVwZGF0ZV9maXhlZF9sYXN0KGJhc2UsIGJhc2UgKyBzdGVwLCAqdHlwZXMpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcHJlcGFyZV9zZXQodm9pZCk7CiBzdGF0aWMgdm9pZCBwb3N0X3NldCh2b2lkKTsKIAorc3RhdGljIHZvaWQgX19pbml0IHByaW50X210cnJfc3RhdGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgaGlnaF93aWR0aDsKKworCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIGRlZmF1bHQgdHlwZTogJXNcbiIsCisJCQkgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUuZGVmX3R5cGUpKTsKKwlpZiAobXRycl9zdGF0ZS5oYXZlX2ZpeGVkKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIGZpeGVkIHJhbmdlcyAlc2FibGVkOlxuIiwKKwkJICAgICAgIG10cnJfc3RhdGUuZW5hYmxlZCAmIDEgPyAiZW4iIDogImRpcyIpOworCQlwcmludF9maXhlZCgweDAwMDAwLCAweDEwMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIDApOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQkJcHJpbnRfZml4ZWQoMHg4MDAwMCArIGkgKiAweDIwMDAwLCAweDA0MDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMSkgKiA4KTsKKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCXByaW50X2ZpeGVkKDB4QzAwMDAgKyBpICogMHgwODAwMCwgMHgwMTAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDMpICogOCk7CisKKwkJLyogdGFpbCAqLworCQlwcmludF9maXhlZF9sYXN0KCk7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIHZhcmlhYmxlIHJhbmdlcyAlc2FibGVkOlxuIiwKKwkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMiA/ICJlbiIgOiAiZGlzIik7CisJaGlnaF93aWR0aCA9ICgoc2l6ZV9vcl9tYXNrID8gZmZzKHNpemVfb3JfbWFzaykgLSAxIDogMzIpIC0gKDMyIC0gUEFHRV9TSElGVCkgKyAzKSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyArK2kpIHsKKwkJaWYgKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvICYgKDEgPDwgMTEpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXUgYmFzZSAlMCpYJTA1WDAwMCBtYXNrICUwKlglMDVYMDAwICVzXG4iLAorCQkJICAgICAgIGksCisJCQkgICAgICAgaGlnaF93aWR0aCwKKwkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9oaSwKKwkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyA+PiAxMiwKKwkJCSAgICAgICBoaWdoX3dpZHRoLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2hpLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvID4+IDEyLAorCQkJICAgICAgIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyAmIDB4ZmYpKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXUgZGlzYWJsZWRcbiIsIGkpOworCX0KKwlpZiAobXRycl90b20yKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJUT00yOiAlMDE2bGx4IGFrYSAlbGxkTVxuIiwKKwkJCQkgIG10cnJfdG9tMiwgbXRycl90b20yPj4yMCk7CisJfQorfQorCiAvKiAgR3JhYiBhbGwgb2YgdGhlIE1UUlIgc3RhdGUgZm9yIHRoaXMgQ1BVIGludG8gKnN0YXRlICAqLwogdm9pZCBfX2luaXQgZ2V0X210cnJfc3RhdGUodm9pZCkKIHsKQEAgLTIzMSw0MSArMzI3LDkgQEAKIAkJbXRycl90b20yIHw9IGxvdzsKIAkJbXRycl90b20yICY9IDB4ZmZmZmZmODAwMDAwVUxMOwogCX0KLQlpZiAobXRycl9zaG93KSB7Ci0JCWludCBoaWdoX3dpZHRoOwogCi0JCXByaW50ayhLRVJOX0lORk8gIk1UUlIgZGVmYXVsdCB0eXBlOiAlc1xuIiwgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUuZGVmX3R5cGUpKTsKLQkJaWYgKG10cnJfc3RhdGUuaGF2ZV9maXhlZCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiBmaXhlZCByYW5nZXMgJXNhYmxlZDpcbiIsCi0JCQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMSA/ICJlbiIgOiAiZGlzIik7Ci0JCQlwcmludF9maXhlZCgweDAwMDAwLCAweDEwMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIDApOwotCQkJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKLQkJCQlwcmludF9maXhlZCgweDgwMDAwICsgaSAqIDB4MjAwMDAsIDB4MDQwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAxKSAqIDgpOwotCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLQkJCQlwcmludF9maXhlZCgweEMwMDAwICsgaSAqIDB4MDgwMDAsIDB4MDEwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAzKSAqIDgpOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIk1UUlIgdmFyaWFibGUgcmFuZ2VzICVzYWJsZWQ6XG4iLAotCQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMiA/ICJlbiIgOiAiZGlzIik7Ci0JCWhpZ2hfd2lkdGggPSAoKHNpemVfb3JfbWFzayA/IGZmcyhzaXplX29yX21hc2spIC0gMSA6IDMyKSAtICgzMiAtIFBBR0VfU0hJRlQpICsgMykgLyA0OwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgewotCQkJaWYgKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvICYgKDEgPDwgMTEpKQotCQkJCXByaW50ayhLRVJOX0lORk8gIk1UUlIgJXUgYmFzZSAlMCpYJTA1WDAwMCBtYXNrICUwKlglMDVYMDAwICVzXG4iLAotCQkJCSAgICAgICBpLAotCQkJCSAgICAgICBoaWdoX3dpZHRoLAotCQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9oaSwKLQkJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gPj4gMTIsCi0JCQkJICAgICAgIGhpZ2hfd2lkdGgsCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2hpLAotCQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyA+PiAxMiwKLQkJCQkgICAgICAgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgMHhmZikpOwotCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX0lORk8gIk1UUlIgJXUgZGlzYWJsZWRcbiIsIGkpOwotCQl9Ci0JCWlmIChtdHJyX3RvbTIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIlRPTTI6ICUwMTZsbHggYWthICVsbGRNXG4iLAotCQkJCQkgIG10cnJfdG9tMiwgbXRycl90b20yPj4yMCk7Ci0JCX0KLQl9CisJcHJpbnRfbXRycl9zdGF0ZSgpOworCiAJbXRycl9zdGF0ZV9zZXQgPSAxOwogCiAJLyogUEFUIHNldHVwIGZvciBCUC4gV2UgbmVlZCB0byBnbyB0aHJvdWdoIHN5bmMgc3RlcHMgaGVyZSAqLwpAQCAtMzA4LDI3ICszNzIsMTAgQEAKIH0KIAogLyoqCi0gKiBFbmFibGUgYW5kIGFsbG93IHJlYWQvd3JpdGUgb2YgZXh0ZW5kZWQgZml4ZWQtcmFuZ2UgTVRSUiBiaXRzIG9uIEs4IENQVXMKLSAqIHNlZSBBTUQgcHVibGljYXRpb24gbm8uIDI0NTkzLCBjaGFwdGVyIDMuMi4xIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9lbmFibGVfZml4ZWRfaW9ycnModm9pZCkKLXsKLQl1bnNpZ25lZCBsbywgaGk7Ci0KLQlyZG1zcihNU1JfSzhfU1lTQ0ZHLCBsbywgaGkpOwotCW10cnJfd3Jtc3IoTVNSX0s4X1NZU0NGRywgbG8KLQkJCQl8IEs4X01UUlJGSVhSQU5HRV9EUkFNX0VOQUJMRQotCQkJCXwgSzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZLCBoaSk7Ci19Ci0KLS8qKgogICogc2V0X2ZpeGVkX3JhbmdlIC0gY2hlY2tzICYgdXBkYXRlcyBhIGZpeGVkLXJhbmdlIE1UUlIgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB2YWx1ZSBpdCBzaG91bGQgaGF2ZQogICogQG1zcjogTVNSIGFkZHJlc3Mgb2YgdGhlIE1UVFIgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYW5kIHVwZGF0ZWQKICAqIEBjaGFuZ2VkOiBwb2ludGVyIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBNVFJSIG5lZWRlZCB0byBiZSBjaGFuZ2VkCiAgKiBAbXNyd29yZHM6IHBvaW50ZXIgdG8gdGhlIE1TUiB2YWx1ZXMgd2hpY2ggdGhlIE1TUiBzaG91bGQgaGF2ZQotICoKLSAqIElmIEs4IGV4dGVudGlvbnMgYXJlIHdhbnRlZCwgdXBkYXRlIHRoZSBLOCBTWVNDRkcgTVNSIGFsc28uCi0gKiBTZWUgQU1EIHB1YmxpY2F0aW9uIG5vLiAyNDU5MywgY2hhcHRlciA3LjguMSwgcGFnZSAyMzMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIHNldF9maXhlZF9yYW5nZShpbnQgbXNyLCBib29sICpjaGFuZ2VkLCB1bnNpZ25lZCBpbnQgKm1zcndvcmRzKQogewpAQCAtMzM3LDEwICszODQsNiBAQAogCXJkbXNyKG1zciwgbG8sIGhpKTsKIAogCWlmIChsbyAhPSBtc3J3b3Jkc1swXSB8fCBoaSAhPSBtc3J3b3Jkc1sxXSkgewotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgwZiAmJiBib290X2NwdV9kYXRhLng4NiA8PSAweDExKSAmJgotCQkgICAgKChtc3J3b3Jkc1swXSB8IG1zcndvcmRzWzFdKSAmIEs4X01UUlJfUkRNRU1fV1JNRU1fTUFTSykpCi0JCQlrOF9lbmFibGVfZml4ZWRfaW9ycnMoKTsKIAkJbXRycl93cm1zcihtc3IsIG1zcndvcmRzWzBdLCBtc3J3b3Jkc1sxXSk7CiAJCSpjaGFuZ2VkID0gdHJ1ZTsKIAl9CkBAIC0zNzYsMjIgKzQxOSwzMSBAQAogewogCXVuc2lnbmVkIGludCBtYXNrX2xvLCBtYXNrX2hpLCBiYXNlX2xvLCBiYXNlX2hpOwogCXVuc2lnbmVkIGludCB0bXAsIGhpOworCWludCBjcHU7CisKKwkvKgorCSAqIGdldF9tdHJyIGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUgbXRycl9zdGF0ZSwgYWxzbyBpdCBjb3VsZCBiZSBjYWxsZWQKKwkgKiBmcm9tIGFueSBjcHUsIHNvIHRyeSB0byBwcmludCBpdCBvdXQgZGlyZWN0bHkuCisJICovCisJY3B1ID0gZ2V0X2NwdSgpOwogCiAJcmRtc3IoTVRSUnBoeXNNYXNrX01TUihyZWcpLCBtYXNrX2xvLCBtYXNrX2hpKTsKKwogCWlmICgobWFza19sbyAmIDB4ODAwKSA9PSAwKSB7CiAJCS8qICBJbnZhbGlkIChpLmUuIGZyZWUpIHJhbmdlICAqLwogCQkqYmFzZSA9IDA7CiAJCSpzaXplID0gMDsKIAkJKnR5cGUgPSAwOwotCQlyZXR1cm47CisJCWdvdG8gb3V0X3B1dF9jcHU7CiAJfQogCiAJcmRtc3IoTVRSUnBoeXNCYXNlX01TUihyZWcpLCBiYXNlX2xvLCBiYXNlX2hpKTsKIAotCS8qIFdvcmsgb3V0IHRoZSBzaGlmdGVkIGFkZHJlc3MgbWFzay4gKi8KKwkvKiBXb3JrIG91dCB0aGUgc2hpZnRlZCBhZGRyZXNzIG1hc2s6ICovCiAJdG1wID0gbWFza19oaSA8PCAoMzIgLSBQQUdFX1NISUZUKSB8IG1hc2tfbG8gPj4gUEFHRV9TSElGVDsKIAltYXNrX2xvID0gc2l6ZV9vcl9tYXNrIHwgdG1wOwotCS8qIEV4cGFuZCB0bXAgd2l0aCBoaWdoIGJpdHMgdG8gYWxsIDFzKi8KKworCS8qIEV4cGFuZCB0bXAgd2l0aCBoaWdoIGJpdHMgdG8gYWxsIDFzOiAqLwogCWhpID0gZmxzKHRtcCk7CiAJaWYgKGhpID4gMCkgewogCQl0bXAgfD0gfigoMTw8KGhpIC0gMSkpIC0gMSk7CkBAIC00MDIsMTEgKzQ1NCwxOSBAQAogCQl9CiAJfQogCi0JLyogVGhpcyB3b3JrcyBjb3JyZWN0bHkgaWYgc2l6ZSBpcyBhIHBvd2VyIG9mIHR3bywgaS5lLiBhCi0JICAgY29udGlndW91cyByYW5nZS4gKi8KKwkvKgorCSAqIFRoaXMgd29ya3MgY29ycmVjdGx5IGlmIHNpemUgaXMgYSBwb3dlciBvZiB0d28sIGkuZS4gYQorCSAqIGNvbnRpZ3VvdXMgcmFuZ2U6CisJICovCiAJKnNpemUgPSAtbWFza19sbzsKIAkqYmFzZSA9IGJhc2VfaGkgPDwgKDMyIC0gUEFHRV9TSElGVCkgfCBiYXNlX2xvID4+IFBBR0VfU0hJRlQ7CiAJKnR5cGUgPSBiYXNlX2xvICYgMHhmZjsKKworCXByaW50ayhLRVJOX0RFQlVHICIgIGdldF9tdHJyOiBjcHUlZCByZWclMDJkIGJhc2U9JTAxMGx4IHNpemU9JTAxMGx4ICVzXG4iLAorCQkJY3B1LCByZWcsICpiYXNlLCAqc2l6ZSwKKwkJCW10cnJfYXR0cmliX3RvX3N0cigqdHlwZSAmIDB4ZmYpKTsKK291dF9wdXRfY3B1OgorCXB1dF9jcHUoKTsKIH0KIAogLyoqCkBAIC00MTksNiArNDc5LDggQEAKIAlib29sIGNoYW5nZWQgPSBmYWxzZTsKIAlpbnQgYmxvY2s9LTEsIHJhbmdlOwogCisJazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKCk7CisKIAl3aGlsZSAoZml4ZWRfcmFuZ2VfYmxvY2tzWysrYmxvY2tdLnJhbmdlcykKIAkgICAgZm9yIChyYW5nZT0wOyByYW5nZSA8IGZpeGVkX3JhbmdlX2Jsb2Nrc1tibG9ja10ucmFuZ2VzOyByYW5nZSsrKQogCQlzZXRfZml4ZWRfcmFuZ2UoZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5iYXNlX21zciArIHJhbmdlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggMjM2YTQwMS4uMDNjZGEwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAl1bnNpZ25lZCBsb25nCWxzaXplOwogfTsKIAotc3RhdGljIHN0cnVjdCBtdHJyX3ZhbHVlIG10cnJfc3RhdGVbTVRSUl9NQVhfVkFSX1JBTkdFU107CitzdGF0aWMgc3RydWN0IG10cnJfdmFsdWUgbXRycl92YWx1ZVtNVFJSX01BWF9WQVJfUkFOR0VTXTsKIAogc3RhdGljIGludCBtdHJyX3NhdmUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTU4Miw5ICs1ODIsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJbXRycl9pZi0+Z2V0KGksCi0JCQkgICAgICZtdHJyX3N0YXRlW2ldLmxiYXNlLAotCQkJICAgICAmbXRycl9zdGF0ZVtpXS5sc2l6ZSwKLQkJCSAgICAgJm10cnJfc3RhdGVbaV0ubHR5cGUpOworCQkJICAgICAmbXRycl92YWx1ZVtpXS5sYmFzZSwKKwkJCSAgICAgJm10cnJfdmFsdWVbaV0ubHNpemUsCisJCQkgICAgICZtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01OTQsMTEgKzU5NCwxMSBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJaWYgKG10cnJfc3RhdGVbaV0ubHNpemUpIAorCQlpZiAobXRycl92YWx1ZVtpXS5sc2l6ZSkKIAkJCXNldF9tdHJyKGksCi0JCQkJIG10cnJfc3RhdGVbaV0ubGJhc2UsCi0JCQkJIG10cnJfc3RhdGVbaV0ubHNpemUsCi0JCQkJIG10cnJfc3RhdGVbaV0ubHR5cGUpOworCQkJCSBtdHJyX3ZhbHVlW2ldLmxiYXNlLAorCQkJCSBtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJCSBtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MTAsMTA1OCArNjEwLDcgQEAKIAkucmVzdW1lCQk9IG10cnJfcmVzdG9yZSwKIH07CiAKLS8qIHNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCi0jZGVmaW5lIFJBTkdFX05VTSAyNTYKLQotc3RydWN0IHJlc19yYW5nZSB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1hZGRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCS8qIG91dCBvZiBzbG90cyAqLwotCWlmIChucl9yYW5nZSA+PSBSQU5HRV9OVU0pCi0JCXJldHVybiBucl9yYW5nZTsKLQotCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0OwotCXJhbmdlW25yX3JhbmdlXS5lbmQgPSBlbmQ7Ci0KLQlucl9yYW5nZSsrOwotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpOwotCi0JLyogdHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKLQkJdW5zaWduZWQgbG9uZyBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7Ci0KLQkJaWYgKCFyYW5nZVtpXS5lbmQpCi0JCQljb250aW51ZTsKLQotCQljb21tb25fc3RhcnQgPSBtYXgocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKLQkJY29tbW9uX2VuZCA9IG1pbihyYW5nZVtpXS5lbmQsIGVuZCk7Ci0JCWlmIChjb21tb25fc3RhcnQgPiBjb21tb25fZW5kICsgMSkKLQkJCWNvbnRpbnVlOwotCi0JCWZpbmFsX3N0YXJ0ID0gbWluKHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWZpbmFsX2VuZCA9IG1heChyYW5nZVtpXS5lbmQsIGVuZCk7Ci0KLQkJcmFuZ2VbaV0uc3RhcnQgPSBmaW5hbF9zdGFydDsKLQkJcmFuZ2VbaV0uZW5kID0gIGZpbmFsX2VuZDsKLQkJcmV0dXJuIG5yX3JhbmdlOwotCX0KLQotCS8qIG5lZWQgdG8gYWRkIHRoYXQgKi8KLQlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpLCBqOwotCi0JZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7Ci0JCWlmICghcmFuZ2Vbal0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKLQkJCXJhbmdlW2pdLmVuZCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgewotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7Ci0JCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpIDwgUkFOR0VfTlVNKSB7Ci0JCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOwotCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kICsgMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOwotCQkJfQotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNtcF9yYW5nZShjb25zdCB2b2lkICp4MSwgY29uc3Qgdm9pZCAqeDIpCi17Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjEgPSB4MTsKLQljb25zdCBzdHJ1Y3QgcmVzX3JhbmdlICpyMiA9IHgyOwotCWxvbmcgc3RhcnQxLCBzdGFydDI7Ci0KLQlzdGFydDEgPSByMS0+c3RhcnQ7Ci0Jc3RhcnQyID0gcjItPnN0YXJ0OwotCi0JcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKLX0KLQotc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcGZuOwotCXVuc2lnbmVkIGxvbmcgc2l6ZV9wZm47Ci0JbXRycl90eXBlIHR5cGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIF9faW5pdGRhdGEgcmFuZ2Vfc3RhdGVbUkFOR0VfTlVNXTsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkZWJ1Z19wcmludDsKLQotc3RhdGljIGludCBfX2luaXQKLXg4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplKQotewotCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZTsKLQltdHJyX3R5cGUgdHlwZTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQotCQkJY29udGludWU7Ci0JCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgYmFzZSwKLQkJCQkJCWJhc2UgKyBzaXplIC0gMSk7Ci0JfQotCWlmIChkZWJ1Z19wcmludCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgV0IgY2hlY2tpbmdcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOwotCX0KLQotCS8qIHRha2Ugb3V0IFVDIHJhbmdlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSAmJgotCQkgICAgdHlwZSAhPSBNVFJSX1RZUEVfV1JQUk9UKQotCQkJY29udGludWU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKCFzaXplKQotCQkJY29udGludWU7Ci0JCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKLQkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGJhc2UsIGJhc2UgKyBzaXplIC0gMSk7Ci0JfQotCWlmIChleHRyYV9yZW1vdmVfc2l6ZSkKLQkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCSBleHRyYV9yZW1vdmVfYmFzZSArIGV4dHJhX3JlbW92ZV9zaXplICAtIDEpOwotCi0JLyogZ2V0IG5ldyByYW5nZSBudW0gKi8KLQlucl9yYW5nZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7Ci0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCWlmICAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFVDIGNoZWNraW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiBzb3J0IHRoZSByYW5nZXMgKi8KLQlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwotCWlmICAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIHNvcnRpbmdcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOwotCX0KLQotCS8qIGNsZWFyIHRob3NlIGlzIG5vdCB1c2VkICovCi0JZm9yIChpID0gbnJfcmFuZ2U7IGkgPCBSQU5HRV9OVU07IGkrKykKLQkJbWVtc2V0KCZyYW5nZVtpXSwgMCwgc2l6ZW9mKHJhbmdlW2ldKSk7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEgcmFuZ2VbUkFOR0VfTlVNXTsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBucl9yYW5nZTsKLQotI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQotewotCXVuc2lnbmVkIGxvbmcgc3VtOwotCWludCBpOwotCi0Jc3VtID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJc3VtICs9IHJhbmdlW2ldLmVuZCArIDEgLSByYW5nZVtpXS5zdGFydDsKLQotCXJldHVybiBzdW07Ci19Ci0KLXN0YXRpYyBpbnQgZW5hYmxlX210cnJfY2xlYW51cCBfX2luaXRkYXRhID0KLQlDT05GSUdfTVRSUl9TQU5JVElaRVJfRU5BQkxFX0RFRkFVTFQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKGNoYXIgKnN0cikKLXsKLQllbmFibGVfbXRycl9jbGVhbnVwID0gMDsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfY2xlYW51cCIsIGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKLQotc3RhdGljIGludCBfX2luaXQgZW5hYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCi17Ci0JZW5hYmxlX210cnJfY2xlYW51cCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZW5hYmxlX210cnJfY2xlYW51cCIsIGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXApOwotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXAoY2hhciAqc3RyKQotewotCWRlYnVnX3ByaW50ID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJtdHJyX2NsZWFudXBfZGVidWciLCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXApOwotCi1zdHJ1Y3QgdmFyX210cnJfc3RhdGUgewotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOwotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKLQl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7Ci0JdW5zaWduZWQgaW50CXJlZzsKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2V0X3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKLXsKLQl1MzIgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaTsKLQl1NjQgYmFzZSwgbWFzazsKLQotCWlmICghc2l6ZWspIHsKLQkJZmlsbF9tdHJyX3Zhcl9yYW5nZShyZWcsIDAsIDAsIDAsIDApOwotCQlyZXR1cm47Ci0JfQotCi0JbWFzayA9ICgxVUxMIDw8IGFkZHJlc3NfYml0cykgLSAxOwotCW1hc2sgJj0gfigoKCh1NjQpc2l6ZWspIDw8IDEwKSAtIDEpOwotCi0JYmFzZSAgPSAoKHU2NCliYXNlaykgPDwgMTA7Ci0KLQliYXNlIHw9IHR5cGU7Ci0JbWFzayB8PSAweDgwMDsKLQotCWJhc2VfbG8gPSBiYXNlICYgKCgxVUxMPDwzMikgLSAxKTsKLQliYXNlX2hpID0gYmFzZSA+PiAzMjsKLQotCW1hc2tfbG8gPSBtYXNrICYgKCgxVUxMPDwzMikgLSAxKTsKLQltYXNrX2hpID0gbWFzayA+PiAzMjsKLQotCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci1zYXZlX3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSkKLXsKLQlyYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuID0gYmFzZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7Ci0JcmFuZ2Vfc3RhdGVbcmVnXS5zaXplX3BmbiA9IHNpemVrID4+IChQQUdFX1NISUZUIC0gMTApOwotCXJhbmdlX3N0YXRlW3JlZ10udHlwZSA9IHR5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2V0X3Zhcl9tdHJyX2FsbCh1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOwotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JZm9yIChyZWcgPSAwOyByZWcgPCBudW1fdmFyX3JhbmdlczsgcmVnKyspIHsKLQkJYmFzZWsgPSByYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlzaXplayA9IHJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtyZWddLnR5cGU7Ci0KLQkJc2V0X3Zhcl9tdHJyKHJlZywgYmFzZWssIHNpemVrLCB0eXBlLCBhZGRyZXNzX2JpdHMpOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9fc2l6ZV9mYWN0b3IodW5zaWduZWQgbG9uZyBzaXplaywgY2hhciAqZmFjdG9ycCkKLXsKLQljaGFyIGZhY3RvcjsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSBzaXplazsKLQotCWlmIChiYXNlICYgKCgxPDwxMCkgLSAxKSkgewotCQkvKiBub3QgTUIgYWxpZ25tZW50ICovCi0JCWZhY3RvciA9ICdLJzsKLQl9IGVsc2UgaWYgKGJhc2UgJiAoKDE8PDIwKSAtIDEpKXsKLQkJZmFjdG9yID0gJ00nOwotCQliYXNlID4+PSAxMDsKLQl9IGVsc2UgewotCQlmYWN0b3IgPSAnRyc7Ci0JCWJhc2UgPj49IDIwOwotCX0KLQotCSpmYWN0b3JwID0gZmFjdG9yOwotCi0JcmV0dXJuIGJhc2U7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0Ci1yYW5nZV90b19tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRrLAotCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc2l6ZWssIHVuc2lnbmVkIGNoYXIgdHlwZSkKLXsKLQlpZiAoIXJhbmdlX3NpemVrIHx8IChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpKQotCQlyZXR1cm4gcmVnOwotCi0Jd2hpbGUgKHJhbmdlX3NpemVrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWF4X2FsaWduLCBhbGlnbjsKLQkJdW5zaWduZWQgbG9uZyBzaXplazsKLQotCQkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIHNpemUgSSBjYW4gbWFrZSBhIHJhbmdlICovCi0JCWlmIChyYW5nZV9zdGFydGspCi0JCQltYXhfYWxpZ24gPSBmZnMocmFuZ2Vfc3RhcnRrKSAtIDE7Ci0JCWVsc2UKLQkJCW1heF9hbGlnbiA9IDMyOwotCQlhbGlnbiA9IGZscyhyYW5nZV9zaXplaykgLSAxOwotCQlpZiAoYWxpZ24gPiBtYXhfYWxpZ24pCi0JCQlhbGlnbiA9IG1heF9hbGlnbjsKLQotCQlzaXplayA9IDEgPDwgYWxpZ247Ci0JCWlmIChkZWJ1Z19wcmludCkgewotCQkJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOwotCQkJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7Ci0KLQkJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyYW5nZV9zdGFydGssICZzdGFydF9mYWN0b3IpLAotCQkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZWssICZzaXplX2ZhY3RvciksCi0KLQkJCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHZhcmlhYmxlIE1UUlIgJWQsICIKLQkJCQkiYmFzZTogJWxkJWNCLCByYW5nZTogJWxkJWNCLCB0eXBlICVzXG4iLAotCQkJCXJlZywgc3RhcnRfYmFzZSwgc3RhcnRfZmFjdG9yLAotCQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCi0JCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpPyJVQyI6Ci0JCQkJICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKT8iV0IiOiJPdGhlciIpCi0JCQkJKTsKLQkJfQotCQlzYXZlX3Zhcl9tdHJyKHJlZysrLCByYW5nZV9zdGFydGssIHNpemVrLCB0eXBlKTsKLQkJcmFuZ2Vfc3RhcnRrICs9IHNpemVrOwotCQlyYW5nZV9zaXplayAtPSBzaXplazsKLQkJaWYgKHJlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gcmVnOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19pbml0Ci1yYW5nZV90b19tdHJyX3dpdGhfaG9sZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VrLAotCQkJdW5zaWduZWQgbG9uZyBzaXplaykKLXsKLQl1bnNpZ25lZCBsb25nIGhvbGVfYmFzZWssIGhvbGVfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBzZWNvbmRfYmFzZWssIHNlY29uZF9zaXplazsKLQl1bnNpZ25lZCBsb25nIHJhbmdlMF9iYXNlaywgcmFuZ2UwX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgcmFuZ2VfYmFzZWssIHJhbmdlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOwotCi0JaG9sZV9iYXNlayA9IDA7Ci0JaG9sZV9zaXplayA9IDA7Ci0Jc2Vjb25kX2Jhc2VrID0gMDsKLQlzZWNvbmRfc2l6ZWsgPSAwOwotCWNodW5rX3NpemVrID0gc3RhdGUtPmNodW5rX3NpemVrOwotCWdyYW5fc2l6ZWsgPSBzdGF0ZS0+Z3Jhbl9zaXplazsKLQotCS8qIGFsaWduIHdpdGggZ3JhbiBzaXplLCBwcmV2ZW50IHNtYWxsIGJsb2NrIHVzZWQgdXAgTVRSUnMgKi8KLQlyYW5nZV9iYXNlayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zdGFydGssIGdyYW5fc2l6ZWspOwotCWlmICgocmFuZ2VfYmFzZWsgPiBiYXNlaykgJiYgYmFzZWspCi0JCXJldHVybiBzZWNvbmRfc2l6ZWs7Ci0Jc3RhdGUtPnJhbmdlX3NpemVrIC09IChyYW5nZV9iYXNlayAtIHN0YXRlLT5yYW5nZV9zdGFydGspOwotCXJhbmdlX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBncmFuX3NpemVrKTsKLQotCXdoaWxlIChyYW5nZV9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQlyYW5nZV9zaXplayAtPSBncmFuX3NpemVrOwotCQlpZiAoIXJhbmdlX3NpemVrKQotCQkJcmV0dXJuIDA7Ci0JfQotCXN0YXRlLT5yYW5nZV9zaXplayA9IHJhbmdlX3NpemVrOwotCi0JLyogdHJ5IHRvIGFwcGVuZCBzb21lIHNtYWxsIGhvbGUgKi8KLQlyYW5nZTBfYmFzZWsgPSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwotCXJhbmdlMF9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgY2h1bmtfc2l6ZWspOwotCi0JLyogbm8gaW5jcmVhc2UgKi8KLQlpZiAocmFuZ2UwX3NpemVrID09IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2VYOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKLQkJCQkocmFuZ2UwX2Jhc2VrICsgc3RhdGUtPnJhbmdlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCi0JCQkJc3RhdGUtPnJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogb25seSBjdXQgYmFjaywgd2hlbiBpdCBpcyBub3QgdGhlIGxhc3QgKi8KLQlpZiAoc2l6ZWspIHsKLQkJd2hpbGUgKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayA+IChiYXNlayArIHNpemVrKSkgewotCQkJaWYgKHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykKLQkJCQlyYW5nZTBfc2l6ZWsgLT0gY2h1bmtfc2l6ZWs7Ci0JCQllbHNlCi0JCQkJcmFuZ2UwX3NpemVrID0gMDsKLQotCQkJaWYgKCFyYW5nZTBfc2l6ZWspCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLXNlY29uZF90cnk6Ci0JcmFuZ2VfYmFzZWsgPSByYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWs7Ci0KLQkvKiBvbmUgaG9sZSBpbiB0aGUgbWlkZGxlICovCi0JaWYgKHJhbmdlX2Jhc2VrID4gYmFzZWsgJiYgcmFuZ2VfYmFzZWsgPD0gKGJhc2VrICsgc2l6ZWspKQotCQlzZWNvbmRfc2l6ZWsgPSByYW5nZV9iYXNlayAtIGJhc2VrOwotCi0JaWYgKHJhbmdlMF9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgewotCi0JCS8qIG9uZSBob2xlIGluIG1pZGRsZSBvciBhdCBlbmQgKi8KLQkJaG9sZV9zaXplayA9IHJhbmdlMF9zaXplayAtIHN0YXRlLT5yYW5nZV9zaXplayAtIHNlY29uZF9zaXplazsKLQotCQkvKiBob2xlIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiBoYWxmIG9mIHJhbmdlMCBzaXplICovCi0JCWlmIChob2xlX3NpemVrID49IChyYW5nZTBfc2l6ZWsgPj4gMSkgJiYKLQkJICAgIHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykgewotCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOwotCQkJc2Vjb25kX3NpemVrID0gMDsKLQkJCWhvbGVfc2l6ZWsgPSAwOwotCi0JCQlnb3RvIHNlY29uZF90cnk7Ci0JCX0KLQl9Ci0KLQlpZiAocmFuZ2UwX3NpemVrKSB7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTA6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQlyYW5nZTBfYmFzZWs8PDEwLAotCQkJCShyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWspPDwxMCk7Ci0JCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKLQkJCQlyYW5nZTBfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwotCX0KLQotCWlmIChyYW5nZTBfc2l6ZWsgPCBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJLyogbmVlZCB0byBoYW5kbGUgbGVmdCBvdmVyICovCi0JCXJhbmdlX3NpemVrID0gc3RhdGUtPnJhbmdlX3NpemVrIC0gcmFuZ2UwX3NpemVrOwotCi0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZV9iYXNlazw8MTAsCi0JCQkJIChyYW5nZV9iYXNlayArIHJhbmdlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZV9iYXNlaywKLQkJCQkgcmFuZ2Vfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwotCX0KLQotCWlmIChob2xlX3NpemVrKSB7Ci0JCWhvbGVfYmFzZWsgPSByYW5nZV9iYXNlayAtIGhvbGVfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJob2xlOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIGhvbGVfYmFzZWs8PDEwLAotCQkJCSAoaG9sZV9iYXNlayArIGhvbGVfc2l6ZWspPDwxMCk7Ci0JCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIGhvbGVfYmFzZWssCi0JCQkJIGhvbGVfc2l6ZWssIE1UUlJfVFlQRV9VTkNBQ0hBQkxFKTsKLQl9Ci0KLQlyZXR1cm4gc2Vjb25kX3NpemVrOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycl9yYW5nZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VfcGZuLAotCQkgICB1bnNpZ25lZCBsb25nIHNpemVfcGZuKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX3NpemVrID0gMDsKLQotCWlmIChzdGF0ZS0+cmVnID49IG51bV92YXJfcmFuZ2VzKQotCQlyZXR1cm47Ci0KLQliYXNlayA9IGJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCXNpemVrID0gc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7Ci0KLQkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZSAqLwotCWlmICgoYmFzZWsgPD0gMTAyNCkgfHwKLQkgICAgKHN0YXRlLT5yYW5nZV9zdGFydGsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPT0gYmFzZWspKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZW5kayA9IGJhc2VrICsgc2l6ZWs7Ci0JCXN0YXRlLT5yYW5nZV9zaXplayA9IGVuZGsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwotCQlyZXR1cm47Ci0JfQotCS8qIFdyaXRlIHRoZSByYW5nZSBtdHJycyAqLwotCWlmIChzdGF0ZS0+cmFuZ2Vfc2l6ZWsgIT0gMCkKLQkJc2Vjb25kX3NpemVrID0gcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RhdGUsIGJhc2VrLCBzaXplayk7Ci0KLQkvKiBBbGxvY2F0ZSBhbiBtc3IgKi8KLQlzdGF0ZS0+cmFuZ2Vfc3RhcnRrID0gYmFzZWsgKyBzZWNvbmRfc2l6ZWs7Ci0Jc3RhdGUtPnJhbmdlX3NpemVrICA9IHNpemVrIC0gc2Vjb25kX3NpemVrOwotfQotCi0vKiBtaW5pbnVtIHNpemUgb2YgbXRyciBibG9jayB0aGF0IGNhbiB0YWtlIGhvbGUgKi8KLXN0YXRpYyB1NjQgbXRycl9jaHVua19zaXplIF9faW5pdGRhdGEgPSAoMjU2VUxMPDwyMCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQoY2hhciAqcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAtRUlOVkFMOwotCW10cnJfY2h1bmtfc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJtdHJyX2NodW5rX3NpemUiLCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KTsKLQotLyogZ3Jhbml0eSBvZiBtdHJyIG9mIGJsb2NrICovCi1zdGF0aWMgdTY0IG10cnJfZ3Jhbl9zaXplIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdChjaGFyICpwKQotewotCWlmICghcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbXRycl9ncmFuX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9ncmFuX3NpemUiLCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQpOwotCi1zdGF0aWMgaW50IG5yX210cnJfc3BhcmVfcmVnIF9faW5pdGRhdGEgPQotCQkJCSBDT05GSUdfTVRSUl9TQU5JVElaRVJfU1BBUkVfUkVHX05SX0RFRkFVTFQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfc3BhcmVfcmVnKGNoYXIgKmFyZykKLXsKLQlpZiAoYXJnKQotCQlucl9tdHJyX3NwYXJlX3JlZyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJtdHJyX3NwYXJlX3JlZ19uciIsIHBhcnNlX210cnJfc3BhcmVfcmVnKTsKLQotc3RhdGljIGludCBfX2luaXQKLXg4Nl9zZXR1cF92YXJfbXRycnMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKLQkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQotewotCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7Ci0JaW50IGk7Ci0JaW50IG51bV9yZWc7Ci0KLQl2YXJfc3RhdGUucmFuZ2Vfc3RhcnRrCT0gMDsKLQl2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsJPSAwOwotCXZhcl9zdGF0ZS5yZWcJCT0gMDsKLQl2YXJfc3RhdGUuY2h1bmtfc2l6ZWsJPSBjaHVua19zaXplID4+IDEwOwotCXZhcl9zdGF0ZS5ncmFuX3NpemVrCT0gZ3Jhbl9zaXplID4+IDEwOwotCi0JbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKLQotCS8qIFdyaXRlIHRoZSByYW5nZSBldGMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJc2V0X3Zhcl9tdHJyX3JhbmdlKCZ2YXJfc3RhdGUsIHJhbmdlW2ldLnN0YXJ0LAotCQkJCSAgIHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0ICsgMSk7Ci0KLQkvKiBXcml0ZSB0aGUgbGFzdCByYW5nZSAqLwotCWlmICh2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsgIT0gMCkKLQkJcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoJnZhcl9zdGF0ZSwgMCwgMCk7Ci0KLQludW1fcmVnID0gdmFyX3N0YXRlLnJlZzsKLQkvKiBDbGVhciBvdXQgdGhlIGV4dHJhIE1UUlIncyAqLwotCXdoaWxlICh2YXJfc3RhdGUucmVnIDwgbnVtX3Zhcl9yYW5nZXMpIHsKLQkJc2F2ZV92YXJfbXRycih2YXJfc3RhdGUucmVnLCAwLCAwLCAwKTsKLQkJdmFyX3N0YXRlLnJlZysrOwotCX0KLQotCXJldHVybiBudW1fcmVnOwotfQotCi1zdHJ1Y3QgbXRycl9jbGVhbnVwX3Jlc3VsdCB7Ci0JdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBsb3NlX2NvdmVyX3NpemVrOwotCXVuc2lnbmVkIGludCBudW1fcmVnOwotCWludCBiYWQ7Ci19OwotCi0vKgotICogZ3Jhbl9zaXplOiA2NEssIDEyOEssIDI1NkssIDUxMkssIDFNLCAyTSwgLi4uLCAyRwotICogY2h1bmsgc2l6ZTogZ3Jhbl9zaXplLCAuLi4sIDJHCi0gKiBzbyB3ZSBuZWVkICgxKzE2KSo4Ci0gKi8KLSNkZWZpbmUgTlVNX1JFU1VMVAkxMzYKLSNkZWZpbmUgUFNISUZUCQkoUEFHRV9TSElGVCAtIDEwKQotCi1zdGF0aWMgc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgX19pbml0ZGF0YSByZXN1bHRbTlVNX1JFU1VMVF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1pbl9sb3NzX3BmbltSQU5HRV9OVU1dOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUodm9pZCkKLXsKLQlpbnQgaTsKLQljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7Ci0JbXRycl90eXBlIHR5cGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCi0JCXNpemVfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlpZiAoIXNpemVfYmFzZSkKLQkJCWNvbnRpbnVlOwotCi0JCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVfYmFzZSwgJnNpemVfZmFjdG9yKSwKLQkJc3RhcnRfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc3RhcnRfYmFzZSwgJnN0YXJ0X2ZhY3RvciksCi0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICJyZWcgJWQsIGJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKLQkJCWksIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKLQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCi0JCQkodHlwZSA9PSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkgPyAiVUMiIDoKLQkJCSAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSUFJPVCkgPyAiV1AiIDoKLQkJCSAgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUkJBQ0spID8gIldCIiA6ICJPdGhlciIpKQotCQkJKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfbmVlZF9jbGVhbnVwKHZvaWQpCi17Ci0JaW50IGk7Ci0JbXRycl90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KLQlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07Ci0KLQkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLwotCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlpZiAodHlwZSA+PSBNVFJSX05VTV9UWVBFUykKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNpemUpCi0JCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7Ci0JCWlmICh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpCi0JCQl0eXBlID0gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7Ci0JCW51bVt0eXBlXSsrOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGdvdCBVQyBlbnRyaWVzICovCi0JaWYgKCFudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdKQotCQlyZXR1cm4gMDsKLQotCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLwotCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9Ci0JCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSByYW5nZV9zdW1zOwotc3RhdGljIHZvaWQgX19pbml0IG10cnJfY2FsY19yYW5nZV9zdGF0ZSh1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplLAotCQkJCQkgaW50IGkpCi17Ci0JaW50IG51bV9yZWc7Ci0Jc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgcmFuZ2VfbmV3W1JBTkdFX05VTV07Ci0Jc3RhdGljIGludCBucl9yYW5nZV9uZXc7Ci0JdW5zaWduZWQgbG9uZyByYW5nZV9zdW1zX25ldzsKLQotCS8qIGNvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGUgKi8KLQludW1fcmVnID0geDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsCi0JCQkJCQljaHVua19zaXplLCBncmFuX3NpemUpOwotCi0JLyogd2UgZ290IG5ldyBzZXR0aW5nIGluIHJhbmdlX3N0YXRlLCBjaGVjayBpdCAqLwotCW1lbXNldChyYW5nZV9uZXcsIDAsIHNpemVvZihyYW5nZV9uZXcpKTsKLQlucl9yYW5nZV9uZXcgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlX25ldywgMCwKLQkJCQlleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUpOwotCXJhbmdlX3N1bXNfbmV3ID0gc3VtX3JhbmdlcyhyYW5nZV9uZXcsIG5yX3JhbmdlX25ldyk7Ci0KLQlyZXN1bHRbaV0uY2h1bmtfc2l6ZWsgPSBjaHVua19zaXplID4+IDEwOwotCXJlc3VsdFtpXS5ncmFuX3NpemVrID0gZ3Jhbl9zaXplID4+IDEwOwotCXJlc3VsdFtpXS5udW1fcmVnID0gbnVtX3JlZzsKLQlpZiAocmFuZ2Vfc3VtcyA8IHJhbmdlX3N1bXNfbmV3KSB7Ci0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zX25ldyAtIHJhbmdlX3N1bXMpIDw8IFBTSElGVDsKLQkJcmVzdWx0W2ldLmJhZCA9IDE7Ci0JfSBlbHNlCi0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcpIDw8IFBTSElGVDsKLQotCS8qIGRvdWJsZSBjaGVjayBpdCAqLwotCWlmICghcmVzdWx0W2ldLmJhZCAmJiAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKLQkJaWYgKG5yX3JhbmdlX25ldyAhPSBucl9yYW5nZSB8fAotCQkJbWVtY21wKHJhbmdlLCByYW5nZV9uZXcsIHNpemVvZihyYW5nZSkpKQotCQkJCXJlc3VsdFtpXS5iYWQgPSAxOwotCX0KLQotCWlmICghcmVzdWx0W2ldLmJhZCAmJiAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3IDwKLQkJCQltaW5fbG9zc19wZm5bbnVtX3JlZ10pKSB7Ci0JCW1pbl9sb3NzX3BmbltudW1fcmVnXSA9Ci0JCQlyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXc7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpbnQgaSkKLXsKLQljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOwotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9iYXNlLCBjaHVua19iYXNlLCBsb3NlX2Jhc2U7Ci0KLQlncmFuX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uZ3Jhbl9zaXplaywgJmdyYW5fZmFjdG9yKSwKLQljaHVua19iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmNodW5rX3NpemVrLCAmY2h1bmtfZmFjdG9yKSwKLQlsb3NlX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaywgJmxvc2VfZmFjdG9yKSwKLQlwcmludGsoS0VSTl9JTkZPICIlc2dyYW5fc2l6ZTogJWxkJWMgXHRjaHVua19zaXplOiAlbGQlYyBcdCIsCi0JCQlyZXN1bHRbaV0uYmFkID8gIipCQUQqIiA6ICIgIiwKLQkJCWdyYW5fYmFzZSwgZ3Jhbl9mYWN0b3IsIGNodW5rX2Jhc2UsIGNodW5rX2ZhY3Rvcik7Ci0JcHJpbnRrKEtFUk5fQ09OVCAibnVtX3JlZzogJWQgIFx0bG9zZSBjb3ZlciBSQU06ICVzJWxkJWNcbiIsCi0JCQlyZXN1bHRbaV0ubnVtX3JlZywgcmVzdWx0W2ldLmJhZCA/ICItIiA6ICIiLAotCQkJbG9zZV9iYXNlLCBsb3NlX2ZhY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfc2VhcmNoX29wdGltYWxfaW5kZXgodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgbnVtX3JlZ19nb29kOwotCWludCBpbmRleF9nb29kOwotCi0JaWYgKG5yX210cnJfc3BhcmVfcmVnID49IG51bV92YXJfcmFuZ2VzKQotCQlucl9tdHJyX3NwYXJlX3JlZyA9IG51bV92YXJfcmFuZ2VzIC0gMTsKLQludW1fcmVnX2dvb2QgPSAtMTsKLQlmb3IgKGkgPSBudW1fdmFyX3JhbmdlcyAtIG5yX210cnJfc3BhcmVfcmVnOyBpID4gMDsgaS0tKSB7Ci0JCWlmICghbWluX2xvc3NfcGZuW2ldKQotCQkJbnVtX3JlZ19nb29kID0gaTsKLQl9Ci0KLQlpbmRleF9nb29kID0gLTE7Ci0JaWYgKG51bV9yZWdfZ29vZCAhPSAtMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFU1VMVDsgaSsrKSB7Ci0JCQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYKLQkJCSAgICByZXN1bHRbaV0ubnVtX3JlZyA9PSBudW1fcmVnX2dvb2QgJiYKLQkJCSAgICAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKLQkJCQlpbmRleF9nb29kID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBpbmRleF9nb29kOwotfQotCi0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCi17Ci0JdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplLCBkZWYsIGR1bW15OwotCW10cnJfdHlwZSB0eXBlOwotCXU2NCBjaHVua19zaXplLCBncmFuX3NpemU7Ci0JaW50IGluZGV4X2dvb2Q7Ci0JaW50IGk7Ci0KLQlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZW5hYmxlX210cnJfY2xlYW51cCA8IDEpCi0JCXJldHVybiAwOwotCXJkbXNyKE1UUlJkZWZUeXBlX01TUiwgZGVmLCBkdW1teSk7Ci0JZGVmICY9IDB4ZmY7Ci0JaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCi0JbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7Ci0JCXJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuID0gYmFzZTsKLQkJcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPSBzaXplOwotCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBuZWVkIGhhbmRsZSBpdCBhbmQgY2FuIGhhbmRsZSBpdCAqLwotCWlmICghbXRycl9uZWVkX2NsZWFudXAoKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBwcmludCBvcmlnaW5hbCB2YXIgTVRSUnMgYXQgZmlyc3QsIGZvciBkZWJ1Z2dpbmc6ICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9yaWdpbmFsIHZhcmlhYmxlIE1UUlJzXG4iKTsKLQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOwotCi0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlleHRyYV9yZW1vdmVfc2l6ZSA9IDA7Ci0JZXh0cmFfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOwotCWlmIChtdHJyX3RvbTIpCi0JCWV4dHJhX3JlbW92ZV9zaXplID0KLQkJCShtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSBleHRyYV9yZW1vdmVfYmFzZTsKLQlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgIGV4dHJhX3JlbW92ZV9zaXplKTsKLQkvKgotCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcnJlZCBieSB2YXIgbXRyciB3aXRoIFdCCi0JICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdGl2ZSBiZWZvcmUgdmFyIG10cnIgZm9yIGl0Ci0JICovCi0JbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCi0JCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKLQkvKiBzb3J0IHRoZSByYW5nZXMgKi8KLQlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwotCi0JcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKLQlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCi0JICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOwotCi0JaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgewotCQlpID0gMDsKLQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKG10cnJfY2h1bmtfc2l6ZSwgbXRycl9ncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKLQotCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwotCi0JCWlmICghcmVzdWx0W2ldLmJhZCkgewotCQkJc2V0X3Zhcl9tdHJyX2FsbChhZGRyZXNzX2JpdHMpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiaW52YWxpZCBtdHJyX2dyYW5fc2l6ZSBvciBtdHJyX2NodW5rX3NpemUsICIKLQkJICAgICAgICJ3aWxsIGZpbmQgb3B0aW1hbCBvbmVcbiIpOwotCX0KLQotCWkgPSAwOwotCW1lbXNldChtaW5fbG9zc19wZm4sIDB4ZmYsIHNpemVvZihtaW5fbG9zc19wZm4pKTsKLQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7Ci0JZm9yIChncmFuX3NpemUgPSAoMVVMTDw8MTYpOyBncmFuX3NpemUgPCAoMVVMTDw8MzIpOyBncmFuX3NpemUgPDw9IDEpIHsKLQotCQlmb3IgKGNodW5rX3NpemUgPSBncmFuX3NpemU7IGNodW5rX3NpemUgPCAoMVVMTDw8MzIpOwotCQkgICAgIGNodW5rX3NpemUgPDw9IDEpIHsKLQotCQkJaWYgKGkgPj0gTlVNX1JFU1VMVCkKLQkJCQljb250aW51ZTsKLQotCQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKGNodW5rX3NpemUsIGdyYW5fc2l6ZSwKLQkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOwotCQkJaWYgKGRlYnVnX3ByaW50KSB7Ci0JCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCQkJfQotCi0JCQlpKys7Ci0JCX0KLQl9Ci0KLQkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleCAqLwotCWluZGV4X2dvb2QgPSBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KCk7Ci0KLQlpZiAoaW5kZXhfZ29vZCAhPSAtMSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBvcHRpbWFsIHNldHRpbmcgZm9yIG10cnIgY2xlYW4gdXBcbiIpOwotCQlpID0gaW5kZXhfZ29vZDsKLQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQotCQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCi0JCWNodW5rX3NpemUgPSByZXN1bHRbaV0uY2h1bmtfc2l6ZWs7Ci0JCWNodW5rX3NpemUgPDw9IDEwOwotCQlncmFuX3NpemUgPSByZXN1bHRbaV0uZ3Jhbl9zaXplazsKLQkJZ3Jhbl9zaXplIDw8PSAxMDsKLQkJeDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsIGNodW5rX3NpemUsIGdyYW5fc2l6ZSk7Ci0JCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7Ci0JCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qIHByaW50IG91dCBhbGwgKi8KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykKLQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAibXRycl9jbGVhbnVwOiBjYW4gbm90IGZpbmQgb3B0aW1hbCB2YWx1ZVxuIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHNwZWNpZnkgbXRycl9ncmFuX3NpemUvbXRycl9jaHVua19zaXplXG4iKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXRkYXRhIGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOwotCi1zdGF0aWMgaW50IGRpc2FibGVfbXRycl90cmltOwotCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfdHJpbV9zZXR1cChjaGFyICpzdHIpCi17Ci0JZGlzYWJsZV9tdHJyX3RyaW0gPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVfbXRycl90cmltIiwgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXApOwotCi0vKgotICogTmV3ZXIgQU1EIEs4cyBhbmQgbGF0ZXIgQ1BVcyBoYXZlIGEgc3BlY2lhbCBtYWdpYyBNU1Igd2F5IHRvIGZvcmNlIFdCCi0gKiBmb3IgbWVtb3J5ID40R0IuIENoZWNrIGZvciB0aGF0IGhlcmUuCi0gKiBOb3RlIHRoaXMgd29uJ3QgY2hlY2sgaWYgdGhlIE1UUlJzIDwgNEdCIHdoZXJlIHRoZSBtYWdpYyBiaXQgZG9lc24ndAotICogYXBwbHkgdG8gYXJlIHdyb25nLCBidXQgc28gZmFyIHdlIGRvbid0IGtub3cgb2YgYW55IHN1Y2ggY2FzZSBpbiB0aGUgd2lsZC4KLSAqLwotI2RlZmluZSBUb20yRW5hYmxlZCAoMVUgPDwgMjEpCi0jZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQiAoMVUgPDwgMjIpCi0KLWludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCi17Ci0JdTMyIGwsIGg7Ci0KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQotCQlyZXR1cm4gMDsKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCAweGYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDExKQotCQlyZXR1cm4gMDsKLQkvKiBJbiBjYXNlIHNvbWUgaHlwZXJ2aXNvciBkb2Vzbid0IHBhc3MgU1lTQ0ZHIHRocm91Z2ggKi8KLQlpZiAocmRtc3Jfc2FmZShNU1JfSzhfU1lTQ0ZHLCAmbCwgJmgpIDwgMCkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBNZW1vcnkgYmV0d2VlbiA0R0IgYW5kIHRvcCBvZiBtZW0gaXMgZm9yY2VkIFdCIGJ5IHRoaXMgbWFnaWMgYml0LgotCSAqIFJlc2VydmVkIGJlZm9yZSBLOFJldkYsIGJ1dCBzaG91bGQgYmUgemVybyB0aGVyZS4KLQkgKi8KLQlpZiAoKGwgJiAoVG9tMkVuYWJsZWQgfCBUb20yRm9yY2VNZW1UeXBlV0IpKSA9PQotCQkgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IHJlYWxfdHJpbV9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCi17Ci0JdTY0IHRyaW1fc3RhcnQsIHRyaW1fc2l6ZTsKLQl0cmltX3N0YXJ0ID0gc3RhcnRfcGZuOwotCXRyaW1fc3RhcnQgPDw9IFBBR0VfU0hJRlQ7Ci0JdHJpbV9zaXplID0gbGltaXRfcGZuOwotCXRyaW1fc2l6ZSA8PD0gUEFHRV9TSElGVDsKLQl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKLQotCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAotCQkJCUU4MjBfUkVTRVJWRUQpOwotfQotLyoqCi0gKiBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5IC0gdHJpbSBSQU0gbm90IGNvdmVyZWQgYnkgTVRSUnMKLSAqIEBlbmRfcGZuOiBlbmRpbmcgcGFnZSBmcmFtZSBudW1iZXIKLSAqCi0gKiBTb21lIGJ1Z2d5IEJJT1NlcyBkb24ndCBzZXR1cCB0aGUgTVRSUnMgcHJvcGVybHkgZm9yIHN5c3RlbXMgd2l0aCBjZXJ0YWluCi0gKiBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoYXQgdGhlIGhpZ2hlc3QgTVRSUiBtYXRjaGVzCi0gKiB0aGUgZW5kIG9mIG1lbW9yeSwgdG8gbWFrZSBzdXJlIHRoZSBNVFJScyBoYXZpbmcgYSB3cml0ZSBiYWNrIHR5cGUgY292ZXIKLSAqIGFsbCBvZiB0aGUgbWVtb3J5IHRoZSBrZXJuZWwgaXMgaW50ZW5kaW5nIHRvIHVzZS4gSWYgbm90LCBpdCdsbCB0cmltIGFueQotICogbWVtb3J5IG9mZiB0aGUgZW5kIGJ5IGFkanVzdGluZyBlbmRfcGZuLCByZW1vdmluZyBpdCBmcm9tIHRoZSBrZXJuZWwncwotICogYWxsb2NhdGlvbiBwb29scywgd2FybmluZyB0aGUgdXNlciB3aXRoIGFuIG9ibm94aW91cyBtZXNzYWdlLgotICovCi1pbnQgX19pbml0IG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmRfcGZuKQotewotCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZSwgaGlnaGVzdF9wZm4gPSAwLCBkZWYsIGR1bW15OwotCW10cnJfdHlwZSB0eXBlOwotCXU2NCB0b3RhbF90cmltX3NpemU7Ci0KLQkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCi0JaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOwotCS8qCi0JICogTWFrZSBzdXJlIHdlIG9ubHkgdHJpbSB1bmNhY2hhYmxlIG1lbW9yeSBvbiBtYWNoaW5lcyB0aGF0Ci0JICogc3VwcG9ydCB0aGUgSW50ZWwgTVRSUiBhcmNoaXRlY3R1cmU6Ci0JICovCi0JaWYgKCFpc19jcHUoSU5URUwpIHx8IGRpc2FibGVfbXRycl90cmltKQotCQlyZXR1cm4gMDsKLQlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOwotCWRlZiAmPSAweGZmOwotCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCi0JCXJldHVybiAwOwotCi0JLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLwotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwotCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7Ci0JCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKLQkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7Ci0JfQotCi0JLyogRmluZCBoaWdoZXN0IGNhY2hlZCBwZm4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKGhpZ2hlc3RfcGZuIDwgYmFzZSArIHNpemUpCi0JCQloaWdoZXN0X3BmbiA9IGJhc2UgKyBzaXplOwotCX0KLQotCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLwotCWlmICghaGlnaGVzdF9wZm4pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIE1UUlJzIGFsbCBibGFuayAtIHZpcnR1YWxpemVkIHN5c3RlbS5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLwotCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCi0JCQljb250aW51ZTsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlpZiAoIXNpemUpCi0JCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7Ci0JCW51bVt0eXBlXSsrOwotCX0KLQotCS8qIG5vIGVudHJ5IGZvciBXQj8gKi8KLQlpZiAoIW51bVtNVFJSX1RZUEVfV1JCQUNLXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KLQlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQotCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCi0JCXJldHVybiAwOwotCi0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlucl9yYW5nZSA9IDA7Ci0JaWYgKG10cnJfdG9tMikgewotCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOwotCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7Ci0JCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQotCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKLQkJbnJfcmFuZ2UrKzsKLQl9Ci0JbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgMCwgMCk7Ci0KLQl0b3RhbF90cmltX3NpemUgPSAwOwotCS8qIGNoZWNrIHRoZSBoZWFkICovCi0JaWYgKHJhbmdlWzBdLnN0YXJ0KQotCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeSgwLCByYW5nZVswXS5zdGFydCk7Ci0JLyogY2hlY2sgdGhlIGhvbGVzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7Ci0JCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgcmFuZ2VbaSsxXS5zdGFydCkKLQkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCi0JCQkJCQkJICAgIHJhbmdlW2krMV0uc3RhcnQpOwotCX0KLQkvKiBjaGVjayB0aGUgdG9wICovCi0JaSA9IG5yX3JhbmdlIC0gMTsKLQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IGVuZF9wZm4pCi0JCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCi0JCQkJCQkJIGVuZF9wZm4pOwotCi0JaWYgKHRvdGFsX3RyaW1fc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIgotCQkJIiBhbGwgb2YgbWVtb3J5LCBsb3NpbmcgJWxsdU1CIG9mIFJBTS5cbiIsCi0JCQl0b3RhbF90cmltX3NpemUgPj4gMjApOwotCi0JCWlmICghY2hhbmdlZF9ieV9tdHJyX2NsZWFudXApCi0JCQlXQVJOX09OKDEpOwotCi0JCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKLQkJdXBkYXRlX2U4MjAoKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KK2ludCBfX2luaXRkYXRhIGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOwogCiAvKioKICAqIG10cnJfYnBfaW5pdCAtIGluaXRpYWxpemUgbXRycnMgb24gdGhlIGJvb3QgQ1BVCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCBmZmQ2MDQwLi43N2Y2N2Y3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKQEAgLTc5LDYgKzc5LDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fdmFyX3JhbmdlczsKIGV4dGVybiB1NjQgbXRycl90b20yOworZXh0ZXJuIHN0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZTsKIAogdm9pZCBtdHJyX3N0YXRlX3dhcm4odm9pZCk7CiBjb25zdCBjaGFyICptdHJyX2F0dHJpYl90b19zdHIoaW50IHgpOwpAQCAtODgsMyArODksNiBAQAogaW50IGFtZF9pbml0X210cnIodm9pZCk7CiBpbnQgY3lyaXhfaW5pdF9tdHJyKHZvaWQpOwogaW50IGNlbnRhdXJfaW5pdF9tdHJyKHZvaWQpOworCitleHRlcm4gaW50IGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOworZXh0ZXJuIGludCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCmluZGV4IDUyYjNmZWYuLmJiNjJiM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwpAQCAtOTgsNyArOTgsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiB0cmFuc21ldGFfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IHRyYW5zbWV0YV9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJUcmFuc21ldGEiLAogCS5jX2lkZW50CT0geyAiR2VudWluZVRNeDg2IiwgIlRyYW5zbWV0YUNQVSIgfSwKIAkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF90cmFuc21ldGEsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYwppbmRleCBlNzc3Zjc5Li5mZDJjMzdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdW1jLmMKQEAgLTgsNyArOCw3IEBACiAgKiBzbyBubyBzcGVjaWFsIGluaXQgdGFrZXMgcGxhY2UuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IHVtY19jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgdW1jX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIlVNQyIsCiAJLmNfaWRlbnQJPSB7ICJVTUMgVU1DIFVNQyIgfSwKIAkuY19tb2RlbHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggODdkMTAzZC4uZGQyMTMwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA1MDhiZWMxLi5lZjJjMzU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTExMCwxOSArMTEwLDUwIEBACiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiB0byB0aGUga2VybmVsIGU4MjAgbWFwLgogICovCi12b2lkIF9faW5pdCBlODIwX2FkZF9yZWdpb24odTY0IHN0YXJ0LCB1NjQgc2l6ZSwgaW50IHR5cGUpCitzdGF0aWMgdm9pZCBfX2luaXQgX19lODIwX2FkZF9yZWdpb24oc3RydWN0IGU4MjBtYXAgKmU4MjB4LCB1NjQgc3RhcnQsIHU2NCBzaXplLAorCQkJCQkgaW50IHR5cGUpCiB7Ci0JaW50IHggPSBlODIwLm5yX21hcDsKKwlpbnQgeCA9IGU4MjB4LT5ucl9tYXA7CiAKLQlpZiAoeCA9PSBBUlJBWV9TSVpFKGU4MjAubWFwKSkgeworCWlmICh4ID09IEFSUkFZX1NJWkUoZTgyMHgtPm1hcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJPb29wcyEgVG9vIG1hbnkgZW50cmllcyBpbiB0aGUgbWVtb3J5IG1hcCFcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZTgyMC5tYXBbeF0uYWRkciA9IHN0YXJ0OwotCWU4MjAubWFwW3hdLnNpemUgPSBzaXplOwotCWU4MjAubWFwW3hdLnR5cGUgPSB0eXBlOwotCWU4MjAubnJfbWFwKys7CisJZTgyMHgtPm1hcFt4XS5hZGRyID0gc3RhcnQ7CisJZTgyMHgtPm1hcFt4XS5zaXplID0gc2l6ZTsKKwllODIweC0+bWFwW3hdLnR5cGUgPSB0eXBlOworCWU4MjB4LT5ucl9tYXArKzsKK30KKwordm9pZCBfX2luaXQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKQoreworCV9fZTgyMF9hZGRfcmVnaW9uKCZlODIwLCBzdGFydCwgc2l6ZSwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlODIwX3ByaW50X3R5cGUodTMyIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFODIwX1JBTToKKwljYXNlIEU4MjBfUkVTRVJWRURfS0VSTjoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHVzYWJsZSkiKTsKKwkJYnJlYWs7CisJY2FzZSBFODIwX1JFU0VSVkVEOgorCQlwcmludGsoS0VSTl9DT05UICIocmVzZXJ2ZWQpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9BQ1BJOgorCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBkYXRhKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfTlZTOgorCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBOVlMpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9VTlVTQUJMRToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHVudXNhYmxlKSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9DT05UICJ0eXBlICV1IiwgdHlwZSk7CisJCWJyZWFrOworCX0KIH0KIAogdm9pZCBfX2luaXQgZTgyMF9wcmludF9tYXAoY2hhciAqd2hvKQpAQCAtMTM0LDI3ICsxNjUsOCBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZTgyMC5tYXBbaV0uYWRkciwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCSAgICAgICAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUpKTsKLQkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7Ci0JCWNhc2UgRTgyMF9SQU06Ci0JCWNhc2UgRTgyMF9SRVNFUlZFRF9LRVJOOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKHVzYWJsZSlcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9SRVNFUlZFRDoKLQkJCXByaW50ayhLRVJOX0NPTlQgIihyZXNlcnZlZClcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9BQ1BJOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgZGF0YSlcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9OVlM6Ci0JCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBOVlMpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfVU5VU0FCTEU6Ci0JCQlwcmludGsoIih1bnVzYWJsZSlcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9DT05UICJ0eXBlICV1XG4iLCBlODIwLm1hcFtpXS50eXBlKTsKLQkJCWJyZWFrOwotCQl9CisJCWU4MjBfcHJpbnRfdHlwZShlODIwLm1hcFtpXS50eXBlKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAl9CiB9CiAKQEAgLTIyMSw3ICsyMzMsNyBAQAogICovCiAKIGludCBfX2luaXQgc2FuaXRpemVfZTgyMF9tYXAoc3RydWN0IGU4MjBlbnRyeSAqYmlvc21hcCwgaW50IG1heF9ucl9tYXAsCi0JCQkJaW50ICpwbnJfbWFwKQorCQkJICAgICB1MzIgKnBucl9tYXApCiB7CiAJc3RydWN0IGNoYW5nZV9tZW1iZXIgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICpwYmlvczsgLyogcG9pbnRlciB0byBvcmlnaW5hbCBiaW9zIGVudHJ5ICovCkBAIC00MTcsMTEgKzQyOSwxMiBAQAogCXJldHVybiBfX2FwcGVuZF9lODIwX21hcChiaW9zbWFwLCBucl9tYXApOwogfQogCi1zdGF0aWMgdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZV9tYXAoc3RydWN0IGU4MjBtYXAgKmU4MjB4LCB1NjQgc3RhcnQsCitzdGF0aWMgdTY0IF9faW5pdCBfX2U4MjBfdXBkYXRlX3JhbmdlKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LAogCQkJCQl1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCiAJCQkJCXVuc2lnbmVkIG5ld190eXBlKQogewotCWludCBpOworCXU2NCBlbmQ7CisJdW5zaWduZWQgaW50IGk7CiAJdTY0IHJlYWxfdXBkYXRlZF9zaXplID0gMDsKIAogCUJVR19PTihvbGRfdHlwZSA9PSBuZXdfdHlwZSk7CkBAIC00MjksMjcgKzQ0Miw1NSBAQAogCWlmIChzaXplID4gKFVMTE9OR19NQVggLSBzdGFydCkpCiAJCXNpemUgPSBVTExPTkdfTUFYIC0gc3RhcnQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZTgyMCB1cGRhdGUgcmFuZ2U6ICUwMTZMeCAtICUwMTZMeCAiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQpOworCWU4MjBfcHJpbnRfdHlwZShvbGRfdHlwZSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiID09PiAiKTsKKwllODIwX3ByaW50X3R5cGUobmV3X3R5cGUpOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMHgtPm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjB4LT5tYXBbaV07CiAJCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOworCQl1NjQgZWlfZW5kOworCiAJCWlmIChlaS0+dHlwZSAhPSBvbGRfdHlwZSkKIAkJCWNvbnRpbnVlOwotCQkvKiB0b3RhbGx5IGNvdmVyZWQ/ICovCi0JCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJgotCQkgICAgKGVpLT5hZGRyICsgZWktPnNpemUpIDw9IChzdGFydCArIHNpemUpKSB7CisKKwkJZWlfZW5kID0gZWktPmFkZHIgKyBlaS0+c2l6ZTsKKwkJLyogdG90YWxseSBjb3ZlcmVkIGJ5IG5ldyByYW5nZT8gKi8KKwkJaWYgKGVpLT5hZGRyID49IHN0YXJ0ICYmIGVpX2VuZCA8PSBlbmQpIHsKIAkJCWVpLT50eXBlID0gbmV3X3R5cGU7CiAJCQlyZWFsX3VwZGF0ZWRfc2l6ZSArPSBlaS0+c2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9CisKKwkJLyogbmV3IHJhbmdlIGlzIHRvdGFsbHkgY292ZXJlZD8gKi8KKwkJaWYgKGVpLT5hZGRyIDwgc3RhcnQgJiYgZWlfZW5kID4gZW5kKSB7CisJCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgc3RhcnQsIHNpemUsIG5ld190eXBlKTsKKwkJCV9fZTgyMF9hZGRfcmVnaW9uKGU4MjB4LCBlbmQsIGVpX2VuZCAtIGVuZCwgZWktPnR5cGUpOworCQkJZWktPnNpemUgPSBzdGFydCAtIGVpLT5hZGRyOworCQkJcmVhbF91cGRhdGVkX3NpemUgKz0gc2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyogcGFydGlhbGx5IGNvdmVyZWQgKi8KIAkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIGVpLT5hZGRyKTsKLQkJZmluYWxfZW5kID0gbWluKHN0YXJ0ICsgc2l6ZSwgZWktPmFkZHIgKyBlaS0+c2l6ZSk7CisJCWZpbmFsX2VuZCA9IG1pbihlbmQsIGVpX2VuZCk7CiAJCWlmIChmaW5hbF9zdGFydCA+PSBmaW5hbF9lbmQpCiAJCQljb250aW51ZTsKLQkJZTgyMF9hZGRfcmVnaW9uKGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKLQkJCQkJIG5ld190eXBlKTsKKworCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgZmluYWxfc3RhcnQsIGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0LAorCQkJCSAgbmV3X3R5cGUpOworCiAJCXJlYWxfdXBkYXRlZF9zaXplICs9IGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0OwogCisJCS8qCisJCSAqIGxlZnQgcmFuZ2UgY291bGQgYmUgaGVhZCBvciB0YWlsLCBzbyBuZWVkIHRvIHVwZGF0ZQorCQkgKiBzaXplIGF0IGZpcnN0LgorCQkgKi8KIAkJZWktPnNpemUgLT0gZmluYWxfZW5kIC0gZmluYWxfc3RhcnQ7CiAJCWlmIChlaS0+YWRkciA8IGZpbmFsX3N0YXJ0KQogCQkJY29udGludWU7CkBAIC00NjEsMTMgKzUwMiwxMyBAQAogdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKIAkJCSAgICAgdW5zaWduZWQgbmV3X3R5cGUpCiB7Ci0JcmV0dXJuIGU4MjBfdXBkYXRlX3JhbmdlX21hcCgmZTgyMCwgc3RhcnQsIHNpemUsIG9sZF90eXBlLCBuZXdfdHlwZSk7CisJcmV0dXJuIF9fZTgyMF91cGRhdGVfcmFuZ2UoJmU4MjAsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwgbmV3X3R5cGUpOwogfQogCiBzdGF0aWMgdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZV9zYXZlZCh1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCQkgIHVuc2lnbmVkIG9sZF90eXBlLCB1bnNpZ25lZCBuZXdfdHlwZSkKIHsKLQlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2VfbWFwKCZlODIwX3NhdmVkLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsCisJcmV0dXJuIF9fZTgyMF91cGRhdGVfcmFuZ2UoJmU4MjBfc2F2ZWQsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwKIAkJCQkgICAgIG5ld190eXBlKTsKIH0KIApAQCAtNTExLDcgKzU1Miw3IEBACiAKIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7Ci0JaW50IG5yX21hcDsKKwl1MzIgbnJfbWFwOwogCiAJbnJfbWFwID0gZTgyMC5ucl9tYXA7CiAJaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLCBBUlJBWV9TSVpFKGU4MjAubWFwKSwgJm5yX21hcCkpCkBAIC01MjIsNyArNTYzLDcgQEAKIH0KIHN0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfZTgyMF9zYXZlZCh2b2lkKQogewotCWludCBucl9tYXA7CisJdTMyIG5yX21hcDsKIAogCW5yX21hcCA9IGU4MjBfc2F2ZWQubnJfbWFwOwogCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwX3NhdmVkLm1hcCwgQVJSQVlfU0laRShlODIwX3NhdmVkLm1hcCksICZucl9tYXApKQpAQCAtMTAyMCw4ICsxMDYxLDggQEAKIAkJCWNvbnRpbnVlOwogCQlyZXR1cm4gYWRkcjsKIAl9Ci0JcmV0dXJuIC0xVUw7CiAKKwlyZXR1cm4gLTFVTEw7CiB9CiAKIC8qCkBAIC0xMDM0LDEzICsxMDc1LDIyIEBACiAJdTY0IHN0YXJ0OwogCiAJc3RhcnQgPSBzdGFydHQ7Ci0Jd2hpbGUgKHNpemUgPCBzaXpldCkKKwl3aGlsZSAoc2l6ZSA8IHNpemV0ICYmIChzdGFydCArIDEpKQogCQlzdGFydCA9IGZpbmRfZTgyMF9hcmVhX3NpemUoc3RhcnQsICZzaXplLCBhbGlnbik7CiAKIAlpZiAoc2l6ZSA8IHNpemV0KQogCQlyZXR1cm4gMDsKIAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoc3RhcnQgPj0gTUFYTUVNKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnQgKyBzaXplID4gTUFYTUVNKQorCQlzaXplID0gTUFYTUVNIC0gc3RhcnQ7CisjZW5kaWYKKwogCWFkZHIgPSByb3VuZF9kb3duKHN0YXJ0ICsgc2l6ZSAtIHNpemV0LCBhbGlnbik7CisJaWYgKGFkZHIgPCBzdGFydCkKKwkJcmV0dXJuIDA7CiAJZTgyMF91cGRhdGVfcmFuZ2UoYWRkciwgc2l6ZXQsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIAllODIwX3VwZGF0ZV9yYW5nZV9zYXZlZChhZGRyLCBzaXpldCwgRTgyMF9SQU0sIEU4MjBfUkVTRVJWRUQpOwogCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBlYXJseV9yZXNlcnZlX2U4MjBcbiIpOwpAQCAtMTI1Myw3ICsxMzAzLDcgQEAKIHZvaWQgX19pbml0IGZpbmlzaF9lODIwX3BhcnNpbmcodm9pZCkKIHsKIAlpZiAodXNlcmRlZikgewotCQlpbnQgbnIgPSBlODIwLm5yX21hcDsKKwkJdTMyIG5yID0gZTgyMC5ucl9tYXA7CiAKIAkJaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLCBBUlJBWV9TSVpFKGU4MjAubWFwKSwgJm5yKSA8IDApCiAJCQllYXJseV9wYW5pYygiSW52YWxpZCB1c2VyIHN1cHBsaWVkIG1lbW9yeSBtYXAiKTsKQEAgLTEzMzYsNyArMTM4Niw3IEBACiBjaGFyICpfX2luaXQgZGVmYXVsdF9tYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKQogewogCWNoYXIgKndobyA9ICJCSU9TLWU4MjAiOwotCWludCBuZXdfbnI7CisJdTMyIG5ld19ucjsKIAkvKgogCSAqIFRyeSB0byBjb3B5IHRoZSBCSU9TLXN1cHBsaWVkIEU4MjAtbWFwLgogCSAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggNjM5YWQ5OC4uMzM1ZjA0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJcmV0dXJuIChjdHJsICYgREJHUF9FUlJPUikgPyAtREJHUF9FUlJDT0RFKGN0cmwpIDogREJHUF9MRU4oY3RybCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRiZ3BfbWRlbGF5KGludCBtcykKK3N0YXRpYyB2b2lkIF9faW5pdCBkYmdwX21kZWxheShpbnQgbXMpCiB7CiAJaW50IGk7CiAKQEAgLTMxMSw3ICszMTEsNyBAQAogCXdyaXRlbChoaSwgJmVoY2lfZGVidWctPmRhdGE0Nyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRiZ3BfZ2V0X2RhdGEodm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBkYmdwX2dldF9kYXRhKHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBidWY7CiAJdTMyIGxvLCBoaTsKQEAgLTM1NSw3ICszNTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGJncF9idWxrX3JlYWQodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwgdm9pZCAqZGF0YSwKK3N0YXRpYyBpbnQgX19pbml0IGRiZ3BfYnVsa19yZWFkKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsIHZvaWQgKmRhdGEsCiAJCQkJIGludCBzaXplKQogewogCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwpAQCAtMzg2LDggKzM4Niw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkYmdwX2NvbnRyb2xfbXNnKHVuc2lnbmVkIGRldm51bSwgaW50IHJlcXVlc3R0eXBlLCBpbnQgcmVxdWVzdCwKLQlpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqZGF0YSwgaW50IHNpemUpCitzdGF0aWMgaW50IF9faW5pdCBkYmdwX2NvbnRyb2xfbXNnKHVuc2lnbmVkIGRldm51bSwgaW50IHJlcXVlc3R0eXBlLAorCWludCByZXF1ZXN0LCBpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdTMyIHBpZHMsIGFkZHIsIGN0cmw7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CkBAIC00ODksNyArNDg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCitzdGF0aWMgaW50IF9faW5pdCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHBvcnRzYzsKIAl1MzIgZGVsYXlfdGltZSwgZGVsYXk7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKIHsKIAl1MzIgc3RhdHVzOwogCWludCByZXQsIHJlcHM7CkBAIC01NTcsMTMgKzU1NywxMyBAQAogCiB0eXBlZGVmIHZvaWQgKCpzZXRfZGVidWdfcG9ydF90KShpbnQgcG9ydCk7CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgdm9pZCBfX2luaXQgZGVmYXVsdF9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKIHsKIH0KIAotc3RhdGljIHNldF9kZWJ1Z19wb3J0X3Qgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0Oworc3RhdGljIHNldF9kZWJ1Z19wb3J0X3QgX19pbml0ZGF0YSBzZXRfZGVidWdfcG9ydCA9IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQ7CiAKLXN0YXRpYyB2b2lkIG52aWRpYV9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyB2b2lkIF9faW5pdCBudmlkaWFfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIGR3b3JkOwogCWR3b3JkID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggODk5ZTg5My4uYzkyOWFkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKQEAgLTQ0Miw4ICs0NDIsNyBAQAogCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAKLQkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwotCXRlc3R3ICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQorCXRlc3RsICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQogCWpueiBzeXNlbnRlcl9hdWRpdAogc3lzZW50ZXJfZG9fY2FsbDoKIAljbXBsICQobnJfc3lzY2FsbHMpLCAlZWF4CkBAIC00NTQsNyArNDUzLDcgQEAKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJF9USUZfQUxMV09SS19NQVNLLCAlY3gKKwl0ZXN0bCAkX1RJRl9BTExXT1JLX01BU0ssICVlY3gKIAlqbmUgc3lzZXhpdF9hdWRpdAogc3lzZW50ZXJfZXhpdDoKIC8qIGlmIHNvbWV0aGluZyBtb2RpZmllcyByZWdpc3RlcnMgaXQgbXVzdCBhbHNvIGRpc2FibGUgc3lzZXhpdCAqLwpAQCAtNDY4LDcgKzQ2Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiBzeXNlbnRlcl9hdWRpdDoKLQl0ZXN0dyAkKF9USUZfV09SS19TWVNDQUxMX0VOVFJZICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkKF9USUZfV09SS19TWVNDQUxMX0VOVFJZICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzY2FsbF90cmFjZV9lbnRyeQogCWFkZGwgJDQsJWVzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNApAQCAtNDg1LDcgKzQ4NCw3IEBACiAJam1wIHN5c2VudGVyX2RvX2NhbGwKIAogc3lzZXhpdF9hdWRpdDoKLQl0ZXN0dyAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVjeAorCXRlc3RsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwgJWVjeAogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCVRSQUNFX0lSUVNfT04KIAlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKQEAgLTQ5OCw3ICs0OTcsNyBAQAogCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKIAlUUkFDRV9JUlFTX09GRgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKLQl0ZXN0dyAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVjeAorCXRlc3RsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwgJWVjeAogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCW1vdmwgUFRfRUFYKCVlc3ApLCVlYXgJLyogcmVsb2FkIHN5c2NhbGwgcmV0dXJuIHZhbHVlICovCiAJam1wIHN5c2VudGVyX2V4aXQKQEAgLTUyMyw4ICs1MjIsNyBAQAogCVNBVkVfQUxMCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAJCQkJCSMgc3lzdGVtIGNhbGwgdHJhY2luZyBpbiBvcGVyYXRpb24gLyBlbXVsYXRpb24KLQkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwotCXRlc3R3ICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQorCXRlc3RsICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQogCWpueiBzeXNjYWxsX3RyYWNlX2VudHJ5CiAJY21wbCAkKG5yX3N5c2NhbGxzKSwgJWVheAogCWphZSBzeXNjYWxsX2JhZHN5cwpAQCAtNTM4LDcgKzUzNiw3IEBACiAJCQkJCSMgYmV0d2VlbiBzYW1wbGluZyBhbmQgdGhlIGlyZXQKIAlUUkFDRV9JUlFTX09GRgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKLQl0ZXN0dyAkX1RJRl9BTExXT1JLX01BU0ssICVjeAkjIGN1cnJlbnQtPndvcmsKKwl0ZXN0bCAkX1RJRl9BTExXT1JLX01BU0ssICVlY3gJIyBjdXJyZW50LT53b3JrCiAJam5lIHN5c2NhbGxfZXhpdF93b3JrCiAKIHJlc3RvcmVfYWxsOgpAQCAtNjczLDcgKzY3MSw3IEBACiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KIHN5c2NhbGxfZXhpdF93b3JrOgotCXRlc3RiICRfVElGX1dPUktfU1lTQ0FMTF9FWElULCAlY2wKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwgJWVjeAogCWp6IHdvcmtfcGVuZGluZwogCVRSQUNFX0lSUVNfT04KIAlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkJIyBjb3VsZCBsZXQgc3lzY2FsbF90cmFjZV9sZWF2ZSgpIGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggODNkMTgzNi4uYTMzMWVjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTM2OCw2ICszNjgsNyBAQAogRU5EKHNhdmVfcmVzdCkKIAogLyogc2F2ZSBjb21wbGV0ZSBzdGFjayBmcmFtZSAqLworCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCiBFTlRSWShzYXZlX3BhcmFub2lkKQogCVhDUFRfRlJBTUUgMSBSREkrOAogCWNsZApAQCAtMzk2LDYgKzM5Nyw3IEBACiAxOglyZXQKIAlDRklfRU5EUFJPQwogRU5EKHNhdmVfcGFyYW5vaWQpCisJLnBvcHNlY3Rpb24KIAogLyoKICAqIEEgbmV3bHkgZm9ya2VkIHByb2Nlc3MgZGlyZWN0bHkgY29udGV4dCBzd2l0Y2hlcyBpbnRvIHRoaXMgYWRkcmVzcy4KQEAgLTQxNiw3ICs0MTgsNiBAQAogCiAJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCiAKLQlDRklfUkVNRU1CRVJfU1RBVEUKIAlSRVNUT1JFX1JFU1QKIAogCXRlc3RsICQzLCBDUy1BUkdPRkZTRVQoJXJzcCkJCSMgZnJvbSBrZXJuZWxfdGhyZWFkPwpAQCAtNDI4LDcgKzQyOSw2IEBACiAJUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXJkaSwgLUFSR09GRlNFVAogCWptcCByZXRfZnJvbV9zeXNfY2FsbAkJCSMgZ28gdG8gdGhlIFNZU1JFVCBmYXN0cGF0aAogCi0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAlDRklfRU5EUFJPQwogRU5EKHJldF9mcm9tX2ZvcmspCiAKQEAgLTk4NCw2ICs5ODQsOCBAQAogI2VuZGlmCiBhcGljaW50ZXJydXB0IExPQ0FMX1RJTUVSX1ZFQ1RPUiBcCiAJYXBpY190aW1lcl9pbnRlcnJ1cHQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0CithcGljaW50ZXJydXB0IEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiBcCisJZ2VuZXJpY19pbnRlcnJ1cHQgc21wX2dlbmVyaWNfaW50ZXJydXB0CiAKICNpZmRlZiBDT05GSUdfU01QCiBhcGljaW50ZXJydXB0IElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCswIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCAyMzFiZGQzLi43NmY3MTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0zODksNzkgKzM4OSw2IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKLS8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLwotc3RhdGljIGludCBwdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBsb25nIHRpbWUsCi0JCQkJdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKQotewotCWludCBpbmRleDsKLQotCWlmICghY3VycmVudC0+cmV0X3N0YWNrKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogVGhlIHJldHVybiB0cmFjZSBzdGFjayBpcyBmdWxsICovCi0JaWYgKGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrID09IEZUUkFDRV9SRVRGVU5DX0RFUFRIIC0gMSkgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpbmRleCA9ICsrY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7Ci0JYmFycmllcigpOwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0ID0gcmV0OwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYyA9IGZ1bmM7Ci0JY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSA9IHRpbWU7Ci0JKmRlcHRoID0gaW5kZXg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmV0cmlldmUgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KLXN0YXRpYyB2b2lkIHBvcF9yZXR1cm5fdHJhY2Uoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCB1bnNpZ25lZCBsb25nICpyZXQpCi17Ci0JaW50IGluZGV4OwotCi0JaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKLQotCWlmICh1bmxpa2VseShpbmRleCA8IDApKSB7Ci0JCWZ0cmFjZV9ncmFwaF9zdG9wKCk7Ci0JCVdBUk5fT04oMSk7Ci0JCS8qIE1pZ2h0IGFzIHdlbGwgcGFuaWMsIG90aGVyd2lzZSB3ZSBoYXZlIG5vIHdoZXJlIHRvIGdvICovCi0JCSpyZXQgPSAodW5zaWduZWQgbG9uZylwYW5pYzsKLQkJcmV0dXJuOwotCX0KLQotCSpyZXQgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldDsKLQl0cmFjZS0+ZnVuYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYzsKLQl0cmFjZS0+Y2FsbHRpbWUgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lOwotCXRyYWNlLT5vdmVycnVuID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNlX292ZXJydW4pOwotCXRyYWNlLT5kZXB0aCA9IGluZGV4OwotCWJhcnJpZXIoKTsKLQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOwotCi19Ci0KLS8qCi0gKiBTZW5kIHRoZSB0cmFjZSB0byB0aGUgcmluZy1idWZmZXIuCi0gKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcy4KLSAqLwotdW5zaWduZWQgbG9uZyBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIodm9pZCkKLXsKLQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCB0cmFjZTsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCXBvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKLQl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKLQotCWlmICh1bmxpa2VseSghcmV0KSkgewotCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOwotCQlXQVJOX09OKDEpOwotCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCi0JCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCiAgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgpAQCAtNTIxLDcgKzQ0OCw3IEBACiAKIAljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCWlmIChwdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAorCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKIAkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CiAJCSpwYXJlbnQgPSBvbGQ7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwppbmRleCBhYzEwOGQxLi4zZjg1NzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAJcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOwogCi0JcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX2VuZCksICJURVhUIERBVEEgQlNTIik7CisJcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX19ic3Nfc3RvcCksICJURVhUIERBVEEgQlNTIik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkvKiBSZXNlcnZlIElOSVRSRCAqLwpAQCAtMjksOSArMjksNiBAQAogCQlyZXNlcnZlX2Vhcmx5KHJhbWRpc2tfaW1hZ2UsIHJhbWRpc2tfZW5kLCAiUkFNRElTSyIpOwogCX0KICNlbmRpZgotCXJlc2VydmVfZWFybHkoaW5pdF9wZ190YWJsZXNfc3RhcnQsIGluaXRfcGdfdGFibGVzX2VuZCwKLQkJCSJJTklUX1BHX1RBQkxFIik7Ci0KIAlyZXNlcnZlX2ViZGFfcmVnaW9uKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IGY1YjI3MjIuLjcwZWFhODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOwogCi0JcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX2VuZCksICJURVhUIERBVEEgQlNTIik7CisJcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX19ic3Nfc3RvcCksICJURVhUIERBVEEgQlNTIik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkvKiBSZXNlcnZlIElOSVRSRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYzMyY2ExOS4uMzA2ODM4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC0zOCw0MiArMzgsNDAgQEAKICNkZWZpbmUgWDg2X1ZFTkRPUl9JRAluZXdfY3B1X2RhdGErQ1BVSU5GT194ODZfdmVuZG9yX2lkCiAKIC8qCi0gKiBUaGlzIGlzIGhvdyBtdWNoIG1lbW9yeSAqaW4gYWRkaXRpb24gdG8gdGhlIG1lbW9yeSBjb3ZlcmVkIHVwIHRvCi0gKiBhbmQgaW5jbHVkaW5nIF9lbmQqIHdlIG5lZWQgbWFwcGVkIGluaXRpYWxseS4KKyAqIFRoaXMgaXMgaG93IG11Y2ggbWVtb3J5IGluIGFkZGl0aW9uIHRvIHRoZSBtZW1vcnkgY292ZXJlZCB1cCB0bworICogYW5kIGluY2x1ZGluZyBfZW5kIHdlIG5lZWQgbWFwcGVkIGluaXRpYWxseS4KICAqIFdlIG5lZWQ6Ci0gKiAgLSBvbmUgYml0IGZvciBlYWNoIHBvc3NpYmxlIHBhZ2UsIGJ1dCBvbmx5IGluIGxvdyBtZW1vcnksIHdoaWNoIG1lYW5zCi0gKiAgICAgMl4zMi80MDk2LzggPSAxMjhLIHdvcnN0IGNhc2UgKDRHLzRHIHNwbGl0LikKLSAqICAtIGVub3VnaCBzcGFjZSB0byBtYXAgYWxsIGxvdyBtZW1vcnksIHdoaWNoIG1lYW5zCi0gKiAgICAgKDJeMzIvNDA5NikgLyAxMDI0IHBhZ2VzICh3b3JzdCBjYXNlLCBub24gUEFFKQotICogICAgICgyXjMyLzQwOTYpIC8gNTEyICsgNCBwYWdlcyAod29yc3QgY2FzZSBmb3IgUEFFKQotICogIC0gYSBmZXcgcGFnZXMgZm9yIGFsbG9jYXRvciB1c2UgYmVmb3JlIHRoZSBrZXJuZWwgcGFnZXRhYmxlIGhhcwotICogICAgIGJlZW4gc2V0IHVwCisgKiAgICAgKEtFUk5FTF9JTUFHRV9TSVpFLzQwOTYpIC8gMTAyNCBwYWdlcyAod29yc3QgY2FzZSwgbm9uIFBBRSkKKyAqICAgICAoS0VSTkVMX0lNQUdFX1NJWkUvNDA5NikgLyA1MTIgKyA0IHBhZ2VzICh3b3JzdCBjYXNlIGZvciBQQUUpCiAgKgogICogTW9kdWxvIHJvdW5kaW5nLCBlYWNoIG1lZ2FieXRlIGFzc2lnbmVkIGhlcmUgcmVxdWlyZXMgYSBraWxvYnl0ZSBvZgogICogbWVtb3J5LCB3aGljaCBpcyBjdXJyZW50bHkgdW5yZWNsYWltZWQuCiAgKgogICogVGhpcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBhIHBhZ2UuCisgKgorICogS0VSTkVMX0lNQUdFX1NJWkUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBwYShfZW5kKQorICogYW5kIHNtYWxsIHRoYW4gbWF4X2xvd19wZm4sIG90aGVyd2lzZSB3aWxsIHdhc3RlIHNvbWUgcGFnZSB0YWJsZSBlbnRyaWVzCiAgKi8KLUxPV19QQUdFUyA9IDE8PCgzMi1QQUdFX1NISUZUX2FzbSkKLQotLyoKLSAqIFRvIHByZXNlcnZlIHRoZSBETUEgcG9vbCBpbiBQQUdFQUxMT0Mga2VybmVscywgd2UnbGwgYWxsb2NhdGUKLSAqIHBhZ2V0YWJsZXMgZnJvbSBhYm92ZSB0aGUgMTZNQiBETUEgbGltaXQsIHNvIHdlJ2xsIGhhdmUgdG8gc2V0Ci0gKiB1cCBwYWdldGFibGVzIDE2TUIgbW9yZSAod29yc3QtY2FzZSk6Ci0gKi8KLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi1MT1dfUEFHRVMgPSBMT1dfUEFHRVMgKyAweDEwMDAwMDAKLSNlbmRpZgogCiAjaWYgUFRSU19QRVJfUE1EID4gMQotUEFHRV9UQUJMRV9TSVpFID0gKExPV19QQUdFUyAvIFBUUlNfUEVSX1BNRCkgKyBQVFJTX1BFUl9QR0QKKyNkZWZpbmUgUEFHRV9UQUJMRV9TSVpFKHBhZ2VzKSAoKChwYWdlcykgLyBQVFJTX1BFUl9QTUQpICsgUFRSU19QRVJfUEdEKQogI2Vsc2UKLVBBR0VfVEFCTEVfU0laRSA9IChMT1dfUEFHRVMgLyBQVFJTX1BFUl9QR0QpCisjZGVmaW5lIFBBR0VfVEFCTEVfU0laRShwYWdlcykgKChwYWdlcykgLyBQVFJTX1BFUl9QR0QpCiAjZW5kaWYKLUJPT1RCSVRNQVBfU0laRSA9IExPV19QQUdFUyAvIDgKLUFMTE9DQVRPUl9TTE9QID0gNAogCi1JTklUX01BUF9CRVlPTkRfRU5EID0gQk9PVEJJVE1BUF9TSVpFICsgKFBBR0VfVEFCTEVfU0laRSArIEFMTE9DQVRPUl9TTE9QKSpQQUdFX1NJWkVfYXNtCisvKiBFbm91Z2ggc3BhY2UgdG8gZml0IHBhZ2V0YWJsZXMgZm9yIHRoZSBsb3cgbWVtb3J5IGxpbmVhciBtYXAgKi8KK01BUFBJTkdfQkVZT05EX0VORCA9IFwKKwlQQUdFX1RBQkxFX1NJWkUoKCgxPDwzMikgLSBfX1BBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSA8PCBQQUdFX1NISUZUCisKKy8qCisgKiBXb3JzdC1jYXNlIHNpemUgb2YgdGhlIGtlcm5lbCBtYXBwaW5nIHdlIG5lZWQgdG8gbWFrZToKKyAqIHRoZSB3b3JzdC1jYXNlIHNpemUgb2YgdGhlIGtlcm5lbCBpdHNlbGYsIHBsdXMgdGhlIGV4dHJhIHdlIG5lZWQKKyAqIHRvIG1hcCBmb3IgdGhlIGxpbmVhciBtYXAuCisgKi8KK0tFUk5FTF9QQUdFUyA9IChLRVJORUxfSU1BR0VfU0laRSArIE1BUFBJTkdfQkVZT05EX0VORCk+PlBBR0VfU0hJRlQKKworSU5JVF9NQVBfU0laRSA9IFBBR0VfVEFCTEVfU0laRShLRVJORUxfUEFHRVMpICogUEFHRV9TSVpFX2FzbQorUkVTRVJWRV9CUksocGFnZXRhYmxlcywgSU5JVF9NQVBfU0laRSkKIAogLyoKICAqIDMyLWJpdCBrZXJuZWwgZW50cnlwb2ludDsgb25seSB1c2VkIGJ5IHRoZSBib290IENQVS4gIE9uIGVudHJ5LApAQCAtMTY2LDEwICsxNjQsMTAgQEAKIAogLyoKICAqIEluaXRpYWxpemUgcGFnZSB0YWJsZXMuICBUaGlzIGNyZWF0ZXMgYSBQREUgYW5kIGEgc2V0IG9mIHBhZ2UKLSAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9lbmQuICBUaGUgdmFyaWFibGUKLSAqIGluaXRfcGdfdGFibGVzX2VuZCBpcyBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0ICJzYWZlIiBsb2NhdGlvbi4KKyAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9fYnJrX2Jhc2UuICBUaGUgdmFyaWFibGUKKyAqIF9icmtfZW5kIGlzIHNldCB1cCB0byBwb2ludCB0byB0aGUgZmlyc3QgInNhZmUiIGxvY2F0aW9uLgogICogTWFwcGluZ3MgYXJlIGNyZWF0ZWQgYm90aCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCAoaWRlbnRpdHkgbWFwcGluZykKLSAqIGFuZCBQQUdFX09GRlNFVCBmb3IgdXAgdG8gX2VuZCtzaXplb2YocGFnZSB0YWJsZXMpK0lOSVRfTUFQX0JFWU9ORF9FTkQuCisgKiBhbmQgUEFHRV9PRkZTRVQgZm9yIHVwIHRvIF9lbmQuCiAgKgogICogTm90ZSB0aGF0IHRoZSBzdGFjayBpcyBub3QgeWV0IHNldCB1cCEKICAqLwpAQCAtMTkwLDggKzE4OCw3IEBACiAKIAl4b3JsICVlYngsJWVieAkJCQkvKiAlZWJ4IGlzIGtlcHQgYXQgemVybyAqLwogCi0JbW92bCAkcGEocGcwKSwgJWVkaQotCW1vdmwgJWVkaSwgcGEoaW5pdF9wZ190YWJsZXNfc3RhcnQpCisJbW92bCAkcGEoX19icmtfYmFzZSksICVlZGkKIAltb3ZsICRwYShzd2FwcGVyX3BnX3BtZCksICVlZHgKIAltb3ZsICRQVEVfSURFTlRfQVRUUiwgJWVheAogMTA6CkBAIC0yMDksMTQgKzIwNiwxNCBAQAogCWxvb3AgMTFiCiAKIAkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIGFuZCBpbmNsdWRpbmcgSU5JVF9NQVBfQkVZT05EX0VORAotCSAqIGJ5dGVzIGJleW9uZCB0aGUgZW5kIG9mIG91ciBvd24gcGFnZSB0YWJsZXMuCisJICogRW5kIGNvbmRpdGlvbjogd2UgbXVzdCBtYXAgdXAgdG8gdGhlIGVuZCArIE1BUFBJTkdfQkVZT05EX0VORC4KIAkgKi8KLQlsZWFsIChJTklUX01BUF9CRVlPTkRfRU5EK1BURV9JREVOVF9BVFRSKSglZWRpKSwlZWJwCisJbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAogCWNtcGwgJWVicCwlZWF4CiAJamIgMTBiCiAxOgotCW1vdmwgJWVkaSxwYShpbml0X3BnX3RhYmxlc19lbmQpCisJYWRkbCAkX19QQUdFX09GRlNFVCwgJWVkaQorCW1vdmwgJWVkaSwgcGEoX2Jya19lbmQpCiAJc2hybCAkMTIsICVlYXgKIAltb3ZsICVlYXgsIHBhKG1heF9wZm5fbWFwcGVkKQogCkBAIC0yMjcsOCArMjI0LDcgQEAKIAogcGFnZV9wZGVfb2Zmc2V0ID0gKF9fUEFHRV9PRkZTRVQgPj4gMjApOwogCi0JbW92bCAkcGEocGcwKSwgJWVkaQotCW1vdmwgJWVkaSwgcGEoaW5pdF9wZ190YWJsZXNfc3RhcnQpCisJbW92bCAkcGEoX19icmtfYmFzZSksICVlZGkKIAltb3ZsICRwYShzd2FwcGVyX3BnX2RpciksICVlZHgKIAltb3ZsICRQVEVfSURFTlRfQVRUUiwgJWVheAogMTA6CkBAIC0yNDIsMTQgKzIzOCwxMyBAQAogCWFkZGwgJDB4MTAwMCwlZWF4CiAJbG9vcCAxMWIKIAkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIGFuZCBpbmNsdWRpbmcgSU5JVF9NQVBfQkVZT05EX0VORAotCSAqIGJ5dGVzIGJleW9uZCB0aGUgZW5kIG9mIG91ciBvd24gcGFnZSB0YWJsZXM7IHRoZSArMHgwMDcgaXMKLQkgKiB0aGUgYXR0cmlidXRlIGJpdHMKKwkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byB0aGUgZW5kICsgTUFQUElOR19CRVlPTkRfRU5ELgogCSAqLwotCWxlYWwgKElOSVRfTUFQX0JFWU9ORF9FTkQrUFRFX0lERU5UX0FUVFIpKCVlZGkpLCVlYnAKKwltb3ZsICRwYShfZW5kKSArIE1BUFBJTkdfQkVZT05EX0VORCArIFBURV9JREVOVF9BVFRSLCAlZWJwCiAJY21wbCAlZWJwLCVlYXgKIAlqYiAxMGIKLQltb3ZsICVlZGkscGEoaW5pdF9wZ190YWJsZXNfZW5kKQorCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlZGkKKwltb3ZsICVlZGksIHBhKF9icmtfZW5kKQogCXNocmwgJDEyLCAlZWF4CiAJbW92bCAlZWF4LCBwYShtYXhfcGZuX21hcHBlZCkKIApAQCAtNjM2LDYgKzYzMSw3IEBACiAJLmZpbGwgMTAyNCw0LDAKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbCA0MDk2LDEsMAorCiAvKgogICogVGhpcyBzdGFydHMgdGhlIGRhdGEgc2VjdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwppbmRleCAxMGY5MmZiLi4zNDc1NDQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwpAQCAtMywxNyArMywxNyBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pODI1My5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBERUZJTkVfU1BJTkxPQ0soaTgyNTNfbG9jayk7CiBFWFBPUlRfU1lNQk9MKGk4MjUzX2xvY2spOwpAQCAtNDAsNyArNDAsNyBAQAogewogCXNwaW5fbG9jaygmaTgyNTNfbG9jayk7CiAKLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CiAJCS8qIGJpbmFyeSwgbW9kZSAyLCBMU0IvTVNCLCBjaCAwICovCiAJCW91dGJfcGl0KDB4MzQsIFBJVF9NT0RFKTsKQEAgLTk1LDcgKzk1LDcgQEAKICAqIHJlZ2lzdGVyZWQuIFRoaXMgbWVjaGFuaXNtIHJlcGxhY2VzIHRoZSBwcmV2aW91cyAjaWZkZWYgTE9DQUxfQVBJQyAtCiAgKiAhdXNpbmdfYXBpY190aW1lciBkZWNpc2lvbnMgaW4gZG9fdGltZXJfaW50ZXJydXB0X2hvb2soKQogICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2xvY2tldmVudCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHBpdF9jZSA9IHsKIAkubmFtZQkJPSAicGl0IiwKIAkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9tb2RlCT0gaW5pdF9waXRfdGltZXIsCkBAIC0xMTQsMTUgKzExNCwxMyBAQAogCSAqIFN0YXJ0IHBpdCB3aXRoIHRoZSBib290IGNwdSBtYXNrIGFuZCBtYWtlIGl0IGdsb2JhbCBhZnRlciB0aGUKIAkgKiBJT19BUElDIGhhcyBiZWVuIGluaXRpYWxpemVkLgogCSAqLwotCXBpdF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcGl0X2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhDTE9DS19USUNLX1JBVEUsIE5TRUNfUEVSX1NFQywKLQkJCQkgICAgIHBpdF9jbG9ja2V2ZW50LnNoaWZ0KTsKLQlwaXRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRiwgJnBpdF9jbG9ja2V2ZW50KTsKLQlwaXRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJnBpdF9jbG9ja2V2ZW50KTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnBpdF9jbG9ja2V2ZW50KTsKLQlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmcGl0X2Nsb2NrZXZlbnQ7CisJcGl0X2NlLmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcGl0X2NlLm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsIHBpdF9jZS5zaGlmdCk7CisJcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGLCAmcGl0X2NlKTsKKwlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2UpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOworCWdsb2JhbF9jbG9ja19ldmVudCA9ICZwaXRfY2U7CiB9CiAKICNpZm5kZWYgQ09ORklHX1g4Nl82NApAQCAtMTMzLDExICsxMzEsMTEgQEAKICAqLwogc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQodm9pZCkKIHsKKwlzdGF0aWMgaW50IG9sZF9jb3VudDsKKwlzdGF0aWMgdTMyIG9sZF9qaWZzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50OwogCXUzMiBqaWZzOwotCXN0YXRpYyBpbnQgb2xkX2NvdW50OwotCXN0YXRpYyB1MzIgb2xkX2ppZnM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwogCS8qCkBAIC0xNzksOSArMTc3LDkgQEAKIAkgKiBQcmV2aW91cyBhdHRlbXB0cyB0byBoYW5kbGUgdGhlc2UgY2FzZXMgaW50ZWxsaWdlbnRseSB3ZXJlCiAJICogYnVnZ3ksIHNvIHdlIGp1c3QgZG8gdGhlIHNpbXBsZSB0aGluZyBub3cuCiAJICovCi0JaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpIHsKKwlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKIAkJY291bnQgPSBvbGRfY291bnQ7Ci0JfQorCiAJb2xkX2NvdW50ID0gY291bnQ7CiAJb2xkX2ppZnMgPSBqaWZzOwogCkBAIC0xOTIsMTMgKzE5MCwxMyBAQAogCXJldHVybiAoY3ljbGVfdCkoamlmcyAqIExBVENIKSArIGNvdW50OwogfQogCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3BpdCA9IHsKLQkubmFtZQk9ICJwaXQiLAotCS5yYXRpbmcgPSAxMTAsCi0JLnJlYWQJPSBwaXRfcmVhZCwKLQkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5tdWx0CT0gMCwKLQkuc2hpZnQJPSAyMCwKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgcGl0X2NzID0geworCS5uYW1lCQk9ICJwaXQiLAorCS5yYXRpbmcJCT0gMTEwLAorCS5yZWFkCQk9IHBpdF9yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5tdWx0CQk9IDAsCisJLnNoaWZ0CQk9IDIwLAogfTsKIAogc3RhdGljIHZvaWQgcGl0X2Rpc2FibGVfY2xvY2tzb3VyY2Uodm9pZCkKQEAgLTIwNiw5ICsyMDQsOSBAQAogCS8qCiAJICogVXNlIG11bHQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyByZWdpc3RlcmVkIG9yIG5vdAogCSAqLwotCWlmIChjbG9ja3NvdXJjZV9waXQubXVsdCkgewotCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV9waXQpOwotCQljbG9ja3NvdXJjZV9waXQubXVsdCA9IDA7CisJaWYgKHBpdF9jcy5tdWx0KSB7CisJCWNsb2Nrc291cmNlX3VucmVnaXN0ZXIoJnBpdF9jcyk7CisJCXBpdF9jcy5tdWx0ID0gMDsKIAl9CiB9CiAKQEAgLTIyMiwxMyArMjIwLDEzIEBACiAJICAqIC0gd2hlbiBsb2NhbCBBUElDIHRpbWVyIGlzIGFjdGl2ZSAoUElUIGlzIHN3aXRjaGVkIG9mZikKIAkgICovCiAJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxIHx8IGlzX2hwZXRfZW5hYmxlZCgpIHx8Ci0JICAgIHBpdF9jbG9ja2V2ZW50Lm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpCisJICAgIHBpdF9jZS5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQogCQlyZXR1cm4gMDsKIAotCWNsb2Nrc291cmNlX3BpdC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsCi0JCQkJCQkgICBjbG9ja3NvdXJjZV9waXQuc2hpZnQpOwotCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfcGl0KTsKKwlwaXRfY3MubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLCBwaXRfY3Muc2hpZnQpOworCisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZwaXRfY3MpOwogfQogYXJjaF9pbml0Y2FsbChpbml0X3BpdF9jbG9ja3NvdXJjZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qICFDT05GSUdfWDg2XzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCmluZGV4IDcyMGQyNjAuLmE5NzliNWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCkBAIC03LDEwICs3LDEwIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogaW50IGlvX2RlbGF5X3R5cGUgX19yZWFkX21vc3RseSA9IENPTkZJR19ERUZBVUxUX0lPX0RFTEFZX1RZUEU7CiAKQEAgLTQ3LDggKzQ3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRtaV9pb19kZWxheV8weGVkX3BvcnQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewogCWlmIChpb19kZWxheV90eXBlID09IENPTkZJR19JT19ERUxBWV9UWVBFXzBYODApIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogdXNpbmcgMHhlZCBJL08gZGVsYXkgcG9ydFxuIiwKLQkJCWlkLT5pZGVudCk7CisJCXByX25vdGljZSgiJXM6IHVzaW5nIDB4ZWQgSS9PIGRlbGF5IHBvcnRcbiIsIGlkLT5pZGVudCk7CiAJCWlvX2RlbGF5X3R5cGUgPSBDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVEOwogCX0KIApAQCAtNjQsNDAgKzYzLDQwIEBACiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiQ29tcGFxIFByZXNhcmlvIFY2MDAwIiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCNyIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCNyIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiBkdjkwMDB6IiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCOSIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCOSIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiBkdjYwMDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEI4IikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEI4IikKIAkJfQogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIkhQIFBhdmlsaW9uIHR4MTAwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQkYiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQkYiKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiUHJlc2FyaW8gRjcwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwRDMiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwRDMiKQogCQl9CiAJfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCBmMTNjYTE2Li4zYWFmN2I5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0xNSw2ICsxNSw5IEBACiAKIGF0b21pY190IGlycV9lcnJfY291bnQ7CiAKKy8qIEZ1bmN0aW9uIHBvaW50ZXIgZm9yIGdlbmVyaWMgaW50ZXJydXB0IHZlY3RvciBoYW5kbGluZyAqLwordm9pZCAoKmdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikodm9pZCkgPSBOVUxMOworCiAvKgogICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCiAgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KQEAgLTQyLDU1ICs0NSw2MCBAQAogLyoKICAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6CiAgKi8KLXN0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCkKK3N0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgaW50IHByZWMpCiB7CiAJaW50IGo7CiAKLQlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk5NSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7CiAJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKICNlbmRpZgorCWlmIChnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pIHsKKwkJc2VxX3ByaW50ZihwLCAiUExUOiAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmdlbmVyaWNfaXJxcyk7CisJCXNlcV9wcmludGYocCwgIiAgUGxhdGZvcm0gaW50ZXJydXB0c1xuIik7CisJfQogI2lmZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJFUyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkNBTCIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9jYWxsX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUTEIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGxiX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUUk0iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOwogIyBpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOwogIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAlMTB1XG4iLCBwcmVjLCAiRVJSIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLQlzZXFfcHJpbnRmKHAsICJNSVM6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAlMTB1XG4iLCBwcmVjLCAiTUlTIiwgYXRvbWljX3JlYWQoJmlycV9taXNfY291bnQpKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtOTgsMTkgKzEwNiwyMiBAQAogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgYW55X2NvdW50ID0gMDsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqLCBwcmVjOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAlpZiAoaSA+IG5yX2lycXMpCiAJCXJldHVybiAwOwogCisJZm9yIChwcmVjID0gMywgaiA9IDEwMDA7IHByZWMgPCAxMCAmJiBqIDw9IG5yX2lycXM7ICsrcHJlYykKKwkJaiAqPSAxMDsKKwogCWlmIChpID09IG5yX2lycXMpCi0JCXJldHVybiBzaG93X290aGVyX2ludGVycnVwdHMocCk7CisJCXJldHVybiBzaG93X290aGVyX2ludGVycnVwdHMocCwgcHJlYyk7CiAKIAkvKiBwcmludCBoZWFkZXIgKi8KIAlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7CisJCXNlcV9wcmludGYocCwgIiUqcyIsIHByZWMgKyA4LCAiIik7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLCBqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CkBAIC0xMjEsMjMgKzEzMiwxNSBAQAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOwotI2Vsc2UKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCWFueV9jb3VudCB8PSBrc3RhdF9pcnFzX2NwdShpLCBqKTsKLSNlbmRpZgogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQogCQlnb3RvIG91dDsKIAotCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2Vsc2UKKwlzZXFfcHJpbnRmKHAsICIlKmQ6ICIsIHByZWMsIGkpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7Ci0jZW5kaWYKIAlzZXFfcHJpbnRmKHAsICIgJThzIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CiAJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBkZXNjLT5uYW1lKTsKIApAQCAtMTYyLDcgKzE2NSwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5hcGljX3RpbWVyX2lycXM7CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7CiAjZW5kaWYKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKQorCQlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmdlbmVyaWNfaXJxczsKICNpZmRlZiBDT05GSUdfU01QCiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfcmVzY2hlZF9jb3VudDsKIAlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9jYWxsX2NvdW50OwpAQCAtMTc0LDkgKzE4MCw2IEBACiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OwogI2VuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9zcHVyaW91c19jb3VudDsKLSNlbmRpZgogCXJldHVybiBzdW07CiB9CiAKQEAgLTIyNiw0ICsyMjksMjcgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIEhhbmRsZXIgZm9yIEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUi4KKyAqLwordm9pZCBzbXBfZ2VuZXJpY19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCisJYWNrX0FQSUNfaXJxKCk7CisKKwlleGl0X2lkbGUoKTsKKworCWlycV9lbnRlcigpOworCisJaW5jX2lycV9zdGF0KGdlbmVyaWNfaXJxcyk7CisKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKQorCQlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24oKTsKKworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTCh2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCmluZGV4IDUwYjhjM2EuLmJjMTMyNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwpAQCAtMTc1LDYgKzE3NSw5IEBACiAJLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCiAJYWxsb2NfaW50cl9nYXRlKExPQ0FMX1RJTUVSX1ZFQ1RPUiwgYXBpY190aW1lcl9pbnRlcnJ1cHQpOwogCisJLyogZ2VuZXJpYyBJUEkgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHVzZSAqLworCWFsbG9jX2ludHJfZ2F0ZShHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IsIGdlbmVyaWNfaW50ZXJydXB0KTsKKwogCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCiAJYWxsb2NfaW50cl9nYXRlKFNQVVJJT1VTX0FQSUNfVkVDVE9SLCBzcHVyaW91c19pbnRlcnJ1cHQpOwogCWFsbG9jX2ludHJfZ2F0ZShFUlJPUl9BUElDX1ZFQ1RPUiwgZXJyb3JfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCmluZGV4IGRhNDgxYTEuLmM3YTQ5ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAJLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCiAJYWxsb2NfaW50cl9nYXRlKExPQ0FMX1RJTUVSX1ZFQ1RPUiwgYXBpY190aW1lcl9pbnRlcnJ1cHQpOwogCisJLyogZ2VuZXJpYyBJUEkgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHVzZSAqLworCWFsbG9jX2ludHJfZ2F0ZShHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IsIGdlbmVyaWNfaW50ZXJydXB0KTsKKwogCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCiAJYWxsb2NfaW50cl9nYXRlKFNQVVJJT1VTX0FQSUNfVkVDVE9SLCBzcHVyaW91c19pbnRlcnJ1cHQpOwogCWFsbG9jX2ludHJfZ2F0ZShFUlJPUl9BUElDX1ZFQ1RPUiwgZXJyb3JfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jIGIvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKaW5kZXggZmY3ZDNiMC4uZTQ0NDM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKQEAgLTgsMTEgKzgsMTEgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKQEAgLTI2LDkgKzI2LDggQEAKIAl1MzIgbGVuOwogfTsKIAotc3RhdGljIHNzaXplX3QKLXNldHVwX2RhdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsCi0JCWxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHNldHVwX2RhdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBzZXR1cF9kYXRhX25vZGUgKm5vZGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyByZW1haW47CkBAIC0zOSwyMCArMzgsMjEgQEAKIAogCWlmIChwb3MgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChwb3MgPj0gbm9kZS0+bGVuKQogCQlyZXR1cm4gMDsKIAogCWlmIChjb3VudCA+IG5vZGUtPmxlbiAtIHBvcykKIAkJY291bnQgPSBub2RlLT5sZW4gLSBwb3M7CisKIAlwYSA9IG5vZGUtPnBhZGRyICsgc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSArIHBvczsKIAlwZyA9IHBmbl90b19wYWdlKChwYSArIGNvdW50IC0gMSkgPj4gUEFHRV9TSElGVCk7CiAJaWYgKFBhZ2VIaWdoTWVtKHBnKSkgewogCQlwID0gaW9yZW1hcF9jYWNoZShwYSwgY291bnQpOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOWElPOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXAgPSBfX3ZhKHBhKTsKLQl9CiAKIAlyZW1haW4gPSBjb3B5X3RvX3VzZXIodXNlcl9idWYsIHAsIGNvdW50KTsKIApAQCAtNzAsMTIgKzcwLDEzIEBACiBzdGF0aWMgaW50IHNldHVwX2RhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfc2V0dXBfZGF0YSA9IHsKLQkucmVhZCA9CQlzZXR1cF9kYXRhX3JlYWQsCi0JLm9wZW4gPQkJc2V0dXBfZGF0YV9vcGVuLAorCS5yZWFkCQk9IHNldHVwX2RhdGFfcmVhZCwKKwkub3BlbgkJPSBzZXR1cF9kYXRhX29wZW4sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtODQsNTcgKzg1LDUwIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZCwgKnR5cGUsICpkYXRhOwogCWNoYXIgYnVmWzE2XTsKLQlpbnQgZXJyb3I7CiAKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgbm8pOwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYnVmLCBwYXJlbnQpOwotCWlmICghZCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXR5cGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoInR5cGUiLCBTX0lSVUdPLCBkLCAmbm9kZS0+dHlwZSk7Ci0JaWYgKCF0eXBlKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIXR5cGUpCiAJCWdvdG8gZXJyX2RpcjsKLQl9CisKIAlkYXRhID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGF0YSIsIFNfSVJVR08sIGQsIG5vZGUsICZmb3BzX3NldHVwX2RhdGEpOwotCWlmICghZGF0YSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCFkYXRhKQogCQlnb3RvIGVycl90eXBlOwotCX0KKwogCXJldHVybiAwOwogCiBlcnJfdHlwZToKIAlkZWJ1Z2ZzX3JlbW92ZSh0eXBlKTsKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZCk7Ci1lcnJfcmV0dXJuOgotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGRlbnRyeSAqcGFyZW50KQogewogCXN0cnVjdCBzZXR1cF9kYXRhX25vZGUgKm5vZGU7CiAJc3RydWN0IHNldHVwX2RhdGEgKmRhdGE7Ci0JaW50IGVycm9yLCBubyA9IDA7CisJaW50IGVycm9yID0gLUVOT01FTTsKIAlzdHJ1Y3QgZGVudHJ5ICpkOwogCXN0cnVjdCBwYWdlICpwZzsKIAl1NjQgcGFfZGF0YTsKKwlpbnQgbm8gPSAwOwogCiAJZCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2V0dXBfZGF0YSIsIHBhcmVudCk7Ci0JaWYgKCFkKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmV0dXJuOwotCX0KKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcGFfZGF0YSA9IGJvb3RfcGFyYW1zLmhkci5zZXR1cF9kYXRhOwogCiAJd2hpbGUgKHBhX2RhdGEpIHsKIAkJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbm9kZSkgewotCQkJZXJyb3IgPSAtRU5PTUVNOworCQlpZiAoIW5vZGUpCiAJCQlnb3RvIGVycl9kaXI7Ci0JCX0KKwogCQlwZyA9IHBmbl90b19wYWdlKChwYV9kYXRhK3NpemVvZigqZGF0YSktMSkgPj4gUEFHRV9TSElGVCk7CiAJCWlmIChQYWdlSGlnaE1lbShwZykpIHsKIAkJCWRhdGEgPSBpb3JlbWFwX2NhY2hlKHBhX2RhdGEsIHNpemVvZigqZGF0YSkpOwpAQCAtMTQzLDkgKzEzNyw4IEBACiAJCQkJZXJyb3IgPSAtRU5YSU87CiAJCQkJZ290byBlcnJfZGlyOwogCQkJfQotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCWRhdGEgPSBfX3ZhKHBhX2RhdGEpOwotCQl9CiAKIAkJbm9kZS0+cGFkZHIgPSBwYV9kYXRhOwogCQlub2RlLT50eXBlID0gZGF0YS0+dHlwZTsKQEAgLTE1OSwxMSArMTUyLDExIEBACiAJCQlnb3RvIGVycl9kaXI7CiAJCW5vKys7CiAJfQorCiAJcmV0dXJuIDA7CiAKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZCk7Ci1lcnJfcmV0dXJuOgogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTc1LDI4ICsxNjgsMjYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGJvb3RfcGFyYW1zX2tkZWJ1Z2ZzX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkYnAsICp2ZXJzaW9uLCAqZGF0YTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWRicCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYm9vdF9wYXJhbXMiLCBOVUxMKTsKLQlpZiAoIWRicCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkYnApCisJCXJldHVybiAtRU5PTUVNOworCiAJdmVyc2lvbiA9IGRlYnVnZnNfY3JlYXRlX3gxNigidmVyc2lvbiIsIFNfSVJVR08sIGRicCwKIAkJCQkgICAgICZib290X3BhcmFtcy5oZHIudmVyc2lvbik7Ci0JaWYgKCF2ZXJzaW9uKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIXZlcnNpb24pCiAJCWdvdG8gZXJyX2RpcjsKLQl9CisKIAlkYXRhID0gZGVidWdmc19jcmVhdGVfYmxvYigiZGF0YSIsIFNfSVJVR08sIGRicCwKIAkJCQkgICAmYm9vdF9wYXJhbXNfYmxvYik7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIWRhdGEpCiAJCWdvdG8gZXJyX3ZlcnNpb247Ci0JfQorCiAJZXJyb3IgPSBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlcyhkYnApOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJfZGF0YTsKKwogCXJldHVybiAwOwogCiBlcnJfZGF0YToKQEAgLTIwNSwxMCArMTk2LDkgQEAKIAlkZWJ1Z2ZzX3JlbW92ZSh2ZXJzaW9uKTsKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZGJwKTsKLWVycl9yZXR1cm46CiAJcmV0dXJuIGVycm9yOwogfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfa2RlYnVnZnNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNDU1OGRkMy4uNTViOTQ2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlOwogCWtwcm9iZV9vcGNvZGVfdCAqb3JpZ19vcGNvZGVzID0gb3Bjb2RlczsKIAotCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhvcGNvZGVzKSkKKwlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoKHVuc2lnbmVkIGxvbmcpb3Bjb2RlcykpCiAJCXJldHVybiAwOwkvKiBQYWdlIGZhdWx0IG1heSBvY2N1ciBvbiB0aGlzIGFkZHJlc3MuICovCiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCmluZGV4IDQ3OGJjYTkuLjMzMDE5ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKQEAgLTEzOCwxMiArMTM4LDYgQEAKIAlrdm1fbW11X3dyaXRlKHB0ZXAsIHB0ZV92YWwocHRlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCWt2bV9tbXVfd3JpdGUocHRlcCwgcHRlX3ZhbChwdGUpKTsKLX0KLQogc3RhdGljIHZvaWQga3ZtX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKQEAgLTIyMCw3ICsyMTQsNiBAQAogI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJCXB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMgPSBrdm1fc2V0X3B0ZV9hdG9taWM7Ci0JCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50ID0ga3ZtX3NldF9wdGVfcHJlc2VudDsKIAkJcHZfbW11X29wcy5wdGVfY2xlYXIgPSBrdm1fcHRlX2NsZWFyOwogCQlwdl9tbXVfb3BzLnBtZF9jbGVhciA9IGt2bV9wbWRfY2xlYXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCmluZGV4IGY1ZmM4YzcuLmU3MzY4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwpAQCAtMTQsMTIgKzE0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CkBAIC02Myw3ICs2Myw3IEBACiAJCSJcdG1vdmwgJSVlYXgsJSVmc1xuIgogCQkiXHRtb3ZsICUlZWF4LCUlZ3NcbiIKIAkJIlx0bW92bCAlJWVheCwlJXNzXG4iCi0JCTo6OiAiZWF4IiwgIm1lbW9yeSIpOworCQk6IDogOiAiZWF4IiwgIm1lbW9yeSIpOwogI3VuZGVmIFNUUgogI3VuZGVmIF9fU1RSCiB9CkBAIC0yMDUsNyArMjA1LDggQEAKIAogCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgewogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkvKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgorCQkvKgorCQkgKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgogCQkgKiBnZXQgdGltZXIgaW50ZXJydXB0cyBpbiBzZWNvbmQga2VybmVsLiBrZXhlYy9rZHVtcAogCQkgKiBwYXRocyBhbHJlYWR5IGhhdmUgY2FsbHMgdG8gZGlzYWJsZV9JT19BUElDKCkgaW4KIAkJICogb25lIGZvcm0gb3Igb3RoZXIuIGtleGVjIGp1bXAgcGF0aCBhbHNvIG5lZWQKQEAgLTIyNyw3ICsyMjgsOCBAQAogCQlwYWdlX2xpc3RbUEFfU1dBUF9QQUdFXSA9IChwYWdlX3RvX3BmbihpbWFnZS0+c3dhcF9wYWdlKQogCQkJCQkJPDwgUEFHRV9TSElGVCk7CiAKLQkvKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQorCS8qCisJICogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKIAkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKIAkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAogCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCkBAIC0yMzcsMTEgKzIzOSwxMiBAQAogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCiAJICovCiAJbG9hZF9zZWdtZW50cygpOwotCS8qIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgorCS8qCisJICogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCiAJICogSWYgeW91IHdhbnQgdG8gbG9hZCB0aGVtIHlvdSBtdXN0IHNldCB1cCB5b3VyIG93biBpZHQgJiBnZHQuCiAJICovCi0Jc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksMCk7Ci0Jc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksMCk7CisJc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksIDApOworCXNldF9pZHQocGh5c190b192aXJ0KDApLCAwKTsKIAogCS8qIG5vdyBjYWxsIGl0ICovCiAJaW1hZ2UtPnN0YXJ0ID0gcmVsb2NhdGVfa2VybmVsX3B0cigodW5zaWduZWQgbG9uZylpbWFnZS0+aGVhZCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IDY5OTNkNTEuLjg5Y2VhNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwpAQCAtMTIsMTEgKzEyLDQ3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpbml0X29uZV9sZXZlbDJfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSwgcGdkX3QgKnBnZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCisJYWRkciAmPSBQTURfTUFTSzsKKwlwZ2QgKz0gcGdkX2luZGV4KGFkZHIpOworCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKKwkJcGFnZSA9IGtpbWFnZV9hbGxvY19jb250cm9sX3BhZ2VzKGltYWdlLCAwKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CisJCXB1ZCA9IChwdWRfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHB1ZCwgMCwgUEFHRV9TSVpFKTsKKwkJc2V0X3BnZChwZ2QsIF9fcGdkKF9fcGEocHVkKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJcGFnZSA9IGtpbWFnZV9hbGxvY19jb250cm9sX3BhZ2VzKGltYWdlLCAwKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CisJCXBtZCA9IChwbWRfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHBtZCwgMCwgUEFHRV9TSVpFKTsKKwkJc2V0X3B1ZChwdWQsIF9fcHVkKF9fcGEocG1kKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCisJCXNldF9wbWQocG1kLCBfX3BtZChhZGRyIHwgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKSk7CisJcmVzdWx0ID0gMDsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgdm9pZCBpbml0X2xldmVsMl9wYWdlKHBtZF90ICpsZXZlbDJwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC04Myw5ICsxMTksOCBAQAogCQl9CiAJCWxldmVsM3AgPSAocHVkX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CiAJCXJlc3VsdCA9IGluaXRfbGV2ZWwzX3BhZ2UoaW1hZ2UsIGxldmVsM3AsIGFkZHIsIGxhc3RfYWRkcik7Ci0JCWlmIChyZXN1bHQpIHsKKwkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gb3V0OwotCQl9CiAJCXNldF9wZ2QobGV2ZWw0cCsrLCBfX3BnZChfX3BhKGxldmVsM3ApIHwgX0tFUk5QR19UQUJMRSkpOwogCQlhZGRyICs9IFBHRElSX1NJWkU7CiAJfQpAQCAtMTU2LDYgKzE5MSwxMyBAQAogCXJlc3VsdCA9IGluaXRfbGV2ZWw0X3BhZ2UoaW1hZ2UsIGxldmVsNHAsIDAsIG1heF9wZm4gPDwgUEFHRV9TSElGVCk7CiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKKwkvKgorCSAqIGltYWdlLT5zdGFydCBtYXkgYmUgb3V0c2lkZSAwIH4gbWF4X3BmbiwgZm9yIGV4YW1wbGUgd2hlbgorCSAqIGp1bXAgYmFjayB0byBvcmlnaW5hbCBrZXJuZWwgZnJvbSBrZXhlY2VkIGtlcm5lbAorCSAqLworCXJlc3VsdCA9IGluaXRfb25lX2xldmVsMl9wYWdlKGltYWdlLCBsZXZlbDRwLCBpbWFnZS0+c3RhcnQpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CiAJcmV0dXJuIGluaXRfdHJhbnNpdGlvbl9wZ3RhYmxlKGltYWdlLCBsZXZlbDRwKTsKIH0KIApAQCAtMjI5LDIwICsyNzEsNDUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdFtQQUdFU19OUl07CiAJdm9pZCAqY29udHJvbF9wYWdlOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0JdHJhY2VyX2Rpc2FibGUoKTsKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKKyNlbmRpZgorCisJc2F2ZV9mdHJhY2VfZW5hYmxlZCA9IF9fZnRyYWNlX2VuYWJsZWRfc2F2ZSgpOwogCiAJLyogSW50ZXJydXB0cyBhcmVuJ3QgYWNjZXB0YWJsZSB3aGlsZSB3ZSByZWJvb3QgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCisJaWYgKGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KSB7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcHV0IEFQSUNzIGluIGxlZ2FjeSBtb2RlIHNvIHRoYXQgd2UgY2FuCisJCSAqIGdldCB0aW1lciBpbnRlcnJ1cHRzIGluIHNlY29uZCBrZXJuZWwuIGtleGVjL2tkdW1wCisJCSAqIHBhdGhzIGFscmVhZHkgaGF2ZSBjYWxscyB0byBkaXNhYmxlX0lPX0FQSUMoKSBpbgorCQkgKiBvbmUgZm9ybSBvciBvdGhlci4ga2V4ZWMganVtcCBwYXRoIGFsc28gbmVlZAorCQkgKiBvbmUuCisJCSAqLworCQlkaXNhYmxlX0lPX0FQSUMoKTsKKyNlbmRpZgorCX0KKwogCWNvbnRyb2xfcGFnZSA9IHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpICsgUEFHRV9TSVpFOwotCW1lbWNweShjb250cm9sX3BhZ2UsIHJlbG9jYXRlX2tlcm5lbCwgUEFHRV9TSVpFKTsKKwltZW1jcHkoY29udHJvbF9wYWdlLCByZWxvY2F0ZV9rZXJuZWwsIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRSk7CiAKIAlwYWdlX2xpc3RbUEFfQ09OVFJPTF9QQUdFXSA9IHZpcnRfdG9fcGh5cyhjb250cm9sX3BhZ2UpOworCXBhZ2VfbGlzdFtWQV9DT05UUk9MX1BBR0VdID0gKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlOwogCXBhZ2VfbGlzdFtQQV9UQUJMRV9QQUdFXSA9CiAJICAodW5zaWduZWQgbG9uZylfX3BhKHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpKTsKIAotCS8qIFRoZSBzZWdtZW50IHJlZ2lzdGVycyBhcmUgZnVubnkgdGhpbmdzLCB0aGV5IGhhdmUgYm90aCBhCisJaWYgKGltYWdlLT50eXBlID09IEtFWEVDX1RZUEVfREVGQVVMVCkKKwkJcGFnZV9saXN0W1BBX1NXQVBfUEFHRV0gPSAocGFnZV90b19wZm4oaW1hZ2UtPnN3YXBfcGFnZSkKKwkJCQkJCTw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQogCSAqIHZpc2libGUgYW5kIGFuIGludmlzaWJsZSBwYXJ0LiAgV2hlbmV2ZXIgdGhlIHZpc2libGUgcGFydCBpcwogCSAqIHNldCB0byBhIHNwZWNpZmljIHNlbGVjdG9yLCB0aGUgaW52aXNpYmxlIHBhcnQgaXMgbG9hZGVkCiAJICogd2l0aCBmcm9tIGEgdGFibGUgaW4gbWVtb3J5LiAgQXQgbm8gb3RoZXIgdGltZSBpcyB0aGUKQEAgLTI1MiwxNSArMzE5LDI1IEBACiAJICogc2VnbWVudHMsIGJlZm9yZSBJIHphcCB0aGUgZ2R0IHdpdGggYW4gaW52YWxpZCB2YWx1ZS4KIAkgKi8KIAlsb2FkX3NlZ21lbnRzKCk7Ci0JLyogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCisJLyoKKwkgKiBUaGUgZ2R0ICYgaWR0IGFyZSBub3cgaW52YWxpZC4KIAkgKiBJZiB5b3Ugd2FudCB0byBsb2FkIHRoZW0geW91IG11c3Qgc2V0IHVwIHlvdXIgb3duIGlkdCAmIGdkdC4KIAkgKi8KLQlzZXRfZ2R0KHBoeXNfdG9fdmlydCgwKSwwKTsKLQlzZXRfaWR0KHBoeXNfdG9fdmlydCgwKSwwKTsKKwlzZXRfZ2R0KHBoeXNfdG9fdmlydCgwKSwgMCk7CisJc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksIDApOwogCiAJLyogbm93IGNhbGwgaXQgKi8KLQlyZWxvY2F0ZV9rZXJuZWwoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmhlYWQsICh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdCwKLQkJCWltYWdlLT5zdGFydCk7CisJaW1hZ2UtPnN0YXJ0ID0gcmVsb2NhdGVfa2VybmVsKCh1bnNpZ25lZCBsb25nKWltYWdlLT5oZWFkLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZylwYWdlX2xpc3QsCisJCQkJICAgICAgIGltYWdlLT5zdGFydCwKKwkJCQkgICAgICAgaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpOworCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKaW5kZXggNjY2ZTQzZC4uNzEyZDE1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCkBAIC0yMjYsNyArMjI2LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIG1tY29uZl9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRjb25zdCBtbWNvbmZfZG1pX3RhYmxlW10gPSB7CiAgICAgICAgIHsKICAgICAgICAgICAgICAgICAuY2FsbGJhY2sgPSBzZXRfY2hlY2tfZW5hYmxlX2FtZF9tbWNvbmYsCiAgICAgICAgICAgICAgICAgLmlkZW50ID0gIlN1biBNaWNyb3N5c3RlbXMgTWFjaGluZSIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCAzN2NiMWJkLi5kY2U5OWRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTEwOSw5ICsxMDksNiBAQAogCX0gZWxzZQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGJ1c3R5cGUgJXMgLSBpZ25vcmluZ1xuIiwgc3RyKTsKIH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAKIHN0YXRpYyBpbnQgYmFkX2lvYXBpYyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0yMjQsOCArMjIxLDEyIEBACiAJaWYgKCsrbXBfaXJxX2VudHJpZXMgPT0gTUFYX0lSUV9TT1VSQ0VTKQogCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhIVxuIik7CiB9CisjZWxzZSAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgTVBfYnVzX2luZm8oc3RydWN0IG1wY19idXMgKm0pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IE1QX2lvYXBpY19pbmZvKHN0cnVjdCBtcGNfaW9hcGljICptKSB7fQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBNUF9pbnRzcmNfaW5mbyhzdHJ1Y3QgbXBjX2ludHNyYyAqbSkge30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KIAotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBNUF9saW50c3JjX2luZm8oc3RydWN0IG1wY19saW50c3JjICptKQogewpAQCAtMjc1LDYgKzI3NiwyMCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBza2lwX2VudHJ5KHVuc2lnbmVkIGNoYXIgKipwdHIsIGludCAqY291bnQsIGludCBzaXplKQoreworCSpwdHIgKz0gc2l6ZTsKKwkqY291bnQgKz0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNtcF9kdW1wX21wdGFibGUoc3RydWN0IG1wY190YWJsZSAqbXBjLCB1bnNpZ25lZCBjaGFyICptcHQpCit7CisJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iCisJCSJ0eXBlICV4XG4iLCAqbXB0KTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCisJCQkxLCBtcGMsIG1wYy0+bGVuZ3RoLCAxKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgc21wX3JlYWRfbXBjKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgdW5zaWduZWQgZWFybHkpCiB7CiAJY2hhciBzdHJbMTZdOwpAQCAtMzEwLDYxICszMjUsMzAgQEAKIAl3aGlsZSAoY291bnQgPCBtcGMtPmxlbmd0aCkgewogCQlzd2l0Y2ggKCptcHQpIHsKIAkJY2FzZSBNUF9QUk9DRVNTT1I6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jcHUgKm0gPSAoc3RydWN0IG1wY19jcHUgKiltcHQ7Ci0JCQkJLyogQUNQSSBtYXkgaGF2ZSBhbHJlYWR5IHByb3ZpZGVkIHRoaXMgZGF0YSAqLwotCQkJCWlmICghYWNwaV9sYXBpYykKLQkJCQkJTVBfcHJvY2Vzc29yX2luZm8obSk7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCS8qIEFDUEkgbWF5IGhhdmUgYWxyZWFkeSBwcm92aWRlZCB0aGlzIGRhdGEgKi8KKwkJCWlmICghYWNwaV9sYXBpYykKKwkJCQlNUF9wcm9jZXNzb3JfaW5mbygoc3RydWN0IG1wY19jcHUgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2NwdSkpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfQlVTOgotCQkJewotCQkJCXN0cnVjdCBtcGNfYnVzICptID0gKHN0cnVjdCBtcGNfYnVzICopbXB0OwotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkJCU1QX2J1c19pbmZvKG0pOwotI2VuZGlmCi0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCU1QX2J1c19pbmZvKChzdHJ1Y3QgbXBjX2J1cyAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfYnVzKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JT0FQSUM6Ci0JCQl7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJc3RydWN0IG1wY19pb2FwaWMgKm0gPSAoc3RydWN0IG1wY19pb2FwaWMgKiltcHQ7Ci0JCQkJTVBfaW9hcGljX2luZm8obSk7Ci0jZW5kaWYKLQkJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKTsKLQkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJTVBfaW9hcGljX2luZm8oKHN0cnVjdCBtcGNfaW9hcGljICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0lOVFNSQzoKLQkJCXsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSA9IChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdDsKLQotCQkJCU1QX2ludHNyY19pbmZvKG0pOwotI2VuZGlmCi0JCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCU1QX2ludHNyY19pbmZvKChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9MSU5UU1JDOgotCQkJewotCQkJCXN0cnVjdCBtcGNfbGludHNyYyAqbSA9Ci0JCQkJICAgIChzdHJ1Y3QgbXBjX2xpbnRzcmMgKiltcHQ7Ci0JCQkJTVBfbGludHNyY19pbmZvKG0pOwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9saW50c3JjX2luZm8oKHN0cnVjdCBtcGNfbGludHNyYyAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfbGludHNyYykpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiB3cm9uZyBtcHRhYmxlICovCi0JCQlwcmludGsoS0VSTl9FUlIgIllvdXIgbXB0YWJsZSBpcyB3cm9uZywgY29udGFjdCB5b3VyIEhXIHZlbmRvciFcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJ0eXBlICV4XG4iLCAqbXB0KTsKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiICAiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwKLQkJCQkJMSwgbXBjLCBtcGMtPmxlbmd0aCwgMSk7CisJCQlzbXBfZHVtcF9tcHRhYmxlKG1wYywgbXB0KTsKIAkJCWNvdW50ID0gbXBjLT5sZW5ndGg7CiAJCQlicmVhazsKIAkJfQpAQCAtNTU4LDYgKzU0Miw2OCBAQAogCiBzdGF0aWMgc3RydWN0IG1wZl9pbnRlbCAqbXBmX2ZvdW5kOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZ2V0X21wY19zaXplKHVuc2lnbmVkIGxvbmcgcGh5c3B0cikKK3sKKwlzdHJ1Y3QgbXBjX3RhYmxlICptcGM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJbXBjID0gZWFybHlfaW9yZW1hcChwaHlzcHRyLCBQQUdFX1NJWkUpOworCXNpemUgPSBtcGMtPmxlbmd0aDsKKwllYXJseV9pb3VubWFwKG1wYywgUEFHRV9TSVpFKTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgIG1wYzogJWx4LSVseFxuIiwgcGh5c3B0ciwgcGh5c3B0ciArIHNpemUpOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNoZWNrX3BoeXNwdHIoc3RydWN0IG1wZl9pbnRlbCAqbXBmLCB1bnNpZ25lZCBpbnQgZWFybHkpCit7CisJc3RydWN0IG1wY190YWJsZSAqbXBjOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXNpemUgPSBnZXRfbXBjX3NpemUobXBmLT5waHlzcHRyKTsKKwltcGMgPSBlYXJseV9pb3JlbWFwKG1wZi0+cGh5c3B0ciwgc2l6ZSk7CisJLyoKKwkgKiBSZWFkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0YWJsZS4gIEFueXRoaW5nIGhlcmUgd2lsbAorCSAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4KKwkgKi8KKwlpZiAoIXNtcF9yZWFkX21wYyhtcGMsIGVhcmx5KSkgeworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCQlzbXBfZm91bmRfY29uZmlnID0gMDsKKyNlbmRpZgorCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBNUCB0YWJsZSBlcnJvcnMgZGV0ZWN0ZWQhLi4uXG4iCisJCQkiLi4uIGRpc2FibGluZyBTTVAgc3VwcG9ydC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKKwkJZWFybHlfaW91bm1hcChtcGMsIHNpemUpOworCQlyZXR1cm4gLTE7CisJfQorCWVhcmx5X2lvdW5tYXAobXBjLCBzaXplKTsKKworCWlmIChlYXJseSkKKwkJcmV0dXJuIC0xOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQgTVAgSVJRIGVudHJpZXMsIHRoZW4gd2UgYXJlCisJICogYnJva2VuLiAgV2Ugc2V0IHVwIG1vc3Qgb2YgdGhlIGxvdyAxNiBJTy1BUElDIHBpbnMgdG8KKwkgKiBJU0EgZGVmYXVsdHMgYW5kIGhvcGUgaXQgd2lsbCB3b3JrLgorCSAqLworCWlmICghbXBfaXJxX2VudHJpZXMpIHsKKwkJc3RydWN0IG1wY19idXMgYnVzOworCisJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIG5vIGV4cGxpY2l0IElSUSBlbnRyaWVzLCAiCisJCSAgICAgICAidXNpbmcgZGVmYXVsdCBtcHRhYmxlLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOworCisJCWJ1cy50eXBlID0gTVBfQlVTOworCQlidXMuYnVzaWQgPSAwOworCQltZW1jcHkoYnVzLmJ1c3R5cGUsICJJU0EgICAiLCA2KTsKKwkJTVBfYnVzX2luZm8oJmJ1cyk7CisKKwkJY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZSgwKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCiAvKgogICogU2NhbiB0aGUgbWVtb3J5IGJsb2NrcyBmb3IgYW4gU01QIGNvbmZpZ3VyYXRpb24gYmxvY2suCiAgKi8KQEAgLTYxMSw0NSArNjU3LDggQEAKIAkJY29uc3RydWN0X2RlZmF1bHRfSVNBX21wdGFibGUobXBmLT5mZWF0dXJlMSk7CiAKIAl9IGVsc2UgaWYgKG1wZi0+cGh5c3B0cikgewotCi0JCS8qCi0JCSAqIFJlYWQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRhYmxlLiAgQW55dGhpbmcgaGVyZSB3aWxsCi0JCSAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4KLQkJICovCi0JCWlmICghc21wX3JlYWRfbXBjKHBoeXNfdG9fdmlydChtcGYtPnBoeXNwdHIpLCBlYXJseSkpIHsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOwotI2VuZGlmCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiQklPUyBidWcsIE1QIHRhYmxlIGVycm9ycyBkZXRlY3RlZCEuLi5cbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZGlzYWJsaW5nIFNNUCBzdXBwb3J0LiAiCi0JCQkgICAgICAgIih0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CisJCWlmIChjaGVja19waHlzcHRyKG1wZiwgZWFybHkpKQogCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKGVhcmx5KQotCQkJcmV0dXJuOwotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkvKgotCQkgKiBJZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQgTVAgSVJRIGVudHJpZXMsIHRoZW4gd2UgYXJlCi0JCSAqIGJyb2tlbi4gIFdlIHNldCB1cCBtb3N0IG9mIHRoZSBsb3cgMTYgSU8tQVBJQyBwaW5zIHRvCi0JCSAqIElTQSBkZWZhdWx0cyBhbmQgaG9wZSBpdCB3aWxsIHdvcmsuCi0JCSAqLwotCQlpZiAoIW1wX2lycV9lbnRyaWVzKSB7Ci0JCQlzdHJ1Y3QgbXBjX2J1cyBidXM7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIG5vIGV4cGxpY2l0IElSUSBlbnRyaWVzLCAiCi0JCQkgICAgICAgInVzaW5nIGRlZmF1bHQgbXB0YWJsZS4gIgotCQkJICAgICAgICIodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOwotCi0JCQlidXMudHlwZSA9IE1QX0JVUzsKLQkJCWJ1cy5idXNpZCA9IDA7Ci0JCQltZW1jcHkoYnVzLmJ1c3R5cGUsICJJU0EgICAiLCA2KTsKLQkJCU1QX2J1c19pbmZvKCZidXMpOwotCi0JCQljb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKDApOwotCQl9Ci0jZW5kaWYKIAl9IGVsc2UKIAkJQlVHKCk7CiAKQEAgLTY3MCw2ICs2NzksMzEgQEAKIAlfX2dldF9zbXBfY29uZmlnKDApOwogfQogCitzdGF0aWMgdm9pZCBzbXBfcmVzZXJ2ZV9ib290bWVtKHN0cnVjdCBtcGZfaW50ZWwgKm1wZikKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBnZXRfbXBjX3NpemUobXBmLT5waHlzcHRyKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBXZSBjYW5ub3QgYWNjZXNzIHRvIE1QQyB0YWJsZSB0byBjb21wdXRlIHRhYmxlIHNpemUgeWV0LAorCSAqIGFzIG9ubHkgZmV3IG1lZ2FieXRlcyBmcm9tIHRoZSBib3R0b20gaXMgbWFwcGVkIG5vdy4KKwkgKiBQQy05ODAwJ3MgTVBDIHRhYmxlIHBsYWNlcyBvbiB0aGUgdmVyeSBsYXN0IG9mIHBoeXNpY2FsCisJICogbWVtb3J5OyBzbyB0aGF0IHNpbXBseSByZXNlcnZpbmcgUEFHRV9TSVpFIGZyb20gbXBmLT5waHlzcHRyCisJICogeWllbGRzIEJVRygpIGluIHJlc2VydmVfYm9vdG1lbS4KKwkgKiBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHBoeXNwdHIgaXMgYmVsb3cgdGhhbiBtYXhfbG93X3BmbgorCSAqIHdlIGRvbid0IG5lZWQgcmVzZXJ2ZSB0aGUgYXJlYSBhYm92ZSBtYXhfbG93X3BmbgorCSAqLworCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7CisKKwlpZiAobXBmLT5waHlzcHRyIDwgZW5kKSB7CisJCWlmIChtcGYtPnBoeXNwdHIgKyBzaXplID4gZW5kKQorCQkJc2l6ZSA9IGVuZCAtIG1wZi0+cGh5c3B0cjsKKwkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLCBCT09UTUVNX0RFRkFVTFQpOworCX0KKyNlbHNlCisJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLCBCT09UTUVNX0RFRkFVTFQpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNtcF9zY2FuX2NvbmZpZyh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAogCQkJCSAgdW5zaWduZWQgcmVzZXJ2ZSkKIHsKQEAgLTY5NywzNiArNzMxLDEwIEBACiAKIAkJCWlmICghcmVzZXJ2ZSkKIAkJCQlyZXR1cm4gMTsKLQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHZpcnRfdG9fcGh5cyhtcGYpLCBQQUdFX1NJWkUsCi0JCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCQlpZiAobXBmLT5waHlzcHRyKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQkJCQkvKgotCQkJCSAqIFdlIGNhbm5vdCBhY2Nlc3MgdG8gTVBDIHRhYmxlIHRvIGNvbXB1dGUKLQkJCQkgKiB0YWJsZSBzaXplIHlldCwgYXMgb25seSBmZXcgbWVnYWJ5dGVzIGZyb20KLQkJCQkgKiB0aGUgYm90dG9tIGlzIG1hcHBlZCBub3cuCi0JCQkJICogUEMtOTgwMCdzIE1QQyB0YWJsZSBwbGFjZXMgb24gdGhlIHZlcnkgbGFzdAotCQkJCSAqIG9mIHBoeXNpY2FsIG1lbW9yeTsgc28gdGhhdCBzaW1wbHkgcmVzZXJ2aW5nCi0JCQkJICogUEFHRV9TSVpFIGZyb20gbXBmLT5waHlzcHRyIHlpZWxkcyBCVUcoKQotCQkJCSAqIGluIHJlc2VydmVfYm9vdG1lbS4KLQkJCQkgKiBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHBoeXNwdHIgaXMgYmVsb3cgdGhhbgotCQkJCSAqIG1heF9sb3dfcGZuCi0JCQkJICogd2UgZG9uJ3QgbmVlZCByZXNlcnZlIHRoZSBhcmVhIGFib3ZlIG1heF9sb3dfcGZuCi0JCQkJICovCi0JCQkJdW5zaWduZWQgbG9uZyBlbmQgPSBtYXhfbG93X3BmbiAqIFBBR0VfU0laRTsKLQotCQkJCWlmIChtcGYtPnBoeXNwdHIgPCBlbmQpIHsKLQkJCQkJaWYgKG1wZi0+cGh5c3B0ciArIHNpemUgPiBlbmQpCi0JCQkJCQlzaXplID0gZW5kIC0gbXBmLT5waHlzcHRyOwotCQkJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsCi0JCQkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQkJCQl9Ci0jZWxzZQotCQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwKKwkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHZpcnRfdG9fcGh5cyhtcGYpLCBzaXplb2YoKm1wZiksCiAJCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotI2VuZGlmCi0JCQl9CisJCQlpZiAobXBmLT5waHlzcHRyKQorCQkJCXNtcF9yZXNlcnZlX2Jvb3RtZW0obXBmKTsKIAogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTgyOSw3ICs4MzcsNTcgQEAKICNkZWZpbmUgU1BBUkVfU0xPVF9OVU0gMjAKIAogc3RhdGljIHN0cnVjdCBtcGNfaW50c3JjIF9faW5pdGRhdGEgKm1fc3BhcmVbU1BBUkVfU0xPVF9OVU1dOwotI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNoZWNrX2lycV9zcmMoc3RydWN0IG1wY19pbnRzcmMgKm0sIGludCAqbnJfbV9zcGFyZSkKK3sKKwlpbnQgaTsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIk9MRCAiKTsKKwlwcmludF9NUF9pbnRzcmNfaW5mbyhtKTsKKworCWkgPSBnZXRfTVBfaW50c3JjX2luZGV4KG0pOworCWlmIChpID4gMCkgeworCQlhc3NpZ25fdG9fbXBjX2ludHNyYygmbXBfaXJxc1tpXSwgbSk7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIk5FVyAiKTsKKwkJcHJpbnRfbXBfaXJxX2luZm8oJm1wX2lycXNbaV0pOworCQlyZXR1cm47CisJfQorCWlmICghaSkgeworCQkvKiBsZWdhY3ksIGRvIG5vdGhpbmcgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoKm5yX21fc3BhcmUgPCBTUEFSRV9TTE9UX05VTSkgeworCQkvKgorCQkgKiBub3QgZm91bmQgKC0xKSwgb3IgZHVwbGljYXRlZCAoLTIpIGFyZSBpbnZhbGlkIGVudHJpZXMsCisJCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBzbG90IGxhdGVyCisJCSAqLworCQltX3NwYXJlWypucl9tX3NwYXJlXSA9IG07CisJCSpucl9tX3NwYXJlICs9IDE7CisJfQorfQorI2Vsc2UgLyogQ09ORklHX1g4Nl9JT19BUElDICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfaXJxX3NyYyhzdHJ1Y3QgbXBjX2ludHNyYyAqbSwgaW50ICpucl9tX3NwYXJlKSB7fQorI2VuZGlmIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLworCitzdGF0aWMgaW50IGNoZWNrX3Nsb3QodW5zaWduZWQgbG9uZyBtcGNfbmV3X3BoeXMsIHVuc2lnbmVkIGxvbmcgbXBjX25ld19sZW5ndGgsCisJCSAgICAgIGludCBjb3VudCkKK3sKKwlpZiAoIW1wY19uZXdfcGh5cykgeworCQlwcl9pbmZvKCJObyBzcGFyZSBzbG90cywgdHJ5IHRvIGFwcGVuZC4uLnRha2UgeW91ciByaXNrLCAiCisJCQkibmV3IG1wY19sZW5ndGggJXhcbiIsIGNvdW50KTsKKwl9IGVsc2UgeworCQlpZiAoY291bnQgPD0gbXBjX25ld19sZW5ndGgpCisJCQlwcl9pbmZvKCJObyBzcGFyZSBzbG90cywgdHJ5IHRvIGFwcGVuZC4uLiwgIgorCQkJCSJuZXcgbXBjX2xlbmd0aCAleFxuIiwgY291bnQpOworCQllbHNlIHsKKwkJCXByX2VycigibXBjX25ld19sZW5ndGggJWx4IGlzIHRvbyBzbWFsbFxuIiwKKwkJCQltcGNfbmV3X2xlbmd0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCAgX19pbml0IHJlcGxhY2VfaW50c3JjX2FsbChzdHJ1Y3QgbXBjX3RhYmxlICptcGMsCiAJCQkJCXVuc2lnbmVkIGxvbmcgbXBjX25ld19waHlzLApAQCAtODM3LDc3ICs4OTUsMzMgQEAKIHsKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpbnQgaTsKLQlpbnQgbnJfbV9zcGFyZSA9IDA7CiAjZW5kaWYKLQogCWludCBjb3VudCA9IHNpemVvZigqbXBjKTsKKwlpbnQgbnJfbV9zcGFyZSA9IDA7CiAJdW5zaWduZWQgY2hhciAqbXB0ID0gKCh1bnNpZ25lZCBjaGFyICopbXBjKSArIGNvdW50OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAibXBjX2xlbmd0aCAleFxuIiwgbXBjLT5sZW5ndGgpOwogCXdoaWxlIChjb3VudCA8IG1wYy0+bGVuZ3RoKSB7CiAJCXN3aXRjaCAoKm1wdCkgewogCQljYXNlIE1QX1BST0NFU1NPUjoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NwdSAqbSA9IChzdHJ1Y3QgbXBjX2NwdSAqKW1wdDsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2NwdSkpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfQlVTOgotCQkJewotCQkJCXN0cnVjdCBtcGNfYnVzICptID0gKHN0cnVjdCBtcGNfYnVzICopbXB0OwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfYnVzKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JT0FQSUM6Ci0JCQl7Ci0JCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0lOVFNSQzoKLQkJCXsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSA9IChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdDsKLQotCQkJCXByaW50ayhLRVJOX0lORk8gIk9MRCAiKTsKLQkJCQlwcmludF9NUF9pbnRzcmNfaW5mbyhtKTsKLQkJCQlpID0gZ2V0X01QX2ludHNyY19pbmRleChtKTsKLQkJCQlpZiAoaSA+IDApIHsKLQkJCQkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG0pOwotCQkJCQlwcmludGsoS0VSTl9JTkZPICJORVcgIik7Ci0JCQkJCXByaW50X21wX2lycV9pbmZvKCZtcF9pcnFzW2ldKTsKLQkJCQl9IGVsc2UgaWYgKCFpKSB7Ci0JCQkJCS8qIGxlZ2FjeSwgZG8gbm90aGluZyAqLwotCQkJCX0gZWxzZSBpZiAobnJfbV9zcGFyZSA8IFNQQVJFX1NMT1RfTlVNKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIG5vdCBmb3VuZCAoLTEpLCBvciBkdXBsaWNhdGVkICgtMikKLQkJCQkJICogYXJlIGludmFsaWQgZW50cmllcywKLQkJCQkJICogd2UgbmVlZCB0byB1c2UgdGhlIHNsb3QgIGxhdGVyCi0JCQkJCSAqLwotCQkJCQltX3NwYXJlW25yX21fc3BhcmVdID0gbTsKLQkJCQkJbnJfbV9zcGFyZSsrOwotCQkJCX0KLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQljaGVja19pcnFfc3JjKChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdCwgJm5yX21fc3BhcmUpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfTElOVFNSQzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2xpbnRzcmMgKm0gPQotCQkJCSAgICAoc3RydWN0IG1wY19saW50c3JjICopbXB0OwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfbGludHNyYykpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiB3cm9uZyBtcHRhYmxlICovCi0JCQlwcmludGsoS0VSTl9FUlIgIllvdXIgbXB0YWJsZSBpcyB3cm9uZywgY29udGFjdCB5b3VyIEhXIHZlbmRvciFcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJ0eXBlICV4XG4iLCAqbXB0KTsKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiICAiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwKLQkJCQkJMSwgbXBjLCBtcGMtPmxlbmd0aCwgMSk7CisJCQlzbXBfZHVtcF9tcHRhYmxlKG1wYywgbXB0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtOTI0LDIzICs5MzgsMTUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChucl9tX3NwYXJlID4gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiKk5FVyogZm91bmQgIik7CisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIqTkVXKiBmb3VuZFxuIik7CiAJCQlucl9tX3NwYXJlLS07CiAJCQlhc3NpZ25fdG9fbXBjX2ludHNyYygmbXBfaXJxc1tpXSwgbV9zcGFyZVtucl9tX3NwYXJlXSk7CiAJCQltX3NwYXJlW25yX21fc3BhcmVdID0gTlVMTDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBtcGNfaW50c3JjICptID0gKHN0cnVjdCBtcGNfaW50c3JjICopbXB0OwogCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCWlmICghbXBjX25ld19waHlzKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi50YWtlIHlvdXIgcmlzaywgbmV3IG1wY19sZW5ndGggJXhcbiIsIGNvdW50KTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNvdW50IDw9IG1wY19uZXdfbGVuZ3RoKQotCQkJCQlwcmludGsoS0VSTl9JTkZPICJObyBzcGFyZSBzbG90cywgdHJ5IHRvIGFwcGVuZC4uLiwgbmV3IG1wY19sZW5ndGggJXhcbiIsIGNvdW50KTsKLQkJCQllbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJtcGNfbmV3X2xlbmd0aCAlbHggaXMgdG9vIHNtYWxsXG4iLCBtcGNfbmV3X2xlbmd0aCk7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCX0KKwkJCWlmICghY2hlY2tfc2xvdChtcGNfbmV3X3BoeXMsIG1wY19uZXdfbGVuZ3RoLCBjb3VudCkpCisJCQkJZ290byBvdXQ7CiAJCQlhc3NpZ25fdG9fbXBjX2ludHNyYygmbXBfaXJxc1tpXSwgbSk7CiAJCQltcGMtPmxlbmd0aCA9IGNvdW50OwogCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IDYzZGQzNTguLjhlNDVmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC00NzAsNyArNDcwLDYgQEAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IG5hdGl2ZV9zZXRfcHRlX2F0b21pYywKLQkuc2V0X3B0ZV9wcmVzZW50ID0gbmF0aXZlX3NldF9wdGVfcHJlc2VudCwKIAkucHRlX2NsZWFyID0gbmF0aXZlX3B0ZV9jbGVhciwKIAkucG1kX2NsZWFyID0gbmF0aXZlX3BtZF9jbGVhciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCmluZGV4IGZlNTAyMTQuLmM2ZDcwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEZhbGxiYWNrIGZ1bmN0aW9ucyB3aGVuIHRoZSBtYWluIElPTU1VIGNvZGUgaXMgbm90IGNvbXBpbGVkIGluLiBUaGlzCiAgICBjb2RlIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBpMzg2LiAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBpbnQKQEAgLTgwLDExICs4MCwxMSBAQAogfQogCiBzdHJ1Y3QgZG1hX21hcF9vcHMgbm9tbXVfZG1hX29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQgPSBkbWFfZ2VuZXJpY19hbGxvY19jb2hlcmVudCwKLQkuZnJlZV9jb2hlcmVudCA9IG5vbW11X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zZyA9IG5vbW11X21hcF9zZywKLQkubWFwX3BhZ2UgPSBub21tdV9tYXBfcGFnZSwKLQkuaXNfcGh5cyA9IDEsCisJLmFsbG9jX2NvaGVyZW50CT0gZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQJPSBub21tdV9mcmVlX2NvaGVyZW50LAorCS5tYXBfc2cJCT0gbm9tbXVfbWFwX3NnLAorCS5tYXBfcGFnZQk9IG5vbW11X21hcF9wYWdlLAorCS5pc19waHlzCT0gMSwKIH07CiAKIHZvaWQgX19pbml0IG5vX2lvbW11X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDZhZmE1MjMuLjE1NmY4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjUsMTEgKzY1LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICptZSA9IGN1cnJlbnQ7CiAJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmbWUtPnRocmVhZDsKKwl1bnNpZ25lZCBsb25nICpicCA9IHQtPmlvX2JpdG1hcF9wdHI7CiAKLQlpZiAobWUtPnRocmVhZC5pb19iaXRtYXBfcHRyKSB7CisJaWYgKGJwKSB7CiAJCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgZ2V0X2NwdSgpKTsKIAotCQlrZnJlZSh0LT5pb19iaXRtYXBfcHRyKTsKIAkJdC0+aW9fYml0bWFwX3B0ciA9IE5VTEw7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JT19CSVRNQVApOwogCQkvKgpAQCAtNzgsNiArNzgsNyBAQAogCQltZW1zZXQodHNzLT5pb19iaXRtYXAsIDB4ZmYsIHQtPmlvX2JpdG1hcF9tYXgpOwogCQl0LT5pb19iaXRtYXBfbWF4ID0gMDsKIAkJcHV0X2NwdSgpOworCQlrZnJlZShicCk7CiAJfQogCiAJZHNfZXhpdF90aHJlYWQoY3VycmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggM2Q5NjcyZS4uMTkzNzg3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNjg1LDkgKzY4NSw4IEBACiAJCWlmICghY2ZnLnNpZ25hbCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCQljaGlsZC0+dGhyZWFkLmJ0c19vdmZsX3NpZ25hbCA9IGNmZy5zaWduYWw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlpZiAoKGNmZy5mbGFncyAmIFBUUkFDRV9CVFNfT19BTExPQykgJiYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCA2OTdkMWI3Li5lOTUwMjJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC03NCw4ICs3NCw3IEBACiAJaWYgKCFmb3JjZV9ocGV0X2FkZHJlc3MpCiAJCXJldHVybjsKIAotCWlmIChyY2JhX2Jhc2UgPT0gTlVMTCkKLQkJQlVHKCk7CisJQlVHX09OKHJjYmFfYmFzZSA9PSBOVUxMKTsKIAogCS8qIHJlYWQgdGhlIEZ1bmN0aW9uIERpc2FibGUgcmVnaXN0ZXIsIGR3b3JkIG1vZGUgb25seSAqLwogCXZhbCA9IHJlYWRsKHJjYmFfYmFzZSArIDB4MzQwNCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKaW5kZXggMjA2NGQwYS4uNDEyMzU1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwpAQCAtMTcsNyArMTcsOCBAQAogCiAjZGVmaW5lIFBUUih4KSAoeCA8PCAyKQogCi0vKiBjb250cm9sX3BhZ2UgKyBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUKKy8qCisgKiBjb250cm9sX3BhZ2UgKyBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUKICAqIH4gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFIGFyZSB1c2VkIGFzIGRhdGEgc3RvcmFnZSBhbmQgc3RhY2sgZm9yCiAgKiBqdW1waW5nIGJhY2sKICAqLwpAQCAtNzYsOCArNzcsMTAgQEAKIAltb3ZsCSVlYXgsIENQX1BBX1NXQVBfUEFHRSglZWRpKQogCW1vdmwJJWVieCwgQ1BfUEFfQkFDS1VQX1BBR0VTX01BUCglZWRpKQogCi0JLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdyAqLwotCS8qIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaCAqLworCS8qCisJICogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdworCSAqIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaAorCSAqLwogCW1vdmwJUFRSKFBBX0NPTlRST0xfUEFHRSkoJWVicCksICVlZGkKIAogCS8qIHN3aXRjaCB0byBuZXcgc2V0IG9mIHBhZ2UgdGFibGVzICovCkBAIC05Nyw3ICsxMDAsOCBAQAogCS8qIHN0b3JlIHRoZSBzdGFydCBhZGRyZXNzIG9uIHRoZSBzdGFjayAqLwogCXB1c2hsICAgJWVkeAogCi0JLyogU2V0IGNyMCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyMCB0byBhIGtub3duIHN0YXRlOgogCSAqICAtIFBhZ2luZyBkaXNhYmxlZAogCSAqICAtIEFsaWdubWVudCBjaGVjayBkaXNhYmxlZAogCSAqICAtIFdyaXRlIHByb3RlY3QgZGlzYWJsZWQKQEAgLTExMyw3ICsxMTcsOCBAQAogCS8qIGNsZWFyIGNyNCBpZiBhcHBsaWNhYmxlICovCiAJdGVzdGwJJWVjeCwgJWVjeAogCWp6CTFmCi0JLyogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgogCSAqIFNldHRpbmcgZXZlcnl0aGluZyB0byB6ZXJvIHNlZW1zIHNhZmUuCiAJICovCiAJeG9ybAklZWF4LCAlZWF4CkBAIC0xMzIsMTUgKzEzNywxOCBAQAogCWNhbGwJc3dhcF9wYWdlcwogCWFkZGwJJDgsICVlc3AKIAotCS8qIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCisJLyoKKwkgKiBUbyBiZSBjZXJ0YWluIG9mIGF2b2lkaW5nIHByb2JsZW1zIHdpdGggc2VsZi1tb2RpZnlpbmcgY29kZQogCSAqIEkgbmVlZCB0byBleGVjdXRlIGEgc2VyaWFsaXppbmcgaW5zdHJ1Y3Rpb24gaGVyZS4KIAkgKiBTbyBJIGZsdXNoIHRoZSBUTEIsIGl0J3MgaGFuZHksIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KIAkgKi8KIAl4b3JsCSVlYXgsICVlYXgKIAltb3ZsCSVlYXgsICVjcjMKIAotCS8qIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KLQkvKiBsZWF2ZSAlZXNwIGFsb25lICovCisJLyoKKwkgKiBzZXQgYWxsIG9mIHRoZSByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzCisJICogbGVhdmUgJWVzcCBhbG9uZQorCSAqLwogCiAJdGVzdGwJJWVzaSwgJWVzaQogCWpueiAxZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCmluZGV4IGQzMmNmYjIuLjRkZThmNWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKQEAgLTE5LDI5ICsxOSw3NyBAQAogI2RlZmluZSBQVFIoeCkgKHggPDwgMykKICNkZWZpbmUgUEFHRV9BVFRSIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQogCisvKgorICogY29udHJvbF9wYWdlICsgS0VYRUNfQ09OVFJPTF9DT0RFX01BWF9TSVpFCisgKiB+IGNvbnRyb2xfcGFnZSArIFBBR0VfU0laRSBhcmUgdXNlZCBhcyBkYXRhIHN0b3JhZ2UgYW5kIHN0YWNrIGZvcgorICoganVtcGluZyBiYWNrCisgKi8KKyNkZWZpbmUgREFUQShvZmZzZXQpCQkoS0VYRUNfQ09OVFJPTF9DT0RFX01BWF9TSVpFKyhvZmZzZXQpKQorCisvKiBNaW5pbWFsIENQVSBzdGF0ZSAqLworI2RlZmluZSBSU1AJCQlEQVRBKDB4MCkKKyNkZWZpbmUgQ1IwCQkJREFUQSgweDgpCisjZGVmaW5lIENSMwkJCURBVEEoMHgxMCkKKyNkZWZpbmUgQ1I0CQkJREFUQSgweDE4KQorCisvKiBvdGhlciBkYXRhICovCisjZGVmaW5lIENQX1BBX1RBQkxFX1BBR0UJREFUQSgweDIwKQorI2RlZmluZSBDUF9QQV9TV0FQX1BBR0UJCURBVEEoMHgyOCkKKyNkZWZpbmUgQ1BfUEFfQkFDS1VQX1BBR0VTX01BUAlEQVRBKDB4MzApCisKIAkudGV4dAogCS5hbGlnbiBQQUdFX1NJWkUKIAkuY29kZTY0CiAJLmdsb2JsIHJlbG9jYXRlX2tlcm5lbAogcmVsb2NhdGVfa2VybmVsOgotCS8qICVyZGkgaW5kaXJlY3Rpb25fcGFnZQorCS8qCisJICogJXJkaSBpbmRpcmVjdGlvbl9wYWdlCiAJICogJXJzaSBwYWdlX2xpc3QKIAkgKiAlcmR4IHN0YXJ0IGFkZHJlc3MKKwkgKiAlcmN4IHByZXNlcnZlX2NvbnRleHQKIAkgKi8KIAorCS8qIFNhdmUgdGhlIENQVSBjb250ZXh0LCB1c2VkIGZvciBqdW1waW5nIGJhY2sgKi8KKwlwdXNocSAlcmJ4CisJcHVzaHEgJXJicAorCXB1c2hxICVyMTIKKwlwdXNocSAlcjEzCisJcHVzaHEgJXIxNAorCXB1c2hxICVyMTUKKwlwdXNoZgorCisJbW92cQlQVFIoVkFfQ09OVFJPTF9QQUdFKSglcnNpKSwgJXIxMQorCW1vdnEJJXJzcCwgUlNQKCVyMTEpCisJbW92cQklY3IwLCAlcmF4CisJbW92cQklcmF4LCBDUjAoJXIxMSkKKwltb3ZxCSVjcjMsICVyYXgKKwltb3ZxCSVyYXgsIENSMyglcjExKQorCW1vdnEJJWNyNCwgJXJheAorCW1vdnEJJXJheCwgQ1I0KCVyMTEpCisKIAkvKiB6ZXJvIG91dCBmbGFncywgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCXB1c2hxICQwCiAJcG9wZnEKIAotCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIGNvbnRyb2wgcGFnZSBub3cgKi8KLQkvKiB0aGlzIGlzIGltcG9zc2libGUgYWZ0ZXIgcGFnZSB0YWJsZSBzd2l0Y2ggKi8KKwkvKgorCSAqIGdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIGNvbnRyb2wgcGFnZSBub3cKKwkgKiB0aGlzIGlzIGltcG9zc2libGUgYWZ0ZXIgcGFnZSB0YWJsZSBzd2l0Y2gKKwkgKi8KIAltb3ZxCVBUUihQQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjgKIAogCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIHBhZ2UgdGFibGUgbm93IHRvbyAqLwotCW1vdnEJUFRSKFBBX1RBQkxFX1BBR0UpKCVyc2kpLCAlcmN4CisJbW92cQlQVFIoUEFfVEFCTEVfUEFHRSkoJXJzaSksICVyOQorCisJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3dhcCBwYWdlIG5vdyAqLworCW1vdnEJUFRSKFBBX1NXQVBfUEFHRSkoJXJzaSksICVyMTAKKworCS8qIHNhdmUgc29tZSBpbmZvcm1hdGlvbiBmb3IganVtcGluZyBiYWNrICovCisJbW92cQklcjksIENQX1BBX1RBQkxFX1BBR0UoJXIxMSkKKwltb3ZxCSVyMTAsIENQX1BBX1NXQVBfUEFHRSglcjExKQorCW1vdnEJJXJkaSwgQ1BfUEFfQkFDS1VQX1BBR0VTX01BUCglcjExKQogCiAJLyogU3dpdGNoIHRvIHRoZSBpZGVudGl0eSBtYXBwZWQgcGFnZSB0YWJsZXMgKi8KLQltb3ZxCSVyY3gsICVjcjMKKwltb3ZxCSVyOSwgJWNyMwogCiAJLyogc2V0dXAgYSBuZXcgc3RhY2sgYXQgdGhlIGVuZCBvZiB0aGUgcGh5c2ljYWwgY29udHJvbCBwYWdlICovCiAJbGVhCVBBR0VfU0laRSglcjgpLCAlcnNwCkBAIC01NSw3ICsxMDMsOCBAQAogCS8qIHN0b3JlIHRoZSBzdGFydCBhZGRyZXNzIG9uIHRoZSBzdGFjayAqLwogCXB1c2hxICAgJXJkeAogCi0JLyogU2V0IGNyMCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyMCB0byBhIGtub3duIHN0YXRlOgogCSAqICAtIFBhZ2luZyBlbmFibGVkCiAJICogIC0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCiAJICogIC0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZApAQCAtNjgsNyArMTE3LDggQEAKIAlvcmwJJChYODZfQ1IwX1BHIHwgWDg2X0NSMF9QRSksICVlYXgKIAltb3ZxCSVyYXgsICVjcjAKIAotCS8qIFNldCBjcjQgdG8gYSBrbm93biBzdGF0ZToKKwkvKgorCSAqIFNldCBjcjQgdG8gYSBrbm93biBzdGF0ZToKIAkgKiAgLSBwaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbiBlbmFibGVkCiAJICovCiAJbW92cQkkWDg2X0NSNF9QQUUsICVyYXgKQEAgLTc4LDkgKzEyOCw4NyBAQAogMToKIAogCS8qIEZsdXNoIHRoZSBUTEIgKG5lZWRlZD8pICovCi0JbW92cQklcmN4LCAlY3IzCisJbW92cQklcjksICVjcjMKKworCW1vdnEJJXJjeCwgJXIxMQorCWNhbGwJc3dhcF9wYWdlcworCisJLyoKKwkgKiBUbyBiZSBjZXJ0YWluIG9mIGF2b2lkaW5nIHByb2JsZW1zIHdpdGggc2VsZi1tb2RpZnlpbmcgY29kZQorCSAqIEkgbmVlZCB0byBleGVjdXRlIGEgc2VyaWFsaXppbmcgaW5zdHJ1Y3Rpb24gaGVyZS4KKwkgKiBTbyBJIGZsdXNoIHRoZSBUTEIgYnkgcmVsb2FkaW5nICVjcjMgaGVyZSwgaXQncyBoYW5keSwKKwkgKiBhbmQgbm90IHByb2Nlc3NvciBkZXBlbmRlbnQuCisJICovCisJbW92cQklY3IzLCAlcmF4CisJbW92cQklcmF4LCAlY3IzCisKKwkvKgorCSAqIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMKKwkgKiBsZWF2ZSAlcnNwIGFsb25lCisJICovCisKKwl0ZXN0cQklcjExLCAlcjExCisJam56IDFmCisJeG9ycQklcmF4LCAlcmF4CisJeG9ycQklcmJ4LCAlcmJ4CisJeG9ycSAgICAlcmN4LCAlcmN4CisJeG9ycSAgICAlcmR4LCAlcmR4CisJeG9ycSAgICAlcnNpLCAlcnNpCisJeG9ycSAgICAlcmRpLCAlcmRpCisJeG9ycSAgICAlcmJwLCAlcmJwCisJeG9ycQklcjgsICAlcjgKKwl4b3JxCSVyOSwgICVyOQorCXhvcnEJJXIxMCwgJXI5CisJeG9ycQklcjExLCAlcjExCisJeG9ycQklcjEyLCAlcjEyCisJeG9ycQklcjEzLCAlcjEzCisJeG9ycQklcjE0LCAlcjE0CisJeG9ycQklcjE1LCAlcjE1CisKKwlyZXQKKworMToKKwlwb3BxCSVyZHgKKwlsZWFxCVBBR0VfU0laRSglcjEwKSwgJXJzcAorCWNhbGwJKiVyZHgKKworCS8qIGdldCB0aGUgcmUtZW50cnkgcG9pbnQgb2YgdGhlIHBlZXIgc3lzdGVtICovCisJbW92cQkwKCVyc3ApLCAlcmJwCisJY2FsbAkxZgorMToKKwlwb3BxCSVyOAorCXN1YnEJJCgxYiAtIHJlbG9jYXRlX2tlcm5lbCksICVyOAorCW1vdnEJQ1BfUEFfU1dBUF9QQUdFKCVyOCksICVyMTAKKwltb3ZxCUNQX1BBX0JBQ0tVUF9QQUdFU19NQVAoJXI4KSwgJXJkaQorCW1vdnEJQ1BfUEFfVEFCTEVfUEFHRSglcjgpLCAlcmF4CisJbW92cQklcmF4LCAlY3IzCisJbGVhCVBBR0VfU0laRSglcjgpLCAlcnNwCisJY2FsbAlzd2FwX3BhZ2VzCisJbW92cQkkdmlydHVhbF9tYXBwZWQsICVyYXgKKwlwdXNocQklcmF4CisJcmV0CisKK3ZpcnR1YWxfbWFwcGVkOgorCW1vdnEJUlNQKCVyOCksICVyc3AKKwltb3ZxCUNSNCglcjgpLCAlcmF4CisJbW92cQklcmF4LCAlY3I0CisJbW92cQlDUjMoJXI4KSwgJXJheAorCW1vdnEJQ1IwKCVyOCksICVyOAorCW1vdnEJJXJheCwgJWNyMworCW1vdnEJJXI4LCAlY3IwCisJbW92cQklcmJwLCAlcmF4CisKKwlwb3BmCisJcG9wcQklcjE1CisJcG9wcQklcjE0CisJcG9wcQklcjEzCisJcG9wcQklcjEyCisJcG9wcQklcmJwCisJcG9wcQklcmJ4CisJcmV0CiAKIAkvKiBEbyB0aGUgY29waWVzICovCitzd2FwX3BhZ2VzOgogCW1vdnEJJXJkaSwgJXJjeCAJLyogUHV0IHRoZSBwYWdlX2xpc3QgaW4gJXJjeCAqLwogCXhvcnEJJXJkaSwgJXJkaQogCXhvcnEJJXJzaSwgJXJzaQpAQCAtMTEyLDM2ICsyNDAsMjcgQEAKIAltb3ZxCSVyY3gsICAgJXJzaSAgLyogRm9yIGV2ZXIgc291cmNlIHBhZ2UgZG8gYSBjb3B5ICovCiAJYW5kcQkkMHhmZmZmZmZmZmZmZmZmMDAwLCAlcnNpCiAKKwltb3ZxCSVyZGksICVyZHgKKwltb3ZxCSVyc2ksICVyYXgKKworCW1vdnEJJXIxMCwgJXJkaQogCW1vdnEJJDUxMiwgICAlcmN4CiAJcmVwIDsgbW92c3EKKworCW1vdnEJJXJheCwgJXJkaQorCW1vdnEJJXJkeCwgJXJzaQorCW1vdnEJJDUxMiwgICAlcmN4CisJcmVwIDsgbW92c3EKKworCW1vdnEJJXJkeCwgJXJkaQorCW1vdnEJJXIxMCwgJXJzaQorCW1vdnEJJDUxMiwgICAlcmN4CisJcmVwIDsgbW92c3EKKworCWxlYQlQQUdFX1NJWkUoJXJheCksICVyc2kKIAlqbXAJMGIKIDM6Ci0KLQkvKiBUbyBiZSBjZXJ0YWluIG9mIGF2b2lkaW5nIHByb2JsZW1zIHdpdGggc2VsZi1tb2RpZnlpbmcgY29kZQotCSAqIEkgbmVlZCB0byBleGVjdXRlIGEgc2VyaWFsaXppbmcgaW5zdHJ1Y3Rpb24gaGVyZS4KLQkgKiBTbyBJIGZsdXNoIHRoZSBUTEIgYnkgcmVsb2FkaW5nICVjcjMgaGVyZSwgaXQncyBoYW5keSwKLQkgKiBhbmQgbm90IHByb2Nlc3NvciBkZXBlbmRlbnQuCi0JICovCi0JbW92cQklY3IzLCAlcmF4Ci0JbW92cQklcmF4LCAlY3IzCi0KLQkvKiBzZXQgYWxsIG9mIHRoZSByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzICovCi0JLyogbGVhdmUgJXJzcCBhbG9uZSAqLwotCi0JeG9ycQklcmF4LCAlcmF4Ci0JeG9ycQklcmJ4LCAlcmJ4Ci0JeG9ycSAgICAlcmN4LCAlcmN4Ci0JeG9ycSAgICAlcmR4LCAlcmR4Ci0JeG9ycSAgICAlcnNpLCAlcnNpCi0JeG9ycSAgICAlcmRpLCAlcmRpCi0JeG9ycSAgICAlcmJwLCAlcmJwCi0JeG9ycQklcjgsICAlcjgKLQl4b3JxCSVyOSwgICVyOQotCXhvcnEJJXIxMCwgJXI5Ci0JeG9ycQklcjExLCAlcjExCi0JeG9ycQklcjEyLCAlcjEyCi0JeG9ycQklcjEzLCAlcjEzCi0JeG9ycQklcjE0LCAlcjE0Ci0JeG9ycQklcjE1LCAlcjE1Ci0KIAlyZXQKKworCS5nbG9ibCBrZXhlY19jb250cm9sX2NvZGVfc2l6ZQorLnNldCBrZXhlY19jb250cm9sX2NvZGVfc2l6ZSwgLiAtIHJlbG9jYXRlX2tlcm5lbApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IGRkNmYyYjcuLjVkNDY1YjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qCiAgKiBSVEMgcmVsYXRlZCBmdW5jdGlvbnMKICAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAKLSNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAvKgpAQCAtMTYsOSArMTYsOSBAQAogICogcmVnaXN0ZXIgd2UgYXJlIHdvcmtpbmcgd2l0aC4gIEl0IGlzIHJlcXVpcmVkIGZvciBOTUkgYWNjZXNzIHRvIHRoZQogICogQ01PUy9SVEMgcmVnaXN0ZXJzLiAgU2VlIGluY2x1ZGUvYXNtLWkzODYvbWMxNDY4MThydGMuaCBmb3IgZGV0YWlscy4KICAqLwotdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjbW9zX2xvY2sgPSAwOwordm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjbW9zX2xvY2s7CiBFWFBPUlRfU1lNQk9MKGNtb3NfbG9jayk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIC8qIEZvciB0d28gZGlnaXQgeWVhcnMgYXNzdW1lIHRpbWUgaXMgYWx3YXlzIGFmdGVyIHRoYXQgKi8KICNkZWZpbmUgQ01PU19ZRUFSU19PRkZTIDIwMDAKQEAgLTM4LDkgKzM4LDkgQEAKICAqLwogaW50IG1hY2hfc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKIHsKLQlpbnQgcmV0dmFsID0gMDsKIAlpbnQgcmVhbF9zZWNvbmRzLCByZWFsX21pbnV0ZXMsIGNtb3NfbWludXRlczsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCSAvKiB0ZWxsIHRoZSBjbG9jayBpdCdzIGJlaW5nIHNldCAqLwogCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CkBAIC03Miw4ICs3Miw4IEBACiAJCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CiAJCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCX0KLQkJQ01PU19XUklURShyZWFsX3NlY29uZHMsUlRDX1NFQ09ORFMpOwotCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcyxSVENfTUlOVVRFUyk7CisJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CisJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCkBAIC0xNTEsNiArMTUxLDcgQEAKIAlvdXRiKGFkZHIsIFJUQ19QT1JUKDApKTsKIAl2YWwgPSBpbmIoUlRDX1BPUlQoMSkpOwogCWxvY2tfY21vc19zdWZmaXgoYWRkcik7CisKIAlyZXR1cm4gdmFsOwogfQogRVhQT1JUX1NZTUJPTChydGNfY21vc19yZWFkKTsKQEAgLTE2Niw4ICsxNjcsOCBAQAogCiBzdGF0aWMgaW50IHNldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCiB7Ci0JaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAlyZXR2YWwgPSBzZXRfd2FsbGNsb2NrKG5vd3RpbWUpOwpAQCAtMjQyLDYgKzI0Myw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZGV2aWNlKTsKIAlkZXZfaW5mbygmcnRjX2RldmljZS5kZXYsCiAJCSAicmVnaXN0ZXJlZCBwbGF0Zm9ybSBSVEMgZGV2aWNlIChubyBQTlAgZGV2aWNlIGZvdW5kKVxuIik7CisKIAlyZXR1cm4gMDsKIH0KIGRldmljZV9pbml0Y2FsbChhZGRfcnRjX2Ntb3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBiNzQ2ZGViLi5hMGQyNjIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTEyLDggKzExMiwxMyBAQAogI2RlZmluZSBBUkNIX1NFVFVQCiAjZW5kaWYKIAorUkVTRVJWRV9CUksoZG1pX2FsbG9jLCA2NTUzNik7CisKIHVuc2lnbmVkIGludCBib290X2NwdV9pZCBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIF9icmtfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX2Jya19iYXNlOwordW5zaWduZWQgbG9uZyBfYnJrX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fYnJrX2Jhc2U7CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiBpbnQgZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCiB7CkBAIC0xNTgsMTIgKzE2Myw2IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIFRoaXMgdmFsdWUgaXMgc2V0IHVwIGJ5IHRoZSBlYXJseSBib290IGNvZGUgdG8gcG9pbnQgdG8gdGhlIHZhbHVlCi0gICBpbW1lZGlhdGVseSBhZnRlciB0aGUgYm9vdCB0aW1lIHBhZ2UgdGFibGVzLiAgSXQgY29udGFpbnMgYSAqcGh5c2ljYWwqCi0gICBhZGRyZXNzLCBhbmQgbXVzdCBub3QgYmUgaW4gdGhlIC5ic3Mgc2VnbWVudCEgKi8KLXVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfc3RhcnQgX19pbml0ZGF0YSA9IH4wVUw7Ci11bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX2VuZCBfX2luaXRkYXRhID0gfjBVTDsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2aWRlb19yYW1fcmVzb3VyY2UgPSB7CiAJLm5hbWUJPSAiVmlkZW8gUkFNIGFyZWEiLAogCS5zdGFydAk9IDB4YTAwMDAsCkBAIC0yMDIsNyArMjAxLDkgQEAKICNlbmRpZgogCiAjZWxzZQotc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGEgX19yZWFkX21vc3RseTsKK3N0cnVjdCBjcHVpbmZvX3g4NiBib290X2NwdV9kYXRhIF9fcmVhZF9tb3N0bHkgPSB7CisJLng4Nl9waHlzX2JpdHMgPSBNQVhfUEhZU01FTV9CSVRTLAorfTsKIEVYUE9SVF9TWU1CT0woYm9vdF9jcHVfZGF0YSk7CiAjZW5kaWYKIApAQCAtMjE3LDEyICsyMTgsNiBAQAogaW50IGJvb3Rsb2FkZXJfdHlwZTsKIAogLyoKLSAqIEVhcmx5IERNSSBtZW1vcnkKLSAqLwotaW50IGRtaV9hbGxvY19pbmRleDsKLWNoYXIgZG1pX2FsbG9jX2RhdGFbRE1JX01BWF9EQVRBXTsKLQotLyoKICAqIFNldHVwIG9wdGlvbnMKICAqLwogc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwpAQCAtMjY3LDYgKzI2MiwzNSBAQAogfQogI2VuZGlmCiAKK3ZvaWQgKiBfX2luaXQgZXh0ZW5kX2JyayhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQoreworCXNpemVfdCBtYXNrID0gYWxpZ24gLSAxOworCXZvaWQgKnJldDsKKworCUJVR19PTihfYnJrX3N0YXJ0ID09IDApOworCUJVR19PTihhbGlnbiAmIG1hc2spOworCisJX2Jya19lbmQgPSAoX2Jya19lbmQgKyBtYXNrKSAmIH5tYXNrOworCUJVR19PTigoY2hhciAqKShfYnJrX2VuZCArIHNpemUpID4gX19icmtfbGltaXQpOworCisJcmV0ID0gKHZvaWQgKilfYnJrX2VuZDsKKwlfYnJrX2VuZCArPSBzaXplOworCisJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9icmsodm9pZCkKK3sKKwlpZiAoX2Jya19lbmQgPiBfYnJrX3N0YXJ0KQorCQlyZXNlcnZlX2Vhcmx5KF9fcGEoX2Jya19zdGFydCksIF9fcGEoX2Jya19lbmQpLCAiQlJLIik7CisKKwkvKiBNYXJrIGJyayBhcmVhIGFzIGxvY2tlZCBkb3duIGFuZCBubyBsb25nZXIgdGFraW5nIGFueQorCSAgIG5ldyBhbGxvY2F0aW9ucyAqLworCV9icmtfc3RhcnQgPSAwOworfQorCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC03MTUsMTEgKzczOSw3IEBACiAJaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF90ZXh0OwogCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgX2V0ZXh0OwogCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgX2VkYXRhOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpbml0X21tLmJyayA9IGluaXRfcGdfdGFibGVzX2VuZCArIFBBR0VfT0ZGU0VUOwotI2Vsc2UKLQlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKLSNlbmRpZgorCWluaXRfbW0uYnJrID0gX2Jya19lbmQ7CiAKIAljb2RlX3Jlc291cmNlLnN0YXJ0ID0gdmlydF90b19waHlzKF90ZXh0KTsKIAljb2RlX3Jlc291cmNlLmVuZCA9IHZpcnRfdG9fcGh5cyhfZXRleHQpLTE7CkBAIC04NDAsNiArODYwLDggQEAKIAlzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2soKTsKICNlbmRpZgogCisJcmVzZXJ2ZV9icmsoKTsKKwogCS8qIG1heF9wZm5fbWFwcGVkIGlzIHVwZGF0ZWQgaGVyZSAqLwogCW1heF9sb3dfcGZuX21hcHBlZCA9IGluaXRfbWVtb3J5X21hcHBpbmcoMCwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOwogCW1heF9wZm5fbWFwcGVkID0gbWF4X2xvd19wZm5fbWFwcGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IGQyY2M2NDIuLmRmY2M3NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTIxMSwzMSArMjExLDI3IEBACiB7CiAJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8KIAl1bnNpZ25lZCBsb25nIHNwID0gcmVncy0+c3A7CisJaW50IG9uc2lnc3RhY2sgPSBvbl9zaWdfc3RhY2soc3ApOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qIHJlZHpvbmUgKi8KIAlzcCAtPSAxMjg7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCi0JLyoKLQkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93IGl0LCBkb24ndC4KLQkgKiBSZXR1cm4gYW4gYWx3YXlzLWJvZ3VzIGFkZHJlc3MgaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCi0JICovCi0JaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3AgLSBmcmFtZV9zaXplKSkpCi0JCXJldHVybiAodm9pZCBfX3VzZXIgKikgLTFMOwotCi0JLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKLQkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKLQkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7Ci0JfSBlbHNlIHsKKwlpZiAoIW9uc2lnc3RhY2spIHsKKwkJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7CisJCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQorCQkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CisJCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkvKiBUaGlzIGlzIHRoZSBsZWdhY3kgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gKi8KLQkJaWYgKChyZWdzLT5zcyAmIDB4ZmZmZikgIT0gX19VU0VSX0RTICYmCi0JCQkhKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSAmJgotCQkJCWthLT5zYS5zYV9yZXN0b3JlcikKLQkJCXNwID0gKHVuc2lnbmVkIGxvbmcpIGthLT5zYS5zYV9yZXN0b3JlcjsKKwkJCS8qIFRoaXMgaXMgdGhlIGxlZ2FjeSBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAqLworCQkJaWYgKChyZWdzLT5zcyAmIDB4ZmZmZikgIT0gX19VU0VSX0RTICYmCisJCQkJIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgJiYKKwkJCQkJa2EtPnNhLnNhX3Jlc3RvcmVyKQorCQkJCXNwID0gKHVuc2lnbmVkIGxvbmcpIGthLT5zYS5zYV9yZXN0b3JlcjsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisJCX0KIAl9CiAKIAlpZiAodXNlZF9tYXRoKCkpIHsKQEAgLTI0NCwxMiArMjQwLDIyIEBACiAJCXNwID0gcm91bmRfZG93bihzcCwgNjQpOwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAkJKmZwc3RhdGUgPSAodm9pZCBfX3VzZXIgKilzcDsKLQotCQlpZiAoc2F2ZV9pMzg3X3hzdGF0ZSgqZnBzdGF0ZSkgPCAwKQotCQkJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xTDsKIAl9CiAKLQlyZXR1cm4gKHZvaWQgX191c2VyICopYWxpZ25fc2lnZnJhbWUoc3AgLSBmcmFtZV9zaXplKTsKKwlzcCA9IGFsaWduX3NpZ2ZyYW1lKHNwIC0gZnJhbWVfc2l6ZSk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBhbmQgd291bGQgb3ZlcmZsb3cgaXQsIGRvbid0LgorCSAqIFJldHVybiBhbiBhbHdheXMtYm9ndXMgYWRkcmVzcyBpbnN0ZWFkIHNvIHdlIHdpbGwgZGllIHdpdGggU0lHU0VHVi4KKwkgKi8KKwlpZiAob25zaWdzdGFjayAmJiAhbGlrZWx5KG9uX3NpZ19zdGFjayhzcCkpKQorCQlyZXR1cm4gKHZvaWQgX191c2VyICopLTFMOworCisJLyogc2F2ZSBpMzg3IHN0YXRlICovCisJaWYgKHVzZWRfbWF0aCgpICYmIHNhdmVfaTM4N194c3RhdGUoKmZwc3RhdGUpIDwgMCkKKwkJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xTDsKKworCXJldHVybiAodm9pZCBfX3VzZXIgKilzcDsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDI0OTMzNGYuLmVmN2QxMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMTE0LDEwICsxMTQsNiBAQAogCiBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CiAKLQotLyogU2V0IGlmIHdlIGZpbmQgYSBCIHN0ZXBwaW5nIENQVSAqLwotc3RhdGljIGludCBfX2NwdWluaXRkYXRhIHNtcF9iX3N0ZXBwaW5nOwotCiAjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQogCiAvKiB3aGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzICovCkBAIC0yNzEsOCArMjY3LDYgQEAKIAljcHVtYXNrX3NldF9jcHUoY3B1aWQsIGNwdV9jYWxsaW5fbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSB1bnNhZmVfc21wOwotCiAvKgogICogQWN0aXZhdGUgYSBzZWNvbmRhcnkgcHJvY2Vzc29yLgogICovCkBAIC0zNDAsNzYgKzMzNCw2IEBACiAJY3B1X2lkbGUoKTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9hcHBseV9xdWlya3Moc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCS8qCi0JICogTWFzayBCLCBQZW50aXVtLCBidXQgbm90IFBlbnRpdW0gTU1YCi0JICovCi0JaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgotCSAgICBjLT54ODYgPT0gNSAmJgotCSAgICBjLT54ODZfbWFzayA+PSAxICYmIGMtPng4Nl9tYXNrIDw9IDQgJiYKLQkgICAgYy0+eDg2X21vZGVsIDw9IDMpCi0JCS8qCi0JCSAqIFJlbWVtYmVyIHdlIGhhdmUgQiBzdGVwIFBlbnRpYSB3aXRoIGJ1Z3MKLQkJICovCi0JCXNtcF9iX3N0ZXBwaW5nID0gMTsKLQotCS8qCi0JICogQ2VydGFpbiBBdGhsb25zIG1pZ2h0IHdvcmsgKGZvciB2YXJpb3VzIHZhbHVlcyBvZiAnd29yaycpIGluIFNNUAotCSAqIGJ1dCB0aGV5IGFyZSBub3QgY2VydGlmaWVkIGFzIE1QIGNhcGFibGUuCi0JICovCi0JaWYgKChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAoYy0+eDg2ID09IDYpKSB7Ci0KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPT0gMSkKLQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyogQXRobG9uIDY2MC82NjEgaXMgdmFsaWQuICovCi0JCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmICgoYy0+eDg2X21hc2sgPT0gMCkgfHwKLQkJICAgIChjLT54ODZfbWFzayA9PSAxKSkpCi0JCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qIER1cm9uIDY3MCBpcyB2YWxpZCAqLwotCQlpZiAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPT0gMCkpCi0JCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qCi0JCSAqIEF0aGxvbiA2NjIsIER1cm9uIDY3MSwgYW5kIEF0aGxvbiA+bW9kZWwgNyBoYXZlIGNhcGFiaWxpdHkKLQkJICogYml0LiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBBNSBzdGVwcGluZyAoNjYyKSBvZiBzb21lCi0JCSAqIEF0aGxvbiBYUCdzIGhhdmUgdGhlIE1QIGJpdCBzZXQuCi0JCSAqIFNlZSBodHRwOi8vd3d3LmhlaXNlLmRlL25ld3N0aWNrZXIvZGF0YS9qb3ctMTguMTAuMDEtMDAwIGZvcgotCQkgKiBtb3JlLgotCQkgKi8KLQkJaWYgKCgoYy0+eDg2X21vZGVsID09IDYpICYmIChjLT54ODZfbWFzayA+PSAyKSkgfHwKLQkJICAgICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA+PSAxKSkgfHwKLQkJICAgICAoYy0+eDg2X21vZGVsID4gNykpCi0JCQlpZiAoY3B1X2hhc19tcCkKLQkJCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qIElmIHdlIGdldCBoZXJlLCBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KLQkJdW5zYWZlX3NtcCA9IDE7Ci0JfQotCi12YWxpZF9rNzoKLQk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzbXBfY2hlY2tzKHZvaWQpCi17Ci0JaWYgKHNtcF9iX3N0ZXBwaW5nKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBTTVAgb3BlcmF0aW9uIG1heSBiZSB1bnJlbGlhYmxlIgotCQkJCSAgICAid2l0aCBCIHN0ZXBwaW5nIHByb2Nlc3NvcnMuXG4iKTsKLQotCS8qCi0JICogRG9uJ3QgdGFpbnQgaWYgd2UgYXJlIHJ1bm5pbmcgU01QIGtlcm5lbCBvbiBhIHNpbmdsZSBub24tTVAKLQkgKiBhcHByb3ZlZCBBdGhsb24KLQkgKi8KLQlpZiAodW5zYWZlX3NtcCAmJiBudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV0FSTklORzogVGhpcyBjb21iaW5hdGlvbiBvZiBBTUQiCi0JCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOwotCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7Ci0JfQotfQotCiAvKgogICogVGhlIGJvb3RzdHJhcCBrZXJuZWwgZW50cnkgY29kZSBoYXMgc2V0IHRoZXNlIHVwLiBTYXZlIHRoZW0gZm9yCiAgKiBhIGdpdmVuIENQVQpAQCAtNDIzLDcgKzM0Nyw2IEBACiAJYy0+Y3B1X2luZGV4ID0gaWQ7CiAJaWYgKGlkICE9IDApCiAJCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7Ci0Jc21wX2FwcGx5X3F1aXJrcyhjKTsKIH0KIAogCkBAIC0xMTkzLDcgKzExMTYsNiBAQAogCXByX2RlYnVnKCJCb290IGRvbmUuXG4iKTsKIAogCWltcHJlc3NfZnJpZW5kcygpOwotCXNtcF9jaGVja3MoKTsKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlzZXR1cF9pb2FwaWNfZGVzdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggZDAzOGI5Yy4uNzljMDczMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtNzUwLDcgKzc1MCw3IEBACiAJaW50IG5vZGU7CiAJaW50IG5ibGFkZXM7CiAJaW50IGxhc3RfYmxhZGU7Ci0JaW50IGN1cl9jcHUgPSAwOworCWludCBjdXJfY3B1OwogCiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIDA7CkBAIC03NjAsNiArNzYwLDcgQEAKIAl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IDA7CiAJbGFzdF9ibGFkZSA9IC0xOworCWN1cl9jcHUgPSAwOwogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKIAkJYmxhZGUgPSB1dl9ub2RlX3RvX2JsYWRlX2lkKG5vZGUpOwogCQlpZiAoYmxhZGUgPT0gbGFzdF9ibGFkZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMGZjYzk1YS4uN2U0NTE1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKQEAgLTI1LDEwICsyNSwxMCBAQAogICoKICAqIFNlbmQgZmVlZGJhY2sgdG8gPGNvbHBhdGNoQHVzLmlibS5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHg4Nl9jcHUsIGNwdV9kZXZpY2VzKTsKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkgKi8KIAlpZiAobnVtKQogCQlwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdS5ob3RwbHVnZ2FibGUgPSAxOworCiAJcmV0dXJuIHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgbnVtKS5jcHUsIG51bSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfcmVnaXN0ZXJfY3B1KTsKQEAgLTU2LDEyICs1NywxMyBAQAogCXVucmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfdW5yZWdpc3Rlcl9jcHUpOwotI2Vsc2UKKyNlbHNlIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLworCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3JlZ2lzdGVyX2NwdShpbnQgbnVtKQogewogCXJldHVybiByZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1LCBudW0pOwogfQotI2VuZGlmIC8qQ09ORklHX0hPVFBMVUdfQ1BVKi8KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQogewpAQCAtNzAsMTEgKzcyLDExIEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQogCQlyZWdpc3Rlcl9vbmVfbm9kZShpKTsKLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworI2VuZGlmCiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKQogCQlhcmNoX3JlZ2lzdGVyX2NwdShpKTsKKwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jIGIvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYwpAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIFNHSSBSVEMgY2xvY2svdGltZXIgcm91dGluZXMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBEaW1pdHJpIFNpdmFuaWNoCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorCisjZGVmaW5lIFJUQ19OQU1FCQkic2dpX3J0YyIKKworc3RhdGljIGN5Y2xlX3QgdXZfcmVhZF9ydGModm9pZCk7CitzdGF0aWMgaW50IHV2X3J0Y19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCB1dl9ydGNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlLAorCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdXYgPSB7CisJLm5hbWUJCT0gUlRDX05BTUUsCisJLnJhdGluZwkJPSA0MDAsCisJLnJlYWQJCT0gdXZfcmVhZF9ydGMsCisJLm1hc2sJCT0gKGN5Y2xlX3QpVVZIX1JUQ19SRUFMX1RJTUVfQ0xPQ0tfTUFTSywKKwkuc2hpZnQJCT0gMTAsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tfZXZlbnRfZGV2aWNlX3V2ID0geworCS5uYW1lCQk9IFJUQ19OQU1FLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNoaWZ0CQk9IDIwLAorCS5yYXRpbmcJCT0gNDAwLAorCS5pcnEJCT0gLTEsCisJLnNldF9uZXh0X2V2ZW50CT0gdXZfcnRjX25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gdXZfcnRjX3RpbWVyX3NldHVwLAorCS5ldmVudF9oYW5kbGVyCT0gTlVMTCwKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBjcHVfY2VkKTsKKworLyogVGhlcmUgaXMgb25lIG9mIHRoZXNlIGFsbG9jYXRlZCBwZXIgbm9kZSAqLworc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkIHsKKwlzcGlubG9ja190CWxvY2s7CisJLyogbmV4dCBjcHUgd2FpdGluZyBmb3IgdGltZXIsIGxvY2FsIG5vZGUgcmVsYXRpdmU6ICovCisJaW50CQluZXh0X2NwdTsKKwkvKiBudW1iZXIgb2YgY3B1cyBvbiB0aGlzIG5vZGU6ICovCisJaW50CQluY3B1czsKKwlzdHJ1Y3QgeworCQlpbnQJbGNwdTsJCS8qIHN5c3RlbXdpZGUgbG9naWNhbCBjcHUgbnVtYmVyICovCisJCXU2NAlleHBpcmVzOwkvKiBuZXh0IHRpbWVyIGV4cGlyYXRpb24gZm9yIHRoaXMgY3B1ICovCisJfSBjcHVbMV07Cit9OworCisvKgorICogQWNjZXNzIHRvIHV2X3J0Y190aW1lcl9oZWFkIHZpYSBibGFkZSBpZC4KKyAqLworc3RhdGljIHN0cnVjdCB1dl9ydGNfdGltZXJfaGVhZAkJKipibGFkZV9pbmZvIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQJCQkJdXZfcnRjX2VuYWJsZTsKKworLyoKKyAqIEhhcmR3YXJlIGludGVyZmFjZSByb3V0aW5lcworICovCisKKy8qIFNlbmQgSVBJcyB0byBhbm90aGVyIG5vZGUgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y19zZW5kX0lQSShpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgYXBpY2lkLCB2YWw7CisJaW50IHBub2RlOworCisJYXBpY2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7CisJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKKwl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAorCSAgICAgIChhcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJICAgICAgKEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CisKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworfQorCisvKiBDaGVjayBmb3IgYW4gUlRDIGludGVycnVwdCBwZW5kaW5nICovCitzdGF0aWMgaW50IHV2X2ludHJfcGVuZGluZyhpbnQgcG5vZGUpCit7CisJcmV0dXJuIHV2X3JlYWRfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfRVZFTlRfT0NDVVJSRUQwKSAmCisJCVVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMV9NQVNLOworfQorCisvKiBTZXR1cCBpbnRlcnJ1cHQgYW5kIHJldHVybiBub24temVybyBpZiBlYXJseSBleHBpcmF0aW9uIG9jY3VycmVkLiAqLworc3RhdGljIGludCB1dl9zZXR1cF9pbnRyKGludCBjcHUsIHU2NCBleHBpcmVzKQoreworCXU2NCB2YWw7CisJaW50IHBub2RlID0gdXZfY3B1X3RvX3Bub2RlKGNwdSk7CisKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9SVEMxX0lOVF9DT05GSUcsCisJCVVWSF9SVEMxX0lOVF9DT05GSUdfTV9NQVNLKTsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JTlRfQ01QQiwgLTFMKTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBUywKKwkJVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX01BU0spOworCisJdmFsID0gKEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiA8PCBVVkhfUlRDMV9JTlRfQ09ORklHX1ZFQ1RPUl9TSEZUKSB8CisJCSgodTY0KWNwdV9waHlzaWNhbF9pZChjcHUpIDw8IFVWSF9SVEMxX0lOVF9DT05GSUdfQVBJQ19JRF9TSEZUKTsKKworCS8qIFNldCBjb25maWd1cmF0aW9uICovCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfUlRDMV9JTlRfQ09ORklHLCB2YWwpOworCS8qIEluaXRpYWxpemUgY29tcGFyYXRvciB2YWx1ZSAqLworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lOVF9DTVBCLCBleHBpcmVzKTsKKworCXJldHVybiAoZXhwaXJlcyA8IHV2X3JlYWRfcnRjKCkgJiYgIXV2X2ludHJfcGVuZGluZyhwbm9kZSkpOworfQorCisvKgorICogUGVyLWNwdSB0aW1lciB0cmFja2luZyByb3V0aW5lcworICovCisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfZGVhbGxvY2F0ZV90aW1lcnModm9pZCkKK3sKKwlpbnQgYmlkOworCisJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUoYmlkKSB7CisJCWtmcmVlKGJsYWRlX2luZm9bYmlkXSk7CisJfQorCWtmcmVlKGJsYWRlX2luZm8pOworfQorCisvKiBBbGxvY2F0ZSBwZXItbm9kZSBsaXN0IG9mIGNwdSB0aW1lciBleHBpcmF0aW9uIHRpbWVzLiAqLworc3RhdGljIF9faW5pdCBpbnQgdXZfcnRjX2FsbG9jYXRlX3RpbWVycyh2b2lkKQoreworCWludCBjcHU7CisKKwlibGFkZV9pbmZvID0ga21hbGxvYyh1dl9wb3NzaWJsZV9ibGFkZXMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibGFkZV9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoYmxhZGVfaW5mbywgMCwgdXZfcG9zc2libGVfYmxhZGVzICogc2l6ZW9mKHZvaWQgKikpOworCisJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCWludCBuaWQgPSBjcHVfdG9fbm9kZShjcHUpOworCQlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwkJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCisJCWlmICghaGVhZCkgeworCQkJaGVhZCA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkKSArCisJCQkJKHV2X2JsYWRlX25yX3Bvc3NpYmxlX2NwdXMoYmlkKSAqCisJCQkJCTIgKiBzaXplb2YodTY0KSksCisJCQkJR0ZQX0tFUk5FTCwgbmlkKTsKKwkJCWlmICghaGVhZCkgeworCQkJCXV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycygpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJc3Bpbl9sb2NrX2luaXQoJmhlYWQtPmxvY2spOworCQkJaGVhZC0+bmNwdXMgPSB1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKGJpZCk7CisJCQloZWFkLT5uZXh0X2NwdSA9IC0xOworCQkJYmxhZGVfaW5mb1tiaWRdID0gaGVhZDsKKwkJfQorCisJCWhlYWQtPmNwdVtiY3B1XS5sY3B1ID0gY3B1OworCQloZWFkLT5jcHVbYmNwdV0uZXhwaXJlcyA9IFVMTE9OR19NQVg7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbmQgYW5kIHNldCB0aGUgbmV4dCBleHBpcmluZyB0aW1lci4gICovCitzdGF0aWMgdm9pZCB1dl9ydGNfZmluZF9uZXh0X3RpbWVyKHN0cnVjdCB1dl9ydGNfdGltZXJfaGVhZCAqaGVhZCwgaW50IHBub2RlKQoreworCXU2NCBsb3dlc3QgPSBVTExPTkdfTUFYOworCWludCBjLCBiY3B1ID0gLTE7CisKKwloZWFkLT5uZXh0X2NwdSA9IC0xOworCWZvciAoYyA9IDA7IGMgPCBoZWFkLT5uY3B1czsgYysrKSB7CisJCXU2NCBleHAgPSBoZWFkLT5jcHVbY10uZXhwaXJlczsKKwkJaWYgKGV4cCA8IGxvd2VzdCkgeworCQkJYmNwdSA9IGM7CisJCQlsb3dlc3QgPSBleHA7CisJCX0KKwl9CisJaWYgKGJjcHUgPj0gMCkgeworCQloZWFkLT5uZXh0X2NwdSA9IGJjcHU7CisJCWMgPSBoZWFkLT5jcHVbYmNwdV0ubGNwdTsKKwkJaWYgKHV2X3NldHVwX2ludHIoYywgbG93ZXN0KSkKKwkJCS8qIElmIHdlIGRpZG4ndCBzZXQgaXQgdXAgaW4gdGltZSwgdHJpZ2dlciAqLworCQkJdXZfcnRjX3NlbmRfSVBJKGMpOworCX0gZWxzZSB7CisJCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX1JUQzFfSU5UX0NPTkZJRywKKwkJCVVWSF9SVEMxX0lOVF9DT05GSUdfTV9NQVNLKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgZXhwaXJhdGlvbiB0aW1lIGZvciBjdXJyZW50IGNwdS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgd2UgbWlzc2VkIHRoZSBleHBpcmF0aW9uIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgdXZfcnRjX3NldF90aW1lcihpbnQgY3B1LCB1NjQgZXhwaXJlcykKK3sKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKwlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwl1NjQgKnQgPSAmaGVhZC0+Y3B1W2JjcHVdLmV4cGlyZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmV4dF9jcHU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJbmV4dF9jcHUgPSBoZWFkLT5uZXh0X2NwdTsKKwkqdCA9IGV4cGlyZXM7CisJLyogV2lsbCB0aGlzIG9uZSBiZSBuZXh0IHRvIGdvIG9mZj8gKi8KKwlpZiAobmV4dF9jcHUgPCAwIHx8IGJjcHUgPT0gbmV4dF9jcHUgfHwKKwkJCWV4cGlyZXMgPCBoZWFkLT5jcHVbbmV4dF9jcHVdLmV4cGlyZXMpIHsKKwkJaGVhZC0+bmV4dF9jcHUgPSBiY3B1OworCQlpZiAodXZfc2V0dXBfaW50cihjcHUsIGV4cGlyZXMpKSB7CisJCQkqdCA9IFVMTE9OR19NQVg7CisJCQl1dl9ydGNfZmluZF9uZXh0X3RpbWVyKGhlYWQsIHBub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhlYWQtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogVW5zZXQgZXhwaXJhdGlvbiB0aW1lIGZvciBjdXJyZW50IGNwdS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhpcyB0aW1lciB3YXMgcGVuZGluZy4KKyAqLworc3RhdGljIGludCB1dl9ydGNfdW5zZXRfdGltZXIoaW50IGNwdSkKK3sKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKwlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwl1NjQgKnQgPSAmaGVhZC0+Y3B1W2JjcHVdLmV4cGlyZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhlYWQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChoZWFkLT5uZXh0X2NwdSA9PSBiY3B1ICYmIHV2X3JlYWRfcnRjKCkgPj0gKnQpCisJCXJjID0gMTsKKworCSp0ID0gVUxMT05HX01BWDsKKworCS8qIFdhcyB0aGUgaGFyZHdhcmUgc2V0dXAgZm9yIHRoaXMgdGltZXI/ICovCisJaWYgKGhlYWQtPm5leHRfY3B1ID09IGJjcHUpCisJCXV2X3J0Y19maW5kX25leHRfdGltZXIoaGVhZCwgcG5vZGUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBLZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzLgorICovCisKKy8qCisgKiBSZWFkIHRoZSBSVEMuCisgKi8KK3N0YXRpYyBjeWNsZV90IHV2X3JlYWRfcnRjKHZvaWQpCit7CisJcmV0dXJuIChjeWNsZV90KXV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SVEMpOworfQorCisvKgorICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93CisgKi8KK3N0YXRpYyBpbnQgdXZfcnRjX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCWludCBjZWRfY3B1ID0gY3B1bWFza19maXJzdChjZWQtPmNwdW1hc2spOworCisJcmV0dXJuIHV2X3J0Y19zZXRfdGltZXIoY2VkX2NwdSwgZGVsdGEgKyB1dl9yZWFkX3J0YygpKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBSVEMgdGltZXIgaW4gb25lc2hvdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJaW50IGNlZF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGV2dC0+Y3B1bWFzayk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJLyogTm90aGluZyB0byBkbyBoZXJlIHlldCAqLworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQl1dl9ydGNfdW5zZXRfdGltZXIoY2VkX2NwdSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgdXZfcnRjX2ludGVycnVwdCh2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZfX2dldF9jcHVfdmFyKGNwdV9jZWQpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoIWNlZCB8fCAhY2VkLT5ldmVudF9oYW5kbGVyKQorCQlyZXR1cm47CisKKwlpZiAodXZfcnRjX3Vuc2V0X3RpbWVyKGNwdSkgIT0gMSkKKwkJcmV0dXJuOworCisJY2VkLT5ldmVudF9oYW5kbGVyKGNlZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHV2X2VuYWJsZV9ydGMoY2hhciAqc3RyKQoreworCXV2X3J0Y19lbmFibGUgPSAxOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJ1dnJ0YyIsIHV2X2VuYWJsZV9ydGMpOworCitzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX3JlZ2lzdGVyX2Nsb2NrZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJl9fZ2V0X2NwdV92YXIoY3B1X2NlZCk7CisKKwkqY2VkID0gY2xvY2tfZXZlbnRfZGV2aWNlX3V2OworCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgdXZfcnRjX3NldHVwX2Nsb2NrKHZvaWQpCit7CisJaW50IHJjOworCisJaWYgKCF1dl9ydGNfZW5hYmxlIHx8ICFpc191dl9zeXN0ZW0oKSB8fCBnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pCisJCXJldHVybiAtRU5PREVWOworCisJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gdXZfcnRjX2ludGVycnVwdDsKKworCWNsb2Nrc291cmNlX3V2Lm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCwKKwkJCQljbG9ja3NvdXJjZV91di5zaGlmdCk7CisKKwlyYyA9IGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJaWYgKHJjKSB7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBTZXR1cCBhbmQgcmVnaXN0ZXIgY2xvY2tldmVudHMgKi8KKwlyYyA9IHV2X3J0Y19hbGxvY2F0ZV90aW1lcnMoKTsKKwlpZiAocmMpIHsKKwkJY2xvY2tzb3VyY2VfdW5yZWdpc3RlcigmY2xvY2tzb3VyY2VfdXYpOworCQlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24gPSBOVUxMOworCQlyZXR1cm4gcmM7CisJfQorCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm11bHQgPSBkaXZfc2Moc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAorCQkJCU5TRUNfUEVSX1NFQywgY2xvY2tfZXZlbnRfZGV2aWNlX3V2LnNoaWZ0KTsKKworCWNsb2NrX2V2ZW50X2RldmljZV91di5taW5fZGVsdGFfbnMgPSBOU0VDX1BFUl9TRUMgLworCQkJCQkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kOworCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm1heF9kZWx0YV9ucyA9IGNsb2Nrc291cmNlX3V2Lm1hc2sgKgorCQkJCShOU0VDX1BFUl9TRUMgLyBzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQpOworCisJcmMgPSBzY2hlZHVsZV9vbl9lYWNoX2NwdSh1dl9ydGNfcmVnaXN0ZXJfY2xvY2tldmVudHMpOworCWlmIChyYykgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycygpOworCX0KKworCXJldHVybiByYzsKK30KK2FyY2hfaW5pdGNhbGwodXZfcnRjX3NldHVwX2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCAxOTFhODc2Li4zMWZmYzI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC01NzgsNyArNTc4LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwaWl4NF9tYXN0ZXJfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IHJlYWxpcnE7Ci0JaXJxX2Rlc2NfdCAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCmluZGV4IDJjYzRhOTAuLjk1ZGViOWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKQEAgLTM5NSwxMSArMzk1LDYgQEAKIAl2bWlfb3BzLnVwZGF0ZV9wdGUocHRlcCwgVk1JX1BBR0VfUFQpOwogfQogCi1zdGF0aWMgdm9pZCB2bWlfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jdm1pX29wcy5zZXRfcHRlKHB0ZSwgcHRlcCwgdm1pX2ZsYWdzX2FkZHJfZGVmZXIobW0sIGFkZHIsIFZNSV9QQUdFX1BULCAxKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZtaV9zZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpCiB7CiAJLyogVW0sIGV3dyAqLwpAQCAtNzUwLDcgKzc0NSw2IEBACiAJCXB2X21tdV9vcHMuc2V0X3BtZCA9IHZtaV9zZXRfcG1kOwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJCXB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMgPSB2bWlfc2V0X3B0ZV9hdG9taWM7Ci0JCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50ID0gdm1pX3NldF9wdGVfcHJlc2VudDsKIAkJcHZfbW11X29wcy5zZXRfcHVkID0gdm1pX3NldF9wdWQ7CiAJCXB2X21tdV9vcHMucHRlX2NsZWFyID0gdm1pX3B0ZV9jbGVhcjsKIAkJcHZfbW11X29wcy5wbWRfY2xlYXIgPSB2bWlfcG1kX2NsZWFyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwppbmRleCAwZDg2MDk2Li42MmFkNTAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwpAQCAtMTg5LDE1ICsxODksMjQgQEAKIAkqKC5ic3MpCiAJLiA9IEFMSUdOKDQpOwogCV9fYnNzX3N0b3AgPSAuOwotICAJX2VuZCA9IC4gOwotCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjcmVhdGVzIHRoZSBlYXJseSBib290IHBhZ2UgdGFibGVzICovCisgIH0KKworICAuYnJrIDogQVQoQUREUiguYnJrKSAtIExPQURfT0ZGU0VUKSB7CiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JcGcwID0gLiA7CisJX19icmtfYmFzZSA9IC4gOworIAkuICs9IDY0ICogMTAyNCA7CS8qIDY0ayBhbGlnbm1lbnQgc2xvcCBzcGFjZSAqLworCSooLmJya19yZXNlcnZhdGlvbikJLyogYXJlYXMgYnJrIHVzZXJzIGhhdmUgcmVzZXJ2ZWQgKi8KKwlfX2Jya19saW1pdCA9IC4gOworICB9CisKKyAgLmVuZCA6IEFUKEFERFIoLmVuZCkgLSBMT0FEX09GRlNFVCkgeworCV9lbmQgPSAuIDsKICAgfQogCiAgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwogICAvRElTQ0FSRC8gOiB7CiAJKiguZXhpdGNhbGwuZXhpdCkKKwkqKC5kaXNjYXJkKQogCX0KIAogICBTVEFCU19ERUJVRwpAQCAtMjA1LDYgKzIxNCwxMiBAQAogICBEV0FSRl9ERUJVRwogfQogCisvKgorICogQnVpbGQtdGltZSBjaGVjayBvbiB0aGUgaW1hZ2Ugc2l6ZToKKyAqLworQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAorCSJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKQorCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAvKiBMaW5rIHRpbWUgY2hlY2tzICovCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCmluZGV4IGZiZmNlZDYuLmM4NzQyNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCkBAIC0yOSw4ICsyOSw4IEBACiB7CiAgIC4gPSBfX1NUQVJUX0tFUk5FTDsKICAgcGh5c19zdGFydHVwXzY0ID0gc3RhcnR1cF82NCAtIExPQURfT0ZGU0VUOwotICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiAgQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCV90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogCS8qIEZpcnN0IHRoZSBjb2RlIHRoYXQgaGFzIHRvIGJlIGZpcnN0IGZvciBib290c3RyYXBwaW5nICovCiAJKigudGV4dC5oZWFkKQogCV9zdGV4dCA9IC47CkBAIC02MSwxMyArNjEsMTMgQEAKICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCisJX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAJfSA6ZGF0YQogCi0gIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuID0gQUxJR04oQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUyk7CiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCS4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKIAkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9CiAgIC4gPSBBTElHTihDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9CWVRFUyk7CkBAIC0xMjUsMjkgKzEyNSwyOSBAQAogI3VuZGVmIFZWSVJUX09GRlNFVAogI3VuZGVmIFZWSVJUCiAKLSAgLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsJLyogaW5pdF90YXNrICovCiAgIC5kYXRhLmluaXRfdGFzayA6IEFUKEFERFIoLmRhdGEuaW5pdF90YXNrKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsJLyogaW5pdF90YXNrICovCiAJKiguZGF0YS5pbml0X3Rhc2spCiAgIH06ZGF0YS5pbml0CiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEucGFnZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJKiguZGF0YS5wYWdlX2FsaWduZWQpCiAgIH0KIAotICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19zbXBfYWx0X2JlZ2luID0gLjsKLSAgX19zbXBfbG9ja3MgPSAuOwogICAuc21wX2xvY2tzIDogQVQoQUREUiguc21wX2xvY2tzKSAtIExPQURfT0ZGU0VUKSB7CisJLyogbWlnaHQgZ2V0IGZyZWVkIGFmdGVyIGluaXQgKi8KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX3NtcF9hbHRfYmVnaW4gPSAuOworCV9fc21wX2xvY2tzID0gLjsKIAkqKC5zbXBfbG9ja3MpCisJX19zbXBfbG9ja3NfZW5kID0gLjsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX3NtcF9hbHRfZW5kID0gLjsKICAgfQotICBfX3NtcF9sb2Nrc19lbmQgPSAuOwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19zbXBfYWx0X2VuZCA9IC47CiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLSAgX19pbml0X2JlZ2luID0gLjsKKyAgX19pbml0X2JlZ2luID0gLjsJLyogcGFpcmVkIHdpdGggX19pbml0X2VuZCAqLwogICAuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAJX3Npbml0dGV4dCA9IC47CiAJSU5JVF9URVhUCkBAIC0xNTksNDAgKzE1OSw0MiBAQAogCV9faW5pdGRhdGFfZW5kID0gLjsKICAgIH0KIAotICAuID0gQUxJR04oMTYpOwotICBfX3NldHVwX3N0YXJ0ID0gLjsKLSAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVwKSAtIExPQURfT0ZGU0VUKSB7ICooLmluaXQuc2V0dXApIH0KLSAgX19zZXR1cF9lbmQgPSAuOwotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVwKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKDE2KTsKKwlfX3NldHVwX3N0YXJ0ID0gLjsKKwkqKC5pbml0LnNldHVwKQorCV9fc2V0dXBfZW5kID0gLjsKKyAgfQogICAuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAlJTklUQ0FMTFMKKwlfX2luaXRjYWxsX2VuZCA9IC47CiAgIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7CisJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwogCSooLmNvbl9pbml0Y2FsbC5pbml0KQorCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CiAgIH0KLSAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKLSAgX194ODZfY3B1X2Rldl9zdGFydCA9IC47CiAgIC54ODZfY3B1X2Rldi5pbml0IDogQVQoQUREUigueDg2X2NwdV9kZXYuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCV9feDg2X2NwdV9kZXZfc3RhcnQgPSAuOwogCSooLng4Nl9jcHVfZGV2LmluaXQpCisJX194ODZfY3B1X2Rldl9lbmQgPSAuOwogICB9Ci0gIF9feDg2X2NwdV9kZXZfZW5kID0gLjsKICAgU0VDVVJJVFlfSU5JVAogCiAgIC4gPSBBTElHTig4KTsKICAgLnBhcmFpbnN0cnVjdGlvbnMgOiBBVChBRERSKC5wYXJhaW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7Ci0gIF9fcGFyYWluc3RydWN0aW9ucyA9IC47CisJX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKICAgICAgICAqKC5wYXJhaW5zdHJ1Y3Rpb25zKQotICBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kID0gLjsKKwlfX3BhcmFpbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgfQogCi0gIC4gPSBBTElHTig4KTsKLSAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKICAgLmFsdGluc3RydWN0aW9ucyA6IEFUKEFERFIoLmFsdGluc3RydWN0aW9ucykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTig4KTsKKwlfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwogCSooLmFsdGluc3RydWN0aW9ucykKKwlfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgfQotICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgLmFsdGluc3RyX3JlcGxhY2VtZW50IDogQVQoQUREUiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkKICAgfQpAQCAtMjA3LDkgKzIwOSwxMSBAQAogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX2luaXRyYW1mc19zdGFydCA9IC47Ci0gIC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgeyAqKC5pbml0LnJhbWZzKSB9Ci0gIF9faW5pdHJhbWZzX2VuZCA9IC47CisgIC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgeworCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKKwkqKC5pbml0LnJhbWZzKQorCV9faW5pdHJhbWZzX2VuZCA9IC47CisgIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjI5LDIwICsyMzMsMjkgQEAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX25vc2F2ZV9iZWdpbiA9IC47CiAgIC5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7Ci0gICAgICAqKC5kYXRhLm5vc2F2ZSkKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX25vc2F2ZV9iZWdpbiA9IC47CisJKiguZGF0YS5ub3NhdmUpCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19ub3NhdmVfZW5kID0gLjsKICAgfSA6ZGF0YS5pbml0MiAvKiB1c2UgYW5vdGhlciBzZWN0aW9uIGRhdGEuaW5pdDIsIHNlZSBQRVJDUFVfVkFERFIoKSBhYm92ZSAqLwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19ub3NhdmVfZW5kID0gLjsKIAotICBfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MgKi8KICAgLmJzcyA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwogCSooLmJzcy5wYWdlX2FsaWduZWQpCiAJKiguYnNzKQotCX0KLSAgX19ic3Nfc3RvcCA9IC47CisJX19ic3Nfc3RvcCA9IC47CisgIH0KKworICAuYnJrIDogQVQoQUREUiguYnJrKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19icmtfYmFzZSA9IC4gOworIAkuICs9IDY0ICogMTAyNCA7CS8qIDY0ayBhbGlnbm1lbnQgc2xvcCBzcGFjZSAqLworCSooLmJya19yZXNlcnZhdGlvbikJLyogYXJlYXMgYnJrIHVzZXJzIGhhdmUgcmVzZXJ2ZWQgKi8KKwlfX2Jya19saW1pdCA9IC4gOworICB9CiAKICAgX2VuZCA9IC4gOwogCkBAIC0yNTAsNiArMjYzLDcgQEAKICAgL0RJU0NBUkQvIDogewogCSooLmV4aXRjYWxsLmV4aXQpCiAJKiguZWhfZnJhbWUpCisJKiguZGlzY2FyZCkKIAl9CiAKICAgU1RBQlNfREVCVUcKQEAgLTI3NSwzICsyODksMTAgQEAKIEFTU0VSVCgocGVyX2NwdV9faXJxX3N0YWNrX3VuaW9uID09IDApLAogICAgICAgICAiaXJxX3N0YWNrX3VuaW9uIGlzIG5vdCBhdCBzdGFydCBvZiBwZXItY3B1IGFyZWEiKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFWEVDCisjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisKK0FTU0VSVChrZXhlY19jb250cm9sX2NvZGVfc2l6ZSA8PSBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUsCisgICAgICAgImtleGVjIGNvbnRyb2wgY29kZSBzaXplIGlzIHRvbyBiaWciKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwppbmRleCA3NGRlNTYyLi5hMWQ4MDRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2lmIGRlZmluZWQgQ09ORklHX1BDSSAmJiBkZWZpbmVkIENPTkZJR19QQVJBVklSVAogLyoKICAqIEludGVycnVwdCBjb250cm9sIG9uIHZTTVBvd2VyZWQgc3lzdGVtczoKICAqIH5BQyBpcyBhIHNoYWRvdyBvZiBJRi4gIElmIElGIGlzICdvbicgQUMgc2hvdWxkIGJlICdvZmYnCkBAIC0xMTQsNiArMTE0LDcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBpc192c21wID0gLTE7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKQEAgLTEzOSw2ICsxNDAsMTUgQEAKIAl9CiB9CiAKKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgZGV0ZWN0X3ZzbXBfYm94KHZvaWQpCit7Cit9CitpbnQgaXNfdnNtcF9ib3godm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogdm9pZCBfX2luaXQgdnNtcF9pbml0KHZvaWQpCiB7CiAJZGV0ZWN0X3ZzbXBfYm94KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwppbmRleCA5ZmU0ZGRhLi45MGU0NGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTEwNTgsMTQgKzEwNTgsNiBAQAogCSAqIGxndWVzdF9pbml0KCkgd2hlcmUgdGhlIHJlc3Qgb2YgdGhlIGZhaXJseSBjaGFvdGljIGJvb3Qgc2V0dXAKIAkgKiBvY2N1cnMuICovCiAKLQkvKiBUaGUgbmF0aXZlIGJvb3QgY29kZSBzZXRzIHVwIGluaXRpYWwgcGFnZSB0YWJsZXMgaW1tZWRpYXRlbHkgYWZ0ZXIKLQkgKiB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHNldHMgaW5pdF9wZ190YWJsZXNfZW5kIHNvIHRoZXkncmUgbm90Ci0JICogY2xvYmJlcmVkLiAgVGhlIExhdW5jaGVyIHBsYWNlcyBvdXIgaW5pdGlhbCBwYWdldGFibGVzIHNvbWV3aGVyZSBhdAotCSAqIHRoZSB0b3Agb2Ygb3VyIHBoeXNpY2FsIG1lbW9yeSwgc28gd2UgZG9uJ3QgbmVlZCBleHRyYSBzcGFjZTogc2V0Ci0JICogaW5pdF9wZ190YWJsZXNfZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGtlcm5lbC4gKi8KLQlpbml0X3BnX3RhYmxlc19zdGFydCA9IF9fcGEocGcwKTsKLQlpbml0X3BnX3RhYmxlc19lbmQgPSBfX3BhKHBnMCk7Ci0KIAkvKiBBcyBkZXNjcmliZWQgaW4gaGVhZF8zMi5TLCB3ZSBtYXAgdGhlIGZpcnN0IDEyOE0gb2YgbWVtb3J5LiAqLwogCW1heF9wZm5fbWFwcGVkID0gKDEyOCoxMDI0KjEwMjQpID4+IFBBR0VfU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwppbmRleCBjMjI5ODFmLi5hZDU0NDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCkBAIC0xLDMwICsxLDM4IEBACiAvKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CiAKIC8qCiAgKiBtZW1jcHkgLSBDb3B5IGEgbWVtb3J5IGJsb2NrLgogICoKLSAqIElucHV0OgkKLSAqIHJkaSBkZXN0aW5hdGlvbgotICogcnNpIHNvdXJjZQotICogcmR4IGNvdW50Ci0gKiAKKyAqIElucHV0OgorICogIHJkaSBkZXN0aW5hdGlvbgorICogIHJzaSBzb3VyY2UKKyAqICByZHggY291bnQKKyAqCiAgKiBPdXRwdXQ6CiAgKiByYXggb3JpZ2luYWwgZGVzdGluYXRpb24KLSAqLwkKKyAqLwogCisvKgorICogbWVtY3B5X2MoKSAtIGZhc3Qgc3RyaW5nIG9wcyAoUkVQIE1PVlNRKSBiYXNlZCB2YXJpYW50LgorICoKKyAqIENhbGxzIHRvIHRoaXMgZ2V0IHBhdGNoZWQgaW50byB0aGUga2VybmVsIGltYWdlIHZpYSB0aGUKKyAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CisgKi8KIAlBTElHTgogbWVtY3B5X2M6CiAJQ0ZJX1NUQVJUUFJPQwotCW1vdnEgJXJkaSwlcmF4Ci0JbW92bCAlZWR4LCVlY3gKLQlzaHJsICQzLCVlY3gKLQlhbmRsICQ3LCVlZHgKKwltb3ZxICVyZGksICVyYXgKKworCW1vdmwgJWVkeCwgJWVjeAorCXNocmwgJDMsICVlY3gKKwlhbmRsICQ3LCAlZWR4CiAJcmVwIG1vdnNxCi0JbW92bCAlZWR4LCVlY3gKKwltb3ZsICVlZHgsICVlY3gKIAlyZXAgbW92c2IKIAlyZXQKIAlDRklfRU5EUFJPQwpAQCAtMzMsOTkgKzQxLDExMCBAQAogRU5UUlkoX19tZW1jcHkpCiBFTlRSWShtZW1jcHkpCiAJQ0ZJX1NUQVJUUFJPQwotCXB1c2hxICVyYngKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAotCUNGSV9SRUxfT0ZGU0VUIHJieCwgMAotCW1vdnEgJXJkaSwlcmF4CiAKLQltb3ZsICVlZHgsJWVjeAotCXNocmwgJDYsJWVjeAorCS8qCisJICogUHV0IHRoZSBudW1iZXIgb2YgZnVsbCA2NC1ieXRlIGJsb2NrcyBpbnRvICVlY3guCisJICogVGFpbCBwb3J0aW9uIGlzIGhhbmRsZWQgYXQgdGhlIGVuZDoKKwkgKi8KKwltb3ZxICVyZGksICVyYXgKKwltb3ZsICVlZHgsICVlY3gKKwlzaHJsICAgJDYsICVlY3gKIAlqeiAuTGhhbmRsZV90YWlsCiAKIAkucDJhbGlnbiA0CiAuTGxvb3BfNjQ6CisJLyoKKwkgKiBXZSBkZWNyZW1lbnQgdGhlIGxvb3AgaW5kZXggaGVyZSAtIGFuZCB0aGUgemVyby1mbGFnIGlzCisJICogY2hlY2tlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wIChpbnN0cnVjdGlvbnMgaW5iZXR3ZWVuIGRvCisJICogbm90IGNoYW5nZSB0aGUgemVybyBmbGFnKToKKwkgKi8KIAlkZWNsICVlY3gKIAotCW1vdnEgKCVyc2kpLCVyMTEKLQltb3ZxIDgoJXJzaSksJXI4CisJLyoKKwkgKiBNb3ZlIGluIGJsb2NrcyBvZiA0eDE2IGJ5dGVzOgorCSAqLworCW1vdnEgMCo4KCVyc2kpLAkJJXIxMQorCW1vdnEgMSo4KCVyc2kpLAkJJXI4CisJbW92cSAlcjExLAkJMCo4KCVyZGkpCisJbW92cSAlcjgsCQkxKjgoJXJkaSkKIAotCW1vdnEgJXIxMSwoJXJkaSkKLQltb3ZxICVyOCwxKjgoJXJkaSkKKwltb3ZxIDIqOCglcnNpKSwJCSVyOQorCW1vdnEgMyo4KCVyc2kpLAkJJXIxMAorCW1vdnEgJXI5LAkJMio4KCVyZGkpCisJbW92cSAlcjEwLAkJMyo4KCVyZGkpCiAKLQltb3ZxIDIqOCglcnNpKSwlcjkKLQltb3ZxIDMqOCglcnNpKSwlcjEwCisJbW92cSA0KjgoJXJzaSksCQklcjExCisJbW92cSA1KjgoJXJzaSksCQklcjgKKwltb3ZxICVyMTEsCQk0KjgoJXJkaSkKKwltb3ZxICVyOCwJCTUqOCglcmRpKQogCi0JbW92cSAlcjksMio4KCVyZGkpCi0JbW92cSAlcjEwLDMqOCglcmRpKQorCW1vdnEgNio4KCVyc2kpLAkJJXI5CisJbW92cSA3KjgoJXJzaSksCQklcjEwCisJbW92cSAlcjksCQk2KjgoJXJkaSkKKwltb3ZxICVyMTAsCQk3KjgoJXJkaSkKIAotCW1vdnEgNCo4KCVyc2kpLCVyMTEKLQltb3ZxIDUqOCglcnNpKSwlcjgKKwlsZWFxIDY0KCVyc2kpLCAlcnNpCisJbGVhcSA2NCglcmRpKSwgJXJkaQogCi0JbW92cSAlcjExLDQqOCglcmRpKQotCW1vdnEgJXI4LDUqOCglcmRpKQotCi0JbW92cSA2KjgoJXJzaSksJXI5Ci0JbW92cSA3KjgoJXJzaSksJXIxMAotCi0JbW92cSAlcjksNio4KCVyZGkpCi0JbW92cSAlcjEwLDcqOCglcmRpKQotCi0JbGVhcSA2NCglcnNpKSwlcnNpCi0JbGVhcSA2NCglcmRpKSwlcmRpCiAJam56ICAuTGxvb3BfNjQKIAogLkxoYW5kbGVfdGFpbDoKLQltb3ZsICVlZHgsJWVjeAotCWFuZGwgJDYzLCVlY3gKLQlzaHJsICQzLCVlY3gKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICAkNjMsICVlY3gKKwlzaHJsICAgJDMsICVlY3gKIAlqeiAgIC5MaGFuZGxlXzcKKwogCS5wMmFsaWduIDQKIC5MbG9vcF84OgogCWRlY2wgJWVjeAotCW1vdnEgKCVyc2kpLCVyOAotCW1vdnEgJXI4LCglcmRpKQotCWxlYXEgOCglcmRpKSwlcmRpCi0JbGVhcSA4KCVyc2kpLCVyc2kKKwltb3ZxICglcnNpKSwJCSVyOAorCW1vdnEgJXI4LAkJKCVyZGkpCisJbGVhcSA4KCVyZGkpLAkJJXJkaQorCWxlYXEgOCglcnNpKSwJCSVyc2kKIAlqbnogIC5MbG9vcF84CiAKIC5MaGFuZGxlXzc6Ci0JbW92bCAlZWR4LCVlY3gKLQlhbmRsICQ3LCVlY3gKLQlqeiAuTGVuZGUKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICQ3LCAlZWN4CisJanogLkxlbmQKKwogCS5wMmFsaWduIDQKIC5MbG9vcF8xOgotCW1vdmIgKCVyc2kpLCVyOGIKLQltb3ZiICVyOGIsKCVyZGkpCisJbW92YiAoJXJzaSksICVyOGIKKwltb3ZiICVyOGIsICglcmRpKQogCWluY3EgJXJkaQogCWluY3EgJXJzaQogCWRlY2wgJWVjeAogCWpueiAuTGxvb3BfMQogCi0uTGVuZGU6Ci0JcG9wcSAlcmJ4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04Ci0JQ0ZJX1JFU1RPUkUgcmJ4CisuTGVuZDoKIAlyZXQKLS5MZmluYWw6CiAJQ0ZJX0VORFBST0MKIEVORFBST0MobWVtY3B5KQogRU5EUFJPQyhfX21lbWNweSkKIAotCS8qIFNvbWUgQ1BVcyBydW4gZmFzdGVyIHVzaW5nIHRoZSBzdHJpbmcgY29weSBpbnN0cnVjdGlvbnMuCi0JICAgSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlICovCisJLyoKKwkgKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGNvcHkgaW5zdHJ1Y3Rpb25zLgorCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKKwkgKi8KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCiAxOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCiAJLmJ5dGUgKG1lbWNweV9jIC0gbWVtY3B5KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KIDI6CiAJLnByZXZpb3VzCi0JLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKKworCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgogCS5hbGlnbiA4CiAJLnF1YWQgbWVtY3B5CiAJLnF1YWQgMWIKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAotCS8qIFJlcGxhY2Ugb25seSBiZWdpbm5pbmcsIG1lbWNweSBpcyB1c2VkIHRvIGFwcGx5IGFsdGVybmF0aXZlcywgc28gaXQKLQkgKiBpcyBzaWxseSB0byBvdmVyd3JpdGUgaXRzZWxmIHdpdGggbm9wcyAtIHJlYm9vdCBpcyBvbmx5IG91dGNvbWUuLi4gKi8KKworCS8qCisJICogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLAorCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQorCSAqIG9ubHkgb3V0Y29tZS4uLgorCSAqLwogCS5ieXRlIDJiIC0gMWIKIAkuYnl0ZSAyYiAtIDFiCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMDBmMTI3Yy4uNTIyZGI1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMTIxLDIyICsxMjEsMTMgQEAKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHNhbWUgYXMga21hcF9hdG9taWMoKSBidXQgY2FuIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0CisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKICAqIGhhdmUgYSBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgKi8KIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpCiB7Ci0JZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwotCXVuc2lnbmVkIGxvbmcgdmFkZHI7Ci0KLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBrbWFwX3Byb3QpKTsKLQlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKLQotCXJldHVybiAodm9pZCopIHZhZGRyOworCXJldHVybiBrbWFwX2F0b21pY19wcm90X3BmbihwZm4sIHR5cGUsIGttYXBfcHJvdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWFwX2F0b21pY19wZm4pOyAvKiB0ZW1wb3JhcmlseSBpbiB1c2UgYnkgaTkxNSBHRU0gdW50aWwgdm1hcCAqLwogCkBAIC0xNTgsNyArMTQ5LDYgQEAKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC0xODIsMTEgKzE3MiwzIEBACiAJfQogCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKIH0KLSNlbHNlCi12b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCi17Ci0JYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuKTsKLQotCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGNlNmE3MjIuLmZkM2RhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTEsOCArMSwzNDUgQEAKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgZTgyMF90YWJsZV9zdGFydDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX3RvcDsKKworaW50IGFmdGVyX2Jvb3RtZW07CisKK2ludCBkaXJlY3RfZ2JwYWdlcworI2lmZGVmIENPTkZJR19ESVJFQ1RfR0JQQUdFUworCQkJCT0gMQorI2VuZGlmCis7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSwKKwkJCQkJICBpbnQgdXNlX2dicGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBwdWRzLCBwbWRzLCBwdGVzLCB0YWJsZXMsIHN0YXJ0OworCisJcHVkcyA9IChlbmQgKyBQVURfU0laRSAtIDEpID4+IFBVRF9TSElGVDsKKwl0YWJsZXMgPSByb3VuZHVwKHB1ZHMgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpOworCisJaWYgKHVzZV9nYnBhZ2VzKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOworCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisJfSBlbHNlCisJCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisKKwl0YWJsZXMgKz0gcm91bmR1cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKKworCWlmICh1c2VfcHNlKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UE1EX1NISUZUKSA8PCBQTURfU0hJRlQpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJZXh0cmEgKz0gUE1EX1NJWkU7CisjZW5kaWYKKwkJcHRlcyA9IChleHRyYSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJfSBlbHNlCisJCXB0ZXMgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKworCXRhYmxlcyArPSByb3VuZHVwKHB0ZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIGZvciBmaXhtYXAgKi8KKwl0YWJsZXMgKz0gcm91bmR1cChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworI2VuZGlmCisKKwkvKgorCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAorCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCisJICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KKwkgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3RhcnQgPSAweDcwMDA7CisJZTgyMF90YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBtYXhfcGZuX21hcHBlZDw8UEFHRV9TSElGVCwKKwkJCQkJdGFibGVzLCBQQUdFX1NJWkUpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCXN0YXJ0ID0gMHg4MDAwOworCWU4MjBfdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCB0YWJsZXMsIFBBR0VfU0laRSk7CisjZW5kaWYKKwlpZiAoZTgyMF90YWJsZV9zdGFydCA9PSAtMVVMKQorCQlwYW5pYygiQ2Fubm90IGZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMiKTsKKworCWU4MjBfdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7CisJZTgyMF90YWJsZV9lbmQgPSBlODIwX3RhYmxlX3N0YXJ0OworCWU4MjBfdGFibGVfdG9wID0gZTgyMF90YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAorCQllbmQsIGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwgZTgyMF90YWJsZV90b3AgPDwgUEFHRV9TSElGVCk7Cit9CisKK3N0cnVjdCBtYXBfcmFuZ2UgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Cit9OworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBOUl9SQU5HRV9NUiAzCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisjZGVmaW5lIE5SX1JBTkdFX01SIDUKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fbWVtaW5pdCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJaWYgKG5yX3JhbmdlID49IE5SX1JBTkdFX01SKQorCQkJcGFuaWMoInJ1biBvdXQgb2YgcmFuZ2UgZm9yIGluaXRfbWVtb3J5X21hcHBpbmdcbiIpOworCQltcltucl9yYW5nZV0uc3RhcnQgPSBzdGFydF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5lbmQgICA9IGVuZF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5wYWdlX3NpemVfbWFzayA9IHBhZ2Vfc2l6ZV9tYXNrOworCQlucl9yYW5nZSsrOworCX0KKworCXJldHVybiBucl9yYW5nZTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2dicGFnZXModm9pZCkKK3sKKwlpZiAoZGlyZWN0X2dicGFnZXMgJiYgY3B1X2hhc19nYnBhZ2VzKQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBHQiBwYWdlcyBmb3IgZGlyZWN0IG1hcHBpbmdcbiIpOworCWVsc2UKKwkJZGlyZWN0X2dicGFnZXMgPSAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2dicGFnZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisvKgorICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCisgKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQorICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgorICovCit1bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBwb3M7CisKKwlzdHJ1Y3QgbWFwX3JhbmdlIG1yW05SX1JBTkdFX01SXTsKKwlpbnQgbnJfcmFuZ2UsIGk7CisJaW50IHVzZV9wc2UsIHVzZV9nYnBhZ2VzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9tZW1vcnlfbWFwcGluZzogJTAxNmx4LSUwMTZseFxuIiwgc3RhcnQsIGVuZCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCWluaXRfZ2JwYWdlcygpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qCisJICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCisJICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKKwkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCisJICovCisJdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKKyNlbHNlCisJdXNlX3BzZSA9IGNwdV9oYXNfcHNlOworCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXNldF9ueCgpOworCWlmIChueF9lbmFibGVkKQorCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOworI2VuZGlmCisKKwkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BzZSkKKwkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7CisKKwkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BnZSkgeworCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCX0KKyNlbmRpZgorCisJaWYgKHVzZV9nYnBhZ2VzKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzFHOworCWlmICh1c2VfcHNlKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzJNOworCisJbWVtc2V0KG1yLCAwLCBzaXplb2YobXIpKTsKKwlucl9yYW5nZSA9IDA7CisKKwkvKiBoZWFkIGlmIG5vdCBiaWcgcGFnZSBhbGlnbm1lbnQgPyAqLworCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQorCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKKwkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKKwkgKiBzbG93ZG93bnMuCisJICovCisJaWYgKHBvcyA9PSAwKQorCQllbmRfcGZuID0gMTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVsc2UKKwkJZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKwllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSkgPj4gUE1EX1NISUZUKQorCQkJPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2VuZGlmCisJaWYgKGVuZF9wZm4gPiAoZW5kID4+IFBBR0VfU0hJRlQpKQorCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKKwkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworCX0KKworCS8qIGJpZyBwYWdlICgyTSkgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQorCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZW5kX3BmbiA9IChlbmQ+PlBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCWVuZF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoZW5kX3BmbiA+ICgoZW5kPj5QTURfU0hJRlQpPDwoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkpKQorCQllbmRfcGZuID0gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSk7CisjZW5kaWYKKworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCisJCQkJcGFnZV9zaXplX21hc2sgJgorCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7CisJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwl9CisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorI2VuZGlmCisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMk0pIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9IHBvcz4+UEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kPj5QQUdFX1NISUZUOworCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7CisKKwkvKiB0cnkgdG8gbWVyZ2Ugc2FtZSBwYWdlIHNpemUgYW5kIGNvbnRpbnVvdXMgKi8KKwlmb3IgKGkgPSAwOyBucl9yYW5nZSA+IDEgJiYgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0OworCQlpZiAobXJbaV0uZW5kICE9IG1yW2krMV0uc3RhcnQgfHwKKwkJICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICE9IG1yW2krMV0ucGFnZV9zaXplX21hc2spCisJCQljb250aW51ZTsKKwkJLyogbW92ZSBpdCAqLworCQlvbGRfc3RhcnQgPSBtcltpXS5zdGFydDsKKwkJbWVtbW92ZSgmbXJbaV0sICZtcltpKzFdLAorCQkJKG5yX3JhbmdlIC0gMSAtIGkpICogc2l6ZW9mKHN0cnVjdCBtYXBfcmFuZ2UpKTsKKwkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKKwkJbnJfcmFuZ2UtLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKKwkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCisJCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7CisKKwkvKgorCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgorCSAqCisJICogTGF0ZXIgd2Ugc2hvdWxkIGFsbG9jYXRlIHRoZXNlIHRhYmxlcyBpbiB0aGUgbG9jYWwgbm9kZSBvZiB0aGUKKwkgKiBtZW1vcnkgbWFwcGVkLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgZG9uZSBjdXJyZW50bHkgYmVmb3JlIHRoZQorCSAqIG5vZGVzIGFyZSBkaXNjb3ZlcmVkLgorCSAqLworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQsIHVzZV9wc2UsIHVzZV9nYnBhZ2VzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJCQkgICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKwlyZXQgPSBlbmQ7CisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXJldCA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKKwkJCQkJCSAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KCk7CisKKwlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOworI2VuZGlmCisJX19mbHVzaF90bGJfYWxsKCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgZTgyMF90YWJsZV9lbmQgPiBlODIwX3RhYmxlX3N0YXJ0KQorCQlyZXNlcnZlX2Vhcmx5KGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKKwkJCQkgZTgyMF90YWJsZV9lbmQgPDwgUEFHRV9TSElGVCwgIlBHVEFCTEUiKTsKKworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKKworCXJldHVybiByZXQgPj4gUEFHRV9TSElGVDsKK30KKworCisvKgorICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcworICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgorICoKKyAqCisgKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQorICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KKyAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCisgKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgorICovCitpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCit7CisJaWYgKHBhZ2VuciA8PSAyNTYpCisJCXJldHVybiAxOworCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiB2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTQ3LDMgKzM4NCwxMCBAQAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggNDdkZjBlMS4uZGI4MWU5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KIAogdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwpAQCAtNTgsMTkgKzU5LDE0IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgZG9fdGVzdF93cF9iaXQodm9pZCk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB0YWJsZV9zdGFydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfZW5kOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV90b3A7Ci0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBhZnRlcl9pbml0X2Jvb3RtZW07Citib29sIF9fcmVhZF9tb3N0bHkgX192bWFsbG9jX3N0YXJ0X3NldCA9IGZhbHNlOwogCiBzdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2xvd19wYWdlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSB0YWJsZV9lbmQrKzsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IGU4MjBfdGFibGVfZW5kKys7CiAJdm9pZCAqYWRyOwogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gX192YShwZm4gKiBQQUdFX1NJWkUpOwpAQCAtOTAsNyArODYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAlpZiAoIShwZ2RfdmFsKCpwZ2QpICYgX1BBR0VfUFJFU0VOVCkpIHsKLQkJaWYgKGFmdGVyX2luaXRfYm9vdG1lbSkKKwkJaWYgKGFmdGVyX2Jvb3RtZW0pCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwogCQllbHNlCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19sb3dfcGFnZSgpOwpAQCAtMTE3LDcgKzExMyw3IEBACiAJaWYgKCEocG1kX3ZhbCgqcG1kKSAmIF9QQUdFX1BSRVNFTlQpKSB7CiAJCXB0ZV90ICpwYWdlX3RhYmxlID0gTlVMTDsKIAotCQlpZiAoYWZ0ZXJfaW5pdF9ib290bWVtKSB7CisJCWlmIChhZnRlcl9ib290bWVtKSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogCQkJcGFnZV90YWJsZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAjZW5kaWYKQEAgLTE2OCwxMiArMTY0LDEyIEBACiAJaWYgKHBtZF9pZHhfa21hcF9iZWdpbiAhPSBwbWRfaWR4X2ttYXBfZW5kCiAJICAgICYmICh2YWRkciA+PiBQTURfU0hJRlQpID49IHBtZF9pZHhfa21hcF9iZWdpbgogCSAgICAmJiAodmFkZHIgPj4gUE1EX1NISUZUKSA8PSBwbWRfaWR4X2ttYXBfZW5kCi0JICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgdGFibGVfc3RhcnQKLQkJfHwgKF9fcGEocHRlKSA+PiBQQUdFX1NISUZUKSA+PSB0YWJsZV9lbmQpKSB7CisJICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgZTgyMF90YWJsZV9zdGFydAorCQl8fCAoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpID49IGU4MjBfdGFibGVfZW5kKSkgewogCQlwdGVfdCAqbmV3cHRlOwogCQlpbnQgaTsKIAotCQlCVUdfT04oYWZ0ZXJfaW5pdF9ib290bWVtKTsKKwkJQlVHX09OKGFmdGVyX2Jvb3RtZW0pOwogCQluZXdwdGUgPSBhbGxvY19sb3dfcGFnZSgpOwogCQlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFRFOyBpKyspCiAJCQlzZXRfcHRlKG5ld3B0ZSArIGksIHB0ZVtpXSk7CkBAIC0yNDIsMTEgKzIzOCwxNCBAQAogICogb2YgbWF4X2xvd19wZm4gcGFnZXMsIGJ5IGNyZWF0aW5nIHBhZ2UgdGFibGVzIHN0YXJ0aW5nIGZyb20gYWRkcmVzcwogICogUEFHRV9PRkZTRVQ6CiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF90ICpwZ2RfYmFzZSwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLAotCQkJCQkJaW50IHVzZV9wc2UpCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKKwlpbnQgdXNlX3BzZSA9IHBhZ2Vfc2l6ZV9tYXNrID09ICgxPDxQR19MRVZFTF8yTSk7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAJcGdkX3QgKnBnZDsKQEAgLTI1NSw2ICsyNTQsOSBAQAogCXVuc2lnbmVkIHBhZ2VzXzJtLCBwYWdlc180azsKIAlpbnQgbWFwcGluZ19pdGVyOwogCisJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisKIAkvKgogCSAqIEZpcnN0IGl0ZXJhdGlvbiB3aWxsIHNldHVwIGlkZW50aXR5IG1hcHBpbmcgdXNpbmcgbGFyZ2Uvc21hbGwgcGFnZXMKIAkgKiBiYXNlZCBvbiB1c2VfcHNlLCB3aXRoIG90aGVyIGF0dHJpYnV0ZXMgc2FtZSBhcyBzZXQgYnkKQEAgLTM2OSwyNiArMzcxLDYgQEAKIAkJbWFwcGluZ19pdGVyID0gMjsKIAkJZ290byByZXBlYXQ7CiAJfQotfQotCi0vKgotICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcwotICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgotICoKLSAqCi0gKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQotICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KLSAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCi0gKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgotICovCi1pbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCi17Ci0JaWYgKHBhZ2VuciA8PSAyNTYpCi0JCXJldHVybiAxOwotCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gMDsKLQlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCi0JCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC01NDUsOCArNTI3LDkgQEAKICAqIGJlIHBhcnRpYWxseSBwb3B1bGF0ZWQsIGFuZCBzbyBpdCBhdm9pZHMgc3RvbXBpbmcgb24gYW55IGV4aXN0aW5nCiAgKiBtYXBwaW5ncy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHBnZF90ICpwZ2RfYmFzZSkKK3ZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpCiB7CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJdW5zaWduZWQgbG9uZyB2YWRkciwgZW5kOwogCiAJLyoKQEAgLTY0MSw3ICs2MjQsNyBAQAogfQogZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKK3ZvaWQgX19pbml0IHNldF9ueCh2b2lkKQogewogCXVuc2lnbmVkIGludCB2WzRdLCBsLCBoOwogCkBAIC03OTMsNiArNzc2LDggQEAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXM7CiAjZW5kaWYKKwlfX3ZtYWxsb2Nfc3RhcnRfc2V0ID0gdHJ1ZTsKKwogCXByaW50ayhLRVJOX05PVElDRSAiJWxkTUIgTE9XTUVNIGF2YWlsYWJsZS5cbiIsCiAJCQlwYWdlc190b19tYihtYXhfbG93X3BmbikpOwogCkBAIC04MTQsMTc2ICs3OTksNjYgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmRfcGZuLAorCQkJCSB1bnNpZ25lZCBsb25nIGJvb3RtYXApCit7CisJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemU7CisKKwkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLAorCQkJCQkgYm9vdG1hcCA+PiBQQUdFX1NISUZULAorCQkJCQkgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIG5vZGUgJWQgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKKwkJbm9kZWlkLCBzdGFydF9wZm48PFBBR0VfU0hJRlQsIGVuZF9wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCisJCSBub2RlaWQsIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOworCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5vZGVpZCwgZW5kX3Bmbik7CisJZWFybHlfcmVzX3RvX2Jvb3RtZW0oc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKKworCXJldHVybiBib290bWFwICsgYm9vdG1hcF9zaXplOworfQorCiB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKQogewotCWludCBpOworCWludCBub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGJvb3RtYXA7CiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yICh3aXRoIGxvdyBtZW1vcnkgb25seSk6CiAJICovCiAJYm9vdG1hcF9zaXplID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKG1heF9sb3dfcGZuKTw8UEFHRV9TSElGVDsKLQlib290bWFwID0gZmluZF9lODIwX2FyZWEobWluX2xvd19wZm48PFBBR0VfU0hJRlQsCi0JCQkJIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCisJYm9vdG1hcCA9IGZpbmRfZTgyMF9hcmVhKDAsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCiAJCQkJIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gLTFMKQogCQlwYW5pYygiQ2Fubm90IGZpbmQgYm9vdG1lbSBtYXAgb2Ygc2l6ZSAlbGRcbiIsIGJvb3RtYXBfc2l6ZSk7CiAJcmVzZXJ2ZV9lYXJseShib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplLCAiQk9PVE1BUCIpOwogCi0JLyogZG9uJ3QgdG91Y2ggbWluX2xvd19wZm4gKi8KLQlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGJvb3RtYXAgPj4gUEFHRV9TSElGVCwKLQkJCQkJIG1pbl9sb3dfcGZuLCBtYXhfbG93X3Bmbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiICBtYXBwZWQgbG93IHJhbTogMCAtICUwOGx4XG4iLAogCQkgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQpOwotCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKLQkJIG1pbl9sb3dfcGZuPDxQQUdFX1NISUZULCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCi0JCSBib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplKTsKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQotCQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhpLCBtYXhfbG93X3Bmbik7Ci0JZWFybHlfcmVzX3RvX2Jvb3RtZW0oMCwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogMCAtICUwOGx4XG4iLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAKLQlhZnRlcl9pbml0X2Jvb3RtZW0gPSAxOwotfQorCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGVpZCkgeworCQkgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSkKLXsKLQl1bnNpZ25lZCBsb25nIHB1ZHMsIHBtZHMsIHB0ZXMsIHRhYmxlcywgc3RhcnQ7Ci0KLQlwdWRzID0gKGVuZCArIFBVRF9TSVpFIC0gMSkgPj4gUFVEX1NISUZUOwotCXRhYmxlcyA9IHJvdW5kdXAocHVkcyAqIHNpemVvZihwdWRfdCksIFBBR0VfU0laRSk7Ci0KLQlwbWRzID0gKGVuZCArIFBNRF9TSVpFIC0gMSkgPj4gUE1EX1NISUZUOwotCXRhYmxlcyArPSByb3VuZHVwKHBtZHMgKiBzaXplb2YocG1kX3QpLCBQQUdFX1NJWkUpOwotCi0JaWYgKHVzZV9wc2UpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCWV4dHJhICs9IFBNRF9TSVpFOwotCQlwdGVzID0gKGV4dHJhICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQl9IGVsc2UKLQkJcHRlcyA9IChlbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCi0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKiBmb3IgZml4bWFwICovCi0JdGFibGVzICs9IHJvdW5kdXAoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKLQotCS8qCi0JICogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCi0JICogY2F1c2UgYSBob3RzcG90IGFuZCBmaWxsIHVwIFpPTkVfRE1BLiBUaGUgcGFnZSB0YWJsZXMKLQkgKiBuZWVkIHJvdWdobHkgMC41S0IgcGVyIEdCLgotCSAqLwotCXN0YXJ0ID0gMHg3MDAwOwotCXRhYmxlX3N0YXJ0ID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULAotCQkJCQl0YWJsZXMsIFBBR0VfU0laRSk7Ci0JaWYgKHRhYmxlX3N0YXJ0ID09IC0xVUwpCi0JCXBhbmljKCJDYW5ub3QgZmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyIpOwotCi0JdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7Ci0JdGFibGVfZW5kID0gdGFibGVfc3RhcnQ7Ci0JdGFibGVfdG9wID0gdGFibGVfc3RhcnQgKyAodGFibGVzPj5QQUdFX1NISUZUKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvICVseCBAICVseC0lbHhcbiIsCi0JCWVuZCwgdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJKHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQpICsgdGFibGVzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXRfcmVmb2sgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyBiaWdfcGFnZV9zdGFydDsKLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JLyoKLQkgKiBGb3IgQ09ORklHX0RFQlVHX1BBR0VBTExPQywgaWRlbnRpdHkgbWFwcGluZyB3aWxsIHVzZSBzbWFsbCBwYWdlcy4KLQkgKiBUaGlzIHdpbGwgc2ltcGxpZnkgY3BhKCksIHdoaWNoIG90aGVyd2lzZSBuZWVkcyB0byBzdXBwb3J0IHNwbGl0dGluZwotCSAqIGxhcmdlIHBhZ2VzIGludG8gc21hbGwgaW4gaW50ZXJydXB0IGNvbnRleHQsIGV0Yy4KLQkgKi8KLQlpbnQgdXNlX3BzZSA9IDA7CisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwkJc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm5bbm9kZWlkXTsKKwkJZW5kX3BmbiA9IG5vZGVfZW5kX3Bmbltub2RlaWRdOworCQlpZiAoc3RhcnRfcGZuID4gbWF4X2xvd19wZm4pCisJCQljb250aW51ZTsKKwkJaWYgKGVuZF9wZm4gPiBtYXhfbG93X3BmbikKKwkJCWVuZF9wZm4gPSBtYXhfbG93X3BmbjsKICNlbHNlCi0JaW50IHVzZV9wc2UgPSBjcHVfaGFzX3BzZTsKKwkJc3RhcnRfcGZuID0gMDsKKwkJZW5kX3BmbiA9IG1heF9sb3dfcGZuOwogI2VuZGlmCi0KLQkvKgotCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgotCSAqLwotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCwgdXNlX3BzZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotCXNldF9ueCgpOwotCWlmIChueF9lbmFibGVkKQotCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOwotI2VuZGlmCi0KLQkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BzZSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7Ci0KLQkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BnZSkgewotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCQlib290bWFwID0gc2V0dXBfbm9kZV9ib290bWVtKG5vZGVpZCwgc3RhcnRfcGZuLCBlbmRfcGZuLAorCQkJCQkJIGJvb3RtYXApOwogCX0KIAotCS8qCi0JICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQotCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKLQkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKLQkgKiBzbG93ZG93bnMuCi0JICovCi0JYmlnX3BhZ2Vfc3RhcnQgPSBQTURfU0laRTsKLQotCWlmIChzdGFydCA8IGJpZ19wYWdlX3N0YXJ0KSB7Ci0JCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wZm4gPSBtaW4oYmlnX3BhZ2Vfc3RhcnQ+PlBBR0VfU0hJRlQsIGVuZD4+UEFHRV9TSElGVCk7Ci0JfSBlbHNlIHsKLQkJLyogaGVhZCBpcyBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8gKi8KLQkJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9ICgoc3RhcnQgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCX0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikKLQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKLQotCS8qIGJpZyBwYWdlIHJhbmdlICovCi0Jc3RhcnRfcGZuID0gKChzdGFydCArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQotCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgKGJpZ19wYWdlX3N0YXJ0ID4+IFBBR0VfU0hJRlQpKQotCQlzdGFydF9wZm4gPSAgYmlnX3BhZ2Vfc3RhcnQgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gKGVuZD4+UE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQocGdkX2Jhc2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQkJICAgICB1c2VfcHNlKTsKLQotCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlIGFsaWdubWVudCA/ICovCi0Jc3RhcnRfcGZuID0gZW5kX3BmbjsKLQlpZiAoc3RhcnRfcGZuID4gKGJpZ19wYWdlX3N0YXJ0Pj5QQUdFX1NISUZUKSkgewotCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0JCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKQotCQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLAotCQkJCQkJCSBlbmRfcGZuLCAwKTsKLQl9Ci0KLQllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdChwZ2RfYmFzZSk7Ci0KLQlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7Ci0KLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLQotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlyZXNlcnZlX2Vhcmx5KHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHRhYmxlX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOwotCi0JaWYgKCFhZnRlcl9pbml0X2Jvb3RtZW0pCi0JCWVhcmx5X21lbXRlc3Qoc3RhcnQsIGVuZCk7Ci0KLQlyZXR1cm4gZW5kID4+IFBBR0VfU0hJRlQ7CisJYWZ0ZXJfYm9vdG1lbSA9IDE7CiB9CiAKLQogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgLSBub3RlIHRoYXQgdGhlIGZpcnN0IDhNQiBhcmUKICAqIGFscmVhZHkgbWFwcGVkIGJ5IGhlYWQuUy4KQEAgLTEyMTcsMTMgKzEwOTIsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwotfQotI2VuZGlmCi0KIGludCBfX2luaXQgcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQkgICBpbnQgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggMDdmNDRkNC4uNTRlZmE1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pbml0Lmg+CiAKIC8qCiAgKiBlbmRfcGZuIG9ubHkgaW5jbHVkZXMgUkFNLCB3aGlsZSBtYXhfcGZuX21hcHBlZCBpbmNsdWRlcyBhbGwgZTgyMCBlbnRyaWVzLgpAQCAtNjEsMTIgKzYyLDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAotaW50IGRpcmVjdF9nYnBhZ2VzCi0jaWZkZWYgQ09ORklHX0RJUkVDVF9HQlBBR0VTCi0JCQkJPSAxCi0jZW5kaWYKLTsKLQogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlyZWN0X2dicGFnZXNfb2ZmKGNoYXIgKmFyZykKIHsKIAlkaXJlY3RfZ2JwYWdlcyA9IDA7CkBAIC04NywxMiArODIsMTAgQEAKICAqIGFyb3VuZCB3aXRob3V0IGNoZWNraW5nIHRoZSBwZ2QgZXZlcnkgdGltZS4KICAqLwogCi1pbnQgYWZ0ZXJfYm9vdG1lbTsKLQogcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2sgX19yZWFkX21vc3RseSA9IH5fUEFHRV9JT01BUDsKIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VwcG9ydGVkX3B0ZV9tYXNrKTsKIAotc3RhdGljIGludCBkb19ub3RfbnggX19jcHVpbml0ZGF0YTsKK3N0YXRpYyBpbnQgZGlzYWJsZV9ueCBfX2NwdWluaXRkYXRhOwogCiAvKgogICogbm9leGVjPW9ufG9mZgpAQCAtMTA3LDkgKzEwMCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7CiAJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkb19ub3RfbnggPSAwOworCQlkaXNhYmxlX254ID0gMDsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRvX25vdF9ueCA9IDE7CisJCWRpc2FibGVfbnggPSAxOwogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiAJfQogCXJldHVybiAwOwpAQCAtMTIxLDcgKzExNCw3IEBACiAJdW5zaWduZWQgbG9uZyBlZmVyOwogCiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQlpZiAoIShlZmVyICYgRUZFUl9OWCkgfHwgZG9fbm90X254KQorCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiB9CiAKQEAgLTMyNSwxMyArMzE4LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgdGFibGVfc3RhcnQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIHRhYmxlX2VuZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfdG9wOwotCiBzdGF0aWMgX19yZWYgdm9pZCAqYWxsb2NfbG93X3BhZ2UodW5zaWduZWQgbG9uZyAqcGh5cykKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHRhYmxlX2VuZCsrOworCXVuc2lnbmVkIGxvbmcgcGZuID0gZTgyMF90YWJsZV9lbmQrKzsKIAl2b2lkICphZHI7CiAKIAlpZiAoYWZ0ZXJfYm9vdG1lbSkgewpAQCAtMzQxLDcgKzMzMCw3IEBACiAJCXJldHVybiBhZHI7CiAJfQogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gZWFybHlfbWVtcmVtYXAocGZuICogUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwpAQCAtNTgxLDU4ICs1NzAsMTAgQEAKIAlyZXR1cm4gcGh5c19wdWRfaW5pdChwdWQsIGFkZHIsIGVuZCwgcGFnZV9zaXplX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCi0JCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQotewotCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgcHRlcywgdGFibGVzLCBzdGFydDsKLQotCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JdGFibGVzID0gcm91bmR1cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKLQlpZiAodXNlX2dicGFnZXMpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOwotCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JfSBlbHNlCi0JCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocG1kcyAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7Ci0KLQlpZiAodXNlX3BzZSkgewotCQl1bnNpZ25lZCBsb25nIGV4dHJhOwotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCXB0ZXMgPSAoZXh0cmEgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCX0gZWxzZQotCQlwdGVzID0gKGVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKgotCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAotCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCi0JICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KLQkgKi8KLQlzdGFydCA9IDB4ODAwMDsKLQl0YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHRhYmxlcywgUEFHRV9TSVpFKTsKLQlpZiAodGFibGVfc3RhcnQgPT0gLTFVTCkKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIHBhZ2UgdGFibGVzIik7Ci0KLQl0YWJsZV9zdGFydCA+Pj0gUEFHRV9TSElGVDsKLQl0YWJsZV9lbmQgPSB0YWJsZV9zdGFydDsKLQl0YWJsZV90b3AgPSB0YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAotCQllbmQsIHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsIHRhYmxlX3RvcCA8PCBQQUdFX1NISUZUKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2JwYWdlcyh2b2lkKQotewotCWlmIChkaXJlY3RfZ2JwYWdlcyAmJiBjcHVfaGFzX2dicGFnZXMpCi0JCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEdCIHBhZ2VzIGZvciBkaXJlY3QgbWFwcGluZ1xuIik7Ci0JZWxzZQotCQlkaXJlY3RfZ2JwYWdlcyA9IDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKIAogCXVuc2lnbmVkIGxvbmcgbmV4dCwgbGFzdF9tYXBfYWRkciA9IGVuZDsKQEAgLTY2OSwxNzYgKzYxMCw2IEBACiAJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKLXN0cnVjdCBtYXBfcmFuZ2UgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Ci19OwotCi0jZGVmaW5lIE5SX1JBTkdFX01SIDUKLQotc3RhdGljIGludCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCi0JCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCi0JCSAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCi17Ci0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlpZiAobnJfcmFuZ2UgPj0gTlJfUkFOR0VfTVIpCi0JCQlwYW5pYygicnVuIG91dCBvZiByYW5nZSBmb3IgaW5pdF9tZW1vcnlfbWFwcGluZ1xuIik7Ci0JCW1yW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0X3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLmVuZCAgID0gZW5kX3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLnBhZ2Vfc2l6ZV9tYXNrID0gcGFnZV9zaXplX21hc2s7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi0vKgotICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCi0gKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQotICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgotICovCi11bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSAwOwotCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCXVuc2lnbmVkIGxvbmcgcG9zOwotCi0Jc3RydWN0IG1hcF9yYW5nZSBtcltOUl9SQU5HRV9NUl07Ci0JaW50IG5yX3JhbmdlLCBpOwotCWludCB1c2VfcHNlLCB1c2VfZ2JwYWdlczsKLQotCXByaW50ayhLRVJOX0lORk8gImluaXRfbWVtb3J5X21hcHBpbmc6ICUwMTZseC0lMDE2bHhcbiIsIHN0YXJ0LCBlbmQpOwotCi0JLyoKLQkgKiBGaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcy4KLQkgKgotCSAqIExhdGVyIHdlIHNob3VsZCBhbGxvY2F0ZSB0aGVzZSB0YWJsZXMgaW4gdGhlIGxvY2FsIG5vZGUgb2YgdGhlCi0JICogbWVtb3J5IG1hcHBlZC4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIGRvbmUgY3VycmVudGx5IGJlZm9yZSB0aGUKLQkgKiBub2RlcyBhcmUgZGlzY292ZXJlZC4KLQkgKi8KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWluaXRfZ2JwYWdlcygpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCS8qCi0JICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCi0JICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKLQkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCi0JICovCi0JdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKLSNlbHNlCi0JdXNlX3BzZSA9IGNwdV9oYXNfcHNlOwotCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7Ci0jZW5kaWYKLQotCWlmICh1c2VfZ2JwYWdlcykKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8xRzsKLQlpZiAodXNlX3BzZSkKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8yTTsKLQotCW1lbXNldChtciwgMCwgc2l6ZW9mKG1yKSk7Ci0JbnJfcmFuZ2UgPSAwOwotCi0JLyogaGVhZCBpZiBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8qLwotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpID4+IFBNRF9TSElGVCkKLQkJCTw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoZW5kX3BmbiA+IChlbmQgPj4gUEFHRV9TSElGVCkpCi0JCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogYmlnIHBhZ2UgKDJNKSByYW5nZSovCi0Jc3RhcnRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCi0JCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChlbmRfcGZuID4gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSkpCi0JCWVuZF9wZm4gPSAoKGVuZD4+UE1EX1NISUZUKTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMk0pKTsKLQkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwotCX0KLQotCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KLQlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQotCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJgotCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7Ci0JCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQl9Ci0KLQkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLwotCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCi0JCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogdGFpbCBpcyBub3QgYmlnIHBhZ2UgKDJNKSBhbGlnbm1lbnQgKi8KLQlzdGFydF9wZm4gPSBwb3M+PlBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IGVuZD4+UEFHRV9TSElGVDsKLQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCi0JLyogdHJ5IHRvIG1lcmdlIHNhbWUgcGFnZSBzaXplIGFuZCBjb250aW51b3VzICovCi0JZm9yIChpID0gMDsgbnJfcmFuZ2UgPiAxICYmIGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIG9sZF9zdGFydDsKLQkJaWYgKG1yW2ldLmVuZCAhPSBtcltpKzFdLnN0YXJ0IHx8Ci0JCSAgICBtcltpXS5wYWdlX3NpemVfbWFzayAhPSBtcltpKzFdLnBhZ2Vfc2l6ZV9tYXNrKQotCQkJY29udGludWU7Ci0JCS8qIG1vdmUgaXQgKi8KLQkJb2xkX3N0YXJ0ID0gbXJbaV0uc3RhcnQ7Ci0JCW1lbW1vdmUoJm1yW2ldLCAmbXJbaSsxXSwKLQkJCSAobnJfcmFuZ2UgLSAxIC0gaSkgKiBzaXplb2YgKHN0cnVjdCBtYXBfcmFuZ2UpKTsKLQkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKLQkJbnJfcmFuZ2UtLTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKLQkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAotCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCi0JCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJbGFzdF9tYXBfYWRkciA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQoCi0JCQkJCW1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCi0JCQkJCW1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJbW11X2NyNF9mZWF0dXJlcyA9IHJlYWRfY3I0KCk7Ci0JX19mbHVzaF90bGJfYWxsKCk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgdGFibGVfZW5kID4gdGFibGVfc3RhcnQpCi0JCXJlc2VydmVfZWFybHkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJCQkgdGFibGVfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJsYXN0X21hcF9hZGRyOiAlbHggZW5kOiAlbHhcbiIsCi0JCQkgbGFzdF9tYXBfYWRkciwgZW5kKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKLQotCXJldHVybiBsYXN0X21hcF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci19Ci0KICNpZm5kZWYgQ09ORklHX05VTUEKIHZvaWQgX19pbml0IGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewpAQCAtOTEwLDI4ICs2ODEsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKLS8qCi0gKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCi0gKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCi0gKgotICoKLSAqIE9uIHg4NiwgYWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byB0aGUgZmlyc3QgbWVnYWJ5dGUgb2YgcmFtIGJlY2F1c2UgdGhhdCBhcmVhCi0gKiBjb250YWlucyBiaW9zIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgotICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKLSAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCi0gKi8KLWludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlpZiAocGFnZW5yIDw9IDI1NikKLQkJcmV0dXJuIDE7Ci0JaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShwYWdlbnIgPDwgUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCWlmICghcGFnZV9pc19yYW0ocGFnZW5yKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYywga2NvcmVfa2VybmVsLAogCQkJIGtjb3JlX21vZHVsZXMsIGtjb3JlX3ZzeXNjYWxsOwogCkBAIC0xMDE5LDEzICs3NjgsNiBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJpbml0cmQgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7Ci19Ci0jZW5kaWYKLQogaW50IF9faW5pdCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJCSAgIGludCBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCmluZGV4IDA0MTAyZDQuLjY5OWM5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMzEsMTYgKzMxLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc19pb19tYXBwaW5nX3Bvc3NpYmxlKTsKIAotLyogTWFwICdwZm4nIHVzaW5nIGZpeGVkIG1hcCAndHlwZScgYW5kIHByb3RlY3Rpb25zICdwcm90JwotICovCi12b2lkICoKLWlvbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCit2b2lkICprbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCiB7CiAJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKwlzZXRfcHRlKGttYXBfcHRlIC0gaWR4LCBwZm5fcHRlKHBmbiwgcHJvdCkpOworCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOworCisJcmV0dXJuICh2b2lkICopdmFkZHI7Cit9CisKKy8qCisgKiBNYXAgJ3BmbicgdXNpbmcgZml4ZWQgbWFwICd0eXBlJyBhbmQgcHJvdGVjdGlvbnMgJ3Byb3QnCisgKi8KK3ZvaWQgKgoraW9tYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCkKK3sKIAkvKgogCSAqIEZvciBub24tUEFUIHN5c3RlbXMsIHByb21vdGUgUEFHRV9LRVJORUxfV0MgdG8gUEFHRV9LRVJORUxfVUNfTUlOVVMuCiAJICogUEFHRV9LRVJORUxfV0MgbWFwcyB0byBQV1QsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gdW5jYWNoZWQgaWYgdGhlCkBAIC01MCwxMiArNjEsNyBAQAogCWlmICghcGF0X2VuYWJsZWQgJiYgcGdwcm90X3ZhbChwcm90KSA9PSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX1dDKSkKIAkJcHJvdCA9IFBBR0VfS0VSTkVMX1VDX01JTlVTOwogCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7Ci0KLQlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCB0eXBlLCBwcm90KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2F0b21pY19wcm90X3Bmbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCA0MzNmN2JkLi4wZGZhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yMiwxMyArMjIsMTcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHBoeXNfYWRkcl92YWxpZChyZXNvdXJjZV9zaXplX3QgYWRkcikKIHsKLQlyZXR1cm4gYWRkciA8ICgxVUwgPDwgYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKTsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKKwlyZXR1cm4gIShhZGRyID4+IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyk7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKIHVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQogewogCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgewpAQCAtMzgsOCArNDIsNyBAQAogCX0gZWxzZSB7CiAJCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7CiAJCXggLT0gUEFHRV9PRkZTRVQ7Ci0JCVZJUlRVQUxfQlVHX09OKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/IHggPiBNQVhNRU0gOgotCQkJCQkhcGh5c19hZGRyX3ZhbGlkKHgpKTsKKwkJVklSVFVBTF9CVUdfT04oIXBoeXNfYWRkcl92YWxpZCh4KSk7CiAJfQogCXJldHVybiB4OwogfQpAQCAtNTYsMTAgKzU5LDggQEAKIAkJaWYgKHggPCBQQUdFX09GRlNFVCkKIAkJCXJldHVybiBmYWxzZTsKIAkJeCAtPSBQQUdFX09GRlNFVDsKLQkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/Ci0JCQkJeCA+IE1BWE1FTSA6ICFwaHlzX2FkZHJfdmFsaWQoeCkpIHsKKwkJaWYgKCFwaHlzX2FkZHJfdmFsaWQoeCkpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7CkBAIC02OCwxOCArNjksMTIgQEAKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gMTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKIHsKLQkvKiBWTUFMTE9DXyogYXJlbid0IGNvbnN0YW50czsgbm90IGF2YWlsYWJsZSBhdCB0aGUgYm9vdCB0aW1lICovCisJLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHMgICovCiAJVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKLQlWSVJUVUFMX0JVR19PTihzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0JPT1RJTkcgJiYKLQkJaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKKwlWSVJUVUFMX0JVR19PTihfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSk7CiAJcmV0dXJuIHggLSBQQUdFX09GRlNFVDsKIH0KIEVYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOwpAQCAtODksNyArODQsOSBAQAogewogCWlmICh4IDwgUEFHRV9PRkZTRVQpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSkKKwlpZiAoX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoeCA+PSBGSVhBRERSX1NUQVJUKQogCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHBmbl92YWxpZCgoeCAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKIH0KQEAgLTUwOCwxMyArNTA1LDE5IEBACiAJcmV0dXJuICZibV9wdGVbcHRlX2luZGV4KGFkZHIpXTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xvdF92aXJ0W0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKQogewogCXBtZF90ICpwbWQ7CisJaW50IGk7CiAKIAlpZiAoZWFybHlfaW9yZW1hcF9kZWJ1ZykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfaW9yZW1hcF9pbml0KClcbiIpOwogCisJZm9yIChpID0gMDsgaSA8IEZJWF9CVE1BUFNfU0xPVFM7IGkrKykKKwkJc2xvdF92aXJ0W2ldID0gX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4gLSBOUl9GSVhfQlRNQVBTKmkpOworCiAJcG1kID0gZWFybHlfaW9yZW1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSk7CiAJbWVtc2V0KGJtX3B0ZSwgMCwgc2l6ZW9mKGJtX3B0ZSkpOwogCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgYm1fcHRlKTsKQEAgLTU4MSw2ICs1ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwcmV2X21hcFtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9zaXplW0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2Vhcmx5X2lvcmVtYXBfbGVhayh2b2lkKQogewogCWludCBjb3VudCA9IDA7CkBAIC02MDIsNyArNjA2LDggQEAKIH0KIGxhdGVfaW5pdGNhbGwoY2hlY2tfZWFybHlfaW9yZW1hcF9sZWFrKTsKIAotc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKl9fZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKgorX19lYXJseV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJwYWdlczsKQEAgLTY2OCw5ICs2NzMsOSBAQAogCQktLW5ycGFnZXM7CiAJfQogCWlmIChlYXJseV9pb3JlbWFwX2RlYnVnKQotCQlwcmludGsoS0VSTl9DT05UICIlMDhseCArICUwOGx4XG4iLCBvZmZzZXQsIGZpeF90b192aXJ0KGlkeDApKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJTA4bHggKyAlMDhseFxuIiwgb2Zmc2V0LCBzbG90X3ZpcnRbc2xvdF0pOwogCi0JcHJldl9tYXBbc2xvdF0gPSAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIGZpeF90b192aXJ0KGlkeDApKTsKKwlwcmV2X21hcFtzbG90XSA9ICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgc2xvdF92aXJ0W3Nsb3RdKTsKIAlyZXR1cm4gcHJldl9tYXBbc2xvdF07CiB9CiAKQEAgLTczOCw4ICs3NDMsMyBAQAogCX0KIAlwcmV2X21hcFtzbG90XSA9IE5VTEw7CiB9Ci0KLXZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKQotewotCVdBUk5fT04oMSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbW1pby5jIGIvYXJjaC94ODYvbW0va21taW8uYwppbmRleCA2YTUxOGRkLi40ZjExNWUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbW1pby5jCisrKyBiL2FyY2gveDg2L21tL2ttbWlvLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXN0cnVjdCBrbW1pb19jb250ZXh0ICpjdHggPSAmZ2V0X2NwdV92YXIoa21taW9fY3R4KTsKIAogCWlmICghY3R4LT5hY3RpdmUpIHsKLQkJcHJfd2FybmluZygia21taW86IHNwdXJpb3VzIGRlYnVnIHRyYXAgb24gQ1BVICVkLlxuIiwKKwkJcHJfZGVidWcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCiAJCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtdGVzdC5jIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCmluZGV4IDBiY2Q3ODguLjYwNWM4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbXRlc3QuYworKysgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKQEAgLTEwMCw2ICsxMDAsOSBAQAogewogCWlmIChhcmcpCiAJCW1lbXRlc3RfcGF0dGVybiA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7CisJZWxzZQorCQltZW10ZXN0X3BhdHRlcm4gPSBBUlJBWV9TSVpFKHBhdHRlcm5zKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggNDUxZmU5NS4uM2RhZWZhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtNDE2LDEwICs0MTYsMTEgQEAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCiAJCXByb3BhZ2F0ZV9lODIwX21hcF9ub2RlKG5pZCk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOworCQlOT0RFX0RBVEEobmlkKS0+YmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbbmlkXTsKKwl9CiAKLQlOT0RFX0RBVEEoMCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzBdOwogCXNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDljNDI5NDkuLmQ3MWUxYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CkBAIC0zMyw2ICszNCw3IEBACiAJdW5zaWduZWQgbG9uZwlwZm47CiAJdW5zaWduZWQJZm9yY2Vfc3BsaXQgOiAxOwogCWludAkJY3VycGFnZTsKKwlzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwogfTsKIAogLyoKQEAgLTQ1LDYgKzQ3LDcgQEAKIAogI2RlZmluZSBDUEFfRkxVU0hUTEIgMQogI2RlZmluZSBDUEFfQVJSQVkgMgorI2RlZmluZSBDUEFfUEFHRVNfQVJSQVkgNAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRpcmVjdF9wYWdlc19jb3VudFtQR19MRVZFTF9OVU1dOwpAQCAtOTUsNyArOTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGlnaG1hcF9lbmRfcGZuKHZvaWQpCiB7Ci0JcmV0dXJuIF9fcGEocm91bmR1cCgodW5zaWduZWQgbG9uZylfZW5kLCBQTURfU0laRSkpID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIF9fcGEocm91bmR1cChfYnJrX2VuZCwgUE1EX1NJWkUpKSA+PiBQQUdFX1NISUZUOwogfQogCiAjZW5kaWYKQEAgLTIwMSwxMCArMjA0LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjcGFfZmx1c2hfYXJyYXkodW5zaWduZWQgbG9uZyAqc3RhcnQsIGludCBudW1wYWdlcywgaW50IGNhY2hlKQorc3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FycmF5KHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCBpbnQgbnVtcGFnZXMsIGludCBjYWNoZSwKKwkJCSAgICBpbnQgaW5fZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJdW5zaWduZWQgaW50IGksIGxldmVsOwotCXVuc2lnbmVkIGxvbmcgKmFkZHI7CiAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIApAQCAtMjI1LDE0ICsyMjgsMjIgQEAKIAkgKiB3aWxsIGNhdXNlIGFsbCBvdGhlciBDUFVzIHRvIGZsdXNoIHRoZSBzYW1lCiAJICogY2FjaGVsaW5lczoKIAkgKi8KLQlmb3IgKGkgPSAwLCBhZGRyID0gc3RhcnQ7IGkgPCBudW1wYWdlczsgaSsrLCBhZGRyKyspIHsKLQkJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKCphZGRyLCAmbGV2ZWwpOworCWZvciAoaSA9IDA7IGkgPCBudW1wYWdlczsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJcHRlX3QgKnB0ZTsKKworCQlpZiAoaW5fZmxhZ3MgJiBDUEFfUEFHRVNfQVJSQVkpCisJCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2VzW2ldKTsKKwkJZWxzZQorCQkJYWRkciA9IHN0YXJ0W2ldOworCisJCXB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHIsICZsZXZlbCk7CiAKIAkJLyoKIAkJICogT25seSBmbHVzaCBwcmVzZW50IGFkZHJlc3NlczoKIAkJICovCiAJCWlmIChwdGUgJiYgKHB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9QUkVTRU5UKSkKLQkJCWNsZmx1c2hfY2FjaGVfcmFuZ2UoKHZvaWQgKikgKmFkZHIsIFBBR0VfU0laRSk7CisJCQljbGZsdXNoX2NhY2hlX3JhbmdlKCh2b2lkICopYWRkciwgUEFHRV9TSVpFKTsKIAl9CiB9CiAKQEAgLTU4NCw3ICs1OTUsOSBAQAogCXVuc2lnbmVkIGludCBsZXZlbDsKIAlwdGVfdCAqa3B0ZSwgb2xkX3B0ZTsKIAotCWlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQorCWlmIChjcGEtPmZsYWdzICYgQ1BBX1BBR0VTX0FSUkFZKQorCQlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNwYS0+cGFnZXNbY3BhLT5jdXJwYWdlXSk7CisJZWxzZSBpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKIAkJYWRkcmVzcyA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCWFkZHJlc3MgPSAqY3BhLT52YWRkcjsKQEAgLTY4Nyw3ICs3MDAsOSBAQAogCSAqIE5vIG5lZWQgdG8gcmVkbywgd2hlbiB0aGUgcHJpbWFyeSBjYWxsIHRvdWNoZWQgdGhlIGRpcmVjdAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwlpZiAoY3BhLT5mbGFncyAmIENQQV9QQUdFU19BUlJBWSkKKwkJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY3BhLT5wYWdlc1tjcGEtPmN1cnBhZ2VdKTsKKwllbHNlIGlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQogCQl2YWRkciA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCXZhZGRyID0gKmNwYS0+dmFkZHI7CkBAIC02OTgsNyArNzEzLDcgQEAKIAkJYWxpYXNfY3BhID0gKmNwYTsKIAkJdGVtcF9jcGFfdmFkZHIgPSAodW5zaWduZWQgbG9uZykgX192YShjcGEtPnBmbiA8PCBQQUdFX1NISUZUKTsKIAkJYWxpYXNfY3BhLnZhZGRyID0gJnRlbXBfY3BhX3ZhZGRyOwotCQlhbGlhc19jcGEuZmxhZ3MgJj0gfkNQQV9BUlJBWTsKKwkJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCiAJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbGlhc19jcGEsIDApOwpAQCAtNzExLDcgKzcyNiw3IEBACiAJICogTm8gbmVlZCB0byByZWRvLCB3aGVuIHRoZSBwcmltYXJ5IGNhbGwgdG91Y2hlZCB0aGUgaGlnaAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsICh1bnNpZ25lZCBsb25nKSBfZW5kKSkKKwlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsIF9icmtfZW5kKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNzI0LDcgKzczOSw3IEBACiAJYWxpYXNfY3BhID0gKmNwYTsKIAl0ZW1wX2NwYV92YWRkciA9IChjcGEtPnBmbiA8PCBQQUdFX1NISUZUKSArIF9fU1RBUlRfS0VSTkVMX21hcCAtIHBoeXNfYmFzZTsKIAlhbGlhc19jcGEudmFkZHIgPSAmdGVtcF9jcGFfdmFkZHI7Ci0JYWxpYXNfY3BhLmZsYWdzICY9IH5DUEFfQVJSQVk7CisJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCS8qCiAJICogVGhlIGhpZ2ggbWFwcGluZyByYW5nZSBpcyBpbXByZWNpc2UsIHNvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgpAQCAtNzQ1LDcgKzc2MCw3IEBACiAJCSAqLwogCQljcGEtPm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJCS8qIGZvciBhcnJheSBjaGFuZ2VzLCB3ZSBjYW4ndCB1c2UgbGFyZ2UgcGFnZSAqLwotCQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwkJaWYgKGNwYS0+ZmxhZ3MgJiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSkKIAkJCWNwYS0+bnVtcGFnZXMgPSAxOwogCiAJCWlmICghZGVidWdfcGFnZWFsbG9jKQpAQCAtNzY5LDcgKzc4NCw3IEBACiAJCSAqLwogCQlCVUdfT04oY3BhLT5udW1wYWdlcyA+IG51bXBhZ2VzKTsKIAkJbnVtcGFnZXMgLT0gY3BhLT5udW1wYWdlczsKLQkJaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCisJCWlmIChjcGEtPmZsYWdzICYgKENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSkpCiAJCQljcGEtPmN1cnBhZ2UrKzsKIAkJZWxzZQogCQkJKmNwYS0+dmFkZHIgKz0gY3BhLT5udW1wYWdlcyAqIFBBR0VfU0laRTsKQEAgLTc4Niw3ICs4MDEsOCBAQAogCiBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJCQkJICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NsciwKLQkJCQkgICAgaW50IGZvcmNlX3NwbGl0LCBpbnQgYXJyYXkpCisJCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGluX2ZsYWcsCisJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJc3RydWN0IGNwYV9kYXRhIGNwYTsKIAlpbnQgcmV0LCBjYWNoZSwgY2hlY2thbGlhczsKQEAgLTgwMSwxNSArODE3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBFbnN1cmUgd2UgYXJlIFBBR0VfU0laRSBhbGlnbmVkICovCi0JaWYgKCFhcnJheSkgewotCQlpZiAoKmFkZHIgJiB+UEFHRV9NQVNLKSB7Ci0JCQkqYWRkciAmPSBQQUdFX01BU0s7Ci0JCQkvKgotCQkJICogUGVvcGxlIHNob3VsZCBub3QgYmUgcGFzc2luZyBpbiB1bmFsaWduZWQgYWRkcmVzc2VzOgotCQkJICovCi0JCQlXQVJOX09OX09OQ0UoMSk7Ci0JCX0KLQl9IGVsc2UgeworCWlmIChpbl9mbGFnICYgQ1BBX0FSUkFZKSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtcGFnZXM7IGkrKykgewogCQkJaWYgKGFkZHJbaV0gJiB+UEFHRV9NQVNLKSB7CkBAIC04MTcsNiArODI1LDE4IEBACiAJCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJfQogCQl9CisJfSBlbHNlIGlmICghKGluX2ZsYWcgJiBDUEFfUEFHRVNfQVJSQVkpKSB7CisJCS8qCisJCSAqIGluX2ZsYWcgb2YgQ1BBX1BBR0VTX0FSUkFZIGltcGxpZXMgaXQgaXMgYWxpZ25lZC4KKwkJICogTm8gbmVlZCB0byBjZWhjayBpbiB0aGF0IGNhc2UKKwkJICovCisJCWlmICgqYWRkciAmIH5QQUdFX01BU0spIHsKKwkJCSphZGRyICY9IFBBR0VfTUFTSzsKKwkJCS8qCisJCQkgKiBQZW9wbGUgc2hvdWxkIG5vdCBiZSBwYXNzaW5nIGluIHVuYWxpZ25lZCBhZGRyZXNzZXM6CisJCQkgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJfQogCX0KIAogCS8qIE11c3QgYXZvaWQgYWxpYXNpbmcgbWFwcGluZ3MgaW4gdGhlIGhpZ2htZW0gY29kZSAqLwpAQCAtODMyLDYgKzg1Miw3IEBACiAJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7CiAKIAljcGEudmFkZHIgPSBhZGRyOworCWNwYS5wYWdlcyA9IHBhZ2VzOwogCWNwYS5udW1wYWdlcyA9IG51bXBhZ2VzOwogCWNwYS5tYXNrX3NldCA9IG1hc2tfc2V0OwogCWNwYS5tYXNrX2NsciA9IG1hc2tfY2xyOwpAQCAtODM5LDggKzg2MCw4IEBACiAJY3BhLmN1cnBhZ2UgPSAwOwogCWNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0OwogCi0JaWYgKGFycmF5KQotCQljcGEuZmxhZ3MgfD0gQ1BBX0FSUkFZOworCWlmIChpbl9mbGFnICYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpCisJCWNwYS5mbGFncyB8PSBpbl9mbGFnOwogCiAJLyogTm8gYWxpYXMgY2hlY2tpbmcgZm9yIF9OWCBiaXQgbW9kaWZpY2F0aW9ucyAqLwogCWNoZWNrYWxpYXMgPSAocGdwcm90X3ZhbChtYXNrX3NldCkgfCBwZ3Byb3RfdmFsKG1hc2tfY2xyKSkgIT0gX1BBR0VfTlg7CkBAIC04NjYsOSArODg3LDEwIEBACiAJICogd2JpbmR2KToKIAkgKi8KIAlpZiAoIXJldCAmJiBjcHVfaGFzX2NsZmx1c2gpIHsKLQkJaWYgKGNwYS5mbGFncyAmIENQQV9BUlJBWSkKLQkJCWNwYV9mbHVzaF9hcnJheShhZGRyLCBudW1wYWdlcywgY2FjaGUpOwotCQllbHNlCisJCWlmIChjcGEuZmxhZ3MgJiAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkgeworCQkJY3BhX2ZsdXNoX2FycmF5KGFkZHIsIG51bXBhZ2VzLCBjYWNoZSwKKwkJCQkJY3BhLmZsYWdzLCBwYWdlcyk7CisJCX0gZWxzZQogCQkJY3BhX2ZsdXNoX3JhbmdlKCphZGRyLCBudW1wYWdlcywgY2FjaGUpOwogCX0gZWxzZQogCQljcGFfZmx1c2hfYWxsKGNhY2hlKTsKQEAgLTg4OCwxNCArOTEwLDI4IEBACiAJCQkJICAgICAgIHBncHJvdF90IG1hc2ssIGludCBhcnJheSkKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCwKLQkJYXJyYXkpOworCQkoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCQkgcGdwcm90X3QgbWFzaywgaW50IGFycmF5KQogewogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLAotCQlhcnJheSk7CisJCShhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsCisJCQkJICAgICAgIHBncHJvdF90IG1hc2spCit7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsCisJCUNQQV9QQUdFU19BUlJBWSwgcGFnZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcGFfY2xlYXJfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLAorCQkJCQkgcGdwcm90X3QgbWFzaykKK3sKKwlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgbWFzaywgMCwKKwkJQ1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7CiB9CiAKIGludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKQEAgLTEwNDMsNyArMTA3OSw3IEBACiBpbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksCi0JCQkJCV9fcGdwcm90KDApLCAxLCAwKTsKKwkJCQkJX19wZ3Byb3QoMCksIDEsIDAsIE5VTEwpOwogfQogCiBpbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCkBAIC0xMDU0LDYgKzEwOTAsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX3VjKTsKIAoraW50IHNldF9wYWdlc19hcnJheV91YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKwlpbnQgZnJlZV9pZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlpZiAocmVzZXJ2ZV9tZW10eXBlKHN0YXJ0LCBlbmQsIF9QQUdFX0NBQ0hFX1VDX01JTlVTLCBOVUxMKSkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAoY3BhX3NldF9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUykpID09IDApIHsKKwkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KKwl9CitlcnJfb3V0OgorCWZyZWVfaWR4ID0gaTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJlZV9pZHg7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfYXJyYXlfdWMpOworCiBpbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMTA2Miw2ICsxMTI3LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7CiAKK2ludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKworCXJldHZhbCA9IGNwYV9jbGVhcl9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3diKTsKKwogaW50IHNldF9wYWdlc194KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCAyZWQzNzE1Li42NDAzMzllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtNjc3LDEwICs2NzcsMTEgQEAKIAlpc19yYW0gPSBwYXRfcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAogCS8qCi0JICogcmVzZXJ2ZV9wZm5fcmFuZ2UoKSBkb2Vzbid0IHN1cHBvcnQgUkFNIHBhZ2VzLgorCSAqIHJlc2VydmVfcGZuX3JhbmdlKCkgZG9lc24ndCBzdXBwb3J0IFJBTSBwYWdlcy4gTWFpbnRhaW4gdGhlIGN1cnJlbnQKKwkgKiBiZWhhdmlvciB3aXRoIFJBTSBwYWdlcyBieSByZXR1cm5pbmcgc3VjY2Vzcy4KIAkgKi8KIAlpZiAoaXNfcmFtICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXJldCA9IHJlc2VydmVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplLCB3YW50X2ZsYWdzLCAmZmxhZ3MpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggZjJlNDc3Yy4uNDZjODgzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGVfMzIuYwpAQCAtNTAsNyArNTAsNyBAQAogCX0KIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKIAlpZiAocHRlX3ZhbChwdGV2YWwpKQotCQlzZXRfcHRlX3ByZXNlbnQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CisJCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CiAJZWxzZQogCQlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IGE2NTRkNTkuLjgyMWU5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC0xODcsMTEgKzE4Nyw2IEBACiAJCSAgICAgICBjcHVtYXNrLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCiAJLyoKLQkgKiBNYWtlIHRoZSBhYm92ZSBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQotCSAqIHNlbmRpbmcgdGhlIElQSS4KLQkgKi8KLQlzbXBfbWIoKTsKLQkvKgogCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgSVBJIG9ubHkgdG8KIAkgKiBDUFVzIGFmZmVjdGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCmluZGV4IDgyZDIyZmMuLjhjMzYyYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGNhbl9za2lwX3BjaXByb2JlX2RtaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgY2FuX3NraXBfcGNpcHJvYmVfZG1pX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAvKgogICogU3lzdGVtcyB3aGVyZSBQQ0kgSU8gcmVzb3VyY2UgSVNBIGFsaWdubWVudCBjYW4gYmUgc2tpcHBlZAogICogd2hlbiB0aGUgSVNBIGVuYWJsZSBiaXQgaW4gdGhlIGJyaWRnZSBjb250cm9sIGlzIG5vdCBzZXQKQEAgLTE4Myw3ICsxODMsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHBjaXByb2JlX2RtaV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGNvbnN0IHBjaXByb2JlX2RtaV90YWJsZVtdID0gewogI2lmZGVmIF9faTM4Nl9fCiAvKgogICogTGFwdG9wcyB3aGljaCBuZWVkIHBjaT1hc3NpZ24tYnVzc2VzIHRvIHNlZSBDYXJkYnVzIGNhcmRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvZml4dXAuYyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCmluZGV4IDdkMzg4ZDUuLjljNDk5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CiAKIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgbXNpX2s4dF9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBtc2lfazh0X2RtaV90YWJsZVtdID0gewogCXsKIAkJLmlkZW50ID0gIk1TSS1LOFQtTmVvMkZpciIsCiAJCS5tYXRjaGVzID0gewpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKi8KIHN0YXRpYyB1MTYgdG9zaGliYV9saW5lX3NpemU7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHRvc2hpYmFfb2hjaTEzOTRfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0Y29uc3QgdG9zaGliYV9vaGNpMTM5NF9kbWlfdGFibGVbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJUb3NoaWJhIFBTNSBiYXNlZCBsYXB0b3AiLAogCQkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDVlYWQ4MDguLmYyMzRhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMzE5LDYgKzMxOSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmbGFncyA9IG5ld19mbGFnczsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdCgKKwkJCShwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8CisJCQlmbGFncyk7CiAJfQogCiAJaWYgKCgodm1hLT52bV9wZ29mZiA8IG1heF9sb3dfcGZuX21hcHBlZCkgfHwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBjYjZhZmE0Li5kYjM4MDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNzIzLDkgKzE3MjMsOSBAQAogewogCXBtZF90ICprZXJuZWxfcG1kOwogCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7CisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSArCisJCQkJICB4ZW5fc3RhcnRfaW5mby0+bnJfcHRfZnJhbWVzICogUEFHRV9TSVpFICsKKwkJCQkgIDUxMioxMDI0KTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBrZXJuZWxfcG1kLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKQEAgLTE4NzAsNyArMTg3MCw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IHhlbl9zZXRfcHRlX2F0b21pYywKLQkuc2V0X3B0ZV9wcmVzZW50ID0geGVuX3NldF9wdGVfYXQsCiAJLnB0ZV9jbGVhciA9IHhlbl9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IHhlbl9wbWRfY2xlYXIsCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGMxYmY0MTcuLjI2MThhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMzYsMTMgKzM2LDE0IEBACiAKIG9iai15CQkJCSs9IHNlcmlhbC8KIG9iai0kKENPTkZJR19QQVJQT1JUKQkJKz0gcGFycG9ydC8KLW9iai15CQkJCSs9IGJhc2UvIGJsb2NrLyBtaXNjLyBtZmQvIG5ldC8gbWVkaWEvCitvYmoteQkJCQkrPSBiYXNlLyBibG9jay8gbWlzYy8gbWZkLyBtZWRpYS8KIG9iai0kKENPTkZJR19OVUJVUykJCSs9IG51YnVzLwotb2JqLSQoQ09ORklHX0FUTSkJCSs9IGF0bS8KIG9iai15CQkJCSs9IG1hY2ludG9zaC8KIG9iai0kKENPTkZJR19JREUpCQkrPSBpZGUvCiBvYmotJChDT05GSUdfU0NTSSkJCSs9IHNjc2kvCiBvYmotJChDT05GSUdfQVRBKQkJKz0gYXRhLworb2JqLXkJCQkJKz0gbmV0Lworb2JqLSQoQ09ORklHX0FUTSkJCSs9IGF0bS8KIG9iai0kKENPTkZJR19GVVNJT04pCQkrPSBtZXNzYWdlLwogb2JqLSQoQ09ORklHX0ZJUkVXSVJFKQkJKz0gZmlyZXdpcmUvCiBvYmoteQkJCQkrPSBpZWVlMTM5NC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCmluZGV4IGU3MzQ3ZGIuLmI2NjNiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwpAQCAtNDUsOCArNDUsNiBAQAogCS5zdGVwcGluZwk9IDYsCiB9OwogCi0jZGVmaW5lIFBBVEFfSUNTSURFX01BWF9TRwkxMjgKLQogc3RydWN0IHBhdGFfaWNzaWRlX3N0YXRlIHsKIAl2b2lkIF9faW9tZW0gKmlycV9wb3J0OwogCXZvaWQgX19pb21lbSAqaW9jX2Jhc2U7CkBAIC01Nyw3ICs1NSw2IEBACiAJCXU4IGRpc2FibGVkOwogCQl1bnNpZ25lZCBpbnQgc3BlZWRbQVRBX01BWF9ERVZJQ0VTXTsKIAl9IHBvcnRbMl07Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1BBVEFfSUNTSURFX01BWF9TR107CiB9OwogCiBzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyB7CkBAIC0yMjIsOSArMjE5LDcgQEAKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSAqc3RhdGUgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csICpyc2cgPSBzdGF0ZS0+c2c7CiAJdW5zaWduZWQgaW50IHdyaXRlID0gcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFOwotCXVuc2lnbmVkIGludCBzaTsKIAogCS8qCiAJICogV2UgYXJlIHNpbXBsZXg7IEJVRyBpZiB3ZSB0cnkgdG8gZmlkZGxlIHdpdGggRE1BCkBAIC0yMzMsMjAgKzIyOCwxMiBAQAogCUJVR19PTihkbWFfY2hhbm5lbF9hY3RpdmUoc3RhdGUtPmRtYSkpOwogCiAJLyoKLQkgKiBDb3B5IEFUQXMgc2NhdHRlcmVkIHNnIGxpc3QgaW50byBhIGNvbnRpZ3VvdXMgYXJyYXkgb2Ygc2cKLQkgKi8KLQlmb3JfZWFjaF9zZyhxYy0+c2csIHNnLCBxYy0+bl9lbGVtLCBzaSkgewotCQltZW1jcHkocnNnLCBzZywgc2l6ZW9mKCpzZykpOwotCQlyc2crKzsKLQl9Ci0KLQkvKgogCSAqIFJvdXRlIHRoZSBETUEgc2lnbmFscyB0byB0aGUgY29ycmVjdCBpbnRlcmZhY2UKIAkgKi8KIAl3cml0ZWIoc3RhdGUtPnBvcnRbYXAtPnBvcnRfbm9dLnBvcnRfc2VsLCBzdGF0ZS0+aW9jX2Jhc2UpOwogCiAJc2V0X2RtYV9zcGVlZChzdGF0ZS0+ZG1hLCBzdGF0ZS0+cG9ydFthcC0+cG9ydF9ub10uc3BlZWRbcWMtPmRldi0+ZGV2bm9dKTsKLQlzZXRfZG1hX3NnKHN0YXRlLT5kbWEsIHN0YXRlLT5zZywgcnNnIC0gc3RhdGUtPnNnKTsKKwlzZXRfZG1hX3NnKHN0YXRlLT5kbWEsIHFjLT5zZywgcWMtPm5fZWxlbSk7CiAJc2V0X2RtYV9tb2RlKHN0YXRlLT5kbWEsIHdyaXRlID8gRE1BX01PREVfV1JJVEUgOiBETUFfTU9ERV9SRUFEKTsKIAogCS8qIGlzc3VlIHIvdyBjb21tYW5kICovCkBAIC0zMDYsOCArMjkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGF0YV9pY3NpZGVfc2h0ID0gewogCUFUQV9CQVNFX1NIVChEUlZfTkFNRSksCi0JLnNnX3RhYmxlc2l6ZQkJPSBQQVRBX0lDU0lERV9NQVhfU0csCi0JLmRtYV9ib3VuZGFyeQkJPSB+MCwgLyogbm8gZG1hIGJvdW5kYXJpZXMgKi8KKwkuc2dfdGFibGVzaXplCQk9IFNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTLAorCS5kbWFfYm91bmRhcnkJCT0gSU9NRF9ETUFfQk9VTkRBUlksCiB9OwogCiBzdGF0aWMgdm9pZCBwYXRhX2ljc2lkZV9wb3N0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggYmE2OGE0Ni4uNTM4MzEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJcm5nX2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInJuZ19pY2siKTsKKwkJcm5nX2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCQlpZiAoSVNfRVJSKHJuZ19pY2spKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZ2V0IHJuZ19pY2tcbiIpOwogCQkJcmV0ID0gUFRSX0VSUihybmdfaWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYXcuYyBiL2RyaXZlcnMvY2hhci9yYXcuYwppbmRleCA5NmFkZjI4Li4yMGQ5MGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmF3LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jhdy5jCkBAIC05MCw2ICs5MCw3IEBACiAJYmxrZGV2X3B1dChiZGV2LCBmaWxwLT5mX21vZGUpOwogb3V0OgogCW11dGV4X3VubG9jaygmcmF3X211dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGFlNTBhOWQuLmRhNzgxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJfQogCiAJLyogR2V0IElQVSBjbG9jayAqLwotCWlwdV9kYXRhLmlwdV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpcHVfY2xrIik7CisJaXB1X2RhdGEuaXB1X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihpcHVfZGF0YS5pcHVfY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGlwdV9kYXRhLmlwdV9jbGspOwogCQlnb3RvIGVycl9jbGtfZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwppbmRleCBlYjhmNzJjLi5kNDIwY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwpAQCAtNjA0LDkgKzYwNCw3IEBACiAKIAkvKiByZWdpc3RlciBuZXcgYWRhcHRlciB0byBpMmMgbW9kdWxlLi4uICovCiAJYWRhcC0+YWxnbyA9ICZpMmNfYml0X2FsZ287Ci0KLQlhZGFwLT50aW1lb3V0ID0gMTAwOwkvKiBkZWZhdWx0IHZhbHVlcywgc2hvdWxkCSovCi0JYWRhcC0+cmV0cmllcyA9IDM7CS8qIGJlIHJlcGxhY2VkIGJ5IGRlZmluZXMJKi8KKwlhZGFwLT5yZXRyaWVzID0gMzsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwppbmRleCBkNTBiMzI5Li5mNjhlNWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwpAQCAtMjIsMTQgKzIyLDE4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KIAotI2RlZmluZSBERUIxKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnPj0xKSBwcmludGsoZm10LCAjIyBhcmdzKTsgfSB3aGlsZSgwKQotI2RlZmluZSBERUIyKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnPj0yKSBwcmludGsoZm10LCAjIyBhcmdzKTsgfSB3aGlsZSgwKQotI2RlZmluZSBERUIzKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnPj0zKSBwcmludGsoZm10LCAjIyBhcmdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSBERUIxKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnID49IDEpCQkJXAorCQkJCSBwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBERUIyKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnID49IDIpCQkJXAorCQkJCSBwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBERUIzKGZtdCwgYXJncy4uLikgZG8geyBpZiAoaTJjX2RlYnVnID49IDMpCQkJXAorCQkJCSBwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IGkyY19kZWJ1ZzsKIApAQCAtNDMsMTkgKzQ3LDI3IEBACiAjZGVmaW5lIHBjYV93YWl0KGFkYXApIGFkYXAtPndhaXRfZm9yX2NvbXBsZXRpb24oYWRhcC0+ZGF0YSkKICNkZWZpbmUgcGNhX3Jlc2V0KGFkYXApIGFkYXAtPnJlc2V0X2NoaXAoYWRhcC0+ZGF0YSkKIAorc3RhdGljIHZvaWQgcGNhOTY2NV9yZXNldCh2b2lkICpwZCkKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXAgPSBwZDsKKwlwY2Ffb3V0dyhhZGFwLCBJMkNfUENBX0lORFBUUiwgSTJDX1BDQV9JUFJFU0VUKTsKKwlwY2Ffb3V0dyhhZGFwLCBJMkNfUENBX0lORCwgMHhBNSk7CisJcGNhX291dHcoYWRhcCwgSTJDX1BDQV9JTkQsIDB4NUEpOworfQorCiAvKgogICogR2VuZXJhdGUgYSBzdGFydCBjb25kaXRpb24gb24gdGhlIGkyYyBidXMuCiAgKgogICogcmV0dXJucyBhZnRlciB0aGUgc3RhcnQgY29uZGl0aW9uIGhhcyBvY2N1cnJlZAogICovCi1zdGF0aWMgdm9pZCBwY2Ffc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwKQorc3RhdGljIGludCBwY2Ffc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwKQogewogCWludCBzdGEgPSBwY2FfZ2V0X2NvbihhZGFwKTsKIAlERUIyKCI9PT0gU1RBUlRcbiIpOwogCXN0YSB8PSBJMkNfUENBX0NPTl9TVEE7CiAJc3RhICY9IH4oSTJDX1BDQV9DT05fU1RPfEkyQ19QQ0FfQ09OX1NJKTsKIAlwY2Ffc2V0X2NvbihhZGFwLCBzdGEpOwotCXBjYV93YWl0KGFkYXApOworCXJldHVybiBwY2Ffd2FpdChhZGFwKTsKIH0KIAogLyoKQEAgLTYzLDE0ICs3NSwxNCBAQAogICoKICAqIHJldHVybiBhZnRlciB0aGUgcmVwZWF0ZWQgc3RhcnQgY29uZGl0aW9uIGhhcyBvY2N1cnJlZAogICovCi1zdGF0aWMgdm9pZCBwY2FfcmVwZWF0ZWRfc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwKQorc3RhdGljIGludCBwY2FfcmVwZWF0ZWRfc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwKQogewogCWludCBzdGEgPSBwY2FfZ2V0X2NvbihhZGFwKTsKIAlERUIyKCI9PT0gUkVQRUFURUQgU1RBUlRcbiIpOwogCXN0YSB8PSBJMkNfUENBX0NPTl9TVEE7CiAJc3RhICY9IH4oSTJDX1BDQV9DT05fU1RPfEkyQ19QQ0FfQ09OX1NJKTsKIAlwY2Ffc2V0X2NvbihhZGFwLCBzdGEpOwotCXBjYV93YWl0KGFkYXApOworCXJldHVybiBwY2Ffd2FpdChhZGFwKTsKIH0KIAogLyoKQEAgLTk2LDcgKzEwOCw3IEBACiAgKgogICogcmV0dXJucyBhZnRlciB0aGUgYWRkcmVzcyBoYXMgYmVlbiBzZW50CiAgKi8KLXN0YXRpYyB2b2lkIHBjYV9hZGRyZXNzKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCwKK3N0YXRpYyBpbnQgcGNhX2FkZHJlc3Moc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLAogCQkJc3RydWN0IGkyY19tc2cgKm1zZykKIHsKIAlpbnQgc3RhID0gcGNhX2dldF9jb24oYWRhcCk7CkBAIC0xMTMsNyArMTI1LDcgQEAKIAlzdGEgJj0gfihJMkNfUENBX0NPTl9TVE98STJDX1BDQV9DT05fU1RBfEkyQ19QQ0FfQ09OX1NJKTsKIAlwY2Ffc2V0X2NvbihhZGFwLCBzdGEpOwogCi0JcGNhX3dhaXQoYWRhcCk7CisJcmV0dXJuIHBjYV93YWl0KGFkYXApOwogfQogCiAvKgpAQCAtMTIxLDcgKzEzMyw3IEBACiAgKgogICogUmV0dXJucyBhZnRlciB0aGUgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZAogICovCi1zdGF0aWMgdm9pZCBwY2FfdHhfYnl0ZShzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXAsCitzdGF0aWMgaW50IHBjYV90eF9ieXRlKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCwKIAkJCV9fdTggYikKIHsKIAlpbnQgc3RhID0gcGNhX2dldF9jb24oYWRhcCk7CkBAIC0xMzEsNyArMTQzLDcgQEAKIAlzdGEgJj0gfihJMkNfUENBX0NPTl9TVE98STJDX1BDQV9DT05fU1RBfEkyQ19QQ0FfQ09OX1NJKTsKIAlwY2Ffc2V0X2NvbihhZGFwLCBzdGEpOwogCi0JcGNhX3dhaXQoYWRhcCk7CisJcmV0dXJuIHBjYV93YWl0KGFkYXApOwogfQogCiAvKgpAQCAtMTUxLDcgKzE2Myw3IEBACiAgKgogICogUmV0dXJucyBhZnRlciBuZXh0IGJ5dGUgaGFzIGFycml2ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHBjYV9yeF9hY2soc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLAorc3RhdGljIGludCBwY2FfcnhfYWNrKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCwKIAkJICAgICAgIGludCBhY2spCiB7CiAJaW50IHN0YSA9IHBjYV9nZXRfY29uKGFkYXApOwpAQCAtMTYyLDcgKzE3NCw3IEBACiAJCXN0YSB8PSBJMkNfUENBX0NPTl9BQTsKIAogCXBjYV9zZXRfY29uKGFkYXAsIHN0YSk7Ci0JcGNhX3dhaXQoYWRhcCk7CisJcmV0dXJuIHBjYV93YWl0KGFkYXApOwogfQogCiBzdGF0aWMgaW50IHBjYV94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCkBAIC0xNzUsMTQgKzE4NywxNyBAQAogCWludCBudW1ieXRlcyA9IDA7CiAJaW50IHN0YXRlOwogCWludCByZXQ7Ci0JaW50IHRpbWVvdXQgPSBpMmNfYWRhcC0+dGltZW91dDsKKwlpbnQgY29tcGxldGVkID0gMTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgaTJjX2FkYXAtPnRpbWVvdXQ7CiAKLQl3aGlsZSAoKHN0YXRlID0gcGNhX3N0YXR1cyhhZGFwKSkgIT0gMHhmOCAmJiB0aW1lb3V0LS0pIHsKLQkJbXNsZWVwKDEwKTsKLQl9Ci0JaWYgKHN0YXRlICE9IDB4ZjgpIHsKLQkJZGV2X2RiZygmaTJjX2FkYXAtPmRldiwgImJ1cyBpcyBub3QgaWRsZS4gc3RhdHVzIGlzICUjMDR4XG4iLCBzdGF0ZSk7Ci0JCXJldHVybiAtRUFHQUlOOworCXdoaWxlIChwY2Ffc3RhdHVzKGFkYXApICE9IDB4ZjgpIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQltc2xlZXAoMTApOworCQl9IGVsc2UgeworCQkJZGV2X2RiZygmaTJjX2FkYXAtPmRldiwgImJ1cyBpcyBub3QgaWRsZS4gc3RhdHVzIGlzICIKKwkJCQkiJSMwNHhcbiIsIHN0YXRlKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CiAJfQogCiAJREVCMSgie3t7IFhGRVIgJWQgbWVzc2FnZXNcbiIsIG51bSk7CkBAIC0yMTgsMTggKzIzMywxOSBAQAogCiAJCXN3aXRjaCAoc3RhdGUpIHsKIAkJY2FzZSAweGY4OiAvKiBPbiByZXNldCBvciBzdG9wIHRoZSBidXMgaXMgaWRsZSAqLwotCQkJcGNhX3N0YXJ0KGFkYXApOworCQkJY29tcGxldGVkID0gcGNhX3N0YXJ0KGFkYXApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDA4OiAvKiBBIFNUQVJUIGNvbmRpdGlvbiBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwogCQljYXNlIDB4MTA6IC8qIEEgcmVwZWF0ZWQgc3RhcnQgY29uZGl0aW9uIGhhcyBiZWVuIHRyYW5zbWl0dGVkICovCi0JCQlwY2FfYWRkcmVzcyhhZGFwLCBtc2cpOworCQkJY29tcGxldGVkID0gcGNhX2FkZHJlc3MoYWRhcCwgbXNnKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxODogLyogU0xBK1cgaGFzIGJlZW4gdHJhbnNtaXR0ZWQ7IEFDSyBoYXMgYmVlbiByZWNlaXZlZCAqLwogCQljYXNlIDB4Mjg6IC8qIERhdGEgYnl0ZSBpbiBJMkNEQVQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQ7IEFDSyBoYXMgYmVlbiByZWNlaXZlZCAqLwogCQkJaWYgKG51bWJ5dGVzIDwgbXNnLT5sZW4pIHsKLQkJCQlwY2FfdHhfYnl0ZShhZGFwLCBtc2ctPmJ1ZltudW1ieXRlc10pOworCQkJCWNvbXBsZXRlZCA9IHBjYV90eF9ieXRlKGFkYXAsCisJCQkJCQkJbXNnLT5idWZbbnVtYnl0ZXNdKTsKIAkJCQludW1ieXRlcysrOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjM3LDcgKzI1Myw3IEBACiAJCQlpZiAoY3VybXNnID09IG51bSkKIAkJCQlwY2Ffc3RvcChhZGFwKTsKIAkJCWVsc2UKLQkJCQlwY2FfcmVwZWF0ZWRfc3RhcnQoYWRhcCk7CisJCQkJY29tcGxldGVkID0gcGNhX3JlcGVhdGVkX3N0YXJ0KGFkYXApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDIwOiAvKiBTTEErVyBoYXMgYmVlbiB0cmFuc21pdHRlZDsgTk9UIEFDSyBoYXMgYmVlbiByZWNlaXZlZCAqLwpAQCAtMjQ2LDIxICsyNjIsMjIgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWNhc2UgMHg0MDogLyogU0xBK1IgaGFzIGJlZW4gdHJhbnNtaXR0ZWQ7IEFDSyBoYXMgYmVlbiByZWNlaXZlZCAqLwotCQkJcGNhX3J4X2FjayhhZGFwLCBtc2ctPmxlbiA+IDEpOworCQkJY29tcGxldGVkID0gcGNhX3J4X2FjayhhZGFwLCBtc2ctPmxlbiA+IDEpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDUwOiAvKiBEYXRhIGJ5dGVzIGhhcyBiZWVuIHJlY2VpdmVkOyBBQ0sgaGFzIGJlZW4gcmV0dXJuZWQgKi8KIAkJCWlmIChudW1ieXRlcyA8IG1zZy0+bGVuKSB7CiAJCQkJcGNhX3J4X2J5dGUoYWRhcCwgJm1zZy0+YnVmW251bWJ5dGVzXSwgMSk7CiAJCQkJbnVtYnl0ZXMrKzsKLQkJCQlwY2FfcnhfYWNrKGFkYXAsIG51bWJ5dGVzIDwgbXNnLT5sZW4gLSAxKTsKKwkJCQljb21wbGV0ZWQgPSBwY2FfcnhfYWNrKGFkYXAsCisJCQkJCQkgICAgICAgbnVtYnl0ZXMgPCBtc2ctPmxlbiAtIDEpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY3VybXNnKys7IG51bWJ5dGVzID0gMDsKIAkJCWlmIChjdXJtc2cgPT0gbnVtKQogCQkJCXBjYV9zdG9wKGFkYXApOwogCQkJZWxzZQotCQkJCXBjYV9yZXBlYXRlZF9zdGFydChhZGFwKTsKKwkJCQljb21wbGV0ZWQgPSBwY2FfcmVwZWF0ZWRfc3RhcnQoYWRhcCk7CiAJCQlicmVhazsKIAogCQljYXNlIDB4NDg6IC8qIFNMQStSIGhhcyBiZWVuIHRyYW5zbWl0dGVkOyBOT1QgQUNLIGhhcyBiZWVuIHJlY2VpdmVkICovCkBAIC0yODMsNyArMzAwLDcgQEAKIAkJCQlpZiAoY3VybXNnID09IG51bSkKIAkJCQkJcGNhX3N0b3AoYWRhcCk7CiAJCQkJZWxzZQotCQkJCQlwY2FfcmVwZWF0ZWRfc3RhcnQoYWRhcCk7CisJCQkJCWNvbXBsZXRlZCA9IHBjYV9yZXBlYXRlZF9zdGFydChhZGFwKTsKIAkJCX0gZWxzZSB7CiAJCQkJREVCMigiTk9UIEFDSyBzZW50IGFmdGVyIGRhdGEgYnl0ZSByZWNlaXZlZC4gIgogCQkJCSAgICAgIk5vdCBmaW5hbCBieXRlLiBudW1ieXRlcyAlZC4gbGVuICVkXG4iLApAQCAtMzA5LDExICszMjYsMTMgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJaWYgKCFjb21wbGV0ZWQpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXQgPSBjdXJtc2c7CiAgb3V0OgotCURFQjEoS0VSTl9DUklUICJ9fX0gdHJhbnNmZXJlZCAlZC8lZCBtZXNzYWdlcy4gIgorCURFQjEoIn19fSB0cmFuc2ZlcmVkICVkLyVkIG1lc3NhZ2VzLiAiCiAJICAgICAic3RhdHVzIGlzICUjMDR4LiBjb250cm9sIGlzICUjMDR4XG4iLAogCSAgICAgY3VybXNnLCBudW0sIHBjYV9zdGF0dXMoYWRhcCksCiAJICAgICBwY2FfZ2V0X2NvbihhZGFwKSk7CkBAIC0zMzAsMjYgKzM0OSwxNzEgQEAKIAkuZnVuY3Rpb25hbGl0eQk9IHBjYV9mdW5jLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBwY2FfcHJvYmVfY2hpcChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICpwY2FfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwkvKiBUaGUgdHJpY2sgaGVyZSBpcyB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBpbmRpcmVjdCByZWdpc3RlcgorCSAqIGF2YWlsYWJsZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSB3aWxsIHJlYWQgdGhlIHZhbHVlIHdlIGZpcnN0CisJICogd3JvdGUgb24gSTJDX1BDQV9JQURSLiBPdGhlcndpc2UsIHdlIHdpbGwgcmVhZCB0aGUgbGFzdCB2YWx1ZQorCSAqIHdlIHdyb3RlIG9uIEkyQ19QQ0FfQURSCisJICovCisJcGNhX291dHcocGNhX2RhdGEsIEkyQ19QQ0FfSU5EUFRSLCBJMkNfUENBX0lBRFIpOworCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORCwgMHhBQSk7CisJcGNhX291dHcocGNhX2RhdGEsIEkyQ19QQ0FfSU5EUFRSLCBJMkNfUENBX0lUTyk7CisJcGNhX291dHcocGNhX2RhdGEsIEkyQ19QQ0FfSU5ELCAweDAwKTsKKwlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSUFEUik7CisJaWYgKHBjYV9pbncocGNhX2RhdGEsIEkyQ19QQ0FfSU5EKSA9PSAweEFBKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ0E5NjY1IGRldGVjdGVkLlxuIiwgYWRhcC0+bmFtZSk7CisJCXJldHVybiBJMkNfUENBX0NISVBfOTY2NTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogUENBOTU2NCBkZXRlY3RlZC5cbiIsIGFkYXAtPm5hbWUpOworCQlyZXR1cm4gSTJDX1BDQV9DSElQXzk1NjQ7CisJfQorfQorCiBzdGF0aWMgaW50IHBjYV9pbml0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLQlzdGF0aWMgaW50IGZyZXFzW10gPSB7MzMwLDI4OCwyMTcsMTQ2LDg4LDU5LDQ0LDM2fTsKLQlpbnQgY2xvY2s7CiAJc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICpwY2FfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAotCWlmIChwY2FfZGF0YS0+aTJjX2Nsb2NrID4gNykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBJMkMgY2xvY2sgc3BlZWQgc2VsZWN0ZWQuIFRyeWluZyBkZWZhdWx0LlxuIiwKLQkJCWFkYXAtPm5hbWUpOwotCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fNTlrSHo7Ci0JfQotCiAJYWRhcC0+YWxnbyA9ICZwY2FfYWxnbzsKIAotCXBjYV9yZXNldChwY2FfZGF0YSk7CisJaWYgKHBjYV9wcm9iZV9jaGlwKGFkYXApID09IEkyQ19QQ0FfQ0hJUF85NTY0KSB7CisJCXN0YXRpYyBpbnQgZnJlcXNbXSA9IHszMzAsIDI4OCwgMjE3LCAxNDYsIDg4LCA1OSwgNDQsIDM2fTsKKwkJaW50IGNsb2NrOwogCi0JY2xvY2sgPSBwY2FfY2xvY2socGNhX2RhdGEpOwotCURFQjEoS0VSTl9JTkZPICIlczogQ2xvY2sgZnJlcXVlbmN5IGlzICVka0h6XG4iLCBhZGFwLT5uYW1lLCBmcmVxc1tjbG9ja10pOworCQlpZiAocGNhX2RhdGEtPmkyY19jbG9jayA+IDcpIHsKKwkJCXN3aXRjaCAocGNhX2RhdGEtPmkyY19jbG9jaykgeworCQkJY2FzZSAzMzAwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzMzMGtIejsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjg4MDAwOgorCQkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl8yODhrSHo7CisJCQkJYnJlYWs7CisJCQljYXNlIDIxNzAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fMjE3a0h6OworCQkJCWJyZWFrOworCQkJY2FzZSAxNDYwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzE0NmtIejsKKwkJCQlicmVhazsKKwkJCWNhc2UgODgwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzg4a0h6OworCQkJCWJyZWFrOworCQkJY2FzZSA1OTAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fNTlrSHo7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ0MDAwOgorCQkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl80NGtIejsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzYwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzM2a0h6OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSIlczogSW52YWxpZCBJMkMgY2xvY2sgc3BlZWQgc2VsZWN0ZWQuIgorCQkJCQkiIFVzaW5nIGRlZmF1bHQgNTlrSHouXG4iLCBhZGFwLT5uYW1lKTsKKwkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl81OWtIejsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCisJCQkJIkNob29zaW5nIHRoZSBjbG9jayBmcmVxdWVuY3kgYmFzZWQgb24gIgorCQkJCSJpbmRleCBpcyBkZXByZWNhdGVkLiIKKwkJCQkiIFVzZSB0aGUgbm9taW5hbCBmcmVxdWVuY3kuXG4iLCBhZGFwLT5uYW1lKTsKKwkJfQogCi0JcGNhX3NldF9jb24ocGNhX2RhdGEsIEkyQ19QQ0FfQ09OX0VOU0lPIHwgY2xvY2spOworCQlwY2FfcmVzZXQocGNhX2RhdGEpOworCisJCWNsb2NrID0gcGNhX2Nsb2NrKHBjYV9kYXRhKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENsb2NrIGZyZXF1ZW5jeSBpcyAlZGtIelxuIiwKKwkJICAgICBhZGFwLT5uYW1lLCBmcmVxc1tjbG9ja10pOworCisJCXBjYV9zZXRfY29uKHBjYV9kYXRhLCBJMkNfUENBX0NPTl9FTlNJTyB8IGNsb2NrKTsKKwl9IGVsc2UgeworCQlpbnQgY2xvY2s7CisJCWludCBtb2RlOworCQlpbnQgdGxvdywgdGhpOworCQkvKiBWYWx1ZXMgY2FuIGJlIGZvdW5kIG9uIFBDQTk2NjUgZGF0YXNoZWV0IHNlY3Rpb24gNy4zLjIuNiAqLworCQlpbnQgbWluX3Rsb3csIG1pbl90aGk7CisJCS8qIFRoZXNlIHZhbHVlcyBhcmUgdGhlIG1heGltdW0gcmFpc2UgYW5kIGZhbGwgdmFsdWVzIGFsbG93ZWQKKwkJICogYnkgdGhlIEkyQyBvcGVyYXRpb24gbW9kZSAoU3RhbmRhcmQsIEZhc3Qgb3IgRmFzdCspCisJCSAqIFRoZXkgYXJlIHVzZWQgKGFkZGVkKSBiZWxvdyB0byBjYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlkZXJzCisJCSAqIG9mIFBDQTk2NjUuIE5vdGUgdGhhdCB0aGV5IGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgb2YgdGhlCisJCSAqIHJlYWwgbWF4aW11bSwgdG8gYWxsb3cgdGhlIGNoYW5nZSBvbiBtb2RlIGV4YWN0bHkgb24gdGhlCisJCSAqIG1heGltdW0gY2xvY2sgcmF0ZSBmb3IgZWFjaCBtb2RlCisJCSAqLworCQlpbnQgcmFpc2VfZmFsbF90aW1lOworCisJCXN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqcGNhX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CisKKwkJLyogSWdub3JlIHRoZSByZXNldCBmdW5jdGlvbiBmcm9tIHRoZSBtb2R1bGUsCisJCSAqIHdlIGNhbiB1c2UgdGhlIHBhcmFsbGVsIGJ1cyByZXNldAorCQkgKi8KKwkJcGNhX2RhdGEtPnJlc2V0X2NoaXAgPSBwY2E5NjY1X3Jlc2V0OworCisJCWlmIChwY2FfZGF0YS0+aTJjX2Nsb2NrID4gMTI2NTgwMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkyQyBjbG9jayBzcGVlZCB0b28gaGlnaC4iCisJCQkJIiBVc2luZyAxMjY1LjhrSHouXG4iLCBhZGFwLT5uYW1lKTsKKwkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSAxMjY1ODAwOworCQl9CisKKwkJaWYgKHBjYV9kYXRhLT5pMmNfY2xvY2sgPCA2MDMwMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkyQyBjbG9jayBzcGVlZCB0b28gbG93LiIKKwkJCQkiIFVzaW5nIDYwLjNrSHouXG4iLCBhZGFwLT5uYW1lKTsKKwkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSA2MDMwMDsKKwkJfQorCisJCS8qIFRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3csIHVzZSBjbG9jay8xMDAgZm9yIGNhbGN1bGF0aW9ucyAqLworCQljbG9jayA9IHBjYV9jbG9jayhwY2FfZGF0YSkgLyAxMDA7CisKKwkJaWYgKHBjYV9kYXRhLT5pMmNfY2xvY2sgPiAxMDAwMCkgeworCQkJbW9kZSA9IEkyQ19QQ0FfTU9ERV9UVVJCTzsKKwkJCW1pbl90bG93ID0gMTQ7CisJCQltaW5fdGhpICA9IDU7CisJCQlyYWlzZV9mYWxsX3RpbWUgPSAyMjsgLyogUmFpc2UgMTFlLThzLCBGYWxsIDExZS04cyAqLworCQl9IGVsc2UgaWYgKHBjYV9kYXRhLT5pMmNfY2xvY2sgPiA0MDAwKSB7CisJCQltb2RlID0gSTJDX1BDQV9NT0RFX0ZBU1RQOworCQkJbWluX3Rsb3cgPSAxNzsKKwkJCW1pbl90aGkgID0gOTsKKwkJCXJhaXNlX2ZhbGxfdGltZSA9IDIyOyAvKiBSYWlzZSAxMWUtOHMsIEZhbGwgMTFlLThzICovCisJCX0gZWxzZSBpZiAocGNhX2RhdGEtPmkyY19jbG9jayA+IDEwMDApIHsKKwkJCW1vZGUgPSBJMkNfUENBX01PREVfRkFTVDsKKwkJCW1pbl90bG93ID0gNDQ7CisJCQltaW5fdGhpICA9IDIwOworCQkJcmFpc2VfZmFsbF90aW1lID0gNTg7IC8qIFJhaXNlIDI5ZS04cywgRmFsbCAyOWUtOHMgKi8KKwkJfSBlbHNlIHsKKwkJCW1vZGUgPSBJMkNfUENBX01PREVfU1REOworCQkJbWluX3Rsb3cgPSAxNTc7CisJCQltaW5fdGhpICA9IDEzNDsKKwkJCXJhaXNlX2ZhbGxfdGltZSA9IDEyNzsgLyogUmFpc2UgMjllLThzLCBGYWxsIDk4ZS04cyAqLworCQl9CisKKwkJLyogVGhlIG1pbmltdW0gY2xvY2sgdGhhdCByZXNwZWN0cyB0aGUgdGhpL3Rsb3cgPSAxMzQvMTU3IGlzCisJCSAqIDY0ODAwIEh6LiBCZWxvdyB0aGF0LCB3ZSBoYXZlIHRvIGZpeCB0aGUgdGxvdyB0byAyNTUgYW5kCisJCSAqIGNhbGN1bGF0ZSB0aGUgdGhpIGZhY3Rvci4KKwkJICovCisJCWlmIChjbG9jayA8IDY0OCkgeworCQkJdGxvdyA9IDI1NTsKKwkJCXRoaSA9IDEwMDAwMDAgLSBjbG9jayAqIHJhaXNlX2ZhbGxfdGltZTsKKwkJCXRoaSAvPSAoSTJDX1BDQV9PU0NfUEVSICogY2xvY2spIC0gdGxvdzsKKwkJfSBlbHNlIHsKKwkJCXRsb3cgPSAoMTAwMDAwMCAtIGNsb2NrICogcmFpc2VfZmFsbF90aW1lKSAqIG1pbl90bG93OworCQkJdGxvdyAvPSBJMkNfUENBX09TQ19QRVIgKiBjbG9jayAqIChtaW5fdGhpICsgbWluX3Rsb3cpOworCQkJdGhpID0gdGxvdyAqIG1pbl90aGkgLyBtaW5fdGxvdzsKKwkJfQorCisJCXBjYV9yZXNldChwY2FfZGF0YSk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICIlczogQ2xvY2sgZnJlcXVlbmN5IGlzICVkSHpcbiIsIGFkYXAtPm5hbWUsIGNsb2NrICogMTAwKTsKKworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSU1PREUpOworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkQsIG1vZGUpOworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSVNDTEwpOworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkQsIHRsb3cpOworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSVNDTEgpOworCQlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkQsIHRoaSk7CisKKwkJcGNhX3NldF9jb24ocGNhX2RhdGEsIEkyQ19QQ0FfQ09OX0VOU0lPKTsKKwl9CiAJdWRlbGF5KDUwMCk7IC8qIDUwMCB1cyBmb3Igb3NjaWxhdG9yIHRvIHN0YWJpbGlzZSAqLwogCiAJcmV0dXJuIDA7CkBAIC0zODQsNyArNTQ4LDcgQEAKIAogTU9EVUxFX0FVVEhPUigiSWFuIENhbXBiZWxsIDxpY2FtcGJlbGxAYXJjb20uY29tPiwgIgogCSJXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBQQ0E5NTY0IGFsZ29yaXRobSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFBDQTk1NjQvUENBOTY2NSBhbGdvcml0aG0iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKaW5kZXggM2UwMTk5Mi4uN2NlNzU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKQEAgLTEsMzEgKzEsMzAgQEAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIGkyYy1hbGdvLXBjZi5jIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgUENGODU4NCBhZGFwdGVycwkJICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBTaW1vbiBHLiBWb2dsCi0gICAgICAgICAgICAgICAgICAgMTk5OC0yMDAwIEhhbnMgQmVyZ2x1bmQKLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZAotICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAsYW5kIGFsc28gZnJvbSBNYXJ0aW4gQmFpbGV5Ci0gICA8bWJhaWxleUBsaXR0bGVmZWV0LWluYy5jb20+ICovCi0KLS8qIFBhcnRpYWxseSByZXdyaXRlbiBieSBPbGVnIEkuIFZkb3Zpa2luIDx2ZG92aWtpbkBqc2NjLnJ1PiB0byBoYW5kbGUgbXVsdGlwbGUKLSAgIG1lc3NhZ2VzLCBwcm9wZXIgc3RvcC9yZXBzdGFydCBzaWduYWxpbmcgZHVyaW5nIHJlY2VpdmUsCi0gICBhZGRlZCBkZXRlY3QgY29kZSAqLworLyoKKyAqIGkyYy1hbGdvLXBjZi5jIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgUENGODU4NCBhZGFwdGVycworICoKKyAqICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgU2ltb24gRy4gVm9nbAorICoJCSAgIDE5OTgtMjAwMCBIYW5zIEJlcmdsdW5kCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kCisgKiBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCBhbmQgYWxzbyBmcm9tIE1hcnRpbiBCYWlsZXkKKyAqIDxtYmFpbGV5QGxpdHRsZWZlZXQtaW5jLmNvbT4KKyAqCisgKiBQYXJ0aWFsbHkgcmV3cml0ZW4gYnkgT2xlZyBJLiBWZG92aWtpbiA8dmRvdmlraW5AanNjYy5ydT4gdG8gaGFuZGxlIG11bHRpcGxlCisgKiBtZXNzYWdlcywgcHJvcGVyIHN0b3AvcmVwc3RhcnQgc2lnbmFsaW5nIGR1cmluZyByZWNlaXZlLCBhZGRlZCBkZXRlY3QgY29kZQorICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM4LDE3ICszNywxOCBAQAogI2luY2x1ZGUgImkyYy1hbGdvLXBjZi5oIgogCiAKLSNkZWZpbmUgREVCMih4KSBpZiAoaTJjX2RlYnVnPj0yKSB4Ci0jZGVmaW5lIERFQjMoeCkgaWYgKGkyY19kZWJ1Zz49MykgeCAvKiBwcmludCBzZXZlcmFsIHN0YXRpc3RpY2FsIHZhbHVlcyovCi0jZGVmaW5lIERFQlBST1RPKHgpIGlmIChpMmNfZGVidWc+PTkpIHg7Ci0gCS8qIGRlYnVnIHRoZSBwcm90b2NvbCBieSBzaG93aW5nIHRyYW5zZmVycmVkIGJpdHMgKi8KKyNkZWZpbmUgREVCMih4KSBpZiAoaTJjX2RlYnVnID49IDIpIHgKKyNkZWZpbmUgREVCMyh4KSBpZiAoaTJjX2RlYnVnID49IDMpIHggLyogcHJpbnQgc2V2ZXJhbCBzdGF0aXN0aWNhbCB2YWx1ZXMgKi8KKyNkZWZpbmUgREVCUFJPVE8oeCkgaWYgKGkyY19kZWJ1ZyA+PSA5KSB4OworCS8qIGRlYnVnIHRoZSBwcm90b2NvbCBieSBzaG93aW5nIHRyYW5zZmVycmVkIGJpdHMgKi8KICNkZWZpbmUgREVGX1RJTUVPVVQgMTYKIAotLyogbW9kdWxlIHBhcmFtZXRlcnM6CisvKgorICogbW9kdWxlIHBhcmFtZXRlcnM6CiAgKi8KIHN0YXRpYyBpbnQgaTJjX2RlYnVnOwogCi0vKiAtLS0gc2V0dGluZyBzdGF0ZXMgb24gdGhlIGJ1cyB3aXRoIHRoZSByaWdodCB0aW1pbmc6IC0tLS0tLS0tLS0tLS0tLQkqLworLyogc2V0dGluZyBzdGF0ZXMgb24gdGhlIGJ1cyB3aXRoIHRoZSByaWdodCB0aW1pbmc6ICovCiAKICNkZWZpbmUgc2V0X3BjZihhZGFwLCBjdGwsIHZhbCkgYWRhcC0+c2V0cGNmKGFkYXAtPmRhdGEsIGN0bCwgdmFsKQogI2RlZmluZSBnZXRfcGNmKGFkYXAsIGN0bCkgYWRhcC0+Z2V0cGNmKGFkYXAtPmRhdGEsIGN0bCkKQEAgLTU3LDIyICs1NywyMSBAQAogI2RlZmluZSBpMmNfb3V0YihhZGFwLCB2YWwpIGFkYXAtPnNldHBjZihhZGFwLT5kYXRhLCAwLCB2YWwpCiAjZGVmaW5lIGkyY19pbmIoYWRhcCkgYWRhcC0+Z2V0cGNmKGFkYXAtPmRhdGEsIDApCiAKLS8qIC0tLSBvdGhlciBhdXhpbGlhcnkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisvKiBvdGhlciBhdXhpbGlhcnkgZnVuY3Rpb25zICovCiAKLXN0YXRpYyB2b2lkIGkyY19zdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXApIAorc3RhdGljIHZvaWQgaTJjX3N0YXJ0KHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkKIHsKLQlERUJQUk9UTyhwcmludGsoIlMgIikpOworCURFQlBST1RPKHByaW50ayhLRVJOX0RFQlVHICJTICIpKTsKIAlzZXRfcGNmKGFkYXAsIDEsIEkyQ19QQ0ZfU1RBUlQpOwogfQogCi1zdGF0aWMgdm9pZCBpMmNfcmVwc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwKSAKK3N0YXRpYyB2b2lkIGkyY19yZXBzdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXApCiB7CiAJREVCUFJPVE8ocHJpbnRrKCIgU3IgIikpOwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9SRVBTVEFSVCk7CiB9CiAKLQotc3RhdGljIHZvaWQgaTJjX3N0b3Aoc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwKSAKK3N0YXRpYyB2b2lkIGkyY19zdG9wKHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkKIHsKIAlERUJQUk9UTyhwcmludGsoIlBcbiIpKTsKIAlzZXRfcGNmKGFkYXAsIDEsIEkyQ19QQ0ZfU1RPUCk7CkBAIC04MiwxNyArODEsMTcgQEAKIHsKIAlERUIyKHByaW50ayhLRVJOX0lORk8KIAkJImkyYy1hbGdvLXBjZi5vOiBsb3N0IGFyYml0cmF0aW9uIChDU1IgMHglMDJ4KVxuIiwKLQkJICpzdGF0dXMpKTsKLQotCS8qIENsZWFudXAgZnJvbSBMQUIgLS0gcmVzZXQgYW5kIGVuYWJsZSBFU08uCisJCSpzdGF0dXMpKTsKKwkvKgorCSAqIENsZWFudXAgZnJvbSBMQUIgLS0gcmVzZXQgYW5kIGVuYWJsZSBFU08uCiAJICogVGhpcyByZXNldHMgdGhlIFBDRjg1ODQ7IHNpbmNlIHdlJ3ZlIGxvc3QgdGhlIGJ1cywgbm8KIAkgKiBmdXJ0aGVyIGF0dGVtcHRzIHNob3VsZCBiZSBtYWRlIGJ5IGNhbGxlcnMgdG8gY2xlYW4gdXAKIAkgKiAobm8gaTJjX3N0b3AoKSBldGMuKQogCSAqLwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9QSU4pOwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9FU08pOwotCi0JLyogV2UgcGF1c2UgZm9yIGEgdGltZSBwZXJpb2Qgc3VmZmljaWVudCBmb3IgYW55IHJ1bm5pbmcKKwkvKgorCSAqIFdlIHBhdXNlIGZvciBhIHRpbWUgcGVyaW9kIHN1ZmZpY2llbnQgZm9yIGFueSBydW5uaW5nCiAJICogSTJDIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlIC0tIHRoZSBhcmJpdHJhdGlvbiBsb2dpYyB3b24ndAogCSAqIHdvcmsgcHJvcGVybHkgdW50aWwgdGhlIG5leHQgU1RBUlQgaXMgc2Vlbi4KIAkgKiBJdCBpcyBhc3N1bWVkIHRoZSBidXMgZHJpdmVyIG9yIGNsaWVudCBoYXMgc2V0IGEgcHJvcGVyIHZhbHVlLgpAQCAtMTA4LDQ4ICsxMDcsNTAgQEAKIAkJZ2V0X3BjZihhZGFwLCAxKSkpOwogfQogCi1zdGF0aWMgaW50IHdhaXRfZm9yX2JiKHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkgeworc3RhdGljIGludCB3YWl0X2Zvcl9iYihzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXApCit7CiAKIAlpbnQgdGltZW91dCA9IERFRl9USU1FT1VUOwogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBnZXRfcGNmKGFkYXAsIDEpOwotI2lmbmRlZiBTVFVCX0kyQwotCXdoaWxlICh0aW1lb3V0LS0gJiYgIShzdGF0dXMgJiBJMkNfUENGX0JCKSkgeworCisJd2hpbGUgKCEoc3RhdHVzICYgSTJDX1BDRl9CQikgJiYgLS10aW1lb3V0KSB7CiAJCXVkZWxheSgxMDApOyAvKiB3YWl0IGZvciAxMDAgdXMgKi8KIAkJc3RhdHVzID0gZ2V0X3BjZihhZGFwLCAxKTsKIAl9Ci0jZW5kaWYKLQlpZiAodGltZW91dCA8PSAwKSB7CisKKwlpZiAodGltZW91dCA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVGltZW91dCB3YWl0aW5nIGZvciBCdXMgQnVzeVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkKLQlyZXR1cm4gKHRpbWVvdXQ8PTApOworCisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCB3YWl0X2Zvcl9waW4oc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwLCBpbnQgKnN0YXR1cykgeworc3RhdGljIGludCB3YWl0X2Zvcl9waW4oc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwLCBpbnQgKnN0YXR1cykKK3sKIAogCWludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7CiAKIAkqc3RhdHVzID0gZ2V0X3BjZihhZGFwLCAxKTsKLSNpZm5kZWYgU1RVQl9JMkMKLQl3aGlsZSAodGltZW91dC0tICYmICgqc3RhdHVzICYgSTJDX1BDRl9QSU4pKSB7CisKKwl3aGlsZSAoKCpzdGF0dXMgJiBJMkNfUENGX1BJTikgJiYgLS10aW1lb3V0KSB7CiAJCWFkYXAtPndhaXRmb3JwaW4oYWRhcC0+ZGF0YSk7CiAJCSpzdGF0dXMgPSBnZXRfcGNmKGFkYXAsIDEpOwogCX0KIAlpZiAoKnN0YXR1cyAmIEkyQ19QQ0ZfTEFCKSB7CiAJCWhhbmRsZV9sYWIoYWRhcCwgc3RhdHVzKTsKLQkJcmV0dXJuKC1FSU5UUik7CisJCXJldHVybiAtRUlOVFI7CiAJfQotI2VuZGlmCi0JaWYgKHRpbWVvdXQgPD0gMCkKLQkJcmV0dXJuKC0xKTsKLQllbHNlCi0JCXJldHVybigwKTsKKworCWlmICh0aW1lb3V0ID09IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJcmV0dXJuIDA7CiB9CiAKLS8qIAorLyoKICAqIFRoaXMgc2hvdWxkIHBlcmZvcm0gdGhlICdQQ0Y4NTg0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlJyBhcyBkZXNjcmliZWQKICAqIGluIHRoZSBQaGlsaXBzIElDMTIgZGF0YSBib29rICgxOTk1LCBBdWcgMjkpLgogICogVGhlcmUgc2hvdWxkIGJlIGEgMzAgY2xvY2sgY3ljbGUgd2FpdCBhZnRlciByZXNldCwgSSBhc3N1bWUgdGhpcwpAQCAtMTY0LDE4ICsxNjUsMjEgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHRlbXA7CiAKLQlERUIzKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogUENGIHN0YXRlIDB4JTAyeFxuIiwgZ2V0X3BjZihhZGFwLCAxKSkpOworCURFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBQQ0Ygc3RhdGUgMHglMDJ4XG4iLAorCQkJCWdldF9wY2YoYWRhcCwgMSkpKTsKIAogCS8qIFMxPTB4ODA6IFMwIHNlbGVjdGVkLCBzZXJpYWwgaW50ZXJmYWNlIG9mZiAqLwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9QSU4pOwotCS8qIGNoZWNrIHRvIHNlZSBTMSBub3cgdXNlZCBhcyBSL1cgY3RybCAtCi0JICAgUENGODU4NCBkb2VzIHRoYXQgd2hlbiBFU08gaXMgemVybyAqLworCS8qCisJICogY2hlY2sgdG8gc2VlIFMxIG5vdyB1c2VkIGFzIFIvVyBjdHJsIC0KKwkgKiBQQ0Y4NTg0IGRvZXMgdGhhdCB3aGVuIEVTTyBpcyB6ZXJvCisJICovCiAJaWYgKCgodGVtcCA9IGdldF9wY2YoYWRhcCwgMSkpICYgMHg3ZikgIT0gKDApKSB7CiAJCURFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1wY2YubzogUENGIGRldGVjdGlvbiBmYWlsZWQgLS0gY2FuJ3Qgc2VsZWN0IFMwICgweCUwMngpLlxuIiwgdGVtcCkpOwogCQlyZXR1cm4gLUVOWElPOyAvKiBkZWZpbmV0bHkgbm90IFBDRjg1ODQgKi8KIAl9CiAKLQkvKiBsb2FkIG93biBhZGRyZXNzIGluIFMwLCBlZmZlY3RpdmUgYWRkcmVzcyBpcyAob3duIDw8IDEpCSovCisJLyogbG9hZCBvd24gYWRkcmVzcyBpbiBTMCwgZWZmZWN0aXZlIGFkZHJlc3MgaXMgKG93biA8PCAxKSAqLwogCWkyY19vdXRiKGFkYXAsIGdldF9vd24oYWRhcCkpOwogCS8qIGNoZWNrIGl0J3MgcmVhbGx5IHdyaXR0ZW4gKi8KIAlpZiAoKHRlbXAgPSBpMmNfaW5iKGFkYXApKSAhPSBnZXRfb3duKGFkYXApKSB7CkBAIC0xODMsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQkvKiBTMT0weEEwLCBuZXh0IGJ5dGUgaW4gUzIJCQkJCSovCisJLyogUzE9MHhBMCwgbmV4dCBieXRlIGluIFMyICovCiAJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX1BJTiB8IEkyQ19QQ0ZfRVMxKTsKIAkvKiBjaGVjayB0byBzZWUgUzIgbm93IHNlbGVjdGVkICovCiAJaWYgKCgodGVtcCA9IGdldF9wY2YoYWRhcCwgMSkpICYgMHg3ZikgIT0gSTJDX1BDRl9FUzEpIHsKQEAgLTE5MSw3ICsxOTUsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCS8qIGxvYWQgY2xvY2sgcmVnaXN0ZXIgUzIJCQkJCSovCisJLyogbG9hZCBjbG9jayByZWdpc3RlciBTMiAqLwogCWkyY19vdXRiKGFkYXAsIGdldF9jbG9jayhhZGFwKSk7CiAJLyogY2hlY2sgaXQncyByZWFsbHkgd3JpdHRlbiwgdGhlIG9ubHkgNSBsb3dlc3QgYml0cyBkb2VzIG1hdHRlciAqLwogCWlmICgoKHRlbXAgPSBpMmNfaW5iKGFkYXApKSAmIDB4MWYpICE9IGdldF9jbG9jayhhZGFwKSkgewpAQCAtMTk5LDcgKzIwMyw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JLyogRW5hYmxlIHNlcmlhbCBpbnRlcmZhY2UsIGlkbGUsIFMwIHNlbGVjdGVkCQkJKi8KKwkvKiBFbmFibGUgc2VyaWFsIGludGVyZmFjZSwgaWRsZSwgUzAgc2VsZWN0ZWQgKi8KIAlzZXRfcGNmKGFkYXAsIDEsIEkyQ19QQ0ZfSURMRSk7CiAKIAkvKiBjaGVjayB0byBzZWUgUENGIGlzIHJlYWxseSBpZGxlZCBhbmQgd2UgY2FuIGFjY2VzcyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTIwNyw1NyArMjExLDQ3IEBACiAJCURFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1wY2YubzogUENGIGRldGVjdGlvbiBmYWlsZWQgLS0gY2FuJ3Qgc2VsZWN0IFMxYCAoMHglMDJ4KS5cbiIsIHRlbXApKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JCisKIAlwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBQQ0Y4NTg0LlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKiAtLS0tLSBVdGlsaXR5IGZ1bmN0aW9ucwotICovCi0KIHN0YXRpYyBpbnQgcGNmX3NlbmRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgbGFzdCkKKwkJCSBpbnQgY291bnQsIGludCBsYXN0KQogewogCXN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CiAJaW50IHdyY291bnQsIHN0YXR1cywgdGltZW91dDsKLSAgICAKKwogCWZvciAod3Jjb3VudD0wOyB3cmNvdW50PGNvdW50OyArK3dyY291bnQpIHsKIAkJREVCMihkZXZfZGJnKCZpMmNfYWRhcC0+ZGV2LCAiaTJjX3dyaXRlOiB3cml0aW5nICUyLjJYXG4iLAotCQkJCWJ1Zlt3cmNvdW50XSYweGZmKSk7CisJCQkJYnVmW3dyY291bnRdICYgMHhmZikpOwogCQlpMmNfb3V0YihhZGFwLCBidWZbd3Jjb3VudF0pOwogCQl0aW1lb3V0ID0gd2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMpOwogCQlpZiAodGltZW91dCkgewotCQkJaWYgKHRpbWVvdXQgPT0gLUVJTlRSKSB7Ci0JCQkJLyogYXJiaXRyYXRpb24gbG9zdCAqLwotCQkJCXJldHVybiAtRUlOVFI7Ci0JCQl9CisJCQlpZiAodGltZW91dCA9PSAtRUlOVFIpCisJCQkJcmV0dXJuIC1FSU5UUjsgLyogYXJiaXRyYXRpb24gbG9zdCAqLworCiAJCQlpMmNfc3RvcChhZGFwKTsKIAkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsICJpMmNfd3JpdGU6IGVycm9yIC0gdGltZW91dC5cbiIpOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIGdvdCBhIGJldHRlciBvbmUgPz8gKi8KIAkJfQotI2lmbmRlZiBTVFVCX0kyQwogCQlpZiAoc3RhdHVzICYgSTJDX1BDRl9MUkIpIHsKIAkJCWkyY19zdG9wKGFkYXApOwogCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwgImkyY193cml0ZTogZXJyb3IgLSBubyBhY2suXG4iKTsKIAkJCXJldHVybiAtRVJFTU9URUlPOyAvKiBnb3QgYSBiZXR0ZXIgb25lID8/ICovCiAJCX0KLSNlbmRpZgogCX0KLQlpZiAobGFzdCkgeworCWlmIChsYXN0KQogCQlpMmNfc3RvcChhZGFwKTsKLQl9Ci0JZWxzZSB7CisJZWxzZQogCQlpMmNfcmVwc3RhcnQoYWRhcCk7Ci0JfQogCi0JcmV0dXJuICh3cmNvdW50KTsKKwlyZXR1cm4gd3Jjb3VudDsKIH0KIAotCiBzdGF0aWMgaW50IHBjZl9yZWFkYnl0ZXMoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50IGxhc3QpCisJCQkgaW50IGNvdW50LCBpbnQgbGFzdCkKIHsKIAlpbnQgaSwgc3RhdHVzOwogCXN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CkBAIC0yNjcsNDIgKzI2MSwzNiBAQAogCWZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykgewogCiAJCWlmICgod2ZwID0gd2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMpKSkgewotCQkJaWYgKHdmcCA9PSAtRUlOVFIpIHsKLQkJCQkvKiBhcmJpdHJhdGlvbiBsb3N0ICovCi0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCX0KKwkJCWlmICh3ZnAgPT0gLUVJTlRSKQorCQkJCXJldHVybiAtRUlOVFI7IC8qIGFyYml0cmF0aW9uIGxvc3QgKi8KKwogCQkJaTJjX3N0b3AoYWRhcCk7CiAJCQlkZXZfZXJyKCZpMmNfYWRhcC0+ZGV2LCAicGNmX3JlYWRieXRlcyB0aW1lZCBvdXQuXG4iKTsKLQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIC0xOwogCQl9CiAKLSNpZm5kZWYgU1RVQl9JMkMKIAkJaWYgKChzdGF0dXMgJiBJMkNfUENGX0xSQikgJiYgKGkgIT0gY291bnQpKSB7CiAJCQlpMmNfc3RvcChhZGFwKTsKIAkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsICJpMmNfcmVhZDogaTJjX2luYiwgTm8gYWNrLlxuIik7Ci0JCQlyZXR1cm4gKC0xKTsKKwkJCXJldHVybiAtMTsKIAkJfQotI2VuZGlmCi0JCQorCiAJCWlmIChpID09IGNvdW50IC0gMSkgewogCQkJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX0VTTyk7Ci0JCX0gZWxzZSAKLQkJaWYgKGkgPT0gY291bnQpIHsKLQkJCWlmIChsYXN0KSB7CisJCX0gZWxzZSBpZiAoaSA9PSBjb3VudCkgeworCQkJaWYgKGxhc3QpCiAJCQkJaTJjX3N0b3AoYWRhcCk7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCWkyY19yZXBzdGFydChhZGFwKTsKLQkJCX0KLQkJfTsKLQotCQlpZiAoaSkgewotCQkJYnVmW2kgLSAxXSA9IGkyY19pbmIoYWRhcCk7Ci0JCX0gZWxzZSB7Ci0JCQlpMmNfaW5iKGFkYXApOyAvKiBkdW1teSByZWFkICovCiAJCX0KKworCQlpZiAoaSkKKwkJCWJ1ZltpIC0gMV0gPSBpMmNfaW5iKGFkYXApOworCQllbHNlCisJCQlpMmNfaW5iKGFkYXApOyAvKiBkdW1teSByZWFkICovCiAJfQogCi0JcmV0dXJuIChpIC0gMSk7CisJcmV0dXJuIGkgLSAxOwogfQogCiAKQEAgLTMyMywxNCArMzExLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgcGNmX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKLQkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCAKKwkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLAogCQkgICAgaW50IG51bSkKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwogCXN0cnVjdCBpMmNfbXNnICpwbXNnOwogCWludCBpOwogCWludCByZXQ9MCwgdGltZW91dCwgc3RhdHVzOwotICAgIAorCiAJaWYgKGFkYXAtPnhmZXJfYmVnaW4pCiAJCWFkYXAtPnhmZXJfYmVnaW4oYWRhcC0+ZGF0YSk7CiAKQEAgLTMzOCwyNSArMzI2LDI0IEBACiAJdGltZW91dCA9IHdhaXRfZm9yX2JiKGFkYXApOwogCWlmICh0aW1lb3V0KSB7CiAJCURFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1wY2YubzogIgotCQkgICAgICAgICAgICAiVGltZW91dCB3YWl0aW5nIGZvciBCQiBpbiBwY2ZfeGZlclxuIik7KQorCQkJICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIEJCIGluIHBjZl94ZmVyXG4iKTspCiAJCWkgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9Ci0JCisKIAlmb3IgKGkgPSAwO3JldCA+PSAwICYmIGkgPCBudW07IGkrKykgewogCQlwbXNnID0gJm1zZ3NbaV07CiAKIAkJREVCMihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IERvaW5nICVzICVkIGJ5dGVzIHRvIDB4JTAyeCAtICVkIG9mICVkIG1lc3NhZ2VzXG4iLAogCQkgICAgIHBtc2ctPmZsYWdzICYgSTJDX01fUkQgPyAicmVhZCIgOiAid3JpdGUiLAotICAgICAgICAgICAgICAgICAgICAgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTspCi0gICAgCisJCSAgICAgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTspCisKIAkJcmV0ID0gcGNmX2RvQWRkcmVzcyhhZGFwLCBwbXNnKTsKIAogCQkvKiBTZW5kIFNUQVJUICovCi0JCWlmIChpID09IDApIHsKLQkJCWkyY19zdGFydChhZGFwKTsgCi0JCX0KLSAgICAKKwkJaWYgKGkgPT0gMCkKKwkJCWkyY19zdGFydChhZGFwKTsKKwogCQkvKiBXYWl0IGZvciBQSU4gKHBlbmRpbmcgaW50ZXJydXB0IE5PVCkgKi8KIAkJdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3RhdHVzKTsKIAkJaWYgKHRpbWVvdXQpIHsKQEAgLTM3MSw4ICszNTgsNyBAQAogCQkJaSA9IC1FUkVNT1RFSU87CiAJCQlnb3RvIG91dDsKIAkJfQotICAgIAotI2lmbmRlZiBTVFVCX0kyQworCiAJCS8qIENoZWNrIExSQiAobGFzdCByY3ZkIGJpdCAtIHNsYXZlIGFjaykgKi8KIAkJaWYgKHN0YXR1cyAmIEkyQ19QQ0ZfTFJCKSB7CiAJCQlpMmNfc3RvcChhZGFwKTsKQEAgLTM4MCwyNyArMzY2LDI0IEBACiAJCQlpID0gLUVSRU1PVEVJTzsKIAkJCWdvdG8gb3V0OwogCQl9Ci0jZW5kaWYKLSAgICAKKwogCQlERUIzKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogTXNnICVkLCBhZGRyPTB4JXgsIGZsYWdzPTB4JXgsIGxlbj0lZFxuIiwKIAkJCSAgICBpLCBtc2dzW2ldLmFkZHIsIG1zZ3NbaV0uZmxhZ3MsIG1zZ3NbaV0ubGVuKTspCi0gICAgCi0JCS8qIFJlYWQgKi8KKwogCQlpZiAocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgewotCQkJLyogcmVhZCBieXRlcyBpbnRvIGJ1ZmZlciovCiAJCQlyZXQgPSBwY2ZfcmVhZGJ5dGVzKGkyY19hZGFwLCBwbXNnLT5idWYsIHBtc2ctPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgKyAxID09IG51bSkpOwotICAgICAgICAKKwkJCQkJICAgIChpICsgMSA9PSBudW0pKTsKKwogCQkJaWYgKHJldCAhPSBwbXNnLT5sZW4pIHsKIAkJCQlERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogZmFpbDogIgogCQkJCQkgICAgIm9ubHkgcmVhZCAlZCBieXRlcy5cbiIscmV0KSk7CiAJCQl9IGVsc2UgewogCQkJCURFQjIocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiByZWFkICVkIGJ5dGVzLlxuIixyZXQpKTsKIAkJCX0KLQkJfSBlbHNlIHsgLyogV3JpdGUgKi8KKwkJfSBlbHNlIHsKIAkJCXJldCA9IHBjZl9zZW5kYnl0ZXMoaTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSArIDEgPT0gbnVtKSk7Ci0gICAgICAgIAorCQkJCQkgICAgKGkgKyAxID09IG51bSkpOworCiAJCQlpZiAocmV0ICE9IHBtc2ctPmxlbikgewogCQkJCURFQjIocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBmYWlsOiAiCiAJCQkJCSAgICAib25seSB3cm90ZSAlZCBieXRlcy5cbiIscmV0KSk7CkBAIC00MTMsMjQgKzM5NiwyMyBAQAogb3V0OgogCWlmIChhZGFwLT54ZmVyX2VuZCkKIAkJYWRhcC0+eGZlcl9lbmQoYWRhcC0+ZGF0YSk7Ci0JcmV0dXJuIChpKTsKKwlyZXR1cm4gaTsKIH0KIAogc3RhdGljIHUzMiBwY2ZfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7Ci0JcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUwgfCAKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTCB8CiAJICAgICAgIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HOwogfQogCi0vKiAtLS0tLWV4cG9ydGVkIGFsZ29yaXRobSBkYXRhOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KKy8qIGV4cG9ydGVkIGFsZ29yaXRobSBkYXRhOiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHBjZl9hbGdvID0gewogCS5tYXN0ZXJfeGZlcgk9IHBjZl94ZmVyLAogCS5mdW5jdGlvbmFsaXR5CT0gcGNmX2Z1bmMsCiB9OwogCi0vKiAKLSAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZSAKKy8qCisgKiByZWdpc3RlcmluZyBmdW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUKICAqLwogaW50IGkyY19wY2ZfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7CkBAIC00NDEsNyArNDIzLDYgQEAKIAogCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KIAlhZGFwLT5hbGdvID0gJnBjZl9hbGdvOwotCWFkYXAtPnRpbWVvdXQgPSAxMDA7CiAKIAlpZiAoKHJ2YWwgPSBwY2ZfaW5pdF84NTg0KHBjZl9hZGFwKSkpCiAJCXJldHVybiBydmFsOwpAQCAtNDU4LDQgKzQzOSw0IEBACiAKIG1vZHVsZV9wYXJhbShpMmNfZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsCi0gICAgICAgICJkZWJ1ZyBsZXZlbCAtIDAgb2ZmOyAxIG5vcm1hbDsgMiwzIG1vcmUgdmVyYm9zZTsgOSBwY2YtcHJvdG9jb2wiKTsKKwkiZGVidWcgbGV2ZWwgLSAwIG9mZjsgMSBub3JtYWw7IDIsMyBtb3JlIHZlcmJvc2U7IDkgcGNmLXByb3RvY29sIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDdmOTU5MDUuLmRhODA5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMzIsNiArMTMyLDcgQEAKIAkgICAgU2VydmVyd29ya3MgQ1NCNQogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I2CiAJICAgIFNlcnZlcndvcmtzIEhULTEwMDAKKwkgICAgU2VydmVyd29ya3MgSFQtMTEwMAogCSAgICBTTVNDIFZpY3Rvcnk2NgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCkBAIC02MTcsMTIgKzYxOCwxMiBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWVsZWt0b3IuCiAKIGNvbmZpZyBJMkNfUENBX0lTQQotCXRyaXN0YXRlICJQQ0E5NTY0IG9uIGFuIElTQSBidXMiCisJdHJpc3RhdGUgIlBDQTk1NjQvUENBOTY2NSBvbiBhbiBJU0EgYnVzIgogCWRlcGVuZHMgb24gSVNBCiAJc2VsZWN0IEkyQ19BTEdPUENBCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSVNBIGJvYXJkcyB1c2luZyB0aGUgUGhpbGlwcyBQQ0E5NTY0CisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJU0EgYm9hcmRzIHVzaW5nIHRoZSBQaGlsaXBzIFBDQTk1NjQvUENBOTY2NQogCSAgcGFyYWxsZWwgYnVzIHRvIEkyQyBidXMgY29udHJvbGxlci4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQpAQCAtNjM0LDExICs2MzUsMTEgQEAKIAkgIHRpbWUpLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEkyQ19QQ0FfUExBVEZPUk0KLQl0cmlzdGF0ZSAiUENBOTU2NCBhcyBwbGF0Zm9ybSBkZXZpY2UiCisJdHJpc3RhdGUgIlBDQTk1NjQvUENBOTY2NSBhcyBwbGF0Zm9ybSBkZXZpY2UiCiAJc2VsZWN0IEkyQ19BTEdPUENBCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBtZW1vcnkgbWFwcGVkIFBoaWxpcHMgUENBOTU2NAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBtZW1vcnkgbWFwcGVkIFBoaWxpcHMgUENBOTU2NC9QQ0E5NjY1CiAJICBwYXJhbGxlbCBidXMgdG8gSTJDIGJ1cyBjb250cm9sbGVyLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMKaW5kZXggOWFlZmI1ZS4uODY3OTY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hY29ybi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYwpAQCAtMTUsOSArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb2MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKaW5kZXggNWQ3Nzg5OC4uM2ZhZTNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAotCXRpbWVvdXQgPSBqaWZmaWVzICsgREFWSU5DSV9JMkNfVElNRU9VVDsKKwl0aW1lb3V0ID0gamlmZmllcyArIGRldi0+YWRhcHRlci50aW1lb3V0OwogCXdoaWxlIChkYXZpbmNpX2kyY19yZWFkX3JlZyhkZXYsIERBVklOQ0lfSTJDX1NUUl9SRUcpCiAJICAgICAgICYgREFWSU5DSV9JMkNfU1RSX0JCKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CkBAIC0yODksNyArMjg5LDcgQEAKIAlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHLCBmbGFnKTsKIAogCXIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmZGV2LT5jbWRfY29tcGxldGUsCi0JCQkJCQkgICAgICBEQVZJTkNJX0kyQ19USU1FT1VUKTsKKwkJCQkJCSAgICAgIGRldi0+YWRhcHRlci50aW1lb3V0KTsKIAlpZiAociA9PSAwKSB7CiAJCWRldl9lcnIoZGV2LT5kZXYsICJjb250cm9sbGVyIHRpbWVkIG91dFxuIik7CiAJCWkyY19kYXZpbmNpX2luaXQoZGV2KTsKQEAgLTU0Niw5ICs1NDYsNyBAQAogCXN0cmxjcHkoYWRhcC0+bmFtZSwgIkRhVmluY2kgSTJDIGFkYXB0ZXIiLCBzaXplb2YoYWRhcC0+bmFtZSkpOwogCWFkYXAtPmFsZ28gPSAmaTJjX2RhdmluY2lfYWxnbzsKIAlhZGFwLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQotCS8qIEZJWE1FICovCi0JYWRhcC0+dGltZW91dCA9IDE7CisJYWRhcC0+dGltZW91dCA9IERBVklOQ0lfSTJDX1RJTUVPVVQ7CiAKIAlhZGFwLT5uciA9IHBkZXYtPmlkOwogCXIgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoYWRhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IDg4ZjBkYjcuLjhiOTJhNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAlpZiAoZGV2LT5pcnEgPj0gMCl7CiAJCS8qIEludGVycnVwdCBtb2RlICovCiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d3EsCi0JCQkhKGluXzgoJmlpYy0+c3RzKSAmIFNUU19QVCksIGRldi0+YWRhcC50aW1lb3V0ICogSFopOworCQkJIShpbl84KCZpaWMtPnN0cykgJiBTVFNfUFQpLCBkZXYtPmFkYXAudGltZW91dCk7CiAKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQkJREJHKCIlZDogd2FpdCBpbnRlcnJ1cHRlZFxuIiwgZGV2LT5pZHgpOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJfQogCWVsc2UgewogCQkvKiBQb2xsaW5nIG1vZGUgKi8KLQkJdW5zaWduZWQgbG9uZyB4ID0gamlmZmllcyArIGRldi0+YWRhcC50aW1lb3V0ICogSFo7CisJCXVuc2lnbmVkIGxvbmcgeCA9IGppZmZpZXMgKyBkZXYtPmFkYXAudGltZW91dDsKIAogCQl3aGlsZSAoaW5fOCgmaWljLT5zdHMpICYgU1RTX1BUKXsKIAkJCWlmICh1bmxpa2VseSh0aW1lX2FmdGVyKGppZmZpZXMsIHgpKSl7CkBAIC03NDgsNyArNzQ4LDcgQEAKIAlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGRldik7CiAJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BEOwogCWFkYXAtPmFsZ28gPSAmaWljX2FsZ287Ci0JYWRhcC0+dGltZW91dCA9IDE7CisJYWRhcC0+dGltZW91dCA9IEhaOwogCiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKGFkYXApOwogCWlmIChyZXQgIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKaW5kZXggMzE5MDY5MC4uYTc1Yzc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAkvKgogCSAqIERlZmF1bHQgdmFsdWVzLi4uc2hvdWxkIHRoZXNlIGNvbWUgaW4gZnJvbSBib2FyZCBjb2RlPwogCSAqLwotCW5ld19hZGFwdGVyLT50aW1lb3V0ID0gMTAwOwkKKwluZXdfYWRhcHRlci0+dGltZW91dCA9IEhaOwogCW5ld19hZGFwdGVyLT5hbGdvID0gJmlvcDN4eF9pMmNfYWxnbzsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkYXB0ZXJfZGF0YS0+d2FpdHEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggYWVkYmJlNi4uMjZiZjM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC03MCw3ICs3MCw3IEBACiAJCS8qIFJlYWQgYWdhaW4gdG8gYWxsb3cgcmVnaXN0ZXIgdG8gc3RhYmlsaXNlICovCiAJCWkyYy0+aW50ZXJydXB0ID0gcmVhZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19TUik7CiAJCXdyaXRlYigwLCBpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpMmMtPnF1ZXVlKTsKKwkJd2FrZV91cCgmaTJjLT5xdWV1ZSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTExNSwxMyArMTE1LDEwIEBACiAJCXdyaXRlYigwLCBpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKIAl9IGVsc2UgewogCQkvKiBJbnRlcnJ1cHQgbW9kZSAqLwotCQlyZXN1bHQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpMmMtPnF1ZXVlLAotCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQgKiBIWik7CisJCXJlc3VsdCA9IHdhaXRfZXZlbnRfdGltZW91dChpMmMtPnF1ZXVlLAorCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQpOwogCi0JCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgewotCQkJcHJfZGVidWcoIkkyQzogd2FpdCBpbnRlcnJ1cHRlZFxuIik7Ci0JCQl3cml0ZWNjcihpMmMsIDApOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKKwkJaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKIAkJCXByX2RlYnVnKCJJMkM6IHdhaXQgdGltZW91dFxuIik7CiAJCQl3cml0ZWNjcihpMmMsIDApOwogCQkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKQEAgLTMxMSw3ICszMDgsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gIk1QQyBhZGFwdGVyIiwKIAkuYWxnbyA9ICZtcGNfYWxnbywKLQkudGltZW91dCA9IDEsCisJLnRpbWVvdXQgPSBIWiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9pMmNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwppbmRleCA3ZjE4NmJiLi41YTQ5NDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJY2hhcgkJYWJvcnQgPSAwOwogCiAJdGltZV9sZWZ0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZHJ2X2RhdGEtPndhaXRxLAotCQkhZHJ2X2RhdGEtPmJsb2NrLCBtc2Vjc190b19qaWZmaWVzKGRydl9kYXRhLT5hZGFwdGVyLnRpbWVvdXQpKTsKKwkJIWRydl9kYXRhLT5ibG9jaywgZHJ2X2RhdGEtPmFkYXB0ZXIudGltZW91dCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXRpbWVfbGVmdCkgeyAvKiBUaW1lZCBvdXQgKi8KQEAgLTM3NCw4ICszNzQsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwogCiAJCXRpbWVfbGVmdCA9IHdhaXRfZXZlbnRfdGltZW91dChkcnZfZGF0YS0+d2FpdHEsCi0JCQkhZHJ2X2RhdGEtPmJsb2NrLAotCQkJbXNlY3NfdG9famlmZmllcyhkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0KSk7CisJCQkhZHJ2X2RhdGEtPmJsb2NrLCBkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0KTsKIAogCQlpZiAoKHRpbWVfbGVmdCA8PSAwKSAmJiBkcnZfZGF0YS0+YmxvY2spIHsKIAkJCWRydl9kYXRhLT5zdGF0ZSA9IE1WNjRYWFhfSTJDX1NUQVRFX0lETEU7CkBAIC01MzAsNyArNTI5LDcgQEAKIAlkcnZfZGF0YS0+YWRhcHRlci5hbGdvID0gJm12NjR4eHhfaTJjX2FsZ287CiAJZHJ2X2RhdGEtPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAlkcnZfZGF0YS0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiB8IEkyQ19DTEFTU19TUEQ7Ci0JZHJ2X2RhdGEtPmFkYXB0ZXIudGltZW91dCA9IHBkYXRhLT50aW1lb3V0OworCWRydl9kYXRhLT5hZGFwdGVyLnRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHBkYXRhLT50aW1lb3V0KTsKIAlkcnZfZGF0YS0+YWRhcHRlci5uciA9IHBkLT5pZDsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgZHJ2X2RhdGEpOwogCWkyY19zZXRfYWRhcGRhdGEoJmRydl9kYXRhLT5hZGFwdGVyLCBkcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCmluZGV4IDA1YWY2Y2QuLjJmZjQ2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCkBAIC0zMSwxMCArMzEsMTQgQEAKICAgICBuRm9yY2UzIDI1MEdiIE1DUAkJMDBFNAogICAgIG5Gb3JjZTQgTUNQCQkJMDA1MgogICAgIG5Gb3JjZTQgTUNQLTA0CQkwMDM0Ci0gICAgbkZvcmNlNCBNQ1A1MQkJMDI2NAotICAgIG5Gb3JjZTQgTUNQNTUJCTAzNjgKKyAgICBuRm9yY2UgTUNQNTEJCTAyNjQKKyAgICBuRm9yY2UgTUNQNTUJCTAzNjgKICAgICBuRm9yY2UgTUNQNjEJCTAzRUIKICAgICBuRm9yY2UgTUNQNjUJCTA0NDYKKyAgICBuRm9yY2UgTUNQNjcJCTA1NDIKKyAgICBuRm9yY2UgTUNQNzMJCTA3RDgKKyAgICBuRm9yY2UgTUNQNzhTCQkwNzUyCisgICAgbkZvcmNlIE1DUDc5CQkwQUEyCiAKICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMiBTTUJ1c2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBNQ1Agb2YgdGhlCiAgICAgbkZvcmNlMi8zLzQvNXh4IGNoaXBzZXRzLgpAQCAtMzE1LDYgKzMxOSwxMCBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY1X1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY3X1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDczX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDc4U19TTUJVUykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A3OV9TTUJVUykgfSwKIAl7IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCBiZThlZTJjLi5lY2UwMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtMTkzLDIyICsxOTMsMjQgQEAKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfZ2V0X2Nsb2NrcyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCWRldi0+aWNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJpMmNfaWNrIik7Ci0JCWlmIChJU19FUlIoZGV2LT5pY2xrKSkgewotCQkJZGV2LT5pY2xrID0gTlVMTDsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJaW50IHJldDsKKworCWRldi0+aWNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKGRldi0+aWNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkZXYtPmljbGspOworCQlkZXYtPmljbGsgPSBOVUxMOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldi0+ZmNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJpMmNfZmNrIik7CisJZGV2LT5mY2xrID0gY2xrX2dldChkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIoZGV2LT5mY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+ZmNsayk7CiAJCWlmIChkZXYtPmljbGsgIT0gTlVMTCkgewogCQkJY2xrX3B1dChkZXYtPmljbGspOwogCQkJZGV2LT5pY2xrID0gTlVMTDsKIAkJfQogCQlkZXYtPmZjbGsgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIxOCwxOCArMjIwLDE1IEBACiB7CiAJY2xrX3B1dChkZXYtPmZjbGspOwogCWRldi0+ZmNsayA9IE5VTEw7Ci0JaWYgKGRldi0+aWNsayAhPSBOVUxMKSB7Ci0JCWNsa19wdXQoZGV2LT5pY2xrKTsKLQkJZGV2LT5pY2xrID0gTlVMTDsKLQl9CisJY2xrX3B1dChkZXYtPmljbGspOworCWRldi0+aWNsayA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfaTJjX3VuaWRsZShzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCiB7CiAJV0FSTl9PTighZGV2LT5pZGxlKTsKIAotCWlmIChkZXYtPmljbGsgIT0gTlVMTCkKLQkJY2xrX2VuYWJsZShkZXYtPmljbGspOworCWNsa19lbmFibGUoZGV2LT5pY2xrKTsKIAljbGtfZW5hYmxlKGRldi0+ZmNsayk7CiAJZGV2LT5pZGxlID0gMDsKIAlpZiAoZGV2LT5pZXN0YXRlKQpAQCAtMjU0LDggKzI1Myw3IEBACiAJfQogCWRldi0+aWRsZSA9IDE7CiAJY2xrX2Rpc2FibGUoZGV2LT5mY2xrKTsKLQlpZiAoZGV2LT5pY2xrICE9IE5VTEwpCi0JCWNsa19kaXNhYmxlKGRldi0+aWNsayk7CisJY2xrX2Rpc2FibGUoZGV2LT5pY2xrKTsKIH0KIAogc3RhdGljIGludCBvbWFwX2kyY19pbml0KHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTMxMiwxNSArMzEwLDE0IEBACiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKLQkJc3RydWN0IGNsayAqYXJteG9yX2NrOworCQkvKgorCQkgKiBUaGUgSTJDIGZ1bmN0aW9uYWwgY2xvY2sgaXMgdGhlIGFybXhvcl9jaywgc28gdGhlcmUncworCQkgKiBubyBuZWVkIHRvIGdldCAiYXJteG9yX2NrIiBzZXBhcmF0ZWx5LiAgTm93LCBpZiBPTUFQMjQyMAorCQkgKiBhbHdheXMgcmV0dXJucyAxMk1IeiBmb3IgdGhlIGZ1bmN0aW9uYWwgY2xvY2ssIHdlIGNhbgorCQkgKiBkbyB0aGlzIGJpdCB1bmNvbmRpdGlvbmFsbHkuCisJCSAqLworCQlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5mY2xrKTsKIAotCQlhcm14b3JfY2sgPSBjbGtfZ2V0KE5VTEwsICJhcm14b3JfY2siKTsKLQkJaWYgKElTX0VSUihhcm14b3JfY2spKQotCQkJZGV2X3dhcm4oZGV2LT5kZXYsICJDb3VsZCBub3QgZ2V0IGFybXhvcl9ja1xuIik7Ci0JCWVsc2UgewotCQkJZmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGFybXhvcl9jayk7Ci0JCQljbGtfcHV0KGFybXhvcl9jayk7Ci0JCX0KIAkJLyogVFJNIGZvciA1OTEyIHNheXMgdGhlIEkyQyBjbG9jayBtdXN0IGJlIHByZXNjYWxlZCB0byBiZQogCQkgKiBiZXR3ZWVuIDcgLSAxMiBNSHouIFRoZSBYT1IgaW5wdXQgY2xvY2sgaXMgdHlwaWNhbGx5CiAJCSAqIDEyLCAxMyBvciAxOS4yIE1Iei4gU28gd2Ugc2hvdWxkIGhhdmUgY29kZSB0aGF0IHByb2R1Y2VzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYwppbmRleCA0YWE4MTM4Li4wZWQ2OGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTQxLDE1ICs0MiwxNyBAQAogCiAvKiBEYXRhIHNoZWV0IHJlY29tbWVuZHMgNTlrSHogZm9yIDEwMGtIeiBvcGVyYXRpb24gZHVlIHRvIHZhcmlhdGlvbgogICogaW4gdGhlIGFjdHVhbCBjbG9jayByYXRlICovCi1zdGF0aWMgaW50IGNsb2NrICA9IEkyQ19QQ0FfQ09OXzU5a0h6Oworc3RhdGljIGludCBjbG9jayAgPSA1OTAwMDsKIAorc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwY2FfaXNhX29wczsKIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBwY2Ffd2FpdDsKIAogc3RhdGljIHZvaWQgcGNhX2lzYV93cml0ZWJ5dGUodm9pZCAqcGQsIGludCByZWcsIGludCB2YWwpCiB7CiAjaWZkZWYgREVCVUdfSU8KIAlzdGF0aWMgY2hhciAqbmFtZXNbXSA9IHsgIlQvTyIsICJEQVQiLCAiQURSIiwgIkNPTiIgfTsKLQlwcmludGsoIioqKiB3cml0ZSAlcyBhdCAlI2x4IDw9ICUjMDR4XG4iLCBuYW1lc1tyZWddLCBiYXNlK3JlZywgdmFsKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiKioqIHdyaXRlICVzIGF0ICUjbHggPD0gJSMwNHhcbiIsIG5hbWVzW3JlZ10sCisJICAgICAgIGJhc2UrcmVnLCB2YWwpOwogI2VuZGlmCiAJb3V0Yih2YWwsIGJhc2UrcmVnKTsKIH0KQEAgLTYwLDcgKzYzLDcgQEAKICNpZmRlZiBERUJVR19JTwogCXsKIAkJc3RhdGljIGNoYXIgKm5hbWVzW10gPSB7ICJTVEEiLCAiREFUIiwgIkFEUiIsICJDT04iIH07Ci0JCXByaW50aygiKioqIHJlYWQgICVzID0+ICUjMDR4XG4iLCBuYW1lc1tyZWddLCByZXMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKioqIHJlYWQgICVzID0+ICUjMDR4XG4iLCBuYW1lc1tyZWddLCByZXMpOwogCX0KICNlbmRpZgogCXJldHVybiByZXM7CkBAIC02OCwxNiArNzEsMjIgQEAKIAogc3RhdGljIGludCBwY2FfaXNhX3dhaXRmb3Jjb21wbGV0aW9uKHZvaWQgKnBkKQogewotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gfjA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKGlycSA+IC0xKSB7Ci0JCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwY2Ffd2FpdCwKLQkJCQkJICAgICAgIHBjYV9pc2FfcmVhZGJ5dGUocGQsIEkyQ19QQ0FfQ09OKSAmIEkyQ19QQ0FfQ09OX1NJKTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocGNhX3dhaXQsCisJCQkJcGNhX2lzYV9yZWFkYnl0ZShwZCwgSTJDX1BDQV9DT04pCisJCQkJJiBJMkNfUENBX0NPTl9TSSwgcGNhX2lzYV9vcHMudGltZW91dCk7CiAJfSBlbHNlIHsKLQkJd2hpbGUgKChwY2FfaXNhX3JlYWRieXRlKHBkLCBJMkNfUENBX0NPTikgJiBJMkNfUENBX0NPTl9TSSkgPT0gMCkKKwkJLyogRG8gcG9sbGluZyAqLworCQl0aW1lb3V0ID0gamlmZmllcyArIHBjYV9pc2Ffb3BzLnRpbWVvdXQ7CisJCXdoaWxlICgoKHBjYV9pc2FfcmVhZGJ5dGUocGQsIEkyQ19QQ0FfQ09OKQorCQkJCSYgSTJDX1BDQV9DT05fU0kpID09IDApCisJCQkJJiYgKHJldCA9IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSkKIAkJCXVkZWxheSgxMDApOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiByZXQgPiAwOwogfQogCiBzdGF0aWMgdm9pZCBwY2FfaXNhX3Jlc2V0Y2hpcCh2b2lkICpwZCkKQEAgLTEwMiw4ICsxMTEsOCBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwY2FfaXNhX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuYWxnb19kYXRhCT0gJnBjYV9pc2FfZGF0YSwKLQkubmFtZQkJPSAiUENBOTU2NCBJU0EgQWRhcHRlciIsCi0JLnRpbWVvdXQJPSAxMDAsCisJLm5hbWUJCT0gIlBDQTk1NjQvUENBOTY2NSBJU0EgQWRhcHRlciIsCisJLnRpbWVvdXQJPSBIWiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBjYV9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpCkBAIC0xOTUsNyArMjA0LDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiSWFuIENhbXBiZWxsIDxpY2FtcGJlbGxAYXJjb20uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJU0EgYmFzZSBQQ0E5NTY0IGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJU0EgYmFzZSBQQ0E5NTY0L1BDQTk2NjUgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9wYXJhbShiYXNlLCB1bG9uZywgMCk7CkBAIC0yMDQsNyArMjEzLDEzIEBACiBtb2R1bGVfcGFyYW0oaXJxLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEiKTsKIG1vZHVsZV9wYXJhbShjbG9jaywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2xvY2ssICJDbG9jayByYXRlIGFzIGRlc2NyaWJlZCBpbiB0YWJsZSAxIG9mIFBDQTk1NjQgZGF0YXNoZWV0Iik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrLCAiQ2xvY2sgcmF0ZSBpbiBoZXJ0ei5cblx0XHQiCisJCSJGb3IgUENBOTU2NDogMzMwMDAwLDI4ODAwMCwyMTcwMDAsMTQ2MDAwLCIKKwkJIjg4MDAwLDU5MDAwLDQ0MDAwLDM2MDAwXG4iCisJCSJcdFx0Rm9yIFBDQTk2NjU6XHRTdGFuZGFyZDogNjAzMDAgLSAxMDAwOTlcbiIKKwkJIlx0XHRcdFx0RmFzdDogMTAwMTAwIC0gNDAwMDk5XG4iCisJCSJcdFx0XHRcdEZhc3QrOiA0MDAxMDAgLSAxMDAwMDA5OVxuIgorCQkiXHRcdFx0XHRUdXJibzogVXAgdG8gMTI2NTgwMCIpOwogCiBtb2R1bGVfaW5pdChwY2FfaXNhX2luaXQpOwogbW9kdWxlX2V4aXQocGNhX2lzYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLXBsYXRmb3JtLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1wbGF0Zm9ybS5jCmluZGV4IDZiYjE1YWQuLjdiMjM4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLXBsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtcGxhdGZvcm0uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTgxLDI0ICs4MiwyMyBAQAogc3RhdGljIGludCBpMmNfcGNhX3BmX3dhaXRmb3Jjb21wbGV0aW9uKHZvaWQgKnBkKQogewogCXN0cnVjdCBpMmNfcGNhX3BmX2RhdGEgKmkyYyA9IHBkOwotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gfjA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKGkyYy0+aXJxKSB7Ci0JCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpMmMtPndhaXQsCisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+d2FpdCwKIAkJCWkyYy0+YWxnb19kYXRhLnJlYWRfYnl0ZShpMmMsIEkyQ19QQ0FfQ09OKQotCQkJJiBJMkNfUENBX0NPTl9TSSk7CisJCQkmIEkyQ19QQ0FfQ09OX1NJLCBpMmMtPmFkYXAudGltZW91dCk7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogRG8gcG9sbGluZy4uLgotCQkgKiBYWFg6IENvdWxkIGdldCBzdHVjayBpbiBleHRyZW1lIGNhc2VzIQotCQkgKiAgICAgIE1heWJlIGFkZCB0aW1lb3V0LCBidXQgdXNpbmcgaXJxcyBpcyBwcmVmZXJyZWQgYW55aG93LgotCQkgKi8KLQkJd2hpbGUgKChpMmMtPmFsZ29fZGF0YS5yZWFkX2J5dGUoaTJjLCBJMkNfUENBX0NPTikKKwkJLyogRG8gcG9sbGluZyAqLworCQl0aW1lb3V0ID0gamlmZmllcyArIGkyYy0+YWRhcC50aW1lb3V0OworCQl3aGlsZSAoKChpMmMtPmFsZ29fZGF0YS5yZWFkX2J5dGUoaTJjLCBJMkNfUENBX0NPTikKIAkJCQkmIEkyQ19QQ0FfQ09OX1NJKSA9PSAwKQorCQkJCSYmIChyZXQgPSB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkpCiAJCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiByZXQgPiAwOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfcGNhX3BmX2R1bW15cmVzZXQodm9pZCAqcGQpCkBAIC0xNzIsMTQgKzE3MiwyNSBAQAogCiAJaTJjLT5hZGFwLm5yID0gcGRldi0+aWQgPj0gMCA/IHBkZXYtPmlkIDogMDsKIAlpMmMtPmFkYXAub3duZXIgPSBUSElTX01PRFVMRTsKLQlzbnByaW50ZihpMmMtPmFkYXAubmFtZSwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSwgIlBDQTk1NjQgYXQgMHglMDhseCIsCi0JCSh1bnNpZ25lZCBsb25nKSByZXMtPnN0YXJ0KTsKKwlzbnByaW50ZihpMmMtPmFkYXAubmFtZSwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSwKKwkJICJQQ0E5NTY0L1BDQTk2NjUgYXQgMHglMDhseCIsCisJCSAodW5zaWduZWQgbG9uZykgcmVzLT5zdGFydCk7CiAJaTJjLT5hZGFwLmFsZ29fZGF0YSA9ICZpMmMtPmFsZ29fZGF0YTsKIAlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JaTJjLT5hZGFwLnRpbWVvdXQgPSBwbGF0Zm9ybV9kYXRhLT50aW1lb3V0OwogCi0JaTJjLT5hbGdvX2RhdGEuaTJjX2Nsb2NrID0gcGxhdGZvcm1fZGF0YS0+aTJjX2Nsb2NrX3NwZWVkOworCWlmIChwbGF0Zm9ybV9kYXRhKSB7CisJCWkyYy0+YWRhcC50aW1lb3V0ID0gcGxhdGZvcm1fZGF0YS0+dGltZW91dDsKKwkJaTJjLT5hbGdvX2RhdGEuaTJjX2Nsb2NrID0gcGxhdGZvcm1fZGF0YS0+aTJjX2Nsb2NrX3NwZWVkOworCQlpMmMtPmdwaW8gPSBwbGF0Zm9ybV9kYXRhLT5ncGlvOworCX0gZWxzZSB7CisJCWkyYy0+YWRhcC50aW1lb3V0ID0gSFo7CisJCWkyYy0+YWxnb19kYXRhLmkyY19jbG9jayA9IDU5MDAwOworCQlpMmMtPmdwaW8gPSAtMTsKKwl9CisKIAlpMmMtPmFsZ29fZGF0YS5kYXRhID0gaTJjOworCWkyYy0+YWxnb19kYXRhLndhaXRfZm9yX2NvbXBsZXRpb24gPSBpMmNfcGNhX3BmX3dhaXRmb3Jjb21wbGV0aW9uOworCWkyYy0+YWxnb19kYXRhLnJlc2V0X2NoaXAgPSBpMmNfcGNhX3BmX2R1bW15cmVzZXQ7CiAKIAlzd2l0Y2ggKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV9UWVBFX01BU0spIHsKIAljYXNlIElPUkVTT1VSQ0VfTUVNXzMyQklUOgpAQCAtMTk3LDExICsyMDgsNiBAQAogCQlicmVhazsKIAl9CiAKLQlpMmMtPmFsZ29fZGF0YS53YWl0X2Zvcl9jb21wbGV0aW9uID0gaTJjX3BjYV9wZl93YWl0Zm9yY29tcGxldGlvbjsKLQotCWkyYy0+Z3BpbyA9IHBsYXRmb3JtX2RhdGEtPmdwaW87Ci0JaTJjLT5hbGdvX2RhdGEucmVzZXRfY2hpcCA9IGkyY19wY2FfcGZfZHVtbXlyZXNldDsKLQogCS8qIFVzZSBncGlvX2lzX3ZhbGlkKCkgd2hlbiBpbiBtYWlubGluZSAqLwogCWlmIChpMmMtPmdwaW8gPiAtMSkgewogCQlyZXQgPSBncGlvX3JlcXVlc3QoaTJjLT5ncGlvLCBpMmMtPmFkYXAubmFtZSk7CkBAIC0yNDYsNyArMjUyLDcgQEAKIGVfYWxsb2M6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4ocmVzKSk7CiBlX3ByaW50OgotCXByaW50ayhLRVJOX0VSUiAiUmVnaXN0ZXJpbmcgUENBOTU2NCBGQUlMRUQhICglZClcbiIsIHJldCk7CisJcHJpbnRrKEtFUk5fRVJSICJSZWdpc3RlcmluZyBQQ0E5NTY0L1BDQTk2NjUgRkFJTEVEISAoJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5MCw3ICsyOTYsNyBAQAogfQogCiBNT0RVTEVfQVVUSE9SKCJXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSTJDLVBDQTk1NjQgcGxhdGZvcm0gZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1QQ0E5NTY0L1BDQTk2NjUgcGxhdGZvcm0gZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGkyY19wY2FfcGZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKaW5kZXggNzYxZjlkZC4uMDI0OWE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwpAQCAtMjAsNyArMjAsNyBAQAogLyoKICAgIFN1cHBvcnRzOgogCUludGVsIFBJSVg0LCA0NDBNWAotCVNlcnZlcndvcmtzIE9TQjQsIENTQjUsIENTQjYsIEhULTEwMDAKKwlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKIAlTTVNDIFZpY3Rvcnk2NgogCkBAIC0yMjYsNiArMjI2LDcwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBpaXg0X3NldHVwX3NiODAwKHN0cnVjdCBwY2lfZGV2ICpQSUlYNF9kZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIHNob3J0IHNtYmFfaWR4ID0gMHhjZDY7CisJdTggc21iYV9lbl9sbywgc21iYV9lbl9oaSwgaTJjY2ZnLCBpMmNjZmdfb2Zmc2V0ID0gMHgxMCwgc21iX2VuID0gMHgyYzsKKworCS8qIFNCODAwIFNNQnVzIGRvZXMgbm90IHN1cHBvcnQgZm9yY2luZyBhZGRyZXNzICovCisJaWYgKGZvcmNlIHx8IGZvcmNlX2FkZHIpIHsKKwkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTQjgwMCBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJCSJmb3JjaW5nIGFkZHJlc3MhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGV0ZXJtaW5lIHRoZSBhZGRyZXNzIG9mIHRoZSBTTUJ1cyBhcmVhcyAqLworCWlmICghcmVxdWVzdF9yZWdpb24oc21iYV9pZHgsIDIsICJzbWJhX2lkeCIpKSB7CisJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgYmFzZSBhZGRyZXNzIGluZGV4IHJlZ2lvbiAiCisJCQkiMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsIHNtYmFfaWR4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJb3V0Yl9wKHNtYl9lbiwgc21iYV9pZHgpOworCXNtYmFfZW5fbG8gPSBpbmJfcChzbWJhX2lkeCArIDEpOworCW91dGJfcChzbWJfZW4gKyAxLCBzbWJhX2lkeCk7CisJc21iYV9lbl9oaSA9IGluYl9wKHNtYmFfaWR4ICsgMSk7CisJcmVsZWFzZV9yZWdpb24oc21iYV9pZHgsIDIpOworCisJaWYgKChzbWJhX2VuX2xvICYgMSkgPT0gMCkgeworCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwKKwkJCSJIb3N0IFNNQnVzIGNvbnRyb2xsZXIgbm90IGVuYWJsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGlpeDRfc21iYSA9ICgoc21iYV9lbl9oaSA8PCA4KSB8IHNtYmFfZW5fbG8pICYgMHhmZmUwOworCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpIHsKKwkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCisJCQlwaWl4NF9zbWJhKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBSZXF1ZXN0IHRoZSBTTUJ1cyBJMkMgYnVzIGNvbmZpZyByZWdpb24gKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEgKyBpMmNjZmdfb2Zmc2V0LCAxLCAiaTJjY2ZnIikpIHsKKwkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyBJMkMgYnVzIGNvbmZpZyByZWdpb24gIgorCQkJIjB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLCBwaWl4NF9zbWJhICsgaTJjY2ZnX29mZnNldCk7CisJCXJlbGVhc2VfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSk7CisJCXBpaXg0X3NtYmEgPSAwOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpMmNjZmcgPSBpbmJfcChwaWl4NF9zbWJhICsgaTJjY2ZnX29mZnNldCk7CisJcmVsZWFzZV9yZWdpb24ocGlpeDRfc21iYSArIGkyY2NmZ19vZmZzZXQsIDEpOworCisJaWYgKGkyY2NmZyAmIDEpCisJCWRldl9kYmcoJlBJSVg0X2Rldi0+ZGV2LCAiVXNpbmcgSVJRIGZvciBTTUJ1cy5cbiIpOworCWVsc2UKKwkJZGV2X2RiZygmUElJWDRfZGV2LT5kZXYsICJVc2luZyBTTUkjIGZvciBTTUJ1cy5cbiIpOworCisJZGV2X2luZm8oJlBJSVg0X2Rldi0+ZGV2LAorCQkgIlNNQnVzIEhvc3QgQ29udHJvbGxlciBhdCAweCV4LCByZXZpc2lvbiAlZFxuIiwKKwkJIHBpaXg0X3NtYmEsIGkyY2NmZyA+PiA0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBpaXg0X3RyYW5zYWN0aW9uKHZvaWQpCiB7CiAJaW50IHRlbXA7CkBAIC00MjMsNiArNDg3LDggQEAKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjYpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCiAJCSAgICAgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDEwMDBTQikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKKwkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTEwMExEKSB9LAogCXsgMCwgfQogfTsKIApAQCAtNDMzLDcgKzQ5OSwxNCBAQAogewogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBwaWl4NF9zZXR1cChkZXYsIGlkKTsKKwlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJKSAmJgorCSAgICAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMpICYmCisJICAgIChkZXYtPnJldmlzaW9uID49IDB4NDApKQorCQkvKiBiYXNlIGFkZHJlc3MgbG9jYXRpb24gZXRjIGNoYW5nZWQgaW4gU0I4MDAgKi8KKwkJcmV0dmFsID0gcGlpeDRfc2V0dXBfc2I4MDAoZGV2LCBpZCk7CisJZWxzZQorCQlyZXR2YWwgPSBwaWl4NF9zZXR1cChkZXYsIGlkKTsKKwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwppbmRleCA2MGNhOTE3Li4zYzlkNzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCkBAIC0xOTEsNyArMTkxLDggQEAKIAlpMmNfc2V0X2FkYXBkYXRhKGFkYXB0ZXIsIE5VTEwpOwogCS8qIFdlIGFyZW4ndCB0aGF0IHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGlzLi4uICovCiAJaWYgKHJjKQotCQlwcmludGsoImkyYy1wb3dlcm1hYy5jOiBGYWlsZWQgdG8gcmVtb3ZlIGJ1cyAlcyAhXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiaTJjLXBvd2VybWFjLmM6IEZhaWxlZCB0byByZW1vdmUgYnVzICVzICFcbiIsCiAJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggYmRiMWY3NTEuLmMxNDA1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtMjEwLDExICsyMTAsMTIgQEAKIHN0YXRpYyB2b2lkIGkyY19weGFfc2NyZWFtX2JsdWVfbXVyZGVyKHN0cnVjdCBweGFfaTJjICppMmMsIGNvbnN0IGNoYXIgKndoeSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlwcmludGsoImkyYzogZXJyb3I6ICVzXG4iLCB3aHkpOwotCXByaW50aygiaTJjOiBtc2dfbnVtOiAlZCBtc2dfaWR4OiAlZCBtc2dfcHRyOiAlZFxuIiwKKwlwcmludGsoS0VSTl9FUlIgImkyYzogZXJyb3I6ICVzXG4iLCB3aHkpOworCXByaW50ayhLRVJOX0VSUiAiaTJjOiBtc2dfbnVtOiAlZCBtc2dfaWR4OiAlZCBtc2dfcHRyOiAlZFxuIiwKIAkJaTJjLT5tc2dfbnVtLCBpMmMtPm1zZ19pZHgsIGkyYy0+bXNnX3B0cik7Ci0JcHJpbnRrKCJpMmM6IElDUjogJTA4eCBJU1I6ICUwOHhcbiIKLQkgICAgICAgImkyYzogbG9nOiAiLCByZWFkbChfSUNSKGkyYykpLCByZWFkbChfSVNSKGkyYykpKTsKKwlwcmludGsoS0VSTl9FUlIgImkyYzogSUNSOiAlMDh4IElTUjogJTA4eFxuIiwKKwkgICAgICAgcmVhZGwoX0lDUihpMmMpKSwgcmVhZGwoX0lTUihpMmMpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyYzogbG9nOiAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgaTJjLT5pcnFsb2dpZHg7IGkrKykKIAkJcHJpbnRrKCJbJTA4eDolMDh4XSAiLCBpMmMtPmlzcmxvZ1tpXSwgaTJjLT5pY3Jsb2dbaV0pOwogCXByaW50aygiXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZlcnNhdGlsZS5jCmluZGV4IDQ2NzhiYWIuLmZlZGU2MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12ZXJzYXRpbGUuYwpAQCAtMTAyLDcgKzEwMiwxMyBAQAogCWkyYy0+YWxnbyA9IGkyY192ZXJzYXRpbGVfYWxnbzsKIAlpMmMtPmFsZ28uZGF0YSA9IGkyYzsKIAotCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hZGFwKTsKKwlpZiAoZGV2LT5pZCA+PSAwKSB7CisJCS8qIHN0YXRpYyBidXMgbnVtYmVyaW5nICovCisJCWkyYy0+YWRhcC5uciA9IGRldi0+aWQ7CisJCXJldCA9IGkyY19iaXRfYWRkX251bWJlcmVkX2J1cygmaTJjLT5hZGFwKTsKKwl9IGVsc2UKKwkJLyogZHluYW1pYyBidXMgbnVtYmVyaW5nICovCisJCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hZGFwKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpMmMpOwogCQlyZXR1cm4gMDsKQEAgLTE0Niw3ICsxNTIsNyBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfdmVyc2F0aWxlX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KGkyY192ZXJzYXRpbGVfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoaTJjX3ZlcnNhdGlsZV9pbml0KTsKIG1vZHVsZV9leGl0KGkyY192ZXJzYXRpbGVfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQVJNIFZlcnNhdGlsZSBJMkMgYnVzIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggZmJiOTAzMC4uYjZmM2EwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAkJZHJpdmVyLT5zaHV0ZG93bih0b19pMmNfY2xpZW50KGRldikpOwogfQogCi1zdGF0aWMgaW50IGkyY19kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlcjsKIApAQCAtMTY0LDcgKzE2NCw3IEBACiAJcmV0dXJuIGRyaXZlci0+c3VzcGVuZCh0b19pMmNfY2xpZW50KGRldiksIG1lc2cpOwogfQogCi1zdGF0aWMgaW50IGkyY19kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGkyY19kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyOwogCkBAIC0xODcsMTMgKzE4NywxNSBAQAogCWtmcmVlKHRvX2kyY19jbGllbnQoZGV2KSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY2xpZW50X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3Nob3dfY2xpZW50X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNsaWVudC0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3Nob3dfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMlc1xuIiwgSTJDX01PRFVMRV9QUkVGSVgsIGNsaWVudC0+bmFtZSk7CkBAIC0zNjUsOCArMzY3LDcgQEAKICAqIFRoaXMgcmV0dXJucyB0aGUgbmV3IGkyYyBjbGllbnQsIHdoaWNoIHNob3VsZCBiZSBzYXZlZCBmb3IgbGF0ZXIgdXNlIHdpdGgKICAqIGkyY191bnJlZ2lzdGVyX2RldmljZSgpOyBvciBOVUxMIHRvIGluZGljYXRlIGFuIGVycm9yLgogICovCi1zdHJ1Y3QgaTJjX2NsaWVudCAqCi1pMmNfbmV3X2R1bW15KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHJlc3MpCitzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX25ld19kdW1teShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyZXNzKQogewogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0gewogCQlJMkNfQk9BUkRfSU5GTygiZHVtbXkiLCBhZGRyZXNzKSwKQEAgLTQxMyw4ICs0MTQsOCBAQAogCQlpZiAoZGV2aW5mby0+YnVzbnVtID09IGFkYXB0ZXItPm5yCiAJCQkJJiYgIWkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsCiAJCQkJCQkmZGV2aW5mby0+Ym9hcmRfaW5mbykpCi0JCQlwcmludGsoS0VSTl9FUlIgImkyYy1jb3JlOiBjYW4ndCBjcmVhdGUgaTJjJWQtJTA0eFxuIiwKLQkJCQlpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSwKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwKKwkJCQkiQ2FuJ3QgY3JlYXRlIGRldmljZSBhdCAweCUwMnhcbiIsCiAJCQkJZGV2aW5mby0+Ym9hcmRfaW5mby5hZGRyKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZfX2kyY19ib2FyZF9sb2NrKTsKQEAgLTQ1OSw2ICs0NjAsMTEgQEAKIAkJcHJfZGVidWcoIkkyQyBhZGFwdGVyIGRyaXZlciBbJXNdIGZvcmdvdCB0byBzcGVjaWZ5ICIKIAkJCSAicGh5c2ljYWwgZGV2aWNlXG4iLCBhZGFwLT5uYW1lKTsKIAl9CisKKwkvKiBTZXQgZGVmYXVsdCB0aW1lb3V0IHRvIDEgc2Vjb25kIGlmIG5vdCBhbHJlYWR5IHNldCAqLworCWlmIChhZGFwLT50aW1lb3V0ID09IDApCisJCWFkYXAtPnRpbWVvdXQgPSBIWjsKKwogCWRldl9zZXRfbmFtZSgmYWRhcC0+ZGV2LCAiaTJjLSVkIiwgYWRhcC0+bnIpOwogCWFkYXAtPmRldi5yZWxlYXNlID0gJmkyY19hZGFwdGVyX2Rldl9yZWxlYXNlOwogCWFkYXAtPmRldi5jbGFzcyA9ICZpMmNfYWRhcHRlcl9jbGFzczsKQEAgLTU4MSw3ICs1ODcsOCBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsICpfbjsKIAlpbnQgcmVzOwogCi0JLyogUmVtb3ZlIHRoZSBkZXZpY2VzIHdlIGNyZWF0ZWQgb3Vyc2VsdmVzICovCisJLyogUmVtb3ZlIHRoZSBkZXZpY2VzIHdlIGNyZWF0ZWQgb3Vyc2VsdmVzIGFzIHRoZSByZXN1bHQgb2YgaGFyZHdhcmUKKwkgKiBwcm9iaW5nICh1c2luZyBhIGRyaXZlcidzIGRldGVjdCBtZXRob2QpICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsaWVudCwgX24sICZkcml2ZXItPmNsaWVudHMsIGRldGVjdGVkKSB7CiAJCWlmIChjbGllbnQtPmFkYXB0ZXIgPT0gYWRhcHRlcikgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiUmVtb3ZpbmcgJXMgYXQgMHgleFxuIiwKQEAgLTc0OSw2ICs3NTYsOCBAQAogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIgPSBkYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsICpfbjsKIAorCS8qIFJlbW92ZSB0aGUgZGV2aWNlcyB3ZSBjcmVhdGVkIG91cnNlbHZlcyBhcyB0aGUgcmVzdWx0IG9mIGhhcmR3YXJlCisJICogcHJvYmluZyAodXNpbmcgYSBkcml2ZXIncyBkZXRlY3QgbWV0aG9kKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGllbnQsIF9uLCAmZHJpdmVyLT5jbGllbnRzLCBkZXRlY3RlZCkgewogCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJSZW1vdmluZyAlcyBhdCAweCV4XG4iLAogCQkJY2xpZW50LT5uYW1lLCBjbGllbnQtPmFkZHIpOwpAQCAtMTAxMiw3ICsxMDIxLDcgQEAKICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IGVhY2ggbWVzc2FnZSBiZSBzZW50IHRvCiAgKiB0aGUgc2FtZSBzbGF2ZSBhZGRyZXNzLCBhbHRob3VnaCB0aGF0IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlbC4KICAqLwotaW50IGkyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK2ludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNTE5LDggKzE1MjgsNyBAQAogLyogVGhlIFNNQnVzIHBhcnRzICovCiAKICNkZWZpbmUgUE9MWSAgICAoMHgxMDcwVSA8PCAzKQotc3RhdGljIHU4Ci1jcmM4KHUxNiBkYXRhKQorc3RhdGljIHU4IGNyYzgodTE2IGRhdGEpCiB7CiAJaW50IGk7CiAKQEAgLTE5ODQsOSArMTk5Miw5IEBACiAgKiBUaGlzIGV4ZWN1dGVzIGFuIFNNQnVzIHByb3RvY29sIG9wZXJhdGlvbiwgYW5kIHJldHVybnMgYSBuZWdhdGl2ZQogICogZXJybm8gY29kZSBlbHNlIHplcm8gb24gc3VjY2Vzcy4KICAqLwotczMyIGkyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXB0ZXIsIHUxNiBhZGRyLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKK3MzMiBpMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKIAkJICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKQorCQkgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKIHsKIAlzMzIgcmVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwppbmRleCBkMzUxM2I2Li5kNTE2MTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKQEAgLTE5MSwxNyArMTkxLDE4IEBACiAvKioKICAqCWFsaTE1eDNfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKICAqCUBkcml2ZToJdGFyZ2V0IGRldmljZQorICoJQGNtZDogY29tbWFuZAogICoKICAqCVJldHVybnMgMSBpZiB0aGUgRE1BIGNhbm5vdCBiZSBwZXJmb3JtZWQsIHplcm8gb24gc3VjY2Vzcy4KICAqLwogCi1zdGF0aWMgaW50IGFsaTE1eDNfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgYWxpMTV4M19kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlmIChtNTIyOV9yZXZpc2lvbiA8IDB4QzIgJiYgZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7Ci0JCWlmIChycV9kYXRhX2Rpcihkcml2ZS0+aHdpZi0+cnEpKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJCXJldHVybiAxOwkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCiAJfQotCXJldHVybiBpZGVfZG1hX3NldHVwKGRyaXZlKTsKKwlyZXR1cm4gaWRlX2RtYV9zZXR1cChkcml2ZSwgY21kKTsKIH0KIAogLyoqCkBAIC01MDMsMTEgKzUwNCwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBhbGlfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBhbGkxNXgzX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMgYi9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCmluZGV4IDFiYjUwZjQuLjI3NTQ3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJc2V0X3NtY190aW1pbmdzKGNoaXBzZWxlY3QsIGN5Y2xlLCBzZXR1cCwgcHVsc2UsIGRhdGFfZmxvYXQsIHVzZV9pb3JkeSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdDkxX2lkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtMTU2LDExICsxNTYsMTEgQEAKIAlsZW4rKzsKIAogCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwotCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKSBpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCXJlYWRzdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKIAlsZWF2ZV8xNmJpdChjaGlwc2VsZWN0LCBtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgYXQ5MV9pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdDkxX2lkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAlwZGJnKCJjcyAldSBidWYgJXAgbGVuICVkXG4iLCBjaGlwc2VsZWN0LCAgYnVmLCBsZW4pOwogCiAJZW50ZXJfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7Ci0JX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKSBpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCXdyaXRlc3coKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiAJbGVhdmVfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7CiB9CiAKQEAgLTE4NSw1NSArMTg1LDU1IEBACiAJd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJdTggSElISSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfRlRGTEFHX09VVF9EQVRBKSB7CiAJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwogCiAJCWF0OTFfaWRlX291dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCAmZGF0YSwgMik7CiAJfQogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCWlkZV9tbV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQogCQlpZGVfbW1fb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCWlkZV9tbV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJaWRlX21tX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKIAkJaWRlX21tX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJaWRlX21tX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJaWRlX21tX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgYXQ5MV9pZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCWF0OTFfaWRlX2lucHV0X2RhdGEoZHJpdmUsIE5VTEwsICZkYXRhLCAyKTsKQEAgLTI0NCwzMSArMjQ0LDMxIEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCWlkZV9tbV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gaWRlX21tX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQlpZGVfbW1fb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCAxNTRlYzJjLi5kM2E5ZDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC04NiwxMyArODYsMTMgQEAKIAljdHAtPmN1cl9wdHIgPSBhdTF4eHhfZGRtYV9nZXRfbmV4dHB0cl92aXJ0KGRwKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdTF4eHhfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJYXVpZGVfaW5zdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdTF4eHhfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlhdWlkZV9vdXRzdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwpAQCAtMjA5LDIzICsyMDksMTcgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQotc3RhdGljIGludCBhdWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGF1aWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpbnQgaSwgaXN3cml0ZSwgY291bnQgPSAwOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpID0gY21kLT5zZ19uZW50cywgY291bnQgPSAwOworCWludCBpc3dyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpc3dyaXRlID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSk7CiAJLyogU2F2ZSBmb3IgaW50ZXJydXB0IGNvbnRleHQgKi8KIAlhaHdpZi0+ZHJpdmUgPSBkcml2ZTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBmaWxsIHRoZSBkZXNjcmlwdG9ycyAqLwogCXNnID0gaHdpZi0+c2dfdGFibGU7CiAJd2hpbGUgKGkgJiYgc2dfZG1hX2xlbihzZykpIHsKQEAgLTI4NiwxMiArMjgwLDcgQEAKIAogc3RhdGljIGludCBhdWlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoaHdpZi0+c2dfbmVudHMpIHsKLQkJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCQlod2lmLT5zZ19uZW50cyA9IDA7Ci0JfQorCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAxLDE5ICsyOTAsMTAgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBhdWlkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQorc3RhdGljIGludCBhdWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCS8qIGlzc3VlIGNtZCB0byBkcml2ZSAqLwotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNvbW1hbmQsICZpZGVfZG1hX2ludHIsCi0JCQkgICAgKDIqV0FJVF9DTUQpLCBOVUxMKTsKLX0KLQotc3RhdGljIGludCBhdWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQotCWlmICghYXVpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAoYXVpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTM2OSw3ICszNDksNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBhdTF4eHhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGF1aWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGF1aWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGF1aWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGF1aWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBhdWlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gYXVpZGVfZG1hX3Rlc3RfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYnVkZGhhLmMgYi9kcml2ZXJzL2lkZS9idWRkaGEuYwppbmRleCBjNWEzYzllLi5kMDI4Zjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9idWRkaGEuYworKysgYi9kcml2ZXJzL2lkZS9idWRkaGEuYwpAQCAtMTQzLDYgKzE0MywxMSBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBidWRkaGFfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAorfTsKKwogICAgIC8qCiAgICAgICogIFByb2JlIGZvciBhIEJ1ZGRoYSBvciBDYXR3ZWFzZWwgSURFIGludGVyZmFjZQogICAgICAqLwpAQCAtMTcyLDEwICsxNzcsNiBAQAogCQkKIAkJYm9hcmQgPSB6LT5yZXNvdXJjZS5zdGFydDsKIAotLyoKLSAqIEZJWE1FOiB3ZSBub3cgaGF2ZSBzZWxlY3RhYmxlIG1taW8gdi9zIGlvbWlvIHRyYW5zcG9ydHMuCi0gKi8KLQogCQlpZih0eXBlICE9IEJPQVJEX1hTVVJGKSB7CiAJCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihib2FyZCtCVURESEFfQkFTRTEsIDB4ODAwLCAiSURFIikpCiAJCQkJY29udGludWU7CkBAIC0yMjQsNyArMjI1LDcgQEAKIAkJCWh3c1tpXSA9ICZod1tpXTsKIAkJfQogCi0JCWlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworCQlpZGVfaG9zdF9hZGQoJmJ1ZGRoYV9wb3J0X2luZm8sIGh3cywgTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IGFlZWUwMzYuLmJmMGUzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zNzksMTEgKzM3OSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBjbWQ2NHhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gY21kNjR4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBjbWQ2NHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpAQCAtMzkxLDExICszOTEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjQ2X3JldjFfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gY21kNjQ2XzFfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC00MDMsMTEgKzQwMywxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBjbWQ2NDhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gY21kNjQ4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBjbWQ2NDhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTM2LmMgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwppbmRleCA3YTYyZGI3Li5kNWRjZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MzYuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwpAQCAtMjMxLDExICsyMzEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY3M1NTM2X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBjczU1MzZfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNzNTUzNl9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKaW5kZXggYmFjYjExOS4uZjE1M2I5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAogCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogCS5pbml0X2NoaXBzZXQJCT0gZGVsa2luX2NiX2luaXRfY2hpcHNldCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2R0YzIyNzguYyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwppbmRleCA2ODliMmU0Li5jNmIxMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9kdGMyMjc4LmMKKysrIGIvZHJpdmVycy9pZGUvZHRjMjI3OC5jCkBAIC0xMDAsNyArMTAwLDggQEAKIAkJCQkgIElERV9IRkxBR19JT18zMkJJVCB8CiAJCQkJICAvKiBkaXNhbGxvdyAtPmlvXzMyYml0IGNoYW5nZXMgKi8KIAkJCQkgIElERV9IRkxBR19OT19JT18zMkJJVCB8Ci0JCQkJICBJREVfSEZMQUdfTk9fRE1BLAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSB8CisJCQkJICBJREVfSEZMQUdfRFRDMjI3OCwKIAkucGlvX21hc2sJCT0gQVRBX1BJTzQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYyBiL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCmluZGV4IGE2MzhlOTUuLmIzNjhhNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCkBAIC00MCwyOSArNDAsNDggQEAKICAgICAgKiAgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBkcml2ZXJzLgogICAgICAqLwogCi1pbnQgZmFsY29uaWRlX2ludHJfbG9jazsKLUVYUE9SVF9TWU1CT0woZmFsY29uaWRlX2ludHJfbG9jayk7CitzdGF0aWMgaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7CiAKLXN0YXRpYyB2b2lkIGZhbGNvbmlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgZmFsY29uaWRlX3JlbGVhc2VfbG9jayh2b2lkKQoreworCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVnXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZmFsY29uaWRlX2ludHJfbG9jayA9IDA7CisJc3RkbWFfcmVsZWFzZSgpOworfQorCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfZ2V0X2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQoreworCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKKwkJaWYgKGluX2ludGVycnVwdCgpID4gMCkKKwkJCXBhbmljKCJGYWxjb24gSURFIGhhc24ndCBTVC1ETUEgbG9jayBpbiBpbnRlcnJ1cHQiKTsKKwkJc3RkbWFfbG9jayhoYW5kbGVyLCBkYXRhKTsKKwkJZmFsY29uaWRlX2ludHJfbG9jayA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CiAKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIGNtZCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykpCiAJCXJldHVybiBpbnN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCWluc3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19pbnN3X3N3YXB3KCh1MTYgKilkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIGZhbGNvbmlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGZhbGNvbmlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gb3V0c3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0Jb3V0c3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19vdXRzd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCiAvKiBBdGFyaSBoYXMgYSBieXRlLXN3YXBwZWQgSURFIGludGVyZmFjZSAqLwpAQCAtODEsOCArMTAwLDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZmFsY29uaWRlX3BvcnRfaW5mbyA9IHsKKwkuZ2V0X2xvY2sJCT0gZmFsY29uaWRlX2dldF9sb2NrLAorCS5yZWxlYXNlX2xvY2sJCT0gZmFsY29uaWRlX3JlbGVhc2VfbG9jaywKIAkudHBfb3BzCQkJPSAmZmFsY29uaWRlX3RwX29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BIHwgSURFX0hGTEFHX1NFUklBTElaRSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19TRVJJQUxJWkUgfAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGZhbGNvbmlkZV9zZXR1cF9wb3J0cyhod19yZWdzX3QgKmh3KQpAQCAtMTMyLDkgKzE1NSw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWlkZV9nZXRfbG9jayhOVUxMLCBOVUxMKTsKKwlmYWxjb25pZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7CiAJcmMgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCAmZmFsY29uaWRlX3BvcnRfaW5mbywgaHdzKTsKLQlpZGVfcmVsZWFzZV9sb2NrKCk7CisJZmFsY29uaWRlX3JlbGVhc2VfbG9jaygpOwogCiAJaWYgKHJjKQogCQlnb3RvIGVycl9mcmVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZ2F5bGUuYyBiL2RyaXZlcnMvaWRlL2dheWxlLmMKaW5kZXggNTliZDBiZS4uZGM3NzgyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZ2F5bGUuYworKysgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCkBAIC0xMTgsNyArMTE4LDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGdheWxlX3BvcnRfaW5mbyA9IHsKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfU0VSSUFMSVpFIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19TRVJJQUxJWkUgfAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogICAgIC8qCkBAIC0xNjMsOSArMTY1LDYgQEAKIAkgICAgaXJxcG9ydCA9ICh1bnNpZ25lZCBsb25nKVpUV09fVkFERFIoR0FZTEVfSVJRXzEyMDApOwogCSAgICBhY2tfaW50ciA9IGdheWxlX2Fja19pbnRyX2ExMjAwOwogCX0KLS8qCi0gKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtb2RlcyBiZXR3ZWVuIG1taW8gdi9zIGlvbWlvCi0gKi8KIAogCXJlc19zdGFydCA9ICgodW5zaWduZWQgbG9uZylwaHlzX2Jhc2UpICYgfihHQVlMRV9ORVhUX1BPUlQtMSk7CiAJcmVzX24gPSBHQVlMRV9JREVSRUdfU0laRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKaW5kZXggZDNiM2U4Mi4uZGJhZjE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKQEAgLTE0MTgsMTEgKzE0MTgsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgaHB0Mzd4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGhwdDM3NF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaHB0Mzc0X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKQEAgLTE0MzAsMTEgKzE0MzAsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgaHB0MzcwX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBocHQzNzBfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGhwdDM3MF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGhwdDM3MF9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKQEAgLTE0NDIsMTEgKzE0NDIsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgaHB0MzZ4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGhwdDM2Nl9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvaWNzaWRlLmMKaW5kZXggNDE1ZDdlMi4uNTFjZTQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWNzaWRlLmMKQEAgLTMwNywxNSArMzA3LDE0IEBACiAJZW5hYmxlX2RtYShlYy0+ZG1hKTsKIH0KIAotc3RhdGljIGludCBpY3NpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgaWNzaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMgPSBFQ0FSRF9ERVYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaWNzaWRlX3N0YXRlICpzdGF0ZSA9IGVjYXJkX2dldF9kcnZkYXRhKGVjKTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAl1bnNpZ25lZCBpbnQgZG1hX21vZGU7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQogCQlkbWFfbW9kZSA9IERNQV9NT0RFX1dSSVRFOwogCWVsc2UKIAkJZG1hX21vZGUgPSBETUFfTU9ERV9SRUFEOwpAQCAtMzI1LDggKzMyNCw2IEBACiAJICovCiAJQlVHX09OKGRtYV9jaGFubmVsX2FjdGl2ZShlYy0+ZG1hKSk7CiAKLQlod2lmLT5zZ19uZW50cyA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgaW50ZXJydXB0IHJvdXRlZC4KIAkgKi8KQEAgLTM0Niw3ICszNDMsNyBAQAogCSAqIFRlbGwgdGhlIERNQSBlbmdpbmUgYWJvdXQgdGhlIFNHIHRhYmxlIGFuZAogCSAqIGRhdGEgZGlyZWN0aW9uLgogCSAqLwotCXNldF9kbWFfc2coZWMtPmRtYSwgaHdpZi0+c2dfdGFibGUsIGh3aWYtPnNnX25lbnRzKTsKKwlzZXRfZG1hX3NnKGVjLT5kbWEsIGh3aWYtPnNnX3RhYmxlLCBjbWQtPnNnX25lbnRzKTsKIAlzZXRfZG1hX21vZGUoZWMtPmRtYSwgZG1hX21vZGUpOwogCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CkBAIC0zNTQsMTIgKzM1MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGljc2lkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCi17Ci0JLyogaXNzdWUgY21kIHRvIGRyaXZlICovCi0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBpZGVfZG1hX2ludHIsIDIgKiBXQUlUX0NNRCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBpbnQgaWNzaWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtMzgzLDcgKzM3NCw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGljc2lkZV92Nl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWNzaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGljc2lkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpY3NpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWNzaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpY3NpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGljc2lkZV9kbWFfdGVzdF9pcnEsCkBAIC00MTksNiArNDA5LDEwIEBACiAJaHctPmNoaXBzZXQgPSBpZGVfYWNvcm47CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpY3NpZGVfdjVfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogaWNzaWRlX3JlZ2lzdGVyX3Y1KHN0cnVjdCBpY3NpZGVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQogewpAQCAtNDQ1LDcgKzQzOSw3IEBACiAKIAlpY3NpZGVfc2V0dXBfcG9ydHMoJmh3LCBiYXNlLCAmaWNzaWRlX2NhcmRpbmZvX3Y1LCBlYyk7CiAKLQlob3N0ID0gaWRlX2hvc3RfYWxsb2MoTlVMTCwgaHdzKTsKKwlob3N0ID0gaWRlX2hvc3RfYWxsb2MoJmljc2lkZV92NV9wb3J0X2luZm8sIGh3cyk7CiAJaWYgKGhvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTQ1Myw3ICs0NDcsNyBAQAogCiAJZWNhcmRfc2V0X2RydmRhdGEoZWMsIHN0YXRlKTsKIAotCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIE5VTEwsIGh3cyk7CisJcmV0ID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgJmljc2lkZV92NV9wb3J0X2luZm8sIGh3cyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYyBiL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMKaW5kZXggOWU4NWIxZS4uNzhhY2E3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtNGRyaXZlcy5jCkBAIC0yMyw3ICsyMyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpZGVfNGRyaXZlc19wb3J0X2luZm8gPSB7CiAJLnBvcnRfb3BzCQk9ICZpZGVfNGRyaXZlc19wb3J0X29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfU0VSSUFMSVpFIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfU0VSSUFMSVpFIHwgSURFX0hGTEFHX05PX0RNQSB8CisJCQkJICBJREVfSEZMQUdfNERSSVZFUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV80ZHJpdmVzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCmluZGV4IDViNzA0ZjEuLjEyZjQzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJLyogc2VuZCBhbGwgdGFza2ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCiAJZm9yIChpeCA9IDA7IGl4IDwgZ3RmX2NvdW50OyBpeCsrKSB7CiAJCXU4ICpndGYgPSAodTggKikoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7Ci0JCWlkZV90YXNrX3QgdGFzazsKKwkJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogIgogCQkJICJoZXg6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCkBAIC0zMTcsMTEgKzMxNywxMSBAQAogCQl9CiAKIAkJLyogY29udmVydCBHVEYgdG8gdGFza2ZpbGUgKi8KLQkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sIGd0ZiwgUkVHU19QRVJfR1RGKTsKLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJCW1lbWNweSgmY21kLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKLQkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfbm9fZGF0YV90YXNrZmlsZSBmYWlsZWQ6ICV1XG4iLAogCQkJCQlfX2Z1bmNfXywgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggNmFkYzViNC4uMmZiNWQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTMwMiwxNiArMzAyLDE2IEBACiAKIHZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAotCQkJSURFX1RGTEFHX0lOX05TRUNUOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8CisJCSAgICAgICBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJmNtZCk7CiAKLQkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKLQkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOworCSpiY291bnQgPSAoY21kLnRmLmxiYWggPDwgOCkgfCBjbWQudGYubGJhbTsKKwkqaXJlYXNvbiA9IGNtZC50Zi5uc2VjdCAmIDM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOwogCkBAIC0zMzYsMTEgKzMzNiw2IEBACiAJdGltZW91dCA9IChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkgPyBXQUlUX0ZMT1BQWV9DTUQKIAkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAotCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX1RJTUVET1VUKSB7Ci0JCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCiAJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKQEAgLTM2Miw2ICszNTcsOCBAQAogCiAJLyogTm8gbW9yZSBpbnRlcnJ1cHRzICovCiAJaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgeworCQlpbnQgdXB0b2RhdGU7CisKIAkJZGVidWdfbG9nKCJQYWNrZXQgY29tbWFuZCBjb21wbGV0ZWQsICVkIGJ5dGVzIHRyYW5zZmVycmVkXG4iLAogCQkJICBwYy0+eGZlcnJlZCk7CiAKQEAgLTQwMCw3ICszOTcsMjIgQEAKIAkJCWRzYyA9IDE7CiAKIAkJLyogQ29tbWFuZCBmaW5pc2hlZCAtIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICovCi0JCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgZHNjKTsKKwkJdXB0b2RhdGUgPSBkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIGRzYyk7CisKKwkJaWYgKHVwdG9kYXRlID09IDApCisJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKworCQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAwOworCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiB1cHRvZGF0ZSA8PSAwKSB7CisJCQkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKKwkJCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCQl9CisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIHVwdG9kYXRlID8gMCA6IC1FSU8sCisJCQkJCWlkZV9ycV9ieXRlcyhycSkpOworCQl9CiAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KQEAgLTQ1OCw3ICs0NzAsOCBAQAogCiAJCS8qIEZJWE1FOiBkb24ndCBkbyBwYXJ0aWFsIGNvbXBsZXRpb25zICovCiAJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgZG9uZSA+PiA5KTsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwKKwkJCQkJZG9uZSA/IGRvbmUgOiBpZGVfcnFfYnl0ZXMocnEpKTsKIAl9IGVsc2UKIAkJeGZlcmZ1bmMoZHJpdmUsIE5VTEwsIHBjLT5jdXJfcG9zLCBiY291bnQpOwogCkBAIC00NzAsMzkgKzQ4MywzMiBAQAogCQkgIHJxLT5jbWRbMF0sIGJjb3VudCk7CiBuZXh0X2lycToKIAkvKiBBbmQgc2V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhZ2FpbiAqLwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgaWRlX3BjX2ludHIsIHRpbWVvdXQsIE5VTEwpOworCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgaWRlX3BjX2ludHIsIHRpbWVvdXQpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50KQorc3RhdGljIHZvaWQgaWRlX2luaXRfcGFja2V0X2NtZChzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1MzIgdGZfZmxhZ3MsCisJCQkJdTE2IGJjb3VudCwgdTggZG1hKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190IHRhc2s7Ci0JdTggZG1hID0gZHJpdmUtPmRtYTsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKLQkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOwotCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCi0JdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKLQl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKLQotCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7Ci0JaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwotCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKKwljbWQtPnByb3RvY29sICA9IGRtYSA/IEFUQVBJX1BST1RfRE1BIDogQVRBUElfUFJPVF9QSU87CisJY21kLT50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUggfCBJREVfVEZMQUdfT1VUX0xCQU0gfAorCQkJIElERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOworCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfUEFDS0VUOworCWNtZC0+dGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCisJY21kLT50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKKwljbWQtPnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKIH0KIAogc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9OU0VDVDsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9OU0VDVDsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCXJldHVybiB0YXNrLnRmLm5zZWN0ICYgMzsKKwlyZXR1cm4gY21kLnRmLm5zZWN0ICYgMzsKIH0KIAogc3RhdGljIHU4IGlkZV93YWl0X2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBpcmVhc29uKQpAQCAtNTk3LDExICs2MDMsMTMgQEAKIAkJfQogCX0KIAorCWh3aWYtPmV4cGlyeSA9IGV4cGlyeTsKKwogCS8qIFNldCB0aGUgaW50ZXJydXB0IHJvdXRpbmUgKi8KIAlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsCiAJCQkoZGV2X2lzX2lkZWNkKGRyaXZlKSA/IGRyaXZlLT5pcnFfaGFuZGxlcgogCQkJCQkgICAgIDogaWRlX3BjX2ludHIpLAotCQkJdGltZW91dCwgZXhwaXJ5KTsKKwkJCXRpbWVvdXQpOwogCiAJLyogQmVnaW4gRE1BLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZGV2X2lzX2lkZWNkKGRyaXZlKSkgewpAQCAtNjIxLDIzICs2MjksMzAgQEAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLWlkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQoraWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyAqZG1hX29wcyA9IGh3aWYtPmRtYV9vcHM7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkgPSBOVUxMOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCXUzMiB0Zl9mbGFnczsKIAl1MTYgYmNvdW50OworCXU4IGRycV9pbnQgPSAhIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCk7CiAKIAlpZiAoZGV2X2lzX2lkZWNkKGRyaXZlKSkgewogCQl0Zl9mbGFncyA9IElERV9URkxBR19PVVRfTlNFQ1QgfCBJREVfVEZMQUdfT1VUX0xCQUw7Ci0JCWJjb3VudCA9IGlkZV9jZF9nZXRfeGZlcmxlbihod2lmLT5ycSk7CisJCWJjb3VudCA9IGlkZV9jZF9nZXRfeGZlcmxlbihycSk7CiAJCWV4cGlyeSA9IGlkZV9jZF9leHBpcnk7CiAJCXRpbWVvdXQgPSBBVEFQSV9XQUlUX1BDOwogCi0JCWlmIChkcml2ZS0+ZG1hKQotCQkJZHJpdmUtPmRtYSA9ICFod2lmLT5kbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpOworCQlpZiAoZHJpdmUtPmRtYSkgeworCQkJaWYgKGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIGNtZCkpCisJCQkJZHJpdmUtPmRtYSA9ICFkbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUsIGNtZCk7CisJCQllbHNlCisJCQkJZHJpdmUtPmRtYSA9IDA7CisJCX0KIAl9IGVsc2UgewogCQlwYyA9IGRyaXZlLT5wYzsKIApAQCAtNjU2LDggKzY3MSwxMiBAQAogCQl9CiAKIAkJaWYgKChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykgJiYKLQkJICAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKQotCQkJZHJpdmUtPmRtYSA9ICFod2lmLT5kbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpOworCQkgICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpIHsKKwkJCWlmIChpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBjbWQpKQorCQkJCWRyaXZlLT5kbWEgPSAhZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpOworCQkJZWxzZQorCQkJCWRyaXZlLT5kbWEgPSAwOworCQl9CiAKIAkJaWYgKCFkcml2ZS0+ZG1hKQogCQkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9PSzsKQEAgLTY2NiwxOCArNjg1LDE4IEBACiAJCQkJCQkgICAgICAgOiBXQUlUX1RBUEVfQ01EOwogCX0KIAotCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCk7CisJaWRlX2luaXRfcGFja2V0X2NtZChjbWQsIHRmX2ZsYWdzLCBiY291bnQsIGRyaXZlLT5kbWEpOwogCi0JLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovCi0JaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CisJKHZvaWQpZG9fcndfdGFza2ZpbGUoZHJpdmUsIGNtZCk7CisKKwlpZiAoZHJxX2ludCkgewogCQlpZiAoZHJpdmUtPmRtYSkKIAkJCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBBVEFfQ01EX1BBQ0tFVCwgaWRlX3RyYW5zZmVyX3BjLAotCQkJCSAgICB0aW1lb3V0LCBleHBpcnkpOwotCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JfSBlbHNlIHsKLQkJaWRlX2V4ZWN1dGVfcGt0X2NtZChkcml2ZSk7Ci0JCXJldHVybiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUpOworCQlod2lmLT5leHBpcnkgPSBleHBpcnk7CiAJfQorCisJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBpZGVfdHJhbnNmZXJfcGMsIHRpbWVvdXQpOworCisJcmV0dXJuIGRycV9pbnQgPyBpZGVfc3RhcnRlZCA6IGlkZV90cmFuc2Zlcl9wYyhkcml2ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaXNzdWVfcGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCAyMTc3Y2QxLi4zZjYzMGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMTAwLDggKzEwMCw3IEBACiB7CiAJaW50IGxvZyA9IDA7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzLCBzZW5zZV9rZXk6IDB4JXhcbiIsIF9fZnVuY19fLAotCQkgICAgICBzZW5zZS0+c2Vuc2Vfa2V5KTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJzZW5zZV9rZXk6IDB4JXgiLCBzZW5zZS0+c2Vuc2Vfa2V5KTsKIAogCWlmICghc2Vuc2UgfHwgIXJxIHx8IChycS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTEsMTMgKzE1MCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgYmlvX3NlY3RvcnM7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzLCBlcnJvcl9jb2RlOiAweCV4LCAiCi0JCQkic2Vuc2Vfa2V5OiAweCV4XG4iLCBfX2Z1bmNfXywgc2Vuc2UtPmVycm9yX2NvZGUsCi0JCQlzZW5zZS0+c2Vuc2Vfa2V5KTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJlcnJvcl9jb2RlOiAweCV4LCBzZW5zZV9rZXk6IDB4JXgiLAorCQkJCSAgICAgc2Vuc2UtPmVycm9yX2NvZGUsIHNlbnNlLT5zZW5zZV9rZXkpOwogCiAJaWYgKGZhaWxlZF9jb21tYW5kKQotCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICIlczogZmFpbGVkIGNtZDogMHgleFxuIiwKLQkJCQlfX2Z1bmNfXywgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZCBjbWQ6IDB4JXgiLAorCQkJCQkgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCiAJaWYgKCFjZHJvbV9sb2dfc2Vuc2UoZHJpdmUsIGZhaWxlZF9jb21tYW5kLCBzZW5zZSkpCiAJCXJldHVybjsKQEAgLTIxNSw5ICsyMTMsOSBAQAogCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0ICpmYWlsZWRfY29tbWFuZCkKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbwkJPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxCQk9ICZpbmZvLT5yZXF1ZXN0X3NlbnNlX3JlcXVlc3Q7CisJc3RydWN0IHJlcXVlc3QgKnJxCQk9ICZkcml2ZS0+cmVxdWVzdF9zZW5zZV9ycTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJlbnRlciIpOwogCiAJaWYgKHNlbnNlID09IE5VTEwpCiAJCXNlbnNlID0gJmluZm8tPnNlbnNlX2RhdGE7CkBAIC0yMzksOCArMjM3LDggQEAKIAlycS0+YnVmZmVyID0gKHZvaWQgKikgZmFpbGVkX2NvbW1hbmQ7CiAKIAlpZiAoZmFpbGVkX2NvbW1hbmQpCi0JCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXhcbiIsCi0JCQkgICAgICBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkX2NtZDogMHgleCIsCisJCQkJCSAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CiAKIAlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOwogCkBAIC0yNTIsOSArMjUwLDggQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAJaW50IG5zZWN0b3JzID0gcnEtPmhhcmRfY3VyX3NlY3RvcnM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGNtZDogMHgleCwgdXB0b2RhdGU6IDB4JXgsICIKLQkJICAgICAgIm5zZWN0b3JzOiAlZFxuIiwgX19mdW5jX18sIHJxLT5jbWRbMF0sIHVwdG9kYXRlLAotCQkgICAgICBuc2VjdG9ycyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJjbWQ6IDB4JXgsIHVwdG9kYXRlOiAweCV4LCBuc2VjdG9yczogJWQiLAorCQkJCSAgICBycS0+Y21kWzBdLCB1cHRvZGF0ZSwgbnNlY3RvcnMpOwogCiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSAmJiB1cHRvZGF0ZSkgewogCQkvKgpAQCAtMjc1LDggKzI3Miw4IEBACiAJCQkgKiBub3cgZW5kIHRoZSBmYWlsZWQgcmVxdWVzdAogCQkJICovCiAJCQlpZiAoYmxrX2ZzX3JlcXVlc3QoZmFpbGVkKSkgewotCQkJCWlmIChpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoZHJpdmUsIGZhaWxlZCwgMCwKLQkJCQkJCWZhaWxlZC0+aGFyZF9ucl9zZWN0b3JzKSkKKwkJCQlpZiAoaWRlX2VuZF9ycShkcml2ZSwgZmFpbGVkLCAtRUlPLAorCQkJCQkJZmFpbGVkLT5oYXJkX25yX3NlY3RvcnMgPDwgOSkpCiAJCQkJCUJVRygpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoYmxrX2VuZF9yZXF1ZXN0KGZhaWxlZCwgLUVJTywKQEAgLTI5NSwxMCArMjkyLDEzIEBACiAJaWYgKCFuc2VjdG9ycykKIAkJbnNlY3RvcnMgPSAxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJFeGl0ICVzLCB1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkXG4iLAotCQkgICAgICBfX2Z1bmNfXywgdXB0b2RhdGUsIG5zZWN0b3JzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgInVwdG9kYXRlOiAweCV4LCBuc2VjdG9yczogJWQiLAorCQkJCSAgICB1cHRvZGF0ZSwgbnNlY3RvcnMpOwogCi0JaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnNlY3RvcnMpOworCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiB1cHRvZGF0ZSA8PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJcnEtPmVycm9ycyA9IC1FSU87CisKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIHVwdG9kYXRlID8gMCA6IC1FSU8sIG5zZWN0b3JzIDw8IDkpOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9zdGF0dXNfbm9fc2Vuc2UoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0KQpAQCAtMzM4LDkgKzMzOCwxMCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICIlczogc3RhdDogMHgleCwgZ29vZF9zdGF0OiAweCV4LCAiCi0JCSAgICAgICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgsIGVycjogMHgleFxuIiwKLQkJICAgICAgX19mdW5jX18sIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBlcnIpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInN0YXQ6IDB4JXgsIGdvb2Rfc3RhdDogMHgleCwgY21kWzBdOiAweCV4LCAiCisJCQkJICAicnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXgiLAorCQkJCSAgc3RhdCwgZ29vZF9zdGF0LCBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsCisJCQkJICBlcnIpOwogCiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSkgewogCQkvKgpAQCAtNTMwLDggKzUzMSw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzLCBpcmVhc29uOiAweCV4LCBydzogMHgleFxuIiwKLQkJICAgICAgX19mdW5jX18sIGlyZWFzb24sIHJ3KTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImlyZWFzb246IDB4JXgsIHJ3OiAweCV4IiwgaXJlYXNvbiwgcncpOwogCiAJLyoKIAkgKiBpcmVhc29uID09IDA6IHRoZSBkcml2ZSB3YW50cyB0byByZWNlaXZlIGRhdGEgZnJvbSB1cwpAQCAtNTcyLDcgKzU3Miw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2NkX2NoZWNrX3RyYW5zZmVyX3NpemUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbGVuKQogewotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgbGVuOiAlZFxuIiwgX19mdW5jX18sIGxlbik7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJsZW46ICVkIiwgbGVuKTsKIAogCWlmICgobGVuICUgU0VDVE9SX1NJWkUpID09IDApCiAJCXJldHVybiAwOwpAQCAtNTk0LDggKzU5NCw3IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzOiBycS0+Y21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywKLQkJICAgICAgcnEtPmNtZF9mbGFncyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAicnEtPmNtZF9mbGFnczogMHgleCIsIHJxLT5jbWRfZmxhZ3MpOwogCiAJaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKSB7CiAJCXVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX2ZyYW1lID0KQEAgLTYzOSw3ICs2MzgsNyBAQAogc3RhdGljIHZvaWQgaWRlX2NkX3Jlc3RvcmVfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlmIChycS0+YnVmZmVyICE9IGJpb19kYXRhKHJxLT5iaW8pKSB7CiAJCXNlY3Rvcl90IG4gPQpAQCAtNjU4LDggKzY1Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleFxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAicnEtPmNtZFswXTogMHgleCIsIHJxLT5jbWRbMF0pOwogCiAJLyoKIAkgKiBTb21lIG9mIHRoZSB0cmFpbGluZyByZXF1ZXN0IHNlbnNlIGZpZWxkcyBhcmUgb3B0aW9uYWwsCkBAIC02ODYsOSArNjg0LDkgQEAKIAlpZiAoIXNlbnNlKQogCQlzZW5zZSA9ICZsb2NhbF9zZW5zZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIGNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKLQkJICAgICAgInRpbWVvdXQ6ICVkLCBjbWRfZmxhZ3M6IDB4JXhcbiIsIF9fZnVuY19fLCBjbWRbMF0sIHdyaXRlLAotCQkgICAgICB0aW1lb3V0LCBjbWRfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgImNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsIHRpbWVvdXQ6ICVkLCAiCisJCQkJICAiY21kX2ZsYWdzOiAweCV4IiwKKwkJCQkgIGNtZFswXSwgd3JpdGUsIHRpbWVvdXQsIGNtZF9mbGFncyk7CiAKIAkvKiBzdGFydCBvZiByZXRyeSBsb29wICovCiAJZG8gewpAQCAtNzcyLDggKzc3MCw4IEBACiAJdTE2IGxlbjsKIAl1OCBpcmVhc29uOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiY21kWzBdOiAweCV4LCB3cml0ZTogMHgleCIsCisJCQkJICBycS0+Y21kWzBdLCB3cml0ZSk7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCiAJZG1hID0gZHJpdmUtPmRtYTsKQEAgLTc5NSwxMCArNzkzLDExIEBACiAJCWlmIChkbWFfZXJyb3IpCiAJCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIGVycm9yIiwgc3RhdCk7CiAJCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOworCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBycS0+bnJfc2VjdG9ycworCQkJCT8gKHJxLT5ucl9zZWN0b3JzIDw8IDkpIDogaWRlX3JxX2J5dGVzKHJxKSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQyAmJiAhcnEtPmJpbykgewotCQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAxKTsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgNTEyKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlnb3RvIGVuZF9yZXF1ZXN0OwpAQCAtODEwLDggKzgwOSw4IEBACiAJaWYgKHRoaXNsZW4gPiBsZW4pCiAJCXRoaXNsZW4gPSBsZW47CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICIlczogRFJROiBzdGF0OiAweCV4LCB0aGlzbGVuOiAlZFxuIiwKLQkJICAgICAgX19mdW5jX18sIHN0YXQsIHRoaXNsZW4pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkRSUTogc3RhdDogMHgleCwgdGhpc2xlbjogJWQiLAorCQkJCSAgc3RhdCwgdGhpc2xlbik7CiAKIAkvKiBJZiBEUlEgaXMgY2xlYXIsIHRoZSBjb21tYW5kIGhhcyBjb21wbGV0ZWQuICovCiAJaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgewpAQCAtODc2LDggKzg3NSw5IEBACiAJCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhOwogCX0KIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIiVzOiBkYXRhIHRyYW5zZmVyLCBycS0+Y21kX3R5cGU6IDB4JXgsICIKLQkJICAgICAgImlyZWFzb246IDB4JXhcbiIsIF9fZnVuY19fLCBycS0+Y21kX3R5cGUsIGlyZWFzb24pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgImRhdGEgdHJhbnNmZXIsIHJxLT5jbWRfdHlwZTogMHgleCwgIgorCQkJCSAgImlyZWFzb246IDB4JXgiLAorCQkJCSAgcnEtPmNtZF90eXBlLCBpcmVhc29uKTsKIAogCS8qIHRyYW5zZmVyIGRhdGEgKi8KIAl3aGlsZSAodGhpc2xlbiA+IDApIHsKQEAgLTk1OSw3ICs5NTksOCBAQAogCQkJZXhwaXJ5ID0gaWRlX2NkX2V4cGlyeTsKIAl9CiAKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGNkcm9tX25ld3BjX2ludHIsIHRpbWVvdXQsIGV4cGlyeSk7CisJaHdpZi0+ZXhwaXJ5ID0gZXhwaXJ5OworCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgY2Ryb21fbmV3cGNfaW50ciwgdGltZW91dCk7CiAJcmV0dXJuIGlkZV9zdGFydGVkOwogCiBlbmRfcmVxdWVzdDoKQEAgLTk4OCw5ICs5ODksOSBAQAogCXVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX2ZyYW1lID0KIAkJcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKLQkJICAgICAgInNlY3NfcGVyX2ZyYW1lOiAldVxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHdyaXRlLCBzZWN0b3JzX3Blcl9mcmFtZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAicnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKKwkJCQkgICJzZWNzX3Blcl9mcmFtZTogJXUiLAorCQkJCSAgcnEtPmNtZFswXSwgd3JpdGUsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKIAogCWlmICh3cml0ZSkgewogCQkvKiBkaXNrIGhhcyBiZWNvbWUgd3JpdGUgcHJvdGVjdGVkICovCkBAIC0xMDI2LDkgKzEwMjcsOCBAQAogc3RhdGljIHZvaWQgY2Ryb21fZG9fYmxvY2tfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCi0JCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXhcbiIsIF9fZnVuY19fLCBycS0+Y21kWzBdLAotCQkgICAgICBycS0+Y21kX3R5cGUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgInJxLT5jbWRbMF06IDB4JXgsIHJxLT5jbWRfdHlwZTogMHgleCIsCisJCQkJICBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUpOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CkBAIC0xMDY3LDEwICsxMDY3LDEzIEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJCQlzZWN0b3JfdCBibG9jaykKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCi0JCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXgsIGJsb2NrOiAlbGx1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAotCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJjbWQ6IDB4JXgsIGJsb2NrOiAlbGx1IiwKKwkJCQkgIHJxLT5jbWRbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOworCisJaWYgKGRyaXZlLT5kZWJ1Z19tYXNrICYgSURFX0RCR19SUSkKKwkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGVfY2RfZG9fcmVxdWVzdCIpOwogCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlpZiAoY2Ryb21fc3RhcnRfcncoZHJpdmUsIHJxKSA9PSBpZGVfc3RvcHBlZCkKQEAgLTEwOTQsNyArMTA5NywxNCBAQAogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKworCWlmIChycV9kYXRhX2RpcihycSkpCisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisKKwljbWQucnEgPSBycTsKKworCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsICZjbWQpOwogfQogCiAvKgpAQCAtMTExOSw3ICsxMTI5LDcgQEAKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSA9ICZpbmZvLT5kZXZpbmZvOwogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIAljbWRbMF0gPSBHUENNRF9URVNUX1VOSVRfUkVBRFk7CkBAIC0xMTQ3LDcgKzExNTcsNyBAQAogCXVuc2lnbmVkIGxlbiA9IHNpemVvZihjYXBidWYpOwogCXUzMiBibG9ja2xlbjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIAljbWRbMF0gPSBHUENNRF9SRUFEX0NEVkRfQ0FQQUNJVFk7CkBAIC0xMTc5LDggKzExODksOCBAQAogCSpjYXBhY2l0eSA9IDEgKyBiZTMyX3RvX2NwdShjYXBidWYubGJhKTsKIAkqc2VjdG9yc19wZXJfZnJhbWUgPSBibG9ja2xlbiA+PiBTRUNUT1JfQklUUzsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIiVzOiBjYXA6ICVsdSwgc2VjdG9yc19wZXJfZnJhbWU6ICVsdVxuIiwKLQkJICAgICAgX19mdW5jX18sICpjYXBhY2l0eSwgKnNlY3RvcnNfcGVyX2ZyYW1lKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJjYXA6ICVsdSwgc2VjdG9yc19wZXJfZnJhbWU6ICVsdSIsCisJCQkJICAgICAqY2FwYWNpdHksICpzZWN0b3JzX3Blcl9mcmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExOTEsNyArMTIwMSw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBjbWRbQkxLX01BWF9DREJdOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJbWVtc2V0KGNtZCwgMCwgQkxLX01BWF9DREIpOwogCkBAIC0xMjIxLDcgKzEyMzEsNyBAQAogCWxvbmcgbGFzdF93cml0dGVuOwogCXVuc2lnbmVkIGxvbmcgc2VjdG9yc19wZXJfZnJhbWUgPSBTRUNUT1JTX1BFUl9GUkFNRTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlmICh0b2MgPT0gTlVMTCkgewogCQkvKiB0cnkgdG8gYWxsb2NhdGUgc3BhY2UgKi8KQEAgLTEzODMsNyArMTM5Myw3IEBACiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlpbnQgc3RhdCwgYXR0ZW1wdHMgPSAzLCBzaXplID0gQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfU0laRTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0ZVTExfQ0FQU19QQUdFKSA9PSAwKQogCQlzaXplIC09IEFUQVBJX0NBUEFCSUxJVElFU19QQUdFX1BBRF9TSVpFOwpAQCAtMTQwMyw3ICsxNDEzLDcgQEAKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqY2QgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJdTE2IGN1cnNwZWVkLCBtYXhzcGVlZDsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTEVfU1BFRURfRklFTERTKSB7CiAJCWN1cnNwZWVkID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmWzggKyAxNF0pOwpAQCAtMTQxMyw4ICsxNDIzLDggQEAKIAkJbWF4c3BlZWQgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDhdKTsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY3Vyc3BlZWQ6ICV1LCBtYXhzcGVlZDogJXVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBjdXJzcGVlZCwgbWF4c3BlZWQpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgImN1cnNwZWVkOiAldSwgbWF4c3BlZWQ6ICV1IiwKKwkJCQkgICAgIGN1cnNwZWVkLCBtYXhzcGVlZCk7CiAKIAljZC0+Y3VycmVudF9zcGVlZCA9IChjdXJzcGVlZCArICgxNzYvMikpIC8gMTc2OwogCWNkLT5tYXhfc3BlZWQgPSAobWF4c3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKQEAgLTE0NDgsNyArMTQ1OCw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpkZXZpbmZvID0gJmluZm8tPmRldmluZm87CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBuc2xvdHM6ICVkXG4iLCBfX2Z1bmNfXywgbnNsb3RzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJuc2xvdHM6ICVkIiwgbnNsb3RzKTsKIAogCWRldmluZm8tPm9wcyA9ICZpZGVfY2Ryb21fZG9wczsKIAlkZXZpbmZvLT5zcGVlZCA9IGluZm8tPmN1cnJlbnRfc3BlZWQ7CkBAIC0xNDcxLDkgKzE0ODEsOCBAQAogCW1lY2h0eXBlX3QgbWVjaHR5cGU7CiAJaW50IG5zbG90cyA9IDE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBkcml2ZS0+bWVkaWE6IDB4JXgsICIKLQkJICAgICAgImRyaXZlLT5hdGFwaV9mbGFnczogMHglbHhcbiIsIF9fZnVuY19fLCBkcml2ZS0+bWVkaWEsCi0JCSAgICAgIGRyaXZlLT5hdGFwaV9mbGFncyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAibWVkaWE6IDB4JXgsIGF0YXBpX2ZsYWdzOiAweCVseCIsCisJCQkJICAgICBkcml2ZS0+bWVkaWEsIGRyaXZlLT5hdGFwaV9mbGFncyk7CiAKIAljZGktPm1hc2sgPSAoQ0RDX0NEX1IgfCBDRENfQ0RfUlcgfCBDRENfRFZEIHwgQ0RDX0RWRF9SIHwKIAkJICAgICBDRENfRFZEX1JBTSB8IENEQ19TRUxFQ1RfRElTQyB8IENEQ19QTEFZX0FVRElPIHwKQEAgLTE3NTQsNyArMTc2Myw3IEBACiAJY2hhciAqZndfcmV2ID0gKGNoYXIgKikmaWRbQVRBX0lEX0ZXX1JFVl07CiAJaW50IG5zbG90czsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJlbnRlciIpOwogCiAJYmxrX3F1ZXVlX3ByZXBfcnEoZHJpdmUtPnF1ZXVlLCBpZGVfY2Ryb21fcHJlcF9mbik7CiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoZHJpdmUtPnF1ZXVlLCAzMSk7CkBAIC0xNzk3LDcgKzE4MDYsNyBAQAogewogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGluZm8tPmRyaXZlcik7CiAJZGV2aWNlX2RlbCgmaW5mby0+ZGV2KTsKQEAgLTE4MTUsNyArMTgyNCw3IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gaW5mby0+ZHJpdmU7CiAJc3RydWN0IGdlbmRpc2sgKmcgPSBpbmZvLT5kaXNrOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJa2ZyZWUoaW5mby0+dG9jKTsKIAlpZiAoZGV2aW5mby0+aGFuZGxlID09IGRyaXZlKQpAQCAtMTgzOSw3ICsxODQ4LDYgQEAKIAkucmVtb3ZlCQkJPSBpZGVfY2RfcmVtb3ZlLAogCS52ZXJzaW9uCQk9IElERUNEX1ZFUlNJT04sCiAJLmRvX3JlcXVlc3QJCT0gaWRlX2NkX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZV9lbmRfcmVxdWVzdCwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvY19lbnRyaWVzCQk9IGlkZV9jZF9wcm9jX2VudHJpZXMsCiAJLnByb2NfZGV2c2V0cwkJPSBpZGVfY2RfcHJvY19kZXZzZXRzLApAQCAtMTk3NCw5ICsxOTgyLDggQEAKIAlzdHJ1Y3QgZ2VuZGlzayAqZzsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkNhbGwgJXMsIGRyaXZlLT5kcml2ZXJfcmVxOiAlcywgIgotCQkgICAgICAiZHJpdmUtPm1lZGlhOiAweCV4XG4iLCBfX2Z1bmNfXywgZHJpdmUtPmRyaXZlcl9yZXEsCi0JCSAgICAgIGRyaXZlLT5tZWRpYSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiZHJpdmVyX3JlcTogJXMsIG1lZGlhOiAweCV4IiwKKwkJCQkgICAgIGRyaXZlLT5kcml2ZXJfcmVxLCBkcml2ZS0+bWVkaWEpOwogCiAJaWYgKCFzdHJzdHIoImlkZS1jZHJvbSIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1jZC5oCmluZGV4IGM4NzhiZmMuLjFkOTcxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5oCkBAIC0xMSw3ICsxMSw3IEBACiAjZGVmaW5lIElERUNEX0RFQlVHX0xPRwkJMAogCiAjaWYgSURFQ0RfREVCVUdfTE9HCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncykKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCAjIyBhcmdzKQogI2Vsc2UKICNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKQEAgLTkxLDggKzkxLDYgQEAKIAkgICBvbiB0aGlzIGRldmljZS4gKi8KIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZV9kYXRhOwogCi0Jc3RydWN0IHJlcXVlc3QgcmVxdWVzdF9zZW5zZV9yZXF1ZXN0OwotCiAJdTggbWF4X3NwZWVkOwkJLyogTWF4IHNwZWVkIG9mIHRoZSBkcml2ZS4gKi8KIAl1OCBjdXJyZW50X3NwZWVkOwkvKiBDdXJyZW50IHNwZWVkIG9mIHRoZSBkcml2ZS4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9pZGUtY3MuYwppbmRleCBmNTAyMTBmLi45ZTQ3ZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY3MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY3MuYwpAQCAtMTU0LDYgKzE1NCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlY3NfcG9ydF9pbmZvID0gewogCS5wb3J0X29wcwkJPSAmaWRlY3NfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogc3RhdGljIHN0cnVjdCBpZGVfaG9zdCAqaWRlY3NfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBjdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwppbmRleCA3YzM5NTM0Li41YmY5NThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKQEAgLTE4Myw4ICsxODMsNiBAQAogCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwogCWlmIChlcnIpCiAJCXJxLT5lcnJvcnMgPSBlcnI7Ci0JZWxzZQotCQllcnIgPSAxOwotCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciwgaWRlX3JxX2J5dGVzKHJxKSk7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggODA2NzYwZC4uY2E5MzRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MywzMyArNTIsMjYgQEAKIAlBVEFfQ01EX1dSSVRFX0VYVCwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBpZGVfZGF0YV9waGFzZXNbXSA9IHsKLQlUQVNLRklMRV9NVUxUSV9JTiwKLQlUQVNLRklMRV9NVUxUSV9PVVQsCi0JVEFTS0ZJTEVfSU4sCi0JVEFTS0ZJTEVfT1VULAotCVRBU0tGSUxFX0lOX0RNQSwKLQlUQVNLRklMRV9PVVRfRE1BLAotfTsKLQotc3RhdGljIHZvaWQgaWRlX3RmX3NldF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrLCB1OCBkbWEpCitzdGF0aWMgdm9pZCBpZGVfdGZfc2V0X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IGRtYSkKIHsKIAl1OCBpbmRleCwgbGJhNDgsIHdyaXRlOwogCi0JbGJhNDggPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMiA6IDA7Ci0Jd3JpdGUgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpID8gMSA6IDA7CisJbGJhNDggPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAyIDogMDsKKwl3cml0ZSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAwOwogCi0JaWYgKGRtYSkKKwlpZiAoZG1hKSB7CisJCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9ETUE7CiAJCWluZGV4ID0gODsKLQllbHNlCi0JCWluZGV4ID0gZHJpdmUtPm11bHRfY291bnQgPyAwIDogNDsKKwl9IGVsc2UgeworCQljbWQtPnByb3RvY29sID0gQVRBX1BST1RfUElPOworCQlpZiAoZHJpdmUtPm11bHRfY291bnQpIHsKKwkJCWNtZC0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX01VTFRJX1BJTzsKKwkJCWluZGV4ID0gMDsKKwkJfSBlbHNlCisJCQlpbmRleCA9IDQ7CisJfQogCi0JdGFzay0+dGYuY29tbWFuZCA9IGlkZV9yd19jbWRzW2luZGV4ICsgbGJhNDggKyB3cml0ZV07Ci0KLQlpZiAoZG1hKQotCQlpbmRleCA9IDg7IC8qIGZpeHVwIGluZGV4ICovCi0KLQl0YXNrLT5kYXRhX3BoYXNlID0gaWRlX2RhdGFfcGhhc2VzW2luZGV4IC8gMiArIHdyaXRlXTsKKwljbWQtPnRmLmNvbW1hbmQgPSBpZGVfcndfY21kc1tpbmRleCArIGxiYTQ4ICsgd3JpdGVdOwogfQogCiAvKgpAQCAtOTMsOCArODUsOCBAQAogCXUxNiBuc2VjdG9ycwkJPSAodTE2KXJxLT5ucl9zZWN0b3JzOwogCXU4IGxiYTQ4CQk9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpOwogCXU4IGRtYQkJCT0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwotCWlkZV90YXNrX3QJCXRhc2s7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZQkqdGYgPSAmdGFzay50ZjsKKwlzdHJ1Y3QgaWRlX2NtZAkJY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUJKnRmID0gJmNtZC50ZjsKIAlpZGVfc3RhcnRzdG9wX3QJCXJjOwogCiAJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYgbGJhNDggJiYgZG1hKSB7CkBAIC0xMDQsMTMgKzk2LDggQEAKIAkJCWxiYTQ4ID0gMDsKIAl9CiAKLQlpZiAoIWRtYSkgewotCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOwotCX0KLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpIHsKIAkJaWYgKGxiYTQ4KSB7CkBAIC0xMjksNyArMTE2LDcgQEAKIAkJCXRmLT5sYmFtICAgPSAodTgpKGJsb2NrID4+ICA4KTsKIAkJCXRmLT5sYmFoICAgPSAodTgpKGJsb2NrID4+IDE2KTsKIAotCQkJdGFzay50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisJCQljbWQudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOwogCQl9IGVsc2UgewogCQkJdGYtPm5zZWN0ICA9IG5zZWN0b3JzICYgMHhmZjsKIAkJCXRmLT5sYmFsICAgPSBibG9jazsKQEAgLTE1NiwyMyArMTQzLDI3IEBACiAJCXRmLT5kZXZpY2UgPSBoZWFkOwogCX0KIAorCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfRlM7CisKIAlpZiAocnFfZGF0YV9kaXIocnEpKQotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKIAotCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmdGFzaywgZG1hKTsKLQlpZiAoIWRtYSkKLQkJaHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZTsKLQl0YXNrLnJxID0gcnE7CisJaWRlX3RmX3NldF9jbWQoZHJpdmUsICZjbWQsIGRtYSk7CisJY21kLnJxID0gcnE7CiAKLQlyYyA9IGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJaWYgKGRtYSA9PSAwKSB7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBuc2VjdG9ycyA8PCA5KTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CisJfQorCisJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAocmMgPT0gaWRlX3N0b3BwZWQgJiYgZG1hKSB7CiAJCS8qIGZhbGxiYWNrIHRvIFBJTyAqLwotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLOwotCQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJnRhc2ssIDApOwotCQlod2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlOwotCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0RNQV9QSU9fRkFMTEJBQ0s7CisJCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmY21kLCAwKTsKKwkJaWRlX2luaXRfc2dfY21kKCZjbWQsIG5zZWN0b3JzIDw8IDkpOworCQlyYyA9IGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC0xOTMsNyArMTg0LDkgQEAKIAogCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlX2RvX3J3X2Rpc2sgLSBiYWQgY29tbWFuZCIpOwotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQlpZiAocnEtPmVycm9ycyA9PSAwKQorCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgaWRlX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTIxNiwyMiArMjA5LDIyIEBACiAgKi8KIHN0YXRpYyB1NjQgaWRlZGlza19yZWFkX25hdGl2ZV9tYXhfYWRkcmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBsYmE0OCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXU2NCBhZGRyID0gMDsKIAotCS8qIENyZWF0ZSBJREUvQVRBIGNvbW1hbmQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAobGJhNDgpCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9SRUFEX05BVElWRV9NQVhfRVhUOwogCWVsc2UKIAkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1JFQURfTkFUSVZFX01BWDsKIAl0Zi0+ZGV2aWNlICA9IEFUQV9MQkE7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCWlmIChsYmE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7Ci0JLyogc3VibWl0IGNvbW1hbmQgcmVxdWVzdCAqLwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisKKwlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KIAlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQpAQCAtMjQ2LDEzICsyMzksMTMgQEAKICAqLwogc3RhdGljIHU2NCBpZGVkaXNrX3NldF9tYXhfYWRkcmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU2NCBhZGRyX3JlcSwgaW50IGxiYTQ4KQogewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAJdTY0IGFkZHJfc2V0ID0gMDsKIAogCWFkZHJfcmVxLS07Ci0JLyogQ3JlYXRlIElERS9BVEEgY29tbWFuZCByZXF1ZXN0IHN0cnVjdHVyZSAqLwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJdGYtPmxiYWwgICAgID0gKGFkZHJfcmVxID4+ICAwKSAmIDB4ZmY7CiAJdGYtPmxiYW0gICAgID0gKGFkZHJfcmVxID4+PSA4KSAmIDB4ZmY7CiAJdGYtPmxiYWggICAgID0gKGFkZHJfcmVxID4+PSA4KSAmIDB4ZmY7CkBAIC0yNjYsMTEgKzI1OSwxMyBAQAogCQl0Zi0+Y29tbWFuZCAgPSBBVEFfQ01EX1NFVF9NQVg7CiAJfQogCXRmLT5kZXZpY2UgfD0gQVRBX0xCQTsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAJaWYgKGxiYTQ4KQotCQlhcmdzLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSE9CKTsKLQkvKiBzdWJtaXQgY29tbWFuZCByZXF1ZXN0ICovCi0JaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKKwkJY21kLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSE9CKTsKKworCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKKwogCS8qIGlmIE9LLCBjb21wdXRlIG1heGltdW0gYWRkcmVzcyB2YWx1ZSAqLwogCWlmICgodGYtPnN0YXR1cyAmIDB4MDEpID09IDApCiAJCWFkZHJfc2V0ID0gaWRlX2dldF9sYmFfYWRkcih0ZiwgbGJhNDgpICsgMTsKQEAgLTM4OSwyNCArMzg0LDI0IEBACiBzdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBxLT5xdWV1ZWRhdGE7Ci0JaWRlX3Rhc2tfdCAqdGFzayA9IGttYWxsb2Moc2l6ZW9mKCp0YXNrKSwgR0ZQX0FUT01JQyk7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9IGttYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKIAogCS8qIEZJWE1FOiBtYXAgc3RydWN0IGlkZV90YXNrZmlsZSBvbiBycS0+Y21kW10gKi8KLQlCVUdfT04odGFzayA9PSBOVUxMKTsKKwlCVUdfT04oY21kID09IE5VTEwpOwogCi0JbWVtc2V0KHRhc2ssIDAsIHNpemVvZigqdGFzaykpOworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CiAJaWYgKGF0YV9pZF9mbHVzaF9leHRfZW5hYmxlZChkcml2ZS0+aWQpICYmCiAJICAgIChkcml2ZS0+Y2FwYWNpdHk2NCA+PSAoMVVMIDw8IDI4KSkpCi0JCXRhc2stPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKKwkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CiAJZWxzZQotCQl0YXNrLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKLQl0YXNrLT50Zl9mbGFncwkgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX09VVF9ERVZJQ0UgfAotCQkJICAgSURFX1RGTEFHX0RZTjsKLQl0YXNrLT5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKKwljbWQtPnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9URiB8IElERV9URkxBR19PVVRfREVWSUNFIHwKKwkJCUlERV9URkxBR19EWU47CisJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKIAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0FUQV9UQVNLRklMRTsKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKLQlycS0+c3BlY2lhbCA9IHRhc2s7CisJcnEtPnNwZWNpYWwgPSBjbWQ7CiB9CiAKIGlkZV9kZXZzZXRfZ2V0KG11bHRjb3VudCwgbXVsdF9jb3VudCk7CkBAIC00NTYsMTUgKzQ1MSwxNSBAQAogCiBzdGF0aWMgaW50IGlkZV9kb19zZXRmZWF0dXJlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZmVhdHVyZSwgdTggbnNlY3QpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmLmZlYXR1cmUgPSBmZWF0dXJlOwotCXRhc2sudGYubnNlY3QgICA9IG5zZWN0OwotCXRhc2sudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLmZlYXR1cmUgPSBmZWF0dXJlOworCWNtZC50Zi5uc2VjdCAgID0gbnNlY3Q7CisJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKLQlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfb3JkZXJlZChpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC01MzEsMTUgKzUyNiwxNiBAQAogCiBzdGF0aWMgaW50IGRvX2lkZWRpc2tfZmx1c2hjYWNoZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWlmIChhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoZHJpdmUtPmlkKSkKLQkJYXJncy50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CisJCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CiAJZWxzZQotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIGlkZV9kZXZzZXRfZ2V0KGFjb3VzdGljLCBhY291c3RpYyk7CkBAIC03MTEsMTcgKzcwNywxNyBAQAogc3RhdGljIGludCBpZGVfZGlza19zZXRfZG9vcmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJCQkgaW50IG9uKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJaW50IHJldDsKIAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zi5jb21tYW5kID0gb24gPyBBVEFfQ01EX01FRElBX0xPQ0sgOiBBVEFfQ01EX01FRElBX1VOTE9DSzsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zi5jb21tYW5kID0gb24gPyBBVEFfQ01EX01FRElBX0xPQ0sgOiBBVEFfQ01EX01FRElBX1VOTE9DSzsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKLQlyZXQgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCXJldCA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAogCWlmIChyZXQpCiAJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKQEAgLTczNyw2ICs3MzMsNSBAQAogCS5pbml0X21lZGlhCT0gaWRlX2Rpc2tfaW5pdF9tZWRpYSwKIAkuc2V0X2Rvb3Jsb2NrCT0gaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrLAogCS5kb19yZXF1ZXN0CT0gaWRlX2RvX3J3X2Rpc2ssCi0JLmVuZF9yZXF1ZXN0CT0gaWRlX2VuZF9yZXF1ZXN0LAogCS5pb2N0bAkJPSBpZGVfZGlza19pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKaW5kZXggMWY4NmRjYi4uZWFlYTNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwpAQCAtMSwzOCArMSwzOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKICNpbmNsdWRlICJpZGUtZGlzay5oIgogCiBzdGF0aWMgaW50IHNtYXJ0X2VuYWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5mZWF0dXJlID0gQVRBX1NNQVJUX0VOQUJMRTsKIAl0Zi0+bGJhbSAgICA9IEFUQV9TTUFSVF9MQkFNX1BBU1M7CiAJdGYtPmxiYWggICAgPSBBVEFfU01BUlRfTEJBSF9QQVNTOwogCXRmLT5jb21tYW5kID0gQVRBX0NNRF9TTUFSVDsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogc3RhdGljIGludCBnZXRfc21hcnRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpidWYsIHU4IHN1Yl9jbWQpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5mZWF0dXJlID0gc3ViX2NtZDsKIAl0Zi0+bnNlY3QgICA9IDB4MDE7CiAJdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOwogCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKIAl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7Ci0JYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47Ci0JKHZvaWQpIHNtYXJ0X2VuYWJsZShkcml2ZSk7Ci0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJY21kLnByb3RvY29sID0gQVRBX1BST1RfUElPOworCisJcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZjbWQsIGJ1ZiwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfY2FjaGUKQEAgLTY3LDYgKzY3LDggQEAKIAlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwogCWludAkJbGVuID0gMCwgaSA9IDA7CiAKKwkodm9pZClzbWFydF9lbmFibGUoZHJpdmUpOworCiAJaWYgKGdldF9zbWFydF9kYXRhKGRyaXZlLCBwYWdlLCBzdWJfY21kKSA9PSAwKSB7CiAJCXVuc2lnbmVkIHNob3J0ICp2YWwgPSAodW5zaWduZWQgc2hvcnQgKikgcGFnZTsKIAkJY2hhciAqb3V0ID0gKGNoYXIgKil2YWwgKyBTRUNUT1JfU0laRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCmluZGV4IDEyM2QzOTMuLjc1YTllYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwpAQCAtMTExLDcgKzExMSw3IEBACiAgKglNYXkgYWxzbyBiZSBpbnZva2VkIGZyb20gdHJtMjkwLmMKICAqLwogCi1pbnQgaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoraW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCV9fbGUzMiAqdGFibGUgPSAoX19sZTMyICopaHdpZi0+ZG1hdGFibGVfY3B1OwpAQCAtMTIwLDExICsxMjAsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdTggaXNfdHJtMjkwID0gISEoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19UUk0yOTApOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0JaWYgKGh3aWYtPnNnX25lbnRzID09IDApCi0JCXJldHVybiAwOwotCi0JZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBod2lmLT5zZ19uZW50cywgaSkgeworCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgY21kLT5zZ19uZW50cywgaSkgewogCQl1MzIgY3VyX2FkZHIsIGN1cl9sZW4sIHhjb3VudCwgYmNvdW50OwogCiAJCWN1cl9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwpAQCAtMTc5LDYgKzE3NSw3IEBACiAvKioKICAqCWlkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQogICoJQGRyaXZlOiB0YXJnZXQgZGV2aWNlCisgKglAY21kOiBjb21tYW5kCiAgKgogICoJQnVpbGQgYW4gSURFIERNQSBQUkQgKElERSBzcGVhayBmb3Igc2NhdHRlciBnYXRoZXIgdGFibGUpCiAgKglhbmQgdGhlbiBzZXQgdXAgdGhlIERNQSB0cmFuc2ZlciByZWdpc3RlcnMgZm9yIGEgZGV2aWNlCkBAIC0xODksMTcgKzE4NiwxNiBAQAogICoJaXMgcmV0dXJuZWQuCiAgKi8KIAotaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQoraW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgcmVhZGluZyA9IHJxX2RhdGFfZGlyKHJxKSA/IDAgOiBBVEFfRE1BX1dSOwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IHJ3ID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpID8gMCA6IEFUQV9ETUFfV1I7CiAJdTggZG1hX3N0YXQ7CiAKIAkvKiBmYWxsIGJhY2sgdG8gcGlvISAqLwotCWlmICghaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIxMiw5ICsyMDgsOSBAQAogCiAJLyogc3BlY2lmeSByL3cgKi8KIAlpZiAobW1pbykKLQkJd3JpdGViKHJlYWRpbmcsICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCQl3cml0ZWIocncsICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwogCWVsc2UKLQkJb3V0YihyZWFkaW5nLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJb3V0YihydywgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAKIAkvKiByZWFkIERNQSBzdGF0dXMgZm9yIElOVFIgJiBFUlJPUiBmbGFncyAqLwogCWRtYV9zdGF0ID0gaHdpZi0+ZG1hX29wcy0+ZG1hX3NmZl9yZWFkX3N0YXR1cyhod2lmKTsKQEAgLTIyOCw3ICsyMjQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zZXR1cCk7CiAKIC8qKgotICoJZG1hX3RpbWVyX2V4cGlyeQktCWhhbmRsZSBhIERNQSB0aW1lb3V0CisgKglpZGVfZG1hX3NmZl90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAogICoJQGRyaXZlOiBEcml2ZSB0aGF0IHRpbWVkIG91dAogICoKICAqCUFuIElERSBETUEgdHJhbnNmZXIgdGltZWQgb3V0LiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igd2UgYXNrCkBAIC0yNDEsNyArMjM3LDcgQEAKICAqCVRoaXMgY2FuIG9jY3VyIGlmIGFuIGludGVycnVwdCBpcyBsb3N0IG9yIGR1ZSB0byBoYW5nIG9yIGJ1Z3MuCiAgKi8KIAotc3RhdGljIGludCBkbWFfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBkbWFfc3RhdCA9IGh3aWYtPmRtYV9vcHMtPmRtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CkBAIC0yNjUsMTQgKzI2MSw3IEBACiAKIAlyZXR1cm4gMDsJLyogU3RhdHVzIGlzIHVua25vd24gLS0gcmVzZXQgdGhlIGJ1cyAqLwogfQotCi12b2lkIGlkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQotewotCS8qIGlzc3VlIGNtZCB0byBkcml2ZSAqLwotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNvbW1hbmQsICZpZGVfZG1hX2ludHIsIDIgKiBXQUlUX0NNRCwKLQkJCSAgICBkbWFfdGltZXJfZXhwaXJ5KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfZXhlY19jbWQpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KTsKIAogdm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTM0NiwxMCArMzM1LDEwIEBACiBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2ZmX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IGE4NzhmNDcuLjNkYmY4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKQEAgLTk2LDkgKzk2LDEzIEBACiAKIAlpZiAoT0tfU1RBVChzdGF0LCBEUklWRV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCB8IEFUQV9EUlEpKSB7CiAJCWlmICghZG1hX3N0YXQpIHsKLQkJCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOworCQkJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZod2lmLT5jbWQ7CiAKLQkJCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKKwkJCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykgPT0gMCkKKwkJCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKKwkJCWVsc2UKKwkJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsCisJCQkJCQljbWQtPnJxLT5ucl9zZWN0b3JzIDw8IDkpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBiYWQgRE1BIHN0YXR1cyAoMHglMDJ4KVxuIiwKQEAgLTEwNiw3ICsxMTAsNiBAQAogCX0KIAlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAiZG1hX2ludHIiLCBzdGF0KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfaW50cik7CiAKIGludCBpZGVfZG1hX2dvb2RfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewpAQCAtMTE2LDcgKzExOSw3IEBACiAvKioKICAqCWlkZV9idWlsZF9zZ2xpc3QJLQltYXAgSURFIHNjYXR0ZXIgZ2F0aGVyIGZvciBETUEgSS9PCiAgKglAZHJpdmU6IHRoZSBkcml2ZSB0byBidWlsZCB0aGUgRE1BIHRhYmxlIGZvcgotICoJQHJxOiB0aGUgcmVxdWVzdCBob2xkaW5nIHRoZSBzZyBsaXN0CisgKglAY21kOiBjb21tYW5kCiAgKgogICoJUGVyZm9ybSB0aGUgRE1BIG1hcHBpbmcgbWFnaWMgbmVjZXNzYXJ5IHRvIGFjY2VzcyB0aGUgc291cmNlIG9yCiAgKgl0YXJnZXQgYnVmZmVycyBvZiBhIHJlcXVlc3QgdmlhIERNQS4gIFRoZSBsb3dlciBsYXllcnMgb2YgdGhlCkBAIC0xMjQsMjggKzEyNywyOSBAQAogICoJb3BlcmF0ZSBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCiAgKi8KIAotaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKIAlpbnQgaTsKIAotCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKQotCQlod2lmLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQorCQljbWQtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCWVsc2UKLQkJaHdpZi0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJCWNtZC0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAotCWkgPSBkbWFfbWFwX3NnKGh3aWYtPmRldiwgc2csIGh3aWYtPnNnX25lbnRzLCBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKLQlpZiAoaSkgewotCQlod2lmLT5vcmlnX3NnX25lbnRzID0gaHdpZi0+c2dfbmVudHM7Ci0JCWh3aWYtPnNnX25lbnRzID0gaTsKKwlpID0gZG1hX21hcF9zZyhod2lmLT5kZXYsIHNnLCBjbWQtPnNnX25lbnRzLCBjbWQtPnNnX2RtYV9kaXJlY3Rpb24pOworCWlmIChpID09IDApCisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CisJZWxzZSB7CisJCWNtZC0+b3JpZ19zZ19uZW50cyA9IGNtZC0+c2dfbmVudHM7CisJCWNtZC0+c2dfbmVudHMgPSBpOwogCX0KIAogCXJldHVybiBpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX3NnbGlzdCk7CiAKIC8qKgogICoJaWRlX2Rlc3Ryb3lfZG1hdGFibGUJLQljbGVhbiB1cCBETUEgbWFwcGluZwpAQCAtMTYxLDkgKzE2NSwxMCBAQAogdm9pZCBpZGVfZGVzdHJveV9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCi0JZG1hX3VubWFwX3NnKGh3aWYtPmRldiwgaHdpZi0+c2dfdGFibGUsIGh3aWYtPm9yaWdfc2dfbmVudHMsCi0JCSAgICAgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7CisJZG1hX3VubWFwX3NnKGh3aWYtPmRldiwgaHdpZi0+c2dfdGFibGUsIGNtZC0+b3JpZ19zZ19uZW50cywKKwkJICAgICBjbWQtPnNnX2RtYV9kaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Rlc3Ryb3lfZG1hdGFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZWguYyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCmluZGV4IDEyMzFiNWUuLjExNjY0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1laC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCkBAIC0xMjMsOCArMTIzLDE4IEBACiAKIAkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7CisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CisJCQlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gcnEtPnNwZWNpYWw7CisKKwkJCWlmIChjbWQpCisJCQkJaWRlX2NvbXBsZXRlX2NtZChkcml2ZSwgY21kLCBzdGF0LCBlcnIpOworCQl9IGVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgeworCQkJcnEtPmVycm9ycyA9IDE7CisJCQlpZGVfY29tcGxldGVfcG1fcnEoZHJpdmUsIHJxKTsKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfQorCQlycS0+ZXJyb3JzID0gZXJyOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IC1FSU8gOiAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIApAQCAtMTM2LDggKzE0NiwxMSBAQAogewogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKIAotCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKKwlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpIHsKKwkJaWYgKGVyciA8PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IGVyciA6IDAsIGlkZV9ycV9ieXRlcyhycSkpOworCX0KIH0KIAogLyogbmVlZGVkIGJlbG93ICovCkBAIC0xNjIsOCArMTc1LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CiAJZWxzZSB7CiAJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsCi0JCQkJCU5VTEwpOworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KIAkJCXJldHVybiBpZGVfc3RhcnRlZDsKIAkJfQpAQCAtMjI1LDcgKzIzNyw3IEBACiAKIAlpZiAoIU9LX1NUQVQodG1wLCAwLCBBVEFfQlVTWSkpIHsKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjApOwogCQkJLyogY29udGludWUgcG9sbGluZyAqLwogCQkJcmV0dXJuIGlkZV9zdGFydGVkOwogCQl9CkBAIC0zNDIsNyArMzU0LDcgQEAKIAkJbmRlbGF5KDQwMCk7CiAJCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKIAkJaHdpZi0+cG9sbGluZyA9IDE7Ci0JCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9CkBAIC00MDIsNyArNDE0LDcgQEAKIAl1ZGVsYXkoMTApOwogCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKIAlod2lmLT5wb2xsaW5nID0gMTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjApOwogCiAJLyoKIAkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCAzMTdlYzYyLi43YWU2NjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC02MSw1MCArNjEsNiBAQAogICovCiAjZGVmaW5lIElERUZMT1BQWV9QQ19ERUxBWQkoSFovMjApCS8qIGRlZmF1bHQgZGVsYXkgZm9yIFpJUCAxMDAgKDUwbXMpICovCiAKLS8qIEVycm9yIGNvZGUgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KLSNkZWZpbmUJSURFRkxPUFBZX0VSUk9SX0dFTkVSQUwJCTEwMQotCi0vKgotICogVXNlZCB0byBmaW5pc2ggc2VydmljaW5nIGEgcmVxdWVzdC4gRm9yIHJlYWQvd3JpdGUgcmVxdWVzdHMsIHdlIHdpbGwgY2FsbAotICogaWRlX2VuZF9yZXF1ZXN0IHRvIHBhc3MgdG8gdGhlIG5leHQgYnVmZmVyLgotICovCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBuc2VjcykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWludCBlcnJvcjsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOwotCi0Jc3dpdGNoICh1cHRvZGF0ZSkgewotCWNhc2UgMDoKLQkJZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIDE6Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQllcnJvciA9IHVwdG9kYXRlOwotCX0KLQotCWlmIChlcnJvcikKLQkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOwotCS8qIFdoeSBkb2VzIHRoaXMgaGFwcGVuPyAqLwotCWlmICghcnEpCi0JCXJldHVybiAwOwotCWlmICghYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKLQkJLyogb3VyIHJlYWwgbG9jYWwgZW5kIHJlcXVlc3QgZnVuY3Rpb24gKi8KLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnNlY3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcnEtPmVycm9ycyA9IGVycm9yOwotCS8qIGZpeG1lOiBuZWVkIHRvIG1vdmUgdGhpcyBsb2NhbCBhbHNvICovCi0JaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIDAsIDApOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBpZGVmbG9wcHlfdXBkYXRlX2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQkJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewpAQCAtMTEyLDIyICs2OCwyMyBAQAogCXN0cnVjdCBiaW8gKmJpbyA9IHJxLT5iaW87CiAKIAl3aGlsZSAoKGJpbyA9IHJxLT5iaW8pICE9IE5VTEwpCi0JCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIDApOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGlkZV9ycV9ieXRlcyhycSkpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IHBjLT5ycTsKIAlpbnQgdXB0b2RhdGUgPSBwYy0+ZXJyb3IgPyAwIDogMTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAotCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBwYykKLQkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjID09IHBjKQorCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAogCWlmIChwYy0+Y1swXSA9PSBHUENNRF9SRUFEXzEwIHx8IHBjLT5jWzBdID09IEdQQ01EX1dSSVRFXzEwIHx8Ci0JICAgIChwYy0+cnEgJiYgYmxrX3BjX3JlcXVlc3QocGMtPnJxKSkpCisJICAgIChycSAmJiBibGtfcGNfcmVxdWVzdChycSkpKQogCQl1cHRvZGF0ZSA9IDE7IC8qIEZJWE1FICovCiAJZWxzZSBpZiAocGMtPmNbMF0gPT0gR1BDTURfUkVRVUVTVF9TRU5TRSkgewogCQl1OCAqYnVmID0gcGMtPmJ1ZjsKQEAgLTEzOSwxOSArOTYsMjIgQEAKIAkJCWZsb3BweS0+cHJvZ3Jlc3NfaW5kaWNhdGlvbiA9IGJ1ZlsxNV0gJiAweDgwID8KIAkJCQkodTE2KWdldF91bmFsaWduZWQoKHUxNiAqKSZidWZbMTZdKSA6IDB4MTAwMDA7CiAKLQkJCWlmIChmbG9wcHktPmZhaWxlZF9wYykKLQkJCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJwYyA9ICV4LCAiLAotCQkJCQkgICAgICBmbG9wcHktPmZhaWxlZF9wYy0+Y1swXSk7CisJCQlpZiAoZHJpdmUtPmZhaWxlZF9wYykKKwkJCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJwYyA9ICV4IiwKKwkJCQkJICAgICAgZHJpdmUtPmZhaWxlZF9wYy0+Y1swXSk7CiAKIAkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgInNlbnNlIGtleSA9ICV4LCBhc2MgPSAleCwiCi0JCQkJICAgICAgImFzY3EgPSAleFxuIiwgZmxvcHB5LT5zZW5zZV9rZXksCisJCQkJICAgICAgImFzY3EgPSAleCIsIGZsb3BweS0+c2Vuc2Vfa2V5LAogCQkJCSAgICAgIGZsb3BweS0+YXNjLCBmbG9wcHktPmFzY3EpOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIGluIFJFUVVFU1QgU0VOU0UgaXRzZWxmIC0gIgogCQkJICAgICAgICJBYm9ydGluZyByZXF1ZXN0IVxuIik7CiAJfQogCi0JaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIDApOworCWlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkKKwkJcnEtPmVycm9ycyA9IHVwdG9kYXRlID8gMCA6IElERV9EUlZfRVJST1JfR0VORVJBTDsKKworCXJldHVybiB1cHRvZGF0ZTsKIH0KIAogc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3Ioc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5LApAQCAtMTcwLDE0ICsxMzAsMTUgQEAKIAogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZmxvcHB5X2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJICAgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCQkJICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWYgKGZsb3BweS0+ZmFpbGVkX3BjID09IE5VTEwgJiYKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBOVUxMICYmCiAJICAgIHBjLT5jWzBdICE9IEdQQ01EX1JFUVVFU1RfU0VOU0UpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gcGM7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBwYzsKIAogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCWRyaXZlLT5wYyA9IHBjOwpAQCAtMTg2LDE4ICsxNDcsMTggQEAKIAkJaWYgKCEocGMtPmZsYWdzICYgUENfRkxBR19TVVBQUkVTU19FUlJPUikpCiAJCQlpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihmbG9wcHksIHBjKTsKIAkJLyogR2l2aW5nIHVwICovCi0JCXBjLT5lcnJvciA9IElERUZMT1BQWV9FUlJPUl9HRU5FUkFMOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAKLQkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOworCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IFJldHJ5ICMlZFxuIiwgX19mdW5jX18sIHBjLT5yZXRyaWVzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgInJldHJ5ICMlZCIsIHBjLT5yZXRyaWVzKTsKIAogCXBjLT5yZXRyaWVzKys7CiAKLQlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlKTsKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBjbWQpOwogfQogCiB2b2lkIGlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQpAQCAtMjQyLDggKzIwMyw3IEBACiAJaW50IGJsb2NrcyA9IHJxLT5ucl9zZWN0b3JzIC8gZmxvcHB5LT5ic19mYWN0b3I7CiAJaW50IGNtZCA9IHJxX2RhdGFfZGlyKHJxKTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IGJsb2NrOiAlZCwgYmxvY2tzOiAlZFxuIiwgX19mdW5jX18sCi0JCSAgICAgIGJsb2NrLCBibG9ja3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiYmxvY2s6ICVkLCBibG9ja3M6ICVkIiwgYmxvY2ssIGJsb2Nrcyk7CiAKIAlpZGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBjbWQgPT0gUkVBRCA/IEdQQ01EX1JFQURfMTAgOiBHUENNRF9XUklURV8xMDsKQEAgLTI4NSwzNCArMjQ1LDM0IEBACiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBkZXY6ICVzLCBjbWQ6IDB4JXgsIGNtZF90eXBlOiAleCwgIgotCQkgICAgICAiZXJyb3JzOiAlZFxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5ycV9kaXNrID8gcnEtPnJxX2Rpc2stPmRpc2tfbmFtZSA6ICI/IiwKLQkJICAgICAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBycS0+ZXJyb3JzKTsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IHNlY3RvcjogJWxkLCBucl9zZWN0b3JzOiAlbGQsICIKLQkJICAgICAgImN1cnJlbnRfbnJfc2VjdG9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCAobG9uZylycS0+c2VjdG9yLCBycS0+bnJfc2VjdG9ycywKLQkJICAgICAgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CisJaWYgKGRyaXZlLT5kZWJ1Z19tYXNrICYgSURFX0RCR19SUSkKKwkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIChycS0+cnFfZGlzaworCQkJCQk/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUKKwkJCQkJOiAiZGV2PyIpKTsKIAogCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgewotCQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMpCi0JCQlpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihmbG9wcHksIGZsb3BweS0+ZmFpbGVkX3BjKTsKLQkJZWxzZQorCQlpZiAoZHJpdmUtPmZhaWxlZF9wYykgeworCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBkcml2ZS0+ZmFpbGVkX3BjKTsKKwkJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBJL08gZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKIAotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAwOworCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfSBlbHNlCisJCQlnb3RvIG91dF9lbmQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKCgobG9uZylycS0+c2VjdG9yICUgZmxvcHB5LT5ic19mYWN0b3IpIHx8CiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByL3cgcnEgc2l6ZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7Ci0JCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJCWdvdG8gb3V0X2VuZDsKIAkJfQogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKIAkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwpAQCAtMzIzLDIxICsyODMsMzMgQEAKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJ1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCWdvdG8gb3V0X2VuZDsKIAl9CiAKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKworCWNtZC5ycSA9IHJxOworCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSB8fCBwYy0+cmVxX3hmZXIpIHsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJaWRlX2luaXRfc2dfY21kKCZjbWQsIHJxLT5ucl9zZWN0b3JzIDw8IDkpOworCQlpZGVfbWFwX3NnKGRyaXZlLCAmY21kKTsKIAl9CiAKIAlwYy0+c2cgPSBod2lmLT5zZ190YWJsZTsKLQlwYy0+c2dfY250ID0gaHdpZi0+c2dfbmVudHM7CisJcGMtPnNnX2NudCA9IGNtZC5zZ19uZW50czsKIAogCXBjLT5ycSA9IHJxOwogCi0JcmV0dXJuIGlkZWZsb3BweV9pc3N1ZV9wYyhkcml2ZSwgcGMpOworCXJldHVybiBpZGVfZmxvcHB5X2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CitvdXRfZW5kOgorCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCXJxLT5lcnJvcnMgPSAtRUlPOworCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgaWRlX3JxX2J5dGVzKHJxKSk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCiAvKgpAQCAtNDM4LDggKzQxMCw5IEBACiAJCWxlbmd0aCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJnBjLmJ1ZltkZXNjX3N0YXJ0ICsgNl0pOwogCiAJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkRlc2NyaXB0b3IgJWQ6ICVka0IsICVkIGJsb2NrcywgIgotCQkJICAgICAgIiVkIHNlY3RvciBzaXplXG4iLAotCQkJICAgICAgaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwgYmxvY2tzLCBsZW5ndGgpOworCQkJCQkgICAgICIlZCBzZWN0b3Igc2l6ZSIsCisJCQkJCSAgICAgaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwKKwkJCQkJICAgICBibG9ja3MsIGxlbmd0aCk7CiAKIAkJaWYgKGkpCiAJCQljb250aW51ZTsKQEAgLTQ5NSw4ICs0NjgsOCBAQAogCQkJCSJpbiBkcml2ZVxuIiwgZHJpdmUtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiRGVzY3JpcHRvciAwIENvZGU6ICVkXG4iLAotCQkJICAgICAgcGMuYnVmW2Rlc2Nfc3RhcnQgKyA0XSAmIDB4MDMpOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yIDAgQ29kZTogJWQiLAorCQkJCQkgICAgIHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKTsKIAl9CiAKIAkvKiBDbGlrISBkaXNrIGRvZXMgbm90IHN1cHBvcnQgZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZSAqLwpAQCAtNTc1LDYgKzU0OCw1IEBACiAJLmluaXRfbWVkaWEJPSBpZGVfZmxvcHB5X2luaXRfbWVkaWEsCiAJLnNldF9kb29ybG9jawk9IGlkZV9zZXRfbWVkaWFfbG9jaywKIAkuZG9fcmVxdWVzdAk9IGlkZV9mbG9wcHlfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJPSBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0LAogCS5pb2N0bAkJPSBpZGVfZmxvcHB5X2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKaW5kZXggMDQ3MTA5NC4uMWFlYmRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKQEAgLTE0NSwxMSArMTQ1LDYgQEAKIAlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5kb19yZXF1ZXN0KGRyaXZlLCBycSwgc2VjdG9yKTsKIH0KIAotc3RhdGljIGludCBpZGVfZ2RfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpCi17Ci0JcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCBucnNlY3MpOwotfQotCiBzdGF0aWMgc3RydWN0IGlkZV9kcml2ZXIgaWRlX2dkX2RyaXZlciA9IHsKIAkuZ2VuX2RyaXZlciA9IHsKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtMTYyLDcgKzE1Nyw2IEBACiAJLnNodXRkb3duCQk9IGlkZV9nZF9zaHV0ZG93biwKIAkudmVyc2lvbgkJPSBJREVfR0RfVkVSU0lPTiwKIAkuZG9fcmVxdWVzdAkJPSBpZGVfZ2RfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJCT0gaWRlX2dkX2VuZF9yZXF1ZXN0LAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogCS5wcm9jX2VudHJpZXMJCT0gaWRlX2Rpc2tfcHJvY19lbnRyaWVzLAogCS5wcm9jX2RldnNldHMJCT0gaWRlX2Rpc2tfcHJvY19kZXZzZXRzLApAQCAtMTgyLDcgKzE3Niw3IEBACiAKIAlkcml2ZSA9IGlka3AtPmRyaXZlOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWRrcC0+b3BlbmVycysrOwogCkBAIC0yMzIsNyArMjI2LDcgQEAKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoaWRrcC0+b3BlbmVycyA9PSAxKQogCQlkcml2ZS0+ZGlza19vcHMtPmZsdXNoKGRyaXZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oIGIvZHJpdmVycy9pZGUvaWRlLWdkLmgKaW5kZXggYjYwNGJkZC4uNTU5NzA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIElERV9HRF9ERUJVR19MT0cJMAogCiAjaWYgSURFX0dEX0RFQlVHX0xPRwotI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgIyMgYXJncykKICNlbHNlCiAjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCkBAIC0yMCw4ICsyMCw2IEBACiAJc3RydWN0IGRldmljZQkJZGV2OwogCXVuc2lnbmVkIGludAkJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCiAKLQkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKIAkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKaW5kZXggODFhNTI4Mi4uOWQwM2U4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCkBAIC0zMiw2ICszMiwxMCBAQAogbW9kdWxlX3BhcmFtKHByb2JlX21hc2ssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2JlX21hc2ssICJwcm9iZSBtYXNrIGZvciBsZWdhY3kgSVNBIElERSBwb3J0cyIpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlX2dlbmVyaWNfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCit9OworCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9hZGQoc3RydWN0IGNsYXNzICpjbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCiB7CiAJdW5zaWduZWQgaW50IGJhc2UsIGN0bDsKQEAgLTQ2LDcgKzUwLDcgQEAKIAlody5pcnEgPSBpcnE7CiAJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JcmMgPSBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX2dlbmVyaWNfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xODQsNyArMTg4LDcgQEAKICNlbmRpZgogCQkJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JCQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworCQkJcmMgPSBpZGVfaG9zdF9hZGQoJmlkZV9nZW5lcmljX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIAkJCWlmIChyYykgewogCQkJCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIgKyAweDIwNiwgMSk7CiAJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYyBiL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jCmluZGV4IDkyNzBkMzIuLmZmODMzOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jCkBAIC00NCw1MyArNDQsNTMgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgaDgzMDBfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBoODMwMF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkKIAkJbW1fb3V0dygodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCW91dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQogCQlvdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlvdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCiAJCW91dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCW91dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQogCQlvdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCW91dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQogCQlvdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgaDgzMDBfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YSA9IG1tX2ludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAogCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwpAQCAtMTAwLDMxICsxMDAsMzEgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IGluYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CkBAIC0xNDMsMTMgKzE0MywxMyBAQAogCQkqYnAgPSBic3dhcCgqKHZvbGF0aWxlIHUxNiAqKWFkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgaDgzMDBfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAltbV9pbnN3KGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgaDgzMDBfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCW1tX291dHN3KGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKaW5kZXggNDViNDNkZC4uMmQ5YzZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwpAQCAtMiw2ICsyLDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX002OEspIHx8IGRlZmluZWQoQ09ORklHX01JUFMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCisjaW5jbHVkZSA8YXNtL2lkZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgorI2VuZGlmCisKIC8qCiAgKglDb252ZW50aW9uYWwgUElPIG9wZXJhdGlvbnMgZm9yIEFUQSBkZXZpY2VzCiAgKi8KQEAgLTc1LDI0ICs4MiwyNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOwogCi12b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3ZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisJdTggSElISSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwogCiAJaWYgKG1taW8pCiAJCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKIAllbHNlCiAJCXRmX291dGIgPSBpZGVfb3V0YjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX09VVF9EQVRBKSB7CiAJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwogCiAJCWlmIChtbWlvKQpAQCAtMTAxLDM5ICsxMDgsMzkgQEAKIAkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAJfQogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXRmX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQogCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJdGZfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCiAJCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXRmX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQogCQl0Zl9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXRmX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJdGZfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQogCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7CiAKLXZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAJdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CiAJdTggKCp0Zl9pbmIpKHVuc2lnbmVkIGxvbmcgcG9ydCk7CiAJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CkBAIC0xNDYsNyArMTUzLDcgQEAKIAkJdGZfaW5iICA9IGlkZV9pbmI7CiAJfQogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGE7CiAKIAkJaWYgKG1taW8pCkBAIC0xNjEsMzEgKzE2OCwzMSBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQogCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQogCQkJdGYtPmhvYl9sYmFtICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KQEAgLTIxMiw3ICsyMTksNyBAQAogICogc28gaWYgYW4gb2RkIGxlbiBpcyBzcGVjaWZpZWQsIGJlIHN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZQogICogZXh0cmEgYnl0ZSBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIuCiAgKi8KLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKK3ZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB2b2lkICpidWYsCiAJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTI1OCw3ICsyNjUsNyBAQAogLyoKICAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQogICovCi12b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAordm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB2b2lkICpidWYsCiAJCSAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDJlOTI0OTcuLjFhZGM1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgpAQCAtNTUsMjUgKzU0LDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgaW50IF9faWRlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIHVuc2lnbmVkIGludCBucl9ieXRlcywgaW50IGRlcXVldWUpCitpbnQgaWRlX2VuZF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMpCiB7Ci0JaW50IHJldCA9IDE7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICh1cHRvZGF0ZSA8PSAwKQotCQllcnJvciA9IHVwdG9kYXRlID8gdXB0b2RhdGUgOiAtRUlPOwotCi0JLyoKLQkgKiBpZiBmYWlsZmFzdCBpcyBzZXQgb24gYSByZXF1ZXN0LCBvdmVycmlkZSBudW1iZXIgb2Ygc2VjdG9ycyBhbmQKLQkgKiBjb21wbGV0ZSB0aGUgd2hvbGUgcmVxdWVzdCByaWdodCBub3cKLQkgKi8KLQlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChycSkgJiYgZXJyb3IpCi0JCW5yX2J5dGVzID0gcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5OwotCi0JaWYgKCFibGtfZnNfcmVxdWVzdChycSkgJiYgZXJyb3IgJiYgIXJxLT5lcnJvcnMpCi0JCXJxLT5lcnJvcnMgPSAtRUlPOwotCiAJLyoKIAkgKiBkZWNpZGUgd2hldGhlciB0byByZWVuYWJsZSBETUEgLS0gMyBpcyBhIHJhbmRvbSBtYWdpYyBmb3Igbm93LAogCSAqIGlmIHdlIERNQSB0aW1lb3V0IG1vcmUgdGhhbiAzIHRpbWVzLCBqdXN0IHN0YXkgaW4gUElPCkBAIC04NCwxMjcgKzY3LDg2IEBACiAJCWlkZV9kbWFfb24oZHJpdmUpOwogCX0KIAotCWlmICghYmxrX2VuZF9yZXF1ZXN0KHJxLCBlcnJvciwgbnJfYnl0ZXMpKQotCQlyZXQgPSAwOwotCi0JaWYgKHJldCA9PSAwICYmIGRlcXVldWUpCi0JCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBibGtfZW5kX3JlcXVlc3QocnEsIGVycm9yLCBucl9ieXRlcyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZW5kX3JxKTsKIAotLyoqCi0gKglpZGVfZW5kX3JlcXVlc3QJCS0JY29tcGxldGUgYW4gSURFIEkvTwotICoJQGRyaXZlOiBJREUgZGV2aWNlIGZvciB0aGUgSS9PCi0gKglAdXB0b2RhdGU6Ci0gKglAbnJfc2VjdG9yczogbnVtYmVyIG9mIHNlY3RvcnMgY29tcGxldGVkCi0gKgotICoJVGhpcyBpcyBvdXIgZW5kX3JlcXVlc3Qgd3JhcHBlciBmdW5jdGlvbi4gV2UgY29tcGxldGUgdGhlIEkvTwotICoJdXBkYXRlIHJhbmRvbSBudW1iZXIgaW5wdXQgYW5kIGRlcXVldWUgdGhlIHJlcXVlc3QsIHdoaWNoIGlmCi0gKglpdCB3YXMgdGFnZ2VkIG1heSBiZSBvdXQgb2Ygb3JkZXIuCi0gKi8KLQotaW50IGlkZV9lbmRfcmVxdWVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKQordm9pZCBpZGVfY29tcGxldGVfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdTggc3RhdCwgdTggZXJyKQogewotCXVuc2lnbmVkIGludCBucl9ieXRlcyA9IG5yX3NlY3RvcnMgPDwgOTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBjbWQtPnJxOworCXU4IHRmX2NtZCA9IHRmLT5jb21tYW5kOwogCi0JaWYgKCFucl9ieXRlcykgewotCQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQotCQkJbnJfYnl0ZXMgPSBycS0+ZGF0YV9sZW47Ci0JCWVsc2UKLQkJCW5yX2J5dGVzID0gcnEtPmhhcmRfY3VyX3NlY3RvcnMgPDwgOTsKKwl0Zi0+ZXJyb3IgPSBlcnI7CisJdGYtPnN0YXR1cyA9IHN0YXQ7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCBjbWQpOworCisJaWYgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSKSAmJgorCSAgICB0Zl9jbWQgPT0gQVRBX0NNRF9JRExFSU1NRURJQVRFKSB7CisJCWlmICh0Zi0+bGJhbCAhPSAweGM0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoZWFkIHVubG9hZCBmYWlsZWQhXG4iLAorCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKKwkJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7CisJCX0gZWxzZQorCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUEFSS0VEOwogCX0KIAotCXJldHVybiBfX2lkZV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9kYXRlLCBucl9ieXRlcywgMSk7CisJaWYgKHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpCisJCW1lbWNweShycS0+c3BlY2lhbCwgY21kLCBzaXplb2YoKmNtZCkpOworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRFlOKQorCQlrZnJlZShjbWQpOwogfQotRVhQT1JUX1NZTUJPTChpZGVfZW5kX3JlcXVlc3QpOwogCi0vKioKLSAqCWlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdAktCWNvbXBsZXRlIGFuIElERSBJL08KLSAqCUBkcml2ZTogSURFIGRldmljZSBmb3IgdGhlIEkvTwotICoJQHVwdG9kYXRlOgotICoJQG5yX3NlY3RvcnM6IG51bWJlciBvZiBzZWN0b3JzIGNvbXBsZXRlZAotICoKLSAqCUNvbXBsZXRlIGFuIEkvTyB0aGF0IGlzIG5vIGxvbmdlciBvbiB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcwotICoJdHlwaWNhbGx5IG9jY3VycyB3aGVuIHdlIHB1bGwgdGhlIHJlcXVlc3QgYW5kIGlzc3VlIGEgUkVRVUVTVF9TRU5TRS4KLSAqCVdlIG11c3Qgc3RpbGwgZmluaXNoIHRoZSBvbGQgcmVxdWVzdCBidXQgd2UgbXVzdCBub3QgdGFtcGVyIHdpdGggdGhlCi0gKglxdWV1ZSBpbiB0aGUgbWVhbnRpbWUuCi0gKgotICoJTk9URTogVGhpcyBwYXRoIGRvZXMgbm90IGhhbmRsZSBiYXJyaWVyLCBidXQgYmFycmllciBpcyBub3Qgc3VwcG9ydGVkCi0gKglvbiBpZGUtY2QgYW55d2F5LgotICovCi0KLWludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCisvKiBvYnNvbGV0ZSwgYmxrX3JxX2J5dGVzKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCAqLwordW5zaWduZWQgaW50IGlkZV9ycV9ieXRlcyhzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JQlVHX09OKCFibGtfcnFfc3RhcnRlZChycSkpOwotCi0JcmV0dXJuIF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX3NlY3RvcnMgPDwgOSwgMCk7CisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJcmV0dXJuIHJxLT5kYXRhX2xlbjsKKwllbHNlCisJCXJldHVybiBycS0+aGFyZF9jdXJfc2VjdG9ycyA8PCA5OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9ycV9ieXRlcyk7CiAKLS8qKgotICoJaWRlX2VuZF9kcml2ZV9jbWQJLQllbmQgYW4gZXhwbGljaXQgZHJpdmUgY29tbWFuZAotICoJQGRyaXZlOiBjb21tYW5kIAotICoJQHN0YXQ6IHN0YXR1cyBiaXRzCi0gKglAZXJyOiBlcnJvciBiaXRzCi0gKgotICoJQ2xlYW4gdXAgYWZ0ZXIgc3VjY2Vzcy9mYWlsdXJlIG9mIGFuIGV4cGxpY2l0IGRyaXZlIGNvbW1hbmQuCi0gKglUaGVzZSBnZXQgdGhyb3duIG9udG8gdGhlIHF1ZXVlIHNvIHRoZXkgYXJlIHN5bmNocm9uaXplZCB3aXRoCi0gKglyZWFsIEkvTyBvcGVyYXRpb25zIG9uIHRoZSBkcml2ZS4KLSAqCi0gKglJbiBMQkE0OCBtb2RlIHdlIGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgc2V0IHR3aWNlIHRvIGdldAotICoJYWxsIHRoZSBleHRyYSBpbmZvcm1hdGlvbiBvdXQuCi0gKi8KLSAKLXZvaWQgaWRlX2VuZF9kcml2ZV9jbWQgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3RhdCwgdTggZXJyKQoraW50IGlkZV9jb21wbGV0ZV9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvciwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKwlpbnQgcmM7CiAKLQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewotCQlpZGVfdGFza190ICp0YXNrID0gKGlkZV90YXNrX3QgKilycS0+c3BlY2lhbDsKKwkvKgorCSAqIGlmIGZhaWxmYXN0IGlzIHNldCBvbiBhIHJlcXVlc3QsIG92ZXJyaWRlIG51bWJlciBvZiBzZWN0b3JzCisJICogYW5kIGNvbXBsZXRlIHRoZSB3aG9sZSByZXF1ZXN0IHJpZ2h0IG5vdworCSAqLworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSAmJiBlcnJvciA8PSAwKQorCQlucl9ieXRlcyA9IHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOTsKIAotCQlpZiAodGFzaykgewotCQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJcmMgPSBpZGVfZW5kX3JxKGRyaXZlLCBycSwgZXJyb3IsIG5yX2J5dGVzKTsKKwlpZiAocmMgPT0gMCkKKwkJaHdpZi0+cnEgPSBOVUxMOwogCi0JCQl0Zi0+ZXJyb3IgPSBlcnI7Ci0JCQl0Zi0+c3RhdHVzID0gc3RhdDsKLQotCQkJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgdGFzayk7Ci0KLQkJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19EWU4pCi0JCQkJa2ZyZWUodGFzayk7Ci0JCX0KLQl9IGVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgewotCQlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKLQotCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOwotCQlpZiAocG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKLQkJCWlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0KGRyaXZlLCBycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlod2lmLT5ycSA9IE5VTEw7Ci0KLQlycS0+ZXJyb3JzID0gZXJyOwotCi0JaWYgKHVubGlrZWx5KGJsa19lbmRfcmVxdWVzdChycSwgKHJxLT5lcnJvcnMgPyAtRUlPIDogMCksCi0JCQkJICAgICBibGtfcnFfYnl0ZXMocnEpKSkpCi0JCUJVRygpOworCXJldHVybiByYzsKIH0KLUVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOworRVhQT1JUX1NZTUJPTChpZGVfY29tcGxldGVfcnEpOwogCiB2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChycS0+cnFfZGlzaykgewotCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OworCXU4IGRydl9yZXEgPSBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+cnFfZGlzazsKKwl1OCBtZWRpYSA9IGRyaXZlLT5tZWRpYTsKIAotCQlkcnYgPSAqKHN0cnVjdCBpZGVfZHJpdmVyICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JCWRydi0+ZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwotCX0gZWxzZQotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCisJaWYgKChtZWRpYSA9PSBpZGVfZmxvcHB5IHx8IG1lZGlhID09IGlkZV90YXBlKSAmJiBkcnZfcmVxKSB7CisJCXJxLT5lcnJvcnMgPSAwOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGJsa19ycV9ieXRlcyhycSkpOworCX0gZWxzZSB7CisJCWlmIChtZWRpYSA9PSBpZGVfdGFwZSkKKwkJCXJxLT5lcnJvcnMgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisJCWVsc2UgaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQpAQCAtMjMyLDIwICsxNzQsMjAgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Rpc2tfc3BlY2lhbChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3BlY2lhbF90ICpzID0gJmRyaXZlLT5zcGVjaWFsOwotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0JYXJncy5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKIAogCWlmIChzLT5iLnNldF9nZW9tZXRyeSkgewogCQlzLT5iLnNldF9nZW9tZXRyeSA9IDA7Ci0JCWlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoZHJpdmUsICZhcmdzLnRmKTsKKwkJaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChkcml2ZSwgJmNtZC50Zik7CiAJfSBlbHNlIGlmIChzLT5iLnJlY2FsaWJyYXRlKSB7CiAJCXMtPmIucmVjYWxpYnJhdGUgPSAwOwotCQlpZGVfdGZfc2V0X3Jlc3RvcmVfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfcmVzdG9yZV9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+Yi5zZXRfbXVsdG1vZGUpIHsKIAkJcy0+Yi5zZXRfbXVsdG1vZGUgPSAwOwotCQlpZGVfdGZfc2V0X3NldG11bHRfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfc2V0bXVsdF9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+YWxsKSB7CiAJCWludCBzcGVjaWFsID0gcy0+YWxsOwogCQlzLT5hbGwgPSAwOwpAQCAtMjUzLDEwICsxOTUsMTAgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFIHwKLQkJCUlERV9URkxBR19DVVNUT01fSEFORExFUjsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFIHwKKwkJICAgICAgIElERV9URkxBR19DVVNUT01fSEFORExFUjsKIAotCWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJZG9fcndfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQpAQCAtMjg2LDMzICsyMjgsMjkgQEAKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLXZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBjbWQtPnJxOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKIAkJc2dfaW5pdF9vbmUoc2csIHJxLT5idWZmZXIsIHJxLT5ucl9zZWN0b3JzICogU0VDVE9SX1NJWkUpOwotCQlod2lmLT5zZ19uZW50cyA9IDE7CisJCWNtZC0+c2dfbmVudHMgPSAxOwogCX0gZWxzZSBpZiAoIXJxLT5iaW8pIHsKIAkJc2dfaW5pdF9vbmUoc2csIHJxLT5kYXRhLCBycS0+ZGF0YV9sZW4pOwotCQlod2lmLT5zZ19uZW50cyA9IDE7Ci0JfSBlbHNlIHsKLQkJaHdpZi0+c2dfbmVudHMgPSBibGtfcnFfbWFwX3NnKGRyaXZlLT5xdWV1ZSwgcnEsIHNnKTsKLQl9CisJCWNtZC0+c2dfbmVudHMgPSAxOworCX0gZWxzZQorCQljbWQtPnNnX25lbnRzID0gYmxrX3JxX21hcF9zZyhkcml2ZS0+cXVldWUsIHJxLCBzZyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9tYXBfc2cpOwogCi12b2lkIGlkZV9pbml0X3NnX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2luaXRfc2dfY21kKHN0cnVjdCBpZGVfY21kICpjbWQsIHVuc2lnbmVkIGludCBucl9ieXRlcykKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlod2lmLT5uc2VjdCA9IGh3aWYtPm5sZWZ0ID0gcnEtPm5yX3NlY3RvcnM7Ci0JaHdpZi0+Y3Vyc2dfb2ZzID0gMDsKLQlod2lmLT5jdXJzZyA9IE5VTEw7CisJY21kLT5uYnl0ZXMgPSBjbWQtPm5sZWZ0ID0gbnJfYnl0ZXM7CisJY21kLT5jdXJzZ19vZnMgPSAwOworCWNtZC0+Y3Vyc2cgPSBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5pdF9zZ19jbWQpOwogCiAvKioKQEAgLTMzMCwyNCArMjY4LDE1IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGV4ZWN1dGVfZHJpdmVfY21kIChpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCAqdGFzayA9IHJxLT5zcGVjaWFsOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBycS0+c3BlY2lhbDsKIAotCWlmICh0YXNrKSB7Ci0JCWh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLT5kYXRhX3BoYXNlOwotCi0JCXN3aXRjaCAoaHdpZi0+ZGF0YV9waGFzZSkgewotCQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQkJY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JCWNhc2UgVEFTS0ZJTEVfSU46Ci0JCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWlmIChjbWQpIHsKKwkJaWYgKGNtZC0+cHJvdG9jb2wgPT0gQVRBX1BST1RfUElPKSB7CisJCQlpZGVfaW5pdF9zZ19jbWQoY21kLCBycS0+bnJfc2VjdG9ycyA8PCA5KTsKKwkJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCX0KIAotCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIHRhc2spOworCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGNtZCk7CiAJfQogCiAgCS8qCkBAIC0zNTcsOCArMjg2LDggQEAKICNpZmRlZiBERUJVRwogIAlwcmludGsoIiVzOiBEUklWRV9DTUQgKG51bGwpXG4iLCBkcml2ZS0+bmFtZSk7CiAjZW5kaWYKLQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSwKLQkJCSAgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKKwlycS0+ZXJyb3JzID0gMDsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGJsa19ycV9ieXRlcyhycSkpOwogCiAgCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTM3Niw5ICszMDUsNyBAQAogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgotCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9zcGVjaWFsX3JxIC0gYmFkIHJlcXVlc3QiKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlCVUcoKTsKIAl9CiB9CiAKQEAgLTQzOCw3ICszNjUsNyBAQAogCQkJc3RhcnRzdG9wID0gaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKIAkJCWlmIChzdGFydHN0b3AgPT0gaWRlX3N0b3BwZWQgJiYKIAkJCSAgICBwbS0+cG1fc3RlcCA9PSBJREVfUE1fQ09NUExFVEVEKQotCQkJCWlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0KGRyaXZlLCBycSk7CisJCQkJaWRlX2NvbXBsZXRlX3BtX3JxKGRyaXZlLCBycSk7CiAJCQlyZXR1cm4gc3RhcnRzdG9wOwogCQl9IGVsc2UgaWYgKCFycS0+cnFfZGlzayAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkKIAkJCS8qCkBAIC01MDEsOCArNDI4LDggQEAKIAlpZiAoaG9zdC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkUpIHsKIAkJcmMgPSB0ZXN0X2FuZF9zZXRfYml0X2xvY2soSURFX0hPU1RfQlVTWSwgJmhvc3QtPmhvc3RfYnVzeSk7CiAJCWlmIChyYyA9PSAwKSB7Ci0JCQkvKiBmb3IgYXRhcmkgb25seSAqLwotCQkJaWRlX2dldF9sb2NrKGlkZV9pbnRyLCBod2lmKTsKKwkJCWlmIChob3N0LT5nZXRfbG9jaykKKwkJCQlob3N0LT5nZXRfbG9jayhpZGVfaW50ciwgaHdpZik7CiAJCX0KIAl9CiAJcmV0dXJuIHJjOwpAQCAtNTExLDggKzQzOCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3VubG9ja19ob3N0KHN0cnVjdCBpZGVfaG9zdCAqaG9zdCkKIHsKIAlpZiAoaG9zdC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkUpIHsKLQkJLyogZm9yIGF0YXJpIG9ubHkgKi8KLQkJaWRlX3JlbGVhc2VfbG9jaygpOworCQlpZiAoaG9zdC0+cmVsZWFzZV9sb2NrKQorCQkJaG9zdC0+cmVsZWFzZV9sb2NrKCk7CiAJCWNsZWFyX2JpdF91bmxvY2soSURFX0hPU1RfQlVTWSwgJmhvc3QtPmhvc3RfYnVzeSk7CiAJfQogfQpAQCAtNzI0LDYgKzY1MSw3IEBACiAJCQl9CiAJCX0KIAkJaHdpZi0+aGFuZGxlciA9IE5VTEw7CisJCWh3aWYtPmV4cGlyeSA9IE5VTEw7CiAJCS8qCiAJCSAqIFdlIG5lZWQgdG8gc2ltdWxhdGUgYSByZWFsIGludGVycnVwdCB3aGVuIGludm9raW5nCiAJCSAqIHRoZSBoYW5kbGVyKCkgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8KQEAgLTczOSw3ICs2NjcsOCBAQAogCQl9IGVsc2UgaWYgKGRyaXZlX2lzX3JlYWR5KGRyaXZlKSkgewogCQkJaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCiAJCQkJaHdpZi0+ZG1hX29wcy0+ZG1hX2xvc3RfaXJxKGRyaXZlKTsKLQkJCSh2b2lkKWlkZV9hY2tfaW50cihod2lmKTsKKwkJCWlmIChod2lmLT5hY2tfaW50cikKKwkJCQlod2lmLT5hY2tfaW50cihod2lmKTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBsb3N0IGludGVycnVwdFxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7CiAJCQlzdGFydHN0b3AgPSBoYW5kbGVyKGRyaXZlKTsKQEAgLTg0MCw2ICs3NjksNyBAQAogaXJxcmV0dXJuX3QgaWRlX2ludHIgKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gKGlkZV9od2lmX3QgKilkZXZfaWQ7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gaHdpZi0+aG9zdDsKIAlpZGVfZHJpdmVfdCAqdW5pbml0aWFsaXplZF92YXIoZHJpdmUpOwogCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg0NywxNCArNzc3LDE0IEBACiAJaXJxcmV0dXJuX3QgaXJxX3JldCA9IElSUV9OT05FOwogCWludCBwbHVnX2RldmljZSA9IDA7CiAKLQlpZiAoaHdpZi0+aG9zdC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkUpIHsKLQkJaWYgKGh3aWYgIT0gaHdpZi0+aG9zdC0+Y3VyX3BvcnQpCisJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7CisJCWlmIChod2lmICE9IGhvc3QtPmN1cl9wb3J0KQogCQkJZ290byBvdXRfZWFybHk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghaWRlX2Fja19pbnRyKGh3aWYpKQorCWlmIChod2lmLT5hY2tfaW50ciAmJiBod2lmLT5hY2tfaW50cihod2lmKSA9PSAwKQogCQlnb3RvIG91dDsKIAogCWhhbmRsZXIgPSBod2lmLT5oYW5kbGVyOwpAQCAtODcxLDI3ICs4MDEsMTkgQEAKIAkJICoKIAkJICogRm9yIFBDSSwgd2UgY2Fubm90IHRlbGwgdGhlIGRpZmZlcmVuY2UsCiAJCSAqIHNvIGluIHRoYXQgY2FzZSB3ZSBqdXN0IGlnbm9yZSBpdCBhbmQgaG9wZSBpdCBnb2VzIGF3YXkuCi0JCSAqCi0JCSAqIEZJWE1FOiB1bmV4cGVjdGVkX2ludHIgc2hvdWxkIGJlIGh3aWYtPiB0aGVuIHdlIGNhbgotCQkgKiByZW1vdmUgYWxsIHRoZSBpZmRlZiBQQ0kgY3JhcAogCQkgKi8KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKLQkJaWYgKGh3aWYtPmNoaXBzZXQgIT0gaWRlX3BjaSkKLSNlbmRpZgkvKiBDT05GSUdfQkxLX0RFVl9JREVQQ0kgKi8KLQkJeworCQlpZiAoKGhvc3QtPmlycV9mbGFncyAmIElSUUZfU0hBUkVEKSA9PSAwKSB7CiAJCQkvKgogCQkJICogUHJvYmFibHkgbm90IGEgc2hhcmVkIFBDSSBpbnRlcnJ1cHQsCiAJCQkgKiBzbyB3ZSBjYW4gc2FmZWx5IHRyeSB0byBkbyBzb21ldGhpbmcgYWJvdXQgaXQ6CiAJCQkgKi8KIAkJCXVuZXhwZWN0ZWRfaW50cihpcnEsIGh3aWYpOwotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFdoYWNrIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIGp1c3QgaW4gY2FzZQogCQkJICogd2UgaGF2ZSBhIGxlZnRvdmVyIHBlbmRpbmcgSVJRLgogCQkJICovCiAJCQkodm9pZClod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERVBDSSAqLwogCQl9CiAJCWdvdG8gb3V0OwogCX0KQEAgLTkwOSw2ICs4MzEsNyBAQAogCQlnb3RvIG91dDsKIAogCWh3aWYtPmhhbmRsZXIgPSBOVUxMOworCWh3aWYtPmV4cGlyeSA9IE5VTEw7CiAJaHdpZi0+cmVxX2dlbisrOwogCWRlbF90aW1lcigmaHdpZi0+dGltZXIpOwogCXNwaW5fdW5sb2NrKCZod2lmLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwppbmRleCAxYmUyNjNlLi43NzAxNDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCkBAIC0xMTEsMTMgKzExMSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZV9jbWRfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBpZGVfY21kX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdTggKmJ1ZiA9IE5VTEw7CiAJaW50IGJ1ZnNpemUgPSAwLCBlcnIgPSAwOwogCXU4IGFyZ3NbNF0sIHhmZXJfcmF0ZSA9IDA7Ci0JaWRlX3Rhc2tfdCB0ZmFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAogCWlmIChOVUxMID09ICh2b2lkICopIGFyZykgewpAQCAtMTM0LDI0ICsxMzQsMjQgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoYXJncywgKHZvaWQgX191c2VyICopYXJnLCA0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltZW1zZXQoJnRmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5mZWF0dXJlID0gYXJnc1syXTsKIAlpZiAoYXJnc1swXSA9PSBBVEFfQ01EX1NNQVJUKSB7CiAJCXRmLT5uc2VjdCA9IGFyZ3NbM107CiAJCXRmLT5sYmFsICA9IGFyZ3NbMV07CiAJCXRmLT5sYmFtICA9IDB4NGY7CiAJCXRmLT5sYmFoICA9IDB4YzI7Ci0JCXRmYXJncy50Zl9mbGFncyA9IElERV9URkxBR19PVVRfVEYgfCBJREVfVEZMQUdfSU5fTlNFQ1Q7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19PVVRfVEYgfCBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAJfSBlbHNlIHsKIAkJdGYtPm5zZWN0ID0gYXJnc1sxXTsKLQkJdGZhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwKLQkJCQkgIElERV9URkxBR19PVVRfTlNFQ1QgfCBJREVfVEZMQUdfSU5fTlNFQ1Q7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8IElERV9URkxBR19PVVRfTlNFQ1QgfAorCQkJICAgICAgIElERV9URkxBR19JTl9OU0VDVDsKIAl9CiAJdGYtPmNvbW1hbmQgPSBhcmdzWzBdOwotCXRmYXJncy5kYXRhX3BoYXNlID0gYXJnc1szXSA/IFRBU0tGSUxFX0lOIDogVEFTS0ZJTEVfTk9fREFUQTsKKwljbWQucHJvdG9jb2wgPSBhcmdzWzNdID8gQVRBX1BST1RfUElPIDogQVRBX1BST1RfTk9EQVRBOwogCiAJaWYgKGFyZ3NbM10pIHsKLQkJdGZhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19JT18xNkJJVDsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19JT18xNkJJVDsKIAkJYnVmc2l6ZSA9IFNFQ1RPUl9TSVpFICogYXJnc1szXTsKIAkJYnVmID0ga3phbGxvYyhidWZzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGJ1ZiA9PSBOVUxMKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCX0KIAl9CiAKLQllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmdGZhcmdzLCBidWYsIGFyZ3NbM10pOworCWVyciA9IGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZjbWQsIGJ1ZiwgYXJnc1szXSk7CiAKIAlhcmdzWzBdID0gdGYtPnN0YXR1czsKIAlhcmdzWzFdID0gdGYtPmVycm9yOwpAQCAtMTk0LDI1ICsxOTQsMjUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGlkZV90YXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgaWRlX3Rhc2tfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl2b2lkIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgZXJyID0gMDsKIAl1OCBhcmdzWzddOwotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYXJncywgcCwgNykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCW1lbWNweSgmdGFzay50Zl9hcnJheVs3XSwgJmFyZ3NbMV0sIDYpOwotCXRhc2sudGYuY29tbWFuZCA9IGFyZ3NbMF07Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwltZW1jcHkoJmNtZC50Zl9hcnJheVs3XSwgJmFyZ3NbMV0sIDYpOworCWNtZC50Zi5jb21tYW5kID0gYXJnc1swXTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKLQlhcmdzWzBdID0gdGFzay50Zi5jb21tYW5kOwotCW1lbWNweSgmYXJnc1sxXSwgJnRhc2sudGZfYXJyYXlbN10sIDYpOworCWFyZ3NbMF0gPSBjbWQudGYuY29tbWFuZDsKKwltZW1jcHkoJmFyZ3NbMV0sICZjbWQudGZfYXJyYXlbN10sIDYpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihwLCBhcmdzLCA3KSkKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTI2MiwxNyArMjYyLDE3IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQkJcmV0dXJuIGlkZV90YXNrZmlsZV9pb2N0bChkcml2ZSwgY21kLCBhcmcpOworCQkJcmV0dXJuIGlkZV90YXNrZmlsZV9pb2N0bChkcml2ZSwgYXJnKTsKIAkJcmV0dXJuIC1FTk9NU0c7CiAjZW5kaWYKIAljYXNlIEhESU9fRFJJVkVfQ01EOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIGlkZV9jbWRfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIGlkZV9jbWRfaW9jdGwoZHJpdmUsIGFyZyk7CiAJY2FzZSBIRElPX0RSSVZFX1RBU0s6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCXJldHVybiAtRUFDQ0VTOwotCQlyZXR1cm4gaWRlX3Rhc2tfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIGlkZV90YXNrX2lvY3RsKGRyaXZlLCBhcmcpOwogCWNhc2UgSERJT19EUklWRV9SRVNFVDoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FQUNDRVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCAzMTdjNWRhLi41NDAzZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTMxLDE1ICszMSwxNSBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKIAlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnNlbGVjdHByb2MpCiAJCXBvcnRfb3BzLT5zZWxlY3Rwcm9jKGRyaXZlKTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0RFVklDRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmY21kKTsKIH0KIAogdm9pZCBTRUxFQ1RfTUFTSyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBtYXNrKQpAQCAtNTIsMTQgKzUyLDE0IEBACiAKIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRkVBVFVSRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9GRUFUVVJFOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCi0JcmV0dXJuIHRhc2sudGYuZXJyb3I7CisJcmV0dXJuIGNtZC50Zi5lcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Vycm9yKTsKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAJdTE2ICppZCA9IGRyaXZlLT5pZCwgaTsKIAlpbnQgZXJyb3IgPSAwOwogCXU4IHN0YXQ7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlmIChod2lmLT5kbWFfb3BzKQkvKiBjaGVjayBpZiBob3N0IHN1cHBvcnRzIERNQSAqLwpAQCAtMzYxLDEyICszNjEsMTIgQEAKIAl1ZGVsYXkoMSk7CiAJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUOwotCXRhc2sudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7Ci0JdGFzay50Zi5uc2VjdCAgID0gc3BlZWQ7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUOworCWNtZC50Zi5mZWF0dXJlID0gU0VURkVBVFVSRVNfWEZFUjsKKwljbWQudGYubnNlY3QgICA9IHNwZWVkOwogCi0JdHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJdHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmY21kKTsKIAogCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfU0VUX0ZFQVRVUkVTKTsKIApAQCAtNDI1LDI2ICs0MjUsMjUgQEAKICAqIFNlZSBhbHNvIGlkZV9leGVjdXRlX2NvbW1hbmQKICAqLwogdm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKIAlCVUdfT04oaHdpZi0+aGFuZGxlcik7CiAJaHdpZi0+aGFuZGxlcgkJPSBoYW5kbGVyOwotCWh3aWYtPmV4cGlyeQkJPSBleHBpcnk7CiAJaHdpZi0+dGltZXIuZXhwaXJlcwk9IGppZmZpZXMgKyB0aW1lb3V0OwogCWh3aWYtPnJlcV9nZW5fdGltZXIJPSBod2lmLT5yZXFfZ2VuOwogCWFkZF90aW1lcigmaHdpZi0+dGltZXIpOwogfQogCi12b2lkIGlkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCisJCSAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9zZXRfaGFuZGxlcik7CkBAIC00NTIsMTAgKzQ1MSw5IEBACiAvKioKICAqCWlkZV9leGVjdXRlX2NvbW1hbmQJLQlleGVjdXRlIGFuIElERSBjb21tYW5kCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZCBhZ2FpbnN0Ci0gKglAY29tbWFuZDogY29tbWFuZCBieXRlIHRvIHdyaXRlCisgKglAY21kOiBjb21tYW5kCiAgKglAaGFuZGxlcjogaGFuZGxlciBmb3IgbmV4dCBwaGFzZQogICoJQHRpbWVvdXQ6IHRpbWVvdXQgZm9yIGNvbW1hbmQKLSAqCUBleHBpcnk6ICBoYW5kbGVyIHRvIHJ1biBvbiB0aW1lb3V0CiAgKgogICoJSGVscGVyIGZ1bmN0aW9uIHRvIGlzc3VlIGFuIElERSBjb21tYW5kLiBUaGlzIGhhbmRsZXMgdGhlCiAgKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZQpAQCAtNDYzLDE1ICs0NjEsMTggQEAKICAqCXNob3VsZCBnbyB2aWEgdGhpcyBmdW5jdGlvbiBvciBkbyBlcXVpdmFsZW50IGxvY2tpbmcuCiAgKi8KIAotdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkJIHVuc2lnbmVkIHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCSBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCB0aW1lb3V0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKLQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBjbWQpOworCWlmICgoY21kLT5wcm90b2NvbCAhPSBBVEFQSV9QUk9UX0RNQSAmJgorCSAgICAgY21kLT5wcm90b2NvbCAhPSBBVEFQSV9QUk9UX1BJTykgfHwKKwkgICAgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSkKKwkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQpOworCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIGNtZC0+dGYuY29tbWFuZCk7CiAJLyoKIAkgKiBEcml2ZSB0YWtlcyA0MDBuUyB0byByZXNwb25kLCB3ZSBtdXN0IGF2b2lkIHRoZSBJUlEgYmVpbmcKIAkgKiBzZXJ2aWNlZCBiZWZvcmUgdGhhdC4KQEAgLTQ4MSwxOSArNDgyLDYgQEAKIAluZGVsYXkoNDAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGlkZV9leGVjdXRlX2NvbW1hbmQpOwotCi12b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1BBQ0tFVCk7Ci0JbmRlbGF5KDQwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWN1dGVfcGt0X2NtZCk7CiAKIC8qCiAgKiBpZGVfd2FpdF9ub3RfYnVzeSgpIHdhaXRzIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRldmljZSBvbiB0aGUgaHdpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IGY2YzY4M2QuLjIxN2I3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTM0LDE5ICszNCwxOSBAQAogc3RhdGljIHZvaWQgaWRlX2R1bXBfb3Bjb2RlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaWRlX3Rhc2tfdCAqdGFzayA9IE5VTEw7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9IE5VTEw7CiAKIAlpZiAoIXJxKQogCQlyZXR1cm47CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkKLQkJdGFzayA9IHJxLT5zcGVjaWFsOworCQljbWQgPSBycS0+c3BlY2lhbDsKIAogCXByaW50ayhLRVJOX0VSUiAiaWRlOiBmYWlsZWQgb3Bjb2RlIHdhczogIik7Ci0JaWYgKHRhc2sgPT0gTlVMTCkKKwlpZiAoY21kID09IE5VTEwpCiAJCXByaW50ayhLRVJOX0NPTlQgInVua25vd25cbiIpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAiMHglMDJ4XG4iLCB0YXNrLT50Zi5jb21tYW5kKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiMHglMDJ4XG4iLCBjbWQtPnRmLmNvbW1hbmQpOwogfQogCiB1NjQgaWRlX2dldF9sYmFfYWRkcihzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiwgaW50IGxiYTQ4KQpAQCAtNjYsMTggKzY2LDE4IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9kdW1wX3NlY3RvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAl1OCBsYmE0OCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJaWYgKGxiYTQ4KQotCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9IT0JfTEJBIHwKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9IT0JfTEJBIHwKIAkJCQlJREVfVEZMQUdfTEJBNDg7CiAJZWxzZQotCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9ERVZJQ0U7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fREVWSUNFOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCiAJaWYgKGxiYTQ4IHx8ICh0Zi0+ZGV2aWNlICYgQVRBX0xCQSkpCiAJCXByaW50ayhLRVJOX0NPTlQgIiwgTEJBc2VjdD0lbGx1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCmluZGV4IGYzMGU1MjEuLjk0OTBiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIApAQCAtNjMsMTAgKzYyLDEwIEBACiAKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWlmIChycS0+Y21kWzBdID09IFJFUV9QQVJLX0hFQURTKSB7CiAJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwogCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKQEAgLTc1LDE0ICs3NCwxNiBAQAogCQl0Zi0+bGJhbCA9IDB4NGM7CiAJCXRmLT5sYmFtID0gMHg0ZTsKIAkJdGYtPmxiYWggPSAweDU1OwotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7CiAKLQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JdGFzay5ycSA9IHJxOwotCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKKworCWNtZC5ycSA9IHJxOworCisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG0uYyBiL2RyaXZlcnMvaWRlL2lkZS1wbS5jCmluZGV4IDYwNTM4ZDkuLmViZjJkMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wbS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbS5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKIGludCBnZW5lcmljX2lkZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CkBAIC04LDcgKzcsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCByZXQ7CiAKIAkvKiBjYWxsIEFDUEkgX0dUTSBvbmx5IG9uY2UgKi8KQEAgLTE2LDEwICsxNSwxMCBAQAogCQlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCiAJbWVtc2V0KCZycXBtLCAwLCBzaXplb2YocnFwbSkpOwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXJxID0gYmxrX2dldF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgUkVBRCwgX19HRlBfV0FJVCk7CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfUE1fU1VTUEVORDsKLQlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5zcGVjaWFsID0gJmNtZDsKIAlycS0+ZGF0YSA9ICZycXBtOwogCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9TVVNQRU5EOwogCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCkBAIC00Miw3ICs0MSw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSBycXBtOwotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJaW50IGVycjsKIAogCS8qIGNhbGwgQUNQSSBfUFMwIC8gX1NUTSBvbmx5IG9uY2UgKi8KQEAgLTU0LDExICs1MywxMSBAQAogCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAogCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1JFU1VNRTsKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9QUkVFTVBUOwotCXJxLT5zcGVjaWFsID0gJmFyZ3M7CisJcnEtPnNwZWNpYWwgPSAmY21kOwogCXJxLT5kYXRhID0gJnJxcG07CiAJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1JFU1VNRTsKIAlycXBtLnBtX3N0YXRlID0gUE1fRVZFTlRfT047CkBAIC0xMDksOSArMTA4LDkgQEAKIGlkZV9zdGFydHN0b3BfdCBpZGVfc3RhcnRfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKLQlpZGVfdGFza190ICphcmdzID0gcnEtPnNwZWNpYWw7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9IHJxLT5zcGVjaWFsOwogCi0JbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigqYXJncykpOworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CiAKIAlzd2l0Y2ggKHBtLT5wbV9zdGVwKSB7CiAJY2FzZSBJREVfUE1fRkxVU0hfQ0FDSEU6CS8qIFN1c3BlbmQgc3RlcCAxIChmbHVzaCBjYWNoZSkgKi8KQEAgLTEyNCwxMiArMTIzLDEyIEBACiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJaWYgKGF0YV9pZF9mbHVzaF9leHRfZW5hYmxlZChkcml2ZS0+aWQpKQotCQkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CiAJCWVsc2UKLQkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOworCQkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLwotCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKKwkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fUkVTVE9SRV9QSU86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLwogCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwpAQCAtMTQyLDcgKzE0MSw3IEBACiAJCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJY2FzZSBJREVfUE1fSURMRToJCS8qIFJlc3VtZSBzdGVwIDIgKGlkbGUpICovCi0JCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fUkVTVE9SRV9ETUE6CS8qIFJlc3VtZSBzdGVwIDMgKHJlc3RvcmUgRE1BKSAqLwogCQkvKgpAQCAtMTYwLDI3ICsxNTksMzQgQEAKIAl9CiAKIAlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CisKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAKIG91dF9kb190ZjoKLQlhcmdzLT50Zl9mbGFncwkgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWFyZ3MtPmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOwotCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgYXJncyk7CisJY21kLT50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKKworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgY21kKTsKIH0KIAogLyoqCi0gKglpZGVfY29tcGxldGVfcG1fcmVxdWVzdCAtIGVuZCB0aGUgY3VycmVudCBQb3dlciBNYW5hZ2VtZW50IHJlcXVlc3QKKyAqCWlkZV9jb21wbGV0ZV9wbV9ycSAtIGVuZCB0aGUgY3VycmVudCBQb3dlciBNYW5hZ2VtZW50IHJlcXVlc3QKICAqCUBkcml2ZTogdGFyZ2V0IGRyaXZlCiAgKglAcnE6IHJlcXVlc3QKICAqCiAgKglUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgY3VycmVudCBQTSByZXF1ZXN0IGFuZCBzdG9wcyB0aGUgcXVldWUKICAqCWlmIG5lY2Vzc2FyeS4KICAqLwotdm9pZCBpZGVfY29tcGxldGVfcG1fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2NvbXBsZXRlX3BtX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOworCWlmIChwbS0+cG1fc3RlcCAhPSBJREVfUE1fQ09NUExFVEVEKQorCQlyZXR1cm47CisKICNpZmRlZiBERUJVR19QTQogCXByaW50aygiJXM6IGNvbXBsZXRpbmcgUE0gcmVxdWVzdCwgJXNcbiIsIGRyaXZlLT5uYW1lLAogCSAgICAgICBibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSA/ICJzdXNwZW5kIiA6ICJyZXN1bWUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wbnAuYyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwppbmRleCBiYWM5YjM5Li42ZTgwYjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBucC5jCkBAIC0yNyw2ICsyNywxMCBAQAogCXsuaWQgPSAiIn0KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpZGVfcG5wX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIGludCBpZGVwbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CkBAIC02MCw3ICs2NCw3IEBACiAJaHcuaXJxID0gcG5wX2lycShkZXYsIDApOwogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCXJjID0gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgJmhvc3QpOworCXJjID0gaWRlX2hvc3RfYWRkKCZpZGVfcG5wX3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCA5NzQwNjcwLi41NDg4NjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMjI4LDE1ICsyMjgsOSBAQAogCW1bQVRBX0lEX1BST0RfTEVOIC0gMV0gPSAnXDAnOwogCiAJaWYgKHN0cnN0cihtLCAiRSBYIEEgQiBZIFQgRSBOIEUgUyBUIikpCi0JCWdvdG8gZXJyX21pc2M7Ci0KLQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwotCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ERUFEOwotCi0JcmV0dXJuOwotZXJyX21pc2M6Ci0Ja2ZyZWUoaWQpOwotCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BSRVNFTlQ7CiB9CiAKIC8qKgpAQCAtMjg5LDEzICsyODMsMTMgQEAKIAkgKiBpZGVudGlmeSBjb21tYW5kIHRvIGJlIHN1cmUgb2YgcmVwbHkKIAkgKi8KIAlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpIHsKLQkJaWRlX3Rhc2tfdCB0YXNrOworCQlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCQkvKiBkaXNhYmxlIERNQSAmIG92ZXJsYXAgKi8KLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRTsKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFOwogCi0JCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZjbWQpOwogCX0KIAogCS8qIGFzayBkcml2ZSBmb3IgSUQgKi8KQEAgLTM0MywxNCArMzM3LDE0IEBACiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9kZXZpY2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fREVWSUNFOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCi0JcmV0dXJuIHRhc2sudGYuZGV2aWNlOworCXJldHVybiBjbWQudGYuZGV2aWNlOwogfQogCiAvKioKQEAgLTUwNSw4ICs0OTksNyBAQAogCQl9CiAKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQkvKiBkcml2ZSBub3QgZm91bmQgKi8KLQkJCXJldHVybiAwOworCQkJZ290byBvdXRfZnJlZTsKIAogCQkvKiBpZGVudGlmaWNhdGlvbiBmYWlsZWQ/ICovCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKSB7CkBAIC01MzAsNyArNTIzLDcgQEAKIAl9CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAkvKiBUaGUgZHJpdmUgd2Fzbid0IGJlaW5nIGhlbHBmdWwuIEFkZCBnZW5lcmljIGluZm8gb25seSAqLwogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKSB7CkBAIC01NDMsNyArNTM2LDEwIEBACiAJCWlkZV9kaXNrX2luaXRfbXVsdF9jb3VudChkcml2ZSk7CiAJfQogCi0JcmV0dXJuICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCk7CisJcmV0dXJuIDE7CitvdXRfZnJlZToKKwlrZnJlZShkcml2ZS0+aWQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBod2lmX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTg0MSwzNCArODM3LDE5IEBACiBzdGF0aWMgaW50IGluaXRfaXJxIChpZGVfaHdpZl90ICpod2lmKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXI7Ci0JaW50IHNhID0gMDsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBod2lmLT5ob3N0OworCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIgPSBob3N0LT5pcnFfaGFuZGxlcjsKKwlpbnQgc2EgPSBob3N0LT5pcnFfZmxhZ3M7CiAKLQlpcnFfaGFuZGxlciA9IGh3aWYtPmhvc3QtPmlycV9oYW5kbGVyOwogCWlmIChpcnFfaGFuZGxlciA9PSBOVUxMKQogCQlpcnFfaGFuZGxlciA9IGlkZV9pbnRyOwogCi0jaWYgZGVmaW5lZChfX21jNjgwMDBfXykKLQlzYSA9IElSUUZfU0hBUkVEOwotI2VuZGlmIC8qIF9fbWM2ODAwMF9fICovCi0KLQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfcGNpKQotCQlzYSA9IElSUUZfU0hBUkVEOwotCiAJaWYgKGlvX3BvcnRzLT5jdGxfYWRkcikKIAkJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwogCiAJaWYgKHJlcXVlc3RfaXJxKGh3aWYtPmlycSwgaXJxX2hhbmRsZXIsIHNhLCBod2lmLT5uYW1lLCBod2lmKSkKIAkJZ290byBvdXRfdXA7CiAKLQlpZiAoIWh3aWYtPnJxc2l6ZSkgewotCQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDgpIHx8Ci0JCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpKQotCQkJaHdpZi0+cnFzaXplID0gMjU2OwotCQllbHNlCi0JCQlod2lmLT5ycXNpemUgPSA2NTUzNjsKLQl9Ci0KICNpZiAhZGVmaW5lZChfX21jNjgwMDBfXykKIAlwcmludGsoS0VSTl9JTkZPICIlcyBhdCAweCUwM2x4LTB4JTAzbHgsMHglMDNseCBvbiBpcnEgJWQiLCBod2lmLT5uYW1lLAogCQlpb19wb3J0cy0+ZGF0YV9hZGRyLCBpb19wb3J0cy0+c3RhdHVzX2FkZHIsCkBAIC0xMDgwLDcgKzEwNjEsNyBAQAogCQlod2lmLT50cF9vcHMgPSBkLT50cF9vcHM7CiAKIAkvKiAtPnNldF9waW9fbW9kZSBmb3IgRFRDMjI3OCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBwb3J0IDAgKi8KLQlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfZHRjMjI3OCB8fCBod2lmLT5jaGFubmVsID09IDApCisJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0RUQzIyNzgpID09IDAgfHwgaHdpZi0+Y2hhbm5lbCA9PSAwKQogCQlod2lmLT5wb3J0X29wcyA9IGQtPnBvcnRfb3BzOwogCiAJaHdpZi0+c3dkbWFfbWFzayA9IGQtPnN3ZG1hX21hc2s7CkBAIC0xMTE0LDYgKzEwOTUsMTMgQEAKIAogCWlmIChkLT5tYXhfc2VjdG9ycykKIAkJaHdpZi0+cnFzaXplID0gZC0+bWF4X3NlY3RvcnM7CisJZWxzZSB7CisJCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OCkgfHwKKwkJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkpCisJCQlod2lmLT5ycXNpemUgPSAyNTY7CisJCWVsc2UKKwkJCWh3aWYtPnJxc2l6ZSA9IDY1NTM2OworCX0KIAogCS8qIGNhbGwgY2hpcHNldCBzcGVjaWZpYyByb3V0aW5lIGZvciBlYWNoIGVuYWJsZWQgcG9ydCAqLwogCWlmIChkLT5pbml0X2h3aWYpCkBAIC0xMzI2LDYgKzEzMTQsOCBAQAogCiAJaWYgKGQpIHsKIAkJaG9zdC0+aW5pdF9jaGlwc2V0ID0gZC0+aW5pdF9jaGlwc2V0OworCQlob3N0LT5nZXRfbG9jayAgICAgPSBkLT5nZXRfbG9jazsKKwkJaG9zdC0+cmVsZWFzZV9sb2NrID0gZC0+cmVsZWFzZV9sb2NrOwogCQlob3N0LT5ob3N0X2ZsYWdzID0gZC0+aG9zdF9mbGFnczsKIAl9CiAKQEAgLTEzNzIsMjAgKzEzNjIsMTUgQEAKIAkJaWRlX2luaXRfcG9ydF9odyhod2lmLCBod3NbaV0pOwogCQlpZGVfcG9ydF9hcHBseV9wYXJhbXMoaHdpZik7CiAKLQkJaWYgKGQgPT0gTlVMTCkgewotCQkJbWF0ZSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGkgJiAxKSAmJiBtYXRlKSB7Ci0JCQkJaHdpZi0+bWF0ZSA9IG1hdGU7Ci0JCQkJbWF0ZS0+bWF0ZSA9IGh3aWY7Ci0JCQl9Ci0KLQkJCW1hdGUgPSAoaSAmIDEpID8gTlVMTCA6IGh3aWY7Ci0KLQkJCWlkZV9pbml0X3BvcnQoaHdpZiwgaSAmIDEsIGQpOwotCQkJaWRlX3BvcnRfY2FibGVfZGV0ZWN0KGh3aWYpOworCQlpZiAoKGkgJiAxKSAmJiBtYXRlKSB7CisJCQlod2lmLT5tYXRlID0gbWF0ZTsKKwkJCW1hdGUtPm1hdGUgPSBod2lmOwogCQl9CiAKKwkJbWF0ZSA9IChpICYgMSkgPyBOVUxMIDogaHdpZjsKKworCQlpZGVfaW5pdF9wb3J0KGh3aWYsIGkgJiAxLCBkKTsKKwkJaWRlX3BvcnRfY2FibGVfZGV0ZWN0KGh3aWYpOwogCQlpZGVfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CiAJfQogCkBAIC0xMzk2LDggKzEzODEsOCBAQAogCQlpZiAoaWRlX3Byb2JlX3BvcnQoaHdpZikgPT0gMCkKIAkJCWh3aWYtPnByZXNlbnQgPSAxOwogCi0JCWlmIChod2lmLT5jaGlwc2V0ICE9IGlkZV80ZHJpdmVzIHx8ICFod2lmLT5tYXRlIHx8Ci0JCSAgICAhaHdpZi0+bWF0ZS0+cHJlc2VudCkgeworCQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfNERSSVZFUykgPT0gMCB8fAorCQkgICAgaHdpZi0+bWF0ZSA9PSBOVUxMIHx8IGh3aWYtPm1hdGUtPnByZXNlbnQgPT0gMCkgewogCQkJaWYgKGlkZV9yZWdpc3Rlcl9wb3J0KGh3aWYpKSB7CiAJCQkJaWRlX2Rpc2FibGVfcG9ydChod2lmKTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IDQxN2NkZTUuLjEwYTg4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtMTk0LDIwICsxOTQsMjAgQEAKIAogc3RhdGljIGludCBzZXRfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAlpbnQgZXJyOwogCiAJaWYgKGFyZyA8IFhGRVJfUElPXzAgfHwgYXJnID4gWEZFUl9VRE1BXzYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOwotCXRhc2sudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7Ci0JdGFzay50Zi5uc2VjdCAgID0gKHU4KWFyZzsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVCB8Ci0JCQlJREVfVEZMQUdfSU5fTlNFQ1Q7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOworCWNtZC50Zi5mZWF0dXJlID0gU0VURkVBVFVSRVNfWEZFUjsKKwljbWQudGYubnNlY3QgICA9ICh1OClhcmc7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUIHwKKwkJCSBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAKLQllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAogCWlmICghZXJyKSB7CiAJCWlkZV9zZXRfeGZlcl9yYXRlKGRyaXZlLCAodTgpIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCA0ZTYxODFjLi42NGRmYTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTE1MiwxMSArMTUyLDYgQEAKICNkZWZpbmUgSURFVEFQRV9MVV9SRVRFTlNJT05fTUFTSwkyCiAjZGVmaW5lIElERVRBUEVfTFVfRU9UX01BU0sJCTQKIAotLyogRXJyb3IgY29kZXMgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KLSNkZWZpbmUgSURFVEFQRV9FUlJPUl9HRU5FUkFMCQkxMDEKLSNkZWZpbmUgSURFVEFQRV9FUlJPUl9GSUxFTUFSSwkJMTAyCi0jZGVmaW5lIElERVRBUEVfRVJST1JfRU9ECQkxMDMKLQogLyogU3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBTRUxFQ1QgU0VOU0UgLyBNT0RFIFNFTlNFIHBhY2tldCBjb21tYW5kcy4gKi8KICNkZWZpbmUgSURFVEFQRV9CTE9DS19ERVNDUklQVE9SCTAKICNkZWZpbmUgSURFVEFQRV9DQVBBQklMSVRJRVNfUEFHRQkweDJhCkBAIC0xNzEsMTQgKzE2Niw2IEBACiAJc3RydWN0IGdlbmRpc2sJCSpkaXNrOwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAotCS8qCi0JICoJZmFpbGVkX3BjIHBvaW50cyB0byB0aGUgbGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQsIG9yIGNvbnRhaW5zCi0JICoJTlVMTCBpZiB3ZSBkbyBub3QgbmVlZCB0byByZXRyeSBhbnkgcGFja2V0IGNvbW1hbmQuIFRoaXMgaXMKLQkgKglyZXF1aXJlZCBzaW5jZSBhbiBhZGRpdGlvbmFsIHBhY2tldCBjb21tYW5kIGlzIG5lZWRlZCBiZWZvcmUgdGhlCi0JICoJcmV0cnksIHRvIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IHdlbnQgd3JvbmcuCi0JICovCi0JLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CiAJLyogdXNlZCBieSBSRVFfSURFVEFQRV97UkVBRCxXUklURX0gcmVxdWVzdHMgKi8KIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKIApAQCAtMjQ1LDkgKzIzMiw2IEBACiAJLyogV2FzdGVkIHNwYWNlIGluIGVhY2ggc3RhZ2UgKi8KIAlpbnQgZXhjZXNzX2JoX3NpemU7CiAKLQkvKiBwcm90ZWN0cyB0aGUgaWRlLXRhcGUgcXVldWUgKi8KLQlzcGlubG9ja190IGxvY2s7Ci0KIAkvKiBNZWFzdXJlcyBhdmVyYWdlIHRhcGUgc3BlZWQgKi8KIAl1bnNpZ25lZCBsb25nIGF2Z190aW1lOwogCWludCBhdmdfc2l6ZTsKQEAgLTQwMCw3ICszODQsNyBAQAogc3RhdGljIHZvaWQgaWRldGFwZV9hbmFseXplX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKnNlbnNlKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gdGFwZS0+ZmFpbGVkX3BjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPmZhaWxlZF9wYzsKIAogCXRhcGUtPnNlbnNlX2tleSA9IHNlbnNlWzJdICYgMHhGOwogCXRhcGUtPmFzYyAgICAgICA9IHNlbnNlWzEyXTsKQEAgLTQzMywxOSArNDE3LDE5IEBACiAJCX0KIAl9CiAJaWYgKHBjLT5jWzBdID09IFJFQURfNiAmJiAoc2Vuc2VbMl0gJiAweDgwKSkgewotCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0ZJTEVNQVJLOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0ZJTEVNQVJLOwogCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAl9CiAJaWYgKHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKChzZW5zZVsyXSAmIDB4NDApIHx8ICh0YXBlLT5zZW5zZV9rZXkgPT0gMHhkCiAJCSAgICAgJiYgdGFwZS0+YXNjID09IDB4MCAmJiB0YXBlLT5hc2NxID09IDB4MikpIHsKLQkJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfRU9EOworCQkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9FT0Q7CiAJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAkJfQogCX0KIAlpZiAocGMtPmNbMF0gPT0gUkVBRF82IHx8IHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKHRhcGUtPnNlbnNlX2tleSA9PSA4KSB7Ci0JCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0VPRDsKKwkJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfRU9EOwogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJCX0KIAkJaWYgKCEocGMtPmZsYWdzICYgUENfRkxBR19BQk9SVCkgJiYKQEAgLTQ3Nyw1MiArNDYxLDIzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlkZXRhcGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0cykKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyb3I7Ci0KLQlkZWJ1Z19sb2coREJHX1BST0NTLCAiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6CWVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOyBicmVhazsKLQljYXNlIDE6IGVycm9yID0gMDsgYnJlYWs7Ci0JZGVmYXVsdDogZXJyb3IgPSB1cHRvZGF0ZTsKLQl9Ci0JcnEtPmVycm9ycyA9IGVycm9yOwotCWlmIChlcnJvcikKLQkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQotCWlmICghYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnJfc2VjdHMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwotCi0JaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIDAsIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBpZGVfdGFwZV9oYW5kbGVfZHNjKGlkZV9kcml2ZV90ICopOwogCi1zdGF0aWMgdm9pZCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCitzdGF0aWMgaW50IGlkZV90YXBlX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CisJaW50IGVyciA9IHVwdG9kYXRlID8gMCA6IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAogCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGRzYykKIAkJaWRlX3RhcGVfaGFuZGxlX2RzYyhkcml2ZSk7CiAKLQlpZiAodGFwZS0+ZmFpbGVkX3BjID09IHBjKQotCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjID09IHBjKQorCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAogCWlmIChwYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CiAJCWlmICh1cHRvZGF0ZSkKQEAgLTUzMSw3ICs0ODYsNiBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogRXJyb3IgaW4gUkVRVUVTVCBTRU5TRSAiCiAJCQkJCSJpdHNlbGYgLSBBYm9ydGluZyByZXF1ZXN0IVxuIik7CiAJfSBlbHNlIGlmIChwYy0+Y1swXSA9PSBSRUFEXzYgfHwgcGMtPmNbMF0gPT0gV1JJVEVfNikgewotCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAJCWludCBibG9ja3MgPSBwYy0+eGZlcnJlZCAvIHRhcGUtPmJsa19zaXplOwogCiAJCXRhcGUtPmF2Z19zaXplICs9IGJsb2NrcyAqIHRhcGUtPmJsa19zaXplOwpAQCAtNTQ2LDggKzUwMCwxMCBAQAogCQl0YXBlLT5maXJzdF9mcmFtZSArPSBibG9ja3M7CiAJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgLT0gYmxvY2tzOwogCi0JCWlmIChwYy0+ZXJyb3IpCi0JCQl1cHRvZGF0ZSA9IHBjLT5lcnJvcjsKKwkJaWYgKHBjLT5lcnJvcikgeworCQkJdXB0b2RhdGUgPSAwOworCQkJZXJyID0gcGMtPmVycm9yOworCQl9CiAJfSBlbHNlIGlmIChwYy0+Y1swXSA9PSBSRUFEX1BPU0lUSU9OICYmIHVwdG9kYXRlKSB7CiAJCXU4ICpyZWFkcG9zID0gcGMtPmJ1ZjsKIApAQCAtNTYxLDYgKzUxNyw3IEBACiAJCQkJCSAidG8gdGhlIHRhcGVcbiIpOwogCQkJY2xlYXJfYml0KElERV9BRkxBR19BRERSRVNTX1ZBTElELCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJCXVwdG9kYXRlID0gMDsKKwkJCWVyciA9IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAkJfSBlbHNlIHsKIAkJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJCbG9jayBMb2NhdGlvbiAtICV1XG4iLAogCQkJCQliZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZyZWFkcG9zWzRdKSk7CkBAIC01NzEsNyArNTI4LDkgQEAKIAkJfQogCX0KIAotCWlkZXRhcGVfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlycS0+ZXJyb3JzID0gZXJyOworCisJcmV0dXJuIHVwdG9kYXRlOwogfQogCiAvKgpAQCAtNjIxLDcgKzU4MCw3IEBACiAgKgogICogVGhlIGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBpbiB0aHJlZSBzdGFnZXM6CiAgKgotICogMS4gaWRldGFwZV9pc3N1ZV9wYyB3aWxsIHNlbmQgdGhlIHBhY2tldCBjb21tYW5kIHRvIHRoZSBkcml2ZSwgYW5kIHdpbGwgc2V0CisgKiAxLiBpZGVfdGFwZV9pc3N1ZV9wYyB3aWxsIHNlbmQgdGhlIHBhY2tldCBjb21tYW5kIHRvIHRoZSBkcml2ZSwgYW5kIHdpbGwgc2V0CiAgKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gaWRlX3BjX2ludHIuCiAgKgogICogMi4gT24gZWFjaCBpbnRlcnJ1cHQsIGlkZV9wY19pbnRyIHdpbGwgYmUgY2FsbGVkLiBUaGlzIHN0ZXAgd2lsbCBiZQpAQCAtNjQ5LDggKzYwOCw5IEBACiAgKiByZXF1ZXN0LgogICovCiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfdGFwZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSBzdHJ1Y3QgaWRlX2NtZCAqY21kLAorCQkJCQkgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTY2MCw4ICs2MjAsOCBAQAogCQkJIlR3byByZXF1ZXN0IHNlbnNlIGluIHNlcmlhbCB3ZXJlIGlzc3VlZFxuIik7CiAJfQogCi0JaWYgKHRhcGUtPmZhaWxlZF9wYyA9PSBOVUxMICYmIHBjLT5jWzBdICE9IFJFUVVFU1RfU0VOU0UpCi0JCXRhcGUtPmZhaWxlZF9wYyA9IHBjOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjID09IE5VTEwgJiYgcGMtPmNbMF0gIT0gUkVRVUVTVF9TRU5TRSkKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IHBjOwogCiAJLyogU2V0IHRoZSBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCiAJZHJpdmUtPnBjID0gcGM7CkBAIC02ODUsOSArNjQ1LDkgQEAKIAkJCQkJCXRhcGUtPmFzY3EpOwogCQkJfQogCQkJLyogR2l2aW5nIHVwICovCi0JCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CisJCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAJCX0KLQkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CkBAIC02OTUsNyArNjU1LDcgQEAKIAogCXBjLT5yZXRyaWVzKys7CiAKLQlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlKTsKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBjbWQpOwogfQogCiAvKiBBIG1vZGUgc2Vuc2UgY29tbWFuZCBpcyB1c2VkIHRvICJzZW5zZSIgdGFwZSBwYXJhbWV0ZXJzLiAqLwpAQCAtNzQ2LDggKzcwNiw4IEBACiAJCX0KIAkJcGMtPmVycm9yID0gMDsKIAl9IGVsc2UgewotCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7Ci0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfR0VORVJBTDsKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJfQogCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwpAQCAtNzkwLDYgKzc1MCw3IEBACiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBOVUxMOwogCXN0cnVjdCByZXF1ZXN0ICpwb3N0cG9uZWRfcnEgPSB0YXBlLT5wb3N0cG9uZWRfcnE7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCXU4IHN0YXQ7CiAKIAlkZWJ1Z19sb2coREJHX1NFTlNFLCAic2VjdG9yOiAlbGx1LCBucl9zZWN0b3JzOiAlbHUsIgpAQCAtODAxLDEzICs3NjIsMTUgQEAKIAkJLyogV2UgZG8gbm90IHN1cHBvcnQgYnVmZmVyIGNhY2hlIG9yaWdpbmF0ZWQgcmVxdWVzdHMuICovCiAJCXByaW50ayhLRVJOX05PVElDRSAiaWRlLXRhcGU6ICVzOiBVbnN1cHBvcnRlZCByZXF1ZXN0IGluICIKIAkJCSJyZXF1ZXN0IHF1ZXVlICglZClcbiIsIGRyaXZlLT5uYW1lLCBycS0+Y21kX3R5cGUpOwotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgcnEtPmVycm9ycyA9PSAwKQorCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgaWRlX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKIAkvKiBSZXRyeSBhIGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCWlmICh0YXBlLT5mYWlsZWRfcGMgJiYgZHJpdmUtPnBjLT5jWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKLQkJcGMgPSB0YXBlLT5mYWlsZWRfcGM7CisJaWYgKGRyaXZlLT5mYWlsZWRfcGMgJiYgZHJpdmUtPnBjLT5jWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJcGMgPSBkcml2ZS0+ZmFpbGVkX3BjOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTgxNSw3ICs3NzgsOSBAQAogCQlpZiAocnEgIT0gcG9zdHBvbmVkX3JxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBpZGUtdGFwZS5jIGJ1ZyAtICIKIAkJCQkJIlR3byBEU0MgcmVxdWVzdHMgd2VyZSBxdWV1ZWRcbiIpOwotCQkJaWRldGFwZV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJCXJxLT5lcnJvcnMgPSAwOworCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCkBAIC04ODEsNyArODQ2LDE0IEBACiAJQlVHKCk7CiAKIG91dDoKLQlyZXR1cm4gaWRldGFwZV9pc3N1ZV9wYyhkcml2ZSwgcGMpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCisJY21kLnJxID0gcnE7CisKKwlyZXR1cm4gaWRlX3RhcGVfaXNzdWVfcGMoZHJpdmUsICZjbWQsIHBjKTsKIH0KIAogLyoKQEAgLTEyMjYsNyArMTE5OCw3IEBACiAKIAlpZiAodGFwZS0+bWVyZ2VfYmgpCiAJCWlkZXRhcGVfaW5pdF9tZXJnZV9idWZmZXIodGFwZSk7Ci0JaWYgKGVycm9ycyA9PSBJREVUQVBFX0VSUk9SX0dFTkVSQUwpCisJaWYgKGVycm9ycyA9PSBJREVfRFJWX0VSUk9SX0dFTkVSQUwpCiAJCXJldHVybiAtRUlPOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMTkyLDggKzIxNjQsNiBAQAogCWRyaXZlLT5wY191cGRhdGVfYnVmZmVycyA9IGlkZXRhcGVfdXBkYXRlX2J1ZmZlcnM7CiAJZHJpdmUtPnBjX2lvX2J1ZmZlcnMJID0gaWRlX3RhcGVfaW9fYnVmZmVyczsKIAotCXNwaW5fbG9ja19pbml0KCZ0YXBlLT5sb2NrKTsKLQogCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCiAJaWYgKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0RTQykgewpAQCAtMjMyNSw3ICsyMjk1LDYgQEAKIAkucmVtb3ZlCQkJPSBpZGVfdGFwZV9yZW1vdmUsCiAJLnZlcnNpb24JCT0gSURFVEFQRV9WRVJTSU9OLAogCS5kb19yZXF1ZXN0CQk9IGlkZXRhcGVfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJCT0gaWRldGFwZV9lbmRfcmVxdWVzdCwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvY19lbnRyaWVzCQk9IGlkZV90YXBlX3Byb2NfZW50cmllcywKIAkucHJvY19kZXZzZXRzCQk9IGlkZV90YXBlX3Byb2NfZGV2c2V0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggMTYxMzhiYy4uODQ1MzJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTM5LDg4ICszOSw4NiBAQAogCiBpbnQgdGFza2ZpbGVfbGliX2dldF9pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmKQogewotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0JYXJncy50Zi5uc2VjdCA9IDB4MDE7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGYubnNlY3QgPSAweDAxOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBOwogCWVsc2UKLQkJYXJncy50Zi5jb21tYW5kID0gQVRBX0NNRF9JRF9BVEFQSTsKLQlhcmdzLnRmX2ZsYWdzCT0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlhcmdzLmRhdGFfcGhhc2UJPSBUQVNLRklMRV9JTjsKLQlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmFyZ3MsIGJ1ZiwgMSk7CisJCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9JRF9BVEFQSTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKKworCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIDEpOwogfQogCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfbm9fZGF0YV9pbnRyKGlkZV9kcml2ZV90ICopOwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBwcmVfdGFza19vdXRfaW50cihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19pbl9pbnRyKGlkZV9kcml2ZV90ICopOworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBwcmVfdGFza19vdXRfaW50cihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19waW9faW50cihpZGVfZHJpdmVfdCAqKTsKIAotaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitpZGVfc3RhcnRzdG9wX3QgZG9fcndfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqb3JpZ19jbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAJaWRlX2hhbmRsZXJfdCAqaGFuZGxlciA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBod2lmLT5kbWFfb3BzOwogCi0JaWYgKHRhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfTVVMVElfSU4gfHwKLQkgICAgdGFzay0+ZGF0YV9waGFzZSA9PSBUQVNLRklMRV9NVUxUSV9PVVQpIHsKLQkJaWYgKCFkcml2ZS0+bXVsdF9jb3VudCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbXVsdGltb2RlIG5vdCBzZXQhXG4iLAotCQkJCQlkcml2ZS0+bmFtZSk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCX0KKwlpZiAob3JpZ19jbWQtPnByb3RvY29sID09IEFUQV9QUk9UX1BJTyAmJgorCSAgICAob3JpZ19jbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX01VTFRJX1BJTykgJiYKKwkgICAgZHJpdmUtPm11bHRfY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtdWx0aW1vZGUgbm90IHNldCFcbiIsIGRyaXZlLT5uYW1lKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQotCQl0YXNrLT50Zl9mbGFncyB8PSBJREVfVEZMQUdfRkxBR0dFRF9TRVRfSU5fRkxBR1M7CisJaWYgKG9yaWdfY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCisJCW9yaWdfY21kLT5mdGZfZmxhZ3MgfD0gSURFX0ZURkxBR19TRVRfSU5fRkxBR1M7CiAKLQltZW1jcHkoJmh3aWYtPnRhc2ssIHRhc2ssIHNpemVvZigqdGFzaykpOworCW1lbWNweShjbWQsIG9yaWdfY21kLCBzaXplb2YoKmNtZCkpOwogCi0JaWYgKCh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CisJaWYgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0RNQV9QSU9fRkFMTEJBQ0spID09IDApIHsKIAkJaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsIHRmKTsKIAkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwogCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgdGFzayk7CisJCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgY21kKTsKIAl9CiAKLQlzd2l0Y2ggKHRhc2stPmRhdGFfcGhhc2UpIHsKLQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQljYXNlIFRBU0tGSUxFX09VVDoKLQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgdGYtPmNvbW1hbmQpOwotCQluZGVsYXkoNDAwKTsJLyogRklYTUUgKi8KLQkJcmV0dXJuIHByZV90YXNrX291dF9pbnRyKGRyaXZlLCB0YXNrLT5ycSk7Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKLQljYXNlIFRBU0tGSUxFX0lOOgotCQloYW5kbGVyID0gdGFza19pbl9pbnRyOworCXN3aXRjaCAoY21kLT5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfUElPOgorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgeworCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgdGYtPmNvbW1hbmQpOworCQkJbmRlbGF5KDQwMCk7CS8qIEZJWE1FICovCisJCQlyZXR1cm4gcHJlX3Rhc2tfb3V0X2ludHIoZHJpdmUsIGNtZCk7CisJCX0KKwkJaGFuZGxlciA9IHRhc2tfcGlvX2ludHI7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwotCWNhc2UgVEFTS0ZJTEVfTk9fREFUQToKKwljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJaWYgKGhhbmRsZXIgPT0gTlVMTCkKIAkJCWhhbmRsZXIgPSB0YXNrX25vX2RhdGFfaW50cjsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgdGYtPmNvbW1hbmQsIGhhbmRsZXIsCi0JCQkJICAgIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBoYW5kbGVyLCBXQUlUX1dPUlNUQ0FTRSk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKLQlkZWZhdWx0OgorCWNhc2UgQVRBX1BST1RfRE1BOgogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwIHx8Ci0JCSAgICBkbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpKQorCQkgICAgaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgY21kKSA9PSAwIHx8CisJCSAgICBkbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUsIGNtZCkpCiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCWRtYV9vcHMtPmRtYV9leGVjX2NtZChkcml2ZSwgdGYtPmNvbW1hbmQpOworCQlod2lmLT5leHBpcnkgPSBkbWFfb3BzLT5kbWFfdGltZXJfZXhwaXJ5OworCQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjbWQsIGlkZV9kbWFfaW50ciwgMiAqIFdBSVRfQ01EKTsKIAkJZG1hX29wcy0+ZG1hX3N0YXJ0KGRyaXZlKTsKKwlkZWZhdWx0OgogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG9fcndfdGFza2ZpbGUpOwogCi0vKgotICogSGFuZGxlciBmb3IgY29tbWFuZHMgd2l0aG91dCBhIGRhdGEgcGhhc2UKLSAqLwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX25vX2RhdGFfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgKnRhc2sgPSAmaHdpZi0+dGFzazsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQlpbnQgY3VzdG9tID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSKSA/IDEgOiAwOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJaW50IGN1c3RvbSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSKSA/IDEgOiAwOwogCWludCByZXRyaWVzID0gKGN1c3RvbSAmJiB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykgPyA1IDogMTsKIAl1OCBzdGF0OwogCkBAIC0xNDIsMjggKzE0MCwyNiBAQAogCQl9IGVsc2UgaWYgKGN1c3RvbSAmJiB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykgewogCQkJaWYgKChzdGF0ICYgKEFUQV9FUlIgfCBBVEFfRFJRKSkgPT0gMCkgewogCQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfbm9fZGF0YV9pbnRyLAotCQkJCQkJV0FJVF9XT1JTVENBU0UsIE5VTEwpOworCQkJCQkJV0FJVF9XT1JTVENBU0UpOwogCQkJCXJldHVybiBpZGVfc3RhcnRlZDsKIAkJCX0KIAkJfQogCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAidGFza19ub19kYXRhX2ludHIiLCBzdGF0KTsKLQkJLyogY2FsbHMgaWRlX2VuZF9kcml2ZV9jbWQgKi8KIAl9CiAKLQlpZiAoIWN1c3RvbSkKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7Ci0JZWxzZSBpZiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JRExFSU1NRURJQVRFKSB7Ci0JCWh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgdGFzayk7Ci0JCWlmICh0Zi0+bGJhbCAhPSAweGM0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoZWFkIHVubG9hZCBmYWlsZWQhXG4iLAotCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKLQkJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7Ci0JCX0gZWxzZQotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUEFSS0VEOwotCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKLQl9IGVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKQorCWlmIChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9TRVRfTVVMVEkpCiAJCWRyaXZlLT5tdWx0X2NvdW50ID0gZHJpdmUtPm11bHRfcmVxOwogCisJaWYgKGN1c3RvbSA9PSAwIHx8IHRmLT5jb21tYW5kID09IEFUQV9DTURfSURMRUlNTUVESUFURSB8fAorCSAgICB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0NIS19QT1dFUikgeworCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKworCQlpZiAoYmxrX3BtX3JlcXVlc3QocnEpKQorCQkJaWRlX2NvbXBsZXRlX3BtX3JxKGRyaXZlLCBycSk7CisJCWVsc2UKKwkJCWlkZV9maW5pc2hfY21kKGRyaXZlLCBjbWQsIHN0YXQpOworCX0KKwogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIApAQCAtMTkyLDEyICsxODgsMTIgQEAKIAlyZXR1cm4gc3RhdDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3Bpb19zZWN0b3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICB1bnNpZ25lZCBpbnQgd3JpdGUpCitzdGF0aWMgdm9pZCBpZGVfcGlvX2J5dGVzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCSAgdW5zaWduZWQgaW50IHdyaXRlLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnID0gaHdpZi0+Y3Vyc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZyA9IGNtZC0+Y3Vyc2c7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjA1LDE0ICsyMDEsMTQgQEAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXU4ICpidWY7CiAKLQljdXJzZyA9IGh3aWYtPmN1cnNnOworCWN1cnNnID0gY21kLT5jdXJzZzsKIAlpZiAoIWN1cnNnKSB7CiAJCWN1cnNnID0gc2c7Ci0JCWh3aWYtPmN1cnNnID0gc2c7CisJCWNtZC0+Y3Vyc2cgPSBzZzsKIAl9CiAKIAlwYWdlID0gc2dfcGFnZShjdXJzZyk7Ci0Jb2Zmc2V0ID0gY3Vyc2ctPm9mZnNldCArIGh3aWYtPmN1cnNnX29mcyAqIFNFQ1RPUl9TSVpFOworCW9mZnNldCA9IGN1cnNnLT5vZmZzZXQgKyBjbWQtPmN1cnNnX29mczsKIAogCS8qIGdldCB0aGUgY3VycmVudCBwYWdlIGFuZCBvZmZzZXQgKi8KIAlwYWdlID0gbnRoX3BhZ2UocGFnZSwgKG9mZnNldCA+PiBQQUdFX1NISUZUKSk7CkBAIC0yMjMsMTkgKzIxOSwxOSBAQAogI2VuZGlmCiAJYnVmID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpICsgb2Zmc2V0OwogCi0JaHdpZi0+bmxlZnQtLTsKLQlod2lmLT5jdXJzZ19vZnMrKzsKKwljbWQtPm5sZWZ0IC09IG5yX2J5dGVzOworCWNtZC0+Y3Vyc2dfb2ZzICs9IG5yX2J5dGVzOwogCi0JaWYgKChod2lmLT5jdXJzZ19vZnMgKiBTRUNUT1JfU0laRSkgPT0gY3Vyc2ctPmxlbmd0aCkgewotCQlod2lmLT5jdXJzZyA9IHNnX25leHQoaHdpZi0+Y3Vyc2cpOwotCQlod2lmLT5jdXJzZ19vZnMgPSAwOworCWlmIChjbWQtPmN1cnNnX29mcyA9PSBjdXJzZy0+bGVuZ3RoKSB7CisJCWNtZC0+Y3Vyc2cgPSBzZ19uZXh0KGNtZC0+Y3Vyc2cpOworCQljbWQtPmN1cnNnX29mcyA9IDA7CiAJfQogCiAJLyogZG8gdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyICovCiAJaWYgKHdyaXRlKQotCQlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7CisJCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIGNtZCwgYnVmLCBucl9ieXRlcyk7CiAJZWxzZQotCQlod2lmLT50cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIHJxLCBidWYsIFNFQ1RPUl9TSVpFKTsKKwkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBjbWQsIGJ1ZiwgbnJfYnl0ZXMpOwogCiAJa3VubWFwX2F0b21pYyhidWYsIEtNX0JJT19TUkNfSVJRKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMjQzLDE4OCArMjM5LDEzNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9waW9fbXVsdGkoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBpZGVfcGlvX211bHRpKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgdW5zaWduZWQgaW50IHdyaXRlKQogewogCXVuc2lnbmVkIGludCBuc2VjdDsKIAotCW5zZWN0ID0gbWluX3QodW5zaWduZWQgaW50LCBkcml2ZS0+aHdpZi0+bmxlZnQsIGRyaXZlLT5tdWx0X2NvdW50KTsKKwluc2VjdCA9IG1pbl90KHVuc2lnbmVkIGludCwgY21kLT5ubGVmdCA+PiA5LCBkcml2ZS0+bXVsdF9jb3VudCk7CiAJd2hpbGUgKG5zZWN0LS0pCi0JCWlkZV9waW9fc2VjdG9yKGRyaXZlLCBycSwgd3JpdGUpOworCQlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBTRUNUT1JfU0laRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9waW9fZGF0YWJsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHdyaXRlKQorc3RhdGljIHZvaWQgaWRlX3Bpb19kYXRhYmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IHdyaXRlKQogewogCXU4IHNhdmVkX2lvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwogCi0JaWYgKHJxLT5iaW8pCS8qIGZzIHJlcXVlc3QgKi8KLQkJcnEtPmVycm9ycyA9IDA7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpCisJCWNtZC0+cnEtPmVycm9ycyA9IDA7CiAKLQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewotCQlpZGVfdGFza190ICp0YXNrID0gcnEtPnNwZWNpYWw7Ci0KLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lPXzE2QklUKQotCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKLQl9CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU9fMTZCSVQpCisJCWRyaXZlLT5pb18zMmJpdCA9IDA7CiAKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAKLQlzd2l0Y2ggKGRyaXZlLT5od2lmLT5kYXRhX3BoYXNlKSB7Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKLQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQkJaWRlX3Bpb19tdWx0aShkcml2ZSwgcnEsIHdyaXRlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWRlX3Bpb19zZWN0b3IoZHJpdmUsIHJxLCB3cml0ZSk7Ci0JCWJyZWFrOwotCX0KKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pCisJCWlkZV9waW9fbXVsdGkoZHJpdmUsIGNtZCwgd3JpdGUpOworCWVsc2UKKwkJaWRlX3Bpb19ieXRlcyhkcml2ZSwgY21kLCB3cml0ZSwgU0VDVE9SX1NJWkUpOwogCiAJZHJpdmUtPmlvXzMyYml0ID0gc2F2ZWRfaW9fMzJiaXQ7CiB9CiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCQkgIGNvbnN0IGNoYXIgKnMsIHU4IHN0YXQpCitzdGF0aWMgdm9pZCBpZGVfZXJyb3JfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpZiAocnEtPmJpbykgewotCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JCWludCBzZWN0b3JzID0gaHdpZi0+bnNlY3QgLSBod2lmLT5ubGVmdDsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykgeworCQlpbnQgbnJfYnl0ZXMgPSBjbWQtPm5ieXRlcyAtIGNtZC0+bmxlZnQ7CiAKLQkJc3dpdGNoIChod2lmLT5kYXRhX3BoYXNlKSB7Ci0JCWNhc2UgVEFTS0ZJTEVfSU46Ci0JCQlpZiAoaHdpZi0+bmxlZnQpCi0JCQkJYnJlYWs7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCQlzZWN0b3JzLS07Ci0JCQlicmVhazsKLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKLQkJCWlmIChod2lmLT5ubGVmdCkKLQkJCQlicmVhazsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQkJCXNlY3RvcnMgLT0gZHJpdmUtPm11bHRfY291bnQ7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwkJaWYgKGNtZC0+cHJvdG9jb2wgPT0gQVRBX1BST1RfUElPICYmCisJCSAgICAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpIHx8IGNtZC0+bmxlZnQgPT0gMCkpIHsKKwkJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX01VTFRJX1BJTykKKwkJCQlucl9ieXRlcyAtPSBkcml2ZS0+bXVsdF9jb3VudCA8PCA5OworCQkJZWxzZQorCQkJCW5yX2J5dGVzIC09IFNFQ1RPUl9TSVpFOwogCQl9CiAKLQkJaWYgKHNlY3RvcnMgPiAwKSB7Ci0JCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OwotCi0JCQlkcnYgPSAqKHN0cnVjdCBpZGVfZHJpdmVyICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAxLCBzZWN0b3JzKTsKLQkJfQorCQlpZiAobnJfYnl0ZXMgPiAwKQorCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBucl9ieXRlcyk7CiAJfQotCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsIHMsIHN0YXQpOwogfQogCi12b2lkIHRhc2tfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQpCit2b2lkIGlkZV9maW5pc2hfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdTggc3RhdCkKIHsKLQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewotCQl1OCBlcnIgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOworCXU4IGVyciA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKIAotCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgZXJyKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChycS0+cnFfZGlzaykgewotCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OwotCi0JCWRydiA9ICooc3RydWN0IGlkZV9kcml2ZXIgKiopcnEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTs7Ci0JCWRydi0+ZW5kX3JlcXVlc3QoZHJpdmUsIDEsIHJxLT5ucl9zZWN0b3JzKTsKLQl9IGVsc2UKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+bnJfc2VjdG9ycyk7CisJaWRlX2NvbXBsZXRlX2NtZChkcml2ZSwgY21kLCBzdGF0LCBlcnIpOworCXJxLT5lcnJvcnMgPSBlcnI7CisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIgPyAtRUlPIDogMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiB9CiAKIC8qCi0gKiBXZSBnb3QgYW4gaW50ZXJydXB0IG9uIGEgdGFza19pbiBjYXNlLCBidXQgbm8gZXJyb3JzIGFuZCBubyBEUlEuCi0gKgotICogSXQgbWlnaHQgYmUgYSBzcHVyaW91cyBpcnEgKHNoYXJlZCBpcnEpLCBidXQgaXQgbWlnaHQgYmUgYQotICogY29tbWFuZCB0aGF0IGhhZCBubyBvdXRwdXQuCisgKiBIYW5kbGVyIGZvciBjb21tYW5kIHdpdGggUElPIGRhdGEgcGhhc2UuCiAgKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19pbl91bmV4cGVjdGVkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQotewotCS8qIENvbW1hbmQgYWxsIGRvbmU/ICovCi0JaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSkgewotCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQkvKiBBc3N1bWUgaXQgd2FzIGEgc3B1cmlvdXMgaXJxICovCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19pbl9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0JcmV0dXJuIGlkZV9zdGFydGVkOwotfQotCi0vKgotICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhLWluIHBoYXNlIChSZWFkL1JlYWQgTXVsdGlwbGUpLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfcGlvX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmRyaXZlLT5od2lmLT5jbWQ7CiAJdTggc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisJdTggd3JpdGUgPSAhIShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKTsKIAotCS8qIEVycm9yPyAqLwotCWlmIChzdGF0ICYgQVRBX0VSUikKLQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7CisJaWYgKHdyaXRlID09IDApIHsKKwkJLyogRXJyb3I/ICovCisJCWlmIChzdGF0ICYgQVRBX0VSUikKKwkJCWdvdG8gb3V0X2VycjsKIAotCS8qIERpZG4ndCB3YW50IGFueSBkYXRhPyBPZGQuICovCi0JaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkKLQkJcmV0dXJuIHRhc2tfaW5fdW5leHBlY3RlZChkcml2ZSwgcnEsIHN0YXQpOworCQkvKiBEaWRuJ3Qgd2FudCBhbnkgZGF0YT8gT2RkLiAqLworCQlpZiAoKHN0YXQgJiBBVEFfRFJRKSA9PSAwKSB7CisJCQkvKiBDb21tYW5kIGFsbCBkb25lPyAqLworCQkJaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSkKKwkJCQlnb3RvIG91dF9lbmQ7CiAKLQlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgcnEsIDApOworCQkJLyogQXNzdW1lIGl0IHdhcyBhIHNwdXJpb3VzIGlycSAqLworCQkJZ290byBvdXRfd2FpdDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghT0tfU1RBVChzdGF0LCBEUklWRV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCkpCisJCQlnb3RvIG91dF9lcnI7CisKKwkJLyogRGVhbCB3aXRoIHVuZXhwZWN0ZWQgQVRBIGRhdGEgcGhhc2UuICovCisJCWlmICgoKHN0YXQgJiBBVEFfRFJRKSA9PSAwKSBeIChjbWQtPm5sZWZ0ID09IDApKQorCQkJZ290byBvdXRfZXJyOworCX0KKworCWlmICh3cml0ZSAmJiBjbWQtPm5sZWZ0ID09IDApCisJCWdvdG8gb3V0X2VuZDsKKworCS8qIFN0aWxsIGRhdGEgbGVmdCB0byB0cmFuc2Zlci4gKi8KKwlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgY21kLCB3cml0ZSk7CiAKIAkvKiBBcmUgd2UgZG9uZT8gQ2hlY2sgc3RhdHVzIGFuZCBmaW5pc2ggdHJhbnNmZXIuICovCi0JaWYgKCFod2lmLT5ubGVmdCkgeworCWlmICh3cml0ZSA9PSAwICYmIGNtZC0+bmxlZnQgPT0gMCkgewogCQlzdGF0ID0gd2FpdF9kcml2ZV9ub3RfYnVzeShkcml2ZSk7CiAJCWlmICghT0tfU1RBVChzdGF0LCAwLCBCQURfU1RBVCkpCi0JCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fZnVuY19fLCBzdGF0KTsKLQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCQlnb3RvIG91dF9lcnI7CisKKwkJZ290byBvdXRfZW5kOwogCX0KLQorb3V0X3dhaXQ6CiAJLyogU3RpbGwgZGF0YSBsZWZ0IHRvIHRyYW5zZmVyLiAqLwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfaW5faW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19waW9faW50ciwgV0FJVF9XT1JTVENBU0UpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKK291dF9lbmQ6CisJaWYgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSA9PSAwKQorCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKKwllbHNlCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgY21kLT5ycS0+bnJfc2VjdG9ycyA8PCA5KTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7CitvdXRfZXJyOgorCWlkZV9lcnJvcl9jbWQoZHJpdmUsIGNtZCk7CisJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgX19mdW5jX18sIHN0YXQpOwogfQogCi0vKgotICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhLW91dCBwaGFzZSAoV3JpdGUvV3JpdGUgTXVsdGlwbGUpLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfb3V0X2ludHIgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdTggc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQpKQotCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fZnVuY19fLCBzdGF0KTsKLQotCS8qIERlYWwgd2l0aCB1bmV4cGVjdGVkIEFUQSBkYXRhIHBoYXNlLiAqLwotCWlmICgoKHN0YXQgJiBBVEFfRFJRKSA9PSAwKSBeICFod2lmLT5ubGVmdCkKLQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7Ci0KLQlpZiAoIWh3aWYtPm5sZWZ0KSB7Ci0JCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCS8qIFN0aWxsIGRhdGEgbGVmdCB0byB0cmFuc2Zlci4gKi8KLQlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgcnEsIDEpOwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfb3V0X2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBwcmVfdGFza19vdXRfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfc3RhcnRzdG9wX3Qgc3RhcnRzdG9wOwogCiAJaWYgKGlkZV93YWl0X3N0YXQoJnN0YXJ0c3RvcCwgZHJpdmUsIEFUQV9EUlEsCiAJCQkgIGRyaXZlLT5iYWRfd3N0YXQsIFdBSVRfRFJRKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBEUlEgYWZ0ZXIgaXNzdWluZyAlc1dSSVRFJXNcbiIsCi0JCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPyAiTVVMVCIgOiAiIiwKKwkJCWRyaXZlLT5uYW1lLAorCQkJKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKSA/ICJNVUxUIiA6ICIiLAogCQkJKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpID8gIl9FWFQiIDogIiIpOwogCQlyZXR1cm4gc3RhcnRzdG9wOwogCX0KQEAgLTQzMiwxMyArMzc3LDE1IEBACiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VOTUFTSykgPT0gMCkKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfb3V0X2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgcnEsIDEpOworCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfcGlvX2ludHIsIFdBSVRfV09SU1RDQVNFKTsKKworCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBjbWQsIDEpOwogCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1pbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2ssIHU4ICpidWYsIHUxNiBuc2VjdCkKK2ludCBpZGVfcmF3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdTggKmJ1ZiwKKwkJICAgICB1MTYgbnNlY3QpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCWludCBlcnJvcjsKQEAgLTQ1NiwxMSArNDAzLDExIEBACiAJcnEtPmhhcmRfbnJfc2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzID0gbnNlY3Q7CiAJcnEtPmhhcmRfY3VyX3NlY3RvcnMgPSBycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gbnNlY3Q7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCiAJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1JXOwogCi0JcnEtPnNwZWNpYWwgPSB0YXNrOwotCXRhc2stPnJxID0gcnE7CisJcnEtPnNwZWNpYWwgPSBjbWQ7CisJY21kLT5ycSA9IHJxOwogCiAJZXJyb3IgPSBibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIE5VTEwsIHJxLCAwKTsKIAlibGtfcHV0X3JlcXVlc3QocnEpOwpAQCAtNDcwLDE5ICs0MTcsMTkgQEAKIAogRVhQT1JUX1NZTUJPTChpZGVfcmF3X3Rhc2tmaWxlKTsKIAotaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK2ludCBpZGVfbm9fZGF0YV90YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JdGFzay0+ZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKIAotCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCB0YXNrLCBOVUxMLCAwKTsKKwlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgY21kLCBOVUxMLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9ub19kYXRhX3Rhc2tmaWxlKTsKIAogI2lmZGVmIENPTkZJR19JREVfVEFTS19JT0NUTAotaW50IGlkZV90YXNrZmlsZV9pb2N0bCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK2ludCBpZGVfdGFza2ZpbGVfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpZGVfdGFza19yZXF1ZXN0X3QJKnJlcV90YXNrOwotCWlkZV90YXNrX3QJCWFyZ3M7CisJc3RydWN0IGlkZV9jbWQJCWNtZDsKIAl1OCAqb3V0YnVmCQk9IE5VTEw7CiAJdTggKmluYnVmCQk9IE5VTEw7CiAJdTggKmRhdGFfYnVmCQk9IE5VTEw7CkBAIC01MzYsNTMgKzQ4Myw2MyBAQAogCQl9CiAJfQogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAKLQltZW1jcHkoJmFyZ3MudGZfYXJyYXlbMF0sIHJlcV90YXNrLT5ob2JfcG9ydHMsIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFIC0gMik7Ci0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzZdLCByZXFfdGFzay0+aW9fcG9ydHMsIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSk7CisJbWVtY3B5KCZjbWQudGZfYXJyYXlbMF0sIHJlcV90YXNrLT5ob2JfcG9ydHMsCisJICAgICAgIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFIC0gMik7CisJbWVtY3B5KCZjbWQudGZfYXJyYXlbNl0sIHJlcV90YXNrLT5pb19wb3J0cywKKwkgICAgICAgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFKTsKIAotCWFyZ3MuZGF0YV9waGFzZSA9IHJlcV90YXNrLT5kYXRhX3BoYXNlOworCWNtZC50Zl9mbGFncyAgID0gSURFX1RGTEFHX0lPXzE2QklUIHwgSURFX1RGTEFHX0RFVklDRSB8CisJCQkgSURFX1RGTEFHX0lOX1RGOwogCi0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19JT18xNkJJVCB8IElERV9URkxBR19ERVZJQ0UgfAotCQkJSURFX1RGTEFHX0lOX1RGOwogCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KQotCQlhcmdzLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSU5fSE9CKTsKKwkJY21kLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSU5fSE9CKTsKIAogCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmFsbCkgewotCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19GTEFHR0VEOworCQljbWQuZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfRkxBR0dFRDsKIAogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmRhdGEpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfREFUQTsKKwkJCWNtZC5mdGZfZmxhZ3MgfD0gSURFX0ZURkxBR19PVVRfREFUQTsKIAogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLm5zZWN0b3JfaG9iKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVDsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5zZWN0b3JfaG9iKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFMOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQUw7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIubGN5bF9ob2IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQU07CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBTTsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5oY3lsX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBSDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFIOwogCiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuZXJyb3JfZmVhdHVyZSkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9GRUFUVVJFOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfRkVBVFVSRTsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5uc2VjdG9yKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX05TRUNUOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTlNFQ1Q7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuc2VjdG9yKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUw7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFMOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmxjeWwpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBTTsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQU07CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuaGN5bCkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFIOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBSDsKIAl9IGVsc2UgewotCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfVEY7Ci0JCWlmIChhcmdzLnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQjsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfVEY7CisJCWlmIChjbWQudGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpCisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0I7CiAJfQogCiAJaWYgKHJlcV90YXNrLT5pbl9mbGFncy5iLmRhdGEpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0lOX0RBVEE7CisJCWNtZC5mdGZfZmxhZ3MgfD0gSURFX0ZURkxBR19JTl9EQVRBOwogCi0Jc3dpdGNoKHJlcV90YXNrLT5kYXRhX3BoYXNlKSB7CisJaWYgKHJlcV90YXNrLT5yZXFfY21kID09IElERV9EUklWRV9UQVNLX1JBV19XUklURSkgeworCQkvKiBmaXh1cCBkYXRhIHBoYXNlIGlmIG5lZWRlZCAqLworCQlpZiAocmVxX3Rhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfSU5fRE1BUSB8fAorCQkgICAgcmVxX3Rhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfSU5fRE1BKQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKwl9CisKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9ETUE7CisKKwlzd2l0Y2ggKHJlcV90YXNrLT5kYXRhX3BoYXNlKSB7CiAJCWNhc2UgVEFTS0ZJTEVfTVVMVElfT1VUOgogCQkJaWYgKCFkcml2ZS0+bXVsdF9jb3VudCkgewogCQkJCS8qIChocyk6IGdpdmUgdXAgaWYgbXVsdGNvdW50IGlzIG5vdCBzZXQgKi8KQEAgLTU5MiwxMSArNTQ5LDE0IEBACiAJCQkJZXJyID0gLUVQRVJNOwogCQkJCWdvdG8gYWJvcnQ7CiAJCQl9CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX01VTFRJX1BJTzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRBU0tGSUxFX09VVDoKKwkJCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRBU0tGSUxFX09VVF9ETUFROgogCQljYXNlIFRBU0tGSUxFX09VVF9ETUE6CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOwogCQkJbnNlY3QgPSB0YXNrb3V0IC8gU0VDVE9SX1NJWkU7CiAJCQlkYXRhX2J1ZiA9IG91dGJ1ZjsKIAkJCWJyZWFrOwpAQCAtNjA5LDggKzU2OSwxMCBAQAogCQkJCWVyciA9IC1FUEVSTTsKIAkJCQlnb3RvIGFib3J0OwogCQkJfQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9JTjoKKwkJCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRBU0tGSUxFX0lOX0RNQVE6CiAJCWNhc2UgVEFTS0ZJTEVfSU5fRE1BOgpAQCAtNjE4LDYgKzU4MCw3IEBACiAJCQlkYXRhX2J1ZiA9IGluYnVmOwogCQkJYnJlYWs7CiAJCWNhc2UgVEFTS0ZJTEVfTk9fREFUQToKKwkJCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVGQVVMVDsKQEAgLTYyNyw3ICs1OTAsNyBAQAogCWlmIChyZXFfdGFzay0+cmVxX2NtZCA9PSBJREVfRFJJVkVfVEFTS19OT19EQVRBKQogCQluc2VjdCA9IDA7CiAJZWxzZSBpZiAoIW5zZWN0KSB7Ci0JCW5zZWN0ID0gKGFyZ3MudGYuaG9iX25zZWN0IDw8IDgpIHwgYXJncy50Zi5uc2VjdDsKKwkJbnNlY3QgPSAoY21kLnRmLmhvYl9uc2VjdCA8PCA4KSB8IGNtZC50Zi5uc2VjdDsKIAogCQlpZiAoIW5zZWN0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbi9vdXQgY29tbWFuZCB3aXRob3V0IGRhdGFcbiIsCkBAIC02MzcsMTUgKzYwMCwxNCBAQAogCQl9CiAJfQogCi0JaWYgKHJlcV90YXNrLT5yZXFfY21kID09IElERV9EUklWRV9UQVNLX1JBV19XUklURSkKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisJZXJyID0gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmNtZCwgZGF0YV9idWYsIG5zZWN0KTsKIAotCWVyciA9IGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBkYXRhX2J1ZiwgbnNlY3QpOworCW1lbWNweShyZXFfdGFzay0+aG9iX3BvcnRzLCAmY21kLnRmX2FycmF5WzBdLAorCSAgICAgICBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOworCW1lbWNweShyZXFfdGFzay0+aW9fcG9ydHMsICZjbWQudGZfYXJyYXlbNl0sCisJICAgICAgIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSk7CiAKLQltZW1jcHkocmVxX3Rhc2stPmhvYl9wb3J0cywgJmFyZ3MudGZfYXJyYXlbMF0sIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFIC0gMik7Ci0JbWVtY3B5KHJlcV90YXNrLT5pb19wb3J0cywgJmFyZ3MudGZfYXJyYXlbNl0sIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSk7Ci0KLQlpZiAoKGFyZ3MudGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRF9TRVRfSU5fRkxBR1MpICYmCisJaWYgKChjbWQuZnRmX2ZsYWdzICYgSURFX0ZURkxBR19TRVRfSU5fRkxBR1MpICYmCiAJICAgIHJlcV90YXNrLT5pbl9mbGFncy5hbGwgPT0gMCkgewogCQlyZXFfdGFzay0+aW5fZmxhZ3MuYWxsID0gSURFX1RBU0tGSUxFX1NURF9JTl9GTEFHUzsKIAkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGVfYXJtLmMgYi9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKaW5kZXggYmRjYWM5NC4uY2Y2Mzg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlX2FybS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZV9hcm0uYwpAQCAtMTgsNiArMTgsMTAgQEAKICNkZWZpbmUgSURFX0FSTV9JTwkweDFmMAogI2RlZmluZSBJREVfQVJNX0lSUQlJUlFfSEFSRERJU0sKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZV9hcm1fcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfYXJtX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBJREVfQVJNX0lPLCBjdGwgPSBJREVfQVJNX0lPICsgMHgyMDY7CkBAIC00MSw3ICs0NSw3IEBACiAJaHcuaXJxID0gSURFX0FSTV9JUlE7CiAJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworCXJldHVybiBpZGVfaG9zdF9hZGQoJmlkZV9hcm1fcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdChpZGVfYXJtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCA2YjlmYzk1Li4wZDRhYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtNTA4LDEwICs1MDgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgaWRlX2RtYV9vcHMgaXQ4MjF4X3Bhc3NfdGhyb3VnaF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaXQ4MjF4X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpdDgyMXhfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL21hY2lkZS5jIGIvZHJpdmVycy9pZGUvbWFjaWRlLmMKaW5kZXggM2M2MDA2NC4uNGIxNzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbWFjaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbWFjaWRlLmMKQEAgLTgwLDYgKzgwLDExIEBACiAJaHctPmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIG1hY2lkZV9wb3J0X2luZm8gPSB7CisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfTk9fRE1BLAorCS5pcnFfZmxhZ3MJCT0gSVJRRl9TSEFSRUQsCit9OworCiBzdGF0aWMgY29uc3QgY2hhciAqbWFjX2lkZV9uYW1lW10gPQogCXsgIlF1YWRyYSIsICJQb3dlcmJvb2siLCAiUG93ZXJib29rIEJhYm9vbiIgfTsKIApAQCAtMTIyLDcgKzEyNyw3IEBACiAKIAltYWNpZGVfc2V0dXBfcG9ydHMoJmh3LCBiYXNlLCBpcnEsIGFja19pbnRyKTsKIAotCXJldHVybiBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwlyZXR1cm4gaWRlX2hvc3RfYWRkKCZtYWNpZGVfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdChtYWNpZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKaW5kZXggZWE0OGEzZS4uN2I2NWZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwpAQCAtNjEsMTIgKzYxLDEyIEBACiAJcmV0dXJuIHN1cGVyaW9faWRlX2luYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKIH0KIAotc3RhdGljIHZvaWQgc3VwZXJpb190Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHN1cGVyaW9fdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAogCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwpAQCAtNzYsMzEgKzc2LDMxIEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCW91dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSBzdXBlcmlvX2lkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCW91dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCiAJCQl0Zi0+aG9iX2xiYWwgICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQpAQCAtMjE2LDExICsyMTYsMTEgQEAKIAlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNDsKIH0KIAotc3RhdGljIGludCBuczg3NDE1X2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IG5zODc0MTVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAkvKiBzZWxlY3QgRE1BIHhmZXIgKi8KIAluczg3NDE1X3ByZXBhcmVfZHJpdmUoZHJpdmUsIDEpOwotCWlmICghaWRlX2RtYV9zZXR1cChkcml2ZSkpCisJaWYgKGlkZV9kbWFfc2V0dXAoZHJpdmUsIGNtZCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAJLyogRE1BIGZhaWxlZDogc2VsZWN0IFBJTyB4ZmVyICovCiAJbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsKQEAgLTMwMSwxMSArMzAxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIG5zODc0MTVfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBuczg3NDE1X2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IG5zODc0MTVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBzdXBlcmlvX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYyBiL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKaW5kZXggZjM4YWFjNy4uYzdhY2NhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYworKysgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IHJlc291cmNlICptZW0sICppcnE7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJhdGUsIG1lbV9zaXplOwogCWludCBpLCByYzsKIAlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKQEAgLTM3NCwxMyArMzc0LDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChyZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSwKLQkJCSAgICAgICAicGFsbV9iazM3MTAiKSA9PSBOVUxMKSB7CisJbWVtX3NpemUgPSBtZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxOworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtX3NpemUsICJwYWxtX2JrMzcxMCIpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQliYXNlID0gSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwliYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCBtZW1fc2l6ZSk7CisJaWYgKCFiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIG1hcCBJTyBtZW1vcnlcbiIpOworCQlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtX3NpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAkvKiBDb25maWd1cmUgdGhlIFBhbG0gQ2hpcCBjb250cm9sbGVyICovCiAJcGFsbV9iazM3MTBfY2hpcGluaXQoYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCmluZGV4IGNiYTY2ZWIuLmY3NTM2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCkBAIC0zMzEsMTEgKzMzMSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBwZGMyMDI0Nl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHBkYzIwMnh4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IHBkYzIwMnh4X2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gcGRjMjAyeHhfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC0zNDMsMTEgKzM0MywxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBwZGMyMDI2eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gcGRjMjAyeHhfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHBkYzIwMnh4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwZGMyMDJ4eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBwZGMyMDJ4eF9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IHBkYzIwMnh4X2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcG1hYy5jIGIvZHJpdmVycy9pZGUvcG1hYy5jCmluZGV4IDc0NjI1ZTguLjJiZmNmZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wbWFjLmMKQEAgLTQwNCw3ICs0MDQsNiBAQAogI2RlZmluZSBJREVfV0FLRVVQX0RFTEFZCSgxKkhaKQogCiBzdGF0aWMgaW50IHBtYWNfaWRlX2luaXRfZG1hKGlkZV9od2lmX3QgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7Ci1zdGF0aWMgaW50IHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIHN0YXRpYyB2b2lkIHBtYWNfaWRlX3NlbGVjdHByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIHN0YXRpYyB2b2lkIHBtYWNfaWRlX2thdWFpX3NlbGVjdHByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIApAQCAtMTQyMiwxNyArMTQyMSwxNiBAQAogICogcG1hY19pZGVfYnVpbGRfZG1hdGFibGUgYnVpbGRzIHRoZSBEQkRNQSBjb21tYW5kIGxpc3QKICAqIGZvciBhIHRyYW5zZmVyIGFuZCBzZXRzIHRoZSBEQkRNQSBjaGFubmVsIHRvIHBvaW50IHRvIGl0LgogICovCi1zdGF0aWMgaW50Ci1wbWFjX2lkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCXN0cnVjdCBkYmRtYV9jbWQgKnRhYmxlOwotCWludCBpLCBjb3VudCA9IDA7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hID0gcG1pZi0+ZG1hX3JlZ3M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlpbnQgd3IgPSAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKTsKKwlpbnQgd3IgPSAhIShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKTsKKwlpbnQgaSA9IGNtZC0+c2dfbmVudHMsIGNvdW50ID0gMDsKIAogCS8qIERNQSB0YWJsZSBpcyBhbHJlYWR5IGFsaWduZWQgKi8KIAl0YWJsZSA9IChzdHJ1Y3QgZGJkbWFfY21kICopIHBtaWYtPmRtYV90YWJsZV9jcHU7CkBAIC0xNDQyLDExICsxNDQwLDYgQEAKIAl3aGlsZSAocmVhZGwoJmRtYS0+c3RhdHVzKSAmIFJVTikKIAkJdWRlbGF5KDEpOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCi0JaWYgKCFpKQotCQlyZXR1cm4gMDsKLQogCS8qIEJ1aWxkIERCRE1BIGNvbW1hbmRzIGxpc3QgKi8KIAlzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXdoaWxlIChpICYmIHNnX2RtYV9sZW4oc2cpKSB7CkBAIC0xNTA5LDIzICsxNTAyLDIyIEBACiAgKiBQcmVwYXJlIGEgRE1BIHRyYW5zZmVyLiBXZSBidWlsZCB0aGUgRE1BIHRhYmxlLCBhZGp1c3QgdGhlIHRpbWluZ3MgZm9yCiAgKiBhIHJlYWQgb24gS2V5TGFyZ28gQVRBLzY2IGFuZCBtYXJrIHVzIGFzIHdhaXRpbmcgZm9yIERNQSBjb21wbGV0aW9uCiAgKi8KLXN0YXRpYyBpbnQKLXBtYWNfaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHBtYWNfaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDEsIGF0YTQgPSAocG1pZi0+a2luZCA9PSBjb250cm9sbGVyX2tsX2F0YTQpOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpZiAoIXBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCXJldHVybiAxOwogCX0KIAogCS8qIEFwcGxlIGFkZHMgNjBucyB0byB3ckRhdGFTZXR1cCBvbiByZWFkcyAqLwogCWlmIChhdGE0ICYmIChwbWlmLT50aW1pbmdzW3VuaXRdICYgVFJfNjZfVURNQV9FTikpIHsKLQkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbdW5pdF0gKyAoIXJxX2RhdGFfZGlyKHJxKSA/IDB4MDA4MDAwMDBVTCA6IDApLAorCQl3cml0ZWwocG1pZi0+dGltaW5nc1t1bml0XSArICh3cml0ZSA/IDAgOiAweDAwODAwMDAwVUwpLAogCQkJUE1BQ19JREVfUkVHKElERV9USU1JTkdfQ09ORklHKSk7CiAJCSh2b2lkKXJlYWRsKFBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwogCX0KQEAgLTE1MzUsMTMgKzE1MjcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotcG1hY19pZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyKldBSVRfQ01ELCBOVUxMKTsKLX0KLQogLyoKICAqIEtpY2sgdGhlIERNQSBjb250cm9sbGVyIGludG8gbGlmZSBhZnRlciB0aGUgRE1BIGNvbW1hbmQgaGFzIGJlZW4gaXNzdWVkCiAgKiB0byB0aGUgZHJpdmUuCkBAIC0xNjYyLDcgKzE2NDcsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBwbWFjX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBwbWFjX2lkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBwbWFjX2lkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBwbWFjX2lkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBwbWFjX2lkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gcG1hY19pZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHBtYWNfaWRlX2RtYV90ZXN0X2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3E0MGlkZS5jIGIvZHJpdmVycy9pZGUvcTQwaWRlLmMKaW5kZXggOWY5YzBiMy4uMmE0M2EyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcTQwaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvcTQwaWRlLmMKQEAgLTcyLDI2ICs3MiwyNiBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKLXN0YXRpYyB2b2lkIHE0MGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgcTQwaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIGluc3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0JaW5zd19zd2FwdyhkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CisJcmF3X2luc3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgcTQwaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgcTQwaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gb3V0c3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0Jb3V0c3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19vdXRzd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCiAvKiBRNDAgaGFzIGEgYnl0ZS1zd2FwcGVkIElERSBpbnRlcmZhY2UgKi8KQEAgLTExMSw3ICsxMTEsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcTQwaWRlX3BvcnRfaW5mbyA9IHsKIAkudHBfb3BzCQkJPSAmcTQwaWRlX3RwX29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogLyogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zYzEyMDAuYyBiL2RyaXZlcnMvaWRlL3NjMTIwMC5jCmluZGV4IGRiZGQyOTguLjFjM2E4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3NjMTIwMC5jCkBAIC0yODYsMTEgKzI4NiwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzYzEyMDBfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gc2MxMjAwX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2NjX3BhdGEuYyBiL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKaW5kZXggOGQyMzE0Yi4uMGNjMTM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2NjX3BhdGEuYworKysgYi9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCkBAIC0zMDMsOCArMzAzLDkgQEAKIH0KIAogLyoqCi0gKglzY2NfaWRlX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCisgKglzY2NfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKICAqCUBkcml2ZTogdGFyZ2V0IGRldmljZQorICoJQGNtZDogY29tbWFuZAogICoKICAqCUJ1aWxkIGFuIElERSBETUEgUFJEIChJREUgc3BlYWsgZm9yIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlKQogICoJYW5kIHRoZW4gc2V0IHVwIHRoZSBETUEgdHJhbnNmZXIgcmVnaXN0ZXJzLgpAQCAtMzEzLDIxICszMTQsMTUgQEAKICAqCWlzIHJldHVybmVkLgogICovCiAKLXN0YXRpYyBpbnQgc2NjX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHNjY19kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgcmVhZGluZzsKKwl1MzIgcncgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAwIDogQVRBX0RNQV9XUjsKIAl1OCBkbWFfc3RhdDsKIAotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCXJlYWRpbmcgPSAwOwotCWVsc2UKLQkJcmVhZGluZyA9IDEgPDwgMzsKLQogCS8qIGZhbGwgYmFjayB0byBwaW8hICovCi0JaWYgKCFpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzM1LDcgKzMzMCw3IEBACiAJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIDgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOwogCiAJLyogc3BlY2lmeSByL3cgKi8KLQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UsIHJlYWRpbmcpOworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfYmFzZSwgcncpOwogCiAJLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAlkbWFfc3RhdCA9IHNjY19kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwpAQCAtNjY2LDUyICs2NjEsNTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIHNjY190Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHNjY190Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZkcml2ZS0+aHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkKIAkJb3V0X2JlMzIoKHZvaWQgKilpb19wb3J0cy0+ZGF0YV9hZGRyLAogCQkJICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YSk7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQlzY2NfaWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJc2NjX2lkZV9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXNjY19pZGVfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQogCQlzY2NfaWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJc2NjX2lkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJICAgICBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBzY2NfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBzY2NfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YSA9ICh1MTYpaW5fYmUzMigodm9pZCAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCiAJCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7CkBAIC03MjEsMzYgKzcxNiwzNiBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCXNjY19pZGVfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCiAJCQl0Zi0+aG9iX2xiYWwgICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzY2NfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHNjY19pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CkBAIC03NjYsNyArNzYxLDcgQEAKIAkJc2NjX2lkZV9pbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHNjY19vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsICBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CkBAIC04NzMsMzAgKzg2OCwyNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzY2NfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IHNjY19kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBzY2NfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IHNjY19kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gc2NjX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBzY2NfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gc2NjX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCi0jZGVmaW5lIERFQ0xBUkVfU0NDX0RFVihuYW1lX3N0cikJCQlcCi0gIHsJCQkJCQkJXAotICAgICAgLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAotICAgICAgLmluaXRfaW9wcwk9IGluaXRfaW9wc19zY2MsCQlcCi0gICAgICAuaW5pdF9kbWEJCT0gc2NjX2luaXRfZG1hLAkJCVwKLSAgICAgIC5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2NjLAkJXAotICAgICAgLnRwX29wcwkJPSAmc2NjX3RwX29wcywJCVwKLSAgICAgIC5wb3J0X29wcwkJPSAmc2NjX3BvcnRfb3BzLAkJXAotICAgICAgLmRtYV9vcHMJCT0gJnNjY19kbWFfb3BzLAkJCVwKLSAgICAgIC5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwJCVwKLSAgICAgIC5waW9fbWFzawkJPSBBVEFfUElPNCwJCQlcCi0gIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNjY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogMCAqLyBERUNMQVJFX1NDQ19ERVYoInNjY0lERSIpLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNjY19jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gInNjY0lERSIsCisJLmluaXRfaW9wcwk9IGluaXRfaW9wc19zY2MsCisJLmluaXRfZG1hCT0gc2NjX2luaXRfZG1hLAorCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2NjLAorCS50cF9vcHMJCT0gJnNjY190cF9vcHMsCisJLnBvcnRfb3BzCT0gJnNjY19wb3J0X29wcywKKwkuZG1hX29wcwk9ICZzY2NfZG1hX29wcywKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCisJLmlycV9mbGFncwk9IElSUUZfU0hBUkVELAorCS5waW9fbWFzawk9IEFUQV9QSU80LAogfTsKIAogLyoqCkBAIC05MTAsNyArOTAxLDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2NjX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaW5pdF9zZXR1cF9zY2MoZGV2LCAmc2NjX2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV0pOworCXJldHVybiBpbml0X3NldHVwX3NjYyhkZXYsICZzY2NfY2hpcHNldCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCAyNGJjODg0Li5hMTlkYmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtNTU4LDYgKzU1OCw4IEBACiAKIAlob3N0LT5ob3N0X3ByaXYgPSBwcml2OwogCisJaG9zdC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAogCXJldCA9IGRvX2lkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCwgMSk7CkBAIC02MDYsNiArNjA4LDggQEAKIAogCWhvc3QtPmhvc3RfcHJpdiA9IHByaXY7CiAKKwlob3N0LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2WzBdLCBob3N0KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldlsxXSwgaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3NnaWlvYzQuYwppbmRleCBmZGI5ZDcwLi5iMTJkZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKKysrIGIvZHJpdmVycy9pZGUvc2dpaW9jNC5jCkBAIC00MjQsMjAgKzQyNCwxMyBAQAogLyogfCBVcHBlciAzMiBiaXRzIC0gWmVybwkgICAgfEVPTHwgMTUgdW51c2VkICAgICB8IDE2IEJpdCBMZW5ndGh8ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIENyZWF0ZXMgdGhlIHNjYXR0ZXIgZ2F0aGVyIGxpc3QsIERNQSBUYWJsZSAqLwotc3RhdGljIHVuc2lnbmVkIGludAotc2dpaW9jNF9idWlsZF9kbWFfdGFibGUoaWRlX2RyaXZlX3QgKiBkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZGRpcikKK3N0YXRpYyBpbnQgc2dpaW9jNF9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGludCAqdGFibGUgPSBod2lmLT5kbWF0YWJsZV9jcHU7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaSA9IDE7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpID0gY21kLT5zZ19uZW50czsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAKLQlod2lmLT5zZ19uZW50cyA9IGkgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KLQlpZiAoIWkpCi0JCXJldHVybiAwOwkvKiBzZ2xpc3Qgb2YgbGVuZ3RoIFplcm8gKi8KLQotCXNnID0gaHdpZi0+c2dfdGFibGU7CiAJd2hpbGUgKGkgJiYgc2dfZG1hX2xlbihzZykpIHsKIAkJZG1hX2FkZHJfdCBjdXJfYWRkcjsKIAkJaW50IGN1cl9sZW47CkBAIC00OTAsMjQgKzQ4MywxOCBAQAogCXJldHVybiAwOwkJLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKLXN0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBzZ2lpb2M0X2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJaW50IGRkaXI7CisJdTggd3JpdGUgPSAhIShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKTsKIAotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCWRkaXIgPSBQQ0lfRE1BX1RPREVWSUNFOwotCWVsc2UKLQkJZGRpciA9IFBDSV9ETUFfRlJPTURFVklDRTsKLQotCWlmICghKGNvdW50ID0gc2dpaW9jNF9idWlsZF9kbWFfdGFibGUoZHJpdmUsIHJxLCBkZGlyKSkpIHsKKwlpZiAoc2dpaW9jNF9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CiAJCS8qIHRyeSBQSU8gaW5zdGVhZCBvZiBETUEgKi8KLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQorCWlmICh3cml0ZSkKIAkJLyogV3JpdGVzIFRPIHRoZSBJT0M0IEZST00gTWFpbiBNZW1vcnkgKi8KIAkJZGRpciA9IElPQzRfRE1BX1JFQUQ7CiAJZWxzZQpAQCAtNTU3LDYgKzU0NCw3IEBACiAJLnBvcnRfb3BzCQk9ICZzZ2lpb2M0X3BvcnRfb3BzLAogCS5kbWFfb3BzCQk9ICZzZ2lpb2M0X2RtYV9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8sCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIAkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyX09OTFksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKaW5kZXggMTgxMWFlOS4uMDc1Y2IxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jCisrKyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwpAQCAtNzExLDEwICs3MTEsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2lsX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2lpbWFnZV9kbWFfdGVzdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCmluZGV4IGRiYTIxM2MuLmQyNTEzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwpAQCAtMjkzLDExICsyOTMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2w4MmMxMDVfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IHNsODJjMTA1X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBzbDgyYzEwNV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IHNsODJjMTA1X2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gc2w4MmMxMDVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvdGM4NmMwMDEuYwppbmRleCA4NDEwOWY1Li40MjdkNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKQEAgLTE4MiwxMSArMTgyLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHRjODZjMDAxX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSB0Yzg2YzAwMV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwppbmRleCAxYzA5ZTU0Li5lZDE0OTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90cm0yOTAuYworKysgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwpAQCAtMTc2LDE4ICsxNzYsMTIgQEAKIAl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKTsKIH0KIAotc3RhdGljIHZvaWQgdHJtMjkwX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCi17Ci0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgV0FJVF9DTUQsIE5VTEwpOwotfQotCi1zdGF0aWMgaW50IHRybTI5MF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCB0cm0yOTBfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IGNvdW50LCBydzsKIAotCWlmIChycV9kYXRhX2RpcihycSkpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgewogI2lmZGVmIFRSTTI5MF9OT19ETUFfV1JJVEVTCiAJCS8qIGFsd2F5cyB1c2UgUElPIGZvciB3cml0ZXMgKi8KIAkJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOwkvKiBzZWxlY3QgUElPIHhmZXIgKi8KQEAgLTE5Nyw3ICsxOTEsOSBAQAogCX0gZWxzZQogCQlydyA9IDI7CiAKLQlpZiAoIShjb3VudCA9IGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSkgeworCWNvdW50ID0gaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpOworCWlmIChjb3VudCA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCS8qIHRyeSBQSU8gaW5zdGVhZCBvZiBETUEgKi8KIAkJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOyAvKiBzZWxlY3QgUElPIHhmZXIgKi8KIAkJcmV0dXJuIDE7CkBAIC0zMTQsNyArMzEwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaWRlX2RtYV9vcHMgdHJtMjkwX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSB0cm0yOTBfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAgCQk9IHRybTI5MF9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSB0cm0yOTBfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQgCQk9IHRybTI5MF9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gdHJtMjkwX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSB0cm0yOTBfZG1hX3Rlc3RfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMgYi9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYwppbmRleCBkOTA5NTM0Li42NTdhNjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYworKysgYi9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lkZS5oPgogI2luY2x1ZGUgPGFzbS90eHg5L3R4NDkzOC5oPgogCiBzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfdHVuZV9lYnVzYyh1bnNpZ25lZCBpbnQgZWJ1c19jaCwKQEAgLTgwLDU3ICs4Miw1NyBAQAogCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKXBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzhpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSB0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCA/IDB4RTAgOiAweEVGOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJdTggSElISSA9IGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX09VVF9EQVRBKSB7CiAJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwogCiAJCS8qIG5vIGVuZGlhbiBzd2FwICovCiAJCV9fcmF3X3dyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAJfQogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJdHg0OTM4aWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCiAJCQkgICAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGE7CiAKIAkJLyogbm8gZW5kaWFuIHN3YXAgKi8KQEAgLTE0MiwzNyArMTQ0LDM3IEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCXR4NDkzOGlkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQl0eDQ5MzhpZGVfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9CiAJCQkJdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCiAJCQl0Zi0+aG9iX2xiYWwgICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQogCQkJdGYtPmhvYl9sYmFtICAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzhpZGVfaW5wdXRfZGF0YV9zd2FwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgdHg0OTM4aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CkBAIC0xODQsNyArMTg2LDcgQEAKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCByb3VuZHVwKGxlbiwgMikpOwogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV9vdXRwdXRfZGF0YV9zd2FwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKaW5kZXggNDBiMDgxMi4uZTBlMGE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKKyNpbmNsdWRlIDxhc20vaWRlLmg+CisKICNkZWZpbmUgTU9ETkFNRQkidHg0OTM5aWRlIgogCiAvKiBBVEEgU2hhZG93IFJlZ2lzdGVycyAoOC1iaXQgZXhjZXB0IGZvciBEYXRhIHdoaWNoIGlzIDE2LWJpdCkgKi8KQEAgLTIzMCw3ICsyMzIsNyBAQAogCiAjaWZkZWYgX19CSUdfRU5ESUFOCiAvKiBjdXN0b20gaWRlX2J1aWxkX2RtYXRhYmxlIHRvIGhhbmRsZSBzd2FwcGVkIGxheW91dCAqLwotc3RhdGljIGludCB0eDQ5MzlpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaW50IHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXUzMiAqdGFibGUgPSAodTMyICopaHdpZi0+ZG1hdGFibGVfY3B1OwpAQCAtMjM4LDExICsyNDAsNyBAQAogCWludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKLQlod2lmLT5zZ19uZW50cyA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQlpZiAoaHdpZi0+c2dfbmVudHMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3JfZWFjaF9zZyhod2lmLT5zZ190YWJsZSwgc2csIGh3aWYtPnNnX25lbnRzLCBpKSB7CisJZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBjbWQtPnNnX25lbnRzLCBpKSB7CiAJCXUzMiBjdXJfYWRkciwgY3VyX2xlbiwgYmNvdW50OwogCiAJCWN1cl9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwpAQCAtMjg5LDIzICsyODcsMTUgQEAKICNkZWZpbmUgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlCWlkZV9idWlsZF9kbWF0YWJsZQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgdHg0OTM5aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHR4NDkzOWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1OCByZWFkaW5nOwotCWludCBuZW50OwotCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJcmVhZGluZyA9IDA7Ci0JZWxzZQotCQlyZWFkaW5nID0gQVRBX0RNQV9XUjsKKwl1OCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCiAJLyogZmFsbCBiYWNrIHRvIFBJTyEgKi8KLQluZW50ID0gdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSk7Ci0JaWYgKCFuZW50KSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAodHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zMTMsNyArMzAzLDcgQEAKIAl0eDQ5MzlpZGVfd3JpdGVsKGh3aWYtPmRtYXRhYmxlX2RtYSwgYmFzZSwgVFg0OTM5SURFX1BSRF9QdHIpOwogCiAJLyogc3BlY2lmeSByL3cgKi8KLQl0eDQ5MzlpZGVfd3JpdGViKHJlYWRpbmcsIGJhc2UsIFRYNDkzOUlERV9ETUFfQ21kKTsKKwl0eDQ5MzlpZGVfd3JpdGViKHJ3LCBiYXNlLCBUWDQ5MzlJREVfRE1BX0NtZCk7CiAKIAkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAl0eDQ5MzlpZGVfY2xlYXJfZG1hX3N0YXR1cyhiYXNlKTsKQEAgLTMyMiw3ICszMTIsOSBAQAogCiAJdHg0OTM5aWRlX3dyaXRldyhTRUNUT1JfU0laRSAvIDIsIGJhc2UsIGRyaXZlLT5kbiA/CiAJCQkgVFg0OTM5SURFX1hmZXJfQ250XzIgOiBUWDQ5MzlJREVfWGZlcl9DbnRfMSk7Ci0JdHg0OTM5aWRlX3dyaXRldyhycS0+bnJfc2VjdG9ycywgYmFzZSwgVFg0OTM5SURFX1NlY19DbnQpOworCisJdHg0OTM5aWRlX3dyaXRldyhjbWQtPnJxLT5ucl9zZWN0b3JzLCBiYXNlLCBUWDQ5MzlJREVfU2VjX0NudCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM3LDcgKzQyOSw3IEBACiAJcmV0dXJuIGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpOwogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOwpAQCAtNDY1LDU5ICs0NTcsNTkgQEAKIAlfX3Jhd193cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKilwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gdGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSBjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQkvKiBubyBlbmRpYW4gc3dhcCAqLwogCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJdHg0OTM5aWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkgewogCQl0eDQ5MzlpZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSAgICAgICBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwotCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSwgdGFzayk7CisJCXR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGRyaXZlKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCS8qIG5vIGVuZGlhbiBzd2FwICovCkBAIC01MjksMzIgKzUyMSwzMiBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAl0eDQ5MzlpZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPQogCQkJCXR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KQEAgLTYwMSwxMSArNTkzLDEyIEBACiAKICNlbHNlCS8qIF9fTElUVExFX0VORElBTiAqLwogCi1zdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaWRlX3RmX2xvYWQoZHJpdmUsIHRhc2spOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSwgdGFzayk7CisJaWRlX3RmX2xvYWQoZHJpdmUsIGNtZCk7CisKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyB0eDQ5MzlpZGVfdHBfb3BzID0gewpAQCAtNjM0LDExICs2MjcsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgdHg0OTM5aWRlX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSB0eDQ5MzlpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gdHg0OTM5aWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHR4NDkzOWlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gdHg0OTM5aWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHR4NDkzOWlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwppbmRleCBhYmIwNGM4Li42MzRhZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb3JnaS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKaW5kZXggOWQxNzgxYS4uMTM5Njc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvc3BpdHouaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KIAogI2RlZmluZSBLQl9ST1dTCQkJNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCmluZGV4IDU2YzA3OWUuLjI3MmRlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrLCBSdXNzZWxsIEtpbmciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCmluZGV4IDdmMzZlZGQzLi5lZDA0NWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKQEAgLTMzLDEwICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwppbmRleCAzZmI1MWI1Li45NGExOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKaW5kZXggODI2MDdhZC4uYzA2MjFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwpAQCAtNDk4LDggKzQ5OCw4IEBACiAjZGVmaW5lIEJVSUxEX1NUT1JFX0ZVTkNfSU5UKG5hbWUsIGRhdGEpCQkJXAogc3RhdGljIHNzaXplX3Qgc3RvcmVfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pIFwKIHsJCQkJCQkJCVwKLQl1MzIgdmFsOwkJCQkJCVwKLQl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCisJaW50IHZhbDsJCQkJCQlcCisJdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsJCQlcCiAJaWYgKHZhbCA8IDAgfHwgdmFsID4gMjU1KQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgc3BlY2lmaWVkIGZhbiBzcGVlZCB0byAlZFxuIiwgdmFsKTsJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCmluZGV4IDkzZWEyMDEuLjIyM2MzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKQEAgLTExNyw3ICsxMTcsNyBAQAogY29uZmlnIERBQgogCWJvb2xlYW4gIkRBQiBhZGFwdGVycyIKIAktLS1oZWxwLS0tCi0JICBBbGxvdyBzZWxlY3Rpbmcgc3VwcG9ydCBmb3IgZm9yIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpCisJICBBbGxvdyBzZWxlY3Rpbmcgc3VwcG9ydCBmb3IgRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikKIAkgIFJlY2VpdmVyIGFkYXB0ZXJzLgogCiBpZiBEQUIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwppbmRleCBkODIyOWEwLi4zZmUxNThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCkBAIC0xNTMsNiArMTUzLDY1IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhKTsKIAorLyogT2xkcmljaCBKZWRsaWNrYSA8b2xkaXVtLnByb0BzZXpuYW0uY3o+ICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4MDBdID0gS0VZX1BPV0VSLAorCVsweDAxXSA9IEtFWV9UVU5FUiwJCS8qIFRWL0ZNICovCisJWzB4MDNdID0gS0VZX1RFWFQsCQkvKiBUZWxldGV4dCAqLworCVsweDA0XSA9IEtFWV9FUEcsCisJWzB4MDVdID0gS0VZXzEsCisJWzB4MDZdID0gS0VZXzIsCisJWzB4MDddID0gS0VZXzMsCisJWzB4MDhdID0gS0VZX0FVRElPLAorCVsweDA5XSA9IEtFWV80LAorCVsweDBhXSA9IEtFWV81LAorCVsweDBiXSA9IEtFWV82LAorCVsweDBjXSA9IEtFWV9aT09NLAkJLyogRnVsbCBzY3JlZW4gKi8KKwlbMHgwZF0gPSBLRVlfNywKKwlbMHgwZV0gPSBLRVlfOCwKKwlbMHgwZl0gPSBLRVlfOSwKKwlbMHgxMF0gPSBLRVlfUEFHRVVQLAkJLyogMTYtQ0ggUFJFViAqLworCVsweDExXSA9IEtFWV8wLAorCVsweDEyXSA9IEtFWV9JTkZPLAorCVsweDEzXSA9IEtFWV9BR0FJTiwJCS8qIENIIFJUTiAtIGNoYW5uZWwgcmV0dXJuICovCisJWzB4MTRdID0gS0VZX01VVEUsCisJWzB4MTVdID0gS0VZX0VESVQsCQkvKiBBdXRvc2NhbiAqLworCVsweDE3XSA9IEtFWV9TQVZFLAkJLyogU2NyZWVuc2hvdCAqLworCVsweDE4XSA9IEtFWV9QTEFZUEFVU0UsCisJWzB4MTldID0gS0VZX1JFQ09SRCwKKwlbMHgxYV0gPSBLRVlfUExBWSwKKwlbMHgxYl0gPSBLRVlfU1RPUCwKKwlbMHgxY10gPSBLRVlfRkFTVEZPUldBUkQsCisJWzB4MWRdID0gS0VZX1JFV0lORCwKKwlbMHgxZV0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbMHgxZl0gPSBLRVlfVk9MVU1FVVAsCisJWzB4MjJdID0gS0VZX1NMRUVQLAkJLyogU2xlZXAgKi8KKwlbMHgyM10gPSBLRVlfWk9PTSwJCS8qIEFzcGVjdCAqLworCVsweDI2XSA9IEtFWV9TQ1JFRU4sCQkvKiBQb3MgKi8KKwlbMHgyN10gPSBLRVlfQU5HTEUsCQkvKiBTaXplICovCisJWzB4MjhdID0gS0VZX1NFTEVDVCwJCS8qIFNlbGVjdCAqLworCVsweDI5XSA9IEtFWV9CTFVFLAkJLyogQmx1ZS9QaWN0dXJlICovCisJWzB4MmFdID0gS0VZX0JBQ0tTUEFDRSwJLyogQmFjayAqLworCVsweDJiXSA9IEtFWV9NRURJQSwJCS8qIFBJUCAoUGljdHVyZS1pbi1waWN0dXJlKSAqLworCVsweDJjXSA9IEtFWV9ET1dOLAorCVsweDJlXSA9IEtFWV9ET1QsCisJWzB4MmZdID0gS0VZX1RWLAkJLyogTGl2ZSBUViAqLworCVsweDMyXSA9IEtFWV9MRUZULAorCVsweDMzXSA9IEtFWV9DTEVBUiwJCS8qIENsZWFyICovCisJWzB4MzVdID0gS0VZX1JFRCwJCS8qIFJlZC9UViAqLworCVsweDM2XSA9IEtFWV9VUCwKKwlbMHgzN10gPSBLRVlfSE9NRSwJCS8qIEhvbWUgKi8KKwlbMHgzOV0gPSBLRVlfR1JFRU4sCQkvKiBHcmVlbi9WaWRlbyAqLworCVsweDNkXSA9IEtFWV9ZRUxMT1csCQkvKiBZZWxsb3cvTXVzaWMgKi8KKwlbMHgzZV0gPSBLRVlfT0ssCQkvKiBPayAqLworCVsweDNmXSA9IEtFWV9SSUdIVCwKKwlbMHg0MF0gPSBLRVlfTkVYVCwJCS8qIE5leHQgKi8KKwlbMHg0MV0gPSBLRVlfUFJFVklPVVMsCS8qIFByZXZpb3VzICovCisJWzB4NDJdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBDaGFubmVsIGRvd24gKi8KKwlbMHg0M10gPSBLRVlfQ0hBTk5FTFVQCS8qIENoYW5uZWwgdXAgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1cyk7CisKIC8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdID0gewogCkBAIC0yNDUyLDYgKzI1MTEsNTUgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2cpOwogCisvKiBLYWlvbXkgVFZuUEMgVTIKKyAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19rYWlvbXlbSVJfS0VZVEFCX1NJWkVdID0geworCVsweDQzXSA9IEtFWV9QT1dFUjIsCisJWzB4MDFdID0gS0VZX0xJU1QsCisJWzB4MGJdID0gS0VZX1pPT00sCisJWzB4MDNdID0gS0VZX1BPV0VSLAorCisJWzB4MDRdID0gS0VZXzEsCisJWzB4MDhdID0gS0VZXzIsCisJWzB4MDJdID0gS0VZXzMsCisKKwlbMHgwZl0gPSBLRVlfNCwKKwlbMHgwNV0gPSBLRVlfNSwKKwlbMHgwNl0gPSBLRVlfNiwKKworCVsweDBjXSA9IEtFWV83LAorCVsweDBkXSA9IEtFWV84LAorCVsweDBhXSA9IEtFWV85LAorCisJWzB4MTFdID0gS0VZXzAsCisKKwlbMHgwOV0gPSBLRVlfQ0hBTk5FTFVQLAorCVsweDA3XSA9IEtFWV9DSEFOTkVMRE9XTiwKKworCVsweDBlXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgxM10gPSBLRVlfVk9MVU1FRE9XTiwKKworCVsweDEwXSA9IEtFWV9IT01FLAorCVsweDEyXSA9IEtFWV9FTlRFUiwKKworCVsweDE0XSA9IEtFWV9SRUNPUkQsCisJWzB4MTVdID0gS0VZX1NUT1AsCisJWzB4MTZdID0gS0VZX1BMQVksCisJWzB4MTddID0gS0VZX01VVEUsCisKKwlbMHgxOF0gPSBLRVlfVVAsCisJWzB4MTldID0gS0VZX0RPV04sCisJWzB4MWFdID0gS0VZX0xFRlQsCisJWzB4MWJdID0gS0VZX1JJR0hULAorCisJWzB4MWNdID0gS0VZX1JFRCwKKwlbMHgxZF0gPSBLRVlfR1JFRU4sCisJWzB4MWVdID0gS0VZX1lFTExPVywKKwlbMHgxZl0gPSBLRVlfQkxVRSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rYWlvbXkpOworCiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZFtJUl9LRVlUQUJfU0laRV0gPSB7CiAJWzB4MjBdID0gS0VZX0xJU1QsCiAJWzB4MDBdID0gS0VZX1BPV0VSLApAQCAtMjYwNCwzICsyNzEyLDQxIEBACiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMCk7CisKKy8qIERWQldvcmxkIHJlbW90ZXMKKyAgIElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbWUuYnk+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2RtMTEwNV9uZWNbSVJfS0VZVEFCX1NJWkVdID0geworCVsweDBhXSA9IEtFWV9RLAkJLypwb3dlciovCisJWzB4MGNdID0gS0VZX00sCQkvKm11dGUqLworCVsweDExXSA9IEtFWV8xLAorCVsweDEyXSA9IEtFWV8yLAorCVsweDEzXSA9IEtFWV8zLAorCVsweDE0XSA9IEtFWV80LAorCVsweDE1XSA9IEtFWV81LAorCVsweDE2XSA9IEtFWV82LAorCVsweDE3XSA9IEtFWV83LAorCVsweDE4XSA9IEtFWV84LAorCVsweDE5XSA9IEtFWV85LAorCVsweDEwXSA9IEtFWV8wLAorCVsweDFjXSA9IEtFWV9QQUdFVVAsCS8qY2grKi8KKwlbMHgwZl0gPSBLRVlfUEFHRURPV04sCS8qY2gtKi8KKwlbMHgxYV0gPSBLRVlfTywJCS8qdm9sKyovCisJWzB4MGVdID0gS0VZX1osCQkvKnZvbC0qLworCVsweDA0XSA9IEtFWV9SLAkJLypyZWMqLworCVsweDA5XSA9IEtFWV9ELAkJLypmYXYqLworCVsweDA4XSA9IEtFWV9CQUNLU1BBQ0UsCS8qcmV3aW5kKi8KKwlbMHgwN10gPSBLRVlfQSwJCS8qZmFzdCovCisJWzB4MGJdID0gS0VZX1AsCQkvKnBhdXNlKi8KKwlbMHgwMl0gPSBLRVlfRVNDLAkvKmNhbmNlbCovCisJWzB4MDNdID0gS0VZX0csCQkvKnRhYiovCisJWzB4MDBdID0gS0VZX1VQLAkvKnVwKi8KKwlbMHgxZl0gPSBLRVlfRU5URVIsCS8qb2sqLworCVsweDAxXSA9IEtFWV9ET1dOLAkvKmRvd24qLworCVsweDA1XSA9IEtFWV9DLAkJLypjYXAqLworCVsweDA2XSA9IEtFWV9TLAkJLypzdG9wKi8KKwlbMHg0MF0gPSBLRVlfRiwJCS8qZnVsbCovCisJWzB4MWVdID0gS0VZX1csCQkvKnR2bW9kZSovCisJWzB4MWJdID0gS0VZX0IsCQkvKnJlY2FsbCovCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZG0xMTA1X25lYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCmluZGV4IGQ1OTlkMzYuLjk4MmYwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCkBAIC00NTIsOCArNDUyLDYgQEAKIAlJTkZPKCgiZm91bmQgc2FhNzE0NiBAIG1lbSAlcCAocmV2aXNpb24gJWQsIGlycSAlZCkgKDB4JTA0eCwweCUwNHgpLlxuIiwgZGV2LT5tZW0sIGRldi0+cmV2aXNpb24sIHBjaS0+aXJxLCBwY2ktPnN1YnN5c3RlbV92ZW5kb3IsIHBjaS0+c3Vic3lzdGVtX2RldmljZSkpOwogCWRldi0+ZXh0ID0gZXh0OwogCi0JcGNpX3NldF9kcnZkYXRhKHBjaSwgZGV2KTsKLQogCW11dGV4X2luaXQoJmRldi0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+aW50X3Nsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CkBAIC00NzcsOCArNDc1LDEyIEBACiAKIAlpZiAoZXh0LT5hdHRhY2goZGV2LCBwY2lfZXh0KSkgewogCQlERUJfRCgoImV4dC0+YXR0YWNoKCkgZmFpbGVkIGZvciAlcC4gc2tpcHBpbmcgZGV2aWNlLlxuIixkZXYpKTsKLQkJZ290byBlcnJfdW5wcm9iZTsKKwkJZ290byBlcnJfZnJlZV9pMmM7CiAJfQorCS8qIFY0TCBleHRlbnNpb25zIHdpbGwgc2V0IHRoZSBwY2kgZHJ2ZGF0YSB0byB0aGUgdjRsMl9kZXZpY2UgaW4gdGhlCisJICAgYXR0YWNoKCkgYWJvdmUuIFNvIGZvciB0aG9zZSBjYXJkcyB0aGF0IGRvIG5vdCB1c2UgVjRMIHdlIGhhdmUgdG8KKwkgICBzZXQgaXQgZXhwbGljaXRseS4gKi8KKwlwY2lfc2V0X2RydmRhdGEocGNpLCAmZGV2LT52NGwyX2Rldik7CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5pdGVtKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPml0ZW0sJnNhYTcxNDZfZGV2aWNlcyk7CkBAIC00ODgsOCArNDkwLDYgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogCi1lcnJfdW5wcm9iZToKLQlwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKIGVycl9mcmVlX2kyYzoKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBjaSwgU0FBNzE0Nl9SUFNfTUVNLCBkZXYtPmRfaTJjLmNwdV9hZGRyLAogCQkJICAgIGRldi0+ZF9pMmMuZG1hX2hhbmRsZSk7CkBAIC01MTQsNyArNTE0LDggQEAKIAogc3RhdGljIHZvaWQgc2FhNzE0Nl9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBzYWE3MTQ2X2RldiogZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSB0b19zYWE3MTQ2X2Rldih2NGwyX2Rldik7CiAJc3RydWN0IHsKIAkJdm9pZCAqYWRkcjsKIAkJZG1hX2FkZHJfdCBkbWE7CkBAIC01MjgsNiArNTI5LDggQEAKIAlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CiAKIAlkZXYtPmV4dC0+ZGV0YWNoKGRldik7CisJLyogWmVybyB0aGUgUENJIGRydmRhdGEgYWZ0ZXIgdXNlLiAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCS8qIHNodXQgZG93biBhbGwgdmlkZW8gZG1hIHRyYW5zZmVycyAqLwogCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzEsIDB4MDBmZjAwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCBjZjA2ZjRkLi42MjBmNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtMzA4LDE0ICszMDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBmb3BzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLS8qCi0JREVCX0VFKCgiZmlsZTolcCwgY21kOiVkLCBhcmc6JWxpXG4iLCBmaWxlLCBjbWQsIGFyZykpOwotKi8KLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOwotfQotCiBzdGF0aWMgaW50IGZvcHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQogewogCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTQyNSw3ICs0MTcsNyBAQAogCS53cml0ZQkJPSBmb3BzX3dyaXRlLAogCS5wb2xsCQk9IGZvcHNfcG9sbCwKIAkubW1hcAkJPSBmb3BzX21tYXAsCi0JLmlvY3RsCQk9IGZvcHNfaW9jdGwsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKIHN0YXRpYyB2b2lkIHZ2X2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXR1cykKQEAgLTQ1MiwxOSArNDQ0LDIyIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBkZXZpY2VfdGVtcGxhdGUgPQotewotCS5mb3BzCQk9ICZ2aWRlb19mb3BzLAotCS5taW5vcgkJPSAtMSwKLX07Ci0KIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KQogewotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGt6YWxsb2MgKHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl92diksR0ZQX0tFUk5FTCk7Ci0JaWYoIE5VTEwgPT0gdnYgKSB7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2OworCWludCBlcnI7CisKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5wY2ktPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2diA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3Z2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZ2ID09IE5VTEwpIHsKIAkJRVJSKCgib3V0IG9mIG1lbW9yeS4gYWJvcnRpbmcuXG4iKSk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWV4dF92di0+b3BzID0gc2FhNzE0Nl92aWRlb19pb2N0bF9vcHM7CisJZXh0X3Z2LT5jb3JlX29wcyA9ICZzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wczsKIAogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIApAQCAtNTA3LDYgKzUwMiw3IEBACiAKIAlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CiAKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBTQUE3MTQ2X0NMSVBQSU5HX01FTSwgdnYtPmRfY2xpcHBpbmcuY3B1X2FkZHIsIHZ2LT5kX2NsaXBwaW5nLmRtYV9oYW5kbGUpOwogCWtmcmVlKHZ2KTsKIAlkZXYtPnZ2X2RhdGEgPSBOVUxMOwpAQCAtNTIxLDYgKzUxNyw4IEBACiB7CiAJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlpbnQgZXJyOworCWludCBpOwogCiAJREVCX0VFKCgiZGV2OiVwLCBuYW1lOiclcycsIHR5cGU6JWRcbiIsZGV2LG5hbWUsdHlwZSkpOwogCkBAIC01MjksMTYgKzUyNywyMCBAQAogCWlmICh2ZmQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkodmZkLCAmZGV2aWNlX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSkpOwotCXN0cmxjcHkodmZkLT5uYW1lLCBuYW1lLCBzaXplb2YodmZkLT5uYW1lKSk7CisJdmZkLT5mb3BzID0gJnZpZGVvX2ZvcHM7CisJdmZkLT5pb2N0bF9vcHMgPSAmZGV2LT5leHRfdnZfZGF0YS0+b3BzOwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXZmZC0+dHZub3JtcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzOyBpKyspCisJCXZmZC0+dHZub3JtcyB8PSBkZXYtPmV4dF92dl9kYXRhLT5zdGRzW2ldLmlkOworCXN0cmxjcHkodmZkLT5uYW1lLCBuYW1lLCBzaXplb2YodmZkLT5uYW1lKSk7CiAJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOwogCi0JLy8gZml4bWU6IC0xIHNob3VsZCBiZSBhbiBpbnNtb2QgcGFyYW1ldGVyICpmb3IgdGhlIGV4dGVuc2lvbiogKGxpa2UgInZpZGVvX25yIik7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIHR5cGUsIC0xKSA8IDApIHsKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCB0eXBlLCAtMSk7CisJaWYgKGVyciA8IDApIHsKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmKCBWRkxfVFlQRV9HUkFCQkVSID09IHR5cGUgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwppbmRleCBjMTFkYTRkLi43ZThmNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKQEAgLTI5Myw3ICsyOTMsNiBAQAogCWludCBpID0gMCwgY291bnQgPSAwOwogCV9fbGUzMiAqYnVmZmVyID0gZGV2LT5kX2kyYy5jcHVfYWRkcjsKIAlpbnQgZXJyID0gMDsKLQlpbnQgYWRkcmVzc19lcnIgPSAwOwogCWludCBzaG9ydF9kZWxheSA9IDA7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPmkyY19sb2NrKSkKQEAgLTMzMywxNyArMzMyLDEwIEBACiAJCQkJICAgaTJjIGFkZHJlc3MgcHJvYmluZywgaG93ZXZlciwgYW5kIGFkZHJlc3MgZXJyb3JzIGluZGljYXRlIHRoYXQgYQogCQkJCSAgIGRldmljZSBpcyByZWFsbHkgKm5vdCogdGhlcmUuIHJldHJ5aW5nIGluIHRoYXQgY2FzZQogCQkJCSAgIGluY3JlYXNlcyB0aGUgdGltZSB0aGUgZGV2aWNlIG5lZWRzIHRvIHByb2JlIGdyZWF0bHksIHNvCi0JCQkJICAgaXQgc2hvdWxkIGJlIGF2b2lkZWQuIGJlY2F1c2Ugb2YgdGhlIGZhY3QsIHRoYXQgb25seQotCQkJCSAgIGFuYWxvZyBiYXNlZCBjYXJkcyB1c2UgaXJxIGJhc2VkIGkyYyB0cmFuc2FjdGlvbnMgKGZvciBkdmIKLQkJCQkgICBjYXJkcywgdGhpcyBzY3Jld2VzIHVwIG90aGVyIGludGVycnVwdCBzb3VyY2VzKSwgd2UgYmFpbCBvdXQKLQkJCQkgICBjb21wbGV0ZWx5IGZvciBhbmFsb2cgY2FyZHMgYWZ0ZXIgYW4gYWRkcmVzcyBlcnJvciBhbmQgdHJ1c3QKLQkJCQkgICB0aGUgc2FhNzE0NiBhZGRyZXNzIGVycm9yIGRldGVjdGlvbi4gKi8KLQkJCQlpZiAoIC1FUkVNT1RFSU8gPT0gZXJyICkgewotCQkJCQlpZiggMCAhPSAoU0FBNzE0Nl9VU0VfSTJDX0lSUSAmIGRldi0+ZXh0LT5mbGFncykpIHsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJCWFkZHJlc3NfZXJyKys7Ci0JCQkJfQorCQkJCSAgIGl0IHNob3VsZCBiZSBhdm9pZGVkLiBTbyB3ZSBiYWlsIG91dCBpbiBpcnEgbW9kZSBhZnRlciBhbgorCQkJCSAgIGFkZHJlc3MgZXJyb3IgYW5kIHRydXN0IHRoZSBzYWE3MTQ2IGFkZHJlc3MgZXJyb3IgZGV0ZWN0aW9uLiAqLworCQkJCWlmICgtRVJFTU9URUlPID09IGVyciAmJiAwICE9IChTQUE3MTQ2X1VTRV9JMkNfSVJRICYgZGV2LT5leHQtPmZsYWdzKSkKKwkJCQkJZ290byBvdXQ7CiAJCQkJREVCX0kyQygoImVycm9yIHdoaWxlIHNlbmRpbmcgbWVzc2FnZShzKS4gc3RhcnRpbmcgYWdhaW4uXG4iKSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zNTgsMTAgKzM1MCw5IEBACiAKIAl9IHdoaWxlIChlcnIgIT0gbnVtICYmIHJldHJpZXMtLSk7CiAKLQkvKiBpZiBldmVyeSByZXRyeSBoYWQgYW4gYWRkcmVzcyBlcnJvciwgZXhpdCByaWdodCBhd2F5ICovCi0JaWYgKGFkZHJlc3NfZXJyID09IHJldHJpZXMpIHsKKwkvKiBxdWl0IGlmIGFueSBlcnJvciBvY2N1cnJlZCAqLworCWlmIChlcnIgIT0gbnVtKQogCQlnb3RvIG91dDsKLQl9CiAKIAkvKiBpZiBhbnkgdGhpbmdzIGhhZCB0byBiZSByZWFkLCBnZXQgdGhlIHJlc3VsdHMgKi8KIAlpZiAoIDAgIT0gc2FhNzE0Nl9pMmNfbXNnX2NsZWFudXAobXNncywgbnVtLCBidWZmZXIpKSB7CkBAIC0zOTAsNyArMzgxLDggQEAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IHNhYTcxNDZfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwdGVyLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLCBpbnQgbnVtKQogewotCXN0cnVjdCBzYWE3MTQ2X2RldiogZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IHRvX3NhYTcxNDZfZGV2KHY0bDJfZGV2KTsKIAogCS8qIHVzZSBoZWxwZXIgZnVuY3Rpb24gdG8gdHJhbnNmZXIgZGF0YSAqLwogCXJldHVybiBzYWE3MTQ2X2kyY190cmFuc2ZlcihkZXYsIG1zZywgbnVtLCBhZGFwdGVyLT5yZXRyaWVzKTsKQEAgLTQxNyw5ICs0MDksOCBAQAogCWRldi0+aTJjX2JpdHJhdGUgPSBiaXRyYXRlOwogCXNhYTcxNDZfaTJjX3Jlc2V0KGRldik7CiAKLQlpZiggTlVMTCAhPSBpMmNfYWRhcHRlciApIHsKLQkJQlVHX09OKCFpMmNfYWRhcHRlci0+Y2xhc3MpOwotCQlpMmNfc2V0X2FkYXBkYXRhKGkyY19hZGFwdGVyLGRldik7CisJaWYgKGkyY19hZGFwdGVyKSB7CisJCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIsICZkZXYtPnY0bDJfZGV2KTsKIAkJaTJjX2FkYXB0ZXItPmRldi5wYXJlbnQgICAgPSAmZGV2LT5wY2ktPmRldjsKIAkJaTJjX2FkYXB0ZXItPmFsZ28JICAgPSAmc2FhNzE0Nl9hbGdvOwogCQlpMmNfYWRhcHRlci0+YWxnb19kYXRhICAgICA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKaW5kZXggNDdmZWUwNS4uNTUyZGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKIHN0YXRpYyBpbnQgbWF4X21lbW9yeSA9IDMyOwogCkBAIC05NywxNzIgKzk4LDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgZ19mbXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCURFQl9FRSgoImRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJZi0+Zm10LnBpeCA9IGZoLT52aWRlb19mbXQ7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQlmLT5mbXQud2luID0gZmgtPm92LndpbjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCXsKLQkJZi0+Zm10LnZiaSA9IGZoLT52YmlfZm10OwotCQlyZXR1cm4gMDsKLQl9Ci0JZGVmYXVsdDoKLQkJREVCX0QoKCJpbnZhbGlkIGZvcm1hdCB0eXBlICclZCcuXG4iLGYtPnR5cGUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCi1zdGF0aWMgaW50IHRyeV93aW4oc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX3dpbmRvdyAqd2luKQotewotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQllbnVtIHY0bDJfZmllbGQgZmllbGQ7Ci0JaW50IG1heHcsIG1heGg7Ci0KLQlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7Ci0KLQlpZiAoTlVMTCA9PSB2di0+b3ZfZmIuYmFzZSkgewotCQlERUJfRCgoIm5vIGZiIGJhc2Ugc2V0LlxuIikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKE5VTEwgPT0gdnYtPm92X2ZtdCkgewotCQlERUJfRCgoIm5vIGZiIGZtdCBzZXQuXG4iKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAod2luLT53LndpZHRoIDwgNDggfHwgd2luLT53LmhlaWdodCA8ICAzMikgewotCQlERUJfRCgoIm1pbiB3aWR0aC9oZWlnaHQuICglZCwlZClcbiIsd2luLT53LndpZHRoLHdpbi0+dy5oZWlnaHQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh3aW4tPmNsaXBjb3VudCA+IDE2KSB7Ci0JCURFQl9EKCgiY2xpcGNvdW50IHRvbyBiaWcuXG4iKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZpZWxkID0gd2luLT5maWVsZDsKLQltYXh3ICA9IHZ2LT5zdGFuZGFyZC0+aF9tYXhfb3V0OwotCW1heGggID0gdnYtPnN0YW5kYXJkLT52X21heF9vdXQ7Ci0KLQlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKLQkJZmllbGQgPSAod2luLT53LmhlaWdodCA+IG1heGgvMikKLQkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECi0JCQk6IFY0TDJfRklFTERfVE9QOwotCQl9Ci0Jc3dpdGNoIChmaWVsZCkgewotCWNhc2UgVjRMMl9GSUVMRF9UT1A6Ci0JY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKLQljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOgotCQltYXhoID0gbWF4aCAvIDI7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotCQlicmVhazsKLQlkZWZhdWx0OiB7Ci0JCURFQl9EKCgibm8ga25vd24gZmllbGQgbW9kZSAnJWQnLlxuIixmaWVsZCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JfQotCi0Jd2luLT5maWVsZCA9IGZpZWxkOwotCWlmICh3aW4tPncud2lkdGggPiBtYXh3KQotCQl3aW4tPncud2lkdGggPSBtYXh3OwotCWlmICh3aW4tPncuaGVpZ2h0ID4gbWF4aCkKLQkJd2luLT53LmhlaWdodCA9IG1heGg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0cnlfZm10KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCXsKLQkJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpmbXQ7Ci0JCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQkJaW50IG1heHcsIG1heGg7Ci0JCWludCBjYWxjX2JwbDsKLQotCQlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IGRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7Ci0KLQkJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhkZXYsZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JCWlmIChOVUxMID09IGZtdCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0JCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7Ci0JCW1heGggID0gdnYtPnN0YW5kYXJkLT52X21heF9vdXQ7Ci0KLQkJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7Ci0JCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgvMikKLQkJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAotCQkJCTogVjRMMl9GSUVMRF9CT1RUT007Ci0JCX0KLQkJc3dpdGNoIChmaWVsZCkgewotCQljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOiB7Ci0JCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfVE9QOwotCQkJbWF4aCA9IG1heGggLyAyOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKLQkJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKLQkJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJbWF4aCA9IG1heGggLyAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotCQkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogewotCQkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLGZpZWxkKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl9Ci0KLQkJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwotCQlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IG1heHcpCi0JCQlmLT5mbXQucGl4LndpZHRoID0gbWF4dzsKLQkJaWYgKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aCkKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gbWF4aDsKLQotCQljYWxjX2JwbCA9IChmLT5mbXQucGl4LndpZHRoICogZm10LT5kZXB0aCkvODsKLQotCQlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPCBjYWxjX2JwbCkKLQkJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gY2FsY19icGw7Ci0KLQkJaWYgKGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gKDIqUEFHRV9TSVpFICogZm10LT5kZXB0aCkvOCkgLyogYXJiaXRyYXJ5IGNvbnN0cmFpbnQgKi8KLQkJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gY2FsY19icGw7Ci0KLQkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmJ5dGVzcGVybGluZSAqIGYtPmZtdC5waXguaGVpZ2h0OwotCQlERUJfRCgoInc6JWQsIGg6JWQsIGJ5dGVzcGVybGluZTolZCwgc2l6ZWltYWdlOiVkXG4iLGYtPmZtdC5waXgud2lkdGgsZi0+Zm10LnBpeC5oZWlnaHQsZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUsZi0+Zm10LnBpeC5zaXplaW1hZ2UpKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQkJZXJyID0gdHJ5X3dpbihkZXYsJmYtPmZtdC53aW4pOwotCQlpZiAoMCAhPSBlcnIpIHsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJREVCX0VFKCgidW5rbm93biBmb3JtYXQgdHlwZSAnJWQnXG4iLGYtPnR5cGUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQorc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CiAKIGludCBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKIAlpbnQgcmV0ID0gMCwgZXJyID0gMDsKIAogCURFQl9FRSgoImRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7CkBAIC0yOTQsMTIgKzEzNiwxMyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWVyciA9IHRyeV93aW4oZGV2LCZmaC0+b3Yud2luKTsKKwlmbXQuZm10LndpbiA9IGZoLT5vdi53aW47CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkoTlVMTCwgZmgsICZmbXQpOwogCWlmICgwICE9IGVycikgewogCQlzYWE3MTQ2X3Jlc19mcmVlKHZ2LT52aWRlb19maCwgUkVTT1VSQ0VfRE1BMV9IUFN8UkVTT1VSQ0VfRE1BMl9DTFApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQorCWZoLT5vdi53aW4gPSBmbXQuZm10LndpbjsKIAl2di0+b3ZfZGF0YSA9ICZmaC0+b3Y7CiAKIAlERUJfRCgoIiVkeCVkKyVkKyVkICVzIGZpZWxkPSVzXG4iLApAQCAtMzU1LDU4ICsxOTgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzE0Nl9zdG9wX3ByZXZpZXcpOwogCi1zdGF0aWMgaW50IHNfZm10KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlERUJfRUUoKCJzdHJlYW1pbmcgY2FwdHVyZSBpcyBhY3RpdmVcbiIpKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJZXJyID0gdHJ5X2ZtdChmaCxmKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJZmgtPnZpZGVvX2ZtdCA9IGYtPmZtdC5waXg7Ci0JCURFQl9FRSgoInNldCB0byBwaXhlbGZvcm1hdCAnJTQuNHMnXG4iLChjaGFyICopJmZoLT52aWRlb19mbXQucGl4ZWxmb3JtYXQpKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQkJZXJyID0gdHJ5X3dpbihkZXYsJmYtPmZtdC53aW4pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQlmaC0+b3Yud2luICAgID0gZi0+Zm10LndpbjsKLQkJZmgtPm92Lm5jbGlwcyA9IGYtPmZtdC53aW4uY2xpcGNvdW50OwotCQlpZiAoZmgtPm92Lm5jbGlwcyA+IDE2KQotCQkJZmgtPm92Lm5jbGlwcyA9IDE2OwotCQlpZiAoY29weV9mcm9tX3VzZXIoZmgtPm92LmNsaXBzLGYtPmZtdC53aW4uY2xpcHMsc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApKmZoLT5vdi5uY2xpcHMpKSB7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCS8qIGZoLT5vdi5maCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSB2YWxpZCBvdmVybGF5IGluZm9ybWF0aW9ucywgdG9vICovCi0JCWZoLT5vdi5maCA9IGZoOwotCi0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCQkvKiBjaGVjayBpZiBvdXIgY3VycmVudCBvdmVybGF5IGlzIGFjdGl2ZSAqLwotCQlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKLQkJCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJREVCX0QoKCJ1bmtub3duIGZvcm1hdCB0eXBlICclZCdcbiIsZi0+dHlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGRldmljZSBjb250cm9scyAqLwogCkBAIC00MTksNiArMjEwLDcgQEAKIAkJLnN0ZXAJCT0gMSwKIAkJLmRlZmF1bHRfdmFsdWUJPSAxMjgsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5mbGFncyAJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sewogCQkuaWQJCT0gVjRMMl9DSURfQ09OVFJBU1QsCiAJCS5uYW1lCQk9ICJDb250cmFzdCIsCkBAIC00MjcsNiArMjE5LDcgQEAKIAkJLnN0ZXAJCT0gMSwKIAkJLmRlZmF1bHRfdmFsdWUJPSA2NCwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLmZsYWdzIAkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSx7CiAJCS5pZAkJPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAogCQkubmFtZQkJPSAiU2F0dXJhdGlvbiIsCkBAIC00MzUsMTUgKzIyOCwxNiBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDY0LAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkuZmxhZ3MgCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAotCQkubmFtZQkJPSAiVmVydGljYWwgZmxpcCIsCisJCS5uYW1lCQk9ICJWZXJ0aWNhbCBGbGlwIiwKIAkJLm1pbmltdW0JPSAwLAogCQkubWF4aW11bQk9IDEsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJfSx7CiAJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKLQkJLm5hbWUJCT0gIkhvcml6b250YWwgZmxpcCIsCisJCS5uYW1lCQk9ICJIb3Jpem9udGFsIEZsaXAiLAogCQkubWluaW11bQk9IDAsCiAJCS5tYXhpbXVtCT0gMSwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKQEAgLTQ2MywxMzIgKzI1Nyw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2NvbnRyb2woc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwqIGN0cmw7Ci0JdTMyIHZhbHVlID0gMDsKLQotCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKLQlpZiAoTlVMTCA9PSBjdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzd2l0Y2ggKGMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJYy0+dmFsdWUgPSAweGZmICYgKHZhbHVlID4+IDI0KTsKLQkJREVCX0QoKCJWNEwyX0NJRF9CUklHSFRORVNTOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJYy0+dmFsdWUgPSAweDdmICYgKHZhbHVlID4+IDE2KTsKLQkJREVCX0QoKCJWNEwyX0NJRF9DT05UUkFTVDogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJYy0+dmFsdWUgPSAweDdmICYgKHZhbHVlID4+IDApOwotCQlERUJfRCgoIlY0TDJfQ0lEX1NBVFVSQVRJT046ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfVkZMSVA6Ci0JCWMtPnZhbHVlID0gdnYtPnZmbGlwOwotCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0hGTElQOgotCQljLT52YWx1ZSA9IHZ2LT5oZmxpcDsKLQkJREVCX0QoKCJWNEwyX0NJRF9IRkxJUDogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2NvbnRyb2woc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwqIGN0cmw7Ci0KLQljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7Ci0JaWYgKE5VTEwgPT0gY3RybCkgewotCQlERUJfRCgoInVua25vd24gY29udHJvbCAlZFxuIixjLT5pZCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgotCWNhc2UgVjRMMl9DVFJMX1RZUEVfTUVOVToKLQljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI6Ci0JCWlmIChjLT52YWx1ZSA8IGN0cmwtPm1pbmltdW0pCi0JCQljLT52YWx1ZSA9IGN0cmwtPm1pbmltdW07Ci0JCWlmIChjLT52YWx1ZSA+IGN0cmwtPm1heGltdW0pCi0JCQljLT52YWx1ZSA9IGN0cmwtPm1heGltdW07Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIG5vdGhpbmcgKi87Ci0JfTsKLQotCXN3aXRjaCAoYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6IHsKLQkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQl2YWx1ZSAmPSAweDAwZmZmZmZmOwotCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMjQpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYgKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKLQkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQl2YWx1ZSAmPSAweGZmMDBmZmZmOwotCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMTYpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYgKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjogewotCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCXZhbHVlICY9IDB4ZmZmZmZmMDA7Ci0JCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAwKTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2ICk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQ0lEX0hGTElQOgotCQkvKiBmaXhtZTogd2UgY2FuIHN1cHBvcnQgY2hhbmdpbmcgVkZMSVAgYW5kIEhGTElQIGhlcmUuLi4gKi8KLQkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlERUJfRCgoIlY0TDJfQ0lEX0hGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdnYtPmhmbGlwID0gYy0+dmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfVkZMSVA6Ci0JCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgewotCQkJREVCX0QoKCJWNEwyX0NJRF9WRkxJUCB3aGlsZSBhY3RpdmUgY2FwdHVyZS5cbiIpKTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXZ2LT52ZmxpcCA9IGMtPnZhbHVlOwotCQlicmVhazsKLQlkZWZhdWx0OiB7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCX0KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwotCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogY29tbW9uIHBhZ2V0YWJsZSBmdW5jdGlvbnMgKi8KIApAQCAtODI5LDIzMSArNDk3LDQ0NiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBfbm90XyBjYWxsZWQgZGlyZWN0bHksIGJ1dCBmcm9tCi0gKiB2aWRlb19nZW5lcmljX2lvY3RsIChhbmQgbWF5YmUgb3RoZXJzKS4gIHVzZXJzcGFjZQotICogY29weWluZyBpcyBkb25lIGFscmVhZHksIGFyZyBpcyBhIGtlcm5lbCBwb2ludGVyLgotICovCi0KLWxvbmcgc2FhNzE0Nl92aWRlb19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZmggKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlzdHJjcHkoKGNoYXIgKiljYXAtPmRyaXZlciwgInNhYTcxNDYgdjRsMiIpOworCXN0cmxjcHkoKGNoYXIgKiljYXAtPmNhcmQsIGRldi0+ZXh0LT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJc3ByaW50ZigoY2hhciAqKWNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOworCWNhcC0+dmVyc2lvbiA9IFNBQTcxNDZfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0KKwkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAorCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAorCQlWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5jYXBhYmlsaXRpZXMgfD0gZGV2LT5leHRfdnZfZGF0YS0+Y2FwYWJpbGl0aWVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CiAJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwogCi0JbG9uZyBlcnIgPSAwOwotCWludCByZXN1bHQgPSAwLCBlZSA9IDA7CisJKmZiID0gdnYtPm92X2ZiOworCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOworCXJldHVybiAwOworfQogCi0Jc3RydWN0IHNhYTcxNDZfdXNlX29wcyAqb3BzOwotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcTsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpmbXQ7CiAKLQkvKiBjaGVjayBpZiBleHRlbnNpb24gaGFuZGxlcyB0aGUgY29tbWFuZCAqLwotCWZvcihlZSA9IDA7IGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3Rsc1tlZV0uZmxhZ3MgIT0gMDsgZWUrKykgewotCQlpZiggY21kID09IGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3Rsc1tlZV0uY21kICkKLQkJCWJyZWFrOwotCX0KKwlERUJfRUUoKCJWSURJT0NfU19GQlVGXG4iKSk7CiAKLQlpZiggMCAhPSAoZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5mbGFncyAmIFNBQTcxNDZfRVhDTFVTSVZFKSApIHsKLQkJREVCX0QoKCJleHRlbnNpb24gaGFuZGxlcyBpb2N0bCBleGNsdXNpdmUuXG4iKSk7Ci0JCXJlc3VsdCA9IGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3RsKGZoLCBjbWQsIGFyZyk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCWlmKCAwICE9IChkZXYtPmV4dF92dl9kYXRhLT5pb2N0bHNbZWVdLmZsYWdzICYgU0FBNzE0Nl9CRUZPUkUpICkgewotCQlERUJfRCgoImV4dGVuc2lvbiBoYW5kbGVzIGlvY3RsIGJlZm9yZS5cbiIpKTsKLQkJcmVzdWx0ID0gZGV2LT5leHRfdnZfZGF0YS0+aW9jdGwoZmgsIGNtZCwgYXJnKTsKLQkJaWYoIC1FQUdBSU4gIT0gcmVzdWx0ICkgewotCQkJcmV0dXJuIHJlc3VsdDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBjaGVjayBhcmdzICovCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhkZXYsIGZiLT5mbXQucGl4ZWxmb3JtYXQpOworCWlmIChOVUxMID09IGZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBwbGFuYXIgZm9ybWF0cyBhcmUgbm90IGFsbG93ZWQgZm9yIG92ZXJsYXkgdmlkZW8sIGNsaXBwaW5nIGFuZCB2aWRlbyBkbWEgd291bGQgY2xhc2ggKi8KKwlpZiAoZm10LT5mbGFncyAmIEZPUk1BVF9JU19QTEFOQVIpCisJCURFQl9TKCgicGxhbmFyIHBpeGVsZm9ybWF0ICclNC40cycgbm90IGFsbG93ZWQgZm9yIG92ZXJsYXlcbiIsCisJCQkJCShjaGFyICopJmZtdC0+cGl4ZWxmb3JtYXQpKTsKKworCS8qIGNoZWNrIGlmIG92ZXJsYXkgaXMgcnVubmluZyAqLworCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgeworCQlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7CisJCQlERUJfRCgoInJlZnVzaW5nIHRvIGNoYW5nZSBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbnMgd2hpbGUgb3ZlcmxheSBpcyBhY3RpdmUgaW4gYW5vdGhlciBvcGVuLlxuIikpOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KIAotCS8qIGZpeG1lOiBhZGQgaGFuZGxlICJhZnRlciIgY2FzZSAoaXMgaXQgc3RpbGwgbmVlZGVkPykgKi8KKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCW9wcyA9ICZzYWE3MTQ2X3ZpZGVvX3VvcHM7Ci0JCXEgPSAmZmgtPnZpZGVvX3E7CisJLyogb2ssIGFjY2VwdCBpdCAqLworCXZ2LT5vdl9mYiA9ICpmYjsKKwl2di0+b3ZfZm10ID0gZm10OworCWlmICgwID09IHZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lKQorCQl2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZSA9CisJCQl2di0+b3ZfZmIuZm10LndpZHRoICogZm10LT5kZXB0aCAvIDg7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWlmIChmLT5pbmRleCA+PSBOVU1fRk9STUFUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RybGNweSgoY2hhciAqKWYtPmRlc2NyaXB0aW9uLCBmb3JtYXRzW2YtPmluZGV4XS5uYW1lLAorCQkJc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2YtPmluZGV4XS5waXhlbGZvcm1hdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjKQoreworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybDsKKworCWlmICgoYy0+aWQgPCAgVjRMMl9DSURfQkFTRSB8fAorCSAgICAgYy0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKSAmJgorCSAgICAoYy0+aWQgPCAgVjRMMl9DSURfUFJJVkFURV9CQVNFIHx8CisJICAgICBjLT5pZCA+PSBWNEwyX0NJRF9QUklWQVRFX0xBU1RQMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOworCWlmIChjdHJsID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJREVCX0VFKCgiVklESU9DX1FVRVJZQ1RSTDogaWQ6JWRcbiIsIGMtPmlkKSk7CisJKmMgPSAqY3RybDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCXUzMiB2YWx1ZSA9IDA7CisKKwljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7CisJaWYgKE5VTEwgPT0gY3RybCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCWMtPnZhbHVlID0gMHhmZiAmICh2YWx1ZSA+PiAyNCk7CisJCURFQl9EKCgiVjRMMl9DSURfQlJJR0hUTkVTUzogJWRcbiIsIGMtPnZhbHVlKSk7CiAJCWJyZWFrOwotCQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOiB7Ci0JCW9wcyA9ICZzYWE3MTQ2X3ZiaV91b3BzOwotCQlxID0gJmZoLT52YmlfcTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJYy0+dmFsdWUgPSAweDdmICYgKHZhbHVlID4+IDE2KTsKKwkJREVCX0QoKCJWNEwyX0NJRF9DT05UUkFTVDogJWRcbiIsIGMtPnZhbHVlKSk7CiAJCWJyZWFrOwotCQl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJYy0+dmFsdWUgPSAweDdmICYgKHZhbHVlID4+IDApOworCQlERUJfRCgoIlY0TDJfQ0lEX1NBVFVSQVRJT046ICVkXG4iLCBjLT52YWx1ZSkpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQljLT52YWx1ZSA9IHZ2LT52ZmxpcDsKKwkJREVCX0QoKCJWNEwyX0NJRF9WRkxJUDogJWRcbiIsIGMtPnZhbHVlKSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWMtPnZhbHVlID0gdnYtPmhmbGlwOworCQlERUJfRCgoIlY0TDJfQ0lEX0hGTElQOiAlZFxuIiwgYy0+dmFsdWUpKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybDsKKworCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKKwlpZiAoTlVMTCA9PSBjdHJsKSB7CisJCURFQl9EKCgidW5rbm93biBjb250cm9sICVkXG4iLCBjLT5pZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0JCURFQl9FRSgoIlZJRElPQ19RVUVSWUNBUFxuIikpOwotCi0JCXN0cmNweSgoY2hhciAqKWNhcC0+ZHJpdmVyLCAic2FhNzE0NiB2NGwyIik7Ci0JCXN0cmxjcHkoKGNoYXIgKiljYXAtPmNhcmQsIGRldi0+ZXh0LT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JCXNwcmludGYoKGNoYXIgKiljYXAtPmJ1c19pbmZvLCJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOwotCQljYXAtPnZlcnNpb24gPSBTQUE3MTQ2X1ZFUlNJT05fQ09ERTsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPQotCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8Ci0JCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKLQkJCVY0TDJfQ0FQX1JFQURXUklURSB8Ci0JCQlWNEwyX0NBUF9TVFJFQU1JTkc7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IGRldi0+ZXh0X3Z2X2RhdGEtPmNhcGFiaWxpdGllczsKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfTUVOVToKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI6CisJCWlmIChjLT52YWx1ZSA8IGN0cmwtPm1pbmltdW0pCisJCQljLT52YWx1ZSA9IGN0cmwtPm1pbmltdW07CisJCWlmIChjLT52YWx1ZSA+IGN0cmwtPm1heGltdW0pCisJCQljLT52YWx1ZSA9IGN0cmwtPm1heGltdW07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG5vdGhpbmcgKi87CiAJfQotCWNhc2UgVklESU9DX0dfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKIAotCQlERUJfRUUoKCJWSURJT0NfR19GQlVGXG4iKSk7Ci0KLQkJKmZiID0gdnYtPm92X2ZiOwotCQlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogeworCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCXZhbHVlICY9IDB4MDBmZmZmZmY7CisJCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAyNCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNik7CisJCWJyZWFrOwogCX0KLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7Ci0JCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdCAqZm10OwotCi0JCURFQl9FRSgoIlZJRElPQ19TX0ZCVUZcbiIpKTsKLQotCQlpZighY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJgotCQkgICAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJLyogY2hlY2sgYXJncyAqLwotCQlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldixmYi0+Zm10LnBpeGVsZm9ybWF0KTsKLQkJaWYgKE5VTEwgPT0gZm10KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOiB7CisJCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJdmFsdWUgJj0gMHhmZjAwZmZmZjsKKwkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDE2KTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjogeworCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCXZhbHVlICY9IDB4ZmZmZmZmMDA7CisJCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAwKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCS8qIGZpeG1lOiB3ZSBjYW4gc3VwcG9ydCBjaGFuZ2luZyBWRkxJUCBhbmQgSEZMSVAgaGVyZS4uLiAqLworCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJCURFQl9EKCgiVjRMMl9DSURfSEZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0KLQkJLyogcGxhbmFyIGZvcm1hdHMgYXJlIG5vdCBhbGxvd2VkIGZvciBvdmVybGF5IHZpZGVvLCBjbGlwcGluZyBhbmQgdmlkZW8gZG1hIHdvdWxkIGNsYXNoICovCi0JCWlmICgwICE9IChmbXQtPmZsYWdzICYgRk9STUFUX0lTX1BMQU5BUikpIHsKLQkJCURFQl9TKCgicGxhbmFyIHBpeGVsZm9ybWF0ICclNC40cycgbm90IGFsbG93ZWQgZm9yIG92ZXJsYXlcbiIsKGNoYXIgKikmZm10LT5waXhlbGZvcm1hdCkpOworCQl2di0+aGZsaXAgPSBjLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7CisJCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCi0JCS8qIGNoZWNrIGlmIG92ZXJsYXkgaXMgcnVubmluZyAqLwotCQlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCWlmICh2di0+dmlkZW9fZmggIT0gZmgpIHsKLQkJCQlERUJfRCgoInJlZnVzaW5nIHRvIGNoYW5nZSBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbnMgd2hpbGUgb3ZlcmxheSBpcyBhY3RpdmUgaW4gYW5vdGhlciBvcGVuLlxuIikpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0JCX0KLQotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCi0JCS8qIG9rLCBhY2NlcHQgaXQgKi8KLQkJdnYtPm92X2ZiID0gKmZiOwotCQl2di0+b3ZfZm10ID0gZm10OwotCQlpZiAoMCA9PSB2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZSkKLQkJCXZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lID0KLQkJCQl2di0+b3ZfZmIuZm10LndpZHRoKmZtdC0+ZGVwdGgvODsKLQorCQl2di0+dmZsaXAgPSBjLT52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmID0gYXJnOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAotCQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJaWYgKGYtPmluZGV4ID49IE5VTV9GT1JNQVRTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJc3RybGNweSgoY2hhciAqKWYtPmRlc2NyaXB0aW9uLCBmb3JtYXRzW2YtPmluZGV4XS5uYW1lLAotCQkJCQlzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1tmLT5pbmRleF0ucGl4ZWxmb3JtYXQ7Ci0JCQlmLT5mbGFncyA9IDA7Ci0JCQltZW1zZXQoZi0+cmVzZXJ2ZWQsIDAsIHNpemVvZihmLT5yZXNlcnZlZCkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOworCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisKKwlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSAxOworCXY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZCh2di0+c3RhbmRhcmQtPmlkLAorCQkJCSAgICAmcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJZi0+Zm10LnBpeCA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPnZpZGVvX2ZtdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJZi0+Zm10LndpbiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPm92LndpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlmLT5mbXQudmJpID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+dmJpX2ZtdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJaW50IG1heHcsIG1heGg7CisJaW50IGNhbGNfYnBsOworCisJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiBkZXY6JXAsIGZoOiVwXG4iLCBkZXYsIGZoKSk7CisKKwlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldiwgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJaWYgKE5VTEwgPT0gZm10KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwltYXh3ICA9IHZ2LT5zdGFuZGFyZC0+aF9tYXhfb3V0OworCW1heGggID0gdnYtPnN0YW5kYXJkLT52X21heF9vdXQ7CisKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKKwkJZmllbGQgPSAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoIC8gMikKKwkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECisJCQk6IFY0TDJfRklFTERfQk9UVE9NOworCX0KKwlzd2l0Y2ggKGZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKKwkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLCBmaWVsZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmLT5mbXQucGl4LmZpZWxkID0gZmllbGQ7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPiBtYXh3KQorCQlmLT5mbXQucGl4LndpZHRoID0gbWF4dzsKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQorCQlmLT5mbXQucGl4LmhlaWdodCA9IG1heGg7CisKKwljYWxjX2JwbCA9IChmLT5mbXQucGl4LndpZHRoICogZm10LT5kZXB0aCkgLyA4OworCisJaWYgKGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lIDwgY2FsY19icGwpCisJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gY2FsY19icGw7CisKKwlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPiAoMiAqIFBBR0VfU0laRSAqIGZtdC0+ZGVwdGgpIC8gOCkgLyogYXJiaXRyYXJ5IGNvbnN0cmFpbnQgKi8KKwkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKKworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgKiBmLT5mbXQucGl4LmhlaWdodDsKKwlERUJfRCgoInc6JWQsIGg6JWQsIGJ5dGVzcGVybGluZTolZCwgc2l6ZWltYWdlOiVkXG4iLCBmLT5mbXQucGl4LndpZHRoLAorCQkJZi0+Zm10LnBpeC5oZWlnaHQsIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lLCBmLT5mbXQucGl4LnNpemVpbWFnZSkpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJc3RydWN0IHY0bDJfd2luZG93ICp3aW4gPSAmZi0+Zm10LndpbjsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJaW50IG1heHcsIG1heGg7CisKKwlERUJfRUUoKCJkZXY6JXBcbiIsIGRldikpOworCisJaWYgKE5VTEwgPT0gdnYtPm92X2ZiLmJhc2UpIHsKKwkJREVCX0QoKCJubyBmYiBiYXNlIHNldC5cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChOVUxMID09IHZ2LT5vdl9mbXQpIHsKKwkJREVCX0QoKCJubyBmYiBmbXQgc2V0LlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHdpbi0+dy53aWR0aCA8IDQ4IHx8IHdpbi0+dy5oZWlnaHQgPCAzMikgeworCQlERUJfRCgoIm1pbiB3aWR0aC9oZWlnaHQuICglZCwlZClcbiIsIHdpbi0+dy53aWR0aCwgd2luLT53LmhlaWdodCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHdpbi0+Y2xpcGNvdW50ID4gMTYpIHsKKwkJREVCX0QoKCJjbGlwY291bnQgdG9vIGJpZy5cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmllbGQgPSB3aW4tPmZpZWxkOworCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7CisJbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCQlmaWVsZCA9ICh3aW4tPncuaGVpZ2h0ID4gbWF4aCAvIDIpCisJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAorCQkJOiBWNEwyX0ZJRUxEX1RPUDsKIAkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19FTlVNX0ZNVDogdHlwZTolZCwgaW5kZXg6JWRcbiIsZi0+dHlwZSxmLT5pbmRleCkpOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKKwljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQl9EKCgibm8ga25vd24gZmllbGQgbW9kZSAnJWQnLlxuIiwgZmllbGQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybDsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjID0gYXJnOwogCi0JCWlmICgoYy0+aWQgPCAgVjRMMl9DSURfQkFTRSB8fAotCQkgICAgIGMtPmlkID49IFY0TDJfQ0lEX0xBU1RQMSkgJiYKLQkJICAgIChjLT5pZCA8ICBWNEwyX0NJRF9QUklWQVRFX0JBU0UgfHwKLQkJICAgICBjLT5pZCA+PSBWNEwyX0NJRF9QUklWQVRFX0xBU1RQMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwl3aW4tPmZpZWxkID0gZmllbGQ7CisJaWYgKHdpbi0+dy53aWR0aCA+IG1heHcpCisJCXdpbi0+dy53aWR0aCA9IG1heHc7CisJaWYgKHdpbi0+dy5oZWlnaHQgPiBtYXhoKQorCQl3aW4tPncuaGVpZ2h0ID0gbWF4aDsKIAotCQljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7Ci0JCWlmKCBOVUxMID09IGN0cmwgKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLS8qCi0JCQljLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOwotCQkJcmV0dXJuIDA7Ci0qLwotCQl9CisJcmV0dXJuIDA7Cit9CiAKLQkJREVCX0VFKCgiVklESU9DX1FVRVJZQ1RSTDogaWQ6JWRcbiIsYy0+aWQpKTsKLQkJKmMgPSAqY3RybDsKLQkJcmV0dXJuIDA7CitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWludCBlcnI7CisKKwlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IGRldjolcCwgZmg6JXBcbiIsIGRldiwgZmgpKTsKKwlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJREVCX0VFKCgic3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7CisJCXJldHVybiAtRUJVU1k7CiAJfQotCWNhc2UgVklESU9DX0dfQ1RSTDogewotCQlERUJfRUUoKCJWSURJT0NfR19DVFJMXG4iKSk7Ci0JCXJldHVybiBnZXRfY29udHJvbChmaCxhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JewotCQlERUJfRUUoKCJWSURJT0NfU19DVFJMXG4iKSk7Ci0JCWVyciA9IHNldF9jb250cm9sKGZoLGFyZyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CisJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOworCWZoLT52aWRlb19mbXQgPSBmLT5mbXQucGl4OworCURFQl9FRSgoInNldCB0byBwaXhlbGZvcm1hdCAnJTQuNHMnXG4iLCAoY2hhciAqKSZmaC0+dmlkZW9fZm10LnBpeGVsZm9ybWF0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWludCBlcnI7CisKKwlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6IGRldjolcCwgZmg6JXBcbiIsIGRldiwgZmgpKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShmaWxlLCBmaCwgZik7CisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZmgtPm92LndpbiAgICA9IGYtPmZtdC53aW47CisJZmgtPm92Lm5jbGlwcyA9IGYtPmZtdC53aW4uY2xpcGNvdW50OworCWlmIChmaC0+b3YubmNsaXBzID4gMTYpCisJCWZoLT5vdi5uY2xpcHMgPSAxNjsKKwlpZiAoY29weV9mcm9tX3VzZXIoZmgtPm92LmNsaXBzLCBmLT5mbXQud2luLmNsaXBzLAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIGZoLT5vdi5uY2xpcHMpKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWNhc2UgVklESU9DX0dfUEFSTToKLQl7Ci0JCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0gPSBhcmc7Ci0JCWlmKCBwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCW1lbXNldCgmcGFybS0+cGFybS5jYXB0dXJlLDAsc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtKSk7Ci0JCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IDE7Ci0JCS8vIGZpeG1lOiBvbmx5IGZvciBQQUwhCi0JCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKLQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IDI1OwotCQlyZXR1cm4gMDsKKworCS8qIGZoLT5vdi5maCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSB2YWxpZCBvdmVybGF5IGluZm9ybWF0aW9ucywgdG9vICovCisJZmgtPm92LmZoID0gZmg7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwkvKiBjaGVjayBpZiBvdXIgY3VycmVudCBvdmVybGF5IGlzIGFjdGl2ZSAqLworCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgeworCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7CisJCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7CiAJfQotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfR19GTVRcbiIpKTsKLQkJcmV0dXJuIGdfZm10KGZoLGYpOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJREVCX0VFKCgiVklESU9DX1NfRk1UXG4iKSk7Ci0JCXJldHVybiBzX2ZtdChmaCxmKTsKLQl9Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJREVCX0VFKCgiVklESU9DX1RSWV9GTVRcbiIpKTsKLQkJcmV0dXJuIHRyeV9mbXQoZmgsZik7Ci0JfQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfR19TVERcbiIpKTsKLQkJKmlkID0gdnYtPnN0YW5kYXJkLT5pZDsKLQkJcmV0dXJuIDA7Ci0JfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpub3JtKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKworCSpub3JtID0gdnYtPnN0YW5kYXJkLT5pZDsKKwlyZXR1cm4gMDsKK30KKwogCS8qIHRoZSBzYWE3MTQ2IHN1cGZocnRzICh1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHNhYTcxMTFhIGZvciBleGFtcGxlKQogCSAgIFBBTCAvIE5UU0MgLyBTRUNBTS4gaWYgeW91ciBoYXJkd2FyZSBkb2VzIG5vdCAob3IgZG9lcyBtb3JlKQogCSAgIC0tIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4geW91ciBleHRlbnNpb24gKi8KKy8qCiAJY2FzZSBWSURJT0NfRU5VTVNURDoKIAl7CiAJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICplID0gYXJnOwpAQCAtMTA2NiwxNjMgKzk0OSwyNDYgQEAKIAkJfQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JewotCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7Ci0JCWludCBmb3VuZCA9IDA7Ci0JCWludCBpOworCSovCiAKLQkJREVCX0VFKCgiVklESU9DX1NfU1REXG4iKSk7CitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgZXJyLCBpOwogCi0JCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSA9PSBTVEFUVVNfQ0FQVFVSRSkgewotCQkJREVCX0QoKCJjYW5ub3QgY2hhbmdlIHZpZGVvIHN0YW5kYXJkIHdoaWxlIHN0cmVhbWluZyBjYXB0dXJlIGlzIGFjdGl2ZVxuIikpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQorCURFQl9FRSgoIlZJRElPQ19TX1NURFxuIikpOwogCi0JCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19PVkVSTEFZKSAhPSAwKSB7Ci0JCQl2di0+b3Zfc3VzcGVuZCA9IHZ2LT52aWRlb19maDsKLQkJCWVyciA9IHNhYTcxNDZfc3RvcF9wcmV2aWV3KHZ2LT52aWRlb19maCk7IC8qIHNpZGUgZWZmZWN0OiB2aWRlb19zdGF0dXMgaXMgbm93IDAsIHZpZGVvX2ZoIGlzIE5VTEwgKi8KLQkJCWlmICgwICE9IGVycikgewotCQkJCURFQl9EKCgic3VzcGVuZGluZyB2aWRlbyBmYWlsZWQuIGFib3J0aW5nXG4iKSk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KLQkJfQotCi0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQkJZm9yKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKLQkJCWlmICgqaWQgJiBkZXYtPmV4dF92dl9kYXRhLT5zdGRzW2ldLmlkKQotCQkJCWJyZWFrOwotCQlpZiAoaSAhPSBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkcykgewotCQkJdnYtPnN0YW5kYXJkID0gJmRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV07Ci0JCQlpZiggTlVMTCAhPSBkZXYtPmV4dF92dl9kYXRhLT5zdGRfY2FsbGJhY2sgKQotCQkJCWRldi0+ZXh0X3Z2X2RhdGEtPnN0ZF9jYWxsYmFjayhkZXYsIHZ2LT5zdGFuZGFyZCk7Ci0JCQlmb3VuZCA9IDE7Ci0JCX0KLQotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQkJaWYgKHZ2LT5vdl9zdXNwZW5kICE9IE5VTEwpIHsKLQkJCXNhYTcxNDZfc3RhcnRfcHJldmlldyh2di0+b3Zfc3VzcGVuZCk7Ci0JCQl2di0+b3Zfc3VzcGVuZCA9IE5VTEw7Ci0JCX0KLQotCQlpZiggMCA9PSBmb3VuZCApIHsKLQkJCURFQl9FRSgoIlZJRElPQ19TX1NURDogc3RhbmRhcmQgbm90IGZvdW5kLlxuIikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfU19TVEQ6IHNldCB0byBzdGFuZGFyZCB0byAnJXMnXG4iLHZ2LT5zdGFuZGFyZC0+bmFtZSkpOwotCQlyZXR1cm4gMDsKKwlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfQ0FQVFVSRSkgPT0gU1RBVFVTX0NBUFRVUkUpIHsKKwkJREVCX0QoKCJjYW5ub3QgY2hhbmdlIHZpZGVvIHN0YW5kYXJkIHdoaWxlIHN0cmVhbWluZyBjYXB0dXJlIGlzIGFjdGl2ZVxuIikpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCXsKLQkJaW50IG9uID0gKihpbnQgKilhcmc7CiAKLQkJREVCX0QoKCJWSURJT0NfT1ZFUkxBWSBvbjolZFxuIixvbikpOwotCQlpZiAob24gIT0gMCkgewotCQkJZXJyID0gc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IHNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKLQkJfQotCQlyZXR1cm4gZXJyOwotCX0KLQljYXNlIFZJRElPQ19SRVFCVUZTOiB7Ci0JCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7Ci0JCURFQl9EKCgiVklESU9DX1JFUUJVRlMsIHR5cGU6JWRcbiIscmVxLT50eXBlKSk7Ci0JCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKHEscmVxKTsKLQl9Ci0JY2FzZSBWSURJT0NfUVVFUllCVUY6IHsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCURFQl9EKCgiVklESU9DX1FVRVJZQlVGLCB0eXBlOiVkLCBvZmZzZXQ6JWRcbiIsYnVmLT50eXBlLGJ1Zi0+bS5vZmZzZXQpKTsKLQkJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKHEsYnVmKTsKLQl9Ci0JY2FzZSBWSURJT0NfUUJVRjogewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJaW50IHJldCA9IDA7Ci0JCXJldCA9IHZpZGVvYnVmX3FidWYocSxidWYpOwotCQlERUJfRCgoIlZJRElPQ19RQlVGOiByZXQ6JWQsIGluZGV4OiVkXG4iLHJldCxidWYtPmluZGV4KSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWNhc2UgVklESU9DX0RRQlVGOiB7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmV0ID0gMDsKLQkJcmV0ID0gdmlkZW9idWZfZHFidWYocSxidWYsZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCQlERUJfRCgoIlZJRElPQ19EUUJVRjogcmV0OiVkLCBpbmRleDolZFxuIixyZXQsYnVmLT5pbmRleCkpOwotCQlyZXR1cm4gcmV0OwotCX0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjogewotCQlpbnQgKnR5cGUgPSBhcmc7Ci0JCURFQl9EKCgiVklESU9DX1NUUkVBTU9OLCB0eXBlOiVkXG4iLCp0eXBlKSk7Ci0KLQkJZXJyID0gdmlkZW9fYmVnaW4oZmgpOwotCQlpZiggMCAhPSBlcnIpIHsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJZXJyID0gdmlkZW9idWZfc3RyZWFtb24ocSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjogewotCQlpbnQgKnR5cGUgPSBhcmc7Ci0KLQkJREVCX0QoKCJWSURJT0NfU1RSRUFNT0ZGLCB0eXBlOiVkXG4iLCp0eXBlKSk7Ci0KLQkJLyogdWdseTogd2UgbmVlZCB0byBjb3B5IHNvbWUgY2hlY2tzIGZyb20gdmlkZW9fZW5kKCksCi0JCSAgIGJlY2F1c2UgdmlkZW9idWZfc3RyZWFtb2ZmKCkgcmVsaWVzIG9uIHRoZSBjYXB0dXJlIHJ1bm5pbmcuCi0JCSAgIGNoZWNrIGFuZCBmaXggdGhpcyAqLwotCQlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfQ0FQVFVSRSkgIT0gU1RBVFVTX0NBUFRVUkUpIHsKLQkJCURFQl9TKCgibm90IGNhcHR1cmluZy5cbiIpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHZ2LT52aWRlb19maCAhPSBmaCkgewotCQkJREVCX1MoKCJjYXB0dXJpbmcsIGJ1dCBpbiBhbm90aGVyIG9wZW4uXG4iKSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKHEpOworCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19PVkVSTEFZKSAhPSAwKSB7CisJCXZ2LT5vdl9zdXNwZW5kID0gdnYtPnZpZGVvX2ZoOworCQllcnIgPSBzYWE3MTQ2X3N0b3BfcHJldmlldyh2di0+dmlkZW9fZmgpOyAvKiBzaWRlIGVmZmVjdDogdmlkZW9fc3RhdHVzIGlzIG5vdyAwLCB2aWRlb19maCBpcyBOVUxMICovCiAJCWlmICgwICE9IGVycikgewotCQkJREVCX0QoKCJ3YXJuaW5nOiB2aWRlb2J1Zl9zdHJlYW1vZmYoKSBmYWlsZWQuXG4iKSk7Ci0JCQl2aWRlb19lbmQoZmgsIGZpbGUpOwotCQl9IGVsc2UgewotCQkJZXJyID0gdmlkZW9fZW5kKGZoLCBmaWxlKTsKLQkJfQotCQlyZXR1cm4gZXJyOwotCX0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQljYXNlIFZJRElPQ0dNQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX21idWYgKm1idWYgPSBhcmc7Ci0JCWludCBpOwotCi0JCS8qIGZpeG1lOiBudW1iZXIgb2YgY2FwdHVyZSBidWZmZXJzIGFuZCBzaXplcyBmb3IgdjRsIGFwcHMgKi8KLQkJaW50IGdidWZmZXJzID0gMjsKLQkJaW50IGdidWZzaXplID0gNzY4KjU3Nio0OwotCi0JCURFQl9EKCgiVklESU9DR01CVUYgXG4iKSk7Ci0KLQkJcSA9ICZmaC0+dmlkZW9fcTsKLQkJZXJyID0gdmlkZW9idWZfbW1hcF9zZXR1cChxLGdidWZmZXJzLGdidWZzaXplLAotCQkJCQkgIFY0TDJfTUVNT1JZX01NQVApOwotCQlpZiAoZXJyIDwgMCkKKwkJCURFQl9EKCgic3VzcGVuZGluZyB2aWRlbyBmYWlsZWQuIGFib3J0aW5nXG4iKSk7CiAJCQlyZXR1cm4gZXJyOworCQl9CisJfQogCi0JCWdidWZmZXJzID0gZXJyOwotCQltZW1zZXQobWJ1ZiwwLHNpemVvZigqbWJ1ZikpOwotCQltYnVmLT5mcmFtZXMgPSBnYnVmZmVyczsKLQkJbWJ1Zi0+c2l6ZSAgID0gZ2J1ZmZlcnMgKiBnYnVmc2l6ZTsKLQkJZm9yIChpID0gMDsgaSA8IGdidWZmZXJzOyBpKyspCi0JCQltYnVmLT5vZmZzZXRzW2ldID0gaSAqIGdidWZzaXplOwotCQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzOyBpKyspCisJCWlmICgqaWQgJiBkZXYtPmV4dF92dl9kYXRhLT5zdGRzW2ldLmlkKQorCQkJYnJlYWs7CisJaWYgKGkgIT0gZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHMpIHsKKwkJdnYtPnN0YW5kYXJkID0gJmRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV07CisJCWlmIChOVUxMICE9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZF9jYWxsYmFjaykKKwkJCWRldi0+ZXh0X3Z2X2RhdGEtPnN0ZF9jYWxsYmFjayhkZXYsIHZ2LT5zdGFuZGFyZCk7CisJCWZvdW5kID0gMTsKIAl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLCBhcmcsCi0JCQkJCQkgIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKHZ2LT5vdl9zdXNwZW5kICE9IE5VTEwpIHsKKwkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHZ2LT5vdl9zdXNwZW5kKTsKKwkJdnYtPm92X3N1c3BlbmQgPSBOVUxMOwogCX0KKworCWlmICghZm91bmQpIHsKKwkJREVCX0VFKCgiVklESU9DX1NfU1REOiBzdGFuZGFyZCBub3QgZm91bmQuXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCURFQl9FRSgoIlZJRElPQ19TX1NURDogc2V0IHRvIHN0YW5kYXJkIHRvICclcydcbiIsIHZ2LT5zdGFuZGFyZC0+bmFtZSkpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IG9uKQoreworCWludCBlcnI7CisKKwlERUJfRCgoIlZJRElPQ19PVkVSTEFZIG9uOiVkXG4iLCBvbikpOworCWlmIChvbikKKwkJZXJyID0gc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKKwllbHNlCisJCWVyciA9IHNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqYikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCisJaWYgKGItPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZpZGVvX3EsIGIpOworCWlmIChiLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJpX3EsIGIpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52aWRlb19xLCBidWYpOworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmJpX3EsIGJ1Zik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52aWRlb19xLCBidWYpOworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52YmlfcSwgYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmlkZW9fcSwgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52YmlfcSwgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCWludCBlcnI7CisKKwlERUJfRCgoIlZJRElPQ19TVFJFQU1PTiwgdHlwZTolZFxuIiwgdHlwZSkpOworCisJZXJyID0gdmlkZW9fYmVnaW4oZmgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52aWRlb19xKTsKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52YmlfcSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWludCBlcnI7CisKKwlERUJfRCgoIlZJRElPQ19TVFJFQU1PRkYsIHR5cGU6JWRcbiIsIHR5cGUpKTsKKworCS8qIHVnbHk6IHdlIG5lZWQgdG8gY29weSBzb21lIGNoZWNrcyBmcm9tIHZpZGVvX2VuZCgpLAorCSAgIGJlY2F1c2UgdmlkZW9idWZfc3RyZWFtb2ZmKCkgcmVsaWVzIG9uIHRoZSBjYXB0dXJlIHJ1bm5pbmcuCisJICAgY2hlY2sgYW5kIGZpeCB0aGlzICovCisJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX0NBUFRVUkUpICE9IFNUQVRVU19DQVBUVVJFKSB7CisJCURFQl9TKCgibm90IGNhcHR1cmluZy5cbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHZ2LT52aWRlb19maCAhPSBmaCkgeworCQlERUJfUygoImNhcHR1cmluZywgYnV0IGluIGFub3RoZXIgb3Blbi5cbiIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwllcnIgPSAtRUlOVkFMOworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmlkZW9fcSk7CisJZWxzZSBpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52YmlfcSk7CisJaWYgKDAgIT0gZXJyKSB7CisJCURFQl9EKCgid2FybmluZzogdmlkZW9idWZfc3RyZWFtb2ZmKCkgZmFpbGVkLlxuIikpOworCQl2aWRlb19lbmQoZmgsIGZpbGUpOworCX0gZWxzZSB7CisJCWVyciA9IHZpZGVvX2VuZChmaCwgZmlsZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisJaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0hPU1QgJiYgIWNoaXAtPm1hdGNoLmFkZHIpIHsKKwkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxNDY7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJmRldi0+djRsMl9kZXYsIDAsCisJCQljb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCitzdGF0aWMgaW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmlkZW9fcTsKKwlpbnQgZXJyLCBpOworCisJLyogZml4bWU6IG51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMgYW5kIHNpemVzIGZvciB2NGwgYXBwcyAqLworCWludCBnYnVmZmVycyA9IDI7CisJaW50IGdidWZzaXplID0gNzY4ICogNTc2ICogNDsKKworCURFQl9EKCgiVklESU9DR01CVUYgXG4iKSk7CisKKwlxID0gJmZoLT52aWRlb19xOworCWVyciA9IHZpZGVvYnVmX21tYXBfc2V0dXAocSwgZ2J1ZmZlcnMsIGdidWZzaXplLAorCQkJVjRMMl9NRU1PUllfTU1BUCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlnYnVmZmVycyA9IGVycjsKKwltZW1zZXQobWJ1ZiwgMCwgc2l6ZW9mKCptYnVmKSk7CisJbWJ1Zi0+ZnJhbWVzID0gZ2J1ZmZlcnM7CisJbWJ1Zi0+c2l6ZSAgID0gZ2J1ZmZlcnMgKiBnYnVmc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDwgZ2J1ZmZlcnM7IGkrKykKKwkJbWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBnYnVmc2l6ZTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2FhNzE0Nl92aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3ZlcmxheSA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgICAgID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheSAgICA9IHZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkgID0gdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSAgICA9IHZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgID0gdmlkaW9jX2dfZm10X3ZiaV9jYXAsCisJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgICAgICA9IHZpZGlvY19nX2NoaXBfaWRlbnQsCisKKwkudmlkaW9jX292ZXJsYXkgCSAgICAgPSB2aWRpb2Nfb3ZlcmxheSwKKwkudmlkaW9jX2dfZmJ1ZiAgCSAgICAgPSB2aWRpb2NfZ19mYnVmLAorCS52aWRpb2Nfc19mYnVmICAJICAgICA9IHZpZGlvY19zX2ZidWYsCisJLnZpZGlvY19yZXFidWZzICAgICAgICAgICAgICA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgICAgICA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19nX3N0ZCAgICAgICAgICAgICAgICA9IHZpZGlvY19nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgICAgID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnljdHJsICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgICAgICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gICAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19nX3Bhcm0gCQkgICAgID0gdmlkaW9jX2dfcGFybSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgICAgICAgICAgICAgICAgID0gdmlkaW9jZ21idWYsCisjZW5kaWYKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBidWZmZXIgaGFuZGxpbmcgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnCmluZGV4IDZmOTJiZWEuLjUyYzNmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnCkBAIC0yMSwxNiArMjEsMTcgQEAKIAl0cmlzdGF0ZQogCWRlZmF1bHQgVklERU9fTUVESUEgJiYgSTJDCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMFhYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9URUE1NzY3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBOTg4NyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjBYWCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyOTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9URUE1NzYxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2NyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTk4ODcgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NQzQ0UzgwMyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAKLW1lbnVjb25maWcgTUVESUFfVFVORVJfQ1VTVE9NSVpFCittZW51Y29uZmlnIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWJvb2wgIkN1c3RvbWl6ZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgogCWRlcGVuZHMgb24gTUVESUFfVFVORVIKIAlkZWZhdWx0IG4KQEAgLTQzLDEzICs0NCwxMyBAQAogCiAJICBJZiB1bnN1cmUgc2F5IE4uCiAKLWlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQoraWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9TSU1QTEUKIAl0cmlzdGF0ZSAiU2ltcGxlIHR1bmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBOTg4NwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHZhcmlvdXMgc2ltcGxlIHR1bmVycy4KIApAQCAtNTgsMjggKzU5LDI4IEBACiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WAogCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MQotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBoaWxpcHMgVERBODI5MCs4Mjc1KGEpIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVERBODI3WAogCXRyaXN0YXRlICJQaGlsaXBzIFREQTgyN1ggc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVQgc2lsaWNvbiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVERBMTgyNzEKIAl0cmlzdGF0ZSAiTlhQIFREQTE4MjcxIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX1REQTk4ODcKIAl0cmlzdGF0ZSAiVERBIDk4ODUvNi83IGFuYWxvZyBJRiBkZW1vZHVsYXRvciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBoaWxpcHMgVERBOTg4NS82LzcKIAkgIGFuYWxvZyBJRiBkZW1vZHVsYXRvci4KQEAgLTg4LDYzICs4OSw2MyBAQAogCXRyaXN0YXRlICJURUEgNTc2MSByYWRpbyB0dW5lciAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgVEVBNTc2MSByYWRpbyB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX1RFQTU3NjcKIAl0cmlzdGF0ZSAiVEVBIDU3NjcgcmFkaW8gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBURUE1NzY3IHJhZGlvIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfTVQyMFhYCiAJdHJpc3RhdGUgIk1pY3JvdHVuZSAyMDMyIC8gMjA1MCB0dW5lcnMiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgTVQyMDMyIC8gTVQyMDUwIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfTVQyMDYwCiAJdHJpc3RhdGUgIk1pY3JvdHVuZSBNVDIwNjAgc2lsaWNvbiBJRiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBJRiB0dW5lciBNVDIwNjAgZnJvbSBNaWNyb3R1bmUuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIyNjYKIAl0cmlzdGF0ZSAiTWljcm90dW5lIE1UMjI2NiBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIGJhc2ViYW5kIHR1bmVyIE1UMjI2NiBmcm9tIE1pY3JvdHVuZS4KIAogY29uZmlnIE1FRElBX1RVTkVSX01UMjEzMQogCXRyaXN0YXRlICJNaWNyb3R1bmUgTVQyMTMxIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gYmFzZWJhbmQgdHVuZXIgTVQyMTMxIGZyb20gTWljcm90dW5lLgogCiBjb25maWcgTUVESUFfVFVORVJfUVQxMDEwCiAJdHJpc3RhdGUgIlF1YW50ZWsgUVQxMDEwIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgUVQxMDEwIGZyb20gUXVhbnRlay4KIAogY29uZmlnIE1FRElBX1RVTkVSX1hDMjAyOAogCXRyaXN0YXRlICJYQ2VpdmUgeGMyMDI4L3hjMzAyOCB0dW5lcnMiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgeGMyMDI4L3hjMzAyOCB0dW5lcnMuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9YQzUwMDAKIAl0cmlzdGF0ZSAiWGNlaXZlIFhDNTAwMCBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIHR1bmVyIFhDNTAwMCBmcm9tIFhjZWl2ZS4KIAkgIFRoaXMgZGV2aWNlIGlzIG9ubHkgdXNlZCBpbnNpZGUgYSBTaVAgY2FsbGVkIHRvZ3RoZXIgd2l0aCBhCkBAIC0xNTMsMTUgKzE1NCwyMiBAQAogY29uZmlnIE1FRElBX1RVTkVSX01YTDUwMDVTCiAJdHJpc3RhdGUgIk1heExpbmVhciBNU0w1MDA1UyBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIHR1bmVyIE1YTDUwMDVTIGZyb20gTWF4TGluZWFyLgogCiBjb25maWcgTUVESUFfVFVORVJfTVhMNTAwN1QKIAl0cmlzdGF0ZSAiTWF4TGluZWFyIE14TDUwMDdUIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgTXhMNTAwN1QgZnJvbSBNYXhMaW5lYXIuCiAKLWVuZGlmICMgTUVESUFfVFVORVJfQ1VTVE9NSVpFCitjb25maWcgTUVESUFfVFVORVJfTUM0NFM4MDMKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCB0dW5lcnMiCisJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBGcmVlc2NhbGUgTUM0NFM4MDMgYmFzZWQgdHVuZXJzCisKK2VuZGlmICMgTUVESUFfVFVORVJfQ1VTVE9NSVNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUKaW5kZXggNGRmYmU1Yi4uNDEzMmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01UMjEzMSkgKz0gbXQyMTMxLm8KIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1UykgKz0gbXhsNTAwNXMubwogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUKSArPSBteGw1MDA3dC5vCitvYmotJChDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDMpICs9IG1jNDRzODAzLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM0NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUM0NFM4MDMgTG93IFBvd2VyIENNT1MgQnJvYWRiYW5kIFR1bmVyCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJtYzQ0czgwMy5oIgorI2luY2x1ZGUgIm1jNDRzODAzX3ByaXYuaCIKKworI2RlZmluZSBtY19wcmludGsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKQlcCisJcHJpbnRrKGxldmVsICJtYzQ0czgwMzogIiBmb3JtYXQgLCAjIyBhcmcpCisKKy8qIFdyaXRlcyBhIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBtYzQ0czgwM193cml0ZXJlZyhzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiwgdTMyIHZhbCkKK3sKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzCisJfTsKKworCWJ1ZlswXSA9ICh2YWwgJiAweGZmMDAwMCkgPj4gMTY7CisJYnVmWzFdID0gKHZhbCAmIDB4ZmYwMCkgPj4gODsKKwlidWZbMl0gPSAodmFsICYgMHhmZik7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCQltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUmVhZHMgYSBzaW5nbGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgbWM0NHM4MDNfcmVhZHJlZyhzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiwgdTggcmVnLCB1MzIgKnZhbCkKK3sKKwl1MzIgd3ZhbDsKKwl1OCBidWZbM107CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkgIC5idWYgPSBidWYsIC5sZW4gPSAzIH0sCisJfTsKKworCXd2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RBVEFSRUcsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICAgTUM0NFM4MDNfUkVHX1NNKHJlZywgTUM0NFM4MDNfRCk7CisKKwlyZXQgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB3dmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMSkgIT0gMSkgeworCQltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSTJDIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJKnZhbCA9IChidWZbMF0gPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlsyXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisvKiBSZXNldCBjaGlwICovCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRVNFVCwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19SUyk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVTRVQsIE1DNDRTODAzX0FERFIpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFBvd2VyIFVwIGFuZCBTdGFydCBPc2MgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVGT1NDLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4QzAsIE1DNDRTODAzX1JFRk9TQykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19PU0NTRUwpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1BPV0VSLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MjAwLCBNQzQ0UzgwM19QT1dFUik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCW1zbGVlcCgxMCk7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFRk9TQywgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDQwLCBNQzQ0UzgwM19SRUZPU0MpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfT1NDU0VMKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJbXNsZWVwKDIwKTsKKworLyogU2V0dXAgTWl4ZXIgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfTUlYRVIsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfVFJJX1NUQVRFKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4N0YsIE1DNDRTODAzX01JWEVSX1JFUyk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworLyogU2V0dXAgQ2lycXVpdCBBZGp1c3QgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfQ0lSQ0FESiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDMsIE1DNDRTODAzX0NJUkNBREpfUkVTKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0c2KSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKHByaXYtPmNmZy0+ZGlnX291dCwgTUM0NFM4MDNfUzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19MUCkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19DTFJGKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0NMSUYpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0NJUkNBREosIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzMpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19DSVJDQURKX1JFUykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HNikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShwcml2LT5jZmctPmRpZ19vdXQsIE1DNDRTODAzX1MxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MywgTUM0NFM4MDNfTFApOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFNldHVwIERpZ3R1bmUgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfRElHVFVORSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgzLCBNQzQ0UzgwM19YT0QpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFNldHVwIEFHQyAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19MTkFBR0MsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FUMikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BR0NfQU5fRElHKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FHQ19SRUFEX0VOKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0xOQTApOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCXJldHVybiAwOworCitleGl0OgorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSS9PIEVycm9yXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MzIgcjEsIHIyLCBuMSwgbjIsIGxvMSwgbG8yLCBmcmVxLCB2YWw7CisJaW50IGVycjsKKworCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OworCisJcjEgPSBNQzQ0UzgwM19PU0MgLyAxMDAwMDAwOworCXIyID0gTUM0NFM4MDNfT1NDIC8gIDEwMDAwMDsKKworCW4xID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgTUM0NFM4MDNfSUYxICsgNTAwMDAwKSAvIDEwMDAwMDA7CisJZnJlcSA9IE1DNDRTODAzX09TQyAvIHIxICogbjE7CisJbG8xID0gKCg2MCAqIG4xKSArIChyMSAvIDIpKSAvIHIxOworCWZyZXEgPSBmcmVxIC0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwluMiA9IChmcmVxIC0gTUM0NFM4MDNfSUYyICsgNTAwMDApIC8gMTAwMDAwOworCWxvMiA9ICgoNjAgKiBuMikgKyAocjIgLyAyKSkgLyByMjsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFRkRJViwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShyMS0xLCBNQzQ0UzgwM19SMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShyMi0xLCBNQzQ0UzgwM19SMikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19SRUZCVUZfRU4pOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0xPMSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShuMS0yLCBNQzQ0UzgwM19MTzEpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0xPMiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShuMi0yLCBNQzQ0UzgwM19MTzIpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RJR1RVTkUsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfREEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00obG8xLCBNQzQ0UzgwM19MT19SRUYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RJR1RVTkUsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMiwgTUM0NFM4MDNfREEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00obG8yLCBNQzQ0UzgwM19MT19SRUYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJcmV0dXJuIDA7CisKK2V4aXQ6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCW1jX3ByaW50ayhLRVJOX1dBUk5JTkcsICJJL08gRXJyb3JcbiIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWM0NHM4MDNfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwkqZnJlcXVlbmN5ID0gcHJpdi0+ZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgbWM0NHM4MDNfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSAgICAgICAgICAgPSAiRnJlZXNjYWxlIE1DNDRTODAzIiwKKwkJLmZyZXF1ZW5jeV9taW4gID0gICA0ODAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggID0gMTAwMDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gICAgIDEwMDAwMCwKKwl9LAorCisJLnJlbGVhc2UgICAgICAgPSBtYzQ0czgwM19yZWxlYXNlLAorCS5pbml0ICAgICAgICAgID0gbWM0NHM4MDNfaW5pdCwKKwkuc2V0X3BhcmFtcyAgICA9IG1jNDRzODAzX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBtYzQ0czgwM19nZXRfZnJlcXVlbmN5Cit9OworCisvKiBUaGlzIGZ1bmN0aW9ucyB0cmllcyB0byBpZGVudGlmeSBhIE1DNDRTODAzIHR1bmVyIGJ5IHJlYWRpbmcgdGhlIElECisgICByZWdpc3Rlci4gVGhpcyBpcyBoYXN0eS4gKi8KK3N0cnVjdCBkdmJfZnJvbnRlbmQgKm1jNDRzODAzX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtYzQ0czgwM19jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdjsKKwl1MzIgcmVnOworCXU4IGlkOworCWludCByZXQ7CisKKwlyZWcgPSAwOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYzQ0czgwM19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5jZmcgPSBjZmc7CisJcHJpdi0+aTJjID0gaTJjOworCXByaXYtPmZlICA9IGZlOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gbWM0NHM4MDNfcmVhZHJlZyhwcml2LCBNQzQ0UzgwM19SRUdfSUQsICZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZCA9IE1DNDRTODAzX1JFR19NUyhyZWcsIE1DNDRTODAzX0lEKTsKKworCWlmIChpZCAhPSAweDE0KSB7CisJCW1jX3ByaW50ayhLRVJOX0VSUiwgInVuc3VwcG9ydGVkIElEICIKKwkJICAgICAgICIoJXggc2hvdWxkIGJlIDB4MTQpXG4iLCBpZCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWNfcHJpbnRrKEtFUk5fSU5GTywgInN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkIChJRCA9ICV4KVxuIiwgaWQpOworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZtYzQ0czgwM190dW5lcl9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCisJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiBmZTsKKworZXJyb3I6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCWtmcmVlKHByaXYpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChtYzQ0czgwM19hdHRhY2gpOworCitNT0RVTEVfQVVUSE9SKCJKb2NoZW4gRnJpZWRyaWNoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNQzQ0UzgwMyBzaWxpY29uIHR1bmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGYzODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzQ0UzgwMyBMb3cgUG93ZXIgQ01PUyBCcm9hZGJhbmQgVHVuZXIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEpvY2hlbiBGcmllZHJpY2ggPGpvY2hlbkBzY3JhbS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS49CisgKi8KKworI2lmbmRlZiBNQzQ0UzgwM19ICisjZGVmaW5lIE1DNDRTODAzX0gKKworc3RydWN0IGR2Yl9mcm9udGVuZDsKK3N0cnVjdCBpMmNfYWRhcHRlcjsKKworc3RydWN0IG1jNDRzODAzX2NvbmZpZyB7CisJdTggaTJjX2FkZHJlc3M7CisJdTggZGlnX291dDsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMykgfHwgXAorICAgIChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwM19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYzQ0czgwM19hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbWM0NHM4MDNfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG1jNDRzODAzX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwM19wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDNfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTkyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDNfcHJpdi5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCBUdW5lcgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSm9jaGVuIEZyaWVkcmljaCA8am9jaGVuQHNjcmFtLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIE1DNDRTODAzX1BSSVZfSAorI2RlZmluZSBNQzQ0UzgwM19QUklWX0gKKworLyogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgZGF0YXNoZWV0CisgICBodHRwOi8vd3d3LmZyZWVzY2FsZS5jb20vZmlsZXMvcmZfaWYvZG9jL2RhdGFfc2hlZXQvTUM0NFM4MDMucGRmCisKKyAgIFNQSSBvciBJMkMgQWRkcmVzcyA6IDB4YzAtMHhjNgorCisgICBSZWcuTm8gfCBGdW5jdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIDAwIHwgUG93ZXIgRG93bgorICAgICAgIDAxIHwgUmVmZXJlbmNlIE9zemlsbGF0b3IKKyAgICAgICAwMiB8IFJlZmVyZW5jZSBEaXZpZGVycworICAgICAgIDAzIHwgTWl4ZXIgYW5kIFJlZmVyZW5jZSBCdWZmZXIKKyAgICAgICAwNCB8IFJlc2V0L1NlcmlhbCBPdXQKKyAgICAgICAwNSB8IExPIDEKKyAgICAgICAwNiB8IExPIDIKKyAgICAgICAwNyB8IENpcmN1aXQgQWRqdXN0CisgICAgICAgMDggfCBUZXN0CisgICAgICAgMDkgfCBEaWdpdGFsIFR1bmUKKyAgICAgICAwQSB8IExOQSBBR0MKKyAgICAgICAwQiB8IERhdGEgUmVnaXN0ZXIgQWRkcmVzcworICAgICAgIDBDIHwgUmVndWxhdG9yIFRlc3QKKyAgICAgICAwRCB8IFZDTyBUZXN0CisgICAgICAgMEUgfCBMTkEgR2Fpbi9JbnB1dCBQb3dlcgorICAgICAgIDBGIHwgSUQgQml0cworCisqLworCisjZGVmaW5lIE1DNDRTODAzX09TQyAyNjAwMDAwMAkvKiAyNiBNSHogKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUYxIDEwODYwMDAwMDAgLyogMTA4NiBNSHogKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUYyIDM2MTI1MDAwCS8qIDM2LjEyNSBNSHogKi8KKworI2RlZmluZSBNQzQ0UzgwM19SRUdfUE9XRVIJMAorI2RlZmluZSBNQzQ0UzgwM19SRUdfUkVGT1NDCTEKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFRkRJVgkyCisjZGVmaW5lIE1DNDRTODAzX1JFR19NSVhFUgkzCisjZGVmaW5lIE1DNDRTODAzX1JFR19SRVNFVAk0CisjZGVmaW5lIE1DNDRTODAzX1JFR19MTzEJNQorI2RlZmluZSBNQzQ0UzgwM19SRUdfTE8yCTYKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0NJUkNBREoJNworI2RlZmluZSBNQzQ0UzgwM19SRUdfVEVTVAk4CisjZGVmaW5lIE1DNDRTODAzX1JFR19ESUdUVU5FCTkKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0xOQUFHQwkweDBBCisjZGVmaW5lIE1DNDRTODAzX1JFR19EQVRBUkVHCTB4MEIKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFR1RFU1QJMHgwQworI2RlZmluZSBNQzQ0UzgwM19SRUdfVkNPVEVTVAkweDBECisjZGVmaW5lIE1DNDRTODAzX1JFR19MTkFHQUlOCTB4MEUKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0lECQkweDBGCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1DNDRTODAzX0FERFIJCTB4MEYKKyNkZWZpbmUgTUM0NFM4MDNfQUREUl9TCQkwCisvKiBSRUdfUE9XRVIgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUE9XRVIJCTB4RkZGRkYwCisjZGVmaW5lIE1DNDRTODAzX1BPV0VSX1MJNAorLyogUkVHX1JFRk9TQyAqLworI2RlZmluZSBNQzQ0UzgwM19SRUZPU0MJCTB4MUZGMAorI2RlZmluZSBNQzQ0UzgwM19SRUZPU0NfUwk0CisjZGVmaW5lIE1DNDRTODAzX09TQ1NFTAkJMHgyMDAwCisjZGVmaW5lIE1DNDRTODAzX09TQ1NFTF9TCTEzCisvKiBSRUdfUkVGRElWICovCisjZGVmaW5lIE1DNDRTODAzX1IyCQkweDFGRjAKKyNkZWZpbmUgTUM0NFM4MDNfUjJfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19SRUZCVUZfRU4JMHgyMDAwCisjZGVmaW5lIE1DNDRTODAzX1JFRkJVRl9FTl9TCTEzCisjZGVmaW5lIE1DNDRTODAzX1IxCQkweDdDMDAwCisjZGVmaW5lIE1DNDRTODAzX1IxX1MJCTE0CisvKiBSRUdfTUlYRVIgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUjMJCTB4NzAKKyNkZWZpbmUgTUM0NFM4MDNfUjNfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19NVVgzCQkweDgwCisjZGVmaW5lIE1DNDRTODAzX01VWDNfUwkJNworI2RlZmluZSBNQzQ0UzgwM19NVVg0CQkweDEwMAorI2RlZmluZSBNQzQ0UzgwM19NVVg0X1MJCTgKKyNkZWZpbmUgTUM0NFM4MDNfT1NDX1NDUgkweDIwMAorI2RlZmluZSBNQzQ0UzgwM19PU0NfU0NSX1MJOQorI2RlZmluZSBNQzQ0UzgwM19UUklfU1RBVEUJMHg0MDAKKyNkZWZpbmUgTUM0NFM4MDNfVFJJX1NUQVRFX1MJMTAKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0dBSU4JMHg4MDAKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0dBSU5fUwkxMQorI2RlZmluZSBNQzQ0UzgwM19CVUZfSU8JCTB4MTAwMAorI2RlZmluZSBNQzQ0UzgwM19CVUZfSU9fUwkxMgorI2RlZmluZSBNQzQ0UzgwM19NSVhFUl9SRVMJMHhGRTAwMAorI2RlZmluZSBNQzQ0UzgwM19NSVhFUl9SRVNfUwkxMworLyogUkVHX1JFU0VUICovCisjZGVmaW5lIE1DNDRTODAzX1JTCQkweDEwCisjZGVmaW5lIE1DNDRTODAzX1JTX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfU08JCTB4MjAKKyNkZWZpbmUgTUM0NFM4MDNfU09fUwkJNQorLyogUkVHX0xPMSAqLworI2RlZmluZSBNQzQ0UzgwM19MTzEJCTB4RkZGMAorI2RlZmluZSBNQzQ0UzgwM19MTzFfUwkJNAorLyogUkVHX0xPMiAqLworI2RlZmluZSBNQzQ0UzgwM19MTzIJCTB4N0ZGRjAKKyNkZWZpbmUgTUM0NFM4MDNfTE8yX1MJCTQKKy8qIFJFR19DSVJDQURKICovCisjZGVmaW5lIE1DNDRTODAzX0cxCQkweDIwCisjZGVmaW5lIE1DNDRTODAzX0cxX1MJCTUKKyNkZWZpbmUgTUM0NFM4MDNfRzMJCTB4ODAKKyNkZWZpbmUgTUM0NFM4MDNfRzNfUwkJNworI2RlZmluZSBNQzQ0UzgwM19DSVJDQURKX1JFUwkweDMwMAorI2RlZmluZSBNQzQ0UzgwM19DSVJDQURKX1JFU19TCTgKKyNkZWZpbmUgTUM0NFM4MDNfRzYJCTB4NDAwCisjZGVmaW5lIE1DNDRTODAzX0c2X1MJCTEwCisjZGVmaW5lIE1DNDRTODAzX0c3CQkweDgwMAorI2RlZmluZSBNQzQ0UzgwM19HN19TCQkxMQorI2RlZmluZSBNQzQ0UzgwM19TMQkJMHgxMDAwCisjZGVmaW5lIE1DNDRTODAzX1MxX1MJCTEyCisjZGVmaW5lIE1DNDRTODAzX0xQCQkweDdFMDAwCisjZGVmaW5lIE1DNDRTODAzX0xQX1MJCTEzCisjZGVmaW5lIE1DNDRTODAzX0NMUkYJCTB4ODAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQ0xSRl9TCQkxOQorI2RlZmluZSBNQzQ0UzgwM19DTElGCQkweDEwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19DTElGX1MJCTIwCisvKiBSRUdfVEVTVCAqLworLyogUkVHX0RJR1RVTkUgKi8KKyNkZWZpbmUgTUM0NFM4MDNfREEJCTB4RjAKKyNkZWZpbmUgTUM0NFM4MDNfREFfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19YT0QJCTB4MzAwCisjZGVmaW5lIE1DNDRTODAzX1hPRF9TCQk4CisjZGVmaW5lIE1DNDRTODAzX1JTVAkJMHgxMDAwMAorI2RlZmluZSBNQzQ0UzgwM19SU1RfUwkJMTYKKyNkZWZpbmUgTUM0NFM4MDNfTE9fUkVGCQkweDFGRkYwMAorI2RlZmluZSBNQzQ0UzgwM19MT19SRUZfUwk4CisjZGVmaW5lIE1DNDRTODAzX0FUCQkweDIwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVF9TCQkyMQorI2RlZmluZSBNQzQ0UzgwM19NVAkJMHg0MDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTVRfUwkJMjIKKy8qIFJFR19MTkFBR0MgKi8KKyNkZWZpbmUgTUM0NFM4MDNfRwkJMHgzRjAKKyNkZWZpbmUgTUM0NFM4MDNfR19TCQk0CisjZGVmaW5lIE1DNDRTODAzX0FUMQkJMHg0MDAKKyNkZWZpbmUgTUM0NFM4MDNfQVQxX1MJCTEwCisjZGVmaW5lIE1DNDRTODAzX0FUMgkJMHg4MDAKKyNkZWZpbmUgTUM0NFM4MDNfQVQyX1MJCTExCisjZGVmaW5lIE1DNDRTODAzX0hMX0dSX0VOCTB4ODAwMAorI2RlZmluZSBNQzQ0UzgwM19ITF9HUl9FTl9TCTE1CisjZGVmaW5lIE1DNDRTODAzX0FHQ19BTl9ESUcJMHgxMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BR0NfQU5fRElHX1MJMTYKKyNkZWZpbmUgTUM0NFM4MDNfQVRURU5fRU4JMHgyMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVFRFTl9FTl9TCTE3CisjZGVmaW5lIE1DNDRTODAzX0FHQ19SRUFEX0VOCTB4NDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1JFQURfRU5fUwkxOAorI2RlZmluZSBNQzQ0UzgwM19MTkEwCQkweDgwMDAwCisjZGVmaW5lIE1DNDRTODAzX0xOQTBfUwkJMTkKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1NFTAkweDEwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BR0NfU0VMX1MJMjAKKyNkZWZpbmUgTUM0NFM4MDNfQVQwCQkweDIwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVDBfUwkJMjEKKyNkZWZpbmUgTUM0NFM4MDNfQgkJMHhDMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQl9TCQkyMgorLyogUkVHX0RBVEFSRUcgKi8KKyNkZWZpbmUgTUM0NFM4MDNfRAkJMHhGMAorI2RlZmluZSBNQzQ0UzgwM19EX1MJCTQKKy8qIFJFR19SRUdURVNUICovCisvKiBSRUdfVkNPVEVTVCAqLworLyogUkVHX0xOQUdBSU4gKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUZfUFdSCQkweDcwMAorI2RlZmluZSBNQzQ0UzgwM19JRl9QV1JfUwk4CisjZGVmaW5lIE1DNDRTODAzX1JGX1BXUgkJMHgzODAwCisjZGVmaW5lIE1DNDRTODAzX1JGX1BXUl9TCTExCisjZGVmaW5lIE1DNDRTODAzX0xOQV9HQUlOCTB4RkMwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTE5BX0dBSU5fUwkxNAorLyogUkVHX0lEICovCisjZGVmaW5lIE1DNDRTODAzX0lECQkweDNFMDAKKyNkZWZpbmUgTUM0NFM4MDNfSURfUwkJOQorCisvKiBTb21lIG1hY3JvcyB0byByZWFkL3dyaXRlIGZpZWxkcyAqLworCisvKiBGaXJzdCBzaGlmdCwgdGhlbiBtYXNrICovCisjZGVmaW5lIE1DNDRTODAzX1JFR19TTShfdmFsLCBfcmVnKQkJCQkJXAorCSgoKF92YWwpIDw8IF9yZWcjI19TKSAmIChfcmVnKSkKKworLyogRmlyc3QgbWFzaywgdGhlbiBzaGlmdCAqLworI2RlZmluZSBNQzQ0UzgwM19SRUdfTVMoX3ZhbCwgX3JlZykJCQkJCVwKKwkoKChfdmFsKSAmIChfcmVnKSkgPj4gX3JlZyMjX1MpCisKK3N0cnVjdCBtYzQ0czgwM19wcml2IHsKKwlzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmc7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisKKwl1MzIgZnJlcXVlbmN5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKaW5kZXggMTIyMDZkNy4uYzdhYmUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJd2hpbGUgKGkrKyA8IDEwICYmIG10MjA2MF9yZWFkcmVnKHByaXYsIFJFR19NSVNDX1NUQVQsICZiKSA9PSAwICYmIChiICYgKDEgPDwgNikpID09IDApCiAJCW1zbGVlcCgyMCk7CiAKLQlpZiAoaSA8IDEwKSB7CisJaWYgKGkgPD0gMTApIHsKIAkJbXQyMDYwX3JlYWRyZWcocHJpdiwgUkVHX0ZNX0ZSRVEsICZwcml2LT5mbWZyZXEpOyAvLyBub3cgZmluZCBvdXQsIHdoYXQgaXMgZm1yZXEgdXNlZCBmb3IgOikKIAkJZHByaW50aygiY2FsaWJyYXRpb24gd2FzIHN1Y2Nlc3NmdWw6ICVkIiwgKGludClwcml2LT5mbWZyZXEpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jCmluZGV4IDM1Yjc2M2EuLjQ0NjA4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIweHguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMHh4LmMKQEAgLTYsNyArNiw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAibXQyMHh4LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggMzE1MjJkMi4uMDgwM2RhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTQwMDMsMTIgKzQwMDMsMTEgQEAKIAkvKiBDaGFuZ2UgdHVuZXIgZm9yIG5ldyBtb2R1bGF0aW9uIHR5cGUgaWYgcmVxZCAqLwogCWlmIChyZXFfbW9kZSAhPSBzdGF0ZS0+Y3VycmVudF9tb2RlKSB7CiAJCXN3aXRjaCAocmVxX21vZGUpIHsKLQkJY2FzZSBWU0JfODoKLQkJY2FzZSBRQU1fNjQ6Ci0JCWNhc2UgUUFNXzI1NjoKLQkJY2FzZSBRQU1fQVVUTzoKKwkJY2FzZSBNWExfQVRTQzoKKwkJY2FzZSBNWExfUUFNOgogCQkJcmVxX2J3ICA9IE1YTDUwMDVTX0JBTkRXSURUSF82TUhaOwogCQkJYnJlYWs7CisJCWNhc2UgTVhMX0RWQlQ6CiAJCWRlZmF1bHQ6CiAJCQkvKiBBc3N1bWUgRFZCLVQgKi8KIAkJCXN3aXRjaCAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCmluZGV4IDNlYzI4OTQuLjJkMDI2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBteGw1MDA3dC5jIC0gZHJpdmVyIGZvciB0aGUgTWF4TGluZWFyIE14TDUwMDdUIHNpbGljb24gdHVuZXIKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjYsMjIgKzY2LDE3IEBACiAjZGVmaW5lIE1IeiAxMDAwMDAwCiAKIGVudW0gbXhsNTAwN3RfbW9kZSB7Ci0JTXhMX01PREVfT1RBX0RWQlRfQVRTQyAgICAgICAgPSAgICAwLAotCU14TF9NT0RFX09UQV9OVFNDX1BBTF9HSCAgICAgID0gICAgMSwKLQlNeExfTU9ERV9PVEFfUEFMX0lCICAgICAgICAgICA9ICAgIDIsCi0JTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMICAgPSAgICAzLAotCU14TF9NT0RFX09UQV9JU0RCVCAgICAgICAgICAgID0gICAgNCwKLQlNeExfTU9ERV9DQUJMRV9ESUdJVEFMICAgICAgICA9IDB4MTAsCi0JTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0ggICAgPSAweDExLAotCU14TF9NT0RFX0NBQkxFX1BBTF9JQiAgICAgICAgID0gMHgxMiwKLQlNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTCA9IDB4MTMsCi0JTXhMX01PREVfQ0FCTEVfU0NURTQwICAgICAgICAgPSAweDE0LAorCU14TF9NT0RFX0lTREJUICAgICA9ICAgIDAsCisJTXhMX01PREVfRFZCVCAgICAgID0gICAgMSwKKwlNeExfTU9ERV9BVFNDICAgICAgPSAgICAyLAorCU14TF9NT0RFX0NBQkxFICAgICA9IDB4MTAsCiB9OwogCiBlbnVtIG14bDUwMDd0X2NoaXBfdmVyc2lvbiB7CiAJTXhMX1VOS05PV05fSUQgICAgID0gMHgwMCwKIAlNeExfNTAwN19WMV9GMSAgICAgPSAweDExLAogCU14TF81MDA3X1YxX0YyICAgICA9IDB4MTIsCisJTXhMXzUwMDdfVjQgICAgICAgID0gMHgxNCwKIAlNeExfNTAwN19WMl8xMDBfRjEgPSAweDIxLAogCU14TF81MDA3X1YyXzEwMF9GMiA9IDB4MjIsCiAJTXhMXzUwMDdfVjJfMjAwX0YxID0gMHgyMywKQEAgLTk2LDY3ICs5MSw2MSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHJlZ19wYWlyX3QgaW5pdF90YWJbXSA9IHsKLQl7IDB4MGIsIDB4NDQgfSwgLyogWFRBTCAqLwotCXsgMHgwYywgMHg2MCB9LCAvKiBJRiAqLwotCXsgMHgxMCwgMHgwMCB9LCAvKiBNSVNDICovCi0JeyAweDEyLCAweGNhIH0sIC8qIElEQUMgKi8KLQl7IDB4MTYsIDB4OTAgfSwgLyogTU9ERSAqLwotCXsgMHgzMiwgMHgzOCB9LCAvKiBNT0RFIEFuYWxvZy9EaWdpdGFsICovCi0JeyAweGQ4LCAweDE4IH0sIC8qIENMS19PVVRfRU5BQkxFICovCi0JeyAweDJjLCAweDM0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDRkLCAweDQwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdmLCAweDAyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDlhLCAweDUyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDQ4LCAweDVhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDc2LCAweDFhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDZhLCAweDQ4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY0LCAweDI4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY2LCAweGU2IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM1LCAweDBlIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdlLCAweDAxIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDgzLCAweDAwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA0LCAweDBiIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA1LCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCisJeyAweDAyLCAweDA2IH0sCisJeyAweDAzLCAweDQ4IH0sCisJeyAweDA1LCAweDA0IH0sCisJeyAweDA2LCAweDEwIH0sCisJeyAweDJlLCAweDE1IH0sIC8qIE9WRVJSSURFICovCisJeyAweDMwLCAweDEwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ1LCAweDU4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ4LCAweDE5IH0sIC8qIE9WRVJSSURFICovCisJeyAweDUyLCAweDAzIH0sIC8qIE9WRVJSSURFICovCisJeyAweDUzLCAweDQ0IH0sIC8qIE9WRVJSSURFICovCisJeyAweDZhLCAweDRiIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc4LCAweDE4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDdhLCAweDE3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDg1LCAweDA2IH0sIC8qIE9WRVJSSURFICovCisJeyAweDAxLCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCiAJeyAwLCAwIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVnX3BhaXJfdCBpbml0X3RhYl9jYWJsZVtdID0gewotCXsgMHgwYiwgMHg0NCB9LCAvKiBYVEFMICovCi0JeyAweDBjLCAweDYwIH0sIC8qIElGICovCi0JeyAweDEwLCAweDAwIH0sIC8qIE1JU0MgKi8KLQl7IDB4MTIsIDB4Y2EgfSwgLyogSURBQyAqLwotCXsgMHgxNiwgMHg5MCB9LCAvKiBNT0RFICovCi0JeyAweDMyLCAweDM4IH0sIC8qIE1PREUgQS9EICovCi0JeyAweDcxLCAweDNmIH0sIC8qIFRPUDEgKi8KLQl7IDB4NzIsIDB4M2YgfSwgLyogVE9QMiAqLwotCXsgMHg3NCwgMHgzZiB9LCAvKiBUT1AzICovCi0JeyAweGQ4LCAweDE4IH0sIC8qIENMS19PVVRfRU5BQkxFICovCi0JeyAweDJjLCAweDM0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDRkLCAweDQwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdmLCAweDAyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDlhLCAweDUyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDQ4LCAweDVhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDc2LCAweDFhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDZhLCAweDQ4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY0LCAweDI4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY2LCAweGU2IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM1LCAweDBlIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdlLCAweDAxIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA0LCAweDBiIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY4LCAweGI0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA1LCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCisJeyAweDAyLCAweDA2IH0sCisJeyAweDAzLCAweDQ4IH0sCisJeyAweDA1LCAweDA0IH0sCisJeyAweDA2LCAweDEwIH0sCisJeyAweDA5LCAweDNmIH0sCisJeyAweDBhLCAweDNmIH0sCisJeyAweDBiLCAweDNmIH0sCisJeyAweDJlLCAweDE1IH0sIC8qIE9WRVJSSURFICovCisJeyAweDMwLCAweDEwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ1LCAweDU4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ4LCAweDE5IH0sIC8qIE9WRVJSSURFICovCisJeyAweDUyLCAweDAzIH0sIC8qIE9WRVJSSURFICovCisJeyAweDUzLCAweDQ0IH0sIC8qIE9WRVJSSURFICovCisJeyAweDZhLCAweDRiIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc4LCAweDE4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDdhLCAweDE3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDg1LCAweDA2IH0sIC8qIE9WRVJSSURFICovCisJeyAweDAxLCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCiAJeyAwLCAwIH0KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCByZWdfcGFpcl90IHJlZ19wYWlyX3JmdHVuZVtdID0gewotCXsgMHgxMSwgMHgwMCB9LCAvKiBhYm9ydCB0dW5lICovCi0JeyAweDEzLCAweDE1IH0sCi0JeyAweDE0LCAweDQwIH0sCi0JeyAweDE1LCAweDBlIH0sCi0JeyAweDExLCAweDAyIH0sIC8qIHN0YXJ0IHR1bmUgKi8KKwl7IDB4MGYsIDB4MDAgfSwgLyogYWJvcnQgdHVuZSAqLworCXsgMHgwYywgMHgxNSB9LAorCXsgMHgwZCwgMHg0MCB9LAorCXsgMHgwZSwgMHgwZSB9LAorCXsgMHgxZiwgMHg4NyB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMCwgMHgxZiB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMSwgMHg4NyB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMiwgMHgxZiB9LCAvKiBPVkVSUklERSAqLworCXsgMHg4MCwgMHgwMSB9LCAvKiBmcmVxIGRlcGVuZGVudCAqLworCXsgMHgwZiwgMHgwMSB9LCAvKiBzdGFydCB0dW5lICovCiAJeyAwLCAwIH0KIH07CiAKQEAgLTIyNyw2MyArMjE2LDIwIEBACiAJCQkJICAgczMyIGlmX2RpZmZfb3V0X2xldmVsKQogewogCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTXhMX01PREVfT1RBX0RWQlRfQVRTQzoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHgwZiwgMHgwNik7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzUsIDB4ZmYsIDB4MGUpOworCWNhc2UgTXhMX01PREVfQVRTQzoKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNiwgMHgxZiwgMHgxMik7CiAJCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX0lTREJUOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweDBmLCAweDA2KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzNSwgMHhmZiwgMHgxMik7CisJY2FzZSBNeExfTU9ERV9EVkJUOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA2LCAweDFmLCAweDExKTsKIAkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MDApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKKwljYXNlIE14TF9NT0RFX0lTREJUOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA2LCAweDFmLCAweDEwKTsKIAkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfUEFMX0lCOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDEwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDIwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfRElHSVRBTDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCisJY2FzZSBNeExfTU9ERV9DQUJMRToKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHgwOSwgMHhmZiwgMHhjMSk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MGEsIDB4ZmYsCiAJCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDAwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9QQUxfSUI6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MTApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDIwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9TQ1RFNDA6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MzYsIDB4ZmYsIDB4MDgpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDY4LCAweGZmLCAweGJjKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDBiLCAweGZmLCAweDE3KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CkBAIC0zMDIsNDMgKzI0OCw0MyBAQAogCQl2YWwgPSAweDAwOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80XzVfTUhaOgotCQl2YWwgPSAweDIwOworCQl2YWwgPSAweDAyOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80XzU3X01IWjoKLQkJdmFsID0gMHgzMDsKKwkJdmFsID0gMHgwMzsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNV9NSFo6Ci0JCXZhbCA9IDB4NDA7CisJCXZhbCA9IDB4MDQ7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzVfMzhfTUhaOgotCQl2YWwgPSAweDUwOworCQl2YWwgPSAweDA1OwogCQlicmVhazsKIAljYXNlIE14TF9JRl82X01IWjoKLQkJdmFsID0gMHg2MDsKKwkJdmFsID0gMHgwNjsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNl8yOF9NSFo6Ci0JCXZhbCA9IDB4NzA7CisJCXZhbCA9IDB4MDc7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzlfMTkxNV9NSFo6Ci0JCXZhbCA9IDB4ODA7CisJCXZhbCA9IDB4MDg7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzM1XzI1X01IWjoKLQkJdmFsID0gMHg5MDsKKwkJdmFsID0gMHgwOTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfMzZfMTVfTUhaOgotCQl2YWwgPSAweGEwOworCQl2YWwgPSAweDBhOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80NF9NSFo6Ci0JCXZhbCA9IDB4YjA7CisJCXZhbCA9IDB4MGI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW14bF9mYWlsKC1FSU5WQUwpOwogCQlyZXR1cm47CiAJfQotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MGMsIDB4ZjAsIHZhbCk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMiwgMHgwZiwgdmFsKTsKIAogCS8qIHNldCBpbnZlcnRlZCBJRiBvciBub3JtYWwgSUYgKi8KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDBjLCAweDA4LCBpbnZlcnRfaWYgPyAweDA4IDogMHgwMCk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMiwgMHgxMCwgaW52ZXJ0X2lmID8gMHgxMCA6IDB4MDApOwogCiAJcmV0dXJuOwogfQpAQCAtMzQ2LDU2ICsyOTIsNjggQEAKIHN0YXRpYyB2b2lkIG14bDUwMDd0X3NldF94dGFsX2ZyZXFfYml0cyhzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlLAogCQkJCQllbnVtIG14bDUwMDd0X3h0YWxfZnJlcSB4dGFsX2ZyZXEpCiB7Ci0JdTggdmFsOwotCiAJc3dpdGNoICh4dGFsX2ZyZXEpIHsKIAljYXNlIE14TF9YVEFMXzE2X01IWjoKLQkJdmFsID0gMHgwMDsgLyogc2VsZWN0IHh0YWwgZnJlcSAmIFJlZiBGcmVxICovCisJCS8qIHNlbGVjdCB4dGFsIGZyZXEgJiByZWYgZnJlcSAqLworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDAwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMCk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfTUhaOgotCQl2YWwgPSAweDExOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDEwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfMjVfTUhaOgotCQl2YWwgPSAweDIyOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDIwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMik7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfNDhfTUhaOgotCQl2YWwgPSAweDMzOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDMwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMyk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjRfTUhaOgotCQl2YWwgPSAweDQ0OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDQwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNCk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjVfTUhaOgotCQl2YWwgPSAweDU1OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDUwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjVfMTRfTUhaOgotCQl2YWwgPSAweDY2OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDYwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNik7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjdfTUhaOgotCQl2YWwgPSAweDc3OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDcwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNyk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjhfOF9NSFo6Ci0JCXZhbCA9IDB4ODg7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4ODApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA4KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8zMl9NSFo6Ci0JCXZhbCA9IDB4OTk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4OTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA5KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80MF9NSFo6Ci0JCXZhbCA9IDB4YWE7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBhKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80NF9NSFo6Ci0JCXZhbCA9IDB4YmI7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YjApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBiKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80OF9NSFo6Ci0JCXZhbCA9IDB4Y2M7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YzApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBjKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80OV8zODExX01IWjoKLQkJdmFsID0gMHhkZDsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHhkMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlteGxfZmFpbCgtRUlOVkFMKTsKIAkJcmV0dXJuOwogCX0KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDBiLCAweGZmLCB2YWwpOwogCiAJcmV0dXJuOwogfQpAQCAtNDEyLDE2ICszNzAsMTEgQEAKIAlteGw1MDA3dF9zZXRfaWZfZnJlcV9iaXRzKHN0YXRlLCBjZmctPmlmX2ZyZXFfaHosIGNmZy0+aW52ZXJ0X2lmKTsKIAlteGw1MDA3dF9zZXRfeHRhbF9mcmVxX2JpdHMoc3RhdGUsIGNmZy0+eHRhbF9mcmVxX2h6KTsKIAotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTAsIDB4NDAsIGNmZy0+bG9vcF90aHJ1X2VuYWJsZSA8PCA2KTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA0LCAweDAxLCBjZmctPmxvb3BfdGhydV9lbmFibGUpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4MDgsIGNmZy0+Y2xrX291dF9lbmFibGUgPDwgMyk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHgwNywgY2ZnLT5jbGtfb3V0X2FtcCk7CiAKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweGQ4LCAweDA4LCBjZmctPmNsa19vdXRfZW5hYmxlIDw8IDMpOwotCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxMCwgMHgwNywgY2ZnLT5jbGtfb3V0X2FtcCk7Ci0KLQkvKiBzZXQgSURBQyB0byBhdXRvbWF0aWMgbW9kZSBjb250cm9sIGJ5IEFHQyAqLwotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTIsIDB4ODAsIDB4MDApOwotCi0JaWYgKG1vZGUgPj0gTXhMX01PREVfQ0FCTEVfRElHSVRBTCkgeworCWlmIChtb2RlID49IE14TF9NT0RFX0NBQkxFKSB7CiAJCWNvcHlfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCBzdGF0ZS0+dGFiX2luaXRfY2FibGUpOwogCQlyZXR1cm4gc3RhdGUtPnRhYl9pbml0X2NhYmxlOwogCX0gZWxzZQpAQCAtNDQ3LDcgKzQwMCw3IEBACiAJCQkgICAgICogYW5kIERJR19NT0RFSU5ERVhfQ1NGICovCiAJCWJyZWFrOwogCWNhc2UgTXhMX0JXXzdNSHo6Ci0JCXZhbCA9IDB4MjE7CisJCXZhbCA9IDB4MmE7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0JXXzhNSHo6CiAJCXZhbCA9IDB4M2Y7CkBAIC00NTYsNyArNDA5LDcgQEAKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDEzLCAweDNmLCB2YWwpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgwYywgMHgzZiwgdmFsKTsKIAogCXJldHVybjsKIH0KQEAgLTQ5Myw4ICs0NDYsMTEgQEAKIAlpZiAodGVtcCA+IDc4MTIpCiAJCWRpZ19yZl9mcmVxKys7CiAKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MTQsIDB4ZmYsICh1OClkaWdfcmZfZnJlcSk7Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDE1LCAweGZmLCAodTgpKGRpZ19yZl9mcmVxID4+IDgpKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MGQsIDB4ZmYsICh1OCkgZGlnX3JmX2ZyZXEpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgwZSwgMHhmZiwgKHU4KSAoZGlnX3JmX2ZyZXEgPj4gOCkpOworCisJaWYgKHJmX2ZyZXEgPj0gMzMzMDAwMDAwKQorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4ODAsIDB4NDAsIDB4NDApOwogCiAJcmV0dXJuIHN0YXRlLT50YWJfcmZ0dW5lOwogfQpAQCAtNTUxLDkgKzUwNywxMCBAQAogc3RhdGljIGludCBteGw1MDA3dF9zb2Z0X3Jlc2V0KHN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUpCiB7CiAJdTggZCA9IDB4ZmY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5pMmNfcHJvcHMuYWRkciwgLmZsYWdzID0gMCwKLQkJCSAgICAgICAuYnVmID0gJmQsIC5sZW4gPSAxIH07Ci0KKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmkyY19wcm9wcy5hZGRyLCAuZmxhZ3MgPSAwLAorCQkuYnVmID0gJmQsIC5sZW4gPSAxCisJfTsKIAlpbnQgcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfcHJvcHMuYWRhcCwgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpIHsKQEAgLTU4MCw5ICs1MzcsNiBAQAogCWlmIChteGxfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CiAJbWRlbGF5KDEpOwotCi0JcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDJjLCAweDM1KTsKLQlteGxfZmFpbChyZXQpOwogZmFpbDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjE1LDcgKzU2OSw3IEBACiAJKnJmX2xvY2tlZCA9IDA7CiAJKnJlZl9sb2NrZWQgPSAwOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4Y2YsICZkKTsKKwlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhkOCwgJmQpOwogCWlmIChteGxfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTYyOCwzNyArNTgyLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBteGw1MDA3dF9jaGVja19yZl9pbnB1dF9wb3dlcihzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlLAotCQkJCQkgczMyICpyZl9pbnB1dF9sZXZlbCkKLXsKLQl1OCBkMSwgZDI7Ci0JaW50IHJldDsKLQotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGI3LCAmZDEpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhiZiwgJmQyKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JZDIgPSBkMiA+PiA0OwotCWlmIChkMiA+IDcpCi0JCWQyICs9IDB4ZjA7Ci0KLQkqcmZfaW5wdXRfbGV2ZWwgPSAoczMyKShkMSArIGQyIC0gMTEzKTsKLWZhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IG14bDUwMDd0X2dldF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqc3RhdHVzKQogewogCXN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKLQlpbnQgcmZfbG9ja2VkLCByZWZfbG9ja2VkOwotCXMzMiByZl9pbnB1dF9sZXZlbCA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmZfbG9ja2VkLCByZWZfbG9ja2VkLCByZXQ7CisKKwkqc3RhdHVzID0gMDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CkBAIC02NjksMTAgKzYwMCw4IEBACiAJbXhsX2RlYnVnKCIlcyVzIiwgcmZfbG9ja2VkID8gInJmIGxvY2tlZCAiIDogIiIsCiAJCSAgcmVmX2xvY2tlZCA/ICJyZWYgbG9ja2VkIiA6ICIiKTsKIAotCXJldCA9IG14bDUwMDd0X2NoZWNrX3JmX2lucHV0X3Bvd2VyKHN0YXRlLCAmcmZfaW5wdXRfbGV2ZWwpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0JbXhsX2RlYnVnKCJyZiBpbnB1dCBwb3dlcjogJWQiLCByZl9pbnB1dF9sZXZlbCk7CisJaWYgKChyZl9sb2NrZWQpIHx8IChyZWZfbG9ja2VkKSkKKwkJKnN0YXR1cyB8PSBUVU5FUl9TVEFUVVNfTE9DS0VEOwogZmFpbDoKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwpAQCAtNjk1LDExICs2MjQsMTEgQEAKIAkJc3dpdGNoIChwYXJhbXMtPnUudnNiLm1vZHVsYXRpb24pIHsKIAkJY2FzZSBWU0JfODoKIAkJY2FzZSBWU0JfMTY6Ci0JCQltb2RlID0gTXhMX01PREVfT1RBX0RWQlRfQVRTQzsKKwkJCW1vZGUgPSBNeExfTU9ERV9BVFNDOwogCQkJYnJlYWs7CiAJCWNhc2UgUUFNXzY0OgogCQljYXNlIFFBTV8yNTY6Ci0JCQltb2RlID0gTXhMX01PREVfQ0FCTEVfRElHSVRBTDsKKwkJCW1vZGUgPSBNeExfTU9ERV9DQUJMRTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbXhsX2VycigibW9kdWxhdGlvbiBub3Qgc2V0ISIpOwpAQCAtNzIxLDcgKzY1MCw3IEBACiAJCQlteGxfZXJyKCJiYW5kd2lkdGggbm90IHNldCEiKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1vZGUgPSBNeExfTU9ERV9PVEFfRFZCVF9BVFNDOworCQltb2RlID0gTXhMX01PREVfRFZCVDsKIAl9IGVsc2UgewogCQlteGxfZXJyKCJtb2R1bGF0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCEiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTIsOTYgKzY4MSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXhsNTAwN3Rfc2V0X2FuYWxvZ19wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCQkJICAgICAgc3RydWN0IGFuYWxvZ19wYXJhbWV0ZXJzICpwYXJhbXMpCi17Ci0Jc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwotCWVudW0gbXhsNTAwN3RfYndfbWh6IGJ3ID0gMDsgLyogRklYTUUgKi8KLQllbnVtIG14bDUwMDd0X21vZGUgY2JsX21vZGU7Ci0JZW51bSBteGw1MDA3dF9tb2RlIG90YV9tb2RlOwotCWNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgcmV0OwotCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKLQotI2RlZmluZSBjYWJsZSAxCi0JaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g7Ci0JCW1vZGVfbmFtZSA9ICJNTiI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX0IpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfSUI7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9JQjsKLQkJbW9kZV9uYW1lID0gIkIiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9HSCkgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDsKLQkJbW9kZV9uYW1lID0gIkdIIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfSUI7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9JQjsKLQkJbW9kZV9uYW1lID0gIkkiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9ESykgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkRLIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkwiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkwnIjsKLQl9IGVsc2UgewotCQltb2RlX25hbWUgPSAieHgiOwotCQkvKiBGSVhNRSAqLwotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDsKLQl9Ci0JbXhsX2RlYnVnKCJzZXR0aW5nIG14bDUwMDcgdG8gc3lzdGVtICVzIiwgbW9kZV9uYW1lKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bG9jayk7Ci0KLQlyZXQgPSBteGw1MDA3dF90dW5lcl9pbml0KHN0YXRlLCBjYWJsZSA/IGNibF9tb2RlIDogb3RhX21vZGUpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF90dW5lcl9yZl90dW5lKHN0YXRlLCBmcmVxLCBidyk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXN0YXRlLT5mcmVxdWVuY3kgPSBmcmVxOwotCXN0YXRlLT5iYW5kd2lkdGggPSAwOwotZmFpbDoKLQltdXRleF91bmxvY2soJnN0YXRlLT5sb2NrKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgbXhsNTAwN3RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJldDsKLQl1OCBkOwogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweDA1LCAmZCk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwNSwgZCB8IDB4MDEpOworCS8qIHdha2UgZnJvbSBzdGFuZGJ5ICovCisJcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAweDAxKTsKIAlteGxfZmFpbChyZXQpOwotZmFpbDoKKwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKQEAgLTg1MiwxOCArNzA1LDE2IEBACiB7CiAJc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCWludCByZXQ7Ci0JdTggZDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHgwNSwgJmQpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MDUsIGQgJiB+MHgwMSk7CisJLyogZW50ZXIgc3RhbmRieSBtb2RlICovCisJcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAweDAwKTsKIAlteGxfZmFpbChyZXQpOwotZmFpbDoKKwlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsIDB4MDApOworCW14bF9mYWlsKHJldCk7CisKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCkBAIC05MTEsNyArNzYyLDYgQEAKIAkuaW5pdCAgICAgICAgICAgICAgPSBteGw1MDA3dF9pbml0LAogCS5zbGVlcCAgICAgICAgICAgICA9IG14bDUwMDd0X3NsZWVwLAogCS5zZXRfcGFyYW1zICAgICAgICA9IG14bDUwMDd0X3NldF9wYXJhbXMsCi0JLnNldF9hbmFsb2dfcGFyYW1zID0gbXhsNTAwN3Rfc2V0X2FuYWxvZ19wYXJhbXMsCiAJLmdldF9zdGF0dXMgICAgICAgID0gbXhsNTAwN3RfZ2V0X3N0YXR1cywKIAkuZ2V0X2ZyZXF1ZW5jeSAgICAgPSBteGw1MDA3dF9nZXRfZnJlcXVlbmN5LAogCS5nZXRfYmFuZHdpZHRoICAgICA9IG14bDUwMDd0X2dldF9iYW5kd2lkdGgsCkBAIC05MjQsNyArNzc0LDcgQEAKIAlpbnQgcmV0OwogCXU4IGlkOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4ZDMsICZpZCk7CisJcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4ZDksICZpZCk7CiAJaWYgKG14bF9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIApAQCAtOTQ3LDggKzc5NywxMiBAQAogCWNhc2UgTXhMXzUwMDdfVjJfMjAwX0YyOgogCQluYW1lID0gIk14TDUwMDcudjIuMjAwLmYyIjsKIAkJYnJlYWs7CisJY2FzZSBNeExfNTAwN19WNDoKKwkJbmFtZSA9ICJNeEw1MDA3VC52NCI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW5hbWUgPSAiTXhMNTAwN1QiOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5rbm93biByZXYgKCUwMngpXG4iLCBfX2Z1bmNfXywgaWQpOwogCQlpZCA9IE14TF9VTktOT1dOX0lEOwogCX0KIAlzdGF0ZS0+Y2hpcF9pZCA9IGlkOwpAQCAtOTc1LDcgKzgyOSw3IEBACiAJbXV0ZXhfbG9jaygmbXhsNTAwN3RfbGlzdF9tdXRleCk7CiAJaW5zdGFuY2UgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUsIHN0YXRlLAogCQkJCQkgICAgICBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCwKLQkJCQkJICAgICAgaTJjLCBhZGRyLCAibXhsNTAwNyIpOworCQkJCQkgICAgICBpMmMsIGFkZHIsICJteGw1MDA3dCIpOwogCXN3aXRjaCAoaW5zdGFuY2UpIHsKIAljYXNlIDA6CiAJCWdvdG8gZmFpbDsKQEAgLTEwMTgsNyArODcyLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTWF4TGluZWFyIE14TDUwMDdUIFNpbGljb24gSUMgdHVuZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjIiKTsKIAogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IDZmYjViNDUuLmZjNzZjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTQ5MCw5ICs0OTAsOSBAQAogCQl0ZGFfZGJnKCJzbSA9ICVkLCBzbV9sdCA9ICVkLCBzbV94dCA9ICVkXG4iLCBzbSwgc21fbHQsIHNtX3h0KTsKIAogCXJlZ3NbUl9FUDNdICAmPSB+MHhlMDsgLyogY2xlYXIgc20sIHNtX2x0LCBzbV94dCAqLwotCXJlZ3NbUl9FUDNdICB8PSBzbSAgICA/ICgxIDw8IDcpIDogMCB8Ci0JCQlzbV9sdCA/ICgxIDw8IDYpIDogMCB8Ci0JCQlzbV94dCA/ICgxIDw8IDUpIDogMDsKKwlyZWdzW1JfRVAzXSAgfD0gKHNtICAgID8gKDEgPDwgNykgOiAwKSB8CisJCQkoc21fbHQgPyAoMSA8PCA2KSA6IDApIHwKKwkJCShzbV94dCA/ICgxIDw8IDUpIDogMCk7CiAKIAlyZXR1cm4gdGRhMTgyNzFfd3JpdGVfcmVncyhmZSwgUl9FUDMsIDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwppbmRleCAxYjQ4YjVkLi5iMTA5MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwpAQCAtODE4LDYgKzgxOCwzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHRkYTE4MjcxX2FnYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwcml2LT5jb25maWcpIHsKKwljYXNlIDA6CisJCS8qIG5vIExOQSAqLworCQl0ZGFfZGJnKCJubyBhZ2MgY29uZmlndXJhdGlvbiBwcm92aWRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogc3dpdGNoIHdpdGggR1BJTyBvZiBzYWE3MTN4ICovCisJCXRkYV9kYmcoImludm9raW5nIGNhbGxiYWNrXG4iKTsKKwkJaWYgKGZlLT5jYWxsYmFjaykKKwkJCXJldCA9IGZlLT5jYWxsYmFjayhwcml2LT5pMmNfcHJvcHMuYWRhcC0+YWxnb19kYXRhLAorCQkJCQkgICBEVkJfRlJPTlRFTkRfQ09NUE9ORU5UX1RVTkVSLAorCQkJCQkgICBUREExODI3MV9DQUxMQkFDS19DTURfQUdDX0VOQUJMRSwKKwkJCQkJICAgcHJpdi0+bW9kZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwljYXNlIDI6CisJZGVmYXVsdDoKKwkJLyogbi9hIC0gY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KKwkJdGRhX2VycigidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbjogJWRcbiIsIHByaXYtPmNvbmZpZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHRkYTE4MjcxX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXBfaXRlbSAqbWFwLCB1MzIgZnJlcSwgdTMyIGJ3KQogewpAQCAtODI3LDYgKzg1OSwxMCBAQAogCXRkYV9kYmcoImZyZXEgPSAlZCwgaWZjID0gJWQsIGJ3ID0gJWQsIGFnY19tb2RlID0gJWQsIHN0ZCA9ICVkXG4iLAogCQlmcmVxLCBtYXAtPmlmX2ZyZXEsIGJ3LCBtYXAtPmFnY19tb2RlLCBtYXAtPnN0ZCk7CiAKKwlyZXQgPSB0ZGExODI3MV9hZ2MoZmUpOworCWlmICh0ZGFfZmFpbChyZXQpKQorCQl0ZGFfd2FybigiZmFpbGVkIHRvIGNvbmZpZ3VyZSBhZ2NcbiIpOworCiAJcmV0ID0gdGRhMTgyNzFfaW5pdChmZSk7CiAJaWYgKHRkYV9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKQEAgLTExNTksNiArMTE5NSw3IEBACiAJCS8qIG5ldyB0dW5lciBpbnN0YW5jZSAqLwogCQlwcml2LT5nYXRlID0gKGNmZykgPyBjZmctPmdhdGUgOiBUREExODI3MV9HQVRFX0FVVE87CiAJCXByaXYtPnJvbGUgPSAoY2ZnKSA/IGNmZy0+cm9sZSA6IFREQTE4MjcxX01BU1RFUjsKKwkJcHJpdi0+Y29uZmlnID0gKGNmZykgPyBjZmctPmNvbmZpZyA6IDA7CiAJCXByaXYtPmNhbF9pbml0aWFsaXplZCA9IGZhbHNlOwogCQltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKaW5kZXggODFhNzM5My4uNzRiZWIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCkBAIC05MSwxMSArOTEsNiBAQAogCVREQTE4MjcxX0NBTF9QTEwsCiB9OwogCi1lbnVtIHRkYTE4MjcxX21vZGUgewotCVREQTE4MjcxX0FOQUxPRywKLQlUREExODI3MV9ESUdJVEFMLAotfTsKLQogc3RydWN0IHRkYTE4MjcxX21hcF9sYXlvdXQ7CiAKIGVudW0gdGRhMTgyNzFfdmVyIHsKQEAgLTExNCw2ICsxMDksNyBAQAogCWVudW0gdGRhMTgyNzFfaTJjX2dhdGUgZ2F0ZTsKIAllbnVtIHRkYTE4MjcxX3ZlciBpZDsKIAorCXVuc2lnbmVkIGludCBjb25maWc7IC8qIGludGVyZmFjZSB0byBzYWE3MTN4IC8gdGRhODI5eCAqLwogCXVuc2lnbmVkIGludCB0bV9yZmNhbDsKIAl1bnNpZ25lZCBpbnQgY2FsX2luaXRpYWxpemVkOjE7CiAJdW5zaWduZWQgaW50IHNtYWxsX2kyYzoxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAppbmRleCA3ZGI5ODMxLi41M2E5ODkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaApAQCAtNzksNiArNzksMTYgQEAKIAogCS8qIHNvbWUgaTJjIHByb3ZpZGVycyBjYW50IHdyaXRlIGFsbCAzOSByZWdpc3RlcnMgYXQgb25jZSAqLwogCXVuc2lnbmVkIGludCBzbWFsbF9pMmM6MTsKKworCS8qIGludGVyZmFjZSB0byBzYWE3MTN4IC8gdGRhODI5eCAqLworCXVuc2lnbmVkIGludCBjb25maWc7Cit9OworCisjZGVmaW5lIFREQTE4MjcxX0NBTExCQUNLX0NNRF9BR0NfRU5BQkxFIDAKKworZW51bSB0ZGExODI3MV9tb2RlIHsKKwlUREExODI3MV9BTkFMT0cgPSAwLAorCVREQTE4MjcxX0RJR0lUQUwsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEpIHx8IChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCmluZGV4IGY0ZDkzMWYuLjM2YTdiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYwpAQCAtMTMyLDExICsxMzIsMzEgQEAKIAl7IC5sb21heCA9ICAgICAgICAgMCwgLnNwZCA9IDAsIC5icyA9IDAsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0KIH07CiAKK3N0YXRpYyBpbnQgdHVuZXJfdHJhbnNmZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgIHN0cnVjdCBpMmNfbXNnICptc2csCisJCQkgIGNvbnN0IGludCBzaXplKQoreworCWludCByYzsKKwlzdHJ1Y3QgdGRhODI3eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCBtc2csIHNpemUpOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlpZiAocmMgPj0gMCAmJiByYyAhPSBzaXplKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCB0ZGE4Mjd4b19zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAl1OCBidWZbMTRdOworCWludCByYzsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKQEAgLTE4MywyNyArMjAzLDI5IEBACiAJYnVmWzEzXSA9IDB4NDA7CiAKIAltc2cubGVuID0gMTQ7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7Ci0JCXByaW50aygiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcHJpdi0+aTJjX2FkZHIgPDwgMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKKwogCW1zbGVlcCg1MDApOwogCS8qIGNvcnJlY3QgQ1AgdmFsdWUgKi8KIAlidWZbMF0gPSAweDMwOwogCWJ1ZlsxXSA9IDB4NTAgKyB0ZGE4Mjd4X3RhYmxlW2ldLmNwOwogCW1zZy5sZW4gPSAyOwogCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAJcHJpdi0+YmFuZHdpZHRoID0gKGZlLT5vcHMuaW5mby50eXBlID09IEZFX09GRE0pID8gcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoIDogMDsKIAogCXJldHVybiAwOworCitlcnI6CisJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IHdyaXRlIHRvIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKKwkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCB0ZGE4Mjd4b19zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKQEAgLTIxNCw5ICsyMzYsNyBAQAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCiAJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCWlmIChwcml2LT5jZmcgJiYgcHJpdi0+Y2ZnLT5zbGVlcCkKIAkJcHJpdi0+Y2ZnLT5zbGVlcChmZSk7CkBAIC0yNjYsNDQgKzI4Niw0NCBAQAogCiAJbXNnLmJ1ZiA9IHR1bmVyX3JlZzsKIAltc2cubGVuID0gODsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zZy5idWYgPSByZWcyOwogCW1zZy5sZW4gPSAyOwogCXJlZzJbMF0gPSAweDgwOwogCXJlZzJbMV0gPSAwOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcmVnMlswXSA9IDB4NjA7CiAJcmVnMlsxXSA9IDB4YmY7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgMHg4MDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCgxKTsKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgNDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCgxKTsKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNsZWVwKDU1MCk7CiAJcmVnMlswXSA9IDB4MzA7CiAJcmVnMlsxXSA9ICh0dW5lcl9yZWdbNF0gJiAweGZjKSArIHRkYTgyN3hfdGFibGVbaV0uY3A7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHg2MDsKIAlyZWcyWzFdID0gMHgzZjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXJlZzJbMF0gPSAweDgwOwogCXJlZzJbMV0gPSAweDA4OyAgIC8qIFZzeW5jIGVuICovCi0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIApAQCAtMzE3LDcgKzMzNyw3IEBACiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgIC5idWYgPSBkYXRhLCAubGVuID0gMn07CiAKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMzEsNyArMzUxLDcgQEAKIAl1OCAgZ2MzOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB0ZGE4Mjd4YV9kYXRhIHRkYTgyN3hhX2R2YnRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9kdmJ0W10gPSB7CiAJeyAubG9tYXggPSAgNTY4NzUwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAogCXsgLmxvbWF4ID0gIDY3MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKIAl7IC5sb21heCA9ICA4MTI1MDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCkBAIC0zNjEsNiArMzgxLDM2IEBACiAJeyAubG9tYXggPSAgICAgICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9CiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfZHZiY1tdID0geworCXsgLmxvbWF4ID0gIDUwMTI1MDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSA0LCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA1ODUwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gNCwgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAgNjkyNTAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gIDgzNjI1MDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA5NzUwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAxMDAyNTAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTE3MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDEzODUwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxNjcyNTAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTg3MDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDIwMDUwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAyMzQwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMiwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gMjc3MDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDIsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDMyNTAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAzMzQ1MDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMywgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gNDAxMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDQ2ODAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA1MzUwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNTU0MDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDYzODAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA2NjkwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAyLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNzIwMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDgwMjAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA4MzUwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gODg1MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDkxMTAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAgICAgICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9Cit9OworCiBzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfYW5hbG9nW10gPSB7CiAJeyAubG9tYXggPSAgNTY4NzUwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LAogCXsgLmxvbWF4ID0gIDY3MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAzfSwKQEAgLTM5OCwxMyArNDQ4LDggQEAKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKIAogCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlpZiAocHJpdi0+Y2ZnICYmIHByaXYtPmNmZy0+c2xlZXApCiAJCXByaXYtPmNmZy0+c2xlZXAoZmUpOwpAQCAtNDU1LDcgKzUwMCw3IEBACiAJCWJ1ZlsxXSA9IGhpZ2ggPyAwIDogMTsKIAkJaWYgKHByaXYtPmNmZy0+Y29uZmlnID09IDIpCiAJCQlidWZbMV0gPSBoaWdoID8gMSA6IDA7Ci0JCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOiAvKiBzd2l0Y2ggd2l0aCBHUElPIG9mIHNhYTcxM3ggKi8KIAkJaWYgKGZlLT5jYWxsYmFjaykKQEAgLTQ2OSwxMiArNTE0LDEzIEBACiAJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IHRkYTgyN3hfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXN0cnVjdCB0ZGE4Mjd4YV9kYXRhICpmcmVxdWVuY3lfbWFwID0gdGRhODI3eGFfZHZidDsKIAl1OCBidWZbMTFdOwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCi0JaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXE7CisJaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXEsIHJjOwogCXUzMiBOOwogCiAJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7CkBAIC00OTUsNTYgKzU0MSw1OCBAQAogCX0KIAl0dW5lcl9mcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKyBpZl9mcmVxOwogCisJaWYgKGZlLT5vcHMuaW5mby50eXBlID09IEZFX1FBTSkgeworCQlkcHJpbnRrKCIlcyBzZWxlY3QgdGRhODI3eGFfZHZiY1xuIiwgX19mdW5jX18pOworCQlmcmVxdWVuY3lfbWFwID0gdGRhODI3eGFfZHZiYzsKKwl9CisKIAlpID0gMDsKLQl3aGlsZSAodGRhODI3eGFfZHZidFtpXS5sb21heCA8IHR1bmVyX2ZyZXEpIHsKLQkJaWYodGRhODI3eGFfZHZidFtpICsgMV0ubG9tYXggPT0gMCkKKwl3aGlsZSAoZnJlcXVlbmN5X21hcFtpXS5sb21heCA8IHR1bmVyX2ZyZXEpIHsKKwkJaWYgKGZyZXF1ZW5jeV9tYXBbaSArIDFdLmxvbWF4ID09IDApCiAJCQlicmVhazsKIAkJaSsrOwogCX0KIAotCU4gPSAoKHR1bmVyX2ZyZXEgKyAzMTI1MCkgLyA2MjUwMCkgPDwgdGRhODI3eGFfZHZidFtpXS5zcGQ7CisJTiA9ICgodHVuZXJfZnJlcSArIDMxMjUwKSAvIDYyNTAwKSA8PCBmcmVxdWVuY3lfbWFwW2ldLnNwZDsKIAlidWZbMF0gPSAwOyAgICAgICAgICAgIC8vIHN1YmFkZHJlc3MKIAlidWZbMV0gPSBOID4+IDg7CiAJYnVmWzJdID0gTiAmIDB4ZmY7CiAJYnVmWzNdID0gMDsKIAlidWZbNF0gPSAweDE2OwotCWJ1Zls1XSA9ICh0ZGE4Mjd4YV9kdmJ0W2ldLnNwZCA8PCA1KSArICh0ZGE4Mjd4YV9kdmJ0W2ldLnN2Y28gPDwgMykgKwotCQkJdGRhODI3eGFfZHZidFtpXS5zYnM7Ci0JYnVmWzZdID0gMHg0YiArICh0ZGE4Mjd4YV9kdmJ0W2ldLmdjMyA8PCA0KTsKKwlidWZbNV0gPSAoZnJlcXVlbmN5X21hcFtpXS5zcGQgPDwgNSkgKyAoZnJlcXVlbmN5X21hcFtpXS5zdmNvIDw8IDMpICsKKwkJCWZyZXF1ZW5jeV9tYXBbaV0uc2JzOworCWJ1Zls2XSA9IDB4NGIgKyAoZnJlcXVlbmN5X21hcFtpXS5nYzMgPDwgNCk7CiAJYnVmWzddID0gMHgxYzsKIAlidWZbOF0gPSAweDA2OwogCWJ1Zls5XSA9IDB4MjQ7CiAJYnVmWzEwXSA9IDB4MDA7CiAJbXNnLmxlbiA9IDExOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgewotCQlwcmludGsoIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAotCQkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CisKIAlidWZbMF0gPSAweDkwOwogCWJ1ZlsxXSA9IDB4ZmY7CiAJYnVmWzJdID0gMHg2MDsKIAlidWZbM10gPSAweDAwOwogCWJ1Zls0XSA9IDB4NTk7ICAvLyBscHNlbCwgZm9yIDZNSHogKyAyCiAJbXNnLmxlbiA9IDU7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJYnVmWzBdID0gMHhhMDsKIAlidWZbMV0gPSAweDQwOwogCW1zZy5sZW4gPSAyOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCW1zbGVlcCgxMSk7CiAJbXNnLmZsYWdzID0gSTJDX01fUkQ7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCW1zZy5mbGFncyA9IDA7CiAKIAlidWZbMV0gPj49IDQ7CkBAIC01NTMsNDkgKzYwMSw1NSBAQAogCQl0ZGE4Mjd4YV9sbmFfZ2FpbihmZSwgMCwgTlVMTCk7CiAJCWJ1ZlswXSA9IDB4NjA7CiAJCWJ1ZlsxXSA9IDB4MGM7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCQlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZXJyOwogCX0KIAogCWJ1ZlswXSA9IDB4YzA7CiAJYnVmWzFdID0gMHg5OTsgICAgLy8gbHBzZWwsIGZvciA2TUh6ICsgMgotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCWJ1ZlswXSA9IDB4NjA7CiAJYnVmWzFdID0gMHgzYzsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAkvKiBjb3JyZWN0IENQIHZhbHVlICovCiAJYnVmWzBdID0gMHgzMDsKLQlidWZbMV0gPSAweDEwICsgdGRhODI3eGFfZHZidFtpXS5zY3I7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSA9IDB4MTAgKyBmcmVxdWVuY3lfbWFwW2ldLnNjcjsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCW1zbGVlcCgxNjMpOwogCWJ1ZlswXSA9IDB4YzA7CiAJYnVmWzFdID0gMHgzOTsgIC8vIGxwc2VsLCBmb3IgNk1IeiArIDIKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAltc2xlZXAoMyk7CiAJLyogZnJlZXplIEFHQzEgKi8KIAlidWZbMF0gPSAweDUwOwotCWJ1ZlsxXSA9IDB4NGYgKyAodGRhODI3eGFfZHZidFtpXS5nYzMgPDwgNCk7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSA9IDB4NGYgKyAoZnJlcXVlbmN5X21hcFtpXS5nYzMgPDwgNCk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOwogCisKIAlyZXR1cm4gMDsKKworZXJyOgorCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCisJICAgICAgIF9fZnVuY19fLCBwcml2LT5pMmNfYWRkciA8PCAxKTsKKwlyZXR1cm4gcmM7CiB9CiAKIApAQCAtNjQzLDcgKzY5Nyw3IEBACiAJdHVuZXJfcmVnWzldID0gMHgyMDsKIAl0dW5lcl9yZWdbMTBdID0gMHgwMDsKIAltc2cubGVuID0gMTE7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweDkwOwogCXR1bmVyX3JlZ1sxXSA9IDB4ZmY7CkBAIC02NTEsMTkgKzcwNSwxOSBAQAogCXR1bmVyX3JlZ1szXSA9IDA7CiAJdHVuZXJfcmVnWzRdID0gMHg5OSArIChwcml2LT5scHNlbCA8PCAxKTsKIAltc2cubGVuID0gNTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YTA7CiAJdHVuZXJfcmVnWzFdID0gMHhjMDsKIAltc2cubGVuID0gMjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4MzA7CiAJdHVuZXJfcmVnWzFdID0gMHgxMCArIHRkYTgyN3hhX2FuYWxvZ1tpXS5zY3I7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2cuZmxhZ3MgPSBJMkNfTV9SRDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAltc2cuZmxhZ3MgPSAwOwogCXR1bmVyX3JlZ1sxXSA+Pj0gNDsKIAlkcHJpbnRrKCJBR0MyIGdhaW4gaXM6ICVkXG4iLCB0dW5lcl9yZWdbMV0pOwpAQCAtNjczLDI0ICs3MjcsMjQgQEAKIAltc2xlZXAoMTAwKTsKIAl0dW5lcl9yZWdbMF0gPSAweDYwOwogCXR1bmVyX3JlZ1sxXSA9IDB4M2M7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2xlZXAoMTYzKTsKIAl0dW5lcl9yZWdbMF0gPSAweDUwOwogCXR1bmVyX3JlZ1sxXSA9IDB4OGYgKyAodGRhODI3eGFfYW5hbG9nW2ldLmdjMyA8PCA0KTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4ODA7CiAJdHVuZXJfcmVnWzFdID0gMHgyODsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YjA7CiAJdHVuZXJfcmVnWzFdID0gMHgwMTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YzA7CiAJdHVuZXJfcmVnWzFdID0gMHgxOSArIChwcml2LT5scHNlbCA8PCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OwogCkBAIC03MDMsNyArNzU3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHsweDgwLCAweDJjfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgIC5idWYgPSBkYXRhLCAubGVuID0gMn07Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzkyLDE2ICs4NDYsMTkgQEAKIH07CiAKIHN0YXRpYyBpbnQgdGRhODI3eF9wcm9iZV92ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewl1OCBkYXRhOworeworCXU4IGRhdGE7CisJaW50IHJjOwogCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELAogCQkJICAgICAgIC5idWYgPSAmZGF0YSwgLmxlbiA9IDEgfTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKKworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCisJaWYgKHJjIDwgMCkgewogCQlwcmludGsoIiVzOiBjb3VsZCBub3QgcmVhZCBmcm9tIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBtc2cuYWRkciA8PCAxKTsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiByYzsKIAl9CiAJaWYgKChkYXRhICYgMHgzYykgPT0gMCkgewogCQlkcHJpbnRrKCJ0ZGE4Mjd4IHR1bmVyIGZvdW5kXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCmluZGV4IDRiODY2MmUuLjA2NGQxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgInRkYTgyOTAuaCIKICNpbmNsdWRlICJ0ZGE4Mjd4LmgiCkBAIC01NjYsOCArNTY2LDExIEBACiAJdTggZGF0YTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmRhdGEsIC5sZW4gPSAxIH07CiAKLQlpZiAoTlVMTCA9PSBhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKQorCWlmICghYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybCkgeworCQlwcmludGsoS0VSTl9FUlIgInRkYTgyOTA6IG5vIGdhdGUgY29udHJvbCB3ZXJlIHByb3ZpZGVkIVxuIik7CisKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybChmZSwgMSk7CiAKQEAgLTYxNSwxMSArNjE4LDEzIEBACiAKIAlpZiAocmV0ICE9IDEpIHsKIAkJdHVuZXJfd2FybigidHVuZXIgYWNjZXNzIGZhaWxlZCFcbiIpOworCQlhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCiAJaWYgKChkYXRhID09IDB4ODMpIHx8IChkYXRhID09IDB4ODQpKSB7CiAJCXByaXYtPnZlciB8PSBUREExODI3MTsKKwkJdGRhODI5eF90ZGExODI3MV9jb25maWcuY29uZmlnID0gcHJpdi0+Y2ZnLmNvbmZpZzsKIAkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlLCBwcml2LT50ZGE4Mjd4X2FkZHIsCiAJCQkgICBwcml2LT5pMmNfcHJvcHMuYWRhcCwgJnRkYTgyOXhfdGRhMTgyNzFfY29uZmlnKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzYxLmMKaW5kZXggYjIzZGFkZS4uNjBlZDg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2MS5jCkBAIC05LDcgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAidGVhNTc2MS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzY3LmMKaW5kZXggMWY1NjQ2My4uMjIzYTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2Ny5jCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAidGVhNTc2Ny5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKaW5kZXggNDkzY2U5My4uYjU0NTk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwpAQCAtNzM5LDcgKzczOSwxMCBAQAogCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChpbiB1bml0cyBvZiA2Mi41a2h6KVxuIiwKIAkJX19mdW5jX18sIHBhcmFtcy0+ZnJlcXVlbmN5KTsKIAotCXByaXYtPnJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOyAvKiBGaXggbWU6IGl0IGNvdWxkIGJlIGFpci4gKi8KKwkvKiBGaXggbWU6IGl0IGNvdWxkIGJlIGFpci4gKi8KKwlwcml2LT5yZl9tb2RlID0gcGFyYW1zLT5tb2RlOworCWlmIChwYXJhbXMtPm1vZGUgPiBYQ19SRl9NT0RFX0NBQkxFKQorCQlwcml2LT5yZl9tb2RlID0gWENfUkZfTU9ERV9DQUJMRTsKIAogCS8qIHBhcmFtcy0+ZnJlcXVlbmN5IGlzIGluIHVuaXRzIG9mIDYyLjVraHogKi8KIAlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKQEAgLTk3MCw4ICs5NzMsNiBAQAogCWNhc2UgMToKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCiAJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKLQkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7Ci0KIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTgwLDYgKzk4MSwxMyBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAocHJpdi0+aWZfa2h6ID09IDApIHsKKwkJLyogSWYgdGhlIElGIGhhc24ndCBiZWVuIHNldCB5ZXQsIHVzZSB0aGUgdmFsdWUgcHJvdmlkZWQgYnkKKwkJICAgdGhlIGNhbGxlciAob2NjdXJzIGluIGh5YnJpZCBkZXZpY2VzIHdoZXJlIHRoZSBhbmFsb2cKKwkJICAgY2FsbCB0byB4YzUwMDBfYXR0YWNoIG9jY3VycyBiZWZvcmUgdGhlIGRpZ2l0YWwgc2lkZSkgKi8KKwkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7CisJfQorCiAJLyogQ2hlY2sgaWYgZmlybXdhcmUgaGFzIGJlZW4gbG9hZGVkLiBJdCBpcyBwb3NzaWJsZSB0aGF0IGFub3RoZXIKIAkgICBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyIGhhcyBsb2FkZWQgdGhlIGZpcm13YXJlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGE4YzYyNDkuLjllNTc4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlzZWxlY3QgRFZCX1RVTkVSX0lURDEwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVTkVSX0NYMjQxMTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgZGlnaXRhbCBUViByZWNlaXZlciBjaGlwIG1hZGUgYnkgQjJDMiBJbmMuIGluY2x1ZGVkIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZQppbmRleCBkOWRiMDY2Li5iOTdjZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUKQEAgLTIsNyArMiw2IEBACiAJZmxleGNvcC1zcmFtLm8gZmxleGNvcC1lZXByb20ubyBmbGV4Y29wLW1pc2MubyBmbGV4Y29wLWh3LWZpbHRlci5vCiBvYmotJChDT05GSUdfRFZCX0IyQzJfRkxFWENPUCkgKz0gYjJjMi1mbGV4Y29wLm8KIAotCiBpZm5lcSAoJChDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0kpLCkKIGIyYzItZmxleGNvcC1vYmpzICs9IGZsZXhjb3AtZG1hLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKaW5kZXggOGNlMDYzMy4uM2UxYzQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaApAQCAtMjgsMTEgKzI4LDE0IEBACiAKIC8qIFN0ZWFsIGZyb20gdXNiLmggKi8KICN1bmRlZiBlcnIKLSNkZWZpbmUgZXJyKGZvcm1hdCwgIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICAgICBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCiAjdW5kZWYgaW5mbwotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICAgIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQogI3VuZGVmIHdhcm4KLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9XQVJOSU5HIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKIAogc3RydWN0IGZsZXhjb3BfZG1hIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTkxLDE2ICs5NCwxNCBAQAogCWludCBmdWxsdHNfc3RyZWFtaW5nX3N0YXRlOwogCiAJLyogYnVzIHNwZWNpZmljIGNhbGxiYWNrcyAqLwotCWZsZXhjb3BfaWJpX3ZhbHVlICgqcmVhZF9pYmlfcmVnKSAgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLCBmbGV4Y29wX2liaV9yZWdpc3Rlcik7Ci0JaW50ICAgICAgICAgICAgICAgKCp3cml0ZV9pYmlfcmVnKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosIGZsZXhjb3BfaWJpX3JlZ2lzdGVyLCBmbGV4Y29wX2liaV92YWx1ZSk7Ci0KLQotCWludCAoKmkyY19yZXF1ZXN0KSAoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIqLAorCWZsZXhjb3BfaWJpX3ZhbHVlKCpyZWFkX2liaV9yZWcpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwKKwkJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyKTsKKwlpbnQgKCp3cml0ZV9pYmlfcmVnKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosCisJCQlmbGV4Y29wX2liaV9yZWdpc3RlciwgZmxleGNvcF9pYmlfdmFsdWUpOworCWludCAoKmkyY19yZXF1ZXN0KSAoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKiwKIAkJZmxleGNvcF9hY2Nlc3Nfb3BfdCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pOwotCWludCAoKnN0cmVhbV9jb250cm9sKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlKiwgaW50KTsKLQorCWludCAoKnN0cmVhbV9jb250cm9sKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosIGludCk7CiAJaW50ICgqZ2V0X21hY19hZGRyKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IGV4dGVuZGVkKTsKLQogCXZvaWQgKmJ1c19zcGVjaWZpYzsKIH07CiAKQEAgLTExMSwyMiArMTEyLDI4IEBACiB2b2lkIGZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1OCAqYnVmLCB1MzIgbm8pOwogCiBzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZsZXhjb3BfZGV2aWNlX2ttYWxsb2Moc2l6ZV90IGJ1c19zcGVjaWZpY19sZW4pOwotdm9pZCBmbGV4Y29wX2RldmljZV9rZnJlZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UqKTsKK3ZvaWQgZmxleGNvcF9kZXZpY2Vfa2ZyZWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICopOwogCi1pbnQgIGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGZsZXhjb3BfZGV2aWNlKik7CitpbnQgZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKik7CiB2b2lkIGZsZXhjb3BfZGV2aWNlX2V4aXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7Ci0KIHZvaWQgZmxleGNvcF9yZXNldF9ibG9ja18zMDAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiAKIC8qIGZyb20gZmxleGNvcC1kbWEuYyAqLwotaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpOworaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpOwogdm9pZCBmbGV4Y29wX2RtYV9mcmVlKHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hKTsKIAotaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7Ci1pbnQgZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOwotaW50IGZsZXhjb3BfZG1hX2NvbmZpZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4KTsKLWludCBmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCBmbGV4Y29wX2RtYV9hZGRyX2luZGV4X3QgaW5kZXgsIGludCBvbm9mZik7Ci1pbnQgZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgdTggY3ljbGVzKTsKK2ludCBmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOworaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBubywgaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX2RtYV9jb25maWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCk7CitpbnQgZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgZmxleGNvcF9kbWFfYWRkcl9pbmRleF90IGluZGV4LAorCQlpbnQgb25vZmYpOworaW50IGZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIHU4IGN5Y2xlcyk7CiAKIC8qIGZyb20gZmxleGNvcC1lZXByb20uYyAqLwogLyogdGhlIFBDSSBwYXJ0IHVzZXMgdGhpcyBjYWxsIHRvIGdldCB0aGUgTUFDIGFkZHJlc3MsIHRoZSBVU0IgcGFydCBoYXMgaXRzIG93biAqLwpAQCAtMTQxLDEzICsxNDgsMTUgQEAKIAl1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbik7CiAKIC8qIGZyb20gZmxleGNvcC1zcmFtLmMgKi8KLWludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LCBmbGV4Y29wX3NyYW1fZGVzdF90YXJnZXRfdCB0YXJnZXQpOworaW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsCisJZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KTsKIHZvaWQgZmxleGNvcF93YW5fc2V0X3NwZWVkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfd2FuX3NwZWVkX3Qgcyk7Ci12b2lkIGZsZXhjb3Bfc3JhbV9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCB1c2Jfd2FuLCBpbnQgc3JhbWRtYSwgaW50IG1heGltdW1maWxsKTsKK3ZvaWQgZmxleGNvcF9zcmFtX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJaW50IHVzYl93YW4sIGludCBzcmFtZG1hLCBpbnQgbWF4aW11bWZpbGwpOwogCiAvKiBnbG9iYWwgcHJvdG90eXBlcyBmb3IgdGhlIGZsZXhjb3AtY2hpcCAqLwogLyogZnJvbSBmbGV4Y29wLWZlLXR1bmVyLmMgKi8KLWludCBmbGV4Y29wX2Zyb250ZW5kX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpjYXJkKTsKK2ludCBmbGV4Y29wX2Zyb250ZW5kX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiB2b2lkIGZsZXhjb3BfZnJvbnRlbmRfZXhpdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIAogLyogZnJvbSBmbGV4Y29wLWkyYy5jICovCkBAIC0xNTksMTEgKzE2OCwxNCBAQAogCiAvKiBmcm9tIGZsZXhjb3AtbWlzYy5jICovCiB2b2lkIGZsZXhjb3BfZGV0ZXJtaW5lX3JldmlzaW9uKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwotdm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsY29uc3QgY2hhciAqcHJlZml4LGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci12b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKTsKK3ZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQljb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Cit2b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKTsKIAogLyogZnJvbSBmbGV4Y29wLWh3LWZpbHRlci5jICovCi1pbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpOwogdm9pZCBmbGV4Y29wX2h3X2ZpbHRlcl9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogCiB2b2lkIGZsZXhjb3Bfc21jX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYwppbmRleCAyNmYwMDExLi4yODgxZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCkBAIC0xLDEzICsxLDEyIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLWRtYS5jIC0gbWV0aG9kcyBmb3IgY29uZmlndXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZSBETUEgb2YgdGhlIEZsZXhDb3AuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtZG1hLmMgLSBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgdGhlIERNQSBvZiB0aGUgRmxleENvcAorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKLWludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKQoraW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpCiB7CiAJdTggKnRjcHU7CiAJZG1hX2FkZHJfdCB0ZG1hID0gMDsKQEAgLTMyLDcgKzMxLDggQEAKIAogdm9pZCBmbGV4Y29wX2RtYV9mcmVlKHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hKQogewotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG1hLT5wZGV2LCBkbWEtPnNpemUqMixkbWEtPmNwdV9hZGRyMCwgZG1hLT5kbWFfYWRkcjApOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG1hLT5wZGV2LCBkbWEtPnNpemUqMiwKKwkJCWRtYS0+Y3B1X2FkZHIwLCBkbWEtPmRtYV9hZGRyMCk7CiAJbWVtc2V0KGRtYSwwLHNpemVvZihzdHJ1Y3QgZmxleGNvcF9kbWEpKTsKIH0KIEVYUE9SVF9TWU1CT0woZmxleGNvcF9kbWFfZnJlZSk7CkBAIC00NCw4ICs0NCw4IEBACiAJZmxleGNvcF9pYmlfdmFsdWUgdjB4MCx2MHg0LHYweGM7CiAJdjB4MC5yYXcgPSB2MHg0LnJhdyA9IHYweGMucmF3ID0gMDsKIAotCXYweDAuZG1hXzB4MC5kbWFfYWRkcmVzczAgICAgICAgID0gZG1hLT5kbWFfYWRkcjAgPj4gMjsKLQl2MHhjLmRtYV8weGMuZG1hX2FkZHJlc3MxICAgICAgICA9IGRtYS0+ZG1hX2FkZHIxID4+IDI7CisJdjB4MC5kbWFfMHgwLmRtYV9hZGRyZXNzMCA9IGRtYS0+ZG1hX2FkZHIwID4+IDI7CisJdjB4Yy5kbWFfMHhjLmRtYV9hZGRyZXNzMSA9IGRtYS0+ZG1hX2FkZHIxID4+IDI7CiAJdjB4NC5kbWFfMHg0X3dyaXRlLmRtYV9hZGRyX3NpemUgPSBkbWEtPnNpemUgLyA0OwogCiAJaWYgKChkbWFfaWR4ICYgRkNfRE1BXzEpID09IGRtYV9pZHgpIHsKQEAgLTU3LDcgKzU3LDggQEAKIAkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMl8wMTQsdjB4NCk7CiAJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTJfMDFjLHYweGMpOwogCX0gZWxzZSB7Ci0JCWVycigiZWl0aGVyIERNQTEgb3IgRE1BMiBjYW4gYmUgY29uZmlndXJlZCBhdCB0aGUgd2l0aGluIG9uZSBmbGV4Y29wX2RtYV9jb25maWcgY2FsbC4iKTsKKwkJZXJyKCJlaXRoZXIgRE1BMSBvciBETUEyIGNhbiBiZSBjb25maWd1cmVkIHdpdGhpbiBvbmUgIgorCQkJImZsZXhjb3BfZG1hX2NvbmZpZyBjYWxsLiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgxLDcgKzgyLDggQEAKIAkJcjB4MCA9IGRtYTJfMDEwOwogCQlyMHhjID0gZG1hMl8wMWM7CiAJfSBlbHNlIHsKLQkJZXJyKCJlaXRoZXIgdHJhbnNmZXIgRE1BMSBvciBETUEyIGNhbiBiZSBzdGFydGVkIHdpdGhpbiBvbmUgZmxleGNvcF9kbWFfeGZlcl9jb250cm9sIGNhbGwuIik7CisJCWVycigiZWl0aGVyIHRyYW5zZmVyIERNQTEgb3IgRE1BMiBjYW4gYmUgc3RhcnRlZCB3aXRoaW4gb25lICIKKwkJCSJmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2wgY2FsbC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTQsOCArMTU2LDcgQEAKIAogLyogMSBjeWNsZXMgPSAxLjk3IG1zZWMgKi8KIGludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKLQkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LAotCQl1OCBjeWNsZXMpCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgdTggY3ljbGVzKQogewogCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIgPSAoZG1hX2lkeCAmIEZDX0RNQV8xKSA/IGRtYTFfMDA0IDogZG1hMl8wMTQ7CiAJZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMscik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMKaW5kZXggOGE4YWU4YS4uYTI1MzczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1lZXByb20uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtZWVwcm9tLmMgLSBlZXByb20gYWNjZXNzIG1ldGhvZHMgKGN1cnJlbnRseSBvbmx5IE1BQyBhZGRyZXNzIHJlYWRpbmcgaXMgdXNlZCkKLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1lZXByb20uYyAtIGVlcHJvbSBhY2Nlc3MgbWV0aG9kcyAoY3VycmVudGx5IG9ubHkgTUFDIGFkZHJlc3MgcmVhZGluZykKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCkBAIC0xNCwxNyArMTIsMTcgQEAKIAlyZXR1cm4gZmxleF9pMmNfd3JpdGUoYWRhcHRlciwgMHgyMDAwMDAwMCwgMHg1MCwgYWRkciwgYnVmLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IGVlcHJvbV9scmNfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgbGVuLCB1OCAqd2J1ZiwgdTggKnJidWYsIGludCByZXRyaWVzKQorc3RhdGljIGludCBlZXByb21fbHJjX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwKKwkJdTMyIGxlbiwgdTggKndidWYsIHU4ICpyYnVmLCBpbnQgcmV0cmllcykKIHsKLQlpbnQgaTsKK2ludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHJldHJpZXM7IGkrKykgewotCQlpZiAoZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHdidWYsIGxlbikgPT0gbGVuKSB7Ci0JCQlpZiAoZWVwcm9tX2xyY19yZWFkKGFkYXB0ZXIsIGFkZHIsIGxlbiwgcmJ1ZiwgcmV0cmllcykgPT0gMSkKLQkJCQlyZXR1cm4gMTsKK2ZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKKwlpZiAoZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHdidWYsIGxlbikgPT0gbGVuKSB7CisJCWlmIChlZXByb21fbHJjX3JlYWQoYWRhcHRlciwgYWRkciwgbGVuLCByYnVmLCByZXRyaWVzKSA9PSAxKQorCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzksMTIgKzM3LDEwIEBACiAJCXJldHVybiAwOwogCiAJbWVtY3B5KHdidWYsIGtleSwgbGVuKTsKLQogCXdidWZbMTZdID0gMDsKIAl3YnVmWzE3XSA9IDA7CiAJd2J1ZlsxOF0gPSAwOwogCXdidWZbMTldID0gY2FsY19scmMod2J1ZiwgMTkpOwotCiAJcmV0dXJuIGVlcHJvbV9scmNfd3JpdGUoYWRhcHRlciwgMHgzZTQsIDIwLCB3YnVmLCByYnVmLCA0KTsKIH0KIApAQCAtNTksNyArNTUsNiBAQAogCQlyZXR1cm4gMDsKIAogCW1lbWNweShrZXksIGJ1ZiwgbGVuKTsKLQogCXJldHVybiAxOwogfQogCkBAIC03NCw5ICs2OSw3IEBACiAJCXRtcFszXSA9IG1hY1s1XTsKIAkJdG1wWzRdID0gbWFjWzZdOwogCQl0bXBbNV0gPSBtYWNbN107Ci0KIAl9IGVsc2UgewotCiAJCXRtcFswXSA9IG1hY1swXTsKIAkJdG1wWzFdID0gbWFjWzFdOwogCQl0bXBbMl0gPSBtYWNbMl07CkBAIC05MCwxMSArODMsMTEgQEAKIAogCWlmIChlZXByb21fd3JpdGUoYWRhcHRlciwgMHgzZjgsIHRtcCwgOCkgPT0gOCkKIAkJcmV0dXJuIDE7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQorc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQogewogCXJldHVybiBmYy0+aTJjX3JlcXVlc3QoZmMsRkNfUkVBRCxGQ19JMkNfUE9SVF9FRVBST00sMHg1MCxhZGRyLGJ1ZixsZW4pOwogfQpAQCAtMTEwLDcgKzEwMyw4IEBACiAJcmV0dXJuIHN1bTsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZXF1ZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKK3N0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKIHsKIAlpbnQgaSxyZXQgPSAwOwogCXU4IGNoaXBhZGRyID0gIDB4NTAgfCAoKGFkZHIgPj4gOCkgJiAzKTsKQEAgLTEyMyw3ICsxMTcsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fbHJjX3JlYWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4sIGludCByZXRyaWVzKQorc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9scmNfcmVhZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgYWRkciwKKwkJdTggKmJ1ZiwgdTE2IGxlbiwgaW50IHJldHJpZXMpCiB7CiAJaW50IHJldCA9IGZsZXhjb3BfZWVwcm9tX3JlcXVlc3QoZmMsIEZDX1JFQUQsIGFkZHIsIGJ1ZiwgbGVuLCByZXRyaWVzKTsKIAlpZiAocmV0ID09IDApCkBAIC0xMzMsOCArMTI4LDcgQEAKIH0KIAogLyogSkoncyBjb21tZW50IGFib3V0IGV4dGVuZGVkID09IDE6IGl0IGlzIG5vdCBwcmVzZW50bHkgdXNlZCBhbnl3aGVyZSBidXQgd2FzCi0gKiBhZGRlZCB0byB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcG9zc2libGUgc3VwcG9ydCBvZiBFVUk2NAotICovCisgKiBhZGRlZCB0byB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcG9zc2libGUgc3VwcG9ydCBvZiBFVUk2NCAqLwogaW50IGZsZXhjb3BfZWVwcm9tX2NoZWNrX21hY19hZGRyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBleHRlbmRlZCkKIHsKIAl1OCBidWZbOF07CkBAIC0xNDIsMTIgKzEzNiw5IEBACiAKIAlpZiAoKHJldCA9IGZsZXhjb3BfZWVwcm9tX2xyY19yZWFkKGZjLDB4M2Y4LGJ1Ziw4LDQpKSA9PSAwKSB7CiAJCWlmIChleHRlbmRlZCAhPSAwKSB7Ci0JCQllcnIoIlRPRE86IGV4dGVuZGVkIChFVUk2NCkgTUFDIGFkZHJlc3NlcyBhcmVuJ3QgY29tcGxldGVseSBzdXBwb3J0ZWQgeWV0Iik7CisJCQllcnIoIlRPRE86IGV4dGVuZGVkIChFVUk2NCkgTUFDIGFkZHJlc3NlcyBhcmVuJ3QgIgorCQkJCSJjb21wbGV0ZWx5IHN1cHBvcnRlZCB5ZXQiKTsKIAkJCXJldCA9IC1FSU5WQUw7Ci0vKgkJCW1lbWNweShmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLGJ1ZiwzKTsKLQkJCW1hY1szXSA9IDB4ZmU7Ci0JCQltYWNbNF0gPSAweGZmOwotCQkJbWVtY3B5KCZmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjWzNdLCZidWZbNV0sMyk7ICovCiAJCX0gZWxzZQogCQkJbWVtY3B5KGZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsYnVmLDYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKaW5kZXggNWNkZWQzNy4uZjdhZmFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKQEAgLTU5MiwxNCArNTkyLDE0IEBACiAJCWZjLT5mZV9zbGVlcCA9IG9wcy0+c2xlZXA7CiAJCW9wcy0+c2xlZXAgPSBmbGV4Y29wX3NsZWVwOwogCi0JCWZjLT5kZXZfdHlwZSA9IEZDX1NLWTsKKwkJZmMtPmRldl90eXBlID0gRkNfU0tZX1JFVjI2OwogCQlnb3RvIGZlX2ZvdW5kOwogCX0KIAogCS8qIHRyeSB0aGUgYWlyIGR2Yi10IChtdDM1Mi9TYW1zdW5nIHRkdGM5MjUxZGgwKD8/KSkgKi8KIAlmYy0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnNhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCBpMmMpOwogCWlmIChmYy0+ZmUgIT0gTlVMTCkgewotCQlmYy0+ZGV2X3R5cGUgPSBGQ19BSVJfRFZCOworCQlmYy0+ZGV2X3R5cGUgPSBGQ19BSVJfRFZCVDsKIAkJZmMtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IHNhbXN1bmdfdGR0YzkyNTFkaDBfY2FsY19yZWdzOwogCQlnb3RvIGZlX2ZvdW5kOwogCX0KQEAgLTY1Myw3ICs2NTMsNyBAQAogCQlmYy0+ZmVfc2xlZXAgICAgICAgICAgICAgICAgPSBvcHMtPnNsZWVwOwogCQlvcHMtPnNsZWVwICAgICAgICAgICAgICAgICAgPSBmbGV4Y29wX3NsZWVwOwogCi0JCWZjLT5kZXZfdHlwZSAgICAgICAgICAgICAgICA9IEZDX1NLWV9PTEQ7CisJCWZjLT5kZXZfdHlwZSAgICAgICAgICAgICAgICA9IEZDX1NLWV9SRVYyMzsKIAkJZ290byBmZV9mb3VuZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwppbmRleCA0NTE5NzRiLi43N2U0NTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCkBAIC0xLDMzICsxLDMwIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLWh3LWZpbHRlci5jIC0gcGlkIGFuZCBtYWMgYWRkcmVzcyBmaWx0ZXJpbmcgYW5kIGNvcnJlc3BvbmRpbmcgY29udHJvbCBmdW5jdGlvbnMuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtaHctZmlsdGVyLmMgLSBwaWQgYW5kIG1hYyBhZGRyZXNzIGZpbHRlcmluZyBhbmQgY29udHJvbCBmdW5jdGlvbnMKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCiBzdGF0aWMgdm9pZCBmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxSY3ZfRGF0YV9zaWcsb25vZmYpOwotCi0JZGViX3RzKCJyY3ZfZGF0YSBpcyBub3c6ICclcydcbiIsb25vZmYgPyAib24iIDogIm9mZiIpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgUmN2X0RhdGFfc2lnLCBvbm9mZik7CisJZGViX3RzKCJyY3ZfZGF0YSBpcyBub3c6ICclcydcbiIsIG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKIH0KIAogdm9pZCBmbGV4Y29wX3NtY19jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsU01DX0VuYWJsZV9zaWcsb25vZmYpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgU01DX0VuYWJsZV9zaWcsIG9ub2ZmKTsKIH0KIAogc3RhdGljIHZvaWQgZmxleGNvcF9udWxsX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTnVsbF9maWx0ZXJfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIE51bGxfZmlsdGVyX3NpZywgb25vZmYpOwogfQogCiB2b2lkIGZsZXhjb3Bfc2V0X21hY19maWx0ZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTggbWFjWzZdKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHY0MTgsdjQxYzsKLQl2NDFjID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxtYWNfYWRkcmVzc180MWMpOworCWZsZXhjb3BfaWJpX3ZhbHVlIHY0MTgsIHY0MWM7CisJdjQxYyA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIG1hY19hZGRyZXNzXzQxYyk7CiAKIAl2NDE4Lm1hY19hZGRyZXNzXzQxOC5NQUMxID0gbWFjWzBdOwogCXY0MTgubWFjX2FkZHJlc3NfNDE4Lk1BQzIgPSBtYWNbMV07CkBAIC0zNiwyNyArMzMsMjggQEAKIAl2NDFjLm1hY19hZGRyZXNzXzQxYy5NQUM3ID0gbWFjWzRdOwogCXY0MWMubWFjX2FkZHJlc3NfNDFjLk1BQzggPSBtYWNbNV07CiAKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtYWNfYWRkcmVzc180MTgsdjQxOCk7Ci0JZmMtPndyaXRlX2liaV9yZWcoZmMsbWFjX2FkZHJlc3NfNDFjLHY0MWMpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBtYWNfYWRkcmVzc180MTgsIHY0MTgpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBtYWNfYWRkcmVzc180MWMsIHY0MWMpOwogfQogCiB2b2lkIGZsZXhjb3BfbWFjX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTUFDX2ZpbHRlcl9Nb2RlX3NpZyxvbm9mZik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBNQUNfZmlsdGVyX01vZGVfc2lnLCBvbm9mZik7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCB1MTYgbWFzaykKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCB1MTYgbWFzaykKIHsKIAkvKiBpbmRleF9yZWdfMzEwLmV4dHJhX2luZGV4X3JlZyBuZWVkIHRvIDAgb3IgNyB0byB3b3JrICovCiAJZmxleGNvcF9pYmlfdmFsdWUgdjMwYzsKIAl2MzBjLnBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMF83Lkdyb3VwX1BJRCA9IHBpZDsKIAl2MzBjLnBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMF83Lkdyb3VwX21hc2sgPSBtYXNrOwotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHBpZF9maWx0ZXJfMzBjLHYzMGMpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBwaWRfZmlsdGVyXzMwYywgdjMwYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTWFza19maWx0ZXJfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIE1hc2tfZmlsdGVyX3NpZywgb25vZmYpOwogfQogCiAvKiB0aGlzIGZhbmN5IGRlZmluZSByZWR1Y2VzIHRoZSBjb2RlIHNpemUgb2YgdGhlIHF1aXRlIHNpbWlsYXIgUElEIGNvbnRyb2xsaW5nIG9mCkBAIC02NSw5MSArNjMsMTEyIEBACiAKICNkZWZpbmUgcGlkX2N0cmwodnJlZ25hbWUsZmllbGQsZW5hYmxlZmllbGQsdHJhbnNfZmllbGQsdHJhbnN2YWwpIFwKIAlmbGV4Y29wX2liaV92YWx1ZSB2cGlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgdnJlZ25hbWUpLCBcCi0JCQkJCSAgdjIwOCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KTsgXAotXAotCXZwaWQudnJlZ25hbWUuZmllbGQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsgXAotCXZwaWQudnJlZ25hbWUudHJhbnNfZmllbGQgPSB0cmFuc3ZhbDsgXAotCXYyMDguY3RybF8yMDguZW5hYmxlZmllbGQgPSBvbm9mZjsgXAotXAotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHZyZWduYW1lLHZwaWQpOyBcCi0JZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsdjIwOCk7Cit2MjA4ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgY3RybF8yMDgpOyBcCit2cGlkLnZyZWduYW1lLmZpZWxkID0gb25vZmYgPyBwaWQgOiAweDFmZmY7IFwKK3ZwaWQudnJlZ25hbWUudHJhbnNfZmllbGQgPSB0cmFuc3ZhbDsgXAordjIwOC5jdHJsXzIwOC5lbmFibGVmaWVsZCA9IG9ub2ZmOyBcCitmYy0+d3JpdGVfaWJpX3JlZyhmYywgdnJlZ25hbWUsIHZwaWQpOyBcCitmYy0+d3JpdGVfaWJpX3JlZyhmYywgY3RybF8yMDgsIHYyMDgpOwogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTFfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLFN0cmVhbTFfUElELFN0cmVhbTFfZmlsdGVyX3NpZyxTdHJlYW0xX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLCBTdHJlYW0xX1BJRCwgU3RyZWFtMV9maWx0ZXJfc2lnLAorCQkJU3RyZWFtMV90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfU3RyZWFtMl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsU3RyZWFtMl9QSUQsU3RyZWFtMl9maWx0ZXJfc2lnLFN0cmVhbTJfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsIFN0cmVhbTJfUElELCBTdHJlYW0yX2ZpbHRlcl9zaWcsCisJCQlTdHJlYW0yX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1BDUl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsUENSX1BJRCxQQ1JfZmlsdGVyX3NpZyxQQ1JfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsIFBDUl9QSUQsIFBDUl9maWx0ZXJfc2lnLCBQQ1JfdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9QTVRfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUE1UX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCxQTVRfUElELFBNVF9maWx0ZXJfc2lnLFBNVF90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCwgUE1UX1BJRCwgUE1UX2ZpbHRlcl9zaWcsIFBNVF90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VNTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LEVNTV9QSUQsRU1NX2ZpbHRlcl9zaWcsRU1NX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LCBFTU1fUElELCBFTU1fZmlsdGVyX3NpZywgRU1NX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VDTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsRUNNX1BJRCxFQ01fZmlsdGVyX3NpZyxFQ01fdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsIEVDTV9QSUQsIEVDTV9maWx0ZXJfc2lnLCBFQ01fdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBpbmRleCwgdTE2IHBpZCxpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWludCBpbmRleCwgdTE2IHBpZCwgaW50IG9ub2ZmKQogewogCWlmIChwaWQgPT0gMHgyMDAwKQogCQlyZXR1cm47CiAKLQlkZWJfdHMoInNldHRpbmcgcGlkOiAlNWQgJTA0eCBhdCBpbmRleCAlZCAnJXMnXG4iLHBpZCxwaWQsaW5kZXgsb25vZmYgPyAib24iIDogIm9mZiIpOworCWRlYl90cygic2V0dGluZyBwaWQ6ICU1ZCAlMDR4IGF0IGluZGV4ICVkICclcydcbiIsCisJCQlwaWQsIHBpZCwgaW5kZXgsIG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKIAogCS8qIFdlIGNvdWxkIHVzZSBiaXQgbWFnaWMgaGVyZSB0byByZWR1Y2Ugc291cmNlIGNvZGUgc2l6ZS4KIAkgKiBJIGRlY2lkZWQgYWdhaW5zdCBpdCwgYnV0IHRvIHVzZSB0aGUgcmVhbCByZWdpc3RlciBuYW1lcyAqLwogCXN3aXRjaCAoaW5kZXgpIHsKLQkJY2FzZSAwOiBmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDE6IGZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgMjogZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDM6IGZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSA0OiBmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgNToJZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciAmJiBpbmRleCA8IDM4KSB7Ci0JCQkJZmxleGNvcF9pYmlfdmFsdWUgdnBpZCx2aWQ7CisJY2FzZSAwOgorCQlmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmbGV4Y29wX3BpZF9TdHJlYW0yX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmbGV4Y29wX3BpZF9QQ1JfUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDM6CisJCWZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZmxleGNvcF9waWRfRU1NX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlmbGV4Y29wX3BpZF9FQ01fUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoZmMtPmhhc18zMl9od19waWRfZmlsdGVyICYmIGluZGV4IDwgMzgpIHsKKwkJCWZsZXhjb3BfaWJpX3ZhbHVlIHZwaWQsIHZpZDsKIAotCQkJCS8qIHNldCB0aGUgaW5kZXggKi8KLQkJCQl2aWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGluZGV4X3JlZ18zMTApOwotCQkJCXZpZC5pbmRleF9yZWdfMzEwLmluZGV4X3JlZyA9IGluZGV4IC0gNjsKLQkJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxpbmRleF9yZWdfMzEwLCB2aWQpOworCQkJLyogc2V0IHRoZSBpbmRleCAqLworCQkJdmlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgaW5kZXhfcmVnXzMxMCk7CisJCQl2aWQuaW5kZXhfcmVnXzMxMC5pbmRleF9yZWcgPSBpbmRleCAtIDY7CisJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYywgaW5kZXhfcmVnXzMxMCwgdmlkKTsKIAotCQkJCXZwaWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHBpZF9uX3JlZ18zMTQpOwotCQkJCXZwaWQucGlkX25fcmVnXzMxNC5QSUQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsKLQkJCQl2cGlkLnBpZF9uX3JlZ18zMTQuUElEX2VuYWJsZV9iaXQgPSBvbm9mZjsKLQkJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxwaWRfbl9yZWdfMzE0LCB2cGlkKTsKLQkJCX0KLQkJCWJyZWFrOworCQkJdnBpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHBpZF9uX3JlZ18zMTQpOworCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRCA9IG9ub2ZmID8gcGlkIDogMHgxZmZmOworCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRF9lbmFibGVfYml0ID0gb25vZmY7CisJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYywgcGlkX25fcmVnXzMxNCwgdnBpZCk7CisJCX0KKwkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyxpbnQgb25vZmYpCitzdGF0aWMgaW50IGZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewogCWlmIChmYy0+ZnVsbHRzX3N0cmVhbWluZ19zdGF0ZSAhPSBvbm9mZikgewogCQlkZWJfdHMoIiVzIGZ1bGwgVFMgdHJhbnNmZXJcbiIsb25vZmYgPyAiZW5hYmxpbmciIDogImRpc2FibGluZyIpOwogCQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXIoZmMsIDAsIDB4MWZlMCAqICghb25vZmYpKTsKLQkJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoZmMsb25vZmYpOworCQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywgb25vZmYpOwogCQlmYy0+ZnVsbHRzX3N0cmVhbWluZ19zdGF0ZSA9IG9ub2ZmOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZikKK2ludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpCiB7CiAJaW50IG1heF9waWRfZmlsdGVyID0gNiArIGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciozMjsKIApAQCAtMTY0LDI0ICsxODMsMjUgQEAKIAkgKiAgIC0gb3IgdGhlIHJlcXVlc3RlZCBwaWQgaXMgMHgyMDAwICovCiAKIAlpZiAoIWZjLT5waWRfZmlsdGVyaW5nICYmIGZjLT5mZWVkY291bnQgPT0gb25vZmYpCi0JCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsb25vZmYpOworCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCBvbm9mZik7CiAKIAlpZiAoZmMtPnBpZF9maWx0ZXJpbmcpIHsKLQkJZmxleGNvcF9waWRfY29udHJvbChmYyxkdmJkbXhmZWVkLT5pbmRleCxkdmJkbXhmZWVkLT5waWQsb25vZmYpOworCQlmbGV4Y29wX3BpZF9jb250cm9sIFwKKwkJCShmYywgZHZiZG14ZmVlZC0+aW5kZXgsIGR2YmRteGZlZWQtPnBpZCwgb25vZmYpOwogCiAJCWlmIChmYy0+ZXh0cmFfZmVlZGNvdW50ID4gMCkKLQkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsMSk7CisJCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCAxKTsKIAkJZWxzZSBpZiAoZHZiZG14ZmVlZC0+cGlkID09IDB4MjAwMCkKLQkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsb25vZmYpOworCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgb25vZmYpOwogCQllbHNlCi0JCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLDApOworCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgMCk7CiAJfQogCiAJLyogaWYgaXQgd2FzIHRoZSBmaXJzdCBvciBsYXN0IGZlZWQgcmVxdWVzdCBjaGFuZ2UgdGhlIHN0cmVhbS1zdGF0dXMgKi8KIAlpZiAoZmMtPmZlZWRjb3VudCA9PSBvbm9mZikgewotCQlmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoZmMsb25vZmYpOworCQlmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoZmMsIG9ub2ZmKTsKIAkJaWYgKGZjLT5zdHJlYW1fY29udHJvbCkgLyogZGV2aWNlIHNwZWNpZmljIHN0cmVhbSBjb250cm9sICovCi0JCQlmYy0+c3RyZWFtX2NvbnRyb2woZmMsb25vZmYpOworCQkJZmMtPnN0cmVhbV9jb250cm9sKGZjLCBvbm9mZik7CiAKIAkJLyogZmVlZGluZyBzdG9wcGVkIC0+IHJlc2V0IHRoZSBmbGV4Y29wIGZpbHRlciovCiAJCWlmIChvbm9mZiA9PSAwKSB7CkBAIC0xODksNyArMjA5LDYgQEAKIAkJCWZsZXhjb3BfaHdfZmlsdGVyX2luaXQoZmMpOwogCQl9CiAJfQotCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbCk7CkBAIC0xOTksMTUgKzIxOCwxNSBAQAogCWludCBpOwogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CiAJZm9yIChpID0gMDsgaSA8IDYgKyAzMipmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXI7IGkrKykKLQkJZmxleGNvcF9waWRfY29udHJvbChmYyxpLDB4MWZmZiwwKTsKKwkJZmxleGNvcF9waWRfY29udHJvbChmYywgaSwgMHgxZmZmLCAwKTsKIAogCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihmYywgMCwgMHgxZmUwKTsKLQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywwKTsKKwlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywgMCk7CiAKLQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxwaWRfZmlsdGVyXzMwOCk7CisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHBpZF9maWx0ZXJfMzA4KTsKIAl2LnBpZF9maWx0ZXJfMzA4LkVNTV9maWx0ZXJfNCA9IDE7CiAJdi5waWRfZmlsdGVyXzMwOC5FTU1fZmlsdGVyXzYgPSAwOwotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHBpZF9maWx0ZXJfMzA4LHYpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBwaWRfZmlsdGVyXzMwOCwgdik7CiAKIAlmbGV4Y29wX251bGxfZmlsdGVyX2N0cmwoZmMsIDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jCmluZGV4IGYxMzc4M2YuLmUyYmVkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCiAgKiBmbGV4Y29wLWkyYy5jIC0gZmxleGNvcCBpbnRlcm5hbCAyV2lyZSBidXMgKEkyQykgYW5kIGR2YiBpMmMgaW5pdGlhbGl6YXRpb24KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAogI2RlZmluZSBGQ19NQVhfSTJDX1JFVFJJRVMgMTAwMDAwCiAKLS8qICNkZWZpbmUgRFVNUF9JMkNfTUVTU0FHRVMgKi8KLQotc3RhdGljIGludCBmbGV4Y29wX2kyY19vcGVyYXRpb24oc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfdmFsdWUgKnIxMDApCitzdGF0aWMgaW50IGZsZXhjb3BfaTJjX29wZXJhdGlvbihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV92YWx1ZSAqcjEwMCkKIHsKIAlpbnQgaTsKIAlmbGV4Y29wX2liaV92YWx1ZSByOwpAQCAtMjYsNyArMjMsNyBAQAogCQlyID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgdHdfc21fY18xMDApOwogCiAJCWlmICghci50d19zbV9jXzEwMC5ub19iYXNlX2FkZHJfYWNrX2Vycm9yKSB7Ci0JCQlpZiAoci50d19zbV9jXzEwMC5zdF9kb25lKSB7ICAvKiAmJiAhci50d19zbV9jXzEwMC53b3JraW5nX3N0YXJ0ICovCisJCQlpZiAoci50d19zbV9jXzEwMC5zdF9kb25lKSB7CiAJCQkJKnIxMDAgPSByOwogCQkJCWRlYl9pMmMoImkyYyBzdWNjZXNzXG4iKTsKIAkJCQlyZXR1cm4gMDsKQEAgLTM2LDE3ICszMywzMSBAQAogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAl9Ci0JZGViX2kyYygidHJpZWQgJWQgdGltZXMgaTJjIG9wZXJhdGlvbiwgbmV2ZXIgZmluaXNoZWQgb3IgdG9vIG1hbnkgYWNrIGVycm9ycy5cbiIsaSk7CisJZGViX2kyYygidHJpZWQgJWQgdGltZXMgaTJjIG9wZXJhdGlvbiwgIgorCQkJIm5ldmVyIGZpbmlzaGVkIG9yIHRvbyBtYW55IGFjayBlcnJvcnMuXG4iLCBpKTsKIAlyZXR1cm4gLUVSRU1PVEVJTzsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX2kyY19yZWFkNChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjLAotCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCisJCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgcjEwNDsKLQlpbnQgbGVuID0gcjEwMC50d19zbV9jXzEwMC50b3RhbF9ieXRlcywgLyogcmVtZW1iZXIgdG90YWxfYnl0ZXMgaXMgYnVmbGVuLTEgKi8KKwlpbnQgbGVuID0gcjEwMC50d19zbV9jXzEwMC50b3RhbF9ieXRlcywKKwkJLyogcmVtZW1iZXIgdG90YWxfYnl0ZXMgaXMgYnVmbGVuLTEgKi8KIAkJcmV0OwogCisJLyogd29yay1hcm91bmQgdG8gaGF2ZSBDYWJsZVN0YXIyIGFuZCBTa3lTdGFyMiByZXYgMi43IHdvcmsKKwkgKiBjb3JyZWN0bHk6CisJICoKKwkgKiB0aGUgSVREMTAwMCBpcyBiZWhpbmQgYW4gaTJjLWdhdGUgd2hpY2ggY2xvc2VzIGF1dG9tYXRpY2FsbHkKKwkgKiBhZnRlciBhbiBpMmMtdHJhbnNhY3Rpb24gdGhlIFNUVjAyOTcgbmVlZHMgMiBjb25zZWN1dGl2ZSByZWFkcworCSAqIG9uZSB3aXRoIG5vX2Jhc2VfYWRkciA9IDAgYW5kIG9uZSB3aXRoIDEKKwkgKgorCSAqIHRob3NlIHR3byB3b3JrLWFyb3VuZHMgYXJlIGNvbmZsaWN0aW46IHdlIGNoZWNrIGZvciB0aGUgY2FyZAorCSAqIHR5cGUsIGl0IGlzIHNldCB3aGVuIHByb2JpbmcgdGhlIElURDEwMDAgKi8KKwlpZiAoaTJjLT5mYy0+ZGV2X3R5cGUgPT0gRkNfU0tZX1JFVjI3KQorCQlyMTAwLnR3X3NtX2NfMTAwLm5vX2Jhc2VfYWRkcl9hY2tfZXJyb3IgPSBpMmMtPm5vX2Jhc2VfYWRkcjsKKwogCXJldCA9IGZsZXhjb3BfaTJjX29wZXJhdGlvbihpMmMtPmZjLCAmcjEwMCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRlYl9pMmMoIlJldHJ5aW5nIG9wZXJhdGlvblxuIik7CkBAIC02OSwxMSArODAsMTEgQEAKIAkJaWYgKGxlbiA+IDEpIGJ1ZlsyXSA9IHIxMDQudHdfc21fY18xMDQuZGF0YTNfcmVnOwogCQlpZiAobGVuID4gMikgYnVmWzNdID0gcjEwNC50d19zbV9jXzEwNC5kYXRhNF9yZWc7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9pMmNfd3JpdGU0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCitzdGF0aWMgaW50IGZsZXhjb3BfaTJjX3dyaXRlNChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV92YWx1ZSByMTAwLCB1OCAqYnVmKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDQ7CiAJaW50IGxlbiA9IHIxMDAudHdfc21fY18xMDAudG90YWxfYnl0ZXM7IC8qIHJlbWVtYmVyIHRvdGFsX2J5dGVzIGlzIGJ1Zmxlbi0xICovCkBAIC04MSw3ICs5Miw2IEBACiAKIAkvKiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYnl0ZSwgb3RoZXJ3aXNlIHdlIHdvdWxkbid0IGJlIGhlcmUgKi8KIAlyMTAwLnR3X3NtX2NfMTAwLmRhdGExX3JlZyA9IGJ1ZlswXTsKLQogCXIxMDQudHdfc21fY18xMDQuZGF0YTJfcmVnID0gbGVuID4gMCA/IGJ1ZlsxXSA6IDA7CiAJcjEwNC50d19zbV9jXzEwNC5kYXRhM19yZWcgPSBsZW4gPiAxID8gYnVmWzJdIDogMDsKIAlyMTA0LnR3X3NtX2NfMTA0LmRhdGE0X3JlZyA9IGxlbiA+IDIgPyBidWZbM10gOiAwOwpAQCAtOTQsNyArMTA0LDcgQEAKIH0KIAogaW50IGZsZXhjb3BfaTJjX3JlcXVlc3Qoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKmkyYywKLQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKKwkJZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJaW50IHJldDsKIApAQCAtMTE3LDcgKzEyNyw2IEBACiAJCXByaW50aygicmQoIik7CiAJZWxzZQogCQlwcmludGsoIndyKCIpOwotCiAJcHJpbnRrKCIlMDJ4KTogJTAyeCAiLCBjaGlwYWRkciwgYWRkcik7CiAjZW5kaWYKIApAQCAtMTYzLDcgKzE3Miw4IEBACiBFWFBPUlRfU1lNQk9MKGZsZXhjb3BfaTJjX3JlcXVlc3QpOwogCiAvKiBtYXN0ZXIgeGZlciBjYWxsYmFjayBmb3IgZGVtb2R1bGF0b3IgKi8KLXN0YXRpYyBpbnQgZmxleGNvcF9tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCitzdGF0aWMgaW50IGZsZXhjb3BfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQogewogCXN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTE4MiwxMiArMTkyLDEzIEBACiAJCS8qIHJlYWRpbmcgKi8KIAkJaWYgKGkrMSA8IG51bSAmJiAobXNnc1tpKzFdLmZsYWdzID09IEkyQ19NX1JEKSkgewogCQkJcmV0ID0gaTJjLT5mYy0+aTJjX3JlcXVlc3QoaTJjLCBGQ19SRUFELCBtc2dzW2ldLmFkZHIsCi0JCQkJbXNnc1tpXS5idWZbMF0sIG1zZ3NbaSsxXS5idWYsIG1zZ3NbaSsxXS5sZW4pOworCQkJCQltc2dzW2ldLmJ1ZlswXSwgbXNnc1tpKzFdLmJ1ZiwKKwkJCQkJbXNnc1tpKzFdLmxlbik7CiAJCQlpKys7IC8qIHNraXAgdGhlIGZvbGxvd2luZyBtZXNzYWdlICovCiAJCX0gZWxzZSAvKiB3cml0aW5nICovCiAJCQlyZXQgPSBpMmMtPmZjLT5pMmNfcmVxdWVzdChpMmMsIEZDX1dSSVRFLCBtc2dzW2ldLmFkZHIsCi0JCQkJbXNnc1tpXS5idWZbMF0sICZtc2dzW2ldLmJ1ZlsxXSwKLQkJCQltc2dzW2ldLmxlbiAtIDEpOworCQkJCQltc2dzW2ldLmJ1ZlswXSwgJm1zZ3NbaV0uYnVmWzFdLAorCQkJCQltc2dzW2ldLmxlbiAtIDEpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZXJyKCJpMmMgbWFzdGVyX3hmZXIgZmFpbGVkIik7CiAJCQlicmVhazsKQEAgLTIxNCwyMyArMjI1LDIxIEBACiBpbnQgZmxleGNvcF9pMmNfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewogCWludCByZXQ7Ci0KIAltdXRleF9pbml0KCZmYy0+aTJjX211dGV4KTsKIAogCWZjLT5mY19pMmNfYWRhcFswXS5mYyA9IGZjOwogCWZjLT5mY19pMmNfYWRhcFsxXS5mYyA9IGZjOwogCWZjLT5mY19pMmNfYWRhcFsyXS5mYyA9IGZjOwotCiAJZmMtPmZjX2kyY19hZGFwWzBdLnBvcnQgPSBGQ19JMkNfUE9SVF9ERU1PRDsKIAlmYy0+ZmNfaTJjX2FkYXBbMV0ucG9ydCA9IEZDX0kyQ19QT1JUX0VFUFJPTTsKIAlmYy0+ZmNfaTJjX2FkYXBbMl0ucG9ydCA9IEZDX0kyQ19QT1JUX1RVTkVSOwogCiAJc3RybGNweShmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAubmFtZSwgIkIyQzIgRmxleENvcCBJMkMgdG8gZGVtb2QiLAotCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLm5hbWUpKTsKKwkJCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAubmFtZSkpOwogCXN0cmxjcHkoZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwLm5hbWUsICJCMkMyIEZsZXhDb3AgSTJDIHRvIGVlcHJvbSIsCi0JCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAubmFtZSkpOworCQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcC5uYW1lKSk7CiAJc3RybGNweShmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAubmFtZSwgIkIyQzIgRmxleENvcCBJMkMgdG8gdHVuZXIiLAotCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzJdLmkyY19hZGFwLm5hbWUpKTsKKwkJCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAubmFtZSkpOwogCiAJaTJjX3NldF9hZGFwZGF0YSgmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLCAmZmMtPmZjX2kyY19hZGFwWzBdKTsKIAlpMmNfc2V0X2FkYXBkYXRhKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAsICZmYy0+ZmNfaTJjX2FkYXBbMV0pOwpAQCAtMjY4LDcgKzI3Nyw2IEBACiAJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXApOwogYWRhcF8xX2ZhaWxlZDoKIAlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzksNiArMjg3LDUgQEAKIAkJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXApOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcCk7CiAJfQotCiAJZmMtPmluaXRfc3RhdGUgJj0gfkZDX1NUQVRFX0kyQ19JTklUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKaW5kZXggOTNkMjBlNS4uZTU2NjI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1taXNjLmMgLSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1taXNjLmMgLSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKQEAgLTEyLDM5ICsxMCw0MyBAQAogCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLG1pc2NfMjA0KTsKIAogCXN3aXRjaCAodi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpIHsKLQkJY2FzZSAweDI6Ci0JCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUkuXG4iKTsKLQkJCWZjLT5yZXYgPSBGTEVYQ09QX0lJOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgzOgotCQkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJYi5cbiIpOwotCQkJZmMtPnJldiA9IEZMRVhDT1BfSUlCOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwOgotCQkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJSS5cbiIpOwotCQkJZmMtPnJldiA9IEZMRVhDT1BfSUlJOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIoInVua293biBGbGV4Q29wIFJldmlzaW9uOiAleC4gUGxlYXNlIHJlcG9ydCB0aGUgbGludXgtZHZiQGxpbnV4dHYub3JnLiIsdi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpOwotCQkJYnJlYWs7CisJY2FzZSAweDI6CisJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSS5cbiIpOworCQlmYy0+cmV2ID0gRkxFWENPUF9JSTsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSWIuXG4iKTsKKwkJZmMtPnJldiA9IEZMRVhDT1BfSUlCOworCQlicmVhazsKKwljYXNlIDB4MDoKKwkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJSS5cbiIpOworCQlmYy0+cmV2ID0gRkxFWENPUF9JSUk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigidW5rbm93biBGbGV4Q29wIFJldmlzaW9uOiAleC4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKKwkJCQkibGludXgtZHZiQGxpbnV4dHYub3JnLiIsCisJCQkJdi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpOworCQlicmVhazsKIAl9CiAKIAlpZiAoKGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciA9IHYubWlzY18yMDQuUmV2X05fc2lnX2NhcHMpKQotCQlkZWJfaW5mbygidGhpcyBGbGV4Q29wIGhhcyB0aGUgYWRkaXRpb25hbCAzMiBoYXJkd2FyZSBwaWQgZmlsdGVyLlxuIik7CisJCWRlYl9pbmZvKCJ0aGlzIEZsZXhDb3AgaGFzICIKKwkJCQkidGhlIGFkZGl0aW9uYWwgMzIgaGFyZHdhcmUgcGlkIGZpbHRlci5cbiIpOwogCWVsc2UKLQkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgb25seSB0aGUgNiBiYXNpYyBtYWluIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKKwkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgIgorCQkJCSJ0aGUgNiBiYXNpYyBtYWluIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKIAkvKiBidXMgcGFydHMgaGF2ZSB0byBkZWNpZGUgaWYgaHcgcGlkIGZpbHRlcmluZyBpcyB1c2VkIG9yIG5vdC4gKi8KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKmZsZXhjb3BfcmV2aXNpb25fbmFtZXNbXSA9IHsKLQkiVW5rb3duIGNoaXAiLAorCSJVbmtub3duIGNoaXAiLAogCSJGbGV4Q29wSUkiLAogCSJGbGV4Q29wSUliIiwKIAkiRmxleENvcElJSSIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqZmxleGNvcF9kZXZpY2VfbmFtZXNbXSA9IHsKLQkiVW5rb3duIGRldmljZSIsCisJIlVua25vd24gZGV2aWNlIiwKIAkiQWlyMlBDL0FpclN0YXIgMiBEVkItVCIsCiAJIkFpcjJQQy9BaXJTdGFyIDIgQVRTQyAxc3QgZ2VuZXJhdGlvbiIsCiAJIkFpcjJQQy9BaXJTdGFyIDIgQVRTQyAybmQgZ2VuZXJhdGlvbiIsCkBAIC02MSwyMSArNjMsMjMgQEAKIAkiUENJIiwKIH07CiAKLXZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLGNvbnN0IGNoYXIgKnByZWZpeCxjb25zdAotCQljaGFyICpzdWZmaXgpCit2b2lkIGZsZXhjb3BfZGV2aWNlX25hbWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCiB7Ci0JaW5mbygiJXMgJyVzJyBhdCB0aGUgJyVzJyBidXMgY29udHJvbGxlZCBieSBhICclcycgJXMiLHByZWZpeCwKLQkJCWZsZXhjb3BfZGV2aWNlX25hbWVzW2ZjLT5kZXZfdHlwZV0sZmxleGNvcF9idXNfbmFtZXNbZmMtPmJ1c190eXBlXSwKLQkJCWZsZXhjb3BfcmV2aXNpb25fbmFtZXNbZmMtPnJldl0sc3VmZml4KTsKKwlpbmZvKCIlcyAnJXMnIGF0IHRoZSAnJXMnIGJ1cyBjb250cm9sbGVkIGJ5IGEgJyVzJyAlcyIsCisJCQlwcmVmaXgsCWZsZXhjb3BfZGV2aWNlX25hbWVzW2ZjLT5kZXZfdHlwZV0sCisJCQlmbGV4Y29wX2J1c19uYW1lc1tmYy0+YnVzX3R5cGVdLAorCQkJZmxleGNvcF9yZXZpc2lvbl9uYW1lc1tmYy0+cmV2XSwgc3VmZml4KTsKIH0KIAotdm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSkKK3ZvaWQgZmxleGNvcF9kdW1wX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGludCBudW0pCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMscmVnKzQqaSk7Ci0JCWRlYl9yZHVtcCgiMHglMDN4OiAlMDh4LCAiLHJlZys0KmksIHYucmF3KTsKKwkJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHJlZys0KmkpOworCQlkZWJfcmR1bXAoIjB4JTAzeDogJTA4eCwgIiwgcmVnKzQqaSwgdi5yYXcpOwogCX0KIAlkZWJfcmR1bXAoIlxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKaW5kZXggNzZlMzdmZC4uMjI3YzAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtcGNpLmMgLSBjb3ZlcnMgdGhlIFBDSSBwYXJ0IGluY2x1ZGluZyBETUEgdHJhbnNmZXJzLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLXBjaS5jIC0gY292ZXJzIHRoZSBQQ0kgcGFydCBpbmNsdWRpbmcgRE1BIHRyYW5zZmVycworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KIAogI2RlZmluZSBGQ19MT0dfUFJFRklYICJmbGV4Y29wLXBjaSIKQEAgLTExLDcgKzksOCBAQAogCiBzdGF0aWMgaW50IGVuYWJsZV9waWRfZmlsdGVyaW5nID0gMTsKIG1vZHVsZV9wYXJhbShlbmFibGVfcGlkX2ZpbHRlcmluZywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3BpZF9maWx0ZXJpbmcsICJlbmFibGUgaGFyZHdhcmUgcGlkIGZpbHRlcmluZzogc3VwcG9ydGVkIHZhbHVlczogMCAoZnVsbHRzKSwgMSIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfcGlkX2ZpbHRlcmluZywKKwkiZW5hYmxlIGhhcmR3YXJlIHBpZCBmaWx0ZXJpbmc6IHN1cHBvcnRlZCB2YWx1ZXM6IDAgKGZ1bGx0cyksIDEiKTsKIAogc3RhdGljIGludCBpcnFfY2hrX2ludHYgPSAxMDA7CiBtb2R1bGVfcGFyYW0oaXJxX2Noa19pbnR2LCBpbnQsIDA2NDQpOwpAQCAtMjYsMTcgKzI1LDE3IEBACiAjZGVmaW5lIERFQlNUQVRVUyAiIChkZWJ1Z2dpbmcgaXMgbm90IGVuYWJsZWQpIgogI2VuZGlmCiAKLSNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgIGRwcmludGsoMHgwMSxhcmdzKQotI2RlZmluZSBkZWJfcmVnKGFyZ3MuLi4pICAgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKDB4MDQsYXJncykKLSNkZWZpbmUgZGViX2lycShhcmdzLi4uKSAgIGRwcmludGsoMHgwOCxhcmdzKQotI2RlZmluZSBkZWJfY2hrKGFyZ3MuLi4pICAgZHByaW50aygweDEwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSBkcHJpbnRrKDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSBkcHJpbnRrKDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9pcnEoYXJncy4uLikgZHByaW50aygweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfY2hrKGFyZ3MuLi4pIGRwcmludGsoMHgxMCwgYXJncykKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCiAJInNldCBkZWJ1ZyBsZXZlbCAoMT1pbmZvLDI9cmVncyw0PVRTLDg9aXJxZG1hLDE2PWNoZWNrICh8LWFibGUpKS4iCi0JIERFQlNUQVRVUyk7CisJREVCU1RBVFVTKTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgogI2RlZmluZSBEUklWRVJfTkFNRSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIERpZ2l0YWwgVFYgUENJIERyaXZlciIKQEAgLTUxLDMwICs1MCwzMCBAQAogCiAJdm9pZCBfX2lvbWVtICppb19tZW07CiAJdTMyIGlycTsKLS8qIGJ1ZmZlcnNpemUgKGF0IGxlYXN0IGZvciBETUExLCBuZWVkIHRvIGJlICUgMTg4ID09IDAsCi0gKiB0aGlzIGxvZ2ljIGlzIHJlcXVpcmVkICovCisJLyogYnVmZmVyc2l6ZSAoYXQgbGVhc3QgZm9yIERNQTEsIG5lZWQgdG8gYmUgJSAxODggPT0gMCwKKwkgKiB0aGlzIGxvZ2ljIGlzIHJlcXVpcmVkICovCiAjZGVmaW5lIEZDX0RFRkFVTFRfRE1BMV9CVUZTSVpFICgxMjgwICogMTg4KQogI2RlZmluZSBGQ19ERUZBVUxUX0RNQTJfQlVGU0laRSAoMTAgKiAxODgpCiAJc3RydWN0IGZsZXhjb3BfZG1hIGRtYVsyXTsKIAogCWludCBhY3RpdmVfZG1hMV9hZGRyOyAvKiAwID0gYWRkcjAgb2YgZG1hMTsgMSA9IGFkZHIxIG9mIGRtYTEgKi8KLQl1MzIgbGFzdF9kbWExX2N1cl9wb3M7IC8qIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIGxhc3QgdGltZSB0aGUgdGltZXIvcGFja2V0IGlycSBvY2N1cmVkICovCisJdTMyIGxhc3RfZG1hMV9jdXJfcG9zOworCS8qIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIGxhc3QgdGltZSB0aGUgdGltZXIvcGFja2V0IGlycSBvY2N1cmVkICovCiAJaW50IGNvdW50OwogCWludCBjb3VudF9wcmV2OwogCWludCBzdHJlYW1fcHJvYmxlbTsKIAogCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0KIAl1bnNpZ25lZCBsb25nIGxhc3RfaXJxOwogCiAJc3RydWN0IGRlbGF5ZWRfd29yayBpcnFfY2hlY2tfd29yazsKLQogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmNfZGV2OwogfTsKIAotc3RhdGljIGludCBsYXN0d3JlZyxsYXN0d3ZhbCxsYXN0cnJlZyxsYXN0cnZhbDsKK3N0YXRpYyBpbnQgbGFzdHdyZWcsIGxhc3R3dmFsLCBsYXN0cnJlZywgbGFzdHJ2YWw7CiAKLXN0YXRpYyBmbGV4Y29wX2liaV92YWx1ZSBmbGV4Y29wX3BjaV9yZWFkX2liaV9yZWcgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIpCitzdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF9wY2lfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIpCiB7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CkBAIC04MiwxOSArODEsMjAgQEAKIAogCWlmIChsYXN0cnJlZyAhPSByIHx8IGxhc3RydmFsICE9IHYucmF3KSB7CiAJCWxhc3RycmVnID0gcjsgbGFzdHJ2YWwgPSB2LnJhdzsKLQkJZGViX3JlZygibmV3IHJkOiAlM3g6ICUwOHhcbiIscix2LnJhdyk7CisJCWRlYl9yZWcoIm5ldyByZDogJTN4OiAlMDh4XG4iLCByLCB2LnJhdyk7CiAJfQogCiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9wY2lfd3JpdGVfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByLCBmbGV4Y29wX2liaV92YWx1ZSB2KQorc3RhdGljIGludCBmbGV4Y29wX3BjaV93cml0ZV9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIsIGZsZXhjb3BfaWJpX3ZhbHVlIHYpCiB7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCiAJaWYgKGxhc3R3cmVnICE9IHIgfHwgbGFzdHd2YWwgIT0gdi5yYXcpIHsKIAkJbGFzdHdyZWcgPSByOyBsYXN0d3ZhbCA9IHYucmF3OwotCQlkZWJfcmVnKCJuZXcgd3I6ICUzeDogJTA4eFxuIixyLHYucmF3KTsKKwkJZGViX3JlZygibmV3IHdyOiAlM3g6ICUwOHhcbiIsIHIsIHYucmF3KTsKIAl9CiAKIAl3cml0ZWwodi5yYXcsIGZjX3BjaS0+aW9fbWVtICsgcik7CkBAIC0xMTMsMTUgKzExMywxNiBAQAogCQkJZGViX2Noaygibm8gSVJRIHNpbmNlIHRoZSBsYXN0IGNoZWNrXG4iKTsKIAkJCWlmIChmY19wY2ktPnN0cmVhbV9wcm9ibGVtKysgPT0gMykgewogCQkJCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZDsKKwkJCQlkZWJfaW5mbygiZmxleGNvcC1wY2k6IHN0cmVhbSBwcm9ibGVtLCByZXNldHRpbmcgcGlkIGZpbHRlclxuIik7CiAKIAkJCQlzcGluX2xvY2tfaXJxKCZmYy0+ZGVtdXgubG9jayk7CiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmZWVkLCAmZmMtPmRlbXV4LmZlZWRfbGlzdCwKLQkJCQkJbGlzdF9oZWFkKSB7CisJCQkJCQlsaXN0X2hlYWQpIHsKIAkJCQkJZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBmZWVkLCAwKTsKIAkJCQl9CiAKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmYy0+ZGVtdXguZmVlZF9saXN0LAotCQkJCQlsaXN0X2hlYWQpIHsKKwkJCQkJCWxpc3RfaGVhZCkgewogCQkJCQlmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsIGZlZWQsIDEpOwogCQkJCX0KIAkJCQlzcGluX3VubG9ja19pcnEoJmZjLT5kZW11eC5sb2NrKTsKQEAgLTE0OSwxMSArMTUwLDEwIEBACiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlpcnFyZXR1cm5fdCByZXQgPSBJUlFfSEFORExFRDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmY19wY2ktPmlycV9sb2NrLGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmNfcGNpLT5pcnFfbG9jaywgZmxhZ3MpOworCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBpcnFfMjBjKTsKIAotCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGlycV8yMGMpOwotCi0gICAvKiBlcnJvcnMgKi8KKwkvKiBlcnJvcnMgKi8KIAlpZiAodi5pcnFfMjBjLkRhdGFfcmVjZWl2ZXJfZXJyb3IpCiAJCWRlYl9jaGsoImRhdGEgcmVjZWl2ZXIgZXJyb3JcbiIpOwogCWlmICh2LmlycV8yMGMuQ29udGludWl0eV9lcnJvcl9mbGFnKQpAQCAtMTY0LDI0ICsxNjQsMjkgQEAKIAkJZGViX2NoaygiVHJhbnNwb3J0IGVycm9yXG4iKTsKIAogCWlmICgoZmNfcGNpLT5jb3VudCAlIDEwMDApID09IDApCi0JCWRlYl9jaGsoIiVkIHZhbGlkIGlycSB0b29rIHBsYWNlIHNvIGZhclxuIixmY19wY2ktPmNvdW50KTsKKwkJZGViX2NoaygiJWQgdmFsaWQgaXJxIHRvb2sgcGxhY2Ugc28gZmFyXG4iLCBmY19wY2ktPmNvdW50KTsKIAogCWlmICh2LmlycV8yMGMuRE1BMV9JUlFfU3RhdHVzID09IDEpIHsKIAkJaWYgKGZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkciA9PSAwKQotCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LGZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCxmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKKwkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldiwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwLAorCQkJCQlmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKIAkJZWxzZQotCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LGZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMSxmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKKwkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldiwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIxLAorCQkJCQlmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKIAogCQlkZWJfaXJxKCJwYWdlIGNoYW5nZSB0byBwYWdlOiAlZFxuIiwhZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyKTsKIAkJZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyID0gIWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkcjsKLQl9IGVsc2UgaWYgKHYuaXJxXzIwYy5ETUExX1RpbWVyX1N0YXR1cyA9PSAxKSB7CiAJCS8qIGZvciB0aGUgdGltZXIgSVJRIHdlIG9ubHkgY2FuIHVzZSBidWZmZXIgZG14IGZlZWRpbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQogCQkgKiBjb21wbGV0ZSBUUyBwYWNrZXRzIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBETUEgbWVtb3J5ICovCisJfSBlbHNlIGlmICh2LmlycV8yMGMuRE1BMV9UaW1lcl9TdGF0dXMgPT0gMSkgewogCQlkbWFfYWRkcl90IGN1cl9hZGRyID0KIAkJCWZjLT5yZWFkX2liaV9yZWcoZmMsZG1hMV8wMDgpLmRtYV8weDguZG1hX2N1cl9hZGRyIDw8IDI7CiAJCXUzMiBjdXJfcG9zID0gY3VyX2FkZHIgLSBmY19wY2ktPmRtYVswXS5kbWFfYWRkcjA7CiAKLQkJZGViX2lycSgiJXUgaXJxOiAlMDh4IGN1cl9hZGRyOiAlbGx4OiBjdXJfcG9zOiAlMDh4LCBsYXN0X2N1cl9wb3M6ICUwOHggIiwKKwkJZGViX2lycSgiJXUgaXJxOiAlMDh4IGN1cl9hZGRyOiAlbGx4OiBjdXJfcG9zOiAlMDh4LCAiCisJCQkibGFzdF9jdXJfcG9zOiAlMDh4ICIsCiAJCQkJamlmZmllc190b191c2VjcyhqaWZmaWVzIC0gZmNfcGNpLT5sYXN0X2lycSksCiAJCQkJdi5yYXcsICh1bnNpZ25lZCBsb25nIGxvbmcpY3VyX2FkZHIsIGN1cl9wb3MsCiAJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CkBAIC0xOTEsMzAgKzE5NiwzNiBAQAogCQkgKiBwYXNzIHRoZSBkYXRhIGZyb20gbGFzdF9jdXJfcG9zIHRvIHRoZSBidWZmZXIgZW5kIHRvIHRoZSBkZW11eAogCQkgKi8KIAkJaWYgKGN1cl9wb3MgPCBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKSB7Ci0JCQlkZWJfaXJxKCIgZW5kIHdhcyByZWFjaGVkOiBwYXNzaW5nICVkIGJ5dGVzICIsKGZjX3BjaS0+ZG1hWzBdLnNpemUqMiAtIDEpIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQlkZWJfaXJxKCIgZW5kIHdhcyByZWFjaGVkOiBwYXNzaW5nICVkIGJ5dGVzICIsCisJCQkJKGZjX3BjaS0+ZG1hWzBdLnNpemUqMiAtIDEpIC0KKwkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJCWZsZXhjb3BfcGFzc19kbXhfZGF0YShmY19wY2ktPmZjX2RldiwKLQkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsgZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKLQkJCQkJKGZjX3BjaS0+ZG1hWzBdLnNpemUqMikgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKKwkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKworCQkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAorCQkJCShmY19wY2ktPmRtYVswXS5zaXplKjIpIC0KKwkJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CiAJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zID0gMDsKIAkJfQogCiAJCWlmIChjdXJfcG9zID4gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcykgewotCQkJZGViX2lycSgiIHBhc3NpbmcgJWQgYnl0ZXMgIixjdXJfcG9zIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQlkZWJfaXJxKCIgcGFzc2luZyAlZCBieXRlcyAiLAorCQkJCWN1cl9wb3MgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJCWZsZXhjb3BfcGFzc19kbXhfZGF0YShmY19wY2ktPmZjX2RldiwKLQkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsgZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKLQkJCQkJY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCArCisJCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MsCisJCQkJY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQl9CiAJCWRlYl9pcnEoIlxuIik7CiAKIAkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IGN1cl9wb3M7CiAJCWZjX3BjaS0+Y291bnQrKzsKIAl9IGVsc2UgewotCQlkZWJfaXJxKCJpc3IgZm9yIGZsZXhjb3AgY2FsbGVkLCBhcHBhcmVudGx5IHdpdGhvdXQgcmVhc29uICglMDh4KVxuIix2LnJhdyk7CisJCWRlYl9pcnEoImlzciBmb3IgZmxleGNvcCBjYWxsZWQsICIKKwkJCSJhcHBhcmVudGx5IHdpdGhvdXQgcmVhc29uICglMDh4KVxuIiwgdi5yYXcpOwogCQlyZXQgPSBJUlFfTk9ORTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmY19wY2ktPmlycV9sb2NrLGZsYWdzKTsKLQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjX3BjaS0+aXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjIsNTIgKzIzMyw0OCBAQAogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlpZiAob25vZmYpIHsKLQkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCZmY19wY2ktPmRtYVswXSxGQ19ETUFfMSk7Ci0JCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywmZmNfcGNpLT5kbWFbMV0sRkNfRE1BXzIpOwotCi0JCWZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihmYyxGQ19ETUFfMSwwKTsKLQotCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsRkNfRE1BXzEsRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsMSk7CisJCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywgJmZjX3BjaS0+ZG1hWzBdLCBGQ19ETUFfMSk7CisJCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywgJmZjX3BjaS0+ZG1hWzFdLCBGQ19ETUFfMik7CisJCWZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihmYywgRkNfRE1BXzEsIDApOworCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsIEZDX0RNQV8xLAorCQkJCUZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLCAxKTsKIAkJZGViX2lycSgiRE1BIHhmZXIgZW5hYmxlZFxuIik7CiAKIAkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IDA7Ci0JCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLEZDX0RNQV8xLDEpOworCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYywgRkNfRE1BXzEsIDEpOwogCQlkZWJfaXJxKCJJUlEgZW5hYmxlZFxuIik7Ci0KIAkJZmNfcGNpLT5jb3VudF9wcmV2ID0gZmNfcGNpLT5jb3VudDsKLQotLy8JCWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkciA9IDA7Ci0vLwkJZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShmYyxGQ19ETUFfMSwxKTsKLQogCX0gZWxzZSB7Ci0JCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLEZDX0RNQV8xLDApOworCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYywgRkNfRE1BXzEsIDApOwogCQlkZWJfaXJxKCJJUlEgZGlzYWJsZWRcbiIpOwogCi0vLwkJZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShmYyxGQ19ETUFfMSwwKTsKLQotCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsRkNfRE1BXzEsRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsMCk7CisJCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYywgRkNfRE1BXzEsCisJCQkgRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsIDApOwogCQlkZWJfaXJxKCJETUEgeGZlciBkaXNhYmxlZFxuIik7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9wY2lfZG1hX2luaXQoc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kpCiB7CiAJaW50IHJldDsKLQlpZiAoKHJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwmZmNfcGNpLT5kbWFbMF0sRkNfREVGQVVMVF9ETUExX0JVRlNJWkUpKSAhPSAwKQorCXJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwgJmZjX3BjaS0+ZG1hWzBdLAorCQkJRkNfREVGQVVMVF9ETUExX0JVRlNJWkUpOworCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gZmxleGNvcF9kbWFfYWxsb2NhdGUoZmNfcGNpLT5wZGV2LCZmY19wY2ktPmRtYVsxXSxGQ19ERUZBVUxUX0RNQTJfQlVGU0laRSkpICE9IDApIHsKKwlyZXQgPSBmbGV4Y29wX2RtYV9hbGxvY2F0ZShmY19wY2ktPnBkZXYsICZmY19wY2ktPmRtYVsxXSwKKwkJCUZDX0RFRkFVTFRfRE1BMl9CVUZTSVpFKTsKKwlpZiAocmV0ICE9IDApIHsKIAkJZmxleGNvcF9kbWFfZnJlZSgmZmNfcGNpLT5kbWFbMF0pOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldixGQ19TUkFNX0RFU1RfTUVESUEgfCBGQ19TUkFNX0RFU1RfTkVULCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTEpOwotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldixGQ19TUkFNX0RFU1RfQ0FPICAgfCBGQ19TUkFNX0RFU1RfQ0FJLCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTIpOwotCisJZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3BjaS0+ZmNfZGV2LCBGQ19TUkFNX0RFU1RfTUVESUEgfAorCQkJRkNfU1JBTV9ERVNUX05FVCwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUExKTsKKwlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsIEZDX1NSQU1fREVTVF9DQU8gfAorCQkJRkNfU1JBTV9ERVNUX0NBSSwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUEyKTsKIAlmY19wY2ktPmluaXRfc3RhdGUgfD0gRkNfUENJX0RNQV9JTklUOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkwLDEyICsyOTcsOCBAQAogCiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShmY19wY2ktPnBkZXYpKSAhPSAwKQogCQlyZXR1cm4gcmV0OwotCiAJcGNpX3NldF9tYXN0ZXIoZmNfcGNpLT5wZGV2KTsKIAotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JLy8gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDZjLCAweDgwMDApOwotCiAJaWYgKChyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGZjX3BjaS0+cGRldiwgRFJJVkVSX05BTUUpKSAhPSAwKQogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CiAKQEAgLTMzOCw4ICszNDEsOCBAQAogCWZjX3BjaS0+aW5pdF9zdGF0ZSAmPSB+RkNfUENJX0lOSVQ7CiB9CiAKLQotc3RhdGljIGludCBmbGV4Y29wX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgZmxleGNvcF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYzsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaTsKQEAgLTM1MCw3ICszNTMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCisJLyogZ2VuZXJhbCBmbGV4Y29wIGluaXQgKi8KIAlmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCWZjX3BjaS0+ZmNfZGV2ID0gZmM7CiAKQEAgLTM1OCw3ICszNjEsNiBAQAogCWZjLT53cml0ZV9pYmlfcmVnID0gZmxleGNvcF9wY2lfd3JpdGVfaWJpX3JlZzsKIAlmYy0+aTJjX3JlcXVlc3QgPSBmbGV4Y29wX2kyY19yZXF1ZXN0OwogCWZjLT5nZXRfbWFjX2FkZHIgPSBmbGV4Y29wX2VlcHJvbV9jaGVja19tYWNfYWRkcjsKLQogCWZjLT5zdHJlYW1fY29udHJvbCA9IGZsZXhjb3BfcGNpX3N0cmVhbV9jb250cm9sOwogCiAJaWYgKGVuYWJsZV9waWRfZmlsdGVyaW5nKQpAQCAtMzY4LDI5ICszNzAsMjkgQEAKIAogCWZjLT5waWRfZmlsdGVyaW5nID0gZW5hYmxlX3BpZF9maWx0ZXJpbmc7CiAJZmMtPmJ1c190eXBlID0gRkNfUENJOwotCiAJZmMtPmRldiA9ICZwZGV2LT5kZXY7CiAJZmMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCisJLyogYnVzIHNwZWNpZmljIHBhcnQgKi8KIAlmY19wY2ktPnBkZXYgPSBwZGV2OwogCWlmICgocmV0ID0gZmxleGNvcF9wY2lfaW5pdChmY19wY2kpKSAhPSAwKQogCQlnb3RvIGVycl9rZnJlZTsKIAotLyogaW5pdCBmbGV4Y29wICovCisJLyogaW5pdCBmbGV4Y29wICovCiAJaWYgKChyZXQgPSBmbGV4Y29wX2RldmljZV9pbml0aWFsaXplKGZjKSkgIT0gMCkKIAkJZ290byBlcnJfcGNpX2V4aXQ7CiAKLS8qIGluaXQgZG1hICovCisJLyogaW5pdCBkbWEgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfcGNpX2RtYV9pbml0KGZjX3BjaSkpICE9IDApCiAJCWdvdG8gZXJyX2ZjX2V4aXQ7CiAKIAlJTklUX0RFTEFZRURfV09SSygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywgZmxleGNvcF9wY2lfaXJxX2NoZWNrX3dvcmspOwogCi0JCWlmIChpcnFfY2hrX2ludHYgPiAwKQotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZmY19wY2ktPmlycV9jaGVja193b3JrLAotCQltc2Vjc190b19qaWZmaWVzKGlycV9jaGtfaW50diA8IDEwMCA/IDEwMCA6IGlycV9jaGtfaW50dikpOwotCisJaWYgKGlycV9jaGtfaW50diA+IDApCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKGlycV9jaGtfaW50diA8IDEwMCA/CisJCQkJCTEwMCA6CisJCQkJCWlycV9jaGtfaW50dikpOwogCXJldHVybiByZXQ7CiAKIGVycl9mY19leGl0OgpAQCAtNDIwLDcgKzQyMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmbGV4Y29wX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxM2QwLCAweDIxMDMpIH0sCi0vKgl7IFBDSV9ERVZJQ0UoMHgxM2QwLCAweDIyMDApIH0sID8gKi8KIAl7IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKaW5kZXggNzU5OWZjYy4uZGM0NTI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaApAQCAtMSwxNCArMSwxMSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKICAqIGZsZXhjb3AtcmVnLmggLSByZWdpc3RlciBhYnN0cmFjdGlvbiBmb3IgRmxleENvcElJLCBGbGV4Q29wSUliIGFuZCBGbGV4Q29wSUlJCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpZm5kZWYgX19GTEVYQ09QX1JFR19IX18KICNkZWZpbmUgX19GTEVYQ09QX1JFR19IX18KIAotCiB0eXBlZGVmIGVudW0gewogCUZMRVhDT1BfVU5LID0gMCwKIAlGTEVYQ09QX0lJLApAQCAtMTgsMTMgKzE1LDEzIEBACiAKIHR5cGVkZWYgZW51bSB7CiAJRkNfVU5LID0gMCwKLQlGQ19BSVJfRFZCLAorCUZDX0NBQkxFLAorCUZDX0FJUl9EVkJULAogCUZDX0FJUl9BVFNDMSwKIAlGQ19BSVJfQVRTQzIsCi0JRkNfU0tZLAotCUZDX1NLWV9PTEQsCi0JRkNfQ0FCTEUsCiAJRkNfQUlSX0FUU0MzLAorCUZDX1NLWV9SRVYyMywKKwlGQ19TS1lfUkVWMjYsCiAJRkNfU0tZX1JFVjI3LAogCUZDX1NLWV9SRVYyOCwKIH0gZmxleGNvcF9kZXZpY2VfdHlwZV90OwpAQCAtMzYsMTIgKzMzLDEyIEBACiAKIC8qIEZsZXhDb3AgSUJJIFJlZ2lzdGVycyAqLwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9sZS5oIgorI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgiCiAjZWxzZQogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9iZS5oIgorI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgiCiAjZWxzZQotCSNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAorI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXNyYW0uYwppbmRleCBjZGE2OTUyLi5mMjE5OWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1zcmFtLmMKQEAgLTEsNDUgKzEsNDMgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3Atc3JhbS5jIC0gZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgU1JBTS4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1zcmFtLmMgLSBmdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBTUkFNCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAotc3RhdGljIHZvaWQgZmxleGNvcF9zcmFtX3NldF9jaGlwIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fdHlwZV90IHR5cGUpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3NyYW1fc2V0X2NoaXAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9zcmFtX3R5cGVfdCB0eXBlKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZSh3YW5fY3RybF9yZWdfNzFjLHNyYW1fY2hpcCx0eXBlKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUod2FuX2N0cmxfcmVnXzcxYywgc3JhbV9jaGlwLCB0eXBlKTsKIH0KIAogaW50IGZsZXhjb3Bfc3JhbV9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CiAJc3dpdGNoIChmYy0+cmV2KSB7Ci0JCWNhc2UgRkxFWENPUF9JSToKLQkJY2FzZSBGTEVYQ09QX0lJQjoKLQkJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYyxGQ19TUkFNXzFfMzJLQik7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEVYQ09QX0lJSToKLQkJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYyxGQ19TUkFNXzFfNDhLQik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgRkxFWENPUF9JSToKKwljYXNlIEZMRVhDT1BfSUlCOgorCQlmbGV4Y29wX3NyYW1fc2V0X2NoaXAoZmMsIEZDX1NSQU1fMV8zMktCKTsKKwkJYnJlYWs7CisJY2FzZSBGTEVYQ09QX0lJSToKKwkJZmxleGNvcF9zcmFtX3NldF9jaGlwKGZjLCBGQ19TUkFNXzFfNDhLQik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsIGZsZXhjb3Bfc3JhbV9kZXN0X3RhcmdldF90IHRhcmdldCkKK2ludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LAorCQkgZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7Ci0KLQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxzcmFtX2Rlc3RfcmVnXzcxNCk7CisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHNyYW1fZGVzdF9yZWdfNzE0KTsKIAogCWlmIChmYy0+cmV2ICE9IEZMRVhDT1BfSUlJICYmIHRhcmdldCA9PSBGQ19TUkFNX0RFU1RfVEFSR0VUX0ZDM19DQSkgewogCQllcnIoIlNSQU0gZGVzdGluYXRpb24gdGFyZ2V0IHRvIGF2YWlsYWJsZSBvbiBGbGV4Q29wSUkoYilcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlkZWJfc3JhbSgic3JhbSBkZXN0OiAleCB0YXJnZXQ6ICV4XG4iLGRlc3QsIHRhcmdldCk7CisJZGViX3NyYW0oInNyYW0gZGVzdDogJXggdGFyZ2V0OiAleFxuIiwgZGVzdCwgdGFyZ2V0KTsKIAogCWlmIChkZXN0ICYgRkNfU1JBTV9ERVNUX05FVCkKIAkJdi5zcmFtX2Rlc3RfcmVnXzcxNC5ORVRfRGVzdCA9IHRhcmdldDsKQEAgLTE1NCwxNCArMTUyLDEyIEBACiAJCWVsc2UKIAkJCWJhbmsgPSAweDEwMDAwMDAwOwogCX0KLQogCWZsZXhfc3JhbV93cml0ZShhZGFwdGVyLCBiYW5rLCBhZGRyICYgMHg3ZmZmLCBidWYsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNyYW1fcmVhZF9jaHVuayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJdTMyIGJhbms7Ci0KIAliYW5rID0gMDsKIAogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkgewpAQCAtMTc0LDI2ICsxNzAsMjIgQEAKIAkJZWxzZQogCQkJYmFuayA9IDB4MTAwMDAwMDA7CiAJfQotCiAJZmxleF9zcmFtX3JlYWQoYWRhcHRlciwgYmFuaywgYWRkciAmIDB4N2ZmZiwgYnVmLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBzcmFtX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQogewogCXUzMiBsZW5ndGg7Ci0KIAl3aGlsZSAobGVuICE9IDApIHsKIAkJbGVuZ3RoID0gbGVuOwotCi0JCS8vIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKLQkJLy8gMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHJlYWQgZnJvbQotCQkvLyBvbmUgY2hpcCBhdCBhIHRpbWUuCisJCS8qIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKKwkJICogMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHJlYWQKKwkJICogZnJvbSBvbmUgY2hpcCBhdCBhIHRpbWUgKi8KIAkJaWYgKChhZGRyID4+IDB4MGYpICE9ICgoYWRkciArIGxlbiAtIDEpID4+IDB4MGYpKSB7CiAJCQlsZW5ndGggPSAoKChhZGRyID4+IDB4MGYpICsgMSkgPDwgMHgwZikgLSBhZGRyOwogCQl9CiAKIAkJc3JhbV9yZWFkX2NodW5rKGFkYXB0ZXIsIGFkZHIsIGJ1ZiwgbGVuZ3RoKTsKLQogCQlhZGRyID0gYWRkciArIGxlbmd0aDsKIAkJYnVmID0gYnVmICsgbGVuZ3RoOwogCQlsZW4gPSBsZW4gLSBsZW5ndGg7CkBAIC0yMDMsMTkgKzE5NSwxNyBAQAogc3RhdGljIHZvaWQgc3JhbV93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCiB7CiAJdTMyIGxlbmd0aDsKLQogCXdoaWxlIChsZW4gIT0gMCkgewogCQlsZW5ndGggPSBsZW47CiAKLQkJLy8gY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZQotCQkvLyAzMksgbWVtb3J5IGNoaXAuIElmIG5vdCwgdGhlIGRhdGEgaXMgd3JpdHRlbiB0bwotCQkvLyBvbmUgY2hpcCBhdCBhIHRpbWUuCisJCS8qIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKKwkJICogMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzCisJCSAqIHdyaXR0ZW4gdG8gb25lIGNoaXAgYXQgYSB0aW1lICovCiAJCWlmICgoYWRkciA+PiAweDBmKSAhPSAoKGFkZHIgKyBsZW4gLSAxKSA+PiAweDBmKSkgewogCQkJbGVuZ3RoID0gKCgoYWRkciA+PiAweDBmKSArIDEpIDw8IDB4MGYpIC0gYWRkcjsKIAkJfQogCiAJCXNyYW1fd3JpdGVfY2h1bmsoYWRhcHRlciwgYWRkciwgYnVmLCBsZW5ndGgpOwotCiAJCWFkZHIgPSBhZGRyICsgbGVuZ3RoOwogCQlidWYgPSBidWYgKyBsZW5ndGg7CiAJCWxlbiA9IGxlbiAtIGxlbmd0aDsKQEAgLTIyNCwzOSArMjE0LDI5IEBACiAKIHN0YXRpYyB2b2lkIHNyYW1fc2V0X3NpemUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtYXNrKQogewotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgKG1hc2sgfCAofjB4MzAwMDAgJiByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykpKSk7CisJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLAorCQkJKG1hc2sgfCAofjB4MzAwMDAgJiByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNyYW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgdG1wOwotCiAJdG1wID0gcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpOwotCiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAxKTsKIAogCWlmIChyZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykgIT0gMCkgewogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIHRtcCk7Ci0KIAkJYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gdG1wICYgMHgzMDAwMDsKLQogCQlkZHByaW50aygiJXM6IGR3X3NyYW1fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKLQogCX0gZWxzZSB7Ci0KIAkJYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gMHgxMDAwMDsKLQogCQlkZHByaW50aygiJXM6IGR3X3NyYW1fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKIAl9Ci0KLQkvKiByZXR1cm4gdmFsdWUgaXMgbmV2ZXIgdXNlZD8gKi8KLS8qCXJldHVybiBhZGFwdGVyLT5kd19zcmFtX3R5cGU7ICovCiB9CiAKIHN0YXRpYyBpbnQgc3JhbV90ZXN0X2xvY2F0aW9uKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbWFzaywgdTMyIGFkZHIpCiB7CiAJdTggdG1wMSwgdG1wMjsKLQogCWRwcmludGsoIiVzOiBtYXNrID0gJXgsIGFkZHIgPSAleFxuIiwgX19mdW5jX18sIG1hc2ssIGFkZHIpOwogCiAJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCBtYXNrKTsKQEAgLTI2OSw3ICsyNDksNiBAQAogCXNyYW1fd3JpdGUoYWRhcHRlciwgYWRkciArIDQsICZ0bXAxLCAxKTsKIAogCXRtcDIgPSAwOwotCiAJbWRlbGF5KDIwKTsKIAogCXNyYW1fcmVhZChhZGFwdGVyLCBhZGRyLCAmdG1wMiwgMSk7CkBAIC0yODcsNyArMjY2LDYgQEAKIAlzcmFtX3dyaXRlKGFkYXB0ZXIsIGFkZHIgKyA0LCAmdG1wMSwgMSk7CiAKIAl0bXAyID0gMDsKLQogCW1kZWxheSgyMCk7CiAKIAlzcmFtX3JlYWQoYWRhcHRlciwgYWRkciwgJnRtcDIsIDEpOwpAQCAtMjk3LDI2ICsyNzUsMjQgQEAKIAogCWlmICh0bXAyICE9IDB4NWEpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB1MzIgc3JhbV9sZW5ndGgoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDEwMDAwKQotCQlyZXR1cm4gMzI3Njg7CS8vICAzMksKKwkJcmV0dXJuIDMyNzY4OyAvKiAzMksgKi8KIAlpZiAoYWRhcHRlci0+ZHdfc3JhbV90eXBlID09IDB4MDAwMDApCi0JCXJldHVybiA2NTUzNjsJLy8gIDY0SworCQlyZXR1cm4gNjU1MzY7IC8qIDY0SyAqLwogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkKLQkJcmV0dXJuIDEzMTA3MjsJLy8gMTI4SwotCi0JcmV0dXJuIDMyNzY4OwkJLy8gMzJLCisJCXJldHVybiAxMzEwNzI7IC8qIDEyOEsgKi8KKwlyZXR1cm4gMzI3Njg7IC8qIDMySyAqLwogfQogCiAvKiBGbGV4Y29wSUkgY2FuIHdvcmsgd2l0aCAzMkssIDY0SyBvciAxMjhLIG9mIGV4dGVybmFsIFNSQU0gbWVtb3J5LgotICAgIC0gZm9yIDEyOEsgdGhlcmUgYXJlIDR4MzJLIGNoaXBzIGF0IGJhbmsgMCwxLDIsMy4KLSAgICAtIGZvciAgNjRLIHRoZXJlIGFyZSAyeDMySyBjaGlwcyBhdCBiYW5rIDEsMi4KLSAgICAtIGZvciAgMzJLIHRoZXJlIGlzIG9uZSAzMksgY2hpcCBhdCBiYW5rIDAuCisgICAtIGZvciAxMjhLIHRoZXJlIGFyZSA0eDMySyBjaGlwcyBhdCBiYW5rIDAsMSwyLDMuCisgICAtIGZvciAgNjRLIHRoZXJlIGFyZSAyeDMySyBjaGlwcyBhdCBiYW5rIDEsMi4KKyAgIC0gZm9yICAzMksgdGhlcmUgaXMgb25lIDMySyBjaGlwIGF0IGJhbmsgMC4KIAogICAgRmxleENvcCB3b3JrcyBvbmx5IHdpdGggb25lIGJhbmsgYXQgYSB0aW1lLiBUaGUgYmFuayBpcyBzZWxlY3RlZAogICAgYnkgYml0cyAyOC0yOSBvZiB0aGUgMHg3MDAgcmVnaXN0ZXIuCkBAIC0zMjQsMjQgKzMwMCwxOCBAQAogICAgYmFuayAwIGNvdmVycyBhZGRyZXNzZXMgMHgwMDAwMC0weDA3ZmZmCiAgICBiYW5rIDEgY292ZXJzIGFkZHJlc3NlcyAweDA4MDAwLTB4MGZmZmYKICAgIGJhbmsgMiBjb3ZlcnMgYWRkcmVzc2VzIDB4MTAwMDAtMHgxN2ZmZgotICAgYmFuayAzIGNvdmVycyBhZGRyZXNzZXMgMHgxODAwMC0weDFmZmZmCi0qLworICAgYmFuayAzIGNvdmVycyBhZGRyZXNzZXMgMHgxODAwMC0weDFmZmZmICovCiAKIHN0YXRpYyBpbnQgZmxleGNvcF9zcmFtX2RldGVjdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHIyMDgscjcxY18wLHZyNzFjXzE7Ci0KKwlmbGV4Y29wX2liaV92YWx1ZSByMjA4LCByNzFjXzAsIHZyNzFjXzE7CiAJcjIwOCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYywgY3RybF8yMDgsIGliaV96ZXJvKTsKIAogCXI3MWNfMCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHdhbl9jdHJsX3JlZ183MWMpOwotCiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAxKTsKLQogCXRtcDMgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYyk7Ci0KIAlkcHJpbnRrKCIlczogdG1wMyA9ICV4XG4iLCBfX2Z1bmNfXywgdG1wMyk7Ci0KIAl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIHRtcDIpOwogCiAJLy8gY2hlY2sgZm9yIGludGVybmFsIFNSQU0gPz8/CkBAIC0zNTAsOSArMzIwLDcgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDMyS1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiAzMjsKIAl9CiAKQEAgLTM2MCw5ICszMjgsNyBAQAogCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MjAwMDApOwogCQlzcmFtX2luaXQoYWRhcHRlcik7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gMTI4S1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiAxMjg7CiAJfQogCkBAIC0zNzAsOSArMzM2LDcgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDAwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDY0S1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiA2NDsKIAl9CiAKQEAgLTM4MCwxOCArMzQ0LDE0IEBACiAJCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgxMDAwMCk7CiAJCXNyYW1faW5pdChhZGFwdGVyKTsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSAzMktcbiIsIF9fZnVuY19fKTsKLQogCQlyZXR1cm4gMzI7CiAJfQogCiAJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKIAlzcmFtX2luaXQoYWRhcHRlcik7CiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJZHByaW50aygiJXM6IFNSQU0gZGV0ZWN0aW9uIGZhaWxlZC4gU2V0IHRvIDMySyBcbiIsIF9fZnVuY19fKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKaW5kZXggYWUwZDc2YS4uYmVkY2ZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYwpAQCAtMSwxMSArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLXVzYi5jIC0gY292ZXJzIHRoZSBVU0IgcGFydC4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC11c2IuYyAtIGNvdmVycyB0aGUgVVNCIHBhcnQKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCi0KICNkZWZpbmUgRkNfTE9HX1BSRUZJWCAiZmxleGNvcF91c2IiCiAjaW5jbHVkZSAiZmxleGNvcC11c2IuaCIKICNpbmNsdWRlICJmbGV4Y29wLWNvbW1vbi5oIgpAQCAtMTgsNDIgKzE1LDQ3IEBACiAvKiBkZWJ1ZyAqLwogI2lmZGVmIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QX0RFQlVHCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikgXAotCSAgICBkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRlYnVnX2R1bXAoYixsLG1ldGhvZCkge1wKKwlkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHByaW50ayhhcmdzKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJ1Z19kdW1wKGIsIGwsIG1ldGhvZCkgZG8ge1wKIAlpbnQgaTsgXAotCWZvciAoaSA9IDA7IGkgPCBsOyBpKyspIG1ldGhvZCgiJTAyeCAiLCBiW2ldKTsgXAotCW1ldGhvZCgiXG4iKTtcCi19CisJZm9yIChpID0gMDsgaSA8IGw7IGkrKykgXAorCQltZXRob2QoIiUwMnggIiwgYltpXSk7IFwKKwltZXRob2QoIlxuIik7IFwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgREVCU1RBVFVTICIiCiAjZWxzZQotI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pCi0jZGVmaW5lIGRlYnVnX2R1bXAoYixsLG1ldGhvZCkKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgYXJncy4uLikKKyNkZWZpbmUgZGVidWdfZHVtcChiLCBsLCBtZXRob2QpCiAjZGVmaW5lIERFQlNUQVRVUyAiIChkZWJ1Z2dpbmcgaXMgbm90IGVuYWJsZWQpIgogI2VuZGlmCiAKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHRzPTIsY3RybD00LGkyYz04LHY4bWVtPTE2IChvci1hYmxlKSkuIiBERUJTVEFUVVMpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyx0cz0yLCIKKwkJImN0cmw9NCxpMmM9OCx2OG1lbT0xNiAob3ItYWJsZSkpLiIgREVCU1RBVFVTKTsKICN1bmRlZiBERUJTVEFUVVMKIAotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pICAgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9jdHJsKGFyZ3MuLi4pIGRwcmludGsoMHgwNCxhcmdzKQotI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX3Y4KGFyZ3MuLi4pICAgZHByaW50aygweDEwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pIGRwcmludGsoMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX2N0cmwoYXJncy4uLikgZHByaW50aygweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pIGRwcmludGsoMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX3Y4KGFyZ3MuLi4pIGRwcmludGsoMHgxMCwgYXJncykKIAogLyogSkxQIDExMTcwMDogd2Ugd2lsbCBpbmNsdWRlIHRoZSAxIGJpdCBnYXAgYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIDMgYml0cwogICogaW4gdGhlIElCSSBhZGRyZXNzLCB0byBtYWtlIHRoZSBWOCBjb2RlIHNpbXBsZXIuCi0gKiBQQ0kgQUREUkVTUyBGT1JNQVQ6IDB4NzFDIC0+IDAwMDAgMDExMSAwMDAxIDExMDAgKHRoZXNlIGFyZSB0aGUgc2l4IGJpdHMgdXNlZCkKKyAqIFBDSSBBRERSRVNTIEZPUk1BVDogMHg3MUMgLT4gMDAwMCAwMTExIDAwMDEgMTEwMCAodGhlIHNpeCBiaXRzIHVzZWQpCiAgKiAgICAgICAgICAgICAgICAgIGluIGdlbmVyYWw6IDAwMDAgMEhISCAwMDBMIExMMDAKICAqIElCSSBBRERSRVNTIEZPUk1BVDogICAgICAgICAgICAgICAgICAgIFJISEggQkxMTAogICoKICAqIHdoZXJlIFIgaXMgdGhlIHJlYWQoMSkvd3JpdGUoMCkgYml0LCBCIGlzIHRoZSBidXN5IGJpdAogICogYW5kIEhISCBhbmQgTExMIGFyZSB0aGUgdHdvIHNldHMgb2YgdGhyZWUgYml0cyBmcm9tIHRoZSBQQ0kgYWRkcmVzcy4KICAqLwotI2RlZmluZSBCMkMyX0ZMRVhfUENJT0ZGU0VUX1RPX0lOVEVSTkFMQUREUih1c1BDSSkgKHU4KSAoKCh1c1BDSSA+PiAyKSAmIDB4MDcpICsgKCh1c1BDSSA+PiA0KSAmIDB4NzApKQotI2RlZmluZSBCMkMyX0ZMRVhfSU5URVJOQUxBRERSX1RPX1BDSU9GRlNFVCh1Y0FkZHIpICh1MTYpICgoKHVjQWRkciAmIDB4MDcpIDw8IDIpICsgKCh1Y0FkZHIgJiAweDcwKSA8PCA0KSkKKyNkZWZpbmUgQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIodXNQQ0kpICh1OCkgXAorCSgoKHVzUENJID4+IDIpICYgMHgwNykgKyAoKHVzUENJID4+IDQpICYgMHg3MCkpCisjZGVmaW5lIEIyQzJfRkxFWF9JTlRFUk5BTEFERFJfVE9fUENJT0ZGU0VUKHVjQWRkcikgKHUxNikgXAorCSgoKHVjQWRkciAmIDB4MDcpIDw8IDIpICsgKCh1Y0FkZHIgJiAweDcwKSA8PCA0KSkKIAogLyoKICAqIERLVCAwMjAyMjgKQEAgLTY5LDEyICs3MSwxMyBAQAogCXN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiID0gZmMtPmJ1c19zcGVjaWZpYzsKIAl1OCByZXF1ZXN0ID0gcmVhZCA/IEIyQzJfVVNCX1JFQURfUkVHIDogQjJDMl9VU0JfV1JJVEVfUkVHOwogCXU4IHJlcXVlc3RfdHlwZSA9IChyZWFkID8gVVNCX0RJUl9JTiA6IFVTQl9ESVJfT1VUKSB8IFVTQl9UWVBFX1ZFTkRPUjsKLQl1OCB3QWRkcmVzcyA9IEIyQzJfRkxFWF9QQ0lPRkZTRVRfVE9fSU5URVJOQUxBRERSKHdSZWdPZmZzUENJKSB8IChyZWFkID8gMHg4MCA6IDApOworCXU4IHdBZGRyZXNzID0gQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIod1JlZ09mZnNQQ0kpIHwKKwkJKHJlYWQgPyAweDgwIDogMCk7CiAKIAlpbnQgbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldiwKIAkJCXJlYWQgPyBCMkMyX1VTQl9DVFJMX1BJUEVfSU4gOiBCMkMyX1VTQl9DVFJMX1BJUEVfT1VULAogCQkJcmVxdWVzdCwKLQkJCXJlcXVlc3RfdHlwZSwgIC8qIDB4YzAgcmVhZCBvciAweDQwIHdyaXRlKi8KKwkJCXJlcXVlc3RfdHlwZSwgLyogMHhjMCByZWFkIG9yIDB4NDAgd3JpdGUgKi8KIAkJCXdBZGRyZXNzLAogCQkJMCwKIAkJCXZhbCwKQEAgLTgyLDU1ICs4NSw0OSBAQAogCQkJQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUkRXICogSFopOwogCiAJaWYgKGxlbiAhPSBzaXplb2YodTMyKSkgewotCQllcnIoImVycm9yIHdoaWxlICVzIGR3b3JkIGZyb20gJWQgKCVkKS4iLHJlYWQgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCi0JCQl3QWRkcmVzcyx3UmVnT2Zmc1BDSSk7CisJCWVycigiZXJyb3Igd2hpbGUgJXMgZHdvcmQgZnJvbSAlZCAoJWQpLiIsIHJlYWQgPyAicmVhZGluZyIgOgorCQkJCSJ3cml0aW5nIiwgd0FkZHJlc3MsIHdSZWdPZmZzUENJKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwogfQotCiAvKgogICogREtUIDAxMDgxNyAtIGFkZCBzdXBwb3J0IGZvciBWOCBtZW1vcnkgcmVhZC93cml0ZSBhbmQgZmxhc2ggdXBkYXRlCiAgKi8KIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfdjhfbWVtb3J5X3JlcShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKIAkJZmxleGNvcF91c2JfcmVxdWVzdF90IHJlcSwgdTggcGFnZSwgdTE2IHdBZGRyZXNzLAotCQl1OCAqcGJCdWZmZXIsdTMyIGJ1ZmxlbikKKwkJdTggKnBiQnVmZmVyLCB1MzIgYnVmbGVuKQogewotLy8JdTggZHdSZXF1ZXN0VHlwZTsKIAl1OCByZXF1ZXN0X3R5cGUgPSBVU0JfVFlQRV9WRU5ET1I7CiAJdTE2IHdJbmRleDsKLQlpbnQgbldhaXRUaW1lLHBpcGUsbGVuOwotCisJaW50IG5XYWl0VGltZSwgcGlwZSwgbGVuOwogCXdJbmRleCA9IHBhZ2UgPDwgODsKIAogCXN3aXRjaCAocmVxKSB7Ci0JCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06Ci0JCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFJFQUQ7Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfUkVBRF9WOF9NRU1PUlk7Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOworCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06CisJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRDsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47CiAJCWJyZWFrOwotCQljYXNlIEIyQzJfVVNCX1dSSVRFX1Y4X01FTToKLQkJCXdJbmRleCB8PSBwYkJ1ZmZlclswXTsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKLQkJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4V1JJVEU7Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX1dSSVRFX1Y4X01FTU9SWTsKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOworCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgorCQl3SW5kZXggfD0gcGJCdWZmZXJbMF07CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKKwkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURTsKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CiAJCWJyZWFrOwotCQljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOgotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOwotCQkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSDsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfV1JJVEVfVjhfRkxBU0g7Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKKwljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOgorCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7CisJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4RkxBU0g7CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOwogCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZvciB2OF9tZW1fcmVxICV4LlxuIixyZXEpOworCWRlZmF1bHQ6CisJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZvciB2OF9tZW1fcmVxICV4LlxuIiwgcmVxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlYl92OCgidjhtZW06ICUwMnggJTAyeCAlMDR4ICUwNHgsIGxlbjogJWRcbiIscmVxdWVzdF90eXBlLHJlcSwKLQkJCXdBZGRyZXNzLHdJbmRleCxidWZsZW4pOworCWRlYl92OCgidjhtZW06ICUwMnggJTAyeCAlMDR4ICUwNHgsIGxlbjogJWRcbiIsIHJlcXVlc3RfdHlwZSwgcmVxLAorCQkJd0FkZHJlc3MsIHdJbmRleCwgYnVmbGVuKTsKIAotCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYscGlwZSwKKwlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LCBwaXBlLAogCQkJcmVxLAogCQkJcmVxdWVzdF90eXBlLAogCQkJd0FkZHJlc3MsCkBAIC0xMzksMzkgKzEzNiw1MyBAQAogCQkJYnVmbGVuLAogCQkJbldhaXRUaW1lICogSFopOwogCi0JZGVidWdfZHVtcChwYkJ1ZmZlcixsZW4sZGViX3Y4KTsKLQorCWRlYnVnX2R1bXAocGJCdWZmZXIsIGxlbiwgZGViX3Y4KTsKIAlyZXR1cm4gbGVuID09IGJ1ZmxlbiA/IDAgOiAtRUlPOwogfQogCiAjZGVmaW5lIGJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKHBhZGRyLGJ1ZmxlbikgXAotCQkJKChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpID4gYnVmbGVuIFwKLQkJCT8gYnVmbGVuIDogKFY4X01FTU9SWV9QQUdFX1NJWkUgLSAocGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSkpCisJKChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpID4gYnVmbGVuIFwKKwkgPyBidWZsZW4gOiAoVjhfTUVNT1JZX1BBR0VfU0laRSAtIChwYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spKSkKIAotc3RhdGljIGludCBmbGV4Y29wX3VzYl9tZW1vcnlfcmVxKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLGZsZXhjb3BfdXNiX3JlcXVlc3RfdCByZXEsCi0JCWZsZXhjb3BfdXNiX21lbV9wYWdlX3QgcGFnZV9zdGFydCwgdTMyIGFkZHIsIGludCBleHRlbmRlZCwgdTggKmJ1ZiwgdTMyIGxlbikKK3N0YXRpYyBpbnQgZmxleGNvcF91c2JfbWVtb3J5X3JlcShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKKwkJZmxleGNvcF91c2JfcmVxdWVzdF90IHJlcSwgZmxleGNvcF91c2JfbWVtX3BhZ2VfdCBwYWdlX3N0YXJ0LAorCQl1MzIgYWRkciwgaW50IGV4dGVuZGVkLCB1OCAqYnVmLCB1MzIgbGVuKQogewogCWludCBpLHJldCA9IDA7CiAJdTE2IHdNYXg7CiAJdTMyIHBhZ2VjaHVuayA9IDA7CiAKIAlzd2l0Y2gocmVxKSB7Ci0JCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06ICB3TWF4ID0gVVNCX01FTV9SRUFEX01BWDsgYnJlYWs7Ci0JCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgl3TWF4ID0gVVNCX01FTV9XUklURV9NQVg7IGJyZWFrOwotCQljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOiAgd01heCA9IFVTQl9GTEFTSF9NQVg7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBCMkMyX1VTQl9SRUFEX1Y4X01FTToKKwkJd01heCA9IFVTQl9NRU1fUkVBRF9NQVg7CisJCWJyZWFrOworCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgorCQl3TWF4ID0gVVNCX01FTV9XUklURV9NQVg7CisJCWJyZWFrOworCWNhc2UgQjJDMl9VU0JfRkxBU0hfQkxPQ0s6CisJCXdNYXggPSBVU0JfRkxBU0hfTUFYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7Ci0JCXBhZ2VjaHVuayA9IHdNYXggPCBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLGxlbikgPyB3TWF4IDogYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UoYWRkcixsZW4pOwotCQlkZWJfaW5mbygiJXhcbiIsKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8IChWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpKTsKLQkJaWYgKChyZXQgPSBmbGV4Y29wX3VzYl92OF9tZW1vcnlfcmVxKGZjX3VzYixyZXEsCi0JCQkJcGFnZV9zdGFydCArIChhZGRyIC8gVjhfTUVNT1JZX1BBR0VfU0laRSksIC8qIGFjdHVhbCBwYWdlICovCi0JCQkJKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8IChWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpLAotCQkJCSZidWZbaV0scGFnZWNodW5rKSkgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJcGFnZWNodW5rID0KKwkJCXdNYXggPCBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLCBsZW4pID8KKwkJCQl3TWF4IDoKKwkJCQlieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLCBsZW4pOworCQlkZWJfaW5mbygiJXhcbiIsCisJCQkoYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spIHwKKwkJCQkoVjhfTUVNT1JZX0VYVEVOREVEKmV4dGVuZGVkKSk7CiAKKwkJcmV0ID0gZmxleGNvcF91c2JfdjhfbWVtb3J5X3JlcShmY191c2IsIHJlcSwKKwkJCXBhZ2Vfc3RhcnQgKyAoYWRkciAvIFY4X01FTU9SWV9QQUdFX1NJWkUpLAorCQkJKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8CisJCQkJKFY4X01FTU9SWV9FWFRFTkRFRCpleHRlbmRlZCksCisJCQkmYnVmW2ldLCBwYWdlY2h1bmspOworCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAkJYWRkciArPSBwYWdlY2h1bms7CiAJCWxlbiAtPSBwYWdlY2h1bms7CiAJfQpAQCAtMTgwLDggKzE5MSw5IEBACiAKIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfZ2V0X21hY19hZGRyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBleHRlbmRlZCkKIHsKLQlyZXR1cm4gZmxleGNvcF91c2JfbWVtb3J5X3JlcShmYy0+YnVzX3NwZWNpZmljLEIyQzJfVVNCX1JFQURfVjhfTUVNLAotCQkJVjhfTUVNT1JZX1BBR0VfRkxBU0gsMHgxZjAxMCwxLGZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsNik7CisJcmV0dXJuIGZsZXhjb3BfdXNiX21lbW9yeV9yZXEoZmMtPmJ1c19zcGVjaWZpYywgQjJDMl9VU0JfUkVBRF9WOF9NRU0sCisJCVY4X01FTU9SWV9QQUdFX0ZMQVNILCAweDFmMDEwLCAxLAorCQlmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLCA2KTsKIH0KIAogI2lmIDAKQEAgLTE5MSwxMSArMjAzLDggQEAKIHsKIAl1MTYgd1ZhbHVlOwogCXU4IHJlcXVlc3RfdHlwZSA9IChzZXQgPyBVU0JfRElSX09VVCA6IFVTQl9ESVJfSU4pIHwgVVNCX1RZUEVfVkVORE9SOwotLy8JdTggZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfR0VORVJJQywKIAlpbnQgbldhaXRUaW1lID0gMiwKLQkJcGlwZSA9IHNldCA/IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQgOiBCMkMyX1VTQl9DVFJMX1BJUEVfSU4sCi0JCWxlbjsKLQorCSAgICBwaXBlID0gc2V0ID8gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVCA6IEIyQzJfVVNCX0NUUkxfUElQRV9JTiwgbGVuOwogCXdWYWx1ZSA9IChmdW5jIDw8IDgpIHwgZXh0cmE7CiAKIAlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LHBpcGUsCkBAIC0yMTgsMzYgKzIyNywzNSBAQAogCXN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiID0gaTJjLT5mYy0+YnVzX3NwZWNpZmljOwogCXUxNiB3VmFsdWUsIHdJbmRleDsKIAlpbnQgbldhaXRUaW1lLHBpcGUsbGVuOwotLy8JdTggZHdSZXF1ZXN0VHlwZTsKIAl1OCByZXF1ZXN0X3R5cGUgPSBVU0JfVFlQRV9WRU5ET1I7CiAKIAlzd2l0Y2ggKGZ1bmMpIHsKLQkJY2FzZSBVU0JfRlVOQ19JMkNfV1JJVEU6Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX01VTFRJV1JJVEU6Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX1JFUEVBVFdSSVRFOgorCWNhc2UgVVNCX0ZVTkNfSTJDX1dSSVRFOgorCWNhc2UgVVNCX0ZVTkNfSTJDX01VTFRJV1JJVEU6CisJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUV1JJVEU6CiAJCS8qIERLVCAwMjAyMDggLSBhZGQgdGhpcyB0byBzdXBwb3J0IHNwZWNpYWwgY2FzZSBvZiBEaVNFcUMgKi8KLQkJY2FzZSBVU0JfRlVOQ19JMkNfQ0hFQ0tXUklURToKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOwotCQkJbldhaXRUaW1lID0gMjsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfR0VORVJJQzsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKKwljYXNlIFVTQl9GVU5DX0kyQ19DSEVDS1dSSVRFOgorCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKKwkJbldhaXRUaW1lID0gMjsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOwogCQlicmVhazsKLQkJY2FzZSBVU0JfRlVOQ19JMkNfUkVBRDoKLQkJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUUkVBRDoKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47Ci0JCQluV2FpdFRpbWUgPSAyOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9HRU5FUklDOwotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47CisJY2FzZSBVU0JfRlVOQ19JMkNfUkVBRDoKKwljYXNlIFVTQl9GVU5DX0kyQ19SRVBFQVRSRUFEOgorCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOworCQluV2FpdFRpbWUgPSAyOworCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKIAkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgZnVuY3Rpb24gZm9yIGkyY19yZXEgJXhcbiIsZnVuYyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgZnVuY3Rpb24gZm9yIGkyY19yZXEgJXhcbiIsIGZ1bmMpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJd1ZhbHVlID0gKGZ1bmMgPDwgOCkgfCAoaTJjLT5wb3J0IDw8IDQpOwogCXdJbmRleCA9IChjaGlwYWRkciA8PCA4ICkgfCBhZGRyOwogCi0JZGViX2kyYygiaTJjICUyZDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsZnVuYyxyZXF1ZXN0X3R5cGUscmVxLAotCQl3VmFsdWUgJiAweGZmLCB3VmFsdWUgPj4gOCwgd0luZGV4ICYgMHhmZiwgd0luZGV4ID4+IDgpOworCWRlYl9pMmMoImkyYyAlMmQ6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJZnVuYywgcmVxdWVzdF90eXBlLCByZXEsCisJCQl3VmFsdWUgJiAweGZmLCB3VmFsdWUgPj4gOCwKKwkJCXdJbmRleCAmIDB4ZmYsIHdJbmRleCA+PiA4KTsKIAogCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYscGlwZSwKIAkJCXJlcSwKQEAgLTI1Nyw0NCArMjY1LDQ5IEBACiAJCQlidWYsCiAJCQlidWZsZW4sCiAJCQluV2FpdFRpbWUgKiBIWik7Ci0KIAlyZXR1cm4gbGVuID09IGJ1ZmxlbiA/IDAgOiAtRVJFTU9URUlPOwogfQogCi0vKiBhY3R1YWwgYnVzIHNwZWNpZmljIGFjY2VzcyBmdW5jdGlvbnMsIG1ha2Ugc3VyZSBwcm90b3R5cGUgYXJlL3dpbGwgYmUgZXF1YWwgdG8gcGNpICovCi1zdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF91c2JfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZykKKy8qIGFjdHVhbCBidXMgc3BlY2lmaWMgYWNjZXNzIGZ1bmN0aW9ucywKKyAgIG1ha2Ugc3VyZSBwcm90b3R5cGUgYXJlL3dpbGwgYmUgZXF1YWwgdG8gcGNpICovCitzdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF91c2JfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHZhbDsKIAl2YWwucmF3ID0gMDsKLQlmbGV4Y29wX3VzYl9yZWFkd3JpdGVfZHcoZmMscmVnLCAmdmFsLnJhdywgMSk7CisJZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLCByZWcsICZ2YWwucmF3LCAxKTsKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfdXNiX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBmbGV4Y29wX2liaV92YWx1ZSB2YWwpCitzdGF0aWMgaW50IGZsZXhjb3BfdXNiX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBmbGV4Y29wX2liaV92YWx1ZSB2YWwpCiB7Ci0JcmV0dXJuIGZsZXhjb3BfdXNiX3JlYWR3cml0ZV9kdyhmYyxyZWcsICZ2YWwucmF3LCAwKTsKKwlyZXR1cm4gZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLCByZWcsICZ2YWwucmF3LCAwKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX3VzYl9pMmNfcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjLAotCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQorCQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKIHsKIAlpZiAob3AgPT0gRkNfUkVBRCkKIAkJcmV0dXJuIGZsZXhjb3BfdXNiX2kyY19yZXEoaTJjLCBCMkMyX1VTQl9JMkNfUkVRVUVTVCwKLQkJCVVTQl9GVU5DX0kyQ19SRUFELCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOworCQkJCVVTQl9GVU5DX0kyQ19SRUFELCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOwogCWVsc2UKIAkJcmV0dXJuIGZsZXhjb3BfdXNiX2kyY19yZXEoaTJjLCBCMkMyX1VTQl9JMkNfUkVRVUVTVCwKLQkJCVVTQl9GVU5DX0kyQ19XUklURSwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgbGVuKTsKKwkJCQlVU0JfRlVOQ19JMkNfV1JJVEUsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfdXNiX3Byb2Nlc3NfZnJhbWUoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsIHU4ICpidWZmZXIsIGludCBidWZmZXJfbGVuZ3RoKQorc3RhdGljIHZvaWQgZmxleGNvcF91c2JfcHJvY2Vzc19mcmFtZShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKKwl1OCAqYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCkKIHsKIAl1OCAqYjsKIAlpbnQgbDsKIAotCWRlYl90cygidG1wX2J1ZmZlcl9sZW5ndGg9JWQsIGJ1ZmZlcl9sZW5ndGg9JWRcbiIsIGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlcl9sZW5ndGgpOworCWRlYl90cygidG1wX2J1ZmZlcl9sZW5ndGg9JWQsIGJ1ZmZlcl9sZW5ndGg9JWRcbiIsCisJCWZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlcl9sZW5ndGgpOwogCiAJaWYgKGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGggPiAwKSB7Ci0JCW1lbWNweShmY191c2ItPnRtcF9idWZmZXIrZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCwgYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKwkJbWVtY3B5KGZjX3VzYi0+dG1wX2J1ZmZlcitmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoLCBidWZmZXIsCisJCQkJYnVmZmVyX2xlbmd0aCk7CiAJCWZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGggKz0gYnVmZmVyX2xlbmd0aDsKIAkJYiA9IGZjX3VzYi0+dG1wX2J1ZmZlcjsKIAkJbCA9IGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGg7CkBAIC0zMDQsMjMgKzMxNywyNiBAQAogCX0KIAogCXdoaWxlIChsID49IDE5MCkgewotCQlpZiAoKmIgPT0gMHhmZikKKwkJaWYgKCpiID09IDB4ZmYpIHsKIAkJCXN3aXRjaCAoKihiKzEpICYgMHgwMykgewotCQkJCWNhc2UgMHgwMTogLyogbWVkaWEgcGFja2V0ICovCi0JCQkJCWlmICggKihiKzIpID09IDB4NDcgKQotCQkJCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3VzYi0+ZmNfZGV2LCBiKzIsIDEpOwotCQkJCQllbHNlCi0JCQkJCQlkZWJfdHMoIm5vdCB0cyBwYWNrZXQgJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsICooYisyKSwgKihiKzMpLCAqKGIrNCksICooYis1KSApOwotCi0JCQkJCWIgKz0gMTkwOwotCQkJCQlsIC09IDE5MDsKKwkJCWNhc2UgMHgwMTogLyogbWVkaWEgcGFja2V0ICovCisJCQkJaWYgKCooYisyKSA9PSAweDQ3KQorCQkJCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoCisJCQkJCQkJZmNfdXNiLT5mY19kZXYsIGIrMiwgMSk7CisJCQkJZWxzZQorCQkJCQlkZWJfdHMoCisJCQkJCSJub3QgdHMgcGFja2V0ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLAorCQkJCQkJKihiKzIpLCAqKGIrMyksCisJCQkJCQkqKGIrNCksICooYis1KSk7CisJCQkJYiArPSAxOTA7CisJCQkJbCAtPSAxOTA7CiAJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZGViX3RzKCJ3cm9uZyBwYWNrZXQgdHlwZVxuIik7Ci0JCQkJCWwgPSAwOworCQkJZGVmYXVsdDoKKwkJCQlkZWJfdHMoIndyb25nIHBhY2tldCB0eXBlXG4iKTsKKwkJCQlsID0gMDsKIAkJCQlicmVhazsKIAkJCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlkZWJfdHMoIndyb25nIGhlYWRlclxuIik7CiAJCQlsID0gMDsKIAkJfQpAQCAtMzM3LDIzICszNTMsMjYgQEAKIAlpbnQgaTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQotCQlkZWJfdHMoInVyYiBjb21wbGV0ZWQsIGJ1ZnNpemU6ICVkIGFjdGxlbjsgJWRcbiIsdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlkZWJfdHMoInVyYiBjb21wbGV0ZWQsIGJ1ZnNpemU6ICVkIGFjdGxlbjsgJWRcbiIsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA8IDApIHsKLQkJCWVycigiaXNvIGZyYW1lIGRlc2NyaXB0b3IgJWQgaGFzIGFuIGVycm9yOiAlZFxuIixpLHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCWVycigiaXNvIGZyYW1lIGRlc2NyaXB0b3IgJWQgaGFzIGFuIGVycm9yOiAlZFxuIiwgaSwKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CiAJCX0gZWxzZQogCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+IDApIHsKLQkJCQlkZWJfdHMoInBhc3NlZCAlZCBieXRlcyB0byB0aGUgZGVtdXhcbiIsdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCQlkZWJfdHMoInBhc3NlZCAlZCBieXRlcyB0byB0aGUgZGVtdXhcbiIsCisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7CiAKIAkJCQlmbGV4Y29wX3VzYl9wcm9jZXNzX2ZyYW1lKGZjX3VzYiwKLQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgKworCQkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQsCiAJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7Ci0JCX0KKwkJCX0KIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOwogCX0KLQogCXVzYl9zdWJtaXRfdXJiKHVyYixHRlBfQVRPTUlDKTsKIH0KIApAQCAtMzc0LDM1ICszOTMsNDcgQEAKIAkJfQogCiAJaWYgKGZjX3VzYi0+aXNvX2J1ZmZlciAhPSBOVUxMKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KE5VTEwsZmNfdXNiLT5idWZmZXJfc2l6ZSwgZmNfdXNiLT5pc29fYnVmZmVyLCBmY191c2ItPmRtYV9hZGRyKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChOVUxMLAorCQkJZmNfdXNiLT5idWZmZXJfc2l6ZSwgZmNfdXNiLT5pc29fYnVmZmVyLAorCQkJZmNfdXNiLT5kbWFfYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfdHJhbnNmZXJfaW5pdChzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYikKIHsKLQl1MTYgZnJhbWVfc2l6ZSA9IGxlMTZfdG9fY3B1KGZjX3VzYi0+dWludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKLQlpbnQgYnVmc2l6ZSA9IEIyQzJfVVNCX05VTV9JU09fVVJCICogQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08gKiBmcmFtZV9zaXplLGksaixyZXQ7CisJdTE2IGZyYW1lX3NpemUgPSBsZTE2X3RvX2NwdSgKKwkJZmNfdXNiLT51aW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOworCWludCBidWZzaXplID0gQjJDMl9VU0JfTlVNX0lTT19VUkIgKiBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyAqCisJCWZyYW1lX3NpemUsIGksIGosIHJldDsKIAlpbnQgYnVmZmVyX29mZnNldCA9IDA7CiAKLQlkZWJfdHMoImNyZWF0aW5nICVkIGlzby11cmJzIHdpdGggJWQgZnJhbWVzIGVhY2ggb2YgJWQgYnl0ZXMgc2l6ZSA9ICVkLlxuIiwKLQkJCUIyQzJfVVNCX05VTV9JU09fVVJCLCBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTywgZnJhbWVfc2l6ZSxidWZzaXplKTsKKwlkZWJfdHMoImNyZWF0aW5nICVkIGlzby11cmJzIHdpdGggJWQgZnJhbWVzICIKKwkJCSJlYWNoIG9mICVkIGJ5dGVzIHNpemUgPSAlZC5cbiIsIEIyQzJfVVNCX05VTV9JU09fVVJCLAorCQkJQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sIGZyYW1lX3NpemUsIGJ1ZnNpemUpOwogCi0JZmNfdXNiLT5pc29fYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCxidWZzaXplLCZmY191c2ItPmRtYV9hZGRyKTsKKwlmY191c2ItPmlzb19idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChOVUxMLAorCQkJYnVmc2l6ZSwgJmZjX3VzYi0+ZG1hX2FkZHIpOwogCWlmIChmY191c2ItPmlzb19idWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisKIAltZW1zZXQoZmNfdXNiLT5pc29fYnVmZmVyLCAwLCBidWZzaXplKTsKIAlmY191c2ItPmJ1ZmZlcl9zaXplID0gYnVmc2l6ZTsKIAogCS8qIGNyZWF0aW5nIGlzbyB1cmJzICovCi0JZm9yIChpID0gMDsgaSA8IEIyQzJfVVNCX05VTV9JU09fVVJCOyBpKyspCi0JCWlmICghKGZjX3VzYi0+aXNvX3VyYltpXSA9IHVzYl9hbGxvY191cmIoQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sR0ZQX0FUT01JQykpKSB7CisJZm9yIChpID0gMDsgaSA8IEIyQzJfVVNCX05VTV9JU09fVVJCOyBpKyspIHsKKwkJZmNfdXNiLT5pc29fdXJiW2ldID0gdXNiX2FsbG9jX3VyYihCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTywKKwkJCUdGUF9BVE9NSUMpOworCQlpZiAoZmNfdXNiLT5pc29fdXJiW2ldID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIHVyYl9lcnJvcjsKIAkJfQorCX0KKwogCS8qIGluaXRpYWxpc2luZyBhbmQgc3VibWl0dGluZyBpc28gdXJicyAqLwogCWZvciAoaSA9IDA7IGkgPCBCMkMyX1VTQl9OVU1fSVNPX1VSQjsgaSsrKSB7CiAJCWludCBmcmFtZV9vZmZzZXQgPSAwOwogCQlzdHJ1Y3QgdXJiICp1cmIgPSBmY191c2ItPmlzb191cmJbaV07Ci0JCWRlYl90cygiaW5pdGlhbGl6aW5nIGFuZCBzdWJtaXR0aW5nIHVyYiBuby4gJWQgKGJ1Zl9vZmZzZXQ6ICVkKS5cbiIsaSxidWZmZXJfb2Zmc2V0KTsKKwkJZGViX3RzKCJpbml0aWFsaXppbmcgYW5kIHN1Ym1pdHRpbmcgdXJiIG5vLiAlZCAiCisJCQkiKGJ1Zl9vZmZzZXQ6ICVkKS5cbiIsIGksIGJ1ZmZlcl9vZmZzZXQpOwogCiAJCXVyYi0+ZGV2ID0gZmNfdXNiLT51ZGV2OwogCQl1cmItPmNvbnRleHQgPSBmY191c2I7CkBAIC00MTYsMjYgKzQ0NywyNiBAQAogCiAJCWJ1ZmZlcl9vZmZzZXQgKz0gZnJhbWVfc2l6ZSAqIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPOwogCQlmb3IgKGogPSAwOyBqIDwgQjJDMl9VU0JfRlJBTUVTX1BFUl9JU087IGorKykgewotCQkJZGViX3RzKCJ1cmIgbm86ICVkLCBmcmFtZTogJWQsIGZyYW1lX29mZnNldDogJWRcbiIsaSxqLGZyYW1lX29mZnNldCk7CisJCQlkZWJfdHMoInVyYiBubzogJWQsIGZyYW1lOiAlZCwgZnJhbWVfb2Zmc2V0OiAlZFxuIiwKKwkJCQkJaSwgaiwgZnJhbWVfb2Zmc2V0KTsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gZnJhbWVfb2Zmc2V0OwogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBmcmFtZV9zaXplOwogCQkJZnJhbWVfb2Zmc2V0ICs9IGZyYW1lX3NpemU7CiAJCX0KIAogCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGZjX3VzYi0+aXNvX3VyYltpXSxHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigic3VibWl0dGluZyB1cmIgJWQgZmFpbGVkIHdpdGggJWQuIixpLHJldCk7CisJCQllcnIoInN1Ym1pdHRpbmcgdXJiICVkIGZhaWxlZCB3aXRoICVkLiIsIGksIHJldCk7CiAJCQlnb3RvIHVyYl9lcnJvcjsKIAkJfQogCQlkZWJfdHMoInN1Ym1pdHRlZCB1cmIgbm8uICVkLlxuIixpKTsKIAl9CiAKLS8qIFNSQU0gKi8KLQotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY191c2ItPmZjX2RldixGQ19TUkFNX0RFU1RfTUVESUEgfCBGQ19TUkFNX0RFU1RfTkVUIHwKLQkJCUZDX1NSQU1fREVTVF9DQU8gfCBGQ19TUkFNX0RFU1RfQ0FJLCBGQ19TUkFNX0RFU1RfVEFSR0VUX1dBTl9VU0IpOwotCWZsZXhjb3Bfd2FuX3NldF9zcGVlZChmY191c2ItPmZjX2RldixGQ19XQU5fU1BFRURfOE1CSVRTKTsKLQlmbGV4Y29wX3NyYW1fY3RybChmY191c2ItPmZjX2RldiwxLDEsMSk7Ci0KKwkvKiBTUkFNICovCisJZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3VzYi0+ZmNfZGV2LCBGQ19TUkFNX0RFU1RfTUVESUEgfAorCQkJRkNfU1JBTV9ERVNUX05FVCB8IEZDX1NSQU1fREVTVF9DQU8gfCBGQ19TUkFNX0RFU1RfQ0FJLAorCQkJRkNfU1JBTV9ERVNUX1RBUkdFVF9XQU5fVVNCKTsKKwlmbGV4Y29wX3dhbl9zZXRfc3BlZWQoZmNfdXNiLT5mY19kZXYsIEZDX1dBTl9TUEVFRF84TUJJVFMpOworCWZsZXhjb3Bfc3JhbV9jdHJsKGZjX3VzYi0+ZmNfZGV2LCAxLCAxLCAxKTsKIAlyZXR1cm4gMDsKIAogdXJiX2Vycm9yOgpAQCAtNDQ4LDIwICs0NzksMjAgQEAKIAkvKiB1c2UgdGhlIGFsdGVybmF0ZSBzZXR0aW5nIHdpdGggdGhlIGxhcmdlcyBidWZmZXIgKi8KIAl1c2Jfc2V0X2ludGVyZmFjZShmY191c2ItPnVkZXYsMCwxKTsKIAlzd2l0Y2ggKGZjX3VzYi0+dWRldi0+c3BlZWQpIHsKLQkJY2FzZSBVU0JfU1BFRURfTE9XOgotCQkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHRvIHNMT1cuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQljYXNlIFVTQl9TUEVFRF9GVUxMOgotCQkJaW5mbygicnVubmluZyBhdCBGVUxMIHNwZWVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1NQRUVEX0hJR0g6Ci0JCQlpbmZvKCJydW5uaW5nIGF0IEhJR0ggc3BlZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjogLyogZmFsbCB0aHJvdWdoICovCi0JCWRlZmF1bHQ6Ci0JCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdW5rb3duLiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdG9vIHNsb3cuIik7CisJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlpbmZvKCJydW5uaW5nIGF0IEZVTEwgc3BlZWQuIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCWluZm8oInJ1bm5pbmcgYXQgSElHSCBzcGVlZC4iKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHVua25vd24uIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAl1c2Jfc2V0X2ludGZkYXRhKGZjX3VzYi0+dWludGYsIGZjX3VzYik7CiAJcmV0dXJuIDA7CkBAIC00ODUsNyArNTE2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0vKiBnZW5lcmFsIGZsZXhjb3AgaW5pdCAqLworCS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCiAJZmNfdXNiID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlmY191c2ItPmZjX2RldiA9IGZjOwogCkBAIC01MDIsMjEgKzUzMywyMSBAQAogCWZjLT5kZXYgPSAmdWRldi0+ZGV2OwogCWZjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0vKiBidXMgc3BlY2lmaWMgcGFydCAqLworCS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCiAJZmNfdXNiLT51ZGV2ID0gdWRldjsKIAlmY191c2ItPnVpbnRmID0gaW50ZjsKIAlpZiAoKHJldCA9IGZsZXhjb3BfdXNiX2luaXQoZmNfdXNiKSkgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWU7CiAKLS8qIGluaXQgZmxleGNvcCAqLworCS8qIGluaXQgZmxleGNvcCAqLwogCWlmICgocmV0ID0gZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShmYykpICE9IDApCiAJCWdvdG8gZXJyX3VzYl9leGl0OwogCi0vKiB4ZmVyIGluaXQgKi8KKwkvKiB4ZmVyIGluaXQgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfdXNiX3RyYW5zZmVyX2luaXQoZmNfdXNiKSkgIT0gMCkKIAkJZ290byBlcnJfZmNfZXhpdDsKIAotCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsRFJJVkVSX05BTUUpOworCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsIERSSVZFUl9OQU1FKTsKIAlyZXR1cm4gMDsKIAogZXJyX2ZjX2V4aXQ6CkBAIC01MzUsMTIgKzU2NiwxMiBAQAogCWZsZXhjb3BfZGV2aWNlX2V4aXQoZmNfdXNiLT5mY19kZXYpOwogCWZsZXhjb3BfdXNiX2V4aXQoZmNfdXNiKTsKIAlmbGV4Y29wX2RldmljZV9rZnJlZShmY191c2ItPmZjX2Rldik7Ci0JaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGRlaW5pdGlhbGl6ZWQgYW5kIGRpc2Nvbm5lY3RlZC4iLERSSVZFUl9OQU1FKTsKKwlpbmZvKCIlcyBzdWNjZXNzZnVsbHkgZGVpbml0aWFsaXplZCBhbmQgZGlzY29ubmVjdGVkLiIsIERSSVZFUl9OQU1FKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGZsZXhjb3BfdXNiX3RhYmxlIFtdID0gewotCSAgICB7IFVTQl9ERVZJQ0UoMHgwYWY3LCAweDAxMDEpIH0sCi0JICAgIHsgfQorCXsgVVNCX0RFVklDRSgweDBhZjcsIDB4MDEwMSkgfSwKKwl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGZsZXhjb3BfdXNiX3RhYmxlKTsKIApAQCAtNTU3LDEwICs1ODgsOSBAQAogewogCWludCByZXN1bHQ7CiAJaWYgKChyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmZsZXhjb3BfdXNiX2RyaXZlcikpKSB7Ci0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gKCVkKSIscmVzdWx0KTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiAoJWQpIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oCmluZGV4IDYzMGU2NDcuLjkyNTI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmgKQEAgLTEsMTUgKzEsMjAgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC11c2IuaCAtIGhlYWRlciBmaWxlIGZvciB0aGUgVVNCIHBhcnQKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgorICovCiAjaWZuZGVmIF9fRkxFWENPUF9VU0JfSF9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9VU0JfSF9JTkNMVURFRF9fCiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAogLyogdHJhbnNmZXIgcGFyYW1ldGVycyAqLwotI2RlZmluZSBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTwkJNAotI2RlZmluZSBCMkMyX1VTQl9OVU1fSVNPX1VSQgkJNAorI2RlZmluZSBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyA0CisjZGVmaW5lIEIyQzJfVVNCX05VTV9JU09fVVJCIDQKIAotI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfSU4JCXVzYl9yY3ZjdHJscGlwZShmY191c2ItPnVkZXYsMCkKLSNkZWZpbmUgQjJDMl9VU0JfQ1RSTF9QSVBFX09VVAkJdXNiX3NuZGN0cmxwaXBlKGZjX3VzYi0+dWRldiwwKQotI2RlZmluZSBCMkMyX1VTQl9EQVRBX1BJUEUJCQl1c2JfcmN2aXNvY3BpcGUoZmNfdXNiLT51ZGV2LDB4ODEpCisjZGVmaW5lIEIyQzJfVVNCX0NUUkxfUElQRV9JTiB1c2JfcmN2Y3RybHBpcGUoZmNfdXNiLT51ZGV2LCAwKQorI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUIHVzYl9zbmRjdHJscGlwZShmY191c2ItPnVkZXYsIDApCisjZGVmaW5lIEIyQzJfVVNCX0RBVEFfUElQRSB1c2JfcmN2aXNvY3BpcGUoZmNfdXNiLT51ZGV2LCAweDgxKQogCiBzdHJ1Y3QgZmxleGNvcF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwpAQCAtMTgsOCArMjMsOCBAQAogCXU4ICppc29fYnVmZmVyOwogCWludCBidWZmZXJfc2l6ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCXN0cnVjdCB1cmIgKmlzb191cmJbQjJDMl9VU0JfTlVNX0lTT19VUkJdOwogCisJc3RydWN0IHVyYiAqaXNvX3VyYltCMkMyX1VTQl9OVU1fSVNPX1VSQl07CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmY19kZXY7CiAKIAl1OCB0bXBfYnVmZmVyWzEwMjMrMTkwXTsKQEAgLTMwLDE0ICszNSw2IEBACiAvKiByZXF1ZXN0IHR5cGVzIFRPRE8gV2hhdCBpcyBpdHMgdXNlPyovCiB0eXBlZGVmIGVudW0gewogCi0vKiBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB0aGlzIHBhcnQKLQlSVFlQRV9SRUFEX0RXICAgICAgICAgPSAoMSA8PCA2KSwKLQlSVFlQRV9XUklURV9EV18xICAgICAgPSAoMyA8PCA2KSwKLQlSVFlQRV9SRUFEX1Y4X01FTU9SWSAgPSAoNiA8PCA2KSwKLQlSVFlQRV9XUklURV9WOF9NRU1PUlkgPSAoNyA8PCA2KSwKLQlSVFlQRV9XUklURV9WOF9GTEFTSCAgPSAoOCA8PCA2KSwKLQlSVFlQRV9HRU5FUklDICAgICAgICAgPSAoOSA8PCA2KSwKLSovCiB9IGZsZXhjb3BfdXNiX3JlcXVlc3RfdHlwZV90OwogI2VuZGlmCiAKQEAgLTQ3LDcgKzQ0LDYgQEAKIAlCMkMyX1VTQl9SRUFEX1Y4X01FTSAgPSAweDA1LAogCUIyQzJfVVNCX1JFQURfUkVHICAgICA9IDB4MDgsCiAJQjJDMl9VU0JfV1JJVEVfUkVHICAgID0gMHgwQSwKLS8qCUIyQzJfVVNCX1dSSVRFUkVHTE8gICA9IDB4MEEsICovCiAJQjJDMl9VU0JfV1JJVEVSRUdISSAgID0gMHgwQiwKIAlCMkMyX1VTQl9GTEFTSF9CTE9DSyAgPSAweDEwLAogCUIyQzJfVVNCX0kyQ19SRVFVRVNUICA9IDB4MTEsCkBAIC02MiwxNSArNTgsMTMgQEAKIAlVU0JfRlVOQ19JMkNfUkVQRUFUV1JJVEUgPSAweDA0LAogCVVTQl9GVU5DX0dFVF9ERVNDUklQVE9SICA9IDB4MDUsCiAJVVNCX0ZVTkNfSTJDX1JFUEVBVFJFQUQgID0gMHgwNiwKLS8qIERLVCAwMjAyMDggLSBhZGQgdGhpcyB0byBzdXBwb3J0IHNwZWNpYWwgY2FzZSBvZiBEaVNFcUMgKi8KKwkvKiBES1QgMDIwMjA4IC0gYWRkIHRoaXMgdG8gc3VwcG9ydCBzcGVjaWFsIGNhc2Ugb2YgRGlTRXFDICovCiAJVVNCX0ZVTkNfSTJDX0NIRUNLV1JJVEUgID0gMHgwNywKIAlVU0JfRlVOQ19JMkNfQ0hFQ0tSRVNVTFQgPSAweDA4LAogfSBmbGV4Y29wX3VzYl9pMmNfZnVuY3Rpb25fdDsKIAotLyoKLSAqIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFVUSUxJVFkgcmVxdWVzdCAweDEyCi0gKiBES1QgMDIwMzA0IC0gbmV3IHV0aWxpdHkgZnVuY3Rpb24KLSAqLworLyogZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgVVRJTElUWSByZXF1ZXN0IDB4MTIKKyAqIERLVCAwMjAzMDQgLSBuZXcgdXRpbGl0eSBmdW5jdGlvbiAqLwogdHlwZWRlZiBlbnVtIHsKIAlVVElMSVRZX1NFVF9GSUxURVIgICAgICAgICAgPSAweDAxLAogCVVUSUxJVFlfREFUQV9FTkFCTEUgICAgICAgICA9IDB4MDIsCkBAIC04NCw3ICs3OCw3IEBACiAJVVRJTElUWV9EQVRBX1JFU0VUICAgICAgICAgID0gMHgwQSwKIAlVVElMSVRZX0dFVF9EQVRBX1NUQVRVUyAgICAgPSAweDEwLAogCVVUSUxJVFlfR0VUX1Y4X1JFRyAgICAgICAgICA9IDB4MTEsCi0vKiBES1QgMDIwMzI2IC0gYWRkIGZ1bmN0aW9uIGZvciB2MS4xNCAqLworCS8qIERLVCAwMjAzMjYgLSBhZGQgZnVuY3Rpb24gZm9yIHYxLjE0ICovCiAJVVRJTElUWV9TUkFNX1dSSVRFICAgICAgICAgID0gMHgxMiwKIAlVVElMSVRZX1NSQU1fUkVBRCAgICAgICAgICAgPSAweDEzLAogCVVUSUxJVFlfU1JBTV9URVNURklMTCAgICAgICA9IDB4MTQsCkBAIC05MiwxMyArODYsMTMgQEAKIAlVVElMSVRZX1NSQU1fVEVTVFZFUklGWSAgICAgPSAweDE2LAogfSBmbGV4Y29wX3VzYl91dGlsaXR5X2Z1bmN0aW9uX3Q7CiAKLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUlcgIDEqSFogICAgICAgLyogMSBzICovCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JEVyAzKkhaICAgICAgIC8qIDMgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9XRFcgMSpIWiAgICAgICAvKiAxIHMgKi8KKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUlcgKDEqSFopCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JEVyAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fV0RXICgxKkhaKQogCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRCAgIDMqSFogIC8qIDMgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFdSSVRFICAzKkhaICAvKiAzIHMgKi8KLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSCAgMypIWiAgLyogMyBzICovCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRCAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURSAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSCAoMypIWikKIAogdHlwZWRlZiBlbnVtIHsKIAlWOF9NRU1PUllfUEFHRV9EVkJfQ0kgPSAweDIwLApAQCAtMTA3LDEzICsxMDEsMTEgQEAKIAlWOF9NRU1PUllfUEFHRV9GTEFTSCAgPSAweDgwCiB9IGZsZXhjb3BfdXNiX21lbV9wYWdlX3Q7CiAKLSNkZWZpbmUgVjhfTUVNT1JZX0VYVEVOREVEICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgVVNCX01FTV9SRUFEX01BWCAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBVU0JfTUVNX1dSSVRFX01BWCAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNCX0ZMQVNIX01BWCAgICAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgVjhfTUVNT1JZX1BBR0VfU0laRSAgICAgMHg4MDAwICAgICAgLy8gMzJLCi0jZGVmaW5lIFY4X01FTU9SWV9QQUdFX01BU0sgICAgIDB4N0ZGRgorI2RlZmluZSBWOF9NRU1PUllfRVhURU5ERUQgKDEgPDwgMTUpCisjZGVmaW5lIFVTQl9NRU1fUkVBRF9NQVggICAzMgorI2RlZmluZSBVU0JfTUVNX1dSSVRFX01BWCAgIDEKKyNkZWZpbmUgVVNCX0ZMQVNIX01BWCAgICAgICA4CisjZGVmaW5lIFY4X01FTU9SWV9QQUdFX1NJWkUgMHg4MDAwIC8qIDMySyAqLworI2RlZmluZSBWOF9NRU1PUllfUEFHRV9NQVNLIDB4N0ZGRgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKaW5kZXggOTEwNjg5NS4uMmRmMWIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKQEAgLTEsMjIgKzEsMjAgQEAKIC8qCi0gKiBmbGV4Y29wLmMgLSBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPgotICoKLSAqIGJhc2VkIG9uIHRoZSBza3lzdGFyMi1kcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBWYWRpbSBDYXRhbmEsIHNreXN0YXJAbW9sZG92YS5jYworICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AuYyAtIG1haW4gbW9kdWxlIHBhcnQKKyAqIENvcHlyaWdodCAoQykgMjAwNC05IFBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPgorICogYmFzZWQgb24gc2t5c3RhcjItZHJpdmVyIENvcHlyaWdodCAoQykgMjAwMyBWYWRpbSBDYXRhbmEsIHNreXN0YXJAbW9sZG92YS5jYwogICoKICAqIEFja25vd2xlZGdlbWVudHM6Ci0gKiAgICAgSm9obiBKdXJyaXVzIGZyb20gQkJUSSwgSW5jLiBmb3IgZXh0ZW5zaXZlIHN1cHBvcnQgd2l0aAotICogICAgICAgICBjb2RlIGV4YW1wbGVzIGFuZCBkYXRhIGJvb2tzCi0gKgotICogICAgIEJqYXJuZSBTdGVpbnNibywgYmphcm5lIGF0IHN0ZWluc2JvLmNvbSAoc29tZSBpZGVhcyBmb3IgcmV3cml0aW5nKQorICogICBKb2huIEp1cnJpdXMgZnJvbSBCQlRJLCBJbmMuIGZvciBleHRlbnNpdmUgc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgIHdpdGggY29kZSBleGFtcGxlcyBhbmQgZGF0YSBib29rcworICogICBCamFybmUgU3RlaW5zYm8sIGJqYXJuZSBhdCBzdGVpbnNiby5jb20gKHNvbWUgaWRlYXMgZm9yIHJld3JpdGluZykKICAqCiAgKiBDb250cmlidXRpb25zIHRvIHRoZSBza3lzdGFyMi1kcml2ZXIgaGF2ZSBiZWVuIGRvbmUgYnkKLSAqICAgICBWaW5jZW56byBEaSBNYXNzYSwgaGF3ay5pdCBhdCB0aXNjYWxpbmV0Lml0IChzZXZlcmFsIERpU0VxQyBmaXhlcykKLSAqICAgICBSb2JlcnRvIFJhZ3VzYSwgci5yYWd1c2EgYXQgbGliZXJvLml0IChwb2xpc2hpbmcsIHJlc3R5bGluZyB0aGUgY29kZSkKLSAqICAgICBOaWtsYXMgUGVpbmVja2UsIHBlaW5lY2tlIGF0IGdkdi51bmktaGFubm92ZXIuZGUgKGhhcmR3YXJlIHBpZC9tYWMgZmlsdGVyaW5nKQotICoKKyAqICAgVmluY2Vuem8gRGkgTWFzc2EsIGhhd2suaXQgYXQgdGlzY2FsaW5ldC5pdCAoc2V2ZXJhbCBEaVNFcUMgZml4ZXMpCisgKiAgIFJvYmVydG8gUmFndXNhLCByLnJhZ3VzYSBhdCBsaWJlcm8uaXQgKHBvbGlzaGluZywgcmVzdHlsaW5nIHRoZSBjb2RlKQorICogICBVd2UgQnVnbGEsIHV3ZS5idWdsYSBhdCBnbXguZGUgKGRvaW5nIHRlc3RzLCByZXN0eWxpbmcgY29kZSwgd3JpdGluZyBkb2N1KQorICogICBOaWtsYXMgUGVpbmVja2UsIHBlaW5lY2tlIGF0IGdkdi51bmktaGFubm92ZXIuZGUgKGhhcmR3YXJlIHBpZC9tYWMKKyAqICAgICAgICAgICAgICAgZmlsdGVyaW5nKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNDYsNyArNDQsMTAgQEAKIAogaW50IGIyYzJfZmxleGNvcF9kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYjJjMl9mbGV4Y29wX2RlYnVnLCAgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXR1bmVyLDQ9aTJjLDg9dHMsMTY9c3JhbSwzMj1yZWcgKHwtYWJsZSkpLiIgREVCU1RBVFVTKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXR1bmVyLDQ9aTJjLDg9dHMsIgorCQkiMTY9c3JhbSwzMj1yZWcgKHwtYWJsZSkpLiIKKwkJREVCU1RBVFVTKTsKICN1bmRlZiBERUJTVEFUVVMKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CkBAIC01NywzNyArNTgsMzYgQEAKIHN0YXRpYyBpbnQgZmxleGNvcF9kdmJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCiB7CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGR2YmRteGZlZWQtPmRlbXV4LT5wcml2OwotCXJldHVybiBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsZHZiZG14ZmVlZCwxKTsKKwlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBkdmJkbXhmZWVkLCAxKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX2R2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQogewogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBkdmJkbXhmZWVkLT5kZW11eC0+cHJpdjsKLQlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLGR2YmRteGZlZWQsMCk7CisJcmV0dXJuIGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYywgZHZiZG14ZmVlZCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9kdmJfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewogCWludCByZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZmMtPmR2Yl9hZGFwdGVyLAotCQkJCSAgICAgICAiRmxleENvcCBEaWdpdGFsIFRWIGRldmljZSIsIGZjLT5vd25lciwKLQkJCQkgICAgICAgZmMtPmRldiwgYWRhcHRlcl9ucik7CisJCQkiRmxleENvcCBEaWdpdGFsIFRWIGRldmljZSIsIGZjLT5vd25lciwKKwkJCWZjLT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKSB7CiAJCWVycigiZXJyb3IgcmVnaXN0ZXJpbmcgRFZCIGFkYXB0ZXIiKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZmMtPmR2Yl9hZGFwdGVyLnByaXYgPSBmYzsKIAotCWZjLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfCBETVhfU0VDVElPTl9GSUxURVJJTkcgfCBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CisJZmMtPmRlbXV4LmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORworCQkJfCBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CiAJZmMtPmRlbXV4LnByaXYgPSBmYzsKLQogCWZjLT5kZW11eC5maWx0ZXJudW0gPSBmYy0+ZGVtdXguZmVlZG51bSA9IEZDX01BWF9GRUVEOwotCiAJZmMtPmRlbXV4LnN0YXJ0X2ZlZWQgPSBmbGV4Y29wX2R2Yl9zdGFydF9mZWVkOwogCWZjLT5kZW11eC5zdG9wX2ZlZWQgPSBmbGV4Y29wX2R2Yl9zdG9wX2ZlZWQ7CiAJZmMtPmRlbXV4LndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOwogCiAJaWYgKChyZXQgPSBkdmJfZG14X2luaXQoJmZjLT5kZW11eCkpIDwgMCkgewotCQllcnIoImR2Yl9kbXggZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJkdmJfZG14IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXg7CiAJfQogCkBAIC05NywyMyArOTcsMjMgQEAKIAlmYy0+ZG14ZGV2LmRlbXV4ID0gJmZjLT5kZW11eC5kbXg7CiAJZmMtPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwogCWlmICgocmV0ID0gZHZiX2RteGRldl9pbml0KCZmYy0+ZG14ZGV2LCAmZmMtPmR2Yl9hZGFwdGVyKSkgPCAwKSB7Ci0JCWVycigiZHZiX2RteGRldl9pbml0IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiZHZiX2RteGRldl9pbml0IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXhfZGV2OwogCX0KIAogCWlmICgocmV0ID0gZmMtPmRlbXV4LmRteC5hZGRfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+aHdfZnJvbnRlbmQpKSA8IDApIHsKLQkJZXJyKCJhZGRpbmcgaHdfZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiYWRkaW5nIGh3X2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfZG14X2FkZF9od19mcm9udGVuZDsKIAl9CiAKIAlmYy0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CiAJaWYgKChyZXQgPSBmYy0+ZGVtdXguZG14LmFkZF9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5tZW1fZnJvbnRlbmQpKSA8IDApIHsKLQkJZXJyKCJhZGRpbmcgbWVtX2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImFkZGluZyBtZW1fZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXhfYWRkX21lbV9mcm9udGVuZDsKIAl9CiAKIAlpZiAoKHJldCA9IGZjLT5kZW11eC5kbXguY29ubmVjdF9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5od19mcm9udGVuZCkpIDwgMCkgewotCQllcnIoImNvbm5lY3QgZnJvbnRlbmQgZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJjb25uZWN0IGZyb250ZW5kIGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9jb25uZWN0X2Zyb250ZW5kOwogCX0KIApAQCAtMTIzLDkgKzEyMyw5IEBACiAJcmV0dXJuIDA7CiAKIGVycl9jb25uZWN0X2Zyb250ZW5kOgotCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+bWVtX2Zyb250ZW5kKTsKKwlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5tZW1fZnJvbnRlbmQpOwogZXJyX2RteF9hZGRfbWVtX2Zyb250ZW5kOgotCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+aHdfZnJvbnRlbmQpOworCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPmh3X2Zyb250ZW5kKTsKIGVycl9kbXhfYWRkX2h3X2Zyb250ZW5kOgogCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmMtPmRteGRldik7CiBlcnJfZG14X2RldjoKQEAgLTE0MSwxMiArMTQxLDEzIEBACiAJCWR2Yl9uZXRfcmVsZWFzZSgmZmMtPmR2Ym5ldCk7CiAKIAkJZmMtPmRlbXV4LmRteC5jbG9zZSgmZmMtPmRlbXV4LmRteCk7Ci0JCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+bWVtX2Zyb250ZW5kKTsKLQkJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsJmZjLT5od19mcm9udGVuZCk7CisJCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LAorCQkJJmZjLT5tZW1fZnJvbnRlbmQpOworCQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwKKwkJCSZmYy0+aHdfZnJvbnRlbmQpOwogCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmZjLT5kbXhkZXYpOwogCQlkdmJfZG14X3JlbGVhc2UoJmZjLT5kZW11eCk7CiAJCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmZjLT5kdmJfYWRhcHRlcik7Ci0KIAkJZGViX2luZm8oImRlaW5pdGlhbGl6ZWQgZHZiIHN0dWZmXG4iKTsKIAl9CiAJZmMtPmluaXRfc3RhdGUgJj0gfkZDX1NUQVRFX0RWQl9JTklUOwpAQCAtMTY4LDkgKzE2OSw5IEBACiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfcmVzZXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKLQlmbGV4Y29wX2liaV92YWx1ZSB2MjEwLHYyMDQ7CisJZmxleGNvcF9pYmlfdmFsdWUgdjIxMCwgdjIwNDsKIAotLyogcmVzZXQgdGhlIGZsZXhjb3AgaXRzZWxmICovCisJLyogcmVzZXQgdGhlIGZsZXhjb3AgaXRzZWxmICovCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsaWJpX3plcm8pOwogCiAJdjIxMC5yYXcgPSAwOwpAQCAtMTgzLDEzICsxODQsMTEgQEAKIAl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja182MDAgPSAxOwogCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzcwMCA9IDE7CiAJdjIxMC5zd19yZXNldF8yMTAuQmxvY2tfcmVzZXRfZW5hYmxlID0gMHhiMjsKLQogCXYyMTAuc3dfcmVzZXRfMjEwLlNwZWNpYWxfY29udHJvbHMgPSAweGMyNTk7Ci0KIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxzd19yZXNldF8yMTAsdjIxMCk7CiAJbXNsZWVwKDEpOwogCi0vKiByZXNldCB0aGUgcGVyaXBoaWNhbCBkZXZpY2VzICovCisJLyogcmVzZXQgdGhlIHBlcmlwaGljYWwgZGV2aWNlcyAqLwogCiAJdjIwNCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsbWlzY18yMDQpOwogCXYyMDQubWlzY18yMDQuUGVyX3Jlc2V0X3NpZyA9IDA7CkBAIC0yMDEsMjUgKzIwMCwyNCBAQAogCiB2b2lkIGZsZXhjb3BfcmVzZXRfYmxvY2tfMzAwKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdjIwOF9zYXZlID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxjdHJsXzIwOCksCi0JCQkJCSAgdjIxMCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwKTsKKwlmbGV4Y29wX2liaV92YWx1ZSB2MjA4X3NhdmUgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBjdHJsXzIwOCksCisJCQkgIHYyMTAgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBzd19yZXNldF8yMTApOwogCi0JZGViX3JkdW1wKCIyMDg6ICUwOHgsIDIxMDogJTA4eFxuIix2MjA4X3NhdmUucmF3LHYyMTAucmF3KTsKLQorCWRlYl9yZHVtcCgiMjA4OiAlMDh4LCAyMTA6ICUwOHhcbiIsIHYyMDhfc2F2ZS5yYXcsIHYyMTAucmF3KTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCxpYmlfemVybyk7CiAKIAl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja18zMDAgPSAxOwogCXYyMTAuc3dfcmVzZXRfMjEwLkJsb2NrX3Jlc2V0X2VuYWJsZSA9IDB4YjI7CiAKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxzd19yZXNldF8yMTAsdjIxMCk7Ci0JdWRlbGF5KDEwMDApOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LHYyMDhfc2F2ZSk7CiB9CiAKIHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmxleGNvcF9kZXZpY2Vfa21hbGxvYyhzaXplX3QgYnVzX3NwZWNpZmljX2xlbikKIHsKIAl2b2lkICpidXM7Ci0Jc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmbGV4Y29wX2RldmljZSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UpLAorCQkJCUdGUF9LRVJORUwpOwogCWlmICghZmMpIHsKIAkJZXJyKCJubyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNTQsNyArMjUyLDYgQEAKIAlmbGV4Y29wX2RldGVybWluZV9yZXZpc2lvbihmYyk7CiAJZmxleGNvcF9zcmFtX2luaXQoZmMpOwogCWZsZXhjb3BfaHdfZmlsdGVyX2luaXQoZmMpOwotCiAJZmxleGNvcF9zbWNfY3RybChmYywgMCk7CiAKIAlpZiAoKHJldCA9IGZsZXhjb3BfZHZiX2luaXQoZmMpKSkKQEAgLTI3OSw3ICsyNzYsNiBAQAogCQlnb3RvIGVycm9yOwogCiAJZmxleGNvcF9kZXZpY2VfbmFtZShmYywiaW5pdGlhbGl6YXRpb24gb2YiLCJjb21wbGV0ZSIpOwotCiAJcmV0dXJuIDA7CiAKIGVycm9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaAppbmRleCAwY2ViZTFkLi44OTdiMTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaApAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AuaCAtIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGFsbCBmbGV4Y29wLWNoaXAtc291cmNlIGZpbGVzLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLmggLSBwcml2YXRlIGhlYWRlciBmaWxlIGZvciBhbGwgZmxleGNvcC1jaGlwLXNvdXJjZSBmaWxlcworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpZm5kZWYgX19GTEVYQ09QX0hfXwogI2RlZmluZSBfX0ZMRVhDT1BfSF9fXwpAQCAtMjEsMTEgKzE5LDExIEBACiAjZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikKICNlbmRpZgogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3R1bmVyKGFyZ3MuLi4pIGRwcmludGsoMHgwMixhcmdzKQotI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICAgZHByaW50aygweDA0LGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX3NyYW0oYXJncy4uLikgIGRwcmludGsoMHgxMCxhcmdzKQotI2RlZmluZSBkZWJfcmR1bXAoYXJncy4uLikgIGRwcmludGsoMHgyMCxhcmdzKQorI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl90dW5lcihhcmdzLi4uKSBkcHJpbnRrKDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgZHByaW50aygweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfdHMoYXJncy4uLikgZHByaW50aygweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfc3JhbShhcmdzLi4uKSBkcHJpbnRrKDB4MTAsIGFyZ3MpCisjZGVmaW5lIGRlYl9yZHVtcChhcmdzLi4uKSBkcHJpbnRrKDB4MjAsIGFyZ3MpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oCmluZGV4IGVkOWE2NzUuLjhmNjRiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgKQEAgLTEsMTAgKzEsNyBAQAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisvKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogcmVnaXN0ZXIgZGVzY3JpcHRpb25zCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KLQogLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCB0aGluZ3MgaGVyZS4gKi8KICNpZm5kZWYgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oCmluZGV4IDQ5ZjIzMTUuLmM3NTgzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfbGUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgKQEAgLTEsMTAgKzEsNyBAQAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisvKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogcmVnaXN0ZXIgZGVzY3JpcHRpb25zCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KLQogLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCB0aGluZ3MgaGVyZS4gKi8KICNpZm5kZWYgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKaW5kZXggMjdlZGIwZS4uODY2OGU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCkBAIC04LDcgKzgsNyBAQAogCXNlbGVjdCBEVkJfT1I1MTIxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIEJ0OHh4IFBDSSBicmlkZ2UuIEV4YW1wbGVzIGFyZQogCSAgdGhlIE5lYnVsYSBjYXJkcywgdGhlIFBpbm5hY2xlIFBDVFYgY2FyZHMsIHRoZSBUd2luaGFuIERTVCBjYXJkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKaW5kZXggMDI1ODQ1MS4uNDYwMWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKQEAgLTU1MiwxNiArNTUyLDE5IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBkc3RfY2FfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgaW9jdGxfYXJnKQorc3RhdGljIGxvbmcgZHN0X2NhX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGlvY3RsX2FyZykKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSogZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkc3Rfc3RhdGUqIHN0YXRlID0gKHN0cnVjdCBkc3Rfc3RhdGUqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgY2Ffc2xvdF9pbmZvICpwX2NhX3Nsb3RfaW5mbzsKIAlzdHJ1Y3QgY2FfY2FwcyAqcF9jYV9jYXBzOwogCXN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZTsKIAl2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopaW9jdGxfYXJnOwogCWludCByZXN1bHQgPSAwOwogCisJbG9ja19rZXJuZWwoKTsKKwlkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RhdGUgPSAoc3RydWN0IGRzdF9zdGF0ZSAqKWR2YmRldi0+cHJpdjsKIAlwX2NhX21lc3NhZ2UgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX21zZyksIEdGUF9LRVJORUwpOwogCXBfY2Ffc2xvdF9pbmZvID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKIAlwX2NhX2NhcHMgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX2NhcHMpLCBHRlBfS0VSTkVMKTsKQEAgLTY0Nyw2ICs2NTAsNyBAQAogCWtmcmVlIChwX2NhX3Nsb3RfaW5mbyk7CiAJa2ZyZWUgKHBfY2FfY2Fwcyk7CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjgyLDkgKzY4Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzdF9jYV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHN0X2NhX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmlvY3RsID0gZHN0X2NhX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRzdF9jYV9pb2N0bCwKIAkub3BlbiA9IGRzdF9jYV9vcGVuLAogCS5yZWxlYXNlID0gZHN0X2NhX3JlbGVhc2UsCiAJLnJlYWQgPSBkc3RfY2FfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggNDg3NjJhMi4uYjE4NTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCiAJbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7CiAJY2FyZC0+YnR0dl9uciA9IHN1Yi0+Y29yZS0+bnI7Ci0Jc3RybmNweShjYXJkLT5jYXJkX25hbWUsIHN1Yi0+Y29yZS0+bmFtZSwgc2l6ZW9mKHN1Yi0+Y29yZS0+bmFtZSkpOworCXN0cmxjcHkoY2FyZC0+Y2FyZF9uYW1lLCBzdWItPmNvcmUtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjYXJkLT5jYXJkX25hbWUpKTsKIAljYXJkLT5pMmNfYWRhcHRlciA9ICZzdWItPmNvcmUtPmkyY19hZGFwOwogCiAJc3dpdGNoKHN1Yi0+Y29yZS0+dHlwZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwppbmRleCA0M2Y0ZDQ0Li5kZTNlZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIAlzZWxlY3QgRFZCX1NUQjYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCiAJICBEdmJXb3JsZCAyMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjQ4ZjczYS4uNWIyMGNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtMTU2LDQ2ICsxNTYsMTIgQEAKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKLXN0YXRpYyB1MTYgaXJfY29kZXNfZG0xMTA1X25lY1sxMjhdID0gewotCVsweDBhXSA9IEtFWV9RLAkJLypwb3dlciovCi0JWzB4MGNdID0gS0VZX00sCQkvKm11dGUqLwotCVsweDExXSA9IEtFWV8xLAotCVsweDEyXSA9IEtFWV8yLAotCVsweDEzXSA9IEtFWV8zLAotCVsweDE0XSA9IEtFWV80LAotCVsweDE1XSA9IEtFWV81LAotCVsweDE2XSA9IEtFWV82LAotCVsweDE3XSA9IEtFWV83LAotCVsweDE4XSA9IEtFWV84LAotCVsweDE5XSA9IEtFWV85LAotCVsweDEwXSA9IEtFWV8wLAotCVsweDFjXSA9IEtFWV9QQUdFVVAsCS8qY2grKi8KLQlbMHgwZl0gPSBLRVlfUEFHRURPV04sCS8qY2gtKi8KLQlbMHgxYV0gPSBLRVlfTywJCS8qdm9sKyovCi0JWzB4MGVdID0gS0VZX1osCQkvKnZvbC0qLwotCVsweDA0XSA9IEtFWV9SLAkJLypyZWMqLwotCVsweDA5XSA9IEtFWV9ELAkJLypmYXYqLwotCVsweDA4XSA9IEtFWV9CQUNLU1BBQ0UsCS8qcmV3aW5kKi8KLQlbMHgwN10gPSBLRVlfQSwJCS8qZmFzdCovCi0JWzB4MGJdID0gS0VZX1AsCQkvKnBhdXNlKi8KLQlbMHgwMl0gPSBLRVlfRVNDLAkvKmNhbmNlbCovCi0JWzB4MDNdID0gS0VZX0csCQkvKnRhYiovCi0JWzB4MDBdID0gS0VZX1VQLAkvKnVwKi8KLQlbMHgxZl0gPSBLRVlfRU5URVIsCS8qb2sqLwotCVsweDAxXSA9IEtFWV9ET1dOLAkvKmRvd24qLwotCVsweDA1XSA9IEtFWV9DLAkJLypjYXAqLwotCVsweDA2XSA9IEtFWV9TLAkJLypzdG9wKi8KLQlbMHg0MF0gPSBLRVlfRiwJCS8qZnVsbCovCi0JWzB4MWVdID0gS0VZX1csCQkvKnR2bW9kZSovCi0JWzB4MWJdID0gS0VZX0IsCQkvKnJlY2FsbCovCi19OwotCiAvKiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCAqLwogc3RydWN0IGluZnJhcmVkIHsKLQl1MTYJa2V5X21hcFsxMjhdOwogCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldjsKKwlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUJaXI7CiAJY2hhcgkJCWlucHV0X3BoeXNbMzJdOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlpcl90YXNrbGV0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCXUzMgkJCWlyX2NvbW1hbmQ7CiB9OwogCkBAIC0yMjAsMTAgKzE4NiwxNCBAQAogCS8qIGkyYyAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAorCS8qIGlycSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCiAJLyogZG1hICovCiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAl1bnNpZ25lZCBjaGFyICp0c19idWY7CiAJdTMyIHdycDsKKwl1MzIgbmV4dHdycDsKIAl1MzIgYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50CVBhY2tldEVycm9yQ291bnQ7CiAJdW5zaWduZWQgaW50IGRtYXJzdDsKQEAgLTIzMyw4ICsyMDMsNiBAQAogCiAjZGVmaW5lIGRtX2lvX21lbShyZWcpCSgodW5zaWduZWQgbG9uZykoJmRtMTEwNWR2Yi0+aW9fbWVtW3JlZ10pKQogCi1zdGF0aWMgc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiX2xvY2FsOwotCiBzdGF0aWMgaW50IGRtMTEwNV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAogCQkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewpAQCAtNDA3LDM4ICszNzUsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogaXIgdGFza2xldCAqLwotc3RhdGljIHZvaWQgZG0xMTA1X2VtaXRfa2V5KHVuc2lnbmVkIGxvbmcgcGFybSkKKy8qIGlyIHdvcmsgaGFuZGxlciAqLworc3RhdGljIHZvaWQgZG0xMTA1X2VtaXRfa2V5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaW5mcmFyZWQgKmlyID0gKHN0cnVjdCBpbmZyYXJlZCAqKSBwYXJtOworCXN0cnVjdCBpbmZyYXJlZCAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGluZnJhcmVkLCB3b3JrKTsKIAl1MzIgaXJjb20gPSBpci0+aXJfY29tbWFuZDsKIAl1OCBkYXRhOwotCXUxNiBrZXljb2RlOworCisJaWYgKGlyX2RlYnVnKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgYnl0ZSAweCUwNHhcbiIsIF9fZnVuY19fLCBpcmNvbSk7CiAKIAlkYXRhID0gKGlyY29tID4+IDgpICYgMHg3ZjsKIAotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1JBVywgKDB4MDAwMGY4IDw8IDE2KSB8IGRhdGEpOwotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGRhdGEpOwotCWtleWNvZGUgPSBpci0+a2V5X21hcFtkYXRhXTsKKwlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dF9kZXYsICZpci0+aXIsIGRhdGEsIGRhdGEpOworCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dF9kZXYsICZpci0+aXIpOworfQogCi0JaWYgKCFrZXljb2RlKQotCQlyZXR1cm47CisvKiB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIGRtMTEwNV9kbXhfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPQorCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1ZHZiLCB3b3JrKTsKKwl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOworCXUzMiBvbGR3cnAgPSBkbTExMDVkdmItPndycDsKKwl1MzIgbmV4dHdycCA9IGRtMTEwNWR2Yi0+bmV4dHdycDsKIAotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMSk7Ci0JaW5wdXRfc3luYyhpci0+aW5wdXRfZGV2KTsKLQlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsIDApOwotCWlucHV0X3N5bmMoaXItPmlucHV0X2Rldik7CisJaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7CisJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOworCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCisJCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCisJCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7CisJCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7CisJCQlkbTExMDVkdmItPndycCA9IDA7CisJCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOworCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQkJcmV0dXJuOworCQl9CisJfQogCisJaWYgKG5leHR3cnAgPCBvbGR3cnApIHsKKwkJbWVtY3B5KGRtMTEwNWR2Yi0+dHNfYnVmICsgZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSwKKwkJCQkJCWRtMTEwNWR2Yi0+dHNfYnVmLCBuZXh0d3JwKTsKKwkJbmJwYWNrZXRzID0gKChkbTExMDVkdmItPmJ1ZmZlcl9zaXplIC0gb2xkd3JwKSArIG5leHR3cnApIC8gMTg4OworCX0gZWxzZQorCQluYnBhY2tldHMgPSAobmV4dHdycCAtIG9sZHdycCkgLyAxODg7CisKKwlkbTExMDVkdmItPndycCA9IG5leHR3cnA7CisJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LAorCQkJCQkmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGRtMTEwNWR2Yl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgcGllY2U7Ci0JdW5zaWduZWQgaW50IG5icGFja2V0czsKLQl1MzIgY29tbWFuZDsKLQl1MzIgbmV4dHdycDsKLQl1MzIgb2xkd3JwOwogCiAJLyogUmVhZC1Xcml0ZSBJTlNUUyBBY2sncyBJbnRlcnJ1cHQgZm9yIERNMTEwNSBjaGlwIDE2LjAzLjIwMDggKi8KIAl1bnNpZ25lZCBpbnQgaW50c3RzID0gaW5iKGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CkBAIC00NDcsNzEgKzQzOCwyNSBAQAogCXN3aXRjaCAoaW50c3RzKSB7CiAJY2FzZSBJTlRTVFNfVFNJUlE6CiAJY2FzZSAoSU5UU1RTX1RTSVJRIHwgSU5UU1RTX0lSKToKLQkJbmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KLQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSkgOwotCQlvbGR3cnAgPSBkbTExMDVkdmItPndycDsKLQkJc3Bpbl9sb2NrKCZkbTExMDVkdmItPmxvY2spOwotCQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgotCQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCi0JCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgewotCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7Ci0JCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCi0JCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgotCQkJCQkoZG0xMTA1ZHZiLT5kbWFyc3QgPT0gMCkpIHsKLQkJCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7Ci0JCQkJZG0xMTA1ZHZiLT53cnAgPSAwOwotCQkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7Ci0JCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOwotCQkJCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCX0KLQkJfQotCQlpZiAobmV4dHdycCA8IG9sZHdycCkgewotCQkJcGllY2UgPSBkbTExMDVkdmItPmJ1ZmZlcl9zaXplIC0gb2xkd3JwOwotCQkJbWVtY3B5KGRtMTEwNWR2Yi0+dHNfYnVmICsgZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSwgZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOwotCQkJbmJwYWNrZXRzID0gKHBpZWNlICsgbmV4dHdycCkvMTg4OwotCQl9IGVsc2UJewotCQkJbmJwYWNrZXRzID0gKG5leHR3cnAgLSBvbGR3cnApLzE4ODsKLQkJfQotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsICZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwotCQlkbTExMDVkdmItPndycCA9IG5leHR3cnA7Ci0JCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOworCQlkbTExMDVkdmItPm5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCisJCQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7CisJCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+d29yayk7CiAJCWJyZWFrOwogCWNhc2UgSU5UU1RTX0lSOgotCQljb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7Ci0JCWlmIChpcl9kZWJ1ZykKLQkJCXByaW50aygiZG0xMTA1OiByZWNlaXZlZCBieXRlIDB4JTA0eFxuIiwgY29tbWFuZCk7Ci0KLQkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gY29tbWFuZDsKLQkJdGFza2xldF9zY2hlZHVsZSgmZG0xMTA1ZHZiLT5pci5pcl90YXNrbGV0KTsKKwkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7CisJCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+aXIud29yayk7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKLQotCi19Ci0KLS8qIHJlZ2lzdGVyIHdpdGggaW5wdXQgbGF5ZXIgKi8KLXN0YXRpYyB2b2lkIGlucHV0X3JlZ2lzdGVyX2tleXMoc3RydWN0IGluZnJhcmVkICppcikKLXsKLQlpbnQgaTsKLQotCW1lbXNldChpci0+aW5wdXRfZGV2LT5rZXliaXQsIDAsIHNpemVvZihpci0+aW5wdXRfZGV2LT5rZXliaXQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyLT5rZXlfbWFwKTsgaSsrKQotCQkJc2V0X2JpdChpci0+a2V5X21hcFtpXSwgaXItPmlucHV0X2Rldi0+a2V5Yml0KTsKLQotCWlyLT5pbnB1dF9kZXYtPmtleWNvZGUgPSBpci0+a2V5X21hcDsKLQlpci0+aW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihpci0+a2V5X21hcFswXSk7Ci0JaXItPmlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoaXItPmtleV9tYXApOwogfQogCiBpbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycjsKLQotCWRtMTEwNWR2Yl9sb2NhbCA9IGRtMTEwNTsKKwlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBpcl9jb2Rlc19kbTExMDVfbmVjOworCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KQpAQCAtNTIxLDEyICs0NjYsMTEgQEAKIAlzbnByaW50ZihkbTExMDUtPmlyLmlucHV0X3BoeXMsIHNpemVvZihkbTExMDUtPmlyLmlucHV0X3BoeXMpLAogCQkicGNpLSVzL2lyMCIsIHBjaV9uYW1lKGRtMTEwNS0+cGRldikpOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmZG0xMTA1LT5pci5pciwgaXJfdHlwZSwgaXJfY29kZXMpOwogCWlucHV0X2Rldi0+bmFtZSA9ICJEVkIgb24tY2FyZCBJUiByZWNlaXZlciI7Ci0KIAlpbnB1dF9kZXYtPnBoeXMgPSBkbTExMDUtPmlyLmlucHV0X3BoeXM7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1BDSTsKLQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAyOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CiAJaWYgKGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcikgewogCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKIAkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwpAQCAtNTM0LDI1ICs0NzgsMjIgQEAKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnZlbmRvcjsKIAkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5kZXZpY2U7CiAJfQorCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRtMTEwNS0+cGRldi0+ZGV2OwotCS8qIGluaXRpYWwga2V5bWFwICovCi0JbWVtY3B5KGRtMTEwNS0+aXIua2V5X21hcCwgaXJfY29kZXNfZG0xMTA1X25lYywgc2l6ZW9mIGRtMTEwNS0+aXIua2V5X21hcCk7Ci0JaW5wdXRfcmVnaXN0ZXJfa2V5cygmZG0xMTA1LT5pcik7CisKKwlJTklUX1dPUksoJmRtMTEwNS0+aXIud29yaywgZG0xMTA1X2VtaXRfa2V5KTsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpIHsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQl0YXNrbGV0X2luaXQoJmRtMTEwNS0+aXIuaXJfdGFza2xldCwgZG0xMTA1X2VtaXRfa2V5LCAodW5zaWduZWQgbG9uZykgJmRtMTEwNS0+aXIpOwotCiAJcmV0dXJuIDA7CiB9CiAKLQogdm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQogewotCXRhc2tsZXRfa2lsbCgmZG0xMTA1LT5pci5pcl90YXNrbGV0KTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkbTExMDUtPmlyLmlucHV0X2Rldik7CiAKIH0KQEAgLTcxMCw3ICs2NTEsNyBAQAogCiAJZG0xMTA1ZHZiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtMTEwNWR2YiksIEdGUF9LRVJORUwpOwogCWlmICghZG0xMTA1ZHZiKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkbTExMDVkdmItPnBkZXYgPSBwZGV2OwogCWRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgPSA1ICogRE0xMTA1X0RNQV9CWVRFUzsKQEAgLTc0MCwxMyArNjgxLDkgQEAKIAlzcGluX2xvY2tfaW5pdCgmZG0xMTA1ZHZiLT5sb2NrKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZG0xMTA1ZHZiKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBkbTExMDVkdmIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKLQogCXJldCA9IGRtMTEwNWR2Yl9od19pbml0KGRtMTEwNWR2Yik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOworCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKIAogCS8qIGkyYyAqLwogCWkyY19zZXRfYWRhcGRhdGEoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIGRtMTEwNWR2Yik7CkBAIC04MTMsOCArNzUwLDE1IEBACiAKIAlkdmJfbmV0X2luaXQoZHZiX2FkYXB0ZXIsICZkbTExMDVkdmItPmR2Ym5ldCwgZG14KTsKIAlkbTExMDVfaXJfaW5pdChkbTExMDVkdmIpOwotb3V0OgotCXJldHVybiByZXQ7CisKKwlJTklUX1dPUksoJmRtMTEwNWR2Yi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCQkJCURSSVZFUl9OQU1FLCBkbTExMDVkdmIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCXJldHVybiAwOwogCiBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKIAlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKQEAgLTg0Myw3ICs3ODcsNyBAQAogZXJyX2tmcmVlOgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkbTExMDVkdmIpOwotCWdvdG8gb3V0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAwNjlkODQ3Li5jMzVmYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZGVtdXhfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kZW11eF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gZHZiX2RlbXV4X3JlYWQsCiAJLmlvY3RsID0gZHZiX2RlbXV4X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKaW5kZXggN2UzYWVhYS4uY2IyMmRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCkBAIC0xNjA3LDcgKzE2MDcsNyBAQAogRVhQT1JUX1NZTUJPTChkdmJfY2FfZW41MDIyMV9pbml0KTsKIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gZHZiX2NhX2VuNTAyMjFfaW9fcmVhZCwKIAkud3JpdGUgPSBkdmJfY2FfZW41MDIyMV9pb193cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggOGRjYjNmYi4uZWJjNzgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2Zyb250ZW5kX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZnJvbnRlbmRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5wb2xsCQk9IGR2Yl9mcm9udGVuZF9wb2xsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IGY2YmE4NDYuLjgyODBmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTE0NTksNyArMTQ1OSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX25ldF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX25ldF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCA9IGR2Yl9uZXRfaW9jdGwsCiAJLm9wZW4gPQlkdmJfZ2VuZXJpY19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCA2YTMyNjgwLi5hNDU0ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjI4LDggKzIyOCw4IEBACiAJZHZiZGV2LT5mb3BzID0gZHZiZGV2Zm9wczsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZHZiZGV2LT53YWl0X3F1ZXVlKTsKIAotCW1lbWNweShkdmJkZXYtPmZvcHMsIHRlbXBsYXRlLT5mb3BzLCBzaXplb2Yoc3RydWN0IGZpbGVfb3BlcmF0aW9ucykpOwotCWR2YmRldi0+Zm9wcy0+b3duZXIgPSBhZGFwLT5tb2R1bGU7CisJbWVtY3B5KGR2YmRldmZvcHMsIHRlbXBsYXRlLT5mb3BzLCBzaXplb2Yoc3RydWN0IGZpbGVfb3BlcmF0aW9ucykpOworCWR2YmRldmZvcHMtPm93bmVyID0gYWRhcC0+bW9kdWxlOwogCiAJbGlzdF9hZGRfdGFpbCAoJmR2YmRldi0+bGlzdF9oZWFkLCAmYWRhcC0+ZGV2aWNlX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCmluZGV4IGRjYTQ5Y2YuLjc5OTI3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCkBAIC03MSw3ICs3MSw3IEBACiAKIHN0cnVjdCBkdmJfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CiAJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyOwogCWludCB0eXBlOwogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCA0OWY3YjIwLi42MTAzY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0yNSw3ICsyNSw3IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQVZlck1lZGlhIEF2ZXJUViBEVkItVCBVU0IgMi4wIChBODAwKSByZWNlaXZlci4KIApAQCAtMzQsNyArMzQsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUIzMDAwTUIKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IgMS4xIGFuZCAyLjAgRFZCLVQgcmVjZWl2ZXJzIGJhc2VkIG9uIHJlZmVyZW5jZSBkZXNpZ25zIG1hZGUgYnkKIAkgIERpQmNvbSAoPGh0dHA6Ly93d3cuZGliY29tLmZyPikgZXF1aXBwZWQgd2l0aCBhIERpQjMwMDBNLUIgZGVtb2R1bGF0b3IuCkBAIC01NSw3ICs1NSw3IEBACiAJdHJpc3RhdGUgIkRpQmNvbSBVU0IgRFZCLVQgZGV2aWNlcyAoYmFzZWQgb24gdGhlIERpQjMwMDBNLUMvUCkgKHNlZSBoZWxwIGZvciBkZXZpY2UgbGlzdCkiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IyLjAgRFZCLVQgcmVjZWl2ZXJzIGJhc2VkIG9uIHJlZmVyZW5jZSBkZXNpZ25zIG1hZGUgYnkKIAkgIERpQmNvbSAoPGh0dHA6Ly93d3cuZGliY29tLmZyPikgZXF1aXBwZWQgd2l0aCBhIERpQjMwMDBNLUMvUCBkZW1vZHVsYXRvci4KQEAgLTY5LDE1ICs2OSwxNyBAQAogY29uZmlnIERWQl9VU0JfRElCMDcwMAogCXRyaXN0YXRlICJEaUJjb20gRGlCMDcwMCBVU0IgRFZCIGRldmljZXMgKHNlZSBoZWxwIGZvciBzdXBwb3J0ZWQgZGV2aWNlcykiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCi0Jc2VsZWN0IERWQl9ESUI3MDAwUAotCXNlbGVjdCBEVkJfRElCNzAwME0KLQlzZWxlY3QgRFZCX0RJQjMwMDBNQworCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RJQjcwMDBNIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9ESUIzMDAwTUMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjI2NiBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDdUIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IyLjAvMS4xIERWQiByZWNlaXZlcnMgYmFzZWQgb24gdGhlIERpQjA3MDAgVVNCIGJyaWRnZS4gVGhlCiAJICBVU0IgYnJpZGdlIGlzIGFsc28gcHJlc2VudCBpbiBkZXZpY2VzIGhhdmluZyB0aGUgRGlCNzcwMCBEVkItVC1VU0IKQEAgLTk1LDcgKzk3LDggQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCMzAwME1DCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSGFuZlRlayBVTVQtMDEwIFVTQjIuMCBzdGljay1zaXplZCBEVkItVCByZWNlaXZlci4KIApAQCAtMTA4LDEwICsxMTEsMTEgQEAKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUI3MDAwUCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTEdTOEdMNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIENvbmV4YW50IFVTQjIuMCBoeWJyaWQgcmVmZXJlbmNlIGRlc2lnbi4KIAkgIEN1cnJlbnRseSwgb25seSBEVkIgYW5kIEFUU0MgbW9kZXMgYXJlIHN1cHBvcnRlZCwgYW5hbG9nIG1vZGUKQEAgLTEyNSw4ICsxMjksOCBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1TSSBNZWdhIFNreSA1ODAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgogCSAgQ3VycmVudGx5LCBvbmx5IGRldmljZXMgd2l0aCBhIHByb2R1Y3QgaWQgb2YKQEAgLTEzNyw3ICsxNDEsNyBAQAogCXRyaXN0YXRlICJHZW5lc3lzIExvZ2ljIEdMODYxIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTVNJIE1lZ2Fza3kgNTgwICg1NTgwMSkgRFZCLVQgVVNCMi4wCiAJICByZWNlaXZlciB3aXRoIFVTQiBJRCAwZGIwOjU1ODEuCkBAIC0xNDYsNyArMTUwLDcgQEAKIAl0cmlzdGF0ZSAiQWxjb3IgTWljcm8gQVU2NjEwIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgU2lnbWF0ZWsgRFZCLTExMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAKQEAgLTE5OSw3ICsyMDMsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhdXBwYXVnZSBXaW5UVi1OT1ZBLVQgdXNiMiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAKQEAgLTIzNSw4ICsyMzksOCBAQAogY29uZmlnIERWQl9VU0JfQUY5MDA1CiAJdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDA1IERWQi1UIFVTQjEuMSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQiAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFmYXRlY2ggQUY5MDA1IGJhc2VkIERWQi1UIFVTQjEuMSByZWNlaXZlcgogCSAgYW5kIHRoZSBUZXJyYVRlYyBDaW5lcmd5IFQgVVNCIFhFIChSZXYuMSkKQEAgLTI4NCw3ICsyODgsNyBAQAogCXRyaXN0YXRlICJBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgogCkBAIC0yOTMsOSArMjk3LDE4IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBEVkJfQUY5MDEzCiAJc2VsZWN0IERWQl9QTEwgICAgICAgICAgICAgIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCAgIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgICBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NQzQ0UzgwMyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBZmF0ZWNoIEFGOTAxNSBiYXNlZCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKworY29uZmlnIERWQl9VU0JfQ0U2MjMwCisJdHJpc3RhdGUgIkludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IERWQl9aTDEwMzUzCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCmluZGV4IDMxMjJiN2MuLmY5MjczNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQpAQCAtNzYsNiArNzYsOCBAQAogZHZiLXVzYi1jaW5lcmd5VDItb2JqcyA9IGNpbmVyZ3lUMi1jb3JlLm8gY2luZXJneVQyLWZlLm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDIpICs9IGR2Yi11c2ItY2luZXJneVQyLm8KIAorZHZiLXVzYi1jZTYyMzAtb2JqcyA9IGNlNjIzMC5vCitvYmotJChDT05GSUdfRFZCX1VTQl9DRTYyMzApICs9IGR2Yi11c2ItY2U2MjMwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLwogIyBkdWUgdG8gdHVuZXIteGMzMDI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA2YTk3YTQwLi5mMGJhOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKQEAgLTI3LDkgKzI3LDcgQEAKICNpbmNsdWRlICJxdDEwMTAuaCIKICNpbmNsdWRlICJ0ZGExODI3MS5oIgogI2luY2x1ZGUgIm14bDUwMDVzLmgiCi0jaWYgMAotI2luY2x1ZGUgIm1jNDRzODB4LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJtYzQ0czgwMy5oIgogCiBzdGF0aWMgaW50IGR2Yl91c2JfYWY5MDE1X2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTM3LDkgKzM1LDYgQEAKIHN0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMTVfcmVtb3RlOwogbW9kdWxlX3BhcmFtX25hbWVkKHJlbW90ZSwgZHZiX3VzYl9hZjkwMTVfcmVtb3RlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZW1vdGUsICJzZWxlY3QgcmVtb3RlIik7Ci1zdGF0aWMgaW50IGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkdWFsX21vZGUsIGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZHVhbF9tb2RlLCAiZW5hYmxlIGR1YWwgbW9kZSIpOwogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYWY5MDE1X3VzYl9tdXRleCk7CkBAIC0yODMsNiArMjc4LDIxIEBACiAJCQlyZXEuZGF0YSA9ICZtc2dbaSsxXS5idWZbMF07CiAJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CiAJCQlpICs9IDI7CisJCX0gZWxzZSBpZiAobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKQorCQkJCWdvdG8gZXJyb3I7CisJCQllbHNlCisJCQkJcmVxLmNtZCA9IFJFQURfSTJDOworCQkJcmVxLmkyY19hZGRyID0gbXNnW2ldLmFkZHI7CisJCQlyZXEuYWRkciA9IGFkZHI7CisJCQlyZXEubWJveCA9IG1ib3g7CisJCQlyZXEuYWRkcl9sZW4gPSBhZGRyX2xlbjsKKwkJCXJlcS5kYXRhX2xlbiA9IG1zZ1tpXS5sZW47CisJCQlyZXEuZGF0YSA9ICZtc2dbaV0uYnVmWzBdOworCQkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCQkJaSArPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKG1zZ1tpXS5hZGRyID09CiAJCQkJYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcykKQEAgLTc0OCw2ICs3NTgsMTYgQEAKIAkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQogCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSk7CiAJCQkJYnJlYWs7CisJCQljYXNlIEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTOgorCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MpOworCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJc3dpdGNoIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkgewpAQCAtODM2LDkgKzg1Niw2IEBACiAJCWdvdG8gZXJyb3I7CiAJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSB2YWw7CiAJZGViX2luZm8oIiVzOiBUUyBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpOwotCS8qIGRpc2FibGUgZHVhbCBtb2RlIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBidWdneSAqLwotCWlmICghZHZiX3VzYl9hZjkwMTVfZHVhbF9tb2RlKQotCQlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IDA7CiAKIAkvKiBTZXQgYWRhcHRlcjAgYnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIFVTQiBwb3J0IHNwZWVkLCBhZGFwdGVyMSBidWZmZXIKIAkgICBzaXplIGNhbiBiZSBzdGF0aWMgYmVjYXVzZSBpdCBpcyBlbmFibGVkIG9ubHkgVVNCMi4wICovCkBAIC05MzUsNyArOTUyLDYgQEAKIAkJc3dpdGNoICh2YWwpIHsKIAkJY2FzZSBBRjkwMTNfVFVORVJfRU5WNzdIMTFENToKIAkJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwOgotCQljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKIAkJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwOgogCQljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgogCQljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjBfMjoKQEAgLTk0OCw2ICs5NjQsMTAgQEAKIAkJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNVI6CiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDA7CiAJCQlicmVhazsKKwkJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5ncGlvWzFdID0gQUY5MDEzX0dQSU9fTE87CisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXdhcm4oInR1bmVyIGlkOiVkIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSByZXBvcnQhIiwgdmFsKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtMTEzNSw2ICsxMTU1LDExIEBACiAJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCiB9OwogCitzdGF0aWMgc3RydWN0IG1jNDRzODAzX2NvbmZpZyBhZjkwMTVfbWM0NHM4MDNfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IDB4YzAsCisJLmRpZ19vdXQgPSAxLAorfTsKKwogc3RhdGljIGludCBhZjkwMTVfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5kZXYtPnByaXY7CkBAIC0xMTc5LDE1ICsxMjA0LDggQEAKIAkJCURWQl9QTExfVERBNjY1WCkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKLSNpZiAwCi0JCXJldCA9IGR2Yl9hdHRhY2gobWM0NHM4MHhfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXApCi0JCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7Ci0jZWxzZQotCQlyZXQgPSAtRU5PREVWOwotCQlpbmZvKCJGcmVlc2NhbGUgTUM0NFM4MDMgdHVuZXIgZm91bmQgYnV0IG5vIGRyaXZlciBmb3IgdGhhdCIgXAotCQkJInR1bmVyLiBMb29rIGF0IHRoZSBMaW51eHR2Lm9yZyBmb3IgdHVuZXIgZHJpdmVyIiBcCi0JCQkic3RhdHVzLiIpOwotI2VuZGlmCisJCXJldCA9IGR2Yl9hdHRhY2gobWM0NHM4MDNfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X21jNDRzODAzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgogCWRlZmF1bHQ6CkBAIC0xMjE4LDYgKzEyMzYsNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBLCBVU0JfUElEX0FWRVJNRURJQV9BMzA5KX0sCiAvKiAxNSAqL3tVU0JfREVWSUNFKFVTQl9WSURfTVNJXzIsICAgICBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJSSl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTVVKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5NVVfMil9LAogCXswfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWY5MDE1X3VzYl90YWJsZSk7CkBAIC0xNDE3LDcgKzE0MzYsOCBAQAogCQkJewogCQkJCS5uYW1lID0gIktXb3JsZCBVU0IgRFZCLVQgVFYgU3RpY2sgSUkgIiBcCiAJCQkJCSIoVlMtRFZCLVQgMzk1VSkiLAotCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNl0sIE5VTEx9LAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNl0sCisJCQkJCSAgICAgJmFmOTAxNV91c2JfdGFibGVbMTddLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCAyMWM3NzgyLi4wMGUyNTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogCUFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKIAlBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxOCwKIAlBRjkwMTVfUkVNT1RFX0RJR0lUVFJBREVfRFZCX1QsCisJQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1MsCiB9OwogCiAvKiBMZWFkdGVrIFdpbkZhc3QgRFRWIERvbmdsZSBHb2xkICovCkBAIC01OTcsNiArNTk4LDM2IEBACiAJMHgwMywgMHhmYywgMHgwMywgMHhmYywgMHgwZSwgMHgwNSwgMHgwMCwKIH07CiAKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzW10gPSB7CisJMHgwNSwgMHhmYSwgMHgwMSwgMHhmZSwgMHgxMiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDAyLCAweGZkLCAweDBlLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDMsIDB4ZmMsIDB4MGQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNCwgMHhmYiwgMHgyZSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA1LCAweGZhLCAweDJkLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDYsIDB4ZjksIDB4MTAsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNywgMHhmOCwgMHgwZiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA4LCAweGY3LCAweDNkLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDksIDB4ZjYsIDB4MWUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwYSwgMHhmNSwgMHgxZiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBiLCAweGY0LCAweDIwLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGMsIDB4ZjMsIDB4MjEsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwZCwgMHhmMiwgMHgyMiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBlLCAweGYxLCAweDIzLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGYsIDB4ZjAsIDB4MjQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMCwgMHhlZiwgMHgyNSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDExLCAweGVlLCAweDI2LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTIsIDB4ZWQsIDB4MjcsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMywgMHhlYywgMHgwNCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE1LCAweGVhLCAweDBhLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTYsIDB4ZTksIDB4MTEsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxNywgMHhlOCwgMHgxNSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE4LCAweGU3LCAweDE2LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MWMsIDB4ZTMsIDB4MDUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxZCwgMHhlMiwgMHgwOSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDRkLCAweGIyLCAweDNmLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4NTYsIDB4YTksIDB4M2UsIDB4MDUsIDB4MDAKK307CisKIC8qIERpZ2l0dHJhZGUgRFZCLVQgVVNCIFN0aWNrICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGVbXSA9IHsKIAl7IDB4MDEsIDB4MGYsIEtFWV9MQVNUIH0sCS8qIFJFVFVSTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2MjgyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNlNjIzMC5oIgorI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJteGw1MDA1cy5oIgorCisvKiBkZWJ1ZyAqLworc3RhdGljIGludCBkdmJfdXNiX2NlNjIzMF9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9jZTYyMzBfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY2U2MjMwX3psMTAzNTNfY29uZmlnOworCitzdGF0aWMgaW50IGNlNjIzMF9yd191ZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgcmVxX3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwaXBlOworCXU4IHJlcXVlc3Q7CisJdTggcmVxdWVzdHR5cGU7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwl1OCBidWZbcmVxLT5kYXRhX2xlbl07CisKKwlyZXF1ZXN0ID0gcmVxLT5jbWQ7CisJdmFsdWUgPSByZXEtPnZhbHVlOworCWluZGV4ID0gcmVxLT5pbmRleDsKKworCXN3aXRjaCAocmVxLT5jbWQpIHsKKwljYXNlIEkyQ19SRUFEOgorCWNhc2UgREVNT0RfUkVBRDoKKwljYXNlIFJFR19SRUFEOgorCQlyZXF1ZXN0dHlwZSA9IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOKTsKKwkJYnJlYWs7CisJY2FzZSBJMkNfV1JJVEU6CisJY2FzZSBERU1PRF9XUklURToKKwljYXNlIFJFR19XUklURToKKwkJcmVxdWVzdHR5cGUgPSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gY29tbWFuZDolMDJ4IiwgcmVxLT5jbWQpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHJlcXVlc3R0eXBlID09IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCkpIHsKKwkJLyogd3JpdGUgKi8KKwkJbWVtY3B5KGJ1ZiwgcmVxLT5kYXRhLCByZXEtPmRhdGFfbGVuKTsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKKwl9IGVsc2UgeworCQkvKiByZWFkICovCisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCk7CisJfQorCisJbXNsZWVwKDEpOyAvKiBhdm9pZCBJMkMgZXJyb3JzICovCisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwKKwkJCQlidWYsIHNpemVvZihidWYpLCBDRTYyMzBfVVNCX1RJTUVPVVQpOworCisJY2U2MjMwX2RlYnVnX2R1bXAocmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwgYnVmLAorCQlyZXEtPmRhdGFfbGVuLCBkZWJfeGZlcik7CisKKwlpZiAocmV0IDwgMCkKKwkJZGViX2luZm8oIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkOiVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwllbHNlCisJCXJldCA9IDA7CisKKwkvKiByZWFkIHJlcXVlc3QsIGNvcHkgcmV0dXJuZWQgZGF0YSB0byByZXR1cm4gYnVmICovCisJaWYgKCFyZXQgJiYgcmVxdWVzdHR5cGUgPT0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4pKQorCQltZW1jcHkocmVxLT5kYXRhLCBidWYsIHJlcS0+ZGF0YV9sZW4pOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNlNjIzMF9jdHJsX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHN0cnVjdCByZXFfdCAqcmVxKQoreworCXJldHVybiBjZTYyMzBfcndfdWRldihkLT51ZGV2LCByZXEpOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgY2U2MjMwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGkgPSAwOworCXN0cnVjdCByZXFfdCByZXE7CisJaW50IHJldCA9IDA7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZigmcmVxKSk7CisKKwlpZiAobnVtID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwl3aGlsZSAoaSA8IG51bSkgeworCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQljZTYyMzBfemwxMDM1M19jb25maWcuZGVtb2RfYWRkcmVzcykgeworCQkJCXJlcS5jbWQgPSBERU1PRF9SRUFEOworCQkJCXJlcS52YWx1ZSA9IG1zZ1tpXS5hZGRyID4+IDE7CisJCQkJcmVxLmluZGV4ID0gbXNnW2ldLmJ1ZlswXTsKKwkJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaSsxXS5sZW47CisJCQkJcmVxLmRhdGEgPSAmbXNnW2krMV0uYnVmWzBdOworCQkJCXJldCA9IGNlNjIzMF9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyKCJpMmMgcmVhZCBub3QgaW1wbGVtZW50ZWQiKTsKKwkJCQlyZXQgPSAtRVBFUk07CisJCQl9CisJCQlpICs9IDI7CisJCX0gZWxzZSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQljZTYyMzBfemwxMDM1M19jb25maWcuZGVtb2RfYWRkcmVzcykgeworCQkJCXJlcS5jbWQgPSBERU1PRF9XUklURTsKKwkJCQlyZXEudmFsdWUgPSBtc2dbaV0uYWRkciA+PiAxOworCQkJCXJlcS5pbmRleCA9IG1zZ1tpXS5idWZbMF07CisJCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbi0xOworCQkJCXJlcS5kYXRhID0gJm1zZ1tpXS5idWZbMV07CisJCQkJcmV0ID0gY2U2MjMwX2N0cmxfbXNnKGQsICZyZXEpOworCQkJfSBlbHNlIHsKKwkJCQlyZXEuY21kID0gSTJDX1dSSVRFOworCQkJCXJlcS52YWx1ZSA9IDB4MjAwMCArIChtc2dbaV0uYWRkciA+PiAxKTsKKwkJCQlyZXEuaW5kZXggPSAweDAwMDA7CisJCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbjsKKwkJCQlyZXEuZGF0YSA9ICZtc2dbaV0uYnVmWzBdOworCQkJCXJldCA9IGNlNjIzMF9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCX0KKwkJCWkgKz0gMTsKKwkJfQorCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiByZXQgPyByZXQgOiBpOworfQorCitzdGF0aWMgdTMyIGNlNjIzMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGNlNjIzMF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGNlNjIzMF9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGNlNjIzMF9pMmNfZnVuYywKK307CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjZTYyMzBfemwxMDM1M19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDFlLAorCS5hZGNfY2xvY2sgPSA0NTAwMDAsCisJLmlmMiA9IDQ1NzAwLAorCS5ub190dW5lciA9IDEsCisJLnBhcmFsbGVsX3RzID0gMSwKKwkuY2xvY2tfY3RsXzEgPSAweDM0LAorCS5wbGxfMCA9IDB4MGUsCit9OworCitzdGF0aWMgaW50IGNlNjIzMF96bDEwMzUzX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZjZTYyMzBfemwxMDM1M19jb25maWcsCisJCSZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGNlNjIzMF9teGw1MDAzc19jb25maWcgPSB7CisJLmkyY19hZGRyZXNzICAgICA9IDB4YzYsCisJLmlmX2ZyZXEgICAgICAgICA9IElGX0ZSRVFfNDU3MDAwMEhaLAorCS54dGFsX2ZyZXEgICAgICAgPSBDUllTVEFMX0ZSRVFfMTYwMDAwMDBIWiwKKwkuYWdjX21vZGUgICAgICAgID0gTVhMX1NJTkdMRV9BR0MsCisJLnRyYWNraW5nX2ZpbHRlciA9IE1YTF9URl9ERUZBVUxULAorCS5yc3NpX2VuYWJsZSAgICAgPSBNWExfUlNTSV9FTkFCTEUsCisJLmNhcF9zZWxlY3QgICAgICA9IE1YTF9DQVBfU0VMX0VOQUJMRSwKKwkuZGl2X291dCAgICAgICAgID0gTVhMX0RJVl9PVVRfNCwKKwkuY2xvY2tfb3V0ICAgICAgID0gTVhMX0NMT0NLX09VVF9ESVNBQkxFLAorCS5vdXRwdXRfbG9hZCAgICAgPSBNWEw1MDA1U19JRl9PVVRQVVRfTE9BRF8yMDBfT0hNLAorCS50b3AJCSA9IE1YTDUwMDVTX1RPUF8yNVAyLAorCS5tb2RfbW9kZSAgICAgICAgPSBNWExfRElHSVRBTF9NT0RFLAorCS5pZl9tb2RlICAgICAgICAgPSBNWExfWkVST19JRiwKKwkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKK307CisKK3N0YXRpYyBpbnQgY2U2MjMwX214bDUwMDNzX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCQkmY2U2MjMwX214bDUwMDNzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2U2MjMwX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6IG9ub2ZmOiVkXG4iLCBfX2Z1bmNfXywgb25vZmYpOworCisJLyogSW50ZXJmYWNlTnVtYmVyIDEgLyBBbHRlcm5hdGVTZXR0aW5nIDAgICAgIGlkbGUKKwkgICBJbnRlcmZhY2VOdW1iZXIgMSAvIEFsdGVybmF0ZVNldHRpbmcgMSAgICAgc3RyZWFtaW5nICovCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgMSwgb25vZmYpOworCWlmIChyZXQpCisJCWVycigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkIHdpdGggZXJyb3I6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjZTYyMzBfcHJvcGVydGllczsKKworc3RhdGljIGludCBjZTYyMzBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gTlVMTDsKKworCWRlYl9pbmZvKCIlczogaW50ZXJmYWNlOiVkXG4iLCBfX2Z1bmNfXywKKwkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAxKSB7CisJCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmNlNjIzMF9wcm9wZXJ0aWVzLCBUSElTX01PRFVMRSwKKwkJCSZkLCBhZGFwdGVyX25yKTsKKwkJaWYgKHJldCkKKwkJCWVycigiaW5pdCBmYWlsZWQgd2l0aCBlcnJvcjolZFxuIiwgcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2U2MjMwX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfSU5URUwsIFVTQl9QSURfSU5URUxfQ0U5NTAwKSB9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjZTYyMzBfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY2U2MjMwX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAorCS5ub19yZWNvbm5lY3QgPSAxLAorCisJLnNpemVfb2ZfcHJpdiA9IDAsCisKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBjZTYyMzBfemwxMDM1M19mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGNlNjIzMF9teGw1MDAzc190dW5lcl9hdHRhY2gsCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNiwKKwkJCQkuZW5kcG9pbnQgPSAweDgyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNTEyLAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfQorCX0sCisKKwkucG93ZXJfY3RybCA9IGNlNjIzMF9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvID0gJmNlNjIzMF9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJLm5hbWUgPSAiSW50ZWwgQ0U5NTAwIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkJLmNvbGRfaWRzID0ge05VTEx9LAorCQkJLndhcm1faWRzID0geyZjZTYyMzBfdGFibGVbMF0sIE5VTEx9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjZTYyMzBfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gImR2Yl91c2JfY2U2MjMwIiwKKwkucHJvYmUgICAgICA9IGNlNjIzMF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlICAgPSBjZTYyMzBfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNlNjIzMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCXJldCA9IHVzYl9yZWdpc3RlcigmY2U2MjMwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3I6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNlNjIzMF9tb2R1bGVfZXhpdCh2b2lkKQoreworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmY2U2MjMwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNlNjIzMF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjZTYyMzBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M0MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQl9VU0JfQ0U2MjMwX0hfCisjZGVmaW5lIF9EVkJfVVNCX0NFNjIzMF9IXworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiY2U2MjMwIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfcmVnKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDEwLCBhcmdzKQorI2RlZmluZSBkZWJfZncoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDIwLCBhcmdzKQorCisjZGVmaW5lIGNlNjIzMF9kZWJ1Z19kdW1wKHIsIHQsIHYsIGksIGIsIGwsIGZ1bmMpIHsgXAorCWludCBsb29wXzsgXAorCWZ1bmMoIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsIFwKKwkJdCwgciwgdiAmIDB4ZmYsIHYgPj4gOCwgaSAmIDB4ZmYsIGkgPj4gOCwgbCAmIDB4ZmYsIGwgPj4gOCk7IFwKKwlpZiAodCA9PSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpKSBcCisJCWZ1bmMoIiA+Pj4gIik7IFwKKwllbHNlIFwKKwkJZnVuYygiIDw8PCAiKTsgXAorCWZvciAobG9vcF8gPSAwOyBsb29wXyA8IGw7IGxvb3BfKyspIFwKKwkJZnVuYygiJTAyeCAiLCBiW2xvb3BfXSk7IFwKKwlmdW5jKCJcbiIpO1wKK30KKworI2RlZmluZSBDRTYyMzBfVVNCX1RJTUVPVVQgMTAwMAorCitzdHJ1Y3QgcmVxX3QgeworCXU4ICBjbWQ7ICAgICAgIC8qIFsxXSAqLworCXUxNiB2YWx1ZTsgICAgIC8qIFsyfDNdICovCisJdTE2IGluZGV4OyAgICAgLyogWzR8NV0gKi8KKwl1MTYgZGF0YV9sZW47ICAvKiBbNnw3XSAqLworCXU4ICAqZGF0YTsKK307CisKK2VudW0gY2U2MjMwX2NtZCB7CisJQ09ORklHX1JFQUQgICAgICAgICAgPSAweGQwLCAvKiByZCAwICh1bmNsZWFyKSAqLworCVVOS05PV05fV1JJVEUgICAgICAgID0gMHhjNywgLyogd3IgNyAodW5jbGVhcikgKi8KKwlJMkNfUkVBRCAgICAgICAgICAgICA9IDB4ZDksIC8qIHJkIDkgKHVuY2xlYXIpICovCisJSTJDX1dSSVRFICAgICAgICAgICAgPSAweGNhLCAvKiB3ciBhICovCisJREVNT0RfUkVBRCAgICAgICAgICAgPSAweGRiLCAvKiByZCBiICovCisJREVNT0RfV1JJVEUgICAgICAgICAgPSAweGNjLCAvKiB3ciBjICovCisJUkVHX1JFQUQgICAgICAgICAgICAgPSAweGRlLCAvKiByZCBlICovCisJUkVHX1dSSVRFICAgICAgICAgICAgPSAweGNmLCAvKiB3ciBmICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDIwMGIyMTUuLmRiN2Y3ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtMTU4LDYgKzE1OCwxMCBAQAogCQkJCWVycigiaTJjIHJlYWQgZXJyb3IgKHN0YXR1cyA9ICVkKVxuIiwgcmVzdWx0KTsKIAkJCQlicmVhazsKIAkJCX0KKworCQkJZGViX2RhdGEoIjw8PCAiKTsKKwkJCWRlYnVnX2R1bXAobXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbiwgZGViX2RhdGEpOworCiAJCX0gZWxzZSB7CiAJCQkvKiBXcml0ZSByZXF1ZXN0ICovCiAJCQlidWZbMF0gPSBSRVFVRVNUX05FV19JMkNfV1JJVEU7CkBAIC0xNjksNiArMTczLDkgQEAKIAkJCS8qIFRoZSBBY3R1YWwgaTJjIHBheWxvYWQgKi8KIAkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKIAorCQkJZGViX2RhdGEoIj4+PiAiKTsKKwkJCWRlYnVnX2R1bXAoYnVmLCBtc2dbaV0ubGVuICsgNCwgZGViX2RhdGEpOworCiAJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKIAkJCQkJCSB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCiAJCQkJCQkgUkVRVUVTVF9ORVdfSTJDX1dSSVRFLApAQCAtMjExLDcgKzIxOCw4IEBACiAKIAkJCS8qIHNwZWNpYWwgdGhpbmcgaW4gdGhlIGN1cnJlbnQgZmlybXdhcmU6IHdoZW4gbGVuZ3RoIGlzIHplcm8gdGhlIHJlYWQtZmFpbGVkICovCiAJCQlpZiAoKGxlbiA9IGRpYjA3MDBfY3RybF9yZChkLCBidWYsIG1zZ1tpXS5sZW4gKyAyLCBtc2dbaSsxXS5idWYsIG1zZ1tpKzFdLmxlbikpIDw9IDApIHsKLQkJCQlkZWJfaW5mbygiSTJDIHJlYWQgZmFpbGVkIG9uIGFkZHJlc3MgJXhcbiIsIG1zZ1tpXS5hZGRyKTsKKwkJCQlkZWJfaW5mbygiSTJDIHJlYWQgZmFpbGVkIG9uIGFkZHJlc3MgMHglMDJ4XG4iLAorCQkJCQkgbXNnW2ldLmFkZHIpOwogCQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA2MzVkMzBhLi44ZGRiYWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlICJ4YzUwMDAuaCIKICNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAiZGliMDA3MC5oIgorI2luY2x1ZGUgImxnZHQzMzA1LmgiCisjaW5jbHVkZSAibXhsNTAwN3QuaCIKIAogc3RhdGljIGludCBmb3JjZV9sbmFfYWN0aXZhdGlvbjsKIG1vZHVsZV9wYXJhbShmb3JjZV9sbmFfYWN0aXZhdGlvbiwgaW50LCAwNjQ0KTsKQEAgLTI2Miw3ICsyNjQsMTIgQEAKIAkJbXNsZWVwKDEwKTsKIAkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOwogCQltc2xlZXAoMTApOwotCQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsMSwxOCxzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKTsKKwkJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCisJCQkJCSAgICAgc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZykKKwkJICAgICE9IDApIHsKKwkJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CiAJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsMHg4MCsoYWRhcC0+aWQgPDwgMSksCkBAIC0yODQsNyArMjkxLDEyIEBACiAJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKIAkJbXNsZWVwKDEwKTsKIAkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7Ci0JCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwyLDE4LHN0azc3MDBkX2RpYjcwMDBwX210MjI2Nl9jb25maWcpOworCQlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAyLCAxOCwKKwkJCQkJICAgICBzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKQorCQkgICAgIT0gMCkgeworCQkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwweDgwKyhhZGFwLT5pZCA8PCAxKSwKQEAgLTQyMSw4ICs0MzMsMTIgQEAKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAltc2xlZXAoMTApOwogCi0JZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKLQkJJnN0azc3MDBwaF9kaWI3NzAwX3hjMzAyOF9jb25maWcpOworCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAorCQkJCSAgICAgJnN0azc3MDBwaF9kaWI3NzAwX3hjMzAyOF9jb25maWcpICE9IDApIHsKKwkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCiAJCSZzdGs3NzAwcGhfZGliNzcwMF94YzMwMjhfY29uZmlnKTsKQEAgLTExODcsOCArMTIwMywxMiBAQAogCW1zbGVlcCgxMCk7CiAJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CiAKLQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAotCQkmZGliNzA3MHBfZGliNzAwMHBfY29uZmlnKTsKKwlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkgICAgICZkaWI3MDcwcF9kaWI3MDAwcF9jb25maWcpICE9IDApIHsKKwkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCiAJCSZkaWI3MDcwcF9kaWI3MDAwcF9jb25maWcpOwpAQCAtMTI0NCw3ICsxMjY0LDEyIEBACiAJbXNsZWVwKDEwKTsKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAotCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMiwgMTgsIHN0azcwNzBwZF9kaWI3MDAwcF9jb25maWcpOworCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDIsIDE4LAorCQkJCSAgICAgc3RrNzA3MHBkX2RpYjcwMDBwX2NvbmZpZykgIT0gMCkgeworCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLAorCQkgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg4MCwgJnN0azcwNzBwZF9kaWI3MDAwcF9jb25maWdbMF0pOwogCXJldHVybiBhZGFwLT5mZSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CkBAIC0xMzQ3LDYgKzEzNzIsNzIgQEAKIAkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogfQogCitzdGF0aWMgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyBoY3dfbGdkdDMzMDVfY29uZmlnID0geworCS5pMmNfYWRkciAgICAgICAgICAgPSAweDBlLAorCS5tcGVnX21vZGUgICAgICAgICAgPSBMR0RUMzMwNV9NUEVHX1BBUkFMTEVMLAorCS50cGNsa19lZGdlICAgICAgICAgPSBMR0RUMzMwNV9UUENMS19GQUxMSU5HX0VER0UsCisJLnRwdmFsaWRfcG9sYXJpdHkgICA9IExHRFQzMzA1X1RQX1ZBTElEX0xPVywKKwkuZGVueV9pMmNfcnB0ciAgICAgID0gMCwKKwkuc3BlY3RyYWxfaW52ZXJzaW9uID0gMSwKKwkucWFtX2lmX2toeiAgICAgICAgID0gNjAwMCwKKwkudnNiX2lmX2toeiAgICAgICAgID0gNjAwMCwKKwkudXNyZWZfOHZzYiAgICAgICAgID0gMHgwNTAwLAorfTsKKworc3RhdGljIHN0cnVjdCBteGw1MDA3dF9jb25maWcgaGN3X214bDUwMDd0X2NvbmZpZyA9IHsKKwkueHRhbF9mcmVxX2h6ID0gTXhMX1hUQUxfMjVfTUhaLAorCS5pZl9mcmVxX2h6ID0gTXhMX0lGXzZfTUhaLAorCS5pbnZlcnRfaWYgPSAxLAorfTsKKworLyogVElHRVItQVRTQyBtYXA6CisgICBHUElPMCAgLSBMTkFfQ1RSICAoSDogTE5BIHBvd2VyIGVuYWJsZWQsIEw6IExOQSBwb3dlciBkaXNhYmxlZCkKKyAgIEdQSU8xICAtIEFOVF9TRUwgIChIOiBWUEEsIEw6IE1DWCkKKyAgIEdQSU80ICAtIFNDTDIKKyAgIEdQSU82ICAtIEVOX1RVTkVSCisgICBHUElPNyAgLSBTREEyCisgICBHUElPMTAgLSBERU1fUlNUCisKKyAgIE1YTCBpcyBiZWhpbmQgTEcncyBpMmMgcmVwZWF0ZXIuICBMRyBpcyBvbiBTQ0wyL1NEQTIgZ3Bpb3Mgb24gdGhlIERJQgorICovCitzdGF0aWMgaW50IGxnZHQzMzA1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKKworCS8qIE1ha2UgdXNlIG9mIHRoZSBuZXcgaTJjIGZ1bmN0aW9ucyBmcm9tIEZXIDEuMjAgKi8KKwlzdC0+ZndfdXNlX25ld19pMmNfYXBpID0gMTsKKworCXN0LT5kaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZSA9IDE7CisKKwkvKiBmZSBwb3dlciBlbmFibGUgKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgzMCk7CisKKwkvKiBkZW1vZCByZXNldCAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMzApOworCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzA1X2F0dGFjaCwKKwkJCSAgICAgICZoY3dfbGdkdDMzMDVfY29uZmlnLAorCQkJICAgICAgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIGludCBteGw1MDA3dF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gZHZiX2F0dGFjaChteGw1MDA3dF9hdHRhY2gsIGFkYXAtPmZlLAorCQkJICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg2MCwKKwkJCSAgJmhjd19teGw1MDA3dF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworCiAvKiBEVkItVVNCIGFuZCBVU0Igc3R1ZmYgZm9sbG93cyAqLwogc3RydWN0IHVzYl9kZXZpY2VfaWQgZGliMDcwMF91c2JfaWRfdGFibGVbXSA9IHsKIC8qIDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLCAgICBVU0JfUElEX0RJQkNPTV9TVEs3NzAwUCkgfSwKQEAgLTEzOTYsNiArMTQ4NywxMiBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9FWFBSRVNTKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAogCQkJVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0RUX1hTX0RJVkVSU0lUWV8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1NPTlksCVVTQl9QSURfU09OWV9QTEFZVFYpIH0sCisvKiA0NSAqL3sgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sICAgICAgVVNCX1BJRF9ZVUFOX1BEMzc4UykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX1RJR0VSX0FUU0MpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDX0IyMTApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwJVVNCX1BJRF9ZVUFOX01DNzcwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0VMR0FUTywJVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUKSB9LAogCXsgMCB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkaWIwNzAwX3VzYl9pZF90YWJsZSk7CkBAIC0xNTk1LDcgKzE2OTIsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDksCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMTEsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzA3MFAgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTVdLCBOVUxMIH0sCkBAIC0xNjMzLDYgKzE3MzAsMTQgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIkVsZ2F0byBFeWVUViBEVFQiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ5XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiWXVhbiBQRDM3OFMiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ1XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKIAkJfSwKIAogCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCkBAIC0xNjYxLDcgKzE3NjYsNyBAQAogCQkJfQogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNSwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQRCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxN10sIE5VTEwgfSwKQEAgLTE2ODIsOCArMTc4NywxNiBAQAogCQkJeyAgIlRlcnJhdGVjIENpbmVyZ3kgRFQgVVNCIFhTIERpdmVyc2l0eSIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDNdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgIlNvbnkgUGxheVRWIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0NF0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKIAkJCX0KLQkJfQorCQl9LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0xNjk5LDcgKzE4MTIsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDUsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNywKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgSFQgVVNCIFhFIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsyN10sIE5VTEwgfSwKQEAgLTE3MjUsNiArMTgzOCwxMCBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKKwkJCXsgICAiWVVBTiBIaWdoLVRlY2ggTUM3NzAiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ4XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKIAkJfSwKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKQEAgLTE3NTksNiArMTg3NiwzMSBAQAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKIAkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBsZ2R0MzMwNV9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBteGw1MDA3dF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0CisJCQkJCQlkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJIYXVwcGF1Z2UgQVRTQyBNaW5pQ2FyZCAoQjIwMCkiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ2XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiSGF1cHBhdWdlIEFUU0MgTWluaUNhcmQgKEIyMTApIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0N10sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAwZGIwYzA2Li5kYzdlYTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0yNywxMiArMjcsMTQgQEAKICNkZWZpbmUgVVNCX1ZJRF9ESUJDT00JCQkJMHgxMGI4CiAjZGVmaW5lIFVTQl9WSURfRFBPU0gJCQkJMHgxNDk4CiAjZGVmaW5lIFVTQl9WSURfRFZJQ08JCQkJMHgwZmU5CisjZGVmaW5lIFVTQl9WSURfRUxHQVRPCQkJCTB4MGZkOQogI2RlZmluZSBVU0JfVklEX0VNUElBCQkJCTB4ZWIxYQogI2RlZmluZSBVU0JfVklEX0dFTlBJWAkJCQkweDA5YzAKICNkZWZpbmUgVVNCX1ZJRF9HUkFORFRFQwkJCTB4NTAzMgogI2RlZmluZSBVU0JfVklEX0hBTkZURUsJCQkJMHgxNWY0CiAjZGVmaW5lIFVTQl9WSURfSEFVUFBBVUdFCQkJMHgyMDQwCiAjZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJMHgxMDI1CisjZGVmaW5lIFVTQl9WSURfSU5URUwJCQkJMHg4MDg2CiAjZGVmaW5lIFVTQl9WSURfS1dPUkxECQkJCTB4ZWIyYQogI2RlZmluZSBVU0JfVklEX0tXT1JMRF8yCQkJMHgxYjgwCiAjZGVmaW5lIFVTQl9WSURfS1lFCQkJCTB4MDQ1OApAQCAtNDgsNiArNTAsNyBAQAogI2RlZmluZSBVU0JfVklEX1RFUlJBVEVDCQkJMHgwY2NkCiAjZGVmaW5lIFVTQl9WSURfVEVMRVNUQVIJCQkweDEwYjkKICNkZWZpbmUgVVNCX1ZJRF9WSVNJT05QTFVTCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfU09OWQkJCQkweDE0MTUKICNkZWZpbmUgVVNCX1ZJRF9UV0lOSEFOCQkJCTB4MTgyMgogI2RlZmluZSBVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDCQkweDA1ZDgKICNkZWZpbmUgVVNCX1ZJRF9VTklXSUxMCQkJCTB4MTU4NApAQCAtOTUsOCArOTgsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9VTklXSUxMX1NUSzc3MDBQCQkJMHg2MDAzCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfQ09MRAkJCTB4MGZhMAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0JCQkweDBmYTEKKyNkZWZpbmUgVVNCX1BJRF9JTlRFTF9DRTk1MDAJCQkJMHg5NTAwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5OVUJCQkJMHhlMzk5CiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5NVUJCQkJMHhlMzk2CisjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5NVVfMgkJCQkweGUzOWIKICNkZWZpbmUgVVNCX1BJRF9LV09STERfUEMxNjBfMlQJCQkJMHhjMTYwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fQ09MRAkJCTB4MTdkZQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX1dBUk0JCQkweDE3ZGYKQEAgLTE0OSw2ICsxNTQsOCBAQAogI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9NWVRWX1QJCQkweDcwODAKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDSwkJCTB4OTU4MAogI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1REX1NUSUNLXzUyMDA5CQkweDUyMDAKKyNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfVElHRVJfQVRTQwkJCTB4YjIwMAorI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDX0IyMTAJCTB4YjIxMAogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9FWFBSRVNTCQkJMHhiNTY4CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSCQkJCTB4YTgwNwogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl8yCQkJMHhiODA4CkBAIC0yMzIsOSArMjM5LDEzIEBACiAjZGVmaW5lIFVTQl9QSURfQVNVU19VMzEwMAkJCQkweDE3M2YKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX0VDMzcyUwkJCQkweDFlZGMKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX1NUSzc3MDBQSAkJCQkweDFmMDgKKyNkZWZpbmUgVVNCX1BJRF9ZVUFOX1BEMzc4UwkJCQkweDJlZGMKKyNkZWZpbmUgVVNCX1BJRF9ZVUFOX01DNzcwCQkJCTB4MDg3MQogI2RlZmluZSBVU0JfUElEX0RXMjEwMgkJCQkJMHgyMTAyCiAjZGVmaW5lIFVTQl9QSURfWFRFTlNJT05TX1hEXzM4MAkJCTB4MDM4MQogI2RlZmluZSBVU0JfUElEX1RFTEVTVEFSX1NUQVJTVElDS18yCQkJMHg4MDAwCiAjZGVmaW5lIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUlJICAgICAgICAgICAgICAgICAgIDB4ODgwNworI2RlZmluZSBVU0JfUElEX1NPTllfUExBWVRWCQkJCTB4MDAwMworI2RlZmluZSBVU0JfUElEX0VMR0FUT19FWUVUVl9EVFQJCQkweDAwMjEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IGIxZGUwZjcuLjJkNTM1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpbnQgZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQ7CiAKIAlpbnQgbnVtX2RldmljZV9kZXNjczsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gZGV2aWNlc1s5XTsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gZGV2aWNlc1sxMV07CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IDMyNTI2ZjEuLjEyZjc3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCXN1YnVuaXRfdHlwZSA9IGRhdGFbMV0gPj4gMzsKIAkJc3VidW5pdF9pZCA9IGRhdGFbMV0gJiA3OwogCQlvcCA9IHN1YnVuaXRfdHlwZSA9PSAweDFlIHx8IHN1YnVuaXRfaWQgPT0gNSA/IH4wIDogZGF0YVsyXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXNzdT0leC4leCBsPSVkOiAlLThzIC0gJXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzc3U9JXguJXggbD0lenU6ICUtOHMgLSAlc1xuIiwKIAkJICAgICAgIHByZWZpeCwgc3VidW5pdF90eXBlLCBzdWJ1bml0X2lkLCBsZW5ndGgsCiAJCSAgICAgICBkZWJ1Z19mY3BfY3R5cGUoZGF0YVswXSksCiAJCSAgICAgICBkZWJ1Z19mY3Bfb3Bjb2RlKG9wLCBkYXRhLCBsZW5ndGgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggMDAyNjk1Ni4uYTIwNmNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTEsMTcgKzEsMjEgQEAKLW1lbnUgIkN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKLQogY29uZmlnIERWQl9GRV9DVVNUT01JU0UKIAlib29sICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQogCWRlZmF1bHQgTgogCWhlbHAKLQkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGRlc2VsZWN0IGZyb250ZW5kIGRyaXZlcnMgdW5uZWNlc3NhcnkKLQkgIGZvciB0aGVpciBoYXJkd2FyZSBmcm9tIHRoZSBidWlsZC4gVXNlIHRoaXMgb3B0aW9uIHdpdGggY2FyZQotCSAgYXMgZGVzZWxlY3RpbmcgZnJvbnRlbmRzIHdoaWNoIGFyZSBpbiBmYWN0IG5lY2Vzc2FyeSB3aWxsIHJlc3VsdAotCSAgaW4gRFZCIGRldmljZXMgd2hpY2ggY2Fubm90IGJlIHR1bmVkIGR1ZSB0byBsYWNrIG9mIGRyaXZlciBzdXBwb3J0LgorCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0L2Rlc2VsZWN0IGZyb250ZW5kIGRyaXZlcnMgZm9yIHRoZWlyCisJICBoYXJkd2FyZSBmcm9tIHRoZSBidWlsZC4KKworCSAgVXNlIHRoaXMgb3B0aW9uIHdpdGggY2FyZSBhcyBkZXNlbGVjdGluZyBmcm9udGVuZHMgd2hpY2ggYXJlIGluIGZhY3QKKwkgIG5lY2Vzc2FyeSB3aWxsIHJlc3VsdCBpbiBEVkIgZGV2aWNlcyB3aGljaCBjYW5ub3QgYmUgdHVuZWQgZHVlIHRvIGxhY2sKKwkgIG9mIGRyaXZlciBzdXBwb3J0LgogCiAJICBJZiB1bnN1cmUgc2F5IE4uCiAKK2lmIERWQl9GRV9DVVNUT01JU0UKKworbWVudSAiQ3VzdG9taXNlIERWQiBGcm9udGVuZHMiCisKIGNvbW1lbnQgIk11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtNTUsNiArNTksMTMgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfWkwxMDAzNgorCXRyaXN0YXRlICJaYXJsaW5rIFpMMTAwMzYgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1M1SDE0MjAKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNUgxNDIwIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC04Myw2ICs5NCwyMCBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9TVFY2MTEwCisJdHJpc3RhdGUgIlNUIFNUVjYxMTAgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJICBoZWxwCisJICBBIERWQi1TIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KKworY29uZmlnIERWQl9TVFYwOTAwCisJdHJpc3RhdGUgIlNUIFNUVjA5MDAgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMvUzIgZGVtb2R1bGF0b3IuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1REQTgwODMKIAl0cmlzdGF0ZSAiUGhpbGlwcyBUREE4MDgzIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC0yODgsNiArMzEzLDEzIEBACiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX0FGOTAxMworCXRyaXN0YXRlICJBZmF0ZWNoIEFGOTAxMyBkZW1vZHVsYXRvciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRWQi1DIChjYWJsZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtMzg3LDYgKzQxOSwxNCBAQAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfTEdEVDMzMDUKKwl0cmlzdGF0ZSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDUgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1M1SDE0MDkKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNUgxNDA5IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC0zOTcsNyArNDM3LDcgQEAKIAogY29uZmlnIERWQl9BVTg1MjIKIAl0cmlzdGF0ZSAiQXV2aXRlayBBVTg1MjIgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQyAmJiBWSURFT19WNEwyCiAJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKQEAgLTQ0NiwxMSArNDg2LDExIEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCiBjb25maWcgRFZCX0xOQlAyMQotCXRyaXN0YXRlICJMTkJQMjEgU0VDIGNvbnRyb2xsZXIiCisJdHJpc3RhdGUgIkxOQlAyMS9MTkJIMjQgU0VDIGNvbnRyb2xsZXJzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCi0JICBBbiBTRUMgY29udHJvbCBjaGlwLgorCSAgQW4gU0VDIGNvbnRyb2wgY2hpcHMuCiAKIGNvbmZpZyBEVkJfSVNMNjQwNQogCXRyaXN0YXRlICJJU0w2NDA1IFNFQyBjb250cm9sbGVyIgpAQCAtNDc4LDExICs1MTgsNiBAQAogY29uZmlnIERWQl9EVU1NWV9GRQogCXRyaXN0YXRlICJEdW1teSBmcm9udGVuZCBkcml2ZXIiCiAJZGVmYXVsdCBuCi0KLWNvbmZpZyBEVkJfQUY5MDEzCi0JdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDEzIGRlbW9kdWxhdG9yIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKLQloZWxwCi0JICBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIGVuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCBhZjdiZGYwLi42NWEzMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC03LDYgKzcsOCBAQAogCiBzOTIxLW9ianMgOj0gczkyMV9tb2R1bGUubyBzOTIxX2NvcmUubwogc3RiMDg5OS1vYmpzID0gc3RiMDg5OV9kcnYubyBzdGIwODk5X2FsZ28ubworc3R2MDkwMC1vYmpzID0gc3R2MDkwMF9jb3JlLm8gc3R2MDkwMF9zdy5vCithdTg1MjItb2JqcyA9IGF1ODUyMl9kaWcubyBhdTg1MjJfZGVjb2Rlci5vCiAKIG9iai0kKENPTkZJR19EVkJfUExMKSArPSBkdmItcGxsLm8KIG9iai0kKENPTkZJR19EVkJfU1RWMDI5OSkgKz0gc3R2MDI5OS5vCkBAIC0yOCw2ICszMCw3IEBACiBvYmotJChDT05GSUdfRFZCX1NQODg3WCkgKz0gc3A4ODd4Lm8KIG9iai0kKENPTkZJR19EVkJfTlhUNjAwMCkgKz0gbnh0NjAwMC5vCiBvYmotJChDT05GSUdfRFZCX01UMzUyKSArPSBtdDM1Mi5vCitvYmotJChDT05GSUdfRFZCX1pMMTAwMzYpICs9IHpsMTAwMzYubwogb2JqLSQoQ09ORklHX0RWQl9aTDEwMzUzKSArPSB6bDEwMzUzLm8KIG9iai0kKENPTkZJR19EVkJfQ1gyMjcwMikgKz0gY3gyMjcwMi5vCiBvYmotJChDT05GSUdfRFZCX0RSWDM5N1hEKSArPSBkcngzOTd4RC5vCkBAIC00MSw2ICs0NCw3IEBACiBvYmotJChDT05GSUdfRFZCX1M1SDE0MjApICs9IHM1aDE0MjAubwogb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwWCkgKz0gbGdkdDMzMHgubwogb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwNCkgKz0gbGdkdDMzMDQubworb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwNSkgKz0gbGdkdDMzMDUubwogb2JqLSQoQ09ORklHX0RWQl9DWDI0MTIzKSArPSBjeDI0MTIzLm8KIG9iai0kKENPTkZJR19EVkJfTE5CUDIxKSArPSBsbmJwMjEubwogb2JqLSQoQ09ORklHX0RWQl9JU0w2NDA1KSArPSBpc2w2NDA1Lm8KQEAgLTY0LDQgKzY4LDYgQEAKIG9iai0kKENPTkZJR19EVkJfU1RWMDI4OCkgKz0gc3R2MDI4OC5vCiBvYmotJChDT05GSUdfRFZCX1NUQjYwMDApICs9IHN0YjYwMDAubwogb2JqLSQoQ09ORklHX0RWQl9TOTIxKSArPSBzOTIxLm8KK29iai0kKENPTkZJR19EVkJfU1RWNjExMCkgKz0gc3R2NjExMC5vCitvYmotJChDT05GSUdfRFZCX1NUVjA5MDApICs9IHN0djA5MDAubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKaW5kZXggN2I5NGY1NS4uNTY1ZGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaApAQCAtNzQsNiArNzQsMjIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRFZCX0FVODUyMiAqLwogCisvKiBPdGhlciBtb2RlcyBtYXkgbmVlZCB0byBiZSBhZGRlZCBsYXRlciAqLworZW51bSBhdTg1MjJfdmlkZW9faW5wdXQgeworCUFVODUyMl9DT01QT1NJVEVfQ0gxID0gMSwKKwlBVTg1MjJfQ09NUE9TSVRFX0NIMiwKKwlBVTg1MjJfQ09NUE9TSVRFX0NIMywKKwlBVTg1MjJfQ09NUE9TSVRFX0NINCwKKwlBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYsCisJQVU4NTIyX1NWSURFT19DSDEzLAorCUFVODUyMl9TVklERU9fQ0gyNCwKK307CisKK2VudW0gYXU4NTIyX2F1ZGlvX2lucHV0IHsKKwlBVTg1MjJfQVVESU9fTk9ORSwKKwlBVTg1MjJfQVVESU9fU0lGLAorfTsKKwogI2VuZGlmIC8qIF9fQVU4NTIyX0hfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNlMTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKQEAgLTAsMCArMSw4MzUgQEAKKy8qCisgKiBBdXZpdGVrIEFVODUyMiBRQU0vOFZTQiBkZW1vZHVsYXRvciBkcml2ZXIgYW5kIHZpZGVvIGRlY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEF1dml0ZWsgSW50ZXJuYXRpb25hbCwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBBcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBEZXZlbG9wZXIgbm90ZXM6CisgKgorICogVkJJIHN1cHBvcnQgaXMgbm90IHlldCB3b3JraW5nCisgKiBTYXR1cmF0aW9uIGFuZCBodWUgc2V0dGluZyBhcmUgbm90IHlldCB3b3JraW5nCisgKiBFbm91Z2ggaXMgaW1wbGVtZW50ZWQgaGVyZSBmb3IgQ1ZCUyBhbmQgUy1WaWRlbyBpbnB1dHMsIGJ1dCB0aGUgYWN0dWFsCisgKiAgYW5hbG9nIGRlbW9kdWxhdG9yIGNvZGUgaXNuJ3QgaW1wbGVtZW50ZWQgKG5vdCBuZWVkZWQgZm9yIHhjNTAwMCBzaW5jZSBpdAorICogIGhhcyBpdHMgb3duIGRlbW9kdWxhdG9yIGFuZCBvdXRwdXRzIENWQlMpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSAiYXU4NTIyLmgiCisjaW5jbHVkZSAiYXU4NTIyX3ByaXYuaCIKKworTU9EVUxFX0FVVEhPUigiRGV2aW4gSGVpdG11ZWxsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBhdTg1MjJfYW5hbG9nX2RlYnVnOworCisKK21vZHVsZV9wYXJhbV9uYW1lZChhbmFsb2dfZGVidWcsIGF1ODUyMl9hbmFsb2dfZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoYW5hbG9nX2RlYnVnLAorCQkgIkFuYWxvZyBkZWJ1Z2dpbmcgbWVzc2FnZXMgWzA9T2ZmIChkZWZhdWx0KSAxPU9uXSIpOworCitzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZyB7CisJdTE2IHJlZ19uYW1lOworCXU4IHJlZ192YWxbOF07Cit9OworCisKKy8qIFZpZGVvIERlY29kZXIgRmlsdGVyIENvZWZmaWNpZW50cworICAgVGhlIHZhbHVlcyBhcmUgYXMgZm9sbG93cyBmcm9tIGxlZnQgdG8gcmlnaHQKKyAgIDA9IkFUViBSRiIgMT0iQVRWIFJGMTMiIDI9IkNWQlMiIDM9IlMtVmlkZW8iIDQ9IlBBTCIgNT1DVkJTMTMiIDY9IlNWaWRlbzEzIgorKi8KK3N0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnIGZpbHRlcl9jb2VmW10gPSB7CisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDEwLCB7MHgyNSwgMHgwMCwgMHgyNSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTEsIHsweDIwLCAweDAwLCAweDIwLCAweDIwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMiwgezB4MDMsIDB4MDAsIDB4MDMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDEzLCB7MHhlNiwgMHgwMCwgMHhlNiwgMHhlNiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTQsIHsweDQwLCAweDAwLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxNSwgezB4MWIsIDB4MDAsIDB4MWIsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE2LCB7MHhjMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTcsIHsweDA0LCAweDAwLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxOCwgezB4OGMsIDB4MDAsIDB4OGMsIDB4OGMsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE5LCB7MHhhMCwgMHg0MCwgMHhhMCwgMHhhMCwgMHg0MCwgMHg0MCwgMHg0MH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUEsIHsweDIxLCAweDA5LCAweDIxLCAweDIxLCAweDA5LCAweDA5LCAweDA5fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxQiwgezB4NmMsIDB4MzgsIDB4NmMsIDB4NmMsIDB4MzgsIDB4MzgsIDB4Mzh9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFDLCB7MHgwMywgMHhmZiwgMHgwMywgMHgwMywgMHhmZiwgMHhmZiwgMHhmZn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUQsIHsweGJmLCAweGM3LCAweGJmLCAweGJmLCAweGM3LCAweGM3LCAweGM3fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxRSwgezB4YTAsIDB4ZGYsIDB4YTAsIDB4YTAsIDB4ZGYsIDB4ZGYsIDB4ZGZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFGLCB7MHgxMCwgMHgwNiwgMHgxMCwgMHgxMCwgMHgwNiwgMHgwNiwgMHgwNn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjAsIHsweGFlLCAweDMwLCAweGFlLCAweGFlLCAweDMwLCAweDMwLCAweDMwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyMSwgezB4YzQsIDB4MDEsIDB4YzQsIDB4YzQsIDB4MDEsIDB4MDEsIDB4MDF9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDIyLCB7MHg1NCwgMHhkZCwgMHg1NCwgMHg1NCwgMHhkZCwgMHhkZCwgMHhkZH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjMsIHsweGQwLCAweGFmLCAweGQwLCAweGQwLCAweGFmLCAweGFmLCAweGFmfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNCwgezB4MWMsIDB4ZjcsIDB4MWMsIDB4MWMsIDB4ZjcsIDB4ZjcsIDB4Zjd9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI1LCB7MHg3NiwgMHhkYiwgMHg3NiwgMHg3NiwgMHhkYiwgMHhkYiwgMHhkYn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjYsIHsweDYxLCAweGMwLCAweDYxLCAweDYxLCAweGMwLCAweGMwLCAweGMwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNywgezB4ZDEsIDB4MmYsIDB4ZDEsIDB4ZDEsIDB4MmYsIDB4MmYsIDB4MmZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI4LCB7MHg4NCwgMHhkOCwgMHg4NCwgMHg4NCwgMHhkOCwgMHhkOCwgMHhkOH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjksIHsweDA2LCAweGZiLCAweDA2LCAweDA2LCAweGZiLCAweGZiLCAweGZifSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyQSwgezB4MjEsIDB4ZDUsIDB4MjEsIDB4MjEsIDB4ZDUsIDB4ZDUsIDB4ZDV9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDJCLCB7MHgwYSwgMHgzZSwgMHgwYSwgMHgwYSwgMHgzZSwgMHgzZSwgMHgzZX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkMsIHsweGU2LCAweDE1LCAweGU2LCAweGU2LCAweDE1LCAweDE1LCAweDE1fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyRCwgezB4MDEsIDB4MzQsIDB4MDEsIDB4MDEsIDB4MzQsIDB4MzQsIDB4MzR9IH0sCisKK307CisjZGVmaW5lIE5VTV9GSUxURVJfQ09FRiAoc2l6ZW9mKGZpbHRlcl9jb2VmKVwKKwkJCSAvIHNpemVvZihzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZykpCisKKworLyogUmVnaXN0ZXJzIDB4MDYwYiB0aHJvdWdoIDB4MDY1MiBhcmUgdGhlIExQIEZpbHRlciBjb2VmZmljaWVudHMKKyAgIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MgZnJvbSBsZWZ0IHRvIHJpZ2h0CisgICAwPSJTSUYiIDE9IkFUVlJGL0FUVlJGMTMiCisgICBOb3RlOiB0aGUgIkFUVlJGL0FUVlJGMTMiIG1vZGUgaGFzIG5ldmVyIGJlZW4gdGVzdGVkCisqLworc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgbHBmaWx0ZXJfY29lZltdID0geworCXsweDA2MGIsIHsweDIxLCAweDBifSB9LAorCXsweDA2MGMsIHsweGFkLCAweGFkfSB9LAorCXsweDA2MGQsIHsweDcwLCAweGYwfSB9LAorCXsweDA2MGUsIHsweGVhLCAweGU5fSB9LAorCXsweDA2MGYsIHsweGRkLCAweGRkfSB9LAorCXsweDA2MTAsIHsweDA4LCAweDY0fSB9LAorCXsweDA2MTEsIHsweDYwLCAweDYwfSB9LAorCXsweDA2MTIsIHsweGY4LCAweGIyfSB9LAorCXsweDA2MTMsIHsweDAxLCAweDAyfSB9LAorCXsweDA2MTQsIHsweGU0LCAweGI0fSB9LAorCXsweDA2MTUsIHsweDE5LCAweDAyfSB9LAorCXsweDA2MTYsIHsweGFlLCAweDJlfSB9LAorCXsweDA2MTcsIHsweGVlLCAweGM1fSB9LAorCXsweDA2MTgsIHsweDU2LCAweDU2fSB9LAorCXsweDA2MTksIHsweDMwLCAweDU4fSB9LAorCXsweDA2MWEsIHsweGY5LCAweGY4fSB9LAorCXsweDA2MWIsIHsweDI0LCAweDY0fSB9LAorCXsweDA2MWMsIHsweDA3LCAweDA3fSB9LAorCXsweDA2MWQsIHsweDMwLCAweDMwfSB9LAorCXsweDA2MWUsIHsweGE5LCAweGVkfSB9LAorCXsweDA2MWYsIHsweDA5LCAweDBifSB9LAorCXsweDA2MjAsIHsweDQyLCAweGMyfSB9LAorCXsweDA2MjEsIHsweDFkLCAweDJhfSB9LAorCXsweDA2MjIsIHsweGQ2LCAweDU2fSB9LAorCXsweDA2MjMsIHsweDk1LCAweDhifSB9LAorCXsweDA2MjQsIHsweDJiLCAweDJifSB9LAorCXsweDA2MjUsIHsweDMwLCAweDI0fSB9LAorCXsweDA2MjYsIHsweDNlLCAweDNlfSB9LAorCXsweDA2MjcsIHsweDYyLCAweGUyfSB9LAorCXsweDA2MjgsIHsweGU5LCAweGY1fSB9LAorCXsweDA2MjksIHsweDk5LCAweDE5fSB9LAorCXsweDA2MmEsIHsweGQ0LCAweDExfSB9LAorCXsweDA2MmIsIHsweDAzLCAweDA0fSB9LAorCXsweDA2MmMsIHsweGI1LCAweDg1fSB9LAorCXsweDA2MmQsIHsweDFlLCAweDIwfSB9LAorCXsweDA2MmUsIHsweDJhLCAweGVhfSB9LAorCXsweDA2MmYsIHsweGQ3LCAweGQyfSB9LAorCXsweDA2MzAsIHsweDE1LCAweDE1fSB9LAorCXsweDA2MzEsIHsweGEzLCAweGE5fSB9LAorCXsweDA2MzIsIHsweDFmLCAweDFmfSB9LAorCXsweDA2MzMsIHsweGY5LCAweGQxfSB9LAorCXsweDA2MzQsIHsweGMwLCAweGMzfSB9LAorCXsweDA2MzUsIHsweDRkLCAweDhkfSB9LAorCXsweDA2MzYsIHsweDIxLCAweDMxfSB9LAorCXsweDA2MzcsIHsweDgzLCAweDgzfSB9LAorCXsweDA2MzgsIHsweDA4LCAweDhjfSB9LAorCXsweDA2MzksIHsweDE5LCAweDE5fSB9LAorCXsweDA2M2EsIHsweDQ1LCAweGE1fSB9LAorCXsweDA2M2IsIHsweGVmLCAweGVjfSB9LAorCXsweDA2M2MsIHsweDhhLCAweDhhfSB9LAorCXsweDA2M2QsIHsweGY0LCAweGY2fSB9LAorCXsweDA2M2UsIHsweDhmLCAweDhmfSB9LAorCXsweDA2M2YsIHsweDQ0LCAweDBjfSB9LAorCXsweDA2NDAsIHsweGVmLCAweGYwfSB9LAorCXsweDA2NDEsIHsweDY2LCAweDY2fSB9LAorCXsweDA2NDIsIHsweGNjLCAweGQyfSB9LAorCXsweDA2NDMsIHsweDQxLCAweDQxfSB9LAorCXsweDA2NDQsIHsweDYzLCAweDkzfSB9LAorCXsweDA2NDUsIHsweDhlLCAweDhlfSB9LAorCXsweDA2NDYsIHsweGEyLCAweDQyfSB9LAorCXsweDA2NDcsIHsweDdiLCAweDdifSB9LAorCXsweDA2NDgsIHsweDA0LCAweDA0fSB9LAorCXsweDA2NDksIHsweDAwLCAweDAwfSB9LAorCXsweDA2NGEsIHsweDQwLCAweDQwfSB9LAorCXsweDA2NGIsIHsweDhjLCAweDk4fSB9LAorCXsweDA2NGMsIHsweDAwLCAweDAwfSB9LAorCXsweDA2NGQsIHsweDYzLCAweGMzfSB9LAorCXsweDA2NGUsIHsweDA0LCAweDA0fSB9LAorCXsweDA2NGYsIHsweDIwLCAweDIwfSB9LAorCXsweDA2NTAsIHsweDAwLCAweDAwfSB9LAorCXsweDA2NTEsIHsweDQwLCAweDQwfSB9LAorCXsweDA2NTIsIHsweDAxLCAweDAxfSB9LAorfTsKKyNkZWZpbmUgTlVNX0xQRklMVEVSX0NPRUYgKHNpemVvZihscGZpbHRlcl9jb2VmKVwKKwkJCSAgIC8gc2l6ZW9mKHN0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnKSkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXU4NTIyX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBhdTg1MjJfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfdmJpKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCBpbnQgYXVkX2lucHV0KQoreworCWludCBpOworCisJLyogVGhlc2UgYXJlIHNldCB0byB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBtb2RlIHdlJ3JlIGluICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9MX1JFRzAxOEgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RPVEFMX0JJVFNfUkVHMDE5SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfSF9SRUcwMUFILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UVU5JVF9MX1JFRzAxQkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RIUkVTSDFfUkVHMDFDSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMl9SRUcwMUVILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQxX1JFRzAxRkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDBfUkVHMDIwSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzJfUkVHMDIxSCwKKwkJCTB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0sxX1JFRzAyMkgsCisJCQkweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMF9SRUcwMjNILAorCQkJMHgwMCk7CisKKwkvKiBTZXR1cCB0aGUgVkJJIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MzA7IGkgPCAweDYwOyBpKyspCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgaSwgMHg0MCk7CisKKwkvKiBGb3Igc29tZSByZWFzb24sIGV2ZXJ5IHJlZ2lzdGVyIGlzIDB4NDAgZXhjZXB0IHJlZ2lzdGVyIDB4NDQKKwkgICAoY29uZmlybWVkIHZpYSB0aGUgSFZSLTk1MHEgVVNCIGNhcHR1cmUpICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDQ0LCAweDYwKTsKKworCS8qIEVuYWJsZSBWQkkgKHdlIGFsd2F5cyBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdXNlciBpcworCSAgIHZpZXdpbmcgY2xvc2VkIGNhcHRpb24gaW5mbykgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0gsCisJCQlBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdIX0NDT04pOworCit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RlY29kZXJfZGVmYXVsdHMoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHU4IGlucHV0X21vZGUpCit7CisJaW50IGk7CisJaW50IGZpbHRlcl9jb2VmX3R5cGU7CisKKwkvKiBQcm92aWRlIHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIHBpY3R1cmUgdHVuaW5nIHZhbHVlcyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1NIQVJQTkVTU1JFRzAwOUgsIDB4MDcpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0JSSUdIVE5FU1NfUkVHMDBBSCwgMHhlZCk7CisJc3RhdGUtPmJyaWdodG5lc3MgPSAweGVkIC0gMTI4OworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkgsIDB4NzkpOworCXN0YXRlLT5jb250cmFzdCA9IDB4Nzk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DQl9SRUcwMENILCAweDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NSX1JFRzAwREgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0hVRV9IX1JFRzAwRUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0hVRV9MX1JFRzAwRkgsIDB4MDApOworCisJLyogT3RoZXIgZGVjb2RlciByZWdpc3RlcnMgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19JTlRfTUFTS19SRUcwMTBILCAweDAwKTsKKworCWlmIChpbnB1dF9tb2RlID09IDB4MjMpIHsKKwkJLyogUy1WaWRlbyBpbnB1dCBtYXBwaW5nICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSCwgMHgwNCk7CisJfSBlbHNlIHsKKwkJLyogQWxsIG90aGVyIG1vZGVzIChDVkJTL0FUVlJGIGV0Yy4pICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSCwgMHgwMCk7CisJfQorCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkgsCisJCQlBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSCwKKwkJCUFVODUyMl9UVkRFRF9EQkdfTU9ERV9SRUcwNjBIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFILAorCQkJQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFIX0NWQlMxMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkgsCisJCQlBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkhfQ1ZCUzEzKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSCwKKwkJCUFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SCwKKwkJCUFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMV9SRUcwNjVILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIzX1JFRzA2N0gsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX05PVENIX1RIUl9SRUcwNjhILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0gsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZILAorCQkJQVU4NTIyX1RWREVDX1VWX1NFUF9USFJfUkVHMDZGSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDcxSCwgQVU4NTIyX1JFRzA3MUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDcySCwgQVU4NTIyX1JFRzA3MkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIyX05UU0NfUkVHMDczSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3NEgsIEFVODUyMl9SRUcwNzRIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3NUgsIEFVODUyMl9SRUcwNzVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0RDQUdDX0NUUkxfUkVHMDc3SCwKKwkJCUFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfUElDX1NUQVJUX0FESl9SRUcwNzhILAorCQkJQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19BR0NfSElHSF9MSU1JVF9SRUcwNzlILAorCQkJQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1lOQ19USFJfUkVHMDdBSCwKKwkJCUFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSCwKKwkJCUFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRILAorCQkJQVU4NTIyX1RWREVDX0FHQ19MT1dfTElNSVRfUkVHMEU0SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SCwKKwkJCUFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwMTZILCBBVTg1MjJfUkVHMDE2SF9DVkJTKTsKKworCXNldHVwX3ZiaShzdGF0ZSwgMCk7CisKKwlpZiAoaW5wdXRfbW9kZSA9PSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDEzIHx8CisJICAgIGlucHV0X21vZGUgPT0gQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gyNCkgeworCQkvKiBEZXNwaXRlIHdoYXQgdGhlIHRhYmxlIHNheXMsIGZvciB0aGUgSFZSLTk1MHEgd2Ugc3RpbGwgbmVlZAorCQkgICB0byBiZSBpbiBDVkJTIG1vZGUgZm9yIHRoZSBTLVZpZGVvIGlucHV0IChyZWFzb24gdWtub3duKS4gKi8KKwkJLyogZmlsdGVyX2NvZWZfdHlwZSA9IDM7ICovCisJCWZpbHRlcl9jb2VmX3R5cGUgPSA1OworCX0gZWxzZSB7CisJCWZpbHRlcl9jb2VmX3R5cGUgPSA1OworCX0KKworCS8qIExvYWQgdGhlIFZpZGVvIERlY29kZXIgRmlsdGVyIENvZWZmaWNpZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fRklMVEVSX0NPRUY7IGkrKykgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIGZpbHRlcl9jb2VmW2ldLnJlZ19uYW1lLAorCQkJCWZpbHRlcl9jb2VmW2ldLnJlZ192YWxbZmlsdGVyX2NvZWZfdHlwZV0pOworCX0KKworCS8qIEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhlc2UgcmVnaXN0ZXJzIGFyZSBmb3IsIGJ1dCB0aGV5IGFyZSBhbHdheXMKKwkgICBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgcmVnYXJkbGVzcyBvZiB3aGF0IG1vZGUgd2UncmUgaW4gKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MkVILCAweDg3KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MkZILCAweGEyKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzBILCAweGJmKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzFILCAweGNiKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzJILCAweGExKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzNILCAweDQxKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzRILCAweDg4KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzVILCAweGMyKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzZILCAweDNjKTsKK30KKworc3RhdGljIHZvaWQgYXU4NTIyX3NldHVwX2N2YnNfbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwkvKiBoZXJlIHdlJ3JlIGdvaW5nIHRvIHRyeSB0aGUgcHJlLXByb2dyYW1tZWQgcm91dGUgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQ1ZCUyk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MGUpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MTApOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMSk7CisKKwlzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gxKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworc3RhdGljIHZvaWQgYXU4NTIyX3NldHVwX2N2YnNfdHVuZXJfbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwkvKiBoZXJlIHdlJ3JlIGdvaW5nIHRvIHRyeSB0aGUgcHJlLXByb2dyYW1tZWQgcm91dGUgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQ1ZCUyk7CisKKwkvKiBJdCdzIG5vdCBjbGVhciB3aHkgdGhleSB0dXJuIG9mZiB0aGUgUEdBIGJlZm9yZSBlbmFibGluZyB0aGUgY2xhbXAKKwkgICBjb250cm9sLCBidXQgdGhlIFdpbmRvd3MgdHJhY2UgZG9lcyBpdCBzbyB3ZSB3aWxsIHRvby4uLiAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOworCisJLyogRW5hYmxlIGNsYW1waW5nIGNvbnRyb2wgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MGUpOworCisJLyogVHVybiBvbiB0aGUgUEdBICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgxMCk7CisKKwkvKiBTZXQgaW5wdXQgbW9kZSB0byBDVkJTIG9uIGNoYW5uZWwgNCB3aXRoIFNJRiBhdWRpbyBpbnB1dCBlbmFibGVkICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NINF9TSUYpOworCisJc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdGF0ZSwKKwkJCSAgICAgICBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0g0X1NJRik7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ODUyMl9zZXR1cF9zdmlkZW9fbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfU1ZJREVPKTsKKworCS8qIFNldCBpbnB1dCB0byBZIG9uIENoYW5uZTEsIEMgb24gQ2hhbm5lbCAzICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyk7CisKKwkvKiBEaXNhYmxlIGNsYW1waW5nIGNvbnRyb2wgKHJlcXVpcmVkIGZvciBTLXZpZGVvKSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwMCk7CisKKwlzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0YXRlLAorCQkJICAgICAgIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBkaXNhYmxlX2F1ZGlvX2lucHV0KHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCS8qIFRoaXMgY2FuIHByb2JhYmx5IGJlIG9wdGltaXplZCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcxX1JFRzA5MUgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzBfUkVHMDkwSCwgMHg4NCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9FTkFfVVNCX1JFRzEwMUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzBGOUgsIEFVODUyMl9SRUcwRjlIX0FVRElPKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19NT0RFX1JFRzBGMUgsIDB4NDApOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfR1BJT19EQVRBX1JFRzBFMkgsIDB4MTEpOworCW1zbGVlcCg1KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9HUElPX0RBVEFfUkVHMEUySCwgMHgwMCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVILCAweDA0KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCwgMHgwMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJTX0NUUkxfMl9SRUcxMTJILCAweDAyKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworLyogMD1kaXNhYmxlLCAxPVNJRiAqLworc3RhdGljIHZvaWQgc2V0X2F1ZGlvX2lucHV0KHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCBpbnQgYXVkX2lucHV0KQoreworCWludCBpOworCisJLyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNldHRpbmcKKwkgICB0aGUgaW5wdXQgcm91dGluZyB2aWEgcmVnaXN0ZXIgMHg4MSAqLworCisJaWYgKGF1ZF9pbnB1dCA9PSBBVTg1MjJfQVVESU9fTk9ORSkgeworCQlkaXNhYmxlX2F1ZGlvX2lucHV0KHN0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhdWRfaW5wdXQgIT0gQVU4NTIyX0FVRElPX1NJRikgeworCQkvKiBUaGUgY2FsbGVyIGFza2VkIGZvciBhIG1vZGUgd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJVbnN1cHBvcnRlZCBhdWRpbyBtb2RlIHJlcXVlc3RlZCEgbW9kZT0lZFxuIiwKKwkJICAgICAgIGF1ZF9pbnB1dCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb2FkIHRoZSBBdWRpbyBEZWNvZGVyIEZpbHRlciBDb2VmZmljaWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0xQRklMVEVSX0NPRUY7IGkrKykgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIGxwZmlsdGVyX2NvZWZbaV0ucmVnX25hbWUsCisJCQkJbHBmaWx0ZXJfY29lZltpXS5yZWdfdmFsWzBdKTsKKwl9CisKKwkvKiBTZXR1cCBhdWRpbyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcxX1JFRzA5MUgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzBfUkVHMDkwSCwgMHg4NCk7CisJbXNsZWVwKDE1MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwgMHgwMCk7CisJbXNsZWVwKDEpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsIDB4OWQpOworCW1zbGVlcCg1MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEgsIDB4ZmYpOworCW1zbGVlcCg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMEY5SCwgQVU4NTIyX1JFRzBGOUhfQVVESU8pOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX01PREVfUkVHMEYxSCwgMHg4Mik7CisJbXNsZWVwKDcwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVILCAweDA5KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCwgMHgwMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJTX0NUUkxfMl9SRUcxMTJILCAweGMyKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhdTg1MjJfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlzdGF0ZS0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19CUklHSFRORVNTX1JFRzAwQUgsCisJCQkJY3RybC0+dmFsdWUgLSAxMjgpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlzdGF0ZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSCwKKwkJCQljdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCS8qIE5vdGUgdGhhdCB3ZSBhcmUgdXNpbmcgdmFsdWVzIGNhY2hlZCBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIGluc3RlYWQKKwkgICBvZiByZWFkaW5nIHRoZSByZWdpc3RlcnMgZHVlIHRvIGlzc3VlcyB3aXRoIGkyYyByZWFkcyBub3Qgd29ya2luZworCSAgIHByb3Blcmx5L2NvbnNpc3RlbnRseSB5ZXQgb24gdGhlIEhWUi05NTBxICovCisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5icmlnaHRuZXNzOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkvKiBOb3QgeWV0IHN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGF1ODUyMl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3dpdGNoIChmbXQtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgYXU4NTIyX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+dmFsID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIHJlZy0+cmVnICYgMHhmZmZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCByZWctPnJlZywgcmVnLT52YWwgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGF1ODUyMl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGVuYWJsZSkgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJCTB4MDEpOworCQltc2xlZXAoMSk7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBkb2VzIG5vdCBjb21wbGV0ZWx5IHBvd2VyIGRvd24gdGhlIGRldmljZQorCQkgICAoaXQgb25seSByZWR1Y2VzIGl0IGZyb20gYXJvdW5kIDE0MG1hIHRvIDgwbWEpICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQkJMSA8PCA1KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsCisJCQkJCSAgICBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSF9DVkJTKTsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXFjLT50eXBlID0gMDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBhdTg1MjJfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHhhNCwgMSA8PCA1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9zX3ZpZGVvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJYXU4NTIyX3Jlc2V0KHNkLCAwKTsKKworCS8qIEphbSBvcGVuIHRoZSBpMmMgZ2F0ZSB0byB0aGUgdHVuZXIuICBXZSBkbyB0aGlzIGhlcmUgdG8gaGFuZGxlIHRoZQorCSAgIGNhc2Ugd2hlcmUgdGhlIHVzZXIgd2VudCBpbnRvIGRpZ2l0YWwgbW9kZSAoY2F1c2luZyB0aGUgZ2F0ZSB0byBiZQorCSAgIGNsb3NlZCksIGFuZCB0aGVuIGNhbWUgYmFjayB0byBhbmFsb2cgbW9kZSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHgxMDYsIDEpOworCisJaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfQ09NUE9TSVRFX0NIMSkgeworCQlhdTg1MjJfc2V0dXBfY3Zic19tb2RlKHN0YXRlKTsKKwl9IGVsc2UgaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfU1ZJREVPX0NIMTMpIHsKKwkJYXU4NTIyX3NldHVwX3N2aWRlb19tb2RlKHN0YXRlKTsKKwl9IGVsc2UgaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYpIHsKKwkJYXU4NTIyX3NldHVwX2N2YnNfdHVuZXJfbW9kZShzdGF0ZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdTg1MjIgbW9kZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzZXRfYXVkaW9faW5wdXQoc3RhdGUsIHJvdXRlLT5pbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCWludCB2YWwgPSAwOworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4IGxvY2tfc3RhdHVzOworCisJLyogSW50ZXJyb2dhdGUgdGhlIGRlY29kZXIgdG8gc2VlIGlmIHdlIGFyZSBnZXR0aW5nIGEgcmVhbCBzaWduYWwgKi8KKwlsb2NrX3N0YXR1cyA9IGF1ODUyMl9yZWFkcmVnKHN0YXRlLCAweDAwKTsKKwlpZiAobG9ja19zdGF0dXMgPT0gMHhhMikKKwkJdnQtPnNpZ25hbCA9IDB4MDE7CisJZWxzZQorCQl2dC0+c2lnbmFsID0gMHgwMDsKKworCXZ0LT5jYXBhYmlsaXR5IHw9CisJCVY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKKwkJVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CisKKwl2YWwgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCXZ0LT5yeHN1YmNoYW5zID0gdmFsOworCXZ0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgc3RhdGUtPmlkLCBzdGF0ZS0+cmV2KTsKK30KKworc3RhdGljIGludCBhdTg1MjJfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCS8qIEZJWE1FOiBBZGQgc29tZSBzdGF0dXMgaW5mbyBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYXU4NTIyX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gYXU4NTIyX2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IGF1ODUyMl9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGF1ODUyMl9nX2N0cmwsCisJLnNfY3RybCA9IGF1ODUyMl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IGF1ODUyMl9xdWVyeWN0cmwsCisJLnJlc2V0ID0gYXU4NTIyX3Jlc2V0LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IGF1ODUyMl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gYXU4NTIyX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGF1ODUyMl90dW5lcl9vcHMgPSB7CisJLmdfdHVuZXIgPSBhdTg1MjJfZ190dW5lciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGF1ODUyMl9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGF1ODUyMl9zX2F1ZGlvX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhdTg1MjJfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBhdTg1MjJfc192aWRlb19yb3V0aW5nLAorCS5nX2ZtdCA9IGF1ODUyMl9nX2ZtdCwKKwkuc19mbXQgPSBhdTg1MjJfc19mbXQsCisJLnNfc3RyZWFtID0gYXU4NTIyX3Nfc3RyZWFtLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYXU4NTIyX29wcyA9IHsKKwkuY29yZSA9ICZhdTg1MjJfY29yZV9vcHMsCisJLnR1bmVyID0gJmF1ODUyMl90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmF1ODUyMl9hdWRpb19vcHMsCisJLnZpZGVvID0gJmF1ODUyMl92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGF1ODUyMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCWludCBpbnN0YW5jZTsKKwlzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqZGVtb2RfY29uZmlnOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCWluc3RhbmNlID0gYXU4NTIyX2dldF9zdGF0ZSgmc3RhdGUsIGNsaWVudC0+YWRhcHRlciwgY2xpZW50LT5hZGRyKTsKKwlzd2l0Y2ggKGluc3RhbmNlKSB7CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9FUlIgImF1ODUyMl9kZWNvZGVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJY2FzZSAxOgorCQkvKiBuZXcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXU4NTIyX2RlY29kZXIgY3JlYXRpbmcgbmV3IGluc3RhbmNlLi4uXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZXhpc3RpbmcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXU4NTIyX2RlY29kZXIgYXR0YWNoIGV4aXN0aW5nIGluc3RhbmNlLlxuIik7CisJCWJyZWFrOworCX0KKworCWRlbW9kX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTg1MjJfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJZGVtb2RfY29uZmlnLT5kZW1vZF9hZGRyZXNzID0gMHg4ZSA+PiAxOworCisJc3RhdGUtPmNvbmZpZyA9IGRlbW9kX2NvbmZpZzsKKwlzdGF0ZS0+aTJjID0gY2xpZW50LT5hZGFwdGVyOworCisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhdTg1MjJfb3BzKTsKKworCXN0YXRlLT5jID0gY2xpZW50OworCXN0YXRlLT52aWRfaW5wdXQgPSBBVTg1MjJfQ09NUE9TSVRFX0NIMTsKKwlzdGF0ZS0+YXVkX2lucHV0ID0gQVU4NTIyX0FVRElPX05PTkU7CisJc3RhdGUtPmlkID0gODUyMjsKKwlzdGF0ZS0+cmV2ID0gMDsKKworCS8qIEphbSBvcGVuIHRoZSBpMmMgZ2F0ZSB0byB0aGUgdHVuZXIgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4MTA2LCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWF1ODUyMl9yZWxlYXNlX3N0YXRlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhdTg1MjJfaWRbXSA9IHsKKwl7ImF1ODUyMiIsIDB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYXU4NTIyX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImF1ODUyMiIsCisJLnByb2JlID0gYXU4NTIyX3Byb2JlLAorCS5yZW1vdmUgPSBhdTg1MjJfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGF1ODUyMl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwppbmRleCBlYWJmOWE2Li4zNTczMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwpAQCAtMjcsMzUgKzI3LDI1IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJhdTg1MjIuaCIKLQotc3RydWN0IGF1ODUyMl9zdGF0ZSB7Ci0KLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKLQotCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqY29uZmlnOwotCi0Jc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKLQotCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKLQlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOwotCi0JdTMyIGZlX3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOwotfTsKKyNpbmNsdWRlICJhdTg1MjJfcHJpdi5oIgogCiBzdGF0aWMgaW50IGRlYnVnOwogCi0jZGVmaW5lIGRwcmludGsoYXJnLi4uKSBkbyB7CQlcCi0JaWYgKGRlYnVnKSAJCQlcCi0JCSBwcmludGsoYXJnKTsgCQlcCisvKiBEZXNwaXRlIHRoZSBuYW1lICJoeWJyaWRfdHVuZXIiLCB0aGUgZnJhbWV3b3JrIHdvcmtzIGp1c3QgYXMgd2VsbCBmb3IKKyAgIGh5YnJpZCBkZW1vZHVsYXRvcnMgYXMgd2VsbC4uLiAqLworc3RhdGljIExJU1RfSEVBRChoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGF1ODUyMl9saXN0X211dGV4KTsKKworI2RlZmluZSBkcHJpbnRrKGFyZy4uLilcCisJZG8geyBpZiAoZGVidWcpXAorCQlwcmludGsoYXJnKTtcCiAJfSB3aGlsZSAoMCkKIAogLyogMTYgYml0IHJlZ2lzdGVycywgOCBiaXQgdmFsdWVzICovCi1zdGF0aWMgaW50IGF1ODUyMl93cml0ZXJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggZGF0YSkKK2ludCBhdTg1MjJfd3JpdGVyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmLCBkYXRhIH07CisJdTggYnVmW10gPSB7IChyZWcgPj4gOCkgfCAweDgwLCByZWcgJiAweGZmLCBkYXRhIH07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJCSAgICAgICAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMyB9OwpAQCAtNjksMTMgKzU5LDEzIEBACiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1OCBhdTg1MjJfcmVhZHJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3U4IGF1ODUyMl9yZWFkcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07Ci0JdTggYjEgW10gPSB7IDAgfTsKKwl1OCBiMFtdID0geyAocmVnID4+IDgpIHwgMHg0MCwgcmVnICYgMHhmZiB9OworCXU4IGIxW10gPSB7IDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCiAJCSAgLmJ1ZiA9IGIwLCAubGVuID0gMiB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCkBAIC01MjgsNyArNTE4LDcgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IGF1ODUyMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoraW50IGF1ODUyMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtNjI0LDcgKzYxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXU4NTIyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoraW50IGF1ODUyMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTYzMiw2ICs2MjIsOSBAQAogCS8qIHR1cm4gb2ZmIGxlZCAqLwogCWF1ODUyMl9sZWRfY3RybChzdGF0ZSwgMCk7CiAKKwkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweGE0LCAxIDw8IDUpOworCiAJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gMDsKIAogCXJldHVybiAwOwpAQCAtNzk4LDIzICs3OTEsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGF1ODUyMl9vcHM7CisKK2ludCBhdTg1MjJfZ2V0X3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKipzdGF0ZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCSAgICAgdTggY2xpZW50X2FkZHJlc3MpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmF1ODUyMl9saXN0X211dGV4KTsKKwlyZXQgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlLCAoKnN0YXRlKSwKKwkJCQkJIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0LAorCQkJCQkgaTJjLCBjbGllbnRfYWRkcmVzcywgImF1ODUyMiIpOworCW11dGV4X3VubG9jaygmYXU4NTIyX2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwltdXRleF9sb2NrKCZhdTg1MjJfbGlzdF9tdXRleCk7CisJaWYgKHN0YXRlICE9IE5VTEwpCisJCWh5YnJpZF90dW5lcl9yZWxlYXNlX3N0YXRlKHN0YXRlKTsKKwltdXRleF91bmxvY2soJmF1ODUyMl9saXN0X211dGV4KTsKK30KKworCiBzdGF0aWMgdm9pZCBhdTg1MjJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWtmcmVlKHN0YXRlKTsKKwlhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdGF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhdTg1MjJfb3BzOwotCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICphdTg1MjJfYXR0YWNoKGNvbnN0IHN0cnVjdCBhdTg1MjJfY29uZmlnICpjb25maWcsCiAJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCBpbnN0YW5jZTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXU4NTIyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0YXRlID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7CisJaW5zdGFuY2UgPSBhdTg1MjJfZ2V0X3N0YXRlKCZzdGF0ZSwgaTJjLCBjb25maWctPmRlbW9kX2FkZHJlc3MpOworCXN3aXRjaCAoaW5zdGFuY2UpIHsKKwljYXNlIDA6CisJCWRwcmludGsoIiVzIHN0YXRlIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogbmV3IGRlbW9kIGluc3RhbmNlICovCisJCWRwcmludGsoIiVzIHVzaW5nIG5ldyBpbnN0YW5jZVxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBleGlzdGluZyBkZW1vZCBpbnN0YW5jZSAqLworCQlkcHJpbnRrKCIlcyB1c2luZyBleGlzdGluZyBpbnN0YW5jZVxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwl9CiAKIAkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwpAQCAtODM2LDcgKzg2NCw3IEBACiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKIGVycm9yOgotCWtmcmVlKHN0YXRlKTsKKwlhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGF1ODUyMl9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI4ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgICAgQXV2aXRlayBBVTg1MjIgUUFNLzhWU0IgZGVtb2R1bGF0b3IgZHJpdmVyCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGxpbnV4dHYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEF1dml0ZWsgSW50ZXJuYXRpb25hbCwgTHRkLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJhdTg1MjIuaCIKKyNpbmNsdWRlICJ0dW5lci1pMmMuaCIKKworc3RydWN0IGF1ODUyMl9zdGF0ZSB7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisKKwkvKiBVc2VkIGZvciBzaGFyaW5nIG9mIHRoZSBzdGF0ZSBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBtb2RlICovCisJc3RydWN0IHR1bmVyX2kyY19wcm9wcyBpMmNfcHJvcHM7CisJc3RydWN0IGxpc3RfaGVhZCBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdDsKKworCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwljb25zdCBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqY29uZmlnOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKKwlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOworCisJdTMyIGZlX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOworCisJLyogQW5hbG9nIHNldHRpbmdzICovCisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXY0bDJfc3RkX2lkIHN0ZDsKKwlpbnQgdmlkX2lucHV0OworCWludCBhdWRfaW5wdXQ7CisJdTMyIGlkOworCXUzMiByZXY7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKK307CisKKy8qIFRoZXNlIGFyZSByb3V0aW5lcyBzaGFyZWQgYnkgYm90aCB0aGUgVlNCL1FBTSBkZW1vZHVsYXRvciBhbmQgdGhlIGFuYWxvZworICAgZGVjb2RlciAqLworaW50IGF1ODUyMl93cml0ZXJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggZGF0YSk7Cit1OCBhdTg1MjJfcmVhZHJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZyk7CitpbnQgYXU4NTIyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworaW50IGF1ODUyMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKK2ludCBhdTg1MjJfZ2V0X3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKipzdGF0ZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCSAgICAgdTggY2xpZW50X2FkZHJlc3MpOwordm9pZCBhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSk7CisKKy8qIFJFR0lTVEVSUyAqLworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFICQkJMHgwODEKKyNkZWZpbmUgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgJCQkweDA4MgorI2RlZmluZSBBVTg1MjJfQ0xBTVBJTkdfQ09OVFJPTF9SRUcwODNICQkJMHgwODMKKworI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSAkJMHgwQTMKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgJCTB4MEE0CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVICQkweDBBNQorI2RlZmluZSBBVTg1MjJfQUdDX0NPTlRST0xfUkFOR0VfUkVHMEE2SAkJMHgwQTYKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9HQUlOX0NPTlRST0xfUkVHMEE3SAkJMHgwQTcKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19SRl9TVE9QX1JFRzBBOEggIAkJMHgwQTgKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19SRl9TVEFSVF9SRUcwQTlICQkweDBBOQorI2RlZmluZSBBVTg1MjJfVFVORVJfUkZfQUdDX0RFRkFVTFRfUkVHMEFBSAkJMHgwQUEKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19JRl9TVE9QX1JFRzBBQkgJCTB4MEFCCisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfSUZfU1RBUlRfUkVHMEFDSAkJMHgwQUMKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19JRl9ERUZBVUxUX1JFRzBBREgJCTB4MEFECisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfU1RFUF9SRUcwQUVICQkJMHgwQUUKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0dBSU5fU1RFUF9SRUcwQUZICQkJMHgwQUYKKworLyogUmVjZWl2ZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9GUk1SRUdUSFJEMV9SRUcwQjBICQkJMHgwQjAKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0FHQzFIX1JFRzBCMUggCQkJMHgwQjEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1NISUZUMV9SRUcwQjJIIAkJCTB4MEIyCisjZGVmaW5lIEFVODUyMl9UT1JFR0FHQzFfUkVHMEIzSCAJCQkweDBCMworI2RlZmluZSBBVTg1MjJfVE9SRUdBU0hJRlQxX1JFRzBCNEggCQkJMHgwQjQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0JCSF9SRUcwQjVICQkJMHgwQjUKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0JCTV9SRUcwQjZIIAkJCTB4MEI2CisjZGVmaW5lIEFVODUyMl9GUk1SRUdCQkxfUkVHMEI3SCAgICAgCQkJMHgwQjcKKy8qIDB4QjggVE8gMHhENyBhcmUgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1RIUkQyX1JFRzBEOEggCQkJMHgwRDgKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0FHQzJIX1JFRzBEOUggCQkJMHgwRDkKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQUdDMl9SRUcwREFIIAkJCTB4MERBCisjZGVmaW5lIEFVODUyMl9UT1JFR1NISUZUMl9SRUcwREJIIAkJCTB4MERCCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVEhfUkVHMERDSAkJCTB4MERDCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVE1fUkVHMERESAkJCTB4MERECisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVExfUkVHMERFSAkJCTB4MERFCisjZGVmaW5lIEFVODUyMl9UT1JFR0ZSRVFfUkVHMERGSAkJCTB4MERGCisKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9SRk9VVF9SRUcwRUJICQkJMHgwRUIKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9JRk9VVF9SRUcwRUNICQkJMHgwRUMKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9QR0FPVVRfUkVHMEVESAkJCTB4MEVECisKKyNkZWZpbmUgQVU4NTIyX0NISVBfTU9ERV9SRUcwRkVICQkJMHgwRkUKKworLyogSTJDIGJ1cyBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMF9SRUcwOTBIICAgIAkJMHgwOTAKKyNkZWZpbmUgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzFfUkVHMDkxSCAgICAJCTB4MDkxCisjZGVmaW5lIEFVODUyMl9JMkNfU1RBVFVTX1JFRzA5MkggICAgICAgICAgCQkweDA5MgorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEwX1JFRzA5M0gJCQkweDA5MworI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEExX1JFRzA5NEgJCQkweDA5NAorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEyX1JFRzA5NUgJCQkweDA5NQorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEzX1JFRzA5NkgJCQkweDA5NgorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE0X1JFRzA5N0gJCQkweDA5NworI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE1X1JFRzA5OEgJCQkweDA5OAorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE2X1JFRzA5OUgJCQkweDA5OQorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE3X1JFRzA5QUgJCQkweDA5QQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEwX1JFRzA5QkgJCQkweDA5QgorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEExX1JFRzA5Q0gJCQkweDA5QworI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEyX1JFRzA5REgJCQkweDA5RAorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEzX1JFRzA5RUgJCQkweDA5RQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE0X1JFRzA5RkgJCQkweDA5RgorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE1X1JFRzBBMEgJCQkweDBBMAorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE2X1JFRzBBMUgJCQkweDBBMQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE3X1JFRzBBMkgJCQkweDBBMgorCisjZGVmaW5lIEFVODUyMl9FTkFfVVNCX1JFRzEwMUgJCQkJMHgxMDEKKworI2RlZmluZSBBVTg1MjJfSTJTX0NUUkxfMF9SRUcxMTBIICAJCQkweDExMAorI2RlZmluZSBBVTg1MjJfSTJTX0NUUkxfMV9SRUcxMTFIIAkJCTB4MTExCisjZGVmaW5lIEFVODUyMl9JMlNfQ1RSTF8yX1JFRzExMkggCQkJMHgxMTIKKworI2RlZmluZSBBVTg1MjJfRlJNUkVHRkZFQ09OVFJPTF9SRUcxMjFIICAgIAkJMHgxMjEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0RGRUNPTlRST0xfUkVHMTIySCAgICAJCTB4MTIyCisKKyNkZWZpbmUgQVU4NTIyX0NBUlJGUkVRT0ZGU0VUMF9SRUcyMDFIIAkJCTB4MjAxCisjZGVmaW5lIEFVODUyMl9DQVJSRlJFUU9GRlNFVDFfUkVHMjAySAkJCTB4MjAyCisKKyNkZWZpbmUgQVU4NTIyX0RFQ0lNQVRJT05fR0FJTl9SRUcyMUFICQkJMHgyMUEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0lGU0xQX1JFRzIxQkggCQkJMHgyMUIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1RIUkRMMl9SRUcyMUNIIAkJCTB4MjFDCisjZGVmaW5lIEFVODUyMl9GUk1SRUdTVEVQM0RCX1JFRzIxREggCQkJMHgyMUQKKyNkZWZpbmUgQVU4NTIyX0RBR0NfR0FJTl9BREpVU1RNRU5UX1JFRzIxRUgJCTB4MjFFCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQTExNT0RFX1JFRzIxRkggCQkJMHgyMUYKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NTVEhSRF9SRUcyMjBIIAkJCTB4MjIwCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0tETUFYX1JFRzIyMUggCQkweDIyMQorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JQRVJJT0RNQVNLX1JFRzIyMkggCQkweDIyMgorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMFRISF9SRUcyMjNIIAkJMHgyMjMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DSzFUSEhfUkVHMjI0SCAJCTB4MjI0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0swVEhMX1JFRzIyNUggCQkweDIyNQorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMVRITF9SRUcyMjZIIAkJMHgyMjYKKyNkZWZpbmUgQVVfRlJNUkVHUExMQUNRUEhBU0VTQ0xfUkVHMjI3SAkJCTB4MjI3CisjZGVmaW5lIEFVODUyMl9GUk1SRUdGUkVRRkJDVFJMX1JFRzIyOEggCQkweDIyOAorCisvKiBBbmFsb2cgVFYgRGVjb2RlciAqLworI2RlZmluZSBBVTg1MjJfVFZERUNfU1RBVFVTX1JFRzAwMEgJCQkweDAwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfSU5UX1NUQVRVU19SRUcwMDFICQkJMHgwMDEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NUQVRVU19SRUcwMDJIIAkweDAwMgorI2RlZmluZSBBVTg1MjJfVFZERUNfU0hBUlBORVNTUkVHMDA5SAkJCTB4MDA5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19CUklHSFRORVNTX1JFRzAwQUgJCQkweDAwQQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSAkJCTB4MDBCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NCX1JFRzAwQ0gJCTB4MDBDCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NSX1JFRzAwREgJCTB4MDBECisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfSF9SRUcwMEVICQkJMHgwMEUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0hVRV9MX1JFRzAwRkggICAgICAgICAgICAgICAgICAgCTB4MDBGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRfTUFTS19SRUcwMTBICQkJMHgwMTAKKyNkZWZpbmUgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSAkJCTB4MDExCisjZGVmaW5lIEFVODUyMl9UVkRFQ19QR0FfUkVHMDEySAkJCTB4MDEyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX01PREVfUkVHMDE1SAkJCTB4MDE1CisjZGVmaW5lIEFVODUyMl9SRUcwMTZIICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAxNgorI2RlZmluZSBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSAkJCTB4MDYwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSAkJMHgwNjEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMl9SRUcwNjJICQkweDA2MgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9MTElNX1JFRzA2M0gJCTB4MDYzCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SAkJMHgwNjQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUgJCTB4MDY1CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZICQkweDA2NgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SAkJMHgwNjcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEgJCTB4MDY4CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlIICAgCQkweDA2OQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSAkJMHgwNkEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkggICAJCTB4MDZCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSCAgCQkweDA2QworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REggCQkweDA2RAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUggICAgICAgCTB4MDZFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkggIAkJMHgwNkYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEgJCTB4MDcwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNICQkweDA3MworI2RlZmluZSBBVTg1MjJfVFZERUNfRENBR0NfQ1RSTF9SRUcwNzdICQkJMHgwNzcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SAkJMHgwNzgKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUgJCTB4MDc5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FICTB4MDdBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkgJCQkweDA3QgorI2RlZmluZSBBVTg1MjJfVFZERUNfUExMX1NUQVRVU19SRUcwN0VICQkJMHgwN0UKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZTQ19GUkVRX1JFRzA3RkgJCQkweDA3RgorCisjZGVmaW5lIEFVODUyMl9UVkRFQ19BR0NfTE9XX0xJTUlUX1JFRzBFNEgJCTB4MEU0CisjZGVmaW5lIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SAkJCTB4MEU1CisKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NIUk9NQV9BR0NfUkVHNDAxSAkJMHg0MDEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NIUk9NQV9TRlRfUkVHNDAySAkJMHg0MDIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTAgICAgIAkJMHg0MTAKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTEgICAgIAkJMHg0MTEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTIgICAgIAkJMHg0MTIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTMgICAgIAkJMHg0MTMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTQgICAgIAkJMHg0MTQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTUgICAgIAkJMHg0MTUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTYgICAgIAkJMHg0MTYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTcgICAgIAkJMHg0MTcKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTggICAgIAkJMHg0MTgKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTkgICAgIAkJMHg0MTkKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUEgICAgIAkJMHg0MUEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUIgICAgIAkJMHg0MUIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUMgICAgIAkJMHg0MUMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUQgICAgIAkJMHg0MUQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUUgICAgIAkJMHg0MUUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUYgICAgIAkJMHg0MUYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjAgICAgIAkJMHg0MjAKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjEgICAgIAkJMHg0MjEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjIgICAgIAkJMHg0MjIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjMgICAgIAkJMHg0MjMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjQgICAgIAkJMHg0MjQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjUgICAgIAkJMHg0MjUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjYgICAgIAkJMHg0MjYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjcgICAgIAkJMHg0MjcKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjggICAgIAkJMHg0MjgKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjkgICAgIAkJMHg0MjkKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkEgICAgIAkJMHg0MkEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkIgICAgIAkJMHg0MkIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkMgICAgIAkJMHg0MkMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkQgICAgIAkJMHg0MkQKKworLyogVkJJIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfUlhfRklGT19DT05UQUlOX1JFRzAwNEggIAkweDAwNAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1RYX0ZJRk9fQ09OVEFJTl9SRUcwMDVIICAJMHgwMDUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9SWF9GSUZPX1JFQURfUkVHMDA2SCAgICAgIAkweDAwNgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0ZJRk9fU1RBVFVTX1JFRzAwN0ggICAgICAgCTB4MDA3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0gJCQkweDAxNworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0NUUkxfTF9SRUcwMThICQkJMHgwMTgKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RPVEFMX0JJVFNfUkVHMDE5SAkweDAxOQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfSF9SRUcwMUFICQkweDAxQQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfTF9SRUcwMUJICQkweDAxQgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVEhSRVNIMV9SRUcwMUNICQkweDAxQworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMl9SRUcwMUVICTB4MDFFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQxX1JFRzAxRkggICAJMHgwMUYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDBfUkVHMDIwSCAgIAkweDAyMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzJfUkVHMDIxSCAJMHgwMjEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0sxX1JFRzAyMkggIAkweDAyMgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzBfUkVHMDIzSAkweDAyMworCisjZGVmaW5lIEFVODUyMl9SRUcwNzFICQkJCQkweDA3MQorI2RlZmluZSBBVTg1MjJfUkVHMDcySAkJCQkJMHgwNzIKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NEgJCQkJCTB4MDc0CisjZGVmaW5lIEFVODUyMl9SRUcwNzVICQkJCQkweDA3NQorCisvKiBEaWdpdGFsIERlbW9kdWxhdG9yIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfRlJBTUVfQ09VTlQwX1JFRzA4NEgJCQkweDA4NAorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0cwX1JFRzA4NUgJCQkweDA4NQorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0IwX1JFRzA4NkgJCQkweDA4NgorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0VfUkVHMDg3SAkJCTB4MDg3CisjZGVmaW5lIEFVODUyMl9ERU1PRFVMQVRJT05fU1RBVFVTX1JFRzA4OEgJCTB4MDg4CisjZGVmaW5lIEFVODUyMl9UT1JFR1RSRVNUQVRVU19SRUcwRTZICQkJMHgwRTYKKyNkZWZpbmUgQVU4NTIyX1RTUE9SVF9DT05UUk9MX1JFRzEwQkgJCQkweDEwQgorI2RlZmluZSBBVTg1MjJfVFNUSEVTX1JFRzEwQ0gJCQkJMHgxMEMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0RGRUtFRVBfUkVHMzAxSAkJCTB4MzAxCisjZGVmaW5lIEFVODUyMl9ERkVfQVZFUkFHRV9SRUczMDJICQkJMHgzMDIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0VRTEVSUldJTl9SRUczMDNICQkJMHgzMDMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0ZGRUtFRVBfUkVHMzA0SAkJCTB4MzA0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdERkVDT05UUk9MMV9SRUczMDVICQkweDMwNQorI2RlZmluZSBBVTg1MjJfRlJNUkVHRVFMRVJSTE9XX1JFRzMwNkgJCQkweDMwNgorCisjZGVmaW5lIEFVODUyMl9SRUc0MkVICQkJCTB4NDJFCisjZGVmaW5lIEFVODUyMl9SRUc0MkZICQkJCTB4NDJGCisjZGVmaW5lIEFVODUyMl9SRUc0MzBICQkJCTB4NDMwCisjZGVmaW5lIEFVODUyMl9SRUc0MzFICQkJCTB4NDMxCisjZGVmaW5lIEFVODUyMl9SRUc0MzJICQkJCTB4NDMyCisjZGVmaW5lIEFVODUyMl9SRUc0MzNICQkJCTB4NDMzCisjZGVmaW5lIEFVODUyMl9SRUc0MzRICQkJCTB4NDM0CisjZGVmaW5lIEFVODUyMl9SRUc0MzVICQkJCTB4NDM1CisjZGVmaW5lIEFVODUyMl9SRUc0MzZICQkJCTB4NDM2CisKKy8qIEdQSU8gUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9HUElPX0NPTlRST0xfUkVHMEUwSAkJCTB4MEUwCisjZGVmaW5lIEFVODUyMl9HUElPX1NUQVRVU19SRUcwRTFICQkJMHgwRTEKKyNkZWZpbmUgQVU4NTIyX0dQSU9fREFUQV9SRUcwRTJICQkJMHgwRTIKKworLyogQXVkaW8gQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0FVRElPQUdDX1JFRzBFRUggCQkJMHgwRUUKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1NUQVRVU19SRUcwRjBIIAkJCTB4MEYwCisjZGVmaW5lIEFVODUyMl9BVURJT19NT0RFX1JFRzBGMUggCQkJMHgwRjEKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkggCQkJMHgwRjIKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0ggCQkJMHgwRjMKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRIIAkJCTB4MEY0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdBVVBIQVNFX1JFRzBGN0ggCQkJMHgwRjcKKyNkZWZpbmUgQVU4NTIyX1JFRzBGOUgJCQkJCTB4MEY5CisKKyNkZWZpbmUgQVU4NTIyX0FVRElPQUdDMl9SRUc2MDVIIAkJCTB4NjA1CisjZGVmaW5lIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCAJCQkweDYwNgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUU0MgICAgICAgICAgICAgICAJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUVlJGCQkJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUVlJGMTMJCQkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfSjgzQjY0ICAgICAgICAgICAgIAkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfSjgzQjI1NiAgICAgICAgICAgIAkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCUyAgICAgICAgICAgICAgIAkweDIwCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDEJCQkweEEyCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDIJCQkweEEwCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDMJCQkweDY5CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDQJCQkweDY4CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDRfU0lGICAgICAgICAJMHgyOAorLyogQ0gxIEFTIFksQ0gzIEFTIEMgKi8KKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyAgICAgICAgCTB4MjMKKy8qIENIMiBBUyBZLENINCBBUyBDICovCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMjQgICAgICAgIAkweDIwCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUU0MgICAgICAgIAkweDBDCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0o4M0I2NCAgICAgIAkweDA5CisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0o4M0IyNTYgICAgCQkweDA5CisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0NWQlMgICAgICAgIAkweDEyCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUVlJGICAgICAgIAkweDFBCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUVlJGMTMJCTB4MUEKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfU1ZJREVPCQkweDAyCisKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ0xFQVIJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfU1ZJREVPCQkweDlDCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMgICAgIAkweDlECisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0FUU0MJCTB4RTgKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfSjgzQjI1NiAJCTB4Q0EKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfSjgzQjY0ICAJCTB4Q0EKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQVRWUkYgICAJCTB4REQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQVRWUkYxMwkJMHhERAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9QQUwJCTB4REQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfRk0JCTB4REQKKworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9BVFNDCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0o4M0IyNTYgCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0o4M0I2NCAgCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0RPTkdMRV9BVFNDCTB4NDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0o4M0IyNTYJMHg0MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9ET05HTEVfSjgzQjY0CTB4NDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0NMRUFSCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQVRWUkYJCTB4MDEKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQVRWUkYxMwkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9TVklERU8gIAkJMHgwNAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9DVkJTCQkweDAxCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX1BXTSAgICAgCQkweDAzCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0lJUyAgICAgIAkweDA5CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX1BBTAkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9GTQkJMHgwMQorCisvKiBTVElMTCBORUVEIFRPIEJFIFJFRkFDVE9SRUQgQEBAQEBAQEBAQEBAQEAgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkhfQ1ZCUwkJCTB4NzkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ0JfUkVHMDBDSF9DVkJTCQkJMHg4MAorI2RlZmluZSBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DUl9SRUcwMERIX0NWQlMJCQkweDgwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfSF9SRUcwMEVIX0NWQlMJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfSFVFX0xfUkVHMDBGSF9DVkJTCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BHQV9SRUcwMTJIX0NWQlMJCQkJMHgwRgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUhfQ1ZCUwkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1JFRzAxNkhfQ1ZCUwkJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSF9DVkJTCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUhfQ1ZCUwkJCTB4MEIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFIX0NWQlMxMwkJMHgwMworI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkhfQ1ZCUzEzCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSF9DVkJTCQkJMHgxOQorI2RlZmluZSBBVTg1MjJfUkVHMEY5SF9BVURJTwkJCQkJMHgyMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9ITElNX1JFRzA2NEhfQ1ZCUwkJCTB4QTcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUhfQ1ZCUwkJMHgwQQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SF9DVkJTCQkweDMyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSM19SRUcwNjdIX0NWQlMJCTB4MTkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEhfQ1ZCUwkJMHgyMworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SF9DVkJTCQkweDQxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMl9SRUcwNkFIX0NWQlMJCTB4MEEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkhfQ1ZCUwkJMHgzMgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0hfQ1ZCUwkJMHgzNAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfQ1ZCUwkJMHgwNQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUhfQ1ZCUwkJMHg2RQorI2RlZmluZSBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZIX0NWQlMJCQkweDBGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBIX0NWQlMJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1JFRzA3MUhfQ1ZCUwkJCQkJMHgxOAorI2RlZmluZSBBVTg1MjJfUkVHMDcySF9DVkJTCQkJCQkweDMwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNIX0NWQlMJCTB4RjAKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NEhfQ1ZCUwkJCQkJMHg4MAorI2RlZmluZSBBVTg1MjJfUkVHMDc1SF9DVkJTCQkJCQkweEYwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0hfQ1ZCUwkJCTB4RkIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SF9DVkJTCQkJMHgwNAorI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0hJR0hfTElNSVRfUkVHMDc5SF9DVkJTCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FIX0NWQlMJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSF9DVkJTCQkJMHhFRQorI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRIX0NWQlMJCQkweEZFCisjZGVmaW5lIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SF9DVkJTCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSTZBX1JFRzAzNUhfQ1ZCUwkJCQkweDQwCisKKy8qIEVuYWJsZXMgQ2xvc2VkIGNhcHRpb25pbmcgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SF9DQ09OCQkJMHgyMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKaW5kZXggZjZlN2IwMy4uZTRmZDUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCkBAIC01NTksNyArNTU5LDcgQEAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpbnQgcmM7CiAJaWYgKHN0YXRlID09IE5VTEwpIHsKLQkJZXJyKCJVbmFibGUgdG8ga21hbGxvY1xuIik7CisJCWVycigiVW5hYmxlIHRvIGt6YWxsb2NcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKaW5kZXggMjhhZDYwOS4uOWI5ZjU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC0xNSw2ICsxNSw5IEBACiAJU2VwdGVtYmVyLCA5dGggMjAwOAogCSAgICBGaXhlZCBsb2NraW5nIG9uIGhpZ2ggc3ltYm9sIHJhdGVzICg+MzAwMDApLgogCSAgICBJbXBsZW1lbnQgTVBFRyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIuCisJSmFudWFyeSwgMTd0aCAyMDA5CisJICAgIEZpbGwgc2V0X3ZvbHRhZ2Ugd2l0aCBhY3R1YWxseSBjb250cm9sIHZvbHRhZ2UgY29kZS4KKwkgICAgQ29ycmVjdCBzZXQgdG9uZSB0byBub3QgYWZmZWN0IHZvbHRhZ2UuCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNDYsNyArMTQ5LDcgQEAKIAlDTURfR0VUQUdDICAgICAgPSAweDE5LAogCUNNRF9MTkJDT05GSUcgICA9IDB4MjAsCiAJQ01EX0xOQlNFTkQgICAgID0gMHgyMSwgLyogRm9ybWVybHkgQ01EX1NFTkRfRElTRVFDICovCi0JQ01EX1NFVF9UT05FUFJFID0gMHgyMiwKKwlDTURfTE5CRENMRVZFTCAgPSAweDIyLAogCUNNRF9TRVRfVE9ORSAgICA9IDB4MjMsCiAJQ01EX1VQREZXVkVSUyAgID0gMHgzNSwKIAlDTURfVFVORVJTTEVFUCAgPSAweDM2LApAQCAtNjY3LDE2ICs2NzAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQotewotCS8qIFRoZSBpc2w2NDIxIG1vZHVsZSB3aWxsIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZvcHMuICovCi0JZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlICIKLQkJImlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtODM3LDYgKzgzMCwzNCBAQAogCXJldHVybiAtRVRJTUVET1VUOyAvKiAtRUJVU1kgPyAqLwogfQogCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzOiAlc1xuIiwgX19mdW5jX18sCisJCXZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTMgPyAiU0VDX1ZPTFRBR0VfMTMiIDoKKwkJdm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCA/ICJTRUNfVk9MVEFHRV8xOCIgOiAiPz8iKTsKKworCS8qIFdhaXQgZm9yIExOQiByZWFkeSAqLworCXJldCA9IGN4MjQxMTZfd2FpdF9mb3JfbG5iKGZlKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBXYWl0IGZvciB2b2x0YWdlL21pbiByZXBlYXQgZGVsYXkgKi8KKwltc2xlZXAoMTAwKTsKKworCWNtZC5hcmdzWzB4MDBdID0gQ01EX0xOQkRDTEVWRUw7CisJY21kLmFyZ3NbMHgwMV0gPSAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCA/IDB4MDEgOiAweDAwKTsKKwljbWQubGVuID0gMHgwMjsKKworCS8qIE1pbiBkZWxheSB0aW1lIGJlZm9yZSBEaVNFcUMgc2VuZCAqLworCW1zbGVlcCgxNSk7CisKKwlyZXR1cm4gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7Cit9CisKIHN0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKQEAgLTg1NywxNCArODc4LDYgQEAKIAkvKiBNaW4gZGVsYXkgdGltZSBhZnRlciBEaVNFcUMgc2VuZCAqLwogCW1zbGVlcCgxNSk7IC8qIFhYWCBkZXRlcm1pbmUgaXMgRlcgZG9lcyB0aGlzLCBzZWUgc2VuZF9kaXNlcWMvYnVyc3QgKi8KIAotCS8qIFRoaXMgaXMgYWx3YXlzIGRvbmUgYmVmb3JlIHRoZSB0b25lIGlzIHNldCAqLwotCWNtZC5hcmdzWzB4MDBdID0gQ01EX1NFVF9UT05FUFJFOwotCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKLQljbWQubGVuID0gMHgwMjsKLQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBOb3cgd2Ugc2V0IHRoZSB0b25lICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfU0VUX1RPTkU7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwpAQCAtMTA5OSwxMyArMTExMiwxMCBAQAogCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCWdvdG8gZXJyb3IxOwogCi0JLyogc2V0dXAgdGhlIHN0YXRlICovCi0JbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpKTsKLQogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKIApAQCAtMTE1NCw3ICsxMTY0LDEyIEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGN4MjQxMTZfZGlzZXFjX2luaXQoZmUpOworCXJldCA9IGN4MjQxMTZfZGlzZXFjX2luaXQoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEhWUi00MDAwIG5lZWRzIHRoaXMgKi8KKwlyZXR1cm4gY3gyNDExNl9zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfMTMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggMWE4YzM2Zi4uMDU5MmYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCkBAIC0xMDY5LDEzICsxMDY5LDEzIEBACiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZywKIAkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPQogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSksIEdGUF9LRVJORUwpOwogCiAJZHByaW50aygiXG4iKTsKLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCWlmIChzdGF0ZSA9PSBOVUxMKSB7Ci0JCWVycigiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQllcnIoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDIxZjJjNTEuLjk2NzBmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNTgsNiArNTgsNCBAQAogfQogI2VuZGlmCiAKLWV4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdWludDhfdCBvcGVuKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKaW5kZXggNDE0MmVkNy4uZDc1ZmZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaApAQCAtMzksMjAgKzM5LDQ0IEBACiAjZGVmaW5lIERFRkFVTFRfRElCMzAwME1DX0kyQ19BRERSRVNTIDE2CiAjZGVmaW5lIERFRkFVTFRfRElCMzAwMFBfSTJDX0FERFJFU1MgIDI0CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUNfTU9EVUxFKSAmJiBcCisJCQkJICAgICAgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJICAgICB1OCBpMmNfYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkgICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCQkgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKTsKK2V4dGVybgorc3RydWN0IGkyY19hZGFwdGVyICpkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsCisJCQkJCQkgICBpbnQgZ2F0aW5nKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKQorc3RhdGljIGlubGluZQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwKKwkJCQkgICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCSAgICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCSAgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwKKwkJCQkJCSAgIGludCBnYXRpbmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLy8gQ09ORklHX0RWQl9ESUIzMDAwTUMKIAotZXh0ZXJuIGludCBkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKTsKLQotZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgaW50IGdhdGluZyk7Ci0KIGV4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9jb250cm9sKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaW5kZXgsIGludCBwaWQsaW50IG9ub2ZmKTsKIGV4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9wYXJzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaAppbmRleCA1OTdlOWNjLi4xMTM4MTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaApAQCAtMzgsOCArMzgsMzIgQEAKIAogI2RlZmluZSBERUZBVUxUX0RJQjcwMDBNX0kyQ19BRERSRVNTIDE4CiAKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliNzAwMG1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpOwotZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjcwMDBtX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsIGludCk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBNKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBNX01PRFVMRSkgJiYgXAorCQkJCSAgICAgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCQkgICAgdTggaTJjX2FkZHIsCisJCQkJCSAgICBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpOworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLAorCQkJCQkJICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsCisJCQkJCQkgICBpbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCSAgICAgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgKmNmZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGkyY19hZGFwdGVyICpkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwKKwkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsCisJCQkJCSAgICBpbnQgZ2F0aW5nKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCiAKIC8qIFRPRE8KIGV4dGVybiBJTlQgZGliNzAwMG1fc2V0X2dwaW8oc3RydWN0IGRpYkRlbW9kICpkZW1vZCwgVUNIQVIgbnVtLCBVQ0hBUiBkaXIsIFVDSEFSIHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCmluZGV4IGFhYjgxMTIuLjAyYTRjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCkBAIC0zNyw3ICszNyw4IEBACiAKICNkZWZpbmUgREVGQVVMVF9ESUI3MDAwUF9JMkNfQUREUkVTUyAxOAogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUF9NT0RVTEUpICYmIFwKKwkJCQkgICAgIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCQkJICAgIHU4IGkyY19hZGRyLAogCQkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKTsKQEAgLTQ5LDEwICs1MCwxMSBAQAogCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKTsKIGV4dGVybiBpbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKTsKIGV4dGVybiBpbnQgZGliNzAwMHBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1MTYgdmFsdWUpOworZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMHBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCi0JCQkJCQkgICB1OCBpMmNfYWRkciwKLQkJCQkJCSAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgKmNmZykKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwKKwkJCQkgICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgKmNmZykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTYwLDM2ICs2MiwzOSBAQAogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCQkgICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaSwgaW50IHgpCisJCQkJCSAgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpLAorCQkJCQkgICAgaW50IHgpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLWludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKLQkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSkKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorCQkJCQkgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW5saW5lCi1pbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGlubGluZQotaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaAppbmRleCA4MjEwZjE5Li4xZmNiOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5oCkBAIC0yNSw4ICsyNSwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RVTU1ZX0ZFKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RVTU1ZX0ZFX01PRFVMRSkgJiYgXAorZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9vZmRtX2F0dGFjaCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkdmJfZHVtbXlfZmVfcXBza19hdHRhY2godm9pZCk7CiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX3FhbV9hdHRhY2godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfZHVtbXlfZmVfb2ZkbV9hdHRhY2godm9pZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX2R1bW15X2ZlX3Fwc2tfYXR0YWNoKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9xYW1fYXR0YWNoKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9EVU1NWV9GRSAqLwogCiAjZW5kaWYgLy8gRFZCX0RVTU1ZX0ZFX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaAppbmRleCA4Y2RjNTRlLi4wOGNhODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDBfcHJpdi5oCkBAIC0zMSw3ICszMSw3IEBACiAJLyogdWdseSB3b3JrYXJvdW5kIGZvciBmbGV4Y29wJ3MgaW5jYXBhYmxlIGkyYy1jb250cm9sbGVyCiAJICogRklYTUUsIGlmIHBvc3NpYmxlCiAJICovCi0JdTggc2hhZG93WzI1NV07CisJdTggc2hhZG93WzI1Nl07CiB9OwogCiBlbnVtIGl0ZDEwMDBfcmVnaXN0ZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwppbmRleCAzYmIwYzQzLi5lYjcyYTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwpAQCAtMzYzLDcgKzM2Myw2IEBACiAKIAlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlOwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnZHQzMzA0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHN0YXRlLCAweDAsIHNpemVvZihzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUpKTsKIAlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CiAJc3RhdGUtPmkyYyA9IGkyYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTJkMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmMKQEAgLTAsMCArMSwxMDg3IEBACisvKgorICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDUgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX21hdGguaCIKKyNpbmNsdWRlICJsZ2R0MzMwNS5oIgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCByZWc9MiAob3ItYWJsZSkpIik7CisKKyNkZWZpbmUgREJHX0lORk8gMQorI2RlZmluZSBEQkdfUkVHICAyCisKKyNkZWZpbmUgbGdfcHJpbnRrKGtlcm4sIGZtdCwgYXJnLi4uKQkJCQkJXAorCXByaW50ayhrZXJuICIlczogIiBmbXQsIF9fZnVuY19fLCAjI2FyZykKKworI2RlZmluZSBsZ19pbmZvKGZtdCwgYXJnLi4uKQlwcmludGsoS0VSTl9JTkZPICJsZ2R0MzMwNTogIiBmbXQsICMjYXJnKQorI2RlZmluZSBsZ193YXJuKGZtdCwgYXJnLi4uKQlsZ19wcmludGsoS0VSTl9XQVJOSU5HLCAgICAgICBmbXQsICMjYXJnKQorI2RlZmluZSBsZ19lcnIoZm10LCBhcmcuLi4pCWxnX3ByaW50ayhLRVJOX0VSUiwgICAgICAgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX2RiZyhmbXQsIGFyZy4uLikgaWYgKGRlYnVnICYgREJHX0lORk8pCQkJXAorCQkJCWxnX3ByaW50ayhLRVJOX0RFQlVHLCAgICAgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX3JlZyhmbXQsIGFyZy4uLikgaWYgKGRlYnVnICYgREJHX1JFRykJCQlcCisJCQkJbGdfcHJpbnRrKEtFUk5fREVCVUcsICAgICAgICAgZm10LCAjI2FyZykKKworI2RlZmluZSBsZ19mYWlsKHJldCkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0OwkJCQkJCQlcCisJX19yZXQgPSAocmV0IDwgMCk7CQkJCQkJXAorCWlmIChfX3JldCkJCQkJCQkJXAorCQlsZ19lcnIoImVycm9yICVkIG9uIGxpbmUgJWRcbiIsCXJldCwgX19MSU5FX18pOwkJXAorCV9fcmV0OwkJCQkJCQkJXAorfSkKKworc3RydWN0IGxnZHQzMzA1X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCWNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNmZzsKKworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOworCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKKwl1MzIgc25yOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMSAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMiAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMyAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfNCAgICAgICAgICAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzEgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIgICAgICAgICAgICAgICAweDAwMTMKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSAgICAgICAgICAgICAgICAweDAxMDYKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMiAgICAgICAgICAgICAgICAweDAxMDcKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMyAgICAgICAgICAgICAgICAweDAxMDgKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfNCAgICAgICAgICAgICAgICAweDAxMDkKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDAxMWIKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDAxMWMKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTE9DS19TVEFUVVMgICAgICAgICAgICAgICAweDAxMWQKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSTF83ICAgICAgICAgICAgICAgICAgICAweDAxMjYKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yICAgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzEgICAgICAgICAgICAgICAweDAzMDIKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIgICAgICAgICAgICAgICAweDAzMDMKKyNkZWZpbmUgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEgICAgICAgICAweDAzMDYKKyNkZWZpbmUgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzIgICAgICAgICAweDAzMDcKKyNkZWZpbmUgTEdEVDMzMDVfSUZCV18xICAgICAgICAgICAgICAgICAgICAgICAweDAzMDgKKyNkZWZpbmUgTEdEVDMzMDVfSUZCV18yICAgICAgICAgICAgICAgICAgICAgICAweDAzMDkKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0NUUkxfMSAgICAgICAgICAgICAgICAgICAweDAzMGMKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0NUUkxfNCAgICAgICAgICAgICAgICAgICAweDAzMTQKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDA0MTMKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDA0MTQKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzMgICAgICAgICAgICAgICAgICAgICAweDA0MTUKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDA0MTcKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDA0MTgKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzMgICAgICAgICAgICAgICAgICAgICAweDA0MTkKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX0JMT0NLX0NUUkwgICAgICAgICAgICAgICAweDA1MDQKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAweDA1MGEKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMSAgICAgICAgICAgICAgICAweDA1MGMKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMiAgICAgICAgICAgICAgICAweDA1MGQKKyNkZWZpbmUgTEdEVDMzMDVfVFBfQ1RSTF8xICAgICAgICAgICAgICAgICAgICAweDA1MGUKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9QRVJJT0QgICAgICAgICAgICAgICAgICAweDA4MDEKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8xICAgICAgICAgICAweDA4MGEKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8yICAgICAgICAgICAweDA4MGIKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8zICAgICAgICAgICAweDA4MGMKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF80ICAgICAgICAgICAweDA4MGQKKworc3RhdGljIGludCBsZ2R0MzMwNV93cml0ZV9yZWcoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggdmFsKQoreworCWludCByZXQ7CisJdTggYnVmW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmLCB2YWwgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsIC5sZW4gPSAzLAorCX07CisKKwlsZ19yZWcoInJlZzogMHglMDR4LCB2YWw6IDB4JTAyeFxuIiwgcmVnLCB2YWwpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJbGdfZXJyKCJlcnJvciAoYWRkciAlMDJ4ICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAorCQkgICAgICAgbXNnLmJ1ZlswXSwgbXNnLmJ1ZlsxXSwgbXNnLmJ1ZlsyXSwgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9yZWcoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggKnZhbCkKK3sKKwlpbnQgcmV0OworCXU4IHJlZ19idWZbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyLAorCQkgIC5mbGFncyA9IDAsIC5idWYgPSByZWdfYnVmLCAubGVuID0gMiB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHIsCisJCSAgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSB2YWwsIC5sZW4gPSAxIH0sCisJfTsKKworCWxnX3JlZygicmVnOiAweCUwNHhcbiIsIHJlZyk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCWxnX2VycigiZXJyb3IgKGFkZHIgJTAyeCByZWcgJTA0eCBlcnJvciAocmV0ID09ICVpKVxuIiwKKwkJICAgICAgIHN0YXRlLT5jZmctPmkyY19hZGRyLCByZWcsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIHJlYWRfcmVnKHN0YXRlLCByZWcpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdTggX192YWw7CQkJCQkJCVwKKwlpbnQgcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIHJlZywgJl9fdmFsKTsJCVwKKwlpZiAobGdfZmFpbChyZXQpKQkJCQkJCVwKKwkJX192YWwgPSAwOwkJCQkJCVwKKwlfX3ZhbDsJCQkJCQkJCVwKK30pCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQl1MTYgcmVnLCBpbnQgYml0LCBpbnQgb25vZmYpCit7CisJdTggdmFsOworCWludCByZXQ7CisKKwlsZ19yZWcoInJlZzogMHglMDR4LCBiaXQ6ICVkLCBsZXZlbDogJWRcbiIsIHJlZywgYml0LCBvbm9mZik7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgcmVnLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwl2YWwgJj0gfigxIDw8IGJpdCk7CisJdmFsIHw9IChvbm9mZiAmIDEpIDw8IGJpdDsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgcmVnLCB2YWwpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgbGdkdDMzMDVfcmVnIHsKKwl1MTYgcmVnOworCXU4IHZhbDsKK307CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfd3JpdGVfcmVncyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBsZ2R0MzMwNV9yZWcgKnJlZ3MsIGludCBsZW4pCit7CisJaW50IGksIHJldDsKKworCWxnX3JlZygid3JpdGluZyAlZCByZWdpc3RlcnMuLi5cbiIsIGxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7CisJCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgcmVnc1tpXS5yZWcsIHJlZ3NbaV0udmFsKTsKKwkJaWYgKGxnX2ZhaWwocmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9zb2Z0X3Jlc2V0KHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHJldDsKKworCWxnX2RiZygiXG4iKTsKKworCXJldCA9IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCAwLCAwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwltc2xlZXAoMjApOworCXJldCA9IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCAwLCAxKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGdkdDMzMDVfbXBlZ19tb2RlKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICBlbnVtIGxnZHQzMzA1X21wZWdfbW9kZSBtb2RlKQoreworCWxnX2RiZygiKCVkKVxuIiwgbW9kZSk7CisJcmV0dXJuIGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9UUF9DVFJMXzEsIDUsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBlbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgZWRnZSwKKwkJCQkgICAgICAgZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB2YWxpZCkKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWxnX2RiZygiZWRnZSA9ICVkLCB2YWxpZCA9ICVkXG4iLCBlZGdlLCB2YWxpZCk7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwl2YWwgJj0gfjB4MDk7CisKKwlpZiAoZWRnZSkKKwkJdmFsIHw9IDB4MDg7CisJaWYgKHZhbGlkKQorCQl2YWwgfD0gMHgwMTsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCB2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NvZnRfcmVzZXQoc3RhdGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9tb2R1bGF0aW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1OCBvcGVybW9kZTsKKwlpbnQgcmV0OworCisJbGdfZGJnKCJcbiIpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzEsICZvcGVybW9kZSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJb3Blcm1vZGUgJj0gfjB4MDM7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJb3Blcm1vZGUgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCW9wZXJtb2RlIHw9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzI1NjoKKwkJb3Blcm1vZGUgfD0gMHgwMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMSwgb3Blcm1vZGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9maWx0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCWludCB2YWw7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQl2YWwgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGdfZGJnKCJ2YWwgPSAlZFxuIiwgdmFsKTsKKworCXJldHVybiBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgMHgwNDNmLCAyLCB2YWwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9wYXNzYmFuZF9kaWdpdGFsX2FnYyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgYWdjX3JlZjsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlhZ2NfcmVmID0gMHgzMmM0OworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJYWdjX3JlZiA9IDB4MmEwMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMjU2OgorCQlhZ2NfcmVmID0gMHgyYTgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsZ19kYmcoImFnYyByZWY6IDB4JTA0eFxuIiwgYWdjX3JlZik7CisKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0RHVExfQUdDX1JFRl8xLCBhZ2NfcmVmID4+IDgpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIsIGFnY19yZWYgJiAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JmYWdjX2xvb3Aoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiBpZmJ3LCByZmJ3LCBhZ2NkZWxheTsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlhZ2NkZWxheSA9IDB4MDRjMDsKKwkJcmZidyAgICAgPSAweDgwMDA7CisJCWlmYncgICAgID0gMHg4MDAwOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWFnY2RlbGF5ID0gMHgwNDZiOworCQlyZmJ3ICAgICA9IDB4ODg4OTsKKwkJaWZidyAgICAgPSAweDg4ODg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdGF0ZS0+Y2ZnLT5yZl9hZ2NfbG9vcCkgeworCQlsZ19kYmcoImFnY2RlbGF5OiAweCUwNHgsIHJmYnc6IDB4JTA0eFxuIiwgYWdjZGVsYXksIHJmYncpOworCisJCS8qIHJmIGFnYyBsb29wIGZpbHRlciBiYW5kd2lkdGggKi8KKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMSwKKwkJCQkgICBhZ2NkZWxheSA+PiA4KTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMiwKKwkJCQkgICBhZ2NkZWxheSAmIDB4ZmYpOworCisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEsCisJCQkJICAgcmZidyA+PiA4KTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMiwKKwkJCQkgICByZmJ3ICYgMHhmZik7CisJfSBlbHNlIHsKKwkJbGdfZGJnKCJpZmJ3OiAweCUwNHhcbiIsIGlmYncpOworCisJCS8qIGlmIGFnYyBsb29wIGZpbHRlciBiYW5kd2lkdGggKi8KKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9JRkJXXzEsIGlmYncgPj4gOCk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfSUZCV18yLCBpZmJ3ICYgMHhmZik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfYWdjX3NldHVwKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCWludCBsb2NrZHRlbiwgYWNxZW47CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJbG9ja2R0ZW4gPSAwOworCQlhY3FlbiA9IDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJbG9ja2R0ZW4gPSAxOworCQlhY3FlbiA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxnX2RiZygibG9ja2R0ZW4gPSAlZCwgYWNxZW4gPSAlZFxuIiwgbG9ja2R0ZW4sIGFjcWVuKTsKKworCS8qIGNvbnRyb2wgYWdjIGZ1bmN0aW9uICovCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfQ1RSTF80LCAweGUxIHwgbG9ja2R0ZW4gPDwgMSk7CisJbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0FHQ19DVFJMXzEsIDIsIGFjcWVuKTsKKworCXJldHVybiBsZ2R0MzMwNV9yZmFnY19sb29wKHN0YXRlLCBwYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X2FnY19wb3dlcl9yZWYoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiB1c3JlZiA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJaWYgKHN0YXRlLT5jZmctPnVzcmVmXzh2c2IpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmXzh2c2I7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQlpZiAoc3RhdGUtPmNmZy0+dXNyZWZfcWFtNjQpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmX3FhbTY0OworCQlicmVhazsKKwljYXNlIFFBTV8yNTY6CisJCWlmIChzdGF0ZS0+Y2ZnLT51c3JlZl9xYW0yNTYpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmX3FhbTI1NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVzcmVmKSB7CisJCWxnX2RiZygic2V0IG1hbnVhbCBtb2RlOiAweCUwNHhcbiIsIHVzcmVmKTsKKworCQlsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfMSwgMywgMSk7CisKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzEsCisJCQkJICAgMHhmZiAmICh1c3JlZiA+PiA4KSk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yLAorCQkJCSAgIDB4ZmYgJiAodXNyZWYgPj4gMCkpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc3BlY3RyYWxfaW52ZXJzaW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0sCisJCQkJICAgICAgIGludCBpbnZlcnNpb24pCit7CisJaW50IHJldDsKKworCWxnX2RiZygiKCVkKVxuIiwgaW52ZXJzaW9uKTsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUkxfNywKKwkJCQkJIGludmVyc2lvbiA/IDB4ZjkgOiAweDc5KTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0ZFQ19CTE9DS19DVFJMLAorCQkJCQkgaW52ZXJzaW9uID8gMHhmZCA6IDB4ZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9pZihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgaWZfZnJlcV9raHo7CisJdTggbmNvMSwgbmNvMiwgbmNvMywgbmNvNDsKKwl1NjQgbmNvOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWlmX2ZyZXFfa2h6ID0gc3RhdGUtPmNmZy0+dnNiX2lmX2toejsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlpZl9mcmVxX2toeiA9IHN0YXRlLT5jZmctPnFhbV9pZl9raHo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5jbyA9IGlmX2ZyZXFfa2h6IC8gMTA7CisKKyNkZWZpbmUgTEdEVDMzMDVfNjRCSVRfRElWSVNJT05fRU5BQkxFRCAwCisJLyogRklYTUU6IDY0Yml0IGRpdmlzaW9uIGRpc2FibGVkIHRvIGF2b2lkIGxpbmtpbmcgZXJyb3I6CisJICogV0FSTklORzogIl9fdWRpdmRpMyIgW2xnZHQzMzA1LmtvXSB1bmRlZmluZWQhCisJICovCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisjaWYgTEdEVDMzMDVfNjRCSVRfRElWSVNJT05fRU5BQkxFRAorCQluY28gPDw9IDI0OworCQluY28gLz0gNjI1OworI2Vsc2UKKwkJbmNvICo9ICgoMSA8PCAyNCkgLyA2MjUpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKyNpZiBMR0RUMzMwNV82NEJJVF9ESVZJU0lPTl9FTkFCTEVECisJCW5jbyA8PD0gMjg7CisJCW5jbyAvPSA2MjU7CisjZWxzZQorCQluY28gKj0gKCgxIDw8IDI4KSAvIDYyNSk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmNvMSA9IChuY28gPj4gMjQpICYgMHgzZjsKKwluY28xIHw9IDB4NDA7CisJbmNvMiA9IChuY28gPj4gMTYpICYgMHhmZjsKKwluY28zID0gKG5jbyA+PiA4KSAmIDB4ZmY7CisJbmNvNCA9IG5jbyAmIDB4ZmY7CisKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsIG5jbzEpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMiwgbmNvMik7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zLCBuY28zKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzQsIG5jbzQpOworCisJbGdfZGJnKCIlZCBLSHogLT4gWyUwMnglMDJ4JTAyeCUwMnhdXG4iLAorCSAgICAgICBpZl9mcmVxX2toeiwgbmNvMSwgbmNvMiwgbmNvMywgbmNvNCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmNmZy0+ZGVueV9pMmNfcnB0cikKKwkJcmV0dXJuIDA7CisKKwlsZ19kYmcoIiglZClcbiIsIGVuYWJsZSk7CisKKwlyZXR1cm4gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzIsIDUsCisJCQkJICAgIGVuYWJsZSA/IDAgOiAxKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggZ2VuX2N0cmxfMywgZ2VuX2N0cmxfNDsKKworCWxnX2RiZygiXG4iKTsKKworCWdlbl9jdHJsXzMgPSByZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMyk7CisJZ2VuX2N0cmxfNCA9IHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF80KTsKKworCS8qIGhvbGQgaW4gc29mdHdhcmUgcmVzZXQgd2hpbGUgc2xlZXBpbmcgKi8KKwlnZW5fY3RybF8zICY9IH4weDAxOworCS8qIHRyaXN0YXRlIHRoZSBJRi1BR0MgcGluICovCisJZ2VuX2N0cmxfMyB8PSAgMHgwMjsKKwkvKiB0cmlzdGF0ZSB0aGUgUkYtQUdDIHBpbiAqLworCWdlbl9jdHJsXzMgfD0gIDB4MDQ7CisKKwkvKiBkaXNhYmxlIHZzYi9xYW0gbW9kdWxlICovCisJZ2VuX2N0cmxfNCAmPSB+MHgwMTsKKwkvKiBkaXNhYmxlIGFkYyBtb2R1bGUgKi8KKwlnZW5fY3RybF80ICY9IH4weDAyOworCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCBnZW5fY3RybF8zKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzQsIGdlbl9jdHJsXzQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCXN0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfcmVnIGxnZHQzMzA1X2luaXRfZGF0YVtdID0geworCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8xLAorCQkgIC52YWwgPSAweDAzLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8yLAorCQkgIC52YWwgPSAweGIwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8zLAorCQkgIC52YWwgPSAweDAxLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ09OVFJPTCwKKwkJICAudmFsID0gMHg2ZiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfNCwKKwkJICAudmFsID0gMHgwMywgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfREdUTF9BR0NfUkVGXzEsCisJCSAgLnZhbCA9IDB4MzIsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0RHVExfQUdDX1JFRl8yLAorCQkgIC52YWwgPSAweGM0LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV80LAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJMXzcsCisJCSAgLnZhbCA9IDB4NzksIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMSwKKwkJICAudmFsID0gMHgzMiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yLAorCQkgIC52YWwgPSAweGM0LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMSwKKwkJICAudmFsID0gMHgwZCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIsCisJCSAgLnZhbCA9IDB4MzAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18xLAorCQkgIC52YWwgPSAweDgwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMiwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfSUZCV18xLAorCQkgIC52YWwgPSAweDgwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9JRkJXXzIsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19DVFJMXzEsCisJCSAgLnZhbCA9IDB4MzAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19DVFJMXzQsCisJCSAgLnZhbCA9IDB4NjEsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0ZFQ19CTE9DS19DVFJMLAorCQkgIC52YWwgPSAweGZmLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9UUF9DVFJMXzEsCisJCSAgLnZhbCA9IDB4MWIsIH0sCisJfTsKKworCWxnX2RiZygiXG4iKTsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZ3Moc3RhdGUsIGxnZHQzMzA1X2luaXRfZGF0YSwKKwkJCQkgIEFSUkFZX1NJWkUobGdkdDMzMDVfaW5pdF9kYXRhKSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfc29mdF9yZXNldChzdGF0ZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCWxnX2RiZygiKCVkLCAlZClcbiIsIHBhcmFtLT5mcmVxdWVuY3ksIHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CisJCXJldCA9IGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisJCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IHBhcmFtLT5mcmVxdWVuY3k7CisJfQorCisJcmV0ID0gbGdkdDMzMDVfc2V0X21vZHVsYXRpb24oc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9wYXNzYmFuZF9kaWdpdGFsX2FnYyhzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfYWdjX3Bvd2VyX3JlZihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9hZ2Nfc2V0dXAoc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBsb3cgaWYgKi8KKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DT05UUk9MLCAweDJmKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsIDYsIDEpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NldF9pZihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9zcGVjdHJhbF9pbnZlcnNpb24oc3RhdGUsIHBhcmFtLAorCQkJCQkgIHN0YXRlLT5jZmctPnNwZWN0cmFsX2ludmVyc2lvbgorCQkJCQkgID8gMSA6IDApOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NldF9maWx0ZXJfZXh0ZW5zaW9uKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uOworCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlKHN0YXRlLCBzdGF0ZS0+Y2ZnLT5tcGVnX21vZGUpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCS8qIGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eSBjYWxscyBsZ2R0MzMwNV9zb2Z0X3Jlc2V0ICovCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0YXRlLAorCQkJCQkgIHN0YXRlLT5jZmctPnRwY2xrX2VkZ2UsCisJCQkJCSAgc3RhdGUtPmNmZy0+dHB2YWxpZF9wb2xhcml0eSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWxnX2RiZygiXG4iKTsKKworCXBhcmFtLT51LnZzYi5tb2R1bGF0aW9uID0gc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbjsKKwlwYXJhbS0+ZnJlcXVlbmN5ID0gc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX2NyX2xvY2tfc3RhdHVzKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCWludCAqbG9ja2VkKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCWNoYXIgKmNyX2xvY2tfc3RhdGUgPSAiIjsKKworCSpsb2NrZWQgPSAwOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0xPQ0tfU1RBVFVTLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8yNTY6CisJY2FzZSBRQU1fNjQ6CisJCWlmICh2YWwgJiAoMSA8PCAxKSkKKwkJCSpsb2NrZWQgPSAxOworCisJCXN3aXRjaCAodmFsICYgMHgwNykgeworCQljYXNlIDA6CisJCQljcl9sb2NrX3N0YXRlID0gIlFBTSBVTkxPQ0siOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIDFzdExvY2siOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIDJuZExvY2siOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIEZpbmFsTG9jayI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiQ0xPQ0tRQU0tSU5WQUxJRCEiOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwkJaWYgKHZhbCAmICgxIDw8IDcpKSB7CisJCQkqbG9ja2VkID0gMTsKKwkJCWNyX2xvY2tfc3RhdGUgPSAiQ0xPQ0tWU0IiOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWxnX2RiZygiKCVkKSAlc1xuIiwgKmxvY2tlZCwgY3JfbG9ja19zdGF0ZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9mZWNfbG9ja19zdGF0dXMoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkJIGludCAqbG9ja2VkKQoreworCXU4IHZhbDsKKwlpbnQgcmV0LCBtcGVnX2xvY2ssIGZlY19sb2NrLCB2aXRlcmJpX2xvY2s7CisKKwkqbG9ja2VkID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsCisJCQkJCUxHRFQzMzA1X0ZFQ19MT0NLX1NUQVRVUywgJnZhbCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJbXBlZ19sb2NrICAgID0gKHZhbCAmICgxIDw8IDApKSA/IDEgOiAwOworCQlmZWNfbG9jayAgICAgPSAodmFsICYgKDEgPDwgMikpID8gMSA6IDA7CisJCXZpdGVyYmlfbG9jayA9ICh2YWwgJiAoMSA8PCAzKSkgPyAxIDogMDsKKworCQkqbG9ja2VkID0gbXBlZ19sb2NrICYmIGZlY19sb2NrICYmIHZpdGVyYmlfbG9jazsKKworCQlsZ19kYmcoIiglZCkgJXMlcyVzXG4iLCAqbG9ja2VkLAorCQkgICAgICAgbXBlZ19sb2NrICAgID8gIm1wZWcgbG9jayAgIiAgOiAiIiwKKwkJICAgICAgIGZlY19sb2NrICAgICA/ICJmZWMgbG9jayAgIiAgIDogIiIsCisJCSAgICAgICB2aXRlcmJpX2xvY2sgPyAidml0ZXJiaSBsb2NrIiA6ICIiKTsKKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdmFsOworCWludCByZXQsIHNpZ25hbCwgaW5sb2NrLCBub2ZlY2Vyciwgc25yZ29vZCwKKwkJY3JfbG9jaywgZmVjX2xvY2ssIHN5bmNfbG9jazsKKworCSpzdGF0dXMgPSAwOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9TVEFUVVMsICZ2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXNpZ25hbCAgICA9ICh2YWwgJiAoMSA8PCA0KSkgPyAxIDogMDsKKwlpbmxvY2sgICAgPSAodmFsICYgKDEgPDwgMykpID8gMCA6IDE7CisJc3luY19sb2NrID0gKHZhbCAmICgxIDw8IDIpKSA/IDEgOiAwOworCW5vZmVjZXJyICA9ICh2YWwgJiAoMSA8PCAxKSkgPyAxIDogMDsKKwlzbnJnb29kICAgPSAodmFsICYgKDEgPDwgMCkpID8gMSA6IDA7CisKKwlsZ19kYmcoIiVzJXMlcyVzJXNcbiIsCisJICAgICAgIHNpZ25hbCAgICA/ICJTSUdOQUxFWElTVCAiIDogIiIsCisJICAgICAgIGlubG9jayAgICA/ICJJTkxPQ0sgIiAgICAgIDogIiIsCisJICAgICAgIHN5bmNfbG9jayA/ICJTWU5DTE9DSyAiICAgIDogIiIsCisJICAgICAgIG5vZmVjZXJyICA/ICJOT0ZFQ0VSUiAiICAgIDogIiIsCisJICAgICAgIHNucmdvb2QgICA/ICJTTlJHT09EICIgICAgIDogIiIpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9jcl9sb2NrX3N0YXR1cyhzdGF0ZSwgJmNyX2xvY2spOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCWlmIChzaWduYWwpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAoY3JfbG9jaykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAobm9mZWNlcnIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKHN5bmNfbG9jaykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJcmV0ID0gbGdkdDMzMDVfcmVhZF9mZWNfbG9ja19zdGF0dXMoc3RhdGUsICZmZWNfbG9jayk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJaWYgKGZlY19sb2NrKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwkJaWYgKGlubG9jaykKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYm9ycm93ZWQgZnJvbSBsZ2R0MzMweC5jICovCitzdGF0aWMgdTMyIGNhbGN1bGF0ZV9zbnIodTMyIG1zZSwgdTMyIGMpCit7CisJaWYgKG1zZSA9PSAwKSAvKiBubyBzaWduYWwgKi8KKwkJcmV0dXJuIDA7CisKKwltc2UgPSBpbnRsb2cxMChtc2UpOworCWlmIChtc2UgPiBjKSB7CisJCS8qIE5lZ2F0aXZlIFNOUiwgd2hpY2ggaXMgcG9zc2libGUsIGJ1dCByZWFsaXN0aWNseSB0aGUKKwkJZGVtb2Qgd2lsbCBsb3NlIGxvY2sgYmVmb3JlIHRoZSBzaWduYWwgZ2V0cyB0aGlzIGJhZC4gIFRoZQorCQlBUEkgb25seSBhbGxvd3MgZm9yIHVuc2lnbmVkIHZhbHVlcywgc28ganVzdCByZXR1cm4gMCAqLworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDEwKihjIC0gbXNlKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUzMiBub2lzZTsJLyogbm9pc2UgdmFsdWUgKi8KKwl1MzIgYzsJCS8qIHBlci1tb2R1bGF0aW9uIFNOUiBjYWxjdWxhdGlvbiBjb25zdGFudCAqLworCisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKyNpZmRlZiBVU0VfUFRNU0UKKwkJLyogVXNlIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgKi8KKwkJLyogU05SIGZvciByYW5nZXMgZnJvbSAtMTMuMTEgdG8gKzQ0LjA4ICovCisJCW5vaXNlID0JKChyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzEpICYgMHgwNykgPDwgMTYpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzIpIDw8IDgpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzMpICYgMHhmZik7CisJCWMgPSA3Mzk1Nzk5NDsgLyogbG9nMTAoMjUqMzJeMikqMl4yNCAqLworI2Vsc2UKKwkJLyogVXNlIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciAqLworCQkvKiBTTlIgZm9yIHJhbmdlcyBmcm9tIC0xNi4xMiB0byArNDQuMDggKi8KKwkJbm9pc2UgPQkoKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMSkgJiAweDBmKSA8PCAxNikgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMikgPDwgOCkgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMykgJiAweGZmKTsKKwkJYyA9IDczOTU3OTk0OyAvKiBsb2cxMCgyNSozMl4yKSoyXjI0ICovCisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlub2lzZSA9IChyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfTVNFXzEpIDw8IDgpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfTVNFXzIpICYgMHhmZik7CisKKwkJYyA9IChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFFBTV82NCkgPworCQkJOTc5Mzk4MzcgOiA5ODAyNjA2NjsKKwkJLyogbG9nMTAoNjg4MTI4KSoyXjI0IGFuZCBsb2cxMCg2OTYzMjApKjJeMjQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXN0YXRlLT5zbnIgPSBjYWxjdWxhdGVfc25yKG5vaXNlLCBjKTsKKwkvKiByZXBvcnQgU05SIGluIGRCICogMTAgKi8KKwkqc25yID0gKHN0YXRlLT5zbnIgLyAoKDEgPDwgMjQpIC8gMTApKTsKKwlsZ19kYmcoIm5vaXNlID0gMHglMDh4LCBzbnIgPSAlZC4lMDJkIGRCXG4iLCBub2lzZSwKKwkgICAgICAgc3RhdGUtPnNuciA+PiAyNCwgKCgoc3RhdGUtPnNuciA+PiA4KSAmIDB4ZmZmZikgKiAxMDApID4+IDE2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgdTE2ICpzdHJlbmd0aCkKK3sKKwkvKiBib3Jyb3dlZCBmcm9tIGxnZHQzMzB4LmMKKwkgKgorCSAqIENhbGN1bGF0ZSBzdHJlbmd0aCBmcm9tIFNOUiB1cCB0byAzNWRCCisJICogRXZlbiB0aG91Z2ggdGhlIFNOUiBjYW4gZ28gaGlnaGVyIHRoYW4gMzVkQiwKKwkgKiB0aGVyZSBpcyBzb21lIGNvbWZvcnQgZmFjdG9yIGluIGhhdmluZyBhIHJhbmdlIG9mCisJICogc3Ryb25nIHNpZ25hbHMgdGhhdCBjYW4gc2hvdyBhdCAxMDAlCisJICovCisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBzbnI7CisJaW50IHJldDsKKworCSpzdHJlbmd0aCA9IDA7CisKKwlyZXQgPSBmZS0+b3BzLnJlYWRfc25yKGZlLCAmc25yKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJLyogUmF0aGVyIHRoYW4gdXNlIHRoZSA4LjggdmFsdWUgc25yLCB1c2Ugc3RhdGUtPnNuciB3aGljaCBpcyA4LjI0ICovCisJLyogc2NhbGUgdGhlIHJhbmdlIDAgLSAzNSoyXjI0IGludG8gMCAtIDY1NTM1ICovCisJaWYgKHN0YXRlLT5zbnIgPj0gODk2MCAqIDB4MTAwMDApCisJCSpzdHJlbmd0aCA9IDB4ZmZmZjsKKwllbHNlCisJCSpzdHJlbmd0aCA9IHN0YXRlLT5zbnIgLyA4OTYwOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJKmJlciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkqdWNibG9ja3MgPQorCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0ZFQ19QS1RfRVJSXzEpIDw8IDgpIHwKKwkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9GRUNfUEtUX0VSUl8yKSAmIDB4ZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzCisJCQkJCSpmZV90dW5lX3NldHRpbmdzKQoreworCWZlX3R1bmVfc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDUwMDsKKwlsZ19kYmcoIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxnZHQzMzA1X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWxnX2RiZygiXG4iKTsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ2R0MzMwNV9vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxnZHQzMzA1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCByZXQ7CisJdTggdmFsOworCisJbGdfZGJnKCIoJWQtJTA0eClcbiIsCisJICAgICAgIGkyY19hZGFwID8gaTJjX2FkYXB0ZXJfaWQoaTJjX2FkYXApIDogMCwKKwkgICAgICAgY29uZmlnID8gY29uZmlnLT5pMmNfYWRkciA6IDApOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmNmZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjX2FkYXAgPSBpMmNfYWRhcDsKKworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmxnZHQzMzA1X29wcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCS8qIHZlcmlmeSB0aGF0IHdlJ3JlIHRhbGtpbmcgdG8gYSBsZyBkdDMzMDUgKi8KKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMiwgJnZhbCk7CisJaWYgKChsZ19mYWlsKHJldCkpIHwgKHZhbCA9PSAwKSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgMHgwODA4LCAweDgwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIDB4MDgwOCwgJnZhbCk7CisJaWYgKChsZ19mYWlsKHJldCkpIHwgKHZhbCAhPSAweDgwKSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgMHgwODA4LCAweDAwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgPSAtMTsKKwlzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID0gLTE7CisKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKK2ZhaWw6CisJbGdfd2FybigidW5hYmxlIHRvIGRldGVjdCBMR0RUMzMwNSBoYXJkd2FyZVxuIik7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChsZ2R0MzMwNV9hdHRhY2gpOworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDVfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBWU0IvUUFNIEZyb250ZW5kIiwKKwkJLnR5cGUgICAgICAgICAgICAgICA9IEZFX0FUU0MsCisJCS5mcmVxdWVuY3lfbWluICAgICAgPSA1NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggICAgICA9IDg1ODAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAorCQkuY2FwcyA9IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNXzI1NiB8IEZFX0NBTl84VlNCCisJfSwKKwkuaTJjX2dhdGVfY3RybCAgICAgICAgPSBsZ2R0MzMwNV9pMmNfZ2F0ZV9jdHJsLAorCS5pbml0ICAgICAgICAgICAgICAgICA9IGxnZHQzMzA1X2luaXQsCisJLnNsZWVwICAgICAgICAgICAgICAgID0gbGdkdDMzMDVfc2xlZXAsCisJLnNldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDVfc2V0X3BhcmFtZXRlcnMsCisJLmdldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDVfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyAgICA9IGxnZHQzMzA1X2dldF90dW5lX3NldHRpbmdzLAorCS5yZWFkX3N0YXR1cyAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGxnZHQzMzA1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzICAgICAgICA9IGxnZHQzMzA1X3JlYWRfdWNibG9ja3MsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gbGdkdDMzMDVfcmVsZWFzZSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDUgQVRTQy9RQU0tQiBEZW1vZHVsYXRvciBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMSIpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE2ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICAgIFN1cHBvcnQgZm9yIExHRFQzMzA1IC0gVlNCL1FBTQorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfTEdEVDMzMDVfSF8KKyNkZWZpbmUgX0xHRFQzMzA1X0hfCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworCitlbnVtIGxnZHQzMzA1X21wZWdfbW9kZSB7CisJTEdEVDMzMDVfTVBFR19QQVJBTExFTCA9IDAsCisJTEdEVDMzMDVfTVBFR19TRVJJQUwgPSAxLAorfTsKKworZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIHsKKwlMR0RUMzMwNV9UUENMS19SSVNJTkdfRURHRSA9IDAsCisJTEdEVDMzMDVfVFBDTEtfRkFMTElOR19FREdFID0gMSwKK307CisKK2VudW0gbGdkdDMzMDVfdHBfdmFsaWRfcG9sYXJpdHkgeworCUxHRFQzMzA1X1RQX1ZBTElEX0xPVyA9IDAsCisJTEdEVDMzMDVfVFBfVkFMSURfSElHSCA9IDEsCit9OworCitzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIHsKKwl1OCBpMmNfYWRkcjsKKworCS8qIHVzZXIgZGVmaW5lZCBJRiBmcmVxdWVuY3kgaW4gS0h6ICovCisJdTE2IHFhbV9pZl9raHo7CisJdTE2IHZzYl9pZl9raHo7CisKKwkvKiBBR0MgUG93ZXIgcmVmZXJlbmNlIC0gZGVmYXVsdHMgYXJlIHVzZWQgaWYgbGVmdCB1bnNldCAqLworCXUxNiB1c3JlZl84dnNiOyAgIC8qIGRlZmF1bHQ6IDB4MzJjNCAqLworCXUxNiB1c3JlZl9xYW02NDsgIC8qIGRlZmF1bHQ6IDB4NTQwMCAqLworCXUxNiB1c3JlZl9xYW0yNTY7IC8qIGRlZmF1bHQ6IDB4MmE4MCAqLworCisJLyogZGlzYWJsZSBpMmMgcmVwZWF0ZXIgLSAwOnJlcGVhdGVyIGVuYWJsZWQgMTpyZXBlYXRlciBkaXNhYmxlZCAqLworCWludCBkZW55X2kyY19ycHRyOjE7CisKKwkvKiBzcGVjdHJhbCBpbnZlcnNpb24gLSAwOmRpc2FibGVkIDE6ZW5hYmxlZCAqLworCWludCBzcGVjdHJhbF9pbnZlcnNpb246MTsKKworCS8qIHVzZSBSRiBBR0MgbG9vcCAtIDA6ZGlzYWJsZWQgMTplbmFibGVkICovCisJaW50IHJmX2FnY19sb29wOjE7CisKKwllbnVtIGxnZHQzMzA1X21wZWdfbW9kZSBtcGVnX21vZGU7CisJZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIHRwY2xrX2VkZ2U7CisJZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB0cHZhbGlkX3BvbGFyaXR5OworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNV9NT0RVTEUpICYmIFwKKwkJCQkgICAgIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybgorc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdkdDMzMDVfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxnZHQzMzA1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfTEdEVDMzMDUgKi8KKworI2VuZGlmIC8qIF9MR0RUMzMwNV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYmgyNC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYmgyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTliMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5iaDI0LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGxuYmgyNC5oIC0gZHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYmgyNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTE5CSDI0X0gKKyNkZWZpbmUgX0xOQkgyNF9ICisKKy8qIHN5c3RlbSByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIExOQkgyNF9PTEYJMHgwMQorI2RlZmluZSBMTkJIMjRfT1RGCTB4MDIKKyNkZWZpbmUgTE5CSDI0X0VOCTB4MDQKKyNkZWZpbmUgTE5CSDI0X1ZTRUwJMHgwOAorI2RlZmluZSBMTkJIMjRfTExDCTB4MTAKKyNkZWZpbmUgTE5CSDI0X1RFTgkweDIwCisjZGVmaW5lIExOQkgyNF9UVFgJMHg0MAorI2RlZmluZSBMTkJIMjRfUENMCTB4ODAKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjFfTU9EVUxFKSBcCisJCQkJCQkJJiYgZGVmaW5lZChNT0RVTEUpKQorLyogb3ZlcnJpZGVfc2V0IGFuZCBvdmVycmlkZV9jbGVhciBjb250cm9sIHdoaWNoCisgICBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYmgyNF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5iaDI0X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyLCB1OCBpMmNfYWRkcikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwppbmRleCA3NmY5MzVkLi4xZGNjNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIGxuYnAyMS5oIC0gZHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYnAyMQorICogbG5icDIxLmMgLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBFbmRyaXNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzMsMTggKzM0LDIxIEBACiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJsbmJwMjEuaCIKKyNpbmNsdWRlICJsbmJoMjQuaCIKIAogc3RydWN0IGxuYnAyMSB7CiAJdTgJCQljb25maWc7CiAJdTgJCQlvdmVycmlkZV9vcjsKIAl1OAkJCW92ZXJyaWRlX2FuZDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyYzsKKwl1OAkJCWkyY19hZGRyOwogfTsKIAotc3RhdGljIGludCBsbmJwMjFfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgbG5icDIxX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPnNlY19wcml2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAorCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSBsbmJwMjEtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKIApAQCAtNzIsNyArNzYsNyBAQAogc3RhdGljIGludCBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGxvbmcgYXJnKQogewogCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5zZWNfcHJpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gbG5icDIxLT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCQkuYnVmID0gJmxuYnAyMS0+Y29uZmlnLAogCQkJCS5sZW4gPSBzaXplb2YobG5icDIxLT5jb25maWcpIH07CiAKQEAgLTk3LDE1ICsxMDEsMTggQEAKIAlmZS0+c2VjX3ByaXYgPSBOVUxMOwogfQogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJ4MnhfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIsIHU4IGkyY19hZGRyLCB1OCBjb25maWcpCiB7CiAJc3RydWN0IGxuYnAyMSAqbG5icDIxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxuYnAyMSksIEdGUF9LRVJORUwpOwogCWlmICghbG5icDIxKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCWxuYnAyMS0+Y29uZmlnID0gTE5CUDIxX0lTRUw7CisJbG5icDIxLT5jb25maWcgPSBjb25maWc7CiAJbG5icDIxLT5pMmMgPSBpMmM7CisJbG5icDIxLT5pMmNfYWRkciA9IGkyY19hZGRyOwogCWZlLT5zZWNfcHJpdiA9IGxuYnAyMTsKIAogCS8qIGJpdHMgd2hpY2ggc2hvdWxkIGJlIGZvcmNlZCB0byAnMScgKi8KQEAgLTEyNiwxMSArMTMzLDI5IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOworCXByaW50ayhLRVJOX0lORk8gIkxOQngyeCBhdHRhY2hlZCBvbiBhZGRyPSV4IiwgbG5icDIxLT5pMmNfYWRkcik7CiAKIAlyZXR1cm4gZmU7CiB9CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYmgyNF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIpCit7CisJcmV0dXJuIGxuYngyeF9hdHRhY2goZmUsIGkyYywgb3ZlcnJpZGVfc2V0LCBvdmVycmlkZV9jbGVhciwKKwkJCQkJCQlpMmNfYWRkciwgTE5CSDI0X1RUWCk7Cit9CitFWFBPUlRfU1lNQk9MKGxuYmgyNF9hdHRhY2gpOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIpCit7CisJcmV0dXJuIGxuYngyeF9hdHRhY2goZmUsIGkyYywgb3ZlcnJpZGVfc2V0LCBvdmVycmlkZV9jbGVhciwKKwkJCQkJCQkweDA4LCBMTkJQMjFfSVNFTCk7Cit9CiBFWFBPUlRfU1lNQk9MKGxuYnAyMV9hdHRhY2gpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEiKTsKLU1PRFVMRV9BVVRIT1IoIk9saXZlciBFbmRyaXNzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEsIGxuYmgyNCIpOworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEVuZHJpc3MsIElnb3IgTS4gTGlwbGlhbmluIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKaW5kZXggOGZlMDk0Yi4uZmNkZjFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaApAQCAtMjgsMjYgKzI4LDQ4IEBACiAjZGVmaW5lIF9MTkJQMjFfSAogCiAvKiBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAqLworLyogW1JPXSAwPU9LOyAxPW92ZXIgY3VycmVudCBsaW1pdCBmbGFnICovCiAjZGVmaW5lIExOQlAyMV9PTEYJMHgwMQorLyogW1JPXSAwPU9LOyAxPW92ZXIgdGVtcGVyYXR1cmUgZmxhZyAoMTUwIEMpICovCiAjZGVmaW5lIExOQlAyMV9PVEYJMHgwMgorLyogW1JXXSAwPWRpc2FibGUgTE5CIHBvd2VyLCBlbmFibGUgbG9vcHRocm91Z2gKKwkxPWVuYWJsZSBMTkIgcG93ZXIsIGRpc2FibGUgbG9vcHRocm91Z2ggKi8KICNkZWZpbmUgTE5CUDIxX0VOCTB4MDQKKy8qIFtSV10gMD1sb3cgdm9sdGFnZSAoMTMvMTRWLCB2ZXJ0IHBvbCkKKwkxPWhpZ2ggdm9sdGFnZSAoMTgvMTlWLGhvcml6IHBvbCkgKi8KICNkZWZpbmUgTE5CUDIxX1ZTRUwJMHgwOAorLyogW1JXXSBpbmNyZWFzZSBMTkIgdm9sdGFnZSBieSAxVjoKKwkwPTEzLzE4VjsgMT0xNC8xOVYgKi8KICNkZWZpbmUgTE5CUDIxX0xMQwkweDEwCisvKiBbUlddIDA9dG9uZSBjb250cm9sbGVkIGJ5IERTUUlOIHBpbgorCTE9dG9uZSBlbmFibGUsIGRpc2FibGUgRFNRSU4gKi8KICNkZWZpbmUgTE5CUDIxX1RFTgkweDIwCisvKiBbUlddIGN1cnJlbnQgbGltaXQgc2VsZWN0OgorCTA6SW91dD01MDAtNjUwbUEgSXNjPTMwMG1BCisJMTpJb3V0PTQwMC01NTBtQSBJc2M9MjAwbUEgKi8KICNkZWZpbmUgTE5CUDIxX0lTRUwJMHg0MAorLyogW1JXXSBzaG9ydC1jaXJjdWl0IHByb3RlY3Q6CisJMD1wdWxzZWQgKGR5bmFtaWMpIGN1cnIgbGltaXRpbmcKKwkxPXN0YXRpYyBjdXJyIGxpbWl0aW5nICovCiAjZGVmaW5lIExOQlAyMV9QQ0wJMHg4MAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLS8qIG92ZXJyaWRlX3NldCBhbmQgb3ZlcnJpZGVfY2xlYXIgY29udHJvbCB3aGljaCBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLwotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCisvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2gKKyBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhcik7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfTE5CUDIxCisjZW5kaWYKIAotI2VuZGlmIC8vIF9MTkJQMjFfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCmluZGV4IDg5MmFmOGMuLjNmNWEwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCkBAIC0xNjksNyArMTY5LDYgQEAKIAogCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZTsKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHN0YXRlLCAweDAsIHNpemVvZihzdHJ1Y3QgczkyMV9zdGF0ZSkpOwogCiAJc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXN0YXRlLT5pMmMgPSBpMmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCmluZGV4IGQzMTMzNDAuLjYzMTRkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCkBAIC0zNiw3ICszNiw2IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCSpmcmVxdWVuY3kgPSB0X3N0YXRlLmZyZXF1ZW5jeTsKLQkJcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5mcmVxdWVuY3kpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU5LDcgKzU4LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCkBAIC04MSw3ICs3OSw2IEBACiAJCX0KIAkJKmJhbmR3aWR0aCA9IHRfc3RhdGUuYmFuZHdpZHRoOwogCX0KLQlwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmJhbmR3aWR0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMyw2ICsxMDAsNSBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQlwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmJhbmR3aWR0aCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTEzMzJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogc3R2MDkwMC5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9ICisjZGVmaW5lIFNUVjA5MDBfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKK3N0cnVjdCBzdHYwOTAwX2NvbmZpZyB7CisJdTggZGVtb2RfYWRkcmVzczsKKwl1MzIgeHRhbDsKKwl1OCBjbGttb2RlOy8qIDAgZm9yIENMS0ksICAyIGZvciBYVEFMSSAqLworCisJdTggZGlzZXFjX21vZGU7CisKKwl1OCBwYXRoMV9tb2RlOworCXU4IHBhdGgyX21vZGU7CisKKwl1OCB0dW4xX21hZGRyZXNzOy8qIDAsIDEsIDIsIDMgZm9yIDB4YzAsIDB4YzIsIDB4YzQsIDB4YzYgKi8KKwl1OCB0dW4yX21hZGRyZXNzOworCXU4IHR1bjFfYWRjOy8qIDEgZm9yIHN0djYxMTAsIDIgZm9yIHN0YjYxMDAgKi8KKwl1OCB0dW4yX2FkYzsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDkwMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFYwOTAwX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwOTAwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBkZW1vZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwOTAwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBkZW1vZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTliY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKQEAgLTAsMCArMSwxOTQ5IEBACisvKgorICogc3R2MDkwMF9jb3JlLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgInN0djA5MDAuaCIKKyNpbmNsdWRlICJzdHYwOTAwX3JlZy5oIgorI2luY2x1ZGUgInN0djA5MDBfcHJpdi5oIgorI2luY2x1ZGUgInN0djA5MDBfaW5pdC5oIgorCitzdGF0aWMgaW50IHN0dmRlYnVnID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc3R2ZGVidWcsIGludCwgMDY0NCk7CisKKy8qIGludGVybmFsIHBhcmFtcyBub2RlICovCitzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBzdHYwOTAwX2lub2RlCQkqbmV4dF9pbm9kZTsKK307CisKKy8qIGZpcnN0IGludGVybmFsIHBhcmFtcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2lub2RlICpzdHYwOTAwX2ZpcnN0X2lub2RlOworCisvKiBmaW5kIGNoaXAgYnkgaTJjIGFkYXB0ZXIgYW5kIGkyYyBhZGRyZXNzICovCitzdGF0aWMgc3RydWN0IHN0djA5MDBfaW5vZGUgKmZpbmRfaW5vZGUoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJCQl1OCBpMmNfYWRkcikKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqdGVtcF9jaGlwID0gc3R2MDkwMF9maXJzdF9pbm9kZTsKKworCWlmICh0ZW1wX2NoaXAgIT0gTlVMTCkgeworCQkvKgorCQkgU2VhcmNoIG9mIHRoZSBsYXN0IHN0djA5MDAgY2hpcCBvcgorCQkgZmluZCBpdCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KKwkJd2hpbGUgKCh0ZW1wX2NoaXAgIT0gTlVMTCkgJiYKKwkJCSgodGVtcF9jaGlwLT5pbnRlcm5hbC0+aTJjX2FkYXAgIT0gaTJjX2FkYXApIHx8CisJCQkodGVtcF9jaGlwLT5pbnRlcm5hbC0+aTJjX2FkZHIgIT0gaTJjX2FkZHIpKSkKKworCQkJdGVtcF9jaGlwID0gdGVtcF9jaGlwLT5uZXh0X2lub2RlOworCisJfQorCisJcmV0dXJuIHRlbXBfY2hpcDsKK30KKworLyogZGVhbGxvY2F0aW5nIGNoaXAgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKnByZXZfbm9kZSA9IHN0djA5MDBfZmlyc3RfaW5vZGU7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKmRlbF9ub2RlID0gZmluZF9pbm9kZShpbnRlcm5hbC0+aTJjX2FkYXAsCisJCQkJCQlpbnRlcm5hbC0+aTJjX2FkZHIpOworCisJaWYgKGRlbF9ub2RlICE9IE5VTEwpIHsKKwkJaWYgKGRlbF9ub2RlID09IHN0djA5MDBfZmlyc3RfaW5vZGUpIHsKKwkJCXN0djA5MDBfZmlyc3RfaW5vZGUgPSBkZWxfbm9kZS0+bmV4dF9pbm9kZTsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChwcmV2X25vZGUtPm5leHRfaW5vZGUgIT0gZGVsX25vZGUpCisJCQkJcHJldl9ub2RlID0gcHJldl9ub2RlLT5uZXh0X2lub2RlOworCisJCQlpZiAoZGVsX25vZGUtPm5leHRfaW5vZGUgPT0gTlVMTCkKKwkJCQlwcmV2X25vZGUtPm5leHRfaW5vZGUgPSBOVUxMOworCQkJZWxzZQorCQkJCXByZXZfbm9kZS0+bmV4dF9pbm9kZSA9CisJCQkJCXByZXZfbm9kZS0+bmV4dF9pbm9kZS0+bmV4dF9pbm9kZTsKKwkJfQorCisJCWtmcmVlKGRlbF9ub2RlKTsKKwl9Cit9CisKKy8qIGFsbG9jYXRpbmcgbmV3IGNoaXAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqYXBwZW5kX2ludGVybmFsKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqbmV3X25vZGUgPSBzdHYwOTAwX2ZpcnN0X2lub2RlOworCisJaWYgKG5ld19ub2RlID09IE5VTEwpIHsKKwkJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSksIEdGUF9LRVJORUwpOworCQlzdHYwOTAwX2ZpcnN0X2lub2RlID0gbmV3X25vZGU7CisJfSBlbHNlIHsKKwkJd2hpbGUgKG5ld19ub2RlLT5uZXh0X2lub2RlICE9IE5VTEwpCisJCQluZXdfbm9kZSA9IG5ld19ub2RlLT5uZXh0X2lub2RlOworCisJCW5ld19ub2RlLT5uZXh0X2lub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW5vZGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld19ub2RlLT5uZXh0X2lub2RlICE9IE5VTEwpCisJCQluZXdfbm9kZSA9IG5ld19ub2RlLT5uZXh0X2lub2RlOworCQllbHNlCisJCQluZXdfbm9kZSA9IE5VTEw7CisJfQorCisJaWYgKG5ld19ub2RlICE9IE5VTEwpIHsKKwkJbmV3X25vZGUtPmludGVybmFsID0gaW50ZXJuYWw7CisJCW5ld19ub2RlLT5uZXh0X2lub2RlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gbmV3X25vZGU7Cit9CisKK3MzMiBnZTJjb21wKHMzMiBhLCBzMzIgd2lkdGgpCit7CisJaWYgKHdpZHRoID09IDMyKQorCQlyZXR1cm4gYTsKKwllbHNlCisJCXJldHVybiAoYSA+PSAoMSA8PCAod2lkdGggLSAxKSkpID8gKGEgLSAoMSA8PCB3aWR0aCkpIDogYTsKK30KKwordm9pZCBzdHYwOTAwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUxNiByZWdfYWRkciwKKwkJCQkJCQkJdTggcmVnX2RhdGEpCit7CisJdTggZGF0YVszXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIGkyY21zZyA9IHsKKwkJLmFkZHIgID0gaV9wYXJhbXMtPmkyY19hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuICAgPSAzLAorCQkuYnVmICAgPSBkYXRhLAorCX07CisKKwlkYXRhWzBdID0gTVNCKHJlZ19hZGRyKTsKKwlkYXRhWzFdID0gTFNCKHJlZ19hZGRyKTsKKwlkYXRhWzJdID0gcmVnX2RhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaV9wYXJhbXMtPmkyY19hZGFwLCAmaTJjbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOworfQorCit1OCBzdHYwOTAwX3JlYWRfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTE2IHJlZ19hZGRyKQoreworCXU4IGRhdGFbMl07CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBpMmNtc2cgPSB7CisJCS5hZGRyICA9IGlfcGFyYW1zLT5pMmNfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiAgID0gMiwKKwkJLmJ1ZiAgID0gZGF0YSwKKwl9OworCisJZGF0YVswXSA9IE1TQihyZWdfYWRkcik7CisJZGF0YVsxXSA9IExTQihyZWdfYWRkcik7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaV9wYXJhbXMtPmkyY19hZGFwLCAmaTJjbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJaTJjbXNnLmZsYWdzID0gSTJDX01fUkQ7CisJaTJjbXNnLmxlbiA9IDE7CisJcmV0ID0gaTJjX3RyYW5zZmVyKGlfcGFyYW1zLT5pMmNfYWRhcCwgJmkyY21zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiBkYXRhWzBdOworfQorCit2b2lkIGV4dHJhY3RfbWFza19wb3ModTMyIGxhYmVsLCB1OCAqbWFzaywgdTggKnBvcykKK3sKKwl1OCBwb3NpdGlvbiA9IDAsIGkgPSAwOworCisJKCptYXNrKSA9IGxhYmVsICYgMHhmZjsKKworCXdoaWxlICgocG9zaXRpb24gPT0gMCkgJiYgKGkgPCA4KSkgeworCQlwb3NpdGlvbiA9ICgoKm1hc2spID4+IGkpICYgMHgwMTsKKwkJaSsrOworCX0KKworCSgqcG9zKSA9IChpIC0gMSk7Cit9CisKK3ZvaWQgc3R2MDkwMF93cml0ZV9iaXRzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIGxhYmVsLCB1OCB2YWwpCit7CisJdTggcmVnLCBtYXNrLCBwb3M7CisKKwlyZWcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCAobGFiZWwgPj4gMTYpICYgMHhmZmZmKTsKKwlleHRyYWN0X21hc2tfcG9zKGxhYmVsLCAmbWFzaywgJnBvcyk7CisKKwl2YWwgPSBtYXNrICYgKHZhbCA8PCBwb3MpOworCisJcmVnID0gKHJlZyAmICh+bWFzaykpIHwgdmFsOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCAobGFiZWwgPj4gMTYpICYgMHhmZmZmLCByZWcpOworCit9CisKK3U4IHN0djA5MDBfZ2V0X2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbGFiZWwpCit7CisJdTggdmFsID0gMHhmZjsKKwl1OCBtYXNrLCBwb3M7CisKKwlleHRyYWN0X21hc2tfcG9zKGxhYmVsLCAmbWFzaywgJnBvcyk7CisKKwl2YWwgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBsYWJlbCA+PiAxNik7CisJdmFsID0gKHZhbCAmIG1hc2spID4+IHBvczsKKworCXJldHVybiB2YWw7Cit9CisKK2VudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRpYWxpemUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zKQoreworCXMzMiBpOworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvcjsKKworCWlmIChpX3BhcmFtcyAhPSBOVUxMKSB7CisJCWlfcGFyYW1zLT5jaGlwX2lkID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfTUlEKTsKKwkJaWYgKGlfcGFyYW1zLT5lcnJzID09IFNUVjA5MDBfTk9fRVJST1IpIHsKKwkJCS8qU3RhcnR1cCBzZXF1ZW5jZSovCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NWMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ROUkNGRywgMHg2Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE5SQ0ZHLCAweDZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9JMkNSUFQsIDB4MjQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0kyQ1JQVCwgMHgyNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfTkNPQVJTRSwgMHgxMyk7CisJCQltc2xlZXAoMyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfSTJDQ0ZHLCAweDA4KTsKKworCQkJc3dpdGNoIChpX3BhcmFtcy0+Y2xrbW9kZSkgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMAorCQkJCQkJfCBpX3BhcmFtcy0+Y2xrbW9kZSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIHByZXNlcnZlIFNFTE9TQ0kgYml0ICovCisJCQkJaSA9IDB4MDIgJiBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9TWU5UQ1RSTCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1NZTlRDVFJMLCAweDIwIHwgaSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW1zbGVlcCgzKTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxODI7IGkrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgU1RWMDkwMF9Jbml0VmFsW2ldWzBdLCBTVFYwOTAwX0luaXRWYWxbaV1bMV0pOworCisJCQlpZiAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfTUlEKSA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTCwgMHgwYyk7CisJCQkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsW2ldWzBdLCBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsW2ldWzFdKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0ZTUFlDRkcsIDB4NmMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0ZTUFlDRkcsIDB4NmMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTVFJFUzAsIDB4ODApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTVFJFUzAsIDB4MDApOworCQl9CisJCWVycm9yID0gaV9wYXJhbXMtPmVycnM7CisJfSBlbHNlCisJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKworCXJldHVybiBlcnJvcjsKKworfQorCit1MzIgc3R2MDkwMF9nZXRfbWNsa19mcmVxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIGV4dF9jbGspCit7CisJdTMyIG1jbGsgPSA5MDAwMDAwMCwgZGl2ID0gMCwgYWRfZGl2ID0gMDsKKworCWRpdiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX01fRElWKTsKKwlhZF9kaXYgPSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NFTFgxUkFUSU8pID09IDEpID8gNCA6IDYpOworCisJbWNsayA9IChkaXYgKyAxKSAqIGV4dF9jbGsgLyBhZF9kaXY7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhbGN1bGF0ZWQgTWNsayA9ICVkXG4iLCBfX2Z1bmNfXywgbWNsayk7CisKKwlyZXR1cm4gbWNsazsKK30KKworZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc2V0X21jbGsoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbWNsaykKK3sKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCXUzMiBtX2RpdiwgY2xrX3NlbDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogTWNsayBzZXQgdG8gJWQsIFF1YXJ0eiA9ICVkXG4iLCBfX2Z1bmNfXywgbWNsaywKKwkJCWlfcGFyYW1zLT5xdWFydHopOworCisJaWYgKGlfcGFyYW1zID09IE5VTEwpCisJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKwllbHNlIHsKKwkJaWYgKGlfcGFyYW1zLT5lcnJzKQorCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJZWxzZSB7CisJCQljbGtfc2VsID0gKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TRUxYMVJBVElPKSA9PSAxKSA/IDQgOiA2KTsKKwkJCW1fZGl2ID0gKChjbGtfc2VsICogbWNsaykgLyBpX3BhcmFtcy0+cXVhcnR6KSAtIDE7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX01fRElWLCBtX2Rpdik7CisJCQlpX3BhcmFtcy0+bWNsayA9IHN0djA5MDBfZ2V0X21jbGtfZnJlcShpX3BhcmFtcywKKwkJCQkJCQlpX3BhcmFtcy0+cXVhcnR6KTsKKworCQkJLypTZXQgdGhlIERpc2VxQyBmcmVxdWVuY3kgdG8gMjJLSHogKi8KKwkJCS8qCisJCQkJRm9ybXVsYToKKwkJCQlEaXNlcUNfVFhfRnJlcT0gTWFzdGVyQ2xvY2svKDMyKkYyMlRYX1JlZykKKwkJCQlEaXNlcUNfUlhfRnJlcT0gTWFzdGVyQ2xvY2svKDMyKkYyMlJYX1JlZykKKwkJCSovCisJCQltX2RpdiA9IGlfcGFyYW1zLT5tY2xrIC8gNzA0MDAwOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0YyMlRYLCBtX2Rpdik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRjIyUlgsIG1fZGl2KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0YyMlRYLCBtX2Rpdik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRjIyUlgsIG1fZGl2KTsKKworCQkJaWYgKChpX3BhcmFtcy0+ZXJycykpCisJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJfQorCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIGludCBjbnRyLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiBsc2IsIG1zYiwgaHNiLCBlcnJfdmFsOworCXMzMiBlcnIxZmllbGRfaHNiLCBlcnIxZmllbGRfbXNiLCBlcnIxZmllbGRfbHNiOworCXMzMiBlcnIyZmllbGRfaHNiLCBlcnIyZmllbGRfbXNiLCBlcnIyZmllbGRfbHNiOworCisJZG1kX3JlZyhlcnIxZmllbGRfaHNiLCBGMDkwMF9QMV9FUlJfQ05UMTIsIEYwOTAwX1AyX0VSUl9DTlQxMik7CisJZG1kX3JlZyhlcnIxZmllbGRfbXNiLCBGMDkwMF9QMV9FUlJfQ05UMTEsIEYwOTAwX1AyX0VSUl9DTlQxMSk7CisJZG1kX3JlZyhlcnIxZmllbGRfbHNiLCBGMDkwMF9QMV9FUlJfQ05UMTAsIEYwOTAwX1AyX0VSUl9DTlQxMCk7CisKKwlkbWRfcmVnKGVycjJmaWVsZF9oc2IsIEYwOTAwX1AxX0VSUl9DTlQyMiwgRjA5MDBfUDJfRVJSX0NOVDIyKTsKKwlkbWRfcmVnKGVycjJmaWVsZF9tc2IsIEYwOTAwX1AxX0VSUl9DTlQyMSwgRjA5MDBfUDJfRVJSX0NOVDIxKTsKKwlkbWRfcmVnKGVycjJmaWVsZF9sc2IsIEYwOTAwX1AxX0VSUl9DTlQyMCwgRjA5MDBfUDJfRVJSX0NOVDIwKTsKKworCXN3aXRjaCAoY250cikgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQloc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIxZmllbGRfaHNiKTsKKwkJbXNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMWZpZWxkX21zYik7CisJCWxzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjFmaWVsZF9sc2IpOworCQlicmVhazsKKwljYXNlIDE6CisJCWhzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjJmaWVsZF9oc2IpOworCQltc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIyZmllbGRfbXNiKTsKKwkJbHNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMmZpZWxkX2xzYik7CisJCWJyZWFrOworCX0KKworCWVycl92YWwgPSAoaHNiIDw8IDE2KSArIChtc2IgPDwgOCkgKyAobHNiKTsKKworCXJldHVybiBlcnJfdmFsOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXUzMiBmaTJjOworCisJZG1kX3JlZyhmaTJjLCBGMDkwMF9QMV9JMkNUX09OLCBGMDkwMF9QMl9JMkNUX09OKTsKKwlpZiAoZW5hYmxlKQorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIGZpMmMsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3RzX3BhcmFsbGVsX3NlcmlhbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlIHBhdGgxX3RzLAorCQkJCQllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZSBwYXRoMl90cykKK3sKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJc3dpdGNoIChwYXRoMV90cykgeworCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwsCisJCQkJCQkJMHgwMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTCwKKwkJCQkJCQkweDA2KTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9UU0ZJRk9fTUFOU1BFRUQsIDMpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1RTRklGT19NQU5TUEVFRCwgMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMV9UU1NQRUVELCAweDE0KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AyX1RTU1BFRUQsIDB4MjgpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfVFNHRU5FUkFMLCAweDBDKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1RTR0VORVJBTCwgMHgwQSk7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiAweDBhXG4iLCBfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAocGF0aDFfdHMpIHsKKwkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQkJZGVmYXVsdDoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTDFYLAorCQkJCQkJCTB4MTYpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1RTRklGT19NQU5TUEVFRCwgMyk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfVFNGSUZPX01BTlNQRUVELCAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVFNTUEVFRCwKKwkJCQkJCQkweDE0KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVFNTUEVFRCwKKwkJCQkJCQkweDI4KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwxWCwKKwkJCQkJCQkweDE0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxMik7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiAweDEyXG4iLCBfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChwYXRoMV90cykgeworCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChwYXRoMl90cykgeworCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SU1RfSFdBUkUsIDEpOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlNUX0hXQVJFLCAwKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JTVF9IV0FSRSwgMSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDApOworfQorCit2b2lkIHN0djA5MDBfc2V0X3R1bmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5LAorCQkJCQkJCXUzMiBiYW5kd2lkdGgpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCisJaWYgKHR1bmVyX29wcy0+c2V0X2ZyZXF1ZW5jeSkgeworCQlpZiAoKHR1bmVyX29wcy0+c2V0X2ZyZXF1ZW5jeShmZSwgZnJlcXVlbmN5KSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCBmcmVxdWVuY3kpOworCisJfQorCisJaWYgKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aCkgeworCQlpZiAoKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aChmZSwgYmFuZHdpZHRoKSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCBiYW5kd2lkdGgpOworCisJfQorfQorCit2b2lkIHN0djA5MDBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqdHVuZXJfb3BzID0gTlVMTDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisKKwlpZiAoJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzKQorCQl0dW5lcl9vcHMgPSAmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHM7CisKKwlpZiAodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKSB7CisJCWlmICgodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKGZlLCBiYW5kd2lkdGgpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIGJhbmR3aWR0aCk7CisKKwl9Cit9CisKK3N0YXRpYyBzMzIgc3R2MDkwMF9nZXRfcmZfbGV2ZWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlICpsb29rdXAsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgYWdjX2dhaW4gPSAwLAorCQlpbWluLAorCQlpbWF4LAorCQlpLAorCQlyZl9sdmwgPSAwOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoKGxvb2t1cCAhPSBOVUxMKSAmJiBsb29rdXAtPnNpemUpIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWFnY19nYWluID0gTUFLRVdPUkQoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUdDSVFfVkFMVUUxKSwKKwkJCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMCkpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJYWdjX2dhaW4gPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BR0NJUV9WQUxVRTEpLAorCQkJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUdDSVFfVkFMVUUwKSk7CisJCQlicmVhazsKKwkJfQorCisJCWltaW4gPSAwOworCQlpbWF4ID0gbG9va3VwLT5zaXplIC0gMTsKKwkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsIGFnY19nYWluLCBsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbCkpIHsKKwkJCXdoaWxlICgoaW1heCAtIGltaW4pID4gMSkgeworCQkJCWkgPSAoaW1heCArIGltaW4pID4+IDE7CisKKwkJCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwgYWdjX2dhaW4sIGxvb2t1cC0+dGFibGVbaV0ucmVndmFsKSkKKwkJCQkJaW1heCA9IGk7CisJCQkJZWxzZQorCQkJCQlpbWluID0gaTsKKwkJCX0KKworCQkJcmZfbHZsID0gKCgoczMyKWFnY19nYWluIC0gbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpCisJCQkJCSogKGxvb2t1cC0+dGFibGVbaW1heF0ucmVhbHZhbCAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbCkKKwkJCQkJLyAobG9va3VwLT50YWJsZVtpbWF4XS5yZWd2YWwgLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkpCisJCQkJCSsgbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsOworCQl9IGVsc2UgaWYgKGFnY19nYWluID4gbG9va3VwLT50YWJsZVswXS5yZWd2YWwpCisJCQlyZl9sdmwgPSA1OworCQllbHNlIGlmIChhZ2NfZ2FpbiA8IGxvb2t1cC0+dGFibGVbbG9va3VwLT5zaXplLTFdLnJlZ3ZhbCkKKwkJCXJmX2x2bCA9IC0xMDA7CisKKwl9CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJGTGV2ZWwgPSAlZFxuIiwgX19mdW5jX18sIHJmX2x2bCk7CisKKwlyZXR1cm4gcmZfbHZsOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludGVybmFsID0gc3RhdGUtPmludGVybmFsOworCXMzMiByZmxldmVsID0gc3R2MDkwMF9nZXRfcmZfbGV2ZWwoaW50ZXJuYWwsICZzdHYwOTAwX3JmLAorCQkJCQkJCQlzdGF0ZS0+ZGVtb2QpOworCisJKnN0cmVuZ3RoID0gKHJmbGV2ZWwgKyAxMDApICogKDE2MzgzIC8gMTA1KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzMzIgc3R2MDkwMF9jYXJyX2dldF9xdWFsaXR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIGNfbiA9IC0xMDAsCisJCXJlZ3ZhbCwgaW1pbiwgaW1heCwKKwkJaSwKKwkJbG9ja19mbGFnX2ZpZWxkLAorCQlub2lzZV9maWVsZDEsCisJCW5vaXNlX2ZpZWxkMDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhsb2NrX2ZsYWdfZmllbGQsIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGLAorCQkJCQlGMDkwMF9QMl9MT0NLX0RFRklOSVRJRik7CisJaWYgKHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkZW1vZCkgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMSwgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQxLAorCQkJCQlGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDEpOworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMCwgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQwLAorCQkJCQlGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDApOworCX0gZWxzZSB7CisJCWRtZF9yZWcobm9pc2VfZmllbGQxLCBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQxLAorCQkJCQlGMDkwMF9QMl9OT1NEQVRBVF9OT1JNRUQxKTsKKwkJZG1kX3JlZyhub2lzZV9maWVsZDAsIEYwOTAwX1AxX05PU0RBVEFUX05PUk1FRDAsCisJCQkJCUYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDApOworCX0KKworCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZsYWdfZmllbGQpKSB7CisJCWlmICgobG9va3VwICE9IE5VTEwpICYmIGxvb2t1cC0+c2l6ZSkgeworCQkJcmVndmFsID0gMDsKKwkJCW1zbGVlcCg1KTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQkJcmVndmFsICs9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsCisJCQkJCQkJCW5vaXNlX2ZpZWxkMSksCisJCQkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLAorCQkJCQkJCQlub2lzZV9maWVsZDApKTsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisKKwkJCXJlZ3ZhbCAvPSAxNjsKKwkJCWltaW4gPSAwOworCQkJaW1heCA9IGxvb2t1cC0+c2l6ZSAtIDE7CisJCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwKKwkJCQkJcmVndmFsLAorCQkJCQlsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbCkpIHsKKwkJCQl3aGlsZSAoKGltYXggLSBpbWluKSA+IDEpIHsKKwkJCQkJaSA9IChpbWF4ICsgaW1pbikgPj4gMTsKKwkJCQkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsCisJCQkJCQkgICAgcmVndmFsLAorCQkJCQkJICAgIGxvb2t1cC0+dGFibGVbaV0ucmVndmFsKSkKKwkJCQkJCWltYXggPSBpOworCQkJCQllbHNlCisJCQkJCQlpbWluID0gaTsKKwkJCQl9CisKKwkJCQljX24gPSAoKHJlZ3ZhbCAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKQorCQkJCQkJKiAobG9va3VwLT50YWJsZVtpbWF4XS5yZWFsdmFsCisJCQkJCQktIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbCkKKwkJCQkJCS8gKGxvb2t1cC0+dGFibGVbaW1heF0ucmVndmFsCisJCQkJCQktIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKSkKKwkJCQkJCSsgbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsOworCQkJfSBlbHNlIGlmIChyZWd2YWwgPCBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkKKwkJCQljX24gPSAxMDAwOworCQl9CisJfQorCisJcmV0dXJuIGNfbjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwkqc25yID0gc3R2MDkwMF9jYXJyX2dldF9xdWFsaXR5KGZlLAorCQkJKGNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlICopJnN0djA5MDBfczJfY24pOworCSpzbnIgKz0gMzA7CisJKnNuciAqPSAoMTYzODMgLyAxMDMwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X2JlcihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgYmVyID0gMTAwMDAwMDAsIGk7CisJczMyIGRtZF9zdGF0ZV9yZWc7CisJczMyIGRlbW9kX3N0YXRlOworCXMzMiB2c3RhdHVzX3JlZzsKKwlzMzIgcHJ2aXRfZmllbGQ7CisJczMyIHBkZWxfc3RhdHVzX3JlZzsKKwlzMzIgcGRlbF9sb2NrX2ZpZWxkOworCisJZG1kX3JlZyhkbWRfc3RhdGVfcmVnLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcodnN0YXR1c19yZWcsIFIwOTAwX1AxX1ZTVEFUVVNWSVQsIFIwOTAwX1AyX1ZTVEFUVVNWSVQpOworCWRtZF9yZWcocHJ2aXRfZmllbGQsIEYwOTAwX1AxX1BSRlZJVCwgRjA5MDBfUDJfUFJGVklUKTsKKwlkbWRfcmVnKHBkZWxfc3RhdHVzX3JlZywgUjA5MDBfUDFfUERFTFNUQVRVUzEsIFIwOTAwX1AyX1BERUxTVEFUVVMxKTsKKwlkbWRfcmVnKHBkZWxfbG9ja19maWVsZCwgRjA5MDBfUDFfUEtUREVMSU5fTE9DSywKKwkJCQlGMDkwMF9QMl9QS1RERUxJTl9MT0NLKTsKKworCWRlbW9kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZG1kX3N0YXRlX3JlZyk7CisKKwlzd2l0Y2ggKGRlbW9kX3N0YXRlKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCWRlZmF1bHQ6CisJCWJlciA9IDEwMDAwMDAwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJYmVyID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJbXNsZWVwKDUpOworCQkJYmVyICs9IHN0djA5MDBfZ2V0X2Vycl9jb3VudChpX3BhcmFtcywgMCwgZGVtb2QpOworCQl9CisKKwkJYmVyIC89IDU7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBwcnZpdF9maWVsZCkpIHsKKwkJCWJlciAqPSA5NzY2OworCQkJYmVyID0gYmVyID4+IDEzOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQliZXIgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQltc2xlZXAoNSk7CisJCQliZXIgKz0gc3R2MDkwMF9nZXRfZXJyX2NvdW50KGlfcGFyYW1zLCAwLCBkZW1vZCk7CisJCX0KKworCQliZXIgLz0gNTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHBkZWxfbG9ja19maWVsZCkpIHsKKwkJCWJlciAqPSA5NzY2OworCQkJYmVyID0gYmVyID4+IDEzOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGJlcjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwgPSBzdGF0ZS0+aW50ZXJuYWw7CisKKwkqYmVyID0gc3R2MDkwMF9nZXRfYmVyKGludGVybmFsLCBzdGF0ZS0+ZGVtb2QpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsIHMzMiB0aW1lX291dCkKK3sKKwlzMzIgdGltZXIgPSAwLAorCQlsb2NrID0gMCwKKwkJaGVhZGVyX2ZpZWxkLAorCQlsb2NrX2ZpZWxkOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZQlkbWRfc3RhdGU7CisKKwlkbWRfcmVnKGhlYWRlcl9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKGxvY2tfZmllbGQsIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGLCBGMDkwMF9QMl9MT0NLX0RFRklOSVRJRik7CisJd2hpbGUgKCh0aW1lciA8IHRpbWVfb3V0KSAmJiAobG9jayA9PSAwKSkgeworCQlkbWRfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBoZWFkZXJfZmllbGQpOworCQlkcHJpbnRrKCJEZW1vZCBTdGF0ZSA9ICVkXG4iLCBkbWRfc3RhdGUpOworCQlzd2l0Y2ggKGRtZF9zdGF0ZSkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIOgorCQljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCQlkZWZhdWx0OgorCQkJbG9jayA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZpZWxkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxvY2sgPT0gMCkKKwkJCW1zbGVlcCgxMCk7CisKKwkJdGltZXIgKz0gMTA7CisJfQorCisJaWYgKGxvY2spCisJCWRwcmludGsoIkRFTU9EIExPQ0sgT0tcbiIpOworCWVsc2UKKwkJZHByaW50aygiREVNT0QgTE9DSyBGQUlMXG4iKTsKKworCXJldHVybiBsb2NrOworfQorCit2b2lkIHN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiByZWdmbGlzdCwKKwlpOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHJlZ2ZsaXN0LCBSMDkwMF9QMV9NT0RDT0RMU1QwLCBSMDkwMF9QMl9NT0RDT0RMU1QwKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnZmxpc3QgKyBpLCAweGZmKTsKK30KKwordm9pZCBzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIG1hdHlwZSwKKwltb2RfY29kZSwKKwlmbW9kLAorCXJlZ19pbmRleCwKKwlmaWVsZF9pbmRleDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJbXNsZWVwKDUpOworCisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQltb2RfY29kZSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfUExITU9EQ09EKTsKKwkJCW1hdHlwZSA9IG1vZF9jb2RlICYgMHgzOworCQkJbW9kX2NvZGUgPSAobW9kX2NvZGUgJiAweDdmKSA+PiAyOworCisJCQlyZWdfaW5kZXggPSBSMDkwMF9QMV9NT0RDT0RMU1RGIC0gbW9kX2NvZGUgLyAyOworCQkJZmllbGRfaW5kZXggPSBtb2RfY29kZSAlIDI7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQltb2RfY29kZSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfUExITU9EQ09EKTsKKwkJCW1hdHlwZSA9IG1vZF9jb2RlICYgMHgzOworCQkJbW9kX2NvZGUgPSAobW9kX2NvZGUgJiAweDdmKSA+PiAyOworCisJCQlyZWdfaW5kZXggPSBSMDkwMF9QMl9NT0RDT0RMU1RGIC0gbW9kX2NvZGUgLyAyOworCQkJZmllbGRfaW5kZXggPSBtb2RfY29kZSAlIDI7CisJCQlicmVhazsKKwkJfQorCisKKwkJc3dpdGNoIChtYXR5cGUpIHsKKwkJY2FzZSAwOgorCQlkZWZhdWx0OgorCQkJZm1vZCA9IDE0OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZtb2QgPSAxMzsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlmbW9kID0gMTE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZm1vZCA9IDc7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoSU5SQU5HRShTVFYwOTAwX1FQU0tfMTIsIG1vZF9jb2RlLCBTVFYwOTAwXzhQU0tfOTEwKSkKKwkJCQkJCQkmJiAobWF0eXBlIDw9IDEpKSB7CisJCQlpZiAoZmllbGRfaW5kZXggPT0gMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnX2luZGV4LAorCQkJCQkJCTB4ZjAgfCBmbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnX2luZGV4LAorCQkJCQkJCShmbW9kIDw8IDQpIHwgMHhmKTsKKwkJfQorCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgxMikgeworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA3OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNUMCArIHJlZ19pbmRleCwgMHhmZik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1RFLCAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1RGLCAweGNmKTsKKwkJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgODsgcmVnX2luZGV4KyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDcgKyByZWdfaW5kZXgsIDB4Y2MpOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDc7IHJlZ19pbmRleCsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1QwICsgcmVnX2luZGV4LCAweGZmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEUsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEYsIDB4Y2YpOworCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA4OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUNyArIHJlZ19pbmRleCwgMHhjYyk7CisKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK3ZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIHJlZ19pbmRleDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1QwLCAweGZmKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDEsIDB4ZjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNURiwgMHgwZik7CisJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgMTM7IHJlZ19pbmRleCsrKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCVIwOTAwX1AxX01PRENPRExTVDIgKyByZWdfaW5kZXgsIDApOworCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUMCwgMHhmZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1QxLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEYsIDB4MGYpOworCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDEzOyByZWdfaW5kZXgrKykKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQlSMDkwMF9QMl9NT0RDT0RMU1QyICsgcmVnX2luZGV4LCAwKTsKKworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGR2YmZlX2FsZ28gc3R2MDkwMF9mcm9udGVuZF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiBEVkJGRV9BTEdPX0NVU1RPTTsKK30KKworc3RhdGljIGludCBzdGIwOTAwX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJZHByaW50ayhLRVJOX0lORk8gIiVzKC4uKVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiMDkwMF9nZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQoreworCWRwcmludGsoS0VSTl9JTkZPICIlcyguLilcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHN0djA5MDBfc3RhcnRfc2VhcmNoKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MWYpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEVYUCwgMHhhYSk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4NTUpOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSQ0ZHLCAweDQ0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJVUDEsIDB4MGYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUlVQMCwgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSTE9XMSwgMHhmMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSTE9XMCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NjgpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkNGRywgMHhjNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NDQpOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCAwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GRkVDRkcsIDB4NDEpOworCisJCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1MxUzJfU0VRVUVOVElBTCwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVEMsIDB4ODgpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDM5KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDQwKTsKKwkJCX0KKworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg0Yyk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHgyMCk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDRiKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDIwKTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4ZWYpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVkKTsKKwkJfQorCisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvKSB7CisJCWNhc2UgU1RWMDkwMF9XQVJNX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQ09MRF9TVEFSVDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MWYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUsIDB4MWYpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxFWFAsIDB4YWEpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDU1KTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkNGRywgMHg0NCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSVVAxLCAweDBmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJVUDAsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUkxPVzEsIDB4ZjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUkxPVzAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDY4KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJDRkcsIDB4YzQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDQ0KTsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgMCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUVVBTENGRywgMHg0MSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRkZFQ0ZHLCAweDQxKTsKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EU1MpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WSVRTQ0FMRSwgMHg4Mik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZBVlNSVklULCAweDApOworCQkJfQorCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweGUwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUzFTMl9TRVFVRU5USUFMLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQywgMHg4OCk7CisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAyMDAwMDAwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4MzkpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4NDApOworCQkJfQorCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDRjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDIwKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NGIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4MjApOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHhlZik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCQl9CisKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28pIHsKKwkJY2FzZSBTVFYwOTAwX1dBUk1fU1RBUlQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9DT0xEX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwl9Cit9CisKK3U4IHN0djA5MDBfZ2V0X29wdGltX2NhcnJfbG9vcChzMzIgc3JhdGUsIGVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIG1vZGNvZGUsCisJCQkJCQkJczMyIHBpbG90LCB1OCBjaGlwX2lkKQoreworCXU4IGFjbGNfdmFsdWUgPSAweDI5OworCXMzMglpOworCWNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltICpjYXJfbG9vcF9zMjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGNoaXBfaWQgPD0gMHgxMikKKwkJY2FyX2xvb3BfczIgPSBGRV9TVFYwOTAwX1MyQ2FyTG9vcDsKKwllbHNlIGlmIChjaGlwX2lkID09IDB4MjApCisJCWNhcl9sb29wX3MyID0gRkVfU1RWMDkwMF9TMkNhckxvb3BDdXQyMDsKKwllbHNlCisJCWNhcl9sb29wX3MyID0gRkVfU1RWMDkwMF9TMkNhckxvb3A7CisKKwlpZiAobW9kY29kZSA8IFNUVjA5MDBfUVBTS18xMikgeworCQlpID0gMDsKKwkJd2hpbGUgKChpIDwgMykgJiYgKG1vZGNvZGUgIT0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLm1vZGNvZGUpKQorCQkJaSsrOworCisJCWlmIChpID49IDMpCisJCQlpID0gMjsKKwl9IGVsc2UgeworCQlpID0gMDsKKwkJd2hpbGUgKChpIDwgMTQpICYmIChtb2Rjb2RlICE9IGNhcl9sb29wX3MyW2ldLm1vZGNvZGUpKQorCQkJaSsrOworCisJCWlmIChpID49IDE0KSB7CisJCQlpID0gMDsKKwkJCXdoaWxlICgoaSA8IDExKSAmJiAobW9kY29kZSAhPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5tb2Rjb2RlKSkKKwkJCQlpKys7CisKKwkJCWlmIChpID49IDExKQorCQkJCWkgPSAxMDsKKwkJfQorCX0KKworCWlmIChtb2Rjb2RlIDw9IFNUVjA5MDBfUVBTS18yNSkgeworCQlpZiAocGlsb3QpIHsKKwkJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8xMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCQl9IGVsc2UgeworCQkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzEwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKwkJfQorCisJfSBlbHNlIGlmIChtb2Rjb2RlIDw9IFNUVjA5MDBfOFBTS185MTApIHsKKwkJaWYgKHBpbG90KSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fNTsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMzA7CisJCX0gZWxzZSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yMDsKKwkJCWVsc2UKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8xMDsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQllbHNlCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCX0KKworCXJldHVybiBhY2xjX3ZhbHVlOworfQorCit1OCBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3AoczMyIHNyYXRlLCBlbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiBtb2R1bGF0aW9uLCB1OCBjaGlwX2lkKQoreworCXMzMiBtb2RfaW5kZXggPSAwOworCisJdTggYWNsY192YWx1ZSA9IDB4MGI7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAobW9kdWxhdGlvbikgeworCWNhc2UgU1RWMDkwMF9RUFNLOgorCWRlZmF1bHQ6CisJCW1vZF9pbmRleCA9IDA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF84UFNLOgorCQltb2RfaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMTZBUFNLOgorCQltb2RfaW5kZXggPSAyOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMzJBUFNLOgorCQltb2RfaW5kZXggPSAzOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNoaXBfaWQpIHsKKwljYXNlIDB4MjA6CisJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8yOworCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF81OworCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfMTA7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8yMDsKKwkJZWxzZQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8zMDsKKworCQlicmVhazsKKwljYXNlIDB4MTI6CisJZGVmYXVsdDoKKwkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzI7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzU7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl8xMDsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzIwOworCQllbHNlCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzMwOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBhY2xjX3ZhbHVlOworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc3RfZHZiczJfc2luZ2xlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUgTERQQ19Nb2RlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoTERQQ19Nb2RlKSB7CisJY2FzZSBTVFYwOTAwX0RVQUw6CisJZGVmYXVsdDoKKwkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX0RVQUwpCisJCQl8fCAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfRERFTU9EKSAhPSAxKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0dFTkNGRywgMHgxZCk7CisKKwkJCWlfcGFyYW1zLT5kZW1vZF9tb2RlID0gU1RWMDkwMF9EVUFMOworCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9GUkVTRkVDLCAwKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TSU5HTEU6CisJCWlmIChkZW1vZCA9PSBTVFYwOTAwX0RFTU9EXzIpCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfR0VOQ0ZHLCAweDA2KTsKKwkJZWxzZQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0dFTkNGRywgMHgwNCk7CisKKwkJaV9wYXJhbXMtPmRlbW9kX21vZGUgPSBTVFYwOTAwX1NJTkdMRTsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRfaW50ZXJuYWwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBzdHYwOTAwX2luaXRfcGFyYW1zICpwX2luaXQpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZGVtb2RFcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisJaW50IHNlbG9zY2k7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqdGVtcF9pbnQgPSBmaW5kX2lub2RlKHN0YXRlLT5pMmNfYWRhcCwKKwkJCQkJCXN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MpOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAodGVtcF9pbnQgIT0gTlVMTCkgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSB0ZW1wX2ludC0+aW50ZXJuYWw7CisJCShzdGF0ZS0+aW50ZXJuYWwtPmRtZHNfdXNlZCkrKzsKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBGaW5kIEludGVybmFsIFN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwpLCBHRlBfS0VSTkVMKTsKKwkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQgPSAxOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGFwID0gc3RhdGUtPmkyY19hZGFwOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwkJc3RhdGUtPmludGVybmFsLT5jbGttb2RlID0gc3RhdGUtPmNvbmZpZy0+Y2xrbW9kZTsKKwkJc3RhdGUtPmludGVybmFsLT5lcnJzID0gU1RWMDkwMF9OT19FUlJPUjsKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBDcmVhdGUgTmV3IEludGVybmFsIFN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoc3RhdGUtPmludGVybmFsICE9IE5VTEwpIHsKKwkJZGVtb2RFcnJvciA9IHN0djA5MDBfaW5pdGlhbGl6ZShzdGF0ZS0+aW50ZXJuYWwpOworCQlpZiAoZGVtb2RFcnJvciA9PSBTVFYwOTAwX05PX0VSUk9SKSB7CisJCQkJZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCQl9IGVsc2UgeworCQkJaWYgKGRlbW9kRXJyb3IgPT0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRSkKKwkJCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJfQorCisJCWlmIChzdGF0ZS0+aW50ZXJuYWwgIT0gTlVMTCkgeworCQkJaWYgKGVycm9yID09IFNUVjA5MDBfTk9fRVJST1IpIHsKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX21vZGUgPSBwX2luaXQtPmRlbW9kX21vZGU7CisKKwkJCQlzdHYwOTAwX3N0X2R2YnMyX3NpbmdsZShzdGF0ZS0+aW50ZXJuYWwsIHN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbW9kZSwgU1RWMDkwMF9ERU1PRF8xKTsKKworCQkJCXN0YXRlLT5pbnRlcm5hbC0+Y2hpcF9pZCA9IHN0djA5MDBfcmVhZF9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9NSUQpOworCQkJCXN0YXRlLT5pbnRlcm5hbC0+cm9sbG9mZiA9IHBfaW5pdC0+cm9sbG9mZjsKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPnF1YXJ0eiA9IHBfaW5pdC0+ZG1kX3JlZl9jbGs7CisKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsIHBfaW5pdC0+cm9sbG9mZik7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MLCBwX2luaXQtPnJvbGxvZmYpOworCisJCQkJc3R2MDkwMF9zZXRfdHNfcGFyYWxsZWxfc2VyaWFsKHN0YXRlLT5pbnRlcm5hbCwgcF9pbml0LT5wYXRoMV90c19jbG9jaywgcF9pbml0LT5wYXRoMl90c19jbG9jayk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDFfVFVOX01BRERSRVNTLCBwX2luaXQtPnR1bjFfbWFkZHJlc3MpOworCQkJCXN3aXRjaCAocF9pbml0LT50dW5lcjFfYWRjKSB7CisJCQkJY2FzZSAxOgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1RTVFROUjEsIDB4MjYpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMl9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMl9tYWRkcmVzcyk7CisJCQkJc3dpdGNoIChwX2luaXQtPnR1bmVyMl9hZGMpIHsKKwkJCQljYXNlIDE6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfVFNUVE5SMywgMHgyNik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AxX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMV9pcV9pbnZlcnNpb24pOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AyX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMl9pcV9pbnZlcnNpb24pOworCQkJCXN0djA5MDBfc2V0X21jbGsoc3RhdGUtPmludGVybmFsLCAxMzUwMDAwMDApOworCQkJCW1zbGVlcCgzKTsKKworCQkJCXN3aXRjaCAoc3RhdGUtPmludGVybmFsLT5jbGttb2RlKSB7CisJCQkJY2FzZSAwOgorCQkJCWNhc2UgMjoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMCB8IHN0YXRlLT5pbnRlcm5hbC0+Y2xrbW9kZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXNlbG9zY2kgPSAweDAyICYgc3R2MDkwMF9yZWFkX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1NZTlRDVFJMKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMCB8IHNlbG9zY2kpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbXNsZWVwKDMpOworCisJCQkJc3RhdGUtPmludGVybmFsLT5tY2xrID0gc3R2MDkwMF9nZXRfbWNsa19mcmVxKHN0YXRlLT5pbnRlcm5hbCwgc3RhdGUtPmludGVybmFsLT5xdWFydHopOworCQkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmVycnMpCisJCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCQl9CisJCX0gZWxzZSB7CisJCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zdGF0dXMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhdGUgZGVtb2Rfc3RhdGU7CisJczMyIG1vZGVfZmllbGQsIGRlbGluX2ZpZWxkLCBsb2NrX2ZpZWxkLCBmaWZvX2ZpZWxkLCBsb2NrZWR2aXRfZmllbGQ7CisJaW50IGxvY2tlZCA9IEZBTFNFOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcobG9ja19maWVsZCwgRjA5MDBfUDFfTE9DS19ERUZJTklUSUYsIEYwOTAwX1AyX0xPQ0tfREVGSU5JVElGKTsKKwlkbWRfcmVnKGRlbGluX2ZpZWxkLCBGMDkwMF9QMV9QS1RERUxJTl9MT0NLLCBGMDkwMF9QMl9QS1RERUxJTl9MT0NLKTsKKwlkbWRfcmVnKGZpZm9fZmllbGQsIEYwOTAwX1AxX1RTRklGT19MSU5FT0ssIEYwOTAwX1AyX1RTRklGT19MSU5FT0spOworCWRtZF9yZWcobG9ja2Vkdml0X2ZpZWxkLCBGMDkwMF9QMV9MT0NLRURWSVQsIEYwOTAwX1AyX0xPQ0tFRFZJVCk7CisKKwlkZW1vZF9zdGF0ZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQpOworCXN3aXRjaCAoZGVtb2Rfc3RhdGUpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIOgorCWNhc2UgU1RWMDkwMF9QTEhfREVURUNURUQ6CisJZGVmYXVsdDoKKwkJbG9ja2VkID0gRkFMU0U7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJbG9ja2VkID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja19maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBkZWxpbl9maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBmaWZvX2ZpZWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCWxvY2tlZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfZmllbGQpICYmCisJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja2Vkdml0X2ZpZWxkKSAmJgorCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGZpZm9fZmllbGQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbG9ja2VkOworfQorCitzdGF0aWMgZW51bSBkdmJmZV9zZWFyY2ggc3R2MDkwMF9zZWFyY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCXN0cnVjdCBzdHYwOTAwX3NlYXJjaF9wYXJhbXMgcF9zZWFyY2g7CisJc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8gcF9yZXN1bHQ7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBfX2Z1bmNfXyk7CisKKwlwX3Jlc3VsdC5sb2NrZWQgPSBGQUxTRTsKKwlwX3NlYXJjaC5wYXRoID0gc3RhdGUtPmRlbW9kOworCXBfc2VhcmNoLmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKKwlwX3NlYXJjaC5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCXBfc2VhcmNoLnNlYXJjaF9yYW5nZSA9IDEwMDAwMDAwOworCXBfc2VhcmNoLmZlYyA9IFNUVjA5MDBfRkVDX1VOS05PV047CisJcF9zZWFyY2guc3RhbmRhcmQgPSBTVFYwOTAwX0FVVE9fU0VBUkNIOworCXBfc2VhcmNoLmlxX2ludmVyc2lvbiA9IFNUVjA5MDBfSVFfQVVUTzsKKwlwX3NlYXJjaC5zZWFyY2hfYWxnbyA9IFNUVjA5MDBfQkxJTkRfU0VBUkNIOworCisJaWYgKChJTlJBTkdFKDEwMDAwMCwgcF9zZWFyY2guc3ltYm9sX3JhdGUsIDcwMDAwMDAwKSkgJiYKKwkJCShJTlJBTkdFKDEwMDAwMCwgcF9zZWFyY2guc2VhcmNoX3JhbmdlLCA1MDAwMDAwMCkpKSB7CisJCXN3aXRjaCAocF9zZWFyY2gucGF0aCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPSBwX3NlYXJjaC5zdGFuZGFyZDsKKwkJCWlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlID0gcF9zZWFyY2guc3ltYm9sX3JhdGU7CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlID0gcF9zZWFyY2guc2VhcmNoX3JhbmdlOworCQkJaV9wYXJhbXMtPnR1bmVyMV9mcmVxID0gcF9zZWFyY2guZnJlcXVlbmN5OworCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID0gcF9zZWFyY2guc2VhcmNoX2FsZ287CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX2lxX2ludiA9IHBfc2VhcmNoLmlxX2ludmVyc2lvbjsKKwkJCWlfcGFyYW1zLT5kbWQxX2ZlYyA9IHBfc2VhcmNoLmZlYzsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPSBwX3NlYXJjaC5zdGFuZGFyZDsKKwkJCWlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlID0gcF9zZWFyY2guc3ltYm9sX3JhdGU7CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlID0gcF9zZWFyY2guc2VhcmNoX3JhbmdlOworCQkJaV9wYXJhbXMtPnR1bmVyMl9mcmVxID0gcF9zZWFyY2guZnJlcXVlbmN5OworCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID0gcF9zZWFyY2guc2VhcmNoX2FsZ287CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX2lxX2ludiA9IHBfc2VhcmNoLmlxX2ludmVyc2lvbjsKKwkJCWlfcGFyYW1zLT5kbWQyX2ZlYyA9IHBfc2VhcmNoLmZlYzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzdHYwOTAwX2FsZ28oZmUpID09IFNUVjA5MDBfUkFOR0VPSykgJiYKKwkJCQkJKGlfcGFyYW1zLT5lcnJzID09IFNUVjA5MDBfTk9fRVJST1IpKSB7CisJCQlzd2l0Y2ggKHBfc2VhcmNoLnBhdGgpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlwX3Jlc3VsdC5sb2NrZWQgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQ7CisJCQkJcF9yZXN1bHQuc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZDsKKwkJCQlwX3Jlc3VsdC5mcmVxdWVuY3kgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3k7CisJCQkJcF9yZXN1bHQuc3ltYm9sX3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZTsKKwkJCQlwX3Jlc3VsdC5mZWMgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mZWM7CisJCQkJcF9yZXN1bHQubW9kY29kZSA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGU7CisJCQkJcF9yZXN1bHQucGlsb3QgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5waWxvdDsKKwkJCQlwX3Jlc3VsdC5mcmFtZV9sZW5ndGggPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmFtZV9sZW5ndGg7CisJCQkJcF9yZXN1bHQuc3BlY3RydW0gPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zcGVjdHJ1bTsKKwkJCQlwX3Jlc3VsdC5yb2xsb2ZmID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMucm9sbG9mZjsKKwkJCQlwX3Jlc3VsdC5tb2R1bGF0aW9uID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCXBfcmVzdWx0LmxvY2tlZCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZDsKKwkJCQlwX3Jlc3VsdC5zdGFuZGFyZCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkOworCQkJCXBfcmVzdWx0LmZyZXF1ZW5jeSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeTsKKwkJCQlwX3Jlc3VsdC5zeW1ib2xfcmF0ZSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlOworCQkJCXBfcmVzdWx0LmZlYyA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZlYzsKKwkJCQlwX3Jlc3VsdC5tb2Rjb2RlID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZTsKKwkJCQlwX3Jlc3VsdC5waWxvdCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnBpbG90OworCQkJCXBfcmVzdWx0LmZyYW1lX2xlbmd0aCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyYW1lX2xlbmd0aDsKKwkJCQlwX3Jlc3VsdC5zcGVjdHJ1bSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnNwZWN0cnVtOworCQkJCXBfcmVzdWx0LnJvbGxvZmYgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5yb2xsb2ZmOworCQkJCXBfcmVzdWx0Lm1vZHVsYXRpb24gPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uOworCQkJCWJyZWFrOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlwX3Jlc3VsdC5sb2NrZWQgPSBGQUxTRTsKKwkJCXN3aXRjaCAocF9zZWFyY2gucGF0aCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9lcnIpIHsKKwkJCQljYXNlIFNUVjA5MDBfSTJDX0VSUk9SOgorCQkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfTk9fRVJST1I6CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX1NFQVJDSF9GQUlMRUQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfZXJyKSB7CisJCQkJY2FzZSBTVFYwOTAwX0kyQ19FUlJPUjoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVFYwOTAwX05PX0VSUk9SOgorCQkJCWRlZmF1bHQ6CisJCQkJCWVycm9yID0gU1RWMDkwMF9TRUFSQ0hfRkFJTEVEOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0gZWxzZQorCQllcnJvciA9IFNUVjA5MDBfQkFEX1BBUkFNRVRFUjsKKworCWlmICgocF9yZXN1bHQubG9ja2VkID09IFRSVUUpICYmIChlcnJvciA9PSBTVFYwOTAwX05PX0VSUk9SKSkgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAiU2VhcmNoIFN1Y2Nlc3NcbiIpOworCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAiU2VhcmNoIEZhaWxcbiIpOworCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfRkFJTEVEOworCX0KKworCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9FUlJPUjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZlX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXM6ICIsIF9fZnVuY19fKTsKKworCWlmICgoc3R2MDkwMF9zdGF0dXMoc3RhdGUtPmludGVybmFsLCBzdGF0ZS0+ZGVtb2QpKSA9PSBUUlVFKSB7CisJCWRwcmludGsoIkRFTU9EIExPQ0sgT0tcbiIpOworCQkqc3RhdHVzID0gRkVfSEFTX0NBUlJJRVIKKwkJCXwgRkVfSEFTX1ZJVEVSQkkKKwkJCXwgRkVfSEFTX1NZTkMKKwkJCXwgRkVfSEFTX0xPQ0s7CisJfSBlbHNlCisJCWRwcmludGsoIkRFTU9EIExPQ0sgRkFJTFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3RyYWNrKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc3RvcF90cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHN0b3BfdHMpCit7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlzMzIgcnN0X2ZpZWxkOworCisJZG1kX3JlZyhyc3RfZmllbGQsIEYwOTAwX1AxX1JTVF9IV0FSRSwgRjA5MDBfUDJfUlNUX0hXQVJFKTsKKworCWlmIChzdG9wX3RzID09IFRSVUUpCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcnN0X2ZpZWxkLCAxKTsKKwllbHNlCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcnN0X2ZpZWxkLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfZGlzZXFjX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIG1vZGVfZmllbGQsIHJlc2V0X2ZpZWxkOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9ESVNUWF9NT0RFLCBGMDkwMF9QMl9ESVNUWF9NT0RFKTsKKwlkbWRfcmVnKHJlc2V0X2ZpZWxkLCBGMDkwMF9QMV9ESVNFUUNfUkVTRVQsIEYwOTAwX1AyX0RJU0VRQ19SRVNFVCk7CisKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIHN0YXRlLT5jb25maWctPmRpc2VxY19tb2RlKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAxKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN0djA5MDBfc3RvcF90cyhmZSwgMSk7CisJc3R2MDkwMF9kaXNlcWNfaW5pdChmZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2Rpc2VxY19zZW5kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyAsIHU4ICpEYXRhLAorCQkJCXUzMiBOYkRhdGEsIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGkgPSAwOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRElTX1BSRUNIQVJHRSwgMSk7CisJCXdoaWxlIChpIDwgTmJEYXRhKSB7CisJCQl3aGlsZSAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRklGT19GVUxMKSkKKwkJCQk7LyogY2hlY2twYXRjaCBjb21wbGFpbnMgKi8KKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ESVNUWERBVEEsIERhdGFbaV0pOworCQkJaSsrOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ESVNfUFJFQ0hBUkdFLCAwKTsKKwkJaSA9IDA7CisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFhfSURMRSkgIT0gMSkgJiYgKGkgPCAxMCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpKys7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ESVNfUFJFQ0hBUkdFLCAxKTsKKworCQl3aGlsZSAoaSA8IE5iRGF0YSkgeworCQkJd2hpbGUgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0ZJRk9fRlVMTCkpCisJCQkJOy8qIGNoZWNrcGF0Y2ggY29tcGxhaW5zICovCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRElTVFhEQVRBLCBEYXRhW2ldKTsKKwkJCWkrKzsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRElTX1BSRUNIQVJHRSwgMCk7CisJCWkgPSAwOworCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RYX0lETEUpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZW5kX21hc3Rlcl9jbWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXJldHVybiBzdHYwOTAwX2Rpc2VxY19zZW5kKHN0YXRlLT5pbnRlcm5hbCwKKwkJCQljbWQtPm1zZywKKwkJCQljbWQtPm1zZ19sZW4sCisJCQkJc3RhdGUtPmRlbW9kKTsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXMzMiBtb2RlX2ZpZWxkOworCXUzMiBkaXNlcWNfZmlmbzsKKworCWRtZF9yZWcobW9kZV9maWVsZCwgRjA5MDBfUDFfRElTVFhfTU9ERSwgRjA5MDBfUDJfRElTVFhfTU9ERSk7CisJZG1kX3JlZyhkaXNlcWNfZmlmbywgUjA5MDBfUDFfRElTVFhEQVRBLCBSMDkwMF9QMl9ESVNUWERBVEEpOworCisJc3dpdGNoIChidXJzdCkgeworCWNhc2UgU0VDX01JTklfQToKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCAzKTsvKiBVbm1vZHVsYXRlZCAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZGlzZXFjX2ZpZm8sIDB4MDApOworCQlicmVhazsKKwljYXNlIFNFQ19NSU5JX0I6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgMik7LyogTW9kdWxhdGVkICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBkaXNlcWNfZmlmbywgMHhmZik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVjdl9zbGF2ZV9yZXBseShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseSAqcmVwbHkpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCXMzMiBpID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJcmVwbHktPm1zZ19sZW4gPSAwOworCisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlhfRU5EKSAhPSAxKSAmJiAoaSA8IDEwKSkgeworCQkJbXNsZWVwKDEwKTsKKwkJCWkrKzsKKwkJfQorCisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SWF9FTkQpKSB7CisJCQlyZXBseS0+bXNnX2xlbiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0ZJRk9fQllURU5CUik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBseS0+bXNnX2xlbjsgaSsrKQorCQkJCXJlcGx5LT5tc2dbaV0gPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ESVNSWERBVEEpOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlyZXBseS0+bXNnX2xlbiA9IDA7CisKKwkJd2hpbGUgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SWF9FTkQpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JYX0VORCkpIHsKKwkJCXJlcGx5LT5tc2dfbGVuID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRklGT19CWVRFTkJSKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHJlcGx5LT5tc2dfbGVuOyBpKyspCisJCQkJcmVwbHktPm1zZ1tpXSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RJU1JYREFUQSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIG1vZGVfZmllbGQsIHJlc2V0X2ZpZWxkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgX19mdW5jX18sICgodG9uZSA9PSAwKSA/ICJPZmYiIDogIk9uIikpOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9ESVNUWF9NT0RFLCBGMDkwMF9QMl9ESVNUWF9NT0RFKTsKKwlkbWRfcmVnKHJlc2V0X2ZpZWxkLCBGMDkwMF9QMV9ESVNFUUNfUkVTRVQsIEYwOTAwX1AyX0RJU0VRQ19SRVNFVCk7CisKKwlpZiAodG9uZSkgeworCQkvKlNldCB0aGUgRGlzZXFDIG1vZGUgdG8gMjJLaHogY29udGludWVzIHRvbmUqLworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAxKTsKKwkJLypyZWxlYXNlIERpc2VxQyByZXNldCB0byBlbmFibGUgdGhlIDIyS0h6IHRvbmUqLworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAwKTsKKwl9IGVsc2UgeworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDApOworCQkvKm1haW50YWluIHRoZSBEaXNlcUMgcmVzZXQgdG8gZGlzYWJsZSB0aGUgMjJLSHogdG9uZSovCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICgoLS0oc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQpKSA8PSAwKSB7CisKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBBY3R1YWxseSByZW1vdmluZ1xuIiwgX19mdW5jX18pOworCisJCXJlbW92ZV9pbm9kZShzdGF0ZS0+aW50ZXJuYWwpOworCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCX0KKworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHN0djA5MDBfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU1RWMDkwMCBmcm9udGVuZCIsCisJCS50eXBlCQkJPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbgkJPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4CQk9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxMjUsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKwkJLnN5bWJvbF9yYXRlX21pbgk9IDEwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV9tYXgJPSA0NTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9IDUwMCwKKwkJLmNhcHMJCQk9IEZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfAorCQkJCQkgIEZFX0NBTl9GRUNfM180IHwgRkVfQ0FOX0ZFQ181XzYgfAorCQkJCQkgIEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX1FQU0sgICAgfAorCQkJCQkgIEZFX0NBTl8yR19NT0RVTEFUSU9OIHwKKwkJCQkJICBGRV9DQU5fRkVDX0FVVE8KKwl9LAorCS5yZWxlYXNlCQkJPSBzdHYwOTAwX3JlbGVhc2UsCisJLmluaXQJCQkJPSBzdHYwOTAwX2luaXQsCisJLmdldF9mcm9udGVuZF9hbGdvCQk9IHN0djA5MDBfZnJvbnRlbmRfYWxnbywKKwkuaTJjX2dhdGVfY3RybAkJCT0gc3R2MDkwMF9pMmNfZ2F0ZV9jdHJsLAorCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kCQk9IHN0djA5MDBfc2VuZF9tYXN0ZXJfY21kLAorCS5kaXNlcWNfc2VuZF9idXJzdAkJPSBzdHYwOTAwX3NlbmRfYnVyc3QsCisJLmRpc2VxY19yZWN2X3NsYXZlX3JlcGx5CT0gc3R2MDkwMF9yZWN2X3NsYXZlX3JlcGx5LAorCS5zZXRfdG9uZQkJCT0gc3R2MDkwMF9zZXRfdG9uZSwKKwkuc2V0X3Byb3BlcnR5CQkJPSBzdGIwOTAwX3NldF9wcm9wZXJ0eSwKKwkuZ2V0X3Byb3BlcnR5CQkJPSBzdGIwOTAwX2dldF9wcm9wZXJ0eSwKKwkuc2VhcmNoCQkJCT0gc3R2MDkwMF9zZWFyY2gsCisJLnRyYWNrCQkJCT0gc3R2MDkwMF90cmFjaywKKwkucmVhZF9zdGF0dXMJCQk9IHN0djA5MDBfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyCQkJPSBzdHYwOTAwX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aAkJPSBzdHYwOTAwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NucgkJCT0gc3R2MDkwMF9yZWFkX3NuciwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djA5MDBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwOTAwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJaW50IGRlbW9kKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHN0djA5MDBfaW5pdF9wYXJhbXMgaW5pdF9wYXJhbXM7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycl9zdHYwOTAwOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3RhdGUtPmRlbW9kCQk9IGRlbW9kOworCXN0YXRlLT5jb25maWcJCT0gY29uZmlnOworCXN0YXRlLT5pMmNfYWRhcAkJPSBpMmM7CisKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZzdHYwOTAwX29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJaW5pdF9wYXJhbXMuZG1kX3JlZl9jbGsgIAk9IGNvbmZpZy0+eHRhbDsKKwkJaW5pdF9wYXJhbXMuZGVtb2RfbW9kZQkJPSBTVFYwOTAwX0RVQUw7CisJCWluaXRfcGFyYW1zLnJvbGxvZmYJCT0gU1RWMDkwMF8zNTsKKwkJaW5pdF9wYXJhbXMucGF0aDFfdHNfY2xvY2sJPSBjb25maWctPnBhdGgxX21vZGU7CisJCWluaXRfcGFyYW1zLnR1bjFfbWFkZHJlc3MJPSBjb25maWctPnR1bjFfbWFkZHJlc3M7CisJCWluaXRfcGFyYW1zLnR1bjFfaXFfaW52ZXJzaW9uCT0gU1RWMDkwMF9JUV9OT1JNQUw7CisJCWluaXRfcGFyYW1zLnR1bmVyMV9hZGMJCT0gY29uZmlnLT50dW4xX2FkYzsKKwkJaW5pdF9wYXJhbXMucGF0aDJfdHNfY2xvY2sJPSBjb25maWctPnBhdGgyX21vZGU7CisJCWluaXRfcGFyYW1zLnR1bjJfbWFkZHJlc3MJPSBjb25maWctPnR1bjJfbWFkZHJlc3M7CisJCWluaXRfcGFyYW1zLnR1bmVyMl9hZGMJCT0gY29uZmlnLT50dW4yX2FkYzsKKwkJaW5pdF9wYXJhbXMudHVuMl9pcV9pbnZlcnNpb24JPSBTVFYwOTAwX0lRX1NXQVBQRUQ7CisKKwkJZXJyX3N0djA5MDAgPSBzdHYwOTAwX2luaXRfaW50ZXJuYWwoJnN0YXRlLT5mcm9udGVuZCwKKwkJCQkJCQkmaW5pdF9wYXJhbXMpOworCisJCWlmIChlcnJfc3R2MDkwMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisJfQorCisJZHByaW50aygiJXM6IEF0dGFjaGluZyBTVFYwOTAwIGRlbW9kdWxhdG9yKCVkKSBcbiIsIF9fZnVuY19fLCBkZW1vZCk7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWRwcmludGsoIiVzOiBGYWlsZWQgdG8gYXR0YWNoIFNUVjA5MDAgZGVtb2R1bGF0b3IoJWQpIFxuIiwKKwkJX19mdW5jX18sIGRlbW9kKTsKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHN0djA5MDBfYXR0YWNoKTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNldCBkZWJ1ZyIpOworCitNT0RVTEVfQVVUSE9SKCJJZ29yIE0uIExpcGxpYW5pbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVCBTVFYwOTAwIGZyb250ZW5kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9pbml0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzODhiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2luaXQuaApAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqIHN0djA5MDBfaW5pdC5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9JTklUX0gKKyNkZWZpbmUgU1RWMDkwMF9JTklUX0gKKworI2luY2x1ZGUgInN0djA5MDBfcHJpdi5oIgorCisvKiBEVkJTMiBDL04gTG9vay1VcCB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlIHN0djA5MDBfczJfY24gPSB7CisJNTUsCisJeworCQl7IC0zMCwJMTMzNDggfSwgLypDL049LTNkQiovCisJCXsgLTIwLAkxMjY0MCB9LCAvKkMvTj0tMmRCKi8KKwkJeyAtMTAsCTExODgzIH0sIC8qQy9OPS0xZEIqLworCQl7IDAsCTExMTAxIH0sIC8qQy9OPS0wZEIqLworCQl7IDUsCTEwNzE4IH0sIC8qQy9OPTAuNWRCKi8KKwkJeyAxMCwJMTAzMzkgfSwgLypDL049MS4wZEIqLworCQl7IDE1LAk5OTQ3IH0sIC8qQy9OPTEuNWRCKi8KKwkJeyAyMCwJOTU1MiB9LCAvKkMvTj0yLjBkQiovCisJCXsgMjUsCTkxODMgfSwgLypDL049Mi41ZEIqLworCQl7IDMwLAk4Nzk5IH0sIC8qQy9OPTMuMGRCKi8KKwkJeyAzNSwJODQyMiB9LCAvKkMvTj0zLjVkQiovCisJCXsgNDAsCTgwNjIgfSwgLypDL049NC4wZEIqLworCQl7IDQ1LAk3NzA3IH0sIC8qQy9OPTQuNWRCKi8KKwkJeyA1MCwJNzM1MyB9LCAvKkMvTj01LjBkQiovCisJCXsgNTUsCTcwMjUgfSwgLypDL049NS41ZEIqLworCQl7IDYwLAk2Njg0IH0sIC8qQy9OPTYuMGRCKi8KKwkJeyA2NSwJNjMzMSB9LCAvKkMvTj02LjVkQiovCisJCXsgNzAsCTYwMzYgfSwgLypDL049Ny4wZEIqLworCQl7IDc1LAk1NzI3IH0sIC8qQy9OPTcuNWRCKi8KKwkJeyA4MCwJNTQzNyB9LCAvKkMvTj04LjBkQiovCisJCXsgODUsCTUxNjQgfSwgLypDL049OC41ZEIqLworCQl7IDkwLAk0OTAyIH0sIC8qQy9OPTkuMGRCKi8KKwkJeyA5NSwJNDY1MyB9LCAvKkMvTj05LjVkQiovCisJCXsgMTAwLAk0NDA4IH0sIC8qQy9OPTEwLjBkQiovCisJCXsgMTA1LAk0MTg3IH0sIC8qQy9OPTEwLjVkQiovCisJCXsgMTEwLAkzOTYxIH0sIC8qQy9OPTExLjBkQiovCisJCXsgMTE1LAkzNzUxIH0sIC8qQy9OPTExLjVkQiovCisJCXsgMTIwLAkzNTU4IH0sIC8qQy9OPTEyLjBkQiovCisJCXsgMTI1LAkzMzY4IH0sIC8qQy9OPTEyLjVkQiovCisJCXsgMTMwLAkzMTkxIH0sIC8qQy9OPTEzLjBkQiovCisJCXsgMTM1LAkzMDE3IH0sIC8qQy9OPTEzLjVkQiovCisJCXsgMTQwLAkyODYyIH0sIC8qQy9OPTE0LjBkQiovCisJCXsgMTQ1LAkyNzEwIH0sIC8qQy9OPTE0LjVkQiovCisJCXsgMTUwLAkyNTY1IH0sIC8qQy9OPTE1LjBkQiovCisJCXsgMTYwLAkyMzAwIH0sIC8qQy9OPTE2LjBkQiovCisJCXsgMTcwLAkyMDU4IH0sIC8qQy9OPTE3LjBkQiovCisJCXsgMTgwLAkxODQ5IH0sIC8qQy9OPTE4LjBkQiovCisJCXsgMTkwLAkxNjYzIH0sIC8qQy9OPTE5LjBkQiovCisJCXsgMjAwLAkxNDk1IH0sIC8qQy9OPTIwLjBkQiovCisJCXsgMjEwLAkxMzQ5IH0sIC8qQy9OPTIxLjBkQiovCisJCXsgMjIwLAkxMjIyIH0sIC8qQy9OPTIyLjBkQiovCisJCXsgMjMwLAkxMTEwIH0sIC8qQy9OPTIzLjBkQiovCisJCXsgMjQwLAkxMDExIH0sIC8qQy9OPTI0LjBkQiovCisJCXsgMjUwLAk5MjUgfSwgLypDL049MjUuMGRCKi8KKwkJeyAyNjAsCTg1MyB9LCAvKkMvTj0yNi4wZEIqLworCQl7IDI3MCwJNzg5IH0sIC8qQy9OPTI3LjBkQiovCisJCXsgMjgwLAk3MzQgfSwgLypDL049MjguMGRCKi8KKwkJeyAyOTAsCTY5MCB9LCAvKkMvTj0yOS4wZEIqLworCQl7IDMwMCwJNjUwIH0sIC8qQy9OPTMwLjBkQiovCisJCXsgMzEwLAk2MTkgfSwgLypDL049MzEuMGRCKi8KKwkJeyAzMjAsCTU5MyB9LCAvKkMvTj0zMi4wZEIqLworCQl7IDMzMCwJNTcxIH0sIC8qQy9OPTMzLjBkQiovCisJCXsgNDAwLAk0OTggfSwgLypDL049NDAuMGRCKi8KKwkJeyA0NTAsCTQ4NCB9LCAvKkMvTj00NS4wZEIqLworCQl7IDUwMCwJNDgxIH0gIC8qQy9OPTUwLjBkQiovCisJfQorfTsKKworLyogUkYgbGV2ZWwgQy9OIExvb2stVXAgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSBzdHYwOTAwX3JmID0geworCTE0LAorCXsKKwkJeyAtNSwgMHhDQUExIH0sIC8qLTVkQm0qLworCQl7IC0xMCwgMHhDMjI5IH0sIC8qLTEwZEJtKi8KKwkJeyAtMTUsIDB4QkIwOCB9LCAvKi0xNWRCbSovCisJCXsgLTIwLCAweEI0QkMgfSwgLyotMjBkQm0qLworCQl7IC0yNSwgMHhBRDVBIH0sIC8qLTI1ZEJtKi8KKwkJeyAtMzAsIDB4QTI5OCB9LCAvKi0zMGRCbSovCisJCXsgLTM1LCAweDk4QTggfSwgLyotMzVkQm0qLworCQl7IC00MCwgMHg4Mzg5IH0sIC8qLTQwZEJtKi8KKwkJeyAtNDUsIDB4NTlCRSB9LCAvKi00NWRCbSovCisJCXsgLTUwLCAweDNBMTQgfSwgLyotNTBkQm0qLworCQl7IC01NSwgMHgyRDExIH0sIC8qLTU1ZEJtKi8KKwkJeyAtNjAsIDB4MjEwRCB9LCAvKi02MGRCbSovCisJCXsgLTY1LCAweEExNEYgfSwgLyotNjVkQm0qLworCQl7IC03MCwgMHg3QUEgfQkvKi03MGRCbSovCisJfQorfTsKKworc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0geworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIG1vZGNvZGU7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8yOworCXU4IGNhcl9sb29wX3BpbG90c19vbl81OworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfNTsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMTA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8xMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMjA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8yMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMzA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKworfTsKKworc3RydWN0IHN0djA5MDBfc2hvcnRfZnJhbWVzX2Nhcl9sb29wX29wdGltIHsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiBtb2R1bGF0aW9uOworCXU4IGNhcl9sb29wX2N1dDEyXzI7ICAgIC8qIEN1dCAxLjIsICAgU1I8PTNtc3BzICAgICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzI7ICAgIC8qIEN1dCAyLjAsICAgU1I8M21zcHMgICAgICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzU7ICAgIC8qIEN1dCAxLjIsICAgMzxTUjw9N21zcHMgICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzU7ICAgIC8qIEN1dCAyLjAsICAgMzxTUjw9N21zcHMgICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzEwOyAgIC8qIEN1dCAxLjIsICAgNzxTUjw9MTVtc3BzICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzEwOyAgIC8qIEN1dCAyLjAsICAgNzxTUjw9MTVtc3BzICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzIwOyAgIC8qIEN1dCAxLjIsICAgMTA8U1I8PTI1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDIwXzIwOyAgIC8qIEN1dCAyLjAsICAgMTA8U1I8PTI1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDEyXzMwOyAgIC8qIEN1dCAxLjIsICAgMjU8U1I8PTQ1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDIwXzMwOyAgIC8qIEN1dCAyLjAsICAgMTA8U1I8PTQ1bXNwcyAqLworCit9OworCisvKiBDdXQgMS54IFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIFFQU0sgMS8yIHRvIDhQU0sgOS8xMCBsb25nIEZyYW1lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0JRkVfU1RWMDkwMF9TMkNhckxvb3BbMTRdID0geworCS8qTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfUVBTS18xMiwJMHgxQywJMHgwRCwJMHgxQiwJMHgyQywJMHgzQSwJMHgxQywJMHgyQSwJMHgzQiwJMHgyQSwJMHgxQiB9LAorCXsgU1RWMDkwMF9RUFNLXzM1LAkweDJDLAkweDBELAkweDJCLAkweDJDLAkweDNBLAkweDBDLAkweDNBLAkweDJCLAkweDJBLAkweDBCIH0sCisJeyBTVFYwOTAwX1FQU0tfMjMsCTB4MkMsCTB4MEQsCTB4MkIsCTB4MkMsCTB4MEIsCTB4MEMsCTB4M0EsCTB4MUIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS18zNCwJMHgzQywJMHgwRCwJMHgzQiwJMHgxQywJMHgwQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzQ1LAkweDNDLAkweDBELAkweDNCLAkweDFDLAkweDBCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfNTYsCTB4MEQsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MEIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS184OSwJMHgwRCwJMHgwRCwJMHgzQiwJMHgxQywJMHgxQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzkxMCwJMHgxRCwJMHgwRCwJMHgzQiwJMHgxQywJMHgxQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF84UFNLXzM1LAkweDI5LAkweDNCLAkweDA5LAkweDJCLAkweDM4LAkweDBCLAkweDE4LAkweDFBLAkweDA4LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfMjMsCTB4MEEsCTB4M0IsCTB4MjksCTB4MkIsCTB4MTksCTB4MEIsCTB4MzgsCTB4MUEsCTB4MTgsCTB4MEEgfSwKKwl7IFNUVjA5MDBfOFBTS18zNCwJMHgzQSwJMHgzQiwJMHgyQSwJMHgyQiwJMHgzOSwJMHgwQiwJMHgxOSwJMHgxQSwJMHgzOCwJMHgwQSB9LAorCXsgU1RWMDkwMF84UFNLXzU2LAkweDFCLAkweDNCLAkweDBCLAkweDJCLAkweDFBLAkweDBCLAkweDM5LAkweDFBLAkweDE5LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfODksCTB4M0IsCTB4M0IsCTB4MEIsCTB4MkIsCTB4MkEsCTB4MEIsCTB4MzksCTB4MUEsCTB4MjksCTB4MzkgfSwKKwl7IFNUVjA5MDBfOFBTS185MTAsCTB4M0IsCTB4M0IsIAkweDBCLAkweDJCLCAJMHgyQSwJMHgwQiwJMHgzOSwJMHgxQSwJMHgyOSwJMHgzOSB9Cit9OworCisKKy8qIEN1dCAyLjAgVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgUVBTSyAxLzIgdG8gOFBTSyA5LzEwIGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbQlGRV9TVFYwOTAwX1MyQ2FyTG9vcEN1dDIwWzE0XQk9IHsKKwkvKiBNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF9RUFNLXzEyLAkweDFGLAkweDNGLAkweDFFLAkweDNGLAkweDNELAkweDFGLAkweDNELAkweDNFLAkweDNELAkweDFFIH0sCisJeyBTVFYwOTAwX1FQU0tfMzUsCTB4MkYsCTB4M0YsCTB4MkUsCTB4MkYsCTB4M0QsCTB4MEYsCTB4MEUsCTB4MkUsCTB4M0QsCTB4MEUgfSwKKwl7IFNUVjA5MDBfUVBTS18yMywJMHgyRiwJMHgzRiwJMHgyRSwJMHgyRiwJMHgwRSwJMHgwRiwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzM0LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDBFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfNDUsCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MEUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS181NiwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgwRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzg5LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDFFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfOTEwLAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDFFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwXzhQU0tfMzUsCTB4M2MsCTB4MGMsCTB4MWMsCTB4M2IsCTB4MGMsCTB4M2IsCTB4MmIsCTB4MmIsCTB4MWIsCTB4MmIgfSwKKwl7IFNUVjA5MDBfOFBTS18yMywJMHgxZCwJMHgwYywJMHgzYywJMHgwYywJMHgyYywJMHgzYiwJMHgwYywJMHgyYiwJMHgyYiwJMHgyYiB9LAorCXsgU1RWMDkwMF84UFNLXzM0LAkweDBlLAkweDFjLAkweDNkLAkweDBjLAkweDBkLAkweDNiLAkweDJjLAkweDNiLAkweDBjLAkweDJiIH0sCisJeyBTVFYwOTAwXzhQU0tfNTYsCTB4MmUsCTB4M2UsCTB4MWUsCTB4MmUsCTB4MmQsCTB4MWUsCTB4M2MsCTB4MmQsCTB4MmMsCTB4MWQgfSwKKwl7IFNUVjA5MDBfOFBTS184OSwJMHgzZSwJMHgzZSwJMHgxZSwJMHgyZSwJMHgzZCwJMHgxZSwJMHgwZCwJMHgyZCwJMHgzYywJMHgxZCB9LAorCXsgU1RWMDkwMF84UFNLXzkxMCwJMHgzZSwJMHgzZSwgCTB4MWUsCTB4MmUsIAkweDNkLAkweDFlLAkweDFkLAkweDJkLAkweDBkLAkweDFkIH0KK307CisKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIDE2QVBTSyAyLzMgdG8gMzJBUFNLIDkvMTAgbG9uZyBGcmFtZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltIEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwWzExXSA9IHsKKwkvKiBNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF8xNkFQU0tfMjMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MUQsCTB4MEMsCTB4M0MsCTB4MEMsCTB4MkMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzM0LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBFLAkweDBDLAkweDJELAkweDBDLAkweDFELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS180NSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgxRSwJMHgwQywJMHgzRCwJMHgwQywJMHgyRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfNTYsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MUUsCTB4MEMsCTB4M0QsCTB4MEMsCTB4MkQsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzg5LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDJFLAkweDBDLAkweDBFLAkweDBDLAkweDNELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS185MTAsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MkUsCTB4MEMsCTB4MEUsCTB4MEMsCTB4M0QsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzM0LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS180NSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfNTYsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzg5LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS185MTAsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfQorfTsKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIFFQU0sgMS80IHRvIFFQU0sgMi81IGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbM10gPSB7CisJLyogTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfUVBTS18xNCwJMHgwRiwJMHgzRiwJMHgwRSwJMHgzRiwJMHgyRCwJMHgyRiwJMHgyRCwJMHgxRiwJMHgzRCwJMHgzRSB9LAorCXsgU1RWMDkwMF9RUFNLXzEzLAkweDBGLAkweDNGLAkweDBFLAkweDNGLAkweDJELAkweDJGLAkweDNELAkweDBGLAkweDNELAkweDJFIH0sCisJeyBTVFYwOTAwX1FQU0tfMjUsCTB4MUYsCTB4M0YsCTB4MUUsCTB4M0YsCTB4M0QsCTB4MUYsCTB4M0QsCTB4M0UsCTB4M0QsCTB4MkUgfQorfTsKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyICBzaG9ydCBGcmFtZSwgY3V0IDEuMiBhbmQgMi4wICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfc2hvcnRfZnJhbWVzX2Nhcl9sb29wX29wdGltIEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbNF0JPSB7CisJLypNb2QJMk1fY3V0MS4yIDJNX2N1dDIuMCA1TV9jdXQxLjIgNU1fY3V0Mi4wIDEwTV9jdXQxLjIgMTBNX2N1dDIuMCAyME1fY3V0MS4yIDIwTV9jdXQyLjAgMzBNX2N1dDEuMiAzME1fY3V0Mi4wICovCisJeyBTVFYwOTAwX1FQU0ssCQkweDNDLAkweDJGLAkweDJCLAkweDJFLAkweDBCLAkweDBFLAkweDNBLAkweDBFLAkweDJBLAkweDNEIH0sCisJeyBTVFYwOTAwXzhQU0ssCQkweDBCLAkweDNFLAkweDJBLAkweDBFLAkweDBBLAkweDJELAkweDE5LAkweDBELAkweDA5LAkweDNDIH0sCisJeyBTVFYwOTAwXzE2QVBTSywJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgzQSwJMHgzRCwJMHgyQSwJMHgyRCB9LAorCXsgU1RWMDkwMF8zMkFQU0ssCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4M0EsCTB4M0QsCTB4MkEsCTB4MkQgfQorfTsKKworc3RhdGljIGNvbnN0IHUxNiBTVFYwOTAwX0luaXRWYWxbMTgyXVsyXSA9IHsKKwl7IFIwOTAwX09VVENGRwkJLCAweDAwCX0sCisJeyBSMDkwMF9NT0RFQ0ZHCQksIDB4ZmYJfSwKKwl7IFIwOTAwX0FHQ1JGMUNGRwksIDB4MTEJfSwKKwl7IFIwOTAwX0FHQ1JGMkNGRwksIDB4MTMJfSwKKwl7IFIwOTAwX1RTR0VORVJBTDFYCSwgMHgxNAl9LAorCXsgUjA5MDBfVFNUVE5SMgkJLCAweDIxCX0sCisJeyBSMDkwMF9UU1RUTlI0CQksIDB4MjEJfSwKKwl7IFIwOTAwX1AyX0RJU1RYQ1RMCSwgMHgyMgl9LAorCXsgUjA5MDBfUDJfRjIyVFgJLCAweGMwCX0sCisJeyBSMDkwMF9QMl9GMjJSWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AyX0RJU1JYQ1RMCSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfVE5SU1RFUFMJLCAweDg3CX0sCisJeyBSMDkwMF9QMl9UTlJHQUlOCSwgMHgwOQl9LAorCXsgUjA5MDBfUDJfRE1EQ0ZHTUQJLCAweEY5CX0sCisJeyBSMDkwMF9QMl9ERU1PRAksIDB4MDgJfSwKKwl7IFIwOTAwX1AyX0RNRENGRzMJLCAweGM0CX0sCisJeyBSMDkwMF9QMl9DQVJGUkVRCSwgMHhlZAl9LAorCXsgUjA5MDBfUDJfVE5SQ0ZHMgksIDB4MDIJfSwKKwl7IFIwOTAwX1AyX1ROUkNGRzMJLCAweDAyCX0sCisJeyBSMDkwMF9QMl9MRFQJCSwgMHhkMAl9LAorCXsgUjA5MDBfUDJfTERUMgkJLCAweGI4CX0sCisJeyBSMDkwMF9QMl9UTUdDRkcJLCAweGQyCX0sCisJeyBSMDkwMF9QMl9UTUdUSFJJU0UJLCAweDIwCX0sCisJeyBSMDkwMF9QMl9UTUdUSEZBTEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9GRUNTUFkJLCAweDg4CX0sCisJeyBSMDkwMF9QMl9GU1BZREFUQQksIDB4M2EJfSwKKwl7IFIwOTAwX1AyX0ZCRVJDUFQ0CSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfRlNQWUJFUgksIDB4MTAJfSwKKwl7IFIwOTAwX1AyX0VSUkNUUkwxCSwgMHgzNQl9LAorCXsgUjA5MDBfUDJfRVJSQ1RSTDIJLCAweGMxCX0sCisJeyBSMDkwMF9QMl9DRlJJQ0ZHCSwgMHhmOAl9LAorCXsgUjA5MDBfUDJfTk9TQ0ZHCSwgMHgxYwl9LAorCXsgUjA5MDBfUDJfRE1EVDBNCSwgMHgyMAl9LAorCXsgUjA5MDBfUDJfQ09SUkVMTUFOVAksIDB4NzAJfSwKKwl7IFIwOTAwX1AyX0NPUlJFTEFCUwksIDB4ODgJfSwKKwl7IFIwOTAwX1AyX0FHQzJPCSwgMHg1Ygl9LAorCXsgUjA5MDBfUDJfQUdDMlJFRgksIDB4MzgJfSwKKwl7IFIwOTAwX1AyX0NBUkNGRwksIDB4ZTQJfSwKKwl7IFIwOTAwX1AyX0FDTEMJCSwgMHgxQQl9LAorCXsgUjA5MDBfUDJfQkNMQwkJLCAweDA5CX0sCisJeyBSMDkwMF9QMl9DQVJIRFIJLCAweDA4CX0sCisJeyBSMDkwMF9QMl9LUkVGVE1HCSwgMHhjMQl9LAorCXsgUjA5MDBfUDJfU0ZSVVBSQVRJTwksIDB4ZjAJfSwKKwl7IFIwOTAwX1AyX1NGUkxPV1JBVElPCSwgMHg3MAl9LAorCXsgUjA5MDBfUDJfU0ZSU1RFUAksIDB4NTgJfSwKKwl7IFIwOTAwX1AyX1RNR0NGRzIJLCAweDAxCX0sCisJeyBSMDkwMF9QMl9DQVIyQ0ZHCSwgMHgyNgl9LAorCXsgUjA5MDBfUDJfQkNMQzJTMlEJLCAweDg2CX0sCisJeyBSMDkwMF9QMl9CQ0xDMlMyOAksIDB4ODYJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNwksIDB4NzcJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNgksIDB4ODUJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNQksIDB4NzcJfSwKKwl7IFIwOTAwX1AyX1RTQ0ZHTAksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX0RNRENGRzIJLCAweDNiCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QwCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUMQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDIJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QzCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNAksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDUJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q2CSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNwksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDgJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q5CSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUQQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEIJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RDCSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNURAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEUJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RGCSwgMHhjZgl9LAorCXsgUjA5MDBfUDFfRElTVFhDVEwJLCAweDIyCX0sCisJeyBSMDkwMF9QMV9GMjJUWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AxX0YyMlJYCSwgMHhjMAl9LAorCXsgUjA5MDBfUDFfRElTUlhDVEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9UTlJTVEVQUwksIDB4ODcJfSwKKwl7IFIwOTAwX1AxX1ROUkdBSU4JLCAweDA5CX0sCisJeyBSMDkwMF9QMV9ETURDRkdNRAksIDB4ZjkJfSwKKwl7IFIwOTAwX1AxX0RFTU9ECSwgMHgwOAl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHMwksIDB4YzQJfSwKKwl7IFIwOTAwX1AxX0RNRFQwTQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0NBUkZSRVEJLCAweGVkCX0sCisJeyBSMDkwMF9QMV9UTlJDRkcyCSwgMHg4Mgl9LAorCXsgUjA5MDBfUDFfVE5SQ0ZHMwksIDB4MDIJfSwKKwl7IFIwOTAwX1AxX0xEVAkJLCAweGQwCX0sCisJeyBSMDkwMF9QMV9MRFQyCQksIDB4YjgJfSwKKwl7IFIwOTAwX1AxX1RNR0NGRwksIDB4ZDIJfSwKKwl7IFIwOTAwX1AxX1RNR1RIUklTRQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX1RNR1RIRkFMTAksIDB4MDAJfSwKKwl7IFIwOTAwX1AxX1NGUlVQUkFUSU8JLCAweGYwCX0sCisJeyBSMDkwMF9QMV9TRlJMT1dSQVRJTwksIDB4NzAJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHTAksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0ZFQ1NQWQksIDB4ODgJfSwKKwl7IFIwOTAwX1AxX0ZTUFlEQVRBCSwgMHgzYQl9LAorCXsgUjA5MDBfUDFfRkJFUkNQVDQJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9GU1BZQkVSCSwgMHgxMAl9LAorCXsgUjA5MDBfUDFfRVJSQ1RSTDEJLCAweDM1CX0sCisJeyBSMDkwMF9QMV9FUlJDVFJMMgksIDB4YzEJfSwKKwl7IFIwOTAwX1AxX0NGUklDRkcJLCAweGY4CX0sCisJeyBSMDkwMF9QMV9OT1NDRkcJLCAweDFjCX0sCisJeyBSMDkwMF9QMV9DT1JSRUxNQU5UCSwgMHg3MAl9LAorCXsgUjA5MDBfUDFfQ09SUkVMQUJTCSwgMHg4OAl9LAorCXsgUjA5MDBfUDFfQUdDMk8JLCAweDViCX0sCisJeyBSMDkwMF9QMV9BR0MyUkVGCSwgMHgzOAl9LAorCXsgUjA5MDBfUDFfQ0FSQ0ZHCSwgMHhlNAl9LAorCXsgUjA5MDBfUDFfQUNMQwkJLCAweDFBCX0sCisJeyBSMDkwMF9QMV9CQ0xDCQksIDB4MDkJfSwKKwl7IFIwOTAwX1AxX0NBUkhEUgksIDB4MDgJfSwKKwl7IFIwOTAwX1AxX0tSRUZUTUcJLCAweGMxCX0sCisJeyBSMDkwMF9QMV9TRlJTVEVQCSwgMHg1OAl9LAorCXsgUjA5MDBfUDFfVE1HQ0ZHMgksIDB4MDEJfSwKKwl7IFIwOTAwX1AxX0NBUjJDRkcJLCAweDI2CX0sCisJeyBSMDkwMF9QMV9CQ0xDMlMyUQksIDB4ODYJfSwKKwl7IFIwOTAwX1AxX0JDTEMyUzI4CSwgMHg4Ngl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY3CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY2CSwgMHg4NQl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY1CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHMgksIDB4M2IJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDAJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1QxCSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUMgksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDMJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q0CSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUNQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDYJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q3CSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUOAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDkJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RBCSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUQgksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEMJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RECSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNURQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEYJLCAweGNmCX0sCisJeyBSMDkwMF9HRU5DRkcJCSwgMHgxZAl9LAorCXsgUjA5MDBfTkJJVEVSX05GNAksIDB4MzcJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjUJLCAweDI5CX0sCisJeyBSMDkwMF9OQklURVJfTkY2CSwgMHgzNwl9LAorCXsgUjA5MDBfTkJJVEVSX05GNwksIDB4MzMJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjgJLCAweDMxCX0sCisJeyBSMDkwMF9OQklURVJfTkY5CSwgMHgyZgl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTAJLCAweDM5CX0sCisJeyBSMDkwMF9OQklURVJfTkYxMQksIDB4M2EJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjEyCSwgMHgyOQl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTMJLCAweDM3CX0sCisJeyBSMDkwMF9OQklURVJfTkYxNAksIDB4MzMJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjE1CSwgMHgyZgl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTYJLCAweDM5CX0sCisJeyBSMDkwMF9OQklURVJfTkYxNwksIDB4M2EJfSwKKwl7IFIwOTAwX05CSVRFUk5PRVJSCSwgMHgwNAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjQJLCAweDBDCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNQksIDB4MEYJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY2CSwgMHgxMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjcJLCAweDE0CX0sCisJeyBSMDkwMF9HQUlOTExSX05GOAksIDB4MTcJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY5CSwgMHgxOQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEwCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjExCSwgMHgyMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEyCSwgMHgwRAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEzCSwgMHgwRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE0CSwgMHgxMwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE1CSwgMHgxQQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE2CSwgMHgxRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE3CSwgMHgyMQl9LAorCXsgUjA5MDBfUkNDRkdICQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0ZFQ00JCSwgMHgwMQl9LCAvKmRpc2FibGUgRFNTIG1vZGVzKi8KKwl7IFIwOTAwX1AyX0ZFQ00JCSwgMHgwMQl9LCAvKmRpc2FibGUgRFNTIG1vZGVzKi8KKwl7IFIwOTAwX1AxX1BSVklUCSwgMHgyRgl9LCAvKmRpc2FibGUgcHVuY3R1cmUgcmF0ZSA2LzcqLworCXsgUjA5MDBfUDJfUFJWSVQJLCAweDJGCX0sIC8qZGlzYWJsZSBwdW5jdHVyZSByYXRlIDYvNyovCisJeyBSMDkwMF9TVFJPVVQxQ0ZHCSwgMHg0Ywl9LAorCXsgUjA5MDBfU1RST1VUMkNGRwksIDB4NGMJfSwKKwl7IFIwOTAwX0NMS09VVDFDRkcJLCAweDUwCX0sCisJeyBSMDkwMF9DTEtPVVQyQ0ZHCSwgMHg1MAl9LAorCXsgUjA5MDBfRFBOMUNGRwkJLCAweDRhCX0sCisJeyBSMDkwMF9EUE4yQ0ZHCQksIDB4NGEJfSwKKwl7IFIwOTAwX0RBVEE3MUNGRwksIDB4NTIJfSwKKwl7IFIwOTAwX0RBVEE3MkNGRwksIDB4NTIJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHTQksIDB4YzAJfSwKKwl7IFIwOTAwX1AyX1RTQ0ZHTQksIDB4YzAJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHSAksIDB4ZTAJfSwgLyogRFZCLUNJIHRpbWluZ3MgKi8KKwl7IFIwOTAwX1AyX1RTQ0ZHSAksIDB4ZTAJfSwgLyogRFZCLUNJIHRpbWluZ3MgKi8KKwl7IFIwOTAwX1AxX1RTU1BFRUQJLCAweDQwCX0sCisJeyBSMDkwMF9QMl9UU1NQRUVECSwgMHg0MAl9LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsWzMyXVsyXSA9IHsKKwl7IFIwOTAwX1AyX0RNRENGRzMJLCAweGU4CX0sCisJeyBSMDkwMF9QMl9ETURDRkc0CSwgMHgxMAl9LAorCXsgUjA5MDBfUDJfQ0FSRlJFUQksIDB4MzgJfSwKKwl7IFIwOTAwX1AyX0NBUkhEUgksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX0tSRUZUTUcJLCAweDVhCX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjcJLCAweDA2CX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjYJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjUJLCAweDA0CX0sCisJeyBSMDkwMF9QMl9OT1NDRkcJLCAweDBjCX0sCisJeyBSMDkwMF9QMV9ETURDRkczCSwgMHhlOAl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHNAksIDB4MTAJfSwKKwl7IFIwOTAwX1AxX0NBUkZSRVEJLCAweDM4CX0sCisJeyBSMDkwMF9QMV9DQVJIRFIJLCAweDIwCX0sCisJeyBSMDkwMF9QMV9LUkVGVE1HCSwgMHg1YQl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY3CSwgMHgwNgl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY2CSwgMHgwMAl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY1CSwgMHgwNAl9LAorCXsgUjA5MDBfUDFfTk9TQ0ZHCSwgMHgwYwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjQJLCAweDIxCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNQksIDB4MjEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY2CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjcJLCAweDFGCX0sCisJeyBSMDkwMF9HQUlOTExSX05GOAksIDB4MUUJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY5CSwgMHgxRQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEwCSwgMHgxRAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjExCSwgMHgxQgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEyCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEzCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE0CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE1CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE2CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE3CSwgMHgyMQl9CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmQ1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBzdHYwOTAwX3ByaXYuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfUFJJVl9ICisjZGVmaW5lIFNUVjA5MDBfUFJJVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2RlZmluZSBBQlMoWCkgKChYKSA8IDAgPyAoLTEgKiAoWCkpIDogKFgpKQorI2RlZmluZSBJTlJBTkdFKFgsIFksIFopICgoKChYKSA8PSAoWSkpICYmICgoWSkgPD0gKFopKSkgXAorCQl8fCAoKChaKSA8PSAoWSkpICYmICgoWSkgPD0gKFgpKSkgPyAxIDogMCkKKworI2lmbmRlZiBNQUtFV09SRAorI2RlZmluZSBNQUtFV09SRChYLCBZKSAoKChYKSA8PCA4KSArIChZKSkKKyNlbmRpZgorCisjZGVmaW5lIExTQihYKSAoKChYKSAmIDB4RkYpKQorI2RlZmluZSBNU0IoWSkgKCgoWSkgPj4gOCkgJiAweEZGKQorCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAoMSA9PSAxKQorI2VuZGlmCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICghVFJVRSkKKyNlbmRpZgorCisjZGVmaW5lCWRtZF9yZWcoYSwgYiwgYykgXAorCWRvIHsgXAorCQlhID0gMDsgXAorCQlzd2l0Y2ggKGRlbW9kKSB7IFwKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6IFwKKwkJZGVmYXVsdDogXAorCQkJYSA9IGI7IFwKKwkJCWJyZWFrOyBcCisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOiBcCisJCQlhID0gYzsgXAorCQkJYnJlYWs7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkbWRfY2hvb3NlKGEsIGIpCShkZW1vZCA9IFNUVjA5MDBfREVNT0RfMiA/IGIgOiBhKSkKKworc3RhdGljIGludCBzdHZkZWJ1ZzsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHN0dmRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RWMDkwMF9NQVhMT09LVVBTSVpFIDUwMAorI2RlZmluZSBTVFYwOTAwX0JMSU5EX1NFQVJDSF9BR0MyX1RIIDcwMAorCisvKiBPbmUgcG9pbnQgb2YgdGhlIGxvb2t1cCB0YWJsZSAqLworc3RydWN0IHN0djAwMF9sb29rcG9pbnQgeworCXMzMiByZWFsdmFsOy8qIHJlYWwgdmFsdWUgKi8KKwlzMzIgcmVndmFsOy8qIGJpbmFyeSB2YWx1ZSAqLworfTsKKworLyogTG9va3VwIHRhYmxlIGRlZmluaXRpb24gKi8KK3N0cnVjdCBzdHYwOTAwX3RhYmxleworCXMzMiBzaXplOy8qIFNpemUgb2YgdGhlIGxvb2t1cCB0YWJsZSAqLworCXN0cnVjdCBzdHYwMDBfbG9va3BvaW50IHRhYmxlW1NUVjA5MDBfTUFYTE9PS1VQU0laRV07LyogTG9va3VwIHRhYmxlICovCit9OworCitlbnVtIGZlX3N0djA5MDBfZXJyb3IgeworCVNUVjA5MDBfTk9fRVJST1IgPSAwLAorCVNUVjA5MDBfSU5WQUxJRF9IQU5ETEUsCisJU1RWMDkwMF9CQURfUEFSQU1FVEVSLAorCVNUVjA5MDBfSTJDX0VSUk9SLAorCVNUVjA5MDBfU0VBUkNIX0ZBSUxFRCwKK307CisKK2VudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlIHsKKwlTVFYwOTAwX1VTRV9SRUdJU1RFUlNfREVGQVVMVCwKKwlTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSywvKlNlcmlhbCBwdW5jdHVyZWQgY2xvY2sgKi8KKwlTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCVNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0ssLypQYXJhbGxlbCBwdW5jdHVyZWQgY2xvY2sgKi8KKwlTVFYwOTAwX0RWQkNJX0NMT0NLLypQYXJhbGxlbCBjb250aW51ZXMgY2xvY2sgOiBEVkJDSSAqLworfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZSB7CisJU1RWMDkwMF9TRUFSQ0ggPSAwLAorCVNUVjA5MDBfUExIX0RFVEVDVEVELAorCVNUVjA5MDBfRFZCUzJfRk9VTkQsCisJU1RWMDkwMF9EVkJTX0ZPVU5ECisKK307CisKK2VudW0gZmVfc3R2MDkwMF9sZHBjX3N0YXRlIHsKKwlTVFYwOTAwX1BBVEgxX09GRl9QQVRIMl9PRkYgPSAwLAorCVNUVjA5MDBfUEFUSDFfT05fUEFUSDJfT0ZGID0gMSwKKwlTVFYwOTAwX1BBVEgxX09GRl9QQVRIMl9PTiA9IDIsCisJU1RWMDkwMF9QQVRIMV9PTl9QQVRIMl9PTiA9IDMKK307CisKK2VudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSB7CisJU1RWMDkwMF9OT0FHQzEgPSAwLAorCVNUVjA5MDBfQUdDMU9LLAorCVNUVjA5MDBfTk9USU1JTkcsCisJU1RWMDkwMF9BTkFMT0dDQVJSSUVSLAorCVNUVjA5MDBfVElNSU5HT0ssCisJU1RWMDkwMF9OT0FHQzIsCisJU1RWMDkwMF9BR0MyT0ssCisJU1RWMDkwMF9OT0NBUlJJRVIsCisJU1RWMDkwMF9DQVJSSUVST0ssCisJU1RWMDkwMF9OT0RBVEEsCisJU1RWMDkwMF9EQVRBT0ssCisJU1RWMDkwMF9PVVRPRlJBTkdFLAorCVNUVjA5MDBfUkFOR0VPSworfTsKKworZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSB7CisJU1RWMDkwMF9ERU1PRF8xLAorCVNUVjA5MDBfREVNT0RfMgorfTsKKworZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHsKKwlTVFYwOTAwX0RWQlMxX1NUQU5EQVJELC8qIEZvdW5kIFN0YW5kYXJkKi8KKwlTVFYwOTAwX0RWQlMyX1NUQU5EQVJELAorCVNUVjA5MDBfRFNTX1NUQU5EQVJELAorCVNUVjA5MDBfVFVSQk9DT0RFX1NUQU5EQVJELAorCVNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRAorfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZCB7CisJU1RWMDkwMF9BVVRPX1NFQVJDSCwKKwlTVFYwOTAwX1NFQVJDSF9EVkJTMSwvKiBTZWFyY2ggU3RhbmRhcmQqLworCVNUVjA5MDBfU0VBUkNIX0RWQlMyLAorCVNUVjA5MDBfU0VBUkNIX0RTUywKKwlTVFYwOTAwX1NFQVJDSF9UVVJCT0NPREUKK307CisKK2VudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbyB7CisJU1RWMDkwMF9CTElORF9TRUFSQ0gsLyogb2Zmc2V0IGZyZXEgYW5kIFNSIGFyZSBVbmtub3duICovCisJU1RWMDkwMF9DT0xEX1NUQVJULC8qIG9ubHkgdGhlIFNSIGlzIGtub3duICovCisJU1RWMDkwMF9XQVJNX1NUQVJULyogb2Zmc2V0IGZyZXEgYW5kIFNSIGFyZSBrbm93biAqLworfTsKKworZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24geworCVNUVjA5MDBfUVBTSywKKwlTVFYwOTAwXzhQU0ssCisJU1RWMDkwMF8xNkFQU0ssCisJU1RWMDkwMF8zMkFQU0ssCisJU1RWMDkwMF9VTktOT1dOCit9OworCitlbnVtIGZlX3N0djA5MDBfbW9kY29kZSB7CisJU1RWMDkwMF9EVU1NWV9QTEYsCisJU1RWMDkwMF9RUFNLXzE0LAorCVNUVjA5MDBfUVBTS18xMywKKwlTVFYwOTAwX1FQU0tfMjUsCisJU1RWMDkwMF9RUFNLXzEyLAorCVNUVjA5MDBfUVBTS18zNSwKKwlTVFYwOTAwX1FQU0tfMjMsCisJU1RWMDkwMF9RUFNLXzM0LAorCVNUVjA5MDBfUVBTS180NSwKKwlTVFYwOTAwX1FQU0tfNTYsCisJU1RWMDkwMF9RUFNLXzg5LAorCVNUVjA5MDBfUVBTS185MTAsCisJU1RWMDkwMF84UFNLXzM1LAorCVNUVjA5MDBfOFBTS18yMywKKwlTVFYwOTAwXzhQU0tfMzQsCisJU1RWMDkwMF84UFNLXzU2LAorCVNUVjA5MDBfOFBTS184OSwKKwlTVFYwOTAwXzhQU0tfOTEwLAorCVNUVjA5MDBfMTZBUFNLXzIzLAorCVNUVjA5MDBfMTZBUFNLXzM0LAorCVNUVjA5MDBfMTZBUFNLXzQ1LAorCVNUVjA5MDBfMTZBUFNLXzU2LAorCVNUVjA5MDBfMTZBUFNLXzg5LAorCVNUVjA5MDBfMTZBUFNLXzkxMCwKKwlTVFYwOTAwXzMyQVBTS18zNCwKKwlTVFYwOTAwXzMyQVBTS180NSwKKwlTVFYwOTAwXzMyQVBTS181NiwKKwlTVFYwOTAwXzMyQVBTS184OSwKKwlTVFYwOTAwXzMyQVBTS185MTAsCisJU1RWMDkwMF9NT0RDT0RFX1VOS05PV04KK307CisKK2VudW0gZmVfc3R2MDkwMF9mZWMgey8qRFZCUzEsIERTUyBhbmQgdHVyYm8gY29kZSBwdW5jdHVyZSByYXRlKi8KKwlTVFYwOTAwX0ZFQ18xXzIgPSAwLAorCVNUVjA5MDBfRkVDXzJfMywKKwlTVFYwOTAwX0ZFQ18zXzQsCisJU1RWMDkwMF9GRUNfNF81LC8qZm9yIHR1cmJvIGNvZGUgb25seSovCisJU1RWMDkwMF9GRUNfNV82LAorCVNUVjA5MDBfRkVDXzZfNywvKmZvciBEU1Mgb25seSAqLworCVNUVjA5MDBfRkVDXzdfOCwKKwlTVFYwOTAwX0ZFQ184XzksLypmb3IgdHVyYm8gY29kZSBvbmx5Ki8KKwlTVFYwOTAwX0ZFQ19VTktOT1dOCit9OworCitlbnVtIGZlX3N0djA5MDBfZnJhbWVfbGVuZ3RoIHsKKwlTVFYwOTAwX0xPTkdfRlJBTUUsCisJU1RWMDkwMF9TSE9SVF9GUkFNRQorfTsKKworZW51bSBmZV9zdHYwOTAwX3BpbG90IHsKKwlTVFYwOTAwX1BJTE9UU19PRkYsCisJU1RWMDkwMF9QSUxPVFNfT04KK307CisKK2VudW0gZmVfc3R2MDkwMF9yb2xsb2ZmIHsKKwlTVFYwOTAwXzM1LAorCVNUVjA5MDBfMjUsCisJU1RWMDkwMF8yMAorfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcSB7CisJU1RWMDkwMF9JUV9BVVRPLAorCVNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QsCisJU1RWMDkwMF9JUV9GT1JDRV9OT1JNQUwsCisJU1RWMDkwMF9JUV9GT1JDRV9TV0FQUEVECit9OworCitlbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uIHsKKwlTVFYwOTAwX0lRX05PUk1BTCwKKwlTVFYwOTAwX0lRX1NXQVBQRUQKK307CisKK2VudW0gZmVfc3R2MDkwMF9kaXNlcWNfbW9kZSB7CisJU1RWMDkwMF8yMktIWl9Db250aW51ZXMgPSAwLAorCVNUVjA5MDBfRElTRVFDXzJfM19QV00gPSAyLAorCVNUVjA5MDBfRElTRVFDXzNfM19QV00gPSAzLAorCVNUVjA5MDBfRElTRVFDXzJfM19FTlZFTE9QID0gNCwKKwlTVFYwOTAwX0RJU0VRQ18zXzNfRU5WRUxPUCA9IDUKK307CisKK2VudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlIHsKKwlTVFYwOTAwX1NJTkdMRSA9IDAsCisJU1RWMDkwMF9EVUFMCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9pbml0X3BhcmFtc3sKKwl1MzIJZG1kX3JlZl9jbGs7LyogUmVmcmVuY2UsSW5wdXQgY2xvY2sgZm9yIHRoZSBkZW1vZCBpbiBIeiAqLworCisJLyogRGVtb2R1bGF0b3IgVHlwZSAoc2luZ2xlIGRlbW9kIG9yIGR1YWwgZGVtb2QpICovCisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUJZGVtb2RfbW9kZTsKKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZgkJcm9sbG9mZjsKKwllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZQlwYXRoMV90c19jbG9jazsKKworCXU4CXR1bjFfbWFkZHJlc3M7CisJaW50CXR1bmVyMV9hZGM7CisKKwkvKiBJUSBmcm9tIHRoZSB0dW5lcjEgdG8gdGhlIGRlbW9kICovCisJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4xX2lxX2ludmVyc2lvbjsKKwllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZQlwYXRoMl90c19jbG9jazsKKworCXU4CXR1bjJfbWFkZHJlc3M7CisJaW50CXR1bmVyMl9hZGM7CisKKwkvKiBJUSBmcm9tIHRoZSB0dW5lcjIgdG8gdGhlIGRlbW9kICovCisJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4yX2lxX2ludmVyc2lvbjsKK307CisKK3N0cnVjdCBzdHYwOTAwX3NlYXJjaF9wYXJhbXMgeworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0JcGF0aDsvKiBQYXRoIFVzZWQgZGVtb2QxIG9yIDIgKi8KKworCXUzMglmcmVxdWVuY3k7LyogVHJhbnNwb25kZXIgZnJlcXVlbmN5IChpbiBLSHopICovCisJdTMyCXN5bWJvbF9yYXRlOy8qIFRyYW5zcG9uZGVyIHN5bWJvbCByYXRlICAoaW4gYmRzKSovCisJdTMyCXNlYXJjaF9yYW5nZTsvKiBSYW5nZSBvZiB0aGUgc2VhcmNoIChpbiBIeikgKi8KKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJc3RhbmRhcmQ7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlmZWM7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUJCW1vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcQlpcV9pbnZlcnNpb247CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCXNlYXJjaF9hbGdvOworCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9zaWduYWxfaW5mbyB7CisJaW50CWxvY2tlZDsvKiBUcmFuc3BvbmRlciBsb2NrZWQgKi8KKwl1MzIJZnJlcXVlbmN5Oy8qIFRyYW5zcG9uZGVyIGZyZXF1ZW5jeSAoaW4gS0h6KSAqLworCXUzMglzeW1ib2xfcmF0ZTsvKiBUcmFuc3BvbmRlciBzeW1ib2wgcmF0ZSAgKGluIE1iZHMpICovCisKKwllbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQJc3RhbmRhcmQ7CisJZW51bSBmZV9zdHYwOTAwX2ZlYwkJCWZlYzsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJCW1vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JCW1vZHVsYXRpb247CisJZW51bSBmZV9zdHYwOTAwX3BpbG90CQkJcGlsb3Q7CisJZW51bSBmZV9zdHYwOTAwX2ZyYW1lX2xlbmd0aAkJZnJhbWVfbGVuZ3RoOworCWVudW0gc3R2MDkwMF9pcV9pbnZlcnNpb24JCXNwZWN0cnVtOworCWVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmCQkJcm9sbG9mZjsKKworCXMzMiBQb3dlcjsvKiBQb3dlciBvZiB0aGUgUkYgc2lnbmFsIChkQm0pICovCisJczMyIENfTjsvKiBDYXJyaWVyIHRvIG5vaXNlIHJhdGlvIChkQiB4MTApKi8KKwl1MzIgQkVSOy8qIEJpdCBlcnJvciByYXRlICh4MTBeNykgKi8KKworfTsKKworc3RydWN0IHN0djA5MDBfaW50ZXJuYWx7CisJczMyCXF1YXJ0ejsKKwlzMzIJbWNsazsKKwkvKiBtYW51YWwgUm9sbE9mZiBmb3IgRFZCUzEvRFNTIG9ubHkgKi8KKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZgkJcm9sbG9mZjsKKwkvKiBEZW1vZHVsYXRvciB1c2UgZm9yIHNpbmdsZSBkZW1vZCBvciBmb3IgZHVhbCBkZW1vZCkgKi8KKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbW9kZQlkZW1vZF9tb2RlOworCisJLypEZW1vZCAxKi8KKwlzMzIJdHVuZXIxX2ZyZXE7CisJczMyCXR1bmVyMV9idzsKKwlzMzIJZG1kMV9zeW1ib2xfcmF0ZTsKKwlzMzIJZG1kMV9zcmNoX3JhbmdlOworCisJLyogYWxnb3JpdGhtIGZvciBzZWFyY2ggQmxpbmQsIENvbGQgb3IgV2FybSovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCWRtZDFfc3JjaF9hbGdvOworCS8qIHNlYXJjaCBzdGFuZGFyZDogQXV0bywgRFZCUzEvRFNTIG9ubHkgb3IgRFZCUzIgb25seSovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZAlkbWQxX3NyY2hfc3RhbmRhcmQ7CisJLyogaW52ZXJzaW9uIHNlYXJjaCA6IGF1dG8sIGF1dG8gbm9ybWEgZmlyc3QsIG5vcm1hbCBvciBpbnZlcnRlZCAqLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEJZG1kMV9zcmNoX2lxX2ludjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJZG1kMV9tb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCWRtZDFfbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlkbWQxX2ZlYzsKKworCXN0cnVjdCBzdHYwOTAwX3NpZ25hbF9pbmZvCWRtZDFfcnNsdHM7CisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlCWRtZDFfc3RhdGU7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJCWRtZDFfZXJyOworCisJLypEZW1vZCAyKi8KKwlzMzIJdHVuZXIyX2ZyZXE7CisJczMyCXR1bmVyMl9idzsKKwlzMzIJZG1kMl9zeW1ib2xfcmF0ZTsKKwlzMzIJZG1kMl9zcmNoX3JhbmdlOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCWRtZDJfc3JjaF9hbGdvOworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJZG1kMl9zcmNoX3N0bmRyZDsKKwkvKiBpbnZlcnNpb24gc2VhcmNoIDogYXV0bywgYXV0byBub3JtYWwgZmlyc3QsIG5vcm1hbCBvciBpbnZlcnRlZCAqLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEJZG1kMl9zcmNoX2lxX2ludjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJZG1kMl9tb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCWRtZDJfbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlkbWQyX2ZlYzsKKworCS8qIHJlc3VsdHMgb2YgdGhlIHNlYXJjaCovCisJc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8JZG1kMl9yc2x0czsKKwkvKiBjdXJyZW50IHN0YXRlIG9mIHRoZSBzZWFyY2ggYWxnb3JpdGhtICovCisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlCWRtZDJfc3RhdGU7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJCWRtZDJfZXJyOworCisJc3RydWN0IGkyY19hZGFwdGVyCSppMmNfYWRhcDsKKwl1OAkJCWkyY19hZGRyOworCXU4CQkJY2xrbW9kZTsvKiAwIGZvciBDTEtJLCAyIGZvciBYVEFMSSAqLworCXU4CQkJY2hpcF9pZDsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJZXJyczsKKwlpbnQgZG1kc191c2VkOworfTsKKworLyogc3RhdGUgZm9yIGVhY2ggZGVtb2QgKi8KK3N0cnVjdCBzdHYwOTAwX3N0YXRlIHsKKwkvKiBwb2ludGVyIGZvciBpbnRlcm5hbCBwYXJhbXMsIG9uZSBmb3IgZWFjaCBwYWlyIG9mIGRlbW9kcyAqLworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsCQkqaW50ZXJuYWw7CisJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjX2FkYXA7CisJY29uc3Qgc3RydWN0IHN0djA5MDBfY29uZmlnCSpjb25maWc7CisJc3RydWN0IGR2Yl9mcm9udGVuZAkJZnJvbnRlbmQ7CisJaW50IGRlbW9kOworfTsKKworZXh0ZXJuIHMzMiBnZTJjb21wKHMzMiBhLCBzMzIgd2lkdGgpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJdTE2IHJlZ19hZGRyLCB1OCByZWdfZGF0YSk7CisKK2V4dGVybiB1OCBzdHYwOTAwX3JlYWRfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQl1MTYgcmVnX2FkZHIpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3dyaXRlX2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUzMiBsYWJlbCwgdTggdmFsKTsKKworZXh0ZXJuIHU4IHN0djA5MDBfZ2V0X2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUzMiBsYWJlbCk7CisKK2V4dGVybiBpbnQgc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCwgczMyIHRpbWVfb3V0KTsKK2V4dGVybiBpbnQgc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2Uoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfc2V0X3R1bmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5LAorCQkJCXUzMiBiYW5kd2lkdGgpOworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zdGFydF9zZWFyY2goc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gdTggc3R2MDkwMF9nZXRfb3B0aW1fY2Fycl9sb29wKHMzMiBzcmF0ZSwKKwkJCQllbnVtIGZlX3N0djA5MDBfbW9kY29kZSBtb2Rjb2RlLAorCQkJCXMzMiBwaWxvdCwgdTggY2hpcF9pZCk7CisKK2V4dGVybiB1OCBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3AoczMyIHNyYXRlLAorCQkJCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uIG1vZHVsYXRpb24sCisJCQkJdTggY2hpcF9pZCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiBlbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRmOWNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKQEAgLTAsMCArMSwzNzg3IEBACisvKgorICogc3R2MDkwMF9yZWcuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfUkVHX0gKKyNkZWZpbmUgU1RWMDkwMF9SRUdfSAorCisvKk1JRCovCisjZGVmaW5lIFIwOTAwX01JRCAgMHhmMTAwCisjZGVmaW5lIEYwOTAwX01DSElQX0lERU5UICAweGYxMDAwMGYwCisjZGVmaW5lIEYwOTAwX01SRUxFQVNFICAweGYxMDAwMDBmCisKKy8qREFDUjEqLworI2RlZmluZSBSMDkwMF9EQUNSMSAgMHhmMTEzCisjZGVmaW5lIEYwOTAwX0RBQ19NT0RFICAweGYxMTMwMGUwCisjZGVmaW5lIEYwOTAwX0RBQ19WQUxVRTEgIDB4ZjExMzAwMGYKKworLypEQUNSMiovCisjZGVmaW5lIFIwOTAwX0RBQ1IyICAweGYxMTQKKyNkZWZpbmUgRjA5MDBfREFDX1ZBTFVFMCAgMHhmMTE0MDBmZgorCisvKk9VVENGRyovCisjZGVmaW5lIFIwOTAwX09VVENGRyAgMHhmMTFjCisjZGVmaW5lIEYwOTAwX0lOVl9EQVRBNiAgMHhmMTFjMDA4MAorI2RlZmluZSBGMDkwMF9PVVRTRVJSUzFfSFogIDB4ZjExYzAwNDAKKyNkZWZpbmUgRjA5MDBfT1VUU0VSUlMyX0haICAweGYxMWMwMDIwCisjZGVmaW5lIEYwOTAwX09VVFNFUlJTM19IWiAgMHhmMTFjMDAxMAorI2RlZmluZSBGMDkwMF9PVVRQQVJSUzNfSFogIDB4ZjExYzAwMDgKKyNkZWZpbmUgRjA5MDBfT1VUSFozX0NPTlRST0wgIDB4ZjExYzAwMDcKKworLypNT0RFQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfTU9ERUNGRyAgMHhmMTFkCisjZGVmaW5lIEYwOTAwX0ZFQ1NQWV9TRUxfMiAgMHhmMTFkMDAyMAorI2RlZmluZSBGMDkwMF9IV0FSRV9TRUxfMiAgMHhmMTFkMDAxMAorI2RlZmluZSBGMDkwMF9QS1RERUxfU0VMXzIgIDB4ZjExZDAwMDgKKyNkZWZpbmUgRjA5MDBfRElTRVFDX1NFTF8yICAweGYxMWQwMDA0CisjZGVmaW5lIEYwOTAwX1ZJVF9TRUxfMiAgMHhmMTFkMDAwMgorI2RlZmluZSBGMDkwMF9ERU1PRF9TRUxfMiAgMHhmMTFkMDAwMQorCisvKklSUVNUQVRVUzMqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMzICAweGYxMjAKKyNkZWZpbmUgRjA5MDBfU1BMTF9MT0NLICAweGYxMjAwMDIwCisjZGVmaW5lIEYwOTAwX1NTVFJFQU1fTENLXzMgIDB4ZjEyMDAwMTAKKyNkZWZpbmUgRjA5MDBfU1NUUkVBTV9MQ0tfMiAgMHhmMTIwMDAwOAorI2RlZmluZSBGMDkwMF9TU1RSRUFNX0xDS18xICAweGYxMjAwMDA0CisjZGVmaW5lIEYwOTAwX1NEVkJTMV9QUkZfMiAgMHhmMTIwMDAwMgorI2RlZmluZSBGMDkwMF9TRFZCUzFfUFJGXzEgIDB4ZjEyMDAwMDEKKworLypJUlFTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfSVJRU1RBVFVTMiAgMHhmMTIxCisjZGVmaW5lIEYwOTAwX1NTUFlfRU5EU0lNXzMgIDB4ZjEyMTAwODAKKyNkZWZpbmUgRjA5MDBfU1NQWV9FTkRTSU1fMiAgMHhmMTIxMDA0MAorI2RlZmluZSBGMDkwMF9TU1BZX0VORFNJTV8xICAweGYxMjEwMDIwCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfRVJST1JfMiAgMHhmMTIxMDAxMAorI2RlZmluZSBGMDkwMF9TUEtUREVMX0xPQ0tCXzIgIDB4ZjEyMTAwMDgKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLXzIgIDB4ZjEyMTAwMDQKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9FUlJPUl8xICAweGYxMjEwMDAyCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfTE9DS0JfMSAgMHhmMTIxMDAwMQorCisvKklSUVNUQVRVUzEqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMxICAweGYxMjIKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLXzEgIDB4ZjEyMjAwODAKKyNkZWZpbmUgRjA5MDBfU0VYVFBJTkIyICAweGYxMjIwMDQwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU4yICAweGYxMjIwMDIwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU5CMSAgMHhmMTIyMDAxMAorI2RlZmluZSBGMDkwMF9TRVhUUElOMSAgMHhmMTIyMDAwOAorI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS0JfMiAgMHhmMTIyMDAwNAorI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS18yICAweGYxMjIwMDAyCisjZGVmaW5lIEYwOTAwX1NERU1PRF9JUlFfMiAgMHhmMTIyMDAwMQorCisvKklSUVNUQVRVUzAqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMwICAweGYxMjMKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tCXzEgIDB4ZjEyMzAwODAKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tfMSAgMHhmMTIzMDA0MAorI2RlZmluZSBGMDkwMF9TREVNT0RfSVJRXzEgIDB4ZjEyMzAwMjAKKyNkZWZpbmUgRjA5MDBfU0JDSF9FUlJGTEFHICAweGYxMjMwMDEwCisjZGVmaW5lIEYwOTAwX1NESVNFUUMyUlhfSVJRICAweGYxMjMwMDA4CisjZGVmaW5lIEYwOTAwX1NESVNFUUMyVFhfSVJRICAweGYxMjMwMDA0CisjZGVmaW5lIEYwOTAwX1NESVNFUUMxUlhfSVJRICAweGYxMjMwMDAyCisjZGVmaW5lIEYwOTAwX1NESVNFUUMxVFhfSVJRICAweGYxMjMwMDAxCisKKy8qSVJRTUFTSzMqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMyAgMHhmMTI0CisjZGVmaW5lIEYwOTAwX01QTExfTE9DSyAgMHhmMTI0MDAyMAorI2RlZmluZSBGMDkwMF9NU1RSRUFNX0xDS18zICAweGYxMjQwMDEwCisjZGVmaW5lIEYwOTAwX01TVFJFQU1fTENLXzIgIDB4ZjEyNDAwMDgKKyNkZWZpbmUgRjA5MDBfTVNUUkVBTV9MQ0tfMSAgMHhmMTI0MDAwNAorI2RlZmluZSBGMDkwMF9NRFZCUzFfUFJGXzIgIDB4ZjEyNDAwMDIKKyNkZWZpbmUgRjA5MDBfTURWQlMxX1BSRl8xICAweGYxMjQwMDAxCisKKy8qSVJRTUFTSzIqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMiAgMHhmMTI1CisjZGVmaW5lIEYwOTAwX01TUFlfRU5EU0lNXzMgIDB4ZjEyNTAwODAKKyNkZWZpbmUgRjA5MDBfTVNQWV9FTkRTSU1fMiAgMHhmMTI1MDA0MAorI2RlZmluZSBGMDkwMF9NU1BZX0VORFNJTV8xICAweGYxMjUwMDIwCisjZGVmaW5lIEYwOTAwX01QS1RERUxfRVJST1JfMiAgMHhmMTI1MDAxMAorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tCXzIgIDB4ZjEyNTAwMDgKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9MT0NLXzIgIDB4ZjEyNTAwMDQKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9FUlJPUl8xICAweGYxMjUwMDAyCisjZGVmaW5lIEYwOTAwX01QS1RERUxfTE9DS0JfMSAgMHhmMTI1MDAwMQorCisvKklSUU1BU0sxKi8KKyNkZWZpbmUgUjA5MDBfSVJRTUFTSzEgIDB4ZjEyNgorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tfMSAgMHhmMTI2MDA4MAorI2RlZmluZSBGMDkwMF9NRVhUUElOQjIgIDB4ZjEyNjAwNDAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTjIgIDB4ZjEyNjAwMjAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTkIxICAweGYxMjYwMDEwCisjZGVmaW5lIEYwOTAwX01FWFRQSU4xICAweGYxMjYwMDA4CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLQl8yICAweGYxMjYwMDA0CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLXzIgIDB4ZjEyNjAwMDIKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0lSUV8yICAweGYxMjYwMDAxCisKKy8qSVJRTUFTSzAqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMCAgMHhmMTI3CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLQl8xICAweGYxMjcwMDgwCisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLXzEgIDB4ZjEyNzAwNDAKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0lSUV8xICAweGYxMjcwMDIwCisjZGVmaW5lIEYwOTAwX01CQ0hfRVJSRkxBRyAgMHhmMTI3MDAxMAorI2RlZmluZSBGMDkwMF9NRElTRVFDMlJYX0lSUSAgMHhmMTI3MDAwOAorI2RlZmluZSBGMDkwMF9NRElTRVFDMlRYX0lSUSAgMHhmMTI3MDAwNAorI2RlZmluZSBGMDkwMF9NRElTRVFDMVJYX0lSUSAgMHhmMTI3MDAwMgorI2RlZmluZSBGMDkwMF9NRElTRVFDMVRYX0lSUSAgMHhmMTI3MDAwMQorCisvKkkyQ0NGRyovCisjZGVmaW5lIFIwOTAwX0kyQ0NGRyAgMHhmMTI5CisjZGVmaW5lIEYwOTAwX0kyQzJfRkFTVE1PREUgIDB4ZjEyOTAwODAKKyNkZWZpbmUgRjA5MDBfU1RBVFVTX1dSMiAgMHhmMTI5MDA0MAorI2RlZmluZSBGMDkwMF9JMkMyQUREUl9JTkMgIDB4ZjEyOTAwMzAKKyNkZWZpbmUgRjA5MDBfSTJDX0ZBU1RNT0RFICAweGYxMjkwMDA4CisjZGVmaW5lIEYwOTAwX1NUQVRVU19XUiAgMHhmMTI5MDAwNAorI2RlZmluZSBGMDkwMF9JMkNBRERSX0lOQyAgMHhmMTI5MDAwMworCisvKlAxX0kyQ1JQVCovCisjZGVmaW5lIFIwOTAwX1AxX0kyQ1JQVCAgMHhmMTJhCisjZGVmaW5lIEYwOTAwX1AxX0kyQ1RfT04gIDB4ZjEyYTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRU5BUlBUX0xFVkVMICAweGYxMmEwMDcwCisjZGVmaW5lIEYwOTAwX1AxX1NDTFRfREVMQVkgIDB4ZjEyYTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9FTkFCTEUgIDB4ZjEyYTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9TREFUMlNEQSAgMHhmMTJhMDAwMgorCisvKlAyX0kyQ1JQVCovCisjZGVmaW5lIFIwOTAwX1AyX0kyQ1JQVCAgMHhmMTJiCisjZGVmaW5lIEYwOTAwX1AyX0kyQ1RfT04gIDB4ZjEyYjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRU5BUlBUX0xFVkVMICAweGYxMmIwMDcwCisjZGVmaW5lIEYwOTAwX1AyX1NDTFRfREVMQVkgIDB4ZjEyYjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9FTkFCTEUgIDB4ZjEyYjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9TREFUMlNEQSAgMHhmMTJiMDAwMgorCisvKkNMS0kyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLSTJDRkcgIDB4ZjE0MAorI2RlZmluZSBGMDkwMF9DTEtJMl9PUEQgIDB4ZjE0MDAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLSTJfQ09ORklHICAweGYxNDAwMDdlCisjZGVmaW5lIEYwOTAwX0NMS0kyX1hPUiAgMHhmMTQwMDAwMQorCisvKkdQSU8xQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzFDRkcgIDB4ZjE0MQorI2RlZmluZSBGMDkwMF9HUElPMV9PUEQgIDB4ZjE0MTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzFfQ09ORklHICAweGYxNDEwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xX1hPUiAgMHhmMTQxMDAwMQorCisvKkdQSU8yQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzJDRkcgIDB4ZjE0MgorI2RlZmluZSBGMDkwMF9HUElPMl9PUEQgIDB4ZjE0MjAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzJfQ09ORklHICAweGYxNDIwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8yX1hPUiAgMHhmMTQyMDAwMQorCisvKkdQSU8zQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzNDRkcgIDB4ZjE0MworI2RlZmluZSBGMDkwMF9HUElPM19PUEQgIDB4ZjE0MzAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzNfQ09ORklHICAweGYxNDMwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8zX1hPUiAgMHhmMTQzMDAwMQorCisvKkdQSU80Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzRDRkcgIDB4ZjE0NAorI2RlZmluZSBGMDkwMF9HUElPNF9PUEQgIDB4ZjE0NDAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzRfQ09ORklHICAweGYxNDQwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU80X1hPUiAgMHhmMTQ0MDAwMQorCisvKkdQSU81Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzVDRkcgIDB4ZjE0NQorI2RlZmluZSBGMDkwMF9HUElPNV9PUEQgIDB4ZjE0NTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzVfQ09ORklHICAweGYxNDUwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU81X1hPUiAgMHhmMTQ1MDAwMQorCisvKkdQSU82Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzZDRkcgIDB4ZjE0NgorI2RlZmluZSBGMDkwMF9HUElPNl9PUEQgIDB4ZjE0NjAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzZfQ09ORklHICAweGYxNDYwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU82X1hPUiAgMHhmMTQ2MDAwMQorCisvKkdQSU83Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzdDRkcgIDB4ZjE0NworI2RlZmluZSBGMDkwMF9HUElPN19PUEQgIDB4ZjE0NzAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzdfQ09ORklHICAweGYxNDcwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU83X1hPUiAgMHhmMTQ3MDAwMQorCisvKkdQSU84Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzhDRkcgIDB4ZjE0OAorI2RlZmluZSBGMDkwMF9HUElPOF9PUEQgIDB4ZjE0ODAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzhfQ09ORklHICAweGYxNDgwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU84X1hPUiAgMHhmMTQ4MDAwMQorCisvKkdQSU85Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzlDRkcgIDB4ZjE0OQorI2RlZmluZSBGMDkwMF9HUElPOV9PUEQgIDB4ZjE0OTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzlfQ09ORklHICAweGYxNDkwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU85X1hPUiAgMHhmMTQ5MDAwMQorCisvKkdQSU8xMENGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xMENGRyAgMHhmMTRhCisjZGVmaW5lIEYwOTAwX0dQSU8xMF9PUEQgIDB4ZjE0YTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzEwX0NPTkZJRyAgMHhmMTRhMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTBfWE9SICAweGYxNGEwMDAxCisKKy8qR1BJTzExQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzExQ0ZHICAweGYxNGIKKyNkZWZpbmUgRjA5MDBfR1BJTzExX09QRCAgMHhmMTRiMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMTFfQ09ORklHICAweGYxNGIwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xMV9YT1IgIDB4ZjE0YjAwMDEKKworLypHUElPMTJDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMTJDRkcgIDB4ZjE0YworI2RlZmluZSBGMDkwMF9HUElPMTJfT1BEICAweGYxNGMwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xMl9DT05GSUcgIDB4ZjE0YzAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzEyX1hPUiAgMHhmMTRjMDAwMQorCisvKkdQSU8xM0NGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xM0NGRyAgMHhmMTRkCisjZGVmaW5lIEYwOTAwX0dQSU8xM19PUEQgIDB4ZjE0ZDAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzEzX0NPTkZJRyAgMHhmMTRkMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTNfWE9SICAweGYxNGQwMDAxCisKKy8qQ1MwQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ1MwQ0ZHICAweGYxNGUKKyNkZWZpbmUgRjA5MDBfQ1MwX09QRCAgMHhmMTRlMDA4MAorI2RlZmluZSBGMDkwMF9DUzBfQ09ORklHICAweGYxNGUwMDdlCisjZGVmaW5lIEYwOTAwX0NTMF9YT1IgIDB4ZjE0ZTAwMDEKKworLypDUzFDRkcqLworI2RlZmluZSBSMDkwMF9DUzFDRkcgIDB4ZjE0ZgorI2RlZmluZSBGMDkwMF9DUzFfT1BEICAweGYxNGYwMDgwCisjZGVmaW5lIEYwOTAwX0NTMV9DT05GSUcgIDB4ZjE0ZjAwN2UKKyNkZWZpbmUgRjA5MDBfQ1MxX1hPUiAgMHhmMTRmMDAwMQorCisvKlNUREJZQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1REQllDRkcgIDB4ZjE1MAorI2RlZmluZSBGMDkwMF9TVERCWV9PUEQgIDB4ZjE1MDAwODAKKyNkZWZpbmUgRjA5MDBfU1REQllfQ09ORklHICAweGYxNTAwMDdlCisjZGVmaW5lIEYwOTAwX1NUQkRZX1hPUiAgMHhmMTUwMDAwMQorCisvKkRJUkNMS0NGRyovCisjZGVmaW5lIFIwOTAwX0RJUkNMS0NGRyAgMHhmMTUxCisjZGVmaW5lIEYwOTAwX0RJUkNMS19PUEQgIDB4ZjE1MTAwODAKKyNkZWZpbmUgRjA5MDBfRElSQ0xLX0NPTkZJRyAgMHhmMTUxMDA3ZQorI2RlZmluZSBGMDkwMF9ESVJDTEtfWE9SICAweGYxNTEwMDAxCisKKy8qQUdDUkYxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQUdDUkYxQ0ZHICAweGYxNTIKKyNkZWZpbmUgRjA5MDBfQUdDUkYxX09QRCAgMHhmMTUyMDA4MAorI2RlZmluZSBGMDkwMF9BR0NSRjFfQ09ORklHICAweGYxNTIwMDdlCisjZGVmaW5lIEYwOTAwX0FHQ1JGMV9YT1IgIDB4ZjE1MjAwMDEKKworLypTREFUMUNGRyovCisjZGVmaW5lIFIwOTAwX1NEQVQxQ0ZHICAweGYxNTMKKyNkZWZpbmUgRjA5MDBfU0RBVDFfT1BEICAweGYxNTMwMDgwCisjZGVmaW5lIEYwOTAwX1NEQVQxX0NPTkZJRyAgMHhmMTUzMDA3ZQorI2RlZmluZSBGMDkwMF9TREFUMV9YT1IgIDB4ZjE1MzAwMDEKKworLypTQ0xUMUNGRyovCisjZGVmaW5lIFIwOTAwX1NDTFQxQ0ZHICAweGYxNTQKKyNkZWZpbmUgRjA5MDBfU0NMVDFfT1BEICAweGYxNTQwMDgwCisjZGVmaW5lIEYwOTAwX1NDTFQxX0NPTkZJRyAgMHhmMTU0MDA3ZQorI2RlZmluZSBGMDkwMF9TQ0xUMV9YT1IgIDB4ZjE1NDAwMDEKKworLypESVNFUUNPMUNGRyovCisjZGVmaW5lIFIwOTAwX0RJU0VRQ08xQ0ZHICAweGYxNTUKKyNkZWZpbmUgRjA5MDBfRElTRVFDTzFfT1BEICAweGYxNTUwMDgwCisjZGVmaW5lIEYwOTAwX0RJU0VRQ08xX0NPTkZJRyAgMHhmMTU1MDA3ZQorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1hPUiAgMHhmMTU1MDAwMQorCisvKkFHQ1JGMkNGRyovCisjZGVmaW5lIFIwOTAwX0FHQ1JGMkNGRyAgMHhmMTU2CisjZGVmaW5lIEYwOTAwX0FHQ1JGMl9PUEQgIDB4ZjE1NjAwODAKKyNkZWZpbmUgRjA5MDBfQUdDUkYyX0NPTkZJRyAgMHhmMTU2MDA3ZQorI2RlZmluZSBGMDkwMF9BR0NSRjJfWE9SICAweGYxNTYwMDAxCisKKy8qU0RBVDJDRkcqLworI2RlZmluZSBSMDkwMF9TREFUMkNGRyAgMHhmMTU3CisjZGVmaW5lIEYwOTAwX1NEQVQyX09QRCAgMHhmMTU3MDA4MAorI2RlZmluZSBGMDkwMF9TREFUMl9DT05GSUcgIDB4ZjE1NzAwN2UKKyNkZWZpbmUgRjA5MDBfU0RBVDJfWE9SICAweGYxNTcwMDAxCisKKy8qU0NMVDJDRkcqLworI2RlZmluZSBSMDkwMF9TQ0xUMkNGRyAgMHhmMTU4CisjZGVmaW5lIEYwOTAwX1NDTFQyX09QRCAgMHhmMTU4MDA4MAorI2RlZmluZSBGMDkwMF9TQ0xUMl9DT05GSUcgIDB4ZjE1ODAwN2UKKyNkZWZpbmUgRjA5MDBfU0NMVDJfWE9SICAweGYxNTgwMDAxCisKKy8qRElTRVFDTzJDRkcqLworI2RlZmluZSBSMDkwMF9ESVNFUUNPMkNGRyAgMHhmMTU5CisjZGVmaW5lIEYwOTAwX0RJU0VRQ08yX09QRCAgMHhmMTU5MDA4MAorI2RlZmluZSBGMDkwMF9ESVNFUUNPMl9DT05GSUcgIDB4ZjE1OTAwN2UKKyNkZWZpbmUgRjA5MDBfRElTRVFDMl9YT1IgIDB4ZjE1OTAwMDEKKworLypDTEtPVVQyN0NGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDI3Q0ZHICAweGYxNWEKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMjdfT1BEICAweGYxNWEwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDI3X0NPTkZJRyAgMHhmMTVhMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQyN19YT1IgIDB4ZjE1YTAwMDEKKworLypFUlJPUjFDRkcqLworI2RlZmluZSBSMDkwMF9FUlJPUjFDRkcgIDB4ZjE1YgorI2RlZmluZSBGMDkwMF9FUlJPUjFfT1BEICAweGYxNWIwMDgwCisjZGVmaW5lIEYwOTAwX0VSUk9SMV9DT05GSUcgIDB4ZjE1YjAwN2UKKyNkZWZpbmUgRjA5MDBfRVJST1IxX1hPUiAgMHhmMTViMDAwMQorCisvKkRQTjFDRkcqLworI2RlZmluZSBSMDkwMF9EUE4xQ0ZHICAweGYxNWMKKyNkZWZpbmUgRjA5MDBfRFBOMV9PUEQgIDB4ZjE1YzAwODAKKyNkZWZpbmUgRjA5MDBfRFBOMV9DT05GSUcgIDB4ZjE1YzAwN2UKKyNkZWZpbmUgRjA5MDBfRFBOMV9YT1IgIDB4ZjE1YzAwMDEKKworLypTVFJPVVQxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1RST1VUMUNGRyAgMHhmMTVkCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfT1BEICAweGYxNWQwMDgwCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfQ09ORklHICAweGYxNWQwMDdlCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfWE9SICAweGYxNWQwMDAxCisKKy8qQ0xLT1VUMUNGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDFDRkcgIDB4ZjE1ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQxX09QRCAgMHhmMTVlMDA4MAorI2RlZmluZSBGMDkwMF9DTEtPVVQxX0NPTkZJRyAgMHhmMTVlMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQxX1hPUiAgMHhmMTVlMDAwMQorCisvKkRBVEE3MUNGRyovCisjZGVmaW5lIFIwOTAwX0RBVEE3MUNGRyAgMHhmMTVmCisjZGVmaW5lIEYwOTAwX0RBVEE3MV9PUEQgIDB4ZjE1ZjAwODAKKyNkZWZpbmUgRjA5MDBfREFUQTcxX0NPTkZJRyAgMHhmMTVmMDA3ZQorI2RlZmluZSBGMDkwMF9EQVRBNzFfWE9SICAweGYxNWYwMDAxCisKKy8qRVJST1IyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRVJST1IyQ0ZHICAweGYxNjAKKyNkZWZpbmUgRjA5MDBfRVJST1IyX09QRCAgMHhmMTYwMDA4MAorI2RlZmluZSBGMDkwMF9FUlJPUjJfQ09ORklHICAweGYxNjAwMDdlCisjZGVmaW5lIEYwOTAwX0VSUk9SMl9YT1IgIDB4ZjE2MDAwMDEKKworLypEUE4yQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRFBOMkNGRyAgMHhmMTYxCisjZGVmaW5lIEYwOTAwX0RQTjJfT1BEICAweGYxNjEwMDgwCisjZGVmaW5lIEYwOTAwX0RQTjJfQ09ORklHICAweGYxNjEwMDdlCisjZGVmaW5lIEYwOTAwX0RQTjJfWE9SICAweGYxNjEwMDAxCisKKy8qU1RST1VUMkNGRyovCisjZGVmaW5lIFIwOTAwX1NUUk9VVDJDRkcgIDB4ZjE2MgorI2RlZmluZSBGMDkwMF9TVFJPVVQyX09QRCAgMHhmMTYyMDA4MAorI2RlZmluZSBGMDkwMF9TVFJPVVQyX0NPTkZJRyAgMHhmMTYyMDA3ZQorI2RlZmluZSBGMDkwMF9TVFJPVVQyX1hPUiAgMHhmMTYyMDAwMQorCisvKkNMS09VVDJDRkcqLworI2RlZmluZSBSMDkwMF9DTEtPVVQyQ0ZHICAweGYxNjMKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9PUEQgIDB4ZjE2MzAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9DT05GSUcgIDB4ZjE2MzAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9YT1IgIDB4ZjE2MzAwMDEKKworLypEQVRBNzJDRkcqLworI2RlZmluZSBSMDkwMF9EQVRBNzJDRkcgIDB4ZjE2NAorI2RlZmluZSBGMDkwMF9EQVRBNzJfT1BEICAweGYxNjQwMDgwCisjZGVmaW5lIEYwOTAwX0RBVEE3Ml9DT05GSUcgIDB4ZjE2NDAwN2UKKyNkZWZpbmUgRjA5MDBfREFUQTcyX1hPUiAgMHhmMTY0MDAwMQorCisvKkVSUk9SM0NGRyovCisjZGVmaW5lIFIwOTAwX0VSUk9SM0NGRyAgMHhmMTY1CisjZGVmaW5lIEYwOTAwX0VSUk9SM19PUEQgIDB4ZjE2NTAwODAKKyNkZWZpbmUgRjA5MDBfRVJST1IzX0NPTkZJRyAgMHhmMTY1MDA3ZQorI2RlZmluZSBGMDkwMF9FUlJPUjNfWE9SICAweGYxNjUwMDAxCisKKy8qRFBOM0NGRyovCisjZGVmaW5lIFIwOTAwX0RQTjNDRkcgIDB4ZjE2NgorI2RlZmluZSBGMDkwMF9EUE4zX09QRCAgMHhmMTY2MDA4MAorI2RlZmluZSBGMDkwMF9EUE4zX0NPTkZJRyAgMHhmMTY2MDA3ZQorI2RlZmluZSBGMDkwMF9EUE4zX1hPUiAgMHhmMTY2MDAwMQorCisvKlNUUk9VVDNDRkcqLworI2RlZmluZSBSMDkwMF9TVFJPVVQzQ0ZHICAweGYxNjcKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19PUEQgIDB4ZjE2NzAwODAKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19DT05GSUcgIDB4ZjE2NzAwN2UKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19YT1IgIDB4ZjE2NzAwMDEKKworLypDTEtPVVQzQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLT1VUM0NGRyAgMHhmMTY4CisjZGVmaW5lIEYwOTAwX0NMS09VVDNfT1BEICAweGYxNjgwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDNfQ09ORklHICAweGYxNjgwMDdlCisjZGVmaW5lIEYwOTAwX0NMS09VVDNfWE9SICAweGYxNjgwMDAxCisKKy8qREFUQTczQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfREFUQTczQ0ZHICAweGYxNjkKKyNkZWZpbmUgRjA5MDBfREFUQTczX09QRCAgMHhmMTY5MDA4MAorI2RlZmluZSBGMDkwMF9EQVRBNzNfQ09ORklHICAweGYxNjkwMDdlCisjZGVmaW5lIEYwOTAwX0RBVEE3M19YT1IgIDB4ZjE2OTAwMDEKKworLypGU0tURkMyKi8KKyNkZWZpbmUgUjA5MDBfRlNLVEZDMiAgMHhmMTcwCisjZGVmaW5lIEYwOTAwX0ZTS1RfS01PRCAgMHhmMTcwMDBmYworI2RlZmluZSBGMDkwMF9GU0tUX0NBUjIgIDB4ZjE3MDAwMDMKKworLypGU0tURkMxKi8KKyNkZWZpbmUgUjA5MDBfRlNLVEZDMSAgMHhmMTcxCisjZGVmaW5lIEYwOTAwX0ZTS1RfQ0FSMSAgMHhmMTcxMDBmZgorCisvKkZTS1RGQzAqLworI2RlZmluZSBSMDkwMF9GU0tURkMwICAweGYxNzIKKyNkZWZpbmUgRjA5MDBfRlNLVF9DQVIwICAweGYxNzIwMGZmCisKKy8qRlNLVERFTFRBRjEqLworI2RlZmluZSBSMDkwMF9GU0tUREVMVEFGMSAgMHhmMTczCisjZGVmaW5lIEYwOTAwX0ZTS1RfREVMVEFGMSAgMHhmMTczMDAwZgorCisvKkZTS1RERUxUQUYwKi8KKyNkZWZpbmUgUjA5MDBfRlNLVERFTFRBRjAgIDB4ZjE3NAorI2RlZmluZSBGMDkwMF9GU0tUX0RFTFRBRjAgIDB4ZjE3NDAwZmYKKworLypGU0tUQ1RSTCovCisjZGVmaW5lIFIwOTAwX0ZTS1RDVFJMICAweGYxNzUKKyNkZWZpbmUgRjA5MDBfRlNLVF9FTl9TR04gIDB4ZjE3NTAwNDAKKyNkZWZpbmUgRjA5MDBfRlNLVF9NT0RfU0dOICAweGYxNzUwMDIwCisjZGVmaW5lIEYwOTAwX0ZTS1RfTU9EX0VOICAweGYxNzUwMDFjCisjZGVmaW5lIEYwOTAwX0ZTS1RfREFDTU9ERSAgMHhmMTc1MDAwMworCisvKkZTS1JGQzIqLworI2RlZmluZSBSMDkwMF9GU0tSRkMyICAweGYxNzYKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERVRTR04gIDB4ZjE3NjAwNDAKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVRTR04gIDB4ZjE3NjAwMjAKKyNkZWZpbmUgRjA5MDBfRlNLUl9LQUdDICAweGYxNzYwMDFjCisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSMiAgMHhmMTc2MDAwMworCisvKkZTS1JGQzEqLworI2RlZmluZSBSMDkwMF9GU0tSRkMxICAweGYxNzcKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVIxICAweGYxNzcwMGZmCisKKy8qRlNLUkZDMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JGQzAgIDB4ZjE3OAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUjAgIDB4ZjE3ODAwZmYKKworLypGU0tSSzEqLworI2RlZmluZSBSMDkwMF9GU0tSSzEgIDB4ZjE3OQorI2RlZmluZSBGMDkwMF9GU0tSX0sxX0VYUCAgMHhmMTc5MDBlMAorI2RlZmluZSBGMDkwMF9GU0tSX0sxX01BTlQgIDB4ZjE3OTAwMWYKKworLypGU0tSSzIqLworI2RlZmluZSBSMDkwMF9GU0tSSzIgIDB4ZjE3YQorI2RlZmluZSBGMDkwMF9GU0tSX0syX0VYUCAgMHhmMTdhMDBlMAorI2RlZmluZSBGMDkwMF9GU0tSX0syX01BTlQgIDB4ZjE3YTAwMWYKKworLypGU0tSQUdDUiovCisjZGVmaW5lIFIwOTAwX0ZTS1JBR0NSICAweGYxN2IKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVRDVEwgIDB4ZjE3YjAwYzAKKyNkZWZpbmUgRjA5MDBfRlNLUl9BR0NfUkVGICAweGYxN2IwMDNmCisKKy8qRlNLUkFHQyovCisjZGVmaW5lIFIwOTAwX0ZTS1JBR0MgIDB4ZjE3YworI2RlZmluZSBGMDkwMF9GU0tSX0FHQ19BQ0NVICAweGYxN2MwMGZmCisKKy8qRlNLUkFMUEhBKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkFMUEhBICAweGYxN2QKKyNkZWZpbmUgRjA5MDBfRlNLUl9BTFBIQV9FWFAgIDB4ZjE3ZDAwMWMKKyNkZWZpbmUgRjA5MDBfRlNLUl9BTFBIQV9NICAweGYxN2QwMDAzCisKKy8qRlNLUlBMVEgxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUlBMVEgxICAweGYxN2UKKyNkZWZpbmUgRjA5MDBfRlNLUl9CRVRBICAweGYxN2UwMGYwCisjZGVmaW5lIEYwOTAwX0ZTS1JfUExMX1RSRVNIMSAgMHhmMTdlMDAwZgorCisvKkZTS1JQTFRIMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JQTFRIMCAgMHhmMTdmCisjZGVmaW5lIEYwOTAwX0ZTS1JfUExMX1RSRVNIMCAgMHhmMTdmMDBmZgorCisvKkZTS1JERjEqLworI2RlZmluZSBSMDkwMF9GU0tSREYxICAweGYxODAKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVQgIDB4ZjE4MDAwODAKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERUxUQUYxICAweGYxODAwMDFmCisKKy8qRlNLUkRGMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JERjAgIDB4ZjE4MQorI2RlZmluZSBGMDkwMF9GU0tSX0RFTFRBRjAgIDB4ZjE4MTAwZmYKKworLypGU0tSU1RFUFAqLworI2RlZmluZSBSMDkwMF9GU0tSU1RFUFAgIDB4ZjE4MgorI2RlZmluZSBGMDkwMF9GU0tSX1NURVBfUExVUyAgMHhmMTgyMDBmZgorCisvKkZTS1JTVEVQTSovCisjZGVmaW5lIFIwOTAwX0ZTS1JTVEVQTSAgMHhmMTgzCisjZGVmaW5lIEYwOTAwX0ZTS1JfU1RFUF9NSU5VUyAgMHhmMTgzMDBmZgorCisvKkZTS1JERVQxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRFVDEgIDB4ZjE4NAorI2RlZmluZSBGMDkwMF9GU0tSX0RFVEVDVCAgMHhmMTg0MDA4MAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9BQ0NVMSAgMHhmMTg0MDAwZgorCisvKkZTS1JERVQwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRFVDAgIDB4ZjE4NQorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9BQ0NVMCAgMHhmMTg1MDBmZgorCisvKkZTS1JEVEgxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRUSDEgIDB4ZjE4NgorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkxPU1NfVEhSRVNIMSAgMHhmMTg2MDBmMAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9USFJFU0gxICAweGYxODYwMDBmCisKKy8qRlNLUkRUSDAqLworI2RlZmluZSBSMDkwMF9GU0tSRFRIMCAgMHhmMTg3CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSREVUX1RIUkVTSDAgIDB4ZjE4NzAwZmYKKworLypGU0tSTE9TUyovCisjZGVmaW5lIFIwOTAwX0ZTS1JMT1NTICAweGYxODgKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJMT1NTX1RIUkVTSDAgIDB4ZjE4ODAwZmYKKworLypQMl9ESVNUWENUTCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1RYQ1RMICAweGYxOTAKKyNkZWZpbmUgRjA5MDBfUDJfVElNX09GRiAgMHhmMTkwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ESVNFUUNfUkVTRVQgIDB4ZjE5MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVElNX0NNRCAgMHhmMTkwMDAzMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUFJFQ0hBUkdFICAweGYxOTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RJU1RYX01PREUgIDB4ZjE5MDAwMDcKKworLypQMl9ESVNSWENUTCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYQ1RMICAweGYxOTEKKyNkZWZpbmUgRjA5MDBfUDJfUkVDRUlWRVJfT04gIDB4ZjE5MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfSUdOT19TSE9SVDIySyAgMHhmMTkxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9PTkVDSElQX1RSWCAgMHhmMTkxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9FWFRfRU5WRUxPUCAgMHhmMTkxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9QSU5fU0VMRUNUICAweGYxOTEwMDBjCisjZGVmaW5lIEYwOTAwX1AyX0lSUV9SWEVORCAgMHhmMTkxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUlFfNE5CWVRFUyAgMHhmMTkxMDAwMQorCisvKlAyX0RJU1JYX1NUMCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYX1NUMCAgMHhmMTk0CisjZGVmaW5lIEYwOTAwX1AyX1JYX0VORCAgMHhmMTk0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9SWF9BQ1RJVkUgIDB4ZjE5NDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRfMjJLSFogIDB4ZjE5NDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ09OVF9UT05FICAweGYxOTQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fNEJSRUFEWSAgMHhmMTk0MDAwOAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX0VNUFRZICAweGYxOTQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0FCT1JUX0RJU1JYICAweGYxOTQwMDAxCisKKy8qUDJfRElTUlhfU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTUlhfU1QxICAweGYxOTUKKyNkZWZpbmUgRjA5MDBfUDJfUlhfRkFJTCAgMHhmMTk1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX1BBUklUWUZBSUwgIDB4ZjE5NTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfUlhfTk9OQllURSAgMHhmMTk1MDAyMAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX09WRVJGTE9XICAweGYxOTUwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fQllURU5CUiAgMHhmMTk1MDAwZgorCisvKlAyX0RJU1JYREFUQSovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYREFUQSAgMHhmMTk2CisjZGVmaW5lIEYwOTAwX1AyX0RJU1JYX0RBVEEgIDB4ZjE5NjAwZmYKKworLypQMl9ESVNUWERBVEEqLworI2RlZmluZSBSMDkwMF9QMl9ESVNUWERBVEEgIDB4ZjE5NworI2RlZmluZSBGMDkwMF9QMl9ESVNFUUNfRklGTyAgMHhmMTk3MDBmZgorCisvKlAyX0RJU1RYU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTVFhTVEFUVVMgIDB4ZjE5OAorI2RlZmluZSBGMDkwMF9QMl9UWF9GQUlMICAweGYxOTgwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fRlVMTCAgMHhmMTk4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UWF9JRExFICAweGYxOTgwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0dBUF9CVVJTVCAgMHhmMTk4MDAxMAorI2RlZmluZSBGMDkwMF9QMl9UWEZJRk9fQllURVMgIDB4ZjE5ODAwMGYKKworLypQMl9GMjJUWCovCisjZGVmaW5lIFIwOTAwX1AyX0YyMlRYICAweGYxOTkKKyNkZWZpbmUgRjA5MDBfUDJfRjIyX1JFRyAgMHhmMTk5MDBmZgorCisvKlAyX0YyMlJYKi8KKyNkZWZpbmUgUjA5MDBfUDJfRjIyUlggIDB4ZjE5YQorI2RlZmluZSBGMDkwMF9QMl9GMjJSWF9SRUcgIDB4ZjE5YTAwZmYKKworLypQMl9BQ1JQUkVTQyovCisjZGVmaW5lIFIwOTAwX1AyX0FDUlBSRVNDICAweGYxOWMKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX0NPREZSRFkgIDB4ZjE5YzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX1BSRVNDICAweGYxOWMwMDA3CisKKy8qUDJfQUNSRElWKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNSRElWICAweGYxOWQKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX0RJViAgMHhmMTlkMDBmZgorCisvKlAxX0RJU1RYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTVFhDVEwgIDB4ZjFhMAorI2RlZmluZSBGMDkwMF9QMV9USU1fT0ZGICAweGYxYTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RJU0VRQ19SRVNFVCAgMHhmMWEwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9USU1fQ01EICAweGYxYTAwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19QUkVDSEFSR0UgIDB4ZjFhMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRElTVFhfTU9ERSAgMHhmMWEwMDAwNworCisvKlAxX0RJU1JYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhDVEwgIDB4ZjFhMQorI2RlZmluZSBGMDkwMF9QMV9SRUNFSVZFUl9PTiAgMHhmMWExMDA4MAorI2RlZmluZSBGMDkwMF9QMV9JR05PX1NIT1JUMjJLICAweGYxYTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX09ORUNISVBfVFJYICAweGYxYTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0VYVF9FTlZFTE9QICAweGYxYTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1BJTl9TRUxFQ1QgIDB4ZjFhMTAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfSVJRX1JYRU5EICAweGYxYTEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0lSUV80TkJZVEVTICAweGYxYTEwMDAxCisKKy8qUDFfRElTUlhfU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhfU1QwICAweGYxYTQKKyNkZWZpbmUgRjA5MDBfUDFfUlhfRU5EICAweGYxYTQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1JYX0FDVElWRSAgMHhmMWE0MDA0MAorI2RlZmluZSBGMDkwMF9QMV9TSE9SVF8yMktIWiAgMHhmMWE0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9DT05UX1RPTkUgIDB4ZjFhNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT180QlJFQURZICAweGYxYTQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fRU1QVFkgIDB4ZjFhNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQUJPUlRfRElTUlggIDB4ZjFhNDAwMDEKKworLypQMV9ESVNSWF9TVDEqLworI2RlZmluZSBSMDkwMF9QMV9ESVNSWF9TVDEgIDB4ZjFhNQorI2RlZmluZSBGMDkwMF9QMV9SWF9GQUlMICAweGYxYTUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fUEFSSVRZRkFJTCAgMHhmMWE1MDA0MAorI2RlZmluZSBGMDkwMF9QMV9SWF9OT05CWVRFICAweGYxYTUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fT1ZFUkZMT1cgIDB4ZjFhNTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19CWVRFTkJSICAweGYxYTUwMDBmCisKKy8qUDFfRElTUlhEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhEQVRBICAweGYxYTYKKyNkZWZpbmUgRjA5MDBfUDFfRElTUlhfREFUQSAgMHhmMWE2MDBmZgorCisvKlAxX0RJU1RYREFUQSovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1RYREFUQSAgMHhmMWE3CisjZGVmaW5lIEYwOTAwX1AxX0RJU0VRQ19GSUZPICAweGYxYTcwMGZmCisKKy8qUDFfRElTVFhTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMV9ESVNUWFNUQVRVUyAgMHhmMWE4CisjZGVmaW5lIEYwOTAwX1AxX1RYX0ZBSUwgIDB4ZjFhODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19GVUxMICAweGYxYTgwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RYX0lETEUgIDB4ZjFhODAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfR0FQX0JVUlNUICAweGYxYTgwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RYRklGT19CWVRFUyAgMHhmMWE4MDAwZgorCisvKlAxX0YyMlRYKi8KKyNkZWZpbmUgUjA5MDBfUDFfRjIyVFggIDB4ZjFhOQorI2RlZmluZSBGMDkwMF9QMV9GMjJfUkVHICAweGYxYTkwMGZmCisKKy8qUDFfRjIyUlgqLworI2RlZmluZSBSMDkwMF9QMV9GMjJSWCAgMHhmMWFhCisjZGVmaW5lIEYwOTAwX1AxX0YyMlJYX1JFRyAgMHhmMWFhMDBmZgorCisvKlAxX0FDUlBSRVNDKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNSUFJFU0MgIDB4ZjFhYworI2RlZmluZSBGMDkwMF9QMV9BQ1JfQ09ERlJEWSAgMHhmMWFjMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BQ1JfUFJFU0MgIDB4ZjFhYzAwMDcKKworLypQMV9BQ1JESVYqLworI2RlZmluZSBSMDkwMF9QMV9BQ1JESVYgIDB4ZjFhZAorI2RlZmluZSBGMDkwMF9QMV9BQ1JfRElWICAweGYxYWQwMGZmCisKKy8qTkNPQVJTRSovCisjZGVmaW5lIFIwOTAwX05DT0FSU0UgIDB4ZjFiMworI2RlZmluZSBGMDkwMF9NX0RJViAgMHhmMWIzMDBmZgorCisvKlNZTlRDVFJMKi8KKyNkZWZpbmUgUjA5MDBfU1lOVENUUkwgIDB4ZjFiNgorI2RlZmluZSBGMDkwMF9TVEFOREJZICAweGYxYjYwMDgwCisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTENPUkUgIDB4ZjFiNjAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMWDFSQVRJTyAgMHhmMWI2MDAyMAorI2RlZmluZSBGMDkwMF9JMkNfVFVEICAweGYxYjYwMDEwCisjZGVmaW5lIEYwOTAwX1NUT1BfUExMICAweGYxYjYwMDA4CisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTEZTSyAgMHhmMWI2MDAwNAorI2RlZmluZSBGMDkwMF9TRUxPU0NJICAweGYxYjYwMDAyCisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTEFEQyAgMHhmMWI2MDAwMQorCisvKkZJTFRDVFJMKi8KKyNkZWZpbmUgUjA5MDBfRklMVENUUkwgIDB4ZjFiNworI2RlZmluZSBGMDkwMF9JTlZfQ0xLMTM1ICAweGYxYjcwMDgwCisjZGVmaW5lIEYwOTAwX1BFUk1fQllQRElTICAweGYxYjcwMDQwCisjZGVmaW5lIEYwOTAwX1NFTF9GU0tDS0RJViAgMHhmMWI3MDAwNAorI2RlZmluZSBGMDkwMF9JTlZfQ0xLRlNLICAweGYxYjcwMDAyCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BUFBMSSAgMHhmMWI3MDAwMQorCisvKlBMTFNUQVQqLworI2RlZmluZSBSMDkwMF9QTExTVEFUICAweGYxYjgKKyNkZWZpbmUgRjA5MDBfQUNNX1NFTCAgMHhmMWI4MDA4MAorI2RlZmluZSBGMDkwMF9EVFZfU0VMICAweGYxYjgwMDQwCisjZGVmaW5lIEYwOTAwX1BMTExPQ0sgIDB4ZjFiODAwMDEKKworLypTVE9QQ0xLMSovCisjZGVmaW5lIFIwOTAwX1NUT1BDTEsxICAweGYxYzIKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtQS0RUMiAgMHhmMWMyMDA0MAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1BLRFQxICAweGYxYzIwMDIwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLRkVDICAweGYxYzIwMDEwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLQURDSTIgIDB4ZjFjMjAwMDgKKyNkZWZpbmUgRjA5MDBfSU5WX0NMS0FEQ0kyICAweGYxYzIwMDA0CisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLQURDSTEgIDB4ZjFjMjAwMDIKKyNkZWZpbmUgRjA5MDBfSU5WX0NMS0FEQ0kxICAweGYxYzIwMDAxCisKKy8qU1RPUENMSzIqLworI2RlZmluZSBSMDkwMF9TVE9QQ0xLMiAgMHhmMWMzCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLU0FNUDIgIDB4ZjFjMzAwMTAKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtTQU1QMSAgMHhmMWMzMDAwOAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1ZJVDIgIDB4ZjFjMzAwMDQKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtWSVQxICAweGYxYzMwMDAyCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLVFMgIDB4ZjFjMzAwMDEKKworLypUU1RUTlIwKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMCAgMHhmMWRmCisjZGVmaW5lIEYwOTAwX1NFTF9GU0sgIDB4ZjFkZjAwODAKKyNkZWZpbmUgRjA5MDBfRlNLX1BPTiAgMHhmMWRmMDAwNAorI2RlZmluZSBGMDkwMF9GU0tfT1BFTkxPT1AgIDB4ZjFkZjAwMDIKKworLypUU1RUTlIxKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMSAgMHhmMWUwCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BREMxICAweGYxZTAwMDgwCisjZGVmaW5lIEYwOTAwX0lOVkFEQzFfQ0tPVVQgIDB4ZjFlMDAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMSVFTUkMxICAweGYxZTAwMDMwCisjZGVmaW5lIEYwOTAwX0FEQzFfUE9OICAweGYxZTAwMDAyCisjZGVmaW5lIEYwOTAwX0FEQzFfSU5NT0RFICAweGYxZTAwMDAxCisKKy8qVFNUVE5SMiovCisjZGVmaW5lIFIwOTAwX1RTVFROUjIgIDB4ZjFlMQorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1BPTiAgMHhmMWUxMDAyMAorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1RFU1QgIDB4ZjFlMTAwMWYKKworLypUU1RUTlIzKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMyAgMHhmMWUyCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BREMyICAweGYxZTIwMDgwCisjZGVmaW5lIEYwOTAwX0lOVkFEQzJfQ0tPVVQgIDB4ZjFlMjAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMSVFTUkMyICAweGYxZTIwMDMwCisjZGVmaW5lIEYwOTAwX0FEQzJfUE9OICAweGYxZTIwMDAyCisjZGVmaW5lIEYwOTAwX0FEQzJfSU5NT0RFICAweGYxZTIwMDAxCisKKy8qVFNUVE5SNCovCisjZGVmaW5lIFIwOTAwX1RTVFROUjQgIDB4ZjFlMworI2RlZmluZSBGMDkwMF9ESVNFUUMyX1BPTiAgMHhmMWUzMDAyMAorI2RlZmluZSBGMDkwMF9ESVNFUUMyX1RFU1QgIDB4ZjFlMzAwMWYKKworLypQMl9JUUNPTlNUKi8KKyNkZWZpbmUgUjA5MDBfUDJfSVFDT05TVCAgMHhmMjAwCisjZGVmaW5lIEYwOTAwX1AyX0NPTlNURUxfU0VMRUNUICAweGYyMDAwMDYwCisjZGVmaW5lIEYwOTAwX1AyX0lRU1lNQl9TRUwgIDB4ZjIwMDAwMWYKKworLypQMl9OT1NDRkcqLworI2RlZmluZSBSMDkwMF9QMl9OT1NDRkcgIDB4ZjIwMQorI2RlZmluZSBGMDkwMF9QMl9EVU1NWVBMX05PU0RBVEEgIDB4ZjIwMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX0JFVEEgIDB4ZjIwMTAwMTgKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9CRVRBICAweGYyMDEwMDA3CisKKy8qUDJfSVNZTUIqLworI2RlZmluZSBSMDkwMF9QMl9JU1lNQiAgMHhmMjAyCisjZGVmaW5lIEYwOTAwX1AyX0lfU1lNQk9MICAweGYyMDIwMWZmCisKKy8qUDJfUVNZTUIqLworI2RlZmluZSBSMDkwMF9QMl9RU1lNQiAgMHhmMjAzCisjZGVmaW5lIEYwOTAwX1AyX1FfU1lNQk9MICAweGYyMDMwMWZmCisKKy8qUDJfQUdDMUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFDRkcgIDB4ZjIwNAorI2RlZmluZSBGMDkwMF9QMl9EQ19GUk9aRU4gIDB4ZjIwNDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRENfQ09SUkVDVCAgMHhmMjA0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9BTU1fRlJPWkVOICAweGYyMDQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0FNTV9DT1JSRUNUICAweGYyMDQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1FVQURfRlJPWkVOICAweGYyMDQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1FVQURfQ09SUkVDVCAgMHhmMjA0MDAwNAorI2RlZmluZSBGMDkwMF9QMl9EQ0NPTVBfU0xPVyAgMHhmMjA0MDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUU1JU01fU0xPVyAgMHhmMjA0MDAwMQorCisvKlAyX0FHQzFDTiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFDTiAgMHhmMjA2CisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfTE9DS0VEICAweGYyMDYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfT1ZFUkZMT1cgIDB4ZjIwNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9OT1NMT1dMSyAgMHhmMjA2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX01JTlBPV0VSICAweGYyMDYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0FHQ09VVF9GQVNUICAweGYyMDYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX0JFVEEgIDB4ZjIwNjAwMDcKKworLypQMl9BR0MxUkVGKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMVJFRiAgMHhmMjA3CisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX1JFRiAgMHhmMjA3MDBmZgorCisvKlAyX0lEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMl9JRENDT01QICAweGYyMDgKKyNkZWZpbmUgRjA5MDBfUDJfSUFWRVJBR0VfQURKICAweGYyMDgwMWZmCisKKy8qUDJfUURDQ09NUCovCisjZGVmaW5lIFIwOTAwX1AyX1FEQ0NPTVAgIDB4ZjIwOQorI2RlZmluZSBGMDkwMF9QMl9RQVZFUkFHRV9BREogIDB4ZjIwOTAxZmYKKworLypQMl9QT1dFUkkqLworI2RlZmluZSBSMDkwMF9QMl9QT1dFUkkgIDB4ZjIwYQorI2RlZmluZSBGMDkwMF9QMl9QT1dFUl9JICAweGYyMGEwMGZmCisKKy8qUDJfUE9XRVJRKi8KKyNkZWZpbmUgUjA5MDBfUDJfUE9XRVJRICAweGYyMGIKKyNkZWZpbmUgRjA5MDBfUDJfUE9XRVJfUSAgMHhmMjBiMDBmZgorCisvKlAyX0FHQzFBTU0qLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQU1NICAweGYyMGMKKyNkZWZpbmUgRjA5MDBfUDJfQU1NX1ZBTFVFICAweGYyMGMwMGZmCisKKy8qUDJfQUdDMVFVQUQqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxUVVBRCAgMHhmMjBkCisjZGVmaW5lIEYwOTAwX1AyX1FVQURfVkFMVUUgIDB4ZjIwZDAxZmYKKworLypQMl9BR0NJUUlOMSovCisjZGVmaW5lIFIwOTAwX1AyX0FHQ0lRSU4xICAweGYyMGUKKyNkZWZpbmUgRjA5MDBfUDJfQUdDSVFfVkFMVUUxICAweGYyMGUwMGZmCisKKy8qUDJfQUdDSVFJTjAqLworI2RlZmluZSBSMDkwMF9QMl9BR0NJUUlOMCAgMHhmMjBmCisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX1ZBTFVFMCAgMHhmMjBmMDBmZgorCisvKlAyX0RFTU9EKi8KKyNkZWZpbmUgUjA5MDBfUDJfREVNT0QgIDB4ZjIxMAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9TVE9QICAweGYyMTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCAgMHhmMjEwMDAzMAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9FTkFTQU1QICAweGYyMTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGICAweGYyMTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCAgMHhmMjEwMDAwMworCisvKlAyX0RNRE1PRENPRCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRE1PRENPRCAgMHhmMjExCisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9NT0RDT0QgIDB4ZjIxMTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTU9EQ09EICAweGYyMTEwMDdjCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX1RZUEUgIDB4ZjIxMTAwMDMKKworLypQMl9EU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfRFNUQVRVUyAgMHhmMjEyCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9MT0NLICAweGYyMTIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfUVVBTElUWSAgMHhmMjEyMDA2MAorI2RlZmluZSBGMDkwMF9QMl9TRFZCUzFfRU5BQkxFICAweGYyMTIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tfREVGSU5JVElGICAweGYyMTIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RJTUlOR19JU19MT0NLRUQgIDB4ZjIxMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX1RNR0xPQ0sgIDB4ZjIxMjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX0NBUkxPQ0sgIDB4ZjIxMjAwMDEKKworLypQMl9EU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AyX0RTVEFUVVMyICAweGYyMTMKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfREVMT0NLICAweGYyMTMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX1RJTUVPVVQgIDB4ZjIxMzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfTU9EQ09EUlFfU1lOQ1RBRyAgMHhmMjEzMDAyMAorI2RlZmluZSBGMDkwMF9QMl9QT0xZUEhfU0FURVZFTlQgIDB4ZjIxMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9OT1NJR05BTEFDSyAgMHhmMjEzMDAwOAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX09WRVJGTE9XICAweGYyMTMwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9PVkVSRkxPVyAgMHhmMjEzMDAwMgorI2RlZmluZSBGMDkwMF9QMl9HQU1NQV9PVkVSVU5ERVIgIDB4ZjIxMzAwMDEKKworLypQMl9ETURDRkdNRCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRENGR01EICAweGYyMTQKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJfRU5BQkxFICAweGYyMTQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSAgMHhmMjE0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DRlJfQVVUT1NDQU4gIDB4ZjIxNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTl9FTkFCTEUgIDB4ZjIxNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0FVVE9TQ0FOICAweGYyMTQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX05PRk9SQ0VfUkVMT0NLICAweGYyMTQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9STkcgIDB4ZjIxNDAwMDMKKworLypQMl9ETURDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHMiAgMHhmMjE1CisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfV0FJVExPQ0sgIDB4ZjIxNTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUzFTMl9TRVFVRU5USUFMICAweGYyMTUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX09WRVJGTE9XX1RJTUVPVVQgIDB4ZjIxNTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTkZBSUxfVElNRU9VVCAgMHhmMjE1MDAxMAorI2RlZmluZSBGMDkwMF9QMl9ETURUT1VUX0JBQ0sgIDB4ZjIxNTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19TMUVOQUJMRSAgMHhmMjE1MDAwNAorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfTEszTU9ERSAgMHhmMjE1MDAwMgorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfTEsyTU9ERSAgMHhmMjE1MDAwMQorCisvKlAyX0RNRElTVEFURSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRElTVEFURSAgMHhmMjE2CisjZGVmaW5lIEYwOTAwX1AyX0kyQ19OT1JFU0VURE1PREUgIDB4ZjIxNjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfRVRBUEVEICAweGYyMTYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NETURSU1RfRElSQ0xLICAweGYyMTYwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0kyQ19ERU1PRF9NT0RFICAweGYyMTYwMDFmCisKKy8qUDJfRE1EVDBNKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EVDBNICAweGYyMTcKKyNkZWZpbmUgRjA5MDBfUDJfRE1EVDBfTUlOICAweGYyMTcwMGZmCisKKy8qUDJfRE1EU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMl9ETURTVEFURSAgMHhmMjFiCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tFRCAgMHhmMjFiMDA4MAorI2RlZmluZSBGMDkwMF9QMl9IRUFERVJfTU9ERSAgMHhmMjFiMDA2MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9NT0RFICAweGYyMWIwMDFmCisKKy8qUDJfRE1ERkxZVyovCisjZGVmaW5lIFIwOTAwX1AyX0RNREZMWVcgIDB4ZjIxYworI2RlZmluZSBGMDkwMF9QMl9JMkNfSVJRVkFMICAweGYyMWMwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0ZMWVdIRUVMX0NQVCAgMHhmMjFjMDAwZgorCisvKlAyX0RTVEFUVVMzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRFNUQVRVUzMgIDB4ZjIxZAorI2RlZmluZSBGMDkwMF9QMl9DRlJfWklHWkFHICAweGYyMWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0NGR01PREUgIDB4ZjIxZDAwNjAKKyNkZWZpbmUgRjA5MDBfUDJfR0FNTUFfTE9XQkFVRFJBVEUgIDB4ZjIxZDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUkVMT0NLX01PREUgIDB4ZjIxZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfRkFJTCAgMHhmMjFkMDAwNAorI2RlZmluZSBGMDkwMF9QMl9FVEFQRTFBX0RWQlhNRU0gIDB4ZjIxZDAwMDMKKworLypQMl9ETURDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHMyAgMHhmMjFlCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMxX1RNR1dBSVQgIDB4ZjIxZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfTk9fQldDRU5URVJJTkcgIDB4ZjIxZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfSU5WX1NFUVNSQ0ggIDB4ZjIxZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1NGUlVQTE9XX1RSSyAgMHhmMjFlMDAxMAorI2RlZmluZSBGMDkwMF9QMl9OT1NUT1BfRklGT0ZVTEwgIDB4ZjIxZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfTE9DS1RJTUVfTU9ERSAgMHhmMjFlMDAwNworCisvKlAyX0RNRENGRzQqLworI2RlZmluZSBSMDkwMF9QMl9ETURDRkc0ICAweGYyMWYKKyNkZWZpbmUgRjA5MDBfUDJfVFVORVJfTlJFTEFVTkNIICAweGYyMWYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RJU19DTEtFTkFCTEUgIDB4ZjIxZjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0hEUkRJVkxPQ0sgIDB4ZjIxZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfTk9fVE5SV0JJTklUICAweGYyMWYwMDAxCisKKy8qUDJfQ09SUkVMTUFOVCovCisjZGVmaW5lIFIwOTAwX1AyX0NPUlJFTE1BTlQgIDB4ZjIyMAorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfTUFOVCAgMHhmMjIwMDBmZgorCisvKlAyX0NPUlJFTEFCUyovCisjZGVmaW5lIFIwOTAwX1AyX0NPUlJFTEFCUyAgMHhmMjIxCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9BQlMgIDB4ZjIyMTAwZmYKKworLypQMl9DT1JSRUxFWFAqLworI2RlZmluZSBSMDkwMF9QMl9DT1JSRUxFWFAgIDB4ZjIyMgorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfQUJTRVhQICAweGYyMjIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9FWFAgIDB4ZjIyMjAwMGYKKworLypQMl9QTEhNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMl9QTEhNT0RDT0QgIDB4ZjIyNAorI2RlZmluZSBGMDkwMF9QMl9TUEVDSU5WX0RFTU9EICAweGYyMjQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1BMSF9NT0RDT0QgIDB4ZjIyNDAwN2MKKyNkZWZpbmUgRjA5MDBfUDJfUExIX1RZUEUgIDB4ZjIyNDAwMDMKKworLypQMl9BR0NLMzIqLworI2RlZmluZSBSMDkwMF9QMl9BR0NLMzIgIDB4ZjIyYgorI2RlZmluZSBGMDkwMF9QMl9SM0FESk9GRl8zMkFQU0sgIDB4ZjIyYjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUjJBREpPRkZfMzJBUFNLICAweGYyMmIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1IxQURKT0ZGXzMyQVBTSyAgMHhmMjJiMDAyMAorI2RlZmluZSBGMDkwMF9QMl9SQURKXzMyQVBTSyAgMHhmMjJiMDAxZgorCisvKlAyX0FHQzJPKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMk8gIDB4ZjIyYworI2RlZmluZSBGMDkwMF9QMl9BR0MyUkVGX0FESlVTVElORyAgMHhmMjJjMDA4MAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0NPQVJTRUZBU1QgIDB4ZjIyYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS1NRUlQgIDB4ZjIyYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS01PREUgIDB4ZjIyYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS0VRVUEgIDB4ZjIyYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9DT0VGICAweGYyMmMwMDA3CisKKy8qUDJfQUdDMlJFRiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJSRUYgIDB4ZjIyZAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX1JFRiAgMHhmMjJkMDBmZgorCisvKlAyX0FHQzFBREoqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQURKICAweGYyMmUKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMUFESl9NQU5VQUwgIDB4ZjIyZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9BREpVU1RFRCAgMHhmMjJlMDE3ZgorCisvKlAyX0FHQzJJMSovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJJMSAgMHhmMjM2CisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfSU5URUdSQVRPUjEgIDB4ZjIzNjAwZmYKKworLypQMl9BR0MySTAqLworI2RlZmluZSBSMDkwMF9QMl9BR0MySTAgIDB4ZjIzNworI2RlZmluZSBGMDkwMF9QMl9BR0MyX0lOVEVHUkFUT1IwICAweGYyMzcwMGZmCisKKy8qUDJfQ0FSQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSQ0ZHICAweGYyMzgKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSVVBMT1dfQVVUTyAgMHhmMjM4MDA4MAorI2RlZmluZSBGMDkwMF9QMl9DRlJVUExPV19URVNUICAweGYyMzgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0VOX0NBUjJDRU5URVIgIDB4ZjIzODAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSSERSX05PRElWOCAgMHhmMjM4MDAxMAorI2RlZmluZSBGMDkwMF9QMl9JMkNfUk9UQSAgMHhmMjM4MDAwOAorI2RlZmluZSBGMDkwMF9QMl9ST1RBT04gIDB4ZjIzODAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfUEhfREVUX0FMR08gIDB4ZjIzODAwMDMKKworLypQMl9BQ0xDKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQyAgMHhmMjM5CisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfUzJBTFBIQSAgMHhmMjM5MDBjMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQUxQSEFfTUFOVCAgMHhmMjM5MDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQUxQSEFfRVhQICAweGYyMzkwMDBmCisKKy8qUDJfQkNMQyovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMgIDB4ZjIzYQorI2RlZmluZSBGMDkwMF9QMl9TVE9QX1MyQkVUQSAgMHhmMjNhMDBjMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQkVUQV9NQU5UICAweGYyM2EwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9CRVRBX0VYUCAgMHhmMjNhMDAwZgorCisvKlAyX0NBUkZSRVEqLworI2RlZmluZSBSMDkwMF9QMl9DQVJGUkVRICAweGYyM2QKKyNkZWZpbmUgRjA5MDBfUDJfS0NfQ09BUlNFX0VYUCAgMHhmMjNkMDBmMAorI2RlZmluZSBGMDkwMF9QMl9CRVRBX0ZSRVEgIDB4ZjIzZDAwMGYKKworLypQMl9DQVJIRFIqLworI2RlZmluZSBSMDkwMF9QMl9DQVJIRFIgIDB4ZjIzZQorI2RlZmluZSBGMDkwMF9QMl9LX0ZSRVFfSERSICAweGYyM2UwMGZmCisKKy8qUDJfTERUKi8KKyNkZWZpbmUgUjA5MDBfUDJfTERUICAweGYyM2YKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19USFJFUyAgMHhmMjNmMDFmZgorCisvKlAyX0xEVDIqLworI2RlZmluZSBSMDkwMF9QMl9MRFQyICAweGYyNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19USFJFUzIgIDB4ZjI0MDAxZmYKKworLypQMl9DRlJJQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSUNGRyAgMHhmMjQxCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfVU5WQUxSTkcgIDB4ZjI0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9MVU5WQUxDUFQgIDB4ZjI0MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9BQk9SVERCTCAgMHhmMjQxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0FCT1JUUFJFRCAgMHhmMjQxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX1VOVkFMU0tJUCAgMHhmMjQxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0NTVElOQyAgMHhmMjQxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9ORUdfQ0ZSU1RFUCAgMHhmMjQxMDAwMQorCisvKlAyX0NGUlVQMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUlVQMSAgMHhmMjQyCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9VUDEgIDB4ZjI0MjAxZmYKKworLypQMl9DRlJVUDAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJVUDAgIDB4ZjI0MworI2RlZmluZSBGMDkwMF9QMl9DRlJfVVAwICAweGYyNDMwMGZmCisKKy8qUDJfQ0ZSTE9XMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUkxPVzEgIDB4ZjI0NgorI2RlZmluZSBGMDkwMF9QMl9DRlJfTE9XMSAgMHhmMjQ2MDFmZgorCisvKlAyX0NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJMT1cwICAweGYyNDcKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0xPVzAgIDB4ZjI0NzAwZmYKKworLypQMl9DRlJJTklUMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklOSVQxICAweGYyNDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOSVQxICAweGYyNDgwMWZmCisKKy8qUDJfQ0ZSSU5JVDAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTklUMCAgMHhmMjQ5CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9JTklUMCAgMHhmMjQ5MDBmZgorCisvKlAyX0NGUklOQzEqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTkMxICAweGYyNGEKKyNkZWZpbmUgRjA5MDBfUDJfTUFOVUFMX0NGUklOQyAgMHhmMjRhMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DRlJfSU5DMSAgMHhmMjRhMDE3ZgorCisvKlAyX0NGUklOQzAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTkMwICAweGYyNGIKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOQzAgIDB4ZjI0YjAwZjAKKworLypQMl9DRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMiAgMHhmMjRjCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9GUkVRMiAgMHhmMjRjMDFmZgorCisvKlAyX0NGUjEqLworI2RlZmluZSBSMDkwMF9QMl9DRlIxICAweGYyNGQKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0ZSRVExICAweGYyNGQwMGZmCisKKy8qUDJfQ0ZSMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjAgIDB4ZjI0ZQorI2RlZmluZSBGMDkwMF9QMl9DQVJfRlJFUTAgIDB4ZjI0ZTAwZmYKKworLypQMl9MREkqLworI2RlZmluZSBSMDkwMF9QMl9MREkgIDB4ZjI0ZgorI2RlZmluZSBGMDkwMF9QMl9MT0NLX0RFVF9JTlRFR1IgIDB4ZjI0ZjAxZmYKKworLypQMl9UTUdDRkcqLworI2RlZmluZSBSMDkwMF9QMl9UTUdDRkcgIDB4ZjI1MAorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0JFVEEgIDB4ZjI1MDAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfR1JPVVBERUxBWSAgMHhmMjUwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9ET19USU1JTkdfQ09SUiAgMHhmMjUwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9NQU5VQUxfU0NBTiAgMHhmMjUwMDAwYworI2RlZmluZSBGMDkwMF9QMl9UTUdfTUlORlJFUSAgMHhmMjUwMDAwMworCisvKlAyX1JUQyovCisjZGVmaW5lIFIwOTAwX1AyX1JUQyAgMHhmMjUxCisjZGVmaW5lIEYwOTAwX1AyX1RNR0FMUEhBX0VYUCAgMHhmMjUxMDBmMAorI2RlZmluZSBGMDkwMF9QMl9UTUdCRVRBX0VYUCAgMHhmMjUxMDAwZgorCisvKlAyX1JUQ1MyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUlRDUzIgIDB4ZjI1MgorI2RlZmluZSBGMDkwMF9QMl9UTUdBTFBIQVMyX0VYUCAgMHhmMjUyMDBmMAorI2RlZmluZSBGMDkwMF9QMl9UTUdCRVRBUzJfRVhQICAweGYyNTIwMDBmCisKKy8qUDJfVE1HVEhSSVNFKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HVEhSSVNFICAweGYyNTMKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19USFJJU0UgIDB4ZjI1MzAwZmYKKworLypQMl9UTUdUSEZBTEwqLworI2RlZmluZSBSMDkwMF9QMl9UTUdUSEZBTEwgIDB4ZjI1NAorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX1RIRkFMTCAgMHhmMjU0MDBmZgorCisvKlAyX1NGUlVQUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMl9TRlJVUFJBVElPICAweGYyNTUKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX1VQUkFUSU8gIDB4ZjI1NTAwZmYKKworLypQMl9TRlJMT1dSQVRJTyovCisjZGVmaW5lIFIwOTAwX1AyX1NGUkxPV1JBVElPICAweGYyNTYKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX0xPV1JBVElPICAweGYyNTYwMGZmCisKKy8qUDJfS1JFRlRNRyovCisjZGVmaW5lIFIwOTAwX1AyX0tSRUZUTUcgIDB4ZjI1OAorI2RlZmluZSBGMDkwMF9QMl9LUkVGX1RNRyAgMHhmMjU4MDBmZgorCisvKlAyX1NGUlNURVAqLworI2RlZmluZSBSMDkwMF9QMl9TRlJTVEVQICAweGYyNTkKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX1NDQU5TVEVQICAweGYyNTkwMGYwCisjZGVmaW5lIEYwOTAwX1AyX1NGUl9DRU5URVJTVEVQICAweGYyNTkwMDBmCisKKy8qUDJfVE1HQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AyX1RNR0NGRzIgIDB4ZjI1YQorI2RlZmluZSBGMDkwMF9QMl9ESVNfQVVUT1NBTVAgIDB4ZjI1YTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTklOSVRfUVVBUlQgIDB4ZjI1YTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfRFZCUzFERVJBVCAgMHhmMjVhMDAwMgorI2RlZmluZSBGMDkwMF9QMl9TRlJSQVRJT19GSU5FICAweGYyNWEwMDAxCisKKy8qUDJfU0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJJTklUMSAgMHhmMjVlCisjZGVmaW5lIEYwOTAwX1AyX1NGUl9JTklUMSAgMHhmMjVlMDBmZgorCisvKlAyX1NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSSU5JVDAgIDB4ZjI1ZgorI2RlZmluZSBGMDkwMF9QMl9TRlJfSU5JVDAgIDB4ZjI1ZjAwZmYKKworLypQMl9TRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJVUDEgIDB4ZjI2MAorI2RlZmluZSBGMDkwMF9QMl9BVVRPX0dVUCAgMHhmMjYwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfVVAxICAweGYyNjAwMDdmCisKKy8qUDJfU0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSVVAwICAweGYyNjEKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRX1VQMCAgMHhmMjYxMDBmZgorCisvKlAyX1NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJMT1cxICAweGYyNjIKKyNkZWZpbmUgRjA5MDBfUDJfQVVUT19HTE9XICAweGYyNjIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUV9MT1cxICAweGYyNjIwMDdmCisKKy8qUDJfU0ZSTE9XMCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUkxPVzAgIDB4ZjI2MworI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfTE9XMCAgMHhmMjYzMDBmZgorCisvKlAyX1NGUjMqLworI2RlZmluZSBSMDkwMF9QMl9TRlIzICAweGYyNjQKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMyAgMHhmMjY0MDBmZgorCisvKlAyX1NGUjIqLworI2RlZmluZSBSMDkwMF9QMl9TRlIyICAweGYyNjUKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMiAgMHhmMjY1MDBmZgorCisvKlAyX1NGUjEqLworI2RlZmluZSBSMDkwMF9QMl9TRlIxICAweGYyNjYKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMSAgMHhmMjY2MDBmZgorCisvKlAyX1NGUjAqLworI2RlZmluZSBSMDkwMF9QMl9TRlIwICAweGYyNjcKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMCAgMHhmMjY3MDBmZgorCisvKlAyX1RNR1JFRzIqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcyICAweGYyNjgKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMiAgMHhmMjY4MDBmZgorCisvKlAyX1RNR1JFRzEqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcxICAweGYyNjkKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMSAgMHhmMjY5MDBmZgorCisvKlAyX1RNR1JFRzAqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcwICAweGYyNmEKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMCAgMHhmMjZhMDBmZgorCisvKlAyX1RNR0xPQ0sxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HTE9DSzEgIDB4ZjI2YgorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0xFVkVMMSAgMHhmMjZiMDFmZgorCisvKlAyX1RNR0xPQ0swKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HTE9DSzAgIDB4ZjI2YworI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0xFVkVMMCAgMHhmMjZjMDBmZgorCisvKlAyX1RNR09CUyovCisjZGVmaW5lIFIwOTAwX1AyX1RNR09CUyAgMHhmMjZkCisjZGVmaW5lIEYwOTAwX1AyX1JPTExPRkZfU1RBVFVTICAweGYyNmQwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1NDQU5fU0lHTiAgMHhmMjZkMDAzMAorI2RlZmluZSBGMDkwMF9QMl9UTUdfU0NBTk5JTkcgIDB4ZjI2ZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0hDRU5URVJJTkdfTU9ERSAgMHhmMjZkMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UTUdfU0NBTkZBSUwgIDB4ZjI2ZDAwMDIKKworLypQMl9FUVVBTENGRyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFMQ0ZHICAweGYyNmYKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfTkVHQUxXQUlUICAweGYyNmYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMX09OICAweGYyNmYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NFTF9FUVVBTENPUiAgMHhmMjZmMDAzOAorI2RlZmluZSBGMDkwMF9QMl9NVV9FUVVBTERGRSAgMHhmMjZmMDAwNworCisvKlAyX0VRVUFJMSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJMSAgMHhmMjcwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTEgIDB4ZjI3MDAxZmYKKworLypQMl9FUVVBUTEqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTEgIDB4ZjI3MQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1ExICAweGYyNzEwMWZmCisKKy8qUDJfRVFVQUkyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUkyICAweGYyNzIKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJMiAgMHhmMjcyMDFmZgorCisvKlAyX0VRVUFRMiovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRMiAgMHhmMjczCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTIgIDB4ZjI3MzAxZmYKKworLypQMl9FUVVBSTMqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTMgIDB4ZjI3NAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0kzICAweGYyNzQwMWZmCisKKy8qUDJfRVFVQVEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVEzICAweGYyNzUKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRMyAgMHhmMjc1MDFmZgorCisvKlAyX0VRVUFJNCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNCAgMHhmMjc2CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTQgIDB4ZjI3NjAxZmYKKworLypQMl9FUVVBUTQqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTQgIDB4ZjI3NworI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E0ICAweGYyNzcwMWZmCisKKy8qUDJfRVFVQUk1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk1ICAweGYyNzgKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJNSAgMHhmMjc4MDFmZgorCisvKlAyX0VRVUFRNSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRNSAgMHhmMjc5CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTUgIDB4ZjI3OTAxZmYKKworLypQMl9FUVVBSTYqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTYgIDB4ZjI3YQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k2ICAweGYyN2EwMWZmCisKKy8qUDJfRVFVQVE2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE2ICAweGYyN2IKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRNiAgMHhmMjdiMDFmZgorCisvKlAyX0VRVUFJNyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNyAgMHhmMjdjCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTcgIDB4ZjI3YzAxZmYKKworLypQMl9FUVVBUTcqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTcgIDB4ZjI3ZAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E3ICAweGYyN2QwMWZmCisKKy8qUDJfRVFVQUk4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk4ICAweGYyN2UKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJOCAgMHhmMjdlMDFmZgorCisvKlAyX0VRVUFROCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFROCAgMHhmMjdmCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTggIDB4ZjI3ZjAxZmYKKworLypQMl9OTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEFUMSAgMHhmMjgwCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDEgIDB4ZjI4MDAwZmYKKworLypQMl9OTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEFUMCAgMHhmMjgxCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDAgIDB4ZjI4MTAwZmYKKworLypQMl9OTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQTEgIDB4ZjI4MgorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX05PUk1FRDEgIDB4ZjI4MjAwZmYKKworLypQMl9OTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQTAgIDB4ZjI4MworI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX05PUk1FRDAgIDB4ZjI4MzAwZmYKKworLypQMl9OTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIVDEgIDB4ZjI4NAorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDEgIDB4ZjI4NDAwZmYKKworLypQMl9OTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIVDAgIDB4ZjI4NQorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDAgIDB4ZjI4NTAwZmYKKworLypQMl9OTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEgxICAweGYyODYKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX05PUk1FRDEgIDB4ZjI4NjAwZmYKKworLypQMl9OTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEgwICAweGYyODcKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX05PUk1FRDAgIDB4ZjI4NzAwZmYKKworLypQMl9OT1NEQVRBVDEqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBVDEgIDB4ZjI4OAorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9VTk5PUk1FRDEgIDB4ZjI4ODAwZmYKKworLypQMl9OT1NEQVRBVDAqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBVDAgIDB4ZjI4OQorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9VTk5PUk1FRDAgIDB4ZjI4OTAwZmYKKworLypQMl9OT1NEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEExICAweGYyOGEKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9VTk5PUk1FRDEgIDB4ZjI4YTAwZmYKKworLypQMl9OT1NEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEEwICAweGYyOGIKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9VTk5PUk1FRDAgIDB4ZjI4YjAwZmYKKworLypQMl9OT1NQTEhUMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSFQxICAweGYyOGMKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9VTk5PUk1FRDEgIDB4ZjI4YzAwZmYKKworLypQMl9OT1NQTEhUMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSFQwICAweGYyOGQKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9VTk5PUk1FRDAgIDB4ZjI4ZDAwZmYKKworLypQMl9OT1NQTEgxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIMSAgMHhmMjhlCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9VTk5PUk1FRDEgIDB4ZjI4ZTAwZmYKKworLypQMl9OT1NQTEgwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIMCAgMHhmMjhmCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9VTk5PUk1FRDAgIDB4ZjI4ZjAwZmYKKworLypQMl9DQVIyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSMkNGRyAgMHhmMjkwCisjZGVmaW5lIEYwOTAwX1AyX0RFU0NSQU1CX09GRiAgMHhmMjkwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9QTjRfU0VMRUNUICAweGYyOTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NGUjJfU1RPUERWQlMxICAweGYyOTAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfQ0ZSMlVQREFURSAgMHhmMjkwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9TVE9QX05DTzJVUERBVEUgIDB4ZjI5MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfUk9UQTJPTiAgMHhmMjkwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9QSF9ERVRfQUxHTzIgIDB4ZjI5MDAwMDMKKworLypQMl9BQ0xDMiovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyICAweGYyOTEKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9QVU5DVF9BREVSQVQgIDB4ZjI5MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9BTFBIQV9NQU5UICAweGYyOTEwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfQUxQSEFfRVhQICAweGYyOTEwMDBmCisKKy8qUDJfQkNMQzIqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMiAgMHhmMjkyCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyX05JUCAgMHhmMjkyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX1BVTkNUX0JERVJBVCAgMHhmMjkyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0JFVEFfTUFOVCAgMHhmMjkyMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0JFVEFfRVhQICAweGYyOTIwMDBmCisKKy8qUDJfQ0ZSMjIqLworI2RlZmluZSBSMDkwMF9QMl9DRlIyMiAgMHhmMjkzCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfRlJFUTIgIDB4ZjI5MzAxZmYKKworLypQMl9DRlIyMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjIxICAweGYyOTQKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9GUkVRMSAgMHhmMjk0MDBmZgorCisvKlAyX0NGUjIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMjAgIDB4ZjI5NQorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0ZSRVEwICAweGYyOTUwMGZmCisKKy8qUDJfQUNMQzJTMlEqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMlMyUSAgMHhmMjk3CisjZGVmaW5lIEYwOTAwX1AyX0VOQUJfU1BTS1NZTUIgIDB4ZjI5NzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FBREVSQVQgIDB4ZjI5NzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQUxQSF9NICAweGYyOTcwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0FMUEhfRSAgMHhmMjk3MDAwZgorCisvKlAyX0FDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMjggIDB4ZjI5OAorI2RlZmluZSBGMDkwMF9QMl9PTERJM1FfTU9ERSAgMHhmMjk4MDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOEFERVJBVCAgMHhmMjk4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOF9BTFBIX00gIDB4ZjI5ODAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQUxQSF9FICAweGYyOTgwMDBmCisKKy8qUDJfQUNMQzJTMjE2QSovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyUzIxNkEgIDB4ZjI5OQorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBREVSQVQgIDB4ZjI5OTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9BTFBIX00gIDB4ZjI5OTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9BTFBIX0UgIDB4ZjI5OTAwMGYKKworLypQMl9BQ0xDMlMyMzJBKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMjMyQSAgMHhmMjlhCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFERVJBVCAgMHhmMjlhMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0FMUEhfTSAgMHhmMjlhMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0FMUEhfRSAgMHhmMjlhMDAwZgorCisvKlAyX0JDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMlEgIDB4ZjI5YworI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyUV9OSVAgIDB4ZjI5YzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FCREVSQVQgIDB4ZjI5YzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQkVUQV9NICAweGYyOWMwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0JFVEFfRSAgMHhmMjljMDAwZgorCisvKlAyX0JDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMjggIDB4ZjI5ZAorI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyOF9OSVAgIDB4ZjI5ZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhCREVSQVQgIDB4ZjI5ZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQkVUQV9NICAweGYyOWQwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84X0JFVEFfRSAgMHhmMjlkMDAwZgorCisvKlAyX0JDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMlMyMTZBICAweGYyOWUKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJTMjE2QV9OSVAgIDB4ZjI5ZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QkRFUkFUICAweGYyOWUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQkVUQV9NICAweGYyOWUwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQkVUQV9FICAweGYyOWUwMDBmCisKKy8qUDJfQkNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyUzIzMkEgIDB4ZjI5ZgorI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyMzJBX05JUCAgMHhmMjlmMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJCREVSQVQgIDB4ZjI5ZjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9CRVRBX00gIDB4ZjI5ZjAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9CRVRBX0UgIDB4ZjI5ZjAwMGYKKworLypQMl9QTFJPT1QyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUExST09UMiAgMHhmMmFjCisjZGVmaW5lIEYwOTAwX1AyX1NIT1JURlJfRElTQUJMRSAgMHhmMmFjMDA4MAorI2RlZmluZSBGMDkwMF9QMl9MT05HRlJfRElTQUJMRSAgMHhmMmFjMDA0MAorI2RlZmluZSBGMDkwMF9QMl9EVU1NWVBMX0RJU0FCTEUgIDB4ZjJhYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRGUl9BVk9JRCAgMHhmMmFjMDAxMAorI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9NT0RFICAweGYyYWMwMDBjCisjZGVmaW5lIEYwOTAwX1AyX1BMU0NSQU1CX1JPT1QyICAweGYyYWMwMDAzCisKKy8qUDJfUExST09UMSovCisjZGVmaW5lIFIwOTAwX1AyX1BMUk9PVDEgIDB4ZjJhZAorI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9ST09UMSAgMHhmMmFkMDBmZgorCisvKlAyX1BMUk9PVDAqLworI2RlZmluZSBSMDkwMF9QMl9QTFJPT1QwICAweGYyYWUKKyNkZWZpbmUgRjA5MDBfUDJfUExTQ1JBTUJfUk9PVDAgIDB4ZjJhZTAwZmYKKworLypQMl9NT0RDT0RMU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMCAgMHhmMmIwCisjZGVmaW5lIEYwOTAwX1AyX0VOX1RPS0VOMzEgIDB4ZjJiMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ1RBR19TRUxFQ1QgIDB4ZjJiMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfTU9EQ09EUlFfTU9ERSAgMHhmMmIwMDAzMAorCisvKlAyX01PRENPRExTVDEqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1QxICAweGYyYjEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX01PRENPRDI5ICAweGYyYjEwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS185XzEwICAweGYyYjEwMDBmCisKKy8qUDJfTU9EQ09ETFNUMiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDIgIDB4ZjJiMgorI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfOF85ICAweGYyYjIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS181XzYgIDB4ZjJiMjAwMGYKKworLypQMl9NT0RDT0RMU1QzKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMyAgMHhmMmIzCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS180XzUgIDB4ZjJiMzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzNfNCAgMHhmMmIzMDAwZgorCisvKlAyX01PRENPRExTVDQqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q0ICAweGYyYjQKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzlfMTAgIDB4ZjJiNDAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzhfOSAgMHhmMmI0MDAwZgorCisvKlAyX01PRENPRExTVDUqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q1ICAweGYyYjUKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzVfNiAgMHhmMmI1MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfNF81ICAweGYyYjUwMDBmCisKKy8qUDJfTU9EQ09ETFNUNiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDYgIDB4ZjJiNgorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfM180ICAweGYyYjYwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS18yXzMgIDB4ZjJiNjAwMGYKKworLypQMl9NT0RDT0RMU1Q3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUNyAgMHhmMmI3CisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF85XzEwICAweGYyYjcwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF84XzkgIDB4ZjJiNzAwMGYKKworLypQMl9NT0RDT0RMU1Q4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUOCAgMHhmMmI4CisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF81XzYgIDB4ZjJiODAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzNfNCAgMHhmMmI4MDAwZgorCisvKlAyX01PRENPRExTVDkqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q5ICAweGYyYjkKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzJfMyAgMHhmMmI5MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfM181ICAweGYyYjkwMDBmCisKKy8qUDJfTU9EQ09ETFNUQSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEEgIDB4ZjJiYQorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfOV8xMCAgMHhmMmJhMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfOF85ICAweGYyYmEwMDBmCisKKy8qUDJfTU9EQ09ETFNUQiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEIgIDB4ZjJiYgorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfNV82ICAweGYyYmIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF80XzUgIDB4ZjJiYjAwMGYKKworLypQMl9NT0RDT0RMU1RDKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUQyAgMHhmMmJjCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8zXzQgIDB4ZjJiYzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzJfMyAgMHhmMmJjMDAwZgorCisvKlAyX01PRENPRExTVEQqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1REICAweGYyYmQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzNfNSAgMHhmMmJkMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMV8yICAweGYyYmQwMDBmCisKKy8qUDJfTU9EQ09ETFNURSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEUgIDB4ZjJiZQorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMl81ICAweGYyYmUwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8xXzMgIDB4ZjJiZTAwMGYKKworLypQMl9NT0RDT0RMU1RGKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNURiAgMHhmMmJmCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8xXzQgIDB4ZjJiZjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRERFTU9EX1NFVCAgMHhmMmJmMDAwMgorI2RlZmluZSBGMDkwMF9QMl9EREVNT0RfTUFTSyAgMHhmMmJmMDAwMQorCisvKlAyX0RNRFJFU0NGRyovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0NGRyAgMHhmMmM2CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19SRVNFVCAgMHhmMmM2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTk9JU0VTUVIgIDB4ZjJjNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX1NUUkFMTCAgMHhmMmM2MDAwOAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTkVXT05MWSAgMHhmMmM2MDAwNAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTk9TVE9SRSAgMHhmMmM2MDAwMgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfQUdDMk1FTSAgMHhmMmM2MDAwMQorCisvKlAyX0RNRFJFU0FEUiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0FEUiAgMHhmMmM3CisjZGVmaW5lIEYwOTAwX1AyX1NVU1BfUFJFRENBTkFMICAweGYyYzcwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19WQUxJRENGUiAgMHhmMmM3MDA0MAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTUVNRlVMTCAgMHhmMmM3MDAzMAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfUkVTTkJSICAweGYyYzcwMDBmCisKKy8qUDJfRE1EUkVTREFUQTcqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNyAgMHhmMmM4CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNyAgMHhmMmM4MDBmZgorCisvKlAyX0RNRFJFU0RBVEE2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTYgIDB4ZjJjOQorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTYgIDB4ZjJjOTAwZmYKKworLypQMl9ETURSRVNEQVRBNSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEE1ICAweGYyY2EKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEE1ICAweGYyY2EwMGZmCisKKy8qUDJfRE1EUkVTREFUQTQqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNCAgMHhmMmNiCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNCAgMHhmMmNiMDBmZgorCisvKlAyX0RNRFJFU0RBVEEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTMgIDB4ZjJjYworI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTMgIDB4ZjJjYzAwZmYKKworLypQMl9ETURSRVNEQVRBMiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEEyICAweGYyY2QKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEEyICAweGYyY2QwMGZmCisKKy8qUDJfRE1EUkVTREFUQTEqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBMSAgMHhmMmNlCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBMSAgMHhmMmNlMDBmZgorCisvKlAyX0RNRFJFU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTAgIDB4ZjJjZgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTAgIDB4ZjJjZjAwZmYKKworLypQMl9GRkVJMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUkxICAweGYyZDAKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0kxICAweGYyZDAwMWZmCisKKy8qUDJfRkZFUTEqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRMSAgMHhmMmQxCisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRMSAgMHhmMmQxMDFmZgorCisvKlAyX0ZGRUkyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFSTIgIDB4ZjJkMgorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDSTIgIDB4ZjJkMjAxZmYKKworLypQMl9GRkVRMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRVEyICAweGYyZDMKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ1EyICAweGYyZDMwMWZmCisKKy8qUDJfRkZFSTMqLworI2RlZmluZSBSMDkwMF9QMl9GRkVJMyAgMHhmMmQ0CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NJMyAgMHhmMmQ0MDFmZgorCisvKlAyX0ZGRVEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFUTMgIDB4ZjJkNQorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDUTMgIDB4ZjJkNTAxZmYKKworLypQMl9GRkVJNCovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUk0ICAweGYyZDYKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0k0ICAweGYyZDYwMWZmCisKKy8qUDJfRkZFUTQqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRNCAgMHhmMmQ3CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRNCAgMHhmMmQ3MDFmZgorCisvKlAyX0ZGRUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUNGRyAgMHhmMmQ4CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMRkZFX09OICAweGYyZDgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMX1VTRURTWU1CICAweGYyZDgwMDMwCisjZGVmaW5lIEYwOTAwX1AyX01VX0VRVUFMRkZFICAweGYyZDgwMDA3CisKKy8qUDJfVE5SQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ0ZHICAweGYyZTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0FDS0ZBSUwgIDB4ZjJlMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1RZUEUgIDB4ZjJlMDAwNzAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1NFQ1NUT1AgIDB4ZjJlMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1ZDT1NSQ0ggIDB4ZjJlMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX01BRERSRVNTICAweGYyZTAwMDAzCisKKy8qUDJfVE5SQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNGRzIgIDB4ZjJlMQorI2RlZmluZSBGMDkwMF9QMl9UVU5fSVFTV0FQICAweGYyZTEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfU1RFUDJNSFogIDB4ZjJlMTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9EQkxJMkMgIDB4ZjJlMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0ZDQ0sgIDB4ZjJlMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0xQRU4gIDB4ZjJlMTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0JXQ0FMQyAgMHhmMmUxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TSE9SVF9XQUlUU1RBVEVTICAweGYyZTEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RJU18yQldBR0MxICAweGYyZTEwMDAxCisKKy8qUDJfVE5SWFRBTCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlhUQUwgIDB4ZjJlNAorI2RlZmluZSBGMDkwMF9QMl9UVU5fTUNMS0RFQ0lNQUwgIDB4ZjJlNDAwZTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1hUQUxGUkVRICAweGYyZTQwMDFmCisKKy8qUDJfVE5SU1RFUFMqLworI2RlZmluZSBSMDkwMF9QMl9UTlJTVEVQUyAgMHhmMmU3CisjZGVmaW5lIEYwOTAwX1AyX1RVTkVSX0JXMVA2ICAweGYyZTcwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0JXSU5DX09GRlNFVCAgMHhmMmU3MDA3MAorI2RlZmluZSBGMDkwMF9QMl9TT0ZUU1RFUF9STkcgIDB4ZjJlNzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0JXT0ZGU0VUICAweGYyZTcwMTA3CisKKy8qUDJfVE5SR0FJTiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkdBSU4gIDB4ZjJlOAorI2RlZmluZSBGMDkwMF9QMl9UVU5fS0RJVkVOICAweGYyZTgwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjZYMDBfT0NLICAweGYyZTgwMDMwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9HQUlOICAweGYyZTgwMDBmCisKKy8qUDJfVE5SUkYxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SUkYxICAweGYyZTkKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGRlJFUTIgIDB4ZjJlOTAwZmYKKworLypQMl9UTlJSRjAqLworI2RlZmluZSBSMDkwMF9QMl9UTlJSRjAgIDB4ZjJlYQorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZGUkVRMSAgMHhmMmVhMDBmZgorCisvKlAyX1ROUkJXKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQlcgIDB4ZjJlYgorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZGUkVRMCAgMHhmMmViMDBjMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQlcgIDB4ZjJlYjAwM2YKKworLypQMl9UTlJBREoqLworI2RlZmluZSBSMDkwMF9QMl9UTlJBREogIDB4ZjJlYworI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX1JDTEsgIDB4ZjJlYzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9DQUxUSU1FICAweGYyZWMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjZYMDBfRExCICAweGYyZWMwMDM4CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYwMDBfRkNMICAweGYyZWMwMDA3CisKKy8qUDJfVE5SQ1RMMiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNUTDIgIDB4ZjJlZAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0xDUDFfUkNDS09GRiAgMHhmMmVkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0xDUDAgIDB4ZjJlZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9YVE9VVF9SRk9VVFMgIDB4ZjJlZDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9YVE9OX01DS0RWICAweGYyZWQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfQ0FMT0ZGX0RDT0ZGICAweGYyZWQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfTFBUICAweGYyZWQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfUlggIDB4ZjJlZDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjExMF9TWU4gIDB4ZjJlZDAwMDEKKworLypQMl9UTlJDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ0ZHMyAgMHhmMmVlCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMjBfRElTQ1RSTDEgIDB4ZjJlZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9JTlZPUkRFUiAgMHhmMmVlMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTIwX0VOQ1RSTDYgIDB4ZjJlZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1BMTEZSRVEgIDB4ZjJlZTAwMWMKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0kyQ0ZSRVFfTU9ERSAgMHhmMmVlMDAwMworCisvKlAyX1ROUkxBVU5DSCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkxBVU5DSCAgMHhmMmYwCisKKy8qUDJfVE5STEQqLworI2RlZmluZSBSMDkwMF9QMl9UTlJMRCAgMHhmMmYwCisjZGVmaW5lIEYwOTAwX1AyX1RVTkxEX1ZDT0lORyAgMHhmMmYwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHMUZBSUwgIDB4ZjJmMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzJGQUlMICAweGYyZjAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUczRkFJTCAgMHhmMmYwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHNEZBSUwgIDB4ZjJmMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzVGQUlMICAweGYyZjAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9CV0lORyAgMHhmMmYwMDAwMgorI2RlZmluZSBGMDkwMF9QMl9UVU5fTE9DS0VEICAweGYyZjAwMDAxCisKKy8qUDJfVE5ST0JTTCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUk9CU0wgIDB4ZjJmNgorI2RlZmluZSBGMDkwMF9QMl9UVU5fSTJDQUJPUlRFRCAgMHhmMmY2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fTFBFTiAgMHhmMmY2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fRkNDSyAgMHhmMmY2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fSTJDTE9DS0VEICAweGYyZjYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9QUk9HRE9ORSAgMHhmMmY2MDAwYworI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZSRVNURTEgIDB4ZjJmNjAwMDMKKworLypQMl9UTlJSRVNURSovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlJFU1RFICAweGYyZjcKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGUkVTVEUwICAweGYyZjcwMGZmCisKKy8qUDJfU01BUENPRUY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfU01BUENPRUY3ICAweGYzMDAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FTQ0FMRSAgMHhmMzAwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TTUFQQ09FRl9RX0xMUjEyICAweGYzMDAwMTdmCisKKy8qUDJfU01BUENPRUY2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfU01BUENPRUY2ICAweGYzMDEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX05FV1NDQUxFICAweGYzMDEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FESl84UFNLTExSMSAgMHhmMzAxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9PTERfOFBTS0xMUjEgIDB4ZjMwMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0FCOFBTSyAgMHhmMzAxMDAwMQorCisvKlAyX1NNQVBDT0VGNSovCisjZGVmaW5lIFIwOTAwX1AyX1NNQVBDT0VGNSAgMHhmMzAyCisjZGVmaW5lIEYwOTAwX1AyX0RJU184U0NBTEUgIDB4ZjMwMjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU01BUENPRUZfOFBfTExSMjMgIDB4ZjMwMjAxN2YKKworLypQMl9ETURQTEhTVEFUKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUExIU1RBVCAgMHhmMzIwCisjZGVmaW5lIEYwOTAwX1AyX1BMSF9TVEFUSVNUSUMgIDB4ZjMyMDAwZmYKKworLypQMl9MT0NLVElNRTMqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTMgIDB4ZjMyMgorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTMgIDB4ZjMyMjAwZmYKKworLypQMl9MT0NLVElNRTIqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTIgIDB4ZjMyMworI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTIgIDB4ZjMyMzAwZmYKKworLypQMl9MT0NLVElNRTEqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTEgIDB4ZjMyNAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTEgIDB4ZjMyNDAwZmYKKworLypQMl9MT0NLVElNRTAqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTAgIDB4ZjMyNQorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTAgIDB4ZjMyNTAwZmYKKworLypQMl9WSVRTQ0FMRSovCisjZGVmaW5lIFIwOTAwX1AyX1ZJVFNDQUxFICAweGYzMzIKKyNkZWZpbmUgRjA5MDBfUDJfTlZUSF9OT1NSQU5HRSAgMHhmMzMyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9WRVJST1JfTUFYTU9ERSAgMHhmMzMyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9LRElWX01PREUgIDB4ZjMzMjAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfTlNMT1dTTl9MT0NLRUQgIDB4ZjMzMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfREVMT0NLX1BSRkxPU1MgIDB4ZjMzMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1JTRkxPQ0sgIDB4ZjMzMjAwMDIKKworLypQMl9GRUNNKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkVDTSAgMHhmMzMzCisjZGVmaW5lIEYwOTAwX1AyX0RTU19EVkIgIDB4ZjMzMzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfQllQQVNTICAweGYzMzMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NNUF9TTE9XTU9ERSAgMHhmMzMzMDAyMAorI2RlZmluZSBGMDkwMF9QMl9EU1NfU1JDSCAgMHhmMzMzMDAxMAorI2RlZmluZSBGMDkwMF9QMl9ESUZGX01PREVWSVQgIDB4ZjMzMzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ1ZJVCAgMHhmMzMzMDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUUlOViAgMHhmMzMzMDAwMQorCisvKlAyX1ZUSDEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMTIgIDB4ZjMzNAorI2RlZmluZSBGMDkwMF9QMl9WVEgxMiAgMHhmMzM0MDBmZgorCisvKlAyX1ZUSDIzKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMjMgIDB4ZjMzNQorI2RlZmluZSBGMDkwMF9QMl9WVEgyMyAgMHhmMzM1MDBmZgorCisvKlAyX1ZUSDM0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMzQgIDB4ZjMzNgorI2RlZmluZSBGMDkwMF9QMl9WVEgzNCAgMHhmMzM2MDBmZgorCisvKlAyX1ZUSDU2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINTYgIDB4ZjMzNworI2RlZmluZSBGMDkwMF9QMl9WVEg1NiAgMHhmMzM3MDBmZgorCisvKlAyX1ZUSDY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINjcgIDB4ZjMzOAorI2RlZmluZSBGMDkwMF9QMl9WVEg2NyAgMHhmMzM4MDBmZgorCisvKlAyX1ZUSDc4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINzggIDB4ZjMzOQorI2RlZmluZSBGMDkwMF9QMl9WVEg3OCAgMHhmMzM5MDBmZgorCisvKlAyX1ZJVENVUlBVTiovCisjZGVmaW5lIFIwOTAwX1AyX1ZJVENVUlBVTiAgMHhmMzNhCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9NQVBQSU5HICAweGYzM2EwMGUwCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9DVVJQVU4gIDB4ZjMzYTAwMWYKKworLypQMl9WRVJST1IqLworI2RlZmluZSBSMDkwMF9QMl9WRVJST1IgIDB4ZjMzYgorI2RlZmluZSBGMDkwMF9QMl9SRUdFUlJfVklUICAweGYzM2IwMGZmCisKKy8qUDJfUFJWSVQqLworI2RlZmluZSBSMDkwMF9QMl9QUlZJVCAgMHhmMzNjCisjZGVmaW5lIEYwOTAwX1AyX0RJU19WVEhMT0NLICAweGYzM2MwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0U3XzhWSVQgIDB4ZjMzYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRTZfN1ZJVCAgMHhmMzNjMDAxMAorI2RlZmluZSBGMDkwMF9QMl9FNV82VklUICAweGYzM2MwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0UzXzRWSVQgIDB4ZjMzYzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRTJfM1ZJVCAgMHhmMzNjMDAwMgorI2RlZmluZSBGMDkwMF9QMl9FMV8yVklUICAweGYzM2MwMDAxCisKKy8qUDJfVkFWU1JWSVQqLworI2RlZmluZSBSMDkwMF9QMl9WQVZTUlZJVCAgMHhmMzNkCisjZGVmaW5lIEYwOTAwX1AyX0FNVklUICAweGYzM2QwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZST1pFTlZJVCAgMHhmMzNkMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TTlZJVCAgMHhmMzNkMDAzMAorI2RlZmluZSBGMDkwMF9QMl9UT1ZWSVQgIDB4ZjMzZDAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfSFlQVklUICAweGYzM2QwMDAzCisKKy8qUDJfVlNUQVRVU1ZJVCovCisjZGVmaW5lIFIwOTAwX1AyX1ZTVEFUVVNWSVQgIDB4ZjMzZQorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX09OICAweGYzM2UwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VORF9MT09QVklUICAweGYzM2UwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1ZJVEVSQklfREVQUkYgIDB4ZjMzZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfUFJGVklUICAweGYzM2UwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tFRFZJVCAgMHhmMzNlMDAwOAorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX0RFTE9DSyAgMHhmMzNlMDAwNAorI2RlZmluZSBGMDkwMF9QMl9WSVRfREVNT0RTRUwgIDB4ZjMzZTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVklURVJCSV9DT01QT1VUICAweGYzM2UwMDAxCisKKy8qUDJfVlRISU5VU0UqLworI2RlZmluZSBSMDkwMF9QMl9WVEhJTlVTRSAgMHhmMzNmCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9JTlVTRSAgMHhmMzNmMDBmZgorCisvKlAyX0tESVYxMiovCisjZGVmaW5lIFIwOTAwX1AyX0tESVYxMiAgMHhmMzQwCisjZGVmaW5lIEYwOTAwX1AyX0tESVYxMl9NQU5VQUwgIDB4ZjM0MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzEyICAweGYzNDAwMDdmCisKKy8qUDJfS0RJVjIzKi8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjIzICAweGYzNDEKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjIzX01BTlVBTCAgMHhmMzQxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfMjMgIDB4ZjM0MTAwN2YKKworLypQMl9LRElWMzQqLworI2RlZmluZSBSMDkwMF9QMl9LRElWMzQgIDB4ZjM0MgorI2RlZmluZSBGMDkwMF9QMl9LRElWMzRfTUFOVUFMICAweGYzNDIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl8zNCAgMHhmMzQyMDA3ZgorCisvKlAyX0tESVY1NiovCisjZGVmaW5lIFIwOTAwX1AyX0tESVY1NiAgMHhmMzQzCisjZGVmaW5lIEYwOTAwX1AyX0tESVY1Nl9NQU5VQUwgIDB4ZjM0MzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzU2ICAweGYzNDMwMDdmCisKKy8qUDJfS0RJVjY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjY3ICAweGYzNDQKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjY3X01BTlVBTCAgMHhmMzQ0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfNjcgIDB4ZjM0NDAwN2YKKworLypQMl9LRElWNzgqLworI2RlZmluZSBSMDkwMF9QMl9LRElWNzggIDB4ZjM0NQorI2RlZmluZSBGMDkwMF9QMl9LRElWNzhfTUFOVUFMICAweGYzNDUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl83OCAgMHhmMzQ1MDA3ZgorCisvKlAyX1BERUxDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxDVFJMMSAgMHhmMzUwCisjZGVmaW5lIEYwOTAwX1AyX0lOVl9NSVNNQVNLICAweGYzNTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0FDQ0VQVEVEICAweGYzNTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0ZJTFRFUl9FTiAgMHhmMzUwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9QS1RERUxJTlVTRSAgMHhmMzUwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9IWVNURU4gIDB4ZjM1MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfSFlTVFNXUlNUICAweGYzNTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0VOX01JUzAwICAweGYzNTAwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0FMR09TV1JTVCAgMHhmMzUwMDAwMQorCisvKlAyX1BERUxDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxDVFJMMiAgMHhmMzUxCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0NPTlRJTlVPVVMgIDB4ZjM1MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUkVTRVRfVVBLT19DT1VOVCAgMHhmMzUxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9VU0VSX1BLVERFTElOX05CICAweGYzNTEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0xPQ0tFRCAgMHhmMzUxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9EQVRBX1VOQkJTQ1JBTSAgMHhmMzUxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9MT05HUEtUICAweGYzNTEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0ZSQU1FX01PREUgIDB4ZjM1MTAwMDIKKworLypQMl9IWVNUVEhSRVNIKi8KKyNkZWZpbmUgUjA5MDBfUDJfSFlTVFRIUkVTSCAgMHhmMzU0CisjZGVmaW5lIEYwOTAwX1AyX1VOTENLX1RIUkVTSCAgMHhmMzU0MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ERUxJTl9MQ0tfVEhSRVNIICAweGYzNTQwMDBmCisKKy8qUDJfSVNJRU5UUlkqLworI2RlZmluZSBSMDkwMF9QMl9JU0lFTlRSWSAgMHhmMzVlCisjZGVmaW5lIEYwOTAwX1AyX0lTSV9FTlRSWSAgMHhmMzVlMDBmZgorCisvKlAyX0lTSUJJVEVOQSovCisjZGVmaW5lIFIwOTAwX1AyX0lTSUJJVEVOQSAgMHhmMzVmCisjZGVmaW5lIEYwOTAwX1AyX0lTSV9CSVRfRU4gIDB4ZjM1ZjAwZmYKKworLypQMl9NQVRTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTUFUU1RSMSAgMHhmMzYwCisjZGVmaW5lIEYwOTAwX1AyX01BVFlQRV9DVVJSRU5UMSAgMHhmMzYwMDBmZgorCisvKlAyX01BVFNUUjAqLworI2RlZmluZSBSMDkwMF9QMl9NQVRTVFIwICAweGYzNjEKKyNkZWZpbmUgRjA5MDBfUDJfTUFUWVBFX0NVUlJFTlQwICAweGYzNjEwMGZmCisKKy8qUDJfVVBMU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX1VQTFNUUjEgIDB4ZjM2MgorI2RlZmluZSBGMDkwMF9QMl9VUExfQ1VSUkVOVDEgIDB4ZjM2MjAwZmYKKworLypQMl9VUExTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBMU1RSMCAgMHhmMzYzCisjZGVmaW5lIEYwOTAwX1AyX1VQTF9DVVJSRU5UMCAgMHhmMzYzMDBmZgorCisvKlAyX0RGTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMl9ERkxTVFIxICAweGYzNjQKKyNkZWZpbmUgRjA5MDBfUDJfREZMX0NVUlJFTlQxICAweGYzNjQwMGZmCisKKy8qUDJfREZMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AyX0RGTFNUUjAgIDB4ZjM2NQorI2RlZmluZSBGMDkwMF9QMl9ERkxfQ1VSUkVOVDAgIDB4ZjM2NTAwZmYKKworLypQMl9TWU5DU1RSKi8KKyNkZWZpbmUgUjA5MDBfUDJfU1lOQ1NUUiAgMHhmMzY2CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNfQ1VSUkVOVCAgMHhmMzY2MDBmZgorCisvKlAyX1NZTkNEU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX1NZTkNEU1RSMSAgMHhmMzY3CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNEX0NVUlJFTlQxICAweGYzNjcwMGZmCisKKy8qUDJfU1lOQ0RTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU1lOQ0RTVFIwICAweGYzNjgKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ0RfQ1VSUkVOVDAgIDB4ZjM2ODAwZmYKKworLypQMl9QREVMU1RBVFVTMSovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxTVEFUVVMxICAweGYzNjkKKyNkZWZpbmUgRjA5MDBfUDJfUEtUREVMSU5fREVMT0NLICAweGYzNjkwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTkNEVVBERkxfQkFEREZMICAweGYzNjkwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NPTlRJTlVPVVNfU1RSRUFNICAweGYzNjkwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1VOQUNDRVBURURfU1RSRUFNICAweGYzNjkwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0JDSF9FUlJPUl9GTEFHICAweGYzNjkwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0JCSENSQ0tPICAweGYzNjkwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1BLVERFTElOX0xPQ0sgIDB4ZjM2OTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRklSU1RfTE9DSyAgMHhmMzY5MDAwMQorCisvKlAyX1BERUxTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUERFTFNUQVRVUzIgIDB4ZjM2YQorI2RlZmluZSBGMDkwMF9QMl9QS1RERUxfREVNT0RTRUwgIDB4ZjM2YTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRlJBTUVfTU9EQ09EICAweGYzNmEwMDdjCisjZGVmaW5lIEYwOTAwX1AyX0ZSQU1FX1RZUEUgIDB4ZjM2YTAwMDMKKworLypQMl9CQkZDUkNLTzEqLworI2RlZmluZSBSMDkwMF9QMl9CQkZDUkNLTzEgIDB4ZjM2YgorI2RlZmluZSBGMDkwMF9QMl9CQkhDUkNfS09DTlQxICAweGYzNmIwMGZmCisKKy8qUDJfQkJGQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkJGQ1JDS08wICAweGYzNmMKKyNkZWZpbmUgRjA5MDBfUDJfQkJIQ1JDX0tPQ05UMCAgMHhmMzZjMDBmZgorCisvKlAyX1VQQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBDUkNLTzEgIDB4ZjM2ZAorI2RlZmluZSBGMDkwMF9QMl9QS1RDUkNfS09DTlQxICAweGYzNmQwMGZmCisKKy8qUDJfVVBDUkNLTzAqLworI2RlZmluZSBSMDkwMF9QMl9VUENSQ0tPMCAgMHhmMzZlCisjZGVmaW5lIEYwOTAwX1AyX1BLVENSQ19LT0NOVDAgIDB4ZjM2ZTAwZmYKKworLypQMl9UU1NUQVRFTSovCisjZGVmaW5lIFIwOTAwX1AyX1RTU1RBVEVNICAweGYzNzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNESUxfT04gIDB4ZjM3MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNTS0lQUlNfT04gIDB4ZjM3MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNSU19PTiAgMHhmMzcwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0RFU0NSQU1CX09OICAweGYzNzAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRlJBTUVfTU9ERSAgMHhmMzcwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU19ESVNBQkxFICAweGYzNzAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTQUNNX01PREUgIDB4ZjM3MDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNPVVRfTk9TWU5DICAweGYzNzAwMDAxCisKKy8qUDJfVFNDRkdIKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNDRkdIICAweGYzNzIKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RWQkNJICAweGYzNzIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19TRVJJQUwgIDB4ZjM3MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1RFSVVQREFURSAgMHhmMzcyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRFVUWTUwICAweGYzNzIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19IU0dOTE9VVCAgMHhmMzcyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRVJSTU9ERSAgMHhmMzcyMDAwNgorI2RlZmluZSBGMDkwMF9QMl9SU1RfSFdBUkUgIDB4ZjM3MjAwMDEKKworLypQMl9UU0NGR00qLworI2RlZmluZSBSMDkwMF9QMl9UU0NGR00gIDB4ZjM3MworI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTUFOU1BFRUQgIDB4ZjM3MzAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1BFUk1EQVRBICAweGYzNzMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OT05FV1NHTkwgIDB4ZjM3MzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0JJVFNQRUVEICAweGYzNzMwMDA4CisjZGVmaW5lIEYwOTAwX1AyX05QRF9TUEVDRFZCUzIgIDB4ZjM3MzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1NUT1BDS0RJUyAgMHhmMzczMDAwMgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fSU5WREFUQSAgMHhmMzczMDAwMQorCisvKlAyX1RTQ0ZHTCovCisjZGVmaW5lIFIwOTAwX1AyX1RTQ0ZHTCAgMHhmMzc0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CQ0xLREVMMUNLICAweGYzNzQwMGMwCisjZGVmaW5lIEYwOTAwX1AyX0JDSEVSUk9SX01PREUgIDB4ZjM3NDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX05TR05MMkRBVEEgIDB4ZjM3NDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0VNQklORFZCICAweGYzNzQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EUFVOQUNUICAweGYzNzQwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OUERPRkYgIDB4ZjM3NDAwMDEKKworLypQMl9UU0lOU0RFTEgqLworI2RlZmluZSBSMDkwMF9QMl9UU0lOU0RFTEggIDB4ZjM3NgorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9TWU5DQllURSAgMHhmMzc2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9YWEhFQURFUiAgMHhmMzc2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9CQkhFQURFUiAgMHhmMzc2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9EQVRBRklFTEQgIDB4ZjM3NjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfSVNDUiAgMHhmMzc2MDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU0lOU0RFTF9OUEQgIDB4ZjM3NjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfUlNQQVJJVFkgIDB4ZjM3NjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfQ1JDOCAgMHhmMzc2MDAwMQorCisvKlAyX1RTU1BFRUQqLworI2RlZmluZSBSMDkwMF9QMl9UU1NQRUVEICAweGYzODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX09VVFNQRUVEICAweGYzODAwMGZmCisKKy8qUDJfVFNTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9UU1NUQVRVUyAgMHhmMzgxCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19MSU5FT0sgIDB4ZjM4MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0VSUk9SICAweGYzODEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EQVRBNyAgMHhmMzgxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTk9TWU5DICAweGYzODEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0lTQ1JfSU5JVElBTElaRUQgIDB4ZjM4MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfSVNDUl9VUERBVEVEICAweGYzODEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NPRkZJRk9fVU5SRUdVTCAgMHhmMzgxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9ESUxfUkVBRFkgIDB4ZjM4MTAwMDEKKworLypQMl9UU1NUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMl9UU1NUQVRVUzIgIDB4ZjM4MgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fREVNT0RTRUwgIDB4ZjM4MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPU1BFRURfU1RPUkUgIDB4ZjM4MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRElMWFhfUkVTRVQgIDB4ZjM4MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNTRVJJQUxfSU1QT1MgIDB4ZjM4MjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0xJTkVOT0sgIDB4ZjM4MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQklUU1BFRURfRVZFTlQgIDB4ZjM4MjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU0NSQU1CREVURUNUICAweGYzODIwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1VMRFRWNjdfRkFMU0VMT0NLICAweGYzODIwMDAxCisKKy8qUDJfVFNCSVRSQVRFMSovCisjZGVmaW5lIFIwOTAwX1AyX1RTQklUUkFURTEgIDB4ZjM4MworI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fQklUUkFURTEgIDB4ZjM4MzAwZmYKKworLypQMl9UU0JJVFJBVEUwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNCSVRSQVRFMCAgMHhmMzg0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CSVRSQVRFMCAgMHhmMzg0MDBmZgorCisvKlAyX0VSUkNUUkwxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ1RSTDEgIDB4ZjM5OAorI2RlZmluZSBGMDkwMF9QMl9FUlJfU09VUkNFMSAgMHhmMzk4MDBmMAorI2RlZmluZSBGMDkwMF9QMl9OVU1fRVZFTlQxICAweGYzOTgwMDA3CisKKy8qUDJfRVJSQ05UMTIqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQxMiAgMHhmMzk5CisjZGVmaW5lIEYwOTAwX1AyX0VSUkNOVDFfT0xEVkFMVUUgIDB4ZjM5OTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDEyICAweGYzOTkwMDdmCisKKy8qUDJfRVJSQ05UMTEqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQxMSAgMHhmMzlhCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQxMSAgMHhmMzlhMDBmZgorCisvKlAyX0VSUkNOVDEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMTAgIDB4ZjM5YgorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMTAgIDB4ZjM5YjAwZmYKKworLypQMl9FUlJDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNUUkwyICAweGYzOWMKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX1NPVVJDRTIgIDB4ZjM5YzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfTlVNX0VWRU5UMiAgMHhmMzljMDAwNworCisvKlAyX0VSUkNOVDIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMjIgIDB4ZjM5ZAorI2RlZmluZSBGMDkwMF9QMl9FUlJDTlQyX09MRFZBTFVFICAweGYzOWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQyMiAgMHhmMzlkMDA3ZgorCisvKlAyX0VSUkNOVDIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMjEgIDB4ZjM5ZQorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMjEgIDB4ZjM5ZTAwZmYKKworLypQMl9FUlJDTlQyMCovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDIwICAweGYzOWYKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDIwICAweGYzOWYwMGZmCisKKy8qUDJfRkVDU1BZKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkVDU1BZICAweGYzYTAKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0VOQUJMRSAgMHhmM2EwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9OT19TWU5DQllURSAgMHhmM2EwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TRVJJQUxfTU9ERSAgMHhmM2EwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9VTlVTVUFMX1BBQ0tFVCAgMHhmM2EwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9CRVJfUEFDS01PREUgIDB4ZjNhMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQkVSTUVURVJfTE1PREUgIDB4ZjNhMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQkVSTUVURVJfUkVTRVQgIDB4ZjNhMDAwMDEKKworLypQMl9GU1BZQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWUNGRyAgMHhmM2ExCisjZGVmaW5lIEYwOTAwX1AyX0ZFQ1NQWV9JTlBVVCAgMHhmM2ExMDBjMAorI2RlZmluZSBGMDkwMF9QMl9SU1RfT05fRVJST1IgIDB4ZjNhMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfT05FX1NIT1QgIDB4ZjNhMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX01PREUgIDB4ZjNhMTAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0hZU1RFUkVTSVMgIDB4ZjNhMTAwMDMKKworLypQMl9GU1BZREFUQSovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlEQVRBICAweGYzYTIKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX1NUVUZGSU5HICAweGYzYTIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX05PRVJST1JfUEtUSklUVEVSICAweGYzYTIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9DTlVMTFBLVCAgMHhmM2EyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9TUFlfT1VUREFUQV9NT0RFICAweGYzYTIwMDFmCisKKy8qUDJfRlNQWU9VVCovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlPVVQgIDB4ZjNhMworI2RlZmluZSBGMDkwMF9QMl9GU1BZX0RJUkVDVCAgMHhmM2EzMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TUFlfT1VUREFUQV9CVVMgIDB4ZjNhMzAwMzgKKyNkZWZpbmUgRjA5MDBfUDJfU1RVRkZfTU9ERSAgMHhmM2EzMDAwNworCisvKlAyX0ZTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9GU1RBVFVTICAweGYzYTQKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0VORFNJTSAgMHhmM2E0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9WQUxJRF9TSU0gIDB4ZjNhNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRk9VTkRfU0lHTkFMICAweGYzYTQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RTU19TWU5DQllURSAgMHhmM2E0MDAxMAorI2RlZmluZSBGMDkwMF9QMl9SRVNVTFRfU1RBVEUgIDB4ZjNhNDAwMGYKKworLypQMl9GQkVSQ1BUNCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQ0ICAweGYzYTgKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDQgIDB4ZjNhODAwZmYKKworLypQMl9GQkVSQ1BUMyovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQzICAweGYzYTkKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDMgIDB4ZjNhOTAwZmYKKworLypQMl9GQkVSQ1BUMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQyICAweGYzYWEKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDIgIDB4ZjNhYTAwZmYKKworLypQMl9GQkVSQ1BUMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQxICAweGYzYWIKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDEgIDB4ZjNhYjAwZmYKKworLypQMl9GQkVSQ1BUMCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQwICAweGYzYWMKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDAgIDB4ZjNhYzAwZmYKKworLypQMl9GQkVSRVJSMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIyICAweGYzYWQKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjIgIDB4ZjNhZDAwZmYKKworLypQMl9GQkVSRVJSMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIxICAweGYzYWUKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjEgIDB4ZjNhZTAwZmYKKworLypQMl9GQkVSRVJSMCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIwICAweGYzYWYKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjAgIDB4ZjNhZjAwZmYKKworLypQMl9GU1BZQkVSKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWUJFUiAgMHhmM2IyCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlPQlNfWE9SUkVBRCAgMHhmM2IyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX09CU01PREUgIDB4ZjNiMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWUJFUl9TWU5DQllURSAgMHhmM2IyMDAxMAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX1VOU1lOQyAgMHhmM2IyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX0NUSU1FICAweGYzYjIwMDA3CisKKy8qUDFfSVFDT05TVCovCisjZGVmaW5lIFIwOTAwX1AxX0lRQ09OU1QgIDB4ZjQwMAorI2RlZmluZSBGMDkwMF9QMV9DT05TVEVMX1NFTEVDVCAgMHhmNDAwMDA2MAorI2RlZmluZSBGMDkwMF9QMV9JUVNZTUJfU0VMICAweGY0MDAwMDFmCisKKy8qUDFfTk9TQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TQ0ZHICAweGY0MDEKKyNkZWZpbmUgRjA5MDBfUDFfRFVNTVlQTF9OT1NEQVRBICAweGY0MDEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9CRVRBICAweGY0MDEwMDE4CisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfQkVUQSAgMHhmNDAxMDAwNworCisvKlAxX0lTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVNZTUIgIDB4ZjQwMgorI2RlZmluZSBGMDkwMF9QMV9JX1NZTUJPTCAgMHhmNDAyMDFmZgorCisvKlAxX1FTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDFfUVNZTUIgIDB4ZjQwMworI2RlZmluZSBGMDkwMF9QMV9RX1NZTUJPTCAgMHhmNDAzMDFmZgorCisvKlAxX0FHQzFDRkcqLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQ0ZHICAweGY0MDQKKyNkZWZpbmUgRjA5MDBfUDFfRENfRlJPWkVOICAweGY0MDQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RDX0NPUlJFQ1QgIDB4ZjQwNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQU1NX0ZST1pFTiAgMHhmNDA0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9BTU1fQ09SUkVDVCAgMHhmNDA0MDAxMAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX0ZST1pFTiAgMHhmNDA0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX0NPUlJFQ1QgIDB4ZjQwNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRENDT01QX1NMT1cgIDB4ZjQwNDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfSVFNSVNNX1NMT1cgIDB4ZjQwNDAwMDEKKworLypQMV9BR0MxQ04qLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQ04gIDB4ZjQwNgorI2RlZmluZSBGMDkwMF9QMV9BR0MxX0xPQ0tFRCAgMHhmNDA2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX09WRVJGTE9XICAweGY0MDYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTk9TTE9XTEsgIDB4ZjQwNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9NSU5QT1dFUiAgMHhmNDA2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9BR0NPVVRfRkFTVCAgMHhmNDA2MDAwOAorI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9CRVRBICAweGY0MDYwMDA3CisKKy8qUDFfQUdDMVJFRiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFSRUYgIDB4ZjQwNworI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9SRUYgIDB4ZjQwNzAwZmYKKworLypQMV9JRENDT01QKi8KKyNkZWZpbmUgUjA5MDBfUDFfSURDQ09NUCAgMHhmNDA4CisjZGVmaW5lIEYwOTAwX1AxX0lBVkVSQUdFX0FESiAgMHhmNDA4MDFmZgorCisvKlAxX1FEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMV9RRENDT01QICAweGY0MDkKKyNkZWZpbmUgRjA5MDBfUDFfUUFWRVJBR0VfQURKICAweGY0MDkwMWZmCisKKy8qUDFfUE9XRVJJKi8KKyNkZWZpbmUgUjA5MDBfUDFfUE9XRVJJICAweGY0MGEKKyNkZWZpbmUgRjA5MDBfUDFfUE9XRVJfSSAgMHhmNDBhMDBmZgorCisvKlAxX1BPV0VSUSovCisjZGVmaW5lIFIwOTAwX1AxX1BPV0VSUSAgMHhmNDBiCisjZGVmaW5lIEYwOTAwX1AxX1BPV0VSX1EgIDB4ZjQwYjAwZmYKKworLypQMV9BR0MxQU1NKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUFNTSAgMHhmNDBjCisjZGVmaW5lIEYwOTAwX1AxX0FNTV9WQUxVRSAgMHhmNDBjMDBmZgorCisvKlAxX0FHQzFRVUFEKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMVFVQUQgIDB4ZjQwZAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX1ZBTFVFICAweGY0MGQwMWZmCisKKy8qUDFfQUdDSVFJTjEqLworI2RlZmluZSBSMDkwMF9QMV9BR0NJUUlOMSAgMHhmNDBlCisjZGVmaW5lIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMSAgMHhmNDBlMDBmZgorCisvKlAxX0FHQ0lRSU4wKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDSVFJTjAgIDB4ZjQwZgorI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9WQUxVRTAgIDB4ZjQwZjAwZmYKKworLypQMV9ERU1PRCovCisjZGVmaW5lIFIwOTAwX1AxX0RFTU9EICAweGY0MTAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfU1RPUCAgMHhmNDEwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wgIDB4ZjQxMDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfRU5BU0FNUCAgMHhmNDEwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiAgMHhmNDEwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wgIDB4ZjQxMDAwMDMKKworLypQMV9ETURNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMV9ETURNT0RDT0QgIDB4ZjQxMQorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfTU9EQ09EICAweGY0MTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX01PRENPRCAgMHhmNDExMDA3YworI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9UWVBFICAweGY0MTEwMDAzCisKKy8qUDFfRFNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AxX0RTVEFUVVMgIDB4ZjQxMgorI2RlZmluZSBGMDkwMF9QMV9DQVJfTE9DSyAgMHhmNDEyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX1FVQUxJVFkgIDB4ZjQxMjAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfU0RWQlMxX0VOQUJMRSAgMHhmNDEyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9MT0NLX0RFRklOSVRJRiAgMHhmNDEyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9USU1JTkdfSVNfTE9DS0VEICAweGY0MTIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9UTUdMT0NLICAweGY0MTIwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9DQVJMT0NLICAweGY0MTIwMDAxCisKKy8qUDFfRFNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMV9EU1RBVFVTMiAgMHhmNDEzCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0RFTE9DSyAgMHhmNDEzMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9USU1FT1VUICAweGY0MTMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX01PRENPRFJRX1NZTkNUQUcgIDB4ZjQxMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfUE9MWVBIX1NBVEVWRU5UICAweGY0MTMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTk9TSUdOQUxBQ0sgIDB4ZjQxMzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9PVkVSRkxPVyAgMHhmNDEzMDAwNAorI2RlZmluZSBGMDkwMF9QMV9DRlJfT1ZFUkZMT1cgIDB4ZjQxMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfR0FNTUFfT1ZFUlVOREVSICAweGY0MTMwMDAxCisKKy8qUDFfRE1EQ0ZHTUQqLworI2RlZmluZSBSMDkwMF9QMV9ETURDRkdNRCAgMHhmNDE0CisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSAgMHhmNDE0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9EVkJTMV9FTkFCTEUgIDB4ZjQxNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOICAweGY0MTQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NDQU5fRU5BQkxFICAweGY0MTQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9BVVRPU0NBTiAgMHhmNDE0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9OT0ZPUkNFX1JFTE9DSyAgMHhmNDE0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUk5HICAweGY0MTQwMDAzCisKKy8qUDFfRE1EQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGRzIgIDB4ZjQxNQorI2RlZmluZSBGMDkwMF9QMV9BR0MxX1dBSVRMT0NLICAweGY0MTUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1MxUzJfU0VRVUVOVElBTCAgMHhmNDE1MDA0MAorI2RlZmluZSBGMDkwMF9QMV9PVkVSRkxPV19USU1FT1VUICAweGY0MTUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NDQU5GQUlMX1RJTUVPVVQgIDB4ZjQxNTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EVE9VVF9CQUNLICAweGY0MTUwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfUzFFTkFCTEUgIDB4ZjQxNTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX0xLM01PREUgIDB4ZjQxNTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX0xLMk1PREUgIDB4ZjQxNTAwMDEKKworLypQMV9ETURJU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMV9ETURJU1RBVEUgIDB4ZjQxNgorI2RlZmluZSBGMDkwMF9QMV9JMkNfTk9SRVNFVERNT0RFICAweGY0MTYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0VUQVBFRCAgMHhmNDE2MDA0MAorI2RlZmluZSBGMDkwMF9QMV9TRE1EUlNUX0RJUkNMSyAgMHhmNDE2MDAyMAorI2RlZmluZSBGMDkwMF9QMV9JMkNfREVNT0RfTU9ERSAgMHhmNDE2MDAxZgorCisvKlAxX0RNRFQwTSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFQwTSAgMHhmNDE3CisjZGVmaW5lIEYwOTAwX1AxX0RNRFQwX01JTiAgMHhmNDE3MDBmZgorCisvKlAxX0RNRFNUQVRFKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EU1RBVEUgIDB4ZjQxYgorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLRUQgIDB4ZjQxYjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfSEVBREVSX01PREUgIDB4ZjQxYjAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTU9ERSAgMHhmNDFiMDAxZgorCisvKlAxX0RNREZMWVcqLworI2RlZmluZSBSMDkwMF9QMV9ETURGTFlXICAweGY0MWMKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX0lSUVZBTCAgMHhmNDFjMDBmMAorI2RlZmluZSBGMDkwMF9QMV9GTFlXSEVFTF9DUFQgIDB4ZjQxYzAwMGYKKworLypQMV9EU1RBVFVTMyovCisjZGVmaW5lIFIwOTAwX1AxX0RTVEFUVVMzICAweGY0MWQKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX1pJR1pBRyAgMHhmNDFkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9DRkdNT0RFICAweGY0MWQwMDYwCisjZGVmaW5lIEYwOTAwX1AxX0dBTU1BX0xPV0JBVURSQVRFICAweGY0MWQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1JFTE9DS19NT0RFICAweGY0MWQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0ZBSUwgIDB4ZjQxZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRVRBUEUxQV9EVkJYTUVNICAweGY0MWQwMDAzCisKKy8qUDFfRE1EQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGRzMgIDB4ZjQxZQorI2RlZmluZSBGMDkwMF9QMV9EVkJTMV9UTUdXQUlUICAweGY0MWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX05PX0JXQ0VOVEVSSU5HICAweGY0MWUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0lOVl9TRVFTUkNIICAweGY0MWUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19TRlJVUExPV19UUksgIDB4ZjQxZTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTk9TVE9QX0ZJRk9GVUxMICAweGY0MWUwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0xPQ0tUSU1FX01PREUgIDB4ZjQxZTAwMDcKKworLypQMV9ETURDRkc0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EQ0ZHNCAgMHhmNDFmCisjZGVmaW5lIEYwOTAwX1AxX1RVTkVSX05SRUxBVU5DSCAgMHhmNDFmMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ESVNfQ0xLRU5BQkxFICAweGY0MWYwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RJU19IRFJESVZMT0NLICAweGY0MWYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX05PX1ROUldCSU5JVCAgMHhmNDFmMDAwMQorCisvKlAxX0NPUlJFTE1BTlQqLworI2RlZmluZSBSMDkwMF9QMV9DT1JSRUxNQU5UICAweGY0MjAKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX01BTlQgIDB4ZjQyMDAwZmYKKworLypQMV9DT1JSRUxBQlMqLworI2RlZmluZSBSMDkwMF9QMV9DT1JSRUxBQlMgIDB4ZjQyMQorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfQUJTICAweGY0MjEwMGZmCisKKy8qUDFfQ09SUkVMRVhQKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ09SUkVMRVhQICAweGY0MjIKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX0FCU0VYUCAgMHhmNDIyMDBmMAorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfRVhQICAweGY0MjIwMDBmCisKKy8qUDFfUExITU9EQ09EKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExITU9EQ09EICAweGY0MjQKKyNkZWZpbmUgRjA5MDBfUDFfU1BFQ0lOVl9ERU1PRCAgMHhmNDI0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9QTEhfTU9EQ09EICAweGY0MjQwMDdjCisjZGVmaW5lIEYwOTAwX1AxX1BMSF9UWVBFICAweGY0MjQwMDAzCisKKy8qUDFfQUdDSzMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDSzMyICAweGY0MmIKKyNkZWZpbmUgRjA5MDBfUDFfUjNBREpPRkZfMzJBUFNLICAweGY0MmIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1IyQURKT0ZGXzMyQVBTSyAgMHhmNDJiMDA0MAorI2RlZmluZSBGMDkwMF9QMV9SMUFESk9GRl8zMkFQU0sgIDB4ZjQyYjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfUkFESl8zMkFQU0sgIDB4ZjQyYjAwMWYKKworLypQMV9BR0MyTyovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzJPICAweGY0MmMKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMlJFRl9BREpVU1RJTkcgIDB4ZjQyYzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9DT0FSU0VGQVNUICAweGY0MmMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtTUVJUICAweGY0MmMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtNT0RFICAweGY0MmMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtFUVVBICAweGY0MmMwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfQ09FRiAgMHhmNDJjMDAwNworCisvKlAxX0FHQzJSRUYqLworI2RlZmluZSBSMDkwMF9QMV9BR0MyUkVGICAweGY0MmQKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9SRUYgIDB4ZjQyZDAwZmYKKworLypQMV9BR0MxQURKKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUFESiAgMHhmNDJlCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFBREpfTUFOVUFMICAweGY0MmUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfQURKVVNURUQgIDB4ZjQyZTAxN2YKKworLypQMV9BR0MySTEqLworI2RlZmluZSBSMDkwMF9QMV9BR0MySTEgIDB4ZjQzNgorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0lOVEVHUkFUT1IxICAweGY0MzYwMGZmCisKKy8qUDFfQUdDMkkwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMkkwICAweGY0MzcKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9JTlRFR1JBVE9SMCAgMHhmNDM3MDBmZgorCisvKlAxX0NBUkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NBUkNGRyAgMHhmNDM4CisjZGVmaW5lIEYwOTAwX1AxX0NGUlVQTE9XX0FVVE8gIDB4ZjQzODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSVVBMT1dfVEVTVCAgMHhmNDM4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9FTl9DQVIyQ0VOVEVSICAweGY0MzgwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0NBUkhEUl9OT0RJVjggIDB4ZjQzODAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX1JPVEEgIDB4ZjQzODAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfUk9UQU9OICAweGY0MzgwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1BIX0RFVF9BTEdPICAweGY0MzgwMDAzCisKKy8qUDFfQUNMQyovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMgIDB4ZjQzOQorI2RlZmluZSBGMDkwMF9QMV9TVE9QX1MyQUxQSEEgIDB4ZjQzOTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0FMUEhBX01BTlQgIDB4ZjQzOTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0FMUEhBX0VYUCAgMHhmNDM5MDAwZgorCisvKlAxX0JDTEMqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDICAweGY0M2EKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9TMkJFVEEgIDB4ZjQzYTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0JFVEFfTUFOVCAgMHhmNDNhMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVJfQkVUQV9FWFAgIDB4ZjQzYTAwMGYKKworLypQMV9DQVJGUkVRKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSRlJFUSAgMHhmNDNkCisjZGVmaW5lIEYwOTAwX1AxX0tDX0NPQVJTRV9FWFAgIDB4ZjQzZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfQkVUQV9GUkVRICAweGY0M2QwMDBmCisKKy8qUDFfQ0FSSERSKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSSERSICAweGY0M2UKKyNkZWZpbmUgRjA5MDBfUDFfS19GUkVRX0hEUiAgMHhmNDNlMDBmZgorCisvKlAxX0xEVCovCisjZGVmaW5lIFIwOTAwX1AxX0xEVCAgMHhmNDNmCisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfVEhSRVMgIDB4ZjQzZjAxZmYKKworLypQMV9MRFQyKi8KKyNkZWZpbmUgUjA5MDBfUDFfTERUMiAgMHhmNDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfVEhSRVMyICAweGY0NDAwMWZmCisKKy8qUDFfQ0ZSSUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklDRkcgIDB4ZjQ0MQorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX1VOVkFMUk5HICAweGY0NDEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfTFVOVkFMQ1BUICAweGY0NDEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfQUJPUlREQkwgIDB4ZjQ0MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9BQk9SVFBSRUQgIDB4ZjQ0MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9VTlZBTFNLSVAgIDB4ZjQ0MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9DU1RJTkMgIDB4ZjQ0MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfTkVHX0NGUlNURVAgIDB4ZjQ0MTAwMDEKKworLypQMV9DRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJVUDEgIDB4ZjQ0MgorI2RlZmluZSBGMDkwMF9QMV9DRlJfVVAxICAweGY0NDIwMWZmCisKKy8qUDFfQ0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSVVAwICAweGY0NDMKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX1VQMCAgMHhmNDQzMDBmZgorCisvKlAxX0NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJMT1cxICAweGY0NDYKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0xPVzEgIDB4ZjQ0NjAxZmYKKworLypQMV9DRlJMT1cwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSTE9XMCAgMHhmNDQ3CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9MT1cwICAweGY0NDcwMGZmCisKKy8qUDFfQ0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJTklUMSAgMHhmNDQ4CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTklUMSAgMHhmNDQ4MDFmZgorCisvKlAxX0NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5JVDAgIDB4ZjQ0OQorI2RlZmluZSBGMDkwMF9QMV9DRlJfSU5JVDAgIDB4ZjQ0OTAwZmYKKworLypQMV9DRlJJTkMxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5DMSAgMHhmNDRhCisjZGVmaW5lIEYwOTAwX1AxX01BTlVBTF9DRlJJTkMgIDB4ZjQ0YTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0lOQzEgIDB4ZjQ0YTAxN2YKKworLypQMV9DRlJJTkMwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5DMCAgMHhmNDRiCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTkMwICAweGY0NGIwMGYwCisKKy8qUDFfQ0ZSMiovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIgIDB4ZjQ0YworI2RlZmluZSBGMDkwMF9QMV9DQVJfRlJFUTIgIDB4ZjQ0YzAxZmYKKworLypQMV9DRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMSAgMHhmNDRkCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9GUkVRMSAgMHhmNDRkMDBmZgorCisvKlAxX0NGUjAqLworI2RlZmluZSBSMDkwMF9QMV9DRlIwICAweGY0NGUKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0ZSRVEwICAweGY0NGUwMGZmCisKKy8qUDFfTERJKi8KKyNkZWZpbmUgUjA5MDBfUDFfTERJICAweGY0NGYKKyNkZWZpbmUgRjA5MDBfUDFfTE9DS19ERVRfSU5URUdSICAweGY0NGYwMWZmCisKKy8qUDFfVE1HQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HQ0ZHICAweGY0NTAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19CRVRBICAweGY0NTAwMGMwCisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX0dST1VQREVMQVkgIDB4ZjQ1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRE9fVElNSU5HX0NPUlIgIDB4ZjQ1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTUFOVUFMX1NDQU4gIDB4ZjQ1MDAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX01JTkZSRVEgIDB4ZjQ1MDAwMDMKKworLypQMV9SVEMqLworI2RlZmluZSBSMDkwMF9QMV9SVEMgIDB4ZjQ1MQorI2RlZmluZSBGMDkwMF9QMV9UTUdBTFBIQV9FWFAgIDB4ZjQ1MTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQkVUQV9FWFAgIDB4ZjQ1MTAwMGYKKworLypQMV9SVENTMiovCisjZGVmaW5lIFIwOTAwX1AxX1JUQ1MyICAweGY0NTIKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQUxQSEFTMl9FWFAgIDB4ZjQ1MjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQkVUQVMyX0VYUCAgMHhmNDUyMDAwZgorCisvKlAxX1RNR1RIUklTRSovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1RIUklTRSAgMHhmNDUzCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfVEhSSVNFICAweGY0NTMwMGZmCisKKy8qUDFfVE1HVEhGQUxMKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HVEhGQUxMICAweGY0NTQKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19USEZBTEwgIDB4ZjQ1NDAwZmYKKworLypQMV9TRlJVUFJBVElPKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSVVBSQVRJTyAgMHhmNDU1CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9VUFJBVElPICAweGY0NTUwMGZmCisKKy8qUDFfU0ZSTE9XUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMV9TRlJMT1dSQVRJTyAgMHhmNDU2CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9MT1dSQVRJTyAgMHhmNDU2MDBmZgorCisvKlAxX0tSRUZUTUcqLworI2RlZmluZSBSMDkwMF9QMV9LUkVGVE1HICAweGY0NTgKKyNkZWZpbmUgRjA5MDBfUDFfS1JFRl9UTUcgIDB4ZjQ1ODAwZmYKKworLypQMV9TRlJTVEVQKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSU1RFUCAgMHhmNDU5CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9TQ0FOU1RFUCAgMHhmNDU5MDBmMAorI2RlZmluZSBGMDkwMF9QMV9TRlJfQ0VOVEVSU1RFUCAgMHhmNDU5MDAwZgorCisvKlAxX1RNR0NGRzIqLworI2RlZmluZSBSMDkwMF9QMV9UTUdDRkcyICAweGY0NWEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0FVVE9TQU1QICAweGY0NWEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1NDQU5JTklUX1FVQVJUICAweGY0NWEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX0RWQlMxREVSQVQgIDB4ZjQ1YTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSUkFUSU9fRklORSAgMHhmNDVhMDAwMQorCisvKlAxX1NGUklOSVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSSU5JVDEgIDB4ZjQ1ZQorI2RlZmluZSBGMDkwMF9QMV9TRlJfSU5JVDEgIDB4ZjQ1ZTAwZmYKKworLypQMV9TRlJJTklUMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUklOSVQwICAweGY0NWYKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX0lOSVQwICAweGY0NWYwMGZmCisKKy8qUDFfU0ZSVVAxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSVVAxICAweGY0NjAKKyNkZWZpbmUgRjA5MDBfUDFfQVVUT19HVVAgIDB4ZjQ2MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX1VQMSAgMHhmNDYwMDA3ZgorCisvKlAxX1NGUlVQMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUlVQMCAgMHhmNDYxCisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUV9VUDAgIDB4ZjQ2MTAwZmYKKworLypQMV9TRlJMT1cxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSTE9XMSAgMHhmNDYyCisjZGVmaW5lIEYwOTAwX1AxX0FVVE9fR0xPVyAgMHhmNDYyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVFfTE9XMSAgMHhmNDYyMDA3ZgorCisvKlAxX1NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMV9TRlJMT1cwICAweGY0NjMKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX0xPVzAgIDB4ZjQ2MzAwZmYKKworLypQMV9TRlIzKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMyAgMHhmNDY0CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTMgIDB4ZjQ2NDAwZmYKKworLypQMV9TRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMiAgMHhmNDY1CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTIgIDB4ZjQ2NTAwZmYKKworLypQMV9TRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMSAgMHhmNDY2CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTEgIDB4ZjQ2NjAwZmYKKworLypQMV9TRlIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMCAgMHhmNDY3CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTAgIDB4ZjQ2NzAwZmYKKworLypQMV9UTUdSRUcyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMiAgMHhmNDY4CisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzIgIDB4ZjQ2ODAwZmYKKworLypQMV9UTUdSRUcxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMSAgMHhmNDY5CisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzEgIDB4ZjQ2OTAwZmYKKworLypQMV9UTUdSRUcwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMCAgMHhmNDZhCisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzAgIDB4ZjQ2YTAwZmYKKworLypQMV9UTUdMT0NLMSovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0xPQ0sxICAweGY0NmIKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19MRVZFTDEgIDB4ZjQ2YjAxZmYKKworLypQMV9UTUdMT0NLMCovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0xPQ0swICAweGY0NmMKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19MRVZFTDAgIDB4ZjQ2YzAwZmYKKworLypQMV9UTUdPQlMqLworI2RlZmluZSBSMDkwMF9QMV9UTUdPQlMgIDB4ZjQ2ZAorI2RlZmluZSBGMDkwMF9QMV9ST0xMT0ZGX1NUQVRVUyAgMHhmNDZkMDBjMAorI2RlZmluZSBGMDkwMF9QMV9TQ0FOX1NJR04gIDB4ZjQ2ZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX1NDQU5OSU5HICAweGY0NmQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0NIQ0VOVEVSSU5HX01PREUgIDB4ZjQ2ZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX1NDQU5GQUlMICAweGY0NmQwMDAyCisKKy8qUDFfRVFVQUxDRkcqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBTENGRyAgMHhmNDZmCisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX05FR0FMV0FJVCAgMHhmNDZmMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTF9PTiAgMHhmNDZmMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TRUxfRVFVQUxDT1IgIDB4ZjQ2ZjAwMzgKKyNkZWZpbmUgRjA5MDBfUDFfTVVfRVFVQUxERkUgIDB4ZjQ2ZjAwMDcKKworLypQMV9FUVVBSTEqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTEgIDB4ZjQ3MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0kxICAweGY0NzAwMWZmCisKKy8qUDFfRVFVQVExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVExICAweGY0NzEKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRMSAgMHhmNDcxMDFmZgorCisvKlAxX0VRVUFJMiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJMiAgMHhmNDcyCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTIgIDB4ZjQ3MjAxZmYKKworLypQMV9FUVVBUTIqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTIgIDB4ZjQ3MworI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1EyICAweGY0NzMwMWZmCisKKy8qUDFfRVFVQUkzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUkzICAweGY0NzQKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJMyAgMHhmNDc0MDFmZgorCisvKlAxX0VRVUFRMyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRMyAgMHhmNDc1CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTMgIDB4ZjQ3NTAxZmYKKworLypQMV9FUVVBSTQqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTQgIDB4ZjQ3NgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k0ICAweGY0NzYwMWZmCisKKy8qUDFfRVFVQVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE0ICAweGY0NzcKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNCAgMHhmNDc3MDFmZgorCisvKlAxX0VRVUFJNSovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJNSAgMHhmNDc4CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTUgIDB4ZjQ3ODAxZmYKKworLypQMV9FUVVBUTUqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTUgIDB4ZjQ3OQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E1ICAweGY0NzkwMWZmCisKKy8qUDFfRVFVQUk2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk2ICAweGY0N2EKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJNiAgMHhmNDdhMDFmZgorCisvKlAxX0VRVUFRNiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRNiAgMHhmNDdiCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTYgIDB4ZjQ3YjAxZmYKKworLypQMV9FUVVBSTcqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTcgIDB4ZjQ3YworI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k3ICAweGY0N2MwMWZmCisKKy8qUDFfRVFVQVE3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE3ICAweGY0N2QKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNyAgMHhmNDdkMDFmZgorCisvKlAxX0VRVUFJOCovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJOCAgMHhmNDdlCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTggIDB4ZjQ3ZTAxZmYKKworLypQMV9FUVVBUTgqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTggIDB4ZjQ3ZgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E4ICAweGY0N2YwMWZmCisKKy8qUDFfTk5PU0RBVEFUMSovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBVDEgIDB4ZjQ4MAorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQxICAweGY0ODAwMGZmCisKKy8qUDFfTk5PU0RBVEFUMCovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBVDAgIDB4ZjQ4MQorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQwICAweGY0ODEwMGZmCisKKy8qUDFfTk5PU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEExICAweGY0ODIKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9OT1JNRUQxICAweGY0ODIwMGZmCisKKy8qUDFfTk5PU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEEwICAweGY0ODMKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9OT1JNRUQwICAweGY0ODMwMGZmCisKKy8qUDFfTk5PU1BMSFQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSFQxICAweGY0ODQKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQxICAweGY0ODQwMGZmCisKKy8qUDFfTk5PU1BMSFQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSFQwICAweGY0ODUKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQwICAweGY0ODUwMGZmCisKKy8qUDFfTk5PU1BMSDEqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIMSAgMHhmNDg2CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9OT1JNRUQxICAweGY0ODYwMGZmCisKKy8qUDFfTk5PU1BMSDAqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIMCAgMHhmNDg3CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9OT1JNRUQwICAweGY0ODcwMGZmCisKKy8qUDFfTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQVQxICAweGY0ODgKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfVU5OT1JNRUQxICAweGY0ODgwMGZmCisKKy8qUDFfTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQVQwICAweGY0ODkKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfVU5OT1JNRUQwICAweGY0ODkwMGZmCisKKy8qUDFfTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBMSAgMHhmNDhhCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfVU5OT1JNRUQxICAweGY0OGEwMGZmCisKKy8qUDFfTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBMCAgMHhmNDhiCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfVU5OT1JNRUQwICAweGY0OGIwMGZmCisKKy8qUDFfTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEhUMSAgMHhmNDhjCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfVU5OT1JNRUQxICAweGY0OGMwMGZmCisKKy8qUDFfTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEhUMCAgMHhmNDhkCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfVU5OT1JNRUQwICAweGY0OGQwMGZmCisKKy8qUDFfTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSDEgIDB4ZjQ4ZQorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfVU5OT1JNRUQxICAweGY0OGUwMGZmCisKKy8qUDFfTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSDAgIDB4ZjQ4ZgorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfVU5OT1JNRUQwICAweGY0OGYwMGZmCisKKy8qUDFfQ0FSMkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NBUjJDRkcgIDB4ZjQ5MAorI2RlZmluZSBGMDkwMF9QMV9ERVNDUkFNQl9PRkYgIDB4ZjQ5MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUE40X1NFTEVDVCAgMHhmNDkwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DRlIyX1NUT1BEVkJTMSAgMHhmNDkwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9TVE9QX0NGUjJVUERBVEUgIDB4ZjQ5MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9OQ08yVVBEQVRFICAweGY0OTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1JPVEEyT04gIDB4ZjQ5MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfUEhfREVUX0FMR08yICAweGY0OTAwMDAzCisKKy8qUDFfQUNMQzIqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMiAgMHhmNDkxCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfUFVOQ1RfQURFUkFUICAweGY0OTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfQUxQSEFfTUFOVCAgMHhmNDkxMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0FMUEhBX0VYUCAgMHhmNDkxMDAwZgorCisvKlAxX0JDTEMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzIgIDB4ZjQ5MgorI2RlZmluZSBGMDkwMF9QMV9EVkJTMl9OSVAgIDB4ZjQ5MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9QVU5DVF9CREVSQVQgIDB4ZjQ5MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9CRVRBX01BTlQgIDB4ZjQ5MjAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9CRVRBX0VYUCAgMHhmNDkyMDAwZgorCisvKlAxX0NGUjIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMjIgIDB4ZjQ5MworI2RlZmluZSBGMDkwMF9QMV9DQVIyX0ZSRVEyICAweGY0OTMwMWZmCisKKy8qUDFfQ0ZSMjEqLworI2RlZmluZSBSMDkwMF9QMV9DRlIyMSAgMHhmNDk0CisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfRlJFUTEgIDB4ZjQ5NDAwZmYKKworLypQMV9DRlIyMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIwICAweGY0OTUKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9GUkVRMCAgMHhmNDk1MDBmZgorCisvKlAxX0FDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzJTMlEgIDB4ZjQ5NworI2RlZmluZSBGMDkwMF9QMV9FTkFCX1NQU0tTWU1CICAweGY0OTcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RQURFUkFUICAweGY0OTcwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0FMUEhfTSAgMHhmNDk3MDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9BTFBIX0UgIDB4ZjQ5NzAwMGYKKworLypQMV9BQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzI4ICAweGY0OTgKKyNkZWZpbmUgRjA5MDBfUDFfT0xESTNRX01PREUgIDB4ZjQ5ODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhBREVSQVQgIDB4ZjQ5ODAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhfQUxQSF9NICAweGY0OTgwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0FMUEhfRSAgMHhmNDk4MDAwZgorCisvKlAxX0FDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMlMyMTZBICAweGY0OTkKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QURFUkFUICAweGY0OTkwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQUxQSF9NICAweGY0OTkwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQUxQSF9FICAweGY0OTkwMDBmCisKKy8qUDFfQUNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzIzMkEgIDB4ZjQ5YQorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBREVSQVQgIDB4ZjQ5YTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9BTFBIX00gIDB4ZjQ5YTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9BTFBIX0UgIDB4ZjQ5YTAwMGYKKworLypQMV9CQ0xDMlMyUSovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzJRICAweGY0OWMKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMlFfTklQICAweGY0OWMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RQkRFUkFUICAweGY0OWMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0JFVEFfTSAgMHhmNDljMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9CRVRBX0UgIDB4ZjQ5YzAwMGYKKworLypQMV9CQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzI4ICAweGY0OWQKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMjhfTklQICAweGY0OWQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84QkRFUkFUICAweGY0OWQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0JFVEFfTSAgMHhmNDlkMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOF9CRVRBX0UgIDB4ZjQ5ZDAwMGYKKworLypQMV9CQ0xDMlMyMTZBKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzJTMjE2QSAgMHhmNDllCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyUzIxNkFfTklQICAweGY0OWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkJERVJBVCAgMHhmNDllMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0JFVEFfTSAgMHhmNDllMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0JFVEFfRSAgMHhmNDllMDAwZgorCisvKlAxX0JDTEMyUzIzMkEqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMlMyMzJBICAweGY0OWYKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMjMyQV9OSVAgIDB4ZjQ5ZjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQkRFUkFUICAweGY0OWYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQkVUQV9NICAweGY0OWYwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQkVUQV9FICAweGY0OWYwMDBmCisKKy8qUDFfUExST09UMiovCisjZGVmaW5lIFIwOTAwX1AxX1BMUk9PVDIgIDB4ZjRhYworI2RlZmluZSBGMDkwMF9QMV9TSE9SVEZSX0RJU0FCTEUgIDB4ZjRhYzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTE9OR0ZSX0RJU0FCTEUgIDB4ZjRhYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRFVNTVlQTF9ESVNBQkxFICAweGY0YWMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NIT1JURlJfQVZPSUQgIDB4ZjRhYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfTU9ERSAgMHhmNGFjMDAwYworI2RlZmluZSBGMDkwMF9QMV9QTFNDUkFNQl9ST09UMiAgMHhmNGFjMDAwMworCisvKlAxX1BMUk9PVDEqLworI2RlZmluZSBSMDkwMF9QMV9QTFJPT1QxICAweGY0YWQKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfUk9PVDEgIDB4ZjRhZDAwZmYKKworLypQMV9QTFJPT1QwKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExST09UMCAgMHhmNGFlCisjZGVmaW5lIEYwOTAwX1AxX1BMU0NSQU1CX1JPT1QwICAweGY0YWUwMGZmCisKKy8qUDFfTU9EQ09ETFNUMCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDAgIDB4ZjRiMAorI2RlZmluZSBGMDkwMF9QMV9FTl9UT0tFTjMxICAweGY0YjAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NZTkNUQUdfU0VMRUNUICAweGY0YjAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX01PRENPRFJRX01PREUgIDB4ZjRiMDAwMzAKKworLypQMV9NT0RDT0RMU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUMSAgMHhmNGIxCisjZGVmaW5lIEYwOTAwX1AxX0RJU19NT0RDT0QyOSAgMHhmNGIxMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfOV8xMCAgMHhmNGIxMDAwZgorCisvKlAxX01PRENPRExTVDIqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1QyICAweGY0YjIKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzhfOSAgMHhmNGIyMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfNV82ICAweGY0YjIwMDBmCisKKy8qUDFfTU9EQ09ETFNUMyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDMgIDB4ZjRiMworI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfNF81ICAweGY0YjMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS18zXzQgIDB4ZjRiMzAwMGYKKworLypQMV9NT0RDT0RMU1Q0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNCAgMHhmNGI0CisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS185XzEwICAweGY0YjQwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS184XzkgIDB4ZjRiNDAwMGYKKworLypQMV9NT0RDT0RMU1Q1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNSAgMHhmNGI1CisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS181XzYgIDB4ZjRiNTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzRfNSAgMHhmNGI1MDAwZgorCisvKlAxX01PRENPRExTVDYqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q2ICAweGY0YjYKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzNfNCAgMHhmNGI2MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfMl8zICAweGY0YjYwMDBmCisKKy8qUDFfTU9EQ09ETFNUNyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDcgIDB4ZjRiNworI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfOV8xMCAgMHhmNGI3MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfOF85ICAweGY0YjcwMDBmCisKKy8qUDFfTU9EQ09ETFNUOCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDggIDB4ZjRiOAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfNV82ICAweGY0YjgwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF8zXzQgIDB4ZjRiODAwMGYKKworLypQMV9NT0RDT0RMU1Q5Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUOSAgMHhmNGI5CisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF8yXzMgIDB4ZjRiOTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzNfNSAgMHhmNGI5MDAwZgorCisvKlAxX01PRENPRExTVEEqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RBICAweGY0YmEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzlfMTAgIDB4ZjRiYTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzhfOSAgMHhmNGJhMDAwZgorCisvKlAxX01PRENPRExTVEIqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RCICAweGY0YmIKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzVfNiAgMHhmNGJiMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfNF81ICAweGY0YmIwMDBmCisKKy8qUDFfTU9EQ09ETFNUQyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEMgIDB4ZjRiYworI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfM180ICAweGY0YmMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8yXzMgIDB4ZjRiYzAwMGYKKworLypQMV9NT0RDT0RMU1REKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNURCAgMHhmNGJkCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8zXzUgIDB4ZjRiZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzFfMiAgMHhmNGJkMDAwZgorCisvKlAxX01PRENPRExTVEUqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RFICAweGY0YmUKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzJfNSAgMHhmNGJlMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMV8zICAweGY0YmUwMDBmCisKKy8qUDFfTU9EQ09ETFNURiovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEYgIDB4ZjRiZgorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMV80ICAweGY0YmYwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RERU1PRF9TRVQgIDB4ZjRiZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRERFTU9EX01BU0sgIDB4ZjRiZjAwMDEKKworLypQMV9ETURSRVNDRkcqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNDRkcgIDB4ZjRjNgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfUkVTRVQgIDB4ZjRjNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05PSVNFU1FSICAweGY0YzYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19TVFJBTEwgIDB4ZjRjNjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05FV09OTFkgIDB4ZjRjNjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05PU1RPUkUgIDB4ZjRjNjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0FHQzJNRU0gIDB4ZjRjNjAwMDEKKworLypQMV9ETURSRVNBRFIqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNBRFIgIDB4ZjRjNworI2RlZmluZSBGMDkwMF9QMV9TVVNQX1BSRURDQU5BTCAgMHhmNGM3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfVkFMSURDRlIgIDB4ZjRjNzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX01FTUZVTEwgIDB4ZjRjNzAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX1JFU05CUiAgMHhmNGM3MDAwZgorCisvKlAxX0RNRFJFU0RBVEE3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTcgIDB4ZjRjOAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTcgIDB4ZjRjODAwZmYKKworLypQMV9ETURSRVNEQVRBNiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEE2ICAweGY0YzkKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEE2ICAweGY0YzkwMGZmCisKKy8qUDFfRE1EUkVTREFUQTUqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBNSAgMHhmNGNhCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBNSAgMHhmNGNhMDBmZgorCisvKlAxX0RNRFJFU0RBVEE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTQgIDB4ZjRjYgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTQgIDB4ZjRjYjAwZmYKKworLypQMV9ETURSRVNEQVRBMyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEEzICAweGY0Y2MKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEEzICAweGY0Y2MwMGZmCisKKy8qUDFfRE1EUkVTREFUQTIqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBMiAgMHhmNGNkCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBMiAgMHhmNGNkMDBmZgorCisvKlAxX0RNRFJFU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTEgIDB4ZjRjZQorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTEgIDB4ZjRjZTAwZmYKKworLypQMV9ETURSRVNEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEEwICAweGY0Y2YKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEEwICAweGY0Y2YwMGZmCisKKy8qUDFfRkZFSTEqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJMSAgMHhmNGQwCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJMSAgMHhmNGQwMDFmZgorCisvKlAxX0ZGRVExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTEgIDB4ZjRkMQorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTEgIDB4ZjRkMTAxZmYKKworLypQMV9GRkVJMiovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUkyICAweGY0ZDIKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ0kyICAweGY0ZDIwMWZmCisKKy8qUDFfRkZFUTIqLworI2RlZmluZSBSMDkwMF9QMV9GRkVRMiAgMHhmNGQzCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NRMiAgMHhmNGQzMDFmZgorCisvKlAxX0ZGRUkzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFSTMgIDB4ZjRkNAorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDSTMgIDB4ZjRkNDAxZmYKKworLypQMV9GRkVRMyovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRVEzICAweGY0ZDUKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ1EzICAweGY0ZDUwMWZmCisKKy8qUDFfRkZFSTQqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJNCAgMHhmNGQ2CisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJNCAgMHhmNGQ2MDFmZgorCisvKlAxX0ZGRVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTQgIDB4ZjRkNworI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTQgIDB4ZjRkNzAxZmYKKworLypQMV9GRkVDRkcqLworI2RlZmluZSBSMDkwMF9QMV9GRkVDRkcgIDB4ZjRkOAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTEZGRV9PTiAgMHhmNGQ4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTF9VU0VEU1lNQiAgMHhmNGQ4MDAzMAorI2RlZmluZSBGMDkwMF9QMV9NVV9FUVVBTEZGRSAgMHhmNGQ4MDAwNworCisvKlAxX1ROUkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNGRyAgMHhmNGUwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9BQ0tGQUlMICAweGY0ZTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9UWVBFICAweGY0ZTAwMDcwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9TRUNTVE9QICAweGY0ZTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9WQ09TUkNIICAweGY0ZTAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9NQUREUkVTUyAgMHhmNGUwMDAwMworCisvKlAxX1ROUkNGRzIqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDRkcyICAweGY0ZTEKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0lRU1dBUCAgMHhmNGUxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX1NURVAyTUhaICAweGY0ZTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfREJMSTJDICAweGY0ZTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19GQ0NLICAweGY0ZTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19MUEVOICAweGY0ZTEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RJU19CV0NBTEMgIDB4ZjRlMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU0hPUlRfV0FJVFNUQVRFUyAgMHhmNGUxMDAwMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfMkJXQUdDMSAgMHhmNGUxMDAwMQorCisvKlAxX1ROUlhUQUwqLworI2RlZmluZSBSMDkwMF9QMV9UTlJYVEFMICAweGY0ZTQKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX01DTEtERUNJTUFMICAweGY0ZTQwMGUwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9YVEFMRlJFUSAgMHhmNGU0MDAxZgorCisvKlAxX1ROUlNURVBTKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SU1RFUFMgIDB4ZjRlNworI2RlZmluZSBGMDkwMF9QMV9UVU5FUl9CVzFQNiAgMHhmNGU3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9CV0lOQ19PRkZTRVQgIDB4ZjRlNzAwNzAKKyNkZWZpbmUgRjA5MDBfUDFfU09GVFNURVBfUk5HICAweGY0ZTcwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9CV09GRlNFVCAgMHhmNGU3MDEwNworCisvKlAxX1ROUkdBSU4qLworI2RlZmluZSBSMDkwMF9QMV9UTlJHQUlOICAweGY0ZTgKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0tESVZFTiAgMHhmNGU4MDBjMAorI2RlZmluZSBGMDkwMF9QMV9TVEI2WDAwX09DSyAgMHhmNGU4MDAzMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fR0FJTiAgMHhmNGU4MDAwZgorCisvKlAxX1ROUlJGMSovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlJGMSAgMHhmNGU5CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEyICAweGY0ZTkwMGZmCisKKy8qUDFfVE5SUkYwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SUkYwICAweGY0ZWEKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTEgIDB4ZjRlYTAwZmYKKworLypQMV9UTlJCVyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkJXICAweGY0ZWIKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTAgIDB4ZjRlYjAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXICAweGY0ZWIwMDNmCisKKy8qUDFfVE5SQURKKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQURKICAweGY0ZWMKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9SQ0xLICAweGY0ZWMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfQ0FMVElNRSAgMHhmNGVjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2WDAwX0RMQiAgMHhmNGVjMDAzOAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MDAwX0ZDTCAgMHhmNGVjMDAwNworCisvKlAxX1ROUkNUTDIqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDVEwyICAweGY0ZWQKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9MQ1AxX1JDQ0tPRkYgIDB4ZjRlZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9MQ1AwICAweGY0ZWQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfWFRPVVRfUkZPVVRTICAweGY0ZWQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfWFRPTl9NQ0tEViAgMHhmNGVkMDAxMAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX0NBTE9GRl9EQ09GRiAgMHhmNGVkMDAwOAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX0xQVCAgMHhmNGVkMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX1JYICAweGY0ZWQwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMTBfU1lOICAweGY0ZWQwMDAxCisKKy8qUDFfVE5SQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNGRzMgIDB4ZjRlZQorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTIwX0RJU0NUUkwxICAweGY0ZWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfSU5WT1JERVIgIDB4ZjRlZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjEyMF9FTkNUUkw2ICAweGY0ZWUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9QTExGUkVRICAweGY0ZWUwMDFjCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNGUkVRX01PREUgIDB4ZjRlZTAwMDMKKworLypQMV9UTlJMQVVOQ0gqLworI2RlZmluZSBSMDkwMF9QMV9UTlJMQVVOQ0ggIDB4ZjRmMAorCisvKlAxX1ROUkxEKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5STEQgIDB4ZjRmMAorI2RlZmluZSBGMDkwMF9QMV9UVU5MRF9WQ09JTkcgIDB4ZjRmMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzFGQUlMICAweGY0ZjAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUcyRkFJTCAgMHhmNGYwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHM0ZBSUwgIDB4ZjRmMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzRGQUlMICAweGY0ZjAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUc1RkFJTCAgMHhmNGYwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQldJTkcgIDB4ZjRmMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0xPQ0tFRCAgMHhmNGYwMDAwMQorCisvKlAxX1ROUk9CU0wqLworI2RlZmluZSBSMDkwMF9QMV9UTlJPQlNMICAweGY0ZjYKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0FCT1JURUQgIDB4ZjRmNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0xQRU4gIDB4ZjRmNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0ZDQ0sgIDB4ZjRmNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0xPQ0tFRCAgMHhmNGY2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUFJPR0RPTkUgIDB4ZjRmNjAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGUkVTVEUxICAweGY0ZjYwMDAzCisKKy8qUDFfVE5SUkVTVEUqLworI2RlZmluZSBSMDkwMF9QMV9UTlJSRVNURSAgMHhmNGY3CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMCAgMHhmNGY3MDBmZgorCisvKlAxX1NNQVBDT0VGNyovCisjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNyAgMHhmNTAwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RU0NBTEUgIDB4ZjUwMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU01BUENPRUZfUV9MTFIxMiAgMHhmNTAwMDE3ZgorCisvKlAxX1NNQVBDT0VGNiovCisjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNiAgMHhmNTAxCisjZGVmaW5lIEYwOTAwX1AxX0RJU19ORVdTQ0FMRSAgMHhmNTAxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BREpfOFBTS0xMUjEgIDB4ZjUwMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfT0xEXzhQU0tMTFIxICAweGY1MDEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RJU19BQjhQU0sgIDB4ZjUwMTAwMDEKKworLypQMV9TTUFQQ09FRjUqLworI2RlZmluZSBSMDkwMF9QMV9TTUFQQ09FRjUgIDB4ZjUwMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFNDQUxFICAweGY1MDIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NNQVBDT0VGXzhQX0xMUjIzICAweGY1MDIwMTdmCisKKy8qUDFfRE1EUExIU1RBVCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFBMSFNUQVQgIDB4ZjUyMAorI2RlZmluZSBGMDkwMF9QMV9QTEhfU1RBVElTVElDICAweGY1MjAwMGZmCisKKy8qUDFfTE9DS1RJTUUzKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUzICAweGY1MjIKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUzICAweGY1MjIwMGZmCisKKy8qUDFfTE9DS1RJTUUyKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUyICAweGY1MjMKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUyICAweGY1MjMwMGZmCisKKy8qUDFfTE9DS1RJTUUxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUxICAweGY1MjQKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUxICAweGY1MjQwMGZmCisKKy8qUDFfTE9DS1RJTUUwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUwICAweGY1MjUKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUwICAweGY1MjUwMGZmCisKKy8qUDFfVklUU0NBTEUqLworI2RlZmluZSBSMDkwMF9QMV9WSVRTQ0FMRSAgMHhmNTMyCisjZGVmaW5lIEYwOTAwX1AxX05WVEhfTk9TUkFOR0UgIDB4ZjUzMjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVkVSUk9SX01BWE1PREUgIDB4ZjUzMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVl9NT0RFICAweGY1MzIwMDMwCisjZGVmaW5lIEYwOTAwX1AxX05TTE9XU05fTE9DS0VEICAweGY1MzIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RFTE9DS19QUkZMT1NTICAweGY1MzIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RJU19SU0ZMT0NLICAweGY1MzIwMDAyCisKKy8qUDFfRkVDTSovCisjZGVmaW5lIFIwOTAwX1AxX0ZFQ00gIDB4ZjUzMworI2RlZmluZSBGMDkwMF9QMV9EU1NfRFZCICAweGY1MzMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0JZUEFTUyAgMHhmNTMzMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DTVBfU0xPV01PREUgIDB4ZjUzMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRFNTX1NSQ0ggIDB4ZjUzMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRElGRl9NT0RFVklUICAweGY1MzMwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNWSVQgIDB4ZjUzMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfSVFJTlYgIDB4ZjUzMzAwMDEKKworLypQMV9WVEgxMiovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDEyICAweGY1MzQKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMTIgIDB4ZjUzNDAwZmYKKworLypQMV9WVEgyMyovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDIzICAweGY1MzUKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMjMgIDB4ZjUzNTAwZmYKKworLypQMV9WVEgzNCovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDM0ICAweGY1MzYKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMzQgIDB4ZjUzNjAwZmYKKworLypQMV9WVEg1NiovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDU2ICAweGY1MzcKKyNkZWZpbmUgRjA5MDBfUDFfVlRINTYgIDB4ZjUzNzAwZmYKKworLypQMV9WVEg2NyovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDY3ICAweGY1MzgKKyNkZWZpbmUgRjA5MDBfUDFfVlRINjcgIDB4ZjUzODAwZmYKKworLypQMV9WVEg3OCovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDc4ICAweGY1MzkKKyNkZWZpbmUgRjA5MDBfUDFfVlRINzggIDB4ZjUzOTAwZmYKKworLypQMV9WSVRDVVJQVU4qLworI2RlZmluZSBSMDkwMF9QMV9WSVRDVVJQVU4gIDB4ZjUzYQorI2RlZmluZSBGMDkwMF9QMV9WSVRfTUFQUElORyAgMHhmNTNhMDBlMAorI2RlZmluZSBGMDkwMF9QMV9WSVRfQ1VSUFVOICAweGY1M2EwMDFmCisKKy8qUDFfVkVSUk9SKi8KKyNkZWZpbmUgUjA5MDBfUDFfVkVSUk9SICAweGY1M2IKKyNkZWZpbmUgRjA5MDBfUDFfUkVHRVJSX1ZJVCAgMHhmNTNiMDBmZgorCisvKlAxX1BSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDFfUFJWSVQgIDB4ZjUzYworI2RlZmluZSBGMDkwMF9QMV9ESVNfVlRITE9DSyAgMHhmNTNjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9FN184VklUICAweGY1M2MwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0U2XzdWSVQgIDB4ZjUzYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRTVfNlZJVCAgMHhmNTNjMDAwOAorI2RlZmluZSBGMDkwMF9QMV9FM180VklUICAweGY1M2MwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0UyXzNWSVQgIDB4ZjUzYzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRTFfMlZJVCAgMHhmNTNjMDAwMQorCisvKlAxX1ZBVlNSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDFfVkFWU1JWSVQgIDB4ZjUzZAorI2RlZmluZSBGMDkwMF9QMV9BTVZJVCAgMHhmNTNkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9GUk9aRU5WSVQgIDB4ZjUzZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU05WSVQgIDB4ZjUzZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVE9WVklUICAweGY1M2QwMDBjCisjZGVmaW5lIEYwOTAwX1AxX0hZUFZJVCAgMHhmNTNkMDAwMworCisvKlAxX1ZTVEFUVVNWSVQqLworI2RlZmluZSBSMDkwMF9QMV9WU1RBVFVTVklUICAweGY1M2UKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9PTiAgMHhmNTNlMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FTkRfTE9PUFZJVCAgMHhmNTNlMDA0MAorI2RlZmluZSBGMDkwMF9QMV9WSVRFUkJJX0RFUFJGICAweGY1M2UwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1BSRlZJVCAgMHhmNTNlMDAxMAorI2RlZmluZSBGMDkwMF9QMV9MT0NLRURWSVQgIDB4ZjUzZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9ERUxPQ0sgIDB4ZjUzZTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVklUX0RFTU9EU0VMICAweGY1M2UwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1ZJVEVSQklfQ09NUE9VVCAgMHhmNTNlMDAwMQorCisvKlAxX1ZUSElOVVNFKi8KKyNkZWZpbmUgUjA5MDBfUDFfVlRISU5VU0UgIDB4ZjUzZgorI2RlZmluZSBGMDkwMF9QMV9WSVRfSU5VU0UgIDB4ZjUzZjAwZmYKKworLypQMV9LRElWMTIqLworI2RlZmluZSBSMDkwMF9QMV9LRElWMTIgIDB4ZjU0MAorI2RlZmluZSBGMDkwMF9QMV9LRElWMTJfTUFOVUFMICAweGY1NDAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl8xMiAgMHhmNTQwMDA3ZgorCisvKlAxX0tESVYyMyovCisjZGVmaW5lIFIwOTAwX1AxX0tESVYyMyAgMHhmNTQxCisjZGVmaW5lIEYwOTAwX1AxX0tESVYyM19NQU5VQUwgIDB4ZjU0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzIzICAweGY1NDEwMDdmCisKKy8qUDFfS0RJVjM0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjM0ICAweGY1NDIKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjM0X01BTlVBTCAgMHhmNTQyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfMzQgIDB4ZjU0MjAwN2YKKworLypQMV9LRElWNTYqLworI2RlZmluZSBSMDkwMF9QMV9LRElWNTYgIDB4ZjU0MworI2RlZmluZSBGMDkwMF9QMV9LRElWNTZfTUFOVUFMICAweGY1NDMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl81NiAgMHhmNTQzMDA3ZgorCisvKlAxX0tESVY2NyovCisjZGVmaW5lIFIwOTAwX1AxX0tESVY2NyAgMHhmNTQ0CisjZGVmaW5lIEYwOTAwX1AxX0tESVY2N19NQU5VQUwgIDB4ZjU0NDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzY3ICAweGY1NDQwMDdmCisKKy8qUDFfS0RJVjc4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjc4ICAweGY1NDUKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjc4X01BTlVBTCAgMHhmNTQ1MDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfNzggIDB4ZjU0NTAwN2YKKworLypQMV9QREVMQ1RSTDEqLworI2RlZmluZSBSMDkwMF9QMV9QREVMQ1RSTDEgIDB4ZjU1MAorI2RlZmluZSBGMDkwMF9QMV9JTlZfTUlTTUFTSyAgMHhmNTUwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9BQ0NFUFRFRCAgMHhmNTUwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9GSUxURVJfRU4gIDB4ZjU1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfUEtUREVMSU5VU0UgIDB4ZjU1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSFlTVEVOICAweGY1NTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0hZU1RTV1JTVCAgMHhmNTUwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9FTl9NSVMwMCAgMHhmNTUwMDAwMgorI2RlZmluZSBGMDkwMF9QMV9BTEdPU1dSU1QgIDB4ZjU1MDAwMDEKKworLypQMV9QREVMQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMV9QREVMQ1RSTDIgIDB4ZjU1MQorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9DT05USU5VT1VTICAweGY1NTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1JFU0VUX1VQS09fQ09VTlQgIDB4ZjU1MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVVNFUl9QS1RERUxJTl9OQiAgMHhmNTUxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9MT0NLRUQgIDB4ZjU1MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfREFUQV9VTkJCU0NSQU0gIDB4ZjU1MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfTE9OR1BLVCAgMHhmNTUxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9GUkFNRV9NT0RFICAweGY1NTEwMDAyCisKKy8qUDFfSFlTVFRIUkVTSCovCisjZGVmaW5lIFIwOTAwX1AxX0hZU1RUSFJFU0ggIDB4ZjU1NAorI2RlZmluZSBGMDkwMF9QMV9VTkxDS19USFJFU0ggIDB4ZjU1NDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfREVMSU5fTENLX1RIUkVTSCAgMHhmNTU0MDAwZgorCisvKlAxX0lTSUVOVFJZKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVNJRU5UUlkgIDB4ZjU1ZQorI2RlZmluZSBGMDkwMF9QMV9JU0lfRU5UUlkgIDB4ZjU1ZTAwZmYKKworLypQMV9JU0lCSVRFTkEqLworI2RlZmluZSBSMDkwMF9QMV9JU0lCSVRFTkEgIDB4ZjU1ZgorI2RlZmluZSBGMDkwMF9QMV9JU0lfQklUX0VOICAweGY1NWYwMGZmCisKKy8qUDFfTUFUU1RSMSovCisjZGVmaW5lIFIwOTAwX1AxX01BVFNUUjEgIDB4ZjU2MAorI2RlZmluZSBGMDkwMF9QMV9NQVRZUEVfQ1VSUkVOVDEgIDB4ZjU2MDAwZmYKKworLypQMV9NQVRTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTUFUU1RSMCAgMHhmNTYxCisjZGVmaW5lIEYwOTAwX1AxX01BVFlQRV9DVVJSRU5UMCAgMHhmNTYxMDBmZgorCisvKlAxX1VQTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9VUExTVFIxICAweGY1NjIKKyNkZWZpbmUgRjA5MDBfUDFfVVBMX0NVUlJFTlQxICAweGY1NjIwMGZmCisKKy8qUDFfVVBMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX1VQTFNUUjAgIDB4ZjU2MworI2RlZmluZSBGMDkwMF9QMV9VUExfQ1VSUkVOVDAgIDB4ZjU2MzAwZmYKKworLypQMV9ERkxTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfREZMU1RSMSAgMHhmNTY0CisjZGVmaW5lIEYwOTAwX1AxX0RGTF9DVVJSRU5UMSAgMHhmNTY0MDBmZgorCisvKlAxX0RGTFNUUjAqLworI2RlZmluZSBSMDkwMF9QMV9ERkxTVFIwICAweGY1NjUKKyNkZWZpbmUgRjA5MDBfUDFfREZMX0NVUlJFTlQwICAweGY1NjUwMGZmCisKKy8qUDFfU1lOQ1NUUiovCisjZGVmaW5lIFIwOTAwX1AxX1NZTkNTVFIgIDB4ZjU2NgorI2RlZmluZSBGMDkwMF9QMV9TWU5DX0NVUlJFTlQgIDB4ZjU2NjAwZmYKKworLypQMV9TWU5DRFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9TWU5DRFNUUjEgIDB4ZjU2NworI2RlZmluZSBGMDkwMF9QMV9TWU5DRF9DVVJSRU5UMSAgMHhmNTY3MDBmZgorCisvKlAxX1NZTkNEU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX1NZTkNEU1RSMCAgMHhmNTY4CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNEX0NVUlJFTlQwICAweGY1NjgwMGZmCisKKy8qUDFfUERFTFNUQVRVUzEqLworI2RlZmluZSBSMDkwMF9QMV9QREVMU1RBVFVTMSAgMHhmNTY5CisjZGVmaW5lIEYwOTAwX1AxX1BLVERFTElOX0RFTE9DSyAgMHhmNTY5MDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU5DRFVQREZMX0JBRERGTCAgMHhmNTY5MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DT05USU5VT1VTX1NUUkVBTSAgMHhmNTY5MDAyMAorI2RlZmluZSBGMDkwMF9QMV9VTkFDQ0VQVEVEX1NUUkVBTSAgMHhmNTY5MDAxMAorI2RlZmluZSBGMDkwMF9QMV9CQ0hfRVJST1JfRkxBRyAgMHhmNTY5MDAwOAorI2RlZmluZSBGMDkwMF9QMV9CQkhDUkNLTyAgMHhmNTY5MDAwNAorI2RlZmluZSBGMDkwMF9QMV9QS1RERUxJTl9MT0NLICAweGY1NjkwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0ZJUlNUX0xPQ0sgIDB4ZjU2OTAwMDEKKworLypQMV9QREVMU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AxX1BERUxTVEFUVVMyICAweGY1NmEKKyNkZWZpbmUgRjA5MDBfUDFfUEtUREVMX0RFTU9EU0VMICAweGY1NmEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZSQU1FX01PRENPRCAgMHhmNTZhMDA3YworI2RlZmluZSBGMDkwMF9QMV9GUkFNRV9UWVBFICAweGY1NmEwMDAzCisKKy8qUDFfQkJGQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkJGQ1JDS08xICAweGY1NmIKKyNkZWZpbmUgRjA5MDBfUDFfQkJIQ1JDX0tPQ05UMSAgMHhmNTZiMDBmZgorCisvKlAxX0JCRkNSQ0tPMCovCisjZGVmaW5lIFIwOTAwX1AxX0JCRkNSQ0tPMCAgMHhmNTZjCisjZGVmaW5lIEYwOTAwX1AxX0JCSENSQ19LT0NOVDAgIDB4ZjU2YzAwZmYKKworLypQMV9VUENSQ0tPMSovCisjZGVmaW5lIFIwOTAwX1AxX1VQQ1JDS08xICAweGY1NmQKKyNkZWZpbmUgRjA5MDBfUDFfUEtUQ1JDX0tPQ05UMSAgMHhmNTZkMDBmZgorCisvKlAxX1VQQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDFfVVBDUkNLTzAgIDB4ZjU2ZQorI2RlZmluZSBGMDkwMF9QMV9QS1RDUkNfS09DTlQwICAweGY1NmUwMGZmCisKKy8qUDFfVFNTVEFURU0qLworI2RlZmluZSBSMDkwMF9QMV9UU1NUQVRFTSAgMHhmNTcwCisjZGVmaW5lIEYwOTAwX1AxX1RTRElMX09OICAweGY1NzAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTU0tJUFJTX09OICAweGY1NzAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTUlNfT04gIDB4ZjU3MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERVNDUkFNQl9PTiAgMHhmNTcwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZSQU1FX01PREUgIDB4ZjU3MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNfRElTQUJMRSAgMHhmNTcwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0FDTV9NT0RFICAweGY1NzAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTT1VUX05PU1lOQyAgMHhmNTcwMDAwMQorCisvKlAxX1RTQ0ZHSCovCisjZGVmaW5lIFIwOTAwX1AxX1RTQ0ZHSCAgMHhmNTcyCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19EVkJDSSAgMHhmNTcyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMICAweGY1NzIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19URUlVUERBVEUgIDB4ZjU3MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RVVFk1MCAgMHhmNTcyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fSFNHTkxPVVQgIDB4ZjU3MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0VSUk1PREUgIDB4ZjU3MjAwMDYKKyNkZWZpbmUgRjA5MDBfUDFfUlNUX0hXQVJFICAweGY1NzIwMDAxCisKKy8qUDFfVFNDRkdNKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNDRkdNICAweGY1NzMKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX01BTlNQRUVEICAweGY1NzMwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19QRVJNREFUQSAgMHhmNTczMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTk9ORVdTR05MICAweGY1NzMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19CSVRTUEVFRCAgMHhmNTczMDAwOAorI2RlZmluZSBGMDkwMF9QMV9OUERfU1BFQ0RWQlMyICAweGY1NzMwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19TVE9QQ0tESVMgIDB4ZjU3MzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0lOVkRBVEEgIDB4ZjU3MzAwMDEKKworLypQMV9UU0NGR0wqLworI2RlZmluZSBSMDkwMF9QMV9UU0NGR0wgIDB4ZjU3NAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQkNMS0RFTDFDSyAgMHhmNTc0MDBjMAorI2RlZmluZSBGMDkwMF9QMV9CQ0hFUlJPUl9NT0RFICAweGY1NzQwMDMwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19OU0dOTDJEQVRBICAweGY1NzQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19FTUJJTkRWQiAgMHhmNTc0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRFBVTkFDVCAgMHhmNTc0MDAwMgorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTlBET0ZGICAweGY1NzQwMDAxCisKKy8qUDFfVFNJTlNERUxIKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNJTlNERUxIICAweGY1NzYKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfU1lOQ0JZVEUgIDB4ZjU3NjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfWFhIRUFERVIgIDB4ZjU3NjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfQkJIRUFERVIgIDB4ZjU3NjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfREFUQUZJRUxEICAweGY1NzYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX0lTQ1IgIDB4ZjU3NjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNJTlNERUxfTlBEICAweGY1NzYwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX1JTUEFSSVRZICAweGY1NzYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX0NSQzggIDB4ZjU3NjAwMDEKKworLypQMV9UU1NQRUVEKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTUEVFRCAgMHhmNTgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19PVVRTUEVFRCAgMHhmNTgwMDBmZgorCisvKlAxX1RTU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTVEFUVVMgIDB4ZjU4MQorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTElORU9LICAweGY1ODEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19FUlJPUiAgMHhmNTgxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fREFUQTcgIDB4ZjU4MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX05PU1lOQyAgMHhmNTgxMDAxMAorI2RlZmluZSBGMDkwMF9QMV9JU0NSX0lOSVRJQUxJWkVEICAweGY1ODEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0lTQ1JfVVBEQVRFRCAgMHhmNTgxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TT0ZGSUZPX1VOUkVHVUwgIDB4ZjU4MTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRElMX1JFQURZICAweGY1ODEwMDAxCisKKy8qUDFfVFNTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTVEFUVVMyICAweGY1ODIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RFTU9EU0VMICAweGY1ODIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT1NQRUVEX1NUT1JFICAweGY1ODIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0RJTFhYX1JFU0VUICAweGY1ODIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTU0VSSUFMX0lNUE9TICAweGY1ODIwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19MSU5FTk9LICAweGY1ODIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0JJVFNQRUVEX0VWRU5UICAweGY1ODIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NDUkFNQkRFVEVDVCAgMHhmNTgyMDAwMgorI2RlZmluZSBGMDkwMF9QMV9VTERUVjY3X0ZBTFNFTE9DSyAgMHhmNTgyMDAwMQorCisvKlAxX1RTQklUUkFURTEqLworI2RlZmluZSBSMDkwMF9QMV9UU0JJVFJBVEUxICAweGY1ODMKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0JJVFJBVEUxICAweGY1ODMwMGZmCisKKy8qUDFfVFNCSVRSQVRFMCovCisjZGVmaW5lIFIwOTAwX1AxX1RTQklUUkFURTAgIDB4ZjU4NAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQklUUkFURTAgIDB4ZjU4NDAwZmYKKworLypQMV9FUlJDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNUUkwxICAweGY1OTgKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX1NPVVJDRTEgIDB4ZjU5ODAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfTlVNX0VWRU5UMSAgMHhmNTk4MDAwNworCisvKlAxX0VSUkNOVDEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMTIgIDB4ZjU5OQorI2RlZmluZSBGMDkwMF9QMV9FUlJDTlQxX09MRFZBTFVFICAweGY1OTkwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQxMiAgMHhmNTk5MDA3ZgorCisvKlAxX0VSUkNOVDExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMTEgIDB4ZjU5YQorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMTEgIDB4ZjU5YTAwZmYKKworLypQMV9FUlJDTlQxMCovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDEwICAweGY1OWIKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDEwICAweGY1OWIwMGZmCisKKy8qUDFfRVJSQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDVFJMMiAgMHhmNTljCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9TT1VSQ0UyICAweGY1OWMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX05VTV9FVkVOVDIgIDB4ZjU5YzAwMDcKKworLypQMV9FUlJDTlQyMiovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDIyICAweGY1OWQKKyNkZWZpbmUgRjA5MDBfUDFfRVJSQ05UMl9PTERWQUxVRSAgMHhmNTlkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMjIgIDB4ZjU5ZDAwN2YKKworLypQMV9FUlJDTlQyMSovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDIxICAweGY1OWUKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDIxICAweGY1OWUwMGZmCisKKy8qUDFfRVJSQ05UMjAqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQyMCAgMHhmNTlmCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQyMCAgMHhmNTlmMDBmZgorCisvKlAxX0ZFQ1NQWSovCisjZGVmaW5lIFIwOTAwX1AxX0ZFQ1NQWSAgMHhmNWEwCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9FTkFCTEUgIDB4ZjVhMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTk9fU1lOQ0JZVEUgIDB4ZjVhMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU0VSSUFMX01PREUgIDB4ZjVhMDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVU5VU1VBTF9QQUNLRVQgIDB4ZjVhMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQkVSX1BBQ0tNT0RFICAweGY1YTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0JFUk1FVEVSX0xNT0RFICAweGY1YTAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0JFUk1FVEVSX1JFU0VUICAweGY1YTAwMDAxCisKKy8qUDFfRlNQWUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlDRkcgIDB4ZjVhMQorI2RlZmluZSBGMDkwMF9QMV9GRUNTUFlfSU5QVVQgIDB4ZjVhMTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfUlNUX09OX0VSUk9SICAweGY1YTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX09ORV9TSE9UICAweGY1YTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0kyQ19NT0RFICAweGY1YTEwMDBjCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9IWVNURVJFU0lTICAweGY1YTEwMDAzCisKKy8qUDFfRlNQWURBVEEqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZREFUQSAgMHhmNWEyCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9TVFVGRklORyAgMHhmNWEyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9OT0VSUk9SX1BLVEpJVFRFUiAgMHhmNWEyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TUFlfQ05VTExQS1QgIDB4ZjVhMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX09VVERBVEFfTU9ERSAgMHhmNWEyMDAxZgorCisvKlAxX0ZTUFlPVVQqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZT1VUICAweGY1YTMKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWV9ESVJFQ1QgIDB4ZjVhMzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX09VVERBVEFfQlVTICAweGY1YTMwMDM4CisjZGVmaW5lIEYwOTAwX1AxX1NUVUZGX01PREUgIDB4ZjVhMzAwMDcKKworLypQMV9GU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNUQVRVUyAgMHhmNWE0CisjZGVmaW5lIEYwOTAwX1AxX1NQWV9FTkRTSU0gIDB4ZjVhNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVkFMSURfU0lNICAweGY1YTQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0ZPVU5EX1NJR05BTCAgMHhmNWE0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9EU1NfU1lOQ0JZVEUgIDB4ZjVhNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUkVTVUxUX1NUQVRFICAweGY1YTQwMDBmCisKKy8qUDFfRkJFUkNQVDQqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUNCAgMHhmNWE4CisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQ0ICAweGY1YTgwMGZmCisKKy8qUDFfRkJFUkNQVDMqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMyAgMHhmNWE5CisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQzICAweGY1YTkwMGZmCisKKy8qUDFfRkJFUkNQVDIqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMiAgMHhmNWFhCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQyICAweGY1YWEwMGZmCisKKy8qUDFfRkJFUkNQVDEqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMSAgMHhmNWFiCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQxICAweGY1YWIwMGZmCisKKy8qUDFfRkJFUkNQVDAqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMCAgMHhmNWFjCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQwICAweGY1YWMwMGZmCisKKy8qUDFfRkJFUkVSUjIqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMiAgMHhmNWFkCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIyICAweGY1YWQwMGZmCisKKy8qUDFfRkJFUkVSUjEqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMSAgMHhmNWFlCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIxICAweGY1YWUwMGZmCisKKy8qUDFfRkJFUkVSUjAqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMCAgMHhmNWFmCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIwICAweGY1YWYwMGZmCisKKy8qUDFfRlNQWUJFUiovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlCRVIgIDB4ZjViMgorI2RlZmluZSBGMDkwMF9QMV9GU1BZT0JTX1hPUlJFQUQgIDB4ZjViMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9PQlNNT0RFICAweGY1YjIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlCRVJfU1lOQ0JZVEUgIDB4ZjViMjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9VTlNZTkMgIDB4ZjViMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9DVElNRSAgMHhmNWIyMDAwNworCisvKlJDQ0ZHSCovCisjZGVmaW5lIFIwOTAwX1JDQ0ZHSCAgMHhmNjAwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX0RWQkNJICAweGY2MDAwMDgwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX1NFUklBTCAgMHhmNjAwMDA0MAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19ESVNBQkxFICAweGY2MDAwMDIwCisjZGVmaW5lIEYwOTAwX1RTRklGT18yVE9SQyAgMHhmNjAwMDAxMAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19IU0dOTE9VVCAgMHhmNjAwMDAwOAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19FUlJNT0RFICAweGY2MDAwMDA2CisKKy8qVFNHRU5FUkFMKi8KKyNkZWZpbmUgUjA5MDBfVFNHRU5FUkFMICAweGY2MzAKKyNkZWZpbmUgRjA5MDBfVFNGSUZPX0JDTEsxQUxMICAweGY2MzAwMDIwCisjZGVmaW5lIEYwOTAwX01VWFNUUkVBTV9PVVRNT0RFICAweGY2MzAwMDA4CisjZGVmaW5lIEYwOTAwX1RTRklGT19QRVJNUEFSQUwgIDB4ZjYzMDAwMDYKKyNkZWZpbmUgRjA5MDBfUlNUX1JFRURTT0xPICAweGY2MzAwMDAxCisKKy8qVFNHRU5FUkFMMVgqLworI2RlZmluZSBSMDkwMF9UU0dFTkVSQUwxWCAgMHhmNjcwCisjZGVmaW5lIEYwOTAwX1RTRklGTzFYX0JDTEsxQUxMICAweGY2NzAwMDIwCisjZGVmaW5lIEYwOTAwX01VWFNUUkVBTTFYX09VVE1PREUgIDB4ZjY3MDAwMDgKKyNkZWZpbmUgRjA5MDBfVFNGSUZPMVhfUEVSTVBBUkFMICAweGY2NzAwMDA2CisjZGVmaW5lIEYwOTAwX1JTVDFYX1JFRURTT0xPICAweGY2NzAwMDAxCisKKy8qTkJJVEVSX05GNCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjQgIDB4ZmEwMworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfMV8yICAweGZhMDMwMGZmCisKKy8qTkJJVEVSX05GNSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjUgIDB4ZmEwNAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfM181ICAweGZhMDQwMGZmCisKKy8qTkJJVEVSX05GNiovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjYgIDB4ZmEwNQorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfMl8zICAweGZhMDUwMGZmCisKKy8qTkJJVEVSX05GNyovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjcgIDB4ZmEwNgorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfM180ICAweGZhMDYwMGZmCisKKy8qTkJJVEVSX05GOCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjggIDB4ZmEwNworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfNF81ICAweGZhMDcwMGZmCisKKy8qTkJJVEVSX05GOSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjkgIDB4ZmEwOAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfNV82ICAweGZhMDgwMGZmCisKKy8qTkJJVEVSX05GMTAqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxMCAgMHhmYTA5CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF84XzkgIDB4ZmEwOTAwZmYKKworLypOQklURVJfTkYxMSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjExICAweGZhMGEKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzlfMTAgIDB4ZmEwYTAwZmYKKworLypOQklURVJfTkYxMiovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjEyICAweGZhMGIKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzNfNSAgMHhmYTBiMDBmZgorCisvKk5CSVRFUl9ORjEzKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTMgIDB4ZmEwYworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfMl8zICAweGZhMGMwMGZmCisKKy8qTkJJVEVSX05GMTQqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNCAgMHhmYTBkCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF8zXzQgIDB4ZmEwZDAwZmYKKworLypOQklURVJfTkYxNSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjE1ICAweGZhMGUKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzVfNiAgMHhmYTBlMDBmZgorCisvKk5CSVRFUl9ORjE2Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTYgIDB4ZmEwZgorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfOF85ICAweGZhMGYwMGZmCisKKy8qTkJJVEVSX05GMTcqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNyAgMHhmYTEwCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF85XzEwICAweGZhMTAwMGZmCisKKy8qTkJJVEVSTk9FUlIqLworI2RlZmluZSBSMDkwMF9OQklURVJOT0VSUiAgMHhmYTNmCisjZGVmaW5lIEYwOTAwX05CSVRFUl9TVE9QX0NSSVQgIDB4ZmEzZjAwMGYKKworLypHQUlOTExSX05GNCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY0ICAweGZhNDMKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8xXzIgIDB4ZmE0MzAwN2YKKworLypHQUlOTExSX05GNSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY1ICAweGZhNDQKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8zXzUgIDB4ZmE0NDAwN2YKKworLypHQUlOTExSX05GNiovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY2ICAweGZhNDUKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8yXzMgIDB4ZmE0NTAwN2YKKworLypHQUlOTExSX05GNyovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY3ICAweGZhNDYKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8zXzQgIDB4ZmE0NjAwN2YKKworLypHQUlOTExSX05GOCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY4ICAweGZhNDcKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF80XzUgIDB4ZmE0NzAwN2YKKworLypHQUlOTExSX05GOSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY5ICAweGZhNDgKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF81XzYgIDB4ZmE0ODAwN2YKKworLypHQUlOTExSX05GMTAqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTAgIDB4ZmE0OQorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzhfOSAgMHhmYTQ5MDA3ZgorCisvKkdBSU5MTFJfTkYxMSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMSAgMHhmYTRhCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfOV8xMCAgMHhmYTRhMDA3ZgorCisvKkdBSU5MTFJfTkYxMiovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMiAgMHhmYTRiCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfM181ICAweGZhNGIwMDdmCisKKy8qR0FJTkxMUl9ORjEzKi8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjEzICAweGZhNGMKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF8yXzMgIDB4ZmE0YzAwN2YKKworLypHQUlOTExSX05GMTQqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTQgIDB4ZmE0ZAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzNfNCAgMHhmYTRkMDA3ZgorCisvKkdBSU5MTFJfTkYxNSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxNSAgMHhmYTRlCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfNV82ICAweGZhNGUwMDdmCisKKy8qR0FJTkxMUl9ORjE2Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjE2ICAweGZhNGYKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF84XzkgIDB4ZmE0ZjAwN2YKKworLypHQUlOTExSX05GMTcqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTcgIDB4ZmE1MAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzlfMTAgIDB4ZmE1MDAwN2YKKworLypDRkdFWFQqLworI2RlZmluZSBSMDkwMF9DRkdFWFQgIDB4ZmE4MAorI2RlZmluZSBGMDkwMF9TVEFHTU9ERSAgMHhmYTgwMDA4MAorI2RlZmluZSBGMDkwMF9CWVBCQ0ggIDB4ZmE4MDAwNDAKKyNkZWZpbmUgRjA5MDBfQllQTERQQyAgMHhmYTgwMDAyMAorI2RlZmluZSBGMDkwMF9MRFBDTU9ERSAgMHhmYTgwMDAxMAorI2RlZmluZSBGMDkwMF9JTlZMTFJTSUdOICAweGZhODAwMDA4CisjZGVmaW5lIEYwOTAwX1NIT1JUTVVMVCAgMHhmYTgwMDAwNAorI2RlZmluZSBGMDkwMF9FWFRFUk5UWCAgMHhmYTgwMDAwMQorCisvKkdFTkNGRyovCisjZGVmaW5lIFIwOTAwX0dFTkNGRyAgMHhmYTg2CisjZGVmaW5lIEYwOTAwX0JST0FEQ0FTVCAgMHhmYTg2MDAxMAorI2RlZmluZSBGMDkwMF9OT1NIRlJEMiAgMHhmYTg2MDAwOAorI2RlZmluZSBGMDkwMF9CQ0hFUlJGTEFHICAweGZhODYwMDA0CisjZGVmaW5lIEYwOTAwX1BSSU9SSVRZICAweGZhODYwMDAyCisjZGVmaW5lIEYwOTAwX0RERU1PRCAgMHhmYTg2MDAwMQorCisvKkxEUENFUlIxKi8KKyNkZWZpbmUgUjA5MDBfTERQQ0VSUjEgIDB4ZmE5NgorI2RlZmluZSBGMDkwMF9MRFBDX0VSUk9SU19DT1VOVEVSMSAgMHhmYTk2MDBmZgorCisvKkxEUENFUlIwKi8KKyNkZWZpbmUgUjA5MDBfTERQQ0VSUjAgIDB4ZmE5NworI2RlZmluZSBGMDkwMF9MRFBDX0VSUk9SU19DT1VOVEVSMCAgMHhmYTk3MDBmZgorCisvKkJDSEVSUiovCisjZGVmaW5lIFIwOTAwX0JDSEVSUiAgMHhmYTk4CisjZGVmaW5lIEYwOTAwX0VSUk9SRkxBRyAgMHhmYTk4MDAxMAorI2RlZmluZSBGMDkwMF9CQ0hfRVJST1JTX0NPVU5URVIgIDB4ZmE5ODAwMGYKKworLypUU1RSRVMwKi8KKyNkZWZpbmUgUjA5MDBfVFNUUkVTMCAgMHhmZjExCisjZGVmaW5lIEYwOTAwX0ZSRVNGRUMgIDB4ZmYxMTAwODAKKyNkZWZpbmUgRjA5MDBfRlJFU1RTICAweGZmMTEwMDQwCisjZGVmaW5lIEYwOTAwX0ZSRVNWSVQxICAweGZmMTEwMDIwCisjZGVmaW5lIEYwOTAwX0ZSRVNWSVQyICAweGZmMTEwMDEwCisjZGVmaW5lIEYwOTAwX0ZSRVNTWU0xICAweGZmMTEwMDA4CisjZGVmaW5lIEYwOTAwX0ZSRVNTWU0yICAweGZmMTEwMDA0CisjZGVmaW5lIEYwOTAwX0ZSRVNNQVMgIDB4ZmYxMTAwMDIKKyNkZWZpbmUgRjA5MDBfRlJFU0lOVCAgMHhmZjExMDAwMQorCisvKlAyX1RTVERJU1JYKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNURElTUlggIDB4ZmY2NQorI2RlZmluZSBGMDkwMF9QMl9FTl9ESVNSWCAgMHhmZjY1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU1RfQ1VSUlNSQyAgMHhmZjY1MDA0MAorI2RlZmluZSBGMDkwMF9QMl9JTl9ESUdTSUdOQUwgIDB4ZmY2NTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfSElaX0NVUlJFTlRTUkMgIDB4ZmY2NTAwMTAKKyNkZWZpbmUgRjA5MDBfVFNUX1AyX1BJTl9TRUxFQ1QgIDB4ZmY2NTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNUX0RJU1JYICAweGZmNjUwMDA3CisKKy8qUDFfVFNURElTUlgqLworI2RlZmluZSBSMDkwMF9QMV9UU1RESVNSWCAgMHhmZjY3CisjZGVmaW5lIEYwOTAwX1AxX0VOX0RJU1JYICAweGZmNjcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTVF9DVVJSU1JDICAweGZmNjcwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0lOX0RJR1NJR05BTCAgMHhmZjY3MDAyMAorI2RlZmluZSBGMDkwMF9QMV9ISVpfQ1VSUkVOVFNSQyAgMHhmZjY3MDAxMAorI2RlZmluZSBGMDkwMF9UU1RfUDFfUElOX1NFTEVDVCAgMHhmZjY3MDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU1RfRElTUlggIDB4ZmY2NzAwMDcKKworI2RlZmluZSBTVFYwOTAwX05CUkVHUwkJNjg0CisjZGVmaW5lIFNUVjA5MDBfTkJGSUVMRFMJCTE3MDIKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTMxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0wLDAgKzEsMjg0NyBAQAorLyoKKyAqIHN0djA5MDBfc3cuYworICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAic3R2MDkwMC5oIgorI2luY2x1ZGUgInN0djA5MDBfcmVnLmgiCisjaW5jbHVkZSAic3R2MDkwMF9wcml2LmgiCisKK2ludCBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGNhcnJfb2Zmc2V0LAorCWFnYzJfaW50ZWdyLAorCW1heF9jYXJyaWVyOworCisJaW50IG5vX3NpZ25hbDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQljYXJyX29mZnNldCA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDFfQ0ZSMSk7CisJCWNhcnJfb2Zmc2V0ID0gZ2UyY29tcChjYXJyX29mZnNldCwgMTYpOworCQlhZ2MyX2ludGVnciA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTEpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMV9BR0MySTApOworCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJY2Fycl9vZmZzZXQgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AyX0NGUjEpOworCQljYXJyX29mZnNldCA9IGdlMmNvbXAoY2Fycl9vZmZzZXQsIDE2KTsKKwkJYWdjMl9pbnRlZ3IgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDJfQUdDMkkwKTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgKz0gKG1heF9jYXJyaWVyIC8gMTApOworCW1heF9jYXJyaWVyID0gNjU1MzYgKiAobWF4X2NhcnJpZXIgLyAyKTsKKwltYXhfY2FycmllciAvPSBpX3BhcmFtcy0+bWNsayAvIDEwMDA7CisJaWYgKG1heF9jYXJyaWVyID4gMHg0MDAwKQorCQltYXhfY2FycmllciA9IDB4NDAwMDsKKworCWlmICgoYWdjMl9pbnRlZ3IgPiAweDIwMDApCisJCQl8fCAoY2Fycl9vZmZzZXQgPiArIDIqbWF4X2NhcnJpZXIpCisJCQl8fCAoY2Fycl9vZmZzZXQgPCAtMiptYXhfY2FycmllcikpCisJCW5vX3NpZ25hbCA9IFRSVUU7CisJZWxzZQorCQlub19zaWduYWwgPSBGQUxTRTsKKworCXJldHVybiBub19zaWduYWw7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfZ2V0X3N3X2xvb3BfcGFyYW1zKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQlzMzIgKmZyZXF1ZW5jeV9pbmMsIHMzMiAqc3dfdGltZW91dCwKKwkJCQlzMzIgKnN0ZXBzLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHRpbWVvdXQsIGZyZXFfaW5jLCBtYXhfc3RlcHMsIHNyYXRlLCBtYXhfY2FycmllcjsKKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJc3RhbmRhcmQ7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gbWF4X2NhcnJpZXIgLyAxMDsKKwkJc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gbWF4X2NhcnJpZXIgLyAxMDsKKwkJc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZDsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgPSA2NTUzNiAqIChtYXhfY2FycmllciAvIDIpOworCW1heF9jYXJyaWVyIC89IGlfcGFyYW1zLT5tY2xrIC8gMTAwMDsKKworCWlmIChtYXhfY2FycmllciA+IDB4NDAwMCkKKwkJbWF4X2NhcnJpZXIgPSAweDQwMDA7CisKKwlmcmVxX2luYyA9IHNyYXRlOworCWZyZXFfaW5jIC89IGlfcGFyYW1zLT5tY2xrID4+IDEwOworCWZyZXFfaW5jID0gZnJlcV9pbmMgPDwgNjsKKworCXN3aXRjaCAoc3RhbmRhcmQpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQlmcmVxX2luYyAqPSAzOworCQl0aW1lb3V0ID0gMjA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCWZyZXFfaW5jICo9IDQ7CisJCXRpbWVvdXQgPSAyNTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCWRlZmF1bHQ6CisJCWZyZXFfaW5jICo9IDM7CisJCXRpbWVvdXQgPSAyNTsKKwkJYnJlYWs7CisJfQorCisJZnJlcV9pbmMgLz0gMTAwOworCisJaWYgKChmcmVxX2luYyA+IG1heF9jYXJyaWVyKSB8fCAoZnJlcV9pbmMgPCAwKSkKKwkJZnJlcV9pbmMgPSBtYXhfY2FycmllciAvIDI7CisKKwl0aW1lb3V0ICo9IDI3NTAwOworCisJaWYgKHNyYXRlID4gMCkKKwkJdGltZW91dCAvPSBzcmF0ZSAvIDEwMDA7CisKKwlpZiAoKHRpbWVvdXQgPiAxMDApIHx8ICh0aW1lb3V0IDwgMCkpCisJCXRpbWVvdXQgPSAxMDA7CisKKwltYXhfc3RlcHMgPSAobWF4X2NhcnJpZXIgLyBmcmVxX2luYykgKyAxOworCisJaWYgKChtYXhfc3RlcHMgPiAxMDApIHx8IChtYXhfc3RlcHMgPCAwKSkgeworCQltYXhfc3RlcHMgPSAgMTAwOworCQlmcmVxX2luYyA9IG1heF9jYXJyaWVyIC8gbWF4X3N0ZXBzOworCX0KKworCSpmcmVxdWVuY3lfaW5jID0gZnJlcV9pbmM7CisJKnN3X3RpbWVvdXQgPSB0aW1lb3V0OworCSpzdGVwcyA9IG1heF9zdGVwczsKKworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc2VhcmNoX2NhcnJfc3dfbG9vcChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJczMyIEZyZXFJbmNyLCBzMzIgVGltZW91dCwgaW50IHppZ3phZywKKwkJCQlzMzIgTWF4U3RlcCwgZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlpbnQJbm9fc2lnbmFsLAorCQlsb2NrID0gRkFMU0U7CisJczMyCXN0ZXBDcHQsCisJCWZyZXFPZmZzZXQsCisJCW1heF9jYXJyaWVyOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IChtYXhfY2FycmllciAvIDEwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IChtYXhfY2FycmllciAvIDEwKTsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgPSA2NTUzNiAqIChtYXhfY2FycmllciAvIDIpOworCW1heF9jYXJyaWVyIC89IGlfcGFyYW1zLT5tY2xrIC8gMTAwMDsKKworCWlmIChtYXhfY2FycmllciA+IDB4NDAwMCkKKwkJbWF4X2NhcnJpZXIgPSAweDQwMDA7CisKKwlpZiAoemlnemFnID09IFRSVUUpCisJCWZyZXFPZmZzZXQgPSAwOworCWVsc2UKKwkJZnJlcU9mZnNldCA9IC1tYXhfY2FycmllciArIEZyZXFJbmNyOworCisJc3RlcENwdCA9IDA7CisKKwlkbyB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwKKwkJCQkJKGZyZXFPZmZzZXQgLyAyNTYpICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsCisJCQkJCSBmcmVxT2Zmc2V0ICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAxKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTIpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9SU1RfSFdBUkUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1JTVF9IV0FSRSwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwKKwkJCQkJKGZyZXFPZmZzZXQgLyAyNTYpICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsCisJCQkJCWZyZXFPZmZzZXQgJiAweEZGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMikgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1JTVF9IV0FSRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfUlNUX0hXQVJFLCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHppZ3phZyA9PSBUUlVFKSB7CisJCQlpZiAoZnJlcU9mZnNldCA+PSAwKQorCQkJCWZyZXFPZmZzZXQgPSAtZnJlcU9mZnNldCAtIDIgKiBGcmVxSW5jcjsKKwkJCWVsc2UKKwkJCQlmcmVxT2Zmc2V0ID0gLWZyZXFPZmZzZXQ7CisJCX0gZWxzZQorCQkJZnJlcU9mZnNldCArPSArIDIgKiBGcmVxSW5jcjsKKworCQlzdGVwQ3B0Kys7CisJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgVGltZW91dCk7CisJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwl9IHdoaWxlICgobG9jayA9PSBGQUxTRSkKKwkJCSYmIChub19zaWduYWwgPT0gRkFMU0UpCisJCQkmJiAoKGZyZXFPZmZzZXQgLSBGcmVxSW5jcikgPCAgbWF4X2NhcnJpZXIpCisJCQkmJiAoKGZyZXFPZmZzZXQgKyBGcmVxSW5jcikgPiAtbWF4X2NhcnJpZXIpCisJCQkmJiAoc3RlcENwdCA8IE1heFN0ZXApKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2NrOworfQorCitpbnQgc3R2MDkwMF9zd19hbGdvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWludCBsb2NrID0gRkFMU0U7CisKKwlpbnQgbm9fc2lnbmFsLAorCXppZ3phZzsKKwlzMzIgZHZiczJfZmx5X3doZWVsOworCisJczMyIGZyZXFJbmNyZW1lbnQsIHNvZnRTdGVwVGltZW91dCwgdHJpYWxDb3VudGVyLCBtYXhfc3RlcHM7CisKKwlzdHYwOTAwX2dldF9zd19sb29wX3BhcmFtcyhpX3BhcmFtcywgJmZyZXFJbmNyZW1lbnQsICZzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCSZtYXhfc3RlcHMsIGRlbW9kKTsKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkweDNCKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCTB4ZWYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EQ0ZHTUQsIDB4NDkpOworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkweDc5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJMHg2OCk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwKKwkJCQkJCTB4ODkpOworCisJCQl6aWd6YWcgPSBUUlVFOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHgzQik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDc5KTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHhlZik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDY4KTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRENGR01ELAorCQkJCQkJCTB4YzkpOworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCisJCXRyaWFsQ291bnRlciA9IDA7CisJCWRvIHsKKwkJCWxvY2sgPSBzdHYwOTAwX3NlYXJjaF9jYXJyX3N3X2xvb3AoaV9wYXJhbXMsCisJCQkJCQkJZnJlcUluY3JlbWVudCwKKwkJCQkJCQlzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCQkJemlnemFnLAorCQkJCQkJCW1heF9zdGVwcywKKwkJCQkJCQlkZW1vZCk7CisJCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywKKwkJCQkJCQkJZGVtb2QpOworCQkJdHJpYWxDb3VudGVyKys7CisJCQlpZiAoKGxvY2sgPT0gVFJVRSkKKwkJCQkJfHwgKG5vX3NpZ25hbCA9PSBUUlVFKQorCQkJCQl8fCAodHJpYWxDb3VudGVyID09IDIpKSB7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJCTB4NDkpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkJMHg5ZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCQkweGVkKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJCTB4ODgpOworCQkJCX0KKworCQkJCWlmICgobG9jayA9PSBUUlVFKSAmJiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCUzJfRk9VTkQpKSB7CisJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9GTFlXSEVFTF9DUFQpOworCisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRkxZV0hFRUxfQ1BUKTsKKwkJCQkJfQorCisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCWxvY2sgPSBGQUxTRTsKKworCQkJCQkJaWYgKHRyaWFsQ291bnRlciA8IDIpIHsKKwkJCQkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywgMHg3OSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDY4KTsKKworCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwgMHg4OSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJfSB3aGlsZSAoKGxvY2sgPT0gRkFMU0UpCisJCQkmJiAodHJpYWxDb3VudGVyIDwgMikKKwkJCSYmIChub19zaWduYWwgPT0gRkFMU0UpKTsKKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJMHgzYik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweGVmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELAorCQkJCQkJMHg0OSk7CisJCQl6aWd6YWcgPSBGQUxTRTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCTB4NzkpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDY4KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELCAweDg5KTsKKwkJCXppZ3phZyA9IFRSVUU7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkZWZhdWx0OgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCTB4M2IpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDc5KTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweGVmKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJMHg2OCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwgMHhjOSk7CisKKwkJCXppZ3phZyA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKworCQl0cmlhbENvdW50ZXIgPSAwOworCisJCWRvIHsKKwkJCWxvY2sgPSBzdHYwOTAwX3NlYXJjaF9jYXJyX3N3X2xvb3AoaV9wYXJhbXMsCisJCQkJCQkJZnJlcUluY3JlbWVudCwKKwkJCQkJCQlzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCQkJemlnemFnLAorCQkJCQkJCW1heF9zdGVwcywKKwkJCQkJCQlkZW1vZCk7CisJCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywKKwkJCQkJCQkJZGVtb2QpOworCQkJdHJpYWxDb3VudGVyKys7CisJCQlpZiAoKGxvY2sgPT0gVFJVRSkKKwkJCQkJfHwgKG5vX3NpZ25hbCA9PSBUUlVFKQorCQkJCQl8fCAodHJpYWxDb3VudGVyID09IDIpKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCQkweDQ5KTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJCTB4OWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkJMHhlZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCQkweDg4KTsKKwkJCQl9CisKKwkJCQlpZiAoKGxvY2sgPT0gVFJVRSkgJiYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlMyX0ZPVU5EKSkgeworCQkJCQltc2xlZXAoc29mdFN0ZXBUaW1lb3V0KTsKKwkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRkxZV0hFRUxfQ1BUKTsKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbXNsZWVwKHNvZnRTdGVwVGltZW91dCk7CisJCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9GTFlXSEVFTF9DUFQpOworCQkJCQl9CisKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbG9jayA9IEZBTFNFOworCQkJCQkJaWYgKHRyaWFsQ291bnRlciA8IDIpIHsKKwkJCQkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg3OSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLCAweDY4KTsKKworCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwgMHg4OSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJfSB3aGlsZSAoKGxvY2sgPT0gRkFMU0UpICYmICh0cmlhbENvdW50ZXIgPCAyKSAmJiAobm9fc2lnbmFsID09IEZBTFNFKSk7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvY2s7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX2ZpZWxkMywgc2ZyX2ZpZWxkMiwgc2ZyX2ZpZWxkMSwgc2ZyX2ZpZWxkMCwKKwlyZW0xLCByZW0yLCBpbnR2YWwxLCBpbnR2YWwyLCBzcmF0ZTsKKworCWRtZF9yZWcoc2ZyX2ZpZWxkMywgRjA5MDBfUDFfU1lNQl9GUkVRMywgRjA5MDBfUDJfU1lNQl9GUkVRMyk7CisJZG1kX3JlZyhzZnJfZmllbGQyLCBGMDkwMF9QMV9TWU1CX0ZSRVEyLCBGMDkwMF9QMl9TWU1CX0ZSRVEyKTsKKwlkbWRfcmVnKHNmcl9maWVsZDEsIEYwOTAwX1AxX1NZTUJfRlJFUTEsIEYwOTAwX1AyX1NZTUJfRlJFUTEpOworCWRtZF9yZWcoc2ZyX2ZpZWxkMCwgRjA5MDBfUDFfU1lNQl9GUkVRMCwgRjA5MDBfUDJfU1lNQl9GUkVRMCk7CisKKwlzcmF0ZSA9IChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQzKSA8PCAyNCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMikgPDwgMTYpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDEpIDw8IDgpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDApKTsKKwlkcHJpbnRrKCJsb2NrOiBzcmF0ZT0lZCByMD0weCV4IHIxPTB4JXggcjI9MHgleCByMz0weCV4IFxuIiwKKwkJc3JhdGUsIHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDApLAorCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQxKSwKKwkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMiksCisJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDMpKTsKKworCWludHZhbDEgPSAobWNsaykgPj4gMTY7CisJaW50dmFsMiA9IChzcmF0ZSkgPj4gMTY7CisKKwlyZW0xID0gKG1jbGspICUgMHgxMDAwMDsKKwlyZW0yID0gKHNyYXRlKSAlIDB4MTAwMDA7CisJc3JhdGUgPQkoaW50dmFsMSAqIGludHZhbDIpICsKKwkJKChpbnR2YWwxICogcmVtMikgPj4gMTYpICsKKwkJKChpbnR2YWwyICogcmVtMSkgPj4gMTYpOworCisJcmV0dXJuIHNyYXRlOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBtY2xrLCB1MzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHNmcl9pbml0X3JlZzsKKwl1MzIgc3ltYjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogTWNsayAlZCwgU1IgJWQsIERtZCAlZFxuIiwgX19mdW5jX18sIG1jbGssCisJCQkJCQkJc3JhdGUsIGRlbW9kKTsKKworCWRtZF9yZWcoc2ZyX2luaXRfcmVnLCBSMDkwMF9QMV9TRlJJTklUMSwgUjA5MDBfUDJfU0ZSSU5JVDEpOworCisJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDQ7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTIpOworCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA2OworCQlzeW1iIC89IChtY2xrID4+IDEwKTsKKwl9IGVsc2UgeworCQlzeW1iID0gc3JhdGUgPDwgOTsKKwkJc3ltYiAvPSAobWNsayA+PiA3KTsKKwl9CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX2luaXRfcmVnLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfaW5pdF9yZWcgKyAxLCAoc3ltYiAmIDB4RkYpKTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIG1jbGssIHUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX21heF9yZWc7CisJdTMyIHN5bWI7CisKKwlkbWRfcmVnKHNmcl9tYXhfcmVnLCBSMDkwMF9QMV9TRlJVUDEsIFIwOTAwX1AyX1NGUlVQMSk7CisKKwlzcmF0ZSA9IDEwNSAqIChzcmF0ZSAvIDEwMCk7CisKKwlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNDsKKwkJc3ltYiAvPSAobWNsayA+PiAxMik7CisJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDY7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTApOworCX0gZWxzZSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA5OworCQlzeW1iIC89IChtY2xrID4+IDcpOworCX0KKworCWlmIChzeW1iIDwgMHg3ZmZmKSB7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWF4X3JlZywgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnICsgMSwgKHN5bWIgJiAweEZGKSk7CisJfSBlbHNlIHsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnLCAweDdGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnICsgMSwgMHhGRik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywgdTMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBzZnJfbWluX3JlZzsKKwl1MzIJc3ltYjsKKworCWRtZF9yZWcoc2ZyX21pbl9yZWcsIFIwOTAwX1AxX1NGUkxPVzEsIFIwOTAwX1AyX1NGUkxPVzEpOworCisJc3JhdGUgPSA5NSAqIChzcmF0ZSAvIDEwMCk7CisJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDQ7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTIpOworCisJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDY7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTApOworCisJfSBlbHNlIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDk7CisJCXN5bWIgLz0gKG1jbGsgPj4gNyk7CisJfQorCisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9taW5fcmVnLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWluX3JlZyArIDEsIChzeW1iICYgMHhGRikpOworfQorCitzdGF0aWMgczMyIHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgdG1ncmVnLAorCXRpbWluZ29mZnNldDsKKworCWRtZF9yZWcodG1ncmVnLCBSMDkwMF9QMV9UTUdSRUcyLCBSMDkwMF9QMl9UTUdSRUcyKTsKKworCXRpbWluZ29mZnNldCA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCB0bWdyZWcpIDw8IDE2KSArCisJCSAgICAgICAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgdG1ncmVnICsgMSkgPDwgOCkgKworCQkgICAgICAgKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIHRtZ3JlZyArIDIpKTsKKworCXRpbWluZ29mZnNldCA9IGdlMmNvbXAodGltaW5nb2Zmc2V0LCAyNCk7CisKKworCWlmICh0aW1pbmdvZmZzZXQgPT0gMCkKKwkJdGltaW5nb2Zmc2V0ID0gMTsKKworCXRpbWluZ29mZnNldCA9ICgoczMyKXNyYXRlICogMTApIC8gKChzMzIpMHgxMDAwMDAwIC8gdGltaW5nb2Zmc2V0KTsKKwl0aW1pbmdvZmZzZXQgLz0gMzIwOworCisJcmV0dXJuIHRpbWluZ29mZnNldDsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfZHZiczJfcm9sbG9mZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHJvbGxvZmYsIG1hbl9mbGQsIG1hdHN0cl9yZWcsIHJvbGxvZmZfY3RsX2ZsZDsKKworCWRtZF9yZWcobWFuX2ZsZCwgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGKTsKKwlkbWRfcmVnKG1hdHN0cl9yZWcsIFIwOTAwX1AxX01BVFNUUjEsIFIwOTAwX1AyX01BVFNUUjEpOworCWRtZF9yZWcocm9sbG9mZl9jdGxfZmxkLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsCisJCQkJRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MKTsKKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKSB7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbWFuX2ZsZCwgMSk7CisJCXJvbGxvZmYgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBtYXRzdHJfcmVnKSAmIDB4MDM7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcm9sbG9mZl9jdGxfZmxkLCByb2xsb2ZmKTsKKwl9IGVsc2UKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtYW5fZmxkLCAwKTsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2NhcnJpZXJfd2lkdGgodTMyIHNyYXRlLCBlbnVtIGZlX3N0djA5MDBfcm9sbG9mZiBybykKK3sKKwl1MzIgcm9sbG9mZjsKKworCXN3aXRjaCAocm8pIHsKKwljYXNlIFNUVjA5MDBfMjA6CisJCXJvbGxvZmYgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzI1OgorCQlyb2xsb2ZmID0gMjU7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF8zNToKKwlkZWZhdWx0OgorCQlyb2xsb2ZmID0gMzU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcmF0ZSAgKyAoc3JhdGUgKiByb2xsb2ZmKSAvIDEwMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2NoZWNrX3RpbWluZ19sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWludCB0aW1pbmdMb2NrID0gRkFMU0U7CisJczMyIGksCisJdGltaW5nY3B0ID0gMDsKKwl1OCBjYXJGcmVxLAorCXRtZ1RIaGlnaCwKKwl0bWdUSExvdzsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQljYXJGcmVxID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSk7CisJCXRtZ1RIaGlnaCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSk7CisJCXRtZ1RITG93ID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHgyMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQywgMHg4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg0MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4NjUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJbXNsZWVwKDcpOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVE1HTE9DS19RVUFMSVRZKSA+PSAyKQorCQkJCXRpbWluZ2NwdCsrOworCisJCQltc2xlZXAoMSk7CisJCX0KKworCQlpZiAodGltaW5nY3B0ID49IDMpCisJCQl0aW1pbmdMb2NrID0gVFJVRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHgzOCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVEMsIDB4ODgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NjgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgY2FyRnJlcSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIHRtZ1RIaGlnaCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIHRtZ1RITG93KTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWNhckZyZXEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRKTsKKwkJdG1nVEhoaWdoID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFKTsKKwkJdG1nVEhMb3cgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweDIwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQywgMHg4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg0MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4NjUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJbXNsZWVwKDUpOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQl0aW1pbmdjcHQrKzsKKworCQkJbXNsZWVwKDEpOworCQl9CisKKwkJaWYgKHRpbWluZ2NwdCA+PSAzKQorCQkJdGltaW5nTG9jayA9IFRSVUU7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDLCAweDg4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDY4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIGNhckZyZXEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCB0bWdUSGhpZ2gpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCB0bWdUSExvdyk7CisJCWJyZWFrOworCX0KKworCXJldHVybgl0aW1pbmdMb2NrOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfZ2V0X2RlbW9kX2NvbGRfbG9jayhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJczMyIGRlbW9kX3RpbWVvdXQpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlpbnQgbG9jayA9IEZBTFNFOworCXMzMiBzcmF0ZSwgc2VhcmNoX3JhbmdlLCBsb2NrdGltZW91dCwKKwkJY3Vycmllcl9zdGVwLCBuYl9zdGVwcywgY3VycmVudF9zdGVwLAorCQlkaXJlY3Rpb24sIHR1bmVyX2ZyZXEsIHRpbWVvdXQ7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKwkJc2VhcmNoX3JhbmdlID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZTsKKwkJYnJlYWs7CisKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZTsKKwkJc2VhcmNoX3JhbmdlID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNyYXRlID49IDEwMDAwMDAwKQorCQlsb2NrdGltZW91dCA9IGRlbW9kX3RpbWVvdXQgLyAzOworCWVsc2UKKwkJbG9ja3RpbWVvdXQgPSBkZW1vZF90aW1lb3V0IC8gMjsKKworCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgbG9ja3RpbWVvdXQpOworCisJaWYgKGxvY2sgPT0gRkFMU0UpIHsKKwkJaWYgKHNyYXRlID49IDEwMDAwMDAwKSB7CisJCQlpZiAoc3R2MDkwMF9jaGVja190aW1pbmdfbG9jayhpX3BhcmFtcywgZGVtb2QpID09IFRSVUUpIHsKKwkJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJZGVmYXVsdDoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxZik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxZik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTUpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQpOworCQkJfSBlbHNlCisJCQkJbG9jayA9IEZBTFNFOworCQl9IGVsc2UgeworCQkJaWYgKHNyYXRlIDw9IDQwMDAwMDApCisJCQkJY3Vycmllcl9zdGVwID0gMTAwMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJY3Vycmllcl9zdGVwID0gMjAwMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDEwMDAwMDAwKQorCQkJCWN1cnJpZXJfc3RlcCA9IDMwMDA7CisJCQllbHNlCisJCQkJY3Vycmllcl9zdGVwID0gNTAwMDsKKworCQkJbmJfc3RlcHMgPSAoKHNlYXJjaF9yYW5nZSAvIDEwMDApIC8gY3Vycmllcl9zdGVwKTsKKwkJCW5iX3N0ZXBzIC89IDI7CisJCQluYl9zdGVwcyA9ICgyICogKG5iX3N0ZXBzICsgMSkpOworCQkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCQluYl9zdGVwcyA9IDI7CisJCQllbHNlIGlmIChuYl9zdGVwcyA+IDEyKQorCQkJCW5iX3N0ZXBzID0gMTI7CisKKwkJCWN1cnJlbnRfc3RlcCA9IDE7CisJCQlkaXJlY3Rpb24gPSAxOworCQkJdGltZW91dCA9IChkZW1vZF90aW1lb3V0IC8gMyk7CisJCQlpZiAodGltZW91dCA+IDEwMDApCisJCQkJdGltZW91dCA9IDEwMDA7CisKKwkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlpZiAobG9jayA9PSBGQUxTRSkgeworCQkJCQl0dW5lcl9mcmVxID0gaV9wYXJhbXMtPnR1bmVyMV9mcmVxOworCQkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKworCQkJCQl3aGlsZSAoKGN1cnJlbnRfc3RlcCA8PSBuYl9zdGVwcykgJiYgKGxvY2sgPT0gRkFMU0UpKSB7CisKKwkJCQkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCQkJCXR1bmVyX2ZyZXEgKz0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisJCQkJCQllbHNlCisJCQkJCQkJdHVuZXJfZnJlcSAtPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKworCQkJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjFfYncpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxQyk7CisJCQkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMikgeworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCQkJCX0KKworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgMCk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQkJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lb3V0KTsKKwkJCQkJCWRpcmVjdGlvbiAqPSAtMTsKKwkJCQkJCWN1cnJlbnRfc3RlcCsrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJaWYgKGxvY2sgPT0gRkFMU0UpIHsKKwkJCQkJdHVuZXJfZnJlcSA9IGlfcGFyYW1zLT50dW5lcjJfZnJlcTsKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgc3JhdGU7CisKKwkJCQkJd2hpbGUgKChjdXJyZW50X3N0ZXAgPD0gbmJfc3RlcHMpICYmIChsb2NrID09IEZBTFNFKSkgeworCisJCQkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJCQl0dW5lcl9mcmVxICs9IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCQkJCQkJZWxzZQorCQkJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUMpOworCQkJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMyKSB7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJCQkJfQorCisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIDApOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxNSk7CisJCQkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVvdXQpOworCQkJCQkJZGlyZWN0aW9uICo9IC0xOworCQkJCQkJY3VycmVudF9zdGVwKys7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4JbG9jazsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KHMzMiAqZGVtb2RfdGltZW91dCwgczMyICpmZWNfdGltZW91dCwKKwkJCQkJczMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28gYWxnbykKK3sKKwlzd2l0Y2ggKGFsZ28pIHsKKwljYXNlIFNUVjA5MDBfQkxJTkRfU0VBUkNIOgorCQlpZiAoc3JhdGUgPD0gMTUwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDE1MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDQwMDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMTAwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMzAwOworCQl9IGVsc2UgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDcwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTAwOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0NPTERfU1RBUlQ6CisJY2FzZSBTVFYwOTAwX1dBUk1fU1RBUlQ6CisJZGVmYXVsdDoKKwkJaWYgKHNyYXRlIDw9IDEwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAzMDAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxNzAwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDIwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAyNTAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMTAwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDUwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAxMDAwOworCQkJKCpmZWNfdGltZW91dCkgPSA1NTA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gMTAwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSA3MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDI1MDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSAyMDAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDQwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTMwOworCQl9CisKKwkJZWxzZSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMzAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMDA7CisJCX0KKworCQlicmVhazsKKworCX0KKworCWlmIChhbGdvID09IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJKCpkZW1vZF90aW1lb3V0KSAvPSAyOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCXMzMiB2dGhfcmVnOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHZ0aF9yZWcsIFIwOTAwX1AxX1ZUSDEyLCBSMDkwMF9QMl9WVEgxMik7CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweGQwKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDdkKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDUzKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDJGKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDI0KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDFGKTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJICAgZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZCBTdGFuZGFyZCwKKwkJCQkgICBlbnVtIGZlX3N0djA5MDBfZmVjIFB1bmN0dXJlUmF0ZSwKKwkJCQkgICBlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJczMyIGZlY21SZWcsCisJcHJ2aXRSZWc7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFZpdGVyYmlTdGFuZGFyZCA9ICIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlmZWNtUmVnID0gUjA5MDBfUDFfRkVDTTsKKwkJcHJ2aXRSZWcgPSBSMDkwMF9QMV9QUlZJVDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWZlY21SZWcgPSBSMDkwMF9QMl9GRUNNOworCQlwcnZpdFJlZyA9IFIwOTAwX1AyX1BSVklUOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKFN0YW5kYXJkKSB7CisJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkcHJpbnRrKCJBdXRvXG4iKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGZlY21SZWcsIDB4MTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4M0YpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQlkcHJpbnRrKCJEVkJTMVxuIik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBmZWNtUmVnLCAweDAwKTsKKwkJc3dpdGNoIChQdW5jdHVyZVJhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX0ZFQ19VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDJGKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzFfMjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18yXzM6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDIpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfM180OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDA0KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzVfNjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwOCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ183Xzg6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MjApOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJZHByaW50aygiRFNTXG4iKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGZlY21SZWcsIDB4ODApOworCQlzd2l0Y2ggKFB1bmN0dXJlUmF0ZSkgeworCQljYXNlIFNUVjA5MDBfRkVDX1VOS05PV046CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MTMpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfMV8yOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDAxKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzJfMzoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMik7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ182Xzc6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MTApOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBzcmF0ZSwgcGlsb3RzLCBhY2xjLCBmcmVxMSwgZnJlcTAsCisJCWkgPSAwLCB0aW1lZCwgdGltZWYsIGJsaW5kVHVuU3cgPSAwOworCisJZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYgcm9sbG9mZjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZSBmb3VuZE1vZGNvZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwlzcmF0ZSArPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIHNyYXRlLCBkZW1vZCk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsIGlfcGFyYW1zLT5yb2xsb2ZmKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDc1KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDApOworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyYW1lX2xlbmd0aCA9PSBTVFYwOTAwX0xPTkdfRlJBTUUpIHsKKwkJCQlmb3VuZE1vZGNvZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX01PRENPRCk7CisJCQkJcGlsb3RzID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfVFlQRSkgJiAweDAxOworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3Aoc3JhdGUsIGZvdW5kTW9kY29kLCBwaWxvdHMsIGlfcGFyYW1zLT5jaGlwX2lkKTsKKwkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCBhY2xjKTsKKwkJCQllbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzhQU0tfOTEwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfQorCisJCQkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9PSBTVFYwOTAwX1NJTkdMRSkgJiYgKGZvdW5kTW9kY29kID4gU1RWMDkwMF84UFNLXzkxMCkpIHsKKwkJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQkJfSBlbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzMyQVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJYWNsYyA9IHN0djA5MDBfZ2V0X29wdGltX3Nob3J0X2NhcnJfbG9vcChzcmF0ZSwgaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiwgaV9wYXJhbXMtPmNoaXBfaWQpOworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfUVBTSykKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCBhY2xjKTsKKworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF84UFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMTZBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8zMkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCX0KKworCQkJfQorCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkKKwkJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDY3KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKTsKKwkJZnJlcTAgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIxKTsKKwkJcm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JPTExPRkZfU1RBVFVTKTsKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TQ0FOX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCWJsaW5kVHVuU3cgPSAxOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFNTKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwYSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZJVFNDQUxFLCAweDApOworCQkJfQorCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4MDgpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEVYUCwgMHgwQSk7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCisJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkgfHwgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisKKwkJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJc3R2MDkwMF9zZXRfYmFuZHdpZHRoKGZlLCBpX3BhcmFtcy0+dHVuZXIxX2J3KTsKKwkJCX0KKworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkKKwkJCQltc2xlZXAoNTApOworCQkJZWxzZQorCQkJCW1zbGVlcCg1KTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZ0aW1lZCwgJnRpbWVmLCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKworCQkJaWYgKHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lZCAvIDIpID09IEZBTFNFKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQkJaSA9IDA7CisJCQkJd2hpbGUgKChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgJiYgKGkgPD0gMikpIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NDkpOworCisJCWlmICgoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkgfHwgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFNTX1NUQU5EQVJEKSkKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlicmVhazsKKworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9EVkJTMV9TVEFOREFSRDoKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCwgaV9wYXJhbXMtPnJvbGxvZmYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NzUpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0JDTEMsIDApOworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyYW1lX2xlbmd0aCA9PSBTVFYwOTAwX0xPTkdfRlJBTUUpIHsKKwkJCQlmb3VuZE1vZGNvZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX01PRENPRCk7CisJCQkJcGlsb3RzID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfVFlQRSkgJiAweDAxOworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3Aoc3JhdGUsIGZvdW5kTW9kY29kLCBwaWxvdHMsIGlfcGFyYW1zLT5jaGlwX2lkKTsKKwkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCBhY2xjKTsKKwkJCQllbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzhQU0tfOTEwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfQorCisJCQkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9PSBTVFYwOTAwX1NJTkdMRSkgJiYgKGZvdW5kTW9kY29kID4gU1RWMDkwMF84UFNLXzkxMCkpIHsKKwkJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQkJfSBlbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzMyQVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJCX0KKworCQkJCX0KKworCQkJfSBlbHNlIHsKKwkJCQlhY2xjID0gc3R2MDkwMF9nZXRfb3B0aW1fc2hvcnRfY2Fycl9sb29wKHNyYXRlLAorCQkJCQkJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiwKKwkJCQkJCQkJCWlfcGFyYW1zLT5jaGlwX2lkKTsKKworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfUVBTSykKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCBhY2xjKTsKKworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF84UFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMTZBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8zMkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCX0KKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDY3KTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJEOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJYnJlYWs7CisJCX0KKworCQlmcmVxMSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjIpOworCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjEpOworCQlyb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9TVEFUVVMpOworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcyLCAweDAxKTsKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJYmxpbmRUdW5TdyA9IDE7CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZBVlNSVklULCAweDBhKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVklUU0NBTEUsIDB4MCk7CisJCQl9CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHgwOCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMRVhQLCAweDBhKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHgzOCk7CisJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkgfHwgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisKKwkJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJc3R2MDkwMF9zZXRfYmFuZHdpZHRoKGZlLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKwkJCX0KKworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkKKwkJCQltc2xlZXAoNTApOworCQkJZWxzZQorCQkJCW1zbGVlcCg1KTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZ0aW1lZCwgJnRpbWVmLCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKwkJCWlmIChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJCWkgPSAwOworCQkJCXdoaWxlICgoc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVkIC8gMikgPT0gRkFMU0UpICYmIChpIDw9IDIpKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0OSk7CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEKSB8fCAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EU1NfU1RBTkRBUkQpKQorCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBzdHYwOTAwX2dldF9mZWNfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsIHMzMiB0aW1lX291dCkKK3sKKwlzMzIgdGltZXIgPSAwLCBsb2NrID0gMCwgaGVhZGVyX2ZpZWxkLCBwa3RkZWxpbl9maWVsZCwgbG9ja192aXRfZmllbGQ7CisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YXRlIGRtZF9zdGF0ZTsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhoZWFkZXJfZmllbGQsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyhwa3RkZWxpbl9maWVsZCwgRjA5MDBfUDFfUEtUREVMSU5fTE9DSywgRjA5MDBfUDJfUEtUREVMSU5fTE9DSyk7CisJZG1kX3JlZyhsb2NrX3ZpdF9maWVsZCwgRjA5MDBfUDFfTE9DS0VEVklULCBGMDkwMF9QMl9MT0NLRURWSVQpOworCisJZG1kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgaGVhZGVyX2ZpZWxkKTsKKworCXdoaWxlICgodGltZXIgPCB0aW1lX291dCkgJiYgKGxvY2sgPT0gMCkpIHsKKwkJc3dpdGNoIChkbWRfc3RhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwkJY2FzZSBTVFYwOTAwX1BMSF9ERVRFQ1RFRDoKKwkJZGVmYXVsdDoKKwkJCWxvY2sgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBwa3RkZWxpbl9maWVsZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCQlsb2NrID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja192aXRfZmllbGQpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobG9jayA9PSAwKSB7CisJCQltc2xlZXAoMTApOworCQkJdGltZXIgKz0gMTA7CisJCX0KKwl9CisKKwlpZiAobG9jaykKKwkJZHByaW50aygiREVNT0QgRkVDIExPQ0sgT0tcbiIpOworCWVsc2UKKwkJZHByaW50aygiREVNT0QgRkVDIExPQ0sgRkFJTFxuIik7CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3dhaXRfZm9yX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsCisJCQkJczMyIGRtZF90aW1lb3V0LCBzMzIgZmVjX3RpbWVvdXQpCit7CisKKwlzMzIgdGltZXIgPSAwLCBsb2NrID0gMCwgc3RyX21lcmdfcnN0X2ZsZCwgc3RyX21lcmdfbG9ja19mbGQ7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcoc3RyX21lcmdfcnN0X2ZsZCwgRjA5MDBfUDFfUlNUX0hXQVJFLCBGMDkwMF9QMl9SU1RfSFdBUkUpOworCWRtZF9yZWcoc3RyX21lcmdfbG9ja19mbGQsIEYwOTAwX1AxX1RTRklGT19MSU5FT0ssIEYwOTAwX1AyX1RTRklGT19MSU5FT0spOworCisJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkbWRfdGltZW91dCk7CisKKwlpZiAobG9jaykKKwkJbG9jayA9IGxvY2sgJiYgc3R2MDkwMF9nZXRfZmVjX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBmZWNfdGltZW91dCk7CisKKwlpZiAobG9jaykgeworCQlsb2NrID0gMDsKKworCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRpbWVyID0gJWQsIHRpbWVfb3V0ID0gJWRcbiIsIF9fZnVuY19fLCB0aW1lciwgZmVjX3RpbWVvdXQpOworCisJCXdoaWxlICgodGltZXIgPCBmZWNfdGltZW91dCkgJiYgKGxvY2sgPT0gMCkpIHsKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzdHJfbWVyZ19sb2NrX2ZsZCk7CisJCQltc2xlZXAoMSk7CisJCQl0aW1lcisrOworCQl9CisJfQorCisJaWYgKGxvY2spCisJCWRwcmludGsoS0VSTl9JTkZPICIlczogREVNT0QgTE9DSyBPS1xuIiwgX19mdW5jX18pOworCWVsc2UKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBERU1PRCBMT0NLIEZBSUxcbiIsIF9fZnVuY19fKTsKKworCWlmIChsb2NrKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHN0djA5MDBfZ2V0X3N0YW5kYXJkKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIGZuZF9zdGFuZGFyZDsKKwlzMzIgc3RhdGVfZmllbGQsCisJZHNzX2R2Yl9maWVsZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhzdGF0ZV9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKGRzc19kdmJfZmllbGQsIEYwOTAwX1AxX0RTU19EVkIsIEYwOTAwX1AyX0RTU19EVkIpOworCisJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHN0YXRlX2ZpZWxkKSA9PSAyKQorCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOworCisJZWxzZSBpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc3RhdGVfZmllbGQpID09IDMpIHsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGRzc19kdmJfZmllbGQpID09IDEpCisJCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX0RTU19TVEFOREFSRDsKKwkJZWxzZQorCQkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRDsKKwl9IGVsc2UKKwkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJEOworCisJcmV0dXJuIGZuZF9zdGFuZGFyZDsKK30KKworc3RhdGljIHMzMiBzdHYwOTAwX2dldF9jYXJyX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbWNsaywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgY2ZyX2ZpZWxkMiwgY2ZyX2ZpZWxkMSwgY2ZyX2ZpZWxkMCwKKwkJZGVyb3QsIHJlbTEsIHJlbTIsIGludHZhbDEsIGludHZhbDI7CisKKwlkbWRfcmVnKGNmcl9maWVsZDIsIEYwOTAwX1AxX0NBUl9GUkVRMiwgRjA5MDBfUDJfQ0FSX0ZSRVEyKTsKKwlkbWRfcmVnKGNmcl9maWVsZDEsIEYwOTAwX1AxX0NBUl9GUkVRMSwgRjA5MDBfUDJfQ0FSX0ZSRVExKTsKKwlkbWRfcmVnKGNmcl9maWVsZDAsIEYwOTAwX1AxX0NBUl9GUkVRMCwgRjA5MDBfUDJfQ0FSX0ZSRVEwKTsKKworCWRlcm90ID0gKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGNmcl9maWVsZDIpIDw8IDE2KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBjZnJfZmllbGQxKSA8PCA4KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBjZnJfZmllbGQwKSk7CisKKwlkZXJvdCA9IGdlMmNvbXAoZGVyb3QsIDI0KTsKKwlpbnR2YWwxID0gbWNsayA+PiAxMjsKKwlpbnR2YWwyID0gZGVyb3QgPj4gMTI7CisJcmVtMSA9IG1jbGsgJSAweDEwMDA7CisJcmVtMiA9IGRlcm90ICUgMHgxMDAwOworCWRlcm90ID0gKGludHZhbDEgKiBpbnR2YWwyKSArCisJCSgoaW50dmFsMSAqIHJlbTIpID4+IDEyKSArCisJCSgoaW50dmFsMiAqIHJlbTEpID4+IDEyKTsKKworCXJldHVybiBkZXJvdDsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2dldF90dW5lcl9mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzCSpmcm9udGVuZF9vcHMgPSBOVUxMOworCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOworCXUzMiBmcmVxdWVuY3kgPSAwOworCisJaWYgKCZmZS0+b3BzKQorCQlmcm9udGVuZF9vcHMgPSAmZmUtPm9wczsKKworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKworCWlmICh0dW5lcl9vcHMtPmdldF9mcmVxdWVuY3kpIHsKKwkJaWYgKCh0dW5lcl9vcHMtPmdldF9mcmVxdWVuY3koZmUsICZmcmVxdWVuY3kpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEZyZXF1ZW5jeT0lZFxuIiwgX19mdW5jX18sIGZyZXF1ZW5jeSk7CisKKwl9CisKKwlyZXR1cm4gZnJlcXVlbmN5OworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2ZlYyBzdHYwOTAwX2dldF92aXRfZmVjKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHJhdGVfZmxkLCB2aXRfY3VycHVuX2ZsZDsKKwllbnVtIGZlX3N0djA5MDBfZmVjIHByYXRlOworCisJZG1kX3JlZyh2aXRfY3VycHVuX2ZsZCwgRjA5MDBfUDFfVklUX0NVUlBVTiwgRjA5MDBfUDJfVklUX0NVUlBVTik7CisJcmF0ZV9mbGQgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCB2aXRfY3VycHVuX2ZsZCk7CisKKwlzd2l0Y2ggKHJhdGVfZmxkKSB7CisJY2FzZSAxMzoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfMl8zOworCQlicmVhazsKKwljYXNlIDIxOgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgMjU6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfNl83OworCQlicmVhazsKKwljYXNlIDI2OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzdfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ19VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcHJhdGU7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJczMyIG9mZnNldEZyZXEsCisJc3JhdGVfb2Zmc2V0LAorCWkgPSAwOworCisJdTggdGltaW5nOworCisJbXNsZWVwKDUpOworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQl0aW1pbmcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdSRUcyKTsKKwkJCWkgPSAwOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4NWMpOworCisJCQl3aGlsZSAoKGkgPD0gNTApICYmICh0aW1pbmcgIT0gMCkgJiYgKHRpbWluZyAhPSAweEZGKSkgeworCQkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1JFRzIpOworCQkJCW1zbGVlcCg1KTsKKwkJCQlpICs9IDU7CisJCQl9CisJCX0KKworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpIC8gMTAwMDsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJlcXVlbmN5ICs9IG9mZnNldEZyZXE7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCXNyYXRlX29mZnNldCA9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUgKz0gc3JhdGVfb2Zmc2V0OworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mZWMgPSBzdHYwOTAwX2dldF92aXRfZmVjKGlfcGFyYW1zLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9NT0RDT0QpOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX1RZUEUpICYgMHgwMTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJhbWVfbGVuZ3RoID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfVFlQRSkpID4+IDE7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX1NUQVRVUyk7CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0RFTU9EKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfUVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfUVBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF84UFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF84UFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzE2QVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMTZBUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzMyQVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMzJBUFNLOworCQkJZWxzZQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1VOS05PV047CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOgorCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9JUUlOVik7CisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpIHsKKwkJCW9mZnNldEZyZXEgPQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3kgLSBpX3BhcmFtcy0+dHVuZXIxX2ZyZXE7CisJCQlpX3BhcmFtcy0+dHVuZXIxX2ZyZXEgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMjAwMCkgKyA1MDApKQorCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJZWxzZQorCQkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDFfcnNsdHMucm9sbG9mZikgLyAyMDAwKSkKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQkJZWxzZQorCQkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKworCQl9IGVsc2UgeworCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAyMDAwKSArIDUwMCkpCisJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQllbHNlCisJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1JFRzIpOworCQkJaSA9IDA7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHg1Yyk7CisKKwkJCXdoaWxlICgoaSA8PSA1MCkgJiYgKHRpbWluZyAhPSAwKSAmJiAodGltaW5nICE9IDB4ZmYpKSB7CisJCQkJdGltaW5nID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HUkVHMik7CisJCQkJbXNsZWVwKDUpOworCQkJCWkgKz0gNTsKKwkJCX0KKwkJfQorCisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkID0gc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisJCW9mZnNldEZyZXEgPSBzdHYwOTAwX2dldF9jYXJyX2ZyZXEoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCkgLyAxMDAwOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmVxdWVuY3kgKz0gb2Zmc2V0RnJlcTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJc3JhdGVfb2Zmc2V0ID0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSArPSBzcmF0ZV9vZmZzZXQ7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZlYyA9IHN0djA5MDBfZ2V0X3ZpdF9mZWMoaV9wYXJhbXMsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX01PRENPRCk7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnBpbG90ID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfVFlQRSkgJiAweDAxOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmFtZV9sZW5ndGggPSAoKHUzMilzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9UWVBFKSkgPj4gMTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMucm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfU1RBVFVTKTsKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfREVNT0QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzhQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzhQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8xNkFQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMzJBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8zMkFQU0s7CisJCQllbHNlCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfVU5LTk9XTjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0lRSU5WKTsKKwkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1FQU0s7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkgeworCQkJb2Zmc2V0RnJlcSA9CWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeSAtIGlfcGFyYW1zLT50dW5lcjJfZnJlcTsKKwkJCWlfcGFyYW1zLT50dW5lcjJfZnJlcSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9IChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQyX3JzbHRzLnJvbGxvZmYpIC8gMjAwMCkpCisJCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJCWVsc2UKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJCX0gZWxzZSB7CisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiByYW5nZTsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzdHYwOTAwX2R2YnMxX2FjcV93b3JrYXJvdW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIHNyYXRlLCBkZW1vZF90aW1lb3V0LAorCQlmZWNfdGltZW91dCwgZnJlcTEsIGZyZXEwOworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzaWduYWxfdHlwZSA9IFNUVjA5MDBfTk9EQVRBOzsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlNfRk9VTkQpIHsKKwkJCXNyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCQlzcmF0ZSArPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIHNyYXRlLCBkZW1vZCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIHNyYXRlLCBTVFYwOTAwX1dBUk1fU1RBUlQpOworCQkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKTsKKwkJCWZyZXEwID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NQRUNJTlZfQ09OVFJPTCwgU1RWMDkwMF9JUV9GT1JDRV9TV0FQUEVEKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfTk9STUFMKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKwkJCQkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQkJCX0KKworCQkJfQorCisJCX0gZWxzZQorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCU19GT1VORCkgeworCQkJc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCXNyYXRlICs9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgc3JhdGUsIGRlbW9kKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKwkJCWZyZXExID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMik7CisJCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfU1dBUFBFRCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKworCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfTk9STUFMKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKworCQkJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCQkJfQorCisJCQl9CisKKwkJfSBlbHNlCisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2lnbmFsX3R5cGU7Cit9CisKK3N0YXRpYyB1MTYgc3R2MDkwMF9ibGluZF9jaGVja19hZ2MyX21pbl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIG1pbmFnYzJsZXZlbCA9IDB4ZmZmZiwKKwkJYWdjMmxldmVsLAorCQlpbml0X2ZyZXEsIGZyZXFfc3RlcDsKKworCXMzMiBpLCBqLCBuYl9zdGVwcywgZGlyZWN0aW9uOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDEpOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAweGMwKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMSwgMHg4Mik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAweGEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgwKTsKKworCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJbmJfc3RlcHMgPSAtMSArIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDAwMCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisKKwkJZGlyZWN0aW9uID0gMTsKKworCQlmcmVxX3N0ZXAgPSAoMTAwMDAwMCA8PCA4KSAvIChpX3BhcmFtcy0+bWNsayA+PiA4KTsKKworCQlpbml0X2ZyZXEgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBuYl9zdGVwczsgaSsrKSB7CisJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgKyAoZnJlcV9zdGVwICogaSk7CisJCQllbHNlCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxIC0gKGZyZXFfc3RlcCAqIGkpOworCisJCQlkaXJlY3Rpb24gKj0gLTE7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgKGluaXRfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBpbml0X2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDU4KTsKKwkJCW1zbGVlcCgxMCk7CisJCQlhZ2MybGV2ZWwgPSAwOworCisJCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKKwkJCQlhZ2MybGV2ZWwgKz0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkwKTsKKworCQkJYWdjMmxldmVsIC89IDEwOworCisJCQlpZiAoYWdjMmxldmVsIDwgbWluYWdjMmxldmVsKQorCQkJCW1pbmFnYzJsZXZlbCA9IGFnYzJsZXZlbDsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EVDBNLCAweDApOworCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJbmJfc3RlcHMgPSAtMSArIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDAwMCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisKKwkJZGlyZWN0aW9uID0gMTsKKwkJZnJlcV9zdGVwID0gKDEwMDAwMDAgPDwgOCkgLyAoaV9wYXJhbXMtPm1jbGsgPj4gOCk7CisJCWluaXRfZnJlcSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuYl9zdGVwczsgaSsrKSB7CisJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgKyAoZnJlcV9zdGVwICogaSk7CisJCQllbHNlCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxIC0gKGZyZXFfc3RlcCAqIGkpOworCisJCQlkaXJlY3Rpb24gKj0gLTE7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAoaW5pdF9mcmVxID4+IDgpICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGluaXRfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NTgpOworCisJCQltc2xlZXAoMTApOworCQkJYWdjMmxldmVsID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQorCQkJCWFnYzJsZXZlbCArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTApOworCisJCQlhZ2MybGV2ZWwgLz0gMTA7CisKKwkJCWlmIChhZ2MybGV2ZWwgPCBtaW5hZ2MybGV2ZWwpCisJCQkJbWluYWdjMmxldmVsID0gYWdjMmxldmVsOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAodTE2KW1pbmFnYzJsZXZlbDsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX3NlYXJjaF9zcmF0ZV9jb2Fyc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJaW50IHRpbWluZ0xvY2sgPSBGQUxTRTsKKwlzMzIgaSwgdGltaW5nY3B0ID0gMCwKKwkJZGlyZWN0aW9uID0gMSwKKwkJbmJfc3RlcHMsCisJCWN1cnJlbnRfc3RlcCA9IDAsCisJCXR1bmVyX2ZyZXE7CisKKwl1MzIgY29hcnNlX3NyYXRlID0gMCwgYWdjMl9pbnRlZ3IgPSAwLCBjdXJyaWVyX3N0ZXAgPSAxMjAwOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MUYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHLCAweDEyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHhmMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4ZTApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EVDBNLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHg1MCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDZhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDk1KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVkKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDczKTsKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSAyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMTAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDIwMDA7CisJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDw9IDEyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMzAwMDsKKwkJZWxzZQorCQkJY3Vycmllcl9zdGVwID0gNTAwMDsKKworCQluYl9zdGVwcyA9IC0xICsgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMCkgLyBjdXJyaWVyX3N0ZXApOworCQluYl9zdGVwcyAvPSAyOworCQluYl9zdGVwcyA9ICgyICogbmJfc3RlcHMpICsgMTsKKworCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJbmJfc3RlcHMgPSAxOworCisJCWVsc2UgaWYgKG5iX3N0ZXBzID4gMTApIHsKKwkJCW5iX3N0ZXBzID0gMTE7CisJCQljdXJyaWVyX3N0ZXAgPSAoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDApIC8gMTA7CisJCX0KKworCQljdXJyZW50X3N0ZXAgPSAwOworCisJCWRpcmVjdGlvbiA9IDE7CisJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIxX2ZyZXE7CisKKwkJd2hpbGUgKCh0aW1pbmdMb2NrID09IEZBTFNFKSAmJiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVGKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MCk7CisKKwkJCW1zbGVlcCg1MCk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQkJdGltaW5nY3B0Kys7CisKKwkJCQlhZ2MyX2ludGVnciArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkxKSA8PCA4KSB8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMCk7CisKKwkJCX0KKworCQkJYWdjMl9pbnRlZ3IgLz0gMTA7CisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCWN1cnJlbnRfc3RlcCsrOworCQkJZGlyZWN0aW9uICo9IC0xOworCisJCQlkcHJpbnRrKCJsb2NrOiBJMkNfREVNT0RfTU9ERV9GSUVMRCA9MC4gU2VhcmNoIHN0YXJ0ZWQuIHR1bmVyIGZyZXE9JWQgYWdjMj0weCV4IHNyYXRlX2NvYXJzZT0lZCB0bWdfY3B0PSVkXG4iLCB0dW5lcl9mcmVxLCBhZ2MyX2ludGVnciwgY29hcnNlX3NyYXRlLCB0aW1pbmdjcHQpOworCisJCQlpZiAoKHRpbWluZ2NwdCA+PSA1KSAmJiAoYWdjMl9pbnRlZ3IgPCAweDFGMDApICYmIChjb2Fyc2Vfc3JhdGUgPCA1NTAwMDAwMCkgJiYgKGNvYXJzZV9zcmF0ZSA+IDg1MDAwMCkpIHsKKwkJCQl0aW1pbmdMb2NrID0gVFJVRTsKKwkJCX0KKworCQkJZWxzZSBpZiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpIHsKKwkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQllbHNlCisJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisJCQl9CisJCX0KKworCQlpZiAodGltaW5nTG9jayA9PSBGQUxTRSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9JMkNfREVNT0RfTU9ERSwgMHgxRik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcsIDB4MTIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzEsIDB4ODIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgMHhhMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDUwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NmEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4OTUpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4NzMpOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDw9IDIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAxMDAwOworCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMjAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gMTIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAzMDAwOworCQllbHNlCisJCQljdXJyaWVyX3N0ZXAgPSA1MDAwOworCisKKwkJbmJfc3RlcHMgPSAtMSArICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDApIC8gY3Vycmllcl9zdGVwKTsKKwkJbmJfc3RlcHMgLz0gMjsKKwkJbmJfc3RlcHMgPSAoMiAqIG5iX3N0ZXBzKSArIDE7CisKKwkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCW5iX3N0ZXBzID0gMTsKKwkJZWxzZSBpZiAobmJfc3RlcHMgPiAxMCkgeworCQkJbmJfc3RlcHMgPSAxMTsKKwkJCWN1cnJpZXJfc3RlcCA9IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMCkgLyAxMDsKKwkJfQorCisJCWN1cnJlbnRfc3RlcCA9IDA7CisJCWRpcmVjdGlvbiA9IDE7CisJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIyX2ZyZXE7CisKKwkJd2hpbGUgKCh0aW1pbmdMb2NrID09IEZBTFNFKSAmJiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDVGKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUsIDB4MCk7CisKKwkJCW1zbGVlcCg1MCk7CisJCQl0aW1pbmdjcHQgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UTUdMT0NLX1FVQUxJVFkpID49IDIpCisJCQkJCXRpbWluZ2NwdCsrOworCQkJCWFnYzJfaW50ZWdyICs9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTEpIDw8IDgpCisJCQkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkwKTsKKwkJCX0KKworCQkJYWdjMl9pbnRlZ3IgLz0gMjA7CisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCWlmICgodGltaW5nY3B0ID49IDEwKSAmJiAoYWdjMl9pbnRlZ3IgPCAweDFGMDApICYmIChjb2Fyc2Vfc3JhdGUgPCA1NTAwMDAwMCkgJiYgKGNvYXJzZV9zcmF0ZSA+IDg1MDAwMCkpCisJCQkJdGltaW5nTG9jayA9IFRSVUU7CisJCQllbHNlIHsKKwkJCQljdXJyZW50X3N0ZXArKzsKKwkJCQlkaXJlY3Rpb24gKj0gLTE7CisKKwkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQllbHNlCisJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMl9idyk7CisJCQl9CisJCX0KKworCQlpZiAodGltaW5nTG9jayA9PSBGQUxTRSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29hcnNlX3NyYXRlOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfc2VhcmNoX3NyYXRlX2ZpbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJdTMyIGNvYXJzZV9zcmF0ZSwKKwljb2Fyc2VfZnJlcSwKKwlzeW1iOworCisJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJY29hcnNlX2ZyZXEgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMSk7CisJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisKKwkJaWYgKHN5bWIgPCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRywgMHhkMik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDQ5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHhlZCk7CisKKwkJCWlmIChjb2Fyc2Vfc3JhdGUgPiAzMDAwMDAwKSB7CisJCQkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxMyk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IChjb2Fyc2Vfc3JhdGUgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9IGVsc2UgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IDEwICogKGNvYXJzZV9zcmF0ZSAvIDE0KTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSSU5JVDEsIChzeW1iID4+IDgpICYgMHhGRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQwLCAoc3ltYiAmIDB4RkYpKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIChjb2Fyc2VfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBjb2Fyc2VfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQljb2Fyc2VfZnJlcSA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIxKTsKKworCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCisJCWlmIChzeW1iIDwgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUpCisJCQljb2Fyc2Vfc3JhdGUgPSAwOworCQllbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcsIDB4ZDIpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0OSk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCisJCQlpZiAoY29hcnNlX3NyYXRlID4gMzAwMDAwMCkgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gMTAgKiAoY29hcnNlX3NyYXRlIC8gMTMpOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMSwgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSSU5JVDAsIChzeW1iICYgMHhGRikpOworCQkJfSBlbHNlIHsKKwkJCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxNCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gKGNvYXJzZV9zcmF0ZSAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAoY29hcnNlX2ZyZXEgPj4gOCkgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgY29hcnNlX2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiBjb2Fyc2Vfc3JhdGU7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9ibGluZF9zZWFyY2hfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwl1OCBrX3JlZl90bWcsIGtfcmVmX3RtZ19tYXgsIGtfcmVmX3RtZ19taW47CisJdTMyIGNvYXJzZV9zcmF0ZTsKKwlpbnQgbG9jayA9IEZBTFNFLCBjb2Fyc2VfZmFpbCA9IEZBTFNFOworCXMzMiBkZW1vZF90aW1lb3V0ID0gNTAwLCBmZWNfdGltZW91dCA9IDUwLCBrcmVmX3RtZ19yZWcsIGZhaWxfY3B0LCBpLCBhZ2MyX292ZXJmbG93OworCXUxNiBhZ2MyX2ludGVncjsKKwl1OCBkc3RhdHVzMjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkgeworCQlrX3JlZl90bWdfbWF4ID0gMjMzOworCQlrX3JlZl90bWdfbWluID0gMTQzOworCX0gZWxzZSB7CisJCWtfcmVmX3RtZ19tYXggPSAxMjA7CisJCWtfcmVmX3RtZ19taW4gPSAzMDsKKwl9CisKKwlhZ2MyX2ludGVnciA9IHN0djA5MDBfYmxpbmRfY2hlY2tfYWdjMl9taW5fbGV2ZWwoaV9wYXJhbXMsIGRlbW9kKTsKKworCWlmIChhZ2MyX2ludGVnciA+IFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEgpIHsKKwkJbG9jayA9IEZBTFNFOworCisJfSBlbHNlIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxFWFAsIDB4QUEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4NTUpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSQ0ZHLCAweEM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg0NCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRkZFQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKworCQkJa3JlZl90bWdfcmVnID0gUjA5MDBfUDFfS1JFRlRNRzsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxFWFAsIDB4QUEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4NTUpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSQ0ZHLCAweEM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg0NCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRkZFQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKworCQkJa3JlZl90bWdfcmVnID0gUjA5MDBfUDJfS1JFRlRNRzsKKwkJCWJyZWFrOworCQl9CisKKwkJa19yZWZfdG1nID0ga19yZWZfdG1nX21heDsKKworCQlkbyB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywga3JlZl90bWdfcmVnLCBrX3JlZl90bWcpOworCQkJaWYgKHN0djA5MDBfc2VhcmNoX3NyYXRlX2NvYXJzZShmZSkgIT0gMCkgeworCQkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfc2VhcmNoX3NyYXRlX2ZpbmUoZmUpOworCisJCQkJaWYgKGNvYXJzZV9zcmF0ZSAhPSAwKSB7CisJCQkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBjb2Fyc2Vfc3JhdGUsIFNUVjA5MDBfQkxJTkRfU0VBUkNIKTsKKwkJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0KTsKKwkJCQl9IGVsc2UKKwkJCQkJbG9jayA9IEZBTFNFOworCQkJfSBlbHNlIHsKKwkJCQlmYWlsX2NwdCA9IDA7CisJCQkJYWdjMl9vdmVyZmxvdyA9IDA7CisKKwkJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJZGVmYXVsdDoKKwkJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQkJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkKKwkJCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTApOworCisJCQkJCQlpZiAoYWdjMl9pbnRlZ3IgPj0gMHhmZjAwKQorCQkJCQkJCWFnYzJfb3ZlcmZsb3crKzsKKworCQkJCQkJZHN0YXR1czIgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9EU1RBVFVTMik7CisKKwkJCQkJCWlmICgoKGRzdGF0dXMyICYgMHgxKSA9PSAweDEpICYmICgoZHN0YXR1czIgPj4gNykgPT0gMSkpCisJCQkJCQkJZmFpbF9jcHQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQkJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMSkgPDwgOCkKKwkJCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTApOworCisJCQkJCQlpZiAoYWdjMl9pbnRlZ3IgPj0gMHhmZjAwKQorCQkJCQkJCWFnYzJfb3ZlcmZsb3crKzsKKworCQkJCQkJZHN0YXR1czIgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9EU1RBVFVTMik7CisKKwkJCQkJCWlmICgoKGRzdGF0dXMyICYgMHgxKSA9PSAweDEpICYmICgoZHN0YXR1czIgPj4gNykgPT0gMSkpCisJCQkJCQkJZmFpbF9jcHQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKGZhaWxfY3B0ID4gNykgfHwgKGFnYzJfb3ZlcmZsb3cgPiA3KSkKKwkJCQkJY29hcnNlX2ZhaWwgPSBUUlVFOworCisJCQkJbG9jayA9IEZBTFNFOworCQkJfQorCQkJa19yZWZfdG1nIC09IDMwOworCQl9IHdoaWxlICgoa19yZWZfdG1nID49IGtfcmVmX3RtZ19taW4pICYmIChsb2NrID09IEZBTFNFKSAmJiAoY29hcnNlX2ZhaWwgPT0gRkFMU0UpKTsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3Eoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiB2dGhfcmVnOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHZ0aF9yZWcsIFIwOTAwX1AxX1ZUSDEyLCBSMDkwMF9QMl9WVEgxMik7CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDk2KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDY0KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDM2KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDIzKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDFFKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDE5KTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfc2VhcmNoX3N0YW5kYXJkKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCWludCBzc3RuZHJkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzc3RuZHJkID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZDsKKwlpZiAoZGVtb2QgPT0gMSkKKwkJc3N0bmRyZCA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkOworCisJc3dpdGNoIChzc3RuZHJkKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFZCUzFcbiIpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFNTXG4iKTsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQlicmVhazsKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFZCUzJcbiIpOworCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJTZWFyY2ggU3RhbmRhcmQgPSBBVVRPXG4iKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDEsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUjJDRkcsIDB4MjIpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywKKwkJCQkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQsCisJCQkJCQlpX3BhcmFtcy0+ZG1kMV9mZWMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkKKwkJCQkJc3R2MDkwMF9zdG9wX2FsbF9zMl9tb2Rjb2QoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCisJCQl9IGVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQxLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkgeworCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKQorCQkJCQlzdHYwOTAwX3N0b3BfYWxsX3MyX21vZGNvZChpX3BhcmFtcywgZGVtb2QpOworCQkJCWVsc2UKKwkJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCX0gZWxzZQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlID49IDIwMDAwMDApCisJCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQsIGlfcGFyYW1zLT5kbWQxX2ZlYywgZGVtb2QpOworCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQyLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVIyQ0ZHLCAweDIyKTsKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCwgaV9wYXJhbXMtPmRtZDJfZmVjLCBkZW1vZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQyLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPj0gMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQsIGlfcGFyYW1zLT5kbWQyX2ZlYywgZGVtb2QpOworCisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCX0KK30KKworZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBkZW1vZF90aW1lb3V0ID0gNTAwLCBmZWNfdGltZW91dCA9IDUwLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkOworCisJaW50IGxvY2sgPSBGQUxTRSwgbG93X3NyID0gRkFMU0U7CisKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PQ0FSUklFUjsKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28gYWxnbzsKKwlpbnQgbm9fc2lnbmFsID0gRkFMU0U7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlhbGdvID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlNUX0hXQVJFLCAxKTsKKwkJc3RyZWFtX21lcmdlcl9maWVsZCA9IEYwOTAwX1AxX1JTVF9IV0FSRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVDKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsIDB4OWUpOworCQllbHNlCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDg4KTsKKworCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IDIgKiAzNjAwMDAwMDsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRzIsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRywgMHhkMik7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDIwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTE1BTlQsIDB4NjMpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxNQU5ULCAweDcwKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfS1JFRlRNRywgMHg1YSk7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMDsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0tSRUZUTUcsIDB4YzEpOworCQkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSAoMTUgKiAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMCkpIC8gMTA7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcyLCAweDAxKTsKKworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPj0gMTAwMDAwMDApCisJCQkJbG93X3NyID0gRkFMU0U7CisJCQllbHNlCisJCQkJbG93X3NyID0gVFJVRTsKKworCQl9CisKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGlfcGFyYW1zLT50dW5lcjFfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wsIGlfcGFyYW1zLT5kbWQxX3NyY2hfaXFfaW52KTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiwgMSk7CisKKwkJc3R2MDkwMF9zZXRfc2VhcmNoX3N0YW5kYXJkKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyAhPSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCXN0djA5MDBfc3RhcnRfc2VhcmNoKGlfcGFyYW1zLCBkZW1vZCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlhbGdvID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlNUX0hXQVJFLCAxKTsKKworCQlzdHJlYW1fbWVyZ2VyX2ZpZWxkID0gRjA5MDBfUDJfUlNUX0hXQVJFOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NUMpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg5ZSk7CisJCWVsc2UKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsIDB4ODgpOworCisJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gMiAqIDM2MDAwMDAwOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHMiwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMTUFOVCwgMHg3MCk7CisKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgMTAwMDAwMCwgZGVtb2QpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHLCAweGQyKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMTUFOVCwgMHg2Myk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPj0gMTAwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDYwKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfS1JFRlRNRywgMHg1YSk7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsCisJCQkJCQkJaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDApKSAvIDEwOworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCQkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsCisJCQkJCQkJaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9LUkVGVE1HLCAweGMxKTsKKwkJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gKDE1ICogKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwKKwkJCQkJCQkJCWlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDEpOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA+PSAxMDAwMDAwMCkKKwkJCQlsb3dfc3IgPSBGQUxTRTsKKwkJCWVsc2UKKwkJCQlsb3dfc3IgPSBUUlVFOworCisJCX0KKworCQlzdHYwOTAwX3NldF90dW5lcihmZSwgaV9wYXJhbXMtPnR1bmVyMl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCwgaV9wYXJhbXMtPmRtZDJfc3JjaF9pcV9pbnYpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGLCAxKTsKKworCQlzdHYwOTAwX3NldF9zZWFyY2hfc3RhbmRhcmQoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvICE9IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJc3R2MDkwMF9zdGFydF9zZWFyY2goaV9wYXJhbXMsIGRlbW9kKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTIpIHsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJbXNsZWVwKDMpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCX0KKworCWlmIChhbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQlsb2NrID0gc3R2MDkwMF9ibGluZF9zZWFyY2hfYWxnbyhmZSk7CisJZWxzZSBpZiAoYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpCisJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9jb2xkX2xvY2soZmUsIGRlbW9kX3RpbWVvdXQpOworCWVsc2UgaWYgKGFsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQpOworCisJaWYgKChsb2NrID09IEZBTFNFKSAmJiAoYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpKSB7CisJCWlmIChsb3dfc3IgPT0gRkFMU0UpIHsKKwkJCWlmIChzdHYwOTAwX2NoZWNrX3RpbWluZ19sb2NrKGlfcGFyYW1zLCBkZW1vZCkgPT0gVFJVRSkKKwkJCQlsb2NrID0gc3R2MDkwMF9zd19hbGdvKGlfcGFyYW1zLCBkZW1vZCk7CisJCX0KKwl9CisKKwlpZiAobG9jayA9PSBUUlVFKQorCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCisJaWYgKChsb2NrID09IFRSVUUpICYmIChzaWduYWxfdHlwZSA9PSBTVFYwOTAwX1JBTkdFT0spKSB7CisJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJCWlmICgoc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIFNUVjA5MDBfREVNT0RfMSkgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkgJiYgKHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBTVFYwOTAwX0RFTU9EXzIpID09IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQpKSB7CisJCQkJbXNsZWVwKDIwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJCW1zbGVlcCgzKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCQl9CisJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJCW1zbGVlcCgzKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQl9CisKKwkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGZlY190aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJbG9jayA9IFRSVUU7CisJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCWRlZmF1bHQ6CisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQkJCQlzdHYwOTAwX3NldF9kdmJzMl9yb2xsb2ZmKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9QREVMQ1RSTDIsIDB4NDApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUERFTENUUkwyLCAwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDY3KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NzUpOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GQkVSQ1BUNCwgMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwyLCAweGMxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQkJCQlzdHYwOTAwX3NldF9kdmJzMl9yb2xsb2ZmKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9QREVMQ1RSTDIsIDB4NjApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUERFTENUUkwyLCAweDIwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDY3KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NzUpOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GQkVSQ1BUNCwgMCk7CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDIsIDB4YzEpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJbG9jayA9IEZBTFNFOworCQkJc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PREFUQTsKKwkJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKChzaWduYWxfdHlwZSA9PSBTVFYwOTAwX05PREFUQSkgJiYgKG5vX3NpZ25hbCA9PSBGQUxTRSkpIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQkJaWYgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSAmJgorCQkJCQkJKGlfcGFyYW1zLT5kbWQxX3NyY2hfaXFfaW52IDw9IFNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QpKQorCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZHZiczFfYWNxX3dvcmthcm91bmQoZmUpOworCQkJfSBlbHNlCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQkJaWYgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSAmJgorCQkJCQkJKGlfcGFyYW1zLT5kbWQyX3NyY2hfaXFfaW52IDw9IFNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QpKQorCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZHZiczFfYWNxX3dvcmthcm91bmQoZmUpOworCQkJfSBlbHNlCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzaWduYWxfdHlwZTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlZmFjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBzdHY2MTEwLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjYxMTAgc2F0ZWxsaXRlIHR1bmVyIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgInN0djYxMTAuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RydWN0IHN0djYxMTBfcHJpdiB7CisJaW50IGkyY19hZGRyZXNzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCisJdTMyIG1jbGs7CisJdTggcmVnc1s4XTsKK307CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgczMyIGFic3N1YihzMzIgYSwgczMyIGIpCit7CisJaWYgKGEgPiBiKQorCQlyZXR1cm4gYSAtIGI7CisJZWxzZQorCQlyZXR1cm4gYiAtIGE7Cit9OworCitzdGF0aWMgaW50IHN0djYxMTBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfd3JpdGVfcmVncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggYnVmW10sCisJCQkJCQkJaW50IHN0YXJ0LCBpbnQgbGVuKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmM7CisJdTggY21kYnVmW2xlbiArIDFdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGNtZGJ1ZiwKKwkJLmxlbgk9IGxlbiArIDEKKwl9OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChzdGFydCArIGxlbiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZjbWRidWZbMV0sIGJ1ZiwgbGVuKTsKKwljbWRidWZbMF0gPSBzdGFydDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOworCWlmIChyYyAhPSAxKQorCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9yZWFkX3JlZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZ3NbXSwKKwkJCQkJCQlpbnQgc3RhcnQsIGludCBsZW4pCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByYzsKKwl1OCByZWdbXSA9IHsgc3RhcnQgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfd3IgPSB7CisJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSByZWcsCisJCS5sZW4JPSAxLAorCX07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfcmQgPSB7CisJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCS5mbGFncwk9IEkyQ19NX1JELAorCQkuYnVmCT0gcmVncywKKwkJLmxlbgk9IGxlbiwKKwl9OworCS8qIHdyaXRlIHN1YmFkZHIgKi8KKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnX3dyLCAxKTsKKwlpZiAocmMgIT0gMSkKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkvKiByZWFkIHJlZ2lzdGVycyAqLworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2dfcmQsIDEpOworCWlmIChyYyAhPSAxKQorCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJbWVtY3B5KCZwcml2LT5yZWdzW3N0YXJ0XSwgcmVncywgbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfcmVhZF9yZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBzdGFydCkKK3sKKwl1OCBidWZbXSA9IHsgMCB9OworCXN0djYxMTBfcmVhZF9yZWdzKGZlLCBidWYsIHN0YXJ0LCAxKTsKKworCXJldHVybiBidWZbMF07Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwl1OCByZWdbXSA9IHsgMCB9OworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgcmVnLCAwLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNhcnJpZXJfd2lkdGgodTMyIHN5bWJvbF9yYXRlLCBmZV9yb2xsb2ZmX3Qgcm9sbG9mZikKK3sKKwl1MzIgcmxmOworCisJc3dpdGNoIChyb2xsb2ZmKSB7CisJY2FzZSBST0xMT0ZGXzIwOgorCQlybGYgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBST0xMT0ZGXzI1OgorCQlybGYgPSAyNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmxmID0gMzU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1ib2xfcmF0ZSAgKyAoKHN5bWJvbF9yYXRlICogcmxmKSAvIDEwMCk7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCByOCwgcmV0ID0gMHgwNDsKKwlpbnQgaTsKKworCWlmICgoYmFuZHdpZHRoIC8gMikgPiAzNjAwMDAwMCkgLypCVy8yIG1heD0zMSs1PTM2IG1oeiBmb3Igcjg9MzEqLworCQlyOCA9IDMxOworCWVsc2UgaWYgKChiYW5kd2lkdGggLyAyKSA8IDUwMDAwMDApIC8qIEJXLzIgbWluPTVNaHogZm9yIEY9MCAqLworCQlyOCA9IDA7CisJZWxzZSAvKmlmIDUgPCBCVy8yIDwgMzYqLworCQlyOCA9IChiYW5kd2lkdGggLyAyKSAvIDEwMDAwMDAgLSA1OworCisJLyogY3RybDMsIFJDQ0xLT0ZGID0gMCBBY3RpdmF0ZSB0aGUgY2FsaWJyYXRpb24gQ2xvY2sgKi8KKwkvKiBjdHJsMywgQ0YgPSByOCBTZXQgdGhlIExQRiB2YWx1ZSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdICY9IH4oKDEgPDwgNikgfCAweDFmKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSB8PSAocjggJiAweDFmKTsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSwgUlNUVjYxMTBfQ1RSTDMsIDEpOworCS8qIHN0YXQxLCBDQUxSQ1NUUlQgPSAxIFN0YXJ0IExQRiBhdXRvIGNhbGlicmF0aW9uKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1NUQVQxXSB8PSAweDAyOworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfU1RBVDFdLCBSU1RWNjExMF9TVEFUMSwgMSk7CisKKwlpID0gMDsKKwkvKiBXYWl0IGZvciBDQUxSQ1NUUlQgPT0gMCAqLworCXdoaWxlICgoaSA8IDEwKSAmJiAocmV0ICE9IDApKSB7CisJCXJldCA9ICgoc3R2NjExMF9yZWFkX3JlZyhmZSwgUlNUVjYxMTBfU1RBVDEpKSAmIDB4MDIpOworCQltZGVsYXkoMSk7CS8qIHdhaXQgZm9yIExQRiBhdXRvIGNhbGlicmF0aW9uICovCisJCWkrKzsKKwl9CisKKwkvKiBSQ0NMS09GRiA9IDEgY2FsaWJyYXRpb24gZG9uZSwgZGVzYWN0aXZhdGUgdGhlIGNhbGlicmF0aW9uIENsb2NrICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10gfD0gKDEgPDwgNik7CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10sIFJTVFY2MTEwX0NUUkwzLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXU4IGJ1ZjBbXSA9IHsgMHgwNywgMHgxMSwgMHhkYywgMHg4NSwgMHgxNywgMHgwMSwgMHhlNiwgMHgxZSB9OworCisJbWVtY3B5KHByaXYtPnJlZ3MsIGJ1ZjAsIDgpOworCS8qIEsgPSAoUmVmZXJlbmNlIC8gMTAwMDAwMCkgLSAxNiAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdICY9IH4oMHgxZiA8PCAzKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSB8PQorCQkJCSgoKChwcml2LT5tY2xrIC8gMTAwMDAwMCkgLSAxNikgJiAweDFmKSA8PCAzKTsKKworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdLCBSU1RWNjExMF9DVFJMMSwgOCk7CisJbXNsZWVwKDEpOworCXN0djYxMTBfc2V0X2JhbmR3aWR0aChmZSwgNzIwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTMyIG5ic3RlcHMsIGRpdmlkZXIsIHBzZDIsIGZyZXE7CisJdTggcmVnc1tdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwlzdHY2MTEwX3JlYWRfcmVncyhmZSwgcmVncywgMCwgOCk7CisJLypOKi8KKwlkaXZpZGVyID0gKHByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJiAweDBmKSA8PCA4OworCWRpdmlkZXIgKz0gcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcxXTsKKworCS8qUiovCisJbmJzdGVwcyAgPSAocHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSA+PiA2KSAmIDM7CisJLypwKi8KKwlwc2QyICA9IChwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdID4+IDQpICYgMTsKKworCWZyZXEgPSBkaXZpZGVyICogKHByaXYtPm1jbGsgLyAxMDAwKTsKKwlmcmVxIC89ICgxIDw8IChuYnN0ZXBzICsgcHNkMikpOworCWZyZXEgLz0gNDsKKworCSpmcmVxdWVuY3kgPSBmcmVxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5KQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwl1OCByZXQgPSAweDA0OworCXUzMiBkaXZpZGVyLCByZWYsIHAsIHByZXNjLCBpLCByZXN1bHRfZnJlcSwgdmNvX2ZyZXE7CisJczMyIHBfY2FsYywgcF9jYWxjX29wdCA9IDEwMDAsIHJfZGl2LCByX2Rpdl9vcHQgPSAwLCBwX3ZhbDsKKwlzMzIgc3JhdGU7IHU4IGdhaW47CisKKwlkcHJpbnRrKCIlcywgZnJlcT0lZCBrSHosIG1jbGs9JWQgSHpcbiIsIF9fZnVuY19fLAorCQkJCQkJZnJlcXVlbmN5LCBwcml2LT5tY2xrKTsKKworCS8qIEsgPSAoUmVmZXJlbmNlIC8gMTAwMDAwMCkgLSAxNiAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdICY9IH4oMHgxZiA8PCAzKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSB8PQorCQkJCSgoKChwcml2LT5tY2xrIC8gMTAwMDAwMCkgLSAxNikgJiAweDFmKSA8PCAzKTsKKworCS8qIEJCX0dBSU4gPSBkYi8yICovCisJaWYgKGZlLT5vcHMuc2V0X3Byb3BlcnR5ICYmIGZlLT5vcHMuZ2V0X3Byb3BlcnR5KSB7CisJCXNyYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJCWRwcmludGsoIiVzOiBHZXQgRnJvbnRlbmQgcGFyYW1ldGVyczogc3JhdGU9JWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHNyYXRlKTsKKwl9IGVsc2UKKwkJc3JhdGUgPSAxNTAwMDAwMDsKKworCWlmIChzcmF0ZSA+PSAxNTAwMDAwMCkKKwkJZ2FpbiA9IDM7IC8qICs2IGRCICovCisJZWxzZSBpZiAoc3JhdGUgPj0gNTAwMDAwMCkKKwkJZ2FpbiA9IDM7IC8qICs2IGRCICovCisJZWxzZQorCQlnYWluID0gMzsgLyogKzYgZEIgKi8KKworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdICY9IH4weDBmOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdIHw9IChnYWluICYgMHgwZik7CisKKwlpZiAoZnJlcXVlbmN5IDw9IDEwMjMwMDApIHsKKwkJcCA9IDE7CisJCXByZXNjID0gMDsKKwl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA8PSAxMzAwMDAwKSB7CisJCXAgPSAxOworCQlwcmVzYyA9IDE7CisJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMjA0NjAwMCkgeworCQlwID0gMDsKKwkJcHJlc2MgPSAwOworCX0gZWxzZSB7CisJCXAgPSAwOworCQlwcmVzYyA9IDE7CisJfQorCS8qIERJVjRTRUwgPSBwKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4oMSA8PCA0KTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9IChwIDw8IDQpOworCisJLyogUFJFU0MzMk9OID0gcHJlc2MgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4oMSA8PCA1KTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9IChwcmVzYyA8PCA1KTsKKworCXBfdmFsID0gKGludCkoMSA8PCAocCArIDEpKSAqIDEwOy8qIFAgPSAyIG9yIFAgPSA0ICovCisJZm9yIChyX2RpdiA9IDA7IHJfZGl2IDw9IDM7IHJfZGl2KyspIHsKKwkJcF9jYWxjID0gKHByaXYtPm1jbGsgLyAxMDAwMDApOworCQlwX2NhbGMgLz0gKDEgPDwgKHJfZGl2ICsgMSkpOworCQlpZiAoKGFic3N1YihwX2NhbGMsIHBfdmFsKSkgPCAoYWJzc3ViKHBfY2FsY19vcHQsIHBfdmFsKSkpCisJCQlyX2Rpdl9vcHQgPSByX2RpdjsKKworCQlwX2NhbGNfb3B0ID0gKHByaXYtPm1jbGsgLyAxMDAwMDApOworCQlwX2NhbGNfb3B0IC89ICgxIDw8IChyX2Rpdl9vcHQgKyAxKSk7CisJfQorCisJcmVmID0gcHJpdi0+bWNsayAvICgoMSA8PCAocl9kaXZfb3B0ICsgMSkpICAqICgxIDw8IChwICsgMSkpKTsKKwlkaXZpZGVyID0gKCgoZnJlcXVlbmN5ICogMTAwMCkgKyAocmVmID4+IDEpKSAvIHJlZik7CisKKwkvKiBSRElWID0gcl9kaXZfb3B0ICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmPSB+KDMgPDwgNik7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAoKChyX2Rpdl9vcHQpICYgMykgPDwgNik7CisKKwkvKiBORElWX01TQiA9IE1TQihkaXZpZGVyKSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJj0gfjB4MGY7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAoKChkaXZpZGVyKSA+PiA4KSAmIDB4MGYpOworCisJLyogTkRJVl9MU0IsIExTQihkaXZpZGVyKSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMV0gPSAoZGl2aWRlciAmIDB4ZmYpOworCisJLyogQ0FMVkNPU1RSVCA9IDEgVkNPIEF1dG8gQ2FsaWJyYXRpb24gKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1NUQVQxXSB8PSAweDA0OworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdLAorCQkJCQkJUlNUVjYxMTBfQ1RSTDEsIDgpOworCisJaSA9IDA7CisJLyogV2FpdCBmb3IgQ0FMVkNPU1RSVCA9PSAwICovCisJd2hpbGUgKChpIDwgMTApICYmIChyZXQgIT0gMCkpIHsKKwkJcmV0ID0gKChzdHY2MTEwX3JlYWRfcmVnKGZlLCBSU1RWNjExMF9TVEFUMSkpICYgMHgwNCk7CisJCW1zbGVlcCgxKTsgLyogd2FpdCBmb3IgVkNPIGF1dG8gY2FsaWJyYXRpb24gKi8KKwkJaSsrOworCX0KKworCXJldCA9IHN0djYxMTBfcmVhZF9yZWcoZmUsIFJTVFY2MTEwX1NUQVQxKTsKKwlzdHY2MTEwX2dldF9mcmVxdWVuY3koZmUsICZyZXN1bHRfZnJlcSk7CisKKwl2Y29fZnJlcSA9IGRpdmlkZXIgKiAoKHByaXYtPm1jbGsgLyAxMDAwKSAvICgoMSA8PCAocl9kaXZfb3B0ICsgMSkpKSk7CisJZHByaW50aygiJXMsIHN0YXQxPSV4LCBsb19mcmVxPSVkIGtIeiwgdmNvX2ZyZWM9JWQga0h6XG4iLCBfX2Z1bmNfXywKKwkJCQkJCXJldCwgcmVzdWx0X2ZyZXEsIHZjb19mcmVxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXUzMiBiYW5kd2lkdGggPSBjYXJyaWVyX3dpZHRoKGMtPnN5bWJvbF9yYXRlLCBjLT5yb2xsb2ZmKTsKKworCXN0djYxMTBfc2V0X2ZyZXF1ZW5jeShmZSwgYy0+ZnJlcXVlbmN5KTsKKwlzdHY2MTEwX3NldF9iYW5kd2lkdGgoZmUsIGJhbmR3aWR0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX2dldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCByOCA9IDA7CisJdTggcmVnc1tdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisJc3R2NjExMF9yZWFkX3JlZ3MoZmUsIHJlZ3MsIDAsIDgpOworCisJLyogQ0YgKi8KKwlyOCA9IHByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdICYgMHgxZjsKKwkqYmFuZHdpZHRoID0gKHI4ICsgNSkgKiAyMDAwMDAwOy8qIHgyIGZvciBaSUYgdHVuZXIgQlcvMiA9IEYrNSBNaHogKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgc3R2NjExMF90dW5lcl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIlNUIFNUVjYxMTAiLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXAgPSAxMDAwLAorCX0sCisJLmluaXQgPSBzdHY2MTEwX2luaXQsCisJLnJlbGVhc2UgPSBzdHY2MTEwX3JlbGVhc2UsCisJLnNsZWVwID0gc3R2NjExMF9zbGVlcCwKKwkuc2V0X3BhcmFtcyA9IHN0djYxMTBfc2V0X3BhcmFtcywKKwkuZ2V0X2ZyZXF1ZW5jeSA9IHN0djYxMTBfZ2V0X2ZyZXF1ZW5jeSwKKwkuc2V0X2ZyZXF1ZW5jeSA9IHN0djYxMTBfc2V0X2ZyZXF1ZW5jeSwKKwkuZ2V0X2JhbmR3aWR0aCA9IHN0djYxMTBfZ2V0X2JhbmR3aWR0aCwKKwkuc2V0X2JhbmR3aWR0aCA9IHN0djYxMTBfc2V0X2JhbmR3aWR0aCwKKworfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2NjExMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWNvbnN0IHN0cnVjdCBzdHY2MTEwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCByZWcwW10gPSB7IDB4MDAsIDB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWUgfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7CisJCQkuYWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IHJlZzAsCisJCQkubGVuID0gOQorCQl9CisJfTsKKwlpbnQgcmV0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMsIG1zZywgMSk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2NjExMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5pMmNfYWRkcmVzcyA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CisJcHJpdi0+aTJjID0gaTJjOworCXByaXYtPm1jbGsgPSBjb25maWctPm1jbGs7CisKKwltZW1jcHkoJnByaXYtPnJlZ3MsICZyZWcwWzFdLCA4KTsKKworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZzdHY2MTEwX3R1bmVyX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1RWNjExMCBhdHRhY2hlZCBvbiBhZGRyPSV4IVxuIiwgcHJpdi0+aTJjX2FkZHJlc3MpOworCisJcmV0dXJuIGZlOworfQorRVhQT1JUX1NZTUJPTChzdHY2MTEwX2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVCBTVFY2MTEwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDMxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBzdHY2MTEwLmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjYxMTAgc2F0ZWxsaXRlIHR1bmVyIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0RWQl9TVFY2MTEwX0hfXworI2RlZmluZSBfX0RWQl9TVFY2MTEwX0hfXworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKy8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBSU1RWNjExMF9DVFJMMQkJMAorI2RlZmluZSBSU1RWNjExMF9DVFJMMgkJMQorI2RlZmluZSBSU1RWNjExMF9UVU5JTkcxCTIKKyNkZWZpbmUgUlNUVjYxMTBfVFVOSU5HMgkzCisjZGVmaW5lIFJTVFY2MTEwX0NUUkwzCQk0CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQxCQk1CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQyCQk2CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQzCQk3CisKK3N0cnVjdCBzdHY2MTEwX2NvbmZpZyB7CisJdTggaTJjX2FkZHJlc3M7CisJdTMyIG1jbGs7CisJaW50IGlxX3dpcmluZzsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWNjExMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFY2MTEwX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHY2MTEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJY29uc3Qgc3RydWN0IHN0djYxMTBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djYxMTBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCmluZGV4IDE0NjVmZjcuLjQ5ODFjZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJaWYgKHJldCAhPSAyKSB7CiAJCWRwcmludGsoIiVzOiBlcnJvciByZWc9MHgleCwgcmV0PSVpXG4iLCBfX2Z1bmNfXywgcmVnLAogCQkJcmV0KTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkcHJpbnRrKCIlczogc3VjY2VzcyByZWc9MHgleCwgZGF0YT0weCV4LCByZXQ9JWlcbiIsIF9fZnVuY19fLApAQCAtNDgxLDE2ICs0ODEsMTggQEAKIHN0YXRpYyBpbnQgdGRhMTAwNDZfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWludCByZXQ7CisJaW50IHJldCwgY29uZmM0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAKIAkvKiByZXNldCArIHdha2UgdXAgY2hpcCAqLwogCWlmIChzdGF0ZS0+Y29uZmlnLT54dGFsX2ZyZXEgPT0gVERBMTAwNDZfWFRBTF80TSkgewotCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAwKTsKKwkJY29uZmM0ID0gMDsKIAl9IGVsc2UgewogCQlkcHJpbnRrKCIlczogMTZNSHogWHRhbCwgcmVkdWNpbmcgSTJDIHNwZWVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDB4ODApOworCQljb25mYzQgPSAweDgwOwogCX0KKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCBjb25mYzQpOworCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUxLCAxLCAwKTsKIAkvKiBzZXQgR1BJTyAxIGFuZCAzICovCiAJaWYgKHN0YXRlLT5jb25maWctPmdwaW9fY29uZmlnICE9IFREQTEwMDQ2X0dQVFJJKSB7CkBAIC01MDgsMTMgKzUxMCwyOSBAQAogCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUpID09IDApCiAJCXJldHVybiAwOwogCisJLyoKKwkgICBGb3IgaTJjIG5vcm1hbCB3b3JrLCB3ZSBuZWVkIHRvIHNsb3cgZG93biB0aGUgYnVzIHNwZWVkLgorCSAgIEhvd2V2ZXIsIHRoZSBzbG93IGRvd24gYnJlYWtzIHRoZSBlZXByb20gZmlybXdhcmUgbG9hZC4KKwkgICBTbywgdXNlIG5vcm1hbCBzcGVlZCBmb3IgZWVwcm9tIGJvb3RpbmcgYW5kIHRoZW4gcmVzdG9yZSB0aGUKKwkgICBpMmMgc3BlZWQgYWZ0ZXIgdGhhdC4gVGVzdGVkIHdpdGggTVNJIFRWIEBueXdhcmUgQS9EIGJvYXJkLAorCSAgIHRoYXQgY29tZXMgd2l0aCBmaXJtd2FyZSB2ZXJzaW9uIDI5IGluc2lkZSB0aGVpciBlZXByb20uCisKKwkgICBJdCBzaG91bGQgYWxzbyBiZSBub3RpY2VkIHRoYXQgbm8gb3RoZXIgSTJDIHRyYW5zZmVyIHNob3VsZAorCSAgIGJlIGluIGNvdXJzZSB3aGlsZSBib290aW5nIGZyb20gZWVwcm9tLCBvdGhlcndpc2UsIHRkYTEwMDQ2CisJICAgZ29lcyBpbnRvIGFuIGluc3RhYmxlIHN0YXRlLiBTbywgcHJvcGVyIGxvY2tpbmcgYXJlIG5lZWRlZAorCSAgIGF0IHRoZSBpMmMgYnVzIG1hc3Rlci4KKwkgKi8KIAlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogdHJ5aW5nIHRvIGJvb3QgZnJvbSBlZXByb21cbiIpOwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgNCwgNCk7CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgNCk7CiAJbXNsZWVwKDMwMCk7Ci0JLyogZG9uJ3QgcmUtdXBsb2FkIHVubGVzcyBuZWNlc3NhcnkgKi8KKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCBjb25mYzQpOworCisJLyogQ2hlY2tzIGlmIGVlcHJvbSBmaXJtd2FyZSB3ZW50IHdpdGhvdXQgdHJvdWJsZXMgKi8KIAlpZiAodGRhMTAwNHhfY2hlY2tfdXBsb2FkX29rKHN0YXRlKSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCS8qIGVlcHJvbSBmaXJtd2FyZSBkaWRuJ3Qgd29yay4gTG9hZCBvbmUgbWFudWFsbHkuICovCisKIAlpZiAoc3RhdGUtPmNvbmZpZy0+cmVxdWVzdF9maXJtd2FyZSAhPSBOVUxMKSB7CiAJCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgc29tZW9uZSB1cGxvYWRzIGl0ICovCiAJCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYTBiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKQEAgLTAsMCArMSw1MTkgQEAKKy8qKgorICogRHJpdmVyIGZvciBaYXJsaW5rIHpsMTAwMzYgRFZCLVMgc2lsaWNvbiB0dW5lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaW5vIFJlaWNoYXJkdAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWF0dGhpYXMgU2Nod2Fyem90dCA8enphbUBnZW50b28uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKgorICogVGhlIGRhdGEgc2hlZXQgZm9yIHRoaXMgdHVuZXIgY2FuIGJlIGZvdW5kIGF0OgorICogICAgaHR0cDovL3d3dy5tY21pbGsuZGUvcHJvamVjdHMvZHZiLWNhcmQvZGF0YXNoZWV0cy9aTDEwMDM2LnBkZgorICoKKyAqIFRoaXMgb25lIGlzIHdvcmtpbmc6IChhdCBteSBBdmVybWVkaWEgRFZCLVMgUHJvKQorICogLSB6bDEwMDM2ICg0MHBpbiwgRlRBKQorICoKKyAqIEEgZHJpdmVyIGZvciB6bDEwMDM4IHNob3VsZCBiZSB2ZXJ5IHNpbWlsYXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAiemwxMDAzNi5oIgorCitzdGF0aWMgaW50IHpsMTAwMzZfZGVidWc7CisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGFyZ3MuLi4pIFwKKwlkbyB7IGlmICh6bDEwMDM2X2RlYnVnICYgbGV2ZWwpIHByaW50ayhLRVJOX0RFQlVHICJ6bDEwMDM2OiAiIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgZHByaW50aygweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDIsIGFyZ3MpCisKK3N0cnVjdCB6bDEwMDM2X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3QgemwxMDAzNl9jb25maWcgKmNvbmZpZzsKKwl1MzIgZnJlcXVlbmN5OworCXU4IGJyLCBiZjsKK307CisKKworLyogVGhpcyBkcml2ZXIgYXNzdW1lcyB0aGUgdHVuZXIgaXMgZHJpdmVuIGJ5IGEgMTAuMTExTUh6IENyaXN0YWwgKi8KKyNkZWZpbmUgX1hUQUwgMTAxMTEKKworLyogU29tZSBvZiB0aGUgcG9zc2libGUgZGl2aWRlcnM6CisgKiAgIDY0LCAod3JpdGUgMHgwNSB0byByZWcpLCBmcmVxIHN0ZXAgc2l6ZSAgIDE1OGtIegorICogICAxMCwgKHdyaXRlIDB4MGEgdG8gcmVnKSwgZnJlcSBzdGVwIHNpemUgMS4wMTFrSHogKHVzZWQgaGVyZSkKKyAqICAgIDUsICh3cml0ZSAweDA5IHRvIHJlZyksIGZyZXEgc3RlcCBzaXplIDIuMDIya0h6CisgKi8KKworI2RlZmluZSBfUkRJViAxMAorI2RlZmluZSBfUkRJVl9SRUcgMHgwYQorI2RlZmluZSBfRlIgICAoX1hUQUwvX1JESVYpCisKKyNkZWZpbmUgU1RBVFVTX1BPUiAweDgwIC8qIFBvd2VyIG9uIFJlc2V0ICovCisjZGVmaW5lIFNUQVRVU19GTCAgMHg0MCAvKiBGcmVxdWVuY3kgJiBQaGFzZSBMb2NrICovCisKKy8qIHJlYWQvd3JpdGUgZm9yIHpsMTAwMzYgYW5kIHpsMTAwMzggKi8KKworc3RhdGljIGludCB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUpCit7CisJdTggc3RhdHVzOworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkgIC5idWYgPSAmc3RhdHVzLCAubGVuID0gc2l6ZW9mKHN0YXR1cykgfSwKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDEpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHJlYWQgZmFpbGVkIGF0IGFkZHI9JTAyeFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0ZS0+Y29uZmlnLT50dW5lcl9hZGRyZXNzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGViX2kyYygiUihzdGF0dXMpOiAlMDJ4ICBbRkw9JWRdXG4iLCBzdGF0dXMsCisJCShzdGF0dXMgJiBTVEFUVVNfRkwpID8gMSA6IDApOworCWlmIChzdGF0dXMgJiBTVEFUVVNfUE9SKQorCQlkZWJfaW5mbygiJXM6IFBvd2VyLU9uLVJlc2V0IGJpdCBlbmFibGVkIC0gIgorCQkJIm5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHVuZXJcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl93cml0ZShzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsIHU4IGJ1ZltdLCB1OCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMV0gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkgIC5idWYgPSBidWYsIC5sZW4gPSBjb3VudCB9LAorCX07CisJdTggcmVnID0gMDsKKwlpbnQgcmV0OworCisJaWYgKHpsMTAwMzZfZGVidWcgJiAweDAyKSB7CisJCS8qIGV2ZXJ5IDhiaXQtdmFsdWUgc2F0aXNpZmVzIHRoaXMhCisJCSAqIHNvIG9ubHkgY2hlY2sgZm9yIGRlYnVnIGxvZyAqLworCQlpZiAoKGJ1ZlswXSAmIDB4ODApID09IDB4MDApCisJCQlyZWcgPSAyOworCQllbHNlIGlmICgoYnVmWzBdICYgMHhjMCkgPT0gMHg4MCkKKwkJCXJlZyA9IDQ7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGYwKSA9PSAweGMwKQorCQkJcmVnID0gNjsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjApID09IDB4ZDApCisJCQlyZWcgPSA4OworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhlMCkKKwkJCXJlZyA9IDEwOworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhmMCkKKwkJCXJlZyA9IDEyOworCisJCWRlYl9pMmMoIlcoJWQpOiIsIHJlZyk7CisJCXsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBidWZbaV0pOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJfQorCX0KKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IsIHJldD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlrZnJlZShzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXU4IGJ1ZltdID0geyAweGYwLCAweDgwIH07IC8qIHJlZ3MgMTIvMTMgKi8KKwlpbnQgcmV0OworCisJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwxMDAzNi9aTDEwMDM4CisgKgorICogcmVnW2RlZmF1bHRdIGNvbnRlbnQKKyAqICAyWzB4MDBdOiAgIDAgfCBOMTQgfCBOMTMgfCBOMTIgfCBOMTEgfCBOMTAgfCAgTjkgfCAgTjgKKyAqICAzWzB4MDBdOiAgTjcgfCAgTjYgfCAgTjUgfCAgTjQgfCAgTjMgfCAgTjIgfCAgTjEgfCAgTjAKKyAqICA0WzB4ODBdOiAgIDEgfCAgIDAgfCBSRkcgfCBCQTEgfCBCQTAgfCBCRzEgfCBCRzAgfCBMRU4KKyAqICA1WzB4MDBdOiAgUDAgfCAgQzEgfCAgQzAgfCAgUjQgfCAgUjMgfCAgUjIgfCAgUjEgfCAgUjAKKyAqICA2WzB4YzBdOiAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCBSU0QgfCAgIDAgfCAgIDAgfCAgIDAKKyAqICA3WzB4MjBdOiAgUDEgfCBCRjYgfCBCRjUgfCBCRjQgfCBCRjMgfCBCRjIgfCBCRjEgfCAgIDAKKyAqICA4WzB4ZGJdOiAgIDEgfCAgIDEgfCAgIDAgfCAgIDEgfCAgIDAgfCAgQ0MgfCAgIDEgfCAgIDEKKyAqICA5WzB4MzBdOiBWU0QgfCAgVjIgfCAgVjEgfCAgVjAgfCAgUzMgfCAgUzIgfCAgUzEgfCAgUzAKKyAqIDEwWzB4ZTFdOiAgIDEgfCAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCBMUzIgfCBMUzEgfCBMUzAKKyAqIDExWzB4ZjVdOiAgV1MgfCBXSDIgfCBXSDEgfCBXSDAgfCBXTDIgfCBXTDEgfCBXTDAgfCBXUkUKKyAqIDEyWzB4ZjBdOiAgIDEgfCAgIDEgfCAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCAgIDAgfCAgIDAKKyAqIDEzWzB4MjhdOiAgUEQgfCBCUjQgfCBCUjMgfCBCUjIgfCBCUjEgfCBCUjAgfCBDTFIgfCAgVEwKKyAqLworCitzdGF0aWMgaW50IHpsMTAwMzZfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxdWVuY3kpCit7CisJdTggYnVmWzJdOworCXUzMiBkaXYsIGZvZmZzZXQ7CisKKwlkaXYgPSAoZnJlcXVlbmN5ICsgX0ZSLzIpIC8gX0ZSOworCXN0YXRlLT5mcmVxdWVuY3kgPSBkaXYgKiBfRlI7CisKKwlmb2Zmc2V0ID0gZnJlcXVlbmN5IC0gc3RhdGUtPmZyZXF1ZW5jeTsKKworCWJ1ZlswXSA9IChkaXYgPj4gOCkgJiAweDdmOworCWJ1ZlsxXSA9IChkaXYgPj4gMCkgJiAweGZmOworCisJZGViX2luZm8oIiVzOiBmdG9kbz0ldSBmcHJpdj0ldSBmZXJyPSVkIGRpdj0ldVxuIiwgX19mdW5jX18sCisJCWZyZXF1ZW5jeSwgc3RhdGUtPmZyZXF1ZW5jeSwgZm9mZnNldCwgZGl2KTsKKworCXJldHVybiB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NldF9iYW5kd2lkdGgoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLCB1MzIgZmJ3KQoreworCS8qIGZidyBpcyBtZWFzdXJlZCBpbiBrSHogKi8KKwl1OCBiciwgYmY7CisJaW50IHJldDsKKwl1OCBidWZfYmZbXSA9IHsKKwkJMHhjMCwgMHgwMCwgLyogICA2Lzc6IHJzZD0wIGJmPTAgKi8KKwl9OworCXU4IGJ1Zl9icltdID0geworCQkweGYwLCAweDAwLCAvKiAxMi8xMzogYnI9MHhhIGNscj0wIHRsPTAqLworCX07CisJdTggemwxMDAzNl9yc2Rfb2ZmW10gPSB7IDB4YzggfTsgLyogc2V0IFJTRD0xICovCisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMgKi8KKwlpZiAoZmJ3ID4gMzUwMDApCisJCWZidyA9IDM1MDAwOworCWlmIChmYncgPCAgODAwMCkKKwkJZmJ3ID0gIDgwMDA7CisKKyNkZWZpbmUgX0JSX01BWElNVU0gKF9YVEFMLzU3NSkgLyogX1hUQUwgLyA1NzVrSHogPSAxNyAqLworCisJLyogPD0gMjgsODIgTUh6ICovCisJaWYgKGZidyA8PSAyODgyMCkgeworCQliciA9IF9CUl9NQVhJTVVNOworCX0gZWxzZSB7CisJCS8qKgorCQkgKiAgZihidyk9MzQsNk1IeiBmKHh0YWwpPTEwLjExMU1IegorCQkgKiAgYnIgPSAoMTAxMTEvMzQ2MDApICogNjMgKiAxL0sgPSAxNDsKKwkJICovCisJCWJyID0gKChfWFRBTCAqIDIxICogMTAwMCkgLyAoZmJ3ICogNDE5KSk7CisJfQorCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzICovCisJaWYgKGJyIDwgNCkKKwkJYnIgPSA0OworCWlmIChiciA+IF9CUl9NQVhJTVVNKQorCQliciA9IF9CUl9NQVhJTVVNOworCisJLyoKKwkgKiBrID0gMS4yNTcKKwkgKiBiZiA9IGZidy9fWFRBTCAqIGJyICogayAtIDEgKi8KKworCWJmID0gKGZidyAqIGJyICogMTI1NykgLyAoX1hUQUwgKiAxMDAwKSAtIDE7CisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMgKi8KKwlpZiAoYmYgPiA2MikKKwkJYmYgPSA2MjsKKworCWJ1Zl9iZlsxXSA9IChiZiA8PCAxKSAmIDB4N2U7CisJYnVmX2JyWzFdID0gKGJyIDw8IDIpICYgMHg3YzsKKwlkZWJfaW5mbygiJXM6IEJXPSVkIGJyPSV1IGJmPSV1XG4iLCBfX2Z1bmNfXywgZmJ3LCBiciwgYmYpOworCisJaWYgKGJyICE9IHN0YXRlLT5icikgeworCQlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWZfYnIsIHNpemVvZihidWZfYnIpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChiZiAhPSBzdGF0ZS0+YmYpIHsKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmX2JmLCBzaXplb2YoYnVmX2JmKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiB0aW1lID0gYnIvKDMyKiBmeHRhbCkgKi8KKwkJLyogbWluaW1hbCBzbGVlcCB0aW1lIHRvIGJlIGNhbGN1bGF0ZWQKKwkJICogbWF4aW11bSBiciBpcyA2MyAtPiBtYXggdGltZSA9IDIgLzEwIE1IeiA9IDJlLTcgKi8KKwkJbXNsZWVwKDEpOworCisJCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIHpsMTAwMzZfcnNkX29mZiwKKwkJCXNpemVvZih6bDEwMDM2X3JzZF9vZmYpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXN0YXRlLT5iciA9IGJyOworCXN0YXRlLT5iZiA9IGJmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfZ2Fpbl9wYXJhbXMoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLAorCWludCBjKQoreworCXU4IGJ1ZlsyXTsKKwl1OCByZmcsIGJhLCBiZzsKKworCS8qIGRlZmF1bHQgdmFsdWVzICovCisJcmZnID0gMDsgLyogZW5hYmxlIHdoZW4gdXNpbmcgYW4gbG5hICovCisJYmEgPSAxOworCWJnID0gMTsKKworCS8qIHJlZyA0ICovCisJYnVmWzBdID0gMHg4MCB8ICgocmZnIDw8IDUpICYgMHgyMCkKKwkJfCAoKGJhICA8PCAzKSAmIDB4MTgpIHwgKChiZyAgPDwgMSkgJiAweDA2KTsKKworCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCisJCWJ1ZlswXSB8PSAweDAxOworCisJLyogUDA9MCAqLworCWJ1ZlsxXSA9IF9SRElWX1JFRyB8ICgoYyA8PCA1KSAmIDB4NjApOworCisJZGViX2luZm8oIiVzOiBjPSV1IHJmZz0ldSBiYT0ldSBiZz0ldVxuIiwgX19mdW5jX18sIGMsIHJmZywgYmEsIGJnKTsKKwlyZXR1cm4gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisJdTMyIGZidzsKKwlpbnQgaTsKKwl1OCBjOworCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzCisJICogbWF5YmUgcmVkdW5kYW50IGFzIGNvcmUgYWxyZWFkeSBjaGVja3MgdGhpcyAqLworCWlmICgoZnJlcXVlbmN5IDwgZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9taW4pCisJfHwgIChmcmVxdWVuY3kgPiBmZS0+b3BzLmluZm8uZnJlcXVlbmN5X21heCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoqCisJICogYWxwaGEgPSAxLjM1IGZvciBkdmItcworCSAqIGZCVyA9IChhbHBoYSpzeW1ib2xyYXRlKS8oMiowLjgpCisJICogMS4zNSAvICgyKjAuOCkgPSAyNyAvIDMyCisJICovCisJZmJ3ID0gKDI3ICogcGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUpIC8gMzI7CisKKwkvKiBzY2FsZSB0byBrSHogKi8KKwlmYncgLz0gMTAwMDsKKworCS8qIEFkZCBzYWZlIG1hcmdpbiBvZiAzTUh6ICovCisJZmJ3ICs9IDMwMDA7CisKKwkvKiBzZXR0aW5nIHRoZSBjaGFyZ2UgcHVtcCAtIGd1ZXNzZWQgdmFsdWVzICovCisJaWYgKGZyZXF1ZW5jeSA8IDk1MDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMTI1MDAwMCkKKwkJYyA9IDA7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMTc1MDAwMCkKKwkJYyA9IDE7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMjE3NTAwMCkKKwkJYyA9IDI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IHpsMTAwMzZfc2V0X2dhaW5fcGFyYW1zKHN0YXRlLCBjKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHpsMTAwMzZfc2V0X2ZyZXF1ZW5jeShzdGF0ZSwgcGFyYW1zLT5mcmVxdWVuY3kpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gemwxMDAzNl9zZXRfYmFuZHdpZHRoKHN0YXRlLCBmYncpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogd2FpdCBmb3IgdHVuZXIgbG9jayAtIG5vIGlkZWEgaWYgdGhpcyBpcyByZWFsbHkgbmVlZGVkICovCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJcmV0ID0gemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogY2hlY2sgRnJlcXVlbmN5ICYgUGhhc2UgTG9jayBCaXQgKi8KKwkJaWYgKHJldCAmIFNUQVRVU19GTCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJfQorCitlcnJvcjoKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJKmZyZXF1ZW5jeSA9IHN0YXRlLT5mcmVxdWVuY3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2luaXRfcmVncyhzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCS8qIGNvdWxkIGFsc28gYmUgb25lIGJsb2NrIGZyb20gcmVnIDIgdG8gMTMgYW5kIGFkZGl0aW9uYWwgMTAvMTEgKi8KKwl1OCB6bDEwMDM2X2luaXRfdGFiW11bMl0gPSB7CisJCXsgMHgwNCwgMHgwMCB9LAkJLyogICAyLzM6IGRpdj0weDQwMCAtIGFyYml0cmFyeSB2YWx1ZSAqLworCQl7IDB4OGIsIF9SRElWX1JFRyB9LAkvKiAgIDQvNTogcmZnPTAgYmE9MSBiZz0xIGxlbj0/ICovCisJCQkJCS8qICAgICAgICBwMD0wIGM9MCByPV9SRElWX1JFRyAqLworCQl7IDB4YzAsIDB4MjAgfSwJCS8qICAgNi83OiByc2Q9MCBiZj0weDEwICovCisJCXsgMHhkMywgMHg0MCB9LAkJLyogICA4Lzk6IGZyb20gZGF0YXNoZWV0ICovCisJCXsgMHhlMywgMHg1YiB9LAkJLyogMTAvMTE6IGxvY2sgd2luZG93IGxldmVsICovCisJCXsgMHhmMCwgMHgyOCB9LAkJLyogMTIvMTM6IGJyPTB4YSBjbHI9MCB0bD0wKi8KKwkJeyAweGUzLCAweGY5IH0sCQkvKiAxMC8xMTogdW5sb2NrIHdpbmRvdyBsZXZlbCAqLworCX07CisKKwkvKiBpbnZhbGlkIHZhbHVlcyB0byB0cmlnZ2VyIHdyaXRpbmcgKi8KKwlzdGF0ZS0+YnIgPSAweGZmOworCXN0YXRlLT5iZiA9IDB4ZmY7CisKKwlpZiAoIXN0YXRlLT5jb25maWctPnJmX2xvb3BfZW5hYmxlKQorCQl6bDEwMDM2X2luaXRfdGFiWzFdWzJdIHw9IDB4MDE7CisKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHpsMTAwMzZfaW5pdF90YWIpOyBpKyspIHsKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgemwxMDAzNl9pbml0X3RhYltpXSwgMik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBPbmx5IGluaXQgaWYgUG93ZXItb24tUmVzZXQgYml0IGlzIHNldD8gKi8KKwlyZXQgPSB6bDEwMDM2X2luaXRfcmVncyhzdGF0ZSk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHpsMTAwMzZfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJaYXJsaW5rIFpMMTAwMzYiLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTc1MDAwCisJfSwKKwkuaW5pdCA9IHpsMTAwMzZfaW5pdCwKKwkucmVsZWFzZSA9IHpsMTAwMzZfcmVsZWFzZSwKKwkuc2xlZXAgPSB6bDEwMDM2X3NsZWVwLAorCS5zZXRfcGFyYW1zID0gemwxMDAzNl9zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gemwxMDAzNl9nZXRfZnJlcXVlbmN5LAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqemwxMDAzNl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoTlVMTCA9PSBjb25maWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gY29uZmlnIHNwZWNpZmllZCIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6bDEwMDM2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHpsMTAwMzYgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSB6bDEwMDM2X2luaXRfcmVncyhzdGF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdHVuZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlmZS0+dHVuZXJfcHJpdiA9IHN0YXRlOworCisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnpsMTAwMzZfdHVuZXJfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogdHVuZXIgaW5pdGlhbGl6YXRpb24gKCVzIGFkZHI9MHglMDJ4KSBva1xuIiwKKwkJX19mdW5jX18sIGZlLT5vcHMudHVuZXJfb3BzLmluZm8ubmFtZSwgY29uZmlnLT50dW5lcl9hZGRyZXNzKTsKKworCXJldHVybiBmZTsKKworZXJyb3I6CisJemwxMDAzNl9yZWxlYXNlKGZlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woemwxMDAzNl9hdHRhY2gpOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHpsMTAwMzZfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBaTDEwMDM2IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGlubyBSZWljaGFyZHQiKTsKK01PRFVMRV9BVVRIT1IoIk1hdHRoaWFzIFNjaHdhcnpvdHQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGI4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKgorICogRHJpdmVyIGZvciBaYXJsaW5rIFpMMTAwMzYgRFZCLVMgc2lsaWNvbiB0dW5lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaW5vIFJlaWNoYXJkdAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWF0dGhpYXMgU2Nod2Fyem90dCA8enphbUBnZW50b28uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgRFZCX1pMMTAwMzZfSAorI2RlZmluZSBEVkJfWkwxMDAzNl9ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworLyoqCisgKiBBdHRhY2ggYSB6bDEwMDM2IHR1bmVyIHRvIHRoZSBzdXBwbGllZCBmcm9udGVuZCBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIGZlIEZyb250ZW5kIHRvIGF0dGFjaCB0by4KKyAqIEBwYXJhbSBjb25maWcgemwxMDAzNl9jb25maWcgc3RydWN0dXJlCisgKiBAcmV0dXJuIEZFIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCisKK3N0cnVjdCB6bDEwMDM2X2NvbmZpZyB7CisJdTggdHVuZXJfYWRkcmVzczsKKwlpbnQgcmZfbG9vcF9lbmFibGU7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1pMMTAwMzYpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfRFZCX1pMMTAwMzZfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqemwxMDAzNl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IHpsMTAwMzZfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAwMzZfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRFZCX1pMMTAwMzZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKaW5kZXggYjE1MGVkMy4uMTQ4YjZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCkBAIC01NzIsNiArNTcyLDEwIEBACiAJCXpsMTAzNTNfZHVtcF9yZWdzKGZlKTsKIAlpZiAoc3RhdGUtPmNvbmZpZy5wYXJhbGxlbF90cykKIAkJemwxMDM1M19yZXNldF9hdHRhY2hbMl0gJj0gfjB4MjA7CisJaWYgKHN0YXRlLT5jb25maWcuY2xvY2tfY3RsXzEpCisJCXpsMTAzNTNfcmVzZXRfYXR0YWNoWzNdID0gc3RhdGUtPmNvbmZpZy5jbG9ja19jdGxfMTsKKwlpZiAoc3RhdGUtPmNvbmZpZy5wbGxfMCkKKwkJemwxMDM1M19yZXNldF9hdHRhY2hbNF0gPSBzdGF0ZS0+Y29uZmlnLnBsbF8wOwogCiAJLyogRG8gYSAiaGFyZCIgcmVzZXQgaWYgbm90IGFscmVhZHkgZG9uZSAqLwogCWlmICh6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIDB4NTApICE9IHpsMTAzNTNfcmVzZXRfYXR0YWNoWzFdIHx8CkBAIC02MTQsNiArNjE4LDcgQEAKIAkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlpbnQgaWQ7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpsMTAzNTNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTYyNSw3ICs2MzAsOCBAQAogCW1lbWNweSgmc3RhdGUtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHpsMTAzNTNfY29uZmlnKSk7CiAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KLQlpZiAoemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBDSElQX0lEKSAhPSBJRF9aTDEwMzUzKQorCWlkID0gemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBDSElQX0lEKTsKKwlpZiAoKGlkICE9IElEX1pMMTAzNTMpICYmIChpZCAhPSBJRF9DRTYyMzApICYmIChpZCAhPSBJRF9DRTYyMzEpKQogCQlnb3RvIGVycm9yOwogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKaW5kZXggMjI4N2JhYy4uNmUzY2E5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCkBAIC00MSw2ICs0MSwxMCBAQAogCiAJLyogc2V0IGlmIGkyY19nYXRlX2N0cmwgZGlzYWJsZSBpcyByZXF1aXJlZCAqLwogCXU4IGRpc2FibGVfaTJjX2dhdGVfY3RybDoxOworCisJLyogY2xvY2sgY29udHJvbCByZWdpc3RlcnMgKDB4NTEtMHg1NCkgKi8KKwl1OCBjbG9ja19jdGxfMTsgIC8qIGRlZmF1bHQ6IDB4NDYgKi8KKwl1OCBwbGxfMDsgICAgICAgIC8qIGRlZmF1bHQ6IDB4MTUgKi8KIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1MykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCmluZGV4IDA1NWZmMWYuLmUwZGQxZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmgKQEAgLTIyLDcgKzIyLDkgQEAKICNpZm5kZWYgX1pMMTAzNTNfUFJJVl8KICNkZWZpbmUgX1pMMTAzNTNfUFJJVl8KIAotI2RlZmluZSBJRF9aTDEwMzUzCTB4MTQKKyNkZWZpbmUgSURfWkwxMDM1MwkweDE0IC8qIFphcmxpbmsgWkwxMDM1MyAqLworI2RlZmluZSBJRF9DRTYyMzAJMHgxOCAvKiBJbnRlbCBDRTYyMzAgKi8KKyNkZWZpbmUgSURfQ0U2MjMxCTB4MTkgLyogSW50ZWwgQ0U2MjMxICovCiAKICNkZWZpbmUgbXNiKHgpICgoKHgpID4+IDgpICYgMHhmZikKICNkZWZpbmUgbHNiKHgpICgoeCkgJiAweGZmKQpAQCAtNTAsNiArNTIsMTAgQEAKIAlUUFNfUkVDRUlWRURfMCAgICAgPSAweDFFLAogCVRQU19DVVJSRU5UXzEgICAgICA9IDB4MUYsCiAJVFBTX0NVUlJFTlRfMCAgICAgID0gMHgyMCwKKwlDTE9DS19DVExfMCAgICAgICAgPSAweDUxLAorCUNMT0NLX0NUTF8xICAgICAgICA9IDB4NTIsCisJUExMXzAgICAgICAgICAgICAgID0gMHg1MywKKwlQTExfMSAgICAgICAgICAgICAgPSAweDU0LAogCVJFU0VUICAgICAgICAgICAgICA9IDB4NTUsCiAJQUdDX1RBUkdFVCAgICAgICAgID0gMHg1NiwKIAlNQ0xLX1JBVElPICAgICAgICAgPSAweDVDLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IGQxMDFiMzAuLmVlODk2MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCiAJLyogaXJxICovCiAJdW5zaWduZWQgaW50IG92ZXJmbG93OworCXVuc2lnbmVkIGludCBkZWFkOwogCiAJLyogZG1hICovCiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKQEAgLTMzNiw4ICszMzcsMTAgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHRzY3IgPT0gMHhmZmZmZmZmZikgewotCQkvLyBGSVhNRTogbWF5YmUgcmVjb3ZlciBzb21laG93Ci0JCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJjYXJkIGh1bmcgdXAgOihcbiIpOworCQlpZiAocGx1dG8tPmRlYWQgPT0gMCkKKwkJCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJjYXJkIGhhcyBodW5nIG9yIGJlZW4gZWplY3RlZC5cbiIpOworCQkvKiBJdCdzIGRlYWQgSmltICovCisJCXBsdXRvLT5kZWFkID0gMTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQppbmRleCBlZTA3MzdhLi5iY2Y5M2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQpAQCAtMSw2ICsxLDggQEAKLXNtczF4eHgtb2JqcyA6PSBzbXNjb3JlYXBpLm8gc21zdXNiLm8gc21zZHZiLm8gc21zLWNhcmRzLm8KK3NtczF4eHgtb2JqcyA6PSBzbXNjb3JlYXBpLm8gc21zLWNhcmRzLm8KIAogb2JqLSQoQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYKSArPSBzbXMxeHh4Lm8KK29iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zdXNiLm8KK29iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zZHZiLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCA0MzA3ZTRlLi42M2U0ZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtMTksNTAgKzE5LDkgQEAKIAogI2luY2x1ZGUgInNtcy1jYXJkcy5oIgogCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBzbXN1c2JfaWRfdGFibGVbXSA9IHsKLSNpZmRlZiBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFhfU01TX0lEUwotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDAxMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDEwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDIwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9BIH0sCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAxKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0IgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAzMDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1ZFR0EgfSwKLSNlbmRpZgotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTcwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0EgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDEpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19CIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDkpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMiB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwYSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDEwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTkpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MTApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTIwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUzMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1ODApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTkwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc21zdXNiX2lkX3RhYmxlKTsKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChjYXJkc19kYmcsIHNtc19kYmcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmRzX2RiZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc21zX2JvYXJkIHNtc19ib2FyZHNbXSA9IHsKIAlbU01TX0JPQVJEX1VOS05PV05dID0gewpAQCAtMTE1LDYgKzc0LDcgQEAKIAkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKIAkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKIAkJLmxuYV9jdHJsICA9IDI5LAorCQkucmZfc3dpdGNoID0gMTcsCiAJfSwKIAlbU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjJdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgV2luVFYgTWluaUNhcmQiLApAQCAtMTMwLDYgKzkwLDcgQEAKIAogCXJldHVybiAmc21zX2JvYXJkc1tpZF07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfZ2V0X2JvYXJkKTsKIAogc3RhdGljIGludCBzbXNfc2V0X2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBwaW4sIGludCBlbmFibGUpCiB7CkBAIC0xODIsNiArMTQzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfc2V0dXApOwogCiBpbnQgc21zX2JvYXJkX3Bvd2VyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpCiB7CkBAIC0xOTcsMTIgKzE1OSwxMyBAQAogCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjI6CiAJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRDoKIAkJLyogTE5BICovCi0JCXNtc19zZXRfZ3Bpbyhjb3JlZGV2LAotCQkJICAgICBib2FyZC0+bG5hX2N0cmwsIG9ub2ZmID8gMSA6IDApOworCQlpZiAoIW9ub2ZmKQorCQkJc21zX3NldF9ncGlvKGNvcmVkZXYsIGJvYXJkLT5sbmFfY3RybCwgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9wb3dlcik7CiAKIGludCBzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgbGVkKQogewpAQCAtMjI1LDMgKzE4OCw0MCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9sZWRfZmVlZGJhY2spOworCitpbnQgc21zX2JvYXJkX2xuYV9jb250cm9sKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpCit7CisJaW50IGJvYXJkX2lkID0gc21zY29yZV9nZXRfYm9hcmRfaWQoY29yZWRldik7CisJc3RydWN0IHNtc19ib2FyZCAqYm9hcmQgPSBzbXNfZ2V0X2JvYXJkKGJvYXJkX2lkKTsKKworCXNtc19kZWJ1ZygiJXM6IExOQSAlcyIsIF9fZnVuY19fLCBvbm9mZiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJc3dpdGNoIChib2FyZF9pZCkgeworCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjI6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRDoKKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkgICAgIGJvYXJkLT5yZl9zd2l0Y2gsIG9ub2ZmID8gMSA6IDApOworCQlyZXR1cm4gc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkJICAgIGJvYXJkLT5sbmFfY3RybCwgb25vZmYgPyAxIDogMCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX2xuYV9jb250cm9sKTsKKworaW50IHNtc19ib2FyZF9sb2FkX21vZHVsZXMoaW50IGlkKQoreworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVDoKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0E6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19COgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTToKKwkJcmVxdWVzdF9tb2R1bGUoInNtc2R2YiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9sb2FkX21vZHVsZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAppbmRleCA4ZTBmZTlmLi42NGQ3NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaApAQCAtNDAsNyArNDAsNyBAQAogCWNoYXIgKm5hbWUsICpmd1tERVZJQ0VfTU9ERV9NQVhdOwogCiAJLyogZ3Bpb3MgKi8KLQlpbnQgbGVkX3Bvd2VyLCBsZWRfaGksIGxlZF9sbywgbG5hX2N0cmw7CisJaW50IGxlZF9wb3dlciwgbGVkX2hpLCBsZWRfbG8sIGxuYV9jdHJsLCByZl9zd2l0Y2g7CiB9OwogCiBzdHJ1Y3Qgc21zX2JvYXJkICpzbXNfZ2V0X2JvYXJkKGludCBpZCk7CkBAIC01Miw3ICs1Miw4IEBACiAjZGVmaW5lIFNNU19MRURfSEkgIDIKIGludCBzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgbGVkKTsKIGludCBzbXNfYm9hcmRfcG93ZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBvbm9mZik7CitpbnQgc21zX2JvYXJkX2xuYV9jb250cm9sKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpOwogCi1leHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW107CitleHRlcm4gaW50IHNtc19ib2FyZF9sb2FkX21vZHVsZXMoaW50IGlkKTsKIAogI2VuZGlmIC8qIF9fU01TX0NBUkRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IGNmNjEzZjIuLjdiZDRkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIFRoaXMgZmlsZSBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGludGVyZmFjZSB0byBzbXMgY29yZSBjb21wb25lbnQKICAqCi0gKiAgYXV0aG9yOiBBbmF0b2x5IEdyZWVuYmxhdAorICogIGF1dGhvcjogVXJpIFNoa29sbmlrCiAgKgogICogIENvcHlyaWdodCAoYyksIDIwMDUtMjAwOCBTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgogICoKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlICJzbXNjb3JlYXBpLmgiCiAjaW5jbHVkZSAic21zLWNhcmRzLmgiCiAKLWludCBzbXNfZGVidWc7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHNtc19kZWJ1ZywgaW50LCAwNjQ0KTsKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RiZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOwogCiBzdHJ1Y3Qgc21zY29yZV9kZXZpY2Vfbm90aWZ5ZWVfdCB7CkBAIC0xMDUsMTEgKzEwNSwxMyBAQAogCQljb3JlLT5sZWRfc3RhdGUgPSBsZWQ7CiAJcmV0dXJuIGNvcmUtPmxlZF9zdGF0ZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfc2V0X2JvYXJkX2lkKTsKIAogaW50IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlKQogewogCXJldHVybiBjb3JlLT5ib2FyZF9pZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfZ2V0X2JvYXJkX2lkKTsKIAogc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKQEAgLTE3MCw2ICsxNzIsNyBAQAogCiAJcmV0dXJuIGRlZmF1bHRfbW9kZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcmVnaXN0cnlfZ2V0bW9kZSk7CiAKIHN0YXRpYyBlbnVtIHNtc19kZXZpY2VfdHlwZV9zdCBzbXNjb3JlX3JlZ2lzdHJ5X2dldHR5cGUoY2hhciAqZGV2cGF0aCkKIHsKQEAgLTI2MSw2ICsyNjQsNyBAQAogCiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3Rlcl9ob3RwbHVnKTsKIAogLyoqCiAgKiB1bnJlZ2lzdGVyIGEgY2xpZW50IGNhbGxiYWNrIHRoYXQgY2FsbGVkIHdoZW4gZGV2aWNlIHBsdWdnZWQgaW4vdW5wbHVnZ2VkCkBAIC0yODksNiArMjkzLDcgQEAKIAogCWttdXRleF91bmxvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3VucmVnaXN0ZXJfaG90cGx1Zyk7CiAKIHN0YXRpYyB2b2lkIHNtc2NvcmVfbm90aWZ5X2NsaWVudHMoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCiB7CkBAIC00MzIsNiArNDM3LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKioKICAqIHNldHMgaW5pdGlhbCBkZXZpY2UgbW9kZSBhbmQgbm90aWZpZXMgY2xpZW50IGhvdHBsdWdzIHRoYXQgZGV2aWNlIGlzIHJlYWR5CkBAIC00NjAsNiArNDY2LDcgQEAKIAogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfc3RhcnRfZGV2aWNlKTsKIAogc3RhdGljIGludCBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLApAQCAtNjg4LDYgKzY5NSw3IEBACiAKIAlzbXNfaW5mbygiZGV2aWNlICVwIGRlc3Ryb3llZCIsIGNvcmVkZXYpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV91bnJlZ2lzdGVyX2RldmljZSk7CiAKIHN0YXRpYyBpbnQgc21zY29yZV9kZXRlY3RfbW9kZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKIHsKQEAgLTczMiw3ICs3NDAsNyBAQAogCS8qRFZCSCovCiAJeyJub25lIiwgImR2Yl9ub3ZhXzEybWh6LmlucCIsICJkdmJfbm92YV8xMm1oel9iMC5pbnAiLCAibm9uZSJ9LAogCS8qVERNQiovCi0JeyJub25lIiwgInRkbWJfbm92YV8xMm1oei5pbnAiLCAibm9uZSIsICJub25lIn0sCisJeyJub25lIiwgInRkbWJfbm92YV8xMm1oei5pbnAiLCAidGRtYl9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCiAJLypEQUJJUCovCiAJeyJub25lIiwgIm5vbmUiLCAibm9uZSIsICJub25lIn0sCiAJLypCREEqLwpAQCAtODc5LDYgKzg4Nyw3IEBACiB7CiAJcmV0dXJuIGNvcmVkZXYtPm1vZGU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZSk7CiAKIC8qKgogICogZmluZCBjbGllbnQgYnkgcmVzcG9uc2UgaWQgJiB0eXBlIHdpdGhpbiB0aGUgY2xpZW50cyBsaXN0LgpAQCAtMTAwNiw2ICsxMDE1LDcgQEAKIAkJc21zY29yZV9wdXRidWZmZXIoY29yZWRldiwgY2IpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfb25yZXNwb25zZSk7CiAKIC8qKgogICogcmV0dXJuIHBvaW50ZXIgdG8gbmV4dCBmcmVlIGJ1ZmZlciBkZXNjcmlwdG9yIGZyb20gY29yZSBwb29sCkBAIC0xMDMxLDYgKzEwNDEsNyBAQAogCiAJcmV0dXJuIGNiOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9nZXRidWZmZXIpOwogCiAvKioKICAqIHJldHVybiBidWZmZXIgZGVzY3JpcHRvciB0byBhIHBvb2wKQEAgLTEwNDUsNiArMTA1Niw3IEBACiB7CiAJbGlzdF9hZGRfbG9ja2VkKCZjYi0+ZW50cnksICZjb3JlZGV2LT5idWZmZXJzLCAmY29yZWRldi0+YnVmZmVyc2xvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9wdXRidWZmZXIpOwogCiBzdGF0aWMgaW50IHNtc2NvcmVfdmFsaWRhdGVfY2xpZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJCSAgIHN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICpjbGllbnQsCkBAIC0xMTI0LDYgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3JlZ2lzdGVyX2NsaWVudCk7CiAKIC8qKgogICogZnJlZXMgc21zY2xpZW50IG9iamVjdCBhbmQgYWxsIHN1YmNsaWVudHMgYXNzb2NpYXRlZCB3aXRoIGl0CkBAIC0xMTU0LDYgKzExNjcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZWRldi0+Y2xpZW50c2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfdW5yZWdpc3Rlcl9jbGllbnQpOwogCiAvKioKICAqIHZlcmlmaWVzIHRoYXQgc291cmNlIGlkIGlzIG5vdCB0YWtlbiBieSBhbm90aGVyIGNsaWVudCwKQEAgLTExOTMsNiArMTIwNyw3IEBACiAKIAlyZXR1cm4gY29yZWRldi0+c2VuZHJlcXVlc3RfaGFuZGxlcihjb3JlZGV2LT5jb250ZXh0LCBidWZmZXIsIHNpemUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY2xpZW50X3NlbmRyZXF1ZXN0KTsKIAogCiBpbnQgc21zY29yZV9jb25maWd1cmVfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTMyIHBpbiwKQEAgLTEyNzYsMTIgKzEyOTEsMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmZ19zbXNjb3JlX3JlZ2lzdHJ5KTsKIAlrbXV0ZXhfaW5pdCgmZ19zbXNjb3JlX3JlZ2lzdHJ5bG9jayk7CiAKLQkvKiBVU0IgUmVnaXN0ZXIgKi8KLQlyYyA9IHNtc3VzYl9yZWdpc3RlcigpOwogCi0JLyogRFZCIFJlZ2lzdGVyICovCi0JcmMgPSBzbXNkdmJfcmVnaXN0ZXIoKTsKIAorCisKKworCXJldHVybiByYzsKIAlzbXNfZGVidWcoInJjICVkIiwgcmMpOwogCiAJcmV0dXJuIHJjOwpAQCAtMTI5MCw2ICsxMzA1LDEwIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zY29yZV9tb2R1bGVfZXhpdCh2b2lkKQogewogCisKKworCisKIAlrbXV0ZXhfbG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21zY29yZV9ub3RpZnllZXMpKSB7CiAJCXN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90ICpub3RpZnllZSA9CkBAIC0xMzEyLDE4ICsxMzMxLDEyIEBACiAJfQogCWttdXRleF91bmxvY2soJmdfc21zY29yZV9yZWdpc3RyeWxvY2spOwogCi0JLyogRFZCIFVuUmVnaXN0ZXIgKi8KLQlzbXNkdmJfdW5yZWdpc3RlcigpOwotCi0JLyogVW5yZWdpc3RlciBVU0IgKi8KLQlzbXN1c2JfdW5yZWdpc3RlcigpOwotCiAJc21zX2RlYnVnKCIiKTsKIH0KIAogbW9kdWxlX2luaXQoc21zY29yZV9tb2R1bGVfaW5pdCk7CiBtb2R1bGVfZXhpdChzbXNjb3JlX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBTaWFubyBTTVMxWFhYIFVTQiBkb25nbGUiKTsKLU1PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCwsIChkb3JvbmNAc2lhbm8tbXMuY29tKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaWFubyBNRFRWIENvcmUgbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLiAodXJpc0BzaWFuby1tcy5jb20pIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKaW5kZXggNzYwZTIzMy4uNTQ4ZGU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaApAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImRteGRldi5oIgogI2luY2x1ZGUgImR2YmRldi5oIgogI2luY2x1ZGUgImR2Yl9kZW11eC5oIgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBrbXV0ZXhfaW5pdChfcF8pIG11dGV4X2luaXQoX3BfKQogI2RlZmluZSBrbXV0ZXhfbG9jayhfcF8pIG11dGV4X2xvY2soX3BfKQpAQCAtMzY5LDI3ICszNjksNiBAQAogCXU4IG91dHB1dGRyaXZpbmc7CiB9OwogCi1zdHJ1Y3Qgc21zZHZiX2NsaWVudF90IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwotCi0Jc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QJKmNvcmVkZXY7Ci0Jc3RydWN0IHNtc2NvcmVfY2xpZW50X3QJKnNtc2NsaWVudDsKLQotCXN0cnVjdCBkdmJfYWRhcHRlcglhZGFwdGVyOwotCXN0cnVjdCBkdmJfZGVtdXgJZGVtdXg7Ci0Jc3RydWN0IGRteGRldgkJZG14ZGV2OwotCXN0cnVjdCBkdmJfZnJvbnRlbmQJZnJvbnRlbmQ7Ci0KLQlmZV9zdGF0dXNfdAkJZmVfc3RhdHVzOwotCWludAkJCWZlX2JlciwgZmVfc25yLCBmZV91bmMsIGZlX3NpZ25hbF9zdHJlbmd0aDsKLQotCXN0cnVjdCBjb21wbGV0aW9uCXR1bmVfZG9uZSwgc3RhdF9kb25lOwotCi0JLyogdG9kbzogc2F2ZSBmcmVxL2JhbmQgaW5zdGVhZCB3aG9sZSBzdHJ1Y3QgKi8KLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVfcGFyYW1zOwotCi19OwotCiBleHRlcm4gdm9pZCBzbXNjb3JlX3JlZ2lzdHJ5X3NldG1vZGUoY2hhciAqZGV2cGF0aCwgaW50IG1vZGUpOwogZXh0ZXJuIGludCBzbXNjb3JlX3JlZ2lzdHJ5X2dldG1vZGUoY2hhciAqZGV2cGF0aCk7CiAKQEAgLTQxOCw2ICszOTcsMTMgQEAKIGV4dGVybiB2b2lkIHNtc2NvcmVfb25yZXNwb25zZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpOwogCitleHRlcm4gaW50IHNtc2NvcmVfZ2V0X2NvbW1vbl9idWZmZXJfc2l6ZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldik7CitleHRlcm4gaW50IHNtc2NvcmVfbWFwX2NvbW1vbl9idWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIGludCBzbXNjb3JlX2dldF9md19maWxlbmFtZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQkgICBpbnQgbW9kZSwgY2hhciAqZmlsZW5hbWUpOworZXh0ZXJuIGludCBzbXNjb3JlX3NlbmRfZndfZmlsZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQl1OCAqdWZ3YnVmLCBpbnQgc2l6ZSk7CiAKIGV4dGVybgogc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKnNtc2NvcmVfZ2V0YnVmZmVyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KTsKQEAgLTQzMywxOCArNDE5LDkgQEAKIAogaW50IHNtc2NvcmVfbGVkX3N0YXRlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgbGVkKTsKIAotLyogc21zZHZiLmMgKi8KLWludCBzbXNkdmJfcmVnaXN0ZXIodm9pZCk7Ci12b2lkIHNtc2R2Yl91bnJlZ2lzdGVyKHZvaWQpOwotCi0vKiBzbXN1c2IuYyAqLwotaW50IHNtc3VzYl9yZWdpc3Rlcih2b2lkKTsKLXZvaWQgc21zdXNiX3VucmVnaXN0ZXIodm9pZCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1leHRlcm4gaW50IHNtc19kZWJ1ZzsKLQogI2RlZmluZSBEQkdfSU5GTyAxCiAjZGVmaW5lIERCR19BRFYgIDIKIApAQCAtNDUyLDcgKzQyOSw3IEBACiAJcHJpbnRrKGtlcm4gIiVzOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyNhcmcpCiAKICNkZWZpbmUgZHByaW50ayhrZXJuLCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7XAotCWlmIChzbXNfZGVidWcgJiBsdmwpIFwKKwlpZiAoc21zX2RiZyAmIGx2bCkgXAogCQlzbXNfcHJpbnRrKGtlcm4sIGZtdCwgIyNhcmcpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHNtc19sb2coZm10LCBhcmcuLi4pIHNtc19wcmludGsoS0VSTl9JTkZPLCBmbXQsICMjYXJnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwppbmRleCAyZGE5NTNhLi5iYTA4MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMXh4eCBVU0IgZG9uZ2xlCiAgKgotICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqICBBdXRob3I6IFVyaSBTaGtvbG5pCiAgKgogICogIENvcHlyaWdodCAoYyksIDIwMDUtMjAwOCBTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgogICoKQEAgLTI3LDkgKzI3LDMzIEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCitzdHJ1Y3Qgc21zZHZiX2NsaWVudF90IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXY7CisJc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKnNtc2NsaWVudDsKKworCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgIGFkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCAgICAgICAgZGVtdXg7CisJc3RydWN0IGRteGRldiAgICAgICAgICAgZG14ZGV2OworCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgIGZyb250ZW5kOworCisJZmVfc3RhdHVzX3QgICAgICAgICAgICAgZmVfc3RhdHVzOworCWludCAgICAgICAgICAgICAgICAgICAgIGZlX2JlciwgZmVfc25yLCBmZV91bmMsIGZlX3NpZ25hbF9zdHJlbmd0aDsKKworCXN0cnVjdCBjb21wbGV0aW9uICAgICAgIHR1bmVfZG9uZSwgc3RhdF9kb25lOworCisJLyogdG9kbzogc2F2ZSBmcmVxL2JhbmQgaW5zdGVhZCB3aG9sZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVfcGFyYW1zOworfTsKKwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZ19zbXNkdmJfY2xpZW50czsKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggZ19zbXNkdmJfY2xpZW50c2xvY2s7CiAKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RiZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOworCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMjYyLDYgKzI4Niw3IEBACiAJCXN0cnVjdCBTbXNNc2dIZHJfU1QJTXNnOwogCQl1MzIJCURhdGFbM107CiAJfSBNc2c7CisJaW50IHJldDsKIAogCU1zZy5Nc2cubXNnU3JjSWQgID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCAgPSBISUZfVEFTSzsKQEAgLTI4Miw2ICszMDcsMjQgQEAKIAlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLworCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOworCWlmIChyZXQgPT0gMCkgeworCQlmZV9zdGF0dXNfdCBzdGF0dXM7CisKKwkJLyogdHVuZSB3aXRoIExOQSBvZmYgYXQgZmlyc3QgKi8KKwkJcmV0ID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCQkgICZjbGllbnQtPnR1bmVfZG9uZSk7CisKKwkJc21zZHZiX3JlYWRfc3RhdHVzKGZlLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgRkVfSEFTX0xPQ0spCisJCQlyZXR1cm4gcmV0OworCisJCS8qIHByZXZpb3VzIHR1bmUgZGlkbnQgbG9jayAtIGVuYWJsZSBMTkEgYW5kIHR1bmUgYWdhaW4gKi8KKwkJc21zX2JvYXJkX2xuYV9jb250cm9sKGNsaWVudC0+Y29yZWRldiwgMSk7CisJfQorCiAJcmV0dXJuIHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQpAQCAtMzI5LDcgKzM3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzbXNkdmJfZmVfb3BzID0gewogCS5pbmZvID0gewotCQkubmFtZQkJCT0gIlNpYW5vIE1vYmlsZSBEaWdpdGFsIFNNUzF4eHgiLAorCQkubmFtZQkJCT0gIlNpYW5vIE1vYmlsZSBEaWdpdGFsIE1EVFYgUmVjZWl2ZXIiLAogCQkudHlwZQkJCT0gRkVfT0ZETSwKIAkJLmZyZXF1ZW5jeV9taW4JCT0gNDQyNTAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4CQk9IDg2NzI1MDAwMCwKQEAgLTM3MSw3ICs0MTQsNyBAQAogCWlmICghYXJyaXZhbCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikgIT0gNCkgeworCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewogCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgogCQkJIkRWQiBvcGVyYXRpb24uIik7CiAJCXJldHVybiAwOwpAQCAtNDczLDcgKzUxNiw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgc21zZHZiX3JlZ2lzdGVyKHZvaWQpCitpbnQgc21zZHZiX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwogCkBAIC00ODcsNyArNTMwLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgc21zZHZiX3VucmVnaXN0ZXIodm9pZCkKK3ZvaWQgc21zZHZiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJc21zY29yZV91bnJlZ2lzdGVyX2hvdHBsdWcoc21zZHZiX2hvdHBsdWcpOwogCkBAIC00OTksMyArNTQyLDEwIEBACiAKIAlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2R2Yl9jbGllbnRzbG9jayk7CiB9CisKK21vZHVsZV9pbml0KHNtc2R2Yl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbXNkdmJfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNNUyBEVkIgc3Vic3lzdGVtIGFkYXB0YXRpb24gbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwgSU5DLiAodXJpc0BzaWFuby1tcy5jb20pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCmluZGV4IDVkN2NhMzQuLjcxYzY1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgInNtc2NvcmVhcGkuaCIKICNpbmNsdWRlICJzbXMtY2FyZHMuaCIKIAorc3RhdGljIGludCBzbXNfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CisKICNkZWZpbmUgVVNCMV9CVUZGRVJfU0laRQkJMHgxMDAwCiAjZGVmaW5lIFVTQjJfQlVGRkVSX1NJWkUJCTB4NDAwMAogCkBAIC00MjQsNiArNDI4LDcgQEAKIAogCXJjID0gc21zdXNiX2luaXRfZGV2aWNlKGludGYsIGlkLT5kcml2ZXJfaW5mbyk7CiAJc21zX2luZm8oInJjICVkIiwgcmMpOworCXNtc19ib2FyZF9sb2FkX21vZHVsZXMoaWQtPmRyaXZlcl9pbmZvKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQzNiw3ICs0NDEsNyBAQAogewogCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiA9CiAJCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcyAgRW50ZXJpbmcgc3RhdHVzICVkLlxuIiwgX19mdW5jX18sIG1zZy5ldmVudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nIHN0YXR1cyAlZC5cbiIsIF9fZnVuY19fLCBtc2cuZXZlbnQpOwogCXNtc3VzYl9zdG9wX3N0cmVhbWluZyhkZXYpOwogCXJldHVybiAwOwogfQpAQCAtNDQ4LDcgKzQ1Myw3IEBACiAJCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcyAgRW50ZXJpbmcuXG4iLCBfX2Z1bmNfXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nLlxuIiwgX19mdW5jX18pOwogCXVzYl9jbGVhcl9oYWx0KHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDgxKSk7CiAJdXNiX2NsZWFyX2hhbHQodWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4MDIpKTsKIApAQCAtNDYzLDkgKzQ2OCw4IEBACiAJCQkJICAgICAgIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLgogCQkJCSAgICAgICBiSW50ZXJmYWNlTnVtYmVyLCAwKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICIlcyB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIHJjICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsICIKKwkJCSAgICAgICAicmMgJWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CkBAIC00NzQsOCArNDc4LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNtc3VzYl9pZF90YWJsZVtdID0geworI2lmZGVmIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWF9TTVNfSURTCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMDEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0EgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQiB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVHQSB9LAorI2VuZGlmCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxNzAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfQ0FUQU1PVU5UIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0IgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwOSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDBhKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDE5KSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUyMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MzApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTgwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU5MCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNtc3VzYl9pZF90YWJsZSk7CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbXN1c2JfZHJpdmVyID0gewotCS5uYW1lCQkJPSAic21zMXh4eCIsCisJLm5hbWUJCQk9ICJzbXN1c2IiLAogCS5wcm9iZQkJCT0gc21zdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CQk9IHNtc3VzYl9kaXNjb25uZWN0LAogCS5pZF90YWJsZQkJPSBzbXN1c2JfaWRfdGFibGUsCkBAIC00ODQsNyArNTM1LDcgQEAKIAkucmVzdW1lCQkJPSBzbXN1c2JfcmVzdW1lLAogfTsKIAotaW50IHNtc3VzYl9yZWdpc3Rlcih2b2lkKQoraW50IHNtc3VzYl9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByYyA9IHVzYl9yZWdpc3Rlcigmc21zdXNiX2RyaXZlcik7CiAJaWYgKHJjKQpAQCAtNDk1LDEwICs1NDYsMTYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgc21zdXNiX3VucmVnaXN0ZXIodm9pZCkKK3ZvaWQgc21zdXNiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJc21zX2RlYnVnKCIiKTsKIAkvKiBSZWd1bGFyIFVTQiBDbGVhbnVwICovCiAJdXNiX2RlcmVnaXN0ZXIoJnNtc3VzYl9kcml2ZXIpOwogfQogCittb2R1bGVfaW5pdChzbXN1c2JfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc21zdXNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBTaWFubyBTTVMxWFhYIFVTQiBkb25nbGUiKTsKK01PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCBJTkMuICh1cmlzQHNpYW5vLW1zLmNvbSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCmluZGV4IGFiMGJjZDIuLjc3Mjk5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggYWExZmY1Mi4uNDYyNGNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9vc2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9vc2RfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5vcGVuCQk9IGR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCmluZGV4IGJkYzYyYWMuLmU0ZDA5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogICogZHJpdmVyIHJlZ2lzdHJhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX3ZpZGVvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfdmlkZW9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLndyaXRlCQk9IGR2Yl92aWRlb193cml0ZSwKIAkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCkBAIC0xNDc0LDcgKzE0NzQsNyBAQAogCS5rZXJuZWxfaW9jdGwJPSBkdmJfdmlkZW9faW9jdGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfYXVkaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9hdWRpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkud3JpdGUJCT0gZHZiX2F1ZGlvX3dyaXRlLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKaW5kZXggMjYxMTM1ZC4uYzdhNjViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKQEAgLTM0NSw3ICszNDUsNyBAQAogCXJldHVybiBjaV9sbF9yZWFkKCZhdjcxMTAtPmNpX3JidWZmZXIsIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkdmJfY2FfcmVhZCwKIAkud3JpdGUJCT0gZHZiX2NhX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCmluZGV4IGM1YjljNzAuLjIyMTBjZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKQEAgLTMxNiwyNTMgKzMxNiwyNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgYXY3MTEwX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQogewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCopIGRldi0+ZXh0X3ByaXY7Ci0JZHByaW50ayg0LCAic2FhNzE0Nl9kZXY6ICVwXG4iLCBkZXYpOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKwl1MTYgc3RlcmVvX2RldDsKKwlzOCBzdGVyZW87CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJdTE2IHN0ZXJlb19kZXQ7Ci0JCXM4IHN0ZXJlbzsKKwlkcHJpbnRrKDIsICJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKIAotCQlkcHJpbnRrKDIsICJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IHQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgdC0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwlzdHJjcHkoKGNoYXIgKil0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCi0JCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKLQkJc3RyY3B5KChjaGFyICopdC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCXQtPnJhbmdlbG93ID0gNzcyOwkvKiA0OC4yNSBNSFogLyA2Mi41IGtIeiA9IDc3Miwgc2VlIGZpMTIxNm1rMi1zcGVjcywgcGFnZSAyICovCisJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCisJLyogRklYTUU6IGFkZCB0aGUgcmVhbCBzaWduYWwgc3RyZW5ndGggaGVyZSAqLworCXQtPnNpZ25hbCA9IDB4ZmZmZjsKKwl0LT5hZmMgPSAwOwogCi0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAotCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKLQkJdC0+cmFuZ2Vsb3cgPSA3NzI7CS8qIDQ4LjI1IE1IWiAvIDYyLjUga0h6ID0gNzcyLCBzZWUgZmkxMjE2bWsyLXNwZWNzLCBwYWdlIDIgKi8KLQkJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCi0JCS8qIEZJWE1FOiBhZGQgdGhlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIGhlcmUgKi8KLQkJdC0+c2lnbmFsID0gMHhmZmZmOwotCQl0LT5hZmMgPSAwOworCS8qIEZJWE1FOiBzdGFuZGFyZCAvIHN0ZXJlbyBkZXRlY3Rpb24gaXMgc3RpbGwgYnJva2VuICovCisJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfREVNLCAweDAwN2UsICZzdGVyZW9fZGV0KTsKKwlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBUViBzdGFuZGFyZCBkZXRlY3Rpb246IDB4JTA0eFxuIiwgc3RlcmVvX2RldCk7CisJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfRFNQLCAweDAwMTgsICZzdGVyZW9fZGV0KTsKKwlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBzdGVyZW8gZGV0ZWN0aW9uOiAweCUwNHhcbiIsIHN0ZXJlb19kZXQpOworCXN0ZXJlbyA9IChzOCkoc3RlcmVvX2RldCA+PiA4KTsKKwlpZiAoc3RlcmVvID4gMHgxMCkgeworCQkvKiBzdGVyZW8gKi8KKwkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87CisJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCX0gZWxzZSBpZiAoc3RlcmVvIDwgLTB4MTApIHsKKwkJLyogYmlsaW5ndWFsICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCX0gZWxzZSAvKiBtb25vICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCi0JCS8vIEZJWE1FOiBzdGFuZGFyZCAvIHN0ZXJlbyBkZXRlY3Rpb24gaXMgc3RpbGwgYnJva2VuCi0JCW1zcF9yZWFkcmVnKGF2NzExMCwgTVNQX1JEX0RFTSwgMHgwMDdlLCAmc3RlcmVvX2RldCk7Ci0JCWRwcmludGsoMSwgIlZJRElPQ19HX1RVTkVSOiBtc3AzNDAwIFRWIHN0YW5kYXJkIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKLQkJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfRFNQLCAweDAwMTgsICZzdGVyZW9fZGV0KTsKLQkJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IG1zcDM0MDAgc3RlcmVvIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKLQkJc3RlcmVvID0gKHM4KShzdGVyZW9fZGV0ID4+IDgpOwotCQlpZiAoc3RlcmVvID4gMHgxMCkgewotCQkJLyogc3RlcmVvICovCi0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQl9Ci0JCWVsc2UgaWYgKHN0ZXJlbyA8IC0weDEwKSB7Ci0JCQkvKiBiaWxpbmd1YWwgKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQkJfQotCQllbHNlIC8qIG1vbm8gKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCXJldHVybiAwOworfQogCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCXUxNiBmbV9tYXRyaXgsIHNyYzsKLQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6ICVkXG4iLCB0LT5pbmRleCk7CitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCXUxNiBmbV9tYXRyaXgsIHNyYzsKKwlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKIAotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3dpdGNoICh0LT5hdWRtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfU1RFUkVPXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMTsgLy8gc3RlcmVvCi0JCQlzcmMgPSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gYmlsaW5ndWFsCi0JCQlzcmMgPSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gbW9ubwotCQkJc3JjID0gMHgwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMlxuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDA7IC8vIG1vbm8KLQkJCXNyYyA9IDB4MDAxMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiBjYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POiAqLwotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFREQTk4NDBfU0VUX01PTk9cbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBtb25vCi0JCQlzcmMgPSAweDAwMzA7Ci0JCQlicmVhazsKLQkJfQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGUsIGZtX21hdHJpeCk7Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOCwgc3JjKTsKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA5LCBzcmMpOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGEsIHNyYyk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7Ci0KLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQlmLT5mcmVxdWVuY3kgPQlhdjcxMTAtPmN1cnJlbnRfZnJlcTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCXsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOwotCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwMCwgMHhmZmUwKTsgLy8gZmFzdCBtdXRlCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHhmZmUwKTsKLQotCQkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCi0JCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9WRVMxODIwKSB7Ci0JCQl2ZXMxODIwX3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKLQkJfSBlbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KSB7Ci0JCQlzdHYwMjk3X3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKLQkJfQotCQlhdjcxMTAtPmN1cnJlbnRfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAzZik7IC8vIHN0YXJ0IHN0ZXJlbyBkZXRlY3Rpb24KLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDE1LCAweDAwMDApOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4NGYwMCk7IC8vIGxvdWRzcGVha2VyICsgaGVhZHBob25lCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHg0ZjAwKTsgLy8gU0NBUlQgMSB2b2x1bWUKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19FTlVNSU5QVVQ6ICVkXG4iLCBpLT5pbmRleCk7Ci0KLQkJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKSB7Ci0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IDQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaS0+aW5kZXggIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW1lbWNweShpLCAmaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gKGludCAqKWFyZzsKLQkJKmlucHV0ID0gYXY3MTEwLT5jdXJyZW50X2lucHV0OwotCQlkcHJpbnRrKDIsICJWSURJT0NfR19JTlBVVDogJWRcbiIsICppbnB1dCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50IGlucHV0ID0gKihpbnQgKilhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX1NfSU5QVVQ6ICVkXG4iLCBpbnB1dCk7Ci0KLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKLQkJCXJldHVybiAwOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWF2NzExMC0+Y3VycmVudF9pbnB1dCA9IGlucHV0OwotCQlyZXR1cm4gYXY3MTEwX2R2Yl9jX3N3aXRjaChmaCk7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfR19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKLQkJaWYgKGEtPmluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWVtY3B5KGEsICZtc3AzNDAwX3Y0bDJfYXVkaW8sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXN3aXRjaCAodC0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU9cbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDE7IC8qIHN0ZXJlbyAqLworCQlzcmMgPSAweDAwMjA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBiaWxpbmd1YWwgKi8KKwkJc3JjID0gMHgwMDIwOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMVxuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMDsgLyogbW9ubyAqLworCQlzcmMgPSAweDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcyXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBtb25vICovCisJCXNyYyA9IDB4MDAxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzogKi8KKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFREQTk4NDBfU0VUX01PTk9cbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDA7IC8qIG1vbm8gKi8KKwkJc3JjID0gMHgwMDMwOwogCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NfU19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfU19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKLQkJYnJlYWs7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBlLCBmbV9tYXRyaXgpOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOCwgc3JjKTsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDksIHNyYyk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBhLCBzcmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7CisKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZi0+ZnJlcXVlbmN5ID0JYXY3MTEwLT5jdXJyZW50X2ZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOworCisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4ZmZlMCk7IC8qIGZhc3QgbXV0ZSAqLworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHhmZmUwKTsKKworCS8qIHR1bmUgaW4gZGVzaXJlZCBmcmVxdWVuY3kgKi8KKwlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfVkVTMTgyMCkKKwkJdmVzMTgyMF9zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7CisJZWxzZSBpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfU1RWMDI5NykKKwkJc3R2MDI5N19zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7CisJYXY3MTEwLT5jdXJyZW50X2ZyZXEgPSBmLT5mcmVxdWVuY3k7CisKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAzZik7IC8qIHN0YXJ0IHN0ZXJlbyBkZXRlY3Rpb24gKi8KKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAwMCk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDAwLCAweDRmMDApOyAvKiBsb3Vkc3BlYWtlciArIGhlYWRwaG9uZSAqLworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHg0ZjAwKTsgLyogU0NBUlQgMSB2b2x1bWUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19FTlVNSU5QVVQ6ICVkXG4iLCBpLT5pbmRleCk7CisKKwlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpIHsKKwkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKGktPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXAgPSBhcmc7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKLQkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mICpjYXApOwotCQlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApID49IDB4MjYyMykgewotCQkJY2FwLT5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJfQotCQlicmVhazsKKworCW1lbWNweShpLCAmaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJKmlucHV0ID0gYXY3MTEwLT5jdXJyZW50X2lucHV0OworCWRwcmludGsoMiwgIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfU19JTlBVVDogJWRcbiIsIGlucHV0KTsKKworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpCisJCXJldHVybiAwOworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF2NzExMC0+Y3VycmVudF9pbnB1dCA9IGlucHV0OworCXJldHVybiBhdjcxMTBfZHZiX2Nfc3dpdGNoKGZoKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWRwcmludGsoMiwgIlZJRElPQ19HX0FVRElPOiAlZFxuIiwgYS0+aW5kZXgpOworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1jcHkoYSwgJm1zcDM0MDBfdjRsMl9hdWRpbywgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlkcHJpbnRrKDIsICJWSURJT0NfU19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOworCWlmIChjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA+PSAweDI2MjMpIHsKKwkJY2FwLT5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWNhcC0+c2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJZHByaW50aygyLCAiVklESU9DX0dfRk1UOlxuIik7Ci0JCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgfHwKLQkJICAgIEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKLQkJCXJldHVybiAtRUFHQUlOOyAvKiBoYW5kbGVkIGJ5IGNvcmUgZHJpdmVyICovCi0JCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQlpZiAoYXY3MTEwLT53c3NNb2RlKSB7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOwotCQl9Ci0JCWJyZWFrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfR19GTVQ6XG4iKTsKKwlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKKwlpZiAoYXY3MTEwLT53c3NNb2RlKSB7CisJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7CiAJfQotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfU19GTVRcbiIpOwotCQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUIHx8Ci0JCSAgICBGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMpCi0JCQlyZXR1cm4gLUVBR0FJTjsgLyogaGFuZGxlZCBieSBjb3JlIGRyaXZlciAqLwotCQlpZiAoZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1ICYmCi0JCSAgICBmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdICE9IFY0TDJfU0xJQ0VEX1dTU182MjUpIHsKLQkJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQkJLyogV1NTIGNvbnRyb2xsZWQgYnkgZmlybXdhcmUgKi8KLQkJCWF2NzExMC0+d3NzTW9kZSA9IDA7Ci0JCQlhdjcxMTAtPndzc0RhdGEgPSAwOwotCQkJcmV0dXJuIGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsCi0JCQkJCSAgICAgU2V0V1NTQ29uZmlnLCAxLCAwKTsKLQkJfSBlbHNlIHsKLQkJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZiAoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKLQkJCS8qIFdTUyBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZSAqLwotCQkJYXY3MTEwLT53c3NNb2RlID0gMTsKLQkJCWF2NzExMC0+d3NzRGF0YSA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXByaW50aygibm8gc3VjaCBpb2N0bFxuIik7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19TX0ZNVFxuIik7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgIT0gVjRMMl9TTElDRURfV1NTXzYyNSAmJgorCSAgICBmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdICE9IFY0TDJfU0xJQ0VEX1dTU182MjUpIHsKKwkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZi0+Zm10LnNsaWNlZCkpOworCQkvKiBXU1MgY29udHJvbGxlZCBieSBmaXJtd2FyZSAqLworCQlhdjcxMTAtPndzc01vZGUgPSAwOworCQlhdjcxMTAtPndzc0RhdGEgPSAwOworCQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwKKwkJCQkgICAgIFNldFdTU0NvbmZpZywgMSwgMCk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZi0+Zm10LnNsaWNlZCkpOworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOworCQkvKiBXU1MgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgKi8KKwkJYXY3MTEwLT53c3NNb2RlID0gMTsKKwkJYXY3MTEwLT53c3NEYXRhID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MDksMjIgKzYxNyw2IEBACiAgKiBJTklUSUFMSVpBVElPTgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzIGlvY3Rsc1tdID0gewotCXsgVklESU9DX0VOVU1JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19UVU5FUiwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1RVTkVSLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfQVVESU8sCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19BVURJTywJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQLCBTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfRk1ULAkJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0ZNVCwJCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyAwLCAwIH0KLX07Ci0KIHN0YXRpYyB1OCBzYWE3MTEzX2luaXRfcmVnc1tdID0gewogCTB4MDIsIDB4ZDAsCiAJMHgwMywgMHgyMywKQEAgLTc4OCwyMCArNzgwLDM0IEBACiBpbnQgYXY3MTEwX2luaXRfdjRsKHN0cnVjdCBhdjcxMTAgKmF2NzExMCkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiA9IGF2NzExMC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X2V4dF92diAqdnZfZGF0YTsKIAlpbnQgcmV0OwogCiAJLyogc3BlY2lhbCBjYXNlIERWQi1DOiB0aGVzZSBjYXJkcyBoYXZlIGFuIGFuYWxvZyB0dW5lcgogCSAgIHBsdXMgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcsIHNvIHdlIGhhdmUgc2VwYXJhdGUKIAkgICBzYWE3MTQ2X2V4dF92diBkYXRhIGZvciB0aGVzZS4uLiAqLwogCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKLQkJcmV0ID0gc2FhNzE0Nl92dl9pbml0KGRldiwgJmF2NzExMF92dl9kYXRhX2MpOworCQl2dl9kYXRhID0gJmF2NzExMF92dl9kYXRhX2M7CiAJZWxzZQotCQlyZXQgPSBzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmYXY3MTEwX3Z2X2RhdGFfc3QpOworCQl2dl9kYXRhID0gJmF2NzExMF92dl9kYXRhX3N0OworCXJldCA9IHNhYTcxNDZfdnZfaW5pdChkZXYsIHZ2X2RhdGEpOwogCiAJaWYgKHJldCkgewogCQlFUlIoKCJjYW5ub3QgaW5pdCBjYXB0dXJlIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwl2dl9kYXRhLT5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lcjsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lcjsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5OworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3k7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2F1ZGlvID0gdmlkaW9jX2dfYXVkaW87CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX2F1ZGlvID0gdmlkaW9jX3NfYXVkaW87CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX3NsaWNlZF92YmlfY2FwID0gdmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXA7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dCA9IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0ID0gdmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0OwogCiAJaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnY0bF9kZXYsIGRldiwgImF2NzExMCIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CiAJCUVSUigoImNhbm5vdCByZWdpc3RlciBjYXB0dXJlIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CkBAIC05MDAsOSArOTA2LDYgQEAKIAkubnVtX3N0ZHMJPSBBUlJBWV9TSVpFKHN0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKIAotCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKLQkuaW9jdGwJCT0gYXY3MTEwX2lvY3RsLAotCiAJLnZiaV9mb3BzLm9wZW4JPSBhdjcxMTBfdmJpX3Jlc2V0LAogCS52YmlfZm9wcy5yZWxlYXNlID0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMud3JpdGUJPSBhdjcxMTBfdmJpX3dyaXRlLApAQCAtOTE4LDkgKzkyMSw2IEBACiAJLm51bV9zdGRzCT0gQVJSQVlfU0laRShzdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCiAKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IGF2NzExMF9pb2N0bCwKLQogCS52YmlfZm9wcy5vcGVuCT0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMucmVsZWFzZSA9IGF2NzExMF92YmlfcmVzZXQsCiAJLnZiaV9mb3BzLndyaXRlCT0gYXY3MTEwX3ZiaV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggNDE4MjEyMS4uODU1ZmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTE0MDQsNiArMTQwNCw0MSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNkZWZpbmUgS05DMV9JTlBVVFMgMgorc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IGtuYzFfaW5wdXRzW0tOQzFfSU5QVVRTXSA9IHsKKwl7MCwgIkNvbXBvc2l0ZSIsIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiwgMSwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKKwl7MSwgIlMtVmlkZW8iLCBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLCAyLCAwLCBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9OVFNDX00sIDB9LAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppKQoreworCWRwcmludGsoMSwgIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCk7CisJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBLTkMxX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtY3B5KGksICZrbmMxX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBidWRnZXRfYXYgKmJ1ZGdldF9hdiA9IChzdHJ1Y3QgYnVkZ2V0X2F2ICopZGV2LT5leHRfcHJpdjsKKworCSppID0gYnVkZ2V0X2F2LT5jdXJfaW5wdXQ7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYgPSAoc3RydWN0IGJ1ZGdldF9hdiAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCAlZC5cbiIsIGlucHV0KTsKKwlyZXR1cm4gc2FhNzExM19zZXRpbnB1dChidWRnZXRfYXYsIGlucHV0KTsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiBzdGF0aWMgaW50IGJ1ZGdldF9hdl9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKQEAgLTE0NDIsNiArMTQ3Nyw5IEBACiAJCQlFUlIoKCJjYW5ub3QgaW5pdCB2diBzdWJzeXN0ZW0uXG4iKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CisJCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CisJCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAKIAkJaWYgKChlcnIgPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmYnVkZ2V0X2F2LT52ZCwgZGV2LCAia25jMSIsIFZGTF9UWVBFX0dSQUJCRVIpKSkgewogCQkJLyogZml4bWU6IHByb3BlciBjbGVhbnVwIGhlcmUgKi8KQEAgLTE0ODAsNTQgKzE1MTgsNiBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEtOQzFfSU5QVVRTIDIKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBrbmMxX2lucHV0c1tLTkMxX0lOUFVUU10gPSB7Ci0JezAsICJDb21wb3NpdGUiLCBWNEwyX0lOUFVUX1RZUEVfVFVORVIsIDEsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCi0JezEsICJTLVZpZGVvIiwgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwgMiwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzIGlvY3Rsc1tdID0gewotCXtWSURJT0NfRU5VTUlOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0Je1ZJRElPQ19HX0lOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0Je1ZJRElPQ19TX0lOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0JezAsIDB9Ci19OwotCi1zdGF0aWMgbG9uZyBhdl9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGJ1ZGdldF9hdiAqYnVkZ2V0X2F2ID0gKHN0cnVjdCBidWRnZXRfYXYgKikgZGV2LT5leHRfcHJpdjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOnsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJZHByaW50aygxLCAiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KTsKLQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBLTkMxX0lOUFVUUykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbWVtY3B5KGksICZrbmMxX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDp7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQotCQkqaW5wdXQgPSBidWRnZXRfYXYtPmN1cl9pbnB1dDsKLQotCQlkcHJpbnRrKDEsICJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOnsKLQkJaW50IGlucHV0ID0gKihpbnQgKikgYXJnOwotCQlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCAlZC5cbiIsIGlucHV0KTsKLQkJcmV0dXJuIHNhYTcxMTNfc2V0aW5wdXQoYnVkZ2V0X2F2LCBpbnB1dCk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgc3RhbmRhcmRbXSA9IHsKIAl7Lm5hbWUgPSAiUEFMIiwuaWQgPSBWNEwyX1NURF9QQUwsCiAJIC52X29mZnNldCA9IDB4MTcsLnZfZmllbGQgPSAyODgsCkBAIC0xNTQ2LDggKzE1MzYsNiBAQAogCS5mbGFncyA9IDAsCiAJLnN0ZHMgPSAmc3RhbmRhcmRbMF0sCiAJLm51bV9zdGRzID0gQVJSQVlfU0laRShzdGFuZGFyZCksCi0JLmlvY3RscyA9ICZpb2N0bHNbMF0sCi0JLmlvY3RsID0gYXZfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IGJjYmM1ZDQuLjM3MWE3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0xMDc2LDYgKzEwNzYsMTAgQEAKIAkuZGVsdGFmID0gMHhhNTExLAogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyB0ZGE4Mjd4X2NvbmZpZyA9IHsKKwkuY29uZmlnID0gMCwKK307CisKIC8qIFRUIFMyLTMyMDAgRFZCLVMgKFNUQjA4OTkpIEluaXR0YWIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgdHQzMjAwX3N0YjA4OTlfczFfaW5pdF8xW10gPSB7CiAKQEAgLTE0MTQsNyArMTQxOCw3IEBACiAJY2FzZSAweDEwMWE6IC8qIFRUIEJ1ZGdldC1DLTE1MDEgKHBoaWxpcHMgdGRhMTAwMjMvcGhpbGlwcyB0ZGE4Mjc0QSkgKi8KIAkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDAyM19hdHRhY2gsICZ0ZGExMDAyM19jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgMHg0OCk7CiAJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpIHsKLQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4NjEsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgTlVMTCkgPT0gTlVMTCkgeworCQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgMHg2MSwgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwLCAmdGRhODI3eF9jb25maWcpID09IE5VTEwpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyB0ZGE4Mjd4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKIAkJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwppbmRleCAyMDE0ZWJjLi5jYzU0ZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpAQCAtMzkwLDkgKzM5MCwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlVTQiIpOworCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwpAQCAtNDUwLDcgKzQ1MiwxMCBAQAogCWlmIChyYWRpby0+cmVtb3ZlZCkKIAkJcmV0dXJuIC1FSU87CiAKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKIAlyZXR2YWwgPSBkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwgIlNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKQEAgLTYwMSw3ICs2MDYsMTAgQEAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+dXNlcnMgPSAwOworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCiAJaWYgKCFyYWRpby0+cmVtb3ZlZCkgewogCQlyZXR2YWwgPSBkc2JyMTAwX3N0b3AocmFkaW8pOwogCQlpZiAocmV0dmFsIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCBiZmExM2I4Li5hYzgyZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMzIsMTQgKzMyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTwkqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKK01PRFVMRV9BVVRIT1IoIk0uS2lya3dvb2QiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1JUUkFDS19QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19SVFJBQ0tfUE9SVCAtMQpAQCAtNDcsODYgKzQ4LDk1IEBACiAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CiAKLXN0cnVjdCBydF9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwZiBvciAweDMwZikiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBydHJhY2sKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCWludCBwb3J0OwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlpbnQgaW87CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IHJ0cmFjayBydHJhY2tfY2FyZDsKIAogLyogbG9jYWwgdGhpbmdzICovCiAKIHN0YXRpYyB2b2lkIHNsZWVwX2RlbGF5KGxvbmcgbikKIHsKIAkvKiBTbGVlcCBuaWNlbHkgZm9yICduJyB1UyAqLwotCWludCBkPW4vbXNlY3NfdG9famlmZmllcygxMDAwKTsKLQlpZighZCkKKwlpbnQgZCA9IG4gLyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCWlmICghZCkKIAkJdWRlbGF5KG4pOwogCWVsc2UKIAkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoZCkpOwogfQogCi1zdGF0aWMgdm9pZCBydF9kZWN2b2wodm9pZCkKK3N0YXRpYyB2b2lkIHJ0X2RlY3ZvbChzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlvdXRiKDB4NTgsIGlvKTsJCS8qIHZvbHVtZSBkb3duICsgc2lnc3RyICsgb24JKi8KKwlvdXRiKDB4NTgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgZG93biArIHNpZ3N0ciArIG9uCSovCiAJc2xlZXBfZGVsYXkoMTAwMDAwKTsKLQlvdXRiKDB4ZDgsIGlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLworCW91dGIoMHhkOCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLwogfQogCi1zdGF0aWMgdm9pZCBydF9pbmN2b2wodm9pZCkKK3N0YXRpYyB2b2lkIHJ0X2luY3ZvbChzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlvdXRiKDB4OTgsIGlvKTsJCS8qIHZvbHVtZSB1cCArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweDk4LCBydC0+aW8pOwkJLyogdm9sdW1lIHVwICsgc2lnc3RyICsgb24JKi8KIAlzbGVlcF9kZWxheSgxMDAwMDApOwotCW91dGIoMHhkOCwgaW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweGQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiB9CiAKLXN0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlkZXYtPm11dGVkID0gMTsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiKDB4ZDAsIGlvKTsJCQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlydC0+bXV0ZWQgPSAxOworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsKKwlvdXRiKDB4ZDAsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgcnRfc2V0dm9sKHN0cnVjdCBydF9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgcnRfc2V0dm9sKHN0cnVjdCBydHJhY2sgKnJ0LCBpbnQgdm9sKQogewogCWludCBpOwogCi0JbXV0ZXhfbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmcnQtPmxvY2spOwogCi0JaWYodm9sID09IGRldi0+Y3Vydm9sKSB7CS8qIHJlcXVlc3RlZCB2b2x1bWUgPSBjdXJyZW50ICovCi0JCWlmIChkZXYtPm11dGVkKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgICovCi0JCQlkZXYtPm11dGVkID0gMDsKLQkJCW91dGIgKDB4ZDgsIGlvKTsJLyogZW5hYmxlIGNhcmQgKi8KKwlpZiAodm9sID09IHJ0LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KKwkJaWYgKHJ0LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLworCQkJcnQtPm11dGVkID0gMDsKKwkJCW91dGIoMHhkOCwgcnQtPmlvKTsJLyogZW5hYmxlIGNhcmQgKi8KIAkJfQotCQltdXRleF91bmxvY2soJmxvY2spOworCQltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYodm9sID09IDApIHsJCQkvKiB2b2x1bWUgPSAwIG1lYW5zIG11dGUgdGhlIGNhcmQgKi8KLQkJb3V0YigweDQ4LCBpbyk7CQkvKiB2b2x1bWUgZG93biBidXQgc3RpbGwgIm9uIgkqLworCWlmICh2b2wgPT0gMCkgewkJCS8qIHZvbHVtZSA9IDAgbWVhbnMgbXV0ZSB0aGUgY2FyZCAqLworCQlvdXRiKDB4NDgsIHJ0LT5pbyk7CS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCiAJCXNsZWVwX2RlbGF5KDIwMDAwMDApOwkvKiBtYWtlIHN1cmUgaXQncyB0b3RhbGx5IGRvd24JKi8KLQkJb3V0YigweGQwLCBpbyk7CQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCi0JCWRldi0+Y3Vydm9sID0gMDsJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KLQkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkJb3V0YigweGQwLCBydC0+aW8pOwkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCisJCXJ0LT5jdXJ2b2wgPSAwOwkJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KKwkJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAotCWRldi0+bXV0ZWQgPSAwOwotCWlmKHZvbCA+IGRldi0+Y3Vydm9sKQotCQlmb3IoaSA9IGRldi0+Y3Vydm9sOyBpIDwgdm9sOyBpKyspCi0JCQlydF9pbmN2b2woKTsKKwlydC0+bXV0ZWQgPSAwOworCWlmICh2b2wgPiBydC0+Y3Vydm9sKQorCQlmb3IgKGkgPSBydC0+Y3Vydm9sOyBpIDwgdm9sOyBpKyspCisJCQlydF9pbmN2b2wocnQpOwogCWVsc2UKLQkJZm9yKGkgPSBkZXYtPmN1cnZvbDsgaSA+IHZvbDsgaS0tKQotCQkJcnRfZGVjdm9sKCk7CisJCWZvciAoaSA9IHJ0LT5jdXJ2b2w7IGkgPiB2b2w7IGktLSkKKwkJCXJ0X2RlY3ZvbChydCk7CiAKLQlkZXYtPmN1cnZvbCA9IHZvbDsKLQltdXRleF91bmxvY2soJmxvY2spOworCXJ0LT5jdXJ2b2wgPSB2b2w7CisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNSwxNTUgKzE0NSwxMzcgQEAKICAqIGFuZCBiaXQgNCAoKzE2KSBpcyB0byBrZWVwIHRoZSBzaWduYWwgc3RyZW5ndGggbWV0ZXIgZW5hYmxlZAogICovCiAKLXN0YXRpYyB2b2lkIHNlbmRfMF9ieXRlKGludCBwb3J0LCBzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZShzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlpZiAoKGRldi0+Y3Vydm9sID09IDApIHx8IChkZXYtPm11dGVkKSkgewotCQlvdXRiX3AoMTI4KzY0KzE2KyAgMSwgcG9ydCk7ICAgLyogd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNisyKzEsIHBvcnQpOyAgIC8qIGNsb2NrICovCisJaWYgKHJ0LT5jdXJ2b2wgPT0gMCB8fCBydC0+bXV0ZWQpIHsKKwkJb3V0Yl9wKDEyOCs2NCsxNisgIDEsIHJ0LT5pbyk7ICAgLyogd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNisyKzEsIHJ0LT5pbyk7ICAgLyogY2xvY2sgKi8KIAl9CiAJZWxzZSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrOCsgIDEsIHBvcnQpOyAgLyogb24gKyB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzgrMisxLCBwb3J0KTsgIC8qIGNsb2NrICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCsgIDEsIHJ0LT5pbyk7ICAvKiBvbiArIHdyLWVuYWJsZSArIGRhdGEgbG93ICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCsyKzEsIHJ0LT5pbyk7ICAvKiBjbG9jayAqLwogCX0KIAlzbGVlcF9kZWxheSgxMDAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUoaW50IHBvcnQsIHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMV9ieXRlKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCWlmICgoZGV2LT5jdXJ2b2wgPT0gMCkgfHwgKGRldi0+bXV0ZWQpKSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrNCAgKzEsIHBvcnQpOyAgIC8qIHdyLWVuYWJsZStkYXRhIGhpZ2ggKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNis0KzIrMSwgcG9ydCk7ICAgLyogY2xvY2sgKi8KKwlpZiAocnQtPmN1cnZvbCA9PSAwIHx8IHJ0LT5tdXRlZCkgeworCQlvdXRiX3AoMTI4KzY0KzE2KzQgICsxLCBydC0+aW8pOyAgIC8qIHdyLWVuYWJsZStkYXRhIGhpZ2ggKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis0KzIrMSwgcnQtPmlvKTsgICAvKiBjbG9jayAqLwogCX0KIAllbHNlIHsKLQkJb3V0Yl9wKDEyOCs2NCsxNis4KzQgICsxLCBwb3J0KTsgLyogb24rd3ItZW5hYmxlK2RhdGEgaGlnaCAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCsyKzEsIHBvcnQpOyAvKiBjbG9jayAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCAgKzEsIHJ0LT5pbyk7IC8qIG9uK3dyLWVuYWJsZStkYXRhIGhpZ2ggKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis4KzQrMisxLCBydC0+aW8pOyAvKiBjbG9jayAqLwogCX0KIAogCXNsZWVwX2RlbGF5KDEwMDApOwogfQogCi1zdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0cmFjayAqcnQsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKIAlpbnQgaTsKIAotCS8qIGFkYXB0ZWQgZnJvbSByYWRpby1henRlY2guYyAqLworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsJCQkvKiBTdG9wIG90aGVyIG9wcyBpbnRlcmZlcmluZyAqLworCisJcnQtPmN1cmZyZXEgPSBmcmVxOwogCiAJLyogbm93IHVzZXMgVklERU9fVFVORVJfTE9XIGZvciBmaW5lIHR1bmluZyAqLwogCiAJZnJlcSArPSAxNzEyMDA7CQkJLyogQWRkIDEwLjcgTUh6IElGIAkJKi8KIAlmcmVxIC89IDgwMDsJCQkvKiBDb252ZXJ0IHRvIDUwIGtIeiB1bml0cwkqLwogCi0JbXV0ZXhfbG9jaygmbG9jayk7CQkJLyogU3RvcCBvdGhlciBvcHMgaW50ZXJmZXJpbmcgKi8KLQotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5CQkqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5CQkqLwogCiAJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCS8qICAgOiBmcmVxdWVuY3kgYml0cyAoMS0xMykJKi8KIAkJaWYgKGZyZXEgJiAoMSA8PCBpKSkKLQkJCXNlbmRfMV9ieXRlIChpbywgZGV2KTsKKwkJCXNlbmRfMV9ieXRlKHJ0KTsKIAkJZWxzZQotCQkJc2VuZF8wX2J5dGUgKGlvLCBkZXYpOworCQkJc2VuZF8wX2J5dGUocnQpOwogCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTQ6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTU6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KIAotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE2OiBiYW5kIGRhdGEgMCAtIGFsd2F5cyAwICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTc6IGJhbmQgZGF0YSAxIC0gYWx3YXlzIDAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxODogYmFuZCBkYXRhIDIgLSBhbHdheXMgMCAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxNzogYmFuZCBkYXRhIDEgLSBhbHdheXMgMCAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE4OiBiYW5kIGRhdGEgMiAtIGFsd2F5cyAwICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTk6IHRpbWUgYmFzZSAtIGFsd2F5cyAwICAgKi8KIAotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDIwOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCi0Jc2VuZF8xX2J5dGUgKGlvLCBkZXYpOwkJLyogMjE6IHNwYWNpbmcgKDEgPSAyNSBrSHopICAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChpbywgZGV2KTsJCS8qIDIzOiBBTS9GTSAoRk0gPSAxLCBhbHdheXMpICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShydCk7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUocnQpOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KIAotCWlmICgoZGV2LT5jdXJ2b2wgPT0gMCkgfHwgKGRldi0+bXV0ZWQpKQotCQlvdXRiICgweGQwLCBpbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKi8KKwlpZiAocnQtPmN1cnZvbCA9PSAwIHx8IHJ0LT5tdXRlZCkKKwkJb3V0YigweGQwLCBydC0+aW8pOwkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICovCiAJZWxzZQotCQlvdXRiICgweGQ4LCBpbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbiAqLworCQlvdXRiKDB4ZDgsIHJ0LT5pbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbiAqLwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLwotfQorCWludCBzaWcgPSAxOwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMHhmZiwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsKKwlpZiAoaW5iKHJ0LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KKwkJc2lnID0gMDsKKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKKwlyZXR1cm4gc2lnOworfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1haW1zbGFiIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlJhZGlvVHJhY2siLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4ZmZmZipydF9nZXRzaWdzdHIocnQpOworCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIHJ0X2dldHNpZ3N0cihydCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlydC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlydF9zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CisJcnRfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0yOTMsMTQgKzI4NSwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmYsIDEsIDB4ZmYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMwOCwxNCArMjk3LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWN0cmwtPnZhbHVlID0gcnQtPm11dGVkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBydC0+Y3Vydm9sICogNjU1NDsKKwkJY3RybC0+dmFsdWUgPSBydC0+Y3Vydm9sOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjQsMzMgKzMxMywyMiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCiAJCQlydF9tdXRlKHJ0KTsKIAkJZWxzZQotCQkJcnRfc2V0dm9sKHJ0LHJ0LT5jdXJ2b2wpOworCQkJcnRfc2V0dm9sKHJ0LCBydC0+Y3Vydm9sKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJ0X3NldHZvbChydCxjdHJsLT52YWx1ZSk7CisJCXJ0X3NldHZvbChydCwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzU5LDM2ICszMzcsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcnRyYWNrX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRfZGV2aWNlIHJ0cmFja191bml0OwotCi1zdGF0aWMgaW50IHJ0cmFja19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcnRyYWNrX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHJ0cmFja19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcnRyYWNrX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHJ0cmFja19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBydHJhY2tfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcnRyYWNrX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQwNyw2NCArMzg3LDY5IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBydHJhY2tfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlJhZGlvVHJhY2sgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZydHJhY2tfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZydHJhY2tfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBydHJhY2tfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gJnJ0cmFja19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmcnQtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAicnRyYWNrIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJcnQtPmlvID0gaW87CisKKwlpZiAocnQtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAieW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGYgb3IgMHgzMGZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicnRyYWNrIikpCi0JewotCQlwcmludGsoS0VSTl9FUlIgInJ0cmFjazogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihydC0+aW8sIDIsICJydHJhY2siKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgcnQtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmcnRyYWNrX3JhZGlvLCAmcnRyYWNrX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihydC0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnRyYWNrX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RybGNweShydC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHJ0LT52ZGV2Lm5hbWUpKTsKKwlydC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXJ0LT52ZGV2LmZvcHMgPSAmcnRyYWNrX2ZvcHM7CisJcnQtPnZkZXYuaW9jdGxfb3BzID0gJnJ0cmFja19pb2N0bF9vcHM7CisJcnQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZydC0+dmRldiwgcnQpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnQtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnJ0LT52NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKHJ0LT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJBSU1TbGFiIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBSU1TbGFiIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgY2FyZCBkcml2ZXIuXG4iKTsKIAogCS8qIFNldCB1cCB0aGUgSS9PIGxvY2tpbmcgKi8KIAotCW11dGV4X2luaXQoJmxvY2spOworCW11dGV4X2luaXQoJnJ0LT5sb2NrKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KIAogCS8qIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYWxsIHRoZSB3YXkgZG93biAgKi8KLQlvdXRiKDB4NDgsIGlvKTsJCS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCisJb3V0YigweDQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KIAlzbGVlcF9kZWxheSgyMDAwMDAwKTsJLyogbWFrZSBzdXJlIGl0J3MgdG90YWxseSBkb3duCSovCi0Jb3V0YigweGMwLCBpbyk7CQkvKiBzdGVhZHkgdm9sdW1lLCBtdXRlIGNhcmQJKi8KLQlydHJhY2tfdW5pdC5jdXJ2b2wgPSAwOworCW91dGIoMHhjMCwgcnQtPmlvKTsJCS8qIHN0ZWFkeSB2b2x1bWUsIG11dGUgY2FyZAkqLwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIk0uS2lya3dvb2QiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwZiBvciAweDMwZikiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcnRyYWNrX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHJ0cmFja19leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFja19yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IHJ0cmFjayAqcnQgPSAmcnRyYWNrX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmcnQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnJ0LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24ocnQtPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQocnRyYWNrX2luaXQpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9ydHJhY2tfbW9kdWxlKTsKK21vZHVsZV9leGl0KHJ0cmFja19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggNTYwNGU4OC4uNDkyOTlmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCkBAIC0yOSwzMyArMjksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMHhmZiwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBenRlY2ggcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogYWNjZXB0YWJsZSBwb3J0czogMHgzNTAgKEpQMyBzaG9ydGVkKSwgMHgzNTggKEpQMyBvcGVuKSAqLwogCkBAIC02Niw1NSArNDgsNjQgQEAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fQVpURUNIX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiBzdGF0aWMgaW50IHJhZGlvX3dhaXRfdGltZSA9IDEwMDA7Ci1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CiAKLXN0cnVjdCBhel9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgQXp0ZWNoIGNhcmQgKDB4MzUwIG9yIDB4MzU4KSIpOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IGF6dGVjaAogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBzdGVyZW87CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IGF6dGVjaCBhenRlY2hfY2FyZDsKKwogc3RhdGljIGludCB2b2xjb252ZXJ0KGludCBsZXZlbCkKIHsKLQlsZXZlbD4+PTE0OwkJLyogTWFwIDE2Yml0cyBkb3duIHRvIDIgYml0ICovCi0JbGV2ZWwmPTM7CisJbGV2ZWwgPj49IDE0OwkJLyogTWFwIDE2Yml0cyBkb3duIHRvIDIgYml0ICovCisJbGV2ZWwgJj0gMzsKIAogCS8qIGNvbnZlcnQgdG8gY2FyZC1mcmllbmRseSB2YWx1ZXMgKi8KLQlzd2l0Y2ggKGxldmVsKQotCXsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToKLQkJCXJldHVybiAxOwotCQljYXNlIDI6Ci0JCQlyZXR1cm4gNDsKLQkJY2FzZSAzOgotCQkJcmV0dXJuIDU7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIDA7CisJY2FzZSAxOgorCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCXJldHVybiA0OworCWNhc2UgMzoKKwkJcmV0dXJuIDU7CiAJfQogCXJldHVybiAwOwkvKiBRdWlldGVuIGdjYyAqLwogfQogCi1zdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZSAoc3RydWN0IGF6X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2VuZF8wX2J5dGUoc3RydWN0IGF6dGVjaCAqYXopCiB7CiAJdWRlbGF5KHJhZGlvX3dhaXRfdGltZSk7Ci0Jb3V0Yl9wKDIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKLQlvdXRiX3AoNjQrMit2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOworCW91dGJfcCgyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKKwlvdXRiX3AoNjQgKyAyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUgKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMV9ieXRlKHN0cnVjdCBhenRlY2ggKmF6KQogewogCXVkZWxheSAocmFkaW9fd2FpdF90aW1lKTsKLQlvdXRiX3AoMTI4KzIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKLQlvdXRiX3AoMTI4KzY0KzIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKKwlvdXRiX3AoMTI4ICsgMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CisJb3V0Yl9wKDEyOCArIDY0ICsgMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CiB9CiAKLXN0YXRpYyBpbnQgYXpfc2V0dm9sKHN0cnVjdCBhel9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgYXpfc2V0dm9sKHN0cnVjdCBhenRlY2ggKmF6LCBpbnQgdm9sKQogewotCW11dGV4X2xvY2soJmxvY2spOwotCW91dGIgKHZvbGNvbnZlcnQodm9sKSwgaW8pOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCW91dGIodm9sY29udmVydCh2b2wpLCBhei0+aW8pOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjYsMTE2ICsxMTcsMTEwIEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgYXpfZ2V0c2lnc3RyKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXpfZ2V0c2lnc3RyKHN0cnVjdCBhenRlY2ggKmF6KQogewotCWlmIChpbmIoaW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50ICovCi0JCXJldHVybiAwOwotCXJldHVybiAxOwkJLyogc2lnbmFsIHByZXNlbnQgKi8KKwlpbnQgc2lnID0gMTsKKworCW11dGV4X2xvY2soJmF6LT5sb2NrKTsKKwlpZiAoaW5iKGF6LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQgKi8KKwkJc2lnID0gMDsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCi1zdGF0aWMgaW50IGF6X2dldHN0ZXJlbyhzdHJ1Y3QgYXpfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF6X2dldHN0ZXJlbyhzdHJ1Y3QgYXp0ZWNoICpheikKIHsKLQlpZiAoaW5iKGlvKSAmIDEpIAkvKiBiaXQgc2V0ID0gbW9ubyAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHN0ZXJlbyAqLworCWludCBzdGVyZW8gPSAxOworCisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCWlmIChpbmIoYXotPmlvKSAmIDEpIAkvKiBiaXQgc2V0ID0gbW9ubyAqLworCQlzdGVyZW8gPSAwOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOworCXJldHVybiBzdGVyZW87CiB9CiAKLXN0YXRpYyBpbnQgYXpfc2V0ZnJlcShzdHJ1Y3QgYXpfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQorc3RhdGljIGludCBhel9zZXRmcmVxKHN0cnVjdCBhenRlY2ggKmF6LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKIAlpbnQgIGk7CiAKKwltdXRleF9sb2NrKCZhei0+bG9jayk7CisKKwlhei0+Y3VyZnJlcSA9IGZyZXF1ZW5jeTsKIAlmcmVxdWVuY3kgKz0gMTcxMjAwOwkJLyogQWRkIDEwLjcgTUh6IElGCQkqLwogCWZyZXF1ZW5jeSAvPSA4MDA7CQkvKiBDb252ZXJ0IHRvIDUwIGtIeiB1bml0cwkqLwogCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5ICAgICAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogIDA6IExTQiBvZiBmcmVxdWVuY3kgICAgICAgKi8KIAogCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQkvKiAgIDogZnJlcXVlbmN5IGJpdHMgKDEtMTMpICAqLwogCQlpZiAoZnJlcXVlbmN5ICYgKDEgPDwgaSkpCi0JCQlzZW5kXzFfYnl0ZSAoZGV2KTsKKwkJCXNlbmRfMV9ieXRlKGF6KTsKIAkJZWxzZQotCQkJc2VuZF8wX2J5dGUgKGRldik7CisJCQlzZW5kXzBfYnl0ZShheik7CiAKLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KLQlpZiAoZGV2LT5zdGVyZW8pCQkvKiAxNzogc3RlcmVvICgxIHRvIGVuYWJsZSkgICAqLwotCQlzZW5kXzFfYnl0ZSAoZGV2KTsKKwlzZW5kXzBfYnl0ZShheik7CQkvKiAxNDogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE1OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KKwlpZiAoYXotPnN0ZXJlbykJCS8qIDE3OiBzdGVyZW8gKDEgdG8gZW5hYmxlKSAgICovCisJCXNlbmRfMV9ieXRlKGF6KTsKIAllbHNlCi0JCXNlbmRfMF9ieXRlIChkZXYpOworCQlzZW5kXzBfYnl0ZShheik7CiAKLQlzZW5kXzFfYnl0ZSAoZGV2KTsJCS8qIDE4OiBiYW5kIGRhdGEgMSAtIHVua25vd24gICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxOTogdGltZSBiYXNlIC0gYWx3YXlzIDAgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KLQlzZW5kXzFfYnl0ZSAoZGV2KTsJCS8qIDIxOiBzcGFjaW5nICgxID0gMjUga0h6KSAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChkZXYpOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KKwlzZW5kXzFfYnl0ZShheik7CQkvKiAxODogYmFuZCBkYXRhIDEgLSB1bmtub3duICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShheik7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUoYXopOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KIAogCS8qIGxhdGNoIGZyZXF1ZW5jeSAqLwogCi0JdWRlbGF5IChyYWRpb193YWl0X3RpbWUpOwotCW91dGJfcCgxMjgrNjQrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKKwl1ZGVsYXkocmFkaW9fd2FpdF90aW1lKTsKKwlvdXRiX3AoMTI4ICsgNjQgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYXp0ZWNoIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQlzdHJsY3B5KHYtPmNhcmQsICJBenRlY2ggUmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWF6dGVjaCIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJBenRlY2ggUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCXYtPnJhbmdlbG93PSg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoPSgxMDgqMTYwMDApOwotCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmKGF6X2dldHN0ZXJlbyhheikpCisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYgKGF6X2dldHN0ZXJlbyhheikpCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbD0weEZGRkYqYXpfZ2V0c2lnc3RyKGF6KTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiBhel9nZXRzaWdzdHIoYXopOwogCiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCB2aWRpb2Nfc190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQpAQCAtMjQ2LDExMyArMjMxLDEwNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOwogfQogCi0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQorCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWF6LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWF6X3NldGZyZXEoYXosIGF6LT5jdXJmcmVxKTsKKwlhel9zZXRmcmVxKGF6LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuICgwKTsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmYsIDEsIDB4ZmYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWlmIChhei0+Y3Vydm9sPT0wKQotCQkJCWN0cmwtPnZhbHVlPTE7Ci0JCQllbHNlCi0JCQkJY3RybC0+dmFsdWU9MDsKLQkJCXJldHVybiAoMCk7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY3RybC0+dmFsdWU9YXotPmN1cnZvbCAqIDY1NTQ7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGF6LT5jdXJ2b2wgPT0gMCkKKwkJCWN0cmwtPnZhbHVlID0gMTsKKwkJZWxzZQorCQkJY3RybC0+dmFsdWUgPSAwOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBhei0+Y3Vydm9sICogNjU1NDsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJaWYgKGN0cmwtPnZhbHVlKSB7Ci0JCQkJYXpfc2V0dm9sKGF6LDApOwotCQkJfSBlbHNlIHsKLQkJCQlhel9zZXR2b2woYXosYXotPmN1cnZvbCk7Ci0JCQl9Ci0JCQlyZXR1cm4gKDApOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCWF6X3NldHZvbChheixjdHJsLT52YWx1ZSk7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlKQorCQkJYXpfc2V0dm9sKGF6LCAwKTsKKwkJZWxzZQorCQkJYXpfc2V0dm9sKGF6LCBhei0+Y3Vydm9sKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWF6X3NldHZvbChheiwgY3RybC0+dmFsdWUpOworCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXpfZGV2aWNlIGF6dGVjaF91bml0OwotCi1zdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgYXp0ZWNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmF6dGVjaF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgYXp0ZWNoX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZhenRlY2hfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGF6dGVjaF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBhenRlY2hfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gYXp0ZWNoX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGF6dGVjaF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGF6dGVjaF9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zNzEsNTcgKzM1MCw2MCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgYXp0ZWNoX3JhZGlvID0gewotCS5uYW1lCQk9ICJBenRlY2ggcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZhenRlY2hfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZhenRlY2hfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsYXp0ZWNoX3JhZGlvLmRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKLQogc3RhdGljIGludCBfX2luaXQgYXp0ZWNoX2luaXQodm9pZCkKIHsKLQlpZihpbz09LTEpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9ICZhenRlY2hfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmF6LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgImF6dGVjaCIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWF6LT5pbyA9IGlvOworCisJaWYgKGF6LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzUwIG9yIDB4MzU4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgImF6dGVjaCIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJhenRlY2g6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24oYXotPmlvLCAyLCAiYXp0ZWNoIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGF6LT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JbXV0ZXhfaW5pdCgmbG9jayk7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJmF6dGVjaF9yYWRpbywgJmF6dGVjaF91bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sMik7CisJbXV0ZXhfaW5pdCgmYXotPmxvY2spOworCXN0cmxjcHkoYXotPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihhei0+dmRldi5uYW1lKSk7CisJYXotPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlhei0+dmRldi5mb3BzID0gJmF6dGVjaF9mb3BzOworCWF6LT52ZGV2LmlvY3RsX29wcyA9ICZhenRlY2hfaW9jdGxfb3BzOworCWF6LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmYXotPnZkZXYsIGF6KTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQXp0ZWNoIHJhZGlvIGNhcmQgZHJpdmVyIHYxLjAwLzE5OTkwMjI0IHJrcm9sbEBleHBsb2l0cy5vcmdcbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkF6dGVjaCByYWRpbyBjYXJkIGRyaXZlciB2MS4wMC8xOTk5MDIyNCBya3JvbGxAZXhwbG9pdHMub3JnXG4iKTsKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0Jb3V0YiAoMCwgaW8pOworCW91dGIoMCwgYXotPmlvKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBenRlY2ggcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBBenRlY2ggY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhenRlY2hfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGF6dGVjaF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IGF6dGVjaCAqYXogPSAmYXp0ZWNoX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYXotPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmF6LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQoYXp0ZWNoX2luaXQpOwotbW9kdWxlX2V4aXQoYXp0ZWNoX2NsZWFudXApOworbW9kdWxlX2V4aXQoYXp0ZWNoX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IGNiMzA3NWEuLmQzMGZjMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKQEAgLTM1LDMzMyArMzUsMzE4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyogVjRMMiBBUEkgZGVmcwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCitNT0RVTEVfQVVUSE9SKCJGcmVkIEdsZWFzb24sIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgQURTIENhZGV0IEFNL0ZNL1JEUyByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlvID0gLTE7CQkvKiBkZWZhdWx0IHRvIGlzYXBucCBhY3RpdmF0aW9uICovCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiBDYWRldCBjYXJkICgweDMzMCwweDMzMiwweDMzNCwweDMzNiwweDMzOCwweDMzYSwweDMzYywweDMzZSkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBDQURFVF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDMsIDMpCiAKICNkZWZpbmUgUkRTX0JVRkZFUiAyNTYKICNkZWZpbmUgUkRTX1JYX0ZMQUcgMQogI2RlZmluZSBNQlNfUlhfRkxBRyAyCiAKLSNkZWZpbmUgQ0FERVRfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDMsMykKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQorc3RydWN0IGNhZGV0IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKKwlpbnQgdXNlcnM7CisJaW50IGN1cnR1bmVyOworCWludCB0dW5lc3RhdDsKKwlpbnQgc2lnc3RyZW5ndGg7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWFkdGltZXI7CisJX191OCByZHNpbiwgcmRzb3V0LCByZHNzdGF0OworCXVuc2lnbmVkIGNoYXIgcmRzYnVmW1JEU19CVUZGRVJdOworCXN0cnVjdCBtdXRleCBsb2NrOworCWludCByZWFkaW5nOwogfTsKIAotc3RhdGljIGludCBpbz0tMTsJCS8qIGRlZmF1bHQgdG8gaXNhcG5wIGFjdGl2YXRpb24gKi8KLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBpbnQgdXNlcnM7Ci1zdGF0aWMgaW50IGN1cnR1bmVyOwotc3RhdGljIGludCB0dW5lc3RhdDsKLXN0YXRpYyBpbnQgc2lnc3RyZW5ndGg7Ci1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCByZWFkdGltZXI7Ci1zdGF0aWMgX191OCByZHNpbiwgcmRzb3V0LCByZHNzdGF0Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmRzYnVmW1JEU19CVUZGRVJdOwotc3RhdGljIHNwaW5sb2NrX3QgY2FkZXRfaW9fbG9jazsKLQotc3RhdGljIGludCBjYWRldF9wcm9iZSh2b2lkKTsKK3N0YXRpYyBzdHJ1Y3QgY2FkZXQgY2FkZXRfY2FyZDsKIAogLyoKICAqIFNpZ25hbCBTdHJlbmd0aCBUaHJlc2hvbGQgVmFsdWVzCiAgKiBUaGUgVjRMIEFQSSBzcGVjIGRvZXMgbm90IGRlZmluZSBhbnkgcGFydGljdWxhciB1bml0IGZvciB0aGUgc2lnbmFsCiAgKiBzdHJlbmd0aCB2YWx1ZS4gIFRoZXNlIHZhbHVlcyBhcmUgaW4gbWljcm92b2x0cyBvZiBSRiBhdCB0aGUgdHVuZXIncyBpbnB1dC4KICAqLwotc3RhdGljIF9fdTE2IHNpZ3RhYmxlWzJdWzRdPXt7NSwxMCwzMCwxNTB9LHsyOCw0MCw2MywxMDAwfX07CitzdGF0aWMgX191MTYgc2lndGFibGVbMl1bNF0gPSB7CisJeyAgNSwgMTAsIDMwLCAgMTUwIH0sCisJeyAyOCwgNDAsIDYzLCAxMDAwIH0KK307CiAKIAotc3RhdGljIGludAotY2FkZXRfZ2V0c3RlcmVvKHZvaWQpCitzdGF0aWMgaW50IGNhZGV0X2dldHN0ZXJlbyhzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgcmV0ID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQlpZihjdXJ0dW5lciAhPSAwKQkvKiBPbmx5IEZNIGhhcyBzdGVyZW8gY2FwYWJpbGl0eSEgKi8KKworCWlmIChkZXYtPmN1cnR1bmVyICE9IDApCS8qIE9ubHkgRk0gaGFzIHN0ZXJlbyBjYXBhYmlsaXR5ISAqLwogCQlyZXR1cm4gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0Jb3V0Yig3LGlvKTsgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQlpZiggKGluYihpbysxKSAmIDB4NDApID09IDApCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICgoaW5iKGRldi0+aW8gKyAxKSAmIDB4NDApID09IDApCiAJCXJldCA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAotY2FkZXRfZ2V0dHVuZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNhZGV0X2dldHR1bmUoc3RydWN0IGNhZGV0ICpkZXYpCiB7Ci0JaW50IGN1cnZvbCxpOwotCXVuc2lnbmVkIGZpZm89MDsKKwlpbnQgY3Vydm9sLCBpOworCXVuc2lnbmVkIGZpZm8gPSAwOwogCiAJLyoKIAkgKiBQcmVwYXJlIGZvciByZWFkCiAJICovCiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlvdXRiKDcsaW8pOyAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWN1cnZvbD1pbmIoaW8rMSk7IC8qIFNhdmUgY3VycmVudCB2b2x1bWUvbXV0ZSBzZXR0aW5nICovCi0Jb3V0YigweDAwLGlvKzEpOyAgLyogRW5zdXJlIFdSSVRFLUVOQUJMRSBpcyBMT1cgKi8KLQl0dW5lc3RhdD0weGZmZmY7CisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwljdXJ2b2wgPSBpbmIoZGV2LT5pbyArIDEpOyAvKiBTYXZlIGN1cnJlbnQgdm9sdW1lL211dGUgc2V0dGluZyAqLworCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOyAgLyogRW5zdXJlIFdSSVRFLUVOQUJMRSBpcyBMT1cgKi8KKwlkZXYtPnR1bmVzdGF0ID0gMHhmZmZmOwogCiAJLyoKIAkgKiBSZWFkIHRoZSBzaGlmdCByZWdpc3RlcgogCSAqLwotCWZvcihpPTA7aTwyNTtpKyspIHsKLQkJZmlmbz0oZmlmbzw8MSl8KChpbmIoaW8rMSk+PjcpJjB4MDEpOwotCQlpZihpPDI0KSB7Ci0JCQlvdXRiKDB4MDEsaW8rMSk7Ci0JCQl0dW5lc3RhdCY9aW5iKGlvKzEpOwotCQkJb3V0YigweDAwLGlvKzEpOworCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CisJCWZpZm8gPSAoZmlmbyA8PCAxKSB8ICgoaW5iKGRldi0+aW8gKyAxKSA+PiA3KSAmIDB4MDEpOworCQlpZiAoaSA8IDI0KSB7CisJCQlvdXRiKDB4MDEsIGRldi0+aW8gKyAxKTsKKwkJCWRldi0+dHVuZXN0YXQgJj0gaW5iKGRldi0+aW8gKyAxKTsKKwkJCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOwogCQl9CiAJfQogCiAJLyoKIAkgKiBSZXN0b3JlIHZvbHVtZS9tdXRlIHNldHRpbmcKIAkgKi8KLQlvdXRiKGN1cnZvbCxpbysxKTsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJb3V0YihjdXJ2b2wsIGRldi0+aW8gKyAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gZmlmbzsKIH0KIAotc3RhdGljIHVuc2lnbmVkCi1jYWRldF9nZXRmcmVxKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2FkZXRfZ2V0ZnJlcShzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBmcmVxPTAsdGVzdCxmaWZvPTA7CisJdW5zaWduZWQgZnJlcSA9IDAsIHRlc3QsIGZpZm8gPSAwOwogCiAJLyoKIAkgKiBSZWFkIGN1cnJlbnQgdHVuaW5nCiAJICovCi0JZmlmbz1jYWRldF9nZXR0dW5lKCk7CisJZmlmbyA9IGNhZGV0X2dldHR1bmUoZGV2KTsKIAogCS8qCiAJICogQ29udmVydCB0byBhY3R1YWwgZnJlcXVlbmN5CiAJICovCi0JaWYoY3VydHVuZXI9PTApIHsgICAgLyogRk0gKi8KLQkJdGVzdD0xMjUwMDsKLQkJZm9yKGk9MDtpPDE0O2krKykgewotCQkJaWYoKGZpZm8mMHgwMSkhPTApIHsKLQkJCQlmcmVxKz10ZXN0OwotCQkJfQotCQkJdGVzdD10ZXN0PDwxOwotCQkJZmlmbz1maWZvPj4xOworCWlmIChkZXYtPmN1cnR1bmVyID09IDApIHsgICAgLyogRk0gKi8KKwkJdGVzdCA9IDEyNTAwOworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaWYgKChmaWZvICYgMHgwMSkgIT0gMCkKKwkJCQlmcmVxICs9IHRlc3Q7CisJCQl0ZXN0ID0gdGVzdCA8PCAxOworCQkJZmlmbyA9IGZpZm8gPj4gMTsKIAkJfQotCQlmcmVxLT0xMDcwMDAwMDsgICAgICAgICAgIC8qIElGIGZyZXF1ZW5jeSBpcyAxMC43IE1IeiAqLwotCQlmcmVxPShmcmVxKjE2KS8xMDAwMDAwOyAgIC8qIE1ha2UgaXQgMS8xNiBNSHogKi8KKwkJZnJlcSAtPSAxMDcwMDAwMDsgICAgICAgICAgIC8qIElGIGZyZXF1ZW5jeSBpcyAxMC43IE1IeiAqLworCQlmcmVxID0gKGZyZXEgKiAxNikgLyAxMDAwMDAwOyAgIC8qIE1ha2UgaXQgMS8xNiBNSHogKi8KIAl9Ci0JaWYoY3VydHVuZXI9PTEpIHsgICAgLyogQU0gKi8KLQkJZnJlcT0oKGZpZm8mMHg3ZmZmKS0yMDEwKSoxNjsKLQl9CisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMSkgICAgLyogQU0gKi8KKwkJZnJlcSA9ICgoZmlmbyAmIDB4N2ZmZikgLSAyMDEwKSAqIDE2OwogCiAJcmV0dXJuIGZyZXE7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWRldF9zZXR0dW5lKHVuc2lnbmVkIGZpZm8pCitzdGF0aWMgdm9pZCBjYWRldF9zZXR0dW5lKHN0cnVjdCBjYWRldCAqZGV2LCB1bnNpZ25lZCBmaWZvKQogewogCWludCBpOwogCXVuc2lnbmVkIHRlc3Q7CiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCiAJLyoKIAkgKiBXcml0ZSB0aGUgc2hpZnQgcmVnaXN0ZXIKIAkgKi8KLQl0ZXN0PTA7Ci0JdGVzdD0oZmlmbz4+MjMpJjB4MDI7ICAgICAgLyogQWxpZ24gZGF0YSBmb3IgU0RPICovCi0JdGVzdHw9MHgxYzsgICAgICAgICAgICAgICAgLyogU0RNPTEsIFNXRT0xLCBTRU49MSwgU0NLPTAgKi8KLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCW91dGIodGVzdCxpbysxKTsgICAgICAgICAgIC8qIEluaXRpYWxpemUgZm9yIHdyaXRlICovCi0JZm9yKGk9MDtpPDI1O2krKykgewotCQl0ZXN0fD0weDAxOyAgICAgICAgICAgICAgLyogVG9nZ2xlIFNDSyBIaWdoICovCi0JCW91dGIodGVzdCxpbysxKTsKLQkJdGVzdCY9MHhmZTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgTG93ICovCi0JCW91dGIodGVzdCxpbysxKTsKLQkJZmlmbz1maWZvPDwxOyAgICAgICAgICAgIC8qIFByZXBhcmUgdGhlIG5leHQgYml0ICovCi0JCXRlc3Q9MHgxY3woKGZpZm8+PjIzKSYweDAyKTsKLQkJb3V0Yih0ZXN0LGlvKzEpOworCXRlc3QgPSAwOworCXRlc3QgPSAoZmlmbyA+PiAyMykgJiAweDAyOyAgICAgIC8qIEFsaWduIGRhdGEgZm9yIFNETyAqLworCXRlc3QgfD0gMHgxYzsgICAgICAgICAgICAgICAgLyogU0RNPTEsIFNXRT0xLCBTRU49MSwgU0NLPTAgKi8KKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3Igd3JpdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgeworCQl0ZXN0IHw9IDB4MDE7ICAgICAgICAgICAgICAvKiBUb2dnbGUgU0NLIEhpZ2ggKi8KKwkJb3V0Yih0ZXN0LCBkZXYtPmlvICsgMSk7CisJCXRlc3QgJj0gMHhmZTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgTG93ICovCisJCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOworCQlmaWZvID0gZmlmbyA8PCAxOyAgICAgICAgICAgIC8qIFByZXBhcmUgdGhlIG5leHQgYml0ICovCisJCXRlc3QgPSAweDFjIHwgKChmaWZvID4+IDIzKSAmIDB4MDIpOworCQlvdXRiKHRlc3QsIGRldi0+aW8gKyAxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQKLWNhZGV0X3NldGZyZXEodW5zaWduZWQgZnJlcSkKK3N0YXRpYyB2b2lkIGNhZGV0X3NldGZyZXEoc3RydWN0IGNhZGV0ICpkZXYsIHVuc2lnbmVkIGZyZXEpCiB7CiAJdW5zaWduZWQgZmlmbzsKLQlpbnQgaSxqLHRlc3Q7CisJaW50IGksIGosIHRlc3Q7CiAJaW50IGN1cnZvbDsKIAogCS8qCiAJICogRm9ybXVsYXRlIGEgZmlmbyBjb21tYW5kCiAJICovCi0JZmlmbz0wOwotCWlmKGN1cnR1bmVyPT0wKSB7ICAgIC8qIEZNICovCi0JCXRlc3Q9MTAyNDAwOwotCQlmcmVxPShmcmVxKjEwMDApLzE2OyAgICAgICAvKiBNYWtlIGl0IGtIeiAqLwotCQlmcmVxKz0xMDcwMDsgICAgICAgICAgICAgICAvKiBJRiBpcyAxMDcwMCBrSHogKi8KLQkJZm9yKGk9MDtpPDE0O2krKykgewotCQkJZmlmbz1maWZvPDwxOwotCQkJaWYoZnJlcT49dGVzdCkgewotCQkJCWZpZm98PTB4MDE7Ci0JCQkJZnJlcS09dGVzdDsKKwlmaWZvID0gMDsKKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAwKSB7ICAgIC8qIEZNICovCisJCXRlc3QgPSAxMDI0MDA7CisJCWZyZXEgPSAoZnJlcSAqIDEwMDApIC8gMTY7ICAgICAgIC8qIE1ha2UgaXQga0h6ICovCisJCWZyZXEgKz0gMTA3MDA7ICAgICAgICAgICAgICAgLyogSUYgaXMgMTA3MDAga0h6ICovCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlmaWZvID0gZmlmbyA8PCAxOworCQkJaWYgKGZyZXEgPj0gdGVzdCkgeworCQkJCWZpZm8gfD0gMHgwMTsKKwkJCQlmcmVxIC09IHRlc3Q7CiAJCQl9Ci0JCQl0ZXN0PXRlc3Q+PjE7CisJCQl0ZXN0ID0gdGVzdCA+PiAxOwogCQl9CiAJfQotCWlmKGN1cnR1bmVyPT0xKSB7ICAgIC8qIEFNICovCi0JCWZpZm89KGZyZXEvMTYpKzIwMTA7ICAgICAgICAgICAgLyogTWFrZSBpdCBrSHogKi8KLQkJZmlmb3w9MHgxMDAwMDA7ICAgICAgICAgICAgLyogU2VsZWN0IEFNIEJhbmQgKi8KKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAxKSB7ICAgIC8qIEFNICovCisJCWZpZm8gPSAoZnJlcSAvIDE2KSArIDIwMTA7ICAgICAgICAgICAgLyogTWFrZSBpdCBrSHogKi8KKwkJZmlmbyB8PSAweDEwMDAwMDsgICAgICAgICAgICAvKiBTZWxlY3QgQU0gQmFuZCAqLwogCX0KIAogCS8qCiAJICogU2F2ZSBjdXJyZW50IHZvbHVtZS9tdXRlIHNldHRpbmcKIAkgKi8KIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQljdXJ2b2w9aW5iKGlvKzEpOwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJY3Vydm9sID0gaW5iKGRldi0+aW8gKyAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAkvKgogCSAqIFR1bmUgdGhlIGNhcmQKIAkgKi8KLQlmb3Ioaj0zO2o+LTE7ai0tKSB7Ci0JCWNhZGV0X3NldHR1bmUoZmlmb3woajw8MTYpKTsKKwlmb3IgKGogPSAzOyBqID4gLTE7IGotLSkgeworCQljYWRldF9zZXR0dW5lKGRldiwgZmlmbyB8IChqIDw8IDE2KSk7CiAKLQkJc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQkJb3V0Yig3LGlvKTsgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCQlvdXRiKGN1cnZvbCxpbysxKTsKLQkJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJCW91dGIoY3Vydm9sLCBkZXYtPmlvICsgMSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQltc2xlZXAoMTAwKTsKIAotCQljYWRldF9nZXR0dW5lKCk7Ci0JCWlmKCh0dW5lc3RhdCAmIDB4NDApID09IDApIHsgICAvKiBUdW5lZCAqLwotCQkJc2lnc3RyZW5ndGg9c2lndGFibGVbY3VydHVuZXJdW2pdOworCQljYWRldF9nZXR0dW5lKGRldik7CisJCWlmICgoZGV2LT50dW5lc3RhdCAmIDB4NDApID09IDApIHsgICAvKiBUdW5lZCAqLworCQkJZGV2LT5zaWdzdHJlbmd0aCA9IHNpZ3RhYmxlW2Rldi0+Y3VydHVuZXJdW2pdOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCXNpZ3N0cmVuZ3RoPTA7CisJZGV2LT5zaWdzdHJlbmd0aCA9IDA7CiB9CiAKIAotc3RhdGljIGludAotY2FkZXRfZ2V0dm9sKHZvaWQpCitzdGF0aWMgaW50IGNhZGV0X2dldHZvbChzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JaWYoKGluYihpbyArIDEpICYgMHgyMCkgIT0gMCkKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICgoaW5iKGRldi0+aW8gKyAxKSAmIDB4MjApICE9IDApCiAJCXJldCA9IDB4ZmZmZjsKIAotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgdm9pZAotY2FkZXRfc2V0dm9sKGludCB2b2wpCitzdGF0aWMgdm9pZCBjYWRldF9zZXR2b2woc3RydWN0IGNhZGV0ICpkZXYsIGludCB2b2wpCiB7Ci0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWlmKHZvbD4wKQotCQlvdXRiKDB4MjAsaW8rMSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICh2b2wgPiAwKQorCQlvdXRiKDB4MjAsIGRldi0+aW8gKyAxKTsKIAllbHNlCi0JCW91dGIoMHgwMCxpbysxKTsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQKLWNhZGV0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgY2FkZXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JLyoKLQkgKiBTZXJ2aWNlIHRoZSBSRFMgZmlmbwotCSAqLworCXN0cnVjdCBjYWRldCAqZGV2ID0gKHZvaWQgKilkYXRhOwogCi0JaWYoc3Bpbl90cnlsb2NrKCZjYWRldF9pb19sb2NrKSkKLQl7Ci0JCW91dGIoMHgzLGlvKTsgICAgICAgLyogU2VsZWN0IFJEUyBEZWNvZGVyIENvbnRyb2wgKi8KLQkJaWYoKGluYihpbysxKSYweDIwKSE9MCkgeworCS8qIFNlcnZpY2UgdGhlIFJEUyBmaWZvICovCisJaWYgKG11dGV4X3RyeWxvY2soJmRldi0+bG9jaykpIHsKKwkJb3V0YigweDMsIGRldi0+aW8pOyAgICAgICAvKiBTZWxlY3QgUkRTIERlY29kZXIgQ29udHJvbCAqLworCQlpZiAoKGluYihkZXYtPmlvICsgMSkgJiAweDIwKSAhPSAwKQogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiY2FkZXQ6IFJEUyBmaWZvIG92ZXJmbG93XG4iKTsKLQkJfQotCQlvdXRiKDB4ODAsaW8pOyAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLwotCQl3aGlsZSgoaW5iKGlvKSYweDgwKSE9MCkgewotCQkJcmRzYnVmW3Jkc2luXT1pbmIoaW8rMSk7Ci0JCQlpZihyZHNpbj09cmRzb3V0KQorCQlvdXRiKDB4ODAsIGRldi0+aW8pOyAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLworCQl3aGlsZSAoKGluYihkZXYtPmlvKSAmIDB4ODApICE9IDApIHsKKwkJCWRldi0+cmRzYnVmW2Rldi0+cmRzaW5dID0gaW5iKGRldi0+aW8gKyAxKTsKKwkJCWlmIChkZXYtPnJkc2luID09IGRldi0+cmRzb3V0KQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhZGV0OiBSRFMgYnVmZmVyIG92ZXJmbG93XG4iKTsKIAkJCWVsc2UKLQkJCQlyZHNpbisrOworCQkJCWRldi0+cmRzaW4rKzsKIAkJfQotCQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAl9CiAKIAkvKgogCSAqIFNlcnZpY2UgcGVuZGluZyByZWFkCiAJICovCi0JaWYoIHJkc2luIT1yZHNvdXQpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmVhZF9xdWV1ZSk7CisJaWYgKGRldi0+cmRzaW4gIT0gZGV2LT5yZHNvdXQpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5yZWFkX3F1ZXVlKTsKIAogCS8qCiAJICogQ2xlYW4gdXAgYW5kIGV4aXQKIAkgKi8KLQlpbml0X3RpbWVyKCZyZWFkdGltZXIpOwotCXJlYWR0aW1lci5mdW5jdGlvbj1jYWRldF9oYW5kbGVyOwotCXJlYWR0aW1lci5kYXRhPSh1bnNpZ25lZCBsb25nKTA7Ci0JcmVhZHRpbWVyLmV4cGlyZXM9amlmZmllcyttc2Vjc190b19qaWZmaWVzKDUwKTsKLQlhZGRfdGltZXIoJnJlYWR0aW1lcik7CisJaW5pdF90aW1lcigmZGV2LT5yZWFkdGltZXIpOworCWRldi0+cmVhZHRpbWVyLmZ1bmN0aW9uID0gY2FkZXRfaGFuZGxlcjsKKwlkZXYtPnJlYWR0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpMDsKKwlkZXYtPnJlYWR0aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCWFkZF90aW1lcigmZGV2LT5yZWFkdGltZXIpOwogfQogCiAKLQotc3RhdGljIHNzaXplX3QKLWNhZGV0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IGNhZGV0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgaT0wOworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBjaGFyIHJlYWRidWZbUkRTX0JVRkZFUl07CisJaW50IGkgPSAwOwogCi0JaWYocmRzc3RhdD09MCkgewotCQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCQlyZHNzdGF0PTE7Ci0JCW91dGIoMHg4MCxpbyk7ICAgICAgICAvKiBTZWxlY3QgUkRTIGZpZm8gKi8KLQkJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOwotCQlpbml0X3RpbWVyKCZyZWFkdGltZXIpOwotCQlyZWFkdGltZXIuZnVuY3Rpb249Y2FkZXRfaGFuZGxlcjsKLQkJcmVhZHRpbWVyLmRhdGE9KHVuc2lnbmVkIGxvbmcpMDsKLQkJcmVhZHRpbWVyLmV4cGlyZXM9amlmZmllcyttc2Vjc190b19qaWZmaWVzKDUwKTsKLQkJYWRkX3RpbWVyKCZyZWFkdGltZXIpOworCWlmIChkZXYtPnJkc3N0YXQgPT0gMCkgeworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlkZXYtPnJkc3N0YXQgPSAxOworCQlvdXRiKDB4ODAsIGRldi0+aW8pOyAgICAgICAgLyogU2VsZWN0IFJEUyBmaWZvICovCisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJaW5pdF90aW1lcigmZGV2LT5yZWFkdGltZXIpOworCQlkZXYtPnJlYWR0aW1lci5mdW5jdGlvbiA9IGNhZGV0X2hhbmRsZXI7CisJCWRldi0+cmVhZHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJCWRldi0+cmVhZHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MCk7CisJCWFkZF90aW1lcigmZGV2LT5yZWFkdGltZXIpOwogCX0KLQlpZihyZHNpbj09cmRzb3V0KSB7CisJaWYgKGRldi0+cmRzaW4gPT0gZGV2LT5yZHNvdXQpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcmVhZF9xdWV1ZSk7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmRldi0+cmVhZF9xdWV1ZSk7CiAJfQotCXdoaWxlKCBpPGNvdW50ICYmIHJkc2luIT1yZHNvdXQpCi0JCXJlYWRidWZbaSsrXT1yZHNidWZbcmRzb3V0KytdOworCXdoaWxlIChpIDwgY291bnQgJiYgZGV2LT5yZHNpbiAhPSBkZXYtPnJkc291dCkKKwkJcmVhZGJ1ZltpKytdID0gZGV2LT5yZHNidWZbZGV2LT5yZHNvdXQrK107CiAKLQlpZiAoY29weV90b191c2VyKGRhdGEscmVhZGJ1ZixpKSkKKwlpZiAoY29weV90b191c2VyKGRhdGEsIHJlYWRidWYsIGkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gaTsKIH0KQEAgLTM3MCwzOCArMzU1LDQwIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXYtPmNhcGFiaWxpdGllcyA9Ci0JCVY0TDJfQ0FQX1RVTkVSIHwKLQkJVjRMMl9DQVBfUkVBRFdSSVRFOworCXN0cmxjcHkodi0+ZHJpdmVyLCAiQURTIENhZGV0Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIkFEUyBDYWRldCIsIHNpemVvZih2LT5jYXJkKSk7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBDQURFVF9WRVJTSU9OOwotCXN0cmNweSh2LT5kcml2ZXIsICJBRFMgQ2FkZXQiKTsKLQlzdHJjcHkodi0+Y2FyZCwgIkFEUyBDYWRldCIpOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU8gfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJc3dpdGNoICh2LT5pbmRleCkgewogCWNhc2UgMDoKLQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CiAJCXYtPnJhbmdlbG93ID0gMTQwMDsgICAgIC8qIDg3LjUgTUh6ICovCiAJCXYtPnJhbmdlaGlnaCA9IDE3Mjg7ICAgIC8qIDEwOC4wIE1IeiAqLwotCQl2LT5yeHN1YmNoYW5zPWNhZGV0X2dldHN0ZXJlbygpOwotCQlzd2l0Y2ggKHYtPnJ4c3ViY2hhbnMpeworCQl2LT5yeHN1YmNoYW5zID0gY2FkZXRfZ2V0c3RlcmVvKGRldik7CisJCXN3aXRjaCAodi0+cnhzdWJjaGFucykgewogCQljYXNlIFY0TDJfVFVORVJfU1VCX01PTk86CiAJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1RVTkVSX1NVQl9TVEVSRU86CiAJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OiA7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIDE6Ci0JCXN0cmNweSh2LT5uYW1lLCAiQU0iKTsKKwkJc3RybGNweSh2LT5uYW1lLCAiQU0iLCBzaXplb2Yodi0+bmFtZSkpOwogCQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCQl2LT5yYW5nZWxvdyA9IDgzMjA7ICAgICAgLyogNTIwIGtIeiAqLwogCQl2LT5yYW5nZWhpZ2ggPSAyNjQwMDsgICAgLyogMTY1MCBrSHogKi8KQEAgLTQxMSwyNSArMzk4LDI5IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXYtPnNpZ25hbCA9IHNpZ3N0cmVuZ3RoOyAvKiBXZSBtaWdodCBuZWVkIHRvIG1vZGlmeSBzY2FsaW5nIG9mIHRoaXMgKi8KKwl2LT5zaWduYWwgPSBkZXYtPnNpZ3N0cmVuZ3RoOyAvKiBXZSBtaWdodCBuZWVkIHRvIG1vZGlmeSBzY2FsaW5nIG9mIHRoaXMgKi8KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZigodi0+aW5kZXggIT0gMCkmJih2LT5pbmRleCAhPSAxKSkKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlpZiAodi0+aW5kZXggIT0gMCAmJiB2LT5pbmRleCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKLQljdXJ0dW5lciA9IHYtPmluZGV4OworCWRldi0+Y3VydHVuZXIgPSB2LT5pbmRleDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCWYtPnR1bmVyID0gY3VydHVuZXI7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHVuZXIgPSBkZXYtPmN1cnR1bmVyOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IGNhZGV0X2dldGZyZXEoKTsKKwlmLT5mcmVxdWVuY3kgPSBjYWRldF9nZXRmcmVxKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNywyNyArNDI4LDI2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYoKGN1cnR1bmVyPT0wKSYmKChmLT5mcmVxdWVuY3k8MTQwMCl8fChmLT5mcmVxdWVuY3k+MTcyOCkpKQorCWlmIChkZXYtPmN1cnR1bmVyID09IDAgJiYgKGYtPmZyZXF1ZW5jeSA8IDE0MDAgfHwgZi0+ZnJlcXVlbmN5ID4gMTcyOCkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmKChjdXJ0dW5lcj09MSkmJigoZi0+ZnJlcXVlbmN5PDgzMjApfHwoZi0+ZnJlcXVlbmN5PjI2NDAwKSkpCisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMSAmJiAoZi0+ZnJlcXVlbmN5IDwgODMyMCB8fCBmLT5mcmVxdWVuY3kgPiAyNjQwMCkpCiAJCXJldHVybiAtRUlOVkFMOwotCWNhZGV0X3NldGZyZXEoZi0+ZnJlcXVlbmN5KTsKKwljYWRldF9zZXRmcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMHhmZiwgMSwgMHhmZik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtNDY1LDEyICs0NTUsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN3aXRjaCAoY3RybC0+aWQpeworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IC8qIFRPRE86IEhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwotCQljdHJsLT52YWx1ZSA9IChjYWRldF9nZXR2b2woKSA9PSAwKTsKKwkJY3RybC0+dmFsdWUgPSAoY2FkZXRfZ2V0dm9sKGRldikgPT0gMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljdHJsLT52YWx1ZSA9IGNhZGV0X2dldHZvbCgpOworCQljdHJsLT52YWx1ZSA9IGNhZGV0X2dldHZvbChkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4MSwxNSArNDczLDE3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKXsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IC8qIFRPRE86IEhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQljYWRldF9zZXR2b2woMCk7CisJCQljYWRldF9zZXR2b2woZGV2LCAwKTsKIAkJZWxzZQotCQkJY2FkZXRfc2V0dm9sKDB4ZmZmZik7CisJCQljYWRldF9zZXR2b2woZGV2LCAweGZmZmYpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY2FkZXRfc2V0dm9sKGN0cmwtPnZhbHVlKTsKKwkJY2FkZXRfc2V0dm9sKGRldiwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5NywxNiArNDkxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTUxNSw0MyArNDk5LDUyIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBjYWRldF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWRldi0+dXNlcnMrKzsKKwlpZiAoMSA9PSBkZXYtPnVzZXJzKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnJlYWRfcXVldWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jYWRldF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjYWRldF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXVzZXJzKys7Ci0JaWYgKDEgPT0gdXNlcnMpIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnJlYWRfcXVldWUpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotc3RhdGljIGludAotY2FkZXRfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1c2Vycy0tOwotCWlmICgwID09IHVzZXJzKXsKLQkJZGVsX3RpbWVyX3N5bmMoJnJlYWR0aW1lcik7Ci0JCXJkc3N0YXQ9MDsKKwlkZXYtPnVzZXJzLS07CisJaWYgKDAgPT0gZGV2LT51c2VycykgeworCQlkZWxfdGltZXJfc3luYygmZGV2LT5yZWFkdGltZXIpOworCQlkZXYtPnJkc3N0YXQgPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotY2FkZXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCBjYWRldF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCiB7Ci0JcG9sbF93YWl0KGZpbGUsJnJlYWRfcXVldWUsd2FpdCk7Ci0JaWYocmRzaW4gIT0gcmRzb3V0KQorCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3F1ZXVlLCB3YWl0KTsKKwlpZiAoZGV2LT5yZHNpbiAhPSBkZXYtPnJkc291dCkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CkBAIC01ODEsMTMgKzU3NCw2IEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY2FkZXRfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIkNhZGV0IHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmY2FkZXRfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZjYWRldF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBjYWRldF9wbnBfZGV2aWNlc1tdID0gewpAQCAtNTk4LDcgKzU4NCw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBjYWRldF9wbnBfZGV2aWNlcyk7CiAKLXN0YXRpYyBpbnQgY2FkZXRfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQorc3RhdGljIGludCBjYWRldF9wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKIHsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MDYsMTMgKzU5MiwxMiBAQAogCWlmIChpbyA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoIXBucF9wb3J0X3ZhbGlkKGRldiwgMCkpIHsKKwlpZiAoIXBucF9wb3J0X3ZhbGlkKGRldiwgMCkpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCWlvID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKIAotCXByaW50ayAoInJhZGlvLWNhZGV0OiBQblAgcmVwb3J0cyBkZXZpY2UgYXQgJSN4XG4iLCBpbyk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tY2FkZXQ6IFBuUCByZXBvcnRzIGRldmljZSBhdCAlI3hcbiIsIGlvKTsKIAogCXJldHVybiBpbzsKIH0KQEAgLTYyOCwyMyArNjEzLDIzIEBACiBzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY2FkZXRfcG5wX2RyaXZlcjsKICNlbmRpZgogCi1zdGF0aWMgaW50IGNhZGV0X3Byb2JlKHZvaWQpCitzdGF0aWMgdm9pZCBjYWRldF9wcm9iZShzdHJ1Y3QgY2FkZXQgKmRldikKIHsKLQlzdGF0aWMgaW50IGlvdmFsc1s4XT17MHgzMzAsMHgzMzIsMHgzMzQsMHgzMzYsMHgzMzgsMHgzM2EsMHgzM2MsMHgzM2V9OworCXN0YXRpYyBpbnQgaW92YWxzWzhdID0geyAweDMzMCwgMHgzMzIsIDB4MzM0LCAweDMzNiwgMHgzMzgsIDB4MzNhLCAweDMzYywgMHgzM2UgfTsKIAlpbnQgaTsKIAotCWZvcihpPTA7aTw4O2krKykgewotCQlpbz1pb3ZhbHNbaV07Ci0JCWlmIChyZXF1ZXN0X3JlZ2lvbihpbywgMiwgImNhZGV0LXByb2JlIikpIHsKLQkJCWNhZGV0X3NldGZyZXEoMTQxMCk7Ci0JCQlpZihjYWRldF9nZXRmcmVxKCk9PTE0MTApIHsKLQkJCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7Ci0JCQkJcmV0dXJuIGlvOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZGV2LT5pbyA9IGlvdmFsc1tpXTsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDIsICJjYWRldC1wcm9iZSIpKSB7CisJCQljYWRldF9zZXRmcmVxKGRldiwgMTQxMCk7CisJCQlpZiAoY2FkZXRfZ2V0ZnJlcShkZXYpID09IDE0MTApIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKIAkJfQogCX0KLQlyZXR1cm4gLTE7CisJZGV2LT5pbyA9IC0xOwogfQogCiAvKgpAQCAtNjU0LDU5ICs2MzksNjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgY2FkZXRfaW5pdCh2b2lkKQogewotCXNwaW5fbG9ja19pbml0KCZjYWRldF9pb19sb2NrKTsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9ICZjYWRldF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwlpbnQgcmVzOwogCi0JLyoKLQkgKglJZiBhIHByb2JlIHdhcyByZXF1ZXN0ZWQgdGhlbiBwcm9iZSBJU0FQblAgZmlyc3QgKHNhZmVzdCkKLQkgKi8KKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiY2FkZXQiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCisJLyogSWYgYSBwcm9iZSB3YXMgcmVxdWVzdGVkIHRoZW4gcHJvYmUgSVNBUG5QIGZpcnN0IChzYWZlc3QpICovCiAJaWYgKGlvIDwgMCkKIAkJcG5wX3JlZ2lzdGVyX2RyaXZlcigmY2FkZXRfcG5wX2RyaXZlcik7Ci0JLyoKLQkgKglJZiB0aGF0IGZhaWxzIHRoZW4gcHJvYmUgdW5zYWZlbHkgaWYgcHJvYmUgaXMgcmVxdWVzdGVkCi0JICovCi0JaWYoaW8gPCAwKQotCQlpbyA9IGNhZGV0X3Byb2JlICgpOworCWRldi0+aW8gPSBpbzsKIAotCS8qCi0JICoJRWxzZSB3ZSBiYWlsIG91dAotCSAqLworCS8qIElmIHRoYXQgZmFpbHMgdGhlbiBwcm9iZSB1bnNhZmVseSBpZiBwcm9iZSBpcyByZXF1ZXN0ZWQgKi8KKwlpZiAoZGV2LT5pbyA8IDApCisJCWNhZGV0X3Byb2JlKGRldik7CiAKLQlpZihpbyA8IDApIHsKKwkvKiBFbHNlIHdlIGJhaWwgb3V0ICovCisJaWYgKGRldi0+aW8gPCAwKSB7CiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzMwLCAweDMzMiwgMHgzMzQsXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICIweDMzNiwgMHgzMzgsIDB4MzNhLCAweDMzYyBvciAweDMzZVxuIik7CiAjZW5kaWYKIAkJZ290byBmYWlsOwogCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLDIsImNhZGV0IikpCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmlvLCAyLCAiY2FkZXQiKSkKIAkJZ290byBmYWlsOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhZGV0X3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIkFEUyBDYWRldCBSYWRpbyBDYXJkIGF0IDB4JXhcbiIsaW8pOworCisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJmNhZGV0X2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZjYWRldF9pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CisJCWdvdG8gZmFpbDsKKwl9CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQURTIENhZGV0IFJhZGlvIENhcmQgYXQgMHgleFxuIiwgZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY2FkZXRfcG5wX2RyaXZlcik7Ci0JcmV0dXJuIC0xOworCXJldHVybiAtRU5PREVWOwogfQogCi0KLQotTU9EVUxFX0FVVEhPUigiRnJlZCBHbGVhc29uLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEFEUyBDYWRldCBBTS9GTS9SRFMgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIENhZGV0IGNhcmQgKDB4MzMwLDB4MzMyLDB4MzM0LDB4MzM2LDB4MzM4LDB4MzNhLDB4MzNjLDB4MzNlKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2FkZXRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWRldF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhZGV0X3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9ICZjYWRldF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjYWRldF9wbnBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY2FkZXRfaW5pdCk7Ci1tb2R1bGVfZXhpdChjYWRldF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChjYWRldF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCAwYzk2YmY4Li4wOTI2NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwpAQCAtNDUsMzQgKzQ1LDI1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIlZsYWRpbWlyIFNoZWJvcmRhZXYgPHZzaGVib3JkYWV2QG1haWwucnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBHZW10ZWsgUENJIFJhZGlvIENhcmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CitzdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7CitzdGF0aWMgaW50IG14ID0gMTsKKworbW9kdWxlX3BhcmFtKG14LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXgsICJzaW5nbGUgZGlnaXQ6IDEgLSB0dXJuIG9mZiB0aGUgdHVybmVyIHVwb24gbW9kdWxlIGV4aXQgKGRlZmF1bHQpLCAwIC0gZG8gbm90Iik7Cittb2R1bGVfcGFyYW0obnJfcmFkaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5yX3JhZGlvLCAidmlkZW80bGludXggZGV2aWNlIG51bWJlciB0byB1c2UiKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCiAKICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9HRU1URUsKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HRU1URUsgMHg1MDQ2CkBAIC05MCw4ICs4MSwxMSBAQAogI2RlZmluZSBHRU1URUtfUENJX1JBTkdFX0hJR0ggKDEwOCoxNjAwMCkKICNlbmRpZgogCi1zdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb2RldjsKK3N0cnVjdCBnZW10ZWtfcGNpIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCiAJdTMyIGlvYmFzZTsKIAl1MzIgbGVuZ3RoOwpAQCAtMTAwLDExNiArOTQsMTMzIEBACiAJdTggIG11dGU7CiB9OwogCi1zdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0KLXN0YXRpYyBpbmxpbmUgdTggZ2VtdGVrX3BjaV9vdXQoIHUxNiB2YWx1ZSwgdTMyIHBvcnQgKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VtdGVrX3BjaSAqdG9fZ2VtdGVrX3BjaShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGdlbXRla19wY2ksIHY0bDJfZGV2KTsKK30KKworc3RhdGljIGlubGluZSB1OCBnZW10ZWtfcGNpX291dCh1MTYgdmFsdWUsIHUzMiBwb3J0KQoreworCW91dHcodmFsdWUsIHBvcnQpOwogCiAJcmV0dXJuICh1OCl2YWx1ZTsKIH0KIAotI2RlZmluZSBfYjAoIHYgKSAqKCh1OCAqKSZ2KQotc3RhdGljIHZvaWQgX19nZW10ZWtfcGNpX2NtZCggdTE2IHZhbHVlLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSwgaW50IGtlZXAgKQotewotCXJlZ2lzdGVyIHU4IGJ5dGUgPSAqbGFzdF9ieXRlOworI2RlZmluZSBfYjAodikgKCooKHU4ICopJnYpKQogCi0JaWYgKCAhdmFsdWUgKSB7Ci0JCWlmICggIWtlZXAgKQorc3RhdGljIHZvaWQgX19nZW10ZWtfcGNpX2NtZCh1MTYgdmFsdWUsIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlLCBpbnQga2VlcCkKK3sKKwl1OCBieXRlID0gKmxhc3RfYnl0ZTsKKworCWlmICghdmFsdWUpIHsKKwkJaWYgKCFrZWVwKQogCQkJdmFsdWUgPSAodTE2KXBvcnQ7CiAJCWJ5dGUgJj0gMHhmZDsKIAl9IGVsc2UKIAkJYnl0ZSB8PSAyOwogCi0JX2IwKCB2YWx1ZSApID0gYnl0ZTsKLQlvdXR3KCB2YWx1ZSwgcG9ydCApOworCV9iMCh2YWx1ZSkgPSBieXRlOworCW91dHcodmFsdWUsIHBvcnQpOwogCWJ5dGUgfD0gMTsKLQlfYjAoIHZhbHVlICkgPSBieXRlOwotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJX2IwKHZhbHVlKSA9IGJ5dGU7CisJb3V0dyh2YWx1ZSwgcG9ydCk7CiAJYnl0ZSAmPSAweGZlOwotCV9iMCggdmFsdWUgKSA9IGJ5dGU7Ci0Jb3V0dyggdmFsdWUsIHBvcnQgKTsKKwlfYjAodmFsdWUpID0gYnl0ZTsKKwlvdXR3KHZhbHVlLCBwb3J0KTsKIAogCSpsYXN0X2J5dGUgPSBieXRlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9uaWwoIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlICkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX25pbCh1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSkKIHsKLQlfX2dlbXRla19wY2lfY21kKCAweDAwLCBwb3J0LCBsYXN0X2J5dGUsIGZhbHNlICk7CisJX19nZW10ZWtfcGNpX2NtZCgweDAwLCBwb3J0LCBsYXN0X2J5dGUsIGZhbHNlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfY21kKCB1MTYgY21kLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSApCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9jbWQodTE2IGNtZCwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUpCiB7Ci0JX19nZW10ZWtfcGNpX2NtZCggY21kLCBwb3J0LCBsYXN0X2J5dGUsIHRydWUgKTsKKwlfX2dlbXRla19wY2lfY21kKGNtZCwgcG9ydCwgbGFzdF9ieXRlLCB0cnVlKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5ICkKK3N0YXRpYyB2b2lkIGdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkLCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKLQlyZWdpc3RlciBpbnQgaTsKLQlyZWdpc3RlciB1MzIgdmFsdWUgPSBmcmVxdWVuY3kgLyAyMDAgKyA4NTY7Ci0JcmVnaXN0ZXIgdTE2IG1hc2sgPSAweDgwMDA7CisJaW50IGk7CisJdTMyIHZhbHVlID0gZnJlcXVlbmN5IC8gMjAwICsgODU2OworCXUxNiBtYXNrID0gMHg4MDAwOwogCXU4IGxhc3RfYnl0ZTsKIAl1MzIgcG9ydCA9IGNhcmQtPmlvYmFzZTsKIAotCWxhc3RfYnl0ZSA9IGdlbXRla19wY2lfb3V0KCAweDA2LCBwb3J0ICk7CisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisJbGFzdF9ieXRlID0gZ2VtdGVrX3BjaV9vdXQoMHgwNiwgcG9ydCk7CiAKIAlpID0gMDsKIAlkbyB7Ci0JCWdlbXRla19wY2lfbmlsKCBwb3J0LCAmbGFzdF9ieXRlICk7CisJCWdlbXRla19wY2lfbmlsKHBvcnQsICZsYXN0X2J5dGUpOwogCQlpKys7Ci0JfSB3aGlsZSAoIGkgPCA5ICk7CisJfSB3aGlsZSAoaSA8IDkpOwogCiAJaSA9IDA7CiAJZG8gewotCQlnZW10ZWtfcGNpX2NtZCggdmFsdWUgJiBtYXNrLCBwb3J0LCAmbGFzdF9ieXRlICk7CisJCWdlbXRla19wY2lfY21kKHZhbHVlICYgbWFzaywgcG9ydCwgJmxhc3RfYnl0ZSk7CiAJCW1hc2sgPj49IDE7CiAJCWkrKzsKLQl9IHdoaWxlICggaSA8IDE2ICk7CisJfSB3aGlsZSAoaSA8IDE2KTsKIAotCW91dHcoIDB4MTAsIHBvcnQgKTsKKwlvdXR3KDB4MTAsIHBvcnQpOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfbXV0ZSggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX211dGUoc3RydWN0IGdlbXRla19wY2kgKmNhcmQpCiB7Ci0Jb3V0YiggMHgxZiwgY2FyZC0+aW9iYXNlICk7CisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJb3V0YigweDFmLCBjYXJkLT5pb2Jhc2UpOwogCWNhcmQtPm11dGUgPSB0cnVlOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX3VubXV0ZSggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX3VubXV0ZShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKIHsKLQlpZiAoIGNhcmQtPm11dGUgKSB7Ci0JCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KCBjYXJkLCBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSApOworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOworCWlmIChjYXJkLT5tdXRlKSB7CisJCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KGNhcmQsIGNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5KTsKIAkJY2FyZC0+bXV0ZSA9IGZhbHNlOwogCX0KKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW10ZWtfcGNpX2dldHNpZ25hbCggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgaW50IGdlbXRla19wY2lfZ2V0c2lnbmFsKHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkKQogewotCXJldHVybiAoIGluYiggY2FyZC0+aW9iYXNlICkgJiAweDA4ICkgPyAwIDogMTsKKwlpbnQgc2lnOworCisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJc2lnID0gKGluYihjYXJkLT5pb2Jhc2UpICYgMHgwOCkgPyAwIDogMTsKKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tZ2VtdGVrLXBjaSIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJHZW1UZWsgUENJIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShjYXJkLT5wZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gR0VNVEVLX1BDSV9SQU5HRV9MT1c7CiAJdi0+cmFuZ2VoaWdoID0gR0VNVEVLX1BDSV9SQU5HRV9ISUdIOwpAQCAtMjIzLDIxICsyMzQsMTggQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWlmICggKGYtPmZyZXF1ZW5jeSA8IEdFTVRFS19QQ0lfUkFOR0VfTE9XKSB8fAotCQkJKGYtPmZyZXF1ZW5jeSA+IEdFTVRFS19QQ0lfUkFOR0VfSElHSCkgKQorCWlmIChmLT5mcmVxdWVuY3kgPCBHRU1URUtfUENJX1JBTkdFX0xPVyB8fAorCSAgICBmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpCiAJCXJldHVybiAtRUlOVkFMOwogCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KGNhcmQsIGYtPmZyZXF1ZW5jeSk7Ci0JY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kgPSBmLT5mcmVxdWVuY3k7CiAJY2FyZC0+bXV0ZSA9IGZhbHNlOwogCXJldHVybiAwOwogfQpAQCAtMjQ1LDcgKzI1Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5OwpAQCAtMjU1LDEzICsyNjMsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjY5LDcgKzI3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI4OCw3ICsyOTQsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMDcsMTcgKzMxMyw2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMjYsMTcgKzMyMSwyMiBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogZW51bSB7CkBAIC0zNTQsMjUgKzM1NCwyMiBAQAogCXsgMCB9CiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFKCBwY2ksIGdlbXRla19wY2lfaWQgKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBnZW10ZWtfcGNpX2lkKTsKIAotc3RhdGljIGludCBteCA9IDE7Ci0KLXN0YXRpYyBpbnQgZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZW10ZWtfcGNpX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGdlbXRla19wY2lfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGdlbXRla19wY2lfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBnZW10ZWtfcGNpX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTM5MSwxMDggKzM4OCwxMDAgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXZfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgICAgICAgICAgCT0gIkdlbXRlayBQQ0kgUmFkaW8iLAotCS5mb3BzICAgICAgICAgIAk9ICZnZW10ZWtfcGNpX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkICkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXZyYWRpbzsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OworCWludCByZXM7CiAKLQlpZiAoIChjYXJkID0ga3phbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICksIEdGUF9LRVJORUwgKSkgPT0gTlVMTCApIHsKLQkJcHJpbnRrKCBLRVJOX0VSUiAiZ2VtdGVrX3BjaTogb3V0IG9mIG1lbW9yeVxuIiApOworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2VtdGVrX3BjaSksIEdGUF9LRVJORUwpOworCWlmIChjYXJkID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICggcGNpX2VuYWJsZV9kZXZpY2UoIHBjaV9kZXYgKSApCisJdjRsMl9kZXYgPSAmY2FyZC0+djRsMl9kZXY7CisJbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+cGRldiA9IHBkZXY7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiZ2VtdGVrX3BjaSIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQogCQlnb3RvIGVycl9wY2k7CiAKLQljYXJkLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoIHBjaV9kZXYsIDAgKTsKLQljYXJkLT5sZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKCBwY2lfZGV2LCAwICk7CisJY2FyZC0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWNhcmQtPmxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAKLQlpZiAoIHJlcXVlc3RfcmVnaW9uKCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSApID09IE5VTEwgKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImdlbXRla19wY2k6IGkvbyBwb3J0IGFscmVhZHkgaW4gdXNlXG4iICk7CisJaWYgKHJlcXVlc3RfcmVnaW9uKGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoLCBjYXJkX25hbWVzW3BjaV9pZC0+ZHJpdmVyX2RhdGFdKSA9PSBOVUxMKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiaS9vIHBvcnQgYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlnb3RvIGVycl9wY2k7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKCBwY2lfZGV2LCBjYXJkICk7CisJc3RybGNweShjYXJkLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoY2FyZC0+dmRldi5uYW1lKSk7CisJY2FyZC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWNhcmQtPnZkZXYuZm9wcyA9ICZnZW10ZWtfcGNpX2ZvcHM7CisJY2FyZC0+dmRldi5pb2N0bF9vcHMgPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHM7CisJY2FyZC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmNhcmQtPnZkZXYsIGNhcmQpOwogCi0JaWYgKCAoZGV2cmFkaW8gPSBrbWFsbG9jKCBzaXplb2YoIHN0cnVjdCB2aWRlb19kZXZpY2UgKSwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJnZW10ZWtfcGNpOiBvdXQgb2YgbWVtb3J5XG4iICk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FyZC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIG5yX3JhZGlvKSA8IDApCiAJCWdvdG8gZXJyX3ZpZGVvOwotCX0KLQkqZGV2cmFkaW8gPSB2ZGV2X3RlbXBsYXRlOwogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXZyYWRpbywgVkZMX1RZUEVfUkFESU8sIG5yX3JhZGlvKSA8IDApIHsKLQkJa2ZyZWUoIGRldnJhZGlvICk7Ci0JCWdvdG8gZXJyX3ZpZGVvOwotCX0KKwlnZW10ZWtfcGNpX211dGUoY2FyZCk7CiAKLQljYXJkLT52aWRlb2RldiA9IGRldnJhZGlvOwotCXZpZGVvX3NldF9kcnZkYXRhKGRldnJhZGlvLCBjYXJkKTsKLQlnZW10ZWtfcGNpX211dGUoIGNhcmQgKTsKLQotCXByaW50ayggS0VSTl9JTkZPICJHZW10ZWsgUENJIFJhZGlvIChyZXYuICVkKSBmb3VuZCBhdCAweCUwNHgtMHglMDR4LlxuIiwKLQkJcGNpX2Rldi0+cmV2aXNpb24sIGNhcmQtPmlvYmFzZSwgY2FyZC0+aW9iYXNlICsgY2FyZC0+bGVuZ3RoIC0gMSApOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkdlbXRlayBQQ0kgUmFkaW8gKHJldi4gJWQpIGZvdW5kIGF0IDB4JTA0eC0weCUwNHguXG4iLAorCQlwZGV2LT5yZXZpc2lvbiwgY2FyZC0+aW9iYXNlLCBjYXJkLT5pb2Jhc2UgKyBjYXJkLT5sZW5ndGggLSAxKTsKIAogCXJldHVybiAwOwogCiBlcnJfdmlkZW86Ci0JcmVsZWFzZV9yZWdpb24oIGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoICk7CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgpOwogCiBlcnJfcGNpOgotCWtmcmVlKCBjYXJkICk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJa2ZyZWUoY2FyZCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBnZW10ZWtfcGNpX3JlbW92ZSggc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgKQorc3RhdGljIHZvaWQgX19kZXZleGl0IGdlbXRla19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoIHBjaV9kZXYgKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdG9fZ2VtdGVrX3BjaSh2NGwyX2Rldik7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSggY2FyZC0+dmlkZW9kZXYgKTsKLQlrZnJlZSggY2FyZC0+dmlkZW9kZXYgKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CiAKLQlyZWxlYXNlX3JlZ2lvbiggY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGggKTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCk7CiAKLQlpZiAoIG14ICkKLQkJZ2VtdGVrX3BjaV9tdXRlKCBjYXJkICk7CisJaWYgKG14KQorCQlnZW10ZWtfcGNpX211dGUoY2FyZCk7CiAKLQlrZnJlZSggY2FyZCApOwotCi0JcGNpX3NldF9kcnZkYXRhKCBwY2lfZGV2LCBOVUxMICk7CisJa2ZyZWUoY2FyZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnZW10ZWtfcGNpX2RyaXZlciA9Ci17CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ2VtdGVrX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImdlbXRla19wY2kiLAogCS5pZF90YWJsZQk9IGdlbXRla19wY2lfaWQsCiAJLnByb2JlCQk9IGdlbXRla19wY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChnZW10ZWtfcGNpX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBnZW10ZWtfcGNpX2luaXRfbW9kdWxlKCB2b2lkICkKK3N0YXRpYyBpbnQgX19pbml0IGdlbXRla19wY2lfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCAmZ2VtdGVrX3BjaV9kcml2ZXIgKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZ2VtdGVrX3BjaV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZ2VtdGVrX3BjaV9jbGVhbnVwX21vZHVsZSggdm9pZCApCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2VtdGVrX3BjaV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZnZW10ZWtfcGNpX2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoICJWbGFkaW1pciBTaGVib3JkYWV2IDx2c2hlYm9yZGFldkBtYWlsLnJ1PiIgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggIlRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBHZW10ZWsgUENJIFJhZGlvIENhcmQiICk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShteCwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBteCwgInNpbmdsZSBkaWdpdDogMSAtIHR1cm4gb2ZmIHRoZSB0dXJuZXIgdXBvbiBtb2R1bGUgZXhpdCAoZGVmYXVsdCksIDAgLSBkbyBub3QiICk7Ci1tb2R1bGVfcGFyYW0obnJfcmFkaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBucl9yYWRpbywgInZpZGVvNGxpbnV4IGRldmljZSBudW1iZXIgdG8gdXNlIik7Ci0KLW1vZHVsZV9pbml0KCBnZW10ZWtfcGNpX2luaXRfbW9kdWxlICk7Ci1tb2R1bGVfZXhpdCggZ2VtdGVrX3BjaV9jbGVhbnVwX21vZHVsZSApOwotCittb2R1bGVfaW5pdChnZW10ZWtfcGNpX2luaXQpOworbW9kdWxlX2V4aXQoZ2VtdGVrX3BjaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCmluZGV4IDJiNjhiZTcuLjE1MDQ2NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwpAQCAtMjAsMTYgKzIwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDMpCi0jZGVmaW5lIFJBRElPX0JBTk5FUiAiR2VtVGVrIFJhZGlvIGNhcmQgZHJpdmVyOiB2MC4wLjMiCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDMpCiAKIC8qCiAgKiBNb2R1bGUgaW5mby4KQEAgLTU3LDcgKzU1LDYgQEAKIHN0YXRpYyBpbnQga2VlcG11dGVkCT0gMTsKIHN0YXRpYyBpbnQgaW5pdG11dGUJPSAxOwogc3RhdGljIGludCByYWRpb19ucgk9IC0xOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCiBtb2R1bGVfcGFyYW0oaW8sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlvLCAiRm9yY2UgSS9PIHBvcnQgZm9yIHRoZSBHZW1UZWsgUmFkaW8gY2FyZCBpZiBhdXRvbWF0aWMgIgpAQCAtMTEyLDEyICsxMDksMTkgQEAKICNkZWZpbmUgU0hPUlRfREVMQVkgNQkJLyogdXNlYyAqLwogI2RlZmluZSBMT05HX0RFTEFZIDc1CQkvKiB1c2VjICovCiAKLXN0cnVjdCBnZW10ZWtfZGV2aWNlIHsKK3N0cnVjdCBnZW10ZWsgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJdW5zaWduZWQgbG9uZyBsYXN0ZnJlcTsKIAlpbnQgbXV0ZWQ7CisJaW50IHZlcmlmaWVkOworCWludCBpbzsKIAl1MzIgYnUyNjE0ZGF0YTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZ2VtdGVrIGdlbXRla19jYXJkOworCiAjZGVmaW5lIEJVMjYxNF9GUkVRX0JJVFMgCTE2IC8qIEQwLi5EMTUsIEZyZXF1ZW5jeSBkYXRhCQkqLwogI2RlZmluZSBCVTI2MTRfUE9SVF9CSVRTCTMgLyogUDAuLlAyLCBPdXRwdXQgcG9ydCBjb250cm9sIGRhdGEJKi8KICNkZWZpbmUgQlUyNjE0X1ZPSURfQklUUwk0IC8qIHVudXNlZCAJCQkJKi8KQEAgLTE1MywxMCArMTU3LDYgQEAKICNkZWZpbmUgQlUyNjE0X0ZNVU5fTUFTSwlNS01BU0soRk1VTikKICNkZWZpbmUgQlUyNjE0X1RFU1RfTUFTSwlNS01BU0soVEVTVCkKIAotc3RhdGljIHN0cnVjdCBnZW10ZWtfZGV2aWNlIGdlbXRla191bml0OwotCi1zdGF0aWMgc3BpbmxvY2tfdCBsb2NrOwotCiAvKgogICogU2V0IGRhdGEgd2hpY2ggd2lsbCBiZSBzZW50IHRvIEJVMjYxNEZTLgogICovCkBAIC0xNjYsMzMgKzE2NiwzMyBAQAogLyoKICAqIFRyYW5zbWl0IHNldHRpbmdzIHRvIEJVMjYxNEZTIG92ZXIgR2VtVGVrIElDLgogICovCi1zdGF0aWMgdm9pZCBnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KHN0cnVjdCBnZW10ZWsgKmd0KQogewogCWludCBpLCBiaXQsIHEsIG11dGU7CiAKLQlzcGluX2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKIAotCW11dGUgPSBkZXYtPm11dGVkID8gR0VNVEVLX01UIDogMHgwMDsKKwltdXRlID0gZ3QtPm11dGVkID8gR0VNVEVLX01UIDogMHgwMDsKIAotCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBpbyk7CisJb3V0Yl9wKG11dGUgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CiAJdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShMT05HX0RFTEFZKTsKIAotCWZvciAoaSA9IDAsIHEgPSBkZXYtPmJ1MjYxNGRhdGE7IGkgPCAzMjsgaSsrLCBxID4+PSAxKSB7Ci0JICAgIGJpdCA9IChxICYgMSkgPyBHRU1URUtfREEgOiAwOwotCSAgICBvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCwgaW8pOwotCSAgICB1ZGVsYXkoU0hPUlRfREVMQVkpOwotCSAgICBvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCB8IEdFTVRFS19DSywgaW8pOwotCSAgICB1ZGVsYXkoU0hPUlRfREVMQVkpOworCWZvciAoaSA9IDAsIHEgPSBndC0+YnUyNjE0ZGF0YTsgaSA8IDMyOyBpKyssIHEgPj49IDEpIHsKKwkJYml0ID0gKHEgJiAxKSA/IEdFTVRFS19EQSA6IDA7CisJCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgYml0LCBndC0+aW8pOworCQl1ZGVsYXkoU0hPUlRfREVMQVkpOworCQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCB8IEdFTVRFS19DSywgZ3QtPmlvKTsKKwkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKIAl9CiAKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShTSE9SVF9ERUxBWSk7Ci0Jb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGlvKTsKKwlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgZ3QtPmlvKTsKIAl1ZGVsYXkoTE9OR19ERUxBWSk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCkBAIC0yMDYsMTA3ICsyMDYsMTA5IEBACiAvKgogICogU2V0IEZNLWZyZXF1ZW5jeS4KICAqLwotc3RhdGljIHZvaWQgZ2VtdGVrX3NldGZyZXEoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQorc3RhdGljIHZvaWQgZ2VtdGVrX3NldGZyZXEoc3RydWN0IGdlbXRlayAqZ3QsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKLQotCWlmIChrZWVwbXV0ZWQgJiYgaGFyZG11dGUgJiYgZGV2LT5tdXRlZCkKKwlpZiAoa2VlcG11dGVkICYmIGhhcmRtdXRlICYmIGd0LT5tdXRlZCkKIAkJcmV0dXJuOwogCi0JaWYgKGZyZXEgPCBHRU1URUtfTE9XRlJFUSkKLQkJZnJlcSA9IEdFTVRFS19MT1dGUkVROwotCWVsc2UgaWYgKGZyZXEgPiBHRU1URUtfSElHSEZSRVEpCi0JCWZyZXEgPSBHRU1URUtfSElHSEZSRVE7CisJZnJlcSA9IGNsYW1wX3ZhbChmcmVxLCBHRU1URUtfTE9XRlJFUSwgR0VNVEVLX0hJR0hGUkVRKTsKIAotCWRldi0+bGFzdGZyZXEgPSBmcmVxOwotCWRldi0+bXV0ZWQgPSAwOworCWd0LT5sYXN0ZnJlcSA9IGZyZXE7CisJZ3QtPm11dGVkID0gMDsKIAotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1BPUlQsIDApOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZNRVMsIDApOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCi0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1dBTCwgMCk7Ci0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1VTiwgMSk7CS8qIEdUIGJpdCBzZXQJKi8KLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9URVNULCAwKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1BPUlQsIDApOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1FUywgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dBTCwgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTVVOLCAxKTsJLyogR1QgYml0IHNldAkqLworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfVEVTVCwgMCk7CiAKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TVERGLCBHRU1URUtfU1RERl8zXzEyNV9LSFopOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZSRVEsIGdlbXRla19jb252ZnJlcShmcmVxKSk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TVERGLCBHRU1URUtfU1RERl8zXzEyNV9LSFopOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRlJFUSwgZ2VtdGVrX2NvbnZmcmVxKGZyZXEpKTsKIAotCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZGV2KTsKKwlnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KGd0KTsKIH0KIAogLyoKICAqIFNldCBtdXRlIGZsYWcuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla19tdXRlKHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBnZW10ZWtfbXV0ZShzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKIAlpbnQgaTsKLQlkZXYtPm11dGVkID0gMTsKKworCWd0LT5tdXRlZCA9IDE7CiAKIAlpZiAoaGFyZG11dGUpIHsKIAkJLyogVHVybiBvZmYgUExMLCBkaXNhYmxlIGRhdGEgb3V0cHV0ICovCi0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1BPUlQsIDApOwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GTUVTLCAwKTsJLyogQ1QgYml0IG9mZgkqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0FMLCAwKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1VTiwgMCk7CS8qIEdUIGJpdCBvZmYJKi8KLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfVEVTVCwgMCk7Ci0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NUREYsIEdFTVRFS19QTExfT0ZGKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRlJFUSwgMCk7Ci0JCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZGV2KTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2soJmxvY2spOwotCi0JCS8qIFJlYWQgYnVzIGNvbnRlbnRzIChDRSwgQ0sgYW5kIERBKS4gKi8KLQkJaSA9IGluYl9wKGlvKTsKLQkJLyogV3JpdGUgaXQgYmFjayB3aXRoIG11dGUgZmxhZyBzZXQuICovCi0JCW91dGJfcCgoaSA+PiA1KSB8IEdFTVRFS19NVCwgaW8pOwotCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCi0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9QT1JULCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTUVTLCAwKTsJLyogQ1QgYml0IG9mZgkqLworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dBTCwgMCk7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1VTiwgMCk7CS8qIEdUIGJpdCBvZmYJKi8KKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9URVNULCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TVERGLCBHRU1URUtfUExMX09GRik7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRlJFUSwgMCk7CisJCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZ3QpOworCQlyZXR1cm47CiAJfQorCisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCisJLyogUmVhZCBidXMgY29udGVudHMgKENFLCBDSyBhbmQgREEpLiAqLworCWkgPSBpbmJfcChndC0+aW8pOworCS8qIFdyaXRlIGl0IGJhY2sgd2l0aCBtdXRlIGZsYWcgc2V0LiAqLworCW91dGJfcCgoaSA+PiA1KSB8IEdFTVRFS19NVCwgZ3QtPmlvKTsKKwl1ZGVsYXkoU0hPUlRfREVMQVkpOworCisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCiAgKiBVbnNldCBtdXRlIGZsYWcuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla191bm11dGUoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGdlbXRla191bm11dGUoc3RydWN0IGdlbXRlayAqZ3QpCiB7CiAJaW50IGk7Ci0JZGV2LT5tdXRlZCA9IDA7CiAKKwlndC0+bXV0ZWQgPSAwOwogCWlmIChoYXJkbXV0ZSkgewogCQkvKiBUdXJuIFBMTCBiYWNrIG9uLiAqLwotCQlnZW10ZWtfc2V0ZnJlcShkZXYsIGRldi0+bGFzdGZyZXEpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbG9jayk7Ci0KLQkJaSA9IGluYl9wKGlvKTsKLQkJb3V0Yl9wKGkgPj4gNSwgaW8pOwotCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCi0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJZ2VtdGVrX3NldGZyZXEoZ3QsIGd0LT5sYXN0ZnJlcSk7CisJCXJldHVybjsKIAl9CisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCisJaSA9IGluYl9wKGd0LT5pbyk7CisJb3V0Yl9wKGkgPj4gNSwgZ3QtPmlvKTsKKwl1ZGVsYXkoU0hPUlRfREVMQVkpOworCisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCiAgKiBHZXQgc2lnbmFsIHN0cmVuZ3RoICg9IHN0ZXJlbyBzdGF0dXMpLgogICovCi1zdGF0aWMgaW5saW5lIGludCBnZW10ZWtfZ2V0c2lnc3RyKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBnZW10ZWtfZ2V0c2lnc3RyKHN0cnVjdCBnZW10ZWsgKmd0KQogewotCXJldHVybiBpbmJfcChpbykgJiBHRU1URUtfTlMgPyAwIDogMTsKKwlpbnQgc2lnOworCisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCXNpZyA9IGluYl9wKGd0LT5pbykgJiBHRU1URUtfTlMgPyAwIDogMTsKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCiAvKgogICogQ2hlY2sgaWYgcmVxdWVzdGVkIGNhcmQgYWN0cyBsaWtlIEdlbVRlayBSYWRpbyBjYXJkLgogICovCi1zdGF0aWMgaW50IGdlbXRla192ZXJpZnkoaW50IHBvcnQpCitzdGF0aWMgaW50IGdlbXRla192ZXJpZnkoc3RydWN0IGdlbXRlayAqZ3QsIGludCBwb3J0KQogewotCXN0YXRpYyBpbnQgdmVyaWZpZWQgPSAtMTsKIAlpbnQgaSwgcTsKIAotCWlmICh2ZXJpZmllZCA9PSBwb3J0KQorCWlmIChndC0+dmVyaWZpZWQgPT0gcG9ydCkKIAkJcmV0dXJuIDE7CiAKLQlzcGluX2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKIAogCXEgPSBpbmJfcChwb3J0KTsJLyogUmVhZCBidXMgY29udGVudHMgYmVmb3JlIHByb2JpbmcuICovCiAJLyogVHJ5IHRvIHR1cm4gb24gQ0UsIENLIGFuZCBEQSByZXNwZWN0aXZlbHkgYW5kIGNoZWNrIGlmIGNhcmQgcmVzcG9uZHMKQEAgLTMxNiwxNSArMzE4LDE1IEBACiAJCXVkZWxheShTSE9SVF9ERUxBWSk7CiAKIAkJaWYgKChpbmJfcChwb3J0KSAmICh+R0VNVEVLX05TKSkgIT0gKDB4MTcgfCAoMSA8PCAoaSArIDUpKSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJb3V0Yl9wKHEgPj4gNSwgcG9ydCk7CS8qIFdyaXRlIGJ1cyBjb250ZW50cyBiYWNrLiAqLwogCXVkZWxheShTSE9SVF9ERUxBWSk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7Ci0JdmVyaWZpZWQgPSBwb3J0OworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOworCWd0LT52ZXJpZmllZCA9IHBvcnQ7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTMzMiw4MyArMzM0LDYxIEBACiAvKgogICogQXV0b21hdGljIHByb2JpbmcgZm9yIGNhcmQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VtdGVrX3Byb2JlKHZvaWQpCitzdGF0aWMgaW50IGdlbXRla19wcm9iZShzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmd0LT52NGwyX2RldjsKIAlpbnQgaW9wb3J0c1tdID0geyAweDIwYywgMHgzMGMsIDB4MjRjLCAweDM0YywgMHgyNDgsIDB4MjhjIH07CiAJaW50IGk7CiAKIAlpZiAoIXByb2JlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBkaXNhYmxlZC5cbiIpOworCQl2NGwyX2luZm8odjRsMl9kZXYsICJBdXRvbWF0aWMgZGV2aWNlIHByb2JpbmcgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBlbmFibGVkLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQXV0b21hdGljIGRldmljZSBwcm9iaW5nIGVuYWJsZWQuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvcG9ydHMpOyArK2kpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVHJ5aW5nIEkvTyBwb3J0IDB4JXguLi5cbiIsIGlvcG9ydHNbaV0pOworCQl2NGwyX2luZm8odjRsMl9kZXYsICJUcnlpbmcgSS9PIHBvcnQgMHgleC4uLlxuIiwgaW9wb3J0c1tpXSk7CiAKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb3BvcnRzW2ldLCAxLCAiZ2VtdGVrLXByb2JlIikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBwb3J0IDB4JXggYnVzeSFcbiIsCisJCQl2NGwyX3dhcm4odjRsMl9kZXYsICJJL08gcG9ydCAweCV4IGJ1c3khXG4iLAogCQkJICAgICAgIGlvcG9ydHNbaV0pOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoZ2VtdGVrX3ZlcmlmeShpb3BvcnRzW2ldKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FyZCBmb3VuZCBmcm9tIEkvTyBwb3J0ICIKKwkJaWYgKGdlbXRla192ZXJpZnkoZ3QsIGlvcG9ydHNbaV0pKSB7CisJCQl2NGwyX2luZm8odjRsMl9kZXYsICJDYXJkIGZvdW5kIGZyb20gSS9PIHBvcnQgIgogCQkJICAgICAgICIweCV4IVxuIiwgaW9wb3J0c1tpXSk7CiAKIAkJCXJlbGVhc2VfcmVnaW9uKGlvcG9ydHNbaV0sIDEpOwotCi0JCQlpbyA9IGlvcG9ydHNbaV07Ci0JCQlyZXR1cm4gaW87CisJCQlndC0+aW8gPSBpb3BvcnRzW2ldOworCQkJcmV0dXJuIGd0LT5pbzsKIAkJfQogCiAJCXJlbGVhc2VfcmVnaW9uKGlvcG9ydHNbaV0sIDEpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiQXV0b21hdGljIHByb2JpbmcgZmFpbGVkIVxuIik7Ci0KKwl2NGwyX2Vycih2NGwyX2RldiwgIkF1dG9tYXRpYyBwcm9iaW5nIGZhaWxlZCFcbiIpOwogCXJldHVybiAtMTsKIH0KIAogLyoKICAqIFZpZGVvIDQgTGludXggc3R1ZmYuCiAgKi8KLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgPSAiTXV0ZSIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LCB7Ci0JCS5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDY1NTM1LAotCQkuc3RlcCA9IDY1NTM1LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IGdlbXRla19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbXRla19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGdlbXRla19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBnZW10ZWtfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UJPSBnZW10ZWtfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4JCT0gZ2VtdGVrX29wZW4sCisJLnJlbGVhc2UJPSBnZW10ZWtfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDE3LDIzICszOTcsMjUgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWdlbXRlayIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJHZW1UZWsiLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gR0VNVEVLX0xPV0ZSRVE7CiAJdi0+cmFuZ2VoaWdoID0gR0VNVEVLX0hJR0hGUkVROwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87Ci0Jdi0+c2lnbmFsID0gMHhmZmZmICogZ2VtdGVrX2dldHNpZ3N0cigpOworCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIGdlbXRla19nZXRzaWdzdHIoZ3QpOwogCWlmICh2LT5zaWduYWwpIHsKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CkBAIC00NDEsNjUgKzQyMyw1NiBAQAogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQorCXJldHVybiAodi0+aW5kZXggIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJaWYgKGYtPnR1bmVyICE9IDApCiAJCXJldHVybiAtRUlOVkFMOworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGd0LT5sYXN0ZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlnZW10ZWtfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKLXsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gcnQtPmxhc3RmcmVxOworCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2VtdGVrX3NldGZyZXEoZ3QsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyArK2kpIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gcnQtPm11dGVkOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJaWYgKHJ0LT5tdXRlZCkKLQkJCWN0cmwtPnZhbHVlID0gMDsKLQkJZWxzZQotCQkJY3RybC0+dmFsdWUgPSA2NTUzNTsKKwkJY3RybC0+dmFsdWUgPSBndC0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTUwOCwzNSArNDgxLDE5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkKLQkJCWdlbXRla19tdXRlKHJ0KTsKKwkJCWdlbXRla19tdXRlKGd0KTsKIAkJZWxzZQotCQkJZ2VtdGVrX3VubXV0ZShydCk7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlnZW10ZWtfdW5tdXRlKHJ0KTsKLQkJZWxzZQotCQkJZ2VtdGVrX211dGUocnQpOworCQkJZ2VtdGVrX3VubXV0ZShndCk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTU0NSwxNiArNTAyLDIwIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiAoaSAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGEtPmluZGV4ICE9IDApID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgZ2VtdGVrX2lvY3RsX29wcyA9IHsKQEAgLTU3Miw2MiArNTMzLDczIEBACiAJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ2VtdGVrX3JhZGlvID0gewotCS5uYW1lCQk9ICJHZW1UZWsgUmFkaW8gY2FyZCIsCi0JLmZvcHMJCT0gJmdlbXRla19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmdlbXRla19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIC8qCiAgKiBJbml0aWFsaXphdGlvbiAvIGNsZWFudXAgcmVsYXRlZCBzdHVmZi4KICAqLwogCi0vKgotICogSW5pdGlsaXplIGNhcmQuCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGdlbXRla19pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBSQURJT19CQU5ORVIgIlxuIik7CisJc3RydWN0IGdlbXRlayAqZ3QgPSAmZ2VtdGVrX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZndC0+djRsMl9kZXY7CisJaW50IHJlczsKIAotCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiZ2VtdGVrIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CiAKLQlnZW10ZWtfcHJvYmUoKTsKLQlpZiAoaW8pIHsKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMSwgImdlbXRlayIpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2UuXG4iLCBpbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiR2VtVGVrIFJhZGlvIGNhcmQgZHJpdmVyOiB2MC4wLjNcbiIpOworCisJbXV0ZXhfaW5pdCgmZ3QtPmxvY2spOworCisJZ3QtPnZlcmlmaWVkID0gLTE7CisJZ3QtPmlvID0gaW87CisJZ2VtdGVrX3Byb2JlKGd0KTsKKwlpZiAoZ3QtPmlvKSB7CisJCWlmICghcmVxdWVzdF9yZWdpb24oZ3QtPmlvLCAxLCAiZ2VtdGVrIikpIHsKKwkJCXY0bDJfZXJyKHY0bDJfZGV2LCAiSS9PIHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZS5cbiIsIGd0LT5pbyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJaWYgKCFnZW10ZWtfdmVyaWZ5KGlvKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhcmQgYXQgSS9PIHBvcnQgMHgleCBkb2VzIG5vdCAiCisJCWlmICghZ2VtdGVrX3ZlcmlmeShndCwgZ3QtPmlvKSkKKwkJCXY0bDJfd2Fybih2NGwyX2RldiwgIkNhcmQgYXQgSS9PIHBvcnQgMHgleCBkb2VzIG5vdCAiCiAJCQkgICAgICAgInJlc3BvbmQgcHJvcGVybHksIGNoZWNrIHlvdXIgIgotCQkJICAgICAgICJjb25maWd1cmF0aW9uLlxuIiwgaW8pOworCQkJICAgICAgICJjb25maWd1cmF0aW9uLlxuIiwgZ3QtPmlvKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgSS9PIHBvcnQgMHgleC5cbiIsIGlvKTsKKwkJCXY0bDJfaW5mbyh2NGwyX2RldiwgIlVzaW5nIEkvTyBwb3J0IDB4JXguXG4iLCBndC0+aW8pOwogCX0gZWxzZSBpZiAocHJvYmUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQgYW5kIG5vICIKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQgYW5kIG5vICIKIAkJICAgICAgICJmaXhlZCBJL08gcG9ydCBkZWZpbmVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQXV0b21hdGljIHByb2JpbmcgZGlzYWJsZWQgYnV0IG5vIGZpeGVkICIKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJBdXRvbWF0aWMgcHJvYmluZyBkaXNhYmxlZCBidXQgbm8gZml4ZWQgIgogCQkgICAgICAgIkkvTyBwb3J0IGRlZmluZWQuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZnZW10ZWtfcmFkaW8sICZnZW10ZWtfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oZ3QtPmlvLCAxKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZnZW10ZWtfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAxKTsKKwlzdHJsY3B5KGd0LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZ3QtPnZkZXYubmFtZSkpOworCWd0LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZ3QtPnZkZXYuZm9wcyA9ICZnZW10ZWtfZm9wczsKKwlndC0+dmRldi5pb2N0bF9vcHMgPSAmZ2VtdGVrX2lvY3RsX29wczsKKwlndC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmd0LT52ZGV2LCBndCk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZndC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGd0LT5pbywgMSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyogU2V0IGRlZmF1bHRzICovCi0JZ2VtdGVrX3VuaXQubGFzdGZyZXEgPSBHRU1URUtfTE9XRlJFUTsKLQlnZW10ZWtfdW5pdC5idTI2MTRkYXRhID0gMDsKKwlndC0+bGFzdGZyZXEgPSBHRU1URUtfTE9XRlJFUTsKKwlndC0+YnUyNjE0ZGF0YSA9IDA7CiAKIAlpZiAoaW5pdG11dGUpCi0JCWdlbXRla19tdXRlKCZnZW10ZWtfdW5pdCk7CisJCWdlbXRla19tdXRlKGd0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjM3LDE1ICs2MDksMTkgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IGdlbXRla19leGl0KHZvaWQpCiB7CisJc3RydWN0IGdlbXRlayAqZ3QgPSAmZ2VtdGVrX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZndC0+djRsMl9kZXY7CisKIAlpZiAoc2h1dGRvd24pIHsKIAkJaGFyZG11dGUgPSAxOwkvKiBUdXJuIG9mZiBQTEwgKi8KLQkJZ2VtdGVrX211dGUoJmdlbXRla191bml0KTsKKwkJZ2VtdGVrX211dGUoZ3QpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1vZHVsZSB1bmxvYWRlZCBidXQgY2FyZCBub3QgbXV0ZWQhXG4iKTsKKwkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiTW9kdWxlIHVubG9hZGVkIGJ1dCBjYXJkIG5vdCBtdXRlZCFcbiIpOwogCX0KIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZnZW10ZWtfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAxKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ3QtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmd0LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZ3QtPmlvLCAxKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VtdGVrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwppbmRleCBiYTNhMTNhLi4wMWE2ZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwpAQCAtMjIsMjcgKzIyLDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDYpCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjA2IgorTU9EVUxFX0FVVEhPUigiQWRhbSBUbGFsa2EsIGF0bGthQHBnLmdkYS5wbCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBNYWVzdHJvIFBDSSBzb3VuZCBjYXJkIHJhZGlvLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfQotfTsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDYpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjA2IgogCiAjZGVmaW5lIEdQSU9fREFUQQkweDYwICAgLyogcG9ydCBvZmZzZXQgZnJvbSBFU1NfSU9fQkFTRSAqLwogCkBAIC03Miw2MiArNjcsMjcgQEAKIAogI2RlZmluZSBCSVRTMkZSRVEoeCkJKCh4KSAqIEZSRVFfU1RFUCAtIEZSRVFfSUYpCiAKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK3N0cnVjdCBtYWVzdHJvIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CisJdTE2CWlvOwkvKiBiYXNlIG9mIE1hZXN0cm8gY2FyZCByYWRpbyBpbyAoR1BJT19EQVRBKSovCisJdTE2CW11dGVkOwkvKiBWSURFT19BVURJT19NVVRFICovCisJdTE2CXN0ZXJlbzsJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCisJdTE2CXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLworfTsKIAotc3RhdGljIGludCBtYWVzdHJvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKLQotc3RhdGljIGludCBtYWVzdHJvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFlc3RybyAqdG9fbWFlc3RybyhzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgbWFlc3RybywgdjRsMl9kZXYpOwogfQogCi1zdGF0aWMgaW50IG1hZXN0cm9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdTMyIHJhZGlvX2JpdHNfZ2V0KHN0cnVjdCBtYWVzdHJvICpkZXYpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBtYWVzdHJvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYWVzdHJvX3JfcGNpX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk2OCksCi0JCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCi0JCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzgpLAotCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAotCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCi0JeyAwIH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWFlc3Ryb19yX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFlc3Ryb19yX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibWFlc3Ryb19yYWRpbyIsCi0JLmlkX3RhYmxlCT0gbWFlc3Ryb19yX3BjaV90YmwsCi0JLnByb2JlCQk9IG1hZXN0cm9fcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYWVzdHJvX3JlbW92ZSksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG1hZXN0cm9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gbWFlc3Ryb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBtYWVzdHJvX2V4Y2x1c2l2ZV9yZWxlYXNlLAotCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdHJ1Y3QgcmFkaW9fZGV2aWNlIHsKLQl1MTYJaW8sCS8qIGJhc2Ugb2YgTWFlc3RybyBjYXJkIHJhZGlvIGlvIChHUElPX0RBVEEpKi8KLQkJbXV0ZWQsCS8qIFZJREVPX0FVRElPX01VVEUgKi8KLQkJc3RlcmVvLAkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KLQkJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCi19OwotCi1zdGF0aWMgdTMyIHJhZGlvX2JpdHNfZ2V0KHN0cnVjdCByYWRpb19kZXZpY2UgKmRldikKLXsKLQlyZWdpc3RlciB1MTYgaW89ZGV2LT5pbywgbCwgcmRhdGE7Ci0JcmVnaXN0ZXIgdTMyIGRhdGE9MDsKKwl1MTYgaW8gPSBkZXYtPmlvLCBsLCByZGF0YTsKKwl1MzIgZGF0YSA9IDA7CiAJdTE2IG9tYXNrOwogCiAJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKQEAgLTEzNSwyNSArOTUsMjMgQEAKIAlvdXR3KDAsIGlvKTsKIAl1ZGVsYXkoMTYpOwogCi0JZm9yIChsPTI0O2wtLTspIHsKKwlmb3IgKGwgPSAyNDsgbC0tOykgewogCQlvdXR3KFNUUl9DTEssIGlvKTsJCS8qIEhJIHN0YXRlICovCiAJCXVkZWxheSgyKTsKLQkJaWYoIWwpCisJCWlmICghbCkKIAkJCWRldi0+dHVuZWQgPSBpbncoaW8pICYgU1RSX01PU1QgPyAwIDogMHhmZmZmOwogCQlvdXR3KDAsIGlvKTsJCQkvKiBMTyBzdGF0ZSAqLwogCQl1ZGVsYXkoMik7CiAJCWRhdGEgPDw9IDE7CQkJLyogc2hpZnQgZGF0YSAqLwogCQlyZGF0YSA9IGludyhpbyk7Ci0JCWlmKCFsKQotCQkJZGV2LT5zdGVyZW8gPSAgcmRhdGEgJiBTVFJfTU9TVCA/Ci0JCQkwIDogMTsKLQkJZWxzZQotCQkJaWYocmRhdGEgJiBTVFJfREFUQSkKLQkJCQlkYXRhKys7CisJCWlmICghbCkKKwkJCWRldi0+c3RlcmVvID0gKHJkYXRhICYgU1RSX01PU1QpID8gIDAgOiAxOworCQllbHNlIGlmIChyZGF0YSAmIFNUUl9EQVRBKQorCQkJZGF0YSsrOwogCQl1ZGVsYXkoMik7CiAJfQogCi0JaWYoZGV2LT5tdXRlZCkKKwlpZiAoZGV2LT5tdXRlZCkKIAkJb3V0dyhTVFJfV1JFTiwgaW8pOwogCiAJdWRlbGF5KDQpOwpAQCAtMTYyLDE4ICsxMjAsMTggQEAKIAlyZXR1cm4gZGF0YSAmIDB4M2ZmZTsKIH0KIAotc3RhdGljIHZvaWQgcmFkaW9fYml0c19zZXQoc3RydWN0IHJhZGlvX2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIHJhZGlvX2JpdHNfc2V0KHN0cnVjdCBtYWVzdHJvICpkZXYsIHUzMiBkYXRhKQogewotCXJlZ2lzdGVyIHUxNiBpbz1kZXYtPmlvLCBsLCBiaXRzOworCXUxNiBpbyA9IGRldi0+aW8sIGwsIGJpdHM7CiAJdTE2IG9tYXNrLCBvZGlyOwogCiAJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKLQlvZGlyICA9IChpbncoaW8gKyBJT19ESVIpICYgflNUUl9EQVRBKSB8IChTVFJfQ0xLIHwgU1RSX1dSRU4pOworCW9kaXIgPSAoaW53KGlvICsgSU9fRElSKSAmIH5TVFJfREFUQSkgfCAoU1RSX0NMSyB8IFNUUl9XUkVOKTsKIAlvdXR3KG9kaXIgfCBTVFJfREFUQSwgaW8gKyBJT19ESVIpOwogCW91dHcofihTVFJfREFUQSB8IFNUUl9DTEsgfCBTVFJfV1JFTiksIGlvICsgSU9fTUFTSyk7CiAJdWRlbGF5KDE2KTsKLQlmb3IgKGw9MjU7bDtsLS0pIHsKLQkJYml0cyA9ICgoZGF0YSA+PiAxOCkgJiBTVFJfREFUQSkgfCBTVFJfV1JFTiA7CisJZm9yIChsID0gMjU7IGw7IGwtLSkgeworCQliaXRzID0gKChkYXRhID4+IDE4KSAmIFNUUl9EQVRBKSB8IFNUUl9XUkVOOwogCQlkYXRhIDw8PSAxOwkJCS8qIHNoaWZ0IGRhdGEgKi8KIAkJb3V0dyhiaXRzLCBpbyk7CQkJLyogc3RhcnQgc3Ryb2JlICovCiAJCXVkZWxheSgyKTsKQEAgLTE4Myw3ICsxNDEsNyBAQAogCQl1ZGVsYXkoNCk7CiAJfQogCi0JaWYoIWRldi0+bXV0ZWQpCisJaWYgKCFkZXYtPm11dGVkKQogCQlvdXR3KDAsIGlvKTsKIAogCXVkZWxheSg0KTsKQEAgLTE5NSw3OCArMTUzLDc5IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1hZXN0cm8iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiTWFlc3RybyBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlBDSSIpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSh2b2lkKXJhZGlvX2JpdHNfZ2V0KGNhcmQpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmFkaW9fYml0c19nZXQoZGV2KTsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOwogCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYoY2FyZC0+c3RlcmVvKQorCWlmIChkZXYtPnN0ZXJlbykKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gY2FyZC0+dHVuZWQ7CisJdi0+c2lnbmFsID0gZGV2LT50dW5lZDsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKGYtPmZyZXF1ZW5jeSA8IEZSRVFfTE8gfHwgZi0+ZnJlcXVlbmN5ID4gRlJFUV9ISSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmFkaW9fYml0c19zZXQoY2FyZCwgRlJFUTJCSVRTKGYtPmZyZXF1ZW5jeSkpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmFkaW9fYml0c19zZXQoZGV2LCBGUkVRMkJJVFMoZi0+ZnJlcXVlbmN5KSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gQklUUzJGUkVRKHJhZGlvX2JpdHNfZ2V0KGNhcmQpKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWYtPmZyZXF1ZW5jeSA9IEJJVFMyRlJFUShyYWRpb19iaXRzX2dldChkZXYpKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNzQsMTEgKzIzMywxMSBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSBjYXJkLT5tdXRlZDsKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGVkOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODcsMzQgKzI0NiwyNiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXJlZ2lzdGVyIHUxNiBpbyA9IGNhcmQtPmlvOwotCXJlZ2lzdGVyIHUxNiBvbWFzayA9IGludyhpbyArIElPX01BU0spOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXUxNiBpbyA9IGRldi0+aW87CisJdTE2IG9tYXNrOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKIAkJb3V0dyh+U1RSX1dSRU4sIGlvICsgSU9fTUFTSyk7Ci0JCW91dHcoKGNhcmQtPm11dGVkID0gY3RybC0+dmFsdWUgKSA/Ci0JCQkJU1RSX1dSRU4gOiAwLCBpbyk7CisJCWRldi0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwkJb3V0dyhkZXYtPm11dGVkID8gU1RSX1dSRU4gOiAwLCBpbyk7CiAJCXVkZWxheSg0KTsKIAkJb3V0dyhvbWFzaywgaW8gKyBJT19NQVNLKTsKIAkJbXNsZWVwKDEyNSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzIzLDIwICsyNzQsNTcgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbWFlc3Ryb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IF9fZGV2aW5pdCByYWRpb19wb3dlcl9vbihzdHJ1Y3QgcmFkaW9fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1hZXN0cm9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYWVzdHJvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IG1hZXN0cm9fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBtYWVzdHJvX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWFlc3Ryb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCit9OworCitzdGF0aWMgdTE2IF9fZGV2aW5pdCByYWRpb19wb3dlcl9vbihzdHJ1Y3QgbWFlc3RybyAqZGV2KQogewogCXJlZ2lzdGVyIHUxNiBpbyA9IGRldi0+aW87CiAJcmVnaXN0ZXIgdTMyIG9mcmVxOwpAQCAtMzYwLDMzICszNDgsMTEgQEAKIAlyZXR1cm4gKG9mcmVxID09IHJhZGlvX2JpdHNfZ2V0KGRldikpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG1hZXN0cm9faW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCi0JLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAotCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAotCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWFlc3Ryb19yYWRpbyA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiTWFlc3RybyByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJm1hZXN0cm9fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZtYWVzdHJvX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotfTsKLQogc3RhdGljIGludCBfX2RldmluaXQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKnJhZGlvX3VuaXQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqbWFlc3Ryb19yYWRpb19pbnN0OworCXN0cnVjdCBtYWVzdHJvICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAlpbnQgcmV0dmFsOwogCiAJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0zOTcsNDYgKzM2Myw1MyBAQAogCiAJcmV0dmFsID0gLUVOT01FTTsKIAotCXJhZGlvX3VuaXQgPSBremFsbG9jKHNpemVvZigqcmFkaW9fdW5pdCksIEdGUF9LRVJORUwpOwotCWlmIChyYWRpb191bml0ID09IE5VTEwpIHsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JcmFkaW9fdW5pdC0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkgKyBHUElPX0RBVEE7CisJdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWRldi0+cGRldiA9IHBkZXY7CiAKLQltYWVzdHJvX3JhZGlvX2luc3QgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAobWFlc3Ryb19yYWRpb19pbnN0ID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm90IGVub3VnaCBtZW1vcnlcbiIpOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJtYWVzdHJvIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCB2NGwyX2Rldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOwogCQlnb3RvIGVycmZyOwogCX0KIAotCW1lbWNweShtYWVzdHJvX3JhZGlvX2luc3QsICZtYWVzdHJvX3JhZGlvLCBzaXplb2YobWFlc3Ryb19yYWRpbykpOwotCXZpZGVvX3NldF9kcnZkYXRhKG1hZXN0cm9fcmFkaW9faW5zdCwgcmFkaW9fdW5pdCk7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1hZXN0cm9fcmFkaW9faW5zdCk7CisJZGV2LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIEdQSU9fREFUQTsKIAotCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShtYWVzdHJvX3JhZGlvX2luc3QsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7CisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJm1hZXN0cm9fZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJm1hZXN0cm9faW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKKworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKIAkJZ290byBlcnJmcjE7CiAJfQogCi0JaWYgKCFyYWRpb19wb3dlcl9vbihyYWRpb191bml0KSkgeworCWlmICghcmFkaW9fcG93ZXJfb24oZGV2KSkgewogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycnVucjsKIAl9CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICIgdGltZSAiIF9fVElNRV9fICIgICIKLQkJIF9fREFURV9fICJcbiIpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyYWRpbyBjaGlwIGluaXRpYWxpemVkXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAKIAlyZXR1cm4gMDsKIGVycnVucjoKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShtYWVzdHJvX3JhZGlvX2luc3QpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOwogZXJyZnIxOgotCXZpZGVvX2RldmljZV9yZWxlYXNlKG1hZXN0cm9fcmFkaW9faW5zdCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CiBlcnJmcjoKLQlrZnJlZShyYWRpb191bml0KTsKKwlrZnJlZShkZXYpOwogZXJyOgogCXJldHVybiByZXR2YWw7CiAKQEAgLTQ0NCwxMSArNDE3LDMxIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtYWVzdHJvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHRvX21hZXN0cm8odjRsMl9kZXYpOwogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmRldik7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYWVzdHJvX3JfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk2OCksCisJCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCisJCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzgpLAorCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWFlc3Ryb19yX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFlc3Ryb19yX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibWFlc3Ryb19yYWRpbyIsCisJLmlkX3RhYmxlCT0gbWFlc3Ryb19yX3BjaV90YmwsCisJLnByb2JlCQk9IG1hZXN0cm9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYWVzdHJvX3JlbW92ZSksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBtYWVzdHJvX3JhZGlvX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbWFlc3Ryb19yX2RyaXZlcik7CkBAIC00NjYsNyArNDU5LDMgQEAKIAogbW9kdWxlX2luaXQobWFlc3Ryb19yYWRpb19pbml0KTsKIG1vZHVsZV9leGl0KG1hZXN0cm9fcmFkaW9fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFkYW0gVGxhbGthLCBhdGxrYUBwZy5nZGEucGwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgTWFlc3RybyBQQ0kgc291bmQgY2FyZCByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IGM1ZGMwMGEuLjI2MDZmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtMzcsMzggKzM3LDMyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKK01PRFVMRV9BVVRIT1IoIkRpbWl0cm9tYW5vbGFraXMgQXBvc3RvbG9zLCBhcGRpbUBncmVjaWFuLm5ldCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBHdWlsbGVtb3QgTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CisKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuNzciCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsNyw3KQorI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDcsIDcpCiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbzsKLQotI2RlZmluZSBkcHJpbnRrKG51bSwgZm10LCBhcmcuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWlmIChtYXhpcmFkaW9fcmFkaW8uZGVidWcgPj0gbnVtKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCW1heGlyYWRpb19yYWRpby5uYW1lLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfQotfTsKKyNkZWZpbmUgZHByaW50ayhkZXYsIG51bSwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX2RiZyhudW0sIGRlYnVnLCAmZGV2LT52NGwyX2RldiwgZm10LCAjIyBhcmcpCiAKICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9HVUlMTEVNT1QKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HVUlMTEVNT1QgMHg1MDQ2CkBAIC04MCw5MCArNzQsNzAgQEAKIAogCiAvKiBURUE1NzU3IHBpbiBtYXBwaW5ncyAqLwotc3RhdGljIGNvbnN0IGludCBjbGsgPSAxLCBkYXRhID0gMiwgd3JlbiA9IDQsIG1vX3N0ID0gOCwgcG93ZXIgPSAxNiA7CitzdGF0aWMgY29uc3QgaW50IGNsayA9IDEsIGRhdGEgPSAyLCB3cmVuID0gNCwgbW9fc3QgPSA4LCBwb3dlciA9IDE2OwogCi1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKLQotI2RlZmluZSBGUkVRX0xPCQkgNTAqMTYwMDAKLSNkZWZpbmUgRlJFUV9ISQkJMTUwKjE2MDAwCisjZGVmaW5lIEZSRVFfTE8JCSg1MCAqIDE2MDAwKQorI2RlZmluZSBGUkVRX0hJCQkoMTUwICogMTYwMDApCiAKICNkZWZpbmUgRlJFUV9JRiAgICAgICAgIDE3MTIwMCAvKiAxMC43KjE2MDAwICAgKi8KICNkZWZpbmUgRlJFUV9TVEVQICAgICAgIDIwMCAgICAvKiAxMi41KjE2ICAgICAgKi8KIAogLyogKHg9PWZtaHoqMTYqMTAwMCkgLT4gYml0cyAqLwotI2RlZmluZSBGUkVRMkJJVFMoeCkJKCgoICh1bnNpZ25lZCBpbnQpKHgpK0ZSRVFfSUYrKEZSRVFfU1RFUDw8MSkpIFwKLQkJCS8oRlJFUV9TVEVQPDwyKSk8PDIpCisjZGVmaW5lIEZSRVEyQklUUyh4KSBcCisgICgoKCh1bnNpZ25lZCBpbnQpKHgpICsgRlJFUV9JRiArIChGUkVRX1NURVAgPDwgMSkpIC8gKEZSRVFfU1RFUCA8PCAyKSkgPDwgMikKIAogI2RlZmluZSBCSVRTMkZSRVEoeCkJKCh4KSAqIEZSRVFfU1RFUCAtIEZSRVFfSUYpCiAKIAotc3RhdGljIGludCBtYXhpcmFkaW9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdHJ1Y3QgbWF4aXJhZGlvCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQorCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLXN0YXRpYyBpbnQgbWF4aXJhZGlvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYXhpcmFkaW9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gbWF4aXJhZGlvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IG1heGlyYWRpb19leGNsdXNpdmVfcmVsZWFzZSwKLQkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJhZGlvX2RldmljZQotewotCV9fdTE2CWlvLAkvKiBiYXNlIG9mIHJhZGlvIGlvICovCi0JCW11dGVkLAkvKiBWSURFT19BVURJT19NVVRFICovCi0JCXN0ZXJlbywJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCi0JCXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLworCXUxNglpbzsJLyogYmFzZSBvZiByYWRpbyBpbyAqLworCXUxNgltdXRlZDsJLyogVklERU9fQVVESU9fTVVURSAqLworCXUxNglzdGVyZW87CS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLworCXUxNgl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KIAogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwotfSByYWRpb191bml0ID0gewotCS5tdXRlZCA9MSwKLQkuZnJlcSA9IEZSRVFfTE8sCiB9OwogCi1zdGF0aWMgdm9pZCBvdXRiaXQodW5zaWduZWQgbG9uZyBiaXQsIF9fdTE2IGlvKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWF4aXJhZGlvICp0b19tYXhpcmFkaW8oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKLQlpZiAoYml0ICE9IDApCi0JCXsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGEgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGF8Y2xrICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGEgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJfQotCWVsc2UKLQkJewotCQkJb3V0YiggIHBvd2VyfHdyZW4gICAgICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW58Y2xrICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW4gICAgICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQl9CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IG1heGlyYWRpbywgdjRsMl9kZXYpOwogfQogCi1zdGF0aWMgdm9pZCB0dXJuX3Bvd2VyKF9fdTE2IGlvLCBpbnQgcCkKK3N0YXRpYyB2b2lkIG91dGJpdCh1bnNpZ25lZCBsb25nIGJpdCwgdTE2IGlvKQoreworCWludCB2YWwgPSBwb3dlciB8IHdyZW4gfCAoYml0ID8gZGF0YSA6IDApOworCisJb3V0Yih2YWwsIGlvKTsKKwl1ZGVsYXkoNCk7CisJb3V0Yih2YWwgfCBjbGssIGlvKTsKKwl1ZGVsYXkoNCk7CisJb3V0Yih2YWwsIGlvKTsKKwl1ZGVsYXkoNCk7Cit9CisKK3N0YXRpYyB2b2lkIHR1cm5fcG93ZXIoc3RydWN0IG1heGlyYWRpbyAqZGV2LCBpbnQgcCkKIHsKIAlpZiAocCAhPSAwKSB7Ci0JCWRwcmludGsoMSwgIlJhZGlvIHBvd2VyZWQgb25cbiIpOwotCQlvdXRiKHBvd2VyLCBpbyk7CisJCWRwcmludGsoZGV2LCAxLCAiUmFkaW8gcG93ZXJlZCBvblxuIik7CisJCW91dGIocG93ZXIsIGRldi0+aW8pOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwgIlJhZGlvIHBvd2VyZWQgb2ZmXG4iKTsKLQkJb3V0YigwLGlvKTsKKwkJZHByaW50ayhkZXYsIDEsICJSYWRpbyBwb3dlcmVkIG9mZlxuIik7CisJCW91dGIoMCwgZGV2LT5pbyk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfZnJlcShfX3UxNiBpbywgX191MzIgZnJlcSkKK3N0YXRpYyB2b2lkIHNldF9mcmVxKHN0cnVjdCBtYXhpcmFkaW8gKmRldiwgdTMyIGZyZXEpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnQgc2k7CiAJaW50IGJsOworCWludCBpbyA9IGRldi0+aW87CiAJaW50IHZhbCA9IEZSRVEyQklUUyhmcmVxKTsKIAogCS8qIFRFQTU3NTcgc2hpZnQgcmVnaXN0ZXIgYml0cyAoc2VlIHBkZikgKi8KQEAgLTE4OCwxNCArMTYyLDE0IEBACiAJCXNpID4+PSAxOwogCX0KIAotCWRwcmludGsoMSwgIlJhZGlvIGZyZXEgc2V0IHRvICVkLiUwMmQgTUh6XG4iLAorCWRwcmludGsoZGV2LCAxLCAiUmFkaW8gZnJlcSBzZXQgdG8gJWQuJTAyZCBNSHpcbiIsCiAJCQkJZnJlcSAvIDE2MDAwLAogCQkJCWZyZXEgJSAxNjAwMCAqIDEwMCAvIDE2MDAwKTsKIAotCXR1cm5fcG93ZXIoaW8sIDEpOworCXR1cm5fcG93ZXIoZGV2LCAxKTsKIH0KIAotc3RhdGljIGludCBnZXRfc3RlcmVvKF9fdTE2IGlvKQorc3RhdGljIGludCBnZXRfc3RlcmVvKHUxNiBpbykKIHsKIAlvdXRiKHBvd2VyLGlvKTsKIAl1ZGVsYXkoNCk7CkBAIC0yMDMsNyArMTc3LDcgQEAKIAlyZXR1cm4gIShpbmIoaW8pICYgbW9fc3QpOwogfQogCi1zdGF0aWMgaW50IGdldF90dW5lKF9fdTE2IGlvKQorc3RhdGljIGludCBnZXRfdHVuZSh1MTYgaW8pCiB7CiAJb3V0Yihwb3dlcitjbGssaW8pOwogCXVkZWxheSg0KTsKQEAgLTIxMiw5NSArMTg2LDg0IEBACiB9CiAKIAotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbWF4aXJhZGlvIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQlzdHJsY3B5KHYtPmNhcmQsICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1heGlyYWRpbyIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBkZXYpKTsKKwl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQotCXYtPnJhbmdlbG93PUZSRVFfTE87Ci0Jdi0+cmFuZ2VoaWdoPUZSRVFfSEk7Ci0Jdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYoZ2V0X3N0ZXJlbyhjYXJkLT5pbykpCisJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlpZiAoZ2V0X3N0ZXJlbyhkZXYtPmlvKSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsPTB4ZmZmZipnZXRfdHVuZShjYXJkLT5pbyk7CisJdi0+c2lnbmFsID0gMHhmZmZmICogZ2V0X3R1bmUoZGV2LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIkZNIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7CiB9CiAKLQotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKSB7Ci0JCWRwcmludGsoMSwgInJhZGlvIGZyZXEgKCVkLiUwMmQgTUh6KSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKKwkJZHByaW50ayhkZXYsIDEsICJyYWRpbyBmcmVxICglZC4lMDJkIE1Ieikgb3V0IG9mIHJhbmdlICglZC0lZClcbiIsCiAJCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAogCQkJCQlmLT5mcmVxdWVuY3kgJSAxNjAwMCAqIDEwMCAvIDE2MDAwLAogCQkJCQlGUkVRX0xPIC8gMTYwMDAsIEZSRVFfSEkgLyAxNjAwMCk7CkBAIC0zMDgsNzUgKzI3MSw5MSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljYXJkLT5mcmVxID0gZi0+ZnJlcXVlbmN5OwotCXNldF9mcmVxKGNhcmQtPmlvLCBjYXJkLT5mcmVxKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlzZXRfZnJlcShkZXYsIGRldi0+ZnJlcSk7CiAJbXNsZWVwKDEyNSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gY2FyZC0+ZnJlcTsKKwlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQlkcHJpbnRrKDQsICJyYWRpbyBmcmVxIGlzICVkLiUwMmQgTUh6IiwKKwlkcHJpbnRrKGRldiwgNCwgInJhZGlvIGZyZXEgaXMgJWQuJTAyZCBNSHoiLAogCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAogCQkJCWYtPmZyZXF1ZW5jeSAlIDE2MDAwICogMTAwIC8gMTYwMDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuICgwKTsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOwogCX0KLQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWU9Y2FyZC0+bXV0ZWQ7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGVkOworCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQkJaWYoY2FyZC0+bXV0ZWQpCi0JCQkJdHVybl9wb3dlcihjYXJkLT5pbywgMCk7Ci0JCQllbHNlCi0JCQkJc2V0X2ZyZXEoY2FyZC0+aW8sIGNhcmQtPmZyZXEpOwotCQkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlkZXYtPm11dGVkID0gY3RybC0+dmFsdWU7CisJCWlmIChkZXYtPm11dGVkKQorCQkJdHVybl9wb3dlcihkZXYsIDApOworCQllbHNlCisJCQlzZXRfZnJlcShkZXYsIGRldi0+ZnJlcSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgbWF4aXJhZGlvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4aXJhZGlvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWF4aXJhZGlvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IG1heGlyYWRpb19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG1heGlyYWRpb19yZWxlYXNlLAorCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWF4aXJhZGlvX2lvY3RsX29wcyA9IHsKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAogCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKQEAgLTM5Miw2MCArMzcxLDg0IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYXhpcmFkaW9fcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmbWF4aXJhZGlvX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmbWF4aXJhZGlvX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2RldmluaXQgbWF4aXJhZGlvX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWlmKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJc3RydWN0IG1heGlyYWRpbyAqZGV2OworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5tdXRlZCA9IDE7CisJZGV2LT5mcmVxID0gRlJFUV9MTzsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJtYXhpcmFkaW8iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHY0bDJfZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCWdvdG8gZXJyZnI7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApLCAiTWF4aSBSYWRpbyBGTSAyMDAwIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1tYXhpcmFkaW86IGNhbid0IHJlc2VydmUgSS9PIHBvcnRzXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjYW4ndCByZXNlcnZlIEkvTyBwb3J0c1xuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbjsKIAotCXJhZGlvX3VuaXQuaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JbXV0ZXhfaW5pdCgmcmFkaW9fdW5pdC5sb2NrKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmbWF4aXJhZGlvX3JhZGlvLCAmcmFkaW9fdW5pdCk7CisJZGV2LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmbWF4aXJhZGlvX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZtYXhpcmFkaW9faW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJm1heGlyYWRpb19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcHJpbnRrKCJyYWRpby1tYXhpcmFkaW86IGNhbid0IHJlZ2lzdGVyIGRldmljZSEiKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlISIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb247CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tbWF4aXJhZGlvOiB2ZXJzaW9uICIKLQkgICAgICAgRFJJVkVSX1ZFUlNJT04KLQkgICAgICAgIiB0aW1lICIKLQkgICAgICAgX19USU1FX18gIiAgIgotCSAgICAgICBfX0RBVEVfXwotCSAgICAgICAiXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04KKwkJCSIgdGltZSAiIF9fVElNRV9fICIgICIgX19EQVRFX18gIlxuIik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJyYWRpby1tYXhpcmFkaW86IGZvdW5kIEd1aWxsZW1vdCBNQVhJIFJhZGlvIGRldmljZSAoaW8gPSAweCV4KVxuIiwKLQkgICAgICAgcmFkaW9fdW5pdC5pbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiZm91bmQgR3VpbGxlbW90IE1BWEkgUmFkaW8gZGV2aWNlIChpbyA9IDB4JXgpXG4iLAorCSAgICAgICBkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogZXJyX291dDoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKK2VycmZyOgorCWtmcmVlKGRldik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtYXhpcmFkaW9fcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmbWF4aXJhZGlvX3JhZGlvKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHRvX21heGlyYWRpbyh2NGwyX2Rldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWF4aXJhZGlvX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfR1VJTExFTU9ULCBQQ0lfREVWSUNFX0lEX0dVSUxMRU1PVF9NQVhJUkFESU8sCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyAwLH0KKwl7IDAgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1heGlyYWRpb19wY2lfdGJsKTsKQEAgLTQ2OSwxMCArNDcyLDMgQEAKIAogbW9kdWxlX2luaXQobWF4aXJhZGlvX3JhZGlvX2luaXQpOwogbW9kdWxlX2V4aXQobWF4aXJhZGlvX3JhZGlvX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJEaW1pdHJvbWFub2xha2lzIEFwb3N0b2xvcywgYXBkaW1AZ3JlY2lhbi5uZXQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgR3VpbGxlbW90IE1heGkgUmFkaW8gRk0yMDAwIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsbWF4aXJhZGlvX3JhZGlvLmRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwppbmRleCBmZGZjN2JmLi5kZWQyNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogLyoKLSAqIEJpZyB0aGFua3MgdG8gYXV0aG9ycyBvZiBkc2JyMTAwLmMgYW5kIHJhZGlvLXNpNDcweC5jCisgKiBCaWcgdGhhbmtzIHRvIGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycyBvZiBkc2JyMTAwLmMgYW5kIHJhZGlvLXNpNDcweC5jCiAgKgogICogV2hlbiB3b3JrIHdhcyBsb29rZWQgcHJldHR5IGdvb2QsIGkgZGlzY292ZXIgdGhpczoKICAqIGh0dHA6Ly9hdi11c2JyYWRpby5zb3VyY2Vmb3JnZS5uZXQvaW5kZXgucGhwCkBAIC0zMCwxOCArMzAsMjMgQEAKICAqIExhdGVzdCByZWxlYXNlIG9mIHRoZWlycyBwcm9qZWN0IHdhcyBpbiAyMDA1LgogICogUHJvYmFibHksIHRoaXMgZHJpdmVyIGNvdWxkIGJlIGltcHJvdmVkIHRyb3VnaCB1c2luZyB0aGVpcgogICogYWNoaWV2ZW1lbnRzIChzcGVjaWZpY2F0aW9ucyBnaXZlbikuCi0gKiBTbywgd2UgaGF2ZSBzbXRoIHRvIGJlZ2luIHdpdGguCisgKiBBbHNvLCBGYWlkb24gTGlhbWJvdGlzIDxwYXJhdm9pZEBkZWJpYW4ub3JnPiB3cm90ZSBuaWNlIGRyaXZlciBmb3IgdGhpcyByYWRpbworICogaW4gMjAwNy4gSGUgYWxsb3dlZCB0byB1c2UgaGlzIGRyaXZlciB0byBpbXByb3ZlIGN1cnJlbnQgbXI4MDAgcmFkaW8gZHJpdmVyLgorICogaHR0cDovL2tlcm5lbHRyYXAub3JnL21haWxhcmNoaXZlL2xpbnV4LXVzYi1kZXZlbC8yMDA3LzEwLzExLzM0MjQ5MgogICoKLSAqIEhpc3Rvcnk6CiAgKiBWZXJzaW9uIDAuMDE6CUZpcnN0IHdvcmtpbmcgdmVyc2lvbi4KICAqIAkJCUl0J3MgcmVxdWlyZWQgdG8gYmxhY2tsaXN0IEF2ZXJNZWRpYSBVU0IgUmFkaW8KICAqIAkJCWluIHVzYmhpZC9oaWQtcXVpcmtzLmMKKyAqIFZlcnNpb24gMC4xMDoJQSBsb3Qgb2YgY2xlYW51cHMgYW5kIGZpeGVzOiB1bnBsdWdpbmcgdGhlIGRldmljZSwKKyAqIAkJCWZldyBtdXRleCBsb2NrcyB3ZXJlIGFkZGVkLCBjb2RpbnN0eWxlIGlzc3VlcywgZXRjLgorICogCQkJQWRkZWQgc3RlcmVvIHN1cHBvcnQuIFRoYW5rcyB0bworICogCQkJRG91Z2xhcyBTY2hpbGxpbmcgTGFuZGdyYWYgPGRvdWdzbGFuZEBnbWFpbC5jb20+IGFuZAorICogCQkJRGF2aWQgRWxsaW5nc3dvcnRoIDxkYXZpZEBpZGVudGQuZHluZG5zLm9yZz4KKyAqIAkJCWZvciBkaXNjdXNzaW9uLCBoZWxwIGFuZCBzdXBwb3J0LgogICoKICAqIE1hbnkgdGhpbmdzIHRvIGRvOgogICogCS0gQ29ycmVjdCBwb3dlciBtYW5hZ21lbnQgb2YgZGV2aWNlIChzdXNwZW5kICYgcmVzdW1lKQotICogCS0gTWFrZSB4ODYgaW5kZXBlbmRhbmNlIChsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuIHN0dWZmKQogICogCS0gQWRkIGNvZGUgZm9yIHNjYW5uaW5nIGFuZCBzbW9vdGggdHVuaW5nCi0gKiAJLSBDaGVja2VkIGFuZCBhZGQgc3RlcmVvJm1vbm8gc3R1ZmYKICAqIAktIEFkZCBjb2RlIGZvciBzZW5zaXRpdml0eSB2YWx1ZQogICogCS0gQ29ycmVjdCBtaXN0YWtlcwogICogCS0gSW4gSmFwYW4gYW5vdGhlciBGUkVRX01JTiBhbmQgRlJFUV9NQVgKQEAgLTYyLDggKzY3LDggQEAKIC8qIGRyaXZlciBhbmQgbW9kdWxlIGRlZmluaXRpb25zICovCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFsZXhleSBLbGltb3YgPGtsaW1vdi5saW51eEBnbWFpbC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gcmFkaW8gZHJpdmVyIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4wMSIKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xMCIKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAwKQogCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKQEAgLTg3LDYgKzkyLDIyIEBACiAjZGVmaW5lIEZSRVFfTUFYIDEwOC4wCiAjZGVmaW5lIEZSRVFfTVVMIDE2MDAwCiAKKy8qCisgKiBDb21tYW5kcyB0aGF0IGRldmljZSBzaG91bGQgdW5kZXJzdGFuZAorICogTGlzdCBpc250IGZ1bGwgYW5kIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGltcGxlbWVudGF0aW9uIG9mIG5ldyBmdW5jdGlvbnMKKyAqLworI2RlZmluZSBBTVJBRElPX1NFVF9GUkVRCTB4YTQKKyNkZWZpbmUgQU1SQURJT19TRVRfTVVURQkweGFiCisjZGVmaW5lIEFNUkFESU9fU0VUX01PTk8JMHhhZQorCisvKiBDb21mb3J0YWJsZSBkZWZpbmVzIGZvciBhbXJhZGlvX3NldF9tdXRlICovCisjZGVmaW5lIEFNUkFESU9fU1RBUlQJCTB4MDAKKyNkZWZpbmUgQU1SQURJT19TVE9QCQkweDAxCisKKy8qIENvbWZvcnRhYmxlIGRlZmluZXMgZm9yIGFtcmFkaW9fc2V0X3N0ZXJlbyAqLworI2RlZmluZSBXQU5UX1NURVJFTwkJMHgwMAorI2RlZmluZSBXQU5UX01PTk8JCTB4MDEKKwogLyogbW9kdWxlIHBhcmFtZXRlciAqLwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwpAQCAtMTY5LDQwICsxOTAsOCBAQAogCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDAsCiB9OwogCi0vKiBzd2l0Y2ggb24gcmFkaW8uIFNlbmQgOCBieXRlcyB0byBkZXZpY2UuICovCi1zdGF0aWMgaW50IGFtcmFkaW9fc3RhcnQoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKLXsKLQlpbnQgcmV0dmFsOwotCWludCBzaXplOwotCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwotCi0JcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7Ci0JcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7Ci0JcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YWI7Ci0JcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7Ci0KLQlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCi0JCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmFkaW8tPm11dGVkID0gMDsKLQotCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyogc3dpdGNoIG9mZiByYWRpbyAqLwotc3RhdGljIGludCBhbXJhZGlvX3N0b3Aoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKKy8qIHN3aXRjaCBvbi9vZmYgdGhlIHJhZGlvLiBTZW5kIDggYnl0ZXMgdG8gZGV2aWNlICovCitzdGF0aWMgaW50IGFtcmFkaW9fc2V0X211dGUoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbywgY2hhciBhcmd1bWVudCkKIHsKIAlpbnQgcmV0dmFsOwogCWludCBzaXplOwpAQCAtMjE3LDIwICsyMDYsMjAgQEAKIAlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKIAlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKIAlyYWRpby0+YnVmZmVyWzNdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzRdID0gMHhhYjsKLQlyYWRpby0+YnVmZmVyWzVdID0gMHgwMTsKKwlyYWRpby0+YnVmZmVyWzRdID0gQU1SQURJT19TRVRfTVVURTsKKwlyYWRpby0+YnVmZmVyWzVdID0gYXJndW1lbnQ7CiAJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CiAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcmFkaW8tPm11dGVkID0gMTsKKwlyYWRpby0+bXV0ZWQgPSBhcmd1bWVudDsKIAogCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCkBAIC0yNDIsNyArMjMxLDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCWludCBzaXplOwotCXVuc2lnbmVkIHNob3J0IGZyZXFfc2VuZCA9IDB4MTMgKyAoZnJlcSA+PiAzKSAvIDI1OworCXVuc2lnbmVkIHNob3J0IGZyZXFfc2VuZCA9IDB4MTAgKyAoZnJlcSA+PiAzKSAvIDI1OwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQpAQCAtMjU0LDcgKzI0Myw3IEBACiAJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CiAJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CiAJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDM7Ci0JcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YTQ7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IEFNUkFESU9fU0VUX0ZSRVE7CiAJcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDg7CkBAIC0yNjIsNyArMjUxLDcgQEAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpAQCAtMjc5LDI0ICsyNjgsNTcgQEAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcmFkaW8tPnN0ZXJlbyA9IDA7Ci0KIAltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCitzdGF0aWMgaW50IGFtcmFkaW9fc2V0X3N0ZXJlbyhzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvLCBjaGFyIGFyZ3VtZW50KQoreworCWludCByZXR2YWw7CisJaW50IHNpemU7CiAKLS8qIGhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UsIHJlbGVhc2UgZGF0YSBzdHJ1Y3R1cmVzCi1pZiBub3RoaW5nIGtlZXBzIHVzIGZyb20gZG9pbmcgaXQuICBJZiBzb21ldGhpbmcgaXMgc3RpbGwKLWtlZXBpbmcgdXMgYnVzeSwgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgdjRsIHdpbGwgdGFrZSBjYXJlCi1vZiByZWxlYXNpbmcgaXQuICovCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKKworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJhZGlvLT5idWZmZXJbMF0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OworCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOworCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNF0gPSBBTVJBRElPX1NFVF9NT05POworCXJhZGlvLT5idWZmZXJbNV0gPSBhcmd1bWVudDsKKwlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzddID0gMHgwMDsKKworCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKKwkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOworCisJaWYgKHJldHZhbCA8IDAgfHwgc2l6ZSAhPSBCVUZGRVJfTEVOR1RIKSB7CisJCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmFkaW8tPnN0ZXJlbyA9IDE7CisKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIEhhbmRsZSB1bnBsdWdnaW5nIHRoZSBkZXZpY2UuCisgKiBXZSBjYWxsIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlIGluIGFueSBjYXNlLgorICogVGhlIGxhc3QgZnVuY3Rpb24gY2FsbGVkIGluIHRoaXMgcHJvY2VkdXJlIGlzCisgKiB1c2JfYW1yYWRpb19kZXZpY2VfcmVsZWFzZS4KKyAqLwogc3RhdGljIHZvaWQgdXNiX2FtcmFkaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKQEAgLTMxMyw5ICszMzUsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tcjgwMCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlVTQiIpOworCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwpAQCAtMzI2LDYgKzM1MCw3IEBACiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC0zMzcsNyArMzYyLDE2IEBACiAvKiBUT0RPOiBBZGQgZnVuY3Rpb24gd2hpY2ggbG9vayBpcyBzaWduYWwgc3RlcmVvIG9yIG5vdAogICogCWFtcmFkaW9fZ2V0c3RhdChyYWRpbyk7CiAgKi8KLQlyYWRpby0+c3RlcmVvID0gLTE7CisKKy8qIHdlIGNhbGwgYW1yYWRpb19zZXRfc3RlcmVvIHRvIHNldCByYWRpby0+c3RlcmVvCisgKiBIb25lc3RseSwgYW1yYWRpb19nZXRzdGF0IHNob3VsZCBjb3ZlciB0aGlzIGluIGZ1dHVyZSBhbmQKKyAqIGFtcmFkaW9fc2V0X3N0ZXJlbyBzaG91bGRuJ3QgYmUgaGVyZQorICovCisJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX1NURVJFTyk7CisJaWYgKHJldHZhbCA8IDApCisJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInNldCBzdGVyZW8gZmFpbGVkXG4iKTsKKwogCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOICogRlJFUV9NVUw7CkBAIC0zNTgsNiArMzkyLDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKQEAgLTM2NSw2ICs0MDAsMjUgQEAKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlzd2l0Y2ggKHYtPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9zdGVyZW8ocmFkaW8sIFdBTlRfTU9OTyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJInNldCBtb25vIGZhaWxlZFxuIik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX1NURVJFTyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJInNldCBzdGVyZW8gZmFpbGVkXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3MywxMyArNDI3LDE4IEBACiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQogCQlyZXR1cm4gLUVJTzsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQorCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dmFsID0gYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisJaWYgKHJldHZhbCA8IDApCiAJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJInNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTQzOCw2ICs0OTcsNyBAQAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC00NDYsMTMgKzUwNiwxNSBAQAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJaWYgKGFtcmFkaW9fc3RvcChyYWRpbykgPCAwKSB7CisJCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUT1ApOworCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCQkJImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwkJCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RBUlQpOworCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCQkJImFtcmFkaW9fc3RhcnQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLTE7CkBAIC01MDMsMjAgKzU2NSwyOSBAQAogc3RhdGljIGludCB1c2JfYW1yYWRpb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJbG9ja19rZXJuZWwoKTsKIAogCXJhZGlvLT51c2VycyA9IDE7CiAJcmFkaW8tPm11dGVkID0gMTsKIAotCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUQVJUKTsKKwlpZiAocmV0dmFsIDwgMCkgewogCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCSJyYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5XG4iKTsKIAkJcmFkaW8tPnVzZXJzID0gMDsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpIDwgMCkKKworCXJldHZhbCA9IGFtcmFkaW9fc2V0X3N0ZXJlbyhyYWRpbywgV0FOVF9TVEVSRU8pOworCWlmIChyZXR2YWwgPCAwKQorCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgc3RlcmVvIGZhaWxlZFxuIik7CisKKwlyZXR2YWwgPSBhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkic2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCkBAIC01MzMsMTAgKzYwNCwxMiBAQAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT51c2VycyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlpZiAoIXJhZGlvLT5yZW1vdmVkKSB7Ci0JCXJldHZhbCA9IGFtcmFkaW9fc3RvcChyYWRpbyk7CisJCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RPUCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkJImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwpAQCAtNTQ5LDggKzYyMiwxMCBAQAogc3RhdGljIGludCB1c2JfYW1yYWRpb19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKGFtcmFkaW9fc3RvcChyYWRpbykgPCAwKQorCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RPUCk7CisJaWYgKHJldHZhbCA8IDApCiAJCWRldl93YXJuKCZpbnRmLT5kZXYsICJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJnb2luZyBpbnRvIHN1c3BlbmQuLlxuIik7CkBAIC01NjIsOCArNjM3LDEwIEBACiBzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUQVJUKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJmludGYtPmRldiwgImFtcmFkaW9fc3RhcnQgZmFpbGVkXG4iKTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjb21pbmcgb3V0IG9mIHN1c3BlbmQuLlxuIik7CkBAIC02MTQsMjggKzY5MSwzMiBAQAogCS5yZWxlYXNlCT0gdXNiX2FtcmFkaW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi0vKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAotdXNiIGlmIGl0IGlzICovCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZCB1c2IgaWYgaXQgaXMgKi8KIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW87CisJaW50IHJldHZhbDsKIAogCXJhZGlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFtcmFkaW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIShyYWRpbykpCisJaWYgKCFyYWRpbykgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJrbWFsbG9jIGZvciBhbXJhZGlvX2RldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyYWRpby0+YnVmZmVyID0ga21hbGxvYyhCVUZGRVJfTEVOR1RILCBHRlBfS0VSTkVMKTsKIAotCWlmICghKHJhZGlvLT5idWZmZXIpKSB7CisJaWYgKCFyYWRpby0+YnVmZmVyKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImttYWxsb2MgZm9yIHJhZGlvLT5idWZmZXIgZmFpbGVkXG4iKTsKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAotCWlmICghKHJhZGlvLT52aWRlb2RldikpIHsKKwlpZiAoIXJhZGlvLT52aWRlb2RldikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJ2aWRlb19kZXZpY2VfYWxsb2MgZmFpbGVkXG4iKTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NDgsMTIgKzcyOSwxNCBAQAogCXJhZGlvLT51c2VycyA9IDA7CiAJcmFkaW8tPnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJcmFkaW8tPmN1cmZyZXEgPSA5NS4xNiAqIEZSRVFfTVVMOworCXJhZGlvLT5zdGVyZW8gPSAtMTsKIAogCW11dGV4X2luaXQoJnJhZGlvLT5sb2NrKTsKIAogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7Ci0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LAlWRkxfVFlQRV9SQURJTywJcmFkaW9fbnIpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwogCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwppbmRleCAyNTg3MjI3Li5kMWU2YjAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKQEAgLTEzLDM0ICsxMywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIkJlbiBQZmFmZiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2sgSUkgcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLMl9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQgLTEKQEAgLTQ4LDc5ICszMCw4OCBAQAogCiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1JUUkFDSzJfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzcGlubG9ja190IGxvY2s7CiAKLXN0cnVjdCBydF9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwYyBvciAweDMwYykiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBydHJhY2syCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcnRyYWNrMiBydHJhY2syX2NhcmQ7CisKIAogLyogbG9jYWwgdGhpbmdzICovCiAKLXN0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCWlmKGRldi0+bXV0ZWQpCisJaWYgKGRldi0+bXV0ZWQpCiAJCXJldHVybjsKLQlzcGluX2xvY2soJmxvY2spOwotCW91dGIoMSwgaW8pOwotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoMSwgZGV2LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+bXV0ZWQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBydF91bm11dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfdW5tdXRlKHN0cnVjdCBydHJhY2syICpkZXYpCiB7CiAJaWYoZGV2LT5tdXRlZCA9PSAwKQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlvdXRiKDAsIGlvKTsKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDAsIGRldi0+aW8pOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPm11dGVkID0gMDsKIH0KIAotc3RhdGljIHZvaWQgemVybyh2b2lkKQorc3RhdGljIHZvaWQgemVybyhzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCW91dGJfcCgxLCBpbyk7Ci0Jb3V0Yl9wKDMsIGlvKTsKLQlvdXRiX3AoMSwgaW8pOworCW91dGJfcCgxLCBkZXYtPmlvKTsKKwlvdXRiX3AoMywgZGV2LT5pbyk7CisJb3V0Yl9wKDEsIGRldi0+aW8pOwogfQogCi1zdGF0aWMgdm9pZCBvbmUodm9pZCkKK3N0YXRpYyB2b2lkIG9uZShzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCW91dGJfcCg1LCBpbyk7Ci0Jb3V0Yl9wKDcsIGlvKTsKLQlvdXRiX3AoNSwgaW8pOworCW91dGJfcCg1LCBkZXYtPmlvKTsKKwlvdXRiX3AoNywgZGV2LT5pbyk7CisJb3V0Yl9wKDUsIGRldi0+aW8pOwogfQogCi1zdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0cmFjazIgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQogewogCWludCBpOwogCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPmN1cmZyZXEgPSBmcmVxOwogCWZyZXEgPSBmcmVxIC8gMjAwICsgODU2OwogCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQotCW91dGJfcCgweGM4LCBpbyk7Ci0Jb3V0Yl9wKDB4YzksIGlvKTsKLQlvdXRiX3AoMHhjOSwgaW8pOworCW91dGJfcCgweGM4LCBkZXYtPmlvKTsKKwlvdXRiX3AoMHhjOSwgZGV2LT5pbyk7CisJb3V0Yl9wKDB4YzksIGRldi0+aW8pOwogCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCXplcm8gKCk7CisJCXplcm8oZGV2KTsKIAogCWZvciAoaSA9IDE0OyBpID49IDA7IGktLSkKIAkJaWYgKGZyZXEgJiAoMSA8PCBpKSkKLQkJCW9uZSAoKTsKKwkJCW9uZShkZXYpOwogCQllbHNlCi0JCQl6ZXJvICgpOworCQkJemVybyhkZXYpOwogCi0Jb3V0Yl9wKDB4YzgsIGlvKTsKKwlvdXRiX3AoMHhjOCwgZGV2LT5pbyk7CiAJaWYgKCFkZXYtPm11dGVkKQotCQlvdXRiX3AoMCwgaW8pOworCQlvdXRiX3AoMCwgZGV2LT5pbyk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjksNjEgKzEyMCw2MSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tcnRyYWNrMiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJSYWRpb1RyYWNrIElJIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAotc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0cmFjazIgKmRldikKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLworCWludCBzaWcgPSAxOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoaW5iKGRldi0+aW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCisJCXNpZyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODgqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOworCXYtPnJhbmdlbG93ID0gODggKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSAweEZGRkYqcnRfZ2V0c2lnc3RyKHJ0KTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiBydF9nZXRzaWdzdHIocnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlydC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlydF9zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CisJcnRfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0xOTMsMTQgKzE4NCwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA4LDcgKzE5Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMjcsNyArMjE1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI0NiwxNyArMjM0LDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMjY1LDM2ICsyNDIsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHJ0cmFjazJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydF9kZXZpY2UgcnRyYWNrMl91bml0OwotCi1zdGF0aWMgaW50IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHJ0cmFjazJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmcnRyYWNrMl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHJ0cmFjazJfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZydHJhY2syX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBydHJhY2syX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gcnRyYWNrMl9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBydHJhY2syX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrMl9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zMTMsNjIgKzI5Miw2MSBAQAogCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHJ0cmFjazJfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlJhZGlvVHJhY2sgSUkgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZydHJhY2syX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmcnRyYWNrMl9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHJ0cmFjazJfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGMgb3IgaW89MHgzMGNcbiIpOworCXN0cnVjdCBydHJhY2syICpkZXYgPSAmcnRyYWNrMl9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInJ0cmFjazIiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlkZXYtPmlvID0gaW87CisJaWYgKGRldi0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwYyBvciBpbz0weDMwY1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA0LCAicnRyYWNrMiIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJydHJhY2syOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDQsICJydHJhY2syIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGRldi0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZydHJhY2syX3JhZGlvLCAmcnRyYWNrMl91bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgNCk7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlzcGluX2xvY2tfaW5pdCgmbG9jayk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnRyYWNrMl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDQpOworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZydHJhY2syX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZydHJhY2syX2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJBSU1TbGFiIFJhZGlvdHJhY2sgSUkgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBSU1TbGFiIFJhZGlvdHJhY2sgSUkgY2FyZCBkcml2ZXIuXG4iKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQlvdXRiKDEsIGlvKTsKLQlydHJhY2syX3VuaXQubXV0ZWQgPSAxOworCW91dGIoMSwgZGV2LT5pbyk7CisJZGV2LT5tdXRlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiQmVuIFBmYWZmIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgUmFkaW9UcmFjayBJSSByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGMgb3IgMHgzMGMpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBydHJhY2syX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRyYWNrMl9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFjazJfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDQpOworCXN0cnVjdCBydHJhY2syICpkZXYgPSAmcnRyYWNrMl9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgNCk7CiB9CiAKIG1vZHVsZV9pbml0KHJ0cmFjazJfaW5pdCk7Ci1tb2R1bGVfZXhpdChydHJhY2syX2NsZWFudXBfbW9kdWxlKTsKLQotLyoKLSAgTG9jYWwgdmFyaWFibGVzOgotICBjb21waWxlLWNvbW1hbmQ6ICJtbWFrZSIKLSAgRW5kOgotKi8KK21vZHVsZV9leGl0KHJ0cmFjazJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IGQzNThlNDguLmY0Nzg0ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0yMiwxMTMgKzIyLDEwOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9Ci19OwotCi1zdHJ1Y3QgZm1pX2RldmljZQotewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OwotCWludCBjdXJ2b2w7IC8qIDEgb3IgMCAqLwotCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsgLyogZnJlcSBpbiBrSHogKi8KLQlfX3UzMiBmbGFnczsKLX07CitNT0RVTEVfQVVUSE9SKCJQZXRyIFZhbmRyb3ZlYywgdmFuZHJvdmVAdmMuY3Z1dC5jeiBhbmQgTS4gS2lya3dvb2QiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2TUkgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgaW8gPSAtMTsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqZGV2ID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2TUkgY2FyZCAoMHgyODQgb3IgMHgzODQpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgZm1pCit7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CisJaW50IGN1cnZvbDsgLyogMSBvciAwICovCisJdW5zaWduZWQgbG9uZyBjdXJmcmVxOyAvKiBmcmVxIGluIGtIeiAqLworCV9fdTMyIGZsYWdzOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCBmbWkgZm1pX2NhcmQ7CitzdGF0aWMgc3RydWN0IHBucF9kZXYgKmRldjsKIAogLyogZnJlcSBpcyBpbiAxLzE2IGtIeiB0byBpbnRlcm5hbCBudW1iZXIsIGh3IHByZWNpc2lvbiBpcyA1MCBrSHogKi8KIC8qIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgODAwICg9MC4wNU1oeiksCiAgKiBvdGhlciBiaXRzIHdpbGwgYmUgdHJ1bmNhdGVkLCBlLmcgOTIuNzQwMDAxNiAtPiA5Mi43LCBidXQKICAqIDkyLjc0MDAwMTcgLT4gOTIuNzUKICAqLwotI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KS84MDArMjE0KQotI2RlZmluZSBSU0YxNl9NSU5GUkVRIDg3KjE2MDAwCi0jZGVmaW5lIFJTRjE2X01BWEZSRVEgMTA4KjE2MDAwCisjZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpIC8gODAwICsgMjE0KQorI2RlZmluZSBSU0YxNl9NSU5GUkVRICg4NyAqIDE2MDAwKQorI2RlZmluZSBSU0YxNl9NQVhGUkVRICgxMDggKiAxNjAwMCkKIAotc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBwb3J0KQorc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBpbykKIHsKLQl3aGlsZShiaXRzLS0pIHsKLQkJaWYoZGF0YSAmIDEpIHsKLQkJCW91dGIoNSwgcG9ydCk7CisJd2hpbGUgKGJpdHMtLSkgeworCQlpZiAoZGF0YSAmIDEpIHsKKwkJCW91dGIoNSwgaW8pOwogCQkJdWRlbGF5KDYpOwotCQkJb3V0Yig3LCBwb3J0KTsKKwkJCW91dGIoNywgaW8pOwogCQkJdWRlbGF5KDYpOwogCQl9IGVsc2UgewotCQkJb3V0YigxLCBwb3J0KTsKKwkJCW91dGIoMSwgaW8pOwogCQkJdWRlbGF5KDYpOwotCQkJb3V0YigzLCBwb3J0KTsKKwkJCW91dGIoMywgaW8pOwogCQkJdWRlbGF5KDYpOwogCQl9Ci0JCWRhdGE+Pj0xOworCQlkYXRhID4+PSAxOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtaV9tdXRlKGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGZtaV9tdXRlKHN0cnVjdCBmbWkgKmZtaSkKIHsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiKDB4MDAsIHBvcnQpOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKKwlvdXRiKDB4MDAsIGZtaS0+aW8pOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtaV91bm11dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1pX3VubXV0ZShzdHJ1Y3QgZm1pICpmbWkpCiB7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0Jb3V0YigweDA4LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJb3V0YigweDA4LCBmbWktPmlvKTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZtaV9zZXRmcmVxKHN0cnVjdCBmbWlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBmbWlfc2V0ZnJlcShzdHJ1Y3QgZm1pICpmbWksIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKLQlpbnQgbXlwb3J0ID0gZGV2LT5wb3J0OwotCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGRldi0+Y3VyZnJlcTsKKwltdXRleF9sb2NrKCZmbWktPmxvY2spOworCWZtaS0+Y3VyZnJlcSA9IGZyZXE7CiAKLQltdXRleF9sb2NrKCZsb2NrKTsKLQotCW91dGJpdHMoMTYsIFJTRjE2X0VOQ09ERShmcmVxKSwgbXlwb3J0KTsKLQlvdXRiaXRzKDgsIDB4QzAsIG15cG9ydCk7CisJb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCBmbWktPmlvKTsKKwlvdXRiaXRzKDgsIDB4QzAsIGZtaS0+aW8pOwogCW1zbGVlcCgxNDMpOwkJLyogd2FzIHNjaGVkdWxlX3RpbWVvdXQoSFovNykgKi8KLQltdXRleF91bmxvY2soJmxvY2spOwotCWlmIChkZXYtPmN1cnZvbCkgZm1pX3VubXV0ZShteXBvcnQpOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKKwlpZiAoZm1pLT5jdXJ2b2wpCisJCWZtaV91bm11dGUoZm1pKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1pX2dldHNpZ3N0cihzdHJ1Y3QgZm1pX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgZm1pX2dldHNpZ3N0cihzdHJ1Y3QgZm1pICpmbWkpCiB7CiAJaW50IHZhbDsKIAlpbnQgcmVzOwotCWludCBteXBvcnQgPSBkZXYtPnBvcnQ7CiAKLQotCW11dGV4X2xvY2soJmxvY2spOwotCXZhbCA9IGRldi0+Y3Vydm9sID8gMHgwOCA6IDB4MDA7CS8qIHVubXV0ZS9tdXRlICovCi0Jb3V0Yih2YWwsIG15cG9ydCk7Ci0Jb3V0Yih2YWwgfCAweDEwLCBteXBvcnQpOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJdmFsID0gZm1pLT5jdXJ2b2wgPyAweDA4IDogMHgwMDsJLyogdW5tdXRlL211dGUgKi8KKwlvdXRiKHZhbCwgZm1pLT5pbyk7CisJb3V0Yih2YWwgfCAweDEwLCBmbWktPmlvKTsKIAltc2xlZXAoMTQzKTsgCQkvKiB3YXMgc2NoZWR1bGVfdGltZW91dChIWi83KSAqLwotCXJlcyA9IChpbnQpaW5iKG15cG9ydCsxKTsKLQlvdXRiKHZhbCwgbXlwb3J0KTsKKwlyZXMgPSAoaW50KWluYihmbWktPmlvICsgMSk7CisJb3V0Yih2YWwsIGZtaS0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CiAJcmV0dXJuIChyZXMgJiAyKSA/IDAgOiAweEZGRkY7CiB9CiAKQEAgLTEzNyw5ICsxMzMsOSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tc2YxNmZtaSIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNeCByYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCkBAIC0xNDcsMTggKzE0MywxOCBAQAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlpbnQgbXVsdDsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCW11bHQgPSAoZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykgPyAxIDogMTAwMDsKLQl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEvbXVsdDsKLQl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRL211bHQ7CisJdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRIC8gbXVsdDsKKwl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRIC8gbXVsdDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eSA9IGZtaS0+ZmxhZ3MmVjRMMl9UVU5FUl9DQVBfTE9XOworCXYtPmNhcGFiaWxpdHkgPSBmbWktPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXYtPnNpZ25hbCA9IGZtaV9nZXRzaWdzdHIoZm1pKTsKIAlyZXR1cm4gMDsKQEAgLTE2NywzMiArMTYzLDI5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCEoZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCiAJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOwogCWlmIChmLT5mcmVxdWVuY3kgPCBSU0YxNl9NSU5GUkVRIHx8Ci0JCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRICkKKwkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qcm91bmRpbmcgaW4gc3RlcHMgb2YgODAwIHRvIG1hdGNoIHRoIGZyZXEKLQl0aGF0IHdpbGwgYmUgdXNlZCAqLwotCWZtaS0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kvODAwKSo4MDA7Ci0JZm1pX3NldGZyZXEoZm1pKTsKKwkvKiByb3VuZGluZyBpbiBzdGVwcyBvZiA4MDAgdG8gbWF0Y2ggdGhlIGZyZXEKKwkgICB0aGF0IHdpbGwgYmUgdXNlZCAqLworCWZtaV9zZXRmcmVxKGZtaSwgKGYtPmZyZXF1ZW5jeSAvIDgwMCkgKiA4MDApOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBmbWktPmN1cmZyZXE7CkBAIC0yMDQsMTQgKzE5Nyw5IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjE5LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMzIsMzEgKzIyMCwyMCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlmbWlfbXV0ZShmbWktPnBvcnQpOworCQkJZm1pX211dGUoZm1pKTsKIAkJZWxzZQotCQkJZm1pX3VubXV0ZShmbWktPnBvcnQpOworCQkJZm1pX3VubXV0ZShmbWkpOwogCQlmbWktPmN1cnZvbCA9IGN0cmwtPnZhbHVlOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0yNjUsMzYgKzI0MiwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBmbWlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmbWlfZGV2aWNlIGZtaV91bml0OwotCi1zdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZm1pX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmZtaV91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJmZtaV91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm1pX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGZtaV9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBmbWlfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZm1pX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1pX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTMxMywxMyArMjkyLDYgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGZtaV9yYWRpbyA9IHsKLQkubmFtZQkJPSAiU0YxNkZNeCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJmZtaV9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmZtaV9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIC8qIGxhZGlzOiB0aGlzIGlzIG15IGNhcmQuIGRvZXMgYW55IG90aGVyIHR5cGVzIGV4aXN0PyAqLwogc3RhdGljIHN0cnVjdCBpc2FwbnBfZGV2aWNlX2lkIGlkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CUlTQVBOUF9BTllfSUQsIElTQVBOUF9BTllfSUQsCkBAIC0zNDQsNyArMzE2LDcgQEAKIAlpZiAocG5wX2RldmljZV9hdHRhY2goZGV2KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCWlmIChwbnBfYWN0aXZhdGVfZGV2KGRldikgPCAwKSB7Ci0JCXByaW50ayAoInJhZGlvLXNmMTZmbWk6IFBuUCBjb25maWd1cmUgZmFpbGVkIChvdXQgb2YgcmVzb3VyY2VzPylcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IFBuUCBjb25maWd1cmUgZmFpbGVkIChvdXQgb2YgcmVzb3VyY2VzPylcbiIpOwogCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zNTQsNTkgKzMyNiw3MiBAQAogCX0KIAogCWkgPSBwbnBfcG9ydF9zdGFydChkZXYsIDApOwotCXByaW50ayAoInJhZGlvLXNmMTZmbWk6IFBuUCByZXBvcnRzIGNhcmQgYXQgJSN4XG4iLCBpKTsKKwlwcmludGsoS0VSTl9JTkZPICJyYWRpby1zZjE2Zm1pOiBQblAgcmVwb3J0cyBjYXJkIGF0ICUjeFxuIiwgaSk7CiAKIAlyZXR1cm4gaTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZm1pX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgZm1pICpmbWkgPSAmZm1pX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZmbWktPnY0bDJfZGV2OworCWludCByZXM7CisKIAlpZiAoaW8gPCAwKQogCQlpbyA9IGlzYXBucF9mbWlfcHJvYmUoKTsKLQlpZiAoaW8gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogTm8gUG5QIGNhcmQgZm91bmQuXG4iKTsKLQkJcmV0dXJuIGlvOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJzZjE2Zm1pIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJZm1pLT5pbyA9IGlvOworCWlmIChmbWktPmlvIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIk5vIFBuUCBjYXJkIGZvdW5kLlxuIik7CisJCXJldHVybiBmbWktPmlvOwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicmFkaW8tc2YxNmZtaSIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBmbWktPmlvKTsKIAkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlmbWlfdW5pdC5wb3J0ID0gaW87Ci0JZm1pX3VuaXQuY3Vydm9sID0gMDsKLQlmbWlfdW5pdC5jdXJmcmVxID0gMDsKLQlmbWlfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1pX3JhZGlvLCAmZm1pX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihmbWktPmlvLCAyKTsKKwkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCW11dGV4X2luaXQoJmxvY2spOworCWZtaS0+ZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJc3RybGNweShmbWktPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihmbWktPnZkZXYubmFtZSkpOworCWZtaS0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWZtaS0+dmRldi5mb3BzID0gJmZtaV9mb3BzOworCWZtaS0+dmRldi5pb2N0bF9vcHMgPSAmZm1pX2lvY3RsX29wczsKKwlmbWktPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZmbWktPnZkZXYsIGZtaSk7CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbWlfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwltdXRleF9pbml0KCZmbWktPmxvY2spOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1pLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7CisJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNGMTZGTXggcmFkaW8gY2FyZCBkcml2ZXIgYXQgMHgleFxuIiwgaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgImNhcmQgZHJpdmVyIGF0IDB4JXhcbiIsIGZtaS0+aW8pOwogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQlmbWlfbXV0ZShpbyk7CisJZm1pX211dGUoZm1pKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiUGV0ciBWYW5kcm92ZWMsIHZhbmRyb3ZlQHZjLmN2dXQuY3ogYW5kIE0uIEtpcmt3b29kIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNk1JIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZNSSBjYXJkICgweDI4NCBvciAweDM4NCkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGZtaV9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGZtaV9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtaV9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXN0cnVjdCBmbWkgKmZtaSA9ICZmbWlfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbWktPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmZtaS0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGZtaS0+aW8sIDIpOwogCWlmIChkZXYpCiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiB9CiAKIG1vZHVsZV9pbml0KGZtaV9pbml0KTsKLW1vZHVsZV9leGl0KGZtaV9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChmbWlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKaW5kZXggOTJmMTdhMy4uMGJhOWQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwpAQCAtMTgsNDAgKzE4LDI4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworTU9EVUxFX0FVVEhPUigiWmlnbGlvIEZyZWRpYW5vLCBmcmVkZHk3N0BhbmdlbGZpcmUuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNkZNUjIgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaW8gPSAweDM4NDsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2Rk1SMiBjYXJkIChzaG91bGQgYmUgMHgzODQsIGlmIGRvIG5vdCB3b3JrIHRyeSAweDI4NCkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKwogI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQogCiAjZGVmaW5lIEFVRF9WT0xfSU5ERVggMQogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSwKLQlbQVVEX1ZPTF9JTkRFWF0gPSB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMTUsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKLQogI3VuZGVmIERFQlVHCiAvLyNkZWZpbmUgREVCVUcgMQogCkBAIC02MiwxNTYgKzUwLDE2MCBAQAogI2VuZGlmCiAKIC8qIHRoaXMgc2hvdWxkIGJlIHN0YXRpYyB2YXJzIGZvciBtb2R1bGUgc2l6ZSAqLwotc3RydWN0IGZtcjJfZGV2aWNlCitzdHJ1Y3QgZm1yMgogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IGlvOwogCWludCBjdXJ2b2w7IC8qIDAtMTUgKi8KIAlpbnQgbXV0ZTsKIAlpbnQgc3RlcmVvOyAvKiBjYXJkIGlzIHByb2R1Y2luZyBzdGVyZW8gYXVkaW8gKi8KIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCiAJaW50IGNhcmRfdHlwZTsKLQlfX3UzMiBmbGFnczsKKwl1MzIgZmxhZ3M7CiB9OwogCi1zdGF0aWMgaW50IGlvID0gMHgzODQ7Ci1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CitzdGF0aWMgc3RydWN0IGZtcjIgZm1yMl9jYXJkOwogCiAvKiBodyBwcmVjaXNpb24gaXMgMTIuNSBrSHoKICAqIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgMjAwICg9MC4wMTI1TWh6KSwKICAqIG90aGVyIGJpdHMgd2lsbCBiZSB0cnVuY2F0ZWQKICAqLwotI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KS8yMDArODU2KQotI2RlZmluZSBSU0YxNl9NSU5GUkVRIDg3KjE2MDAwCi0jZGVmaW5lIFJTRjE2X01BWEZSRVEgMTA4KjE2MDAwCisjZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpIC8gMjAwICsgODU2KQorI2RlZmluZSBSU0YxNl9NSU5GUkVRICg4NyAqIDE2MDAwKQorI2RlZmluZSBSU0YxNl9NQVhGUkVRICgxMDggKiAxNjAwMCkKIAotc3RhdGljIGlubGluZSB2b2lkIHdhaXQoaW50IG4saW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdChpbnQgbiwgaW50IGlvKQogewotCWZvciAoO247LS1uKSBpbmIocG9ydCk7CisJZm9yICg7IG47IC0tbikKKwkJaW5iKGlvKTsKIH0KIAotc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBuV2FpdCwgaW50IHBvcnQpCitzdGF0aWMgdm9pZCBvdXRiaXRzKGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGF0YSwgaW50IG5XYWl0LCBpbnQgaW8pCiB7CiAJaW50IGJpdDsKLQlmb3IoOy0tYml0cz49MDspIHsKLQkJYml0ID0gKGRhdGE+PmJpdHMpICYgMTsKLQkJb3V0YihiaXQscG9ydCk7Ci0JCXdhaXQobldhaXQscG9ydCk7Ci0JCW91dGIoYml0fDIscG9ydCk7Ci0JCXdhaXQobldhaXQscG9ydCk7Ci0JCW91dGIoYml0LHBvcnQpOwotCQl3YWl0KG5XYWl0LHBvcnQpOworCisJZm9yICg7IC0tYml0cyA+PSAwOykgeworCQliaXQgPSAoZGF0YSA+PiBiaXRzKSAmIDE7CisJCW91dGIoYml0LCBpbyk7CisJCXdhaXQobldhaXQsIGlvKTsKKwkJb3V0YihiaXQgfCAyLCBpbyk7CisJCXdhaXQobldhaXQsIGlvKTsKKwkJb3V0YihiaXQsIGlvKTsKKwkJd2FpdChuV2FpdCwgaW8pOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtcjJfbXV0ZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX211dGUoaW50IGlvKQogewotCW91dGIoMHgwMCwgcG9ydCk7Ci0Jd2FpdCg0LHBvcnQpOworCW91dGIoMHgwMCwgaW8pOworCXdhaXQoNCwgaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1yMl91bm11dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1yMl91bm11dGUoaW50IGlvKQogewotCW91dGIoMHgwNCwgcG9ydCk7Ci0Jd2FpdCg0LHBvcnQpOworCW91dGIoMHgwNCwgaW8pOworCXdhaXQoNCwgaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmbXIyX3N0ZXJlb19tb2RlKGludCBwb3J0KQorc3RhdGljIGlubGluZSBpbnQgZm1yMl9zdGVyZW9fbW9kZShpbnQgaW8pCiB7Ci0JaW50IG4gPSBpbmIocG9ydCk7Ci0Jb3V0Yig2LHBvcnQpOwotCWluYihwb3J0KTsKLQluID0gKChuPj4zKSYxKV4xOworCWludCBuID0gaW5iKGlvKTsKKworCW91dGIoNiwgaW8pOworCWluYihpbyk7CisJbiA9ICgobiA+PiAzKSAmIDEpIF4gMTsKIAlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAic3RlcmVvOiAlZFxuIiwgbikpOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGZtcjJfcHJvZHVjdF9pbmZvKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbXIyX3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZm1yMiAqZGV2KQogewotCWludCBuID0gaW5iKGRldi0+cG9ydCk7CisJaW50IG4gPSBpbmIoZGV2LT5pbyk7CisKIAluICY9IDB4QzE7Ci0JaWYgKG4gPT0gMCkKLQl7CisJaWYgKG4gPT0gMCkgewogCQkvKiB0aGlzIHNob3VsZCBzdXBwb3J0IHZvbHVtZSBzZXQgKi8KIAkJZGV2LT5jYXJkX3R5cGUgPSAxMjsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIG5vdCB2b2x1bWUgKG1pbmUgaXMgMTEpICovCi0JZGV2LT5jYXJkX3R5cGUgPSAobj09MTI4KT8xMTowOworCWRldi0+Y2FyZF90eXBlID0gKG4gPT0gMTI4KSA/IDExIDogMDsKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1yMl9nZXRzaWdzdHIoc3RydWN0IGZtcjJfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBmbXIyX2dldHNpZ3N0cihzdHJ1Y3QgZm1yMiAqZGV2KQogewotCS8qICEhISB3b3JrIG9ubHkgaWYgc2Nhbm5pbmcgZnJlcSAqLwotCWludCBwb3J0ID0gZGV2LT5wb3J0LCByZXMgPSAweGZmZmY7Ci0Jb3V0Yig1LHBvcnQpOwotCXdhaXQoNCxwb3J0KTsKLQlpZiAoIShpbmIocG9ydCkmMSkpIHJlcyA9IDA7CisJLyogISEhIHdvcmtzIG9ubHkgaWYgc2Nhbm5pbmcgZnJlcSAqLworCWludCByZXMgPSAweGZmZmY7CisKKwlvdXRiKDUsIGRldi0+aW8pOworCXdhaXQoNCwgZGV2LT5pbyk7CisJaWYgKCEoaW5iKGRldi0+aW8pICYgMSkpCisJCXJlcyA9IDA7CiAJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgInNpZ25hbDogJWRcbiIsIHJlcykpOwogCXJldHVybiByZXM7CiB9CiAKIC8qIHNldCBmcmVxdWVuY3kgYW5kIHVubXV0ZSBjYXJkICovCi1zdGF0aWMgaW50IGZtcjJfc2V0ZnJlcShzdHJ1Y3QgZm1yMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZm1yMl9zZXRmcmVxKHN0cnVjdCBmbXIyICpkZXYpCiB7Ci0JaW50IHBvcnQgPSBkZXYtPnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmcmVxID0gZGV2LT5jdXJmcmVxOwogCi0JZm1yMl9tdXRlKHBvcnQpOworCWZtcjJfbXV0ZShkZXYtPmlvKTsKIAogCS8qIDB4NDIgZm9yIG1vbm8gb3V0cHV0CiAJICogMHgxMDIgZm9yd2FyZCBzY2FubmluZwogCSAqIDB4MTgyIHNjYW5zaW9uZSBhdmFudGkKIAkgKi8KLQlvdXRiaXRzKDksMHgyLDMscG9ydCk7Ci0Jb3V0Yml0cygxNixSU0YxNl9FTkNPREUoZnJlcSksMixwb3J0KTsKKwlvdXRiaXRzKDksIDB4MiwgMywgZGV2LT5pbyk7CisJb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCAyLCBkZXYtPmlvKTsKIAotCWZtcjJfdW5tdXRlKHBvcnQpOworCWZtcjJfdW5tdXRlKGRldi0+aW8pOwogCiAJLyogd2FpdCAwLjExIHNlYyAqLwogCW1zbGVlcCgxMTApOwogCiAJLyogTk9URSBpZiBtdXRlIHRoaXMgc3RvcCByYWRpbwogCSAgIHlvdSBtdXN0IHNldCBmcmVxIG9uIHVubXV0ZSAqLwotCWRldi0+c3RlcmVvID0gZm1yMl9zdGVyZW9fbW9kZShwb3J0KTsKKwlkZXYtPnN0ZXJlbyA9IGZtcjJfc3RlcmVvX21vZGUoZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qICEhISBub3QgdGVzdGVkLCBpbiBteSBjYXJkIHRoaXMgZG9lcyd0IHdvcmsgISEhICovCi1zdGF0aWMgaW50IGZtcjJfc2V0dm9sdW1lKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbXIyX3NldHZvbHVtZShzdHJ1Y3QgZm1yMiAqZGV2KQogewogCWludCB2b2xbMTZdID0geyAweDAyMSwgMHgwODQsIDB4MDkwLCAweDEwNCwKIAkJCTB4MTEwLCAweDIwNCwgMHgyMTAsIDB4NDAyLAogCQkJMHg0MDQsIDB4NDA4LCAweDQxMCwgMHg4MDEsCiAJCQkweDgwMiwgMHg4MDQsIDB4ODA4LCAweDgxMCB9OwotCWludCBpLCBhLCBwb3J0ID0gZGV2LT5wb3J0OworCWludCBpLCBhOwogCWludCBuID0gdm9sW2Rldi0+Y3Vydm9sICYgMHgwZl07CiAKIAlpZiAoZGV2LT5jYXJkX3R5cGUgIT0gMTEpCiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMTI7IC0taSA+PSAwOyApIHsKLQkJYSA9ICgobiA+PiBpKSAmIDEpIDw8IDY7IC8qIGlmIChhPTApIGE9IDA7IGVsc2UgYT0gMHg0MDsgKi8KLQkJb3V0YihhIHwgNCwgcG9ydCk7Ci0JCXdhaXQoNCwgcG9ydCk7Ci0JCW91dGIoYSB8IDB4MjQsIHBvcnQpOwotCQl3YWl0KDQsIHBvcnQpOwotCQlvdXRiKGEgfCA0LCBwb3J0KTsKLQkJd2FpdCg0LCBwb3J0KTsKKwkJYSA9ICgobiA+PiBpKSAmIDEpIDw8IDY7IC8qIGlmIChhPT0wKSBhID0gMDsgZWxzZSBhID0gMHg0MDsgKi8KKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CisJCW91dGIoYSB8IDB4MjQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCA0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKIAl9CiAJZm9yIChpID0gNjsgLS1pID49IDA7ICkgewogCQlhID0gKCgweDE4ID4+IGkpICYgMSkgPDwgNjsKLQkJb3V0YihhIHwgNCwgcG9ydCk7Ci0JCXdhaXQoNCxwb3J0KTsKLQkJb3V0YihhIHwgMHgyNCwgcG9ydCk7Ci0JCXdhaXQoNCxwb3J0KTsKLQkJb3V0YihhfDQsIHBvcnQpOwotCQl3YWl0KDQscG9ydCk7CisJCW91dGIoYSB8IDQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCAweDI0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CiAJfQotCXdhaXQoNCwgcG9ydCk7Ci0Jb3V0YigweDE0LCBwb3J0KTsKLQorCXdhaXQoNCwgZGV2LT5pbyk7CisJb3V0YigweDE0LCBkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwLDkgKzIxMiw5IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1zZjE2Zm1yMiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNUjIgcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMwLDU0ICsyMjIsNTIgQEAKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJaW50IG11bHQ7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKIAltdWx0ID0gKGZtcjItPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSA/IDEgOiAxMDAwOwotCXYtPnJhbmdlbG93ID0gUlNGMTZfTUlORlJFUS9tdWx0OwotCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEvbXVsdDsKKwl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEgLyBtdWx0OworCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEgLyBtdWx0OwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAl2LT5jYXBhYmlsaXR5ID0gZm1yMi0+ZmxhZ3MmVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBmbXIyLT5zdGVyZW8gPyBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQkJCVY0TDJfVFVORVJfTU9ERV9NT05POwotCW11dGV4X2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCXYtPnNpZ25hbCA9IGZtcjJfZ2V0c2lnc3RyKGZtcjIpOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIShmbXIyLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCiAJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOwogCWlmIChmLT5mcmVxdWVuY3kgPCBSU0YxNl9NSU5GUkVRIHx8Ci0JCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRICkKKwkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qcm91bmRpbmcgaW4gc3RlcHMgb2YgMjAwIHRvIG1hdGNoIHRoIGZyZXEKLQl0aGF0IHdpbGwgYmUgdXNlZCAqLwotCWZtcjItPmN1cmZyZXEgPSAoZi0+ZnJlcXVlbmN5LzIwMCkqMjAwOworCS8qIHJvdW5kaW5nIGluIHN0ZXBzIG9mIDIwMCB0byBtYXRjaCB0aGUgZnJlcQorCSAgIHRoYXQgd2lsbCBiZSB1c2VkICovCisJZm1yMi0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kgLyAyMDApICogMjAwOwogCiAJLyogc2V0IGNhcmQgZnJlcSAoaWYgbm90IG11dGVkKSAqLwogCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKLQkJbXV0ZXhfbG9jaygmbG9jayk7CisJCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCQlmbXIyX3NldGZyZXEoZm1yMik7Ci0JCW11dGV4X3VubG9jaygmbG9jayk7CisJCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjg1LDcgKzI3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gZm1yMi0+Y3VyZnJlcTsKQEAgLTI5NywxMyArMjg3LDE2IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJnJhZGlvX3FjdHJsW2ldLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkvKiBPbmx5IGNhcmRfdHlwZSA9PSAxMSBpbXBsZW1lbnRzIHZvbHVtZSAqLworCQlpZiAoZm1yMi0+Y2FyZF90eXBlID09IDExKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxNSwgMSwgMCk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMzExLDcgKzMwNCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzI3LDE4ICszMjAsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWZtcjItPm11dGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA+IHJhZGlvX3FjdHJsW0FVRF9WT0xfSU5ERVhdLm1heGltdW0pCi0JCQlmbXIyLT5jdXJ2b2wgPSByYWRpb19xY3RybFtBVURfVk9MX0lOREVYXS5tYXhpbXVtOwotCQllbHNlCi0JCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKLQorCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTEsMjUgKzM0MCwxNCBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAibXV0ZVxuIik7CiAjZW5kaWYKIAotCW11dGV4X2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKIAkJZm1yMl9zZXR2b2x1bWUoZm1yMik7CiAJCS8qIFNldCBmcmVxdWVuY3kgYW5kIHVubXV0ZSBjYXJkICovCiAJCWZtcjJfc2V0ZnJlcShmbXIyKTsKIAl9IGVsc2UKLQkJZm1yMl9tdXRlKGZtcjItPnBvcnQpOwotCW11dGV4X3VubG9jaygmbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJCWZtcjJfbXV0ZShmbXIyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzgxLDM2ICszNTksMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1yMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZtcjJfZGV2aWNlIGZtcjJfdW5pdDsKLQotc3RhdGljIGludCBmbXIyX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBmbXIyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmZtcjJfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBmbXIyX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmZm1yMl91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm1yMl9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGZtcjJfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gZm1yMl9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBmbXIyX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1yMl9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQyOSw2NyArNDA5LDY0IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBmbXIyX3JhZGlvID0gewotCS5uYW1lCQk9ICJTRjE2Rk1SMiByYWRpbyIsCi0JLmZvcHMJCT0gJmZtcjJfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZmbXIyX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgZm1yMl9pbml0KHZvaWQpCiB7Ci0JZm1yMl91bml0LnBvcnQgPSBpbzsKLQlmbXIyX3VuaXQuY3Vydm9sID0gMDsKLQlmbXIyX3VuaXQubXV0ZSA9IDA7Ci0JZm1yMl91bml0LmN1cmZyZXEgPSAwOwotCWZtcjJfdW5pdC5zdGVyZW8gPSAxOwotCWZtcjJfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQlmbXIyX3VuaXQuY2FyZF90eXBlID0gMDsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMl9yYWRpbywgJmZtcjJfdW5pdCk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSAmZm1yMl9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZm1yMi0+djRsMl9kZXY7CisJaW50IHJlczsKIAotCW11dGV4X2luaXQoJmxvY2spOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJzZjE2Zm1yMiIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWZtcjItPmlvID0gaW87CisJZm1yMi0+c3RlcmVvID0gMTsKKwlmbXIyLT5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwltdXRleF9pbml0KCZmbXIyLT5sb2NrKTsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJzZjE2Zm1yMiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtcjI6IHJlcXVlc3RfcmVnaW9uIGZhaWxlZCFcbiIpOworCWlmICghcmVxdWVzdF9yZWdpb24oZm1yMi0+aW8sIDIsICJzZjE2Zm1yMiIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicmVxdWVzdF9yZWdpb24gZmFpbGVkIVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1yMl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihmbXIyLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KGZtcjItPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihmbXIyLT52ZGV2Lm5hbWUpKTsKKwlmbXIyLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZm1yMi0+dmRldi5mb3BzID0gJmZtcjJfZm9wczsKKwlmbXIyLT52ZGV2LmlvY3RsX29wcyA9ICZmbXIyX2lvY3RsX29wczsKKwlmbXIyLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMi0+dmRldiwgZm1yMik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbXIyLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTRjE2Rk1SMiByYWRpbyBjYXJkIGRyaXZlciBhdCAweCV4LlxuIiwgaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlNGMTZGTVIyIHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXguXG4iLCBmbXIyLT5pbyk7CiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCW11dGV4X2xvY2soJmxvY2spOwotCWZtcjJfbXV0ZShpbyk7Ci0JZm1yMl9wcm9kdWN0X2luZm8oJmZtcjJfdW5pdCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiY2FyZF90eXBlICVkXG4iLCBmbXIyX3VuaXQuY2FyZF90eXBlKSk7Ci0KLQkvKiBPbmx5IGNhcmRfdHlwZSA9PSAxMSBpbXBsZW1lbnRzIHZvbHVtZSAqLwotCWlmIChmbXIyX3VuaXQuY2FyZF90eXBlICE9IDExKQotCQlyYWRpb19xY3RybFtBVURfVk9MX0lOREVYXS5tYXhpbXVtID0gMTsKLQorCW11dGV4X2xvY2soJmZtcjItPmxvY2spOworCWZtcjJfbXV0ZShmbXIyLT5pbyk7CisJZm1yMl9wcm9kdWN0X2luZm8oZm1yMik7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKKwlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiY2FyZF90eXBlICVkXG4iLCBmbXIyLT5jYXJkX3R5cGUpKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiWmlnbGlvIEZyZWRpYW5vLCBmcmVkZHk3N0BhbmdlbGZpcmUuY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNkZNUjIgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgU0YxNkZNUjIgY2FyZCAoc2hvdWxkIGJlIDB4Mzg0LCBpZiBkbyBub3Qgd29yayB0cnkgMHgyODQpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBmbXIyX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZm1yMl9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtcjJfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCXN0cnVjdCBmbXIyICpmbXIyID0gJmZtcjJfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbXIyLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZmbXIyLT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdChmbXIyX2luaXQpOwotbW9kdWxlX2V4aXQoZm1yMl9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChmbXIyX2V4aXQpOwogCiAjaWZuZGVmIE1PRFVMRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwppbmRleCA0ZGZlZDZhLi43MTNlMjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKQEAgLTUsOCArNSw5IEBACiAgKiAgIC0gU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduCiAgKiAgIC0gQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpIChSRFgtMTU1LUVGKQogICogICAtIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKQorICogICAtIFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI5LDcgKzMwLDcgQEAKICAqIDIwMDgtMDEtMTIJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoJCVZlcnNpb24gMS4wLjAKICAqCQktIEZpcnN0IHdvcmtpbmcgdmVyc2lvbgotICogMjAwOC0wMS0xMyAgIFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqIDIwMDgtMDEtMTMJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoJCVZlcnNpb24gMS4wLjEKICAqCQktIEltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBldmVyeSBmdW5jdGlvbiBub3cgcmV0dXJucyBlcnJubwogICoJCS0gSW1wcm92ZWQgbXVsdGkgdXNlciBhY2Nlc3MgKHN0YXJ0L211dGUvc3RvcCkKQEAgLTEwNCw2ICsxMDUsNyBAQAogICogMjAwOS0wMS0zMQlSaWNrIEJyb25zb24gPHJpY2tAZWZuLm9yZz4KICAqCQlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAgKgkJLSBhZGQgTEVEIHN0YXR1cyBvdXRwdXQKKyAqCQktIGdldCBIVy9TVyB2ZXJzaW9uIGZyb20gc2NyYXRjaHBhZAogICoKICAqIFRvRG86CiAgKiAtIGFkZCBmaXJtd2FyZSBkb3dubG9hZC91cGRhdGUgc3VwcG9ydApAQCAtMTE0LDEwICsxMTYsMTAgQEAKIC8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+IgogI2RlZmluZSBEUklWRVJfTkFNRSAicmFkaW8tc2k0NzB4IgotI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgOCkKKyNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDkpCiAjZGVmaW5lIERSSVZFUl9DQVJEICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIHJhZGlvIGRyaXZlciBmb3IgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycyIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC44IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wLjkiCiAKIAogLyoga2VybmVsIGluY2x1ZGVzICovCkBAIC0xNDUsNyArMTQ3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKSAqLwogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxYjgwLCAweGQ3MDAsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCi0JLyogRGVhbEV4dHJlbWUgVVNCIFJhZGlvICovCisJLyogU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikgKi8KIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNSwgMHg4MTlhLCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CkBAIC0zNDUsNyArMzQ3LDcgQEAKIAogLyogUmVwb3J0IDE5OiBzdHJlYW0gKi8KICNkZWZpbmUgU1RSRUFNX1JFUE9SVF9TSVpFCTMKLSNkZWZpbmUJU1RSRUFNX1JFUE9SVAkJMTkKKyNkZWZpbmUgU1RSRUFNX1JFUE9SVAkJMTkKIAogLyogUmVwb3J0IDIwOiBzY3JhdGNoICovCiAjZGVmaW5lIFNDUkFUQ0hfUEFHRV9TSVpFCTYzCkBAIC0zNTMsOSArMzU1LDEzIEBACiAjZGVmaW5lIFNDUkFUQ0hfUkVQT1JUCQkyMAogCiAvKiBSZXBvcnRzIDE5LTIyOiBmbGFzaCB1cGdyYWRlIG9mIHRoZSBDODA1MUYzMjEgKi8KKyNkZWZpbmUgV1JJVEVfUkVQT1JUX1NJWkUJNAogI2RlZmluZSBXUklURV9SRVBPUlQJCTE5CisjZGVmaW5lIEZMQVNIX1JFUE9SVF9TSVpFCTY0CiAjZGVmaW5lIEZMQVNIX1JFUE9SVAkJMjAKKyNkZWZpbmUgQ1JDX1JFUE9SVF9TSVpFCQkzCiAjZGVmaW5lIENSQ19SRVBPUlQJCTIxCisjZGVmaW5lIFJFU1BPTlNFX1JFUE9SVF9TSVpFCTIKICNkZWZpbmUgUkVTUE9OU0VfUkVQT1JUCQkyMgogCiAvKiBSZXBvcnQgMjM6IGN1cnJlbnRseSB1bnVzZWQsIGJ1dCBjYW4gYWNjZXB0IDYwIGJ5dGUgcmVwb3J0cyBvbiB0aGUgSElEICovCkBAIC00MTQsNyArNDIwLDcgQEAKIAogLyogYm9vdGxvYWRlciBjb21tYW5kcyAqLwogI2RlZmluZSBHRVRfU1dfVkVSU0lPTl9DT01NQU5ECTB4MDAKLSNkZWZpbmUJU0VUX1BBR0VfQ09NTUFORAkweDAxCisjZGVmaW5lIFNFVF9QQUdFX0NPTU1BTkQJMHgwMQogI2RlZmluZSBFUkFTRV9QQUdFX0NPTU1BTkQJMHgwMgogI2RlZmluZSBXUklURV9QQUdFX0NPTU1BTkQJMHgwMwogI2RlZmluZSBDUkNfT05fUEFHRV9DT01NQU5ECTB4MDQKQEAgLTQyOCwxMiArNDM0LDYgQEAKICNkZWZpbmUgQ09NTUFORF9GQUlMRUQJCTB4MDIKICNkZWZpbmUgQ09NTUFORF9QRU5ESU5HCQkweDAzCiAKLS8qIGJ1ZmZlciBzaXplcyAqLwotI2RlZmluZSBDT01NQU5EX0JVRkZFUl9TSVpFCTQKLSNkZWZpbmUgUkVTUE9OU0VfQlVGRkVSX1NJWkUJMgotI2RlZmluZSBGTEFTSF9CVUZGRVJfU0laRQk2NAotI2RlZmluZSBDUkNfQlVGRkVSX1NJWkUJCTMKLQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDY1LDYgKzQ2NSwxMCBAQAogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcmRfaW5kZXg7CiAJdW5zaWduZWQgaW50IHdyX2luZGV4OworCisJLyogc2NyYXRjaCBwYWdlICovCisJdW5zaWduZWQgY2hhciBzb2Z0d2FyZV92ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgaGFyZHdhcmVfdmVyc2lvbjsKIH07CiAKIApAQCAtNDgwLDcgKzQ4NCw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFJFR0lTVEVSX1JFUE9SVHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTU2Niw2MCArNTcwLDYgQEAKIAogCiAvKgotICogc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzIC0gcmVhZCBlbnRpcmUgcmVnaXN0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltFTlRJUkVfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciByZWducjsKLQotCWJ1ZlswXSA9IEVOVElSRV9SRVBPUlQ7Ci0KLQlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCi0JaWYgKHJldHZhbCA+PSAwKQotCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSQURJT19SRUdJU1RFUl9OVU07IHJlZ25yKyspCi0JCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IGdldF91bmFsaWduZWRfYmUxNigKLQkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKLQotCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotCi0vKgotICogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzIC0gcmVhZCByZHMgcmVnaXN0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltSRFNfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0JaW50IHNpemU7Ci0JdW5zaWduZWQgY2hhciByZWducjsKLQotCWJ1ZlswXSA9IFJEU19SRVBPUlQ7Ci0KLQlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhyYWRpby0+dXNiZGV2LAotCQl1c2JfcmN2aW50cGlwZShyYWRpby0+dXNiZGV2LCAxKSwKLQkJKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZiksICZzaXplLCB1c2JfdGltZW91dCk7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKGJ1ZikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCi0JCQkicmV0dXJuIHNpemUgZGlmZmVyczogJWQgIT0gJXp1XG4iLCBzaXplLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCi0JCQkidXNiX2ludGVycnVwdF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7Ci0KLQlpZiAocmV0dmFsID49IDApCi0JCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJEU19SRUdJU1RFUl9OVU07IHJlZ25yKyspCi0JCQlyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0kgKyByZWducl0gPQotCQkJCWdldF91bmFsaWduZWRfYmUxNigKLQkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKLQotCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotCi0vKgogICogc2k0NzB4X3NldF9jaGFuIC0gc2V0IHRoZSBjaGFubmVsCiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3NldF9jaGFuKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgc2hvcnQgY2hhbikKQEAgLTg4Nyw2ICs4MzcsNzAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIEVOVElSRV9SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyAtIHJlYWQgZW50aXJlIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJdW5zaWduZWQgY2hhciBidWZbRU5USVJFX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgcmVnbnI7CisKKwlidWZbMF0gPSBFTlRJUkVfUkVQT1JUOworCisJcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCWlmIChyZXR2YWwgPj0gMCkKKwkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkFESU9fUkVHSVNURVJfTlVNOyByZWducisrKQorCQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoCisJCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFJEU19SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyAtIHJlYWQgcmRzIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJdW5zaWduZWQgY2hhciBidWZbUkRTX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCWludCBzaXplOworCXVuc2lnbmVkIGNoYXIgcmVnbnI7CisKKwlidWZbMF0gPSBSRFNfUkVQT1JUOworCisJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cocmFkaW8tPnVzYmRldiwKKwkJdXNiX3JjdmludHBpcGUocmFkaW8tPnVzYmRldiwgMSksCisJCSh2b2lkICopICZidWYsIHNpemVvZihidWYpLCAmc2l6ZSwgdXNiX3RpbWVvdXQpOworCWlmIChzaXplICE9IHNpemVvZihidWYpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgorCQkJInJldHVybiBzaXplIGRpZmZlcnM6ICVkICE9ICV6dVxuIiwgc2l6ZSwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgorCQkJInVzYl9pbnRlcnJ1cHRfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCisJaWYgKHJldHZhbCA+PSAwKQorCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSRFNfUkVHSVNURVJfTlVNOyByZWducisrKQorCQkJcmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJICsgcmVnbnJdID0KKwkJCQlnZXRfdW5hbGlnbmVkX2JlMTYoCisJCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIExFRF9SRVBPUlQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtOTExLDYgKzkyNSwzNSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gU0NSQVRDSF9SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfc2NyYXRjaF92ZXJzaW9ucyAtIGdldHMgdGhlIHNjcmF0Y2ggcGFnZSBhbmQgdmVyc2lvbiBpbmZvcworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfc2NyYXRjaF9wYWdlX3ZlcnNpb25zKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltTQ1JBVENIX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCisJYnVmWzBdID0gU0NSQVRDSF9SRVBPUlQ7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9zY3JhdGNoOiAiCisJCQkic2k0NzB4X2dldF9yZXBvcnQgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisJZWxzZSB7CisJCXJhZGlvLT5zb2Z0d2FyZV92ZXJzaW9uID0gYnVmWzFdOworCQlyYWRpby0+aGFyZHdhcmVfdmVyc2lvbiA9IGJ1ZlsyXTsKKwl9CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJEUyBEcml2ZXIgRnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMjQsNiArMTE2Nyw3IEBACiAJfQogCiAJaWYgKHJhZGlvLT51c2VycyA9PSAxKSB7CisJCS8qIHN0YXJ0IHJhZGlvICovCiAJCXJldHZhbCA9IHNpNDcweF9zdGFydChyYWRpbyk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKQEAgLTExNjUsNiArMTIwOSw3IEBACiAJCS8qIGNhbmNlbCByZWFkIHByb2Nlc3NlcyAqLwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKIAorCQkvKiBzdG9wIHJhZGlvICovCiAJCXJldHZhbCA9IHNpNDcweF9zdG9wKHJhZGlvKTsKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKIAl9CkBAIC0xMjI2LDkgKzEyNzEsMTEgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwYWJpbGl0eSkKIHsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKLQlzcHJpbnRmKGNhcGFiaWxpdHktPmJ1c19pbmZvLCAiVVNCIik7CisJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCBjYXBhYmlsaXR5LT5idXNfaW5mbywgc2l6ZW9mKGNhcGFiaWxpdHktPmJ1c19pbmZvKSk7CiAJY2FwYWJpbGl0eS0+dmVyc2lvbiA9IERSSVZFUl9LRVJORUxfVkVSU0lPTjsKIAljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgfAogCQlWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwpAQCAtMTYzNiw3ICsxNjgzLDcgQEAKIAkJCXNpemVvZihzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlKSk7CiAJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CiAKLQkvKiBzaG93IHNvbWUgaW5mb3MgYWJvdXQgdGhlIHNwZWNpZmljIGRldmljZSAqLworCS8qIHNob3cgc29tZSBpbmZvcyBhYm91dCB0aGUgc3BlY2lmaWMgc2k0NzB4IGRldmljZSAqLwogCWlmIChzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMocmFkaW8pIDwgMCkgewogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycl9hbGw7CkBAIC0xNjQ0LDcgKzE2OTEsMTYgQEAKIAlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IERldmljZUlEPTB4JTQuNGh4IENoaXBJRD0weCU0LjRoeFxuIiwKIAkJCXJhZGlvLT5yZWdpc3RlcnNbREVWSUNFSURdLCByYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0pOwogCi0JLyogY2hlY2sgaWYgZmlybXdhcmUgaXMgY3VycmVudCAqLworCS8qIGdldCBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgdmVyc2lvbnMgKi8KKwlpZiAoc2k0NzB4X2dldF9zY3JhdGNoX3BhZ2VfdmVyc2lvbnMocmFkaW8pIDwgMCkgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGVycl9hbGw7CisJfQorCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKKwkJCSI6IHNvZnR3YXJlIHZlcnNpb24gJWQsIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCisJCQlyYWRpby0+c29mdHdhcmVfdmVyc2lvbiwgcmFkaW8tPmhhcmR3YXJlX3ZlcnNpb24pOworCisJLyogY2hlY2sgaWYgZGV2aWNlIGFuZCBmaXJtd2FyZSBpcyBjdXJyZW50ICovCiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUpCiAJCQk8IFJBRElPX1NXX1ZFUlNJT05fQ1VSUkVOVCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCkBAIC0xNjU3LDcgKzE3MTMsNyBAQAogCQkJIjogSWYgeW91IGhhdmUgc29tZSB0cm91YmxlIHVzaW5nIHRoaXMgZHJpdmVyLFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCSI6IHBsZWFzZSByZXBvcnQgdG8gVjRMIE1MIGF0ICIKLQkJCSJ2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb21cbiIpOworCQkJImxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZ1xuIik7CiAJfQogCiAJLyogc2V0IGluaXRpYWwgZnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKaW5kZXggMDc5OGQ3MS4uNWIwMDdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwpAQCAtMjcsMTYgKzI3LDI5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCitNT0RVTEVfQVVUSE9SKCJSLk9GRkVSTUFOTlMgJiBvdGhlcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUZXJyYVRlYyBBY3RpdmVSYWRpbyBTdGFuZGFsb25lIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZm5kZWYgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQKKyNkZWZpbmUgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQgMHg1OTAKKyNlbmRpZgorCitzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQ7CitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gY2FyZCAoMHg1OTAgb3IgMHg1OTEpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQogCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CiAJewpAQCAtNTcsMTMgKzcwLDYgQEAKIAl9CiB9OwogCi0jaWZuZGVmIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUCi0jZGVmaW5lIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUIDB4NTkwCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKiogdGhpcyBvbmVzIGFyZSBmb3IgdGhlIHRlcnJhdGVjICoqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEJBU0VQT1JUIAkweDU5MAotI2RlZmluZSBWT0xQT1JUIAkweDU5MQogI2RlZmluZSBXUlRfRElTIAkweDAwCiAjZGVmaW5lIENMS19PRkYJCTB4MDAKICNkZWZpbmUgSUlDX0RBVEEJMHgwMQpAQCAtNzEsMTM4ICs3NywxMjQgQEAKICNkZWZpbmUgREFUQQkJMHgwNAogI2RlZmluZSBDTEtfT04gCQkweDA4CiAjZGVmaW5lIFdSVF9FTgkJMHgxMAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVDsKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzcGlubG9ja190IGxvY2s7Ci0KLXN0cnVjdCB0dF9kZXZpY2UKK3N0cnVjdCB0ZXJyYXRlYwogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGVycmF0ZWMgdGVycmF0ZWNfY2FyZDsKIAogLyogbG9jYWwgdGhpbmdzICovCiAKLXN0YXRpYyB2b2lkIGNhcmRXcml0ZVZvbChpbnQgdm9sdW1lKQorc3RhdGljIHZvaWQgdHRfd3JpdGVfdm9sKHN0cnVjdCB0ZXJyYXRlYyAqdHQsIGludCB2b2x1bWUpCiB7CiAJaW50IGk7Ci0Jdm9sdW1lID0gdm9sdW1lKyh2b2x1bWUgKiAzMik7IC8vIGNoYW5nZSBib3RoIGNoYW5uZWxzCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlmb3IgKGk9MDtpPDg7aSsrKQotCXsKLQkJaWYgKHZvbHVtZSAmICgweDgwPj5pKSkKLQkJCW91dGIoMHg4MCwgVk9MUE9SVCk7Ci0JCWVsc2Ugb3V0YigweDAwLCBWT0xQT1JUKTsKKworCXZvbHVtZSA9IHZvbHVtZSArICh2b2x1bWUgKiAzMik7IC8qIGNoYW5nZSBib3RoIGNoYW5uZWxzICovCisJbXV0ZXhfbG9jaygmdHQtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHZvbHVtZSAmICgweDgwID4+IGkpKQorCQkJb3V0YigweDgwLCB0dC0+aW8gKyAxKTsKKwkJZWxzZQorCQkJb3V0YigweDAwLCB0dC0+aW8gKyAxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmdHQtPmxvY2spOwogfQogCiAKIAotc3RhdGljIHZvaWQgdHRfbXV0ZShzdHJ1Y3QgdHRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0dF9tdXRlKHN0cnVjdCB0ZXJyYXRlYyAqdHQpCiB7Ci0JZGV2LT5tdXRlZCA9IDE7Ci0JY2FyZFdyaXRlVm9sKDApOworCXR0LT5tdXRlZCA9IDE7CisJdHRfd3JpdGVfdm9sKHR0LCAwKTsKIH0KIAotc3RhdGljIGludCB0dF9zZXR2b2woc3RydWN0IHR0X2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCB0dF9zZXR2b2woc3RydWN0IHRlcnJhdGVjICp0dCwgaW50IHZvbCkKIHsKLQotLy8JcHJpbnRrKEtFUk5fRVJSICJzZXR2b2wgY2FsbGVkLCB2b2wgPSAlZFxuIiwgdm9sKTsKLQotCWlmKHZvbCA9PSBkZXYtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLwotCQlpZiAoZGV2LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLwotCQkJZGV2LT5tdXRlZCA9IDA7Ci0JCQljYXJkV3JpdGVWb2wodm9sKTsJLyogZW5hYmxlIGNhcmQgKi8KKwlpZiAodm9sID09IHR0LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KKwkJaWYgKHR0LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLworCQkJdHQtPm11dGVkID0gMDsKKwkJCXR0X3dyaXRlX3ZvbCh0dCwgdm9sKTsJLyogZW5hYmxlIGNhcmQgKi8KIAkJfQotCiAJCXJldHVybiAwOwogCX0KIAotCWlmKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCi0JCWNhcmRXcml0ZVZvbCgwKTsJLyogInR1cm4gb2ZmIGNhcmQiIGJ5IHNldHRpbmcgdm9sIHRvIDAgKi8KLQkJZGV2LT5jdXJ2b2wgPSB2b2w7CS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCisJaWYgKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCisJCXR0X3dyaXRlX3ZvbCh0dCwgMCk7CS8qICJ0dXJuIG9mZiBjYXJkIiBieSBzZXR0aW5nIHZvbCB0byAwICovCisJCXR0LT5jdXJ2b2wgPSB2b2w7CS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCiAJCXJldHVybiAwOwogCX0KIAotCWRldi0+bXV0ZWQgPSAwOwotCi0JY2FyZFdyaXRlVm9sKHZvbCk7Ci0KLQlkZXYtPmN1cnZvbCA9IHZvbDsKLQorCXR0LT5tdXRlZCA9IDA7CisJdHRfd3JpdGVfdm9sKHR0LCB2b2wpOworCXR0LT5jdXJ2b2wgPSB2b2w7CiAJcmV0dXJuIDA7Ci0KIH0KIAogCiAvKiB0aGlzIGlzIHRoZSB3b3JzdCBwYXJ0IGluIHRoaXMgZHJpdmVyICovCiAvKiBtYW55IG1vcmUgb3IgbGVzcyBzdHJhbmdlIHRoaW5ncyBhcmUgZ29pbmcgb24gaGVyZSwgYnV0IGhleSwgaXQgd29ya3MgOikgKi8KIAotc3RhdGljIGludCB0dF9zZXRmcmVxKHN0cnVjdCB0dF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxMSkKK3N0YXRpYyBpbnQgdHRfc2V0ZnJlcShzdHJ1Y3QgdGVycmF0ZWMgKnR0LCB1bnNpZ25lZCBsb25nIGZyZXExKQogewogCWludCBmcmVxOwogCWludCBpOwogCWludCBwOwogCWludCAgdGVtcDsKIAlsb25nIHJlc3Q7Ci0KIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyNV07CQkvKiB3ZSBoYXZlIHRvIGJpdCBzaGlmdCAyNSByZWdpc3RlcnMgKi8KLQlmcmVxID0gZnJlcTEvMTYwOwkJCS8qIGNvbnZlcnQgdGhlIGZyZXEuIHRvIGEgbmljZSB0byBoYW5kbGUgdmFsdWUgKi8KLQlmb3IoaT0yNDtpPi0xO2ktLSkKLQkJYnVmZmVyW2ldPTA7CiAKLQlyZXN0ID0gZnJlcSoxMCsxMDcwMDsJCS8qIGkgb25jZSBoYWQgdW5kZXJzdG9vZCB3aGF0IGlzIGdvaW5nIG9uIGhlcmUgKi8KKwltdXRleF9sb2NrKCZ0dC0+bG9jayk7CisKKwl0dC0+Y3VyZnJlcSA9IGZyZXExOworCisJZnJlcSA9IGZyZXExIC8gMTYwOwkJCS8qIGNvbnZlcnQgdGhlIGZyZXEuIHRvIGEgbmljZSB0byBoYW5kbGUgdmFsdWUgKi8KKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKwlyZXN0ID0gZnJlcSAqIDEwICsgMTA3MDA7CS8qIEkgb25jZSBoYWQgdW5kZXJzdG9vZCB3aGF0IGlzIGdvaW5nIG9uIGhlcmUgKi8KIAkJCQkJLyogbWF5YmUgc29tZSB3aXNlIGd1eSAoZnJpZWRoZWxtPykgY2FuIGNvbW1lbnQgdGhpcyBzdHVmZiAqLwotCWk9MTM7Ci0JcD0xMDsKLQl0ZW1wPTEwMjQwMDsKLQl3aGlsZSAocmVzdCE9MCkKLQl7Ci0JCWlmIChyZXN0JXRlbXAgID09IHJlc3QpCisJaSA9IDEzOworCXAgPSAxMDsKKwl0ZW1wID0gMTAyNDAwOworCXdoaWxlIChyZXN0ICE9IDApIHsKKwkJaWYgKHJlc3QgJSB0ZW1wICA9PSByZXN0KQogCQkJYnVmZmVyW2ldID0gMDsKLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJYnVmZmVyW2ldID0gMTsKLQkJCXJlc3QgPSByZXN0LXRlbXA7CisJCQlyZXN0ID0gcmVzdCAtIHRlbXA7CiAJCX0KIAkJaS0tOwogCQlwLS07Ci0JCXRlbXAgPSB0ZW1wLzI7CisJCXRlbXAgPSB0ZW1wIC8gMjsKIAl9CiAKLQlzcGluX2xvY2soJmxvY2spOwotCi0JZm9yIChpPTI0O2k+LTE7aS0tKQkJCS8qIGJpdCBzaGlmdCB0aGUgdmFsdWVzIHRvIHRoZSByYWRpb2NhcmQgKi8KLQl7Ci0JCWlmIChidWZmZXJbaV09PTEpCi0JCXsKLQkJCW91dGIoV1JUX0VOfERBVEEsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfERBVEF8Q0xLX09OICAsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfERBVEEsIEJBU0VQT1JUKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW91dGIoV1JUX0VOfDB4MDAsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfDB4MDB8Q0xLX09OICAsIEJBU0VQT1JUKTsKKwlmb3IgKGkgPSAyNDsgaSA+IC0xOyBpLS0pIHsJLyogYml0IHNoaWZ0IHRoZSB2YWx1ZXMgdG8gdGhlIHJhZGlvY2FyZCAqLworCQlpZiAoYnVmZmVyW2ldID09IDEpIHsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSB8IENMS19PTiwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSwgdHQtPmlvKTsKKwkJfSBlbHNlIHsKKwkJCW91dGIoV1JUX0VOIHwgMHgwMCwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgMHgwMCB8IENMS19PTiwgdHQtPmlvKTsKIAkJfQogCX0KLQlvdXRiKDB4MDAsIEJBU0VQT1JUKTsKKwlvdXRiKDB4MDAsIHR0LT5pbyk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0dC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0dF9nZXRzaWdzdHIoc3RydWN0IHR0X2RldmljZSAqZGV2KQkJLyogVE9ETyAqLworc3RhdGljIGludCB0dF9nZXRzaWdzdHIoc3RydWN0IHRlcnJhdGVjICp0dCkKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLworCWlmIChpbmIodHQtPmlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLwogfQpAQCAtMjEyLDUzICsyMDQsNTAgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRlcnJhdGVjIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkFjdGl2ZVJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4RkZGRip0dF9nZXRzaWdzdHIodHQpOworCXYtPnNpZ25hbCA9IDB4RkZGRiAqIHR0X2dldHNpZ3N0cih0dCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXR0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXR0X3NldGZyZXEodHQsIHR0LT5jdXJmcmVxKTsKKwl0dF9zZXRmcmVxKHR0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHR0LT5jdXJmcmVxOwpAQCAtMjcyLDggKzI2MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewogCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjgzLDcgKzI3MSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMwMiw3ICsyOTAsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMTgsMTcgKzMwNiw2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMzcsMzYgKzMxNCwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0ZXJyYXRlY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHR0X2RldmljZSB0ZXJyYXRlY191bml0OwotCi1zdGF0aWMgaW50IHRlcnJhdGVjX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0ZXJyYXRlY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0ZXJyYXRlY191bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHRlcnJhdGVjX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmdGVycmF0ZWNfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHRlcnJhdGVjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRlcnJhdGVjX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdGVycmF0ZWNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzg1LDYwICszNjQsNjMgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0ZXJyYXRlY19yYWRpbyA9IHsKLQkubmFtZQkJPSAiVGVycmFUZWMgQWN0aXZlUmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZ0ZXJyYXRlY19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnRlcnJhdGVjX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgdGVycmF0ZWNfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSAmdGVycmF0ZWNfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnR0LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInRlcnJhdGVjIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJdHQtPmlvID0gaW87CisJaWYgKHR0LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4NTkwIG9yIDB4NTkxXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJ0ZXJyYXRlYyIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJUZXJyYVRlYzogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0dC0+aW8sIDIsICJ0ZXJyYXRlYyIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnRlcnJhdGVjX3JhZGlvLCAmdGVycmF0ZWNfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHR0LT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlzcGluX2xvY2tfaW5pdCgmbG9jayk7CisJc3RybGNweSh0dC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHR0LT52ZGV2Lm5hbWUpKTsKKwl0dC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXR0LT52ZGV2LmZvcHMgPSAmdGVycmF0ZWNfZm9wczsKKwl0dC0+dmRldi5pb2N0bF9vcHMgPSAmdGVycmF0ZWNfaW9jdGxfb3BzOworCXR0LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHQtPnZkZXYsIHR0KTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnRlcnJhdGVjX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwltdXRleF9pbml0KCZ0dC0+bG9jayk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0dC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHQtPnY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24odHQtPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyLlxuIik7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0KLQkvKiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGFsbCB0aGUgd2F5IGRvd24gICovCi0JY2FyZFdyaXRlVm9sKDApOwotCXRlcnJhdGVjX3VuaXQuY3Vydm9sID0gMDsKLQorCXR0X3dyaXRlX3ZvbCh0dCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlIuT0ZGRVJNQU5OUyAmIG90aGVycyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFRlcnJhVGVjIEFjdGl2ZVJhZGlvIFN0YW5kYWxvbmUgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gY2FyZCAoMHg1OTAgb3IgMHg1OTEpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0ZXJyYXRlY19jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHRlcnJhdGVjX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdGVycmF0ZWNfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOwotCXByaW50ayhLRVJOX0lORk8gIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlciB1bmxvYWRlZC5cbiIpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSAmdGVycmF0ZWNfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnR0LT52NGwyX2RldjsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0dC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHQtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbih0dC0+aW8sIDIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlciB1bmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdCh0ZXJyYXRlY19pbml0KTsKLW1vZHVsZV9leGl0KHRlcnJhdGVjX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KHRlcnJhdGVjX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKaW5kZXggYmRmOWNiNi4uZDFiZTY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwpAQCAtMTksNDkgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gMjA0OCwKLQkJLmRlZmF1bHRfdmFsdWUgPSA2NTUzNSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCi0JCS5uYW1lICAgICAgICAgID0gIkJhc3MiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNDM3MCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAzMjc2OCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVHJlYmxlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDQzNzAsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9LAotfTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMsIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogYWNjZXB0YWJsZSBwb3J0czogMHgzNTAgKEpQMyBzaG9ydGVkKSwgMHgzNTggKEpQMyBvcGVuKSAqLwogCkBAIC03MSwyNiArMzcsNDEgQEAKIAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19UUlVTVF9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIGludCBpb3ZhbCA9IDB4ZjsKLXN0YXRpYyBfX3UxNiBjdXJ2b2w7Ci1zdGF0aWMgX191MTYgY3VyYmFzczsKLXN0YXRpYyBfX3UxNiBjdXJ0cmVibGU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJmcmVxOwotc3RhdGljIGludCBjdXJzdGVyZW87Ci1zdGF0aWMgaW50IGN1cm11dGU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgdHJ1c3QgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOworCWludCBpb3ZhbDsKKwlfX3UxNiBjdXJ2b2w7CisJX191MTYgY3VyYmFzczsKKwlfX3UxNiBjdXJ0cmVibGU7CisJaW50IG11dGVkOworCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKKwlpbnQgY3Vyc3RlcmVvOworCWludCBjdXJtdXRlOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCB0cnVzdCB0cnVzdF9jYXJkOwogCiAvKiBpMmMgYWRkcmVzc2VzICovCiAjZGVmaW5lIFREQTczMThfQUREUiAweDg4CiAjZGVmaW5lIFRTQTYwNjBUX0FERFIgMHhjNAogCi0jZGVmaW5lIFRSX0RFTEFZIGRvIHsgaW5iKGlvKTsgaW5iKGlvKTsgaW5iKGlvKTsgfSB3aGlsZSgwKQotI2RlZmluZSBUUl9TRVRfU0NMIG91dGIoaW92YWwgfD0gMiwgaW8pCi0jZGVmaW5lIFRSX0NMUl9TQ0wgb3V0Yihpb3ZhbCAmPSAweGZkLCBpbykKLSNkZWZpbmUgVFJfU0VUX1NEQSBvdXRiKGlvdmFsIHw9IDEsIGlvKQotI2RlZmluZSBUUl9DTFJfU0RBIG91dGIoaW92YWwgJj0gMHhmZSwgaW8pCisjZGVmaW5lIFRSX0RFTEFZIGRvIHsgaW5iKHRyLT5pbyk7IGluYih0ci0+aW8pOyBpbmIodHItPmlvKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVFJfU0VUX1NDTCBvdXRiKHRyLT5pb3ZhbCB8PSAyLCB0ci0+aW8pCisjZGVmaW5lIFRSX0NMUl9TQ0wgb3V0Yih0ci0+aW92YWwgJj0gMHhmZCwgdHItPmlvKQorI2RlZmluZSBUUl9TRVRfU0RBIG91dGIodHItPmlvdmFsIHw9IDEsIHRyLT5pbykKKyNkZWZpbmUgVFJfQ0xSX1NEQSBvdXRiKHRyLT5pb3ZhbCAmPSAweGZlLCB0ci0+aW8pCiAKLXN0YXRpYyB2b2lkIHdyaXRlX2kyYyhpbnQgbiwgLi4uKQorc3RhdGljIHZvaWQgd3JpdGVfaTJjKHN0cnVjdCB0cnVzdCAqdHIsIGludCBuLCAuLi4pCiB7CiAJdW5zaWduZWQgY2hhciB2YWwsIG1hc2s7CiAJdmFfbGlzdCBhcmdzOwpAQCAtMTM2LDYyICsxMTcsNzcgQEAKIAl2YV9lbmQoYXJncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldHZvbChfX3UxNiB2b2wpCitzdGF0aWMgdm9pZCB0cl9zZXR2b2woc3RydWN0IHRydXN0ICp0ciwgX191MTYgdm9sKQogewotCWN1cnZvbCA9IHZvbCAvIDIwNDg7Ci0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgY3Vydm9sIF4gMHgxZik7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJ2b2wgPSB2b2wgLyAyMDQ4OworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCB0ci0+Y3Vydm9sIF4gMHgxZik7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmFzc3RyZWJsZTJjaGlwWzE1XSA9IHsKIAkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKIH07CiAKLXN0YXRpYyB2b2lkIHRyX3NldGJhc3MoX191MTYgYmFzcykKK3N0YXRpYyB2b2lkIHRyX3NldGJhc3Moc3RydWN0IHRydXN0ICp0ciwgX191MTYgYmFzcykKIHsKLQljdXJiYXNzID0gYmFzcyAvIDQzNzA7Ci0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg2MCB8IGJhc3N0cmVibGUyY2hpcFtjdXJiYXNzXSk7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJiYXNzID0gYmFzcyAvIDQzNzA7CisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4NjAgfCBiYXNzdHJlYmxlMmNoaXBbdHItPmN1cmJhc3NdKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0dHJlYmxlKF9fdTE2IHRyZWJsZSkKK3N0YXRpYyB2b2lkIHRyX3NldHRyZWJsZShzdHJ1Y3QgdHJ1c3QgKnRyLCBfX3UxNiB0cmVibGUpCiB7Ci0JY3VydHJlYmxlID0gdHJlYmxlIC8gNDM3MDsKLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDcwIHwgYmFzc3RyZWJsZTJjaGlwW2N1cnRyZWJsZV0pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VydHJlYmxlID0gdHJlYmxlIC8gNDM3MDsKKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHg3MCB8IGJhc3N0cmVibGUyY2hpcFt0ci0+Y3VydHJlYmxlXSk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldHN0ZXJlbyhpbnQgc3RlcmVvKQorc3RhdGljIHZvaWQgdHJfc2V0c3RlcmVvKHN0cnVjdCB0cnVzdCAqdHIsIGludCBzdGVyZW8pCiB7Ci0JY3Vyc3RlcmVvID0gISFzdGVyZW87Ci0JaW92YWwgPSAoaW92YWwgJiAweGZiKSB8ICghY3Vyc3RlcmVvIDw8IDIpOwotCW91dGIoaW92YWwsIGlvKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cnN0ZXJlbyA9ICEhc3RlcmVvOworCXRyLT5pb3ZhbCA9ICh0ci0+aW92YWwgJiAweGZiKSB8ICghdHItPmN1cnN0ZXJlbyA8PCAyKTsKKwlvdXRiKHRyLT5pb3ZhbCwgdHItPmlvKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0bXV0ZShpbnQgbXV0ZSkKK3N0YXRpYyB2b2lkIHRyX3NldG11dGUoc3RydWN0IHRydXN0ICp0ciwgaW50IG11dGUpCiB7Ci0JY3VybXV0ZSA9ICEhbXV0ZTsKLQlpb3ZhbCA9IChpb3ZhbCAmIDB4ZjcpIHwgKGN1cm11dGUgPDwgMyk7Ci0Jb3V0Yihpb3ZhbCwgaW8pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VybXV0ZSA9ICEhbXV0ZTsKKwl0ci0+aW92YWwgPSAodHItPmlvdmFsICYgMHhmNykgfCAodHItPmN1cm11dGUgPDwgMyk7CisJb3V0Yih0ci0+aW92YWwsIHRyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgdHJfZ2V0c2lnc3RyKHZvaWQpCitzdGF0aWMgaW50IHRyX2dldHNpZ3N0cihzdHJ1Y3QgdHJ1c3QgKnRyKQogewogCWludCBpLCB2OwogCi0JZm9yKGkgPSAwLCB2ID0gMDsgaSA8IDEwMDsgaSsrKSB2IHw9IGluYihpbyk7Ci0JcmV0dXJuICh2ICYgMSk/IDAgOiAweGZmZmY7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCWZvciAoaSA9IDAsIHYgPSAwOyBpIDwgMTAwOyBpKyspCisJCXYgfD0gaW5iKHRyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CisJcmV0dXJuICh2ICYgMSkgPyAwIDogMHhmZmZmOwogfQogCi1zdGF0aWMgaW50IHRyX2dldHN0ZXJlbyh2b2lkKQorc3RhdGljIGludCB0cl9nZXRzdGVyZW8oc3RydWN0IHRydXN0ICp0cikKIHsKIAkvKiBkb24ndCBrbm93IGhvdyB0byBkZXRlcm1pbmUgaXQsIGp1c3QgcmV0dXJuIHRoZSBzZXR0aW5nICovCi0JcmV0dXJuIGN1cnN0ZXJlbzsKKwlyZXR1cm4gdHItPmN1cnN0ZXJlbzsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0ZnJlcSh1bnNpZ25lZCBsb25nIGYpCitzdGF0aWMgdm9pZCB0cl9zZXRmcmVxKHN0cnVjdCB0cnVzdCAqdHIsIHVuc2lnbmVkIGxvbmcgZikKIHsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cmZyZXEgPSBmOwogCWYgLz0gMTYwOwkvKiBDb252ZXJ0IHRvIDEwIGtIeiB1bml0cwkqLwotCWYgKz0gMTA3MDsJLyogQWRkIDEwLjcgTUh6IElGCQkJKi8KLQotCXdyaXRlX2kyYyg1LCBUU0E2MDYwVF9BRERSLCAoZiA8PCAxKSB8IDEsIGYgPj4gNywgMHg2MCB8ICgoZiA+PiAxNSkgJiAxKSwgMCk7CisJZiArPSAxMDcwOwkvKiBBZGQgMTAuNyBNSHogSUYJCSovCisJd3JpdGVfaTJjKHRyLCA1LCBUU0E2MDYwVF9BRERSLCAoZiA8PCAxKSB8IDEsIGYgPj4gNywgMHg2MCB8ICgoZiA+PiAxNSkgJiAxKSwgMCk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTk5LDY4ICsxOTUsNzUgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRydXN0Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlRydXN0IEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODcuNSoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJhbmdlbG93ID0gODcuNSAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYgKHRyX2dldHN0ZXJlbygpKQorCWlmICh0cl9nZXRzdGVyZW8odHIpKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSB0cl9nZXRzaWdzdHIoKTsKKwl2LT5zaWduYWwgPSB0cl9nZXRzaWdzdHIodHIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKHYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl0cl9zZXRzdGVyZW8odHIsIHYtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQljdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXRyX3NldGZyZXEoY3VyZnJlcSk7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl0cl9zZXRmcmVxKHRyLCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBjdXJmcmVxOworCWYtPmZyZXF1ZW5jeSA9IHRyLT5jdXJmcmVxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgMjA0OCwgNjU1MzUpOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNDM3MCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI2OCwxOCArMjcxLDIwIEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gY3VybXV0ZTsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3VybXV0ZTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gY3Vydm9sICogMjA0ODsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3Vydm9sICogMjA0ODsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljdHJsLT52YWx1ZSA9IGN1cmJhc3MgKiA0MzcwOworCQljdHJsLT52YWx1ZSA9IHRyLT5jdXJiYXNzICogNDM3MDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWN0cmwtPnZhbHVlID0gY3VydHJlYmxlICogNDM3MDsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3VydHJlYmxlICogNDM3MDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMjg4LDM0ICsyOTMsMjUgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJdHJfc2V0bXV0ZShjdHJsLT52YWx1ZSk7CisJCXRyX3NldG11dGUodHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXRyX3NldHZvbChjdHJsLT52YWx1ZSk7CisJCXRyX3NldHZvbCh0ciwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCXRyX3NldGJhc3MoY3RybC0+dmFsdWUpOworCQl0cl9zZXRiYXNzKHRyLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQl0cl9zZXR0cmVibGUoY3RybC0+dmFsdWUpOworCQl0cl9zZXR0cmVibGUodHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMjQsMzQgKzMyMCwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1c3Rfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0cnVzdF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdHJ1c3RfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHJ1c3RfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHRydXN0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRydXN0X29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdHJ1c3RfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzcwLDU5ICszNzAsNzIgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0cnVzdF9yYWRpbyA9IHsKLQkubmFtZQkJPSAiVHJ1c3QgRk0gUmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZ0cnVzdF9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnRydXN0X2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgdHJ1c3RfaW5pdCh2b2lkKQogewotCWlmKGlvID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB0cnVzdCAqdHIgPSAmdHJ1c3RfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInRydXN0Iiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJdHItPmlvID0gaW87CisJdHItPmlvdmFsID0gMHhmOworCW11dGV4X2luaXQoJnRyLT5sb2NrKTsKKworCWlmICh0ci0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDB4MzUwIG9yIDB4MzU4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgIlRydXN0IEZNIFJhZGlvIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0cnVzdDogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0ci0+aW8sIDIsICJUcnVzdCBGTSBSYWRpbyIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCB0ci0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0cnVzdF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHRyLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KHRyLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodHItPnZkZXYubmFtZSkpOworCXRyLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJdHItPnZkZXYuZm9wcyA9ICZ0cnVzdF9mb3BzOworCXRyLT52ZGV2LmlvY3RsX29wcyA9ICZ0cnVzdF9pb2N0bF9vcHM7CisJdHItPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZ0ci0+dmRldiwgdHIpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbih0ci0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJUcnVzdCBGTSBSYWRpbyBjYXJkIGRyaXZlciB2MS4wLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVHJ1c3QgRk0gUmFkaW8gY2FyZCBkcml2ZXIgdjEuMC5cbiIpOwogCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg4MCk7CS8qIHNwZWFrZXIgYXR0LiBMRiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweGEwKTsJLyogc3BlYWtlciBhdHQuIFJGID0gMCBkQiAqLwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4YzApOwkvKiBzcGVha2VyIGF0dC4gTFIgPSAwIGRCICovCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHhlMCk7CS8qIHNwZWFrZXIgYXR0LiBSUiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDQwKTsJLyogc3RlcmVvIDEgaW5wdXQsIGdhaW4gPSAxOC43NSBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDgwKTsJLyogc3BlYWtlciBhdHQuIExGID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGEwKTsJLyogc3BlYWtlciBhdHQuIFJGID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGMwKTsJLyogc3BlYWtlciBhdHQuIExSID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGUwKTsJLyogc3BlYWtlciBhdHQuIFJSID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDQwKTsJLyogc3RlcmVvIDEgaW5wdXQsIGdhaW4gPSAxOC43NSBkQiAqLwogCi0JdHJfc2V0dm9sKDB4ODAwMCk7Ci0JdHJfc2V0YmFzcygweDgwMDApOwotCXRyX3NldHRyZWJsZSgweDgwMDApOwotCXRyX3NldHN0ZXJlbygxKTsKKwl0cl9zZXR2b2wodHIsIDB4ZmZmZik7CisJdHJfc2V0YmFzcyh0ciwgMHg4MDAwKTsKKwl0cl9zZXR0cmVibGUodHIsIDB4ODAwMCk7CisJdHJfc2V0c3RlcmVvKHRyLCAxKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQl0cl9zZXRtdXRlKDEpOworCXRyX3NldG11dGUodHIsIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMsIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUcnVzdCBGTSBSYWRpbyBjYXJkICgweDM1MCBvciAweDM1OCkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdHJ1c3RfbW9kdWxlKHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRydXN0X3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RydWN0IHRydXN0ICp0ciA9ICZ0cnVzdF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRyLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHRyLT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KHRydXN0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCA1YzNiMzE5Li45MmQ5MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtMzQsMzcgKzM0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJICAqLwotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4JLyogcmFkaW8gY2FyZCBzdGF0dXMgcmVwb3J0CSAgKi8KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMgICAgICAgICAgICovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMSwxKQotI2RlZmluZSBCQU5ORVIgIlR5cGhvb24gUmFkaW8gQ2FyZCBkcml2ZXIgdjAuMS4xXG4iCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSAxPDwxNCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKLQorTU9EVUxFX0FVVEhPUigiRHIuIEhlbnJpayBTZWlkZWwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUeXBob29uIHJhZGlvIGNhcmQgKGEuay5hLiBFY29SYWRpbykuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUIC0xCkBAIC03NCwxMyArNTIsMjYgQEAKICNkZWZpbmUgQ09ORklHX1JBRElPX1RZUEhPT05fTVVURUZSRVEgMAogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX1BST0NfRlMKLSN1bmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0jZW5kaWYKK3N0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUOworc3RhdGljIGludCByYWRpb19uciA9IC0xOwogCi1zdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBpb2Jhc2U7Cittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFR5cGhvb24gY2FyZCAoMHgzMTYgb3IgMHgzMzYpIik7CisKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXV0ZWZyZXEgPSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUTsKK21vZHVsZV9wYXJhbShtdXRlZnJlcSwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhtdXRlZnJlcSwgIkZyZXF1ZW5jeSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkIChpbiBrSHopIik7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAxKQorCisjZGVmaW5lIEJBTk5FUiAiVHlwaG9vbiBSYWRpbyBDYXJkIGRyaXZlciB2MC4xLjFcbiIKKworc3RydWN0IHR5cGhvb24geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJaW50IG11dGVkOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKQEAgLTg4LDI1ICs3OSwxOSBAQAogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAotc3RhdGljIHZvaWQgdHlwaG9vbl9zZXR2b2xfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCk7Ci1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KTsKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSk7Ci1zdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgdHlwaG9vbl91bm11dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB0eXBob29uX3NldHZvbChzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCk7CitzdGF0aWMgc3RydWN0IHR5cGhvb24gdHlwaG9vbl9jYXJkOwogCi1zdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIHZvaWQgdHlwaG9vbl9zZXR2b2xfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbiAqZGV2LCBpbnQgdm9sKQogewogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJdm9sID4+PSAxNDsJCQkJLyogTWFwIDE2IGJpdCB0byAyIGJpdCAqLwogCXZvbCAmPSAzOwotCW91dGJfcCh2b2wgLyAyLCBkZXYtPmlvYmFzZSk7CQkvKiBTZXQgdGhlIHZvbHVtZSwgaGlnaCBiaXQuICovCi0Jb3V0Yl9wKHZvbCAlIDIsIGRldi0+aW9iYXNlICsgMik7CS8qIFNldCB0aGUgdm9sdW1lLCBsb3cgYml0LiAqLworCW91dGJfcCh2b2wgLyAyLCBkZXYtPmlvKTsJCS8qIFNldCB0aGUgdm9sdW1lLCBoaWdoIGJpdC4gKi8KKwlvdXRiX3Aodm9sICUgMiwgZGV2LT5pbyArIDIpOwkvKiBTZXQgdGhlIHZvbHVtZSwgbG93IGJpdC4gKi8KIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxX2dlbmVyaWMoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uICpkZXYsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCiB7CiAJdW5zaWduZWQgbG9uZyBvdXR2YWw7CkBAIC0xMzAsMjIgKzExNSwyMiBAQAogCW91dHZhbCAtPSAoMTAgKiB4ICogeCArIDEwNDMzKSAvIDIwODY2OwogCW91dHZhbCArPSA0ICogeCAtIDExNTA1OwogCi0Jb3V0Yl9wKChvdXR2YWwgPj4gOCkgJiAweDAxLCBkZXYtPmlvYmFzZSArIDQpOwotCW91dGJfcChvdXR2YWwgPj4gOSwgZGV2LT5pb2Jhc2UgKyA2KTsKLQlvdXRiX3Aob3V0dmFsICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyA4KTsKKwlvdXRiX3AoKG91dHZhbCA+PiA4KSAmIDB4MDEsIGRldi0+aW8gKyA0KTsKKwlvdXRiX3Aob3V0dmFsID4+IDksIGRldi0+aW8gKyA2KTsKKwlvdXRiX3Aob3V0dmFsICYgMHhmZiwgZGV2LT5pbyArIDgpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCitzdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcShzdHJ1Y3QgdHlwaG9vbiAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKIAl0eXBob29uX3NldGZyZXFfZ2VuZXJpYyhkZXYsIGZyZXF1ZW5jeSk7CiAJZGV2LT5jdXJmcmVxID0gZnJlcXVlbmN5OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb24gKmRldikKIHsKIAlpZiAoZGV2LT5tdXRlZCA9PSAxKQogCQlyZXR1cm47CkBAIC0xNTQsNyArMTM5LDcgQEAKIAlkZXYtPm11dGVkID0gMTsKIH0KIAotc3RhdGljIHZvaWQgdHlwaG9vbl91bm11dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0eXBob29uX3VubXV0ZShzdHJ1Y3QgdHlwaG9vbiAqZGV2KQogewogCWlmIChkZXYtPm11dGVkID09IDApCiAJCXJldHVybjsKQEAgLTE2Myw3ICsxNDgsNyBAQAogCWRldi0+bXV0ZWQgPSAwOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fc2V0dm9sKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCB0eXBob29uX3NldHZvbChzdHJ1Y3QgdHlwaG9vbiAqZGV2LCBpbnQgdm9sKQogewogCWlmIChkZXYtPm11dGVkICYmIHZvbCAhPSAwKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgKi8KIAkJZGV2LT5jdXJ2b2wgPSB2b2w7CkBAIC0xODgsOSArMTczLDkgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXR5cGhvb24iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiVHlwaG9vbiBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCkBAIC0yMDAsMTAgKzE4NSwxMCBAQAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4Ny41KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKKwl2LT5yYW5nZWxvdyA9IDg3LjUgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKQEAgLTIxNCw0NCArMTk5LDM3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KIAorc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGRldi0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JdHlwaG9vbi0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQl0eXBob29uX3NldGZyZXEodHlwaG9vbiwgdHlwaG9vbi0+Y3VyZnJlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCi17Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IHR5cGhvb24tPmN1cmZyZXE7Ci0KKwlkZXYtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJdHlwaG9vbl9zZXRmcmVxKGRldiwgZGV2LT5jdXJmcmVxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCAxNjM4NCwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI1OSwxNCArMjM3LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gdHlwaG9vbi0+bXV0ZWQ7CisJCWN0cmwtPnZhbHVlID0gZGV2LT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gdHlwaG9vbi0+Y3Vydm9sOworCQljdHJsLT52YWx1ZSA9IGRldi0+Y3Vydm9sOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNzUsMzMgKzI1MywyMiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKQotCQkJdHlwaG9vbl9tdXRlKHR5cGhvb24pOworCQkJdHlwaG9vbl9tdXRlKGRldik7CiAJCWVsc2UKLQkJCXR5cGhvb25fdW5tdXRlKHR5cGhvb24pOworCQkJdHlwaG9vbl91bm11dGUoZGV2KTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXR5cGhvb25fc2V0dm9sKHR5cGhvb24sIGN0cmwtPnZhbHVlKTsKKwkJdHlwaG9vbl9zZXR2b2woZGV2LCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMxMCw0NSArMjc3LDYyIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKworCXY0bDJfaW5mbyh2NGwyX2RldiwgQkFOTkVSKTsKKyNpZmRlZiBNT0RVTEUKKwl2NGwyX2luZm8odjRsMl9kZXYsICJMb2FkIHR5cGU6IERyaXZlciBsb2FkZWQgYXMgYSBtb2R1bGVcblxuIik7CisjZWxzZQorCXY0bDJfaW5mbyh2NGwyX2RldiwgIkxvYWQgdHlwZTogRHJpdmVyIGNvbXBpbGVkIGludG8ga2VybmVsXG5cbiIpOworI2VuZGlmCisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwgZGV2LT5jdXJmcmVxID4+IDQpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgInZvbHVtZSA9ICVkXG4iLCBkZXYtPmN1cnZvbCk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAibXV0ZSA9ICVzXG4iLCBkZXYtPm11dGVkID8gICJvbiIgOiAib2ZmIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiaW8gPSAweCV4XG4iLCBkZXYtPmlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJtdXRlIGZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsIGRldi0+bXV0ZWZyZXEgPj4gNCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgdHlwaG9vbl91bml0ID0KK3N0YXRpYyBpbnQgdHlwaG9vbl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCS5pb2Jhc2UJCT0gQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVCwKLQkuY3VyZnJlcQk9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRLAotCS5tdXRlZnJlcQk9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRLAotfTsKLQotc3RhdGljIGludCB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0eXBob29uX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdHlwaG9vbl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNsZWFyX2JpdCgwLCAmdHlwaG9vbl91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdHlwaG9vbl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHR5cGhvb25fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gdHlwaG9vbl9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHR5cGhvb25fcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0eXBob29uX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX2xvZ19zdGF0dXMgID0gdmlkaW9jX2xvZ19zdGF0dXMsCiAJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKIAkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLApAQCAtMzYzLDEyNSArMzQ3LDcyIEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0eXBob29uX3JhZGlvID0gewotCS5uYW1lCQk9ICJUeXBob29uIFJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmdHlwaG9vbl9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnR5cGhvb25faW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi0jaWZkZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwotCi1zdGF0aWMgaW50IHR5cGhvb25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQkjaWZkZWYgTU9EVUxFCi0JICAgICNkZWZpbmUgTU9EVUxFUFJPQ1NUUklORyAiRHJpdmVyIGxvYWRlZCBhcyBhIG1vZHVsZSIKLQkjZWxzZQotCSAgICAjZGVmaW5lIE1PRFVMRVBST0NTVFJJTkcgIkRyaXZlciBjb21waWxlZCBpbnRvIGtlcm5lbCIKLQkjZW5kaWYKLQotCXNlcV9wdXRzKG0sIEJBTk5FUik7Ci0Jc2VxX3B1dHMobSwgIkxvYWQgdHlwZTogIiBNT0RVTEVQUk9DU1RSSU5HICJcblxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwKLQkJdHlwaG9vbl91bml0LmN1cmZyZXEgPj4gNCk7Ci0Jc2VxX3ByaW50ZihtLCAidm9sdW1lID0gJWRcbiIsIHR5cGhvb25fdW5pdC5jdXJ2b2wpOwotCXNlcV9wcmludGYobSwgIm11dGUgPSAlc1xuIiwgdHlwaG9vbl91bml0Lm11dGVkID8KLQkJIm9uIiA6ICJvZmYiKTsKLQlzZXFfcHJpbnRmKG0sICJpb2Jhc2UgPSAweCV4XG4iLCB0eXBob29uX3VuaXQuaW9iYXNlKTsKLQlzZXFfcHJpbnRmKG0sICJtdXRlIGZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsCi0JCXR5cGhvb25fdW5pdC5tdXRlZnJlcSA+PiA0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0eXBob29uX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdHlwaG9vbl9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eXBob29uX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gdHlwaG9vbl9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0jZW5kaWYgLyogQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUyAqLwotCi1NT0RVTEVfQVVUSE9SKCJEci4gSGVucmlrIFNlaWRlbCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFR5cGhvb24gcmFkaW8gY2FyZCAoYS5rLmEuIEVjb1JhZGlvKS4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBpbyA9IC0xOwotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFR5cGhvb24gY2FyZCAoMHgzMTYgb3IgMHgzMzYpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG11dGVmcmVxOwotbW9kdWxlX3BhcmFtKG11dGVmcmVxLCB1bG9uZywgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG11dGVmcmVxLCAiRnJlcXVlbmN5IHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQgKGluIGtIeikiKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCB0eXBob29uX2luaXQodm9pZCkKIHsKLSNpZmRlZiBNT0RVTEUKLQlpZiAoaW8gPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDMxNiBvciBpbz0weDMzNlxuIik7CisJc3RydWN0IHR5cGhvb24gKmRldiA9ICZ0eXBob29uX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAidHlwaG9vbiIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWRldi0+aW8gPSBpbzsKKwlkZXYtPmN1cmZyZXEgPSBkZXYtPm11dGVmcmVxID0gbXV0ZWZyZXE7CisKKwlpZiAoZGV2LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzE2IG9yIGlvPTB4MzM2XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXR5cGhvb25fdW5pdC5pb2Jhc2UgPSBpbzsKIAotCWlmIChtdXRlZnJlcSA8IDg3MDAwIHx8IG11dGVmcmVxID4gMTA4NTAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogWW91IG11c3Qgc2V0IGEgZnJlcXVlbmN5IChpbiBrSHopIHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQsXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBlLmcuIHdpdGggXCJtdXRlZnJlcT04NzUwMFwiICg4NzAwMCA8PSBtdXRlZnJlcSA8PSAxMDg1MDApXG4iKTsKKwlpZiAoZGV2LT5tdXRlZnJlcSA8IDg3MDAwIHx8IGRldi0+bXV0ZWZyZXEgPiAxMDg1MDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYSBmcmVxdWVuY3kgKGluIGtIeikgdXNlZCB3aGVuIG11dGluZyB0aGUgY2FyZCxcbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImUuZy4gd2l0aCBcIm11dGVmcmVxPTg3NTAwXCIgKDg3MDAwIDw9IG11dGVmcmVxIDw9IDEwODUwMClcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdHlwaG9vbl91bml0Lm11dGVmcmVxID0gbXV0ZWZyZXE7Ci0jZW5kaWYgLyogTU9EVUxFICovCiAKLQlwcmludGsoS0VSTl9JTkZPIEJBTk5FUik7Ci0JbXV0ZXhfaW5pdCgmdHlwaG9vbl91bml0LmxvY2spOwotCWlvID0gdHlwaG9vbl91bml0LmlvYmFzZTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA4LCAidHlwaG9vbiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkgICAgICAgdHlwaG9vbl91bml0LmlvYmFzZSk7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDgsICJ0eXBob29uIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsCisJCSAgICAgICBkZXYtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmdHlwaG9vbl9yYWRpbywgJnR5cGhvb25fdW5pdCk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHlwaG9vbl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDgpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA4KTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKwl2NGwyX2luZm8odjRsMl9kZXYsIEJBTk5FUik7CisKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmdHlwaG9vbl9mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmdHlwaG9vbl9pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tdHlwaG9vbjogcG9ydCAweCV4LlxuIiwgdHlwaG9vbl91bml0LmlvYmFzZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tdHlwaG9vbjogbXV0ZSBmcmVxdWVuY3kgaXMgJWx1IGtIei5cbiIsCi0JICAgICAgIHR5cGhvb25fdW5pdC5tdXRlZnJlcSk7Ci0JdHlwaG9vbl91bml0Lm11dGVmcmVxIDw8PSA0OworCXY0bDJfaW5mbyh2NGwyX2RldiwgInBvcnQgMHgleC5cbiIsIGRldi0+aW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIm11dGUgZnJlcXVlbmN5IGlzICVsdSBrSHouXG4iLCBkZXYtPm11dGVmcmVxKTsKKwlkZXYtPm11dGVmcmVxIDw8PSA0OwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCXR5cGhvb25fbXV0ZSgmdHlwaG9vbl91bml0KTsKLQotI2lmZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMKLQlpZiAoIXByb2NfY3JlYXRlKCJkcml2ZXIvcmFkaW8tdHlwaG9vbiIsIDAsIE5VTEwsICZ0eXBob29uX3Byb2NfZm9wcykpCi0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogcmVnaXN0ZXJpbmcgL3Byb2MvZHJpdmVyL3JhZGlvLXR5cGhvb24gZmFpbGVkXG4iKTsKLSNlbmRpZgorCXR5cGhvb25fbXV0ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB0eXBob29uX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHlwaG9vbl9leGl0KHZvaWQpCiB7CisJc3RydWN0IHR5cGhvb24gKmRldiA9ICZ0eXBob29uX2NhcmQ7CiAKLSNpZmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYWRpby10eXBob29uIiwgTlVMTCk7Ci0jZW5kaWYKLQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0eXBob29uX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgOCk7CiB9CiAKIG1vZHVsZV9pbml0KHR5cGhvb25faW5pdCk7Ci1tb2R1bGVfZXhpdCh0eXBob29uX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KHR5cGhvb25fZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggZDJhYzE3ZS4uMWY4NWYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTMzLDMzICszMywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheSwgbXNsZWVwICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA0MDk2LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiQy52YW4gU2NoYWlrIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19aT0xUUklYX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1pPTFRSSVhfUE9SVCAtMQpAQCAtNjgsOSArNTEsMTYgQEAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogCi1zdHJ1Y3Qgem9sX2RldmljZSB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7Cittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFpvbHRyaXggUmFkaW8gUGx1cyAoMHgyMGMgb3IgMHgzMGMpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3Qgem9sdHJpeCB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOwpAQCAtNzgsMTYxICs2OCwxNTggQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKLXN0YXRpYyBpbnQgem9sX3NldHZvbChzdHJ1Y3Qgem9sX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIHN0cnVjdCB6b2x0cml4IHpvbHRyaXhfY2FyZDsKKworc3RhdGljIGludCB6b2xfc2V0dm9sKHN0cnVjdCB6b2x0cml4ICp6b2wsIGludCB2b2wpCiB7Ci0JZGV2LT5jdXJ2b2wgPSB2b2w7Ci0JaWYgKGRldi0+bXV0ZWQpCisJem9sLT5jdXJ2b2wgPSB2b2w7CisJaWYgKHpvbC0+bXV0ZWQpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCWlmICh2b2wgPT0gMCkgewotCQlvdXRiKDAsIGlvKTsKLQkJb3V0YigwLCBpbyk7Ci0JCWluYihpbyArIDMpOyAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCWluYih6b2wtPmlvICsgMyk7ICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCisJCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jb3V0YihkZXYtPmN1cnZvbC0xLCBpbyk7CisJb3V0Yih6b2wtPmN1cnZvbC0xLCB6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCWluYihpbyArIDIpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlpbmIoem9sLT5pbyArIDIpOworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgem9sX211dGUoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHpvbF9tdXRlKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7Ci0JZGV2LT5tdXRlZCA9IDE7Ci0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlvdXRiKDAsIGlvKTsKLQlvdXRiKDAsIGlvKTsKLQlpbmIoaW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwl6b2wtPm11dGVkID0gMTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOworCW91dGIoMCwgem9sLT5pbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlpbmIoem9sLT5pbyArIDMpOyAgICAgICAgICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB6b2xfdW5tdXRlKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB6b2xfdW5tdXRlKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7Ci0JZGV2LT5tdXRlZCA9IDA7Ci0Jem9sX3NldHZvbChkZXYsIGRldi0+Y3Vydm9sKTsKKwl6b2wtPm11dGVkID0gMDsKKwl6b2xfc2V0dm9sKHpvbCwgem9sLT5jdXJ2b2wpOwogfQogCi1zdGF0aWMgaW50IHpvbF9zZXRmcmVxKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3N0YXRpYyBpbnQgem9sX3NldGZyZXEoc3RydWN0IHpvbHRyaXggKnpvbCwgdW5zaWduZWQgbG9uZyBmcmVxKQogewogCS8qIHR1bmVzIHRoZSByYWRpbyB0byB0aGUgZGVzaXJlZCBmcmVxdWVuY3kgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnpvbC0+djRsMl9kZXY7CiAJdW5zaWduZWQgbG9uZyBsb25nIGJpdG1hc2ssIGYsIG07Ci0JdW5zaWduZWQgaW50IHN0ZXJlbyA9IGRldi0+c3RlcmVvOworCXVuc2lnbmVkIGludCBzdGVyZW8gPSB6b2wtPnN0ZXJlbzsKIAlpbnQgaTsKIAogCWlmIChmcmVxID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogcmVjZWl2ZWQgemVybyBmcmVxLiBGYWlsZWQgdG8gc2V0LlxuIik7CisJCXY0bDJfd2Fybih2NGwyX2RldiwgImNhbm5vdCBzZXQgYSBmcmVxdWVuY3kgb2YgMC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltID0gKGZyZXEgLyAxNjAgLSA4ODAwKSAqIDI7Ci0JZiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIG0gKyAweDRkMWM7CisJZiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpbSArIDB4NGQxYzsKIAogCWJpdG1hc2sgPSAweGM0ODA0MDJjMTAwODAwMDB1bGw7CiAJaSA9IDQ1OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCi0Jb3V0YigwLCBpbyk7Ci0Jb3V0YigwLCBpbyk7Ci0JaW5iKGlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KKwl6b2wtPmN1cmZyZXEgPSBmcmVxOwogCi0Jb3V0YigweDQwLCBpbyk7Ci0Jb3V0YigweGMwLCBpbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCWluYih6b2wtPmlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KIAotCWJpdG1hc2sgPSAoYml0bWFzayBeICgoZiAmIDB4ZmYpIDw8IDQ3KSBeICgoZiAmIDB4ZmYwMCkgPDwgMzApIF4gKCBzdGVyZW8gPDwgMzEpKTsKKwlvdXRiKDB4NDAsIHpvbC0+aW8pOworCW91dGIoMHhjMCwgem9sLT5pbyk7CisKKwliaXRtYXNrID0gKGJpdG1hc2sgXiAoKGYgJiAweGZmKSA8PCA0NykgXiAoKGYgJiAweGZmMDApIDw8IDMwKSBeIChzdGVyZW8gPDwgMzEpKTsKIAl3aGlsZSAoaS0tKSB7CiAJCWlmICgoYml0bWFzayAmIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCkgIT0gMCkgewotCQkJb3V0YigweDgwLCBpbyk7CisJCQlvdXRiKDB4ODAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHgwMCwgaW8pOworCQkJb3V0YigweDAwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4ODAsIGlvKTsKKwkJCW91dGIoMHg4MCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwogCQl9IGVsc2UgewotCQkJb3V0YigweGMwLCBpbyk7CisJCQlvdXRiKDB4YzAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHg0MCwgaW8pOworCQkJb3V0YigweDQwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4YzAsIGlvKTsKKwkJCW91dGIoMHhjMCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwogCQl9CiAJCWJpdG1hc2sgKj0gMjsKIAl9CiAJLyogdGVybWluYXRpb24gc2VxdWVuY2UgKi8KLQlvdXRiKDB4ODAsIGlvKTsKLQlvdXRiKDB4YzAsIGlvKTsKLQlvdXRiKDB4NDAsIGlvKTsKKwlvdXRiKDB4ODAsIHpvbC0+aW8pOworCW91dGIoMHhjMCwgem9sLT5pbyk7CisJb3V0YigweDQwLCB6b2wtPmlvKTsKIAl1ZGVsYXkoMTAwMCk7Ci0JaW5iKGlvKzIpOworCWluYih6b2wtPmlvICsgMik7CiAKIAl1ZGVsYXkoMTAwMCk7CiAKLQlpZiAoZGV2LT5tdXRlZCkKLQl7Ci0JCW91dGIoMCwgaW8pOwotCQlvdXRiKDAsIGlvKTsKLQkJaW5iKGlvICsgMyk7CisJaWYgKHpvbC0+bXV0ZWQpIHsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJaW5iKHpvbC0+aW8gKyAzKTsKIAkJdWRlbGF5KDEwMDApOwogCX0KIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAKLQlpZighZGV2LT5tdXRlZCkKLQl7Ci0JCXpvbF9zZXR2b2woZGV2LCBkZXYtPmN1cnZvbCk7Ci0JfQorCWlmICghem9sLT5tdXRlZCkKKwkJem9sX3NldHZvbCh6b2wsIHpvbC0+Y3Vydm9sKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogR2V0IHNpZ25hbCBzdHJlbmd0aCAqLwotCi1zdGF0aWMgaW50IHpvbF9nZXRzaWdzdHIoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgem9sX2dldHNpZ3N0cihzdHJ1Y3Qgem9sdHJpeCAqem9sKQogewogCWludCBhLCBiOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlvdXRiKDB4MDAsIGlvKTsgICAgICAgICAvKiBUaGlzIHN0dWZmIEkgZm91bmQgdG8gZG8gbm90aGluZyAqLwotCW91dGIoZGV2LT5jdXJ2b2wsIGlvKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOworCW91dGIoMHgwMCwgem9sLT5pbyk7ICAgICAgICAgLyogVGhpcyBzdHVmZiBJIGZvdW5kIHRvIGRvIG5vdGhpbmcgKi8KKwlvdXRiKHpvbC0+Y3Vydm9sLCB6b2wtPmlvKTsKIAltc2xlZXAoMjApOwogCi0JYSA9IGluYihpbyk7CisJYSA9IGluYih6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCWIgPSBpbmIoaW8pOworCWIgPSBpbmIoem9sLT5pbyk7CiAKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCiAJaWYgKGEgIT0gYikKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGEgPT0gMHhjZikgfHwgKGEgPT0gMHhkZikgIC8qIEkgZm91bmQgdGhpcyBvdXQgYnkgcGxheWluZyAqLwotCQl8fCAoYSA9PSAweGVmKSkgICAgICAgLyogd2l0aCBhIGJpbmFyeSBzY2FubmVyIG9uIHRoZSBjYXJkIGlvICovCi0JCXJldHVybiAoMSk7Ci0JcmV0dXJuICgwKTsKKwkvKiBJIGZvdW5kIHRoaXMgb3V0IGJ5IHBsYXlpbmcgd2l0aCBhIGJpbmFyeSBzY2FubmVyIG9uIHRoZSBjYXJkIGlvICovCisJcmV0dXJuIGEgPT0gMHhjZiB8fCBhID09IDB4ZGYgfHwgYSA9PSAweGVmOwogfQogCi1zdGF0aWMgaW50IHpvbF9pc19zdGVyZW8gKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHpvbF9pc19zdGVyZW8oc3RydWN0IHpvbHRyaXggKnpvbCkKIHsKIAlpbnQgeDEsIHgyOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCi0Jb3V0YigweDAwLCBpbyk7Ci0Jb3V0YihkZXYtPmN1cnZvbCwgaW8pOworCW91dGIoMHgwMCwgem9sLT5pbyk7CisJb3V0Yih6b2wtPmN1cnZvbCwgem9sLT5pbyk7CiAJbXNsZWVwKDIwKTsKIAotCXgxID0gaW5iKGlvKTsKKwl4MSA9IGluYih6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCXgyID0gaW5iKGlvKTsKKwl4MiA9IGluYih6b2wtPmlvKTsKIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAKLQlpZiAoKHgxID09IHgyKSAmJiAoeDEgPT0gMHhjZikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiB4MSA9PSB4MiAmJiB4MSA9PSAweGNmOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCkBAIC0yNDAsNTkgKzIyNyw1NCBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tem9sdHJpeCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJab2x0cml4IFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg4KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+cmFuZ2Vsb3cgPSA4OCAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJaWYgKHpvbF9pc19zdGVyZW8oem9sKSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhGRkZGKnpvbF9nZXRzaWdzdHIoem9sKTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiB6b2xfZ2V0c2lnc3RyKHpvbCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0Jem9sLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiBTZXQgZnJlcXVlbmN5IGZhaWxlZC5cbiIpOworCWlmICh6b2xfc2V0ZnJlcSh6b2wsIGYtPmZyZXF1ZW5jeSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gem9sLT5jdXJmcmVxOwpAQCAtMzAyLDE0ICsyODQsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNDA5NiwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMxNyw3ICsyOTYsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzMzLDcgKzMxMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zNDEsNDMgKzMyMCwzMCBAQAogCQkJem9sX211dGUoem9sKTsKIAkJZWxzZSB7CiAJCQl6b2xfdW5tdXRlKHpvbCk7Ci0JCQl6b2xfc2V0dm9sKHpvbCx6b2wtPmN1cnZvbCk7CisJCQl6b2xfc2V0dm9sKHpvbCwgem9sLT5jdXJ2b2wpOwogCQl9CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl6b2xfc2V0dm9sKHpvbCxjdHJsLT52YWx1ZS80MDk2KTsKKwkJem9sX3NldHZvbCh6b2wsIGN0cmwtPnZhbHVlIC8gNDA5Nik7CiAJCXJldHVybiAwOwogCX0KIAl6b2wtPnN0ZXJlbyA9IDE7Ci0JaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IFNldCBmcmVxdWVuY3kgZmFpbGVkLlxuIik7CisJaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAjaWYgMAogLyogRklYTUU6IEltcGxlbWVudCBzdGVyZW8vbW9ubyBzd2l0Y2ggb24gVjRMMiAqLwotCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKLQkJCQl6b2wtPnN0ZXJlbyA9IDE7Ci0JCQkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOwotCQkJfQotCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKSB7Ci0JCQkJem9sLT5zdGVyZW8gPSAwOwotCQkJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKLQkJCX0KKwlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykgeworCQl6b2wtPnN0ZXJlbyA9IDE7CisJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKKwl9CisJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKSB7CisJCXpvbC0+c3RlcmVvID0gMDsKKwkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworCX0KICNlbmRpZgogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzg2LDM3ICszNTIsMzkgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgem9sdHJpeF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHpvbF9kZXZpY2Ugem9sdHJpeF91bml0OwotCi1zdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHpvbHRyaXhfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmem9sdHJpeF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZ6b2x0cml4X3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB6b2x0cml4X2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB6b2x0cml4X2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHpvbHRyaXhfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gem9sdHJpeF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHpvbHRyaXhfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDM1LDY3ICs0MDMsNzUgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvbHRyaXhfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlpvbHRyaXggUmFkaW8gUGx1cyIsCi0JLmZvcHMgICAgICAgICAgID0gJnpvbHRyaXhfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ6b2x0cml4X2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgem9sdHJpeF9pbml0KHZvaWQpCiB7Ci0JaWYgKGlvID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSAmem9sdHJpeF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmem9sLT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInpvbHRyaXgiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwl6b2wtPmlvID0gaW87CisJaWYgKHpvbC0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwYyBvciAweDMwY1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoKGlvICE9IDB4MjBjKSAmJiAoaW8gIT0gMHgzMGMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiem9sdHJpeDogaW52YWxpZCBwb3J0LCB0cnkgMHgyMGMgb3IgMHgzMGNcbiIpOworCWlmICh6b2wtPmlvICE9IDB4MjBjICYmIHpvbC0+aW8gIT0gMHgzMGMpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJpbnZhbGlkIHBvcnQsIHRyeSAweDIwYyBvciAweDMwY1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnpvbHRyaXhfcmFkaW8sICZ6b2x0cml4X3VuaXQpOwotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJ6b2x0cml4IikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ6b2x0cml4OiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHpvbC0+aW8sIDIsICJ6b2x0cml4IikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIHpvbC0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnpvbHRyaXhfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oem9sLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KHpvbC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHpvbC0+dmRldi5uYW1lKSk7CisJem9sLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJem9sLT52ZGV2LmZvcHMgPSAmem9sdHJpeF9mb3BzOworCXpvbC0+dmRldi5pb2N0bF9vcHMgPSAmem9sdHJpeF9pb2N0bF9vcHM7CisJem9sLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmem9sLT52ZGV2LCB6b2wpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmem9sLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oem9sLT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJab2x0cml4IFJhZGlvIFBsdXMgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJab2x0cml4IFJhZGlvIFBsdXMgY2FyZCBkcml2ZXIuXG4iKTsKIAotCW11dGV4X2luaXQoJnpvbHRyaXhfdW5pdC5sb2NrKTsKKwltdXRleF9pbml0KCZ6b2wtPmxvY2spOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwogCiAJLyogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZvbHVtZSBpcyBhbGwgdGhlIHdheSBkb3duICAqLwogCi0Jb3V0YigwLCBpbyk7Ci0Jb3V0YigwLCBpbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOwogCW1zbGVlcCgyMCk7Ci0JaW5iKGlvICsgMyk7CisJaW5iKHpvbC0+aW8gKyAzKTsKIAotCXpvbHRyaXhfdW5pdC5jdXJ2b2wgPSAwOwotCXpvbHRyaXhfdW5pdC5zdGVyZW8gPSAxOworCXpvbC0+Y3Vydm9sID0gMDsKKwl6b2wtPnN0ZXJlbyA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiQy52YW4gU2NoYWlrIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFpvbHRyaXggUmFkaW8gUGx1cyAoMHgyMGMgb3IgMHgzMGMpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB6b2x0cml4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgem9sdHJpeF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnpvbHRyaXhfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gJnpvbHRyaXhfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ6b2wtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpvbC0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHpvbC0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdCh6b2x0cml4X2luaXQpOwotbW9kdWxlX2V4aXQoem9sdHJpeF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdCh6b2x0cml4X2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggMTljZjNiOC4uNzZiYWQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjQ5LDExICsyNDksMjUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwMjdzbXB4LgogCitjb21tZW50ICJSRFMgZGVjb2RlcnMiCisKK2NvbmZpZyBWSURFT19TQUE2NTg4CisJdHJpc3RhdGUgIlNBQTY1ODggUmFkaW8gQ2hpcCBSRFMgZGVjb2RlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKKworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoaXMgUmFkaW8gRGF0YSBTeXN0ZW0gKFJEUykgZGVjb2Rlci4gVGhpcyBhbGxvd3MKKwkgIHNlZWluZyByYWRpbyBzdGF0aW9uIGlkZW50aWZpY2F0aW9uIHRyYW5zbWl0dGVkIHVzaW5nIHRoaXMKKwkgIHN0YW5kYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE2NTg4LgorCiBjb21tZW50ICJWaWRlbyBkZWNvZGVycyIKIAogY29uZmlnIFZJREVPX0JUODE5CiAJdHJpc3RhdGUgIkJUODE5QSBWaWRlb1N0cmVhbSBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4MTlBIHZpZGVvIGRlY29kZXIuCiAKQEAgLTI2Miw3ICsyNzYsNyBAQAogCiBjb25maWcgVklERU9fQlQ4NTYKIAl0cmlzdGF0ZSAiQlQ4NTYgVmlkZW9TdHJlYW0gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODU2IHZpZGVvIGRlY29kZXIuCiAKQEAgLTI3MSw3ICsyODUsNyBAQAogCiBjb25maWcgVklERU9fQlQ4NjYKIAl0cmlzdGF0ZSAiQlQ4NjYgVmlkZW9TdHJlYW0gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODY2IHZpZGVvIGRlY29kZXIuCiAKQEAgLTI4MCw3ICsyOTQsNyBAQAogCiBjb25maWcgVklERU9fS1MwMTI3CiAJdHJpc3RhdGUgIktTMDEyNyB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgS1MwMTI3IHZpZGVvIGRlY29kZXIuCiAKQEAgLTMwNywzOCArMzIxLDE4IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTEwCiAJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExMC4KIAotY29uZmlnIFZJREVPX1NBQTcxMTEKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTExIHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMSB2aWRlbyBkZWNvZGVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTExLgotCi1jb25maWcgVklERU9fU0FBNzExNAotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTQgdmlkZW8gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExNCB2aWRlbyBkZWNvZGVyLiBUaGlzIGRyaXZlcgotCSAgaXMgdXNlZCBvbmx5IG9uIFpvcmFuIGRyaXZlciBhbmQgc2hvdWxkIGJlIG1vdmVkIHNvb24gdG8KLQkgIFNBQTcxMXggbW9kdWxlLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE0LgotCiBjb25maWcgVklERU9fU0FBNzExWAotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzIgorCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTEvMy80LzUgdmlkZW8gZGVjb2RlcnMiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzLgorCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMS8zLzQvNSB2aWRlbyBkZWNvZGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExNS4KQEAgLTM4Myw3ICszNzcsNyBAQAogCiBjb25maWcgVklERU9fVlBYMzIyMAogCXRyaXN0YXRlICJ2cHgzMjIwYSwgdnB4MzIxNmIgJiB2cHgzMjE0YyB2aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIFZQWDMyMnggdmlkZW8gZGVjb2RlcnMuCiAKQEAgLTQyMSw3ICs0MTUsNyBAQAogCiBjb25maWcgVklERU9fU0FBNzE4NQogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2Rlci4KIApAQCAtNDMwLDcgKzQyNCw3IEBACiAKIGNvbmZpZyBWSURFT19BRFY3MTcwCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyCiAKQEAgLTQzOSw3ICs0MzMsNyBAQAogCiBjb25maWcgVklERU9fQURWNzE3NQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIGRyaXZlcgogCkBAIC00ODcsMTggKzQ4MSw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCi1jb25maWcgVklERU9fU0FBNjU4OAotCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCBvbiBCVDg0OCBjYXJkcyIKLQlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19CVDg0OAotCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGRlY29kZXIuIFRoaXMgYWxsb3dzIHNlZWluZwotCSAgcmFkaW8gc3RhdGlvbiBpZGVudGlmaWNhdGlvbiB0cmFuc21pdHRlZCB1c2luZyB0aGlzIHN0YW5kYXJkLgotCSAgQ3VycmVudGx5LCBpdCB3b3JrcyBvbmx5IHdpdGggYnQ4eDggY2hpcHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTY1ODguCi0KIGNvbmZpZyBWSURFT19QTVMKIAl0cmlzdGF0ZSAiTWVkaWF2aXNpb24gUHJvIE1vdmllIFN0dWRpbyBWaWRlbyBGb3IgTGludXgiCiAJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQpAQCAtNjAyLDcgKzU4NCw2IEBACiBjb25maWcgVklERU9fVklOTwogCXRyaXN0YXRlICJTR0kgVmlubyBWaWRlbyBGb3IgTGludXggKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBJMkMgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDIKLQlzZWxlY3QgSTJDX0FMR09fU0dJCiAJc2VsZWN0IFZJREVPX1NBQTcxOTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGJ1aWxkIGluIHN1cHBvcnQgZm9yIHRoZSBWaW5vIHZpZGVvIGlucHV0IHN5c3RlbSBmb3VuZApAQCAtNjM5LDcgKzYyMCw3IEBACiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBWSURFT19UVU5FUgotCXNlbGVjdCBWSURFT19TQUE3MTE1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVERBOTg0MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDE1QyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDIwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCkBAIC03MjgsMTMgKzcwOSw2IEBACiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMDAxIGNhbWVyYXMgZnJvbSBNaWNyb24sIG1vbm9jaHJvbWUKIAkgIGFuZCBjb2xvdXIgbW9kZWxzLgogCi1jb25maWcgTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAotCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5bTAwMSIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5TTAwMSAmJiBHRU5FUklDX0dQSU8KLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOU0wMDEgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCi0JICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCi0KIGNvbmZpZyBTT0NfQ0FNRVJBX01UOU0xMTEKIAl0cmlzdGF0ZSAibXQ5bTExMSBhbmQgbXQ5bTExMiBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKQEAgLTc1NCwxMyArNzI4LDYgQEAKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlWMDIyIGNhbWVyYXMgZnJvbSBNaWNyb24KIAotY29uZmlnIE1UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlib29sICJwY2E5NTM2IGRhdGF3aWR0aCBzd2l0Y2ggZm9yIG10OXYwMjIiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBX01UOVYwMjIgJiYgR0VORVJJQ19HUElPCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91ciBNVDlWMDIyIGNhbWVyYSB1c2VzIGEgUENBOTUzNiBJMkMgR1BJTwotCSAgZXh0ZW5kZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IGRhdGF3aWR0aCBtb2RlcwotCiBjb25maWcgU09DX0NBTUVSQV9UVzk5MTAKIAl0cmlzdGF0ZSAidHc5OTEwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQwpAQCAtNzc5LDYgKzc0NiwxMyBAQAogCWhlbHAKIAkgIFRoaXMgaXMgYSBvdjc3MnggY2FtZXJhIGRyaXZlcgogCitjb25maWcgVklERU9fTVgzCisJdHJpc3RhdGUgImkuTVgzeCBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTVgzX0lQVSAmJiBTT0NfQ0FNRVJBCisJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UKKwogY29uZmlnIFZJREVPX1BYQTI3eAogCXRyaXN0YXRlICJQWEEyN3ggUXVpY2sgQ2FwdHVyZSBJbnRlcmZhY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBYQTI3eCAmJiBTT0NfQ0FNRVJBCkBAIC04MTcsNiArNzkxLDggQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggNzJmNmQwMy4uYjkwNDY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0zMCw3ICszMCw2IEBACiBvYmotJChDT05GSUdfVklERU9fVFZBVURJTykgKz0gdHZhdWRpby5vCiBvYmotJChDT05GSUdfVklERU9fVERBNzQzMikgKz0gdGRhNzQzMi5vCiBvYmotJChDT05GSUdfVklERU9fVERBOTg3NSkgKz0gdGRhOTg3NS5vCi1vYmotJChDT05GSUdfU09VTkRfVFZNSVhFUikgKz0gdHZtaXhlci5vCiAKIG9iai0kKENPTkZJR19WSURFT19TQUE2NTg4KSArPSBzYWE2NTg4Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE1MjQ2QSkgKz0gc2FhNTI0NmEubwpAQCAtNDMsOCArNDIsNiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1RFQTY0MTVDKSArPSB0ZWE2NDE1Yy5vCiBvYmotJChDT05GSUdfVklERU9fVEVBNjQyMCkgKz0gdGVhNjQyMC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzExMCkgKz0gc2FhNzExMC5vCi1vYmotJChDT05GSUdfVklERU9fU0FBNzExMSkgKz0gc2FhNzExMS5vCi1vYmotJChDT05GSUdfVklERU9fU0FBNzExNCkgKz0gc2FhNzExNC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzExWCkgKz0gc2FhNzExNS5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzE3WCkgKz0gc2FhNzE3eC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzEyNykgKz0gc2FhNzEyNy5vCkBAIC0xMjIsNiArMTE5LDggQEAKIG9iai0kKENPTkZJR19VU0JfWkMwMzAxKSAgICAgICAgKz0gemMwMzAxLwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICArPSBnc3BjYS8KIAorb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKQkrPSBoZHB2ci8KKwogb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSB1c2J2aWRlby8KIG9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLwpAQCAtMTM0LDEwICsxMzMsMTEgQEAKIG9iai0kKENPTkZJR19WSURFT19WSVZJKSArPSB2aXZpLm8KIG9iai0kKENPTkZJR19WSURFT19DWDIzODg1KSArPSBjeDIzODg1LwogCi1vYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkrPSBweGFfY2FtZXJhLm8KK29iai0kKENPTkZJR19WSURFT19NWDMpCQkJKz0gbXgzX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkJKz0gcHhhX2NhbWVyYS5vCiBvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSkJKz0gc2hfbW9iaWxlX2NldV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX09NQVAyKQkJKz0gb21hcDJjYW0ubwotb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCSs9IHNvY19jYW1lcmEubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCQkrPSBzb2NfY2FtZXJhLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEpCSs9IG10OW0wMDEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSkJKz0gbXQ5bTExMS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxKQkrPSBtdDl0MDMxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKaW5kZXggZTBlYjRmMy4uODczYzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKQEAgLTM0LDE1ICszNCwxNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKQEAgLTUwLDM4ICs1MSw0MyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1sxMjhdOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZHY3MTcwICp0b19hZHY3MTcwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkdjcxNzAsIHNkKTsKK30KKwogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAicGFzc190aHJvdWdoIiwgInBsYXlfYmFjayIgfTsKLXN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IHRvX2FkdjcxNzAoc2QpOwogCiAJZW5jb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCBhZHY3MTcwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IGFkdjcxNzBfd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwogCkBAIC04OSw3ICs5NSw2IEBACiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAkJdTggYmxvY2tfZGF0YVszMl07CiAJCWludCBibG9ja19sZW47CiAKQEAgLTExMCw3ICsxMTUsNyBAQAogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJcmV0ID0gYWR2NzE3MF93cml0ZShzZCwgcmVnLCAqZGF0YSsrKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CkBAIC0xMjgsMjAzICsxMzMsMTYxIEBACiAjZGVmaW5lIFRSMVBMQVkJICAgIDB4MDAKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9OVFNDW10gPSB7Ci0JMHgwMCwgMHgxMCwJCS8vIE1SMAotCTB4MDEsIDB4MjAsCQkvLyBNUjEKLQkweDAyLCAweDBlLAkJLy8gTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEKLQkweDAzLCAweDgwLAkJLy8gTVIzCi0JMHgwNCwgMHgzMCwJCS8vIE1SNAotCTB4MDUsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDYsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDcsIFRSME1PREUsCQkvLyBUTTAKLQkweDA4LCBUUjFDQVBULAkJLy8gVE0xCi0JMHgwOSwgMHgxNiwJCS8vIEZzYzAKLQkweDBhLCAweDdjLAkJLy8gRnNjMQotCTB4MGIsIDB4ZjAsCQkvLyBGc2MyCi0JMHgwYywgMHgyMSwJCS8vIEZzYzMKLQkweDBkLCAweDAwLAkJLy8gU3ViY2FycmllciBQaGFzZQotCTB4MGUsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDAKLQkweDBmLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAxCi0JMHgxMCwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAwCi0JMHgxMSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAxCi0JMHgxMiwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAwCi0JMHgxMywgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAxCi0JMHgxNCwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAyCi0JMHgxNSwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAzCi0JMHgxNiwgMHgwMCwJCS8vIENHTVNfV1NTXzAKLQkweDE3LCAweDAwLAkJLy8gQ0dNU19XU1NfMQotCTB4MTgsIDB4MDAsCQkvLyBDR01TX1dTU18yCi0JMHgxOSwgMHgwMCwJCS8vIFRlbGV0ZXh0IEN0bAorCTB4MDAsIDB4MTAsCQkvKiBNUjAgKi8KKwkweDAxLCAweDIwLAkJLyogTVIxICovCisJMHgwMiwgMHgwZSwJCS8qIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxICovCisJMHgwMywgMHg4MCwJCS8qIE1SMyAqLworCTB4MDQsIDB4MzAsCQkvKiBNUjQgKi8KKwkweDA1LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA2LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA3LCBUUjBNT0RFLAkJLyogVE0wICovCisJMHgwOCwgVFIxQ0FQVCwJCS8qIFRNMSAqLworCTB4MDksIDB4MTYsCQkvKiBGc2MwICovCisJMHgwYSwgMHg3YywJCS8qIEZzYzEgKi8KKwkweDBiLCAweGYwLAkJLyogRnNjMiAqLworCTB4MGMsIDB4MjEsCQkvKiBGc2MzICovCisJMHgwZCwgMHgwMCwJCS8qIFN1YmNhcnJpZXIgUGhhc2UgKi8KKwkweDBlLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAwICovCisJMHgwZiwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMSAqLworCTB4MTAsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMCAqLworCTB4MTEsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMSAqLworCTB4MTIsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMCAqLworCTB4MTMsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMSAqLworCTB4MTQsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMiAqLworCTB4MTUsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMyAqLworCTB4MTYsIDB4MDAsCQkvKiBDR01TX1dTU18wICovCisJMHgxNywgMHgwMCwJCS8qIENHTVNfV1NTXzEgKi8KKwkweDE4LCAweDAwLAkJLyogQ0dNU19XU1NfMiAqLworCTB4MTksIDB4MDAsCQkvKiBUZWxldGV4dCBDdGwgKi8KIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfUEFMW10gPSB7Ci0JMHgwMCwgMHg3MSwJCS8vIE1SMAotCTB4MDEsIDB4MjAsCQkvLyBNUjEKLQkweDAyLCAweDBlLAkJLy8gTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEKLQkweDAzLCAweDgwLAkJLy8gTVIzCi0JMHgwNCwgMHgzMCwJCS8vIE1SNAotCTB4MDUsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDYsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDcsIFRSME1PREUsCQkvLyBUTTAKLQkweDA4LCBUUjFDQVBULAkJLy8gVE0xCi0JMHgwOSwgMHhjYiwJCS8vIEZzYzAKLQkweDBhLCAweDhhLAkJLy8gRnNjMQotCTB4MGIsIDB4MDksCQkvLyBGc2MyCi0JMHgwYywgMHgyYSwJCS8vIEZzYzMKLQkweDBkLCAweDAwLAkJLy8gU3ViY2FycmllciBQaGFzZQotCTB4MGUsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDAKLQkweDBmLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAxCi0JMHgxMCwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAwCi0JMHgxMSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAxCi0JMHgxMiwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAwCi0JMHgxMywgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAxCi0JMHgxNCwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAyCi0JMHgxNSwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAzCi0JMHgxNiwgMHgwMCwJCS8vIENHTVNfV1NTXzAKLQkweDE3LCAweDAwLAkJLy8gQ0dNU19XU1NfMQotCTB4MTgsIDB4MDAsCQkvLyBDR01TX1dTU18yCi0JMHgxOSwgMHgwMCwJCS8vIFRlbGV0ZXh0IEN0bAorCTB4MDAsIDB4NzEsCQkvKiBNUjAgKi8KKwkweDAxLCAweDIwLAkJLyogTVIxICovCisJMHgwMiwgMHgwZSwJCS8qIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxICovCisJMHgwMywgMHg4MCwJCS8qIE1SMyAqLworCTB4MDQsIDB4MzAsCQkvKiBNUjQgKi8KKwkweDA1LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA2LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA3LCBUUjBNT0RFLAkJLyogVE0wICovCisJMHgwOCwgVFIxQ0FQVCwJCS8qIFRNMSAqLworCTB4MDksIDB4Y2IsCQkvKiBGc2MwICovCisJMHgwYSwgMHg4YSwJCS8qIEZzYzEgKi8KKwkweDBiLCAweDA5LAkJLyogRnNjMiAqLworCTB4MGMsIDB4MmEsCQkvKiBGc2MzICovCisJMHgwZCwgMHgwMCwJCS8qIFN1YmNhcnJpZXIgUGhhc2UgKi8KKwkweDBlLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAwICovCisJMHgwZiwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMSAqLworCTB4MTAsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMCAqLworCTB4MTEsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMSAqLworCTB4MTIsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMCAqLworCTB4MTMsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMSAqLworCTB4MTQsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMiAqLworCTB4MTUsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMyAqLworCTB4MTYsIDB4MDAsCQkvKiBDR01TX1dTU18wICovCisJMHgxNywgMHgwMCwJCS8qIENHTVNfV1NTXzEgKi8KKwkweDE4LCAweDAwLAkJLyogQ0dNU19XU1NfMiAqLworCTB4MTksIDB4MDAsCQkvKiBUZWxldGV4dCBDdGwgKi8KIH07CiAKIAotc3RhdGljIGludCBhZHY3MTcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGFkdjcxNzBfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gdG9fYWR2NzE3MChzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLSNpZiAwCi0JCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwotCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLSNlbmRpZgotCQlicmVhazsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fRU5DT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19FTkNPREVSX05UU0M7Ci0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsIGlhcmcpOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9OVFNDKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfUEFMLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfUEFMKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwotCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCS8qIFJKOiAqaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gZGVjb2RlcgotCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKLQkJICppYXJnID0gMjogY29sb3IgYmFyICovCi0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0IGZyb20gJXNcbiIsCi0JCQlpYXJnID09IDAgPyAiZGVjb2RlciIgOiAiWlIzNjA2MCIpOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIDA6Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgyMCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwOCwgVFIxQ0FQVCk7CS8qIFRSMSAqLwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MGUpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLyogdWRlbGF5KDEwKTsgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA4LCBUUjFQTEFZKTsJLyogVFIxICovCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwOCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvKiB1ZGVsYXkoMTApOyAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwotCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgorCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCWFkdjcxNzBfd3JpdGVfYmxvY2soc2QsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJYWR2NzE3MF93cml0ZV9ibG9jayhzZCwgaW5pdF9QQUwsIHNpemVvZihpbml0X1BBTCkpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBub3JtOiAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWR2NzE3MF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIGRlY29kZXIKKwkgICByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKKwkgICByb3V0ZS0+aW5wdXQgPSAyOiBjb2xvciBiYXIgKi8KKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBpbnB1dCBmcm9tICVzXG4iLAorCQkJcm91dGUtPmlucHV0ID09IDAgPyAiZGVjb2RlciIgOiAiWlIzNjA2MCIpOworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDEsIDB4MjApOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA4LCBUUjFDQVBUKTsJLyogVFIxICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qIHVkZWxheSgxMCk7ICovCisJCWJyZWFrOworCisJY2FzZSAxOgorCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAxLCAweDAwKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwOCwgVFIxUExBWSk7CS8qIFRSMSAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAyLCAweDA4KTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tyb3V0ZS0+aW5wdXRdKTsKKwllbmNvZGVyLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTcwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0FEVjcxNzAsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4ZDQgPj4gMSwgMHhkNiA+PiAxLAkvKiBhZHY3MTcwIElEcyAqLwotCTB4NTQgPj4gMSwgMHg1NiA+PiAxLAkvKiBhZHY3MTcxIElEcyAqLwotCUkyQ19DTElFTlRfRU5ECitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxNzBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGFkdjcxNzBfZ19jaGlwX2lkZW50LAogfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhZHY3MTcwX3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYWR2NzE3MF9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGFkdjcxNzBfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYWR2NzE3MF9vcHMgPSB7CisJLmNvcmUgPSAmYWR2NzE3MF9jb3JlX29wcywKKwkudmlkZW8gPSAmYWR2NzE3MF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGFkdjcxNzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwpAQCAtMzM3LDI2ICszMDAsMjkgQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhZHY3MTcwX29wcyk7CisJZW5jb2Rlci0+bm9ybSA9IFY0TDJfU1REX05UU0M7CiAJZW5jb2Rlci0+aW5wdXQgPSAwOwotCWVuY29kZXItPmVuYWJsZSA9IDE7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOworCWkgPSBhZHY3MTcwX3dyaXRlX2Jsb2NrKHNkLCBpbml0X05UU0MsIHNpemVvZihpbml0X05UU0MpKTsKIAlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCWkgPSBhZHY3MTcwX3JlYWQoY2xpZW50LCAweDEyKTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKKwkJaSA9IGFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlpID0gYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCWkgPSBhZHY3MTcwX3JlYWQoc2QsIDB4MTIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWR2NzE3MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2FkdjcxNzAoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcxLDggKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJhZHY3MTcwIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3MCwKLQkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKIAkucHJvYmUgPSBhZHY3MTcwX3Byb2JlLAogCS5yZW1vdmUgPSBhZHY3MTcwX3JlbW92ZSwKIAkuaWRfdGFibGUgPSBhZHY3MTcwX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwppbmRleCA2MDA4ZTg0Li5mZjEyMTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwpAQCAtMzAsMTUgKzMwLDE5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorI2RlZmluZSAgIEkyQ19BRFY3MTc1ICAgICAgICAweGQ0CisjZGVmaW5lICAgSTJDX0FEVjcxNzYgICAgICAgIDB4NTQKKworCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CkBAIC00NiwzNiArNTAsMzggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBhZHY3MTc1IHsKLQlpbnQgbm9ybTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX0FEVjcxNzUgICAgICAgIDB4ZDQKLSNkZWZpbmUgICBJMkNfQURWNzE3NiAgICAgICAgMHg1NAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYWR2NzE3NSAqdG9fYWR2NzE3NShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBhZHY3MTc1LCBzZCk7Cit9CiAKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siLCAiY29sb3JfYmFyIiB9Owotc3RhdGljIGNoYXIgKm5vcm1zW10gPSB7ICJQQUwiLCAiTlRTQyIsICJTRUNBTS0+UEFMIChtYXkgbm90IHdvcmshKSIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGFkdjcxNzVfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgYWR2NzE3NV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwogCkBAIC0xMDMsNyArMTA5LDcgQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlyZXQgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCXJldCA9IGFkdjcxNzVfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwpAQCAtMTEzLDE4ICsxMTksMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYXNzX3Rocm91Z2gpCitzdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBwYXNzX3Rocm91Z2gpCiB7CiAJLyogZm9yIHNvbWUgcmVhc29uIHBhc3NfdGhyb3VnaCBOVFNDIG5lZWRzCiAJICogYSBkaWZmZXJlbnQgc3ViLWNhcnJpZXIgZnJlcSB0byByZW1haW4gc3RhYmxlLiAqLwogCWlmIChwYXNzX3Rocm91Z2gpCi0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAyLCAweDAwKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMiwgMHgwMCk7CiAJZWxzZQotCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHg1NSk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDIsIDB4NTUpOwogCi0JYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDMsIDB4NTUpOwotCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA0LCAweDU1KTsKLQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNSwgMHgyNSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwMywgMHg1NSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNCwgMHg1NSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNSwgMHgyNSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xODQsMTgwICsxOTAsMTQ0IEBACiAJMHgwNiwgMHgxYSwJCS8qIHN1YmMuIHBoYXNlICovCiB9OwogCi1zdGF0aWMgaW50IGFkdjcxNzVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYWR2NzE3NV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KKwlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJcmV0dXJuIDA7Cit9CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKLQkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQlicmVhazsKK3N0YXRpYyBpbnQgYWR2NzE3NV9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gdG9fYWR2NzE3NShzZCk7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fRU5DT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19FTkNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19FTkNPREVSX1NFQ0FNOyAvKiB3ZWxsLCBoYWNreSAqLwotCQljYXAtPmlucHV0cyA9IDI7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0Zik7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0Zik7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06CS8vIFdBUk5JTkchIEFEVjcxNzYgZG9lcyBub3Qgc3VwcG9ydCBTRUNBTS4KLQkJCS8qIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjb252ZXJ0Ci0JCQkgKiBTRUNBTS0+UEFMICh0eXBpY2FsbHkgaXQgZG9lcyBub3Qgd29yawotCQkJICogZHVlIHRvIGdlbmxvY2s6IHdoZW4gZGVjb2RlciBpcyBpbiBTRUNBTQotCQkJICogYW5kIGVuY29kZXIgaW4gaW4gUEFMIHRoZSBzdWJjYXJyaWVyIGNhbgotCQkJICogbm90IGJlIHN5bmNyb25pemVkIHdpdGggaG9yaXpvbnRhbAotCQkJICogcXVlbmN5KSAqLwotCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CS8vIERpc2FibGUgZ2VubG9jawotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBub3Jtc1tpYXJnXSk7Ci0JCWVuY29kZXItPm5vcm0gPSBpYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJLyogUko6ICppYXJnID0gMDogaW5wdXQgaXMgZnJvbSBTQUE3MTEwCi0JCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAotCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KLQotCQlzd2l0Y2ggKGlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDApOwotCi0JCQlpZiAoZW5jb2Rlci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MpCi0JCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShjbGllbnQsIDEpOwotCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwYywgVFIxQ0FQVCk7CS8qIFRSMSAqLwotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CS8vIERpc2FibGUgZ2VubG9jawotCQkJZWxzZQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDRmKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKLQotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDKQotCQkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoY2xpZW50LCAwKTsKLQotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGMsIFRSMVBMQVkpOwkvKiBUUjEgKi8KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQljYXNlIDI6Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHg4MCk7Ci0KLQkJCWlmIChlbmNvZGVyLT5ub3JtID09IFZJREVPX01PREVfTlRTQykKLQkJCQlzZXRfc3ViY2Fycmllcl9mcmVxKGNsaWVudCwgMCk7Ci0KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIGlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7Ci0JCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDRmKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCWFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDRmKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJLyogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNvbnZlcnQKKwkJICogU0VDQU0tPlBBTCAodHlwaWNhbGx5IGl0IGRvZXMgbm90IHdvcmsKKwkJICogZHVlIHRvIGdlbmxvY2s6IHdoZW4gZGVjb2RlciBpcyBpbiBTRUNBTQorCQkgKiBhbmQgZW5jb2RlciBpbiBpbiBQQUwgdGhlIHN1YmNhcnJpZXIgY2FuCisJCSAqIG5vdCBiZSBzeW5jcm9uaXplZCB3aXRoIGhvcml6b250YWwKKwkJICogcXVlbmN5KSAqLworCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CS8qIERpc2FibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBub3JtOiAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWR2NzE3NV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSB0b19hZHY3MTc1KHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIGRlY29kZXIKKwkgICByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKKwkgICByb3V0ZS0+aW5wdXQgPSAyOiBjb2xvciBiYXIgKi8KKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CisJY2FzZSAwOgorCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAxLCAweDAwKTsKKworCQlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlzZXRfc3ViY2Fycmllcl9mcmVxKHNkLCAxKTsKKworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBjLCBUUjFDQVBUKTsJLyogVFIxICovCisJCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfU0VDQU0pCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsJLyogRGlzYWJsZSBnZW5sb2NrICovCisJCWVsc2UKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NGYpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qdWRlbGF5KDEwKTsqLworCQlicmVhazsKKworCWNhc2UgMToKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHgwMCk7CisKKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShzZCwgMCk7CisKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwYywgVFIxUExBWSk7CS8qIFRSMSAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWNhc2UgMjoKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHg4MCk7CisKKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShzZCwgMCk7CisKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyogdWRlbGF5KDEwKTsgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgcm91dGUtPmlucHV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbcm91dGUtPmlucHV0XSk7CisJZW5jb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE3NV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9BRFY3MTc1LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKLQlJMkNfQURWNzE3NiA+PiAxLCAoSTJDX0FEVjcxNzYgPj4gMSkgKyAxLAotCUkyQ19DTElFTlRfRU5ECitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxNzVfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGFkdjcxNzVfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gYWR2NzE3NV9pbml0LAogfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhZHY3MTc1X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYWR2NzE3NV9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGFkdjcxNzVfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYWR2NzE3NV9vcHMgPSB7CisJLmNvcmUgPSAmYWR2NzE3NV9jb3JlX29wcywKKwkudmlkZW8gPSAmYWR2NzE3NV92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGFkdjcxNzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMzY5LDI2ICszMzksMjkgQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmFkdjcxNzVfb3BzKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAllbmNvZGVyLT5pbnB1dCA9IDA7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJaWYgKGkgPj0gMCkgewotCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQlpID0gYWR2NzE3NV9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CisJCWkgPSBhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJaSA9IGFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQlpID0gYWR2NzE3NV9yZWFkKHNkLCAweDEyKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkdjcxNzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19hZHY3MTc1KHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwMyw4ICszNzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYWR2NzE3NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0JLmNvbW1hbmQgPSBhZHY3MTc1X2NvbW1hbmQsCiAJLnByb2JlID0gYWR2NzE3NV9wcm9iZSwKIAkucmVtb3ZlID0gYWR2NzE3NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYWR2NzE3NV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9LY29uZmlnCmluZGV4IDAxOGY3MmIuLjA1Y2RmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvS2NvbmZpZwpAQCAtMSwxMyArMSwxMyBAQAogCiBjb25maWcgVklERU9fQVUwODI4CiAJdHJpc3RhdGUgIkF1dml0ZWsgQVUwODI4IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQgJiYgRFZCX0NPUkUgJiYgVVNCCisJZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQgJiYgRFZCX0NPUkUgJiYgVVNCICYmIFZJREVPX1Y0TDIKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlzZWxlY3QgRFZCX0FVODUyMiBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwN1QgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIURWQl9GRV9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX0FVODUyMiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBBdXZpdGVrJ3MgVVNCIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQppbmRleCBjZDJjNTgyLi40ZDI2MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLWF1MDgyOC1vYmpzCTo9IGF1MDgyOC1jb3JlLm8gYXUwODI4LWkyYy5vIGF1MDgyOC1jYXJkcy5vIGF1MDgyOC1kdmIubworYXUwODI4LW9ianMJOj0gYXUwODI4LWNvcmUubyBhdTA4MjgtaTJjLm8gYXUwODI4LWNhcmRzLm8gYXUwODI4LWR2Yi5vIGF1MDgyOC12aWRlby5vCiAKIG9iai0kKENPTkZJR19WSURFT19BVTA4MjgpICs9IGF1MDgyOC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKaW5kZXggZDYwMTIzYi4uMWFhYmFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKQEAgLTIxLDI1ICsyMSw4OSBAQAogCiAjaW5jbHVkZSAiYXUwODI4LmgiCiAjaW5jbHVkZSAiYXUwODI4LWNhcmRzLmgiCisjaW5jbHVkZSAiYXU4NTIyLmgiCisjaW5jbHVkZSAibWVkaWEvdHVuZXIuaCIKKyNpbmNsdWRlICJtZWRpYS92NGwyLWNvbW1vbi5oIgorCit2b2lkIGh2cjk1MHFfY3M1MzQwX2F1ZGlvKHZvaWQgKnByaXYsIGludCBlbmFibGUpCit7CisJLyogQmVjYXVzZSB0aGUgSFZSLTk1MHEgc2hhcmVzIGFuIGkycyBidXMgYmV0d2VlbiB0aGUgY3M1MzQwIGFuZCB0aGUKKwkgICBhdTg1MjIsIHdlIG5lZWQgdG8gaG9sZCBjczUzNDAgaW4gcmVzZXQgd2hlbiB1c2luZyB0aGUgYXU4NTIyICovCisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHByaXY7CisJaWYgKGVuYWJsZSA9PSAxKQorCQlhdTA4Mjhfc2V0KGRldiwgUkVHXzAwMCwgMHgxMCk7CisJZWxzZQorCQlhdTA4MjhfY2xlYXIoZGV2LCBSRUdfMDAwLCAweDEwKTsKK30KIAogc3RydWN0IGF1MDgyOF9ib2FyZCBhdTA4MjhfYm9hcmRzW10gPSB7CiAJW0FVMDgyOF9CT0FSRF9VTktOT1dOXSA9IHsKIAkJLm5hbWUJPSAiVW5rbm93biBib2FyZCIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MF0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBIVlI4NTAiLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX1hDNTAwMCwKKwkJLnR1bmVyX2FkZHIgPSAweDYxLAorCQkuaW5wdXQgPSB7CisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9URUxFVklTSU9OLAorCQkJCS52bXV4ID0gQVU4NTIyX0NPTVBPU0lURV9DSDRfU0lGLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX1NJRiwKKwkJCX0sCisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9DT01QT1NJVEUsCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NIMSwKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1NWSURFTywKKwkJCQkudm11eCA9IEFVODUyMl9TVklERU9fQ0gxMywKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJfSwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgSFZSOTUwUSIsCisJCS50dW5lcl90eXBlID0gVFVORVJfWEM1MDAwLAorCQkudHVuZXJfYWRkciA9IDB4NjEsCisJCS5pbnB1dCA9IHsKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1RFTEVWSVNJT04sCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fU0lGLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX0NPTVBPU0lURSwKKwkJCQkudm11eCA9IEFVODUyMl9DT01QT1NJVEVfQ0gxLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfU1ZJREVPLAorCQkJCS52bXV4ID0gQVU4NTIyX1NWSURFT19DSDEzLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQl9LAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV9NWExdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgSFZSOTUwUSByZXYgeHhGOCIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVjddID0gewogCQkubmFtZQk9ICJEVmlDTyBGdXNpb25IRFRWIFVTQiIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX1dPT0RCVVJZXSA9IHsKIAkJLm5hbWUgPSAiSGF1cHBhdWdlIFdvb2RidXJ5IiwKKwkJLnR1bmVyX3R5cGUgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiB9OwogCkBAIC01Miw3ICsxMTYsNyBAQAogCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKQEAgLTgxLDE3ICsxNDUsMTggQEAKIAlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19jbGllbnQsICZ0diwgZWVwcm9tX2RhdGEpOworCWRldi0+Ym9hcmQudHVuZXJfdHlwZSA9IHR2LnR1bmVyX3R5cGU7CiAKIAkvKiBNYWtlIHN1cmUgd2Ugc3VwcG9ydCB0aGUgYm9hcmQgbW9kZWwgKi8KIAlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA3MjAwMDogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gKi8KLQljYXNlIDcyMDAxOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjIxMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyMjE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjMxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjI0MTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyNTE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMzAxOiAvKiBXaW5UVi1IVlI4NTAgKFJldGFpbCwgSVIsIEFUU0MgYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIwMDE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjExOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjUwMDogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNywxNSArMTcyLDIxIEBACiB2b2lkIGF1MDgyOF9jYXJkX3NldHVwKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCiB7CiAJc3RhdGljIHU4IGVlcHJvbVsyNTZdOworCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgbW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfAorCQkJCSBUX0RJR0lUQUxfVFY7CiAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKKwltZW1jcHkoJmRldi0+Ym9hcmQsICZhdTA4MjhfYm9hcmRzW2Rldi0+Ym9hcmRucl0sIHNpemVvZihkZXYtPmJvYXJkKSk7CisKIAlpZiAoZGV2LT5pMmNfcmMgPT0gMCkgewogCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKIAkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfY2xpZW50LCBlZXByb20sIHNpemVvZihlZXByb20pKTsKIAl9CiAKLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMOgpAQCAtMTI0LDYgKzE5NSwzMiBAQAogCQkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGVlcHJvbSsweGEwKTsKIAkJYnJlYWs7CiAJfQorCisJaWYgKEFVVklfSU5QVVQoMCkudHlwZSAhPSBBVTA4MjhfVk1VWF9VTkRFRklORUQpIHsKKwkJLyogTG9hZCB0aGUgYW5hbG9nIGRlbW9kdWxhdG9yIGRyaXZlciAobm90ZSB0aGlzIHdvdWxkIG5lZWQgdG8KKwkJICAgYmUgYWJzdHJhY3RlZCBvdXQgaWYgd2UgZXZlciBuZWVkIHRvIHN1cHBvcnQgYSBkaWZmZXJlbnQKKwkJICAgZGVtb2QpICovCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYWRhcCwgImF1ODUyMiIsICJhdTg1MjIiLAorCQkJCQkgMHg4ZSA+PiAxKTsKKwkJaWYgKHNkID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9FUlIgImFuYWxvZyBzdWJkZXYgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJfQorCisJLyogU2V0dXAgdHVuZXJzICovCisJaWYgKGRldi0+Ym9hcmQudHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKKwkJLyogTG9hZCB0aGUgdHVuZXIgbW9kdWxlLCB3aGljaCBkb2VzIHRoZSBhdHRhY2ggKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAorCQkJCQkgZGV2LT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJaWYgKHNkID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9FUlIgInR1bmVyIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbFxuIik7CisKKwkJdHVuX3NldHVwLm1vZGVfbWFzayAgICAgID0gbW9kZV9tYXNrOworCQl0dW5fc2V0dXAudHlwZSAgICAgICAgICAgPSBkZXYtPmJvYXJkLnR1bmVyX3R5cGU7CisJCXR1bl9zZXR1cC5hZGRyICAgICAgICAgICA9IGRldi0+Ym9hcmQudHVuZXJfYWRkcjsKKwkJdHVuX3NldHVwLnR1bmVyX2NhbGxiYWNrID0gYXUwODI4X3R1bmVyX2NhbGxiYWNrOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfdHlwZV9hZGRyLAorCQkJCSAgICAgJnR1bl9zZXR1cCk7CisJfQogfQogCiAvKgpAQCAtMTM1LDcgKzIzMiw3IEBACiB7CiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKQEAgLTE0NCwyMSArMjQxLDIzIEBACiAJCSAqIDQgLSBDUzUzNDAKIAkJICogNSAtIEFVODUyMiBEZW1vZHVsYXRvcgogCQkgKiA2IC0gZWVwcm9tIFcvUAorCQkgKiA3IC0gcG93ZXIgc3VwcGx5CiAJCSAqIDkgLSBYQzUwMDAgVHVuZXIKIAkJICovCiAKIAkJLyogSW50byByZXNldCAqLwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAzLCAweDAyKTsKLQkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMiwgMHg4OCB8IDB4MjApOworCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDgwIHwgMHgyMCB8IDB4MTApOwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAxLCAweDApOwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAwLCAweDApOwogCQltc2xlZXAoMTAwKTsKIAotCQkvKiBPdXQgb2YgcmVzZXQgKi8KKwkJLyogT3V0IG9mIHJlc2V0IChsZWF2ZSB0aGUgY3M1MzQwIGluIHJlc2V0IHVudGlsIG5lZWRlZCkgKi8KIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMywgMHgwMik7CiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDEsIDB4MDIpOwotCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDg4IHwgMHgyMCk7Ci0JCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDAsIDB4ODggfCAweDIwIHwgMHg0MCk7CisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDIsIDB4ODAgfCAweDIwIHwgMHgxMCk7CisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDAsIDB4ODAgfCAweDQwIHwgMHgyMCk7CisKIAkJbXNsZWVwKDI1MCk7CiAJCWJyZWFrOwogCWNhc2UgQVUwODI4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFY3OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKaW5kZXggNTc2NWU4Ni4uOGM3NjFkMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKQEAgLTM2LDYgKzM2LDggQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXUwODI4X2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwogCitzdGF0aWMgYXRvbWljX3QgYXUwODI4X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKICNkZWZpbmUgX0FVMDgyOF9CVUxLUElQRSAweDAzCiAjZGVmaW5lIF9CVUxLUElQRVNJWkUgMHhmZmZmCiAKQEAgLTUxLDEzICs1MywxMyBAQAogdTMyIGF1MDgyOF9yZWFkcmVnKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHUxNiByZWcpCiB7CiAJcmVjdl9jb250cm9sX21zZyhkZXYsIENNRF9SRVFVRVNUX0lOLCAwLCByZWcsIGRldi0+Y3RybG1zZywgMSk7Ci0JZHByaW50ayg4LCAiJXMoMHgleCkgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVnLCBkZXYtPmN0cmxtc2dbMF0pOworCWRwcmludGsoOCwgIiVzKDB4JTA0eCkgPSAweCUwMnhcbiIsIF9fZnVuY19fLCByZWcsIGRldi0+Y3RybG1zZ1swXSk7CiAJcmV0dXJuIGRldi0+Y3RybG1zZ1swXTsKIH0KIAogdTMyIGF1MDgyOF93cml0ZXJlZyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1MTYgcmVnLCB1MzIgdmFsKQogewotCWRwcmludGsoOCwgIiVzKDB4JXgsIDB4JXgpXG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCWRwcmludGsoOCwgIiVzKDB4JTA0eCwgMHglMDJ4KVxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKIAlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhkZXYsIENNRF9SRVFVRVNUX09VVCwgdmFsLCByZWcsCiAJCQkJZGV2LT5jdHJsbXNnLCAwKTsKIH0KQEAgLTE0Niw5ICsxNDgsMTQgQEAKIAkvKiBEaWdpdGFsIFRWICovCiAJYXUwODI4X2R2Yl91bnJlZ2lzdGVyKGRldik7CiAKKwlpZiAoQVVWSV9JTlBVVCgwKS50eXBlICE9IEFVMDgyOF9WTVVYX1VOREVGSU5FRCkKKwkJYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKGRldik7CisKIAkvKiBJMkMgKi8KIAlhdTA4MjhfaTJjX3VucmVnaXN0ZXIoZGV2KTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CkBAIC0xNjIsNyArMTY5LDcgQEAKIHN0YXRpYyBpbnQgYXUwODI4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaWZudW07CisJaW50IGlmbnVtLCByZXR2YWwsIGk7CiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCkBAIC0xODUsMTAgKzE5MiwyMiBAQAogCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwogCW11dGV4X2luaXQoJmRldi0+ZHZiLmxvY2spOwogCWRldi0+dXNiZGV2ID0gdXNiZGV2OwotCWRldi0+Ym9hcmQgPSBpZC0+ZHJpdmVyX2luZm87CisJZGV2LT5ib2FyZG5yID0gaWQtPmRyaXZlcl9pbmZvOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CiAKKwkvKiBDcmVhdGUgdGhlIHY0bDJfZGV2aWNlICovCisJaSA9IGF0b21pY19pbmNfcmV0dXJuKCZhdTA4MjhfaW5zdGFuY2UpIC0gMTsKKwlzbnByaW50ZihkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUpLCAiJXMtJTAzZCIsCisJCSAiYXUwODI4IiwgaSk7CisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+dXNiZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB2NGwyX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRUlPOworCX0KKwogCS8qIFBvd2VyIFVwIHRoZSBicmlkZ2UgKi8KIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfNjAwLCAxIDw8IDQpOwogCkBAIC0yMDEsMTIgKzIyMCwxNSBAQAogCS8qIFNldHVwICovCiAJYXUwODI4X2NhcmRfc2V0dXAoZGV2KTsKIAorCS8qIEFuYWxvZyBUViAqLworCWlmIChBVVZJX0lOUFVUKDApLnR5cGUgIT0gQVUwODI4X1ZNVVhfVU5ERUZJTkVEKQorCQlhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKGRldiwgaW50ZXJmYWNlKTsKKwogCS8qIERpZ2l0YWwgVFYgKi8KIAlhdTA4MjhfZHZiX3JlZ2lzdGVyKGRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIGRldmljZSBBVTA4MjggWyVzXVxuIiwKLQkJYXUwODI4X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lID09IE5VTEwgPyAiVW5zZXQiIDoKLQkJYXUwODI4X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwkJZGV2LT5ib2FyZC5uYW1lID09IE5VTEwgPyAiVW5zZXQiIDogZGV2LT5ib2FyZC5uYW1lKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCmluZGV4IGE4ODJjZjUuLjE0YmFmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIGluaXQgZnJvbnRlbmQgKi8KLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGF1ODUyMl9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMKaW5kZXggZDYxOGZiYS4uZjlhOTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYwpAQCAtMTQwLDEzICsxNDAsMzkgQEAKIAlkcHJpbnRrKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMkZGLCAweDAxKTsKLQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKKworCS8qIEZJWE1FOiBUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBpMmMgY29tbXVuaWNhdGlvbnMgd2l0aCB4YzUwMDAgdGhhdAorCSAgIHJlcXVpcmVzIHVzIHRvIHNsb3cgZG93biB0aGUgaTJjIGNsb2NrIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIKKwkgICBzdHJhdGVneSAoc3VjaCBhcyB1c2luZyB0aGUgc2Vjb25kYXJ5IGkyYyBidXMgdG8gZG8gZmlybXdhcmUKKwkgICBsb2FkaW5nICovCisJaWYgKChtc2ctPmFkZHIgPDwgMSkgPT0gMHhjMikKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHg0MCk7CisJZWxzZQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKIAogCS8qIEhhcmR3YXJlIG5lZWRzIDggYml0IGFkZHJlc3NlcyAqLwogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDMsIG1zZy0+YWRkciA8PCAxKTsKIAogCWRwcmludGsoNCwgIlNFTkQ6ICUwMnhcbiIsIG1zZy0+YWRkcik7CiAKKwkvKiBEZWFsIHdpdGggaTJjX3NjYW4gKi8KKwlpZiAobXNnLT5sZW4gPT0gMCkgeworCQkvKiBUaGUgYW5hbG9nIHR1bmVyIGRldGVjdGlvbiBjb2RlIG1ha2VzIHVzZSBvZiB0aGUgU01CVVNfUVVJQ0sKKwkJICAgbWVzc2FnZSAod2hpY2ggaW52b2x2ZXMgYSB6ZXJvIGxlbmd0aCBpMmMgd3JpdGUpLiAgVG8gYXZvaWQKKwkJICAgY2hlY2tpbmcgdGhlIHN0YXR1cyByZWdpc3RlciB3aGVuIHdlIGRpZG4ndCBzdHJvYmUgb3V0IGFueQorCQkgICBhY3R1YWwgYnl0ZXMgdG8gdGhlIGJ1cywganVzdCBkbyBhIHJlYWQgY2hlY2suICBUaGlzIGlzCisJCSAgIGNvbnNpc3RlbnQgd2l0aCBob3cgSSBzYXcgaTJjIGRldmljZSBjaGVja2luZyBkb25lIGluIHRoZQorCQkgICBVU0IgdHJhY2Ugb2YgdGhlIFdpbmRvd3MgZHJpdmVyICovCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDAsIDB4MjApOworCQlpZiAoIWkyY193YWl0X2RvbmUoaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJaWYgKGkyY193YWl0X3JlYWRfYWNrKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCisJCXJldHVybiAwOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBtc2ctPmxlbjspIHsKIAogCQlkcHJpbnRrKDQsICIgJTAyeFxuIiwgbXNnLT5idWZbaV0pOwpAQCAtMTkxLDcgKzIxNywxNSBAQAogCWRwcmludGsoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yRkYsIDB4MDEpOwotCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOworCisJLyogRklYTUU6IFRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGkyYyBjb21tdW5pY2F0aW9ucyB3aXRoIHhjNTAwMCB0aGF0CisJICAgcmVxdWlyZXMgdXMgdG8gc2xvdyBkb3duIHRoZSBpMmMgY2xvY2sgdW50aWwgd2UgaGF2ZSBhIGJldHRlcgorCSAgIHN0cmF0ZWd5IChzdWNoIGFzIHVzaW5nIHRoZSBzZWNvbmRhcnkgaTJjIGJ1cyB0byBkbyBmaXJtd2FyZQorCSAgIGxvYWRpbmcgKi8KKwlpZiAoKG1zZy0+YWRkciA8PCAxKSA9PSAweGMyKQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDQwKTsKKwllbHNlCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOwogCiAJLyogSGFyZHdhcmUgbmVlZHMgOCBiaXQgYWRkcmVzc2VzICovCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMywgbXNnLT5hZGRyIDw8IDEpOwpAQCAtMjY1LDMzICsyOTksNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWRwcmludGsoMSwgImkyYyBkZXRhY2ggW2NsaWVudD0lc11cbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdTA4MjhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChkZXYtPmkyY19yYyAhPSAwKQotCQlyZXR1cm47Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZkZXYtPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KIHN0YXRpYyB1MzIgYXUwODI4X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwpAQCAtMzA5LDkgKzMxNiw2IEBACiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQVUwODI4LAogCS5hbGdvICAgICAgICAgICAgICA9ICZhdTA4MjhfaTJjX2FsZ29fdGVtcGxhdGUsCi0JLmNsYXNzICAgICAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAotCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgYXUwODI4X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CkBAIC0zNTYsOSArMzYwLDkgQEAKIAlzdHJsY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUsCiAJCXNpemVvZihkZXYtPmkyY19hZGFwLm5hbWUpKTsKIAotCWRldi0+aTJjX2FsZ28uZGF0YSA9IGRldjsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmZGV2LT5pMmNfYWxnbzsKIAlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCBkZXYpOworCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsICZkZXYtPnY0bDJfZGV2KTsKIAlpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOwogCiAJZGV2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmZGV2LT5pMmNfYWRhcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaAppbmRleCAxZTg3ZmEwYzYuLmIxNWU0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtcmVnLmgKQEAgLTI3LDYgKzI3LDkgQEAKICNkZWZpbmUgUkVHXzAwMiAweDAwMgogI2RlZmluZSBSRUdfMDAzIDB4MDAzCiAKKyNkZWZpbmUgQVUwODI4X1NFTlNPUkNUUkxfMTAwIDB4MTAwCisjZGVmaW5lIEFVMDgyOF9TRU5TT1JDVFJMX1ZCSV8xMDMgMHgxMDMKKwogI2RlZmluZSBSRUdfMjAwIDB4MjAwCiAjZGVmaW5lIFJFR18yMDEgMHgyMDEKICNkZWZpbmUgUkVHXzIwMiAweDIwMgpAQCAtMzUsNCArMzgsNyBAQAogI2RlZmluZSBSRUdfMjA5IDB4MjA5CiAjZGVmaW5lIFJFR18yRkYgMHgyZmYKIAorLyogQXVkaW8gcmVnaXN0ZXJzICovCisjZGVmaW5lIEFVMDgyOF9BVURJT0NUUkxfNTBDIDB4NTBDCisKICNkZWZpbmUgUkVHXzYwMCAweDYwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FkNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKQEAgLTAsMCArMSwxNzEyIEBACisvKgorICogQXV2aXRlayBBVTA4MjggVVNCIEJyaWRnZSAoQW5hbG9nIHZpZGVvIHN1cHBvcnQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBBdXZpdGVrIEludGVybmF0aW9uYWwsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogQXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyogRGV2ZWxvcGVyIE5vdGVzOgorICoKKyAqIFZCSSBzdXBwb3J0IGlzIG5vdCB5ZXQgd29ya2luZworICogVGhlIGhhcmR3YXJlIHNjYWxlciBzdXBwb3J0ZWQgaXMgdW5pbXBsZW1lbnRlZAorICogQUM5NyBhdWRpbyBzdXBwb3J0IGlzIHVuaW1wbGVtZW50ZWQgKG9ubHkgaTJzIGF1ZGlvIG1vZGUpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgImF1MDgyOC5oIgorI2luY2x1ZGUgImF1MDgyOC1yZWcuaCIKKworc3RhdGljIExJU1RfSEVBRChhdTA4MjhfZGV2bGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGF1MDgyOF9zeXNmc19sb2NrKTsKKworI2RlZmluZSBBVTA4MjhfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZpZGVvYnVmIG9wZXJhdGlvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNvY19kZWJ1ZzsKK21vZHVsZV9wYXJhbShpc29jX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc29jX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtpc29jIHRyYW5zZmVyc10iKTsKKworI2RlZmluZSBhdTA4MjhfaXNvY2RiZyhmbXQsIGFyZy4uLikgXAorZG8ge1wKKwlpZiAoaXNvY19kZWJ1ZykgeyBcCisJCXByaW50ayhLRVJOX0lORk8gImF1MDgyOCAlcyA6ImZtdCwgXAorCQkgICAgICAgX19mdW5jX18gLCAjI2FyZyk7CSAgIFwKKwl9IFwKKyAgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHByaW50X2Vycl9zdGF0dXMoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCQkgICAgaW50IHBhY2tldCwgaW50IHN0YXR1cykKK3sKKwljaGFyICplcnJtc2cgPSAiVW5rbm93biI7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgLUVOT0VOVDoKKwkJZXJybXNnID0gInVubGlua2VkIHN5bmNocm9udW91c2x5IjsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJZXJybXNnID0gInVubGlua2VkIGFzeW5jaHJvbnVvdXNseSI7CisJCWJyZWFrOworCWNhc2UgLUVOT1NSOgorCQllcnJtc2cgPSAiQnVmZmVyIGVycm9yIChvdmVycnVuKSI7CisJCWJyZWFrOworCWNhc2UgLUVQSVBFOgorCQllcnJtc2cgPSAiU3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSI7CisJCWJyZWFrOworCWNhc2UgLUVPVkVSRkxPVzoKKwkJZXJybXNnID0gIkJhYmJsZSAoYmFkIGNhYmxlPykiOworCQlicmVhazsKKwljYXNlIC1FUFJPVE86CisJCWVycm1zZyA9ICJCaXQtc3R1ZmYgZXJyb3IgKGJhZCBjYWJsZT8pIjsKKwkJYnJlYWs7CisJY2FzZSAtRUlMU0VROgorCQllcnJtc2cgPSAiQ1JDL1RpbWVvdXQgKGNvdWxkIGJlIGFueXRoaW5nKSI7CisJCWJyZWFrOworCWNhc2UgLUVUSU1FOgorCQllcnJtc2cgPSAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQiOworCQlicmVhazsKKwl9CisJaWYgKHBhY2tldCA8IDApIHsKKwkJYXUwODI4X2lzb2NkYmcoIlVSQiBzdGF0dXMgJWQgWyVzXS5cbiIsCXN0YXR1cywgZXJybXNnKTsKKwl9IGVsc2UgeworCQlhdTA4MjhfaXNvY2RiZygiVVJCIHBhY2tldCAlZCwgc3RhdHVzICVkIFslc10uXG4iLAorCQkJICAgICAgIHBhY2tldCwgc3RhdHVzLCBlcnJtc2cpOworCX0KK30KKworc3RhdGljIGludCBjaGVja19kZXYoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gInY0bDIgaW9jdGw6IGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPmRldl9zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gInY0bDIgaW9jdGw6IGRldmljZSBpcyBtaXNjb25maWd1cmVkOyAiCisJCSAgICAgICAiY2xvc2UgYW5kIG9wZW4gaXQgYWdhaW5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJUlEgY2FsbGJhY2ssIGNhbGxlZCBieSBVUkIgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgYXUwODI4X2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBhdTA4MjhfZGV2LCB2aWRxKTsKKwlpbnQgcmMsIGk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJYXUwODI4X2lzb2NkYmcoImF1MDgyOF9pcnFfY2FsbGJhY2sgY2FsbGVkOiBzdGF0dXMga2lsbFxuIik7CisJCXJldHVybjsKKwlkZWZhdWx0OiAgICAgICAgICAgIC8qIHVua25vd24gZXJyb3IgKi8KKwkJYXUwODI4X2lzb2NkYmcoInVyYiBjb21wbGV0aXRpb24gZXJyb3IgJWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCS8qIENvcHkgZGF0YSBmcm9tIFVSQiAqLworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJcmMgPSBkZXYtPmlzb2NfY3RsLmlzb2NfY29weShkZXYsIHVyYik7CisJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCisJLyogUmVzZXQgdXJiIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisJdXJiLT5zdGF0dXMgPSAwOworCisJdXJiLT5zdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmICh1cmItPnN0YXR1cykgeworCQlhdTA4MjhfaXNvY2RiZygidXJiIHJlc3VibWl0IGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkJICAgICAgIHVyYi0+c3RhdHVzKTsKKwl9Cit9CisKKy8qCisgKiBTdG9wIGFuZCBEZWFsbG9jYXRlIFVSQnMKKyAqLwordm9pZCBhdTA4MjhfdW5pbml0X2lzb2Moc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGk7CisKKwlhdTA4MjhfaXNvY2RiZygiYXUwODI4OiBjYWxsZWQgYXUwODI4X3VuaW5pdF9pc29jXG4iKTsKKworCWRldi0+aXNvY19jdGwubmZpZWxkcyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKKwkJdXJiID0gZGV2LT5pc29jX2N0bC51cmJbaV07CisJCWlmICh1cmIpIHsKKwkJCWlmICghaXJxc19kaXNhYmxlZCgpKQorCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJZWxzZQorCQkJCXVzYl91bmxpbmtfdXJiKHVyYik7CisKKwkJCWlmIChkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVzYmRldiwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSwKKwkJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQkJfQorCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlkZXYtPmlzb2NfY3RsLnVyYltpXSA9IE5VTEw7CisJCX0KKwkJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0gPSBOVUxMOworCX0KKworCWtmcmVlKGRldi0+aXNvY19jdGwudXJiKTsKKwlrZnJlZShkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcik7CisKKwlkZXYtPmlzb2NfY3RsLnVyYiA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCWRldi0+aXNvY19jdGwubnVtX2J1ZnMgPSAwOworfQorCisvKgorICogQWxsb2NhdGUgVVJCcyBhbmQgc3RhcnQgSVJRCisgKi8KK2ludCBhdTA4MjhfaW5pdF9pc29jKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIGludCBtYXhfcGFja2V0cywKKwkJICAgICBpbnQgbnVtX2J1ZnMsIGludCBtYXhfcGt0X3NpemUsCisJCSAgICAgaW50ICgqaXNvY19jb3B5KSAoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgc3RydWN0IHVyYiAqdXJiKSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSA9ICZkZXYtPnZpZHE7CisJaW50IGk7CisJaW50IHNiX3NpemUsIHBpcGU7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBqLCBrOworCWludCByYzsKKworCWF1MDgyOF9pc29jZGJnKCJhdTA4Mjg6IGNhbGxlZCBhdTA4MjhfcHJlcGFyZV9pc29jXG4iKTsKKworCS8qIERlLWFsbG9jYXRlcyBhbGwgcGVuZGluZyBzdHVmZiAqLworCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCisJZGV2LT5pc29jX2N0bC5pc29jX2NvcHkgPSBpc29jX2NvcHk7CisJZGV2LT5pc29jX2N0bC5udW1fYnVmcyA9IG51bV9idWZzOworCisJZGV2LT5pc29jX2N0bC51cmIgPSBremFsbG9jKHNpemVvZih2b2lkICopKm51bV9idWZzLCAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmlzb2NfY3RsLnVyYikgeworCQlhdTA4MjhfaXNvY2RiZygiY2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdXNiIGJ1ZmZlcnNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbnVtX2J1ZnMsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIpIHsKKwkJYXUwODI4X2lzb2NkYmcoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzYiB0cmFuc2ZlclxuIik7CisJCWtmcmVlKGRldi0+aXNvY19jdGwudXJiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemUgPSBtYXhfcGt0X3NpemU7CisJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCisJc2Jfc2l6ZSA9IG1heF9wYWNrZXRzICogZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CisKKwkvKiBhbGxvY2F0ZSB1cmJzIGFuZCB0cmFuc2ZlciBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+aXNvY19jdGwubnVtX2J1ZnM7IGkrKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKG1heF9wYWNrZXRzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJjYW5ub3QgYWxsb2MgaXNvY19jdGwudXJiICVpXG4iLCBpKTsKKwkJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZGV2LT5pc29jX2N0bC51cmJbaV0gPSB1cmI7CisKKwkJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dXNiZGV2LAorCQkJc2Jfc2l6ZSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgJWkgYnl0ZXMgZm9yIHRyYW5zZmVyIgorCQkJCQkiIGJ1ZmZlciAlaSVzXG4iLAorCQkJCQlzYl9zaXplLCBpLAorCQkJCQlpbl9pbnRlcnJ1cHQoKSA/ICIgd2hpbGUgaW4gaW50IiA6ICIiKTsKKwkJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldLCAwLCBzYl9zaXplKTsKKworCQlwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldi0+dXNiZGV2LAorCQkJCSAgICAgICBkZXYtPmlzb2NfaW5fZW5kcG9pbnRhZGRyKSwKKworCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgZGV2LT51c2JkZXYsIHBpcGUsCisJCQkJIGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldLCBzYl9zaXplLAorCQkJCSBhdTA4MjhfaXJxX2NhbGxiYWNrLCBkbWFfcSwgMSk7CisKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IG1heF9wYWNrZXRzOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkJayA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBtYXhfcGFja2V0czsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9CisJCQkJCQlkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZTsKKwkJCWsgKz0gZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CisJCX0KKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcS0+d3EpOworCisJLyogc3VibWl0IHVyYnMgYW5kIGVuYWJsZXMgSVJRICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+aXNvY19jdGwubnVtX2J1ZnM7IGkrKykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aXNvY19jdGwudXJiW2ldLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJjKSB7CisJCQlhdTA4MjhfaXNvY2RiZygic3VibWl0IG9mIHVyYiAlaSBmYWlsZWQgKGVycm9yPSVpKVxuIiwKKwkJCQkgICAgICAgaSwgcmMpOworCQkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFubm91bmNlcyB0aGF0IGEgYnVmZmVyIHdlcmUgZmlsbGVkIGFuZCByZXF1ZXN0IHRoZSBuZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfZmlsbGVkKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkJICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQkgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCit7CisJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KKwlhdTA4MjhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworCWJ1Zi0+dmIuZmllbGRfY291bnQrKzsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCisJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgYnVmZmVyIGhlYWRlciB0eXBlIGFuZCBwcm9wZXJseSBoYW5kbGVzCisgKi8KK3N0YXRpYyB2b2lkIGF1MDgyOF9jb3B5X3ZpZGVvKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqcCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHAsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXZvaWQgKmZpZWxkc3RhcnQsICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOworCWludCAgbGluZXNkb25lLCBjdXJybGluZWRvbmUsIG9mZnNldCwgbGVuY29weSwgcmVtYWluOworCWludCBieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoIDw8IDE7IC8qIEFzc3VtZXMgMTYtYml0IGRlcHRoIEBAQEAgKi8KKworCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQorCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOworCisJc3RhcnRyZWFkID0gcDsKKwlyZW1haW4gPSBsZW47CisKKwkvKiBJbnRlcmxhY2VzIGZyYW1lICovCisJaWYgKGJ1Zi0+dG9wX2ZpZWxkKQorCQlmaWVsZHN0YXJ0ID0gb3V0cDsKKwllbHNlCisJCWZpZWxkc3RhcnQgPSBvdXRwICsgYnl0ZXNwZXJsaW5lOworCisJbGluZXNkb25lID0gZG1hX3EtPnBvcyAvIGJ5dGVzcGVybGluZTsKKwljdXJybGluZWRvbmUgPSBkbWFfcS0+cG9zICUgYnl0ZXNwZXJsaW5lOworCW9mZnNldCA9IGxpbmVzZG9uZSAqIGJ5dGVzcGVybGluZSAqIDIgKyBjdXJybGluZWRvbmU7CisJc3RhcnR3cml0ZSA9IGZpZWxkc3RhcnQgKyBvZmZzZXQ7CisJbGVuY29weSA9IGJ5dGVzcGVybGluZSAtIGN1cnJsaW5lZG9uZTsKKwlsZW5jb3B5ID0gbGVuY29weSA+IHJlbWFpbiA/IHJlbWFpbiA6IGxlbmNvcHk7CisKKwlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkgeworCQlhdTA4MjhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMSlcbiIsCisJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KKwkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSk7CisJCXJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJbGVuY29weSA9IHJlbWFpbjsKKwl9CisJaWYgKGxlbmNvcHkgPD0gMCkKKwkJcmV0dXJuOworCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbmNvcHkpOworCisJcmVtYWluIC09IGxlbmNvcHk7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQlzdGFydHdyaXRlICs9IGxlbmNvcHkgKyBieXRlc3BlcmxpbmU7CisJCXN0YXJ0cmVhZCArPSBsZW5jb3B5OworCQlpZiAoYnl0ZXNwZXJsaW5lID4gcmVtYWluKQorCQkJbGVuY29weSA9IHJlbWFpbjsKKwkJZWxzZQorCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKKworCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCisJCSAgICBidWYtPnZiLnNpemUpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJPdmVyZmxvdyAlemkgYnl0ZXMgcGFzdCBidWYgZW5kICgyKVxuIiwKKwkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KKwkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOworCQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtCisJCQkJCSAgIChjaGFyICopc3RhcnR3cml0ZTsKKwkJfQorCQlpZiAobGVuY29weSA8PSAwKQorCQkJYnJlYWs7CisKKwkJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuY29weSk7CisKKwkJcmVtYWluIC09IGxlbmNvcHk7CisJfQorCisJaWYgKG9mZnNldCA+IDE0NDApIHsKKwkJLyogV2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBjaGVjayBmb3IgZ3JlZW5zY3JlZW4gKi8KKwkJaWYgKG91dHBbMF0gPCAweDYwICYmIG91dHBbMTQ0MF0gPCAweDYwKQorCQkJZGV2LT5ncmVlbnNjcmVlbl9kZXRlY3RlZCA9IDE7CisJfQorCisJZG1hX3EtPnBvcyArPSBsZW47Cit9CisKKy8qCisgKiB2aWRlby1idWYgZ2VuZXJpYyByb3V0aW5lIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbmV4dF9idWYoc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJc3RydWN0IGF1MDgyOF9idWZmZXIgKipidWYpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGF1MDgyOF9kZXYsIHZpZHEpOworCisJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CisJCWF1MDgyOF9pc29jZGJnKCJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOworCQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJCSpidWYgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLworCSpidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiLnF1ZXVlKTsKKwlkZXYtPmlzb2NfY3RsLmJ1ZiA9ICpidWY7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDb250cm9scyB0aGUgaXNvYyBjb3B5IG9mIGVhY2ggdXJiIHBhY2tldAorICovCitzdGF0aWMgaW5saW5lIGludCBhdTA4MjhfaXNvY19jb3B5KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAqYnVmOworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpvdXRwID0gTlVMTDsKKwlpbnQgaSwgbGVuID0gMCwgcmMgPSAxOworCXVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgY2hhciBmYnl0ZTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICgoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCSAgICAoZGV2LT5kZXZfc3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCisJCXJldHVybiAwOworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkgeworCQlwcmludF9lcnJfc3RhdHVzKGRldiwgLTEsIHVyYi0+c3RhdHVzKTsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlidWYgPSBkZXYtPmlzb2NfY3RsLmJ1ZjsKKwlpZiAoYnVmICE9IE5VTEwpCisJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IHN0YXR1cyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludF9lcnJfc3RhdHVzKGRldiwgaSwgc3RhdHVzKTsKKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAtRVBST1RPKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA8PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+CisJCQkJCQlkZXYtPm1heF9wa3Rfc2l6ZSkgeworCQkJYXUwODI4X2lzb2NkYmcoInBhY2tldCBiaWdnZXIgdGhhbiBwYWNrZXQgc2l6ZSIpOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJZmJ5dGUgPSBwWzBdOworCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSA0OworCQlwICs9IDQ7CisKKwkJaWYgKGZieXRlICYgMHg4MCkgeworCQkJbGVuIC09IDQ7CisJCQlwICs9IDQ7CisJCQlhdTA4MjhfaXNvY2RiZygiVmlkZW8gZnJhbWUgJXNcbiIsCisJCQkJICAgICAgIChmYnl0ZSAmIDB4NDApID8gIm9kZCIgOiAiZXZlbiIpOworCQkJaWYgKCEoZmJ5dGUgJiAweDQwKSkgeworCQkJCWlmIChidWYgIT0gTlVMTCkKKwkJCQkJYnVmZmVyX2ZpbGxlZChkZXYsIGRtYV9xLCBidWYpOworCQkJCWdldF9uZXh0X2J1ZihkbWFfcSwgJmJ1Zik7CisJCQkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJCQlvdXRwID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKwkJCX0KKworCQkJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCQkJaWYgKGZieXRlICYgMHg0MCkKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAxOworCQkJCWVsc2UKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAwOworCQkJfQorCisJCQlkbWFfcS0+cG9zID0gMDsKKwkJfQorCQlpZiAoYnVmICE9IE5VTEwpCisJCQlhdTA4MjhfY29weV92aWRlbyhkZXYsIGRtYV9xLCBidWYsIHAsIG91dHAsIGxlbik7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCSpzaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogMTYgKyA3KSA+PiAzOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSBBVTA4MjhfREVGX0JVRjsKKworCWlmICgqY291bnQgPCBBVTA4MjhfTUlOX0JVRikKKwkJKmNvdW50ID0gQVUwODI4X01JTl9CVUY7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkICp3aXRob3V0KiBkZXYtPnNsb2NrIGhlbGQ7IHBsZWFzZSBrZWVwIGl0IHRoYXQgd2F5ICovCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJQlVHKCk7CisKKwkvKiBXZSB1c2VkIHRvIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gZmluaXNoIGhlcmUsIGJ1dCB0aGlzIGRpZG4ndCB3b3JrCisJICAgYmVjYXVzZSwgYXMgd2Ugd2VyZSBrZWVwaW5nIHRoZSBzdGF0ZSBhcyBWSURFT0JVRl9RVUVVRUQsCisJICAgdmlkZW9idWZfcXVldWVfY2FuY2VsIG1hcmtlZCBpdCBhcyBmaW5pc2hlZCBmb3IgdXMuCisJICAgKEFsc28sIGl0IGNvdWxkIHdlZGdlIGZvcmV2ZXIgaWYgdGhlIGhhcmR3YXJlIHdhcyBtaXNjb25maWd1cmVkLikKKworCSAgIFRoaXMgc2hvdWxkIGJlIHNhZmU7IGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB0aGUgYnVmZmVyIGlzbid0CisJICAgcXVldWVkIGFueW1vcmUuIElmIHdlIGV2ZXIgc3RhcnQgbWFya2luZyB0aGUgYnVmZmVycyBhcworCSAgIFZJREVPQlVGX0FDVElWRSwgaXQgd29uJ3QgYmUsIHRob3VnaC4KKwkqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJaWYgKGRldi0+aXNvY19jdGwuYnVmID09IGJ1ZikKKwkJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKworCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpbnQKK2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yik7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7CisJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwLCB1cmJfaW5pdCA9IDA7CisKKwlidWYtPnZiLnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiAxNiArIDcpID4+IDM7CisKKwlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYtPnZiLndpZHRoICA9IGRldi0+d2lkdGg7CisJYnVmLT52Yi5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwlidWYtPnZiLmZpZWxkICA9IGZpZWxkOworCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgJmJ1Zi0+dmIsIE5VTEwpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWlmICghZGV2LT5pc29jX2N0bC5udW1fYnVmcykKKwkJdXJiX2luaXQgPSAxOworCisJaWYgKHVyYl9pbml0KSB7CisJCXJjID0gYXUwODI4X2luaXRfaXNvYyhkZXYsIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCLAorCQkJCSAgICAgIEFVMDgyOF9NQVhfSVNPX0JVRlMsIGRldi0+bWF4X3BrdF9zaXplLAorCQkJCSAgICAgIGF1MDgyOF9pc29jX2NvcHkpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJhdTA4MjhfaW5pdF9pc29jIGZhaWxlZFxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyLAorCQkJCQkJCXZiKTsKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnZpZHEtPmFjdGl2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAqYnVmICA9IGNvbnRhaW5lcl9vZih2YiwKKwkJCQkJCSAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwKKwkJCQkJCSAgICB2Yik7CisKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYXUwODI4X3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBidWZmZXJfcmVsZWFzZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVjRMMiBpbnRlcmZhY2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgYXUwODI4X2kyc19pbml0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJLyogRW5hYmxlIGkycyBtb2RlICovCisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X0FVRElPQ1RSTF81MEMsIDB4MDEpOworCXJldHVybiAwOworfQorCisvKgorICogQXV2aXRlayBhdTA4MjggYW5hbG9nIHN0cmVhbSBlbmFibGUKKyAqIFBsZWFzZSBzZXQgaW50ZXJmYWNlMCB0byBBUzUgYmVmb3JlIGVuYWJsZSB0aGUgc3RyZWFtCisgKi8KK2ludCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpCit7CisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlIGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGQsIEFVMDgyOF9TRU5TT1JDVFJMX1ZCSV8xMDMsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDEwNiwgMHgwMCk7CisJLyogc2V0IHggcG9zaXRpb24gKi8KKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTAsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMSwgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE0LCAweGEwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTUsIDB4MDUpOworCS8qIHNldCB5IHBvc2l0aW9uICovCisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTEyLCAweDAyKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTMsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExNiwgMHhmMik7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE3LCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweGIzKTsKKworCXJldHVybiAwOworfQorCitpbnQgYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShzdHJ1Y3QgYXUwODI4X2RldiAqZCkKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlIGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGQsIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCwgMHgwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWRwcmludGsoMSwgImF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0IGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweDApOworCW1kZWxheSgzMCk7CisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweGIzKTsKK30KKworLyoKKyAqIFNvbWUgb3BlcmF0aW9ucyBuZWVkcyB0byBzdG9wIGN1cnJlbnQgc3RyZWFtaW5nCisgKi8KK3N0YXRpYyBpbnQgYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWRldi0+c3RyZWFtX3N0YXRlID0gU1RSRUFNX0lOVEVSUlVQVDsKKwlpZiAoZGV2LT5kZXZfc3RhdGUgPT0gREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZSBpZiAocmV0KSB7CisJCWRldi0+ZGV2X3N0YXRlID0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWRwcmludGsoMSwgIiVzIGRldmljZSBpcyBtaXNjb25maWd1cmVkIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGF1MDgyOF9yZWxlYXNlX3Jlc291cmNlcworICogdW5yZWdpc3RlciB2NGwyIGRldmljZXMKKyAqLwordm9pZCBhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfcmVsZWFzZV9yZXNvdXJjZXMgY2FsbGVkXG4iKTsKKwltdXRleF9sb2NrKCZhdTA4Mjhfc3lzZnNfbG9jayk7CisKKwlpZiAoZGV2LT52ZGV2KSB7CisJCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYpOworCX0KKwlpZiAoZGV2LT52YmlfZGV2KQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOworCisJbXV0ZXhfdW5sb2NrKCZhdTA4Mjhfc3lzZnNfbG9jayk7Cit9CisKKworLyogVXNhZ2UgbG9jayBjaGVjayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQJCSByYyAgID0gMDsKKworCS8qIFRoaXMgaW5zdGFuY2UgYWxyZWFkeSBoYXMgc3RyZWFtX29uICovCisJaWYgKGZoLT5zdHJlYW1fb24pCisJCXJldHVybiByYzsKKworCWlmIChkZXYtPnN0cmVhbV9vbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldi0+c3RyZWFtX29uID0gMTsKKwlmaC0+c3RyZWFtX29uICA9IDE7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlyZXR1cm4gZmgtPnN0cmVhbV9vbjsKK30KKworc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGF1MDgyOF9maCAqZmgpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmaC0+c3RyZWFtX29uID0gMDsKKwlkZXYtPnN0cmVhbV9vbiA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGF1MDgyOF9maCAqZmg7CisJaW50IHR5cGUgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZhdTA4MjhfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgYXUwODI4X2RldiwgYXUwODI4bGlzdCk7CisJCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKyNpZmRlZiBWQklfSVNfV09SS0lORworCQlpZiAoaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJfQorI2VuZGlmCisJfQorCisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1MDgyOF9maCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCWRwcmludGsoMSwgIkZhaWxlZCBhbGxvY2F0ZSBhdTA4MjhfZmggc3RydWN0IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+ZGV2ID0gZGV2OworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZoOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAmJiBkZXYtPnVzZXJzID09IDApIHsKKwkJLyogc2V0IGF1MDgyOCBpbnRlcmZhY2UwIHRvIEFTNSBoZXJlIGFnYWluICovCisJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dXNiZGV2LCAwLCA1KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkF1MDgyOCBjYW4ndCBzZXQgYWx0ZXJuYXRlIHRvIDUhXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZGV2LT53aWR0aCA9IE5UU0NfU1REX1c7CisJCWRldi0+aGVpZ2h0ID0gTlRTQ19TVERfSDsKKwkJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwkJZGV2LT5maWVsZF9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0OworCQlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChkZXYpOworCisJCS8qIElmIHdlIHdlcmUgZG9pbmcgYWM5NyBpbnN0ZWFkIG9mIGkycywgaXQgd291bGQgZ28gaGVyZS4uLiovCisJCWF1MDgyOF9pMnNfaW5pdChkZXYpOworCisJCWRldi0+c3RyZWFtX3N0YXRlID0gU1RSRUFNX09GRjsKKwkJZGV2LT5kZXZfc3RhdGUgfD0gREVWX0lOSVRJQUxJWkVEOworCX0KKworCWRldi0+dXNlcnMrKzsKKworCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZmgtPnZiX3ZpZHEsICZhdTA4MjhfdmlkZW9fcW9wcywKKwkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssIGZoLT50eXBlLAorCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXUwODI4X2J1ZmZlciksIGZoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKHJlc19jaGVjayhmaCkpCisJCXJlc19mcmVlKGZoKTsKKworCWlmIChkZXYtPnVzZXJzID09IDEpIHsKKwkJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52Yl92aWRxKTsKKworCQlpZiAoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCQlhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoZGV2KTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCWtmcmVlKGRldik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoZGV2KTsKKworCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKworCQkvKiBXaGVuIGNsb3NlIHRoZSBkZXZpY2UsIHNldCB0aGUgdXNiIGludGYwIGludG8gYWx0MCB0byBmcmVlCisJCSAgIFVTQiBiYW5kd2lkdGggKi8KKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51c2JkZXYsIDAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXByaW50ayhLRVJOX0lORk8gIkF1MDgyOCBjYW4ndCBzZXQgYWx0ZXJuYXRlIHRvIDAhXG4iKTsKKwl9CisKKwlrZnJlZShmaCk7CisJZGV2LT51c2Vycy0tOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmZGV2LT5vcGVuLCAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF1MDgyOF92NGwyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJcmMgPSByZXNfZ2V0KGZoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJCWlmICh1bmxpa2VseShyYyA8IDApKQorCQkJcmV0dXJuIHJjOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZpZHEsIGJ1ZiwgY291bnQsIHBvcywgMCwKKwkJCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhdTA4MjhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh1bmxpa2VseShyYyA8IDApKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZmgtPnR5cGUpCisJCXJldHVybiBQT0xMRVJSOworCisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbHAsICZmaC0+dmJfdmlkcSwgd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggICAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiAgID0gZmgtPmRldjsKKwlpbnQJCSByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh1bmxpa2VseShyYyA8IDApKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKKworCWRwcmludGsoMiwgInZtYSBzdGFydD0weCUwOGx4LCBzaXplPSVsZCwgcmV0PSVkXG4iLAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX2VuZC0odW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQlyYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3NldF9mb3JtYXQoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCit7CisJaW50IHJldDsKKwlpbnQgd2lkdGggPSBmb3JtYXQtPmZtdC5waXgud2lkdGg7CisJaW50IGhlaWdodCA9IGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQ7CisJdW5zaWduZWQgaW50IG1heHdpZHRoLCBtYXhoZWlnaHQ7CisKKwltYXh3aWR0aCA9IDcyMDsKKwltYXhoZWlnaHQgPSA0ODA7CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCWlmIChmb3JtYXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpIHsKKwkJZHByaW50aygxLCAiVkJJIGZvcm1hdCBzZXQ6IHRvIGJlIHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIElmIHRoZXkgYXJlIGRlbWFuZGluZyBhIGZvcm1hdCBvdGhlciB0aGFuIHRoZSBvbmUgd2Ugc3VwcG9ydCwKKwkgICBiYWlsIG91dCAodHZ0aW1lIGFza3MgZm9yIFVZVlkgYW5kIHRoZW4gcmV0cmllcyB3aXRoIFlVWVYpICovCisJaWYgKGZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmb3JtYXQtPmZtdC5waXgud2lkdGggb25seSBzdXBwb3J0IDcyMCBhbmQgaGVpZ2h0IDQ4MCAqLworCWlmICh3aWR0aCAhPSA3MjApCisJCXdpZHRoID0gNzIwOworCWlmIChoZWlnaHQgIT0gNDgwKQorCQloZWlnaHQgPSA0ODA7CisKKwlmb3JtYXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKKwlmb3JtYXQtPmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OworCWZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCWZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB3aWR0aCAqIDI7CisJZm9ybWF0LT5mbXQucGl4LnNpemVpbWFnZSA9IHdpZHRoICogaGVpZ2h0ICogMjsKKwlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCisJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkKKwkJcmV0dXJuIDA7CisKKwkvKiBtYXliZSBzZXQgbmV3IGltYWdlIGZvcm1hdCwgZHJpdmVyIGN1cnJlbnQgb25seSBzdXBwb3J0IDcyMCo0ODAgKi8KKwlkZXYtPndpZHRoID0gd2lkdGg7CisJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXplID0gd2lkdGggKiBoZWlnaHQgKiAyOworCWRldi0+ZmllbGRfc2l6ZSA9IHdpZHRoICogaGVpZ2h0OworCWRldi0+Ynl0ZXNwZXJsaW5lID0gd2lkdGggKiAyOworCisJaWYgKGRldi0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9PTikgeworCQlkcHJpbnRrKDEsICJWSURJT0NfU0VUX0ZNVDogaW50ZXJydXB0aW5nIHN0cmVhbSFcbiIpOworCQlyZXQgPSBhdTA4Mjhfc3RyZWFtX2ludGVycnVwdChkZXYpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRwcmludGsoMSwgImVycm9yIGludGVycnVwdGluZyB2aWRlbyBzdHJlYW0hXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBzZXQgYXUwODI4IGludGVyZmFjZTAgdG8gQVM1IGhlcmUgYWdhaW4gKi8KKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwgMCwgNSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXUwODI4IGNhbid0IHNldCBhbHQgc2V0dGluZyB0byA1IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOworCWlmIChxYy0+dHlwZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiYXUwODI4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJc3RybGNweShjYXAtPmNhcmQsIGRldi0+Ym9hcmQubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCisJY2FwLT52ZXJzaW9uID0gQVUwODI4X1ZFUlNJT05fQ09ERTsKKworCS8qc2V0IHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKyNpZmRlZiBWQklfSVNfV09SS0lORworCQlWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CisjZW5kaWYKKwkJVjRMMl9DQVBfQVVESU8gfAorCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAorCQlWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQlWNEwyX0NBUF9UVU5FUjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKGYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiUGFja2VkIFlVVjIiKTsKKworCWYtPmZsYWdzID0gMDsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJZi0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBkZXYtPmJ5dGVzcGVybGluZTsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGRldi0+ZnJhbWVfc2l6ZTsKKwlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOyAvKiBOVFNDL1BBTCAqLworCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJcmV0dXJuIGF1MDgyOF9zZXRfZm9ybWF0KGRldiwgVklESU9DX1RSWV9GTVQsIGYpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+c3RyZWFtX29uICYmICFmaC0+c3RyZWFtX29uKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIGRldmljZSBpbiB1c2UgYnkgYW5vdGhlciBmaFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIGF1MDgyOF9zZXRfZm9ybWF0KGRldiwgVklESU9DX1NfRk1ULCBmKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIG5vcm0pCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLyogRklYTUU6IHdoZW4gd2Ugc3VwcG9ydCBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVFNDLCB3ZSBhcmUgZ29pbmcgdG8KKwkgICBoYXZlIHRvIG1ha2UgdGhlIGF1MDgyOCBicmlkZ2UgYWRqdXN0IHRoZSBzaXplIG9mIGl0cyBjYXB0dXJlCisJICAgYnVmZmVyLCB3aGljaCBpcyBjdXJyZW50bHkgaGFyZGNvZGVkIGF0IDcyMHg0ODAgKi8KKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc19zdGQsICpub3JtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVzW10gPSB7CisJCVtBVTA4MjhfVk1VWF9VTkRFRklORURdID0gIlVuZGVmaW5lZCIsCisJCVtBVTA4MjhfVk1VWF9DT01QT1NJVEVdID0gIkNvbXBvc2l0ZSIsCisJCVtBVTA4MjhfVk1VWF9TVklERU9dID0gIlMtVmlkZW8iLAorCQlbQVUwODI4X1ZNVVhfQ0FCTEVdID0gIkNhYmxlIFRWIiwKKwkJW0FVMDgyOF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24iLAorCQlbQVUwODI4X1ZNVVhfRFZCXSA9ICJEVkIiLAorCQlbQVUwODI4X1ZNVVhfREVCVUddID0gInR2IGRlYnVnIgorCX07CisKKwl0bXAgPSBpbnB1dC0+aW5kZXg7CisKKwlpZiAodG1wID4gQVUwODI4X01BWF9JTlBVVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEFVVklfSU5QVVQodG1wKS50eXBlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaW5wdXQtPmluZGV4ID0gdG1wOworCXN0cmNweShpbnB1dC0+bmFtZSwgaW5hbWVzW0FVVklfSU5QVVQodG1wKS50eXBlXSk7CisJaWYgKChBVVZJX0lOUFVUKHRtcCkudHlwZSA9PSBBVTA4MjhfVk1VWF9URUxFVklTSU9OKSB8fAorCSAgICAoQVVWSV9JTlBVVCh0bXApLnR5cGUgPT0gQVUwODI4X1ZNVVhfQ0FCTEUpKQorCQlpbnB1dC0+dHlwZSB8PSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJZWxzZQorCQlpbnB1dC0+dHlwZSB8PSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJaW5wdXQtPnN0ZCA9IGRldi0+dmRldi0+dHZub3JtczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCSppID0gZGV2LT5jdHJsX2lucHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBpOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCBpbiBmdW5jdGlvbiAlcywgaW5wdXQ9JWRcbiIsIF9fZnVuY19fLAorCQlpbmRleCk7CisJaWYgKGluZGV4ID49IEFVMDgyOF9NQVhfSU5QVVQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChBVVZJX0lOUFVUKGluZGV4KS50eXBlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+Y3RybF9pbnB1dCA9IGluZGV4OworCisJc3dpdGNoIChBVVZJX0lOUFVUKGluZGV4KS50eXBlKSB7CisJY2FzZSBBVTA4MjhfVk1VWF9TVklERU86CisJCWRldi0+aW5wdXRfdHlwZSA9IEFVMDgyOF9WTVVYX1NWSURFTzsKKwkJYnJlYWs7CisJY2FzZSBBVTA4MjhfVk1VWF9DT01QT1NJVEU6CisJCWRldi0+aW5wdXRfdHlwZSA9IEFVMDgyOF9WTVVYX0NPTVBPU0lURTsKKwkJYnJlYWs7CisJY2FzZSBBVTA4MjhfVk1VWF9URUxFVklTSU9OOgorCQlkZXYtPmlucHV0X3R5cGUgPSBBVTA4MjhfVk1VWF9URUxFVklTSU9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCB1bmtub3duIGlucHV0IHR5cGUgc2V0IFslZF1cbiIsCisJCQlBVVZJX0lOUFVUKGluZGV4KS50eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcm91dGUuaW5wdXQgPSBBVVZJX0lOUFVUKGluZGV4KS52bXV4OworCXJvdXRlLm91dHB1dCA9IDA7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVUwODI4X01BWF9JTlBVVDsgaSsrKSB7CisJCWludCBlbmFibGUgPSAwOworCQlpZiAoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPT0gaW5kZXgpCisJCQllbmFibGUgPSAxOworCQllbHNlCisJCQllbmFibGUgPSAwOworCQlpZiAoZW5hYmxlKSB7CisJCQkoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkoZGV2LCBlbmFibGUpOworCQl9IGVsc2UgeworCQkJLyogTWFrZSBzdXJlIHdlIGxlYXZlIGl0IHR1cm5lZCBvbiBpZiBzb21lCisJCQkgICBvdGhlciBpbnB1dCBpcyByb3V0ZWQgdG8gdGhpcyBjYWxsYmFjayAqLworCQkJaWYgKChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKSAhPQorCQkJICAgICgoQVVWSV9JTlBVVChpbmRleCkuYXVkaW9fc2V0dXApKSkgeworCQkJCShBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKShkZXYsIGVuYWJsZSk7CisJCQl9CisJCX0KKwl9CisKKwlyb3V0ZS5pbnB1dCA9IEFVVklfSU5QVVQoaW5kZXgpLmFtdXg7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBhLT5pbmRleDsKKworCWlmIChhLT5pbmRleCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBkZXYtPmN0cmxfYWlucHV0OworCWlmIChpbmRleCA9PSAwKQorCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwllbHNlCisJCXN0cmNweShhLT5uYW1lLCAiTGluZSBpbiIpOworCisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlhLT5pbmRleCA9IGluZGV4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaWYgKGEtPmluZGV4ICE9IGRldi0+Y3RybF9haW5wdXQpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgY3RybCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweSh0LT5uYW1lLCAiQXV2aXRlayB0dW5lciIpOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgZ190dW5lciwgdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc190dW5lciwgdCk7CisJZHByaW50aygxLCAiVklESU9DX1NfVFVORVI6IHNpZ25hbCA9ICV4LCBhZmMgPSAleFxuIiwgdC0+c2lnbmFsLAorCQl0LT5hZmMpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZnJlcS0+ZnJlcXVlbmN5ID0gZGV2LT5jdHJsX2ZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5jdHJsX2ZyZXEgPSBmcmVxLT5mcmVxdWVuY3k7CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmcmVxKTsKKworCWF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0FVMDgyODsKKwkJcmV0dXJuIDA7CisJfQorCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CisJaWYgKGNoaXAtPmlkZW50ID09IFY0TDJfSURFTlRfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2MpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGNjLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYy0+Ym91bmRzLmxlZnQgPSAwOworCWNjLT5ib3VuZHMudG9wID0gMDsKKwljYy0+Ym91bmRzLndpZHRoID0gZGV2LT53aWR0aDsKKwljYy0+Ym91bmRzLmhlaWdodCA9IGRldi0+aGVpZ2h0OworCisJY2MtPmRlZnJlY3QgPSBjYy0+Ym91bmRzOworCisJY2MtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IDU0OworCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDU5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gcmVzX2dldChmaCk7CisKKwlpZiAobGlrZWx5KHJjID49IDApKQorCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBpOworCWludCByZXQ7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodHlwZSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJCXJldCA9IGF1MDgyOF9zdHJlYW1faW50ZXJydXB0KGRldik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFVMDgyOF9NQVhfSU5QVVQ7IGkrKykgeworCQlpZiAoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCShBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKShkZXYsIDApOworCX0KKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7CisJcmVzX2ZyZWUoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB2aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJc3dpdGNoIChyZWctPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSOgorCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKHJlZy0+bWF0Y2gudHlwZSkgeworCWNhc2UgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI6CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIGF1MDgyOCBoYXJkd2FyZSBkZXNpZ24gdGhhdCBzb21ldGltZXMKKwkgICByZXN1bHRzIGluIHRoZSBjb2xvcnNwYWNlIGJlaW5nIGludmVydGVkICovCisJaWYgKGRldi0+Z3JlZW5zY3JlZW5fZGV0ZWN0ZWQgPT0gMSkgeworCQlkcHJpbnRrKDEsICJEZXRlY3RlZCBncmVlbiBmcmFtZS4gIFJlc2V0dGluZyBzdHJlYW0uLi5cbiIpOworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChkZXYpOworCQlkZXYtPmdyZWVuc2NyZWVuX2RldGVjdGVkID0gMDsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGF1MDgyOF92NGxfZm9wcyA9IHsKKwkub3duZXIgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgID0gYXUwODI4X3Y0bDJfb3BlbiwKKwkucmVsZWFzZSAgICA9IGF1MDgyOF92NGwyX2Nsb3NlLAorCS5yZWFkICAgICAgID0gYXUwODI4X3Y0bDJfcmVhZCwKKwkucG9sbCAgICAgICA9IGF1MDgyOF92NGwyX3BvbGwsCisJLm1tYXAgICAgICAgPSBhdTA4MjhfdjRsMl9tbWFwLAorCS5pb2N0bCAgICAgID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmJpX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKKyNlbmRpZgorCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfY3JvcGNhcCAgICAgICAgICAgICA9IHZpZGlvY19jcm9wY2FwLAorI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCAgID0gdmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAorI2VuZGlmCisJLnZpZGlvY19yZXFidWZzICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgICAgICAgID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ICAgICAgICAgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICAgICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgICAgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19nX3R1bmVyICAgICAgICAgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICAgICAgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSAgICAgICAgID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgICAgICAgICA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyICAgICAgICAgID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyICAgICAgICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKKwkudmlkaW9jX2dfY2hpcF9pZGVudCAgICAgICAgPSB2aWRpb2NfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBhdTA4MjhfdmlkZW9fdGVtcGxhdGUgPSB7CisJLmZvcHMgICAgICAgICAgICAgICAgICAgICAgID0gJmF1MDgyOF92NGxfZm9wcywKKwkucmVsZWFzZSAgICAgICAgICAgICAgICAgICAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzIAkJICAgID0gJnZpZGVvX2lvY3RsX29wcywKKwkubWlub3IgICAgICAgICAgICAgICAgICAgICAgPSAtMSwKKwkudHZub3JtcyAgICAgICAgICAgICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCisJLmN1cnJlbnRfbm9ybSAgICAgICAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgYXUwODI4X2FuYWxvZ19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50IGk7CisKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyIGNhbGxlZCFcbiIpOworCisJLyogc2V0IGF1MDgyOCB1c2IgaW50ZXJmYWNlMCB0byBhczUgKi8KKwlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwKKwkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwgNSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkZhaWx1cmUgc2V0dGluZyB1c2IgaW50ZXJmYWNlMCB0byBhczVcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIEZpZ3VyZSBvdXQgd2hpY2ggZW5kcG9pbnQgaGFzIHRoZSBpc29jIGludGVyZmFjZSAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJICAgICA9PSBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCSAgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykpIHsKKworCQkJLyogd2UgZmluZCBvdXIgaXNvYyBpbiBlbmRwb2ludCAqLworCQkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQlkZXYtPm1heF9wa3Rfc2l6ZSA9ICh0bXAgJiAweDA3ZmYpICoKKwkJCQkoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOworCQkJZGV2LT5pc29jX2luX2VuZHBvaW50YWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQl9CisJfQorCWlmICghKGRldi0+aXNvY19pbl9lbmRwb2ludGFkZHIpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBsb2NhdGUgaXNvYyBlbmRwb2ludFxuIik7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+b3Blbik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5xdWV1ZWQpOworCisJZGV2LT53aWR0aCA9IE5UU0NfU1REX1c7CisJZGV2LT5oZWlnaHQgPSBOVFNDX1NURF9IOworCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodDsKKwlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPmZpZWxkX3NpemUgPDwgMTsKKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggPDwgMTsKKwlkZXYtPmN0cmxfYWlucHV0ID0gMDsKKworCS8qIGFsbG9jYXRlIGFuZCBmaWxsIHY0bDIgdmlkZW8gc3RydWN0ICovCisJZGV2LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gZGV2LT52ZGV2KSB7CisJCWRwcmludGsoMSwgIkNhbid0IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCWRldi0+dmJpX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChOVUxMID09IGRldi0+dmJpX2RldikgeworCQlkcHJpbnRrKDEsICJDYW4ndCBhbGxvY2F0ZSB2YmlfZGV2aWNlLlxuIik7CisJCWtmcmVlKGRldi0+dmRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKyNlbmRpZgorCisJLyogRmlsbCB0aGUgdmlkZW8gY2FwdHVyZSBkZXZpY2Ugc3RydWN0ICovCisJKmRldi0+dmRldiA9IGF1MDgyOF92aWRlb190ZW1wbGF0ZTsKKwlkZXYtPnZkZXYtPnBhcmVudCA9ICZkZXYtPnVzYmRldi0+ZGV2OworCXN0cmNweShkZXYtPnZkZXYtPm5hbWUsICJhdTA4MjhhIHZpZGVvIik7CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS8qIFNldHVwIHRoZSBWQkkgZGV2aWNlICovCisJKmRldi0+dmJpX2RldiA9IGF1MDgyOF92aWRlb190ZW1wbGF0ZTsKKwlkZXYtPnZiaV9kZXYtPnBhcmVudCA9ICZkZXYtPnVzYmRldi0+ZGV2OworCXN0cmNweShkZXYtPnZiaV9kZXYtPm5hbWUsICJhdTA4MjhhIHZiaSIpOworI2VuZGlmCisKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmF1MDgyOGxpc3QsICZhdTA4MjhfZGV2bGlzdCk7CisKKwkvKiBSZWdpc3RlciB0aGUgdjRsMiBkZXZpY2UgKi8KKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKGVycm9yID0gJWQpLlxuIiwKKwkJCXJldHZhbCk7CisJCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS8qIFJlZ2lzdGVyIHRoZSB2YmkgZGV2aWNlICovCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLCAtMSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2YmkgZGV2aWNlIChlcnJvciA9ICVkKS5cbiIsCisJCQlyZXR2YWwpOworCQlsaXN0X2RlbCgmZGV2LT5hdTA4MjhsaXN0KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52YmlfZGV2KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKKwlkcHJpbnRrKDEsICIlcyBjb21wbGV0ZWQhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAppbmRleCA5ZDZhMTE2Li42ZWQxYTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaApAQCAtMjQsNiArMjQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogCisvKiBBbmFsb2cgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKwogLyogRFZCICovCiAjaW5jbHVkZSAiZGVtdXguaCIKICNpbmNsdWRlICJkbXhkZXYuaCIKQEAgLTM5LDggKzQ0LDQ1IEBACiAjZGVmaW5lIFVSQl9DT1VOVCAgIDE2CiAjZGVmaW5lIFVSQl9CVUZTSVpFICgweGU1MjIpCiAKKy8qIEFuYWxvZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgTlRTQ19TVERfVyAgICAgIDcyMAorI2RlZmluZSBOVFNDX1NURF9IICAgICAgNDgwCisKKyNkZWZpbmUgQVUwODI4X0lOVEVSTEFDRURfREVGQVVMVCAgICAgICAxCisjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfU0hBUlBORVNTICAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKKworLyogRGVmaW5hdGlvbiBmb3IgQVUwODI4IFVTQiB0cmFuc2ZlciAqLworI2RlZmluZSBBVTA4MjhfTUFYX0lTT19CVUZTICAgIDEyICAvKiBtYXliZSByZXNpemUgdGhpcyB2YWx1ZSBpbiB0aGUgZnV0dXJlICovCisjZGVmaW5lIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCICAgICAgMTAKKworI2RlZmluZSBBVTA4MjhfTUlOX0JVRiA0CisjZGVmaW5lIEFVMDgyOF9ERUZfQlVGIDgKKworI2RlZmluZSBBVTA4MjhfTUFYX0lOUFVUICAgICAgICA0CisKK2VudW0gYXUwODI4X2l0eXBlIHsKKwlBVTA4MjhfVk1VWF9VTkRFRklORUQgPSAwLAorCUFVMDgyOF9WTVVYX0NPTVBPU0lURSwKKwlBVTA4MjhfVk1VWF9TVklERU8sCisJQVUwODI4X1ZNVVhfQ0FCTEUsCisJQVUwODI4X1ZNVVhfVEVMRVZJU0lPTiwKKwlBVTA4MjhfVk1VWF9EVkIsCisJQVUwODI4X1ZNVVhfREVCVUcKK307CisKK3N0cnVjdCBhdTA4MjhfaW5wdXQgeworCWVudW0gYXUwODI4X2l0eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHZtdXg7CisJdW5zaWduZWQgaW50IGFtdXg7CisJdm9pZCAoKmF1ZGlvX3NldHVwKSAodm9pZCAqcHJpdiwgaW50IGVuYWJsZSk7Cit9OworCiBzdHJ1Y3QgYXUwODI4X2JvYXJkIHsKIAljaGFyICpuYW1lOworCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOworCXVuc2lnbmVkIGNoYXIgdHVuZXJfYWRkcjsKKwlzdHJ1Y3QgYXUwODI4X2lucHV0IGlucHV0W0FVMDgyOF9NQVhfSU5QVVRdOworCiB9OwogCiBzdHJ1Y3QgYXUwODI4X2R2YiB7CkBAIC01NSwzMSArOTcsMTQzIEBACiAJaW50IGZlZWRpbmc7CiB9OwogCitlbnVtIGF1MDgyOF9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX0lOVEVSUlVQVCwKKwlTVFJFQU1fT04KK307CisKKyNkZWZpbmUgQVVWSV9JTlBVVChucikgKGRldi0+Ym9hcmQuaW5wdXRbbnJdKQorCisvKiBkZXZpY2Ugc3RhdGUgKi8KK2VudW0gYXUwODI4X2Rldl9zdGF0ZSB7CisJREVWX0lOSVRJQUxJWkVEID0gMHgwMSwKKwlERVZfRElTQ09OTkVDVEVEID0gMHgwMiwKKwlERVZfTUlTQ09ORklHVVJFRCA9IDB4MDQKK307CisKK3N0cnVjdCBhdTA4MjhfZmggeworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXY7CisJdW5zaWduZWQgaW50ICBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgICAgdmJfdmlkcTsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICAgIHR5cGU7Cit9OworCitzdHJ1Y3QgYXUwODI4X3VzYl9pc29jX2N0bCB7CisJCS8qIG1heCBwYWNrZXQgc2l6ZSBvZiBpc29jIHRyYW5zYWN0aW9uICovCisJaW50CQkJCW1heF9wa3Rfc2l6ZTsKKworCQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIHVyYnMgKi8KKwlpbnQJCQkJbnVtX2J1ZnM7CisKKwkJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCXN0cnVjdCB1cmIJCQkqKnVyYjsKKworCQkvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jIHRyYW5zZmVyICovCisJY2hhcgkJCQkqKnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKiBMYXN0IGJ1ZmZlciBjb21tYW5kIGFuZCByZWdpb24gKi8KKwl1OAkJCQljbWQ7CisJaW50CQkJCXBvcywgc2l6ZSwgcGt0c2l6ZTsKKworCQkvKiBMYXN0IGZpZWxkOiBPREQgb3IgRVZFTj8gKi8KKwlpbnQJCQkJZmllbGQ7CisKKwkJLyogU3RvcmVzIGluY29tcGxldGUgY29tbWFuZHMgKi8KKwl1MzIJCQkJdG1wX2J1ZjsKKwlpbnQJCQkJdG1wX2J1Zl9sZW47CisKKwkJLyogU3RvcmVzIGFscmVhZHkgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAJKmJ1ZjsKKworCQkvKiBTdG9yZXMgdGhlIG51bWJlciBvZiByZWNlaXZlZCBmaWVsZHMgKi8KKwlpbnQJCQkJbmZpZWxkczsKKworCQkvKiBpc29jIHVyYiBjYWxsYmFjayAqLworCWludCAoKmlzb2NfY29weSkgKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHN0cnVjdCB1cmIgKnVyYik7CisKK307CisKKy8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCitzdHJ1Y3QgYXUwODI4X2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyYW1lOworCWludCB0b3BfZmllbGQ7CisJaW50IHJlY2VpdmluZzsKK307CisKK3N0cnVjdCBhdTA4MjhfZG1hcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcXVldWVkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgd3E7CisKKwkvKiBDb3VudGVycyB0byBjb250cm9sIGJ1ZmZlciBmaWxsICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcG9zOworfTsKKwogc3RydWN0IGF1MDgyOF9kZXYgewogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiZGV2OwotCWludAkJCWJvYXJkOworCWludAkJCWJvYXJkbnI7CisJc3RydWN0IGF1MDgyOF9ib2FyZAlib2FyZDsKIAl1OAkJCWN0cmxtc2dbNjRdOwogCiAJLyogSTJDICovCiAJc3RydWN0IGkyY19hZGFwdGVyCQlpMmNfYWRhcDsKLQlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEJaTJjX2FsZ287CisJc3RydWN0IGkyY19hbGdvcml0aG0JCWkyY19hbGdvOwogCXN0cnVjdCBpMmNfY2xpZW50CQlpMmNfY2xpZW50OwogCXUzMiAJCQkJaTJjX3JjOwogCiAJLyogRGlnaXRhbCAqLwogCXN0cnVjdCBhdTA4MjhfZHZiCQlkdmI7CiAKKwkvKiBBbmFsb2cgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1MDgyOGxpc3Q7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCWludCB1c2VyczsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaV9kZXY7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisJdTMyIGZpZWxkX3NpemU7CisJdTMyIGZyYW1lX3NpemU7CisJdTMyIGJ5dGVzcGVybGluZTsKKwlpbnQgdHlwZTsKKwl1OCBjdHJsX2FpbnB1dDsKKwlfX3U4IGlzb2NfaW5fZW5kcG9pbnRhZGRyOworCXU4IGlzb2NfaW5pdF9vazsKKwlpbnQgZ3JlZW5zY3JlZW5fZGV0ZWN0ZWQ7CisJdW5zaWduZWQgaW50IGZyYW1lX2NvdW50OworCWludCBjdHJsX2ZyZXE7CisJaW50IGlucHV0X3R5cGU7CisJdW5zaWduZWQgaW50IGN0cmxfaW5wdXQ7CisJZW51bSBhdTA4MjhfZGV2X3N0YXRlIGRldl9zdGF0ZTsKKwllbnVtIGF1MDgyOF9zdHJlYW1fc3RhdGUgc3RyZWFtX3N0YXRlOworCXdhaXRfcXVldWVfaGVhZF90IG9wZW47CisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKworCS8qIElzb2MgY29udHJvbCBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlIHZpZHE7CisJc3RydWN0IGF1MDgyOF91c2JfaXNvY19jdGwgaXNvY19jdGw7CisJc3BpbmxvY2tfdCBzbG9jazsKKworCS8qIHVzYiB0cmFuc2ZlciAqLworCWludCBhbHQ7CQkvKiBhbHRlcm5hdGUgKi8KKwlpbnQgbWF4X3BrdF9zaXplOwkvKiBtYXggcGFja2V0IHNpemUgb2YgaXNvYyB0cmFuc2FjdGlvbiAqLworCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCisJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLworCXN0cnVjdCB1cmIgKnVyYltBVTA4MjhfTUFYX0lTT19CVUZTXTsJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCWNoYXIgKnRyYW5zZmVyX2J1ZmZlcltBVTA4MjhfTUFYX0lTT19CVUZTXTsvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jCisJCQkJCQkgICB0cmFuc2ZlciAqLworCiAJLyogVVNCIC8gVVJCIFJlbGF0ZWQgKi8KIAlpbnQJCXVyYl9zdHJlYW1pbmc7CiAJc3RydWN0IHVyYgkqdXJic1tVUkJfQ09VTlRdOwotCi19OwotCi1zdHJ1Y3QgYXUwODI4X2J1ZmYgewotCXN0cnVjdCBhdTA4MjhfZGV2CSpkZXY7Ci0Jc3RydWN0IHVyYgkJKnB1cmI7Ci0Jc3RydWN0IGxpc3RfaGVhZAlidWZmX2xpc3Q7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTExLDggKzI2NSwxMyBAQAogLyogYXUwODI4LWkyYy5jICovCiBleHRlcm4gaW50IGF1MDgyOF9pMmNfcmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldik7CiBleHRlcm4gaW50IGF1MDgyOF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKLWV4dGVybiB2b2lkIGF1MDgyOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCi0JdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGF1MDgyOC12aWRlby5jICovCitpbnQgYXUwODI4X2FuYWxvZ19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitpbnQgYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShzdHJ1Y3QgYXUwODI4X2RldiAqZCk7Cit2b2lkIGF1MDgyOF9hbmFsb2dfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGF1MDgyOC1kdmIuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCmluZGV4IGEwN2I3YjguLmRmNDUxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKQEAgLTI5LDE2ICsyOSwxNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KKyNpbmNsdWRlIDxtZWRpYS9idDgxOS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04MTkgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ4LDEzICs0OCwxNSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGJ0ODE5IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMzJdOwogCi0JaW50IGluaXRpYWxpemVkOwotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CisJaW50IGlkZW50OwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC02Myw2ICs2NSwxMSBAQAogCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidDgxOSAqdG9fYnQ4MTkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYnQ4MTksIHNkKTsKK30KKwogc3RydWN0IHRpbWluZyB7CiAJaW50IGhhY3RpdmU7CiAJaW50IGhkZWxheTsKQEAgLTgwLDI0ICs4NywyMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBidDgxOV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfd3JpdGUoc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkZWNvZGVyLT5zZCk7CiAKIAlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV9zZXRiaXQoc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlyZXR1cm4gYnQ4MTlfd3JpdGUoY2xpZW50LCByZWcsCisJcmV0dXJuIGJ0ODE5X3dyaXRlKGRlY29kZXIsIHJlZywKIAkJKGRlY29kZXItPnJlZ1tyZWddICYgfigxIDw8IGJpdCkpIHwgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIGludCBidDgxOV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgYnQ4MTlfd3JpdGVfYmxvY2soc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZGVjb2Rlci0+c2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTEwNSw3ICsxMTEsNiBAQAogCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCQl1OCBibG9ja19kYXRhWzMyXTsKIAkJaW50IGJsb2NrX2xlbjsKIApAQCAtMTI2LDcgKzEzMSw4IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBidDgxOV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IGJ0ODE5X3dyaXRlKGRlY29kZXIsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xMzUsMTUgKzE0MSwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfcmVhZChzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZGVjb2Rlci0+c2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4MTlfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBidDgxOV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0W10gPSB7CiAJCS8qMHgxZiwgMHgwMCwqLyAgICAgLyogUmVzZXQgKi8KIAkJMHgwMSwgMHg1OSwJLyogMHgwMSBpbnB1dCBmb3JtYXQgKi8KQEAgLTE3OCw3ICsxODQsOCBAQAogCQkweDFhLCAweDgwLAkvKiAweDFhIEFEQyBJbnRlcmZhY2UgKi8KIAl9OwogCi0Jc3RydWN0IHRpbWluZyAqdGltaW5nID0gJnRpbWluZ19kYXRhW2RlY29kZXItPm5vcm1dOworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlzdHJ1Y3QgdGltaW5nICp0aW1pbmcgPSAmdGltaW5nX2RhdGFbKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDBdOwogCiAJaW5pdFsweDAzICogMiAtIDFdID0KIAkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8CkBAIC0xOTIsMjY2ICsxOTksMzA2IEBACiAJaW5pdFsweDA4ICogMiAtIDFdID0gdGltaW5nLT5oc2NhbGUgPj4gODsKIAlpbml0WzB4MDkgKiAyIC0gMV0gPSB0aW1pbmctPmhzY2FsZSAmIDB4ZmY7CiAJLyogMHgxNSBpbiBhcnJheSBpcyBhZGRyZXNzIDB4MTkgKi8KLQlpbml0WzB4MTUgKiAyIC0gMV0gPSAoZGVjb2Rlci0+bm9ybSA9PSAwKSA/IDExNSA6IDkzOwkvKiBDaHJvbWEgYnVyc3QgZGVsYXkgKi8KKwlpbml0WzB4MTUgKiAyIC0gMV0gPSAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyAxMTUgOiA5MzsJLyogQ2hyb21hIGJ1cnN0IGRlbGF5ICovCiAJLyogcmVzZXQgKi8KLQlidDgxOV93cml0ZShjbGllbnQsIDB4MWYsIDB4MDApOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MWYsIDB4MDApOwogCW1kZWxheSgxKTsKIAogCS8qIGluaXQgKi8KLQlyZXR1cm4gYnQ4MTlfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOworCXJldHVybiBidDgxOV93cml0ZV9ibG9jayhkZWNvZGVyLCBpbml0LCBzaXplb2YoaW5pdCkpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGJ0ODE5X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODE5X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQogewotCWludCB0ZW1wOworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlpbnQgc3RhdHVzID0gYnQ4MTlfcmVhZChkZWNvZGVyLCAweDAwKTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJdjRsMl9zdGRfaWQgc3RkOwogCi0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpZiAoIWRlY29kZXItPmluaXRpYWxpemVkKSB7CS8qIEZpcnN0IGNhbGwgdG8gYnQ4MTlfaW5pdCBjb3VsZCBiZSAqLwotCQlidDgxOV9pbml0KGNsaWVudCk7CS8qIHdpdGhvdXQgI0ZSU1QgPSAwICovCi0JCWRlY29kZXItPmluaXRpYWxpemVkID0gMTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWJ0ODE5X2luaXQoY2xpZW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gODsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXM7Ci0KLQkJc3RhdHVzID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MDApOworCWlmICgoc3RhdHVzICYgMHg4MCkpCiAJCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgMHg4MCkpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKIAotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgMHgxMCkpCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWVsc2UKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJKmlhcmcgPSByZXM7CisJaWYgKChzdGF0dXMgJiAweDEwKSkKKwkJc3RkID0gVjRMMl9TVERfUEFMOworCWVsc2UKKwkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwlpZiAocHN0ZCkKKwkJKnBzdGQgPSBzdGQ7CisJaWYgKHBzdGF0dXMpCisJCSpwc3RhdHVzID0gc3RhdHVzOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBzdGF0dXMgJXhcbiIsICppYXJnKTsKLQkJYnJlYWs7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZ2V0IHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDgxOV9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXJldHVybiBidDgxOV9zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpCit7CisJcmV0dXJuIGJ0ODE5X3N0YXR1cyhzZCwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIGludCBidDgxOV9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9IE5VTEw7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisKKwlpZiAoc2QtPnY0bDJfZGV2ID09IE5VTEwgfHwgc2QtPnY0bDJfZGV2LT5ub3RpZnkgPT0gTlVMTCkKKwkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAwKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDApOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDE4LCAweDY4KTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOSwgMHg1ZCk7CisJCS8qIGJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAgNSwgMSk7ICovCisJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVsxXTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMSk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAxKTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOCwgMHg3Zik7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MTksIDB4NzIpOworCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDApOyAqLworCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMF07CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidW5zdXBwb3J0ZWQgbm9ybSAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDMsCisJCQkoKCh0aW1pbmctPnZkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDYpIHwKKwkJCSgoKHRpbWluZy0+dmFjdGl2ZSA+PiA4KSAmIDB4MDMpIDw8IDQpIHwKKwkJCSgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfAorCQkJKCh0aW1pbmctPmhhY3RpdmUgPj4gOCkgJiAweDAzKSk7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwNCwgdGltaW5nLT52ZGVsYXkgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA1LCB0aW1pbmctPnZhY3RpdmUgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA2LCB0aW1pbmctPmhkZWxheSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDcsIHRpbWluZy0+aGFjdGl2ZSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDgsICh0aW1pbmctPmhzY2FsZSA+PiA4KSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDksIHRpbWluZy0+aHNjYWxlICYgMHhmZik7CisJZGVjb2Rlci0+bm9ybSA9IHN0ZDsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9IE5VTEw7CitzdGF0aWMgaW50IGJ0ODE5X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJXhcbiIsICppYXJnKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgaW5wdXQgJXhcbiIsIHJvdXRlLT5pbnB1dCk7CiAKLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDEpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMCk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAwKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg2OCk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NWQpOwotCQkJLyogYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgIDUsIDEpOyAqLwotCQkJdGltaW5nID0gJnRpbWluZ19kYXRhW1ZJREVPX01PREVfTlRTQ107Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDEpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMSk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAxKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg3Zik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NzIpOwotCQkJLyogYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgIDUsIDApOyAqLwotCQkJdGltaW5nID0gJnRpbWluZ19kYXRhW1ZJREVPX01PREVfUEFMXTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDApOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVuc3VwcG9ydGVkIG5vcm0gJXhcbiIsICppYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNkLT52NGwyX2RldiA9PSBOVUxMIHx8IHNkLT52NGwyX2Rldi0+bm90aWZ5ID09IE5VTEwpCisJCXY0bDJfZXJyKHNkLCAibm8gbm90aWZ5IGZvdW5kIVxuIik7CisKKwlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gcm91dGUtPmlucHV0KSB7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQlkZWNvZGVyLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwkJLyogc2VsZWN0IG1vZGUgKi8KKwkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCA2LCAwKTsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAxLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCA2LCAxKTsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAxLCAwKTsKIAkJfQotCi0JCWlmICh0aW1pbmcpIHsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwMywKLQkJCQkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8Ci0JCQkJICAgICgoKHRpbWluZy0+dmFjdGl2ZSA+PiA4KSAmIDB4MDMpIDw8IDQpIHwKLQkJCQkgICAgKCgodGltaW5nLT5oZGVsYXkgPj4gOCkgJiAweDAzKSA8PCAyKSB8Ci0JCQkJICAgICAoKHRpbWluZy0+aGFjdGl2ZSA+PiA4KSAmIDB4MDMpICk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDQsIHRpbWluZy0+dmRlbGF5ICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDUsIHRpbWluZy0+dmFjdGl2ZSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA2LCB0aW1pbmctPmhkZWxheSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA3LCB0aW1pbmctPmhhY3RpdmUgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDksIHRpbWluZy0+aHNjYWxlICYgMHhmZik7Ci0JCX0KLQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWJyZWFrOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKK3N0YXRpYyBpbnQgYnQ4MTlfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICV4XG4iLCAqaWFyZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZW5hYmxlIG91dHB1dCAleFxuIiwgZW5hYmxlKTsKIAotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlpZiAoZGVjb2Rlci0+aW5wdXQgPT0gMCkgewotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDYsIDApOwotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsIDEsIDEpOwotCQkJfSBlbHNlIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCA2LCAxKTsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAxLCAwKTsKLQkJCX0KLQkJfQotCQlicmVhazsKKwlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgeworCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDE2LCA3LCAhZW5hYmxlKTsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICV4XG4iLCAqaWFyZyk7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgYnQ4MTlfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICV4XG4iLCAqaWFyZyk7Ci0KLQkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsICFlbmFibGUpOwotCQl9CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDUxMSwgMSwgMjU2KTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkic2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAlZCBjb250cmFzdCAlZCBjb2xvdXIgJWRcbiIsCi0JCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyKTsKLQotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGEsCi0JCQkJICAgIChkZWNvZGVyLT5icmlnaHQgPj4gOCkgLSAxMjgpOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA1MTEgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwYywKLQkJCQkgICAgKGRlY29kZXItPmNvbnRyYXN0ID4+IDcpICYgMHhmZik7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCAyLAotCQkJCSAgICAgKChkZWNvZGVyLT5jb250cmFzdCA+PiAxNSkgJiAweDAxKSk7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNTExIHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwZCwKLQkJCQkgICAgKGRlY29kZXItPnNhdCA+PiA3KSAmIDB4ZmYpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgMSwKLQkJCQkgICAgICgoZGVjb2Rlci0+c2F0ID4+IDE1KSAmIDB4MDEpKTsKLQotCQkJdGVtcCA9IChkZWNvZGVyLT5zYXQgKiAyMDEpIC8gMjM3OwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBlLCAodGVtcCA+PiA3KSAmIDB4ZmYpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgMCwgKHRlbXAgPj4gMTUpICYgMHgwMSk7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwZiwKLQkJCQkgICAgMTI4IC0gKGRlY29kZXItPmh1ZSA+PiA4KSk7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA1MTEsIDEsIDI1Nik7CiAJCWJyZWFrOwotCX0KKworCWNhc2UgVjRMMl9DSURfSFVFOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidDgxOV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJaW50IHRlbXA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ID09IGN0cmwtPnZhbHVlKQorCQkJYnJlYWs7CisJCWRlY29kZXItPmJyaWdodCA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBhLCBkZWNvZGVyLT5icmlnaHQpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmIChkZWNvZGVyLT5jb250cmFzdCA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBjLCBkZWNvZGVyLT5jb250cmFzdCAmIDB4ZmYpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgMiwgKChkZWNvZGVyLT5jb250cmFzdCA+PiA4KSAmIDB4MDEpKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgPT0gY3RybC0+dmFsdWUpCisJCQlicmVhazsKKwkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGQsIChkZWNvZGVyLT5zYXQgPj4gNykgJiAweGZmKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDEsICgoZGVjb2Rlci0+c2F0ID4+IDE1KSAmIDB4MDEpKTsKKworCQkvKiBSYXRpbyBiZXR3ZWVuIFUgZ2FpbiBhbmQgViBnYWluIG11c3Qgc3RheSB0aGUgc2FtZSBhcworCQkgICB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGVmYXVsdCBVIGFuZCBWIGdhaW4gdmFsdWVzLiAqLworCQl0ZW1wID0gKGRlY29kZXItPnNhdCAqIDE4MCkgLyAyNTQ7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGUsICh0ZW1wID4+IDcpICYgMHhmZik7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCAwLCAodGVtcCA+PiAxNSkgJiAweDAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwZiwgZGVjb2Rlci0+aHVlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5icmlnaHQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+Y29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5zYXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmh1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODE5X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgZGVjb2Rlci0+aWRlbnQsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDhhID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGJ0ODE5X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBidDgxOV9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGJ0ODE5X2dfY3RybCwKKwkuc19jdHJsID0gYnQ4MTlfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBidDgxOV9xdWVyeWN0cmwsCit9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGJ0ODE5X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBidDgxOV9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGJ0ODE5X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gYnQ4MTlfc19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IGJ0ODE5X3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IGJ0ODE5X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IGJ0ODE5X2dfaW5wdXRfc3RhdHVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYnQ4MTlfb3BzID0geworCS5jb3JlID0gJmJ0ODE5X2NvcmVfb3BzLAorCS50dW5lciA9ICZidDgxOV90dW5lcl9vcHMsCisJLnZpZGVvID0gJmJ0ODE5X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYnQ4MTlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaSwgdmVyOwogCXN0cnVjdCBidDgxOSAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdmVyID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MTcpOworCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4MTkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjb2RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYnQ4MTlfb3BzKTsKKworCXZlciA9IGJ0ODE5X3JlYWQoZGVjb2RlciwgMHgxNyk7CiAJc3dpdGNoICh2ZXIgJiAweGYwKSB7CiAJY2FzZSAweDcwOgogCQluYW1lID0gImJ0ODE5YSI7CisJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9CVDgxOUE7CiAJCWJyZWFrOwogCWNhc2UgMHg2MDoKIAkJbmFtZSA9ICJidDgxN2EiOworCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfQlQ4MTdBOwogCQlicmVhazsKIAljYXNlIDB4MjA6CiAJCW5hbWUgPSAiYnQ4MTVhIjsKKwkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX0JUODE1QTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCQkidW5rbm93biBjaGlwIHZlcnNpb24gMHglMDJ4XG4iLCB2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00NTksMjggKzUwNiwyNiBAQAogCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODE5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwlkZWNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKLQlkZWNvZGVyLT5icmlnaHQgPSAzMjc2ODsKLQlkZWNvZGVyLT5jb250cmFzdCA9IDMyNzY4OwotCWRlY29kZXItPmh1ZSA9IDMyNzY4OwotCWRlY29kZXItPnNhdCA9IDMyNzY4OwotCWRlY29kZXItPmluaXRpYWxpemVkID0gMDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKKwlkZWNvZGVyLT5icmlnaHQgPSAwOworCWRlY29kZXItPmNvbnRyYXN0ID0gMHhkODsJLyogMTAwJSBvZiBvcmlnaW5hbCBzaWduYWwgKi8KKwlkZWNvZGVyLT5odWUgPSAwOworCWRlY29kZXItPnNhdCA9IDB4ZmU7CQkvKiAxMDAlIG9mIG9yaWdpbmFsIHNpZ25hbCAqLwogCi0JaSA9IGJ0ODE5X2luaXQoY2xpZW50KTsKKwlpID0gYnQ4MTlfaW5pdChzZCk7CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBidDgxOV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2J0ODE5KHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Niw4ICs1NDEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYnQ4MTkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCiAJLnByb2JlID0gYnQ4MTlfcHJvYmUsCiAJLnJlbW92ZSA9IGJ0ODE5X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBidDgxOV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwppbmRleCA0MjEzODY3Li43OGRiMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCkBAIC0zNCwxMCArMzQsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTg1NkEgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ3LDQzICs0Nyw0NiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBCVDg1Nl9SRUdfT0ZGU0VUCTB4REEKICNkZWZpbmUgQlQ4NTZfTlJfUkVHCQk2CiAKIHN0cnVjdCBidDg1NiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXVuc2lnbmVkIGNoYXIgcmVnW0JUODU2X05SX1JFR107CiAKLQlpbnQgbm9ybTsKLQlpbnQgZW5hYmxlOworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidDg1NiAqdG9fYnQ4NTYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYnQ4NTYsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBidDg1NiAqZW5jb2RlciwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZW5jb2Rlci0+c2QpOwogCiAJZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfc2V0Yml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXJldHVybiBidDg1Nl93cml0ZShjbGllbnQsIHJlZywKKwlyZXR1cm4gYnQ4NTZfd3JpdGUoZW5jb2RlciwgcmVnLAogCQkoZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKIAkJCQkodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBidDg1NiAqZW5jb2RlcikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXY0bF9pbmZvKGNsaWVudCwgInJlZ2lzdGVyIGR1bXA6XG4iKTsKKwl2NGwyX2luZm8oJmVuY29kZXItPnNkLCAicmVnaXN0ZXIgZHVtcDpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBCVDg1Nl9OUl9SRUc7IGkgKz0gMikKIAkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CkBAIC05MSwxNTMgKzk0LDEyMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGJ0ODU2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODU2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGFyZykKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSB0b19idDg1NihzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgeworCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXRcbiIpOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIDB4MTgpOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGEsIDApOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGUsIDApOworCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDEpOworCS8qYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDApOyovCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDQsIDEpOworCisJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMCk7CisJZWxzZQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMSk7CisKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMSwgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKKwlpZiAoZGVidWcgIT0gMCkKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDg1Nl9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IHRvX2J0ODU2KHNkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBub3JtICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRhLCAwLCAwKTsKKwkJLypidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYSwgMCwgMSk7Ki8KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKKwlpZiAoZGVidWcgIT0gMCkKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDg1Nl9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gdG9fYnQ4NTYoc2QpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCisJLyogV2Ugb25seSBoYXZlIHZpZGVvIGJ1cy4KKwkgKiByb3V0ZS0+aW5wdXQ9IDA6IGlucHV0IGlzIGZyb20gYnQ4MTkKKwkgKiByb3V0ZS0+aW5wdXQ9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSAwOgotCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdFxuIik7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYSwgMCk7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7Ci0KLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMSk7Ci0JCS8vYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMCk7Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDQsIDEpOwotCi0JCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAxLCAxKTsKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwotCQlpZiAoZGVidWcgIT0gMCkKLQkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDApOwogCQlicmVhazsKLQotCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19FTkNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSAyOwotCQljYXAtPm91dHB1dHMgPSAxOworCWNhc2UgMToKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDEpOwogCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRhLCAwLCAwKTsKLQkJCS8vYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYSwgMCwgMSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOwotCQlpZiAoZGVidWcgIT0gMCkKLQkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKKwljYXNlIDI6CS8qIENvbG9yIGJhciAqLworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMCk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAxKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBXZSBvbmx5IGhhdmUgdmlkZW8gYnVzLgotCQkgKiBpYXJnID0gMDogaW5wdXQgaXMgZnJvbSBidDgxOQotCQkgKiBpYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwICovCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgkvLyBDb2xvciBiYXIKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDApOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGRlYnVnICE9IDApCi0JCQlidDg1Nl9kdW1wKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7Ci0JCWJyZWFrOwotCX0KLQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChkZWJ1ZyAhPSAwKQorCQlidDg1Nl9kdW1wKGVuY29kZXIpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ0ODU2X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0JUODU2LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBidDg1Nl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYnQ4NTZfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gYnQ4NTZfaW5pdCwKK307CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYnQ4NTZfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBidDg1Nl9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGJ0ODU2X3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGJ0ODU2X29wcyA9IHsKKwkuY29yZSA9ICZidDg1Nl9jb3JlX29wcywKKwkudmlkZW8gPSAmYnQ4NTZfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBidDg1Nl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMjQ5LDQxICsyMTksMzggQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODU2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZidDg1Nl9vcHMpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOwogCi0JYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRjLCAweDE4KTsKLQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwotCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYywgMHgxOCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYSwgMCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkZSwgMCk7CiAKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAxKTsKLQkvL2J0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDYsIDApOwotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDQsIDEpOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkvKmJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA2LCAwKTsqLworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA0LCAxKTsKIAotCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgeworCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDApOworCWVsc2UKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDEpOwogCi0JY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDApOwotCQlicmVhazsKLQotCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDEpOwotCQlicmVhazsKLQl9Ci0KLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAxLCAxKTsKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMSwgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKIAogCWlmIChkZWJ1ZyAhPSAwKQotCQlidDg1Nl9kdW1wKGNsaWVudCk7CisJCWJ0ODU2X2R1bXAoZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnQ4NTZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19idDg1NihzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTUsOCArMjYyLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImJ0ODU2IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCi0JLmNvbW1hbmQgPSBidDg1Nl9jb21tYW5kLAogCS5wcm9iZSA9IGJ0ODU2X3Byb2JlLAogCS5yZW1vdmUgPSBidDg1Nl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYnQ4NTZfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKaW5kZXggNTk2ZjllMi4uMzUwY2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NjYgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ3LDIyICs0NywyMiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGJ0ODY2IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdTggcmVnWzI1Nl07Ci0KLQlpbnQgbm9ybTsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKIH07CiAKLXN0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggc3ViYWRkciwgdTggZGF0YSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0ODY2ICp0b19idDg2NihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBidDg2Niwgc2QpOworfQorCitzdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBidDg2NiAqZW5jb2RlciwgdTggc3ViYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZW5jb2Rlci0+c2QpOwogCXU4IGJ1ZmZlclsyXTsKIAlpbnQgZXJyOwogCkBAIC04OSwxNjMgKzg5LDEyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0ODY2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODY2X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCiB7Ci0Jc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IG5vcm0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKLQotCQljYXAtPmZsYWdzCi0JCQk9IFZJREVPX0VOQ09ERVJfUEFMCi0JCQl8IFZJREVPX0VOQ09ERVJfTlRTQwotCQkJfCBWSURFT19FTkNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCAqaWFyZyk7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlzdGF0aWMgY29uc3QgX191OCBpbml0W10gPSB7Ci0JCQkweGM4LCAweGNjLCAvKiBDUlNDQUxFICovCi0JCQkweGNhLCAweDkxLCAvKiBDQlNDQUxFICovCi0JCQkweGNjLCAweDI0LCAvKiBZQzE2IHwgT1NETlVNICovCi0JCQkweGRhLCAweDAwLCAvKiAgKi8KLQkJCTB4ZGMsIDB4MjQsIC8qIFNFVE1PREUgfCBQQUwgKi8KLQkJCTB4ZGUsIDB4MDIsIC8qIEVBQ1RJVkUgKi8KLQotCQkJLyogb3ZlcmxheSBjb2xvcnMgKi8KLQkJCTB4NzAsIDB4RUIsIDB4OTAsIDB4ODAsIDB4QjAsIDB4ODAsIC8qIHdoaXRlICovCi0JCQkweDcyLCAweEEyLCAweDkyLCAweDhFLCAweEIyLCAweDJDLCAvKiB5ZWxsb3cgKi8KLQkJCTB4NzQsIDB4ODMsIDB4OTQsIDB4MkMsIDB4QjQsIDB4OUMsIC8qIGN5YW4gKi8KLQkJCTB4NzYsIDB4NzAsIDB4OTYsIDB4M0EsIDB4QjYsIDB4NDgsIC8qIGdyZWVuICovCi0JCQkweDc4LCAweDU0LCAweDk4LCAweEM2LCAweEI4LCAweEI4LCAvKiBtYWdlbnRhICovCi0JCQkweDdBLCAweDQxLCAweDlBLCAweEQ0LCAweEJBLCAweDY0LCAvKiByZWQgKi8KLQkJCTB4N0MsIDB4MjMsIDB4OUMsIDB4NzIsIDB4QkMsIDB4RDQsIC8qIGJsdWUgKi8KLQkJCTB4N0UsIDB4MTAsIDB4OUUsIDB4ODAsIDB4QkUsIDB4ODAsIC8qIGJsYWNrICovCi0KLQkJCTB4NjAsIDB4RUIsIDB4ODAsIDB4ODAsIDB4YzAsIDB4ODAsIC8qIHdoaXRlICovCi0JCQkweDYyLCAweEEyLCAweDgyLCAweDhFLCAweGMyLCAweDJDLCAvKiB5ZWxsb3cgKi8KLQkJCTB4NjQsIDB4ODMsIDB4ODQsIDB4MkMsIDB4YzQsIDB4OUMsIC8qIGN5YW4gKi8KLQkJCTB4NjYsIDB4NzAsIDB4ODYsIDB4M0EsIDB4YzYsIDB4NDgsIC8qIGdyZWVuICovCi0JCQkweDY4LCAweDU0LCAweDg4LCAweEM2LCAweGM4LCAweEI4LCAvKiBtYWdlbnRhICovCi0JCQkweDZBLCAweDQxLCAweDhBLCAweEQ0LCAweGNBLCAweDY0LCAvKiByZWQgKi8KLQkJCTB4NkMsIDB4MjMsIDB4OEMsIDB4NzIsIDB4Y0MsIDB4RDQsIC8qIGJsdWUgKi8KLQkJCTB4NkUsIDB4MTAsIDB4OEUsIDB4ODAsIDB4Y0UsIDB4ODAsIC8qIGJsYWNrICovCi0JCX07Ci0JCWludCBpOwotCQl1OCB2YWw7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdCkgLyAyOyBpICs9IDIpCi0JCQlidDg2Nl93cml0ZShjbGllbnQsIGluaXRbaV0sIGluaXRbaSsxXSk7Ci0KLQkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwotCi0JCWlmICgqaWFyZyA9PSAwKQotCQkJdmFsIHw9IDB4NDA7IC8qIENCU1dBUCAqLwotCQllbHNlCi0JCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KLQotCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7Ci0KLQkJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOwotCQlpZiAoKmlhcmcgPT0gMikKLQkJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KLQkJZWxzZQotCQkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCi0JCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhjYywgdmFsKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICVkXG4iLCBlbmNvZGVyLT5lbmFibGUpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIDQ3MTE6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCV9fdTggdmFsOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNxdWFyZSAlZFxuIiwgKmlhcmcpOwotCi0JCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKLQkJaWYgKCppYXJnKQotCQkJdmFsIHw9IDE7IC8qIFNRVUFSRSAqLwotCQllbHNlCi0JCQl2YWwgJj0gfjE7IC8qICFTUVVBUkUgKi8KLQkJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgorCS8qIE9ubHkgUEFMIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciBhdCB0aGUgbW9tZW50ISAqLworCWlmICghKHN0ZCAmIFY0TDJfU1REX05UU0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGludCBidDg2Nl9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RhdGljIGNvbnN0IF9fdTggaW5pdFtdID0geworCQkweGM4LCAweGNjLCAvKiBDUlNDQUxFICovCisJCTB4Y2EsIDB4OTEsIC8qIENCU0NBTEUgKi8KKwkJMHhjYywgMHgyNCwgLyogWUMxNiB8IE9TRE5VTSAqLworCQkweGRhLCAweDAwLCAvKiAgKi8KKwkJMHhkYywgMHgyNCwgLyogU0VUTU9ERSB8IFBBTCAqLworCQkweGRlLCAweDAyLCAvKiBFQUNUSVZFICovCiAKLUkyQ19DTElFTlRfSU5TTU9EOworCQkvKiBvdmVybGF5IGNvbG9ycyAqLworCQkweDcwLCAweEVCLCAweDkwLCAweDgwLCAweEIwLCAweDgwLCAvKiB3aGl0ZSAqLworCQkweDcyLCAweEEyLCAweDkyLCAweDhFLCAweEIyLCAweDJDLCAvKiB5ZWxsb3cgKi8KKwkJMHg3NCwgMHg4MywgMHg5NCwgMHgyQywgMHhCNCwgMHg5QywgLyogY3lhbiAqLworCQkweDc2LCAweDcwLCAweDk2LCAweDNBLCAweEI2LCAweDQ4LCAvKiBncmVlbiAqLworCQkweDc4LCAweDU0LCAweDk4LCAweEM2LCAweEI4LCAweEI4LCAvKiBtYWdlbnRhICovCisJCTB4N0EsIDB4NDEsIDB4OUEsIDB4RDQsIDB4QkEsIDB4NjQsIC8qIHJlZCAqLworCQkweDdDLCAweDIzLCAweDlDLCAweDcyLCAweEJDLCAweEQ0LCAvKiBibHVlICovCisJCTB4N0UsIDB4MTAsIDB4OUUsIDB4ODAsIDB4QkUsIDB4ODAsIC8qIGJsYWNrICovCisKKwkJMHg2MCwgMHhFQiwgMHg4MCwgMHg4MCwgMHhjMCwgMHg4MCwgLyogd2hpdGUgKi8KKwkJMHg2MiwgMHhBMiwgMHg4MiwgMHg4RSwgMHhjMiwgMHgyQywgLyogeWVsbG93ICovCisJCTB4NjQsIDB4ODMsIDB4ODQsIDB4MkMsIDB4YzQsIDB4OUMsIC8qIGN5YW4gKi8KKwkJMHg2NiwgMHg3MCwgMHg4NiwgMHgzQSwgMHhjNiwgMHg0OCwgLyogZ3JlZW4gKi8KKwkJMHg2OCwgMHg1NCwgMHg4OCwgMHhDNiwgMHhjOCwgMHhCOCwgLyogbWFnZW50YSAqLworCQkweDZBLCAweDQxLCAweDhBLCAweEQ0LCAweGNBLCAweDY0LCAvKiByZWQgKi8KKwkJMHg2QywgMHgyMywgMHg4QywgMHg3MiwgMHhjQywgMHhENCwgLyogYmx1ZSAqLworCQkweDZFLCAweDEwLCAweDhFLCAweDgwLCAweGNFLCAweDgwLCAvKiBibGFjayAqLworCX07CisJc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gdG9fYnQ4NjYoc2QpOworCXU4IHZhbDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXQpIC8gMjsgaSArPSAyKQorCQlidDg2Nl93cml0ZShlbmNvZGVyLCBpbml0W2ldLCBpbml0W2krMV0pOworCisJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOworCisJaWYgKHJvdXRlLT5pbnB1dCA9PSAwKQorCQl2YWwgfD0gMHg0MDsgLyogQ0JTV0FQICovCisJZWxzZQorCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KKworCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisKKwl2YWwgPSBlbmNvZGVyLT5yZWdbMHhjY107CisJaWYgKHJvdXRlLT5pbnB1dCA9PSAyKQorCQl2YWwgfD0gMHgwMTsgLyogT1NEQkFSICovCisJZWxzZQorCQl2YWwgJj0gfjB4MDE7IC8qICFPU0RCQVIgKi8KKwlidDg2Nl93cml0ZShlbmNvZGVyLCAweGNjLCB2YWwpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisjaWYgMAorLyogQ29kZSB0byBzZXR1cCBzcXVhcmUgcGl4ZWxzLCBtaWdodCBiZSBvZiBzb21lIHVzZSBpbiB0aGUgZnV0dXJlLAorICAgYnV0IGlzIGN1cnJlbnRseSB1bnVzZWQuICovCisJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOworCWlmICgqaWFyZykKKwkJdmFsIHw9IDE7IC8qIFNRVUFSRSAqLworCWVsc2UKKwkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCisJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgYnQ4NjZfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQlQ4NjYsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGJ0ODY2X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBidDg2Nl9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBidDg2Nl92aWRlb19vcHMgPSB7CisJLnNfc3RkX291dHB1dCA9IGJ0ODY2X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gYnQ4NjZfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYnQ4NjZfb3BzID0geworCS5jb3JlID0gJmJ0ODY2X2NvcmVfb3BzLAorCS52aWRlbyA9ICZidDg2Nl92aWRlb19vcHMsCit9OwogCiBzdGF0aWMgaW50IGJ0ODY2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGJ0ODY2ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC0yNTMsMjAgKzIxMCwxOCBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmJ0ODY2X29wcyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnQ4NjZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotc3RhdGljIGludCBidDg2Nl9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19idDg2NihzZCkpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4NjZfaWRbXSA9IHsKQEAgLTI3NywxMCArMjMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImJ0ODY2IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCi0JLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kLAogCS5wcm9iZSA9IGJ0ODY2X3Byb2JlLAogCS5yZW1vdmUgPSBidDg2Nl9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IGJ0ODY2X2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSBidDg2Nl9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggY2U3MWU4ZS4uMzA3N2M0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAlzZWxlY3QgVklERU9fTVNQMzQwMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19UVkFVRElPIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1REQTc0MzIgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fVERBOTg3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE2NTg4IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NDggYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4gVGhpcyBpbmNsdWRlcwogCSAgdGhlIE1pcm8sIEhhdXBwYXVnZSBhbmQgU1RCIGJvYXJkcy4gUGxlYXNlIHJlYWQgdGhlIG1hdGVyaWFsIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IGQyNGRjYzAuLmI5YzNiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC03Myw2ICs3MywxMSBAQAogCiBzdGF0aWMgdm9pZCBnZW92aXNpb25fbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CiAKK3N0YXRpYyB2b2lkIHBoeXRlY19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKKworc3RhdGljIHZvaWQgZ3Y4MDBzX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOworc3RhdGljIHZvaWQgZ3Y4MDBzX2luaXQoc3RydWN0IGJ0dHYgKmJ0dik7CisKIHN0YXRpYyBpbnQgdGVycmF0ZWNfYWN0aXZlX3JhZGlvX3VwZ3JhZGUoc3RydWN0IGJ0dHYgKmJ0dik7CiBzdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KTsKIHN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpOwpAQCAtOTEsMTIgKzk2LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHR1bmVyW0JUVFZfTUFYXSAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCBzdmhzW0JUVFZfTUFYXSAgID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gVU5TRVQgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVtb3RlW0JUVFZfTUFYXSA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvZGV2W0JUVFZfTUFYXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNjU4OFtCVFRWX01BWF07CiBzdGF0aWMgc3RydWN0IGJ0dHYgICptYXN0ZXJbQlRUVl9NQVhdID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gTlVMTCB9OwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IDE7Ci0jZWxzZQotc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZDsKLSNlbmRpZgorc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBncGlvbWFzayA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb2FsbCA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb211eFs1XSA9IHsgWyAwIC4uLiA0IF0gPSBVTlNFVCB9OwpAQCAtMTE1LDYgKzExOCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodHVuZXIsICAgIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3ZocywgICAgIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocmVtb3RlLCAgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXVkaW9kZXYsIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoYXVkaW9tdXgsIGludCwgTlVMTCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0ModHJpdG9uMSwic2V0IEVUQkYgcGNpIGNvbmZpZyBiaXQgIgpAQCAtMTI1LDcgKzEyOSwxNCBAQAogTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJzcGVjaWZ5IFRWL2dyYWJiZXIgY2FyZCBtb2RlbCwgc2VlIENBUkRMSVNUIGZpbGUgZm9yIGEgbGlzdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwbGwsInNwZWNpZnkgaW5zdGFsbGVkIGNyeXN0YWwgKDA9bm9uZSwgMjg9MjggTUh6LCAzNT0zNSBNSHopIik7CiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCJzcGVjaWZ5IGluc3RhbGxlZCB0dW5lciB0eXBlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCJhdXRvbWF0aWNhbGx5IGxvYWQgaTJjIG1vZHVsZXMgbGlrZSB0dW5lci5vLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2xvYWQsICJvYnNvbGV0ZSBvcHRpb24sIHBsZWFzZSBkbyBub3QgdXNlIGFueW1vcmUiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXVkaW9kZXYsICJzcGVjaWZ5IGF1ZGlvIGRldmljZTpcbiIKKwkJIlx0XHQtMSA9IG5vIGF1ZGlvXG4iCisJCSJcdFx0IDAgPSBhdXRvZGV0ZWN0IChkZWZhdWx0KVxuIgorCQkiXHRcdCAxID0gbXNwMzQwMFxuIgorCQkiXHRcdCAyID0gdGRhNzQzMlxuIgorCQkiXHRcdCAzID0gdHZhdWRpbyIpOworTU9EVUxFX1BBUk1fREVTQyhzYWE2NTg4LCAiaWYgMSwgdGhlbiBsb2FkIHRoZSBzYWE2NTg4IFJEUyBtb2R1bGUsIGRlZmF1bHQgKDApIGlzIHRvIHVzZSB0aGUgY2FyZCBkZWZpbml0aW9uLiIpOwogTU9EVUxFX1BBUk1fREVTQyhub19vdmVybGF5LCJhbGxvdyBvdmVycmlkZSBvdmVybGF5IGRlZmF1bHQgKDAgZGlzYWJsZXMsIDEgZW5hYmxlcykiCiAJCSIgW3NvbWUgVklBL1NJUyBjaGlwc2V0cyBhcmUga25vd24gdG8gaGF2ZSBwcm9ibGVtIHdpdGggb3ZlcmxheV0iKTsKIApAQCAtMjQ2LDYgKzI1NywxMCBAQAogCXsgMHhhMTgyZmYwZCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCiAJeyAweGExODJmZjBlLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKIAl7IDB4YTE4MmZmMGYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhmMDUwMDAwMCwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMSwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMiwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMywgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAogCiAJeyAweDQxNDI0MzQ0LCBCVFRWX0JPQVJEX0dSQU5EVEVDLCAgICAgICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIiB9LAogCXsgMHgwMTAyMDMwNCwgQlRUVl9CT0FSRF9YR1VBUkQsICAgICAgICAiR3JhbmR0ZWMgR3JhbmQgWC1HdWFyZCIgfSwKQEAgLTI4OSw2ICszMDQsOCBAQAogCS8qIER1cGxpY2F0ZSBQQ0kgSUQsIHJlY29uZmlndXJlIGZvciB0aGlzIGJvYXJkIGR1cmluZyB0aGUgZWVwcm9tIHJlYWQuCiAJKiB7IDB4MTNlYjAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQiwgICJIYXVwcGF1Z2UgSW1wYWN0VkNCIiB9LCAqLwogCisJeyAweDEwOWUwMzZlLCBCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyLAkiQ29uY2VwdHJvbmljIENUVkZNaSB2MiJ9LAorCiAJLyogRFZCIGNhcmRzICh1c2luZyBwY2kgZnVuY3Rpb24gLjEgZm9yIG1wZWcgZGF0YSB4ZmVyKSAqLwogCXsgMHgwMDFjMTFiZCwgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVCwgICAiUGlubmFjbGUgUENUViBTYXQiIH0sCiAJeyAweDAxMDEwMDcxLCBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYsICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiB9LApAQCAtMzA1LDYgKzMyMiwyMCBAQAogCXsgMHhkMjAwZGJjMCwgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzIsCSJEVmlDTyBGdXNpb25IRFRWIDIiIH0sCiAJeyAweDc2M2MwMDhhLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMCwJIkdlb1Zpc2lvbiBHVi02MDAiIH0sCiAJeyAweDE4MDExMDAwLCBCVFRWX0JPQVJEX0VOTFRWX0ZNXzIsCSJFbmNvcmUgRU5MIFRWLUZNLTIiIH0sCisJeyAweDc2M2Q4MDBhLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFMsICJHZW9WaXNpb24gR1YtODAwKFMpIChtYXN0ZXIpIiB9LAorCXsgMHg3NjNkODAwYiwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCXsgMHg3NjNkODAwYywgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCXsgMHg3NjNkODAwZCwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCisJeyAweDE1NDAxODMwLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My0xIiB9LAorCXsgMHgxNTQwMTgzMSwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtMiIgfSwKKwl7IDB4MTU0MDE4MzIsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTMiIH0sCisJeyAweDE1NDAxODMzLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My00IiB9LAorCXsgMHgxNTQwMTgzNCwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtNSIgfSwKKwl7IDB4MTU0MDE4MzUsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTYiIH0sCisJeyAweDE1NDAxODM2LCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My03IiB9LAorCXsgMHgxNTQwMTgzNywgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtOCIgfSwKKwogCXsgMCwgLTEsIE5VTEwgfQogfTsKIApAQCAtMzE2LDU5ICszNDcsNTAgQEAKIAlbQlRUVl9CT0FSRF9VTktOT1dOXSA9IHsKIAkJLm5hbWUJCT0gIiAqKiogVU5LTk9XTi9HRU5FUklDICoqKiAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUlST10gPSB7CiAJCS5uYW1lCQk9ICJNSVJPIFBDVFYiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdFXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9TVEJdID0gewogCQkubmFtZQkJPSAiU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyA0LCAwLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LApAQCAtMzc3LDIwMiArMzk5LDE3NyBAQAogCVtCVFRWX0JPQVJEX0lOVEVMXSA9IHsKIAkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9ESUFNT05EXSA9IHsKIAkJLm5hbWUJCT0gIkRpYW1vbmQgRFRWMjAwMCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDAsIDEgfSwKIAkJLmdwaW9tdXRlIAk9IDMsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFUk1FRElBXSA9IHsKIAkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVlBob25lIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbWFzawk9IDB4MGYsCiAJCS5ncGlvbXV4IAk9IHsgMHgwYywgMHgwNCwgMHgwOCwgMHgwNCB9LAogCQkvKiAgICAgICAgICAgICAgICAweDA0IGZvciBzb21lIGNhcmRzID8/ICovCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05dID0gewogCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0ZMWVZJREVPXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhjMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4YzAwLCAweDgwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9UVVJCT1RWXSA9IHsKIAkJLm5hbWUJCT0gIklNUy9JWG1pY3JvIFR1cmJvVFYiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAzLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAxLCAyLCAzIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzhdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KLQkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUlST1BST10gPSB7CiAJCS5uYW1lCQk9ICJNSVJPIFBDVFYgcHJvIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgzMDE0ZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMSwweDEwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9BRFNURUNIX1RWXSA9IHsKIAkJLm5hbWUJCT0gIkFEUyBUZWNobm9sb2dpZXMgQ2hhbm5lbCBTdXJmZXIgVFYgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMywgMTQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFUk1FRElBOThdID0gewogCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gNCwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDQsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMywgMTQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLm1zcDM0eHhfYWx0ICAgID0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbywKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1ZIWF0gPSB7CiAJCS5uYW1lCQk9ICJBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMiwgMSwgMyB9LCAvKiBvbGQ6IHswLCAxLCAyLCAzLCA0fSAqLwogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfWk9MVFJJWF0gPSB7CiAJCS5uYW1lCQk9ICJab2x0cml4IFRWLU1heCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QSVhWSUVXUExBWVRWXSA9IHsKIAkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkvKiAyMDAzLTEwLTIwIGJ5ICJBbnRvbiBBLiBBcmFwb3YiIDxhcmFwb3ZAbWFpbC5ydT4gKi8KIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKQEAgLTU4MCwxOTQgKzU3NywxNzAgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9XSU5WSUVXXzYwMV0gPSB7CiAJCS5uYW1lCQk9ICJMZWFkdGVrIFdpblZpZXcgNjAxIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg4MzAwZjgsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMHg0ZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcgfSwKIAkJLmdwaW9tdXRlIAk9IDB4Y2ZhMDA3LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnZvbHVtZV9ncGlvCT0gd2ludmlld192b2x1bWUsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFQ19JTlRFUkNBUF0gPSB7CiAJCS5uYW1lCQk9ICJBVkVDIEludGVyY2FwdHVyZSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMiwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDAsIDAsIDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9MSUZFX0ZMWUtJVF0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDB4OGRmZjAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0NFSV9SQUZGTEVTXSA9IHsKIAkJLm5hbWUJCT0gIkNFSSBSYWZmbGVzIENhcmQiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDMsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQ09ORkVSRU5DRVRWXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAyLCAgLyogdHVuZXIsIGxpbmUgaW4gKi8KLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICB0dW5lciwgbGluZSBpbiAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVNdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGMwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMHg4MDAsIDB4NDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTU9EVEVDXzIwNV0gPSB7CiAJCS5uYW1lCQk9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmhhc19kaWdfaW4JPSAxLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKLQkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCksIC8qIGlucHV0IDIgaXMgZGlnaXRhbCAqLworCQkvKiAuZGlnaXRhbF9tb2RlPSBESUdJVEFMX01PREVfQ0FNRVJBLCAqLwogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDAsIDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FMUFNfVFNCQjVfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjFdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDVYLzA2WCAoYnQ4NzgpIFttYW55IHZlbmRvcnNdIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7MHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9WT0JJU19CT09TVEFSXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhciIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MWYwZmZmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gdGVycmF0dl9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU1dID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpbkNhbSBuZXdlciAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVhJXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBNQVhJIFRWIFZpZGVvIFBDSTIgTFI1MCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMiwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDFjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9URVJSQVRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4xIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDFmMGZmZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMHgwMDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHRlcnJhdHZfYXVkaW8sCiAJCS8qIEdQSU8gd2lyaW5nOgogCQlFeHRlcm5hbCAyMCBwaW4gY29ubmVjdG9yIChmb3IgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgYm9hcmQpCkBAIC04MDUsODcgKzc3OCw3NyBAQAogCQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KIAkJLm5hbWUJCT0gIkltYWdlbmF0aW9uIFBYQzIwMCIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAxLCAvKiB3YXM6IDQgKi8KIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm11eHNlbF9ob29rICAgID0gUFhDMjAwX211eHNlbCwKIAogCX0sCiAJW0JUVFZfQk9BUkRfRkxZVklERU9fOThdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwgIC8qIDB4OGRmZTAwICovCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9JUFJPVFZdID0gewogCQkubmFtZQkJPSAiRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDEsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDAsIDAsIDAgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9JTlRFTF9DX1NfUENJXSA9IHsKIAkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVJSQVRWQUxVRV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4NTAwLCAwLCAweDMwMCwgMHg5MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4OTAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9XSU5GQVNUMjAwMF0gPSB7CiAJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgMjAwMC8gV2luRmFzdCAyMDAwIFhQIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDAgfSwgLyogVFYsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLAogCQkvKiBBbGV4YW5kZXIgVmFyYWtpbiA8YXZhcmFraW5AaG90bWFpbC5jb20+IFtzdGVyZW8gdmVyc2lvbl0gKi8KIAkJLmdwaW9tYXNrCT0gMHhiMzMwMDAsCiAJCS5ncGlvbXV4IAk9IHsgMHgxMjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCB9LApAQCAtOTA2LDIxNyArODY5LDE5MSBAQAogCQkuaGFzX3JhZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwgLyogZGVmYXVsdCBmb3Igbm93LCBncGlvIHJlYWRzIEJGRkYwNiBmb3IgUGFsIGJnK2RrICovCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gd2luZmFzdDIwMDBfYXVkaW8sCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMl0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVddID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMywKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBST10gPSB7CiAJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgcHJvIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYyB9LAogCQkuZ3Bpb211dGUgCT0gMHgyOSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFHSUNUVklFVzA2M10gPSB7CiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwNlggVFZpZXc5OSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4NTUxZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggCT0geyAweDU1MTQwMCwgMHg1NTEyMDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NTUxYzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1BJTk5BQ0xFXSA9IHsKIAkJLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAzMDAwRiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMiwgMHhkMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfU1RCMl0gPSB7CiAJCS5uYW1lCQk9ICJTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgNCwgMCwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVlBIT05FOThdID0gewogCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUgOTgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDQsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSA0LCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMTMsIDQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJCS5hdWRpb19tb2RlX2dwaW89IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAogCX0sCiAJW0JUVFZfQk9BUkRfUFY5NTFdID0gewogCQkubmFtZQkJPSAiUHJvVmlkZW8gUFY5NTEiLCAvKiBwaWMxNmM1NCAqLwogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDAsIDB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfT05BSVJfVFZdID0gewogCQkubmFtZQkJPSAiTGl0dGxlIE9uQWlyIFRWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhlMDBiLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweGZmOWZmNiwgMHhmZjlmZjYsIDB4ZmYxZmY3LCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGZmM2ZmYywKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9TSUdNQV9UVklJX0ZNXSA9IHsKIAkJLm5hbWUJCT0gIlNpZ21hIFRWSUktRk0iLAogCQkudmlkZW9faW5wdXRzCT0gMiwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMSwgMCwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF9OT05FLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OMl0gPSB7CiAJCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIiLAogCQkudmlkZW9faW5wdXRzCT0gNSwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRV0gPSB7CiAJCS5uYW1lCQk9ICJab2x0cml4IEdlbmllIFRWL0ZNIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhiY2YwM2YsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4YmM4MDNmLCAweGJjOTAzZiwgMHhiY2IwM2YsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YmNiMDNmLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVSUkFUVlJBRElPXSA9IHsKIAkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWL1JhZGlvKyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4NzAwMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NDAwMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKQEAgLTExMjQsNyArMTA2MSw2IEBACiAJCS5wbGwJCT0gUExMXzM1LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIApAQCAtMTEzMiw1MSArMTA2OCw0NiBAQAogCVtCVFRWX0JPQVJEX0RZTkFMSU5LXSA9IHsKIAkJLm5hbWUJCT0gIkFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXciLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsyLDAsMCwwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9HVkJDVFYzUENJXSA9IHsKIAkJLm5hbWUJCT0gIklPREFUQSBHVi1CQ1RWMy9QQ0kiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAxMGYwMCwKLQkJLm11eHNlbAkJPSB7MiwgMywgMCwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BTFBTX1RTSEM2X05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gZ3ZiY3R2M3BjaV9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX1BYRUxWV1BMVFZQQUtdID0gewogCQkubmFtZQkJPSAiUHJvbGluayBQVi1CVDg3OFArNEUgLyBQaXhlbFZpZXcgUGxheVRWIFBBSyAvIExlbmNvIE1YVFYtOTU3OCBDUCIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCisJCS5oYXNfZGlnX2luCT0gMSwKIAkJLmdwaW9tYXNrCT0gMHhBQTAwMDAsCi0JCS5tdXhzZWwJCT0geyAyLDMsMSwxLC0xIH0sCi0JCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLCAvKiBpbiA0IGlzIGRpZ2l0YWwgKi8KKwkJLyogLmRpZ2l0YWxfbW9kZT0gRElHSVRBTF9NT0RFX0NBTUVSQSwgKi8KIAkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAwLCAweDgwMDAwLCAweDgwMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGE4MDAwLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUJPSAxLAogCQkvKiBHUElPIHdpcmluZzogKGRpZmZlcmVudCBmcm9tIFJldi40QyAhKQogCQkJR1BJTzE3OiBVNC5BMCAoZmlyc3QgaGVmNDA1MmJ0KQpAQCAtMTE5MSwxNyArMTEyMiwxNSBAQAogCVtCVFRWX0JPQVJEX0VBR0xFXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkVhZ2xlIFdpcmVsZXNzIENhcHJpY29ybjIgKGJ0ODc4QSkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDAsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQgLyogVFVORVJfQUxQU19UTURIMl9OVFNDICovLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEyMDksMTEgKzExMzgsMTAgQEAKIAkJLyogRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAweGQwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJCQkvKiBzb3VuZCBwYXRoICg1IHNvdXJjZXMpOgpAQCAtMTIyOSwyNSArMTE1NywyMiBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9UVklFV19SRFNfRk1dID0gewogCQkvKiBDbGFhcyBMYW5nYmVobiA8Y2xhYXNAYmlnZm9vdC5jb20+LAogCQlTdmVuIEdyb3Roa2xhZ3MgPHN2ZW5AdXBiLmRlPiAqLwogCQkubmFtZQkJPSAiVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxYywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMHgxMCwgOCB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0xJRkVURUNfOTQxNV0gPSB7CkBAIC0xMjU4LDExICsxMTgzLDEwIEBACiAJCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLwogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0iLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxOGUwLAogCQkJLyogRm9yIGNhcmRzIHdpdGggdGRhOTgyMC90ZGE5ODIxOgpAQCAtMTI3MiwyNSArMTE5NiwyMiBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFZdID0gewogCQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgogCQlvbGQgRWFzeSBUViBCVDg0OCB2ZXJzaW9uIChtb2RlbCBDUEgwMzEpICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwMzEvIEJFU1RCVVkgRWFzeSBUViIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMjk4LDE3ICsxMjE5LDE1IEBACiAJCS8qIEdvcmRvbiBIZXlkb24gPGdqaGV5ZG9uQGJpZ2Zvb3QuY29tICgnOTgpICovCiAJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDE4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQkvKiBUaGlzIGlzIHRoZSB1bHRpbWF0ZSBjaGVhcG8gY2FwdHVyZSBjYXJkCiAJCSoganVzdCBhIEJUODQ4QSBvbiBhIHNtYWxsIFBDQiEKQEAgLTEzMTYsNTEgKzEyMzUsNDUgQEAKIAlbQlRUVl9CT0FSRF9HUkFORFRFQ10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BU0tFWV9DUEgwNjBdID0gewogCQkvKiBEYW5pZWwgSGVycmluZ3RvbiA8ZGFuaWVsLmhlcnJpbmd0b25AaG9tZS5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg4MDAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BU0tFWV9DUEgwM1hdID0gewogCQkvKiBNYXR0aSBNb3R0dXMgPG1vdHR1c0BwaHlzaWMudXQuZWU+ICovCiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzY4LDM0ICsxMjgxLDMwIEBACiAJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIJCT0gMCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDExLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDEgfSwKIAkJLmdwaW9tdXRlIAk9IDgsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9HTVYxXSA9IHsKIAkJLyogQWRyaWFuIENveCA8YWRyaWFuQGh1bWJvbGR0LmNvLnVrICovCiAJCS5uYW1lCQk9ICJBRyBFbGVjdHJvbmljcyBHTVYxIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCi0JCS5tdXhzZWwJCT0geyAyLCAyIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IH0sCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVjJdID0gewogCQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgpAQCAtMTQwMywzNCArMTMxMiwzMCBAQAogCQlzcGVjaWFsIHRoYW5rcyB0byBJbmZvcm1hdGljYSBNaWVyZXMgZm9yIHByb3ZpZGluZyB0aGUgY2FyZCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDAsIDQsIDQgfSwKIAkJLmdwaW9tdXRlIAk9IDksCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJdID0gewogCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwogCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZjAzZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YmZmZSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4NDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQzOCwyNyArMTM0MywyNCBAQAogCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwogCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciBWRSIsCiAJCS52aWRlb19pbnB1dHMJPSAyLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAxLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0ZMWVZJREVPMjAwMF0gPSB7CiAJCS8qIERlZUpheSA8ZGVlamF5QHdlc3RlbDkwMC5uZXQgKDIwMDBTKSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMFMgTFI5MCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzawk9IDB4MThlMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDAsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCQkJLyogUmFkaW8gY2hhbmdlZCBmcm9tIDFlODAgdG8gMHg4MDAgdG8gbWFrZQogCQkJCUZseVZpZGVvMjAwMFMgaW4gLmh1IGhhcHB5IChnbSkqLwogCQkJCS8qIC1kay0/Pz86IHNldCBtdXRlPTB4MTgwMCBmb3IgdGRhOTg3NGggZGF1Z2h0ZXJib2FyZCAqLwpAQCAtMTQ3MSw0MCArMTM3MywzNSBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVJSQVRWQUxVRVJdID0gewogCQkubmFtZQkJPSAiVGVycmF0ZWMgVFZhbHVlUmFkaW8iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGZmZmYwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHg1MDAsIDB4NTAwLCAweDMwMCwgMHg5MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4OTAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfR1ZCQ1RWNFBDSV0gPSB7CiAJCS8qIFRBTkFLQSBLZWkgPHBlZzAwNjI1QG5pZnR5LmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNC9QQ0kiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAxMGYwMCwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGd2YmN0djNwY2lfYXVkaW8sCiAJfSwKIApAQCAtMTUxNCw5ICsxNDExLDggQEAKIAkJLyogdHJ5ICJpbnNtb2QgbXNwMzQwMCBzaW1wbGU9MCIgaWYgeW91IGhhdmUKIAkJKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4NGY4YTAwLAogCQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQogCQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLwpAQCAtMTUyNCwxMCArMTQyMCw5IEBACiAJCS5ncGlvbXV0ZSAJPSAweDk0N2ZmZiwKIAkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KIAkJKiB0dW5lciwgQ29tcG9zaXQsIFNWaWQsIENvbXBvc2l0LW9uLVN2aWQtYWRhcHRlciAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDEpLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCkBAIC0xNTM2LDkgKzE0MzEsOCBAQAogCQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQogCQkqIHNvdW5kIHByb2JsZW1zIHdpdGggdGhpcyBjYXJkLiAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCiAJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCiAJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCkBAIC0xNTQ2LDEwICsxNDQwLDkgQEAKIAkJLmdwaW9tdXRlIAk9IDB4OTQ3ZmZmLAogCQkvKiB0dnR1bmVyLCByYWRpbywgICBleHRlcm5hbCxpbnRlcm5hbCwgbXV0ZSwgIHN0ZXJlbwogCQkqIHR1bmVyLCBDb21wb3NpdCwgU1ZpZCwgQ29tcG9zaXQtb24tU3ZpZC1hZGFwdGVyICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyAsMCAsMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01UMjAzMiwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKQEAgLTE1NTcsMzEgKzE0NTAsMjcgQEAKIAkJLyogUGhpbGlwIEJsdW5kZWxsIDxwYkBuZXh1cy5jby51az4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFjdGl2ZSBJbWFnaW5nIEFJTU1TIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwCiAJfSwKIAlbQlRUVl9CT0FSRF9QVl9CVDg3OFBfUExVU10gPSB7CiAJCS8qIFRvbWFzeiBQeXJhIDxoZWxsZmlyZUBzZWRlei5pcS5wbD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSA0LAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSA0LCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAxNSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAxMSwgNyB9LCAvKiBUViBhbmQgUmFkaW8gd2l0aCBzYW1lIEdQSU8gISAqLwogCQkuZ3Bpb211dGUgCT0gMTMsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX0lfRk0sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAkJLyogR1BJTyB3aXJpbmc6CiAJCQlHUElPMDogVTQuQTAgKGhlZjQwNTJidCkKQEAgLTE1OTQsMTUgKzE0ODMsMTQgQEAKIAlbQlRUVl9CT0FSRF9GTFlWSURFTzk4RVpdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwgLyogQVYxLCBBVjIsIFNWSFMsIENWaWQgYWRhcHRlciBvbiBTVkhTICovCisJCS8qIEFWMSwgQVYyLCBTVkhTLCBDVmlkIGFkYXB0ZXIgb24gU1ZIUyAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4NDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTYxMCwxMSArMTQ5OCwxMCBAQAogCQkvKiBEYXJpdXN6IEtvd2FsZXdza2kgPGRhcmVra0BhdXRvbWV4LnBsPiAqLwogCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKzlCIChQbGF5VFYgUHJvIHJldi45QiBGTStOSUNBTSkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDNmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDA5LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLApAQCAtMTYyMyw3ICsxNTEwLDYgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gcHZidDg3OHA5Yl9hdWRpbywgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHN0ZXJlbyAqLwogCQkuaGFzX3JhZGlvCT0gMSwgIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSByYWRpbyAqLwogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMTY0MCw0OSArMTUyNiw0MiBAQAogCQkvKiB5b3UgbXVzdCBqdW1wZXIgSlA1IGZvciB0aGUgY2FyZCB0byB3b3JrICovCiAJCS5uYW1lICAgICAgICAgICA9ICJTZW5zb3JheSAzMTEiLAogCQkudmlkZW9faW5wdXRzICAgPSA1LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gNCwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1JWNjA1XSA9IHsKIAkJLyogTWlndWVsIEZyZWl0YXMgPG1pZ3VlbEBjZXR1Yy5wdWMtcmlvLmJyPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUmVtb3RlVmlzaW9uIE1YIChSVjYwNSkiLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAogCQkuZ3Bpb21hc2syICAgICAgPSAweDA3ZmYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgzMywgMHgxMywgMHgyMywgMHg0MywgMHhmMywgMHg3MywgMHhlMywgMHgwMywKLQkJCQkweGQzLCAweGIzLCAweGMzLCAweDYzLCAweDkzLCAweDUzLCAweDgzLCAweGEzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubXV4c2VsX2hvb2sgICAgPSBydjYwNV9tdXhzZWwsCiAJfSwKIAlbQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzhdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSwgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LApAQCAtMTY5Miw0MiArMTU3MSwzOCBAQAogCQkvKiBNYXNha2kgU3V6dWtpIDxtYXNha2lAYnRyZWUub3JnPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxNDAwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHdpbmR2cl9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX0dSQU5EVEVDX01VTFRJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjIE11bHRpIENhcHR1cmUgQ2FyZCAoQnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9LV09STERdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSmV0d2F5IFRWL0NhcHR1cmUgSlctVFY4NzgtRkJLLCBLd29ybGQgS1ctVFY4NzhSRiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LCAgIC8qIFR1bmVyLCBTVmlkLCBTVkhTLCBTVmlkIHRvIFNWSFMgY29ubmVjdG9yICovCisJCS8qIFR1bmVyLCBTVmlkLCBTVkhTLCBTVmlkIHRvIFNWSFMgY29ubmVjdG9yICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCA0LCA0IH0sLyogWWVzLCB0aGlzIHR1bmVyIHVzZXMgdGhlIHNhbWUgYXVkaW8gb3V0cHV0IGZvciBUViBhbmQgRk0gcmFkaW8hCiAJCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBleHRlcm5hbCBBdWRpbyBJbiwgc28gd2UgbXV0ZSBpdCBvbiBFeHQuICYgSW50LgogCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KQEAgLTE3NDEsNyArMTYxNiw2IEBACiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLyogU2Ftc3VuZyBUQ1BBOTA5NVBDMjdBIChCRytESyksIHBoaWxpcHMgY29tcGF0aWJsZSwgdy9GTSwgc3RlcmVvIGFuZAogCQlyYWRpbyBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9ycyB3b3JrIGZpbmUuICovCiAJCS5oYXNfcmFkaW8JPSAxLApAQCAtMTc1OSwyNyArMTYzMywyNCBAQAogCQkvKiBBcnRodXIgVGV0emxhZmYtRGVhcywgRFNQIERlc2lnbiBMdGQgPHNvZnR3YXJlQGRzcGRlc2lnbi5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJEU1AgRGVzaWduIFRDVklERU8iLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkJLyogLS0tLSBjYXJkIDB4NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgUFZSIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAwLCAxLCAxKSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHs3fSwKQEAgLTE3ODcsMzIgKzE2NTgsMjggQEAKIAlbQlRUVl9CT0FSRF9HVkJDVFY1UENJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDBmMGY4MCwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAyMDAwMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBndmJjdHY1cGNpX2F1ZGlvLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NzgpIiwgLyogMHgxKDJ8MyktNDVDNi1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LCAgICAgICAgICAgICAgICAgIC8qIGlkLWlucHV0cy1jbG9jayAqLwotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAwLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAyLCAwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODIwLDE0ICsxNjg3LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXzg0OF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODQ4KSIsIC8qIDB4MDQtNTRDMC1DMSAmIG9sZGVyIGJvYXJkcyAqLwogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODM3LDE0ICsxNzAyLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMTAxXzg0OF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxICg4NDgpIiwgLyogMHgwNS00MEMwLUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4NTIsMTQgKzE3MTUsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkxeDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEiLCAgICAgICAvKiAweDEoNHw1KS0wMDA0LUM0ICovCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAwIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODY3LDE0ICsxNzI4LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSURdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZCIsICAvKiAweCgxNnwxN3wyMCktMDBDNC1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODgyLDE0ICsxNzQxLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMnh4XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjAxLzI1MC8yNTEiLCAgLyogMHgxKDh8OXxFfEYpLTAwMDQtQzQgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDApLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODk5LDE0ICsxNzU2LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMngwX1NWSURdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yNTAiLCAgIC8qIDB4MShBfEIpLTAwQzQtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE5MTQsMTQgKzE3NjksMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkyeDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIxMC8yMjAvMjMwIiwgICAvKiAweDEoQXxCKS0wNEMwLUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTI5LDE0ICsxNzgyLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1MDAiLCAgIC8qIDUwMCAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTQ0LDEyICsxNzk1LDEwIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNTQwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1NDAiLCAgIC8qIDU0MCAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTU5LDE0ICsxODA4LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMjAwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwMCIsICAvKiAyMDAwICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCkBAIC0xOTc1LDE0ICsxODIyLDEyIEBACiAJCS8qIE0gRyBCZXJiZXJpY2ggPGJlcmJlcmljQGZvcndpc3MudW5pLXBhc3NhdS5kZT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklEUyBFYWdsZSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkubXV4c2VsX2hvb2sgICAgPSBlYWdsZV9tdXhzZWwsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCkBAIC0xOTkxLDE2ICsxODM2LDE0IEBACiAJW0JUVFZfQk9BUkRfUElOTkFDTEVTQVRdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTYXQiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCkBAIC0yMDA4LDE4ICsxODUxLDE2IEBACiAJW0JUVFZfQk9BUkRfRk9STUFDX1BST1RWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkZvcm1hYyBQcm9UViBJSSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMiwKIAkJLyogVFYsIENvbXAxLCBDb21wb3NpdGUgb3ZlciBTVklEIGNvbiwgU1ZJRCAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDIsIDAsIDAgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCS8qIHNvdW5kIHJvdXRpbmc6CiAJCUdQSU89MHgwMCwweDAxLDB4MDM6IG11dGUgKD8pCiAJCTB4MDI6IGJvdGggVFYgYW5kIHJhZGlvICh0dW5lcjogRk0xMjE2L0kpCkBAIC0yMDMzLDYyICsxODc0LDU1IEBACiAJW0JUVFZfQk9BUkRfTUFDSFRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk1hY2hUViIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgM30sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAlbQlRUVl9CT0FSRF9FVVJFU1lTX1BJQ09MT10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDF9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfUFYxNTBdID0gewogCQkvKiBMdWMgVmFuIEhvZXlsYW5kdCA8bHVjQGUtbWFnaWMuYmU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE1MCIsIC8qIDB4NGYgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BRF9UVks1MDNdID0gewogCQkvKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4gKi8KIAkJLyogVGhpcyBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQUQtVFZLNTAzIiwgLyogMHg2MyAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWU4MDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkvKiAgICAgICAgICAgICAgICAgIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBvZmYsICBvbiAqLwogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDggfSwKIAkJLmdwaW9tdXRlIAk9IDB4MGYsCkBAIC0yMDk3LDcgKzE5MzEsNiBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhZHR2azUwM19hdWRpbywKIAl9LAogCkBAIC0yMTA1LDE3ICsxOTM4LDE1IEBACiAJW0JUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSGVyY3VsZXMgU21hcnQgVFYgU3RlcmVvIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkvKiBOb3RlczoKIAkJLSBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRAogCQktIHN0ZXJlbyB2YXJpYW50IHcvIGRhdWdodGVyIGJvYXJkIHdpdGggdGRhOTg3NGEgQDB4YjAKQEAgLTIxMjksMTYgKzE5NjAsMTUgQEAKIAlbQlRUVl9CT0FSRF9QQUNFVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUGFjZSBUViAmIFJhZGlvIENhcmQiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS8qIEJ0ODc4LCBCdDgzMiwgRkkxMjQ2IHR1bmVyOyBubyBwY2kgc3Vic3lzdGVtIGlkCkBAIC0yMTUyLDI3ICsxOTgyLDM0IEBACiAJCS8qIENocmlzIFdpbGxpbmcgPGNocmlzQHZpc2xhYi51c3lkLmVkdS5hdT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklWQy0yMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyKSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCisJW0JUVFZfQk9BUkRfSVZDRTg3ODRdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSVZDRS04Nzg0IiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX1hHVUFSRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZCBYLUd1YXJkIC8gVHJ1c3QgODE0UENJIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ncGlvbWFzazIgICAgICA9IDB4ZmYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCksCiAJCS5tdXhzZWxfaG9vayAgICA9IHhndWFyZF9tdXhzZWwsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCkBAIC0yMTg0LDE2ICsyMDIxLDE0IEBACiAJW0JUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUJPSAxLAogCQkuZ3Bpb21hc2sJPSAweDFiLApAQCAtMjIwMywxMTggKzIwMzgsMTAxIEBACiAJCS8qIEpvcmdlIEJvbmNvbXB0ZSAtIERUSTIgPGpvcmdlQGR0aTIubmV0PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNDMiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZEMDA5WDFfVkQwMTFfTUlOSURJTl0gPSB7CiAJCS8qIE0uS2xhaHJAcGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIFZELTAxMSBNaW5pRElOIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVkQwMDlYMV9WRDAxMV9DT01CSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIFZELTAxMSBDb21iaSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJCS8qIC0tLS0gY2FyZCAweDZjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9WRDAwOV9NSU5JRElOXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgTWluaURJTiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTAsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSA5LAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiBncGlvbWFzazIgZGVmaW5lcyB0aGUgYml0cyB1c2VkIHRvIHN3aXRjaCBhdWRpbwotCQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCi0JCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMiwgMHgxMiwgMHgyMiwgMHgzMiwgMHgwMywgMHgxMywgMHgyMywgMHgzMywgMHgwMSwgMHgwMCB9LAorCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiB1c2VkIGZvciBleHRlcm5hbCB2b2RlbyBtdXggKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDEsIDApLAorCQkubXV4c2VsX2hvb2sJPSBwaHl0ZWNfbXV4c2VsLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9WRDAwOV9DT01CSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IENvbWJpIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAxMCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCi0JCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKLQkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAxIH0sCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIHVzZWQgZm9yIGV4dGVybmFsIHZvZGVvIG11eCAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiwgMywgMywgMywgMywgMSwgMSksCisJCS5tdXhzZWxfaG9vawk9IHBoeXRlY19tdXhzZWwsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0lWQzEwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX0lWQzEyMF0gPSB7CiAJCS8qIElWQy0xMjBHIC0gQWxhbiBHYXJmaWVsZCA8YWxhbkBmcm9tb3JiaXQuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEyMEciLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwgICAgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsICAgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsICAgLyogY2FyZCBoYXMgbm8gc3ZocyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCi0JCQkJMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksCiAJCS5tdXhzZWxfaG9vayAgICA9IGl2YzEyMF9tdXhzZWwsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LApAQCAtMjMyMywxMyArMjE0MSwxMSBAQAogCVtCVFRWX0JPQVJEX1BDX0hEVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAicGNIRFRWIEhELTIwMDAgVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZDVjEyMzZELAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9UV0lOSEFOX0RTVF0gPSB7CkBAIC0yMzM5LDM4ICsyMTU1LDM0IEBACiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fdmlkZW8gICAgICAgPSAxLAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfV0lORkFTVFZDMTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIldpbmZhc3QgVkMxMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAxLCAzIH0sIC8qIFZpZCBJbiwgU1ZpZCBJbiwgVmlkIG92ZXIgU1ZpZCBpbiBjb25uZWN0b3IgKi8KKwkJLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgzLCAxLCAxLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFVjU2MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAzLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDEsIDEsIDEgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAogCX0sCiAKQEAgLTIzNzgsMTQgKzIxOTAsMTIgQEAKIAlbQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlNJTVVTIEdWQzExMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAogCQkubXV4c2VsX2hvb2sgICAgPSBndmMxMTAwX211eHNlbCwKIAl9LApAQCAtMjM5Myw0NyArMjIwMyw0MSBAQAogCQkvKiBDYXJsb3MgU2lsdmEgcjNwZWtAcjNwZWsuaG9tZWxpbnV4Lm9yZyB8fCBjYXJkIDB4NzUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIk5HUyBOR1NUVisiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAwLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMDAwMywKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTE1MQlQ0XSA9IHsKIAkJLyogaHR0cDovL2xpbnV4bWVkaWFsYWJzLmNvbSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTE1MQlQ0IiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwgLyogSU4xLElOMixJTjMsSU40ICovCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVLUkFNX00yMDVdID0gewogCQkvKiBIZWxtcm9vcyBIYXJyaSA8aGFycmkuaGVsbXJvb3NAcHAuaW5ldC5maT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlRla3JhbSBNMjA1IFBSTyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4NjgsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg2OCwgMHg2OCwgMHg2MSwgMHg2MSB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKQEAgLTI0NDQsMTggKzIyNDgsMTYgQEAKIAkJLyogYnQ4NzggVFYgKyBGTSB3aXRob3V0IHN1YnN5c3RlbSBJRCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENPTlRWRk1pIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCkBAIC0yNDY2LDM3ICsyMjY4LDM0IEBACiAJCS8qMHg3OSBpbiBidHR2LmgqLwogCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8gVGV0cmEiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5ncGlvbWFzazIgICAgICA9IDB4M0M8PDE2LC8qU2V0IHRoZSBHUElPWzE4XS0+R1BJT1syMV0gYXMgb3V0cHV0IHBpbi49PT4gZHJpdmUgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuYWxvZyBtdWx0aXBsZXhlcnMqLwogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7MiwyLDIsMn0sLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KKwkJLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubXV4c2VsX2hvb2sgICAgPSBwaWNvbG9fdGV0cmFfbXV4c2VsLC8qUmVxdWlyZWQgYXMgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGNsYXNzaWMgaW5wdXQgc2VsZWN0aW9uIHBvbGljeSovCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1NQSVJJVF9UVl0gPSB7CiAJCS8qIFNwaXJpdCBUViBUdW5lciBmcm9tIGh0dHA6Ly9zcGlyaXRtb2RlbXMuY29tLmF1ICovCiAJCS8qIFN0YWZmb3JkIEdvb2RzZWxsIDxzdXJnZUBnb2xpYXRoLmhvbWV1bml4Lm9yZz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlNwaXJpdCBUViBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDAwMGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCB9LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAl9LApAQCAtMjUwNSwxMSArMjMwNCw5IEBACiAJCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzICwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMyksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0yNTI0LDU0ICsyMzIxLDQ3IEBACiAJCS8qIEJhc2VkIG9uIHRoZSBOZWJ1bGEgY2FyZCBkYXRhIC0gYWRkZWQgcmVtb3RlIGFuZCBuZXcgY2FyZCBudW1iZXIgLSBCVFRWX0JPQVJEX0FWRFZCVF83NjEsIHNlZSBhbHNvIGlyLWtiZC1ncGlvLmMgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMiwgMCB9LCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSwgMiwgMCksIC8qIENvbXAwLCBTLVZpZGVvLCA/LCA/ICovCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNRXSA9IHsKIAkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU1EiLAotCQkudmlkZW9faW5wdXRzICAgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCi0JCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLQkJCQkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCi0JCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTUV9tdXhzZWwsCi0JCS5ncGlvbXV4ICAgICAgICAgID0geyAwIH0sCi0JCS5ub19tc3AzNHh4ICAgICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubmFtZQkJPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCisJCS52aWRlb19pbnB1dHMJPSAxNiwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKKwkJLm11eHNlbF9ob29rCT0gc2lnbWFTUV9tdXhzZWwsCisJCS5ncGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU0xDXSA9IHsKIAkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKLQkJLnZpZGVvX2lucHV0cyAgICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCi0JCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAotCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU0xDX211eHNlbCwKLQkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKLQkJLm5vX21zcDM0eHggICAgICAgPSAxLAotCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5uYW1lCQk9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNMQyIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweDAsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIpLAorCQkubXV4c2VsX2hvb2sJPSBzaWdtYVNMQ19tdXhzZWwsCisJCS5ncGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKIAkJLyogQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QICovCiAJW0JUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUF0gPSB7CkBAIC0yNTc5LDE4ICsyMzY5LDE2IEBACiAJCS8qIGJ0ODc4IFRWICsgRk0gMHgwMDAwMDAwMCBzdWJzeXN0ZW0gSUQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFQQUMgVmlld2NvbXAgODc4KEFNQVgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwgICAvKiBtaW5pcmVtb3RlIHdvcmtzLCBzZWUgaXIta2JkLWdwaW8uYyAqLwogCQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLwogCX0sCkBAIC0yNTk5LDQ2ICsyMzg3LDQwIEBACiAJW0JUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFXSA9IHsKIAkJLyogQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5ub192aWRlbyAgICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZHRUFSX01ZVkNEXSA9IHsKIAkJLyogU3RldmVuIDxwaG90b24zOEBwY2hvbWUuY29tLnR3PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgzMSwgMHgzMSwgMHgzMSwgMHgzMSB9LAogCQkuZ3Bpb211dGUgCT0gMHgzMSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAwLAogCX0sCiAJW0JUVFZfQk9BUkRfU1VQRVJfVFZdID0gewogCQkvKiBSaWNrIEMgPGNyeXB0ZHJhZ29vbkBnbWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJTdXBlciBUViBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAweDAwMDAwMSwwLDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKQEAgLTI2NDgsMTcgKzI0MzAsMTUgQEAKIAkJLyogQ2hyaXMgRmFubmluZyA8dmlkZW80bGludXhAaGF5ZG9uLm5ldD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiB9LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiksCiAJCS5wbGwJCT0gUExMXzI4LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm11eHNlbF9ob29rICAgID0gdGliZXRDUzE2X211eHNlbCwKIAl9LAogCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJdID0gewpAQCAtMjY3NSwxMiArMjQ1NSwxMCBAQAogCQkqLwogCQkubmFtZSAgICAgICAgICAgPSAiS29kaWNvbSA0NDAwUiAobWFzdGVyKSIsCiAJCS52aWRlb19pbnB1dHMJPSAxNiwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS8qIEdQSU8gYml0cyAwLTkgdXNlZCBmb3IgYW5hbG9nIHN3aXRjaDoKIAkJKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgogCQkqICAgMDQgLSAwNjoJY2hhbm5lbCAoY29udHJvbGxlcikgc2VsZWN0b3IKQEAgLTI2OTEsNyArMjQ2OSw3IEBACiAJCSovCiAJCS5ncGlvbWFzawk9IDB4MDAwM2ZmLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLApAQCAtMjcwNywxNSArMjQ4NSwxMyBAQAogCQkqLwogCQkubmFtZQkJPSAiS29kaWNvbSA0NDAwUiAoc2xhdmUpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDE2LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMHgwMTAwMDAsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCi0JCS5tdXhzZWwJCT0geyAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCkBAIC0yNzI4LDI3ICsyNTA0LDIzIEBACiAJCS8qIEFkbGluayBSVFYyNCB3aXRoIHNwZWNpYWwgdW5sb2NrIGNvZGVzICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBZGxpbmsgUlRWMjQiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4ODctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEVdID0gewogCQkvKiBNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9MR19URFZTX0gwNlhGLCAvKiBURFZTLUgwNjRGICovCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDBlMDAwMDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMGMwMDAwNywKQEAgLTI3NjIsNzUgKzI1MzQsNjggQEAKIAkJLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCiAJCS5uYW1lCQk9ICJBY29ycCBZODc4RiIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCiAJCS50dW5lcl9hZGRyCT0gMHhjMSA+PjEsCi0JCS5yYWRpb19hZGRyICAgICA9IDB4YzEgPj4xLAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTJdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENUVkZNaSB2MiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxYzAwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU5BXzk1MzNfREksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzJFXSA9IHsKLQkJLm5hbWUgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKSIsCi0JCS52aWRlb19pbnB1dHMgID0gNSwKLQkJLmF1ZGlvX2lucHV0cyAgPSAxLAotCQkudHVuZXIgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgID0gMywKLQkJLmdwaW9tYXNrICAgICAgPSAweDAxZmUwMCwKLQkJLm11eHNlbCAgICAgICAgPSB7IDIsMywxLDEsLTEgfSwKLQkJLmRpZ2l0YWxfbW9kZSAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAotCQkuZ3Bpb211eCAgICAgICA9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCB9LAotCQkuZ3Bpb211dGUgICAgICA9IDB4MTI0MDAsCi0JCS5ub19tc3AzNHh4ICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgID0gVFVORVJfTEdfUEFMX0ZNLAorCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKSIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSAzLAorCQkuaGFzX2RpZ19pbgk9IDEsCisJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxLCAwKSwgLyogaW4gNCBpcyBkaWdpdGFsICovCisJCS8qIC5kaWdpdGFsX21vZGU9IERJR0lUQUxfTU9ERV9DQU1FUkEsICovCisJCS5ncGlvbXV4CT0geyAweDAwNDAwLCAweDEwNDAwLCAweDA0NDAwLCAweDgwMDAwIH0sCisJCS5ncGlvbXV0ZQk9IDB4MTI0MDAsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfUEFMX0ZNLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5oYXNfcmVtb3RlICAgID0gMSwKKwkJLmhhc19yZW1vdGUJPSAxLAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QVl9NNDkwMF0gPSB7CiAJCS8qIFPDqXJnaW8gRm9ydGllciA8c2VyZ2lvZm9ydGllckB5YWhvby5jb20uYnI+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MjksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCkBAIC0yODUwLDE3ICsyNjE1LDE1IEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNDQwXSAgPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNDQwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMiwgLyogdGhpcyBpcyBtZWFuaW5nbGVzcyAqLwotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMCwgMSB9LCAvKiAzLDAsMSBhcmUgZ3Vlc3NlcyAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMSksIC8qIDMsMCwxIGFyZSBndWVzc2VzICovCiAJCS5ncGlvbWFzawk9IDB4MzAzLAogCQkuZ3Bpb211dGUJPSAweDAwMCwgLyogaW50ICsgMzJrSHogKi8KIAkJLmdwaW9tdXgJPSB7IDAsIDAsIDB4MDAwLCAweDEwMH0sCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTI4NjksMjggKzI2MzIsMjUgQEAKIAlbQlRUVl9CT0FSRF9BU09VTkRfU0tZRVlFXSA9IHsKIAkJLm5hbWUJCT0gIkFzb3VuZCBTa3lleWUgUENUViIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9TQUJSRU5UX1RWRk1dID0gewogCQkubmFtZQkJPSAiU2FicmVudCBUVi1GTSAoYnR0diB2ZXJzaW9uKSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTA4MDA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMDAwMDAsIDEwMDAwMiwgMTAwMDAyLCAxMDAwMDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLApAQCAtMjkwNCwxNyArMjY2NCwxNSBAQAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0JdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIEltcGFjdFZDQiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KLQkJLm11eHNlbAkJPSB7IDAsIDEsIDMsIDIgfSwgLyogQ29tcG9zaXRlIDAtMyAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgwLCAxLCAzLCAyKSwgLyogQ29tcG9zaXRlIDAtMyAqLwogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQUNIVFZfTUFHSUNUVl0gPSB7CiAJCS8qIEp1bGlhbiBDYWxhYnkgPGp1bGlhbi5jYWxhYnlAZ21haWwuY29tPgpAQCAtMjkyNiwxNiArMjY4NCwxNCBAQAogCiAJCS5uYW1lICAgICAgICAgICA9ICJNYWdpY1RWIiwgLyogcmVicmFuZGVkIE1hY2hUViAqLwogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCkBAIC0yOTQzLDM2ICsyNjk5LDMwIEBACiAJW0JUVFZfQk9BUkRfU1NBSV9TRUNVUklUWV0gPSB7CiAJCS5uYW1lCQk9ICJTU0FJIFNlY3VyaXR5IFZpZGVvIEludGVyZmFjZSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKLQkJLm11eHNlbAkJPSB7IDAsIDEsIDIsIDMgfSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLm11eHNlbAkJPSBNVVhTRUwoMCwgMSwgMiwgMyksCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9TU0FJX1VMVFJBU09VTkRdID0gewogCQkubmFtZQkJPSAiU1NBSSBVbHRyYXNvdW5kIFZpZGVvIEludGVyZmFjZSIsCiAJCS52aWRlb19pbnB1dHMJPSAyLAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAxLAotCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMyB9LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAwLCAxLCAzKSwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCS8qIC0tLS0gY2FyZCAweDk0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfMl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDIiLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZDVjEyMzZELAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDBjMDAwMDcsCkBAIC0yOTg0LDM2ICsyNzM0LDMxIEBACiAJW0JUVFZfQk9BUkRfVFlQSE9PTl9UVlRVTkVSUENJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlR5cGhvb24gVFYtVHVuZXIgUENJICg1MDY4NCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDMwMTRmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjAwMDEsMHgxMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgICAgICAgPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfR0VPVklTSU9OX0dWNjAwXSA9IHsKIAkJLyogZW1obkB1c2IudmUgKi8KLQkJLm5hbWUgICAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTYwMCIsCi0JCS52aWRlb19pbnB1dHMgICAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgICAgPSBVTlNFVCwKLQkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCi0JCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAotCQkJCSAgICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIgfSwKLQkJLm11eHNlbF9ob29rICAgICAgPSBnZW92aXNpb25fbXV4c2VsLAotCQkuZ3Bpb211eCAgICAgICAgICA9IHsgMCB9LAotCQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgICA9IFVOU0VULAotCQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgICAgPSBBRERSX1VOU0VULAorCQkubmFtZQkJPSAiR2VvdmlzaW9uIEdWLTYwMCIsCisJCS52aWRlb19pbnB1dHMJPSAxNiwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyKSwKKwkJLm11eHNlbF9ob29rCT0gZ2VvdmlzaW9uX211eHNlbCwKKwkJLmdwaW9tdXgJPSB7IDAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0tPWlVNSV9LVFZfMDFDXSA9IHsKIAkJLyogTWF1cm8gTGFjeSA8bWF1cm9AbGFjeS5jb20uYXI+CkBAIC0zMDIxLDE3ICsyNzY2LDE1IEBACiAKIAkJLm5hbWUgICAgICAgICAgID0gIktvenVtaSBLVFYtMDFDIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LCAvKiBDT05UVkZNaSAqLwogCQkuZ3Bpb211dGUgCT0gMywgLyogQ09OVFZGTWkgKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIFRDTCBNSzMgKi8KIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMzA0MSw4ICsyNzg0LDcgQEAKIAkJICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmcgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkVuY29yZSBFTkwgVFYtRk0tMiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS8qIGJpdCA2ICAgICAgICAgIC0+IElSIGRpc2FibGVkCiAJCSAgIGJpdCAxOC8xNyA9IDAwIC0+IG11dGUKQEAgLTMwNTEsMTIgKzI3OTMsMTEgQEAKIAkJCSAgICAgICAxMSAtPiBpbnRlcm5hbCBhdWRpbyBpbnB1dAogCQkgKi8KIAkJLmdwaW9tYXNrICAgICAgID0gMHgwNjAwNDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMyksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg2MDAwMCwgMHg2MDAwMCwgMHgyMDAwMCwgMHgyMDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9UQ0xfTUYwMkdJUF81TiwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMzA2NSw1MCArMjgwNiwxMTEgQEAKIAkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyBzLXZpZGVvICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMiwgMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQlbQlRUVl9CT0FSRF9WRDAxMl9YMV0gPSB7CiAJCS8qIEQuSGVlckBQaHl0ZWMuZGUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMTItWDEgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkJW0JUVFZfQk9BUkRfVkQwMTJfWDJdID0gewogCQkvKiBELkhlZXJAUGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDEyLVgyIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAyLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCX0KKwl9LAorCQlbQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTXSA9IHsKKwkJLyogQnJ1bm8gQ2hyaXN0byA8YmNocmlzdG9AaW5mLnVmc20uYnI+CisJCSAqCisJCSAqIEdlb1Zpc2lvbiBHVi04MDAoUykgaGFzIDQgQ29uZXhhbnQgRnVzaW9uIDg3OEE6CisJCSAqIAkxIGF1ZGlvIGlucHV0ICBwZXIgQlQ4NzhBID0gNCBhdWRpbyBpbnB1dHMKKwkJICogCTQgdmlkZW8gaW5wdXRzIHBlciBCVDg3OEEgPSAxNiB2aWRlbyBpbnB1dHMKKwkJICogVGhpcyBpcyB0aGUgZmlyc3QgQlQ4NzhBIGNoaXAgb2YgdGhlIEdWLTgwMChTKS4gSXQncyB0aGUKKwkJICogIm1hc3RlciIgY2hpcCBhbmQgaXQgY29udHJvbHMgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuCisJCSAqIGFuYWxvZyBtdWx0aXBsZXhlciAoYSBDRDIyTTM0OTQpIHZpYSBzb21lIEdQSU8gcGlucy4gVGhlCisJCSAqIHNsYXZlcyBzaG91bGQgdXNlIGNhcmQgdHlwZSAweDllIChmb2xsb3dpbmcgdGhpcyBvbmUpLgorCQkgKiBUaGVyZSBpcyBhIEVFUFJPTSBvbiB0aGUgY2FyZCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGhhbmRsZWQuCisJCSAqIFRoZSBhdWRpbyBpbnB1dCBpcyBub3Qgd29ya2luZyB5ZXQuCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTgwMChTKSAobWFzdGVyKSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4ZjEwN2YsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIpLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhNzQzMgk9IDEsCisJCS5ub190ZGE5ODc1CT0gMSwKKwkJLm11eHNlbF9ob29rICAgID0gZ3Y4MDBzX211eHNlbCwKKwl9LAorCQlbQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMXSA9IHsKKwkJLyogQnJ1bm8gQ2hyaXN0byA8YmNocmlzdG9AaW5mLnVmc20uYnI+CisJCSAqCisJCSAqIEdlb1Zpc2lvbiBHVi04MDAoUykgaGFzIDQgQ29uZXhhbnQgRnVzaW9uIDg3OEE6CisJCSAqIAkxIGF1ZGlvIGlucHV0ICBwZXIgQlQ4NzhBID0gNCBhdWRpbyBpbnB1dHMKKwkJICogCTQgdmlkZW8gaW5wdXRzIHBlciBCVDg3OEEgPSAxNiB2aWRlbyBpbnB1dHMKKwkJICogVGhlIDMgb3RoZXIgQlQ4NzhBIGNoaXBzIGFyZSAic2xhdmUiIGNoaXBzIG9mIHRoZSBHVi04MDAoUykKKwkJICogYW5kIHNob3VsZCB1c2UgdGhpcyBjYXJkIHR5cGUuCisJCSAqIFRoZSBhdWRpbyBpbnB1dCBpcyBub3Qgd29ya2luZyB5ZXQuCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwMCwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiksCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5ub190ZGE3NDMyCT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkubXV4c2VsX2hvb2sgICAgPSBndjgwMHNfbXV4c2VsLAorCX0sCisJW0JUVFZfQk9BUkRfUFYxODNdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxODMiLCAvKiAweDlmICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKKwkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnR0dl9udW1fdHZjYXJkcyA9IEFSUkFZX1NJWkUoYnR0dl90dmNhcmRzKTsKQEAgLTMxNTIsNyArMjk1NCw3IEBACiAJCQkgICAgICAgYnR2LT5jLm5yLCBidHYtPmNhcmRpZCAmIDB4ZmZmZiwKIAkJCSAgICAgICAoYnR2LT5jYXJkaWQgPj4gMTYpICYgMHhmZmZmKTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwbGVhc2UgbWFpbCBpZCwgYm9hcmQgbmFtZSBhbmQgIgotCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CisJCQkgICAgICAgInRoZSBjb3JyZWN0IGNhcmQ9IGluc21vZCBvcHRpb24gdG8gbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnXG4iKTsKIAkJfQogCX0KIApAQCAtMzQwMyw4ICszMjA1LDcgQEAKICAqIGhhcyBpdHMgb3duIG11bHRpcGxleGVyICovCiBzdGF0aWMgdm9pZCBlYWdsZV9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogewotCWJ0YW9yKCgyKTw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOwotCWdwaW9fYml0cygzLGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2lucHV0JjddKTsKKwlncGlvX2JpdHMoMywgaW5wdXQgJiAzKTsKIAogCS8qIGNvbXBvc2l0ZSAqLwogCS8qIHNldCBjaHJvbWEgQURDIHRvIHNsZWVwICovCkBAIC0zNTIzLDYgKzMzMjQsMTcgQEAKIC8qIGluaXRpYWxpemF0aW9uIHBhcnQgdHdvIC0tIGFmdGVyIHJlZ2lzdGVyaW5nIGkyYyBidXMgKi8KIHZvaWQgX19kZXZpbml0IGJ0dHZfaW5pdF9jYXJkMihzdHJ1Y3QgYnR0diAqYnR2KQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dmF1ZGlvX2FkZHJzW10gPSB7CisJCUkyQ19BRERSX1REQTg0MjUgICA+PiAxLAorCQlJMkNfQUREUl9URUE2MzAwICAgPj4gMSwKKwkJSTJDX0FERFJfVEVBNjQyMCAgID4+IDEsCisJCUkyQ19BRERSX1REQTk4NDAgICA+PiAxLAorCQlJMkNfQUREUl9UREE5ODV4X0wgPj4gMSwKKwkJSTJDX0FERFJfVERBOTg1eF9IID4+IDEsCisJCUkyQ19BRERSX1REQTk4NzQgICA+PiAxLAorCQlJMkNfQUREUl9QSUMxNkM1NCAgPj4gMSwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OwogCWludCBhZGRyPUFERFJfVU5TRVQ7CiAKIAlidHYtPnR1bmVyX3R5cGUgPSBVTlNFVDsKQEAgLTM2MjksNiArMzQ0MSw5IEBACiAJY2FzZSBCVFRWX0JPQVJEX0tPRElDT01fNDQwMFI6CiAJCWtvZGljb200NDAwcl9pbml0KGJ0dik7CiAJCWJyZWFrOworCWNhc2UgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTOgorCQlndjgwMHNfaW5pdChidHYpOworCQlicmVhazsKIAl9CiAKIAkvKiBwbGwgY29uZmlndXJhdGlvbiAqLwpAQCAtMzY3MCwxMyArMzQ4NSwxMiBAQAogCQlhZGRyID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyOwogCiAJaWYgKFVOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZSkKLQkJaWYoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQorCQlpZiAoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQogCQkJYnR2LT50dW5lcl90eXBlID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlOwogCWlmIChVTlNFVCAhPSB0dW5lcltidHYtPmMubnJdKQogCQlidHYtPnR1bmVyX3R5cGUgPSB0dW5lcltidHYtPmMubnJdOwogCi0JaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQgfHwKLQkgICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciA9PSBVTlNFVCkKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiB0dW5lciBhYnNlbnRcbiIsIGJ0di0+Yy5ucik7CiAJZWxzZSBpZihidHYtPnR1bmVyX3R5cGUgPT0gVU5TRVQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdHVuZXIgdHlwZSB1bnNldFxuIiwgYnR2LT5jLm5yKTsKQEAgLTM2ODQsMTQgKzM0OTgsMzUgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiB0dW5lciB0eXBlPSVkXG4iLCBidHYtPmMubnIsCiAJCSAgICAgICBidHYtPnR1bmVyX3R5cGUpOwogCi0JaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgeworCWlmIChhdXRvbG9hZCAhPSBVTlNFVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHRoZSBhdXRvbG9hZCBvcHRpb24gaXMgb2Jzb2xldGUuXG4iLCBidHYtPmMubnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHVzZSBvcHRpb24gbXNwMzQwMCwgdGRhNzQzMiBvciB0dmF1ZGlvIHRvXG4iLCBidHYtPmMubnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IG92ZXJyaWRlIHdoaWNoIGF1ZGlvIG1vZHVsZSBzaG91bGQgYmUgdXNlZC5cbiIsIGJ0di0+Yy5ucik7CisJfQorCisJaWYgKFVOU0VUID09IGJ0di0+dHVuZXJfdHlwZSkKKwkJYnR2LT50dW5lcl90eXBlID0gVFVORVJfQUJTRU5UOworCisJaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKIAkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKIAorCQkvKiBMb2FkIHR1bmVyIG1vZHVsZSBiZWZvcmUgaXNzdWluZyB0dW5lciBjb25maWcgY2FsbCEgKi8KKwkJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JhZGlvKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFZfV0lUSF9ERU1PRCkpOworCiAJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UVjsKIAkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CiAJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKIAotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JhZGlvKQorCQkJdHVuX3NldHVwLm1vZGVfbWFzayB8PSBUX1JBRElPOworCisJCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChidHYtPnRkYTk4ODdfY29uZikgewpAQCAtMzcwMCwxMCArMzUzNSwxMyBAQAogCQl0ZGE5ODg3X2NmZy50dW5lciA9IFRVTkVSX1REQTk4ODc7CiAJCXRkYTk4ODdfY2ZnLnByaXYgPSAmYnR2LT50ZGE5ODg3X2NvbmY7CiAKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX0NPTkZJRywgJnRkYTk4ODdfY2ZnKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAl9CiAKLQlidHYtPnN2aHMgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnN2aHM7CisJYnR2LT5kaWcgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kaWdfaW4gPworCQkgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cyAtIDEgOiBVTlNFVDsKKwlidHYtPnN2aHMgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnN2aHMgPT0gTk9fU1ZIUyA/CisJCSAgICBVTlNFVCA6IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKIAlpZiAoc3Zoc1tidHYtPmMubnJdICE9IFVOU0VUKQogCQlidHYtPnN2aHMgPSBzdmhzW2J0di0+Yy5ucl07CiAJaWYgKHJlbW90ZVtidHYtPmMubnJdICE9IFVOU0VUKQpAQCAtMzcyMCwzNCArMzU1OCwxMjcgQEAKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19tb2RlX2dwaW8pCiAJCWJ0di0+YXVkaW9fbW9kZV9ncGlvPWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9fbW9kZV9ncGlvOwogCi0JaWYgKCFhdXRvbG9hZCkKLQkJcmV0dXJuOwotCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPT0gVU5TRVQpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXJldHVybjsgIC8qIG5vIHR1bmVyIG9yIHJlbGF0ZWQgZHJpdmVycyB0byBsb2FkICovCiAKKwlpZiAoYnR2LT5oYXNfc2FhNjU4OCB8fCBzYWE2NTg4W2J0di0+Yy5ucl0pIHsKKwkJLyogUHJvYmUgZm9yIFJEUyByZWNlaXZlciBjaGlwICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJMHgyMCA+PiAxLAorCQkJMHgyMiA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInNhYTY1ODgiLCAic2FhNjU4OCIsIGFkZHJzKTsKKwkJYnR2LT5oYXNfc2FhNjU4OCA9IChzZCAhPSBOVUxMKTsKKwl9CisKIAkvKiB0cnkgdG8gZGV0ZWN0IGF1ZGlvL2ZhZGVyIGNoaXBzICovCi0JaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX21zcDM0eHggJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfTVNQMzQwMCwgIk1TUDM0eHgiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tc3AzNHh4X2FsdCAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwX0FMVCwgIk1TUDM0eHggKGFsdGVybmF0ZSBhZGRyZXNzKSIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoIm1zcDM0MDAiKTsKKwkvKiBGaXJzdCBjaGVjayBpZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIGF1ZGlvIGNoaXAgdmlhIGEgbW9kdWxlCisJICAgb3B0aW9uLiAqLwogCi0JaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTk4NzUgJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBOTg3NSwgIlREQTk4NzUiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODc1Iik7CisJc3dpdGNoIChhdWRpb2RldltidHYtPmMubnJdKSB7CisJY2FzZSAtMToKKwkJcmV0dXJuOwkvKiBkbyBub3QgbG9hZCBhbnkgYXVkaW8gbW9kdWxlICovCiAKLQlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMiAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9UREE3NDMyLCAiVERBNzQzMiIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoInRkYTc0MzIiKTsKKwljYXNlIDA6IC8qIGF1dG9kZXRlY3QgKi8KKwkJYnJlYWs7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5uZWVkc190dmF1ZGlvKQotCQlyZXF1ZXN0X21vZHVsZSgidHZhdWRpbyIpOworCWNhc2UgMTogeworCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIG1zcDM0MDAgKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwID4+IDEsCisJCQlJMkNfQUREUl9NU1AzNDAwX0FMVCA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKIAotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQgJiYgYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwkJaWYgKGJ0di0+c2RfbXNwMzR4eCkKKwkJCXJldHVybjsKKwkJZ290byBub19hdWRpbzsKKwl9CisKKwljYXNlIDI6IHsKKwkJLyogVGhlIHVzZXIgc3BlY2lmaWVkIHRoYXQgd2Ugc2hvdWxkIHByb2JlIGZvciB0ZGE3NDMyICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfVERBNzQzMiA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlpZiAodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidGRhNzQzMiIsICJ0ZGE3NDMyIiwgYWRkcnMpKQorCQkJcmV0dXJuOworCQlnb3RvIG5vX2F1ZGlvOworCX0KKworCWNhc2UgMzogeworCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIHR2YXVkaW8gKi8KKwkJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidHZhdWRpbyIsICJ0dmF1ZGlvIiwgdHZhdWRpb19hZGRycyk7CisJCWlmIChidHYtPnNkX3R2YXVkaW8pCisJCQlyZXR1cm47CisJCWdvdG8gbm9fYXVkaW87CisJfQorCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB1bmtub3duIGF1ZGlvZGV2IHZhbHVlIVxuIiwKKwkJCWJ0di0+Yy5ucik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGVyZSB3ZXJlIG5vIG92ZXJyaWRlcywgc28gbm93IHdlIHRyeSB0byBkaXNjb3ZlciB0aGlzIHRocm91Z2ggdGhlCisJICAgY2FyZCBkZWZpbml0aW9uICovCisKKwkvKiBwcm9iZSBmb3IgbXNwMzQwMCBmaXJzdDogdGhpcyBkcml2ZXIgY2FuIGRldGVjdCB3aGV0aGVyIG9yIG5vdAorCSAgIGl0IHJlYWxseSBpcyBhIG1zcDM0MDAsIHNvIGl0IHdpbGwgcmV0dXJuIE5VTEwgd2hlbiB0aGUgZGV2aWNlCisJICAgZm91bmQgaXMgcmVhbGx5IHNvbWV0aGluZyBlbHNlIChlLmcuIGEgdGVhNjMwMCkuICovCisJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX21zcDM0eHgpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwl9IGVsc2UgaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwX0FMVCA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCBhZGRycyk7CisJfQorCisJLyogSWYgd2UgZm91bmQgYSBtc3AzNHh4LCB0aGVuIHdlJ3JlIGRvbmUuICovCisJaWYgKGJ0di0+c2RfbXNwMzR4eCkKKwkJcmV0dXJuOworCisJLyogaXQgbWlnaHQgYWxzbyBiZSBhIHRkYTc0MzIuICovCisJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTc0MzIpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9UREE3NDMyID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWlmICh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJ0ZGE3NDMyIiwgInRkYTc0MzIiLCBhZGRycykpCisJCQlyZXR1cm47CisJfQorCisJLyogTm93IHNlZSBpZiB3ZSBjYW4gZmluZCBvbmUgb2YgdGhlIHR2YXVkaW8gZGV2aWNlcy4gKi8KKwlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIHR2YXVkaW9fYWRkcnMpOworCWlmIChidHYtPnNkX3R2YXVkaW8pCisJCXJldHVybjsKKworbm9fYXVkaW86CisJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBhdWRpbyBhYnNlbnQsIG5vIGF1ZGlvIGRldmljZSBmb3VuZCFcbiIsCisJCQlidHYtPmMubnIpOwogfQogCiAKQEAgLTM4MTksNiArMzc1MCw3IEBACiAJCXByaW50aygiYnR0diVkOiBUZXJyYXRlYyBBY3RpdmUgUmFkaW8gVXBncmFkZSBmb3VuZC5cbiIsCiAJCSAgICAgICBidHYtPmMubnIpOwogCQlidHYtPmhhc19yYWRpbyAgICA9IDE7CisJCWJ0di0+aGFzX3NhYTY1ODggID0gMTsKIAkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwogCX0gZWxzZSB7CiAJCWJ0di0+aGFzX3JhZGlvICAgID0gMDsKQEAgLTQwNjcsMjcgKzM5OTksMjYgQEAKIAkgICAgICAgYnR2LT5oYXNfcmVtb3RlID8gInllcyIgOiAibm8iKTsKIH0KIAotLyogdXNlZCBvbiBWb29kb28gVFYvRk0gKFZvb2RvbyAyMDApLCBTMCB3aXJlZCB0byAweDEwMDAwICovCi12b2lkIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIGludCBub3JtKQorLyoKKyAqIEZvciBWb29kb28gVFYvRk0gYW5kIFZvb2RvbyAyMDAuICBUaGVzZSBjYXJkcycgdHVuZXJzIHVzZSBhIFREQTk4ODAKKyAqIGFuYWxvZyBkZW1vZCwgd2hpY2ggaXMgbm90IEkyQyBjb250cm9sbGVkIGxpa2UgdGhlIG5ld2VyIGFuZCBtb3JlIGNvbW1vbgorICogVERBOTg4NyBzZXJpZXMuICBJbnN0ZWFkIGlzIGhhcyB0d28gdHJpLXN0YXRlIGlucHV0IHBpbnMsIFMwIGFuZCBTMSwKKyAqIHRoYXQgY29udHJvbCB0aGUgSUYgZm9yIHRoZSB2aWRlbyBhbmQgYXVkaW8uICBBcHBhcmVudGx5LCBidHR2IEdQSU8KKyAqIDB4MTAwMDAgaXMgY29ubmVjdGVkIHRvIFMwLiAgUzAgbG93IHNlbGVjdHMgYSAzOC45IE1IeiBWSUYgZm9yIEIvRy9EL0svSQorICogKGkuZS4sIFBBTCkgd2hpbGUgaGlnaCBzZWxlY3RzIDQ1Ljc1IE1IeiBmb3IgTS9OIChpLmUuLCBOVFNDKS4KKyAqLwordTMyIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIHUzMiBncGlvYml0cykKIHsKLQkvKiBmaXggdXAgb3VyIGNhcmQgZW50cnkgKi8KLQlpZihub3JtPT1WNEwyX1NURF9OVFNDKSB7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTU3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211dGU9MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk1N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV0ZT0weDk1N2ZmZjsKLQkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gTlRTQ1xuIik7CisKKwlpZiAoYnR2LT5hdWRpbyA9PSBUVkFVRElPX0lOUFVUX1RVTkVSKSB7CisJCWlmIChidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnY0bDJfaWQgJiBWNEwyX1NURF9NTikKKwkJCWdwaW9iaXRzIHw9IDB4MTAwMDA7CisJCWVsc2UKKwkJCWdwaW9iaXRzICY9IH4weDEwMDAwOwogCX0KLQllbHNlIHsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NDdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV0ZT0weDk0N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTQ3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl8yMDBdLmdwaW9tdXRlPTB4OTQ3ZmZmOwotCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBQQUxcbiIpOwotCX0KLQkvKiBzZXQgR1BJTyBhY2NvcmRpbmcgKi8KLQlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywKLQkJICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbYnR2LT5hdWRpb10pOworCisJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssIGdwaW9iaXRzKTsKKwlyZXR1cm4gZ3Bpb2JpdHM7CiB9CiAKIApAQCAtNDQ2Myw2ICs0Mzk0LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ2NjA1X211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7CisJc3RhdGljIGNvbnN0IHU4IG11eGdwaW9bXSA9IHsgMHgzLCAweDEsIDB4MiwgMHg0LCAweGYsIDB4NywgMHhlLCAweDAsCisJCQkJICAgICAgMHhkLCAweGIsIDB4YywgMHg2LCAweDksIDB4NSwgMHg4LCAweGEgfTsKKworCWdwaW9fYml0cygweDA3ZiwgbXV4Z3Bpb1tpbnB1dF0pOworCiAJLyogcmVzZXQgYWxsIGNvbmVjdGlvbnMgKi8KIAlncGlvX2JpdHMoMHgyMDAsMHgyMDApOwogCW1kZWxheSgxKTsKQEAgLTQ0NzAsNyArNDQwNiw2IEBACiAJbWRlbGF5KDEpOwogCiAJLyogY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gKi8KLQlncGlvX2JpdHMoMHg0ODAsMHgwODApOwogCWdwaW9fYml0cygweDQ4MCwweDQ4MCk7CiAJbWRlbGF5KDEpOwogCWdwaW9fYml0cygweDQ4MCwweDA4MCk7CkBAIC00NzI5LDggKzQ2NjQsNyBAQAogCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ2LCAweDAyLAogCQkgICAgICAoKG1hdHJpeCA9PSAyKSA/IDB4MDMgOiAweDAwKSwgMSk7ICAvKiA5LTEyICovCiAKLQkvKiBTZWxlY3RzIE1VWDAgZm9yIGlucHV0IG9uIHRoZSA4NzggKi8KLQlidGFvcigoMCk8PDUsIH4oMzw8NSksIEJUODQ4X0lGT1JNKTsKKwkvKiA4NzgncyBNVVgwIGlzIGFscmVhZHkgc2VsZWN0ZWQgZm9yIGlucHV0IHZpYSBtdXhzZWwgdmFsdWVzICovCiB9CiAKIApAQCAtNDgxNCw2ICs0NzQ4LDEzMiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6IHNldHRpbmcgaW5wdXQgY2hhbm5lbCB0bzolZFxuIiwgYnR2LT5jLm5yLChpbnQpbXV4KTsKIH0KIAorc3RhdGljIHZvaWQgcGh5dGVjX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJdW5zaWduZWQgaW50IG11eCA9IGlucHV0ICUgNDsKKworCWlmIChpbnB1dCA9PSBidHYtPnN2aHMpCisJCW11eCA9IDA7CisKKwlncGlvX2JpdHMoMHgzLCBtdXgpOworfQorCisvKgorICogR2VvVmlzaW9uIEdWLTgwMChTKSBmdW5jdGlvbnMKKyAqIEJydW5vIENocmlzdG8gPGJjaHJpc3RvQGluZi51ZnNtLmJyPgorKi8KKworLyogVGhpcyBpcyBhIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIGFuYWxvZyBzd2l0Y2gsIHdoaWNoIGRldGVybWluZXMgd2hpY2gKKyAqIGNhbWVyYSBpcyByb3V0ZWQgdG8gd2hpY2ggY29udHJvbGxlci4gIFRoZSBzd2l0Y2ggY29tcHJpc2VzIGFuIFgtYWRkcmVzcworICogKGdwaW8gYml0cyAwLTMsIHJlcHJlc2VudGluZyB0aGUgY2FtZXJhLCByYW5naW5nIGZyb20gMC0xNSksIGFuZCBhCisgKiBZLWFkZHJlc3MgKGdwaW8gYml0cyA0LTYsIHJlcHJlc2VudGluZyB0aGUgY29udHJvbGxlciwgcmFuZ2luZyBmcm9tIDAtMykuCisgKiBBIGRhdGEgdmFsdWUgKGdwaW8gYml0IDE4KSBvZiAnMScgZW5hYmxlcyB0aGUgc3dpdGNoLCBhbmQgJzAnIGRpc2FibGVzCisgKiB0aGUgc3dpdGNoLiAgQSBTVFJPQkUgYml0IChncGlvIGJpdCAxNykgbGF0Y2hlcyB0aGUgZGF0YSB2YWx1ZSBpbnRvIHRoZQorICogc3BlY2lmaWVkIGFkZHJlc3MuIFRoZXJlIGlzIGFsc28gYSBjaGlwIHNlbGVjdCAoZ3BpbyBiaXQgMTYpLgorICogVGhlIGlkZWEgaXMgdG8gc2V0IHRoZSBhZGRyZXNzIGFuZCBjaGlwIHNlbGVjdCB0b2dldGhlciwgYnJpbmcKKyAqIFNUUk9CRSBoaWdoLCB3cml0ZSB0aGUgZGF0YSwgYW5kIGZpbmFsbHkgYnJpbmcgU1RST0JFIGJhY2sgdG8gbG93LgorICovCitzdGF0aWMgdm9pZCBndjgwMHNfd3JpdGUoc3RydWN0IGJ0dHYgKmJ0diwKKwkJCSB1bnNpZ25lZCBjaGFyIHhhZGRyLAorCQkJIHVuc2lnbmVkIGNoYXIgeWFkZHIsCisJCQkgdW5zaWduZWQgY2hhciBkYXRhKSB7CisJLyogT24gdGhlICJtYXN0ZXIiIDg3OEE6CisJKiBHUElPIGJpdHMgMC05IGFyZSB1c2VkIGZvciB0aGUgYW5hbG9nIHN3aXRjaDoKKwkqICAgMDAgLSAwMzoJY2FtZXJhIHNlbGVjdG9yCisJKiAgIDA0IC0gMDY6CTg3OEEgKGNvbnRyb2xsZXIpIHNlbGVjdG9yCisJKiAgIDE2OiAJY3NlbGVjdAorCSogICAxNzoJCXN0cm9iZQorCSogICAxODogCWRhdGEgKDEtPm9uLCAwLT5vZmYpCisJKiAgIDE5OgkJcmVzZXQKKwkqLworCWNvbnN0IHUzMiBBRERSRVNTID0gKCh4YWRkciYweGYpIHwgKHlhZGRyJjMpPDw0KTsKKwljb25zdCB1MzIgQ1NFTEVDVCA9IDE8PDE2OworCWNvbnN0IHUzMiBTVFJPQkUgPSAxPDwxNzsKKwljb25zdCB1MzIgREFUQSA9IGRhdGE8PDE4OworCisJZ3Bpb19iaXRzKDB4MTAwN2YsIEFERFJFU1MgfCBDU0VMRUNUKTsJLyogd3JpdGUgQUREUkVTUyBhbmQgQ1NFTEVDVCAqLworCWdwaW9fYml0cygweDIwMDAwLCBTVFJPQkUpOwkJLyogU1RST0JFIGhpZ2ggKi8KKwlncGlvX2JpdHMoMHg0MDAwMCwgREFUQSk7CQkvKiB3cml0ZSBEQVRBICovCisJZ3Bpb19iaXRzKDB4MjAwMDAsIH5TVFJPQkUpOwkJLyogU1RST0JFIGxvdyAqLworfQorCisvKgorICogR2VvVmlzaW9uIEdWLTgwMChTKSBtdXhzZWwKKyAqCisgKiBFYWNoIG9mIHRoZSA0IGNhcmRzIChjb250cm9sbGVycykgdXNlIHRoaXMgZnVuY3Rpb24uCisgKiBUaGUgY29udHJvbGxlciB1c2luZyB0aGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIGlucHV0IHRocm91Z2ggdGhlIEdQSU8gcGlucworICogb2YgdGhlICJtYXN0ZXIiIGNhcmQuIEEgcG9pbnRlciB0byB0aGlzIGNhcmQgaXMgc3RvcmVkIGluIG1hc3RlcltidHYtPmMubnJdLgorICoKKyAqIFRoZSBwYXJhbWV0ZXIgJ2lucHV0JyBpcyB0aGUgcmVxdWVzdGVkIGNhbWVyYSBudW1iZXIgKDAtNCkgb24gdGhlIGNvbnRyb2xsZXIuCisgKiBUaGUgbWFwIGFycmF5IGhhcyB0aGUgYWRkcmVzcyBvZiBlYWNoIGlucHV0LiBOb3RlIHRoYXQgdGhlIGFkZHJlc3NlcyBpbiB0aGUKKyAqIGFycmF5IGFyZSBpbiB0aGUgc2VxdWVuY2UgdGhlIG9yaWdpbmFsIEdlb1Zpc2lvbiBkcml2ZXIgdXNlcywgdGhhdCBpcywgc2V0CisgKiBldmVyeSBjb250cm9sbGVyIHRvIGlucHV0IDAsIHRoZW4gdG8gaW5wdXQgMSwgMiwgMywgcmVwZWF0LiBUaGlzIG1lYW5zIHRoYXQKKyAqIHRoZSBwaHlzaWNhbCAiY2FtZXJhIDEiIGNvbm5lY3RvciBjb3JyZXNwb25kcyB0byBjb250cm9sbGVyIDAgaW5wdXQgMCwKKyAqICJjYW1lcmEgMiIgY29ycmVzcG9uZHMgdG8gY29udHJvbGxlciAxIGlucHV0IDAsIGFuZCBzbyBvbi4KKyAqCisgKiBBZnRlciBnZXR0aW5nIHRoZSBpbnB1dCBhZGRyZXNzLCB0aGUgZnVuY3Rpb24gdGhlbiB3cml0ZXMgdGhlIGFwcHJvcHJpYXRlCisgKiBkYXRhIHRvIHRoZSBhbmFsb2cgc3dpdGNoLCBhbmQgaG91c2VrZWVwcyB0aGUgbG9jYWwgY29weSBvZiB0aGUgc3dpdGNoCisgKiBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3Y4MDBzX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IGJ0dHYgKm1jdGxyOworCWNoYXIgKnN3X3N0YXR1czsKKwlpbnQgeGFkZHIsIHlhZGRyOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFwWzRdWzRdID0geyB7IDB4MCwgMHg0LCAweGEsIDB4NiB9LAorCQkJCQkgIHsgMHgxLCAweDUsIDB4YiwgMHg3IH0sCisJCQkJCSAgeyAweDIsIDB4OCwgMHhjLCAweGUgfSwKKwkJCQkJICB7IDB4MywgMHg5LCAweGQsIDB4ZiB9IH07CisJaW5wdXQgPSBpbnB1dCU0OworCW1jdGxyID0gbWFzdGVyW2J0di0+Yy5ucl07CisJaWYgKG1jdGxyID09IE5VTEwpIHsKKwkJLyogZG8gbm90aGluZyB1bnRpbCB0aGUgIm1hc3RlciIgaXMgZGV0ZWN0ZWQgKi8KKwkJcmV0dXJuOworCX0KKwl5YWRkciA9IChidHYtPmMubnIgLSBtY3Rsci0+Yy5ucikgJiAzOworCXN3X3N0YXR1cyA9IChjaGFyICopKCZtY3Rsci0+bWJveF93ZSk7CisJeGFkZHIgPSBtYXBbeWFkZHJdW2lucHV0XSAmIDB4ZjsKKworCS8qIENoZWNrIGlmIHRoZSBjb250cm9sbGVyL2NhbWVyYSBwYWlyIGhhcyBjaGFuZ2VkLCBpZ25vcmUgb3RoZXJ3aXNlICovCisJaWYgKHN3X3N0YXR1c1t5YWRkcl0gIT0geGFkZHIpIHsKKwkJLyogZGlzYWJsZSB0aGUgb2xkIHN3aXRjaCwgZW5hYmxlIHRoZSBuZXcgb25lIGFuZCBzYXZlIHN0YXR1cyAqLworCQlndjgwMHNfd3JpdGUobWN0bHIsIHN3X3N0YXR1c1t5YWRkcl0sIHlhZGRyLCAwKTsKKwkJc3dfc3RhdHVzW3lhZGRyXSA9IHhhZGRyOworCQlndjgwMHNfd3JpdGUobWN0bHIsIHhhZGRyLCB5YWRkciwgMSk7CisJfQorfQorCisvKiBHZW9WaXNpb24gR1YtODAwKFMpICJtYXN0ZXIiIGNoaXAgaW5pdCAqLworc3RhdGljIHZvaWQgZ3Y4MDBzX2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKK3sKKwljaGFyICpzd19zdGF0dXMgPSAoY2hhciAqKSgmYnR2LT5tYm94X3dlKTsKKwlpbnQgaXg7CisKKwlncGlvX2lub3V0KDB4ZjEwN2YsIDB4ZjEwN2YpOworCWdwaW9fd3JpdGUoMTw8MTkpOyAvKiByZXNldCB0aGUgYW5hbG9nIE1VWCAqLworCWdwaW9fd3JpdGUoMCk7CisKKwkvKiBQcmVzZXQgY2FtZXJhIDAgdG8gdGhlIDQgY29udHJvbGxlcnMgKi8KKwlmb3IgKGl4ID0gMDsgaXggPCA0OyBpeCsrKSB7CisJCXN3X3N0YXR1c1tpeF0gPSBpeDsKKwkJZ3Y4MDBzX3dyaXRlKGJ0diwgaXgsIGl4LCAxKTsKKwl9CisKKwkvKiBJbnB1dHMgb24gdGhlICJtYXN0ZXIiIGNvbnRyb2xsZXIgbmVlZCB0aGlzIGJyaWdodG5lc3MgZml4ICovCisJYnR0dl9JMkNXcml0ZShidHYsIDB4MTgsIDB4NSwgMHg5MCwgMSk7CisKKwlpZiAoYnR2LT5jLm5yID4gQlRUVl9NQVgtNCkKKwkJcmV0dXJuOworCS8qCisJICogU3RvcmUgdGhlICJtYXN0ZXIiIGNvbnRyb2xsZXIgcG9pbnRlciBpbiB0aGUgbWFzdGVyCisJICogYXJyYXkgZm9yIGxhdGVyIHVzZSBpbiB0aGUgbXV4c2VsIGZ1bmN0aW9uLgorCSAqLworCW1hc3RlcltidHYtPmMubnJdICAgPSBidHY7CisJbWFzdGVyW2J0di0+Yy5ucisxXSA9IGJ0djsKKwltYXN0ZXJbYnR2LT5jLm5yKzJdID0gYnR2OworCW1hc3RlcltidHYtPmMubnIrM10gPSBidHY7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBtb3RoZXJib2FyZCBjaGlwc2V0IHNwZWNpZmljIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggYzcxZjM5NC4uN2E4Y2EwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAKIHVuc2lnbmVkIGludCBidHR2X251bTsJCQkvKiBudW1iZXIgb2YgQnQ4NDhzIGluIHVzZSAqLwotc3RydWN0IGJ0dHYgYnR0dnNbQlRUVl9NQVhdOworc3RydWN0IGJ0dHYgKmJ0dHZzW0JUVFZfTUFYXTsKIAogdW5zaWduZWQgaW50IGJ0dHZfZGVidWc7CiB1bnNpZ25lZCBpbnQgYnR0dl92ZXJib3NlID0gMTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwotCXN0cnVjdCBidHR2ICpidHYgPSBkZXZfZ2V0X2RydmRhdGEodmZkLT5wYXJlbnQpOworCXN0cnVjdCBidHR2ICpidHYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBidHYgPyBidHYtPmMudHlwZSA6IFVOU0VUKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjYXJkLCBTX0lSVUdPLCBzaG93X2NhcmQsIE5VTEwpOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlpbnQgdGFibGVfaWR4ID0gYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5zcmFtOwogCWludCBmc2MgICAgICAgPSBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLkZzYzsKIAotCWlmIChVTlNFVCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSkgeworCWlmIChidHYtPmlucHV0ID09IGJ0di0+ZGlnKSB7CiAJCWRwcmludGsoImJ0dHYlZDogbG9hZCBkaWdpdGFsIHRpbWluZyB0YWJsZSAodGFibGVfaWR4PSVkKVxuIiwKIAkJCWJ0di0+Yy5ucix0YWJsZV9pZHgpOwogCkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCQlidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9FX0NPTlRST0wpOwogCQlidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9PX0NPTlRST0wpOwogCX0KLQltdXggPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtpbnB1dF0gJiAzOworCW11eCA9IGJ0dHZfbXV4c2VsKGJ0diwgaW5wdXQpOwogCWJ0YW9yKG11eDw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOwogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiB2aWRlbyBtdXg6IGlucHV0PSVkIG11eD0lZFxuIiwKIAkJYnR2LT5jLm5yLGlucHV0LG11eCk7CkBAIC0xMTYzLDcgKzExNjMsNiBAQAogewogCWludCBncGlvX3ZhbCwgc2lnbmFsOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKIAogCWdwaW9faW5vdXQoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywKIAkJICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzayk7CkBAIC0xMTgwLDcgKzExNzksMTYgQEAKIAllbHNlCiAJCWdwaW9fdmFsID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbXV4W2lucHV0XTsKIAotCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLCBncGlvX3ZhbCk7CisJc3dpdGNoIChidHYtPmMudHlwZSkgeworCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl9GTToKKwljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfMjAwOgorCQlncGlvX3ZhbCA9IGJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0diwgZ3Bpb192YWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLCBncGlvX3ZhbCk7CisJfQorCiAJaWYgKGJ0dHZfZ3BpbykKIAkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwgYXVkaW9fbW9kZXNbbXV0ZSA/IDQgOiBpbnB1dF0pOwogCWlmIChpbl9pbnRlcnJ1cHQoKSkKQEAgLTExODgsOSArMTE5Niw4IEBACiAKIAljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fTVVURTsKIAljdHJsLnZhbHVlID0gYnR2LT5tdXRlOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKLQljID0gYnR2LT5pMmNfbXNwMzR4eF9jbGllbnQ7Ci0JaWYgKGMpIHsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgc19jdHJsLCAmY3RybCk7CisJaWYgKGJ0di0+c2RfbXNwMzR4eCkgewogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCS8qIE5vdGU6IHRoZSBpbnB1dHMgdHVuZXIvcmFkaW8vZXh0ZXJuL2ludGVybiBhcmUgdHJhbnNsYXRlZApAQCAtMTIyOSwxNSArMTIzNiwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVF9ERUZBVUxUOwotCQljLT5kcml2ZXItPmNvbW1hbmQoYywgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoYnR2LT5zZF9tc3AzNHh4LCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KLQljID0gYnR2LT5pMmNfdHZhdWRpb19jbGllbnQ7Ci0JaWYgKGMpIHsKKwlpZiAoYnR2LT5zZF90dmF1ZGlvKSB7CiAJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJcm91dGUuaW5wdXQgPSBpbnB1dDsKIAkJcm91dGUub3V0cHV0ID0gMDsKLQkJYy0+ZHJpdmVyLT5jb21tYW5kKGMsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQl2NGwyX3N1YmRldl9jYWxsKGJ0di0+c2RfdHZhdWRpbywgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc3LDcgKzEyODMsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotYnR0dl9jcm9wX3Jlc2V0KHN0cnVjdCBidHR2X2Nyb3AgKmMsIGludCBub3JtKQorYnR0dl9jcm9wX3Jlc2V0KHN0cnVjdCBidHR2X2Nyb3AgKmMsIHVuc2lnbmVkIGludCBub3JtKQogewogCWMtPnJlY3QgPSBidHR2X3R2bm9ybXNbbm9ybV0uY3JvcGNhcC5kZWZyZWN0OwogCWJ0dHZfY3JvcF9jYWxjX2xpbWl0cyhjKTsKQEAgLTEyOTAsMTYgKzEyOTYsMTMgQEAKIAljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKIAl2NGwyX3N0ZF9pZCBpZDsKIAotCWlmIChub3JtIDwgMCB8fCBub3JtID49IEJUVFZfVFZOT1JNUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJQlVHX09OKG5vcm0gPj0gQlRUVl9UVk5PUk1TKTsKKwlCVUdfT04oYnR2LT50dm5vcm0gPj0gQlRUVl9UVk5PUk1TKTsKIAogCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbbm9ybV07CiAKLQlpZiAoYnR2LT50dm5vcm0gPCAwIHx8Ci0JICAgIGJ0di0+dHZub3JtID49IEJUVFZfVFZOT1JNUyB8fAotCSAgICAwICE9IG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLAotCQkJJnR2bm9ybS0+Y3JvcGNhcCwKLQkJCXNpemVvZiAodHZub3JtLT5jcm9wY2FwKSkpIHsKKwlpZiAoIW1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAorCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KIApAQCAtMTMyMiwxMSArMTMyNSwxMSBAQAogCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKIAljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CiAJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMDoKLQkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LG5vcm0pOworCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsIGdwaW9fcmVhZCgpKTsKIAkJYnJlYWs7CiAJfQogCWlkID0gdHZub3JtLT52NGwyX2lkOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX1NURCwgJmlkKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfc3RkLCBpZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTAsOCArMTM1Myw4IEBACiAJfSBlbHNlIHsKIAkJdmlkZW9fbXV4KGJ0dixpbnB1dCk7CiAJfQotCWF1ZGlvX2lucHV0KGJ0diwoaW5wdXQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciA/Ci0JCSAgICAgICBUVkFVRElPX0lOUFVUX1RVTkVSIDogVFZBVURJT19JTlBVVF9FWFRFUk4pKTsKKwlhdWRpb19pbnB1dChidHYsIChidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UICYmIGlucHV0ID09IDApID8KKwkJCSBUVkFVRElPX0lOUFVUX1RVTkVSIDogVFZBVURJT19JTlBVVF9FWFRFUk4pOwogCXNldF90dm5vcm0oYnR2LCBub3JtKTsKIH0KIApAQCAtMTQ3MCw3ICsxNDczLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19DVFJMLCBjKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGdfY3RybCwgYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9QUklWQVRFX0NIUk9NQV9BR0M6CkBAIC0xNTQ0LDEyICsxNTQ3LDEyIEBACiAJCWlmIChidHYtPnZvbHVtZV9ncGlvKQogCQkJYnR2LT52b2x1bWVfZ3BpbyhidHYsIGMtPnZhbHVlKTsKIAotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19DVFJMLCBjKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIHNfY3RybCwgYyk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0NUUkwsIGMpOworCQlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgc19jdHJsLCBjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ0hST01BX0FHQzoKQEAgLTE4ODgsMjAgKzE4OTEsMTUgQEAKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwotCXVuc2lnbmVkIGludCBuOworCWludCBuOwogCi0JbiA9IGktPmluZGV4OwotCi0JaWYgKG4gPj0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCisJaWYgKGktPmluZGV4ID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQotCWktPmluZGV4ICAgID0gbjsKIAlpLT50eXBlICAgICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaS0+YXVkaW9zZXQgPSAxOwogCi0JaWYgKGktPmluZGV4ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpIHsKKwlpZiAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCAmJiBpLT5pbmRleCA9PSAwKSB7CiAJCXNwcmludGYoaS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAkJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CiAJCWktPnR1bmVyID0gMDsKQEAgLTE5NjUsMTQgKzE5NjMsMTQgQEAKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZidHYtPmxvY2spOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJaWYgKGJ0di0+YXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3BpbyhidHYsIHQsIDEpOwpAQCAtMjAxNyw3ICsyMDE1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAlidHYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmKTsKIAlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQl0ZWE1NzU3X3NldF9mcmVxKGJ0diwgYnR2LT5mcmVxKTsKIAltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CkBAIC0yMDMxLDcgKzIwMjksNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiA9PT09PT09PSAgU1RBUlQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PVxuIiwKIAkJCWJ0di0+Yy5uciwgYnR2LT5jLm5yKTsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGxvZ19zdGF0dXMpOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogPT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAgICMlZCAgPT09PT09PT1cbiIsCiAJCQlidHYtPmMubnIsIGJ0di0+Yy5ucik7CiAJcmV0dXJuIDA7CkBAIC0yNjU5LDggKzI2NTcsNyBAQAogCWlmIChub19vdmVybGF5IDw9IDApCiAJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciAhPSBVTlNFVCAmJgotCSAgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyICE9IFRVTkVSX0FCU0VOVCkKKwlpZiAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTI3LDEzICsyOTI0LDkgQEAKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBmOwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwotCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7CiAKLQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCgmcywgYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS52NGwyX2lkLAotCQkJCSBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLm5hbWUpOwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUgPSBzLmZyYW1lcGVyaW9kOworCXY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZChidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnY0bDJfaWQsCisJCQkJICAgICZwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk0MywxNSArMjkzNiwxNCBAQAogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgZ190dW5lciwgdCk7CiAJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CiAJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CiAJdC0+dHlwZSAgICAgICA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwpAQCAtMzIxMiwyOSArMzIwNCwxOSBAQAogc3RhdGljIGludCBidHR2X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IE5VTEw7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGJ0dHZfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWZvciAoaSA9IDA7IGkgPCBidHR2X251bTsgaSsrKSB7Ci0JCWlmIChidHR2c1tpXS52aWRlb19kZXYgJiYKLQkJICAgIGJ0dHZzW2ldLnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWJ0diA9ICZidHR2c1tpXTsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoYnR0dnNbaV0udmJpX2RldiAmJgotCQkgICAgYnR0dnNbaV0udmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWJ0diA9ICZidHR2c1tpXTsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKE5VTEwgPT0gYnR2KSB7CisJaWYgKGJ0di0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgeworCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCX0gZWxzZSBpZiAoYnR2LT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgeworCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwl9IGVsc2UgeworCQlXQVJOX09OKDEpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTM0MjQsMjAgKzM0MDYsMTQgQEAKIHN0YXRpYyBpbnQgcmFkaW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gTlVMTDsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgYnR0dl9maCAqZmg7Ci0JdW5zaWduZWQgaW50IGk7CiAKIAlkcHJpbnRrKCJidHR2OiBvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZm9yIChpID0gMDsgaSA8IGJ0dHZfbnVtOyBpKyspIHsKLQkJaWYgKGJ0dHZzW2ldLnJhZGlvX2RldiAmJiBidHR2c1tpXS5yYWRpb19kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlidHYgPSAmYnR0dnNbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoTlVMTCA9PSBidHYpIHsKKwlXQVJOX09OKGJ0di0+cmFkaW9fZGV2ICYmIGJ0di0+cmFkaW9fZGV2LT5taW5vciAhPSBtaW5vcik7CisJaWYgKCFidHYtPnJhZGlvX2RldiB8fCBidHYtPnJhZGlvX2Rldi0+bWlub3IgIT0gbWlub3IpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zNDU4LDcgKzM0MzQsNyBAQAogCiAJYnR2LT5yYWRpb191c2VyKys7CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LEFVRENfU0VUX1JBRElPLE5VTEwpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc19yYWRpbyk7CiAJYXVkaW9faW5wdXQoYnR2LFRWQVVESU9fSU5QVVRfUkFESU8pOwogCiAJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwpAQCAtMzQ3OCw3ICszNDU0LDcgQEAKIAogCWJ0di0+cmFkaW9fdXNlci0tOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9DTE9TRSwgJmNtZCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUwMywxNiArMzQ3OSwxNSBAQAogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKIAl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCiAJaWYgKGJ0di0+YXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3BpbyhidHYsIHQsIDApOwpAQCAtMzU1NCw3ICszNTI5LDcgQEAKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19UVU5FUiwgdCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNSw3ICszNTkwLDcgQEAKIAljbWQuaW5zdGFuY2UgPSBmaWxlOwogCWNtZC5yZXN1bHQgPSAtRU5PREVWOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9SRUFELCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFJEU19DTURfUkVBRCwgJmNtZCk7CiAKIAlyZXR1cm4gY21kLnJlc3VsdDsKIH0KQEAgLTM2MjgsNyArMzYwMyw3IEBACiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CiAJY21kLnJlc3VsdCA9IC1FTk9ERVY7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9QT0xMLCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFJEU19DTURfUE9MTCwgJmNtZCk7CiAKIAlyZXR1cm4gY21kLnJlc3VsdDsKIH0KQEAgLTM3MTIsMTQgKzM2ODcsMTQgQEAKIAl1bnNpZ25lZCBpbnQgaSxqLG47CiAKIAlwcmludGsoIiVzOiByaXNjIGRpc2FzbTogJXAgW2RtYT0weCUwOGx4XVxuIiwKLQkgICAgICAgYnR2LT5jLm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKKwkgICAgICAgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewotCQlwcmludGsoIiVzOiAgIDB4JWx4OiAiLCBidHYtPmMubmFtZSwKKwkJcHJpbnRrKCIlczogICAweCVseDogIiwgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZykocmlzYy0+ZG1hICsgKGk8PDIpKSk7CiAJCW4gPSBidHR2X3Jpc2NfZGVjb2RlKGxlMzJfdG9fY3B1KHJpc2MtPmNwdVtpXSkpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKQogCQkJcHJpbnRrKCIlczogICAweCVseDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAotCQkJICAgICAgIGJ0di0+Yy5uYW1lLCAodW5zaWduZWQgbG9uZykocmlzYy0+ZG1hICsgKChpK2opPDwyKSksCisJCQkgICAgICAgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoKGkraik8PDIpKSwKIAkJCSAgICAgICByaXNjLT5jcHVbaStqXSwgaik7CiAJCWlmICgwID09IHJpc2MtPmNwdVtpXSkKIAkJCWJyZWFrOwpAQCAtNDE5NSw5ICs0MTcwLDEwIEBACiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7CiAJdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJmJ0di0+Yy5wY2ktPmRldjsKKwl2ZmQtPnY0bDJfZGV2ID0gJmJ0di0+Yy52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZmQtPmRlYnVnICAgPSBidHR2X2RlYnVnOworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgYnR2KTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiQlQlZCVzICVzICglcykiLAogCQkgYnR2LT5pZCwgKGJ0di0+aWQ9PTg0OCAmJiBidHYtPnJldmlzaW9uPT0weDEyKSA/ICJBIiA6ICIiLAogCQkgdHlwZV9uYW1lLCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUpOwpAQCAtNDMwNywxMCArNDI4MywxNCBAQAogCWlmIChidHR2X251bSA9PSBCVFRWX01BWCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogQnQ4eHggY2FyZCBmb3VuZCAoJWQpLlxuIiwgYnR0dl9udW0pOwotCWJ0dj0mYnR0dnNbYnR0dl9udW1dOwotCW1lbXNldChidHYsMCxzaXplb2YoKmJ0dikpOworCWJ0dHZzW2J0dHZfbnVtXSA9IGJ0diA9IGt6YWxsb2Moc2l6ZW9mKCpidHYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnR2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJidHR2OiBvdXQgb2YgbWVtb3J5LlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlidHYtPmMubnIgID0gYnR0dl9udW07Ci0Jc3ByaW50ZihidHYtPmMubmFtZSwiYnR0diVkIixidHYtPmMubnIpOworCXNucHJpbnRmKGJ0di0+Yy52NGwyX2Rldi5uYW1lLCBzaXplb2YoYnR2LT5jLnY0bDJfZGV2Lm5hbWUpLAorCQkJImJ0dHYlZCIsIGJ0di0+Yy5ucik7CiAKIAkvKiBpbml0aWFsaXplIHN0cnVjdHMgLyBmaWxsIGluIGRlZmF1bHRzICovCiAJbXV0ZXhfaW5pdCgmYnR2LT5sb2NrKTsKQEAgLTQzNDcsNyArNDMyNyw3IEBACiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCksCiAJCQkJcGNpX3Jlc291cmNlX2xlbihkZXYsMCksCi0JCQkJYnR2LT5jLm5hbWUpKSB7CisJCQkJYnR2LT5jLnY0bDJfZGV2Lm5hbWUpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogY2FuJ3QgcmVxdWVzdCBpb21lbSAoMHglbGx4KS5cbiIsCiAJCSAgICAgICBidHYtPmMubnIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCkpOwpAQCAtNDM1NSw3ICs0MzM1LDEyIEBACiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldik7CiAJcGNpX3NldF9jb21tYW5kKGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKGRldixidHYpOworCisJcmVzdWx0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmYnR2LT5jLnY0bDJfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXG4iLCBidHYtPmMubnIpOworCQlnb3RvIGZhaWwwOworCX0KIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYnR2LT5yZXZpc2lvbik7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJmxhdCk7CkBAIC00Mzc5LDcgKzQzNjQsNyBAQAogCS8qIGRpc2FibGUgaXJxcywgcmVnaXN0ZXIgaXJxIGhhbmRsZXIgKi8KIAlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKIAlyZXN1bHQgPSByZXF1ZXN0X2lycShidHYtPmMucGNpLT5pcnEsIGJ0dHZfaXJxLAotCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOworCSAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGJ0di0+Yy52NGwyX2Rldi5uYW1lLCAodm9pZCAqKWJ0dik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHR2JWQ6IGNhbid0IGdldCBJUlEgJWRcbiIsCiAJCSAgICAgICBidHR2X251bSxidHYtPmMucGNpLT5pcnEpOwpAQCAtNDQ2MywyMSArNDQ0OCwyNCBAQAogCWJ0dHZfbnVtKys7CiAJcmV0dXJuIDA7CiAKLSBmYWlsMjoKK2ZhaWwyOgogCWZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOwogCi0gZmFpbDE6CitmYWlsMToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZidHYtPmMudjRsMl9kZXYpOworCitmYWlsMDoKIAlpZiAoYnR2LT5idDg0OF9tbWlvKQogCQlpb3VubWFwKGJ0di0+YnQ4NDhfbW1pbyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChidHYtPmMucGNpLDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihidHYtPmMucGNpLDApKTsKLQlwY2lfc2V0X2RydmRhdGEoZGV2LE5VTEwpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidHR2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHRvX2J0dHYodjRsMl9kZXYpOwogCiAJaWYgKGJ0dHZfdmVyYm9zZSkKIAkJcHJpbnRrKCJidHR2JWQ6IHVubG9hZGluZ1xuIixidHYtPmMubnIpOwpAQCAtNDUxMSwxNCArNDQ5OSwxOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoYnR2LT5jLnBjaSwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oYnR2LT5jLnBjaSwwKSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmYnR2LT5jLnY0bDJfZGV2KTsKKwlidHR2c1tidHYtPmMubnJdID0gTlVMTDsKKwlrZnJlZShidHYpOworCiAJcmV0dXJuOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJ0dHZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdG9fYnR0dih2NGwyX2Rldik7CiAJc3RydWN0IGJ0dHZfYnVmZmVyX3NldCBpZGxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ1NTMsNyArNDU0NSw4IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwppbmRleCBiY2QyY2QyLi5hOTlkOTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KIHN0YXRpYyBpbnQgaTJjX2RlYnVnOwogc3RhdGljIGludCBpMmNfaHc7CiBzdGF0aWMgaW50IGkyY19zY2FuOwpAQCAtMjMxLDcgKzIyOSw4IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKIApAQCAtMjY1LDUyICsyNjQsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEkyQyBmdW5jdGlvbnMgLSBjb21tb24gc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidHR2ICpidHYgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0JaW50IGFkZHI9QUREUl9VTlNFVDsKLQotCi0JaWYgKEFERFJfVU5TRVQgIT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyKQotCQlhZGRyID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyOwotCi0KLQlpZiAoYnR0dl9kZWJ1ZykKLQkJcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCi0JCQlidHYtPmMubnIsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLAotCQkJY2xpZW50LT5uYW1lKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQotCQlyZXR1cm4gMDsKLQotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0gSTJDX0RSSVZFUklEX01TUDM0MDApCi0JCWJ0di0+aTJjX21zcDM0eHhfY2xpZW50ID0gY2xpZW50OwotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0gSTJDX0RSSVZFUklEX1RWQVVESU8pCi0JCWJ0di0+aTJjX3R2YXVkaW9fY2xpZW50ID0gY2xpZW50OwotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKLQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCQlpZiAoKGFkZHI9PUFERFJfVU5TRVQpIHx8Ci0JCQkJKGFkZHI9PWNsaWVudC0+YWRkcikpIHsKLQotCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWIHwgVF9SQURJTzsKLQkJCXR1bl9zZXR1cC50eXBlID0gYnR2LT50dW5lcl90eXBlOwotCQkJdHVuX3NldHVwLmFkZHIgPSBhZGRyOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7Ci0JCX0KLQotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGJ0dHZfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKDAgIT0gYnR2LT5pMmNfcmMpCi0JCXJldHVybjsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZidHYtPmMuaTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQotCiAvKiByZWFkIEkyQyAqLwogaW50IGJ0dHZfSTJDUmVhZChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKnByb2JlX2ZvcikKIHsKQEAgLTQxNywyMSArMzcwLDE1IEBACiAJCWJ0di0+Yy5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmYnR2LT5pMmNfYWxnbzsKIAl9CiAJYnR2LT5jLmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JYnR2LT5jLmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKLQlidHYtPmMuaTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKIAogCWJ0di0+Yy5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmJ0di0+Yy5wY2ktPmRldjsKIAlzbnByaW50ZihidHYtPmMuaTJjX2FkYXAubmFtZSwgc2l6ZW9mKGJ0di0+Yy5pMmNfYWRhcC5uYW1lKSwKIAkJICJidCVkICMlZCBbJXNdIiwgYnR2LT5pZCwgYnR2LT5jLm5yLAogCQkgYnR2LT51c2VfaTJjX2h3ID8gImh3IiA6ICJzdyIpOwogCi0JaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOworCWkyY19zZXRfYWRhcGRhdGEoJmJ0di0+Yy5pMmNfYWRhcCwgJmJ0di0+Yy52NGwyX2Rldik7CiAJYnR2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnR2LT5jLmkyY19hZGFwOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdmlkZW8pCi0JCWJ0di0+Yy5pMmNfYWRhcC5jbGFzcyAmPSB+STJDX0NMQVNTX1RWX0FOQUxPRzsKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZHZiKQotCQlidHYtPmMuaTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CiAKIAlpZiAoYnR2LT51c2VfaTJjX2h3KSB7CiAJCWJ0di0+aTJjX3JjID0gaTJjX2FkZF9hZGFwdGVyKCZidHYtPmMuaTJjX2FkYXApOwpAQCAtNDQxLDcgKzM4OCw3IEBACiAJCWJ0di0+aTJjX3JjID0gaTJjX2JpdF9hZGRfYnVzKCZidHYtPmMuaTJjX2FkYXApOwogCX0KIAlpZiAoMCA9PSBidHYtPmkyY19yYyAmJiBpMmNfc2NhbikKLQkJZG9faTJjX3NjYW4oYnR2LT5jLm5hbWUsJmJ0di0+aTJjX2NsaWVudCk7CisJCWRvX2kyY19zY2FuKGJ0di0+Yy52NGwyX2Rldi5uYW1lLCAmYnR2LT5pMmNfY2xpZW50KTsKIAlyZXR1cm4gYnR2LT5pMmNfcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKaW5kZXggZWNmMDc5OC4uYTZhNTQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKQEAgLTQ3LDcgKzQ3LDEwIEBACiB7CiAJaWYgKGNhcmQgPj0gYnR0dl9udW0pCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBidHR2c1tjYXJkXS5jLnBjaTsKKwlpZiAoIWJ0dHZzW2NhcmRdKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidHR2c1tjYXJkXS0+Yy5wY2k7CiB9CiAKIApAQCAtNTksNyArNjIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnR2ID0gJmJ0dHZzW2NhcmRdOworCWJ0diA9IGJ0dHZzW2NhcmRdOworCWlmICghYnR2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWdwaW9faW5vdXQobWFzayxkYXRhKTsKIAlpZiAoYnR0dl9ncGlvKQogCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJleHRlcm4gZW5hYmxlIik7CkBAIC03NCw3ICs4MCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJ0diA9ICZidHR2c1tjYXJkXTsKKwlidHYgPSBidHR2c1tjYXJkXTsKKwlpZiAoIWJ0dikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZihidHYtPnNodXRkb3duKSB7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTQsNyArMTAyLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnR2ID0gJmJ0dHZzW2NhcmRdOworCWJ0diA9IGJ0dHZzW2NhcmRdOworCWlmICghYnR2KQorCQlyZXR1cm4gLUVOT0RFVjsKIAogLyogcHJpb3Igc2V0dGluZyBCVDg0OF9HUElPX1JFR19JTlAgaXMgKHByb2JhYmx5KSBub3QgbmVlZGVkCiAgICBiZWNhdXNlIGRpcmVjdCBpbnB1dCBpcyBzZXQgb24gaW5pdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKaW5kZXggNWIxYjhlNC4uZDE2YWYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAlpbnQgdG90YWx3aWR0aCAgID0gdHZub3JtLT50b3RhbHdpZHRoOwogCWludCBzY2FsZWR0d2lkdGggPSB0dm5vcm0tPnNjYWxlZHR3aWR0aDsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSA8IDApIHsKKwlpZiAoYnR2LT5pbnB1dCA9PSBidHYtPmRpZykgewogCQlzd2lkdGggICAgICAgPSA3MjA7CiAJCXRvdGFsd2lkdGggICA9IDg1ODsKIAkJc2NhbGVkdHdpZHRoID0gODU4OwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJICAgICAmJiBjcm9wLT53aWR0aCA9PSB0dm5vcm0tPmNyb3BjYXAuZGVmcmVjdC53aWR0aAogCSAgICAgJiYgY3JvcC0+aGVpZ2h0ID09IHR2bm9ybS0+Y3JvcGNhcC5kZWZyZWN0LmhlaWdodAogCSAgICAgJiYgd2lkdGggPD0gdHZub3JtLT5zd2lkdGggLyogc2VlIFBBTC1OYyBldCBhbCAqLykKLQkgICAgfHwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbYnR2LT5pbnB1dF0gPCAwKSB7CisJICAgIHx8IGJ0di0+aW5wdXQgPT0gYnR2LT5kaWcpIHsKIAkJYnR0dl9jYWxjX2dlb19vbGQoYnR2LCBnZW8sIHdpZHRoLCBoZWlnaHQsCiAJCQkJICBib3RoX2ZpZWxkcywgdHZub3JtKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCmluZGV4IDY4MTllMjEuLmU3OWE0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGJ0dHZfdmJpX2ZtdF9yZXNldChzdHJ1Y3QgYnR0dl92YmlfZm10ICpmLCBpbnQgbm9ybSkKK3ZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIHVuc2lnbmVkIGludCBub3JtKQogewogCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOwogCXVuc2lnbmVkIGludCByZWFsX3NhbXBsZXNfcGVyX2xpbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCmluZGV4IDUyOWJmNmMuLjNkMzZkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCkBAIC0xNCw4ICsxNCw5IEBACiAjaWZuZGVmIF9CVFRWX0hfCiAjZGVmaW5lIF9CVFRWX0hfCiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CkBAIC0xODAsNiArMTgxLDEwIEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMTIJCSAgIDB4OTkKICNkZWZpbmUgQlRUVl9CT0FSRF9WRDAxMl9YMQkJICAgMHg5YQogI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDEyX1gyCQkgICAweDliCisjZGVmaW5lIEJUVFZfQk9BUkRfSVZDRTg3ODQJCSAgIDB4OWMKKyNkZWZpbmUgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTCSAgIDB4OWQKKyNkZWZpbmUgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMCSAgIDB4OWUKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVjE4MyAgICAgICAgICAgICAgICAgICAweDlmCiAKIAogLyogbW9yZSBjYXJkLXNwZWNpZmljIGRlZmluZXMgKi8KQEAgLTE5MSwxMiArMTk2LDkgQEAKICNkZWZpbmUgV0lOVklFV19QVDIyNTRfREFUQSAweDIwCiAjZGVmaW5lIFdJTlZJRVdfUFQyMjU0X1NUUk9CRSAweDgwCiAKLS8qIGRpZ2l0YWxfbW9kZSAqLwotI2RlZmluZSBESUdJVEFMX01PREVfVklERU8gMQotI2RlZmluZSBESUdJVEFMX01PREVfQ0FNRVJBIDIKLQogc3RydWN0IGJ0dHZfY29yZSB7CiAJLyogZGV2aWNlIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgICB2NGwyX2RldjsKIAlzdHJ1Y3QgcGNpX2RldiAgICAgICAqcGNpOwogCXN0cnVjdCBpMmNfYWRhcHRlciAgIGkyY19hZGFwOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgIHN1YnM7ICAgICAvKiBzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICovCkBAIC0yMDQsNTkgKzIwNiw3OSBAQAogCS8qIGRldmljZSBjb25maWcgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICBucjsgICAgICAgLyogZGV2IG5yIChmb3IgcHJpbnRrKCJidHR2JWQ6IC4uLiIpOyAgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICB0eXBlOyAgICAgLyogY2FyZCB0eXBlIChwb2ludGVyIGludG8gdHZjYXJkc1tdKSAgKi8KLQljaGFyICAgICAgICAgICAgICAgICBuYW1lWzhdOyAgLyogZGV2IG5hbWUgKi8KIH07CiAKIHN0cnVjdCBidHR2OwogCi0KLXN0cnVjdCB0dmNhcmQKLXsKK3N0cnVjdCB0dmNhcmQgewogCWNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgaW50IHZpZGVvX2lucHV0czsKLQl1bnNpZ25lZCBpbnQgYXVkaW9faW5wdXRzOwotCXVuc2lnbmVkIGludCB0dW5lcjsKLQl1bnNpZ25lZCBpbnQgc3ZoczsKLQl1bnNpZ25lZCBpbnQgZGlnaXRhbF9tb2RlOyAvLyBESUdJVEFMX01PREVfQ0FNRVJBIG9yIERJR0lUQUxfTU9ERV9WSURFTworCXZvaWQgKCp2b2x1bWVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgX191MTYgdm9sdW1lKTsKKwl2b2lkICgqYXVkaW9fbW9kZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIsIGludCBzZXQpOworCXZvaWQgKCptdXhzZWxfaG9vaykoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKKworCS8qIE1VWCBiaXRzIGZvciBlYWNoIGlucHV0LCB0d28gYml0cyBwZXIgaW5wdXQgc3RhcnRpbmcgd2l0aCB0aGUgTFNCICovCisJdTMyIG11eHNlbDsgLyogVXNlIE1VWFNFTCgpIHRvIHNldCAqLworCiAJdTMyIGdwaW9tYXNrOwotCXUzMiBtdXhzZWxbMTZdOwogCXUzMiBncGlvbXV4WzRdOyAgLyogVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwgKi8KIAl1MzIgZ3Bpb211dGU7ICAgIC8qIEdQSU8gbXV0ZSBzZXR0aW5nICovCiAJdTMyIGdwaW9tYXNrMjsgICAvKiBHUElPIE1VWCBtYXNrICovCiAKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKKwl1OCB0dW5lcl9hZGRyOworCXU4IHZpZGVvX2lucHV0czsJLyogTnVtYmVyIG9mIGlucHV0cyAqLworCXVuc2lnbmVkIGludCBzdmhzOjQ7CS8qIFdoaWNoIGlucHV0IGlzIHMtdmlkZW8gKi8KKyNkZWZpbmUgTk9fU1ZIUwkxNQorCXVuc2lnbmVkIGludCBwbGw6MjsKKyNkZWZpbmUgUExMX05PTkUgMAorI2RlZmluZSBQTExfMjggICAxCisjZGVmaW5lIFBMTF8zNSAgIDIKKwogCS8qIGkyYyBhdWRpbyBmbGFncyAqLwogCXVuc2lnbmVkIGludCBub19tc3AzNHh4OjE7CiAJdW5zaWduZWQgaW50IG5vX3RkYTk4NzU6MTsKIAl1bnNpZ25lZCBpbnQgbm9fdGRhNzQzMjoxOwogCXVuc2lnbmVkIGludCBuZWVkc190dmF1ZGlvOjE7CiAJdW5zaWduZWQgaW50IG1zcDM0eHhfYWx0OjE7CisJLyogTm90ZTogY3VycmVudGx5IG5vIGNhcmQgZGVmaW5pdGlvbiBuZWVkcyB0byBtYXJrIHRoZSBwcmVzZW5jZQorCSAgIG9mIGEgUkRTIHNhYTY1ODggY2hpcC4gSWYgdGhpcyBpcyBldmVyIG5lZWRlZCwgdGhlbiBhZGQgYSBuZXcKKwkgICAnaGFzX3NhYTY1ODgnIGJpdCBoZXJlLiAqLwogCi0JLyogZmxhZzogdmlkZW8gcGNpIGZ1bmN0aW9uIGlzIHVudXNlZCAqLwotCXVuc2lnbmVkIGludCBub192aWRlbzoxOworCXVuc2lnbmVkIGludCBub192aWRlbzoxOyAvKiB2aWRlbyBwY2kgZnVuY3Rpb24gaXMgdW51c2VkICovCiAJdW5zaWduZWQgaW50IGhhc19kdmI6MTsKIAl1bnNpZ25lZCBpbnQgaGFzX3JlbW90ZToxOworCXVuc2lnbmVkIGludCBoYXNfcmFkaW86MTsKKwl1bnNpZ25lZCBpbnQgaGFzX2RpZ19pbjoxOyAvKiBIYXMgZGlnaXRhbCBpbnB1dCAoYWx3YXlzIGxhc3QgaW5wdXQpICovCiAJdW5zaWduZWQgaW50IG5vX2dwaW9pcnE6MTsKLQotCS8qIG90aGVyIHNldHRpbmdzICovCi0JdW5zaWduZWQgaW50IHBsbDsKLSNkZWZpbmUgUExMX05PTkUgMAotI2RlZmluZSBQTExfMjggICAxCi0jZGVmaW5lIFBMTF8zNSAgIDIKLQotCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOwotCXVuc2lnbmVkIGludCB0dW5lcl9hZGRyOwotCXVuc2lnbmVkIGludCByYWRpb19hZGRyOwotCi0JdW5zaWduZWQgaW50IGhhc19yYWRpbzsKLQotCXZvaWQgKCp2b2x1bWVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgX191MTYgdm9sdW1lKTsKLQl2b2lkICgqYXVkaW9fbW9kZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIsIGludCBzZXQpOwotCi0Jdm9pZCAoKm11eHNlbF9ob29rKShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB0dmNhcmQgYnR0dl90dmNhcmRzW107CiAKKy8qCisgKiBUaGlzIGJpdCBvZiBjcHAgdm9vZG9vIGlzIHVzZWQgdG8gY3JlYXRlIGEgbWFjcm8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgorICogYXJndW1lbnRzICgxIHRvIDE2KS4gIEl0IHdpbGwgcGFjayBlYWNoIGFyZ3VtZW50IGludG8gYSB3b3JkIHR3byBiaXRzIGF0IGEKKyAqIHRpbWUuICBJdCBjYW4ndCBiZSBhIGZ1bmN0aW9uIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgY29tcGlsZSB0aW1lIGNvbnN0YW50IHRvCisgKiBpbml0aWFsaXplIHN0cnVjdHVyZXMuICBTaW5jZSBlYWNoIGFyZ3VtZW50IG11c3QgZml0IGluIHR3byBiaXRzLCBpdCdzIG9rCisgKiB0aGF0IHRoZXkgYXJlIGNoYW5nZWQgdG8gb2N0YWwuICBPbmUgc2hvdWxkIG5vdCB1c2UgaGV4IG51bWJlciwgbWFjcm9zLCBvcgorICogYW55dGhpbmcgZWxzZSB3aXRoIHRoaXMgbWFjcm8uICBKdXN0IHVzZSBwbGFpbiBpbnRlZ2VycyBmcm9tIDAgdG8gMy4KKyAqLworI2RlZmluZSBfTVVYU0VMZihhKSAgICAgIAkwIyNhIDw8IDMwCisjZGVmaW5lIF9NVVhTRUxlKGEsIGIuLi4pCTAjI2EgPDwgMjggfCBfTVVYU0VMZihiKQorI2RlZmluZSBfTVVYU0VMZChhLCBiLi4uKQkwIyNhIDw8IDI2IHwgX01VWFNFTGUoYikKKyNkZWZpbmUgX01VWFNFTGMoYSwgYi4uLikJMCMjYSA8PCAyNCB8IF9NVVhTRUxkKGIpCisjZGVmaW5lIF9NVVhTRUxiKGEsIGIuLi4pCTAjI2EgPDwgMjIgfCBfTVVYU0VMYyhiKQorI2RlZmluZSBfTVVYU0VMYShhLCBiLi4uKQkwIyNhIDw8IDIwIHwgX01VWFNFTGIoYikKKyNkZWZpbmUgX01VWFNFTDkoYSwgYi4uLikJMCMjYSA8PCAxOCB8IF9NVVhTRUxhKGIpCisjZGVmaW5lIF9NVVhTRUw4KGEsIGIuLi4pCTAjI2EgPDwgMTYgfCBfTVVYU0VMOShiKQorI2RlZmluZSBfTVVYU0VMNyhhLCBiLi4uKQkwIyNhIDw8IDE0IHwgX01VWFNFTDgoYikKKyNkZWZpbmUgX01VWFNFTDYoYSwgYi4uLikJMCMjYSA8PCAxMiB8IF9NVVhTRUw3KGIpCisjZGVmaW5lIF9NVVhTRUw1KGEsIGIuLi4pCTAjI2EgPDwgMTAgfCBfTVVYU0VMNihiKQorI2RlZmluZSBfTVVYU0VMNChhLCBiLi4uKQkwIyNhIDw8IDggIHwgX01VWFNFTDUoYikKKyNkZWZpbmUgX01VWFNFTDMoYSwgYi4uLikJMCMjYSA8PCA2ICB8IF9NVVhTRUw0KGIpCisjZGVmaW5lIF9NVVhTRUwyKGEsIGIuLi4pCTAjI2EgPDwgNCAgfCBfTVVYU0VMMyhiKQorI2RlZmluZSBfTVVYU0VMMShhLCBiLi4uKQkwIyNhIDw8IDIgIHwgX01VWFNFTDIoYikKKyNkZWZpbmUgTVVYU0VMKGEsIGIuLi4pCQkoYSB8IF9NVVhTRUwxKGIpKQorCiAvKiBpZGVudGlmaWNhdGlvbiAvIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYXJkICovCiBleHRlcm4gdm9pZCBidHR2X2lkY2FyZChzdHJ1Y3QgYnR0diAqYnR2KTsKIGV4dGVybiB2b2lkIGJ0dHZfaW5pdF9jYXJkMShzdHJ1Y3QgYnR0diAqYnR2KTsKQEAgLTI2NCw3ICsyODYsNyBAQAogCiAvKiBjYXJkLXNwZWNpZmljIGZ1bnRpb25zICovCiBleHRlcm4gdm9pZCB0ZWE1NzU3X3NldF9mcmVxKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIHNob3J0IGZyZXEpOwotZXh0ZXJuIHZvaWQgYnR0dl90ZGE5ODgwX3NldG5vcm0oc3RydWN0IGJ0dHYgKmJ0diwgaW50IG5vcm0pOworZXh0ZXJuIHUzMiBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCB1MzIgZ3Bpb2JpdHMpOwogCiAvKiBleHRyYSB0d2Vha3MgZm9yIHNvbWUgY2hpcHNldHMgKi8KIGV4dGVybiB2b2lkIGJ0dHZfY2hlY2tfY2hpcHNldCh2b2lkKTsKQEAgLTMzNiw3ICszNTgsOSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogaTJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1leHRlcm4gdm9pZCBidHR2X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKyNkZWZpbmUgYnR0dl9jYWxsX2FsbChidHYsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmYnR2LT5jLnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIGV4dGVybiBpbnQgYnR0dl9JMkNSZWFkKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqcHJvYmVfZm9yKTsKIGV4dGVybiBpbnQgYnR0dl9JMkNXcml0ZShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgYjEsCiAJCQkgdW5zaWduZWQgY2hhciBiMiwgaW50IGJvdGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IDE5OWE0ZDIuLjk2NDk4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xMzUsNyArMTM0LDcgQEAKIAogCS8qIGJ0dHYgc3BlY2lmaWMgKi8KIAljb25zdCBzdHJ1Y3QgYnR0dl9mb3JtYXQgICAqZm10OwotCWludCAgICAgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB0dm5vcm07CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRmb3JtYXQ7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRzd2FwOwogCXN0cnVjdCBidHR2X2dlb21ldHJ5ICAgICAgIGdlbzsKQEAgLTE1NCw3ICsxNTMsNyBAQAogfTsKIAogc3RydWN0IGJ0dHZfb3ZlcmxheSB7Ci0JaW50ICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJdW5zaWduZWQgaW50ICAgICAgICAgICB0dm5vcm07CiAJc3RydWN0IHY0bDJfcmVjdCAgICAgICB3OwogCWVudW0gdjRsMl9maWVsZCAgICAgICAgZmllbGQ7CiAJc3RydWN0IHY0bDJfY2xpcCAgICAgICAqY2xpcHM7CkBAIC0xNzQsNyArMTczLDcgQEAKIH07CiAKIC8qIGJ0dHYtdmJpLmMgKi8KLXZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIGludCBub3JtKTsKK3ZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIHVuc2lnbmVkIGludCBub3JtKTsKIAogc3RydWN0IGJ0dHZfY3JvcCB7CiAJLyogQSBjcm9wcGluZyByZWN0YW5nbGUgaW4gc3RydWN0IGJ0dHZfdHZub3JtLmNyb3BjYXAgdW5pdHMuICovCkBAIC0zMjksNyArMzI4LDggQEAKIAl1bnNpZ25lZCBpbnQgY2FyZGlkOyAgIC8qIHBjaSBzdWJzeXN0ZW0gaWQgKGJ0ODc4IGJhc2VkIG9uZXMpICovCiAJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7ICAvKiB0dW5lciBjaGlwIHR5cGUgKi8KIAl1bnNpZ25lZCBpbnQgdGRhOTg4N19jb25mOwotCXVuc2lnbmVkIGludCBzdmhzOworCXVuc2lnbmVkIGludCBzdmhzLCBkaWc7CisJdW5zaWduZWQgaW50IGhhc19zYWE2NTg4OjE7CiAJc3RydWN0IGJ0dHZfcGxsX2luZm8gcGxsOwogCWludCB0cml0b24xOwogCWludCBncGlvaXJxOwpAQCAtMzUzLDggKzM1Myw4IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3N0YXRlLCBpMmNfcmM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaTJjX2RvbmU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgaTJjX3F1ZXVlOwotCXN0cnVjdCBpMmNfY2xpZW50IAkgICppMmNfbXNwMzR4eF9jbGllbnQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgCSAgKmkyY190dmF1ZGlvX2NsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgCSAgKnNkX21zcDM0eHg7CisJc3RydWN0IHY0bDJfc3ViZGV2IAkgICpzZF90dmF1ZGlvOwogCiAJLyogdmlkZW80bGludXggKDEpICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwpAQCAtMzc4LDcgKzM3OCw4IEBACiAJdW5zaWduZWQgaW50IGF1ZGlvOwogCXVuc2lnbmVkIGludCBtdXRlOwogCXVuc2lnbmVkIGxvbmcgZnJlcTsKLQlpbnQgdHZub3JtLGh1ZSxjb250cmFzdCxicmlnaHQsc2F0dXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgdHZub3JtOworCWludCBodWUsIGNvbnRyYXN0LCBicmlnaHQsIHNhdHVyYXRpb247CiAJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgZmJ1ZjsKIAl1bnNpZ25lZCBpbnQgZmllbGRfY291bnQ7CiAKQEAgLTQ1OCwxMCArNDU5LDIxIEBACiAJX19zMzIJCQljcm9wX3N0YXJ0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYnR0diAqdG9fYnR0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBidHR2LCBjLnY0bDJfZGV2KTsKK30KKwogLyogb3VyIGRldmljZXMgKi8KICNkZWZpbmUgQlRUVl9NQVggMzIKIGV4dGVybiB1bnNpZ25lZCBpbnQgYnR0dl9udW07Ci1leHRlcm4gc3RydWN0IGJ0dHYgYnR0dnNbQlRUVl9NQVhdOworZXh0ZXJuIHN0cnVjdCBidHR2ICpidHR2c1tCVFRWX01BWF07CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ0dHZfbXV4c2VsKGNvbnN0IHN0cnVjdCBidHR2ICpidHYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlyZXR1cm4gKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsID4+IChpbnB1dCAqIDIpKSAmIDM7Cit9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA0NmZkNTczLi43YWJlOTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTExLDYgKzExLDEyIEBACiAgKgogICogV3JpdHRlbiBieSBKb25hdGhhbiBDb3JiZXQsIGNvcmJldEBsd24ubmV0LgogICoKKyAqIHY0bDJfZGV2aWNlL3Y0bDJfc3ViZGV2IGNvbnZlcnNpb24gYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgorICogTm90ZTogdGhpcyBjb252ZXJzaW9uIGlzIHVudGVzdGVkISBQbGVhc2UgY29udGFjdCB0aGUgbGludXgtbWVkaWEKKyAqIG1haWxpbmdsaXN0IGlmIHlvdSBjYW4gdGVzdCB0aGlzLCB0b2dldGhlciB3aXRoIHRoZSB0ZXN0IHJlc3VsdHMuCisgKgogICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgogICovCkBAIC0yNSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKQEAgLTEzNiw2ICsxNDEsNyBAQAogICovCiBzdHJ1Y3QgY2FmZV9jYW1lcmEKIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJZW51bSBjYWZlX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgCQkvKiBCdWZmZXIgc3RhdHVzLCBtYWlubHkgKGRldl9sb2NrKSAqLwogCWludCB1c2VyczsJCQkvKiBIb3cgbWFueSBvcGVuIEZEcyAqLwpAQCAtMTQ1LDkgKzE1MSwxMCBAQAogCSAqIFN1YnN5c3RlbSBzdHJ1Y3R1cmVzLgogCSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdjRsZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcjsKKwl1bnNpZ25lZCBzaG9ydCBzZW5zb3JfYWRkcjsKIAogCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqcmVnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwkvKiBsaW5rIHRvIG90aGVyIGRldmljZXMgKi8KQEAgLTE4MCwxMCArMTg3LDYgQEAKIAkvKiBNaXNjICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc21idXNfd2FpdDsJLyogV2FpdGluZyBvbiBpMmMgZXZlbnRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgaW93YWl0OwkvKiBXYWl0aW5nIG9uIGZyYW1lIGRhdGEgKi8KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0Jc3RydWN0IGRlbnRyeSAqZGZzX3JlZ3M7Ci0Jc3RydWN0IGRlbnRyeSAqZGZzX2NhbV9yZWdzOwotI2VuZGlmCiB9OwogCiAvKgpAQCAtMTk1LDYgKzE5OCwxMyBAQAogI2RlZmluZSBDRl9ETUFfQUNUSVZFCSAzCS8qIEEgZnJhbWUgaXMgaW5jb21pbmcgKi8KICNkZWZpbmUgQ0ZfQ09ORklHX05FRURFRCA0CS8qIE11c3QgY29uZmlndXJlIGhhcmR3YXJlICovCiAKKyNkZWZpbmUgc2Vuc29yX2NhbGwoY2FtLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNlbnNvciwgbywgZiwgIyNhcmdzKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjYWZlX2NhbWVyYSAqdG9fY2FtKHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY2FmZV9jYW1lcmEsIHY0bDJfZGV2KTsKK30KIAogCiAvKgpAQCAtMjM4LDU5ICsyNDgsNyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogV2Uga2VlcCBhIHNpbXBsZSBsaXN0IG9mIGtub3duIGRldmljZXMgdG8gc2VhcmNoIGF0IG9wZW4gdGltZS4KLSAqLwotc3RhdGljIExJU1RfSEVBRChjYWZlX2Rldl9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2FmZV9kZXZfbGlzdF9sb2NrKTsKIAotc3RhdGljIHZvaWQgY2FmZV9hZGRfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmY2FtLT5kZXZfbGlzdCwgJmNhZmVfZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9yZW1vdmVfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJmNhbS0+ZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FmZV9maW5kX2RldihpbnQgbWlub3IpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07Ci0KLQltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FtLCAmY2FmZV9kZXZfbGlzdCwgZGV2X2xpc3QpIHsKLQkJaWYgKGNhbS0+djRsZGV2Lm1pbm9yID09IG1pbm9yKQotCQkJZ290byBkb25lOwotCX0KLQljYW0gPSBOVUxMOwotICBkb25lOgotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlyZXR1cm4gY2FtOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhZmVfZmluZF9ieV9wZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOwotCi0JbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbSwgJmNhZmVfZGV2X2xpc3QsIGRldl9saXN0KSB7Ci0JCWlmIChjYW0tPnBkZXYgPT0gcGRldikKLQkJCWdvdG8gZG9uZTsKLQl9Ci0JY2FtID0gTlVMTDsKLSAgZG9uZToKLQltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JcmV0dXJuIGNhbTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBEZXZpY2UgcmVnaXN0ZXIgSS9PCiAgKi8KQEAgLTQ4MSwxOCArNDM5LDExIEBACiAJCXVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJ3LCB1OCBjb21tYW5kLAogCQlpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCS8qCi0JICogUmVmdXNlIHRvIHRhbGsgdG8gYW55dGhpbmcgYnV0IE9WIGNhbSBjaGlwcy4gIFdlIHNob3VsZAotCSAqIG5ldmVyIGV2ZW4gc2VlIGFuIGF0dGVtcHQgdG8gZG8gc28sIGJ1dCBvbmUgbmV2ZXIga25vd3MuCi0JICovCi0JaWYgKGNhbS0+c2Vuc29yICYmIGFkZHIgIT0gY2FtLT5zZW5zb3ItPmFkZHIpIHsKLQkJY2FtX2VycihjYW0sICJmdW5reSBzbWJ1cyBhZGRyICVkXG4iLCBhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8qCiAJICogVGhpcyBpbnRlcmZhY2Ugd291bGQgYXBwZWFyIHRvIG9ubHkgZG8gYnl0ZSBkYXRhIG9wcy4gIE9LCiAJICogaXQgY2FuIGRvIHdvcmQgdG9vLCBidXQgdGhlIGNhbSBjaGlwIGhhcyBubyB1c2UgZm9yIHRoYXQuCiAJICovCkBAIC01MzAsMzggKzQ4MSw5IEBACiB9OwogCiAvKiBTb21lYm9keSBpcyBvbiB0aGUgYnVzICovCi1zdGF0aWMgaW50IGNhZmVfY2FtX2luaXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwogc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0b3BfZG1hKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKIHN0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl9kb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKIAotc3RhdGljIGludCBjYWZlX3NtYnVzX2F0dGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JLyoKLQkgKiBEb24ndCB0YWxrIHRvIGNoaXBzIHdlIGRvbid0IHJlY29nbml6ZS4KLQkgKi8KLQlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9PVjc2NzApIHsKLQkJY2FtLT5zZW5zb3IgPSBjbGllbnQ7Ci0JCXJldHVybiBjYWZlX2NhbV9pbml0KGNhbSk7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGNhZmVfc21idXNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlpZiAoY2FtLT5zZW5zb3IgPT0gY2xpZW50KSB7Ci0JCWNhZmVfY3Rscl9zdG9wX2RtYShjYW0pOwotCQljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwotCQljYW1fZXJyKGNhbSwgImxvc3QgdGhlIHNlbnNvciFcbiIpOwotCQljYW0tPnNlbnNvciA9IE5VTEw7ICAvKiBCdW1tZXIsIG5vIGNhbWVyYSAqLwotCQljYW0tPnN0YXRlID0gU19OT1RSRUFEWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgY2FmZV9zbWJ1c19zZXR1cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmY2FtLT5pMmNfYWRhcHRlcjsKQEAgLTU3MCwxMiArNDkyLDEwIEBACiAJY2FmZV9zbWJ1c19lbmFibGVfaXJxKGNhbSk7CiAJYWRhcC0+aWQgPSBJMkNfSFdfU01CVVNfQ0FGRTsKIAlhZGFwLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWFkYXAtPmNsaWVudF9yZWdpc3RlciA9IGNhZmVfc21idXNfYXR0YWNoOwotCWFkYXAtPmNsaWVudF91bnJlZ2lzdGVyID0gY2FmZV9zbWJ1c19kZXRhY2g7CiAJYWRhcC0+YWxnbyA9ICZjYWZlX3NtYnVzX2FsZ287CiAJc3RyY3B5KGFkYXAtPm5hbWUsICJjYWZlX2NjaWMiKTsKIAlhZGFwLT5kZXYucGFyZW50ID0gJmNhbS0+cGRldi0+ZGV2OwotCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgY2FtKTsKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsICZjYW0tPnY0bDJfZGV2KTsKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgY2FmZSBpMmMgYWRhcHRlclxuIik7CkBAIC04MDksOSArNzI5LDkgQEAKIAkgKiBDb250cm9sIDEgaXMgcG93ZXIgZG93biwgc2V0IHRvIDAgdG8gb3BlcmF0ZS4KIAkgKi8KIAljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOKTsgLyogcHdyIHVwLCByZXNldCAqLwotLy8JbWRlbGF5KDEpOyAvKiBNYXJ2ZWxsIHNheXMgMW1zIHdpbGwgZG8gaXQgKi8KKy8qCW1kZWxheSgxKTsgKi8gLyogTWFydmVsbCBzYXlzIDFtcyB3aWxsIGRvIGl0ICovCiAJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzApOwotLy8JbWRlbGF5KDEpOyAvKiBFbm91Z2g/ICovCisvKgltZGVsYXkoMSk7ICovIC8qIEVub3VnaD8gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CiAJbXNsZWVwKDUpOyAvKiBKdXN0IHRvIGJlIHN1cmUgKi8KIH0KQEAgLTgzMywyMyArNzUzLDkgQEAKICAqIENvbW11bmljYXRpb25zIHdpdGggdGhlIHNlbnNvci4KICAqLwogCi1zdGF0aWMgaW50IF9fY2FmZV9jYW1fY21kKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKnNjID0gY2FtLT5zZW5zb3I7Ci0JaW50IHJldDsKLQotCWlmIChzYyA9PSBOVUxMIHx8IHNjLT5kcml2ZXIgPT0gTlVMTCB8fCBzYy0+ZHJpdmVyLT5jb21tYW5kID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldCA9IHNjLT5kcml2ZXItPmNvbW1hbmQoc2MsIGNtZCwgYXJnKTsKLQlpZiAocmV0ID09IC1FUEVSTSkgLyogVW5zdXBwb3J0ZWQgY29tbWFuZCAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IF9fY2FmZV9jYW1fcmVzZXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7Ci0JaW50IHplcm8gPSAwOwotCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfUkVTRVQsICZ6ZXJvKTsKKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCByZXNldCwgMCk7CiB9CiAKIC8qCkBAIC04NjksMTQgKzc3NSwxMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCWNoaXAubWF0Y2gudHlwZSA9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjsKLQljaGlwLm1hdGNoLmFkZHIgPSBjYW0tPnNlbnNvci0+YWRkcjsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19EQkdfR19DSElQX0lERU5ULCAmY2hpcCk7CisJY2hpcC5tYXRjaC5hZGRyID0gY2FtLT5zZW5zb3JfYWRkcjsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCWNhbS0+c2Vuc29yX3R5cGUgPSBjaGlwLmlkZW50OwotLy8JaWYgKGNhbS0+c2Vuc29yLT5hZGRyICE9IE9WN3h4MF9TSUQpIHsKIAlpZiAoY2FtLT5zZW5zb3JfdHlwZSAhPSBWNEwyX0lERU5UX09WNzY3MCkgewotCQljYW1fZXJyKGNhbSwgIlVuc3VwcG9ydGVkIHNlbnNvciB0eXBlICVkIiwgY2FtLT5zZW5zb3ItPmFkZHIpOworCQljYW1fZXJyKGNhbSwgIlVuc3VwcG9ydGVkIHNlbnNvciB0eXBlIDB4JXgiLCBjYW0tPnNlbnNvcl90eXBlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTAwLDIxICs4MDUsMjEgQEAKIAltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CiAJY3RybC5pZCA9IFY0TDJfQ0lEX1ZGTElQOwogCWN0cmwudmFsdWUgPSBmbGlwOwotCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKIH0KIAogCiBzdGF0aWMgaW50IGNhZmVfY2FtX2NvbmZpZ3VyZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCWludCByZXQsIHplcm8gPSAwOworCWludCByZXQ7CiAKIAlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUpCiAJCXJldHVybiAtRUlOVkFMOwogCWZtdC5mbXQucGl4ID0gY2FtLT5waXhfZm9ybWF0OwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0lOVF9JTklULCAmemVybyk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBpbml0LCAwKTsKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfRk1ULCAmZm10KTsKKwkJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgc19mbXQsICZmbXQpOwogCS8qCiAJICogT1Y3NjcwIGRvZXMgd2VpcmQgdGhpbmdzIGlmIGZsaXAgaXMgc2V0ICpiZWZvcmUqIGZvcm1hdC4uLgogCSAqLwpAQCAtMTI0Niw4ICsxMTUxLDYgQEAKIAkgKiBNYWtlIHN1cmUgaXQncyBzb21ldGhpbmcgd2UgY2FuIGRvLiAgVXNlciBwb2ludGVycyBjb3VsZCBiZQogCSAqIGltcGxlbWVudGVkIHdpdGhvdXQgZ3JlYXQgcGFpbiwgYnV0IHRoYXQncyBub3QgYmVlbiBkb25lIHlldC4KIAkgKi8KLQlpZiAocmVxLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qCkBAIC0xMzExLDkgKzEyMTQsNyBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXQ7Ci0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQorCWlmIChidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKIAkJZ290byBvdXQ7CiAJKmJ1ZiA9IGNhbS0+c2JfYnVmc1tidWYtPmluZGV4XS52NGxidWY7CiAJcmV0ID0gMDsKQEAgLTEzMzEsOSArMTIzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCWdvdG8gb3V0OwotCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKKwlpZiAoYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCiAJCWdvdG8gb3V0OwogCXNidWYgPSBjYW0tPnNiX2J1ZnMgKyBidWYtPmluZGV4OwogCWlmIChzYnVmLT52NGxidWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkgewpAQCAtMTM2NCw4ICsxMjYzLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXRfdW5sb2NrOwogCWlmIChjYW0tPnN0YXRlICE9IFNfU1RSRUFNSU5HKQogCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGxpc3RfZW1wdHkoJmNhbS0+c2JfZnVsbCkgJiYgZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKQEAgLTE0NzQsMTEgKzEzNzEsOCBAQAogCiBzdGF0aWMgaW50IGNhZmVfdjRsX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCi0JY2FtID0gY2FmZV9maW5kX2Rldih2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcik7Ci0JaWYgKGNhbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwpAQCAtMTUzMiwxMSArMTQyNiwxMSBAQAogc3RhdGljIGludCBjYWZlX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1FVRVJZQ1RSTCwgcWMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgcXVlcnljdHJsLCBxYyk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNTQ1LDExICsxNDM5LDExIEBACiBzdGF0aWMgaW50IGNhZmVfdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY3RybCwgY3RybCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNTU4LDExICsxNDUyLDExIEBACiBzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNjAxLDEwICsxNDk1LDggQEAKIAlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0VOVU1fRk1ULCBmbXQpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGVudW1fZm10LCBmbXQpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYxNyw3ICsxNTA5LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19UUllfRk1ULCBmbXQpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHRyeV9mbXQsIGZtdCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNzI2LDcgKzE2MTgsNyBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0dfUEFSTSwgcGFybXMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGdfcGFybSwgcGFybXMpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKIAlyZXR1cm4gcmV0OwpAQCAtMTczOSwyMCArMTYzMSw1MiBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfUEFSTSwgcGFybXMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfcGFybSwgcGFybXMpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyB2b2lkIGNhZmVfdjRsX2Rldl9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkKQorc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY29udGFpbmVyX29mKHZkLCBzdHJ1Y3QgY2FmZV9jYW1lcmEsIHY0bGRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCi0Ja2ZyZWUoY2FtKTsKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NBRkU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOwogfQogCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKSB7CisJCXJlZy0+dmFsID0gY2FmZV9yZWdfcmVhZChjYW0sIHJlZy0+cmVnKTsKKwkJcmVnLT5zaXplID0gNDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OworCisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkgeworCQljYWZlX3JlZ193cml0ZShjYW0sIHJlZy0+cmVnLCByZWctPnZhbCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworfQorI2VuZGlmCiAKIC8qCiAgKiBUaGlzIHRlbXBsYXRlIGRldmljZSBob2xkcyBhbGwgb2YgdGhvc2UgdjRsMiBtZXRob2RzOyB3ZQpAQCAtMTc5MCw2ICsxNzE0LDExIEBACiAJLnZpZGlvY19zX2N0cmwJCT0gY2FmZV92aWRpb2Nfc19jdHJsLAogCS52aWRpb2NfZ19wYXJtCQk9IGNhZmVfdmlkaW9jX2dfcGFybSwKIAkudmlkaW9jX3NfcGFybQkJPSBjYWZlX3ZpZGlvY19zX3Bhcm0sCisJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgPSBjYWZlX3ZpZGlvY19nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciAJPSBjYWZlX3ZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciAJPSBjYWZlX3ZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjYWZlX3Y0bF90ZW1wbGF0ZSA9IHsKQEAgLTE4MDAsMTUgKzE3MjksMTAgQEAKIAogCS5mb3BzID0gJmNhZmVfdjRsX2ZvcHMsCiAJLmlvY3RsX29wcyA9ICZjYWZlX3Y0bF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UgPSBjYWZlX3Y0bF9kZXZfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogCi0KLQotCi0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIEludGVycnVwdCBoYW5kbGVyIHN0dWZmCkBAIC0xOTYyLDEyNyArMTg4Niw2IEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0vKgotICogRGVidWdmcyBzdHVmZi4KLSAqLwotCi1zdGF0aWMgY2hhciBjYWZlX2RlYnVnX2J1ZlsxMDI0XTsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYWZlX2Rmc19yb290OwotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19zZXR1cCh2b2lkKQotewotCWNhZmVfZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNhZmVfY2NpYyIsIE5VTEwpOwotCWlmIChJU19FUlIoY2FmZV9kZnNfcm9vdCkpIHsKLQkJY2FmZV9kZnNfcm9vdCA9IE5VTEw7ICAvKiBOZXZlciBtaW5kICovCi0JCXByaW50ayhLRVJOX05PVElDRSAiY2FmZV9jY2ljIHVuYWJsZSB0byBzZXQgdXAgZGVidWdmc1xuIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19zaHV0ZG93bih2b2lkKQotewotCWlmIChjYWZlX2Rmc19yb290KQotCQlkZWJ1Z2ZzX3JlbW92ZShjYWZlX2Rmc19yb290KTsKLX0KLQotc3RhdGljIGludCBjYWZlX2Rmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNhZmVfZGZzX3JlYWRfcmVncyhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcyA9IGNhZmVfZGVidWdfYnVmOwotCWludCBvZmZzZXQ7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IDB4NDQ7IG9mZnNldCArPSA0KQotCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwOHhcbiIsIG9mZnNldCwKLQkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7Ci0JZm9yIChvZmZzZXQgPSAweDg4OyBvZmZzZXQgPD0gMHg5MDsgb2Zmc2V0ICs9IDQpCi0JCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTA4eFxuIiwgb2Zmc2V0LAotCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKLQlmb3IgKG9mZnNldCA9IDB4YjQ7IG9mZnNldCA8PSAweGJjOyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCWZvciAob2Zmc2V0ID0gMHgzMDAwOyBvZmZzZXQgPD0gMHgzMDBjOyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDR4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBjYWZlX2RlYnVnX2J1ZiwKLQkJCXMgLSBjYWZlX2RlYnVnX2J1Zik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhZmVfZGZzX3JlZ19vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgPSBjYWZlX2Rmc19yZWFkX3JlZ3MsCi0JLm9wZW4gPSBjYWZlX2Rmc19vcGVuCi19OwotCi1zdGF0aWMgc3NpemVfdCBjYWZlX2Rmc19yZWFkX2NhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcyA9IGNhZmVfZGVidWdfYnVmOwotCWludCBvZmZzZXQ7Ci0KLQlpZiAoISBjYW0tPnNlbnNvcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChvZmZzZXQgPSAweDA7IG9mZnNldCA8IDB4OGE7IG9mZnNldCsrKQotCXsKLQkJdTggdjsKLQotCQljYWZlX3NtYnVzX3JlYWRfZGF0YShjYW0sIGNhbS0+c2Vuc29yLT5hZGRyLCBvZmZzZXQsICZ2KTsKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDJ4XG4iLCBvZmZzZXQsIHYpOwotCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgY2FmZV9kZWJ1Z19idWYsCi0JCQlzIC0gY2FmZV9kZWJ1Z19idWYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWZlX2Rmc19jYW1fb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkID0gY2FmZV9kZnNfcmVhZF9jYW0sCi0JLm9wZW4gPSBjYWZlX2Rmc19vcGVuCi19OwotCi0KLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfY2FtX3NldHVwKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWNoYXIgZm5hbWVbNDBdOwotCi0JaWYgKCFjYWZlX2Rmc19yb290KQotCQlyZXR1cm47Ci0Jc3ByaW50ZihmbmFtZSwgInJlZ3MtJWQiLCBjYW0tPnY0bGRldi5udW0pOwotCWNhbS0+ZGZzX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCAwNDQ0LCBjYWZlX2Rmc19yb290LAotCQkJY2FtLCAmY2FmZV9kZnNfcmVnX29wcyk7Ci0Jc3ByaW50ZihmbmFtZSwgImNhbS0lZCIsIGNhbS0+djRsZGV2Lm51bSk7Ci0JY2FtLT5kZnNfY2FtX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCAwNDQ0LCBjYWZlX2Rmc19yb290LAotCQkJY2FtLCAmY2FmZV9kZnNfY2FtX29wcyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfY2FtX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWlmICghIElTX0VSUihjYW0tPmRmc19yZWdzKSkKLQkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfcmVncyk7Ci0JaWYgKCEgSVNfRVJSKGNhbS0+ZGZzX2NhbV9yZWdzKSkKLQkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfY2FtX3JlZ3MpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGNhZmVfZGZzX3NldHVwKCkKLSNkZWZpbmUgY2FmZV9kZnNfc2h1dGRvd24oKQotI2RlZmluZSBjYWZlX2Rmc19jYW1fc2V0dXAoY2FtKQotI2RlZmluZSBjYWZlX2Rmc19jYW1fc2h1dGRvd24oY2FtKQotI2VuZGlmICAgIC8qIENPTkZJR19WSURFT19BRFZfREVCVUcgKi8KLQotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBQQ0kgaW50ZXJmYWNlIHN0dWZmLgogICovCkBAIC0yMTAwLDYgKzE5MDMsMTAgQEAKIAljYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FmZV9jYW1lcmEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FtID09IE5VTEwpCiAJCWdvdG8gb3V0OworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjYW0tPnY0bDJfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCiAJbXV0ZXhfaW5pdCgmY2FtLT5zX211dGV4KTsKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZjYW0tPmRldl9sb2NrKTsKQEAgLTIxMTgsMTQgKzE5MjUsMTQgQEAKIAkgKi8KIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF91bnJlZzsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXJldCA9IC1FSU87CiAJY2FtLT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwogCWlmICghIGNhbS0+cmVncykgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpb3JlbWFwIGNhZmUtY2NpYyByZWdzXG4iKTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXRfdW5yZWc7CiAJfQogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2FmZV9pcnEsIElSUUZfU0hBUkVELCAiY2FmZS1jY2ljIiwgY2FtKTsKIAlpZiAocmV0KQpAQCAtMjE0NSwxNyArMTk1MiwzMSBAQAogCXJldCA9IGNhZmVfc21idXNfc2V0dXAoY2FtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlaXJxOworCisJY2FtLT5zZW5zb3JfYWRkciA9IDB4NDI7CisJY2FtLT5zZW5zb3IgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjYW0tPmkyY19hZGFwdGVyLAorCQkJIm92NzY3MCIsICJvdjc2NzAiLCBjYW0tPnNlbnNvcl9hZGRyKTsKKwlpZiAoY2FtLT5zZW5zb3IgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9zbWJ1czsKKwl9CisJcmV0ID0gY2FmZV9jYW1faW5pdChjYW0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NtYnVzOworCiAJLyoKIAkgKiBHZXQgdGhlIHY0bDIgc2V0dXAgZG9uZS4KIAkgKi8KIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWNhbS0+djRsZGV2ID0gY2FmZV92NGxfdGVtcGxhdGU7Ci0JY2FtLT52NGxkZXYuZGVidWcgPSAwOwotLy8JY2FtLT52NGxkZXYuZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKLQljYW0tPnY0bGRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwljYW0tPnZkZXYgPSBjYWZlX3Y0bF90ZW1wbGF0ZTsKKwljYW0tPnZkZXYuZGVidWcgPSAwOworLyoJY2FtLT52ZGV2LmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTF9BUkc7Ki8KKwljYW0tPnZkZXYudjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3NtYnVzOworCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CisKIAkvKgogCSAqIElmIHNvIHJlcXVlc3RlZCwgdHJ5IHRvIGdldCBvdXIgRE1BIGJ1ZmZlcnMgbm93LgogCSAqLwpAQCAtMjE2NSwyMSArMTk4NiwyMSBAQAogCQkJCQkiIHdpbGwgdHJ5IGFnYWluIGxhdGVyLiIpOwogCX0KIAotCWNhZmVfZGZzX2NhbV9zZXR1cChjYW0pOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLQljYWZlX2FkZF9kZXYoY2FtKTsKIAlyZXR1cm4gMDsKIAotICBvdXRfc21idXM6CitvdXRfc21idXM6CiAJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOwotICBvdXRfZnJlZWlycToKK291dF9mcmVlaXJxOgogCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBjYW0pOwotICBvdXRfaW91bm1hcDoKK291dF9pb3VubWFwOgogCXBjaV9pb3VubWFwKHBkZXYsIGNhbS0+cmVncyk7Ci0gIG91dF9mcmVlOgorb3V0X2ZyZWU6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CitvdXRfdW5yZWc6CiAJa2ZyZWUoY2FtKTsKLSAgb3V0Ogorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxOTAsMjUgKzIwMTEsMjMgQEAKIHN0YXRpYyB2b2lkIGNhZmVfc2h1dGRvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7CiAvKiBGSVhNRTogTWFrZSBzdXJlIHdlIHRha2UgY2FyZSBvZiBldmVyeXRoaW5nIGhlcmUgKi8KLQljYWZlX2Rmc19jYW1fc2h1dGRvd24oY2FtKTsKIAlpZiAoY2FtLT5uX3NidWZzID4gMCkKIAkJLyogV2hhdCBpZiB0aGV5IGFyZSBzdGlsbCBtYXBwZWQ/ICBTaG91bGRuJ3QgYmUsIGJ1dC4uLiAqLwogCQljYWZlX2ZyZWVfc2lvX2J1ZmZlcnMoY2FtKTsKLQljYWZlX3JlbW92ZV9kZXYoY2FtKTsKIAljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKIAljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKIAljYWZlX2ZyZWVfZG1hX2J1ZnMoY2FtKTsKIAlmcmVlX2lycShjYW0tPnBkZXYtPmlycSwgY2FtKTsKIAlwY2lfaW91bm1hcChjYW0tPnBkZXYsIGNhbS0+cmVncyk7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+djRsZGV2KTsKLQkvKiBrZnJlZShjYW0pOyBkb25lIGluIHY0bF9yZWxlYXNlICgpICovCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldik7CiB9CiAKIAogc3RhdGljIHZvaWQgY2FmZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY2FmZV9maW5kX2J5X3BkZXYocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAKIAlpZiAoY2FtID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX3JlbW92ZSBvbiB1bmtub3duIHBkZXYgJXBcbiIsIHBkZXYpOwpAQCAtMjIxOCw2ICsyMDM3LDggQEAKIAlpZiAoY2FtLT51c2VycyA+IDApCiAJCWNhbV93YXJuKGNhbSwgIlJlbW92aW5nIGEgZGV2aWNlIHdpdGggdXNlcnMhXG4iKTsKIAljYWZlX3NodXRkb3duKGNhbSk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CisJa2ZyZWUoY2FtKTsKIC8qIE5vIHVubG9jayAtIGl0IG5vIGxvbmdlciBleGlzdHMgKi8KIH0KIApAQCAtMjIyOCw3ICsyMDQ5LDggQEAKICAqLwogc3RhdGljIGludCBjYWZlX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjYWZlX2ZpbmRfYnlfcGRldihwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAlpbnQgcmV0OwogCWVudW0gY2FmZV9zdGF0ZSBjc3RhdGU7CiAKQEAgLTIyNDYsNyArMjA2OCw4IEBACiAKIHN0YXRpYyBpbnQgY2FmZV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY2FmZV9maW5kX2J5X3BkZXYocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJaW50IHJldCA9IDA7CiAKIAlyZXQgPSBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKQEAgLTIzMDcsMTMgKzIxMzAsMTEgQEAKIAogCXByaW50ayhLRVJOX05PVElDRSAiTWFydmVsbCBNODhBTFAwMSAnQ0FGRScgQ2FtZXJhIENvbnRyb2xsZXIgdmVyc2lvbiAlZFxuIiwKIAkJCUNBRkVfVkVSU0lPTik7Ci0JY2FmZV9kZnNfc2V0dXAoKTsKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYWZlX3BjaV9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgY2FmZV9jY2ljIGRyaXZlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXF1ZXN0X21vZHVsZSgib3Y3NjcwIik7ICAvKiBGSVhNRSB3YW50IHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgKi8KIAlyZXQgPSAwOwogCiAgIG91dDoKQEAgLTIzMjQsNyArMjE0NSw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY2FmZV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjYWZlX3BjaV9kcml2ZXIpOwotCWNhZmVfZGZzX3NodXRkb3duKCk7CiB9CiAKIG1vZHVsZV9pbml0KGNhZmVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwppbmRleCA5YzI1ODk0Li5kNDA5OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlICJjcGlhMi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKaW5kZXggODdlOTEwNy4uOTcxNDA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCkBAIC0xNDEsMTEgKzE0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M1MzQ1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBjczUzNDVfY29yZV9vcHMgPSB7CkBAIC0yMTQsOCArMjA5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImNzNTM0NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NTNTM0NSwKLQkuY29tbWFuZCA9IGNzNTM0NV9jb21tYW5kLAogCS5wcm9iZSA9IGNzNTM0NV9wcm9iZSwKIAkucmVtb3ZlID0gY3M1MzQ1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBjczUzNDVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKaW5kZXggNzI5MmE2My4uNWFlYjA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBkZXZpY2UgZHJpdmVyIGZvciBjczUzbDMyYSBBdWRpbyBBREMiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcnRpbiBWYXVnaGFuIik7CkBAIC00MSw5ICs0MSw2IEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbWVzc2FnZXMsIDA9T2ZmIChkZWZhdWx0KSwgMT1PbiIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMjIsMTEgKzExOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M1M2wzMmFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGNzNTNsMzJhX2NvcmVfb3BzID0gewpAQCAtMjE4LDggKzIxMCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJjczUzbDMyYSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NTNTNMMzJBLAotCS5jb21tYW5kID0gY3M1M2wzMmFfY29tbWFuZCwKIAkucmVtb3ZlID0gY3M1M2wzMmFfcmVtb3ZlLAogCS5wcm9iZSA9IGNzNTNsMzJhX3Byb2JlLAogCS5pZF90YWJsZSA9IGNzNTNsMzJhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwppbmRleCA4OTQwYjUzLi5lOGE1MGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwpAQCAtOSw3ICs5LDcgQEAKIAlzZWxlY3QgVklERU9fQ1gyMzQxWAogCXNlbGVjdCBWSURFT19DUzUzNDUKIAlzZWxlY3QgRFZCX1M1SDE0MDkgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgQ29uZXhhbnQgY3gyMzQxOCBiYXNlZAogCSAgUENJIGNvbWJvIHZpZGVvIHJlY29yZGVyIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwppbmRleCA1N2JlZGRmLi5iYjVjNTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAjaW5jbHVkZSAiY3gxOC1pby5oIgotI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtYXVkaW8uaCIKIApAQCAtMzMsNTUgKzMyLDMyIEBACiAgICBzZXR0aW5ncy4gKi8KIGludCBjeDE4X2F1ZGlvX3NldF9pbyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CisJY29uc3Qgc3RydWN0IGN4MThfY2FyZF9hdWRpb19pbnB1dCAqaW47CiAJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQl1MzIgYXVkaW9faW5wdXQ7CiAJdTMyIHZhbDsKLQlpbnQgbXV4X2lucHV0OwogCWludCBlcnI7CiAKIAkvKiBEZXRlcm1pbmUgd2hpY2ggaW5wdXQgdG8gdXNlICovCi0JaWYgKHRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykpIHsKLQkJYXVkaW9faW5wdXQgPSBjeC0+Y2FyZC0+cmFkaW9faW5wdXQuYXVkaW9faW5wdXQ7Ci0JCW11eF9pbnB1dCA9IGN4LT5jYXJkLT5yYWRpb19pbnB1dC5tdXhlcl9pbnB1dDsKLQl9IGVsc2UgewotCQlhdWRpb19pbnB1dCA9Ci0JCQljeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF0uYXVkaW9faW5wdXQ7Ci0JCW11eF9pbnB1dCA9Ci0JCQljeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF0ubXV4ZXJfaW5wdXQ7Ci0JfQorCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKQorCQlpbiA9ICZjeC0+Y2FyZC0+cmFkaW9faW5wdXQ7CisJZWxzZQorCQlpbiA9ICZjeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF07CiAKIAkvKiBoYW5kbGUgbXV4ZXIgY2hpcHMgKi8KLQlyb3V0ZS5pbnB1dCA9IG11eF9pbnB1dDsKKwlyb3V0ZS5pbnB1dCA9IGluLT5tdXhlcl9pbnB1dDsKIAlyb3V0ZS5vdXRwdXQgPSAwOwotCWN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfbXV4ZXIsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2V4dG11eCwgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCXJvdXRlLmlucHV0ID0gYXVkaW9faW5wdXQ7Ci0JZXJyID0gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAotCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJcm91dGUuaW5wdXQgPSBpbi0+YXVkaW9faW5wdXQ7CisJZXJyID0gY3gxOF9jYWxsX2h3X2VycihjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsCisJCQkgICAgICAgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJLyogRklYTUUgLSB0aGlzIGludGVybmFsIG11eCBzaG91bGQgYmUgYWJzdHJhY3RlZCB0byBhIHN1YmRldiAqLwogCXZhbCA9IGN4MThfcmVhZF9yZWcoY3gsIENYMThfQVVESU9fRU5BQkxFKSAmIH4weDMwOwotCXZhbCB8PSAoYXVkaW9faW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpID8gMHgyMCA6Ci0JCQkJCShhdWRpb19pbnB1dCA8PCA0KTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgdmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFKTsKLQljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDEsIDApOworCXZhbCB8PSAoaW4tPmF1ZGlvX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSA/IDB4MjAgOgorCQkJCQkoaW4tPmF1ZGlvX2lucHV0IDw8IDQpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgdmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFLCB2YWwsIDB4MzApOwogCXJldHVybiAwOwogfQotCi12b2lkIGN4MThfYXVkaW9fc2V0X3JvdXRlKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCi17Ci0JY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAotCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsIHJvdXRlKTsKLX0KLQotdm9pZCBjeDE4X2F1ZGlvX3NldF9hdWRpb19jbG9ja19mcmVxKHN0cnVjdCBjeDE4ICpjeCwgdTggZnJlcSkKLXsKLQlzdGF0aWMgdTMyIGZyZXFzWzNdID0geyA0NDEwMCwgNDgwMDAsIDMyMDAwIH07Ci0KLQkvKiBUaGUgYXVkaW8gY2xvY2sgb2YgdGhlIGRpZ2l0aXplciBtdXN0IG1hdGNoIHRoZSBjb2RlYyBzYW1wbGUKLQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCi0JaWYgKGZyZXEgPiAyKQotCQlyZXR1cm47Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsICZmcmVxc1tmcmVxXSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uaAppbmRleCBjYjU2OWE2Li4yNzMxZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmgKQEAgLTIyLDUgKzIyLDMgQEAKICAqLwogCiBpbnQgY3gxOF9hdWRpb19zZXRfaW8oc3RydWN0IGN4MTggKmN4KTsKLXZvaWQgY3gxOF9hdWRpb19zZXRfcm91dGUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSk7Ci12b2lkIGN4MThfYXVkaW9fc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGN4MTggKmN4LCB1OCBmcmVxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCmluZGV4IGEyZjBhZDUuLjllMzA5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYwpAQCAtNDY0LDgyICs0NjQsNzYgQEAKIAl9CiB9CiAKLWludCBjeDE4X2F2X2F1ZGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MThfYXZfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQogeworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKIAlpbnQgcmV0dmFsOworCXU4IHY7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCXsKLQkJdTggdjsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKLQkJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSAmIH4weDEwOwotCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKLQkJfQotCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgxMCkgfCAweDE7Ci0JCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7Ci0KLQkJcmV0dmFsID0gc2V0X2F1ZGNsa19mcmVxKGN4LCAqKHUzMiAqKWFyZyk7Ci0KLQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApICYgfjB4MTsKLQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKLQkJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSB8IDB4MTA7Ci0JCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOwotCQl9Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpICYgfjB4MTA7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKIAl9CisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApIHwgMHgxOworCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7CiAKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9tdXRlKGN4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY3gsIGZyZXEpOworCisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApICYgfjB4MTsKKwljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOworCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CisJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSB8IDB4MTA7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBjeDE4X2F2X2F1ZGlvX2dfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY3gpOwogCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCXNldF92b2x1bWUoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQlzZXRfYmFzcyhjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJc2V0X3RyZWJsZShjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJCXNldF9iYWxhbmNlKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJc2V0X211dGUoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY3gpOwogCQlicmVhazsKLQorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY3gpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2JhbGFuY2UoY3gpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY3gpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJcmV0dXJuIDA7Cit9CiAKK2ludCBjeDE4X2F2X2F1ZGlvX3NfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlzZXRfdm9sdW1lKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJc2V0X2Jhc3MoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCXNldF90cmVibGUoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQlzZXRfYmFsYW5jZShjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXNldF9tdXRlKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYwppbmRleCAwYjFjODRiLi5mNGRkOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCkBAIC0yMiw4ICsyMiwxMCBAQAogICogIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LWlvLmgiCisjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogCiBpbnQgY3gxOF9hdl93cml0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1OCB2YWx1ZSkKIHsKQEAgLTk3LDE1ICs5OSw2IEBACiAJCQkgICAgIG9yX3ZhbHVlKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBzZXRfaW5wdXQoc3RydWN0IGN4MTggKmN4LCBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgdmlkX2lucHV0LAotCQkJCQllbnVtIGN4MThfYXZfYXVkaW9faW5wdXQgYXVkX2lucHV0KTsKLXN0YXRpYyB2b2lkIGxvZ19hdWRpb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KTsKLXN0YXRpYyB2b2lkIGxvZ192aWRlb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgY3gxOF9hdl9pbml0aWFsaXplKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwpAQCAtMTY5LDkgKzE2MiwxNCBAQAogCS8qIFNldCBWR0FfVFJBQ0tfUkFOR0UgdG8gMHgyMCAqLwogCWN4MThfYXZfYW5kX29yNChjeCwgQ1hBREVDX0RGRV9DVFJMMiwgMHhGRkZGMDBGRiwgMHgwMDAwMjAwMCk7CiAKLQkvKiBFbmFibGUgVkJJIGNhcHR1cmUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX09VVF9DVFJMMSwgMHg0MDEwMjUzRik7Ci0JLyogY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19PVVRfQ1RSTDEsIDB4NDAxMDI1M0UpOyAqLworCS8qCisJICogSW5pdGlhbCBWQkkgc2V0dXAKKwkgKiBWSVAtMS4xLCAxMCBiaXQgbW9kZSwgZW5hYmxlIFJhdywgZGlzYWJsZSBzbGljZWQsCisJICogZG9uJ3QgY2xhbXAgcmF3IHNhbXBsZXMgd2hlbiBjb2RlcyBhcmUgaW4gdXNlLCAxIGJ5dGUgdXNlciBELXdvcmRzLAorCSAqIElESUQwIGhhcyBsaW5lICMsIFJQIGNvZGUgViBiaXQgdHJhbnNpdGlvbiBvbiBWQkxBTkssIGRhdGEgZHVyaW5nCisJICogYmxhbmtpbmcgaW50ZXJ2YWxzCisJICovCisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19PVVRfQ1RSTDEsIDB4NDAxMzI1MmUpOwogCiAJLyogU2V0IHRoZSB2aWRlbyBpbnB1dC4KIAkgICBUaGUgc2V0dGluZyBpbiBNT0RFX0NUUkwgZ2V0cyBsb3N0IHdoZW4gd2UgZG8gdGhlIGFib3ZlIHNldHVwICovCkBAIC0xOTUsMTEgKzE5Myw2MSBAQAogCXN0YXRlLT5kZWZhdWx0X3ZvbHVtZSA9ICgoc3RhdGUtPmRlZmF1bHRfdm9sdW1lIC8gMikgKyAyMykgPDwgOTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgY3gxOF9hdl9yZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBDWDE4X0FWX0lOSVRfUExMUzoKKwkJLyoKKwkJICogVGhlIGNyeXN0YWwgZnJlcSB1c2VkIGluIGNhbGN1bGF0aW9ucyBpbiB0aGlzIGRyaXZlciB3aWxsIGJlCisJCSAqIDI4LjYzNjM2MCBNSHouCisJCSAqIEFpbSB0byBydW4gdGhlIFBMTHMnIFZDT3MgbmVhciA0MDAgTUh6IHRvIG1pbmltemUgZXJyb3JzLgorCQkgKi8KKworCQkvKgorCQkgKiBWRENMSyAgSW50ZWdlciA9IDB4MGYsIFBvc3QgRGl2aWRlciA9IDB4MDQKKwkJICogQUlNQ0xLIEludGVnZXIgPSAweDBlLCBQb3N0IERpdmlkZXIgPSAweDE2CisJCSAqLworCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1BMTF9DVFJMMSwgMHgxNjBlMDQwZik7CisKKwkJLyogVkRDTEsgRnJhY3Rpb24gPSAweDJiZTJmZSAqLworCQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogYmVmb3JlIHBvc3QgZGl2aWRlICovCisJCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfVklEX1BMTF9GUkFDLCAweDAwMmJlMmZlKTsKKworCQkvKiBBSU1DTEsgRnJhY3Rpb24gPSAweDA1MjI3YWQgKi8KKwkJLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBwcmUgcG9zdC1kaXYqLworCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0FVWF9QTExfRlJBQywgMHgwMDUyMjdhZCk7CisKKwkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxNiAqLworCQljeDE4X2F2X3dyaXRlKGN4LCBDWEFERUNfSTJTX01DTEssIDB4NTYpOworCQlicmVhazsKKworCWNhc2UgQ1gxOF9BVl9JTklUX05PUk1BTDoKKwlkZWZhdWx0OgorCQlpZiAoIXN0YXRlLT5pc19pbml0aWFsaXplZCkgeworCQkJLyogaW5pdGlhbGl6ZSBvbiBmaXJzdCB1c2UgKi8KKwkJCXN0YXRlLT5pc19pbml0aWFsaXplZCA9IDE7CisJCQljeDE4X2F2X2luaXRpYWxpemUoY3gpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KIAogdm9pZCBjeDE4X2F2X3N0ZF9zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl2NGwyX3N0ZF9pZCBzdGQgPSBzdGF0ZS0+c3RkOwogCWludCBoYmxhbmssIGhhY3RpdmUsIGJ1cnN0LCB2YmxhbmssIHZhY3RpdmUsIHNjOwogCWludCB2Ymxhbms2NTYsIHNyY19kZWNpbWF0aW9uOwpAQCAtMjEzLDYgKzI2MSw3IEBACiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDlmLCAweDE0KTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKKwkJLyogRklYTUUgLSByZXZpc2l0IHRoZXNlIGZvciBTbGljZWQgVkJJICovCiAJCWhibGFuayA9IDEzMjsKIAkJaGFjdGl2ZSA9IDcyMDsKIAkJYnVyc3QgPSA5MzsKQEAgLTIzNiwxMyArMjg1LDQwIEBACiAJCQlzYyA9IDY3MjM1MTsKIAkJfQogCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgcmVsYXRpb25zaGlwcyBvZiBoYWxmIGxpbmUgY291bnRzIHNob3VsZCBob2xkOgorCQkgKiA1MjUgPSB2c3luYyArIHZhY3RpdmUgKyB2Ymxhbms2NTYKKwkJICogMTIgPSB2Ymxhbms2NTYgLSB2YmxhbmsKKwkJICoKKwkJICogdnN5bmM6ICAgICBhbHdheXMgNiBoYWxmLWxpbmVzIG9mIHZzeW5jIHB1bHNlcworCQkgKiB2YWN0aXZlOiAgIGhhbGYgbGluZXMgb2YgYWN0aXZlIHZpZGVvCisJCSAqIHZibGFuazY1NjogaGFsZiBsaW5lcywgYWZ0ZXIgbGluZSAzL21pZC0yNjYsIG9mIGJsYW5rZWQgdmlkZW8KKwkJICogdmJsYW5rOiAgICBoYWxmIGxpbmVzLCBhZnRlciBsaW5lIDkvMjcyLCBvZiBibGFua2VkIHZpZGVvCisJCSAqCisJCSAqIEFzIGZhciBhcyBJIGNhbiB0ZWxsOgorCQkgKiB2Ymxhbms2NTYgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhlIGZhbGxpbmcgZWRnZSBvZiB0aGUgZmlyc3QKKwkJICogCXZzeW5jIHB1bHNlIChzdGFydCBvZiBsaW5lIDQgb3IgbWlkLTI2NikKKwkJICogdmJsYW5rIHN0YXJ0cyBjb3VudGluZyBmcm9tIHRoZSBhZnRlciB0aGUgNiB2c3luYyBwdWxzZXMgYW5kCisJCSAqIAk2IG9yIDUgZXF1YWxpemF0aW9uIHB1bHNlcyAoc3RhcnQgb2YgbGluZSAxMCBvciAyNzIpCisJCSAqCisJCSAqIEZvciA1MjUgbGluZSBzeXN0ZW1zIHRoZSBkcml2ZXIgd2lsbCBleHRyYWN0IFZCSSBpbmZvcm1hdGlvbgorCQkgKiBmcm9tIGxpbmVzIDEwLTIxIGFuZCBsaW5lcyAyNzMtMjg0LgorCQkgKi8KKwkJdmJsYW5rNjU2ID0gMzg7IC8qIGxpbmVzICA0IC0gIDIyICAmICAyNjYgLSAyODQgKi8KKwkJdmJsYW5rID0gMjY7CS8qIGxpbmVzIDEwIC0gIDIyICAmICAyNzIgLSAyODQgKi8KKwkJdmFjdGl2ZSA9IDQ4MTsgIC8qIGxpbmVzIDIzIC0gMjYzICAmICAyODUgLSA1MjUgKi8KKworCQkvKgorCQkgKiBGb3IgYSAxMy41IE1wcHMgY2xvY2sgYW5kIDE1LDczNC4yNiBIeiBsaW5lIHJhdGUsIGEgbGluZSBpcworCQkgKiBpcyA4NTggcGl4ZWxzID0gNzIwIGFjdGl2ZSArIDEzOCBibGFua2luZy4gIFRoZSBIc3luYyBsZWFkaW5nCisJCSAqIGVkZ2Ugc2hvdWxkIGhhcHBlbiAxLjIgdXMgKiAxMy41IE1wcHMgfj0gMTYgcGl4ZWxzIGFmdGVyIHRoZQorCQkgKiBlbmQgb2YgYWN0aXZlIHZpZGVvLCBsZWF2aW5nIDEyMiBwaXhlbHMgb2YgaGJsYW5rIHRvIGlnbm9yZQorCQkgKiBiZWZvcmUgYWN0aXZlIHZpZGVvIHN0YXJ0cy4KKwkJICovCiAJCWhhY3RpdmUgPSA3MjA7CiAJCWhibGFuayA9IDEyMjsKLQkJdmFjdGl2ZSA9IDQ4NzsKIAkJbHVtYV9scGYgPSAxOwogCQl1dl9scGYgPSAxOwotCQl2YmxhbmsgPSAyNjsKLQkJdmJsYW5rNjU2ID0gMjY7CiAKIAkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKIAkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfNjApIHsKQEAgLTI2NSwzMyArMzQxLDM1IEBACiAJcGxsX2ludCA9IGN4MThfYXZfcmVhZChjeCwgMHgxMDgpOwogCXBsbF9mcmFjID0gY3gxOF9hdl9yZWFkNChjeCwgMHgxMGMpICYgMHgxZmZmZmZmOwogCXBsbF9wb3N0ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwOSk7Ci0JQ1gxOF9ERUJVR19JTkZPKCJQTEwgcmVncyA9IGludDogJXUsIGZyYWM6ICV1LCBwb3N0OiAldVxuIiwKLQkJCXBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdCk7CisJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTCByZWdzID0gaW50OiAldSwgZnJhYzogJXUsIHBvc3Q6ICV1XG4iLAorCQkJICAgIHBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdCk7CiAKIAlpZiAocGxsX3Bvc3QpIHsKIAkJaW50IGZpbiwgZnNjLCBwbGw7CiAKIAkJcGxsID0gKDI4NjM2MzYwTCAqICgoKCh1NjQpcGxsX2ludCkgPDwgMjUpICsgcGxsX2ZyYWMpKSA+PiAyNTsKIAkJcGxsIC89IHBsbF9wb3N0OwotCQlDWDE4X0RFQlVHX0lORk8oIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKLQkJQ1gxOF9ERUJVR19JTkZPKCJQTEwvOCA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlwbGwgLyA4MDAwMDAwLCAocGxsIC8gOCkgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCSAgICBwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTC84ID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIHBsbCAvIDgwMDAwMDAsIChwbGwgLyA4KSAlIDEwMDAwMDApOwogCiAJCWZpbiA9ICgodTY0KXNyY19kZWNpbWF0aW9uICogcGxsKSA+PiAxMjsKLQkJQ1gxOF9ERUJVR19JTkZPKCJBREMgU2FtcGxpbmcgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlmaW4gLyAxMDAwMDAwLCBmaW4gJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIkFEQyBTYW1wbGluZyBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIGZpbiAvIDEwMDAwMDAsIGZpbiAlIDEwMDAwMDApOwogCiAJCWZzYyA9ICgoKHU2NClzYykgKiBwbGwpID4+IDI0TDsKLQkJQ1gxOF9ERUJVR19JTkZPKCJDaHJvbWEgc3ViLWNhcnJpZXIgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlmc2MgLyAxMDAwMDAwLCBmc2MgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwKKwkJCQkgICAgIkNocm9tYSBzdWItY2FycmllciBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIGZzYyAvIDEwMDAwMDAsIGZzYyAlIDEwMDAwMDApOwogCi0JCUNYMThfREVCVUdfSU5GTygiaGJsYW5rICVpLCBoYWN0aXZlICVpLCAiCi0JCQkidmJsYW5rICVpICwgdmFjdGl2ZSAlaSwgdmJsYW5rNjU2ICVpLCBzcmNfZGVjICVpLCIKLQkJCSJidXJzdCAweCUwMngsIGx1bWFfbHBmICVpLCB1dl9scGYgJWksIGNvbWIgMHglMDJ4LCIKLQkJCSIgc2MgMHglMDZ4XG4iLAotCQkJaGJsYW5rLCBoYWN0aXZlLCB2YmxhbmssIHZhY3RpdmUsIHZibGFuazY1NiwKLQkJCXNyY19kZWNpbWF0aW9uLCBidXJzdCwgbHVtYV9scGYsIHV2X2xwZiwgY29tYiwgc2MpOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiaGJsYW5rICVpLCBoYWN0aXZlICVpLCB2YmxhbmsgJWksICIKKwkJCQkgICAgInZhY3RpdmUgJWksIHZibGFuazY1NiAlaSwgc3JjX2RlYyAlaSwgIgorCQkJCSAgICAiYnVyc3QgMHglMDJ4LCBsdW1hX2xwZiAlaSwgdXZfbHBmICVpLCAiCisJCQkJICAgICJjb21iIDB4JTAyeCwgc2MgMHglMDZ4XG4iLAorCQkJCSAgICBoYmxhbmssIGhhY3RpdmUsIHZibGFuaywgdmFjdGl2ZSwgdmJsYW5rNjU2LAorCQkJCSAgICBzcmNfZGVjaW1hdGlvbiwgYnVyc3QsIGx1bWFfbHBmLCB1dl9scGYsCisJCQkJICAgIGNvbWIsIHNjKTsKIAl9CiAKIAkvKiBTZXRzIGhvcml6b250YWwgYmxhbmtpbmcgZGVsYXkgYW5kIGFjdGl2ZSBsaW5lcyAqLwpAQCAtMzI1LDE4ICs0MDMsMTYgQEAKIAljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZCwgMHhmZiAmIHNjID4+IDgpOwogCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdlLCAweGZmICYgc2MgPj4gMTYpOwogCi0JLyogU2V0cyBWQkkgcGFyYW1ldGVycyAqLwogCWlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDEpOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gNTsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5ID0gMTsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldCA9ICg2ICsgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5IC0gMik7CiAJfSBlbHNlIHsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDApOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gODsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5ID0gMDsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldCA9ICgxMCArIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSAtIDIpOwogCX0KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3Ziwgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5KTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgaW5wdXRfY2hhbmdlKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwpAQCAtMzgyLDE3ICs0NTgsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnB1dF9jaGFuZ2UoY3gpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gY3gxOF9hdl92aWRlb19pbnB1dCB2aWRfaW5wdXQsCiAJCQkJCWVudW0gY3gxOF9hdl9hdWRpb19pbnB1dCBhdWRfaW5wdXQpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl1OCBpc19jb21wb3NpdGUgPSAodmlkX2lucHV0ID49IENYMThfQVZfQ09NUE9TSVRFMSAmJgogCQkJICAgdmlkX2lucHV0IDw9IENYMThfQVZfQ09NUE9TSVRFOCk7CiAJdTggcmVnOwogCXU4IHY7CiAKLQlDWDE4X0RFQlVHX0lORk8oImRlY29kZXIgc2V0IHZpZGVvIGlucHV0ICVkLCBhdWRpbyBpbnB1dCAlZFxuIiwKLQkJCXZpZF9pbnB1dCwgYXVkX2lucHV0KTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiZGVjb2RlciBzZXQgdmlkZW8gaW5wdXQgJWQsIGF1ZGlvIGlucHV0ICVkXG4iLAorCQkJICAgIHZpZF9pbnB1dCwgYXVkX2lucHV0KTsKIAogCWlmIChpc19jb21wb3NpdGUpIHsKIAkJcmVnID0gMHhmMCArICh2aWRfaW5wdXQgLSBDWDE4X0FWX0NPTVBPU0lURTEpOwpAQCAtNDA1LDggKzQ5MCw4IEBACiAJCSAgICBsdW1hID4gQ1gxOF9BVl9TVklERU9fTFVNQTggfHwKIAkJICAgIGNocm9tYSA8IENYMThfQVZfU1ZJREVPX0NIUk9NQTQgfHwKIAkJICAgIGNocm9tYSA+IENYMThfQVZfU1ZJREVPX0NIUk9NQTgpIHsKLQkJCUNYMThfRVJSKCIweCUwNHggaXMgbm90IGEgdmFsaWQgdmlkZW8gaW5wdXQhXG4iLAotCQkJCQl2aWRfaW5wdXQpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiMHglMDR4IGlzIG5vdCBhIHZhbGlkIHZpZGVvIGlucHV0IVxuIiwKKwkJCQkgICAgIHZpZF9pbnB1dCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyZWcgPSAweGYwICsgKChsdW1hIC0gQ1gxOF9BVl9TVklERU9fTFVNQTEpID4+IDQpOwpAQCAtNDMxLDcgKzUxNiw4IEBACiAJY2FzZSBDWDE4X0FWX0FVRElPODogcmVnICY9IH4weGMwOyByZWcgfD0gMHg0MDsgYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlDWDE4X0VSUigiMHglMDR4IGlzIG5vdCBhIHZhbGlkIGF1ZGlvIGlucHV0IVxuIiwgYXVkX2lucHV0KTsKKwkJQ1gxOF9FUlJfREVWKHNkLCAiMHglMDR4IGlzIG5vdCBhIHZhbGlkIGF1ZGlvIGlucHV0IVxuIiwKKwkJCSAgICAgYXVkX2lucHV0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjEsMTQgKzU0NywxMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBzZXRfdjRsc3RkKHN0cnVjdCBjeDE4ICpjeCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3ZpZGVvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKLQlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXJldHVybiBzZXRfaW5wdXQoY3gsIHJvdXRlLT5pbnB1dCwgc3RhdGUtPmF1ZF9pbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2F1ZGlvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlyZXR1cm4gc2V0X2lucHV0KGN4LCBzdGF0ZS0+dmlkX2lucHV0LCByb3V0ZS0+aW5wdXQpOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdnByZXM7CisJdTggbW9kZTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChzdGF0ZS0+cmFkaW8pCisJCXJldHVybiAwOworCisJdnByZXMgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBlKSAmIDB4MjA7CisJdnQtPnNpZ25hbCA9IHZwcmVzID8gMHhmZmZmIDogMHgwOworCisJdnQtPmNhcGFiaWxpdHkgfD0KKwkJICAgIFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKKwkJICAgIFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCisJbW9kZSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDQpOworCisJLyogZ2V0IHJ4c3ViY2hhbnMgYW5kIGF1ZG1vZGUgKi8KKwlpZiAoKG1vZGUgJiAweGYpID09IDEpCisJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJZWxzZQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKworCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQorCQl2YWwgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCisJaWYgKG1vZGUgJiAweDEwKQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOworCisJdnQtPnJ4c3ViY2hhbnMgPSB2YWw7CisJdnQtPmF1ZG1vZGUgPSBzdGF0ZS0+YXVkbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHY7CisKKwlpZiAoc3RhdGUtPnJhZGlvKQorCQlyZXR1cm4gMDsKKworCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA5KTsKKwl2ICY9IH4weGY7CisKKwlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IG1vbm8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbworCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KKwkJdiB8PSAweDQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCisJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMS9sYW5nMiAqLworCQl2IHw9IDB4NzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcyICovCisJCXYgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODA5LCB2LCB2LCAweGZmKTsKKwlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXU4IGZtdCA9IDA7IAkvKiB6ZXJvIGlzIGF1dG9kZXRlY3QgKi8KIAl1OCBwYWxfbSA9IDA7CiAKKwlpZiAoc3RhdGUtPnJhZGlvID09IDAgJiYgc3RhdGUtPnN0ZCA9PSBub3JtKQorCQlyZXR1cm4gMDsKKworCXN0YXRlLT5yYWRpbyA9IDA7CisJc3RhdGUtPnN0ZCA9IG5vcm07CisKIAkvKiBGaXJzdCB0ZXN0cyBzaG91bGQgYmUgYWdhaW5zdCBzcGVjaWZpYyBzdGQgKi8KIAlpZiAoc3RhdGUtPnN0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKIAkJZm10ID0gMHgyOwpAQCAtNDkzLDcgKzY4Myw3IEBACiAJCQlmbXQgPSAweGM7CiAJfQogCi0JQ1gxOF9ERUJVR19JTkZPKCJjaGFuZ2luZyB2aWRlbyBzdGQgdG8gZm10ICVpXG4iLCBmbXQpOworCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJjaGFuZ2luZyB2aWRlbyBzdGQgdG8gZm10ICVpXG4iLCBmbXQpOwogCiAJLyogRm9sbG93IHN0ZXAgOSBvZiBzZWN0aW9uIDMuMTYgaW4gdGhlIGN4MThfYXYgZGF0YXNoZWV0LgogCSAgIFdpdGhvdXQgdGhpcyBQQUwgbWF5IGRpc3BsYXkgYSB2ZXJ0aWNhbCBnaG9zdGluZyBlZmZlY3QuCkBAIC01MTEsMTUgKzcwMSwyMiBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHNldF92NGxjdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RhdGUtPnJhZGlvID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewotCQkJQ1gxOF9FUlIoImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLAotCQkJCSAgICBjdHJsLT52YWx1ZSk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICJpbnZhbGlkIGJyaWdodG5lc3Mgc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTUyOCw4ICs3MjUsOCBAQAogCiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJQ1gxOF9FUlIoImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAorCQkJCSAgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNTM4LDggKzczNSw4IEBACiAKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCUNYMThfRVJSKCJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsCisJCQkJICAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC01NDgsOCArNzQ1LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJQ1gxOF9FUlIoImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTU2MSwxNyArNzU5LDE4IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJcmV0dXJuIGN4MThfYXZfYXVkaW8oY3gsIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gxOF9hdl9hdWRpb19zX2N0cmwoY3gsIGN0cmwpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3Y0bGN0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBjeDE4X2F2X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJY3RybC0+dmFsdWUgPSAoczgpY3gxOF9hdl9yZWFkKGN4LCAweDQxNCkgKyAxMjg7CkBAIC01OTAsMzEgKzc4OSw1NyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCXJldHVybiBjeDE4X2F2X2F1ZGlvKGN4LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwkJcmV0dXJuIGN4MThfYXZfYXVkaW9fZ19jdHJsKGN4LCBjdHJsKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBnZXRfdjRsZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IGN4MThfYXZfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3dpdGNoIChmbXQtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gxOF9hdl92YmkoY3gsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCisJCQk2NTUzNSAvIDEwMCwgc3RhdGUtPmRlZmF1bHRfdm9sdW1lKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzZXRfdjRsZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IGN4MThfYXZfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiBjeDE4X2F2X3ZiaV9nX2ZtdChjeCwgZm10KTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwogCWludCBIU0MsIFZTQywgVnNyYywgSHNyYywgZmlsdGVyLCBWbGluZXM7CiAJaW50IGlzXzUwSHogPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwpAQCAtNjI5LDEyICs4NTQsMjYgQEAKIAkJSHNyYyA9IChjeDE4X2F2X3JlYWQoY3gsIDB4NDcyKSAmIDB4M2YpIDw8IDQ7CiAJCUhzcmMgfD0gKGN4MThfYXZfcmVhZChjeCwgMHg0NzEpICYgMHhmMCkgPj4gNDsKIAotCQlWbGluZXMgPSBwaXgtPmhlaWdodCArIChpc181MEh6ID8gNCA6IDcpOworCQkvKgorCQkgKiBUaGlzIGFkanVzdG1lbnQgcmVmbGVjdHMgdGhlIGV4Y2VzcyBvZiB2YWN0aXZlLCBzZXQgaW4KKwkJICogY3gxOF9hdl9zdGRfc2V0dXAoKSwgYWJvdmUgc3RhbmRhcmQgdmFsdWVzOgorCQkgKgorCQkgKiA0ODAgKyAxIGZvciA2MCBIeiBzeXN0ZW1zCisJCSAqIDU3NiArIDQgZm9yIDUwIEh6IHN5c3RlbXMKKwkJICovCisJCVZsaW5lcyA9IHBpeC0+aGVpZ2h0ICsgKGlzXzUwSHogPyA0IDogMSk7CiAKKwkJLyoKKwkJICogSW52YWxpZCBoZWlnaHQgYW5kIHdpZHRoIHNjYWxpbmcgcmVxdWVzdHMgYXJlOgorCQkgKiAxLiB3aWR0aCBsZXNzIHRoYW4gMS8xNiBvZiB0aGUgc291cmNlIHdpZHRoCisJCSAqIDIuIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgc291cmNlIHdpZHRoCisJCSAqIDMuIGhlaWdodCBsZXNzIHRoYW4gMS84IG9mIHRoZSBzb3VyY2UgaGVpZ2h0CisJCSAqIDQuIGhlaWdodCBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBoZWlnaHQKKwkJICovCiAJCWlmICgocGl4LT53aWR0aCAqIDE2IDwgSHNyYykgfHwgKEhzcmMgPCBwaXgtPndpZHRoKSB8fAogCQkgICAgKFZsaW5lcyAqIDggPCBWc3JjKSB8fCAoVnNyYyA8IFZsaW5lcykpIHsKLQkJCUNYMThfRVJSKCIlZHglZCBpcyBub3QgYSB2YWxpZCBzaXplIVxuIiwKLQkJCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiJWR4JWQgaXMgbm90IGEgdmFsaWQgc2l6ZSFcbiIsCisJCQkJICAgICBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC02NTEsOCArODkwLDkgQEAKIAkJZWxzZQogCQkJZmlsdGVyID0gMzsKIAotCQlDWDE4X0RFQlVHX0lORk8oImRlY29kZXIgc2V0IHNpemUgJWR4JWQgLT4gc2NhbGUgICV1eCV1XG4iLAotCQkJICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0LCBIU0MsIFZTQyk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsCisJCQkJICAgICJkZWNvZGVyIHNldCBzaXplICVkeCVkIC0+IHNjYWxlICAldXgldVxuIiwKKwkJCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsIEhTQywgVlNDKTsKIAogCQkvKiBIU0NBTEU9SFNDICovCiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDE4LCBIU0MgJiAweGZmKTsKQEAgLTY2NiwyMzEgKzkwNiwzMiBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gxOF9hdl92Ymlfc19mbXQoY3gsIGZtdCk7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gxOF9hdl92Ymlfc19mbXQoY3gsIGZtdCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjeDE4X2F2X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKLQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQkvKiBpZ25vcmUgdGhlc2UgY29tbWFuZHMgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVFVORVJfU0VUX1RZUEVfQUREUjoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQpIHsKLQkJQ1gxOF9ERUJVR19JTkZPKCJjbWQgJTA4eCB0cmlnZ2VyZWQgZncgbG9hZFxuIiwgY21kKTsKLQkJLyogaW5pdGlhbGl6ZSBvbiBmaXJzdCB1c2UgKi8KLQkJc3RhdGUtPmlzX2luaXRpYWxpemVkID0gMTsKLQkJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JCXJldHVybiBjeDE4X2F2X2F1ZGlvKGN4LCBjbWQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQkJQ1gxOF9ERUJVR19JTkZPKCJlbmFibGUgb3V0cHV0XG4iKTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiJXMgb3V0cHV0XG4iLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJaWYgKGVuYWJsZSkgewogCQljeDE4X2F2X3dyaXRlKGN4LCAweDExNSwgMHg4Yyk7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE2LCAweDA3KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCUNYMThfREVCVUdfSU5GTygiZGlzYWJsZSBvdXRwdXRcbiIpOworCX0gZWxzZSB7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE1LCAweDAwKTsKIAkJY3gxOF9hdl93cml0ZShjeCwgMHgxMTYsIDB4MDApOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCWxvZ192aWRlb19zdGF0dXMoY3gpOwotCQlsb2dfYXVkaW9fc3RhdHVzKGN4KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBnZXRfdjRsY3RybChjeCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gc2V0X3Y0bGN0cmwoY3gsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0KLQkJc3dpdGNoIChxYy0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAocWMtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKLQkJCQk2NTUzNSAvIDEwMCwgc3RhdGUtPmRlZmF1bHRfdm9sdW1lKTsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWNhc2UgVklESU9DX0dfU1REOgotCQkqKHY0bDJfc3RkX2lkICopYXJnID0gc3RhdGUtPnN0ZDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJaWYgKHN0YXRlLT5yYWRpbyA9PSAwICYmIHN0YXRlLT5zdGQgPT0gKih2NGwyX3N0ZF9pZCAqKWFyZykKLQkJCXJldHVybiAwOwotCQlzdGF0ZS0+cmFkaW8gPSAwOwotCQlzdGF0ZS0+c3RkID0gKih2NGwyX3N0ZF9pZCAqKWFyZzsKLQkJcmV0dXJuIHNldF92NGxzdGQoY3gpOwotCi0JY2FzZSBBVURDX1NFVF9SQURJTzoKLQkJc3RhdGUtPnJhZGlvID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+dmlkX2lucHV0OwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgotCQlyZXR1cm4gc2V0X2lucHV0KGN4LCByb3V0ZS0+aW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOwotCi0JY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKLQkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmF1ZF9pbnB1dDsKLQkJcm91dGUtPm91dHB1dCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJcmV0dXJuIHNldF9pbnB1dChjeCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKLQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCQlpbnB1dF9jaGFuZ2UoY3gpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQl1OCB2cHJlcyA9IGN4MThfYXZfcmVhZChjeCwgMHg0MGUpICYgMHgyMDsKLQkJdTggbW9kZTsKLQkJaW50IHZhbCA9IDA7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOwotCi0JCXZ0LT5zaWduYWwgPSB2cHJlcyA/IDB4ZmZmZiA6IDB4MDsKLQotCQl2dC0+Y2FwYWJpbGl0eSB8PQotCQkgICAgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAotCQkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7Ci0KLQkJbW9kZSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDQpOwotCi0JCS8qIGdldCByeHN1YmNoYW5zIGFuZCBhdWRtb2RlICovCi0JCWlmICgobW9kZSAmIDB4ZikgPT0gMSkKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCWVsc2UKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9NT05POwotCi0JCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQotCQkJdmFsID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQotCQlpZiAobW9kZSAmIDB4MTApCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOwotCi0JCXZ0LT5yeHN1YmNoYW5zID0gdmFsOwotCQl2dC0+YXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJdTggdjsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0KLQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDkpOwotCQl2ICY9IH4weGY7Ci0KLQkJc3dpdGNoICh2dC0+YXVkbW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBtb25vCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KLQkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLwotCQkJdiB8PSAweDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6Ci0JCQkvKiBtb25vICAgICAgLT4gbW9ubwotCQkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbwotCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxL2xhbmcyICovCi0JCQl2IHw9IDB4NzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKLQkJCS8qIG1vbm8gICAgICAtPiBtb25vCi0JCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzIgKi8KLQkJCXYgfD0gMHgxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDksIHYsIHYsIDB4ZmYpOwotCQlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQkJcmV0dXJuIGdldF92NGxmbXQoY3gsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JCXJldHVybiBzZXRfdjRsZm10KGN4LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKLQotCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKLQkJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgbG9nX3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZtdF9zdHJzW10gPSB7CkBAIC05MDMsMzYgKzk0NCw0MCBAQAogCX07CiAKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmc3RhdGUtPnNkOwogCXU4IHZpZGZtdF9zZWwgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDAwKSAmIDB4ZjsKIAl1OCBnZW5fc3RhdDEgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBkKTsKIAl1OCBnZW5fc3RhdDIgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBlKTsKIAlpbnQgdmlkX2lucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKIAotCUNYMThfSU5GTygiVmlkZW8gc2lnbmFsOiAgICAgICAgICAgICAgJXNwcmVzZW50XG4iLAotCQkgICAgKGdlbl9zdGF0MiAmIDB4MjApID8gIiIgOiAibm90ICIpOwotCUNYMThfSU5GTygiRGV0ZWN0ZWQgZm9ybWF0OiAgICAgICAgICAgJXNcbiIsCi0JCSAgICBmbXRfc3Ryc1tnZW5fc3RhdDEgJiAweGZdKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiVmlkZW8gc2lnbmFsOiAgICAgICAgICAgICAgJXNwcmVzZW50XG4iLAorCQkgICAgICAoZ2VuX3N0YXQyICYgMHgyMCkgPyAiIiA6ICJub3QgIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGZvcm1hdDogICAgICAgICAgICVzXG4iLAorCQkgICAgICBmbXRfc3Ryc1tnZW5fc3RhdDEgJiAweGZdKTsKIAotCUNYMThfSU5GTygiU3BlY2lmaWVkIHN0YW5kYXJkOiAgICAgICAgJXNcbiIsCi0JCSAgICB2aWRmbXRfc2VsID8gZm10X3N0cnNbdmlkZm10X3NlbF0gOiAiYXV0b21hdGljIGRldGVjdGlvbiIpOworCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgc3RhbmRhcmQ6ICAgICAgICAlc1xuIiwKKwkJICAgICAgdmlkZm10X3NlbCA/IGZtdF9zdHJzW3ZpZGZtdF9zZWxdCisJCQkJIDogImF1dG9tYXRpYyBkZXRlY3Rpb24iKTsKIAogCWlmICh2aWRfaW5wdXQgPj0gQ1gxOF9BVl9DT01QT1NJVEUxICYmCiAJICAgIHZpZF9pbnB1dCA8PSBDWDE4X0FWX0NPTVBPU0lURTgpIHsKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgdmlkZW8gaW5wdXQ6ICAgICBDb21wb3NpdGUgJWRcbiIsCi0JCQl2aWRfaW5wdXQgLSBDWDE4X0FWX0NPTVBPU0lURTEgKyAxKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgIENvbXBvc2l0ZSAlZFxuIiwKKwkJCSAgICAgIHZpZF9pbnB1dCAtIENYMThfQVZfQ09NUE9TSVRFMSArIDEpOwogCX0gZWxzZSB7Ci0JCUNYMThfSU5GTygiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgUy1WaWRlbyAoTHVtYSBJbiVkLCBDaHJvbWEgSW4lZClcbiIsCi0JCQkodmlkX2lucHV0ICYgMHhmMCkgPj4gNCwgKHZpZF9pbnB1dCAmIDB4ZjAwKSA+PiA4KTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgICIKKwkJCSAgICAgICJTLVZpZGVvIChMdW1hIEluJWQsIENocm9tYSBJbiVkKVxuIiwKKwkJCSAgICAgICh2aWRfaW5wdXQgJiAweGYwKSA+PiA0LAorCQkJICAgICAgKHZpZF9pbnB1dCAmIDB4ZjAwKSA+PiA4KTsKIAl9CiAKLQlDWDE4X0lORk8oIlNwZWNpZmllZCBhdWRpb2Nsb2NrIGZyZXE6ICVkIEh6XG4iLCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOworCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgYXVkaW9jbG9jayBmcmVxOiAlZCBIelxuIiwKKwkJICAgICAgc3RhdGUtPmF1ZGNsa19mcmVxKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgbG9nX2F1ZGlvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl1OCBkb3dubG9hZF9jdGwgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKTsKIAl1OCBtb2RfZGV0X3N0YXQwID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwNCk7CiAJdTggbW9kX2RldF9zdGF0MSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDUpOwpAQCAtOTU1LDcgKzEwMDAsNyBAQAogCWNhc2UgMHhmZTogcCA9ICJmb3JjZWQgbW9kZSI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAibm90IGRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJEZXRlY3RlZCBhdWRpbyBtb2RlOiAgICAgICAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGF1ZGlvIG1vZGU6ICAgICAgICVzXG4iLCBwKTsKIAogCXN3aXRjaCAobW9kX2RldF9zdGF0MSkgewogCWNhc2UgMHgwMDogcCA9ICJub3QgZGVmaW5lZCI7IGJyZWFrOwpAQCAtOTgwLDExICsxMDI1LDExIEBACiAJY2FzZSAweGZmOiBwID0gIm5vIGRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJub3QgZGVmaW5lZCI7IGJyZWFrOwogCX0KLQlDWDE4X0lORk8oIkRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkOiAgICVzXG4iLCBwKTsKLQlDWDE4X0lORk8oIkF1ZGlvIG11dGVkOiAgICAgICAgICAgICAgICVzXG4iLAotCQkgICAgKG11dGVfY3RsICYgMHgyKSA/ICJ5ZXMiIDogIm5vIik7Ci0JQ1gxOF9JTkZPKCJBdWRpbyBtaWNyb2NvbnRyb2xsZXI6ICAgICAlc1xuIiwKLQkJICAgIChkb3dubG9hZF9jdGwgJiAweDEwKSA/ICJydW5uaW5nIiA6ICJzdG9wcGVkIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkOiAgICVzXG4iLCBwKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiQXVkaW8gbXV0ZWQ6ICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgICAgIChtdXRlX2N0bCAmIDB4MikgPyAieWVzIiA6ICJubyIpOworCUNYMThfSU5GT19ERVYoc2QsICJBdWRpbyBtaWNyb2NvbnRyb2xsZXI6ICAgICAlc1xuIiwKKwkJICAgICAgKGRvd25sb2FkX2N0bCAmIDB4MTApID8gInJ1bm5pbmciIDogInN0b3BwZWQiKTsKIAogCXN3aXRjaCAoYXVkaW9fY29uZmlnID4+IDQpIHsKIAljYXNlIDB4MDA6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CkBAIC0xMDA1LDcgKzEwNTAsNyBAQAogCWNhc2UgMHgwZjogcCA9ICJhdXRvbWF0aWMgZGV0ZWN0aW9uIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIHN0YW5kYXJkOiAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkNvbmZpZ3VyZWQgYXVkaW8gc3RhbmRhcmQ6ICVzXG4iLCBwKTsKIAogCWlmICgoYXVkaW9fY29uZmlnID4+IDQpIDwgMHhGKSB7CiAJCXN3aXRjaCAoYXVkaW9fY29uZmlnICYgMHhGKSB7CkBAIC0xMDE5LDcgKzEwNjQsNyBAQAogCQljYXNlIDB4MDc6IHAgPSAiRFVBTDMgKEFCKSI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7CiAJCX0KLQkJQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIG1vZGU6ICAgICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJDb25maWd1cmVkIGF1ZGlvIG1vZGU6ICAgICAlc1xuIiwgcCk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChhdWRpb19jb25maWcgJiAweEYpIHsKIAkJY2FzZSAweDAwOiBwID0gIkJHIjsgYnJlYWs7CkBAIC0xMDM3LDE0ICsxMDgyLDE0IEBACiAJCWNhc2UgMHgwZjogcCA9ICJhdXRvbWF0aWMgc3RhbmRhcmQgYW5kIG1vZGUgZGV0ZWN0aW9uIjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJCX0KLQkJQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIHN5c3RlbTogICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJDb25maWd1cmVkIGF1ZGlvIHN5c3RlbTogICAlc1xuIiwgcCk7CiAJfQogCiAJaWYgKGF1ZF9pbnB1dCkKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICBUdW5lciAoSW4lZClcbiIsCi0JCQkJYXVkX2lucHV0KTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIFR1bmVyIChJbiVkKVxuIiwKKwkJCSAgICAgIGF1ZF9pbnB1dCk7CiAJZWxzZQotCQlDWDE4X0lORk8oIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIEV4dGVybmFsXG4iKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIEV4dGVybmFsXG4iKTsKIAogCXN3aXRjaCAocHJlZl9tb2RlICYgMHhmKSB7CiAJY2FzZSAwOiBwID0gIm1vbm8vbGFuZ3VhZ2UgQSI7IGJyZWFrOwpAQCAtMTA1NywxNCArMTEwMiwxNCBAQAogCWNhc2UgNzogcCA9ICJsYW5ndWFnZSBBQiI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJfQotCUNYMThfSU5GTygiUHJlZmVycmVkIGF1ZGlvIG1vZGU6ICAgICAgJXNcbiIsIHApOworCUNYMThfSU5GT19ERVYoc2QsICJQcmVmZXJyZWQgYXVkaW8gbW9kZTogICAgICAlc1xuIiwgcCk7CiAKIAlpZiAoKGF1ZGlvX2NvbmZpZyAmIDB4ZikgPT0gMHhmKSB7CiAJCXN3aXRjaCAoKGFmYzAgPj4gMykgJiAweDEpIHsKIAkJY2FzZSAwOiBwID0gInN5c3RlbSBESyI7IGJyZWFrOwogCQljYXNlIDE6IHAgPSAic3lzdGVtIEwiOyBicmVhazsKIAkJfQotCQlDWDE4X0lORk8oIlNlbGVjdGVkIDY1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNlbGVjdGVkIDY1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKIAogCQlzd2l0Y2ggKGFmYzAgJiAweDcpIHsKIAkJY2FzZSAwOiBwID0gIkNocm9tYSI7IGJyZWFrOwpAQCAtMTA3NCw2ICsxMTE5LDEzMSBAQAogCQljYXNlIDQ6IHAgPSAiYXV0b2RldGVjdCI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwogCQl9Ci0JCUNYMThfSU5GTygiU2VsZWN0ZWQgNDUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOworCQlDWDE4X0lORk9fREVWKHNkLCAiU2VsZWN0ZWQgNDUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOwogCX0KIH0KKworc3RhdGljIGludCBjeDE4X2F2X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlsb2dfdmlkZW9fc3RhdHVzKGN4KTsKKwlsb2dfYXVkaW9fc3RhdHVzKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3gxOF9hdl9kYmdfbWF0Y2goY29uc3Qgc3RydWN0IHY0bDJfZGJnX21hdGNoICptYXRjaCkKK3sKKwlyZXR1cm4gbWF0Y2gtPnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0hPU1QgJiYgbWF0Y2gtPmFkZHIgPT0gMTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCisJaWYgKGN4MThfYXZfZGJnX21hdGNoKCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBzdGF0ZS0+aWQ7CisJCWNoaXAtPnJldmlzaW9uID0gc3RhdGUtPnJldjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IGN4MThfYXZfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIWN4MThfYXZfZGJnX21hdGNoKCZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChyZWctPnJlZyAmIDB4MykgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+c2l6ZSA9IDQ7CisJcmVnLT52YWwgPSBjeDE4X2F2X3JlYWQ0KGN4LCByZWctPnJlZyAmIDB4MDAwMDBmZmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIWN4MThfYXZfZGJnX21hdGNoKCZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChyZWctPnJlZyAmIDB4MykgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCWN4MThfYXZfd3JpdGU0KGN4LCByZWctPnJlZyAmIDB4MDAwMDBmZmMsIHJlZy0+dmFsKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MThfYXZfZ2VuZXJhbF9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGN4MThfYXZfZ19jaGlwX2lkZW50LAorCS5sb2dfc3RhdHVzID0gY3gxOF9hdl9sb2dfc3RhdHVzLAorCS5pbml0ID0gY3gxOF9hdl9pbml0LAorCS5yZXNldCA9IGN4MThfYXZfcmVzZXQsCisJLnF1ZXJ5Y3RybCA9IGN4MThfYXZfcXVlcnljdHJsLAorCS5nX2N0cmwgPSBjeDE4X2F2X2dfY3RybCwKKwkuc19jdHJsID0gY3gxOF9hdl9zX2N0cmwsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gY3gxOF9hdl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gY3gxOF9hdl9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBjeDE4X2F2X3R1bmVyX29wcyA9IHsKKwkuc19yYWRpbyA9IGN4MThfYXZfc19yYWRpbywKKwkuc19mcmVxdWVuY3kgPSBjeDE4X2F2X3NfZnJlcXVlbmN5LAorCS5nX3R1bmVyID0gY3gxOF9hdl9nX3R1bmVyLAorCS5zX3R1bmVyID0gY3gxOF9hdl9zX3R1bmVyLAorCS5zX3N0ZCA9IGN4MThfYXZfc19zdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDE4X2F2X2F1ZGlvX29wcyA9IHsKKwkuc19jbG9ja19mcmVxID0gY3gxOF9hdl9zX2Nsb2NrX2ZyZXEsCisJLnNfcm91dGluZyA9IGN4MThfYXZfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgY3gxOF9hdl92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGN4MThfYXZfc192aWRlb19yb3V0aW5nLAorCS5kZWNvZGVfdmJpX2xpbmUgPSBjeDE4X2F2X2RlY29kZV92YmlfbGluZSwKKwkuc19zdHJlYW0gPSBjeDE4X2F2X3Nfc3RyZWFtLAorCS5nX2ZtdCA9IGN4MThfYXZfZ19mbXQsCisJLnNfZm10ID0gY3gxOF9hdl9zX2ZtdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGN4MThfYXZfb3BzID0geworCS5jb3JlID0gJmN4MThfYXZfZ2VuZXJhbF9vcHMsCisJLnR1bmVyID0gJmN4MThfYXZfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZjeDE4X2F2X2F1ZGlvX29wcywKKwkudmlkZW8gPSAmY3gxOF9hdl92aWRlb19vcHMsCit9OworCitpbnQgY3gxOF9hdl9wcm9iZShzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJc3RhdGUtPnJldiA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19DSElQX0NUUkwpICYgMHhmZmZmOworCXN0YXRlLT5pZCA9ICgoc3RhdGUtPnJldiA+PiA0KSA9PSBDWEFERUNfQ0hJUF9UWVBFX01BS08pCisJCSAgICA/IFY0TDJfSURFTlRfQ1gyMzQxOF84NDMgOiBWNEwyX0lERU5UX1VOS05PV047CisKKwlzdGF0ZS0+dmlkX2lucHV0ID0gQ1gxOF9BVl9DT01QT1NJVEU3OworCXN0YXRlLT5hdWRfaW5wdXQgPSBDWDE4X0FWX0FVRElPODsKKwlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKKwlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKKwlzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgPSAwOworCXN0YXRlLT5zbGljZXJfbGluZV9vZmZzZXQgPSAoMTAgKyBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgLSAyKTsKKworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX3N1YmRldl9pbml0KHNkLCAmY3gxOF9hdl9vcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoc2QsIGN4KTsKKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwKKwkJICIlcyAlMDN4IiwgY3gtPnY0bDJfZGV2Lm5hbWUsIChzdGF0ZS0+cmV2ID4+IDQpKTsKKwlzZC0+Z3JwX2lkID0gQ1gxOF9IV180MThfQVY7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigmY3gtPnY0bDJfZGV2LCBzZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKaW5kZXggY2Y2OGE2MC4uYzQ1ODEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaApAQCAtMjUsNiArMjUsOCBAQAogI2lmbmRlZiBfQ1gxOF9BVl9DT1JFX0hfCiAjZGVmaW5lIF9DWDE4X0FWX0NPUkVfSF8KIAorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKIHN0cnVjdCBjeDE4OwogCiBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgewpAQCAtNzMsMTcgKzc1LDQwIEBACiB9OwogCiBzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCWludCByYWRpbzsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJZW51bSBjeDE4X2F2X3ZpZGVvX2lucHV0IHZpZF9pbnB1dDsKIAllbnVtIGN4MThfYXZfYXVkaW9faW5wdXQgYXVkX2lucHV0OwogCXUzMiBhdWRjbGtfZnJlcTsKIAlpbnQgYXVkbW9kZTsKLQlpbnQgdmJpX2xpbmVfb2Zmc2V0OwogCWludCBkZWZhdWx0X3ZvbHVtZTsKIAl1MzIgaWQ7CiAJdTMyIHJldjsKIAlpbnQgaXNfaW5pdGlhbGl6ZWQ7CisKKwkvKgorCSAqIFRoZSBWQkkgc2xpY2VyIHN0YXJ0cyBvcGVyYXRpbmcgYW5kIGNvdW50aW5nIGxpbmVzLCBiZWdpbmluZyBhdAorCSAqIHNsaWNlciBsaW5lIGNvdW50IG9mIDEsIGF0IEQgbGluZXMgYWZ0ZXIgdGhlIGRlYXNzZXJ0aW9uIG9mIFZSRVNFVC4KKwkgKiBUaGlzIHN0YXJpbmcgZmllbGQgbGluZSwgUywgaXMgNiAoJiAzMTkpIG9yIDEwICgmIDI3MykgZm9yIDYyNSBvciA1MjUKKwkgKiBsaW5lIHN5c3RlbXMgcmVzcGVjdGl2ZWx5LiAgU2xpY2VkIGFuY2lsbGFyeSBkYXRhIGNhcHR1cmVkIG9uIFZCSQorCSAqIHNsaWNlciBsaW5lIE0gaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIFZCSSBzbGljZXIgaXMgZG9uZSB3aXRoIGxpbmUgTSwKKwkgKiB3aGVuIFZCSSBzbGljZXIgbGluZSBjb3VudCBpcyBOID0gTSsxLiAgVGh1cyB3aGVuIHRoZSBWQkkgc2xpY2VyCisJICogcmVwb3J0cyBhIFZCSSBzbGljZXIgbGluZSBudW1iZXIgd2l0aCBhbmNpbGxhcnkgZGF0YSwgdGhlIElESUQwIGJ5dGUKKwkgKiBpbmRpY2F0ZXMgVkJJIHNsaWNlciBsaW5lIE4uICBUaGUgYWN0dWFsIGZpZWxkIGxpbmUgdGhhdCB0aGUgY2FwdHVyZWQKKwkgKiBkYXRhIGNvbWVzIGZyb20gaXMKKwkgKgorCSAqIEwgPSBNKyhTK0QtMSkgPSBOLTErKFMrRC0xKSA9IE4gKyAoUytELTIpLgorCSAqCisJICogTCBpcyB0aGUgbGluZSBpbiB0aGUgZmllbGQsIG5vdCBmcmFtZSwgZnJvbSB3aGljaCB0aGUgVkJJIGRhdGEgY2FtZS4KKwkgKiBOIGlzIHRoZSBsaW5lIHJlcG9ydGVkIGJ5IHRoZSBzbGljZXIgaW4gdGhlIGFuY2lsbGFyeSBkYXRhLgorCSAqIEQgaXMgdGhlIHNsaWNlcl9saW5lX2RlbGF5IHZhbHVlIHByb2dyYW1tZWQgaW50byByZWdpc3RlciAweDQ3Zi4KKwkgKiBTIGlzIDYgZm9yIDYyNSBsaW5lIHN5c3RlbXMgb3IgMTAgZm9yIDUyNSBsaW5lIHN5c3RlbXMKKwkgKiAoUytELTIpIGlzIHRoZSBzbGljZXJfbGluZV9vZmZzZXQgdXNlZCB0byBjb252ZXJ0IHNsaWNlciByZXBvcnRlZAorCSAqIGxpbmUgY291bnRzIHRvIGFjdHVhbCBmaWVsZCBsaW5lcy4KKwkgKi8KKwlpbnQgc2xpY2VyX2xpbmVfZGVsYXk7CisJaW50IHNsaWNlcl9saW5lX29mZnNldDsKIH07CiAKIApAQCAtMjk4LDYgKzMyMywxNiBAQAogI2RlZmluZSBDWEFERUNfU0VMRUNUX0FVRElPX1NUQU5EQVJEX0ZNICAgIDB4RjkgIC8qIEZNIHJhZGlvICovCiAjZGVmaW5lIENYQURFQ19TRUxFQ1RfQVVESU9fU1RBTkRBUkRfQVVUTyAgMHhGRiAgLyogQXV0byBkZXRlY3QgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqdG9fY3gxOF9hdl9zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBjeDE4X2F2X3N0YXRlLCBzZCk7Cit9CisKK2VudW0gY3gxOF9hdl9zdWJkZXZfaW5pdF9hcmcgeworCUNYMThfQVZfSU5JVF9OT1JNQUwgPSAwLAorCUNYMThfQVZfSU5JVF9QTExTID0gMSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDE4X2F2LWNvcmUuYyAJCQkJCQkJICAgKi8KIGludCBjeDE4X2F2X3dyaXRlKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlKTsKQEAgLTMxMCwyMCArMzQ1LDI2IEBACiB1MzIgY3gxOF9hdl9yZWFkNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKTsKIGludCBjeDE4X2F2X2FuZF9vcihzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBtYXNrLCB1OCB2YWx1ZSk7CiBpbnQgY3gxOF9hdl9hbmRfb3I0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwotaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIHZvaWQgY3gxOF9hdl9zdGRfc2V0dXAoc3RydWN0IGN4MTggKmN4KTsKIAoraW50IGN4MThfYXZfcHJvYmUoc3RydWN0IGN4MTggKmN4KTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtZmlybXdhcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBpbnQgY3gxOF9hdl9sb2FkZncoc3RydWN0IGN4MTggKmN4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtYXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gxOF9hdl9hdWRpbyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gxOF9hdl9hdWRpb19nX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDE4X2F2X2F1ZGlvX3NfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworaW50IGN4MThfYXZfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIHZvaWQgY3gxOF9hdl9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgY3gxOCAqY3gpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gxOF9hdi12YmkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWludCBjeDE4X2F2X3ZiaShzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKTsKK2ludCBjeDE4X2F2X3ZiaV9nX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKK2ludCBjeDE4X2F2X3ZiaV9zX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYwppbmRleCBjNjRmZDBhLi40OWE1NWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW50IGN4MThfYXZfbG9hZGZ3KHN0cnVjdCBjeDE4ICpjeCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmN4LT5hdl9zdGF0ZS5zZDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAl1MzIgc2l6ZTsKIAl1MzIgdjsKQEAgLTM2LDggKzM3LDggQEAKIAlpbnQgaTsKIAlpbnQgcmV0cmllczEgPSAwOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGV0ZJTEUsICZjeC0+ZGV2LT5kZXYpICE9IDApIHsKLQkJQ1gxOF9FUlIoInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBGV0ZJTEUpOworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgRldGSUxFLCAmY3gtPnBjaV9kZXYtPmRldikgIT0gMCkgeworCQlDWDE4X0VSUl9ERVYoc2QsICJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OCw3ICs4OSw3IEBACiAJCXJldHJpZXMxKys7CiAJfQogCWlmIChyZXRyaWVzMSA+PSA1KSB7Ci0JCUNYMThfRVJSKCJ1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKKwkJQ1gxOF9FUlJfREVWKHNkLCAidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMTUsOSArMTE2LDkgQEAKIAkgICBhcmUgZ2VuZXJhdGVkKSAqLwogCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfSTJTX09VVF9DVEwsIDB4MDAwMDAxQTApOwogCi0JLyogc2V0IGFsdCBJMnMgbWFzdGVyIGNsb2NrIHRvIC8xNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycworCS8qIHNldCBhbHQgSTJzIG1hc3RlciBjbG9jayB0byAvMHgxNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycwogCSAgIHBhc3N0aHJvdWdoICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1MDAwQjY4Nyk7CisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1NjAwQjY4Nyk7CiAKIAljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19TVERfREVUX0NUTCwgMHgwMDAwMDBGNiwgMHgwMDAwMDBGNiwKIAkJCQkJCQkJICAweDNGMDBGRkZGKTsKQEAgLTEzMSw3ICsxMzIsOCBAQAogCXYgPSBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X0FVRElPX0VOQUJMRSk7CiAJLyogSWYgYml0IDExIGlzIDEsIGNsZWFyIGJpdCAxMCAqLwogCWlmICh2ICYgMHg4MDApCi0JCWN4MThfd3JpdGVfcmVnKGN4LCB2ICYgMHhGRkZGRkJGRiwgQ1gxOF9BVURJT19FTkFCTEUpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHYgJiAweEZGRkZGQkZGLCBDWDE4X0FVRElPX0VOQUJMRSwKKwkJCQkgICAgICAwLCAweDQwMCk7CiAKIAkvKiBFbmFibGUgV1cgYXV0byBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gKi8KIAl2ID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX1NURF9ERVRfQ1RMKTsKQEAgLTE0Miw2ICsxNDQsNiBAQAogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlDWDE4X0lORk8oImxvYWRlZCAlcyBmaXJtd2FyZSAoJWQgYnl0ZXMpXG4iLCBGV0ZJTEUsIHNpemUpOworCUNYMThfSU5GT19ERVYoc2QsICJsb2FkZWQgJXMgZmlybXdhcmUgKCVkIGJ5dGVzKVxuIiwgRldGSUxFLCBzaXplKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKaW5kZXggMTUyN2VhNC4uMjNiMzE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKQEAgLTI0LDYgKzI0LDUyIEBACiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgogCisvKgorICogRm9yIHNsaWNlZCBWQkkgb3V0cHV0LCB3ZSBzZXQgdXAgdG8gdXNlIFZJUC0xLjEsIDgtYml0IG1vZGUsCisgKiBOTiBjb3VudHMgMSBieXRlIER3b3JkcywgYW4gSURJRCB3aXRoIHRoZSBWQkkgbGluZSAjIGluIGl0LgorICogVGh1cywgYWNjb3JkaW5nIHRvIHRoZSBWSVAtMiBTcGVjLCBvdXIgVkJJIGFuY2lsbGFyeSBkYXRhIGxpbmVzCisgKiAoc2hvdWxkISkgbG9vayBsaWtlOgorICoJNCBieXRlIEVBViBjb2RlOiAgICAgICAgICAweGZmIDB4MDAgMHgwMCAweFJQCisgKgl1bmtub3duIG51bWJlciBvZiBwb3NzaWJsZSBpZGxlIGJ5dGVzCisgKgkzIGJ5dGUgQW5jIGRhdGEgcHJlYW1ibGU6IDB4MDAgMHhmZiAweGZmCisgKgkxIGJ5dGUgZGF0YSBpZGVudGlmaWVyOiAgIG5lMDEwaWlpIChwYXJpdHkgYml0cywgMDEwLCBESUQgYml0cykKKyAqCTEgYnl0ZSBzZWNvbmRhcnkgZGF0YSBpZDogbmVzc3Nzc3MgKHBhcml0eSBiaXRzLCBTRElEIGJpdHMpCisgKgkxIGJ5dGUgZGF0YSB3b3JkIGNvdW50OiAgIG5lY2NjY2NjIChwYXJpdHkgYml0cywgTk4gRHdvcmQgY291bnQpCisgKgkyIGJ5dGUgSW50ZXJuYWwgRElEOgkgIFZCSS1saW5lLSMgMHg4MAorICoJTk4gZGF0YSBieXRlcworICoJMSBieXRlIGNoZWNrc3VtCisgKglGaWxsIGJ5dGVzIG5lZWRlZCB0byBmaWwgb3V0IHRvIDQqTk4gYnl0ZXMgb2YgcGF5bG9hZAorICoKKyAqIFRoZSBSUCBjb2RlcyBmb3IgRUFWcyB3aGVuIGluIFZJUC0xLjEgbW9kZSwgbm90IGluIHJhdyBtb2RlLCAmCisgKiBpbiB0aGUgdmVydGljYWwgYmxhbmtpbmcgaW50ZXJ2YWwgYXJlOgorICoJMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCTB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDApCisgKgorICogU2luY2UgdGhlIFYgYml0IGlzIG9ubHkgYWxsb3dlZCB0byB0b2dnbGUgaW4gdGhlIEVBViBSUCBjb2RlLCBqdXN0CisgKiBiZWZvcmUgdGhlIGZpcnN0IGFjdGl2ZSByZWdpb24gbGluZSBhbmQgZm9yIGFjdGl2ZSBsaW5lcywgdGhleSBhcmU6CisgKgkweDkwIChUYXNrICAgICAgICAgMCAwIEhvcml6b250YWxCbGFuayAwIDAgMCAwKQorICoJMHhkMCAoVGFzayBFdmVuRmllbGQgMCBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCisgKiBUaGUgdXNlciBhcHBsaWNhdGlvbiBESUQgYnl0ZXMgd2UgY2FyZSBhYm91dCBhcmU6CisgKgkweDkxICgxIDAgMDEwICAgICAgICAwICFBY3RpdmVMaW5lIEFuY0RhdGFQcmVzZW50KQorICoJMHg1NSAoMCAxIDAxMCAybmRGaWVsZCAhQWN0aXZlTGluZSBBbmNEYXRhUHJlc2VudCkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2RpZFsyXSA9IHsgMHg5MSwgMHg1NSB9OworCitzdHJ1Y3QgdmJpX2FuY19kYXRhIHsKKwkvKiB1OCBlYXZbNF07ICovCisJLyogdTggaWRsZVtdOyBWYXJpYWJsZSBudW1iZXIgb2YgaWRsZSBieXRlcyAqLworCXU4IHByZWFtYmxlWzNdOworCXU4IGRpZDsKKwl1OCBzZGlkOworCXU4IGRhdGFfY291bnQ7CisJdTggaWRpZFsyXTsKKwl1OCBwYXlsb2FkWzFdOyAvKiBkYXRhX2NvdW50IG9mIHBheWxvYWQgKi8KKwkvKiB1OCBjaGVja3N1bTsgKi8KKwkvKiB1OCBmaWxsW107IFZhcmlhYmxlIG51bWJlciBvZiBmaWxsIGJ5dGVzICovCit9OworCiBzdGF0aWMgaW50IG9kZF9wYXJpdHkodTggYykKIHsKIAljIF49IChjID4+IDQpOwpAQCAtODMsMTg4ICsxMjksMTg5IEBACiAJcmV0dXJuIGVyciAmIDB4ZjA7CiB9CiAKLWludCBjeDE4X2F2X3ZiaShzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDE4X2F2X3ZiaV9nX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJc3RhdGljIGNvbnN0IHUxNiBsY3IydmJpW10gPSB7CisJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KKwkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLworCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLworCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KKwkJMCwgMCwgMCwgMAorCX07CisJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7CisJaW50IGk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RhdGljIHUxNiBsY3IydmJpW10gPSB7Ci0JCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCi0JCQkwLCBWNEwyX1NMSUNFRF9XU1NfNjI1LCAwLAkvKiA0ICovCi0JCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLwotCQkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCi0JCQkwLCAwLCAwLCAwCi0JCX07Ci0JCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwotCQlpbnQgaTsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKKwltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7CisJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLworCWlmICgoY3gxOF9hdl9yZWFkKGN4LCAweDQwNCkgJiAweDEwKSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQlmbXQgPSBhcmc7Ci0JCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKLQkJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLwotCQlpZiAoKGN4MThfYXZfcmVhZChjeCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKIAotCQlpZiAoaXNfcGFsKSB7Ci0JCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKLQkJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKLQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0gc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgeworCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOworCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOworCQl9CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gxOF9hdl92Ymlfc19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDE4X2F2X3N0ZF9zZXR1cChjeCk7Ci0KLQkJCS8qIFZCSSBPZmZzZXQgKi8KLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MThfYXZfc3RkX3NldHVwKGN4KTsKIAotCQkvKiBTbGljZWQgVkJJICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0MDYsIDB4MTMpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgdmJpX29mZnNldCk7CisJCS8qIFZCSSBPZmZzZXQgKi8KKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKwlmb3IgKHggPSAwOyB4IDw9IDIzOyB4KyspCisJCWxjclt4XSA9IDB4MDA7CiAKLQkJCWZvciAoaSA9IDIyOyBpIDw9IDIzOyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9CisJLyogU2V0dXAgc3RhbmRhcmQgKi8KKwljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAKLQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgewotCQkJCXN3aXRjaCAoc3ZiaS0+c2VydmljZV9saW5lc1sxLXhdW2ldKSB7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgotCQkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6Ci0JCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6Ci0JCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgotCQkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQl9CisJLyogU2xpY2VkIFZCSSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQwNiwgMHgxMyk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisKKwkvKiBGb3JjZSBpbXBvc3NpYmxlIGxpbmVzIHRvIDAgKi8KKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJLyogQnVpbGQgcmVnaXN0ZXIgdmFsdWVzIGZvciByZXF1ZXN0ZWQgc2VydmljZSBsaW5lcyAqLworCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgeworCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKKwkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKKwkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgorCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgorCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKKwkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykKLQkJCQljeDE4X2F2X3dyaXRlKGN4LCBpLCBsY3JbNiArIHhdKTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspCi0JCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQotCQkJCWN4MThfYXZfd3JpdGUoY3gsIGksIDApOwotCQl9Ci0KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOwotCQlicmVhazsKIAl9CiAKLQljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCXsKLQkJc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkgPSBhcmc7Ci0JCXU4ICpwID0gdmJpLT5wOwotCQlpbnQgaWQxLCBpZDIsIGwsIGVyciA9IDA7CisJaWYgKGlzX3BhbCkgeworCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzQ7IGkrKywgeCsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MThfYXZfd3JpdGUoY3gsIGksIGxjcls5ICsgeF0pOworCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgMCk7CisJfQogCi0JCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKLQkJICAgIChwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgewotCQkJdmJpLT5saW5lID0gdmJpLT50eXBlID0gMDsKLQkJCWJyZWFrOwotCQl9CisJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOworCS8qIEZJWE1FIC0gc2hvdWxkIG1hdGNoIHZibGFuayBzZXQgaW4gY3gxOF9hdl9zdGRfc2V0dXAoKSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDc0LCBpc19wYWwgPyAweDJhIDogMjYpOworCXJldHVybiAwOworfQogCi0JCXAgKz0gNDsKLQkJaWQxID0gcFstMV07Ci0JCWlkMiA9IHBbMF0gJiAweGY7Ci0JCWwgPSBwWzJdICYgMHgzZjsKLQkJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OwotCQlwICs9IDQ7CitpbnQgY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2YmlfYW5jX2RhdGEgKmFuYyA9IChzdHJ1Y3QgdmJpX2FuY19kYXRhICopdmJpLT5wOworCXU4ICpwOworCWludCBkaWQsIHNkaWQsIGwsIGVyciA9IDA7CiAKLQkJc3dpdGNoIChpZDIpIHsKLQkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSA5OgotCQkJaWQyID0gVjRMMl9TTElDRURfVlBTOwotCQkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKLQkJCQllcnIgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZDIgPSAwOworCS8qCisJICogQ2hlY2sgZm9yIHRoZSBhbmNpbGxhcnkgZGF0YSBoZWFkZXIgZm9yIHNsaWNlZCBWQkkKKwkgKi8KKwlpZiAoYW5jLT5wcmVhbWJsZVswXSB8fAorCQkJYW5jLT5wcmVhbWJsZVsxXSAhPSAweGZmIHx8IGFuYy0+cHJlYW1ibGVbMl0gIT0gMHhmZiB8fAorCQkJKGFuYy0+ZGlkICE9IHNsaWNlZF92YmlfZGlkWzBdICYmCisJCQkgYW5jLT5kaWQgIT0gc2xpY2VkX3ZiaV9kaWRbMV0pKSB7CisJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWRpZCA9IGFuYy0+ZGlkOworCXNkaWQgPSBhbmMtPnNkaWQgJiAweGY7CisJbCA9IGFuYy0+aWRpZFswXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0OworCXAgPSBhbmMtPnBheWxvYWQ7CisKKwkvKiBEZWNvZGUgdGhlIFNESUQgc2V0IGJ5IHRoZSBzbGljZXIgKi8KKwlzd2l0Y2ggKHNkaWQpIHsKKwljYXNlIDE6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlicmVhazsKKwljYXNlIDY6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKKwkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7CisJCWJyZWFrOworCWNhc2UgOToKKwkJc2RpZCA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZGlkID0gMDsKKwkJZXJyID0gMTsKIAkJYnJlYWs7CiAJfQotCX0KIAorCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBzZGlkOworCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOworCXZiaS0+aXNfc2Vjb25kX2ZpZWxkID0gZXJyID8gMCA6IChkaWQgPT0gc2xpY2VkX3ZiaV9kaWRbMV0pOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCBlMjc0MDQzLi45YmMyMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTUxLDEyICs1MSwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2h2cjE2MDBfZXNtdCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9IVlJfMTYwMF9FU01ULAogCS5uYW1lID0gIkhhdXBwYXVnZSBIVlItMTYwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtOTcsMTIgKzk3LDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfaHZyMTYwMF9zYW1zdW5nID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0hWUl8xNjAwX1NBTVNVTkcsCiAJLm5hbWUgPSAiSGF1cHBhdWdlIEhWUi0xNjAwIChQcmVwcm9kdWN0aW9uKSIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtMTUyLDEwICsxNTIsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9oOTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0NPTVBST19IOTAwLAogCS5uYW1lID0gIkNvbXBybyBWaWRlb01hdGUgSDkwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiQW5hbG9nIFRWIGNhcHR1cmUgc3VwcG9ydGVkXG4iLAogCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCi0JLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfYWxsID0gQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0yMDEsOCArMjAxLDggQEAKIAkubmFtZSA9ICJZdWFuIE1QQzcxOCIsCiAJLmNvbW1lbnQgPSAiQW5hbG9nIHZpZGVvIGNhcHR1cmUgd29ya3M7IHNvbWUgYXVkaW8gbGluZSBpbiBtYXkgbm90LlxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLApAQCAtMjQ5LDExICsyNDksMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9jbnh0X3JhcHRvcl9wYWwgPSB7CiAJLnR5cGUgPSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMLAogCS5uYW1lID0gIkNvbmV4YW50IFJhcHRvciBQQUwvU0VDQU0iLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIkFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19tdXhlciA9IENYMThfSFdfR1BJTywKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJTywKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19tdXhlciA9IENYMThfSFdfR1BJT19NVVgsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19NVVgsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0zMDYsOCArMzA2LDggQEAKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTYgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKQEAgLTMzOSwxOSArMzM5LDIxIEBACiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDBbXSA9IHsKLQl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2ZjI3IH0sCisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NmYyNyB9LCAvKiBQVlIyMTAwICAgKi8KKwl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2NjkwIH0sIC8qIERWUjMxMDAgSCAqLwogCXsgMCwgMCwgMCB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfbGVhZHRla19wdnIyMTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCwKLQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCIsCisJLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAvRFZSMzEwMCBIIiwKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU9fTVVYLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fTVVYIHwKKwkJICBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCmluZGV4IDZmYTdiY2IuLjNjNTUyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaApAQCAtMjIsMTIgKzIyLDEzIEBACiAgKi8KIAogLyogaGFyZHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgQ1gxOF9IV19UVU5FUiAgICAgKDEgPDwgMCkKLSNkZWZpbmUgQ1gxOF9IV19UVkVFUFJPTSAgKDEgPDwgMSkKLSNkZWZpbmUgQ1gxOF9IV19DUzUzNDUgICAgKDEgPDwgMikKLSNkZWZpbmUgQ1gxOF9IV19HUElPICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ1gxOF9IV19DWDIzNDE4ICAgKDEgPDwgNCkKLSNkZWZpbmUgQ1gxOF9IV19EVkIgICAJICAoMSA8PCA1KQorI2RlZmluZSBDWDE4X0hXX1RVTkVSCQkoMSA8PCAwKQorI2RlZmluZSBDWDE4X0hXX1RWRUVQUk9NCSgxIDw8IDEpCisjZGVmaW5lIENYMThfSFdfQ1M1MzQ1CQkoMSA8PCAyKQorI2RlZmluZSBDWDE4X0hXX0RWQgkJKDEgPDwgMykKKyNkZWZpbmUgQ1gxOF9IV180MThfQVYJCSgxIDw8IDQpCisjZGVmaW5lIENYMThfSFdfR1BJT19NVVgJKDEgPDwgNSkKKyNkZWZpbmUgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwJKDEgPDwgNikKIAogLyogdmlkZW8gaW5wdXRzICovCiAjZGVmaW5lCUNYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIJMQpAQCAtNDksOCArNTAsNyBAQAogLyogVjRMMiBjYXBhYmlsaXR5IGFsaWFzZXMgKi8KICNkZWZpbmUgQ1gxOF9DQVBfRU5DT0RFUiAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwgXAogCQkJICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFwKLQkJCSAgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCi0vKiB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgbm90IHlldCAqLworCQkJICBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkKIAogc3RydWN0IGN4MThfY2FyZF92aWRlb19pbnB1dCB7CiAJdTggIHZpZGVvX3R5cGU7IAkvKiB2aWRlbyBpbnB1dCB0eXBlICovCkBAIC0xMjIsNyArMTIyLDcgQEAKIAljaGFyICpjb21tZW50OwogCXUzMiB2NGwyX2NhcGFiaWxpdGllczsKIAl1MzIgaHdfYXVkaW9fY3RybDsJLyogaGFyZHdhcmUgdXNlZCBmb3IgdGhlIFY0TDIgY29udHJvbHMgKG9ubHkKLQkJCQkgICAxIGRldiBhbGxvd2VkKSAqLworCQkJCSAgIDEgZGV2IGFsbG93ZWQgY3VycmVudGx5KSAqLwogCXUzMiBod19tdXhlcjsJCS8qIGhhcmR3YXJlIHVzZWQgdG8gbXVsdGlwbGV4IGF1ZGlvIGlucHV0ICovCiAJdTMyIGh3X2FsbDsJCS8qIGFsbCBoYXJkd2FyZSB1c2VkIGJ5IHRoZSBib2FyZCAqLwogCXN0cnVjdCBjeDE4X2NhcmRfdmlkZW9faW5wdXQgdmlkZW9faW5wdXRzW0NYMThfQ0FSRF9NQVhfVklERU9fSU5QVVRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCmluZGV4IDE3ZWRmMzAuLjgyZmMyZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwpAQCAtMjIsMTQgKzIyLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LWF1ZGlvLmgiCi0jaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LWNvbnRyb2xzLmgiCiAKKy8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIHN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTY2LDcgKzY1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJaWYgKGN4MThfYXZfY21kKGN4LCBWSURJT0NfUVVFUllDVFJMLCBxY3RybCkpCisJCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgcXVlcnljdHJsLCBxY3RybCkpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CiAJCXJldHVybiAwOwogCkBAIC03Niw3ICs3NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCWlmIChjeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsIFZJRElPQ19RVUVSWUNUUkwsIHFjdHJsKSkKKwkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKIAkJcmV0dXJuIDA7CiAKQEAgLTEyNSw3ICsxMjQsNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBzX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTEzMyw3ICsxMzIsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfU19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCB2Y3RybCk7CiAKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKQEAgLTE1MCw3ICsxNDksNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTE1OCw3ICsxNTcsOCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfR19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCB2Y3RybCk7CisKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjYsMzggKzE2Niw1NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfdmJpX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCkKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF92YmlfZm10KHN0cnVjdCBjeDE4ICpjeCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV90eXBlIHR5cGUpCiB7CiAJaWYgKCEoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCi0JaWYgKGZtdCAmJiBjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbMF0gPT0gTlVMTCkgeworCWlmIChmbXQgIT0gVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgfHwKKwkgICAgdHlwZSAhPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMpIHsKKwkJLyogV2UgZG9uJ3QgZG8gVkJJIGluc2VydGlvbiBhc2lkZSBmcm9tIElWVFYgZm9ybWF0IGluIGEgUFMgKi8KKwkJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FOworCQlDWDE4X0RFQlVHX0lORk8oImRpc2FibGVkIGluc2VydGlvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byAiCisJCQkJInRoZSBNUEVHIHN0cmVhbVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCisJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVswXSA9PSBOVUxMKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykgewotCQkJLyogWXVjaywgaGFyZGNvZGVkLiBOZWVkcyB0byBiZSBhIGRlZmluZSAqLwotCQkJY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhW2ldID0ga21hbGxvYygyMDQ5LCBHRlBfS0VSTkVMKTsKKwkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9CisJCQkgICAgICAga21hbGxvYyhDWDE4X1NMSUNFRF9NUEVHX0RBVEFfQlVGU1osIEdGUF9LRVJORUwpOwogCQkJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9PSBOVUxMKSB7CiAJCQkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAJCQkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9IE5VTEw7CiAJCQkJfQorCQkJCWN4LT52YmkuaW5zZXJ0X21wZWcgPQorCQkJCQkJICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORTsKKwkJCQlDWDE4X1dBUk4oIlVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzIGZvciAiCisJCQkJCSAgInNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQl9CiAJfQogCiAJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IGZtdDsKKwlDWDE4X0RFQlVHX0lORk8oImVuYWJsZWQgaW5zZXJ0aW9uIG9mIHNsaWNlZCBWQkkgZGF0YSBpbnRvIHRoZSBNUEVHIFBTLCIKKwkJCSJ3aGVuIHNsaWNlZCBWQkkgaXMgZW5hYmxlZFxuIik7CiAKLQlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZyA9PSAwKQotCQlyZXR1cm4gMDsKLQkvKiBOZWVkIHNsaWNlZCBkYXRhIGZvciBtcGVnIGluc2VydGlvbiAqLworCS8qCisJICogSWYgb3VyIGN1cnJlbnQgc2V0dGluZ3MgaGF2ZSBubyBsaW5lcyBzZXQgZm9yIGNhcHR1cmUsIHN0b3JlIGEgdmFsaWQsCisJICogZGVmYXVsdCBzZXQgb2Ygc2VydmljZSBsaW5lcyB0byBjYXB0dXJlLCBpbiBvdXIgY3VycmVudCBzZXR0aW5ncy4KKwkgKi8KIAlpZiAoY3gxOF9nZXRfc2VydmljZV9zZXQoY3gtPnZiaS5zbGljZWRfaW4pID09IDApIHsKIAkJaWYgKGN4LT5pc182MGh6KQotCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPQorCQkJCQkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwogCQllbHNlCiAJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldChjeC0+dmJpLnNsaWNlZF9pbiwgY3gtPmlzXzUwaHopOwpAQCAtMjU5LDEwICsyNzgsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJc3RhdGljIHUzMiBmcmVxc1szXSA9IHsgNDQxMDAsIDQ4MDAwLCAzMjAwMCB9OwogCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7CiAJCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHAgPSBjeC0+cGFyYW1zOwogCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZyksCiAJCQkJCQljLCBWSURJT0NfU19FWFRfQ1RSTFMpOworCQl1bnNpZ25lZCBpbnQgaWR4OwogCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjc3LDE2ICsyOTgsMjMgQEAKIAkJCWZtdC5mbXQucGl4LndpZHRoID0gY3gtPnBhcmFtcy53aWR0aAogCQkJCQkJLyAoaXNfbXBlZzEgPyAyIDogMSk7CiAJCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBjeC0+cGFyYW1zLmhlaWdodDsKLQkJCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZmbXQpOworCQkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CiAJCX0KIAkJcHJpdi5jeCA9IGN4OwogCQlwcml2LnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOwogCQllcnIgPSBjeDIzNDF4X3VwZGF0ZSgmcHJpdiwgY3gxOF9hcGlfZnVuYywgJmN4LT5wYXJhbXMsICZwKTsKLQkJaWYgKCFlcnIgJiYgY3gtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10KQotCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10KTsKKwkJaWYgKCFlcnIgJiYKKwkJICAgIChjeC0+cGFyYW1zLnN0cmVhbV92YmlfZm10ICE9IHAuc3RyZWFtX3ZiaV9mbXQgfHwKKwkJICAgICBjeC0+cGFyYW1zLnN0cmVhbV90eXBlICE9IHAuc3RyZWFtX3R5cGUpKQorCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10LAorCQkJCQkJIHAuc3RyZWFtX3R5cGUpOwogCQljeC0+cGFyYW1zID0gcDsKIAkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDMwMDsKLQkJY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShjeCwgcC5hdWRpb19wcm9wZXJ0aWVzICYgMHgwMyk7CisJCWlkeCA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDM7CisJCS8qIFRoZSBhdWRpbyBjbG9jayBvZiB0aGUgZGlnaXRpemVyIG11c3QgbWF0Y2ggdGhlIGNvZGVjIHNhbXBsZQorCQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCisJCWlmIChpZHggPCBzaXplb2YoZnJlcXMpKQorCQkJY3gxOF9jYWxsX2FsbChjeCwgYXVkaW8sIHNfY2xvY2tfZnJlcSwgZnJlcXNbaWR4XSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCBmNTBjZjIxLi4yMTBjNjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtMzksMTAgKzM5LDYgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAKLQotLyogdmFyIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyBpbiB1c2UgKi8KLWludCBjeDE4X2NhcmRzX2FjdGl2ZTsKLQogLyogSWYgeW91IGhhdmUgYWxyZWFkeSBYIHY0bCBjYXJkcywgdGhlbiBzZXQgdGhpcyB0byBYLiBUaGlzIHdheQogICAgdGhlIGRldmljZSBudW1iZXJzIHN0YXkgbWF0Y2hlZC4gRXhhbXBsZTogeW91IGhhdmUgYSBXaW5UViBjYXJkCiAgICB3aXRob3V0IHJhZGlvIGFuZCBhIENvbXBybyBIOTAwIHdpdGguIE5vcm1hbGx5IHRoaXMgd291bGQgZ2l2ZSBhCkBAIC01MCwxMiArNDYsNiBAQAogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIAotLyogTWFzdGVyIHZhcmlhYmxlIGZvciBhbGwgY3gxOCBpbmZvICovCi1zdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tDWDE4X01BWF9DQVJEU107Ci0KLS8qIFByb3RlY3RzIGN4MThfY2FyZHNfYWN0aXZlICovCi1ERUZJTkVfU1BJTkxPQ0soY3gxOF9jYXJkc19sb2NrKTsKLQogLyogYWRkIHlvdXIgcmV2aXNpb24gYW5kIHdoYXRub3QgaGVyZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4MThfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfQ1gsIFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwKQEAgLTY1LDYgKzU1LDggQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4MThfcGNpX3RibCk7CiAKK3N0YXRpYyBhdG9taWNfdCBjeDE4X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKIC8qIFBhcmFtZXRlciBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgY2FyZHR5cGVbQ1gxOF9NQVhfQ0FSRFNdOwogc3RhdGljIGludCB0dW5lcltDWDE4X01BWF9DQVJEU10gPSB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKQEAgLTE1OSw3ICsxNTEsNyBAQAogCQkgIlx0XHRcdCA0ID0gWXVhbiBNUEM3MThcbiIKIAkJICJcdFx0XHQgNSA9IENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU1cbiIKIAkJICJcdFx0XHQgNiA9IFRvc2hpYmEgUW9zbWlvIERWQi1UL0FuYWxvZ1xuIgotCQkgIlx0XHRcdCA3ID0gTGVhZHRlayBXaW5GYXN0IFBWUjIxMDBcbiIKKwkJICJcdFx0XHQgNyA9IExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwL0RWUjMxMDAgSFxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQiwgRywgSCwgRCwgSywgSSwgTSwgTiwgTmMsIDYwIik7CkBAIC0yNzcsMTEgKzI2OSwxNiBAQAogLyogSGF1cHBhdWdlIGNhcmQ/IGdldCB2YWx1ZXMgZnJvbSB0dmVlcHJvbSAqLwogdm9pZCBjeDE4X3JlYWRfZWVwcm9tKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHR2ZWVwcm9tICp0dikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjOwogCXU4IGVlZGF0YVsyNTZdOwogCi0JY3gtPmkyY19jbGllbnRbMF0uYWRkciA9IDB4QTAgPj4gMTsKLQl0dmVlcHJvbV9yZWFkKCZjeC0+aTJjX2NsaWVudFswXSwgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7Ci0JdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmY3gtPmkyY19jbGllbnRbMF0sIHR2LCBlZWRhdGEpOworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwlzdHJsY3B5KGMubmFtZSwgImN4MTggdHZlZXByb20gdG1wIiwgc2l6ZW9mKGMubmFtZSkpOworCWMuYWRhcHRlciA9ICZjeC0+aTJjX2FkYXBbMF07CisJYy5hZGRyID0gMHhBMCA+PiAxOworCisJdHZlZXByb21fcmVhZCgmYywgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7CisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmYywgdHYsIGVlZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4MThfcHJvY2Vzc19lZXByb20oc3RydWN0IGN4MTggKmN4KQpAQCAtNDQ4LDM0ICs0NDUsMzggQEAKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX01QR10gPSBlbmNfbXBnX2J1ZnNpemU7CiAJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdID0gZW5jX2lkeF9idWZzaXplOwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWXSA9IGVuY195dXZfYnVmc2l6ZTsKLQljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSAwOyAvKiBjb21wdXRlZCBsYXRlciAqLworCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAqIDM2OwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IGVuY19wY21fYnVmc2l6ZTsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1JBRF0gPSAwOyAvKiBjb250cm9sIG5vIGRhdGEgKi8KIAotCS8qIEV4Y2VwdCBmb3IgVkJJIGVuc3VyZSBzdHJlYW1fYnVmZmVycyAmIHN0cmVhbV9idWZfc2l6ZSBhcmUgdmFsaWQgKi8KKwkvKiBFbnN1cmUgc3RyZWFtX2J1ZmZlcnMgJiBzdHJlYW1fYnVmX3NpemUgYXJlIHZhbGlkICovCiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewotCQkvKiBVc2VyIHNhaWQgdG8gdXNlIDAgYnVmZmVycyAqLwotCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldID09IDApIHsKLQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9IDA7Ci0JCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIFVzZXIgc2FpZCB0byB1c2UgMCBNQiB0b3RhbCAqLwotCQlpZiAoY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldIDw9IDApIHsKKwkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9PSAwIHx8ICAgICAvKiBVc2VyIHNhaWQgMCBidWZmZXJzICovCisJCSAgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPD0gMCB8fCAgLyogVXNlciBzYWlkIDAgTUIgdG90YWwgKi8KKwkJICAgIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgeyAgICAvKiBVc2VyIHNhaWQgYnVmIHNpemUgMCAqLwogCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IDA7CiAJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIFZCSSBpcyBjb21wdXRlZCBsYXRlciBvciB1c2VyIHNhaWQgYnVmZmVyIGhhcyBzaXplIDAgKi8KLQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgewotCQkJaWYgKGkgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7Ci0JCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKLQkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSAwOwotCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPSAwOworCQkvKgorCQkgKiBWQkkgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcyBmaXhlZAorCQkgKiBhbmQgYWxyZWFkeSBpbiBieXRlcworCQkgKi8KKwkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7CisJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldIDwgMCkgeworCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9CisJCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQgKiAxMDI0CisJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTi5CLiBUaGlzIG1pZ2h0IHJvdW5kIGRvd24gdG8gMCAqLworCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9CisJCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXQorCQkJCQkqIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0vKDEwMjQgKiAxMDI0KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CisJCS8qIEFsbCBvdGhlciBzdHJlYW1zIGhhdmUgc3RyZWFtX2J1Zl9zaXplIGluIGtCIGF0IHRoaXMgcG9pbnQgKi8KIAkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IGN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQKIAkJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKQEAgLTQ4Nyw5ICs0ODgsOSBAQAogCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7IC8qIGNvbnZlcnQgZnJvbSBrQiB0byBieXRlcyAqLwogCX0KIAotCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPm51bV07Ci0JY3gtPm9wdGlvbnMudHVuZXIgPSB0dW5lcltjeC0+bnVtXTsKLQljeC0+b3B0aW9ucy5yYWRpbyA9IHJhZGlvW2N4LT5udW1dOworCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPmluc3RhbmNlXTsKKwljeC0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2N4LT5pbnN0YW5jZV07CisJY3gtPm9wdGlvbnMucmFkaW8gPSByYWRpb1tjeC0+aW5zdGFuY2VdOwogCiAJY3gtPnN0ZCA9IGN4MThfcGFyc2Vfc3RkKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTUwMiw3ICs1MDMsNyBAQAogCWVsc2UgaWYgKGN4LT5vcHRpb25zLmNhcmR0eXBlICE9IDApCiAJCUNYMThfRVJSKCJVbmtub3duIHVzZXIgc3BlY2lmaWVkIHR5cGUsIHRyeWluZyB0byBhdXRvZGV0ZWN0IGNhcmRcbiIpOwogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7Ci0JCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IENYMThfUENJX0lEX0hBVVBQQVVHRSkgeworCQlpZiAoY3gtPnBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gQ1gxOF9QQ0lfSURfSEFVUFBBVUdFKSB7CiAJCQljeC0+Y2FyZCA9IGN4MThfZ2V0X2NhcmQoQ1gxOF9DQVJEX0hWUl8xNjAwX0VTTVQpOwogCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgSGF1cHBhdWdlIGNhcmRcbiIpOwogCQl9CkBAIC01MTIsMTMgKzUxMywxMyBAQAogCQkJaWYgKGN4LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgY3gtPmNhcmQtPnBjaV9saXN0W2pdLmRldmljZTsgaisrKSB7Ci0JCQkJaWYgKGN4LT5kZXYtPmRldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+ZGV2aWNlICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CisJCQkJaWYgKGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5zdWJzeXN0ZW1fdmVuZG9yKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoY3gtPmRldi0+c3Vic3lzdGVtX2RldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBjeC0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX2RldmljZSkKIAkJCQkJY29udGludWU7CiAJCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwpAQCAtNTMxLDkgKzUzMiwxMCBAQAogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7CiAJCWN4LT5jYXJkID0gY3gxOF9nZXRfY2FyZChDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCk7CiAJCUNYMThfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnZlbmRvciwgY3gtPmRldi0+ZGV2aWNlKTsKKwkJCSBjeC0+cGNpX2Rldi0+dmVuZG9yLCBjeC0+cGNpX2Rldi0+ZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsIGN4LT5kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwogCQlDWDE4X0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKIAkJQ1gxOF9FUlIoImNhcmQgeW91IGhhdmUgdG8gdGhlIGl2dHYtZGV2ZWwgbWFpbGluZ2xpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZylcbiIpOwpAQCAtNTQ1LDcgKzU0Nyw3IEBACiB9CiAKIC8qIFByZWNvbmRpdGlvbjogdGhlIGN4MTggc3RydWN0dXJlIGhhcyBiZWVuIG1lbXNldCB0byAwLiBPbmx5Ci0gICB0aGUgZGV2IGFuZCBudW0gZmllbGRzIGhhdmUgYmVlbiBmaWxsZWQgaW4uCisgICB0aGUgZGV2IGFuZCBpbnN0YW5jZSBmaWVsZHMgaGF2ZSBiZWVuIGZpbGxlZCBpbi4KICAgIE5vIGFzc3VtcHRpb25zIG9uIHRoZSBjYXJkIHR5cGUgbWF5IGJlIG1hZGUgaGVyZSAoc2VlIGN4MThfaW5pdF9zdHJ1Y3QyCiAgICBmb3IgdGhhdCkuCiAgKi8KQEAgLTU1MywxOCArNTU1LDE0IEBACiB7CiAJaW50IGk7CiAKLQljeC0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGN4LT5kZXYsIDApOworCWN4LT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY3gtPnBjaV9kZXYsIDApOwogCiAJbXV0ZXhfaW5pdCgmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzBdKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzFdKTsKIAltdXRleF9pbml0KCZjeC0+Z3Bpb19sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmFwdV9tYl9sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmNwdV9tYl9sb2NrKTsKIAotCXNwaW5fbG9ja19pbml0KCZjeC0+bG9jayk7Ci0KLQljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT5uYW1lKTsKKwljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoY3gtPndvcmtfcXVldWUgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiVW5hYmxlIHRvIGNyZWF0ZSB3b3JrIGhhbmRlciB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU4Nyw3ICs1ODUsOCBAQAogCQkoY3gtPnBhcmFtcy52aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSA8PCAxKSB8CiAJCShjeC0+cGFyYW1zLnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA8PCAyKTsKIAljeC0+cGFyYW1zLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZOwotCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0gQ1gyMzQxWF9DQVBfSEFTX1RTOworCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0KKwkJCQlDWDIzNDFYX0NBUF9IQVNfVFMgfCBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+Y2FwX3cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9hcHVfd2FpdHEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9jcHVfd2FpdHEpOwpAQCAtNTk3LDQ5ICs1OTYsNiBAQAogCWN4LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CiAJY3gtPnZiaS5zbGljZWRfaW4gPSAmY3gtPnZiaS5pbi5mbXQuc2xpY2VkOwogCi0JLyoKLQkgKiBUaGUgVkJJIGxpbmUgc2l6ZXMgZGVwZW5kIG9uIHRoZSBwaXhlbCBjbG9jayBhbmQgdGhlIGhvcml6IHJhdGUKLQkgKgotCSAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKLQkgKiAgICAgPSA0IGJ5dGVzIEVBViArIEFuYyBkYXRhIGluIGhibGFuayArIDQgYnl0ZXMgU0FWICsgYWN0aXZlIHNhbXBsZXMKLQkgKgotCSAqICBTbGljZWQgVkJJIGlzIHNlbnQgYXMgYW5jaWxsYXJ5IGRhdGEgZHVyaW5nIGhvcml6b250YWwgYmxhbmtpbmcKLQkgKiAgUmF3IFZCSSBpcyBzZW50IGFzIGFjdGl2ZSB2aWRlbyBzYW1wbGVzIGR1cmluZyB2ZXJ0Y2FsIGJsYW5raW5nCi0JICoKLQkgKiAgV2UgdXNlIGEgIEJULjY1NiBweGllbCBjbG9jayBvZiAxMy41IE1IeiBhbmQgYSBCVC42NTYgYWN0aXZlIGxpbmUKLQkgKiAgbGVuZ3RoIG9mIDcyMCBwaXhlbHMgQCA0OjI6MiBzYW1wbGluZy4gIFRodXMuLi4KLQkgKgotCSAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjczNCBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCi0JICogIE5UU0MtTSwgUEFMLU0sIFBBTC02MCwgYW5kIG90aGVyIDYwIEh6LzUyNSBsaW5lIHN5c3RlbXMsIHdlIGhhdmU6Ci0JICoKLQkgKiAgKDEvMTUuNzM0IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzE2IHNhbXBsZXMvbGluZSA9Ci0JICogIDQgYnl0ZXMgU0FWICsgMjY4IGJ5dGVzIGFuYyBkYXRhICsgNCBieXRlcyBTQVYgKyAxNDQwIGFjdGl2ZSBzYW1wbGVzCi0JICoKLQkgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS42MjUga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcwotCSAqICBQQUwtQi9HL0gsIFBBTC1JLCBTRUNBTS1MIGFuZCBvdGhlciA1MCBIei82MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgotCSAqCi0JICogICgxLzE1LjYyNSBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcyOCBzYW1wbGVzL2xpbmUgPQotCSAqICA0IGJ5dGVzIFNBViArIDI4MCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcwotCSAqCi0JICovCi0KLQkvKiBGSVhNRTogaW5pdCB0aGVzZSBiYXNlZCBvbiB0dW5lciBzdGQgJiBtb2RpZnkgd2hlbiBzdGQgY2hhbmdlcyAqLwotCS8qIENYMTgtQVYtQ29yZSBudW1iZXIgb2YgVkJJIHNhbXBsZXMgb3V0cHV0IHBlciBob3Jpem9udGFsIGxpbmUgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSA9IDE0NDQ7ICAgLyogNCBieXRlIFNBViArIDIgKiA3MjAgKi8KLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IDI3MjsgLyogNjAgSHo6IDI2OCs0LCA1MCBIejogMjgwKzQgKi8KLQotCS8qIENYMTgtQVYtQ29yZSBWQkkgc2FtcGxlcy9saW5lIHBvc3NpYmx5IHJvdW5kZWQgdXAgKi8KLQljeC0+dmJpLnJhd19zaXplID0gMTQ0NDsgICAvKiBSZWFsIG1heCBzaXplIGlzIDE0NDQgKi8KLQljeC0+dmJpLnNsaWNlZF9zaXplID0gMjg0OyAvKiBSZWFsIG1heCBzaXplIGlzICAyODQgKi8KLQotCS8qCi0JICogQ1gxOC1BVi1Db3JlIFNBVi9FQVYgUlAgY29kZXMgaW4gVklQIDEueCBtb2RlCi0JICogVGFzayBGaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwCi0JICovCi0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkID0gMHgyMDsgICAgIC8qICAgViAgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkID0gMHg2MDsgICAgLyogIEZWICAqLwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZCA9IDB4QjA7ICAvKiBUIFZIIC0gYWN0dWFsbHkgRUFWICovCi0JY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCA9IDB4RjA7IC8qIFRGVkggLSBhY3R1YWxseSBFQVYgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY4LDE1ICs2MjQsOSBAQAogCQlpID0gMDsKIAljeC0+YWN0aXZlX2lucHV0ID0gaTsKIAljeC0+YXVkaW9faW5wdXQgPSBjeC0+Y2FyZC0+dmlkZW9faW5wdXRzW2ldLmF1ZGlvX2luZGV4OwotCWN4LT5hdl9zdGF0ZS52aWRfaW5wdXQgPSBDWDE4X0FWX0NPTVBPU0lURTc7Ci0JY3gtPmF2X3N0YXRlLmF1ZF9pbnB1dCA9IENYMThfQVZfQVVESU84OwotCWN4LT5hdl9zdGF0ZS5hdWRjbGtfZnJlcSA9IDQ4MDAwOwotCWN4LT5hdl9zdGF0ZS5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCS8qIEZJWE1FIC0gOCBpcyBOVFNDIHZhbHVlLCBpbnZlc3RpZ2F0ZSAqLwotCWN4LT5hdl9zdGF0ZS52YmlfbGluZV9vZmZzZXQgPSA4OwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfcGNpKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF9wY2koc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNjg0LDEyNCArNjM0LDEyNSBAQAogCiAJQ1gxOF9ERUJVR19JTkZPKCJFbmFibGluZyBwY2kgZGV2aWNlXG4iKTsKIAotCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7Ci0JCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPm51bSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CisJCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPmluc3RhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgMHhmZmZmZmZmZikpIHsKLQkJQ1gxOF9FUlIoIk5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUgb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJCUNYMThfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLCBjYXJkICVkXG4iLCBjeC0+aW5zdGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY3gtPmJhc2VfYWRkciwgQ1gxOF9NRU1fU0laRSwgImN4MTggZW5jb2RlciIpKSB7Ci0JCUNYMThfRVJSKCJDYW5ub3QgcmVxdWVzdCBlbmNvZGVyIG1lbW9yeSByZWdpb24gb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCQlDWDE4X0VSUigiQ2Fubm90IHJlcXVlc3QgZW5jb2RlciBtZW1vcnkgcmVnaW9uLCBjYXJkICVkXG4iLAorCQkJIGN4LT5pbnN0YW5jZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nIGFuZCBtZW1vcnkgbWFwcGVkIElPIGZvciB0aGUgQ1gyMzQxOCAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY3gtPmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmN4LT5jYXJkX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAKIAlpZiAocGNpX2xhdGVuY3kgPCA2NCAmJiBjeDE4X3BjaV9sYXRlbmN5KSB7CiAJCUNYMThfSU5GTygiVW5yZWFzb25hYmx5IGxvdyBsYXRlbmN5IHRpbWVyLCAiCiAJCQkgICAgICAgInNldHRpbmcgdG8gNjQgKHdhcyAlZClcbiIsIHBjaV9sYXRlbmN5KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCX0KIAogCUNYMThfREVCVUdfSU5GTygiY3glZCAocmV2ICVkKSBhdCAlMDJ4OiUwMnguJXgsICIKIAkJICAgImlycTogJWQsIGxhdGVuY3k6ICVkLCBtZW1vcnk6IDB4JWx4XG4iLAotCQkgICBjeC0+ZGV2LT5kZXZpY2UsIGN4LT5jYXJkX3JldiwgZGV2LT5idXMtPm51bWJlciwKLQkJICAgUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pLAotCQkgICBjeC0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKKwkJICAgY3gtPnBjaV9kZXYtPmRldmljZSwgY3gtPmNhcmRfcmV2LCBwY2lfZGV2LT5idXMtPm51bWJlciwKKwkJICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbiksCisJCSAgIGN4LT5wY2lfZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKIAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdTMyIGN4MThfcmVxdWVzdF9tb2R1bGUoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiBpZCkKLXsKLQlpZiAoKGh3ICYgaWQpID09IDApCi0JCXJldHVybiBodzsKLQlpZiAocmVxdWVzdF9tb2R1bGUobmFtZSkgIT0gMCkgewotCQlDWDE4X0VSUigiRmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIGh3ICYgfmlkOwotCX0KLQlDWDE4X0RFQlVHX0lORk8oIkxvYWRlZCBtb2R1bGUgJXNcbiIsIG5hbWUpOwotCXJldHVybiBodzsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBjeDE4X2xvYWRfYW5kX2luaXRfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgdm9pZCBjeDE4X2luaXRfc3ViZGV2cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJdTMyIGh3ID0gY3gtPmNhcmQtPmh3X2FsbDsKKwl1MzIgZGV2aWNlOwogCWludCBpOwogCi0jaWZkZWYgTU9EVUxFCi0JLyogbG9hZCBtb2R1bGVzICovCi0jaWZkZWYgQ09ORklHX01FRElBX1RVTkVSX01PRFVMRQotCWh3ID0gY3gxOF9yZXF1ZXN0X21vZHVsZShjeCwgaHcsICJ0dW5lciIsIENYMThfSFdfVFVORVIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0NTNTM0NV9NT0RVTEUKLQlodyA9IGN4MThfcmVxdWVzdF9tb2R1bGUoY3gsIGh3LCAiY3M1MzQ1IiwgQ1gxOF9IV19DUzUzNDUpOwotI2VuZGlmCi0jZW5kaWYKLQotCS8qIGNoZWNrIHdoaWNoIGkyYyBkZXZpY2VzIGFyZSBhY3R1YWxseSBmb3VuZCAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiBkZXZpY2UgPSAxIDw8IGk7CisJZm9yIChpID0gMCwgZGV2aWNlID0gMTsgaSA8IDMyOyBpKyssIGRldmljZSA8PD0gMSkgewogCiAJCWlmICghKGRldmljZSAmIGh3KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGV2aWNlID09IENYMThfSFdfR1BJTyB8fCBkZXZpY2UgPT0gQ1gxOF9IV19UVkVFUFJPTSB8fAotCQkgICAgZGV2aWNlID09IENYMThfSFdfQ1gyMzQxOCB8fCBkZXZpY2UgPT0gQ1gxOF9IV19EVkIpIHsKLQkJCS8qIFRoZXNlICdkZXZpY2VzJyBkbyBub3QgdXNlIGkyYyBwcm9iaW5nICovCisKKwkJc3dpdGNoIChkZXZpY2UpIHsKKwkJY2FzZSBDWDE4X0hXX0RWQjoKKwkJY2FzZSBDWDE4X0hXX1RWRUVQUk9NOgorCQkJLyogVGhlc2Ugc3Vib3JkaW5hdGUgZGV2aWNlcyBkbyBub3QgdXNlIHByb2JpbmcgKi8KIAkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7Ci0JCQljb250aW51ZTsKKwkJCWJyZWFrOworCQljYXNlIENYMThfSFdfNDE4X0FWOgorCQkJLyogVGhlIEEvViBkZWNvZGVyIGdldHMgcHJvYmVkIGVhcmxpZXIgdG8gc2V0IFBMTHMgKi8KKwkJCS8qIEp1c3Qgbm90ZSB0aGF0IHRoZSBjYXJkIHVzZXMgaXQgKGkuZS4gaGFzIGFuYWxvZykgKi8KKwkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJCS8qCisJCQkgKiBUaGUgUmVzZXQgQ29udHJvbGxlciBnZXRzIHByb2JlZCBhbmQgYWRkZWQgdG8KKwkJCSAqIGh3X2ZsYWdzIGVhcmxpZXIgZm9yIGkyYyBhZGFwdGVyL2J1cyBpbml0aWFsaXphdGlvbgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fTVVYOgorCQkJaWYgKGN4MThfZ3Bpb19yZWdpc3RlcihjeCwgZGV2aWNlKSA9PSAwKQorCQkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChjeDE4X2kyY19yZWdpc3RlcihjeCwgaSkgPT0gMCkKKwkJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOworCQkJYnJlYWs7CiAJCX0KLQkJY3gxOF9pMmNfcmVnaXN0ZXIoY3gsIGkpOwotCQlpZiAoY3gxOF9pMmNfaHdfYWRkcihjeCwgZGV2aWNlKSA+IDApCi0JCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOwogCX0KIAotCWh3ID0gY3gtPmh3X2ZsYWdzOworCWlmIChjeC0+aHdfZmxhZ3MgJiBDWDE4X0hXXzQxOF9BVikKKwkJY3gtPnNkX2F2ID0gY3gxOF9maW5kX2h3KGN4LCBDWDE4X0hXXzQxOF9BVik7CisKKwlpZiAoY3gtPmNhcmQtPmh3X211eGVyICE9IDApCisJCWN4LT5zZF9leHRtdXggPSBjeDE4X2ZpbmRfaHcoY3gsIGN4LT5jYXJkLT5od19tdXhlcik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKLQlpbnQgdmJpX2J1Zl9zaXplOwogCXUzMiBkZXZ0eXBlOwogCXN0cnVjdCBjeDE4ICpjeDsKIAotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBwbGFjZSBmb3IgdGhpcyBjYXJkICovCi0JaWYgKGN4MThfY2FyZHNfYWN0aXZlID09IENYMThfTUFYX0NBUkRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3gxODogIE1heGltdW0gbnVtYmVyIG9mIGNhcmRzIGRldGVjdGVkICglZCkuXG4iLAotCQkJICAgICAgY3gxOF9jYXJkc19hY3RpdmUpOwotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwkvKiBGSVhNRSAtIG1vZHVsZSBwYXJhbWV0ZXIgYXJyYXlzIGNvbnN0cmFpbiBtYXggaW5zdGFuY2VzICovCisJaSA9IGF0b21pY19pbmNfcmV0dXJuKCZjeDE4X2luc3RhbmNlKSAtIDE7CisJaWYgKGkgPj0gQ1gxOF9NQVhfQ0FSRFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiBjYW5ub3QgbWFuYWdlIGNhcmQgJWQsIGRyaXZlciBoYXMgYSAiCisJCSAgICAgICAibGltaXQgb2YgMCAtICVkXG4iLCBpLCBDWDE4X01BWF9DQVJEUyAtIDEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljeCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDE4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjeCkgewotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwlpZiAoY3ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTg6IGNhbm5vdCBtYW5hZ2UgY2FyZCAlZCwgb3V0IG9mIG1lbW9yeVxuIiwKKwkJICAgICAgIGkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0gPSBjeDsKLQljeC0+ZGV2ID0gZGV2OwotCWN4LT5udW0gPSBjeDE4X2NhcmRzX2FjdGl2ZSsrOwotCXNucHJpbnRmKGN4LT5uYW1lLCBzaXplb2YoY3gtPm5hbWUpLCAiY3gxOC0lZCIsIGN4LT5udW0pOwotCUNYMThfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgIyVkXG4iLCBjeC0+bnVtKTsKKwljeC0+cGNpX2RldiA9IHBjaV9kZXY7CisJY3gtPmluc3RhbmNlID0gaTsKIAotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZjeC0+djRsMl9kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiB2NGwyX2RldmljZV9yZWdpc3RlciBvZiBjYXJkICVkIGZhaWxlZCIKKwkJICAgICAgICJcbiIsIGN4LT5pbnN0YW5jZSk7CisJCWtmcmVlKGN4KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJc25wcmludGYoY3gtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjeC0+djRsMl9kZXYubmFtZSksICJjeDE4LSVkIiwKKwkJIGN4LT5pbnN0YW5jZSk7CisJQ1gxOF9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgY3gtPmluc3RhbmNlKTsKIAogCWN4MThfcHJvY2Vzc19vcHRpb25zKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTgxNiwxMyArNzY3LDEwIEBACiAJQ1gxOF9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgY3gtPmJhc2VfYWRkcik7CiAKIAkvKiBQQ0kgRGV2aWNlIFNldHVwICovCi0JcmV0dmFsID0gY3gxOF9zZXR1cF9wY2koY3gsIGRldiwgcGNpX2lkKTsKKwlyZXR2YWwgPSBjeDE4X3NldHVwX3BjaShjeCwgcGNpX2RldiwgcGNpX2lkKTsKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gZnJlZV93b3JrcXVldWU7CiAKLQkvKiBzYXZlIGN4IGluIHRoZSBwY2kgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBjeCk7Ci0KIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJQ1gxOF9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCiAJCSAgIGN4LT5iYXNlX2FkZHIgKyBDWDE4X01FTV9PRkZTRVQsIENYMThfTUVNX1NJWkUpOwpAQCAtODU2LDYgKzgwNCwyMyBAQAogCiAJY3gxOF9ncGlvX2luaXQoY3gpOwogCisJLyogSW5pdGlhbGl6ZSBpbnRlZ3JhdGVkIEEvViBkZWNvZGVyIGVhcmx5IHRvIHNldCBQTExzLCBqdXN0IGluIGNhc2UgKi8KKwlyZXR2YWwgPSBjeDE4X2F2X3Byb2JlKGN4KTsKKwlpZiAocmV0dmFsKSB7CisJCUNYMThfRVJSKCJDb3VsZCBub3QgcmVnaXN0ZXIgQS9WIGRlY29kZXIgc3ViZGV2aWNlXG4iKTsKKwkJZ290byBmcmVlX21hcDsKKwl9CisJY3gxOF9jYWxsX2h3KGN4LCBDWDE4X0hXXzQxOF9BViwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX1BMTFMpOworCisJLyogSW5pdGlhbGl6ZSBHUElPIFJlc2V0IENvbnRyb2xsZXIgdG8gZG8gY2hpcCByZXNldHMgZHVyaW5nIGkyYyBpbml0ICovCisJaWYgKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgeworCQlpZiAoY3gxOF9ncGlvX3JlZ2lzdGVyKGN4LCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgIT0gMCkKKwkJCUNYMThfV0FSTigiQ291bGQgbm90IHJlZ2lzdGVyIEdQSU8gcmVzZXQgY29udHJvbGxlciIKKwkJCQkgICJzdWJkZXZpY2U7IHByb2NlZWRpbmcgYW55d2F5LlxuIik7CisJCWVsc2UKKwkJCWN4LT5od19mbGFncyB8PSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDsKKwl9CisKIAkvKiBhY3RpdmUgaTJjICAqLwogCUNYMThfREVCVUdfSU5GTygiYWN0aXZhdGluZyBpMmMuLi5cbiIpOwogCXJldHZhbCA9IGluaXRfY3gxOF9pMmMoY3gpOwpAQCAtODY0LDggKzgyOSw2IEBACiAJCWdvdG8gZnJlZV9tYXA7CiAJfQogCi0JQ1gxOF9ERUJVR19JTkZPKCJBY3RpdmUgY2FyZCBjb3VudDogJWQuXG4iLCBjeDE4X2NhcmRzX2FjdGl2ZSk7Ci0KIAlpZiAoY3gtPmNhcmQtPmh3X2FsbCAmIENYMThfSFdfVFZFRVBST00pIHsKIAkJLyogQmFzZWQgb24gdGhlIG1vZGVsIG51bWJlciB0aGUgY2FyZHR5cGUgbWF5IGJlIGNoYW5nZWQuCiAJCSAgIFRoZSBQQ0kgSURzIGFyZSBub3QgYWx3YXlzIHJlbGlhYmxlLiAqLwpAQCAtODgxLDggKzg0NCw5IEBACiAJY3gxOF9pbml0X3NjYihjeCk7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShjeC0+ZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCi0JCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgY3gtPm5hbWUsICh2b2lkICopY3gpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGN4LT5wY2lfZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCisJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgY3gtPnY0bDJfZGV2Lm5hbWUsICh2b2lkICopY3gpOwogCWlmIChyZXR2YWwpIHsKIAkJQ1gxOF9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC05MTcsMzMgKzg4MSwxNCBAQAogCSAgIGluaXRpYWxpemF0aW9uLiAqLwogCWN4MThfaW5pdF9zdHJ1Y3QyKGN4KTsKIAotCWN4MThfbG9hZF9hbmRfaW5pdF9tb2R1bGVzKGN4KTsKKwljeDE4X2luaXRfc3ViZGV2cyhjeCk7CiAKLQlpZiAoY3gtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgeworCWlmIChjeC0+c3RkICYgVjRMMl9TVERfNTI1XzYwKQogCQljeC0+aXNfNjBoeiA9IDE7Ci0JCWN4LT5pc19vdXRfNjBoeiA9IDE7Ci0JfSBlbHNlIHsKLQkJY3gtPmlzXzUwaHogPSAxOwotCQljeC0+aXNfb3V0XzUwaHogPSAxOwotCX0KLQljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwotCi0JLyoKLQkgKiBGSVhNRTogc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgYmFzZWQgb24gdGhlIHR1bmVyIHN0YW5kYXJkIGlzCi0JICogc3Vib3B0aW1hbCwgYXMgdGhlIENWQlMgYW5kIFNWaWRlbyBpbnB1dHMgY291bGQgdXNlIGEgZGlmZmVyZW50IHN0ZAotCSAqIGFuZCB0aGUgYnVmZmVyIGNvdWxkIGVuZCB1cCBiZWluZyB0b28gc21hbGwgaW4gdGhhdCBjYXNlLgotCSAqLwotCXZiaV9idWZfc2l6ZSA9IGN4LT52YmkucmF3X3NpemUgKiAoY3gtPmlzXzYwaHogPyAyNCA6IDM2KSAvIDI7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0gdmJpX2J1Zl9zaXplOwotCi0JaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldIDwgMCkKLQkJY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSAqIDEwMjQgKiAxMDI0Ci0JCSAgIC8gdmJpX2J1Zl9zaXplOwogCWVsc2UKLQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICAgIGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldICogdmJpX2J1Zl9zaXplCi0JCSAgICAgLyAoMTAyNCAqIDEwMjQpOworCQljeC0+aXNfNTBoeiA9IDE7CisKKwljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwogCiAJaWYgKGN4LT5vcHRpb25zLnJhZGlvID4gMCkKIAkJY3gtPnY0bDJfY2FwIHw9IFY0TDJfQ0FQX1JBRElPOwpAQCAtOTU2LDcgKzkwMSw3IEBACiAJCXNldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOyAgLyogbWF0Y2hlcyBUViB0dW5lcnMgKi8KIAkJc2V0dXAudHVuZXJfY2FsbGJhY2sgPSAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpID8KIAkJCWN4MThfcmVzZXRfdHVuZXJfZ3BpbyA6IE5VTEw7Ci0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnNldHVwKTsKKwkJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmc2V0dXApOwogCQlpZiAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKIAkJCQkuZm5hbWUgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKQEAgLTk2Niw3ICs5MTEsNyBAQAogCQkJCS50dW5lciA9IGN4LT5vcHRpb25zLnR1bmVyLAogCQkJCS5wcml2ID0gJmN0cmwsCiAJCQl9OwotCQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBUVU5FUl9TRVRfQ09ORklHLCAmY2ZnKTsKKwkJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CiAJCX0KIAl9CiAKQEAgLTk4NSwxNCArOTMwLDEzIEBACiAJCWdvdG8gZnJlZV9zdHJlYW1zOwogCX0KIAotCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZCAjJWQ6ICVzXG4iLCBjeC0+bnVtLCBjeC0+Y2FyZF9uYW1lKTsKLQorCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZDogJXNcbiIsIGN4LT5jYXJkX25hbWUpOwogCXJldHVybiAwOwogCiBmcmVlX3N0cmVhbXM6CiAJY3gxOF9zdHJlYW1zX2NsZWFudXAoY3gsIDEpOwogZnJlZV9pcnE6Ci0JZnJlZV9pcnEoY3gtPmRldi0+aXJxLCAodm9pZCAqKWN4KTsKKwlmcmVlX2lycShjeC0+cGNpX2Rldi0+aXJxLCAodm9pZCAqKWN4KTsKIGZyZWVfaTJjOgogCWV4aXRfY3gxOF9pMmMoY3gpOwogZnJlZV9tYXA6CkBAIC0xMDA2LDExICs5NTAsOCBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUNYMThfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCWkgPSBjeC0+bnVtOwotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQljeDE4X2NhcmRzW2ldID0gTlVMTDsKLQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjeC0+djRsMl9kZXYpOworCWtmcmVlKGN4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMDQzLDggKzk4NCwyMSBAQAogCX0KIAlzZXRfYml0KENYMThfRl9JX0xPQURFRF9GVywgJmN4LT5pX2ZsYWdzKTsKIAotCS8qIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKLQkgKiB0cmFuc3BvcnQgcmVsYXRlZC4gKi8KKwkvKgorCSAqIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKKwkgKiB3aXRoIHRoZSBkaWdpdGFsIFRTLgorCSAqCisJICogVGhlIHNlY29uZCBmaXJtd2FyZSBsb2FkIHJlcXVpcmVzIHVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBVIHN0YXRlLAorCSAqIG9yIHRoZSBhdWRpbyBmb3IgdGhlIGZpcnN0IGFuYWxvZyBjYXB0dXJlIHdpbGwgYmUgYmFkbHkgaW5jb3JyZWN0LgorCSAqCisJICogSSBjYW4ndCBzZWVtIHRvIGNhbGwgQVBVX1JFU0VUQUkgYW5kIGhhdmUgaXQgc3VjY2VlZCB3aXRob3V0IHRoZQorCSAqIEFQVSBjYXB0dXJpbmcgYXVkaW8sIHNvIHdlIHN0YXJ0IGFuZCBzdG9wIGl0IGhlcmUgdG8gZG8gdGhlIHJlc2V0CisJICovCisKKwkvKiBNUEVHIEVuY29kaW5nLCAyMjQga2JwcywgTVBFRyBMYXllciBJSSwgNDgga3NwcyAqLworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RBUlQsIDIsIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHfDB4YjksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfUkVTRVRBSSwgMCk7CisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9TVE9QLCAxLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFRyk7CiAKIAlmd19yZXRyeV9jb3VudCA9IDM7CiAJd2hpbGUgKC0tZndfcmV0cnlfY291bnQgPiAwKSB7CkBAIC0xMDYwLDYgKzEwMTQsMjIgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwkvKgorCSAqIFRoZSBzZWNvbmQgZmlybXdhcmUgbG9hZCByZXF1aXJlcyB1cyB0byBub3JtYWxpemUgdGhlIEFQVSBzdGF0ZSwKKwkgKiBvciB0aGUgYXVkaW8gZm9yIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSB3aWxsIGJlIGJhZGx5IGluY29ycmVjdC4KKwkgKgorCSAqIEkgY2FuJ3Qgc2VlbSB0byBjYWxsIEFQVV9SRVNFVEFJIGFuZCBoYXZlIGl0IHN1Y2NlZWQgd2l0aG91dCB0aGUKKwkgKiBBUFUgY2FwdHVyaW5nIGF1ZGlvLCBzbyB3ZSBzdGFydCBhbmQgc3RvcCBpdCBoZXJlIHRvIGRvIHRoZSByZXNldAorCSAqLworCisJLyogTVBFRyBFbmNvZGluZywgMjI0IGticHMsIE1QRUcgTGF5ZXIgSUksIDQ4IGtzcHMgKi8KKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1NUQVJULCAyLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFR3wweGI5LCAwKTsKKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RPUCwgMSwgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX01QRUcpOworCisJLyogSW5pdCB0aGUgQS9WIGRlY29kZXIsIGlmIGl0IGhhc24ndCBiZWVuIGFscmVhZHkgKi8KKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX05PUk1BTCk7CisKIAl2Zi50dW5lciA9IDA7CiAJdmYudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCXZmLmZyZXF1ZW5jeSA9IDY0MDA7IC8qIHRoZSB0dW5lciAnYmFzZWxpbmUnIGZyZXF1ZW5jeSAqLwpAQCAtMTA5Miw5ICsxMDYyLDExIEBACiAKIHN0YXRpYyB2b2lkIGN4MThfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDE4ICpjeCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWludCBpOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkICMlZFxuIiwgY3gtPm51bSk7CisJQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkXG4iKTsKIAogCS8qIFN0b3AgYWxsIGNhcHR1cmVzICovCiAJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBhbGwgc3RyZWFtc1xuIik7CkBAIC0xMTE1LDE1ICsxMDg3LDIyIEBACiAKIAlleGl0X2N4MThfaTJjKGN4KTsKIAotCWZyZWVfaXJxKGN4LT5kZXYtPmlycSwgKHZvaWQgKiljeCk7CisJZnJlZV9pcnEoY3gtPnBjaV9kZXYtPmlycSwgKHZvaWQgKiljeCk7CiAKIAljeDE4X2lvdW5tYXAoY3gpOwogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKGN4LT5iYXNlX2FkZHIsIENYMThfTUVNX1NJWkUpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGN4LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShjeC0+cGNpX2Rldik7CiAKLQlDWDE4X0lORk8oIlJlbW92ZWQgJXMsIGNhcmQgIyVkXG4iLCBjeC0+Y2FyZF9uYW1lLCBjeC0+bnVtKTsKKwlpZiAoY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhWzBdICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykKKwkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CisKKwlDWDE4X0lORk8oIlJlbW92ZWQgJXNcbiIsIGN4LT5jYXJkX25hbWUpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJa2ZyZWUoY3gpOwogfQogCiAvKiBkZWZpbmUgYSBwY2lfZHJpdmVyIGZvciBjYXJkIGRldGVjdGlvbiAqLwpAQCAtMTEzOCw4ICsxMTE3LDYgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsIENYMThfVkVSU0lPTik7CiAKLQltZW1zZXQoY3gxOF9jYXJkcywgMCwgc2l6ZW9mKGN4MThfY2FyZHMpKTsKLQogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewogCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBFeGl0aW5nLCBjeDE4X2ZpcnN0X21pbm9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKQEAgLTExNjIsMTYgKzExMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtb2R1bGVfY2xlYW51cCh2b2lkKQogewotCWludCBpOwotCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDE4X3BjaV9kcml2ZXIpOwotCi0JZm9yIChpID0gMDsgaSA8IGN4MThfY2FyZHNfYWN0aXZlOyBpKyspIHsKLQkJaWYgKGN4MThfY2FyZHNbaV0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQl9Ci0KIH0KIAogbW9kdWxlX2luaXQobW9kdWxlX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggMGQyZWRlYi4uZWNlNGYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCkBAIC03OSw3ICs4MCw3IEBACiAjZGVmaW5lIENYMThfQ0FSRF9ZVUFOX01QQzcxOCAJICAgICAgMwkvKiBZdWFuIE1QQzcxOCAqLwogI2RlZmluZSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMICAgICA0CS8qIENvbmV4YW50IFJhcHRvciBQQUwgKi8KICNkZWZpbmUgQ1gxOF9DQVJEX1RPU0hJQkFfUU9TTUlPX0RWQlQgNSAvKiBUb3NoaWJhIFFvc21pbyBJbnRlcmFsIERWQi1UL0FuYWxvZyovCi0jZGVmaW5lIENYMThfQ0FSRF9MRUFEVEVLX1BWUjIxMDAgICAgIDYgLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAgKi8KKyNkZWZpbmUgQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCAgICAgNiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMC9EVlIzMTAwIEggKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QgCQkgICAgICA2CiAKICNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICAwCkBAIC0xNDMsMTIgKzE0NCwxMiBAQAogLyogRmxhZyB0byB0dXJuIG9uIGhpZ2ggdm9sdW1lIGRlYnVnZ2luZyAqLwogI2RlZmluZSBDWDE4X0RCR0ZMR19ISUdIVk9MICgxIDw8IDgpCiAKLS8qIE5PVEU6IGV4dHJhIHNwYWNlIGJlZm9yZSBjb21tYSBpbiAnY3gtPm51bSAsICMjIGFyZ3MnIGlzIHJlcXVpcmVkIGZvcgorLyogTk9URTogZXh0cmEgc3BhY2UgYmVmb3JlIGNvbW1hIGluICdmbXQgLCAjIyBhcmdzJyBpcyByZXF1aXJlZCBmb3IKICAgIGdjYy0yLjk1LCBvdGhlcndpc2UgaXQgd29uJ3QgY29tcGlsZS4gKi8KICNkZWZpbmUgQ1gxOF9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGN4MThfZGVidWcpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gImN4MTgtJWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUcoQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVRyhDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNjIsNyArMTYzLDcgQEAKICNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICJjeDE4JWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUdfSElHSF9WT0woQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVR19ISUdIX1ZPTChDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNzQsOSArMTc1LDU4IEBACiAjZGVmaW5lIENYMThfREVCVUdfSElfSVJRKGZtdCwgYXJncy4uLikgICBDWDE4X0RFQlVHX0hJR0hfVk9MKENYMThfREJHRkxHX0lSUSwgImlycSIsIGZtdCAsICMjIGFyZ3MpCiAKIC8qIFN0YW5kYXJkIGtlcm5lbCBtZXNzYWdlcyAqLwotI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgcHJpbnRrKEtFUk5fRVJSICAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X1dBUk4oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgdjRsMl9lcnIoJmN4LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOKGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybigmY3gtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZjeC0+djRsMl9kZXYsIGZtdCAsICMjIGFyZ3MpCisKKy8qIE1lc3NhZ2VzIGZvciBpbnRlcm5hbCBzdWJkZXZzIHRvIHVzZSAqLworI2RlZmluZSBDWDE4X0RFQlVHX0RFVih4LCBkZXYsIHR5cGUsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoKHgpICYgY3gxOF9kZWJ1ZykgXAorCQkJdjRsMl9pbmZvKGRldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIENYMThfREVCVUdfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfV0FSTiwgZGV2LCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19BUEksIGRldiwgImFwaSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRE1BX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19ETUEsIGRldiwgImRtYSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU9DVExfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfRklMRSwgZGV2LCAiZmlsZSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSTJDX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JMkMsIGRldiwgImkyYyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSVJRX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoeCwgZGV2LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCisJCQl2NGwyX2luZm8oZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX1dBUk4sIGRldiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0FQSSwgZGV2LCAiYXBpIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9ETUFfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfRE1BLCBkZXYsICJkbWEiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lPQ1RMX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19GSUxFLCBkZXYsICJmaWxlIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JMkNfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSTJDLCBkZXYsICJpMmMiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lSUV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9FUlJfREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKGRldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybihkZXYsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBWYWx1ZXMgZm9yIENYMThfQVBJX0RFQ19QTEFZQkFDS19TUEVFRCBtcGVnX2ZyYW1lX3R5cGVfbWFzayBwYXJhbWV0ZXI6ICovCiAjZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUUgMQpAQCAtMjc5LDcgKzMyOSw3IEBACiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewogCS8qIFRoZXNlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBhbHdheXMgc2V0LCBldmVuIGlmIHRoZSBzdHJlYW0KIAkgICBpcyBub3QgYWN0dWFsbHkgY3JlYXRlZC4gKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGwyZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCiAJc3RydWN0IGN4MTggKmN4OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtMjkyLDcgKzM0Miw2IEBACiAJaW50IGRtYTsJCS8qIGNhbiBiZSBQQ0lfRE1BX1RPREVWSUNFLAogCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSBvcgogCQkJCSAgIFBDSV9ETUFfTk9ORSAqLwotCXU2NCBkbWFfcHRzOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwogCiAJLyogQnVmZmVyIFN0YXRzICovCkBAIC0zMTgsNTkgKzM2NywxMjEgQEAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IGRlZmluZWQgaW4gY3gxOC1jYXJkcy5oICovCiBzdHJ1Y3QgY3gxOF9jYXJkOwogCisvKgorICogQSBub3RlIGFib3V0ICJzbGljZWQiIFZCSSBkYXRhIGFzIGltcGxlbWVudGVkIGluIHRoaXMgZHJpdmVyOgorICoKKyAqIEN1cnJlbnRseSB3ZSBjb2xsZWN0IHRoZSBzbGljZWQgVkJJIGluIHRoZSBmb3JtIG9mIEFuY2lsbGFyeSBEYXRhCisgKiBwYWNrZXRzLCBpbnNlcnRlZCBieSB0aGUgQVYgY29yZSBkZWNvZGVyL2RpZ2l0aXplci9zbGljZXIgaW4gdGhlCisgKiBob3Jpem9udGFsIGJsYW5raW5nIHJlZ2lvbiBvZiB0aGUgVkJJIGxpbmVzLCBpbiAicmF3IiBtb2RlIGFzIGZhciBhcworICogdGhlIEVuY29kZXIgaXMgY29uY2VybmVkLiAgV2UgZG9uJ3QgZXZlciB0ZWxsIHRoZSBFbmNvZGVyIGl0c2VsZgorICogdG8gcHJvdmlkZSBzbGljZWQgVkJJLiAoQVYgQ29yZTogc2xpY2VkIG1vZGUgLSBFbmNvZGVyOiByYXcgbW9kZSkKKyAqCisgKiBXZSB0aGVuIHByb2Nlc3MgdGhlIGFuY2lsbGFyeSBkYXRhIG91cnNlbHZlcyB0byBzZW5kIHRoZSBzbGljZWQgZGF0YQorICogdG8gdGhlIHVzZXIgYXBwbGljYXRpb24gZGlyZWN0bHkgb3IgYnVpbGQgdXAgTVBFRy0yIHByaXZhdGUgc3RyZWFtIDEKKyAqIHBhY2tldHMgdG8gc3BsaWNlIGludG8gKG9ubHkhKSBNUEVHLTIgUFMgc3RyZWFtcyBmb3IgdGhlIHVzZXIgYXBwLgorICoKKyAqIChUaGF0J3MgaG93IGl2dHYgZXNzZW50aWFsbHkgZG9lcyBpdC4pCisgKgorICogVGhlIEVuY29kZXIgc2hvdWxkIGJlIGFibGUgdG8gZXh0cmFjdCBjZXJ0YWluIHNsaWNlZCBWQkkgZGF0YSBmb3IKKyAqIHVzIGFuZCBwcm92aWRlIGl0IGluIGEgc2VwYXJhdGUgc3RyZWFtIG9yIHNwbGljZSBpdCBpbnRvIGFueSB0eXBlIG9mCisgKiBNUEVHIFBTIG9yIFRTIHN0cmVhbSwgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICovCisKKy8qCisgKiBOdW1iZXIgb2YgInJhdyIgVkJJIHNhbXBsZXMgcGVyIGhvcml6b250YWwgbGluZSB3ZSB0ZWxsIHRoZSBFbmNvZGVyIHRvCisgKiBncmFiIGZyb20gdGhlIGRlY29kZXIvZGlnaXRpemVyL3NsaWNlciBvdXRwdXQgZm9yIHJhdyBvciBzbGljZWQgVkJJLgorICogSXQgZGVwZW5kcyBvbiB0aGUgcGl4ZWwgY2xvY2sgYW5kIHRoZSBob3JpeiByYXRlOgorICoKKyAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKKyAqICAgICA9IDQgYnl0ZXMgRUFWICsgQW5jIGRhdGEgaW4gaGJsYW5rICsgNCBieXRlcyBTQVYgKyBhY3RpdmUgc2FtcGxlcworICoKKyAqICBTbGljZWQgVkJJIGRhdGEgaXMgc2VudCBhcyBhbmNpbGxhcnkgZGF0YSBkdXJpbmcgaG9yaXpvbnRhbCBibGFua2luZworICogIFJhdyBWQkkgaXMgc2VudCBhcyBhY3RpdmUgdmlkZW8gc2FtcGxlcyBkdXJpbmcgdmVydGNhbCBibGFua2luZworICoKKyAqICBXZSB1c2UgYSAgQlQuNjU2IHB4aWVsIGNsb2NrIG9mIDEzLjUgTUh6IGFuZCBhIEJULjY1NiBhY3RpdmUgbGluZQorICogIGxlbmd0aCBvZiA3MjAgcGl4ZWxzIEAgNDoyOjIgc2FtcGxpbmcuICBUaHVzLi4uCisgKgorICogIEZvciBzeXN0ZW1zIHRoYXQgdXNlIGEgMTUuNzM0IGtIeiBob3Jpem9udGFsIHJhdGUsIHN1Y2ggYXMKKyAqICBOVFNDLU0sIFBBTC1NLCBQQUwtNjAsIGFuZCBvdGhlciA2MCBIei81MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgorICoKKyAqICAoMS8xNS43MzQga0h6KSAqIDIgKiAxMy41IE1IeiA9IDE3MTYgc2FtcGxlcy9saW5lID0KKyAqICA0IGJ5dGVzIFNBViArIDI2OCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcworICoKKyAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjYyNSBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCisgKiAgUEFMLUIvRy9ILCBQQUwtSSwgU0VDQU0tTCBhbmQgb3RoZXIgNTAgSHovNjI1IGxpbmUgc3lzdGVtcywgd2UgaGF2ZToKKyAqCisgKiAgKDEvMTUuNjI1IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzI4IHNhbXBsZXMvbGluZSA9CisgKiAgNCBieXRlcyBTQVYgKyAyODAgYnl0ZXMgYW5jIGRhdGEgKyA0IGJ5dGVzIFNBViArIDE0NDAgYWN0aXZlIHNhbXBsZXMKKyAqLworc3RhdGljIGNvbnN0IHUzMiB2YmlfYWN0aXZlX3NhbXBsZXMgPSAxNDQ0OyAvKiA0IGJ5dGUgU0FWICsgNzIwIFkgKyA3MjAgVS9WICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc182MEh6ID0gMjcyOyAvKiA0IGJ5dGUgRUFWICsgMjY4IGFuYy9maWxsICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc181MEh6ID0gMjg0OyAvKiA0IGJ5dGUgRUFWICsgMjgwIGFuYy9maWxsICovCiAKICNkZWZpbmUgQ1gxOF9WQklfRlJBTUVTIDMyCiAKLS8qIFZCSSBkYXRhICovCiBzdHJ1Y3QgdmJpX2luZm8gewotCXUzMiBlbmNfc2l6ZTsKLQl1MzIgZnJhbWU7Ci0JdTggY2NfZGF0YV9vZGRbMjU2XTsKLQl1OCBjY19kYXRhX2V2ZW5bMjU2XTsKLQlpbnQgY2NfcG9zOwotCXU4IGNjX25vX3VwZGF0ZTsKLQl1OCB2cHNbNV07Ci0JdTggdnBzX2ZvdW5kOwotCWludCB3c3M7Ci0JdTggd3NzX2ZvdW5kOwotCXU4IHdzc19ub191cGRhdGU7Ci0JdTMyIHJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1OCByYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkOwotCXU4IHJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkOwotCXUzMiBzbGljZWRfZGVjb2Rlcl9saW5lX3NpemU7Ci0JdTggc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZDsKLQl1OCBzbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZDsKKwkvKiBDdXJyZW50IHN0YXRlIG9mIHY0bDIgVkJJIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSAqLwogCXN0cnVjdCB2NGwyX2Zvcm1hdCBpbjsKLQkvKiBjb252ZW5pZW5jZSBwb2ludGVyIHRvIHNsaWNlZCBzdHJ1Y3QgaW4gdmJpX2luIHVuaW9uICovCi0Jc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsKLQl1MzIgc2VydmljZV9zZXRfaW47CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsgLyogcG9pbnRlciB0byBpbi5mbXQuc2xpY2VkICovCisJdTMyIGNvdW50OyAgICAvKiBDb3VudCBvZiBWQkkgZGF0YSBsaW5lczogNjAgSHo6IDEyIG9yIDUwIEh6OiAxOCAqLworCXUzMiBzdGFydFsyXTsgLyogRmlyc3QgVkJJIGRhdGEgbGluZSBwZXIgZmllbGQ6IDEwICYgMjczIG9yIDYgJiAzMTggKi8KKworCXUzMiBmcmFtZTsgLyogQ291bnQgb2YgVkJJIGJ1ZmZlcnMvZnJhbWVzIHJlY2VpdmVkIGZyb20gRW5jb2RlciAqLworCisJLyoKKwkgKiBWYXJzIGZvciBjcmVhdGlvbiBhbmQgaW5zZXJ0aW9uIG9mIE1QRUcgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzCisJICogb2Ygc2xpY2VkIFZCSSBkYXRhIGludG8gYW4gTVBFRyBQUworCSAqLworCisJLyogQm9vbGVhbjogY3JlYXRlIGFuZCBpbnNlcnQgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzIGludG8gdGhlIFBTICovCiAJaW50IGluc2VydF9tcGVnOwogCi0JLyogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgotCSAgIE9uZSBmb3IgL2Rldi92YmkwIGFuZCBvbmUgZm9yIC9kZXYvdmJpOCAqLworCS8qCisJICogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgorCSAqIFVzZWQgaW4gY3gxOC12YmkuYyBvbmx5IGZvciBjb2xsZWN0aW5nIHNsaWNlZCBkYXRhLCBhbmQgYXMgYSBzb3VyY2UKKwkgKiBkdXJpbmcgY29udmVyc2lvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byBNUEVHIFByaXYgU3RyZWFtIDEgcGFja2V0cy4KKwkgKiBXZSBkb24ndCBuZWVkIHRvIHNhdmUgc3RhdGUgaGVyZSwgYnV0IHRoZSBhcnJheSBtYXkgaGF2ZSBiZWVuIGEgYml0CisJICogdG9vIGJpZyAoMjMwNCBieXRlcykgdG8gYWxsb2MgZnJvbSB0aGUgc3RhY2suCisJICovCiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIHNsaWNlZF9kYXRhWzM2XTsKIAotCS8qIEJ1ZmZlciBmb3IgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIHN0cmVhbS4KLQkgICBUaGUgZmlyc3QgYnl0ZSBpcyBhIGR1bW15IGJ5dGUgdGhhdCdzIG5ldmVyIHVzZWQuCi0JICAgVGhlIG5leHQgMTYgYnl0ZXMgY29udGFpbiB0aGUgTVBFRyBoZWFkZXIgZm9yIHRoZSBWQkkgZGF0YSwKLQkgICB0aGUgcmVtYWluZGVyIGlzIHRoZSBhY3R1YWwgVkJJIGRhdGEuCi0JICAgVGhlIG1heCBzaXplIGFjY2VwdGVkIGJ5IHRoZSBNUEVHIFZCSSByZWluc2VydGlvbiB0dXJucyBvdXQKLQkgICB0byBiZSAxNTUyIGJ5dGVzLCB3aGljaCBoYXBwZW5zIHRvIGJlIDQgKyAoMSArIDQyKSAqICgyICogMTgpIGJ5dGVzLAotCSAgIHdoZXJlIDQgaXMgYSBmb3VyIGJ5dGUgaGVhZGVyLCA0MiBpcyB0aGUgbWF4IHNsaWNlZCBWQkkgcGF5bG9hZCwgMSBpcwotCSAgIGEgc2luZ2xlIGxpbmUgaGVhZGVyIGJ5dGUgYW5kIDIgKiAxOCBpcyB0aGUgbnVtYmVyIG9mIFZCSSBsaW5lcyBwZXIgZnJhbWUuCi0KLQkgICBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoZSBkYXRhIG11c3QgYmUgMUsgYWxpZ25lZCwgc28gd2UgaGF2ZSB0bwotCSAgIHBhZCB0aGUgZGF0YSB1bnRpbCB0aGUgMSBvciAyIEsgYm91bmRhcnkuCi0KLQkgICBUaGlzIHBvaW50ZXIgYXJyYXkgd2lsbCBhbGxvY2F0ZSAyMDQ5IGJ5dGVzIHRvIHN0b3JlIGVhY2ggVkJJIGZyYW1lLiAqLworCS8qCisJICogQSByaW5nIGJ1ZmZlciBvZiBkcml2ZXItZ2VuZXJhdGVkIE1QRUctMiBQUworCSAqIFByb2dyYW0gUGFjay9Qcml2YXRlIFN0cmVhbSAxIHBhY2tldHMgZm9yIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24KKwkgKiBpbnRvIHRoZSBNUEVHIFBTIHN0cmVhbS4KKwkgKgorCSAqIEluIGVhY2ggc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBpczoKKwkgKiAJMTYgYnl0ZSBNUEVHLTIgUFMgUHJvZ3JhbSBQYWNrIEhlYWRlcgorCSAqIAkxNiBieXRlIE1QRUctMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBIZWFkZXIKKwkgKiAJIDQgYnl0ZSBtYWdpYyBudW1iZXI6ICJpdHYwIiBvciAiSVRWMCIKKwkgKiAJIDQgYnl0ZSBmaXJzdCAgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJIDQgYnl0ZSBzZWNvbmQgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJMzYgbGluZXMsIGlmICJJVFYwIjsgb3IgPDM2IGxpbmVzLCBpZiAiaXR2MCI7IG9mIHNsaWNlZCBWQkkgZGF0YQorCSAqCisJICogCUVhY2ggbGluZSBpbiB0aGUgcGF5bG9hZCBpcworCSAqCSAxIGJ5dGUgbGluZSBoZWFkZXIgZGVyaXZlZCBmcm9tIHRoZSBTRElEIChXU1MsIENDLCBWUFMsIGV0Yy4pCisJICoJNDIgYnl0ZXMgb2YgbGluZSBkYXRhCisJICoKKwkgKiBUaGF0J3MgYSBtYXhpbXVtIDE1NTIgYnl0ZXMgb2YgcGF5bG9hZCBpbiB0aGUgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXQKKwkgKiB3aGljaCBpcyB0aGUgcGF5bG9hZCBzaXplIGEgUFZSLTM1MCAoQ1gyMzQxNSkgTVBFRyBkZWNvZGVyIHdpbGwKKwkgKiBhY2NlcHQgZm9yIFZCSSBkYXRhLiBTbywgaW5jbHVkaW5nIHRoZSBoZWFkZXJzLCBpdCdzIGEgbWF4aW11bSAxNTg0CisJICogYnl0ZXMgdG90YWwuCisJICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9NQVhTWgkxNTg0CisJLyogY29weV92YmlfYnVmKCkgbmVlZHMgOCB0ZW1wIGJ5dGVzIG9uIHRoZSBlbmQgZm9yIHRoZSB3b3JzdCBjYXNlICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9CVUZTWgkoQ1gxOF9TTElDRURfTVBFR19EQVRBX01BWFNaKzgpCiAJdTggKnNsaWNlZF9tcGVnX2RhdGFbQ1gxOF9WQklfRlJBTUVTXTsKIAl1MzIgc2xpY2VkX21wZWdfc2l6ZVtDWDE4X1ZCSV9GUkFNRVNdOwotCXN0cnVjdCBjeDE4X2J1ZmZlciBzbGljZWRfbXBlZ19idWY7CisKKwkvKiBDb3VudCBvZiBQcm9ncmFtIFBhY2svUHJvZ3JhbSBTdHJlYW0gMSBwYWNrZXRzIGluc2VydGVkIGludG8gUFMgKi8KIAl1MzIgaW5zZXJ0ZWRfZnJhbWU7CiAKLQl1MzIgc3RhcnRbMl0sIGNvdW50OwotCXUzMiByYXdfc2l6ZTsKLQl1MzIgc2xpY2VkX3NpemU7CisJLyoKKwkgKiBBIGR1bW15IGRyaXZlciBzdHJlYW0gdHJhbnNmZXIgYnVmZmVyIHdpdGggYSBjb3B5IG9mIHRoZSBuZXh0CisJICogc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBmb3Igb3V0cHV0IHRvIHVzZXJsYW5kIGFwcHMuCisJICogT25seSB1c2VkIGluIGN4MTgtZmlsZW9wcy5jLCBidXQgaXRzIHN0YXRlIG5lZWRzIHRvIHBlcnNpc3QgYXQgdGltZXMuCisJICovCisJc3RydWN0IGN4MThfYnVmZmVyIHNsaWNlZF9tcGVnX2J1ZjsKIH07CiAKIC8qIFBlciBjeDIzNDE4LCBwZXIgSTJDIGJ1cyBwcml2YXRlIGFsZ28gY2FsbGJhY2sgZGF0YSAqLwpAQCAtMzgzLDE2ICs0OTQsMTcgQEAKIAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBjeDE4IGNhcmRzICovCiBzdHJ1Y3QgY3gxOCB7Ci0JaW50IG51bTsJCS8qIGJvYXJkIG51bWJlciwgLTEgZHVyaW5nIGluaXQhICovCi0JY2hhciBuYW1lWzhdOwkJLyogYm9hcmQgbmFtZSBmb3IgcHJpbnRrIGFuZCBpbnRlcnJ1cHRzIChlLmcuICdjeDE4MCcpICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsJLyogUENJIGRldmljZSAqLworCWludCBpbnN0YW5jZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9hdjsgICAgIC8qIEEvViBkZWNvZGVyL2RpZ2l0aXplciBzdWItZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9leHRtdXg7IC8qIEV4dGVybmFsIG11bHRpcGxleGVyIHN1Yi1kZXYgKi8KKwogCWNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmNhcmQ7CS8qIGNhcmQgaW5mb3JtYXRpb24gKi8KIAljb25zdCBjaGFyICpjYXJkX25hbWU7ICAvKiBmdWxsIG5hbWUgb2YgdGhlIGNhcmQgKi8KIAljb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3R1bmVyX2kyYyAqY2FyZF9pMmM7IC8qIGkyYyBhZGRyZXNzZXMgdG8gcHJvYmUgZm9yIHR1bmVyICovCiAJdTggaXNfNTBoejsKIAl1OCBpc182MGh6OwotCXU4IGlzX291dF81MGh6OwotCXU4IGlzX291dF82MGh6OwogCXU4IG5vZl9pbnB1dHM7CQkvKiBudW1iZXIgb2YgdmlkZW8gaW5wdXRzICovCiAJdTggbm9mX2F1ZGlvX2lucHV0czsJLyogbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyAqLwogCXUxNiBidWZmZXJfaWQ7CQkvKiBidWZmZXIgSUQgY291bnRlciAqLwpAQCAtNDEzLDEwICs1MjUsNyBAQAogCiAJLyogZHVhbHdhdGNoICovCiAJdW5zaWduZWQgbG9uZyBkdWFsd2F0Y2hfamlmZmllczsKLQl1MTYgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOwotCi0JLyogRGlnaXRpemVyIHR5cGUgKi8KLQlpbnQgZGlnaXRpemVyOwkJLyogMHgwMEVGID0gc2FhNzExNCAweDAwRk8gPSBzYWE3MTE1IDB4MDEwNiA9IG1pYyAqLworCXUzMiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7CiAKIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplX2xvY2s7ICAgIC8qIG11dGV4IHVzZWQgdG8gc2VyaWFsaXplIG9wZW4vY2xvc2Uvc3RhcnQvc3RvcC9pb2N0bCBvcGVyYXRpb25zICovCiAJc3RydWN0IGN4MThfb3B0aW9ucyBvcHRpb25zOyAJLyogVXNlciBvcHRpb25zICovCkBAIC00MjYsNyArNTM1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAvKiBnbG9iYWwgY3gxOCBmbGFncyAqLwogCWF0b21pY190IGFuYV9jYXB0dXJpbmc7CS8qIGNvdW50IG51bWJlciBvZiBhY3RpdmUgYW5hbG9nIGNhcHR1cmUgc3RyZWFtcyAqLwogCWF0b21pY190IHRvdF9jYXB0dXJpbmc7CS8qIHRvdGFsIGNvdW50IG51bWJlciBvZiBhY3RpdmUgY2FwdHVyZSBzdHJlYW1zICovCi0Jc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgLyogbG9jayBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlpbnQgc2VhcmNoX3BhY2tfaGVhZGVyOwogCiAJaW50IG9wZW5faWQ7CQkvKiBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYW4gb3BlbiBvY2N1cnMsIHVzZWQgYXMKQEAgLTQ2OCwzMCArNTc2LDMwIEBACiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwWzJdOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnb1syXTsKIAlzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhIGkyY19hbGdvX2NiX2RhdGFbMl07Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudFsyXTsKLQlzdHJ1Y3QgbXV0ZXggaTJjX2J1c19sb2NrWzJdOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50c1tJMkNfQ0xJRU5UU19NQVhdOwogCiAJLyogZ3BpbyAqLwogCXUzMiBncGlvX2RpcjsKIAl1MzIgZ3Bpb192YWw7CiAJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfZ3Bpb211eDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfcmVzZXRjdHJsOwogCiAJLyogdjRsMiBhbmQgVXNlciBzZXR0aW5ncyAqLwogCiAJLyogY29kZWMgc2V0dGluZ3MgKi8KIAl1MzIgYXVkaW9faW5wdXQ7CiAJdTMyIGFjdGl2ZV9pbnB1dDsKLQl1MzIgYWN0aXZlX291dHB1dDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJdjRsMl9zdGRfaWQgdHVuZXJfc3RkOwkvKiBUaGUgbm9ybSBvZiB0aGUgdHVuZXIgKGZpeGVkKSAqLwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOCAqdG9fY3gxOChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDE4LCB2NGwyX2Rldik7Cit9CisKIC8qIEdsb2JhbHMgKi8KLWV4dGVybiBzdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tdOwotZXh0ZXJuIGludCBjeDE4X2NhcmRzX2FjdGl2ZTsKIGV4dGVybiBpbnQgY3gxOF9maXJzdF9taW5vcjsKLWV4dGVybiBzcGlubG9ja190IGN4MThfY2FyZHNfbG9jazsKIAogLyo9PT09PT09PT09PT09PVByb3RvdHlwZXM9PT09PT09PT09PT09PT09PT0qLwogCkBAIC01MTEsNCArNjE5LDIyIEBACiAJcmV0dXJuIGN4LT52YmkuaW4udHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogfQogCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIHdpdGggYSBncnBfaWQgYml0IG1hdGNoaW5nIHRoZQorICogbWFzayBpbiBodyAoaWYgMCwgdGhlbiBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHcoY3gsIGh3LCBvLCBmLCBhcmdzLi4uKSBcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnMoJihjeCktPnY0bDJfZGV2LCBcCisJCQkJICAgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKworI2RlZmluZSBjeDE4X2NhbGxfYWxsKGN4LCBvLCBmLCBhcmdzLi4uKSBjeDE4X2NhbGxfaHcoY3gsIDAsIG8sIGYgLCAjI2FyZ3MpCisKKy8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgd2l0aCBhIGdycF9pZCBiaXQgbWF0Y2hpbmcgdGhlCisgKiBtYXNrIGluIGh3IChpZiAwLCB0aGVuIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IKKyAqIG90aGVyIHRoYW4gMCBvciAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHdfZXJyKGN4LCBodywgbywgZiwgYXJncy4uLikgXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VyciggXAorCQkgICAmKGN4KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCisKKyNkZWZpbmUgY3gxOF9jYWxsX2FsbF9lcnIoY3gsIG8sIGYsIGFyZ3MuLi4pIFwKKwljeDE4X2NhbGxfaHdfZXJyKGN4LCAwLCBvLCBmICwgIyNhcmdzKQorCiAjZW5kaWYgLyogQ1gxOF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCBiZDVlNmYzLi4zYjg2ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5kdmJfYWRhcHRlciwKIAkJCUNYMThfRFJJVkVSX05BTUUsCi0JCQlUSElTX01PRFVMRSwgJmN4LT5kZXYtPmRldiwgYWRhcHRlcl9ucik7CisJCQlUSElTX01PRFVMRSwgJmN4LT5wY2lfZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCAwNTVmNmUwLi40ZDdkNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0xMjgsMTUgKzEyOCwxNSBAQAogc3RhdGljIHZvaWQgY3gxOF9kdWFsd2F0Y2goc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCXUxNiBuZXdfYml0bWFwOwotCXUxNiBuZXdfc3RlcmVvX21vZGU7Ci0JY29uc3QgdTE2IHN0ZXJlb19tYXNrID0gMHgwMzAwOwotCWNvbnN0IHUxNiBkdWFsID0gMHgwMjAwOworCXUzMiBuZXdfYml0bWFwOworCXUzMiBuZXdfc3RlcmVvX21vZGU7CisJY29uc3QgdTMyIHN0ZXJlb19tYXNrID0gMHgwMzAwOworCWNvbnN0IHUzMiBkdWFsID0gMHgwMjAwOwogCXUzMiBoOwogCiAJbmV3X3N0ZXJlb19tb2RlID0gY3gtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgJnZ0KTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgZ190dW5lciwgJnZ0KTsKIAlpZiAodnQuYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgJiYKIAkJCSh2dC5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpKQogCQluZXdfc3RlcmVvX21vZGUgPSBkdWFsOwpAQCAtMTc2LDYgKzE3Niw4IEBACiAJKmVyciA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSBpbmZvIHVwZGF0ZXMgYW5kIHBlbmRpbmcKKwkJCSAgIFZCSSBkYXRhICovCiAKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGN4LT5kdWFsd2F0Y2hfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CiAJCQkJY3gtPmR1YWx3YXRjaF9qaWZmaWVzID0gamlmZmllczsKQEAgLTE4Niw3ICsxODgsNiBAQAogCQkJCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHNfdmJpLCAmc192YmktPnFfZnVsbCkpKSB7CiAJCQkJCS8qIGJ5dGVzd2FwIGFuZCBwcm9jZXNzIFZCSSBkYXRhICovCiAJCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJCSAgICAgIHNfdmJpLT5kbWFfcHRzLAogCQkJCQkJCSAgICAgIHNfdmJpLT50eXBlKTsKIAkJCQkJY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzX3ZiaSwgYnVmKTsKIAkJCQl9CkBAIC0yMDcsOCArMjA4LDcgQEAKIAkJCQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAJCQllbHNlIHsKIAkJCQkvKiBieXRlc3dhcCBhbmQgcHJvY2VzcyBWQkkgZGF0YSAqLwotCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJcy0+ZG1hX3B0cywgcy0+dHlwZSk7CisJCQkJY3gxOF9wcm9jZXNzX3ZiaV9kYXRhKGN4LCBidWYsIHMtPnR5cGUpOwogCQkJfQogCQkJcmV0dXJuIGJ1ZjsKIAkJfQpAQCAtMjYwLDYgKzI2MCwyMCBAQAogCQlsZW4gPSB1Y291bnQ7CiAJaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgcy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKIAkgICAgIWN4MThfcmF3X3ZiaShjeCkgJiYgYnVmICE9ICZjeC0+dmJpLnNsaWNlZF9tcGVnX2J1ZikgeworCQkvKgorCQkgKiBUcnkgdG8gZmluZCBhIGdvb2Qgc3BsaWNlIHBvaW50IGluIHRoZSBQUywganVzdCBiZWZvcmUKKwkJICogYW4gTVBFRy0yIFByb2dyYW0gUGFjayBzdGFydCBjb2RlLCBhbmQgcHJvdmlkZSBvbmx5CisJCSAqIHVwIHRvIHRoYXQgcG9pbnQgdG8gdGhlIHVzZXIsIHNvIGl0J3MgZWFzeSB0byBpbnNlcnQgVkJJIGRhdGEKKwkJICogdGhlIG5leHQgdGltZSBhcm91bmQuCisJCSAqLworCQkvKiBGSVhNRSAtIFRoaXMgb25seSB3b3JrcyBmb3IgYW4gTVBFRy0yIFBTLCBub3QgYSBUUyAqLworCQkvKgorCQkgKiBBbiBNUEVHLTIgUHJvZ3JhbSBTdHJlYW0gKFBTKSBpcyBhIHNlcmllcyBvZgorCQkgKiBNUEVHLTIgUHJvZ3JhbSBQYWNrcyB0ZXJtaW5hdGVkIGJ5IGFuCisJCSAqIE1QRUcgUHJvZ3JhbSBFbmQgQ29kZSBhZnRlciB0aGUgbGFzdCBQcm9ncmFtIFBhY2suCisJCSAqIEEgUHJvZ3JhbSBQYWNrIG1heSBob2xkIGEgUFMgU3lzdGVtIEhlYWRlciBwYWNrZXQgYW5kIGFueQorCQkgKiBudW1iZXIgb2YgUHJvZ3JhbSBFbGVtZW50YXJ5IFN0cmVhbSAoUEVTKSBQYWNrZXRzCisJCSAqLwogCQljb25zdCBjaGFyICpzdGFydCA9IGJ1Zi0+YnVmICsgYnVmLT5yZWFkcG9zOwogCQljb25zdCBjaGFyICpwID0gc3RhcnQgKyAxOwogCQljb25zdCB1OCAqcTsKQEAgLTI2NywzOCArMjgxLDU0IEBACiAJCWludCBzdHVmZmluZywgaTsKIAogCQl3aGlsZSAoc3RhcnQgKyBsZW4gPiBwKSB7CisJCQkvKiBTY2FuIGZvciBhIDAgdG8gZmluZCBhIHBvdGVudGlhbCBNUEVHLTIgc3RhcnQgY29kZSAqLwogCQkJcSA9IG1lbWNocihwLCAwLCBzdGFydCArIGxlbiAtIHApOwogCQkJaWYgKHEgPT0gTlVMTCkKIAkJCQlicmVhazsKIAkJCXAgPSBxICsgMTsKKwkJCS8qCisJCQkgKiBLZWVwIGxvb2tpbmcgaWYgbm90IGEKKwkJCSAqIE1QRUctMiBQYWNrIGhlYWRlciBzdGFydCBjb2RlOiAgMHgwMCAweDAwIDB4MDEgMHhiYQorCQkJICogb3IgTVBFRy0yIHZpZGVvIFBFUyBzdGFydCBjb2RlOiAweDAwIDB4MDAgMHgwMSAweGUwCisJCQkgKi8KIAkJCWlmICgoY2hhciAqKXEgKyAxNSA+PSBidWYtPmJ1ZiArIGJ1Zi0+Ynl0ZXN1c2VkIHx8CiAJCQkgICAgcVsxXSAhPSAwIHx8IHFbMl0gIT0gMSB8fCBxWzNdICE9IGNoKQogCQkJCWNvbnRpbnVlOworCisJCQkvKiBJZiBleHBlY3RpbmcgdGhlIHByaW1hcnkgdmlkZW8gUEVTICovCiAJCQlpZiAoIWN4LT5zZWFyY2hfcGFja19oZWFkZXIpIHsKKwkJCQkvKiBDb250aW51ZSBpZiBpdCBjb3VsZG4ndCBiZSBhIFBFUyBwYWNrZXQgKi8KIAkJCQlpZiAoKHFbNl0gJiAweGMwKSAhPSAweDgwKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoKChxWzddICYgMHhjMCkgPT0gMHg4MCAmJgotCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDIwKSB8fAotCQkJCSAgICAoKHFbN10gJiAweGMwKSA9PSAweGMwICYmCi0JCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MzApKSB7Ci0JCQkJCWNoID0gMHhiYTsKKwkJCQkvKiBDaGVjayBpZiBhIFBUUyBvciBQVFMgJiBEVFMgZm9sbG93ICovCisJCQkJaWYgKCgocVs3XSAmIDB4YzApID09IDB4ODAgJiYgIC8qIFBUUyBvbmx5ICovCisJCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MjApIHx8IC8qIFBUUyBvbmx5ICovCisJCQkJICAgICgocVs3XSAmIDB4YzApID09IDB4YzAgJiYgIC8qIFBUUyAmIERUUyAqLworCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDMwKSkgeyAvKiBEVFMgZm9sbG93cyAqLworCQkJCQkvKiBBc3N1bWUgd2UgZm91bmQgdGhlIHZpZGVvIFBFUyBoZHIgKi8KKwkJCQkJY2ggPSAweGJhOyAvKiBuZXh0IHdhbnQgYSBQcm9ncmFtIFBhY2sqLwogCQkJCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMTsKLQkJCQkJcCA9IHEgKyA5OworCQkJCQlwID0gcSArIDk7IC8qIFNraXAgdGhpcyB2aWRlbyBQRVMgaGRyICovCiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQkvKiBXZSBtYXkgaGF2ZSBmb3VuZCBhIFByb2dyYW0gUGFjayBzdGFydCBjb2RlICovCisKKwkJCS8qIEdldCB0aGUgY291bnQgb2Ygc3R1ZmZpbmcgYnl0ZXMgJiB2ZXJpZnkgdGhlbSAqLwogCQkJc3R1ZmZpbmcgPSBxWzEzXSAmIDc7CiAJCQkvKiBhbGwgc3R1ZmZpbmcgYnl0ZXMgbXVzdCBiZSAweGZmICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmZpbmc7IGkrKykKIAkJCQlpZiAocVsxNCArIGldICE9IDB4ZmYpCiAJCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gc3R1ZmZpbmcgJiYKLQkJCSAgICAocVs0XSAmIDB4YzQpID09IDB4NDQgJiYKLQkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmCi0JCQkgICAgcVsxNCArIHN0dWZmaW5nXSA9PSAwICYmCisJCQlpZiAoaSA9PSBzdHVmZmluZyAmJiAvKiByaWdodCBudW1iZXIgb2Ygc3R1ZmZpbmcgYnl0ZXMqLworCQkJICAgIChxWzRdICYgMHhjNCkgPT0gMHg0NCAmJiAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmICAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICBxWzE0ICsgc3R1ZmZpbmddID09IDAgJiYgLyogUEVTIFBhY2sgb3IgU3lzIEhkciAqLwogCQkJICAgIHFbMTUgKyBzdHVmZmluZ10gPT0gMCAmJgogCQkJICAgIHFbMTYgKyBzdHVmZmluZ10gPT0gMSkgewotCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOworCQkJCS8qIFdlIGRlY2xhcmUgd2UgYWN0dWFsbHkgZm91bmQgYSBQcm9ncmFtIFBhY2sqLworCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOyAvKiBleHBlY3QgdmlkIFBFUyAqLwogCQkJCWxlbiA9IChjaGFyICopcSAtIHN0YXJ0OwogCQkJCWN4MThfc2V0dXBfc2xpY2VkX3ZiaV9idWYoY3gpOwogCQkJCWJyZWFrOwpAQCAtNTc4LDcgKzYwOCw3IEBACiAJCS8qIE1hcmsgdGhhdCB0aGUgcmFkaW8gaXMgbm8gbG9uZ2VyIGluIHVzZSAqLwogCQljbGVhcl9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIFRWICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfU1RELCAmY3gtPnN0ZCk7CisJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3N0ZCwgY3gtPnN0ZCk7CiAJCS8qIFNlbGVjdCBjb3JyZWN0IGF1ZGlvIGlucHV0IChpLmUuIFRWIHR1bmVyIG9yIExpbmUgaW4pICovCiAJCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKIAkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKSB7CkBAIC02NDEsNyArNjcxLDcgQEAKIAkJLyogV2UgaGF2ZSB0aGUgcmFkaW8gKi8KIAkJY3gxOF9tdXRlKGN4KTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIHJhZGlvICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgQVVEQ19TRVRfUkFESU8sIE5VTEwpOworCQljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19yYWRpbyk7CiAJCS8qIFNlbGVjdCB0aGUgY29ycmVjdCBhdWRpbyBpbnB1dCAoaS5lLiByYWRpbyB0dW5lcikgKi8KIAkJY3gxOF9hdWRpb19zZXRfaW8oY3gpOwogCQkvKiBEb25lISBVbm11dGUgYW5kIGNvbnRpbnVlLiAqLwpAQCAtNjUyLDM4ICs2ODIsMTUgQEAKIAogaW50IGN4MThfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCByZXMsIHgsIHkgPSAwOwotCXN0cnVjdCBjeDE4ICpjeCA9IE5VTEw7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzID0gTlVMTDsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKLQotCS8qIEZpbmQgd2hpY2ggY2FyZCB0aGlzIG9wZW4gd2FzIG9uICovCi0Jc3Bpbl9sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCWZvciAoeCA9IDA7IGN4ID09IE5VTEwgJiYgeCA8IGN4MThfY2FyZHNfYWN0aXZlOyB4KyspIHsKLQkJLyogZmluZCBvdXQgd2hpY2ggc3RyZWFtIHRoaXMgb3BlbiB3YXMgb24gKi8KLQkJZm9yICh5ID0gMDsgeSA8IENYMThfTUFYX1NUUkVBTVM7IHkrKykgewotCQkJaWYgKGN4MThfY2FyZHNbeF0gPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCXMgPSAmY3gxOF9jYXJkc1t4XS0+c3RyZWFtc1t5XTsKLQkJCWlmIChzLT52NGwyZGV2ICYmIHMtPnY0bDJkZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQkJY3ggPSBjeDE4X2NhcmRzW3hdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCi0JaWYgKGN4ID09IE5VTEwpIHsKLQkJLyogQ291bGRuJ3QgZmluZCBhIGRldmljZSByZWdpc3RlcmVkCi0JCSAgIG9uIHRoYXQgbWlub3IsIHNob3VsZG4ndCBoYXBwZW4hICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGN4MTggZGV2aWNlIGZvdW5kIG9uIG1pbm9yICVkXG4iLAotCQkJCW1pbm9yKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CisJaW50IHJlczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2Rldik7CisJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7OwogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oY3gpKSB7Ci0JCUNYMThfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwgbWlub3IpOworCQlDWDE4X0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCisJCQkgdmlkZW9fZGV2LT5taW5vcik7CiAJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYwppbmRleCAxZmE5NWRhLi44M2NkNTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlycS5oIgogI2luY2x1ZGUgImN4MTgtZmlybXdhcmUuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBDWDE4X1BST0NfU09GVF9SRVNFVCAJCTB4YzcwMDEwCkBAIC0xMDcsNyArMTA2LDcgQEAKIAl1MzIgX19pb21lbSAqZHN0ID0gKHUzMiBfX2lvbWVtICopbWVtOwogCWNvbnN0IHUzMiAqc3JjOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJmN4LT5kZXYtPmRldikpIHsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPnBjaV9kZXYtPmRldikpIHsKIAkJQ1gxOF9FUlIoIlVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmbik7CiAJCUNYMThfRVJSKCJEaWQgeW91IHB1dCB0aGUgZmlybXdhcmUgaW4gdGhlIGhvdHBsdWcgZmlybXdhcmUgZGlyZWN0b3J5P1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUxLDcgKzE1MCw3IEBACiAJdTMyIGFwdV92ZXJzaW9uID0gMDsKIAlpbnQgc3o7CiAKLQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPmRldi0+ZGV2KSkgeworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZjeC0+cGNpX2Rldi0+ZGV2KSkgewogCQlDWDE4X0VSUigidW5hYmxlIHRvIG9wZW4gZmlybXdhcmUgJXNcbiIsIGZuKTsKIAkJQ1gxOF9FUlIoImRpZCB5b3UgcHV0IHRoZSBmaXJtd2FyZSBpbiB0aGUgaG90cGx1ZyBmaXJtd2FyZSBkaXJlY3Rvcnk/XG4iKTsKIAkJY3gxOF9zZXR1cF9wYWdlKGN4LCAwKTsKQEAgLTI4NiwyMyArMjg1LDYgQEAKIAljeDE4X3dyaXRlX3JlZyhjeCwgMHgyQkUyRkUsIENYMThfTVBFR19DTE9DS19QTExfRlJBQyk7CiAJY3gxOF93cml0ZV9yZWcoY3gsIDgsIENYMThfTVBFR19DTE9DS19QTExfUE9TVCk7CiAKLQkvKgotCSAqIFZEQ0xLICBJbnRlZ2VyID0gMHgwZiwgUG9zdCBEaXZpZGVyID0gMHgwNAotCSAqIEFJTUNMSyBJbnRlZ2VyID0gMHgwZSwgUG9zdCBEaXZpZGVyID0gMHgxNgotCSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUExMX0NUUkwxLCAweDE2MGUwNDBmKTsKLQotCS8qIFZEQ0xLIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KLQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogYmVmb3JlIHBvc3QgZGl2aWRlICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19WSURfUExMX0ZSQUMsIDB4MDAyYmUyZmUpOwotCi0JLyogQUlNQ0xLIEZyYWN0aW9uID0gMHgwNTIyN2FkICovCi0JLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBiZWZvcmUgcG9zdC1kaXZpZGUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0FVWF9QTExfRlJBQywgMHgwMDUyMjdhZCk7Ci0KLQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDE2ICovCi0JY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX0kyU19NQ0xLLCAweDU2KTsKLQogCS8qIERlZmF1bHRzICovCiAJLyogQVBVID0gU0Mgb3IgU0MvMiA9IDEyNS82Mi41ICovCiAJLyogRVBVID0gU0MgPSAxMjUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwppbmRleCAxYTk5MzI5Li41NTE4ZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCkBAIC00Niw2ICs0Niw5IEBACiAgKiBncGlvMTM6IGNzNTM0NSByZXNldCBwaW4KICovCiAKKy8qCisgKiBGaWxlIHNjb3BlIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KIHN0YXRpYyB2b2lkIGdwaW9fd3JpdGUoc3RydWN0IGN4MTggKmN4KQogewogCXUzMiBkaXJfbG8gPSBjeC0+Z3Bpb19kaXIgJiAweGZmZmY7CkBAIC02Myw3MyArNjYsMjAxIEBACiAJCQkJCUNYMThfUkVHX0dQSU9fT1VUMiwgdmFsX2hpLCBkaXJfaGkpOwogfQogCi12b2lkIGN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKHN0cnVjdCBjeDE4ICpjeCkKK3N0YXRpYyB2b2lkIGdwaW9fdXBkYXRlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIG1hc2ssIHUzMiBkYXRhKQogewotCWNvbnN0IHN0cnVjdCBjeDE4X2dwaW9faTJjX3NsYXZlX3Jlc2V0ICpwOwotCi0JcCA9ICZjeC0+Y2FyZC0+Z3Bpb19pMmNfc2xhdmVfcmVzZXQ7Ci0KLQlpZiAoKHAtPmFjdGl2ZV9sb19tYXNrIHwgcC0+YWN0aXZlX2hpX21hc2spID09IDApCisJaWYgKG1hc2sgPT0gMCkKIAkJcmV0dXJuOwogCi0JLyogQXNzdW1pbmcgdGhhdCB0aGUgbWFza3MgYXJlIGEgc3Vic2V0IG9mIHRoZSBiaXRzIGluIGdwaW9fZGlyICovCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CisJY3gtPmdwaW9fdmFsID0gKGN4LT5ncGlvX3ZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJZ3Bpb193cml0ZShjeCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19yZXNldF9zZXEoc3RydWN0IGN4MTggKmN4LCB1MzIgYWN0aXZlX2xvLCB1MzIgYWN0aXZlX2hpLAorCQkJICAgdW5zaWduZWQgaW50IGFzc2VydF9tc2VjcywKKwkJCSAgIHVuc2lnbmVkIGludCByZWNvdmVyeV9tc2VjcykKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSBhY3RpdmVfbG8gfCBhY3RpdmVfaGk7CisJaWYgKG1hc2sgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBc3N1bWluZyB0aGF0IGFjdGl2ZV9oaSBhbmQgYWN0aXZlX2xvIGFyZSBhIHN1YnNldHMgb2YgdGhlIGJpdHMgaW4KKwkgKiBncGlvX2Rpci4gIEFsc28gYXNzdW1lcyB0aGF0IGFjdGl2ZV9sbyBhbmQgYWN0aXZlX2hpIGRvbid0IG92ZXJsYXAKKwkgKiBpbiBhbnkgYml0IHBvc2l0aW9uCisJICovCiAKIAkvKiBBc3NlcnQgKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2hpX21hc2spICYgfihwLT5hY3RpdmVfbG9fbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19hc3NlcnRlZCkpOworCWdwaW9fdXBkYXRlKGN4LCBtYXNrLCB+YWN0aXZlX2xvKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKGFzc2VydF9tc2VjcykpOwogCiAJLyogRGVhc3NlcnQgKi8KLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2xvX21hc2spICYgfihwLT5hY3RpdmVfaGlfbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19yZWNvdmVyeSkpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJZ3Bpb191cGRhdGUoY3gsIG1hc2ssIH5hY3RpdmVfaGkpOworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocmVjb3ZlcnlfbXNlY3MpKTsKIH0KIAotdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSkKKy8qCisgKiBHUElPIE11bHRpcGxleGVyIC0gbG9naWNhbCBkZXZpY2UKKyAqLworc3RhdGljIGludCBncGlvbXV4X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+Y3g7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiR1BJTzogIGRpcmVjdGlvbiAweCUwOHgsIHZhbHVlIDB4JTA4eFxuIiwKKwkJICAgICAgY3gtPmdwaW9fZGlyLCBjeC0+Z3Bpb192YWwpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb211eF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwkvKgorCSAqIEZJWE1FIC0gd29yayBvdXQgdGhlIGN4LT5hY3RpdmUvYXVkaW9faW5wdXQgbWVzcyAtIHRoaXMgaXMKKwkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCB0byByYWRpbyBtb2RlIGFuZCBzZXQgdGhlCisJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCSAqLworCWdwaW9fdXBkYXRlKGN4LCBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrLAorCQkJY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1MzIgZGF0YTsKKworCXN3aXRjaCAoY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdLm11eGVyX2lucHV0KSB7CisJY2FzZSAxOgorCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOworCQlicmVhazsKKwljYXNlIDA6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRklYTUUgLSB3b3JrIG91dCB0aGUgY3gtPmFjdGl2ZS9hdWRpb19pbnB1dCBtZXNzIC0gdGhpcyBpcworCQkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCBmcm9tIHJhZGlvIG1vZGUgYW5kIHNldCB0aGUKKwkJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCQkgKi8KKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTMyIGRhdGE7CisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5saW5laW47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGdwaW9tdXhfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBncGlvbXV4X2xvZ19zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBncGlvbXV4X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBncGlvbXV4X3Nfc3RkLAorCS5zX3JhZGlvID0gZ3Bpb211eF9zX3JhZGlvLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgZ3Bpb211eF9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgZ3Bpb211eF9vcHMgPSB7CisJLmNvcmUgPSAmZ3Bpb211eF9jb3JlX29wcywKKwkudHVuZXIgPSAmZ3Bpb211eF90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmdwaW9tdXhfYXVkaW9fb3BzLAorfTsKKworLyoKKyAqIEdQSU8gUmVzZXQgQ29udHJvbGxlciAtIGxvZ2ljYWwgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcmVzZXRjdHJsX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCUNYMThfSU5GT19ERVYoc2QsICJHUElPOiAgZGlyZWN0aW9uIDB4JTA4eCwgdmFsdWUgMHglMDh4XG4iLAorCQkgICAgICBjeC0+Z3Bpb19kaXIsIGN4LT5ncGlvX3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNldGN0cmxfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljb25zdCBzdHJ1Y3QgY3gxOF9ncGlvX2kyY19zbGF2ZV9yZXNldCAqcDsKIAogCXAgPSAmY3gtPmNhcmQtPmdwaW9faTJjX3NsYXZlX3Jlc2V0OwotCi0JaWYgKHAtPmlyX3Jlc2V0X21hc2sgPT0gMCkKLQkJcmV0dXJuOwotCi0JQ1gxOF9ERUJVR19JTkZPKCJSZXNldHRpbmcgSVIgbWljcm9jb250cm9sbGVyXG4iKTsKLQotCS8qCi0JICAgQXNzZXJ0IHRpbWluZyBmb3IgdGhlIFo4RjA4MTEgb24gSFZSLTE2MDAgYm9hcmRzOgotCSAgIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8gaW5pdGlhdGUKLQkgICAyLiBSZXNldCB0aGVuIHRha2VzIDY2IFdEVCBjeWNsZXMgYXQgMTAga0h6ICsgMTYgeHRhbCBjbG9jayBjeWNsZXMKLQkJKDYsNjAxLDA4NSBuYW5vc2Vjb25kcyB+PSA3IG1pbGxpc2Vjb25kcykKLQkgICAzLiBEQkcgcGluIG11c3QgYmUgaGlnaCBiZWZvcmUgY2hpcCBleGl0cyByZXNldCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KLQkJREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaCBzaW5jZSB3ZSBkb24ndAotCQlub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZSBIVlItMTYwMAotCSAgIDQuIFo4RjA4MTEgd29uJ3QgZXhpdCByZXNldCB1bnRpbCBSRVNFVCBpcyBkZWFzc2VydGVkCi0JKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPSBjeC0+Z3Bpb192YWwgJiB+cC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfYXNzZXJ0ZWQpKTsKLQotCS8qCi0JICAgWmlsb2cgY29tZXMgb3V0IG9mIHJlc2V0LCBsb2FkcyByZXNldCB2ZWN0b3IgYWRkcmVzcyBhbmQgZXhlY3V0ZXMKLQkgICBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgotCSovCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsID0gY3gtPmdwaW9fdmFsIHwgcC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfcmVjb3ZlcnkpKTsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgQ1gxOF9HUElPX1JFU0VUX0kyQzoKKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmFjdGl2ZV9sb19tYXNrLCBwLT5hY3RpdmVfaGlfbWFzaywKKwkJCSAgICAgICBwLT5tc2Vjc19hc3NlcnRlZCwgcC0+bXNlY3NfcmVjb3ZlcnkpOworCQlicmVhazsKKwljYXNlIENYMThfR1BJT19SRVNFVF9aOEYwODExOgorCQkvKgorCQkgKiBBc3NlcnQgdGltaW5nIGZvciB0aGUgWjhGMDgxMSBvbiBIVlItMTYwMCBib2FyZHM6CisJCSAqIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8KKwkJICogICAgaW5pdGlhdGUKKwkJICogMi4gUmVzZXQgdGhlbiB0YWtlcyA2NiBXRFQgY3ljbGVzIGF0IDEwIGtIeiArIDE2IHh0YWwgY2xvY2sKKwkJICogICAgY3ljbGVzICg2LDYwMSwwODUgbmFub3NlY29uZHMgfj0gNyBtaWxsaXNlY29uZHMpCisJCSAqIDMuIERCRyBwaW4gbXVzdCBiZSBoaWdoIGJlZm9yZSBjaGlwIGV4aXRzIHJlc2V0IGZvciBub3JtYWwKKwkJICogICAgb3BlcmF0aW9uLiAgREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaAorCQkgKiAgICBzaW5jZSB3ZSBkb24ndCBub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZQorCQkgKiAgICBIVlItMTYwMAorCQkgKiA0LiBaOEYwODExIHdvbid0IGV4aXQgcmVzZXQgdW50aWwgUkVTRVQgaXMgZGVhc3NlcnRlZAorCQkgKiA1LiBaaWxvZyBjb21lcyBvdXQgb2YgcmVzZXQsIGxvYWRzIHJlc2V0IHZlY3RvciBhZGRyZXNzIGFuZAorCQkgKiAgICBleGVjdXRlcyBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgorCQkgKi8KKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmlyX3Jlc2V0X21hc2ssIDAsCisJCQkgICAgICAgcC0+bXNlY3NfYXNzZXJ0ZWQsIHAtPm1zZWNzX3JlY292ZXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0dQSU9fUkVTRVRfWEMyMDI4OgorCQlpZiAoY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciA9PSBUVU5FUl9YQzIwMjgpCisJCQlncGlvX3Jlc2V0X3NlcShjeCwgKDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pLCAwLAorCQkJCSAgICAgICAxLCAxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDE4X3Jlc2V0X2lyX2dwaW8pOwotLyogVGhpcyBzeW1ib2wgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBhbiBpbmZyYXJlZCBtb2R1bGUgZm9yIHRoZSBJUi1ibGFzdGVyICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgcmVzZXRjdHJsX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gcmVzZXRjdHJsX2xvZ19zdGF0dXMsCisJLnJlc2V0ID0gcmVzZXRjdHJsX3Jlc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcmVzZXRjdHJsX29wcyA9IHsKKwkuY29yZSA9ICZyZXNldGN0cmxfY29yZV9vcHMsCit9OworCisvKgorICogRXh0ZXJuYWwgZW50cnkgcG9pbnRzCisgKi8KIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KQogewogCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwpAQCAtMTU2LDYgKzI4Nyw0OSBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiB9CiAKK2ludCBjeDE4X2dwaW9fcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CisJY2hhciAqc3RyOworCisJc3dpdGNoIChodykgeworCWNhc2UgQ1gxOF9IV19HUElPX01VWDoKKwkJc2QgPSAmY3gtPnNkX2dwaW9tdXg7CisJCW9wcyA9ICZncGlvbXV4X29wczsKKwkJc3RyID0gImdwaW8tbXV4IjsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJc2QgPSAmY3gtPnNkX3Jlc2V0Y3RybDsKKwkJb3BzID0gJnJlc2V0Y3RybF9vcHM7CisJCXN0ciA9ICJncGlvLXJlc2V0LWN0cmwiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2NGwyX3N1YmRldl9pbml0KHNkLCBvcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoc2QsIGN4KTsKKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwgIiVzICVzIiwgY3gtPnY0bDJfZGV2Lm5hbWUsIHN0cik7CisJc2QtPmdycF9pZCA9IGh3OworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJmN4LT52NGwyX2Rldiwgc2QpOworfQorCit2b2lkIGN4MThfcmVzZXRfaXJfZ3Bpbyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoKHN0cnVjdCB2NGwyX2RldmljZSAqKWRhdGEpOworCisJaWYgKGN4LT5jYXJkLT5ncGlvX2kyY19zbGF2ZV9yZXNldC5pcl9yZXNldF9tYXNrID09IDApCisJCXJldHVybjsKKworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIElSIG1pY3JvY29udHJvbGxlclxuIik7CisKKwl2NGwyX3N1YmRldl9jYWxsKCZjeC0+c2RfcmVzZXRjdHJsLAorCQkJIGNvcmUsIHJlc2V0LCBDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSk7Cit9CitFWFBPUlRfU1lNQk9MKGN4MThfcmVzZXRfaXJfZ3Bpbyk7CisvKiBUaGlzIHN5bWJvbCBpcyBleHBvcnRlZCBmb3IgdXNlIGJ5IGxpcmNfcHZyMTUwIGZvciB0aGUgSVItYmxhc3RlciAqLworCiAvKiBYY2VpdmUgdHVuZXIgcmVzZXQgZnVuY3Rpb24gKi8KIGludCBjeDE4X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpCiB7CkBAIC0xNjMsNTYgKzMzNywxMSBAQAogCXN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKmNiX2RhdGEgPSBhbGdvLT5kYXRhOwogCXN0cnVjdCBjeDE4ICpjeCA9IGNiX2RhdGEtPmN4OwogCi0JaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQpCisJaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQgfHwKKwkgICAgY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciAhPSBUVU5FUl9YQzIwMjgpCiAJCXJldHVybiAwOwotCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIHR1bmVyXG4iKTsKIAotCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCWN4LT5ncGlvX3ZhbCAmPSB+KDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pOwotCWdwaW9fd3JpdGUoY3gpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsIHw9IDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW47Ci0JZ3Bpb193cml0ZShjeCk7Ci0JbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCXUzMiBtYXNrLCBkYXRhOwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JCXN3aXRjaCAocm91dGUtPmlucHV0KSB7Ci0JCWNhc2UgMDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5yYWRpbzsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChtYXNrKSB7Ci0JCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCQljeC0+Z3Bpb192YWwgPSAoY3gtPmdwaW9fdmFsICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJZ3Bpb193cml0ZShjeCk7Ci0JCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JfQotCXJldHVybiAwOworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIFhDZWl2ZSB0dW5lclxuIik7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoJmN4LT5zZF9yZXNldGN0cmwsCisJCQkJY29yZSwgcmVzZXQsIENYMThfR1BJT19SRVNFVF9YQzIwMjgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCmluZGV4IDM5ZmZjY2MuLmY5YTVjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKQEAgLTIyLDcgKzIyLDEzIEBACiAgKi8KIAogdm9pZCBjeDE4X2dwaW9faW5pdChzdHJ1Y3QgY3gxOCAqY3gpOwotdm9pZCBjeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gpOworaW50IGN4MThfZ3Bpb19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7CisKK2VudW0gY3gxOF9ncGlvX3Jlc2V0X3R5cGUgeworCUNYMThfR1BJT19SRVNFVF9JMkMgICAgID0gMCwKKwlDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSA9IDEsCisJQ1gxOF9HUElPX1JFU0VUX1hDMjAyOCAgPSAyLAorfTsKKwogdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSk7CiBpbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKTsKLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggODNlMWM2My4uZDA5MjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtZ3Bpby5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKIApAQCAtNDMsMzEgKzQyLDM3IEBACiAjZGVmaW5lIENYMThfQ1M1MzQ1X0kyQ19BRERSCQkweDRjCiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCi1zdGF0aWMgY29uc3QgdTggaHdfZHJpdmVyaWRzW10gPSB7Ci0JSTJDX0RSSVZFUklEX1RVTkVSLAotCUkyQ19EUklWRVJJRF9UVkVFUFJPTSwKLQlJMkNfRFJJVkVSSURfQ1M1MzQ1LAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAgCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCi19OwotCi0vKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogc3RhdGljIGNvbnN0IHU4IGh3X2FkZHJzW10gPSB7Ci0JMCwKLQkwLAotCUNYMThfQ1M1MzQ1X0kyQ19BRERSLAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAsCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCisJMCwJCQkvKiBDWDE4X0hXX1RVTkVSICovCisJMCwJCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJQ1gxOF9DUzUzNDVfSTJDX0FERFIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJMCwJCQkvKiBDWDE4X0hXX0RWQiAqLworCTAsCQkJLyogQ1gxOF9IV180MThfQVYgKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCiB9OwogCiAvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogLyogVGhpcyBtaWdodCB3ZWxsIGJlY29tZSBhIGNhcmQtc3BlY2lmaWMgYXJyYXkgKi8KIHN0YXRpYyBjb25zdCB1OCBod19idXNbXSA9IHsKLQkwLAotCTAsCi0JMCwKLQkwLCAJCS8qIENYMThfSFdfR1BJTyBkdW1teSBkcml2ZXIgSUQgKi8KLQkwLAkJLyogQ1gxOF9IV19DWDIzNDE4IGR1bW15IGRyaXZlciBJRCAqLworCTEsCS8qIENYMThfSFdfVFVORVIgKi8KKwkwLAkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJMCwJLyogQ1gxOF9IV19DUzUzNDUgKi8KKwkwLAkvKiBDWDE4X0hXX0RWQiAqLworCTAsCS8qIENYMThfSFdfNDE4X0FWICovCisJMCwJLyogQ1gxOF9IV19HUElPX01VWCAqLworCTAsCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCit9OworCisvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBod19tb2R1bGVzW10gPSB7CisJInR1bmVyIiwJLyogQ1gxOF9IV19UVU5FUiAqLworCU5VTEwsCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJImNzNTM0NSIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJTlVMTCwJCS8qIENYMThfSFdfRFZCICovCisJTlVMTCwJCS8qIENYMThfSFdfNDE4X0FWICovCisJTlVMTCwJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC03NSw4MyArODAsNjcgQEAKIAkidHVuZXIiLAogCSJ0dmVlcHJvbSIsCiAJImNzNTM0NSIsCi0JImdwaW8iLAotCSJjeDIzNDE4IiwKKwkiY3gyMzQxOF9EVFYiLAorCSJjeDIzNDE4X0FWIiwKKwkiZ3Bpb19tdXgiLAorCSJncGlvX3Jlc2V0X2N0cmwiLAogfTsKIAogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwotCXU4IGlkLCBidXM7Ci0JaW50IGk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgYnVzID0gaHdfYnVzW2lkeF07CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJmN4LT5pMmNfYWRhcFtidXNdOworCWNvbnN0IGNoYXIgKm1vZCA9IGh3X21vZHVsZXNbaWR4XTsKKwljb25zdCBjaGFyICp0eXBlID0gaHdfZGV2aWNlbmFtZXNbaWR4XTsKKwl1MzIgaHcgPSAxIDw8IGlkeDsKIAotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IHJlZ2lzdGVyXG4iKTsKLQlpZiAoaWR4ID49IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKSB8fCBod19kcml2ZXJpZHNbaWR4XSA9PSAwKQorCWlmIChpZHggPj0gQVJSQVlfU0laRShod19hZGRycykpCiAJCXJldHVybiAtMTsKLQlpZCA9IGh3X2RyaXZlcmlkc1tpZHhdOwotCWJ1cyA9IGh3X2J1c1tpZHhdOwotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQlzdHJsY3B5KGluZm8udHlwZSwgaHdfZGV2aWNlbmFtZXNbaWR4XSwgc2l6ZW9mKGluZm8udHlwZSkpOwotCWluZm8uYWRkciA9IGh3X2FkZHJzW2lkeF07Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKQotCQlpZiAoY3gtPmkyY19jbGllbnRzW2ldID09IE5VTEwpCi0JCQlicmVhazsKIAotCWlmIChpID09IEkyQ19DTElFTlRTX01BWCkgewotCQlDWDE4X0VSUigiaW5zdWZmaWNpZW50IHJvb20gZm9yIG5ldyBJMkMgY2xpZW50IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChodyA9PSBDWDE4X0hXX1RVTkVSKSB7CisJCS8qIHNwZWNpYWwgdHVuZXIgZ3JvdXAgaGFuZGxpbmcgKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsCisJCQkJCQljeC0+Y2FyZF9pMmMtPnJhZGlvKTsKKwkJaWYgKHNkICE9IE5VTEwpCisJCQlzZC0+Z3JwX2lkID0gaHc7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLAorCQkJCQkJY3gtPmNhcmRfaTJjLT5kZW1vZCk7CisJCWlmIChzZCAhPSBOVUxMKQorCQkJc2QtPmdycF9pZCA9IGh3OworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwKKwkJCQkJCWN4LT5jYXJkX2kyYy0+dHYpOworCQlpZiAoc2QgIT0gTlVMTCkKKwkJCXNkLT5ncnBfaWQgPSBodzsKKwkJcmV0dXJuIHNkICE9IE5VTEwgPyAwIDogLTE7CiAJfQogCi0JaWYgKGlkICE9IEkyQ19EUklWRVJJRF9UVU5FUikgewotCQljID0gaTJjX25ld19kZXZpY2UoJmN4LT5pMmNfYWRhcFtidXNdLCAmaW5mbyk7Ci0JCWlmIChjLT5kcml2ZXIgPT0gTlVMTCkKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQkJZWxzZQotCQkJY3gtPmkyY19jbGllbnRzW2ldID0gYzsKLQkJcmV0dXJuIGN4LT5pMmNfY2xpZW50c1tpXSA/IDAgOiAtRU5PREVWOwotCX0KKwkvKiBJcyBpdCBub3QgYW4gSTJDIGRldmljZSBvciBvbmUgd2UgZG8gbm90IHdpc2ggdG8gcmVnaXN0ZXI/ICovCisJaWYgKCFod19hZGRyc1tpZHhdKQorCQlyZXR1cm4gLTE7CiAKLQkvKiBzcGVjaWFsIHR1bmVyIGhhbmRsaW5nICovCi0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5yYWRpbyk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5kZW1vZCk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT50dik7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JcmV0dXJuIDA7CisJLyogSXQncyBhbiBJMkMgZGV2aWNlIG90aGVyIHRoYW4gYW4gYW5hbG9nIHR1bmVyICovCisJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJaWYgKHNkICE9IE5VTEwpCisJCXNkLT5ncnBfaWQgPSBodzsKKwlyZXR1cm4gc2QgIT0gTlVMTCA/IDAgOiAtMTsKIH0KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCisvKiBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN1YmRldiBncm91cCBpZCBpbiBodyAqLworc3RydWN0IHY0bDJfc3ViZGV2ICpjeDE4X2ZpbmRfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCiB7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBpOwotCXN0cnVjdCBjeDE4ICpjeCA9IChzdHJ1Y3QgY3gxOCAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IGRldGFjaFxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWlmIChjeC0+aTJjX2NsaWVudHNbaV0gPT0gY2xpZW50KSB7Ci0JCQljeC0+aTJjX2NsaWVudHNbaV0gPSBOVUxMOworCXNwaW5fbG9jaygmY3gtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmN4LT52NGwyX2RldikgeworCQlpZiAoc2QtPmdycF9pZCA9PSBodykgeworCQkJcmVzdWx0ID0gc2Q7CiAJCQlicmVhazsKIAkJfQogCX0KLQlDWDE4X0RFQlVHX0kyQygiaTJjIGRldGFjaCBbY2xpZW50PSVzLCVzXVxuIiwKLQkJICAgY2xpZW50LT5uYW1lLCAoaSA8IEkyQ19DTElFTlRTX01BWCkgPyAib2siIDogImZhaWxlZCIpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJmN4LT52NGwyX2Rldi5sb2NrKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC0yMDQsOCArMTkzLDYgQEAKIAkuaWQgPSBJMkNfSFdfQl9DWDIzNDFYLAogCS5hbGdvID0gTlVMTCwgICAgICAgICAgICAgICAgICAgLyogc2V0IGJ5IGkyYy1hbGdvLWJpdCAqLwogCS5hbGdvX2RhdGEgPSBOVUxMLCAgICAgICAgICAgICAgLyogZmlsbGVkIGZyb20gdGVtcGxhdGUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjIxLDE1MiArMjA4LDI4IEBACiAJLnRpbWVvdXQJPSBDWDE4X0FMR09fQklUX1RJTUVPVVQqSFogLyogamlmZmllcyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGN4MThfaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9ICJjeDE4IGludGVybmFsIiwKLX07Ci0KLWludCBjeDE4X2NhbGxfaTJjX2NsaWVudChzdHJ1Y3QgY3gxOCAqY3gsIGludCBhZGRyLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0KLQlDWDE4X0RFQlVHX0kyQygiY2FsbF9pMmNfY2xpZW50IGFkZHI9JTAyeFxuIiwgYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWNsaWVudCA9IGN4LT5pMmNfY2xpZW50c1tpXTsKLQkJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwgfHwKLQkJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChhZGRyID09IGNsaWVudC0+YWRkcikgewotCQkJcmV0dmFsID0gY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LCBjbWQsIGFyZyk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCWlmIChjbWQgIT0gVklESU9DX0RCR19HX0NISVBfSURFTlQpCi0JCUNYMThfRVJSKCJpMmMgYWRkciAweCUwMnggbm90IGZvdW5kIGZvciBjbWQgMHgleCFcbiIsCi0JCQkgICAgICAgYWRkciwgY21kKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBiYXNlZCBvbiB0aGUgZHJpdmVyIElEIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1zdGF0aWMgaW50IGN4MThfaTJjX2lkX2FkZHIoc3RydWN0IGN4MTggKmN4LCB1MzIgaWQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0dmFsID0gLUVOT0RFVjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykgewotCQljbGllbnQgPSBjeC0+aTJjX2NsaWVudHNbaV07Ci0JCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChpZCA9PSBjbGllbnQtPmRyaXZlci0+aWQpIHsKLQkJCXJldHZhbCA9IGNsaWVudC0+YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIEZpbmQgdGhlIGkyYyBkZXZpY2UgbmFtZSBtYXRjaGluZyB0aGUgQ1gxOF9IV18gZmxhZyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmN4MThfaTJjX2h3X25hbWUodTMyIGh3KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKTsgaSsrKQotCQlpZiAoMSA8PCBpID09IGh3KQotCQkJcmV0dXJuIGh3X2RldmljZW5hbWVzW2ldOwotCXJldHVybiAidW5rbm93biBkZXZpY2UiOwotfQotCi0vKiBGaW5kIHRoZSBpMmMgZGV2aWNlIG1hdGNoaW5nIHRoZSBDWDE4X0hXXyBmbGFnIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcyk7IGkrKykKLQkJaWYgKDEgPDwgaSA9PSBodykKLQkJCXJldHVybiBjeDE4X2kyY19pZF9hZGRyKGN4LCBod19kcml2ZXJpZHNbaV0pOwotCXJldHVybiAtRU5PREVWOwotfQotCi0vKiBDYWxscyBpMmMgZGV2aWNlIGJhc2VkIG9uIENYMThfSFdfIGZsYWcuIElmIGh3ID09IDAsIHRoZW4gZG8gbm90aGluZy4KLSAgIElmIGh3ID09IENYMThfSFdfR1BJTyB0aGVuIGNhbGwgdGhlIGdwaW8gaGFuZGxlci4gKi8KLWludCBjeDE4X2kyY19odyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCBhZGRyOwotCi0JaWYgKGh3ID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGh3ID09IENYMThfSFdfR1BJTykKLQkJcmV0dXJuIGN4MThfZ3BpbyhjeCwgY21kLCBhcmcpOwotCi0JaWYgKGh3ID09IENYMThfSFdfQ1gyMzQxOCkKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7Ci0KLQlhZGRyID0gY3gxOF9pMmNfaHdfYWRkcihjeCwgaHcpOwotCWlmIChhZGRyIDwgMCkgewotCQlDWDE4X0VSUigiaTJjIGhhcmR3YXJlIDB4JTA4eCAoJXMpIG5vdCBmb3VuZCBmb3IgY21kIDB4JXghXG4iLAotCQkJICAgICAgIGh3LCBjeDE4X2kyY19od19uYW1lKGh3KSwgY21kKTsKLQkJcmV0dXJuIGFkZHI7Ci0JfQotCXJldHVybiBjeDE4X2NhbGxfaTJjX2NsaWVudChjeCwgYWRkciwgY21kLCBhcmcpOwotfQotCi0vKiBicm9hZGNhc3QgY21kIGZvciBhbGwgSTJDIGNsaWVudHMgYW5kIGZvciB0aGUgZ3BpbyBzdWJzeXN0ZW0gKi8KLXZvaWQgY3gxOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChjeC0+aTJjX2FkYXBbMF0uYWxnbyA9PSBOVUxMIHx8IGN4LT5pMmNfYWRhcFsxXS5hbGdvID09IE5VTEwpIHsKLQkJQ1gxOF9FUlIoImFkYXB0ZXIgaXMgbm90IHNldFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY3gxOF9hdl9jbWQoY3gsIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMF0sIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMV0sIGNtZCwgYXJnKTsKLQlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19HUElPKQotCQljeDE4X2dwaW8oY3gsIGNtZCwgYXJnKTsKLX0KLQogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJaW50IGk7CiAJQ1gxOF9ERUJVR19JMkMoImkyYyBpbml0XG4iKTsKIAotCS8qIFNhbml0eSBjaGVja3MgZm9yIHRoZSBJMkMgaGFyZHdhcmUgYXJyYXlzLiBUaGV5IG11c3QgYmUgdGhlCi0JICogc2FtZSBzaXplIGFuZCBHUElPL0NYMjM0MTggbXVzdCBiZSB0aGUgbGFzdCBlbnRyaWVzLgotCSAqLwotCWlmIChBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQVJSQVlfU0laRShod19kZXZpY2VuYW1lcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQ1gxOF9IV19HUElPICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDIpKSB8fAotCSAgICBDWDE4X0hXX0NYMjM0MTggIT0gKDEgPDwgKEFSUkFZX1NJWkUoaHdfYWRkcnMpIC0gMSkpIHx8Ci0JICAgIGh3X2RyaXZlcmlkc1tBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDFdKSB7Ci0JCUNYMThfRVJSKCJNaXNtYXRjaGVkIEkyQyBoYXJkd2FyZSBhcnJheXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCW1lbWNweSgmY3gtPmkyY19hZGFwW2ldLCAmY3gxOF9pMmNfYWRhcF90ZW1wbGF0ZSwKLQkJCXNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKKwkJLyogU2V0dXAgYWxnb3JpdGhtIGZvciBhZGFwdGVyICovCiAJCW1lbWNweSgmY3gtPmkyY19hbGdvW2ldLCAmY3gxOF9pMmNfYWxnb190ZW1wbGF0ZSwKIAkJCXNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uY3ggPSBjeDsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uYnVzX2luZGV4ID0gaTsKIAkJY3gtPmkyY19hbGdvW2ldLmRhdGEgPSAmY3gtPmkyY19hbGdvX2NiX2RhdGFbaV07CisKKwkJLyogU2V0dXAgYWRhcHRlciAqLworCQltZW1jcHkoJmN4LT5pMmNfYWRhcFtpXSwgJmN4MThfaTJjX2FkYXBfdGVtcGxhdGUsCisJCQlzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CiAJCWN4LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEgPSAmY3gtPmkyY19hbGdvW2ldOwotCiAJCXNwcmludGYoY3gtPmkyY19hZGFwW2ldLm5hbWUgKyBzdHJsZW4oY3gtPmkyY19hZGFwW2ldLm5hbWUpLAotCQkJCSIgIyVkLSVkIiwgY3gtPm51bSwgaSk7Ci0JCWkyY19zZXRfYWRhcGRhdGEoJmN4LT5pMmNfYWRhcFtpXSwgY3gpOwotCi0JCW1lbWNweSgmY3gtPmkyY19jbGllbnRbaV0sICZjeDE4X2kyY19jbGllbnRfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQkJc3ByaW50ZihjeC0+aTJjX2NsaWVudFtpXS5uYW1lICsKLQkJCQlzdHJsZW4oY3gtPmkyY19jbGllbnRbaV0ubmFtZSksICIlZCIsIGkpOwotCQljeC0+aTJjX2NsaWVudFtpXS5hZGFwdGVyID0gJmN4LT5pMmNfYWRhcFtpXTsKLQkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPmRldi0+ZGV2OworCQkJCSIgIyVkLSVkIiwgY3gtPmluc3RhbmNlLCBpKTsKKwkJaTJjX3NldF9hZGFwZGF0YSgmY3gtPmkyY19hZGFwW2ldLCAmY3gtPnY0bDJfZGV2KTsKKwkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPnBjaV9kZXYtPmRldjsKIAl9CiAKIAlpZiAoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKQEAgLTQwMiw3ICsyNjUsOCBAQAogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzFdLCAxKTsKIAotCWN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKGN4KTsKKwljeDE4X2NhbGxfaHcoY3gsIENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAorCQkgICAgIGNvcmUsIHJlc2V0LCAodTMyKSBDWDE4X0dQSU9fUkVTRVRfSTJDKTsKIAogCXJldHVybiBpMmNfYml0X2FkZF9idXMoJmN4LT5pMmNfYWRhcFswXSkgfHwKIAkJaTJjX2JpdF9hZGRfYnVzKCZjeC0+aTJjX2FkYXBbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAppbmRleCA0ODY5NzM5Li5iZGZkMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaApAQCAtMjEsMTEgKzIxLDggQEAKICAqICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7Ci1pbnQgY3gxOF9pMmNfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgY3gxOF9jYWxsX2kyY19jbGllbnQoc3RydWN0IGN4MTggKmN4LCBpbnQgYWRkciwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpOwotdm9pZCBjeDE4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KTsKK3N0cnVjdCB2NGwyX3N1YmRldiAqY3gxOF9maW5kX2h3KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3KTsKIAogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggNzA4NmFhYi4uZTRjOWUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC01OCwxMiArNTgsMjEgQEAKIAl9CiB9CiAKKy8qIENoZWNrIGlmIFZCSSBzZXJ2aWNlcyBhcmUgYWxsb3dlZCBvbiB0aGUgKGZpZWxkLCBsaW5lKSBmb3IgdGhlIHZpZGVvIHN0ZCAqLwogc3RhdGljIGludCB2YWxpZF9zZXJ2aWNlX2xpbmUoaW50IGZpZWxkLCBpbnQgbGluZSwgaW50IGlzX3BhbCkKIHsKLQlyZXR1cm4gKGlzX3BhbCAmJiBsaW5lID49IDYgJiYgKGxpbmUgIT0gMjMgfHwgZmllbGQgPT0gMCkpIHx8CisJcmV0dXJuIChpc19wYWwgJiYgbGluZSA+PSA2ICYmCisJCSgoZmllbGQgPT0gMCAmJiBsaW5lIDw9IDIzKSB8fCAoZmllbGQgPT0gMSAmJiBsaW5lIDw9IDIyKSkpIHx8CiAJICAgICAgICghaXNfcGFsICYmIGxpbmUgPj0gMTAgJiYgbGluZSA8IDIyKTsKIH0KIAorLyoKKyAqIEZvciBhIChmaWVsZCwgbGluZSwgc3RkKSBhbmQgaW5ib3VuZCBwb3RlbnRpYWwgc2V0IG9mIHNlcnZpY2VzIGZvciB0aGF0IGxpbmUsCisgKiByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHNlcnZpY2Ugb2YgdGhvc2UgcGFzc2VkIGluIHRoZSBpbmNvbWluZyBzZXQgZm9yIHRoYXQKKyAqIGxpbmUgaW4gcHJpb3JpdHkgb3JkZXI6CisgKiBDQywgVlBTLCBvciBXU1Mgb3ZlciBURUxFVEVYVCBmb3Igd2VsbCBrbm93biBsaW5lcworICogVEVMRVRFWFQsIGJlZm9yZSBWUFMsIGJlZm9yZSBDQywgYmVmb3JlIFdTUywgZm9yIG90aGVyIGxpbmVzCisgKi8KIHN0YXRpYyB1MTYgc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoaW50IGZpZWxkLCBpbnQgbGluZSwgdTE2IHNldCwgaW50IGlzX3BhbCkKIHsKIAl1MTYgdmFsaWRfc2V0ID0gKGlzX3BhbCA/IFY0TDJfU0xJQ0VEX1ZCSV82MjUgOiBWNEwyX1NMSUNFRF9WQklfNTI1KTsKQEAgLTkwLDYgKzk5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBFeHBhbmQgdGhlIHNlcnZpY2Vfc2V0IG9mICpmbXQgaW50byB2YWxpZCBzZXJ2aWNlX2xpbmVzIGZvciB0aGUgc3RkLAorICogYW5kIGNsZWFyIHRoZSBwYXNzZWQgaW4gZm10LT5zZXJ2aWNlX3NldAorICovCiB2b2lkIGN4MThfZXhwYW5kX3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQsIGludCBpc19wYWwpCiB7CiAJdTE2IHNldCA9IGZtdC0+c2VydmljZV9zZXQ7CkBAIC0xMDIsNyArMTE1LDI1IEBACiAJfQogfQogCisvKgorICogU2FuaXRpemUgdGhlIHNlcnZpY2VfbGluZXMgaW4gKmZtdCBwZXIgdGhlIHZpZGVvIHN0ZCwgYW5kIHJldHVybiAxCisgKiBpZiBhbnkgc2VydmljZV9saW5lIGlzIGxlZnQgYXMgdmFsaWQgYWZ0ZXIgc2FudGl6YXRpb24KKyAqLworc3RhdGljIGludCBjaGVja19zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKQoreworCWludCBmLCBsOworCXUxNiBzZXQgPSAwOwogCisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoZiwgbCwgZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdLCBpc19wYWwpOworCQkJc2V0IHw9IGZtdC0+c2VydmljZV9saW5lc1tmXVtsXTsKKwkJfQorCX0KKwlyZXR1cm4gc2V0ICE9IDA7Cit9CisKKy8qIENvbXB1dGUgdGhlIHNlcnZpY2Vfc2V0IGZyb20gdGhlIGFzc3VtZWQgdmFsaWQgc2VydmljZV9saW5lcyBvZiAqZm10ICovCiB1MTYgY3gxOF9nZXRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCkKIHsKIAlpbnQgZiwgbDsKQEAgLTEyOSwxMCArMTYwLDggQEAKIAlwaXhmbXQtPnByaXYgPSAwOwogCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ITTEyOwotCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KLQkJcGl4Zm10LT5zaXplaW1hZ2UgPQotCQkJcGl4Zm10LT5oZWlnaHQgKiBwaXhmbXQtPndpZHRoICsKLQkJCXBpeGZtdC0+aGVpZ2h0ICogKHBpeGZtdC0+d2lkdGggLyAyKTsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqNzIwKSArIFVWPShoKig3MjAvMikpKSAqLworCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+aGVpZ2h0ICogNzIwICogMyAvIDI7CiAJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOwogCX0gZWxzZSB7CiAJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKQEAgLTE0OSw4ICsxNzgsOCBAQAogCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC52Ymk7CiAKIAl2YmlmbXQtPnNhbXBsaW5nX3JhdGUgPSAyNzAwMDAwMDsKLQl2YmlmbXQtPm9mZnNldCA9IDI0ODsKLQl2YmlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSAtIDQ7CisJdmJpZm10LT5vZmZzZXQgPSAyNDg7IC8qIEZJWE1FIC0gc2xpZ2h0bHkgd3JvbmcgZm9yIGJvdGggNTAgJiA2MCBIeiAqLworCXZiaWZtdC0+c2FtcGxlc19wZXJfbGluZSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAtIDQ7CiAJdmJpZm10LT5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CiAJdmJpZm10LT5zdGFydFswXSA9IGN4LT52Ymkuc3RhcnRbMF07CiAJdmJpZm10LT5zdGFydFsxXSA9IGN4LT52Ymkuc3RhcnRbMV07CkBAIC0xNjQsNyArMTkzLDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJLyogc2FuZSwgVjRMMiBzcGVjIGNvbXBsaWFudCwgZGVmYXVsdHMgKi8KKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCW1lbXNldCh2YmlmbXQtPnNlcnZpY2VfbGluZXMsIDAsIHNpemVvZih2YmlmbXQtPnNlcnZpY2VfbGluZXMpKTsKKwl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gMDsKKworCS8qCisJICogRmV0Y2ggdGhlIGNvbmZpZ3VyZWQgc2VydmljZV9saW5lcyBhbmQgdG90YWwgc2VydmljZV9zZXQgZnJvbSB0aGUKKwkgKiBkaWdpdGl6ZXIvc2xpY2VyLiAgTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyB0aGUgcGFzc2VkIGluCisJICogZm10LT5mbXQuc2xpY2VkIHVuZGVyIHZhbGlkIGNhbGxpbmcgY29uZGl0aW9ucworCSAqLworCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIGdfZm10LCBmbXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEVuc3VyZSBWNEwyIHNwZWMgY29tcGxpYW50IG91dHB1dCAqLworCXZiaWZtdC0+cmVzZXJ2ZWRbMF0gPSAwOworCXZiaWZtdC0+cmVzZXJ2ZWRbMV0gPSAwOworCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7CisJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGN4MThfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMTc0LDExICsyMjYsMTggQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCBtaW5faCA9IDI7CiAKIAl3ID0gbWluKHcsIDcyMCk7Ci0JdyA9IG1heCh3LCAxKTsKKwl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBjeC0+aXNfNTBoeiA/IDU3NiA6IDQ4MCk7Ci0JaCA9IG1heChoLCAyKTsKKwloID0gbWF4KGgsIG1pbl9oKTsKKwogCWN4MThfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKIAlmbXQtPmZtdC5waXgud2lkdGggPSB3OwogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwpAQCAtMTk0LDcgKzI1MywyMCBAQAogc3RhdGljIGludCBjeDE4X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKworCS8qIElmIGdpdmVuIGEgc2VydmljZSBzZXQsIGV4cGFuZCBpdCB2YWxpZGx5ICYgY2xlYXIgcGFzc2VkIGluIHNldCAqLworCWlmICh2YmlmbXQtPnNlcnZpY2Vfc2V0KQorCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KTsKKwkvKiBTYW5pdGl6ZSB0aGUgc2VydmljZV9saW5lcywgYW5kIGNvbXB1dGUgdGhlIG5ldyBzZXQgaWYgYW55IHZhbGlkICovCisJaWYgKGNoZWNrX3NlcnZpY2Vfc2V0KHZiaWZtdCwgY3gtPmlzXzUwaHopKQorCQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gY3gxOF9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMjIzLDcgKzI5NSw3IEBACiAKIAljeC0+cGFyYW1zLndpZHRoID0gdzsKIAljeC0+cGFyYW1zLmhlaWdodCA9IGg7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOwogCXJldHVybiBjeDE4X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKQEAgLTIzOCw1NCArMzEwLDEzMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIENoYW5naW5nIHRoZSBFbmNvZGVyJ3MgUmF3IFZCSSBwYXJhbWV0ZXJzIHdvbid0IGhhdmUgYW55IGVmZmVjdAorCSAqIGlmIGFueSBhbmFsb2cgY2FwdHVyZSBpcyBvbmdvaW5nCisJICovCiAJaWYgKCFjeDE4X3Jhd192YmkoY3gpICYmIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJLyoKKwkgKiBTZXQgdGhlIGRpZ2l0aXplciByZWdpc3RlcnMgZm9yIHJhdyBhY3RpdmUgVkJJLgorCSAqIE5vdGUgY3gxOF9hdl92Ymlfd2lwZXMgb3V0IGFsb3Qgb2YgdGhlIHBhc3NlZCBpbiBmbXQgdW5kZXIgdmFsaWQKKwkgKiBjYWxsaW5nIGNvbmRpdGlvbnMKKwkgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdG9yZSBvdXIgbmV3IHY0bDIgKG5vbi0pc2xpY2VkIFZCSSBzdGF0ZSAqLwogCWN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IDA7CiAJY3gtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCiAJcmV0dXJuIGN4MThfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY3gtPnByaW8sICZpZC0+cHJpbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWN4MThfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKKworCS8qCisJICogQ2hhbmdpbmcgdGhlIEVuY29kZXIncyBSYXcgVkJJIHBhcmFtZXRlcnMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgYW55IGFuYWxvZyBjYXB0dXJlIGlzIG9uZ29pbmcKKwkgKi8KKwlpZiAoY3gxOF9yYXdfdmJpKGN4KSAmJiBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qCisJICogU2V0IHRoZSBzZXJ2aWNlX2xpbmVzIHJlcXVlc3RlZCBpbiB0aGUgZGlnaXRpemVyL3NsaWNlciByZWdpc3RlcnMuCisJICogTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyBzb21lICJpbXBvc3NpYmxlIiBzZXJ2aWNlIGxpbmVzIGluIHRoZQorCSAqIHBhc3NlZCBpbiBmbXQtPmZtdC5zbGljZWQgdW5kZXIgdmFsaWQgY2FsbGluZyBjb25kaXRpb25zCisJICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIFN0b3JlIG91ciBjdXJyZW50IHY0bDIgc2xpY2VkIFZCSSBzZXR0aW5ncyAqLworCWN4LT52YmkuaW4udHlwZSA9ICBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwltZW1jcHkoY3gtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCpjeC0+dmJpLnNsaWNlZF9pbikpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCWludCBlcnIgPSAwOwogCiAJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CiAJY2hpcC0+cmV2aXNpb24gPSAwOwotCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7Ci0JCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DWDIzNDE4OwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGNoaXAtPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9IT1NUOgorCQlzd2l0Y2ggKGNoaXAtPm1hdGNoLmFkZHIpIHsKKwkJY2FzZSAwOgorCQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NYMjM0MTg7CisJCQljaGlwLT5yZXZpc2lvbiA9IGN4MThfcmVhZF9yZWcoY3gsIDB4QzcyMDI4KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKgorCQkJICogVGhlIEEvViBkZWNvZGVyIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgaW4gdGhlIHJhcmUKKwkJCSAqIGNhc2UgdGhhdCB0aGUgY2FyZCBkb2Vzbid0IGhhdmUgYW5hbG9nLCB3ZSBkb24ndAorCQkJICogdXNlIGl0LiAgV2UgZmluZCBpdCB3L28gdXNpbmcgdGhlIGN4LT5zZF9hdiBwb2ludGVyCisJCQkgKi8KKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV180MThfQVYsCisJCQkJICAgICBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogQ291bGQgcmV0dXJuIGlkZW50ID0gVjRMMl9JREVOVF9VTktOT1dOIGlmIHdlIGhhZAorCQkJICogb3RoZXIgaG9zdCBjaGlwcyBhdCBoaWdoZXIgYWRkcmVzc2VzLCBidXQgd2UgZG9uJ3QKKwkJCSAqLworCQkJZXJyID0gLUVJTlZBTDsgLyogcGVyIFY0TDIgc3BlYyAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjoKKwkJLyogSWYgbmVlZGVkLCByZXR1cm5zIFY0TDJfSURFTlRfQU1CSUdVT1VTIHdpdGhvdXQgZXh0cmEgd29yayAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjoKKwkJLyoKKwkJICogV2UgY291bGQgcmV0dXJuIFY0TDJfSURFTlRfVU5LTk9XTiwgYnV0IHdlIGRvbid0IGRvIHRoZSB3b3JrCisJCSAqIHRvIGxvb2sgaWYgYSBjaGlwIGlzIGF0IHRoZSBhZGRyZXNzIHdpdGggbm8gZHJpdmVyLiAgVGhhdCdzIGEKKwkJICogZGFuZ2Vyb3VzIHRoaW5nIHRvIGRvIHdpdGggRUVQUk9NcyBhbnl3YXkuCisJCSAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgY3gxOF9jeGMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWdzID0gYXJnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKHJlZ3MtPnJlZyA+PSBDWDE4X01FTV9PRkZTRVQgKyBDWDE4X01FTV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjeDE4X2NhcmRzX2xvY2ssIGZsYWdzKTsKIAlyZWdzLT5zaXplID0gNDsKLQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJcmVncy0+dmFsID0gY3gxOF9yZWFkX2VuYyhjeCwgcmVncy0+cmVnKTsKLQllbHNlCisJaWYgKGNtZCA9PSBWSURJT0NfREJHX1NfUkVHSVNURVIpCiAJCWN4MThfd3JpdGVfZW5jKGN4LCByZWdzLT52YWwsIHJlZ3MtPnJlZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3gxOF9jYXJkc19sb2NrLCBmbGFncyk7CisJZWxzZQorCQlyZWdzLT52YWwgPSBjeDE4X3JlYWRfZW5jKGN4LCByZWdzLT5yZWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTYsNyArNDQ1LDggQEAKIAogCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiBjeDE4X2N4YyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCS8qIEZJWE1FIC0gZXJyb3JzIHNob3VsZG4ndCBiZSBpZ25vcmVkICovCisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA3LDcgKzQ1Nyw4IEBACiAKIAlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQogCQlyZXR1cm4gY3gxOF9jeGMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKKwkvKiBGSVhNRSAtIGVycm9ycyBzaG91bGRuJ3QgYmUgaWdub3JlZCAqLworCWN4MThfY2FsbF9hbGwoY3gsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTMzNSw3ICs0ODYsOCBAQAogCiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIENYMThfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGN4LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShjeC0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksCisJCSAiUENJOiVzIiwgcGNpX25hbWUoY3gtPnBjaV9kZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwpAQCAtNDAzLDcgKzU1NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX1NfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfU19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQpAQCAtNDEyLDcgKzU2NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX0dfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfR19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTQ4Myw3ICs2MzcsNyBAQAogCWlmICh2Zi0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgdmYpOwogCXJldHVybiAwOwogfQogCkBAIC01MDIsNyArNjU2LDcgQEAKIAogCWN4MThfbXV0ZShjeCk7CiAJQ1gxOF9ERUJVR19JTkZPKCJ2NGwyIGlvY3RsOiBzZXQgZnJlcXVlbmN5ICVkXG4iLCB2Zi0+ZnJlcXVlbmN5KTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgdmYpOwogCWN4MThfdW5tdXRlKGN4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0NywxMiArNzAxLDExIEBACiAJY3gtPnZiaS5jb3VudCA9IGN4LT5pc181MGh6ID8gMTggOiAxMjsKIAljeC0+dmJpLnN0YXJ0WzBdID0gY3gtPmlzXzUwaHogPyA2IDogMTA7CiAJY3gtPnZiaS5zdGFydFsxXSA9IGN4LT5pc181MGh6ID8gMzE4IDogMjczOwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyAyNzIgOiAyODQ7CiAJQ1gxOF9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjeC0+c3RkKTsKIAogCS8qIFR1bmVyICovCi0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19TVEQsICZjeC0+c3RkKTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19zdGQsIGN4LT5zdGQpOwogCXJldHVybiAwOwogfQogCkBAIC01NjksOSArNzIyLDcgQEAKIAlpZiAodnQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogU2V0dGluZyB0dW5lciBjYW4gb25seSBzZXQgYXVkaW8gbW9kZSAqLwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfVFVORVIsIHZ0KTsKLQorCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4Miw3ICs3MzMsNyBAQAogCWlmICh2dC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX1RVTkVSLCB2dCk7CisJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIGdfdHVuZXIsIHZ0KTsKIAogCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7CiAJCXN0cmxjcHkodnQtPm5hbWUsICJjeDE4IFJhZGlvIFR1bmVyIiwgc2l6ZW9mKHZ0LT5uYW1lKSk7CkBAIC01OTgsNyArNzQ5LDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlpbnQgc2V0ID0gY3gtPmlzXzUwaHogPyBWNEwyX1NMSUNFRF9WQklfNjI1IDogVjRMMl9TTElDRURfVkJJXzUyNTsKKwlpbnQgZiwgbDsKKworCWlmIChjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FwLT5zZXJ2aWNlX3NldCA9IDA7CisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJaWYgKHZhbGlkX3NlcnZpY2VfbGluZShmLCBsLCBjeC0+aXNfNTBoeikpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGNhbiBmaW5kIGFsbCB2NGwyIHN1cHBvcnRlZCB2Ymkgc2VydmljZXMKKwkJCQkgKiBmb3IgdGhlIHN0YW5kYXJkLCBvbiBhIHZhbGlkIGxpbmUgZm9yIHRoZSBzdGQKKwkJCQkgKi8KKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSBzZXQ7CisJCQkJY2FwLT5zZXJ2aWNlX3NldCB8PSBzZXQ7CisJCQl9IGVsc2UKKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSAwOworCQl9CisJfQorCWZvciAoZiA9IDA7IGYgPCAzOyBmKyspCisJCWNhcC0+cmVzZXJ2ZWRbZl0gPSAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNzA4LDEzICs4ODIsMTUgQEAKIAlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbjsKIAlpbnQgaTsKIAotCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGN4LT5udW0pOworCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PVxuIiwgY3gtPmluc3RhbmNlKTsKKwlDWDE4X0lORk8oIlZlcnNpb246ICVzICBDYXJkOiAlc1xuIiwgQ1gxOF9WRVJTSU9OLCBjeC0+Y2FyZF9uYW1lKTsKIAlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19UVkVFUFJPTSkgewogCQlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAkJY3gxOF9yZWFkX2VlcHJvbShjeCwgJnR2KTsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gxOF9nZXRfaW5wdXQoY3gsIGN4LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7CiAJY3gxOF9nZXRfYXVkaW9faW5wdXQoY3gsIGN4LT5hdWRpb19pbnB1dCwgJmF1ZGluKTsKIAlDWDE4X0lORk8oIlZpZGVvIElucHV0OiAlc1xuIiwgdmlkaW4ubmFtZSk7CkBAIC03MjUsMTIgKzkwMSwxMiBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiAJQ1gxOF9JTkZPKCJUdW5lcjogJXNcbiIsCiAJCXRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgPyAgIlJhZGlvIiA6ICJUViIpOwotCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPm5hbWUpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPnY0bDJfZGV2Lm5hbWUpOwogCUNYMThfSU5GTygiU3RhdHVzIGZsYWdzOiAweCUwOGx4XG4iLCBjeC0+aV9mbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJQ1gxOF9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLAogCQkJICBzLT5uYW1lLCBzLT5zX2ZsYWdzLApAQCAtNzQwLDcgKzkxNiw4IEBACiAJQ1gxOF9JTkZPKCJSZWFkIE1QRUcvVkJJOiAlbGxkLyVsbGQgYnl0ZXNcbiIsCiAJCQkobG9uZyBsb25nKWN4LT5tcGdfZGF0YV9yZWNlaXZlZCwKIAkJCShsb25nIGxvbmcpY3gtPnZiaV9kYXRhX2luc2VydGVkKTsKLQlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKKwlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PT1cbiIsIGN4LT5pbnN0YW5jZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw3ICs5MzEsOCBAQAogCiAJCUNYMThfREVCVUdfSU9DVEwoIlZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HKCVkLCAlZClcbiIsCiAJCQlyb3V0ZS0+aW5wdXQsIHJvdXRlLT5vdXRwdXQpOwotCQljeDE4X2F1ZGlvX3NldF9yb3V0ZShjeCwgcm91dGUpOworCQljeDE4X2NhbGxfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBhdWRpbywgc19yb3V0aW5nLAorCQkJICAgICByb3V0ZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNzYyLDcgKzk0MCw4IEBACiAJCXUzMiB2YWwgPSAqKHUzMiAqKWFyZzsKIAogCQlpZiAoKHZhbCA9PSAwKSB8fCAodmFsICYgMHgwMSkpCi0JCQljeDE4X3Jlc2V0X2lyX2dwaW8oJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdKTsKKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsIGNvcmUsIHJlc2V0LAorCQkJCSAgICAgKHUzMikgQ1gxOF9HUElPX1JFU0VUX1o4RjA4MTEpOwogCQlicmVhazsKIAl9CiAKQEAgLTc4Miw2ICs5NjEsOCBAQAogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAorCS8qIEZJWE1FIC0gY29uc29saWRhdGUgdjRsMl9wcmlvX2NoZWNrKCkncyBoZXJlICovCisKIAlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lPQ1RMKQogCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTCB8IFY0TDJfREVCVUdfSU9DVExfQVJHOwogCXJlcyA9IHZpZGVvX2lvY3RsMihmaWxwLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggZGU1ZTcyMy4uMjIyNmU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtODMsNiArODMsOCBAQAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NRExfQUNLLAkJCTApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NREwsCQkJQVBJX0ZBU1QpLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLAkJCUFQSV9TTE9XKSwKKwlBUElfRU5UUlkoQVBVLCBDWDE4X0FQVV9TVEFSVCwJCQkJMCksCisJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfU1RPUCwJCQkJMCksCiAJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfUkVTRVRBSSwJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERUJVR19QRUVLMzIsCQkJMCksCiAJQVBJX0VOVFJZKDAsIDAsCQkJCQkJMCksCkBAIC05OCwyMSArMTAwLDMwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIENhbGwgd2l0aCBidWYgb2YgbioxMSsxIGJ5dGVzICovCitzdGF0aWMgY2hhciAqdTMyYXJyMmhleCh1MzIgZGF0YVtdLCBpbnQgbiwgY2hhciAqYnVmKQoreworCWNoYXIgKnA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBwID0gYnVmOyBpIDwgbjsgaSsrLCBwICs9IDExKSB7CisJCS8qIGtlcm5lbCBzbnByaW50ZigpIGFwcGVuZHMgJ1wwJyBhbHdheXMgKi8KKwkJc25wcmludGYocCwgMTIsICIgJSMwMTB4IiwgZGF0YVtpXSk7CisJfQorCSpwID0gJ1wwJzsKKwlyZXR1cm4gYnVmOworfQorCiBzdGF0aWMgdm9pZCBkdW1wX21iKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfbWFpbGJveCAqbWIsIGNoYXIgKm5hbWUpCiB7CiAJY2hhciBhcmdzdHJbTUFYX01CX0FSR1VNRU5UUyoxMSsxXTsKLQljaGFyICpwOwotCWludCBpOwogCiAJaWYgKCEoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0FQSSkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDAsIHAgPSBhcmdzdHI7IGkgPCBNQVhfTUJfQVJHVU1FTlRTOyBpKyssIHAgKz0gMTEpIHsKLQkJLyoga2VybmVsIHNucHJpbnRmKCkgYXBwZW5kcyAnXDAnIGFsd2F5cyAqLwotCQlzbnByaW50ZihwLCAxMiwgIiAlIzAxMHgiLCBtYi0+YXJnc1tpXSk7Ci0JfQogCUNYMThfREVCVUdfQVBJKCIlczogcmVxICUjMDEweCBhY2sgJSMwMTB4IGNtZCAlIzAxMHggZXJyICUjMDEweCBhcmdzJXMiCi0JCSJcbiIsIG5hbWUsIG1iLT5yZXF1ZXN0LCBtYi0+YWNrLCBtYi0+Y21kLCBtYi0+ZXJyb3IsIGFyZ3N0cik7CisJCSAgICAgICAiXG4iLCBuYW1lLCBtYi0+cmVxdWVzdCwgbWItPmFjaywgbWItPmNtZCwgbWItPmVycm9yLAorCQkgICAgICAgdTMyYXJyMmhleChtYi0+YXJncywgTUFYX01CX0FSR1VNRU5UUywgYXJnc3RyKSk7CiB9CiAKIApAQCAtNDM5LDcgKzQ1MCw4IEBACiAJCQkJImluY29taW5nICVzIHRvIEVQVSBtYWlsYm94IChzZXF1ZW5jZSBuby4gJXUpIgogCQkJCSJcbiIsCiAJCQkJcnB1X3N0cltycHVdLCBycHVfc3RyW3JwdV0sIG9yZGVyX21iLT5yZXF1ZXN0KTsKLQkJZHVtcF9tYihjeCwgb3JkZXJfbWIsICJpbmNvbWluZyIpOworCQlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX1dBUk4pCisJCQlkdW1wX21iKGN4LCBvcmRlcl9tYiwgImluY29taW5nIik7CiAJCW9yZGVyLT5mbGFncyA9IENYMThfRl9FV09fTUJfU1RBTEVfVVBPTl9SRUNFSVBUOwogCX0KIApAQCAtNDY4LDE2ICs0ODAsMjQgQEAKIAlzdHJ1Y3QgbXV0ZXggKm1iX2xvY2s7CiAJbG9uZyBpbnQgdGltZW91dCwgcmV0OwogCWludCBpOworCWNoYXIgYXJnc3RyW01BWF9NQl9BUkdVTUVOVFMqMTErMV07CiAKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CiAJCUNYMThfV0FSTigidW5rbm93biBjbWQgJXhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkKLQkJQ1gxOF9ERUJVR19ISV9BUEkoIiVzXG4iLCBpbmZvLT5uYW1lKTsKLQllbHNlCi0JCUNYMThfREVCVUdfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7CisJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19BUEkpIHsgLyogb25seSBjYWxsIHUzMmFycjJoZXggaWYgbmVlZGVkICovCisJCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkgeworCQkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19ISUdIVk9MKQorCQkJCUNYMThfREVCVUdfSElfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJCQlpbmZvLT5uYW1lLCBjbWQsCisJCQkJCQl1MzJhcnIyaGV4KGRhdGEsIGFyZ3MsIGFyZ3N0cikpOworCQl9IGVsc2UKKwkJCUNYMThfREVCVUdfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJICAgICAgIGluZm8tPm5hbWUsIGNtZCwKKwkJCQkgICAgICAgdTMyYXJyMmhleChkYXRhLCBhcmdzLCBhcmdzdHIpKTsKKwl9CiAKIAlzd2l0Y2ggKGluZm8tPnJwdSkgewogCWNhc2UgQVBVOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggOGQ5NDQxZS4uMzA0NmI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAkJfQogCQlidWYtPmlkID0gY3gtPmJ1ZmZlcl9pZCsrOwogCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKLQkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPmRldiwKKwkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPnBjaV9kZXYsCiAJCQkJYnVmLT5idWYsIHMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQljeDE4X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJY3gxOF9lbnF1ZXVlKHMsIGJ1ZiwgJnMtPnFfZnJlZSk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCS8qIGVtcHR5IHFfZnJlZSAqLwogCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2ZyZWUpKSkgewotCQlwY2lfdW5tYXBfc2luZ2xlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShzLT5jeC0+cGNpX2RldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaAppbmRleCA0NTZjZWMzLi40ZGUwNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2NwdShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IDg5YzFlYzkuLjA5MzJiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKLSNpbmNsdWRlICJjeDE4LWF2LWNvcmUuaCIKICNpbmNsdWRlICJjeDE4LWR2Yi5oIgogCiAjZGVmaW5lIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyAgICAgCTB4ZDAwMDRDCkBAIC0xMDEsMTEgKzEwMCwxMSBAQAogc3RhdGljIHZvaWQgY3gxOF9zdHJlYW1faW5pdChzdHJ1Y3QgY3gxOCAqY3gsIGludCB0eXBlKQogewogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBzLT52NGwyZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldiA9IHMtPnZpZGVvX2RldjsKIAotCS8qIHdlIG5lZWQgdG8ga2VlcCB2NGwyZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KKwkvKiB3ZSBuZWVkIHRvIGtlZXAgdmlkZW9fZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7Ci0Jcy0+djRsMmRldiA9IGRldjsKKwlzLT52aWRlb19kZXYgPSB2aWRlb19kZXY7CiAKIAkvKiBpbml0aWFsaXplIGN4MThfc3RyZWFtIGZpZWxkcyAqLwogCXMtPmN4ID0gY3g7CkBAIC0xMzAsMTIgKzEyOSwxMiBAQAogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKIAl1MzIgY2FwID0gY3gtPnY0bDJfY2FwOwogCWludCBudW1fb2Zmc2V0ID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwotCWludCBudW0gPSBjeC0+bnVtICsgY3gxOF9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CisJaW50IG51bSA9IGN4LT5pbnN0YW5jZSArIGN4MThfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OwogCi0JLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdjRsMmRldiA9PSBOVUxMLCB0aGVuCisJLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdmlkZW9fZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAlzLT5jeCA9IGN4OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xNjMsMjIgKzE2MiwyMiBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiQ291bGRuJ3QgYWxsb2NhdGUgdjRsMiB2aWRlb19kZXZpY2UgZm9yICVzXG4iLAogCQkJCXMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJjeDE4LSVkIiwKLQkJCWN4LT5udW0pOworCXNucHJpbnRmKHMtPnZpZGVvX2Rldi0+bmFtZSwgc2l6ZW9mKHMtPnZpZGVvX2Rldi0+bmFtZSksICIlcyAlcyIsCisJCSBjeC0+djRsMl9kZXYubmFtZSwgcy0+bmFtZSk7CiAKLQlzLT52NGwyZGV2LT5udW0gPSBudW07Ci0Jcy0+djRsMmRldi0+cGFyZW50ID0gJmN4LT5kZXYtPmRldjsKLQlzLT52NGwyZGV2LT5mb3BzID0gJmN4MThfdjRsMl9lbmNfZm9wczsKLQlzLT52NGwyZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0Jcy0+djRsMmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKLQljeDE4X3NldF9mdW5jcyhzLT52NGwyZGV2KTsKKwlzLT52aWRlb19kZXYtPm51bSA9IG51bTsKKwlzLT52aWRlb19kZXYtPnY0bDJfZGV2ID0gJmN4LT52NGwyX2RldjsKKwlzLT52aWRlb19kZXYtPmZvcHMgPSAmY3gxOF92NGwyX2VuY19mb3BzOworCXMtPnZpZGVvX2Rldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXMtPnZpZGVvX2Rldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwljeDE4X3NldF9mdW5jcyhzLT52aWRlb19kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcsMjggKzIyNiwzMCBAQAogCQl9CiAJfQogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KIAlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzX21wZyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmlkZW9fZGV2KQorCQkJbnVtID0gc19tcGctPnZpZGVvX2Rldi0+bnVtCisJCQkgICAgKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQorCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZpZGVvX2Rldiwgcyk7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52aWRlb19kZXYsIHZmbF90eXBlLCBudW0pOwogCWlmIChyZXQgPCAwKSB7CiAJCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCXMtPm5hbWUsIG51bSk7Ci0JCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnY0bDJkZXYpOwotCQlzLT52NGwyZGV2ID0gTlVMTDsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+dmlkZW9fZGV2KTsKKwkJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKQEAgLTMxMiw5ICszMTMsOSBAQAogCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKIAkJfQogCi0JCXZkZXYgPSBjeC0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQl2ZGV2ID0gY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2OwogCi0JCWN4LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQljeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXYgPSBOVUxMOwogCQlpZiAodmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM0Niw0NiArMzQ3LDg4IEBACiAJfQogCiAJLyogc2V0dXAgVkJJIHJlZ2lzdGVycyAqLwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZjeC0+dmJpLmluKTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCAmY3gtPnZiaS5pbik7CiAKLQkvKiBkZXRlcm1pbmUgbnVtYmVyIG9mIGxpbmVzIGFuZCB0b3RhbCBudW1iZXIgb2YgVkJJIGJ5dGVzLgotCSAgIEEgcmF3IGxpbmUgdGFrZXMgMTQ0NCBieXRlczogNCBieXRlIFNBViBjb2RlICsgMiAqIDcyMAotCSAgIEEgc2xpY2VkIGxpbmUgdGFrZXMgNTEgYnl0ZXM6IDQgYnl0ZSBmcmFtZSBoZWFkZXIsIDQgYnl0ZSBpbnRlcm5hbAotCSAgIGhlYWRlciwgNDIgZGF0YSBieXRlcyArIGNoZWNrc3VtICh0byBiZSBjb25maXJtZWQpICovCisJLyoKKwkgKiBTZW5kIHRoZSBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSBBUEkgY29tbWFuZCB0byBzZXR1cCBFbmNvZGVyIFJhdworCSAqIFZCSSB3aGVuIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSBjaGFubmVsIHN0YXJ0cywgYXMgb25jZSBpdCBzdGFydHMKKwkgKiAoZS5nLiBNUEVHKSwgd2UgY2FuJ3QgZWZmZWN0IGFueSBjaGFuZ2UgaW4gdGhlIEVuY29kZXIgUmF3IFZCSSBzZXR1cAorCSAqIChpLmUuIGZvciB0aGUgVkJJIGNhcHR1cmUgY2hhbm5lbHMpLiAgV2UgYWxzbyBzZW5kIGl0IGZvciBlYWNoCisJICogYW5hbG9nIGNhcHR1cmUgY2hhbm5lbCBhbnl3YXkganVzdCB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBwcm9wZXIKKwkgKiBiZWhhdmlvcgorCSAqLwogCWlmIChyYXcpIHsKIAkJbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl9IGVsc2UgewotCQlsaW5lcyA9IGN4LT5pc182MGh6ID8gMjQgOiAzODsKLQkJaWYgKGN4LT5pc182MGh6KQotCQkJbGluZXMgKz0gMjsKKwkJLyoKKwkJICogRm9yIDUyNS82MCBzeXN0ZW1zLCBhY2NvcmRpbmcgdG8gdGhlIFZJUCAyICYgQlQuNjU2IHN0ZDoKKwkJICogVGhlIEVBViBSUCBjb2RlJ3MgRmllbGQgYml0IHRvZ2dsZXMgb24gbGluZSA0LCBhIGZldyBsaW5lcworCQkgKiBhZnRlciB0aGUgVmVydGNhbCBCbGFuayBiaXQgaGFzIGFscmVhZHkgdG9nZ2xlZC4KKwkJICogVGVsbCB0aGUgZW5jb2RlciB0byBjYXB0dXJlIDIxLTQrMT0xOCBsaW5lcyBwZXIgZmllbGQsCisJCSAqIHNpbmNlIHdlIHdhbnQgbGluZXMgMTAgdGhyb3VnaCAyMS4KKwkJICoKKwkJICogRklYTUUgLSByZXZpc2l0IGZvciA2MjUvNTAgc3lzdGVtcworCQkgKi8KKwkJbGluZXMgPSBjeC0+aXNfNjBoeiA/ICgyMSAtIDQgKyAxKSAqIDIgOiAzODsKIAl9CiAKLQljeC0+dmJpLmVuY19zaXplID0gbGluZXMgKgotCQkocmF3ID8gY3gtPnZiaS5yYXdfc2l6ZSA6IGN4LT52Ymkuc2xpY2VkX3NpemUpOwotCiAJZGF0YVswXSA9IHMtPmhhbmRsZTsKIAkvKiBMaW5lcyBwZXIgZmllbGQgKi8KIAlkYXRhWzFdID0gKGxpbmVzIC8gMikgfCAoKGxpbmVzIC8gMikgPDwgMTYpOwogCS8qIGJ5dGVzIHBlciBsaW5lICovCi0JZGF0YVsyXSA9IChyYXcgPyBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZQotCQkgICAgICAgOiBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSk7CisJZGF0YVsyXSA9IChyYXcgPyB2YmlfYWN0aXZlX3NhbXBsZXMKKwkJICAgICAgIDogKGN4LT5pc182MGh6ID8gdmJpX2hibGFua19zYW1wbGVzXzYwSHoKKwkJCQkgICAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6KSk7CiAJLyogRXZlcnkgWCBudW1iZXIgb2YgZnJhbWVzIGEgVkJJIGludGVycnVwdCBhcnJpdmVzCiAJICAgKGZyYW1lcyBhcyBpbiAyNSBvciAzMCBmcHMpICovCiAJZGF0YVszXSA9IDE7Ci0JLyogU2V0dXAgVkJJIGZvciB0aGUgY3gyNTg0MCBkaWdpdGl6ZXIgKi8KKwkvKgorCSAqIFNldCB0aGUgU0FWL0VBViBSUCBjb2RlcyB0byBsb29rIGZvciBhcyBzdGFydC9zdG9wIHBvaW50cworCSAqIHdoZW4gaW4gVklQLTEuMSBtb2RlCisJICovCiAJaWYgKHJhdykgeworCQkvKgorCQkgKiBTdGFydCBjb2RlcyBmb3IgYmVnaW5uaW5nIG9mICJhY3RpdmUiIGxpbmUgaW4gdmVydGljYWwgYmxhbmsKKwkJICogMHgyMCAoICAgICAgICAgICAgICAgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqIDB4NjAgKCAgICAgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgICAgICAgICAgICAgICAgKQorCQkgKi8KIAkJZGF0YVs0XSA9IDB4MjA2MDIwNjA7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgZW5kIG9mICJhY3RpdmUiIHJhdyBsaW5lcyBhbmQgcmVndWxhciBsaW5lcworCQkgKiAweDMwICggICAgICAgICAgICAgICBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuaykKKwkJICogMHg3MCAoICAgICBFdmVuRmllbGQgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICovCiAJCWRhdGFbNV0gPSAweDMwNzA5MGQwOwogCX0gZWxzZSB7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgYWN0aXZlIHZpZGVvLCB3ZSB3YW50IGRhdGEgaW4gdGhlIGhibGFuayByZWdpb24KKwkJICogMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rKQorCQkgKgorCQkgKiBTaW5jZSB0aGUgViBiaXQgaXMgb25seSBhbGxvd2VkIHRvIHRvZ2dsZSBpbiB0aGUgRUFWIFJQIGNvZGUsCisJCSAqIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBhY3RpdmUgcmVnaW9uIGxpbmUsIHRoZXNlIHR3bworCQkgKiBhcmUgcHJvYmxlbWF0aWM6CisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICoKKwkJICogV2UgaGF2ZSBzZXQgdGhlIGRpZ2l0emVyIHN1Y2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CisJCSAqIGFib3V0IHRoZXNlIHByb2JsZW0gY29kZXMuCisJCSAqLwogCQlkYXRhWzRdID0gMHhCMEYwQjBGMDsKKwkJLyoKKwkJICogU3RhcnQgY29kZXMgZm9yIGJlZ2lubmluZyBvZiBhY3RpdmUgbGluZSBpbiB2ZXJ0aWNhbCBibGFuaworCQkgKiAweGEwIChUYXNrICAgICAgICAgICBWZXJ0aWNhbEJsYW5rICAgICAgICAgICAgICAgICkKKwkJICogMHhlMCAoVGFzayBFdmVuRmllbGQgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqLwogCQlkYXRhWzVdID0gMHhBMEUwQTBFMDsKIAl9CiAKIAlDWDE4X0RFQlVHX0lORk8oIlNldHVwIFZCSSBoOiAlZCBsaW5lcyAleCBicGwgJWQgZnIgJWQgJXggJXhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIAotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkKLQkJY3gxOF9hcGkoY3gsIENYMThfQ1BVX1NFVF9SQVdfVkJJX1BBUkFNLCA2LCBkYXRhKTsKKwljeDE4X2FwaShjeCwgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0sIDYsIGRhdGEpOwogfQogCiBzdHJ1Y3QgY3gxOF9xdWV1ZSAqY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCkBAIC00MzQsMTAgKzQ3NywxMCBAQAogCXUzMiBkYXRhW01BWF9NQl9BUkdVTUVOVFNdOwogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOwotCWludCB0cyA9IDA7CiAJaW50IGNhcHR5cGUgPSAwOworCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTQ1Myw3ICs0OTYsNiBAQAogCiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUzoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTOwotCQl0cyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWOgogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfWVVWOwpAQCAtNDYyLDggKzUwNCwxNiBAQAogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfUENNOwogCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSToKKyNpZmRlZiBDWDE4X0VOQ09ERVJfUEFSU0VTX1NMSUNFRAogCQljYXB0eXBlID0gY3gxOF9yYXdfdmJpKGN4KSA/CiAJCSAgICAgQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJIDogQ0FQVFVSRV9DSEFOTkVMX1RZUEVfU0xJQ0VEX1ZCSTsKKyNlbHNlCisJCS8qCisJCSAqIEN1cnJlbnRseSB3ZSBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgU2xpY2VkIFZCSSBmcm9tIHRoZQorCQkgKiBkaWdpdGl6ZXIgaXMgaGFuZGxlZCBhcyBSYXcgVkJJIGJ5IHRoZSBlbmNvZGVyCisJCSAqLworCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJOworI2VuZGlmCiAJCWN4LT52YmkuZnJhbWUgPSAwOwogCQljeC0+dmJpLmluc2VydGVkX2ZyYW1lID0gMDsKIAkJbWVtc2V0KGN4LT52Ymkuc2xpY2VkX21wZWdfc2l6ZSwKQEAgLTQ3MywxMCArNTIzLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogbXV0ZS91bm11dGUgdmlkZW8gKi8KLQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9WSURFT19NVVRFLCAyLAotCQkgIHMtPmhhbmRsZSwgISF0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKTsKLQogCS8qIENsZWFyIFN0cmVhbW9mZiBmbGFncyBpbiBjYXNlIGxlZnQgZnJvbSBsYXN0IGNhcHR1cmUgKi8KIAljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNT0ZGLCAmcy0+c19mbGFncyk7CiAKQEAgLTQ4NCwzMSArNTMwLDYzIEBACiAJcy0+aGFuZGxlID0gZGF0YVswXTsKIAljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9DSEFOTkVMX1RZUEUsIDIsIHMtPmhhbmRsZSwgY2FwdHlwZSk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA9PSAwICYmICF0cykgewotCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7Ci0KLQkJLyogU3R1ZmYgZnJvbSBXaW5kb3dzLCB3ZSBkb24ndCBrbm93IHdoYXQgaXQgaXMgKi8KKwkvKgorCSAqIEZvciBldmVyeXRoaW5nIGJ1dCBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUywgcGxheSBpdCBzYWZlIGFuZAorCSAqIHNldCB1cCBhbGwgdGhlIHBhcmFtZXRlcnMsIGFzIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIHBhcmFtZXRlcnMgdGhlCisJICogZmlybXdhcmUgc2hhcmVzIGFjcm9zcyBjYXB0dXJlIGNoYW5uZWwgdHlwZXMgYW5kIHdoaWNoIGl0IGRvZXMgbm90LgorCSAqCisJICogU29tZSBvZiB0aGUgY3gxOF92YXBpKCkgY2FsbHMgYmVsb3cgYXBwbHkgdG8gb25seSBjZXJ0YWluIGNhcHR1cmUKKwkgKiBjaGFubmVsIHR5cGVzLiAgV2UncmUgaG9waW5nIHRoZXJlJ3Mgbm8gaGFybSBpbiBjYWxsaW5nIG1vc3Qgb2YgdGhlbQorCSAqIGFueXdheSwgYXMgbG9uZyBhcyB0aGUgdmFsdWVzIGFyZSBhbGwgY29uc2lzdGVudC4gIFNldHRpbmcgc29tZQorCSAqIHNoYXJlZCBwYXJhbWV0ZXJzIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb25jZSBhbiBhbmFsb2cgY2FwdHVyZSBjaGFubmVsCisJICogaGFzIHN0YXJ0ZWQgc3RyZWFtaW5nLgorCSAqLworCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKSB7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZFUl9DUk9QX0xJTkUsIDIsIHMtPmhhbmRsZSwgMCk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMywgcy0+aGFuZGxlLCAzLCAxKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAzLCBzLT5oYW5kbGUsIDgsIDApOwogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDMsIHMtPmhhbmRsZSwgNCwgMSk7Ci0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwgcy0+aGFuZGxlLCAxMik7CiAKKwkJLyoKKwkJICogQXVkaW8gcmVsYXRlZCByZXNldCBhY2NvcmRpbmcgdG8KKwkJICogRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWVuY29kZXItYXBpLnR4dAorCQkgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPT0gMCkKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwKKwkJCQkgIHMtPmhhbmRsZSwgMTIpOworCisJCS8qCisJCSAqIE51bWJlciBvZiBsaW5lcyBmb3IgRmllbGQgMSAmIEZpZWxkIDIgYWNjb3JkaW5nIHRvCisJCSAqIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1lbmNvZGVyLWFwaS50eHQKKwkJICogRmllbGQgMSBpcyAzMTIgZm9yIDYyNSBsaW5lIHN5c3RlbXMgaW4gQlQuNjU2CisJCSAqIEZpZWxkIDIgaXMgMzEzIGZvciA2MjUgbGluZSBzeXN0ZW1zIGluIEJULjY1NgorCQkgKi8KIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQ0FQVFVSRV9MSU5FX05PLCAzLAotCQkJICAgICAgIHMtPmhhbmRsZSwgY3gtPmRpZ2l0aXplciwgY3gtPmRpZ2l0aXplcik7CisJCQkgIHMtPmhhbmRsZSwgMzEyLCAzMTMpOwogCi0JCS8qIFNldHVwIFZCSSAqLwogCQlpZiAoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCiAJCQljeDE4X3ZiaV9zZXR1cChzKTsKIAotCQkvKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgotCQkgICBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heCAqLworCQkvKgorCQkgKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgorCQkgKiBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heAorCQkgKiBGSVhNRSAtIGN1cnJlbnRseSB3ZSBoYXZlIHRoaXMgaGFyZGNvZGVkIGFzIGRpc2FibGVkCisJCSAqLwogCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CiAKLQkJLyogU2V0dXAgQVBJIGZvciBTdHJlYW0gKi8KKwkJLyogQ2FsbCBvdXQgdG8gdGhlIGNvbW1vbiBDWDIzNDF4IEFQSSBzZXR1cCBmb3IgdXNlciBjb250cm9scyAqLwogCQlwcml2LmN4ID0gY3g7CiAJCXByaXYucyA9IHM7CiAJCWN4MjM0MXhfdXBkYXRlKCZwcml2LCBjeDE4X2FwaV9mdW5jLCBOVUxMLCAmY3gtPnBhcmFtcyk7CisKKwkJLyoKKwkJICogV2hlbiBzdGFydGluZyBhIGNhcHR1cmUgYW5kIHdlJ3JlIHNldCBmb3IgcmFkaW8sCisJCSAqIGVuc3VyZSB0aGUgdmlkZW8gaXMgbXV0ZWQsIGRlc3BpdGUgdGhlIHVzZXIgY29udHJvbC4KKwkJICovCisJCWlmICghY3gtPnBhcmFtcy52aWRlb19tdXRlICYmCisJCSAgICB0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKQorCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfVklERU9fTVVURSwgMiwgcy0+aGFuZGxlLAorCQkJCSAgKGN4LT5wYXJhbXMudmlkZW9fbXV0ZV95dXYgPDwgOCkgfCAxKTsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJmN4LT50b3RfY2FwdHVyaW5nKSA9PSAwKSB7CkBAIC01NTIsNyArNjMwLDcgQEAKIAl9CiAKIAkvKiB5b3UncmUgbGl2ZSEgc2l0IGJhY2sgYW5kIGF3YWl0IGludGVycnVwdHMgOikgKi8KLQlpZiAoIXRzKQorCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKQogCQlhdG9taWNfaW5jKCZjeC0+YW5hX2NhcHR1cmluZyk7CiAJYXRvbWljX2luYygmY3gtPnRvdF9jYXB0dXJpbmcpOwogCXJldHVybiAwOwpAQCAtNTY1LDcgKzY0Myw3IEBACiAJZm9yIChpID0gQ1gxOF9NQVhfU1RSRUFNUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKIAkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CkBAIC01NzcsNyArNjU1LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAl1bnNpZ25lZCBsb25nIHRoZW47CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTYyOSw3ICs3MDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ICYmIChzLT5oYW5kbGUgIT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSkKKwkJaWYgKHMtPnZpZGVvX2RldiAmJiAocy0+aGFuZGxlICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkpCiAJCQlyZXR1cm4gcy0+aGFuZGxlOwogCX0KIAlyZXR1cm4gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwpAQCAtNjQ3LDcgKzcyNSw3IEBACiAJCXMgPSAmY3gtPnN0cmVhbXNbaV07CiAJCWlmIChzLT5oYW5kbGUgIT0gaGFuZGxlKQogCQkJY29udGludWU7Ci0JCWlmIChzLT52NGwyZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQorCQlpZiAocy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQogCQkJcmV0dXJuIHM7CiAJfQogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwppbmRleCBmYjU5NWJkLi5jMmFlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwpAQCAtMjUsNyArMjUsMTYgQEAKICNpbmNsdWRlICJjeDE4LXZiaS5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCisKKy8qCisgKiBSYXN0ZXIgUmVmZXJlbmNlL1Byb3RlY3Rpb24gKFJQKSBieXRlcywgdXNlZCBpbiBTdGFydC9FbmQgQWN0aXZlCisgKiBWaWRlbyBjb2RlcyBlbWl0dGVkIGZyb20gdGhlIGRpZ2l0emVyIGluIFZJUCAxLnggbW9kZSwgdGhhdCBmbGFnIHRoZSBzdGFydAorICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsaWFyeSBkYXRhIHJlZ2lvbnMgaW4gdGhlIGRpZ2l0aWFsIHJhdHNlciBsaW5lLgorICoKKyAqIFRhc2sgRmllbGRFdmVuIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDAKKyAqLworc3RhdGljIGNvbnN0IHU4IHJhd192Ymlfc2F2X3JwWzJdID0geyAweDIwLCAweDYwIH07ICAgIC8qIF9fVl8sIF9GVl8gKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2Vhdl9ycFsyXSA9IHsgMHhiMCwgMHhmMCB9OyAvKiBUX1ZILCBURlZIICovCiAKIHN0YXRpYyB2b2lkIGNvcHlfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBpbnQgbGluZXMsIHUzMiBwdHNfc3RhbXApCiB7CkBAIC0zNCwxMCArNDMsMTcgQEAKIAl1MzIgbGluZW1hc2tbMl0gPSB7IDAsIDAgfTsKIAl1bnNpZ25lZCBzaG9ydCBzaXplOwogCXN0YXRpYyBjb25zdCB1OCBtcGVnX2hkcl9kYXRhW10gPSB7Ci0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsCi0JCTB4MjQsIDB4MDEsIDB4MDEsIDB4ZDEsIDB4ZDMsIDB4ZmEsIDB4ZmYsIDB4ZmYsCi0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmQsIDB4MDAsIDB4MWEsIDB4ODQsIDB4ODAsCi0JCTB4MDcsIDB4MjEsIDB4MDAsIDB4NWQsIDB4NjMsIDB4YTcsIDB4ZmYsIDB4ZmYKKwkJLyogTVBFRy0yIFByb2dyYW0gUGFjayAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJhLAkJICAgIC8qIFByb2cgUGFjayBzdGFydCBjb2RlICovCisJCTB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsIDB4MjQsIDB4MDEsIC8qIFNDUiwgU0NSIEV4dCwgbWFya2VycyAqLworCQkweDAxLCAweGQxLCAweGQzLAkJICAgIC8qIE11eCBSYXRlLCBtYXJrZXJzICovCisJCTB4ZmEsIDB4ZmYsIDB4ZmYsCQkgICAgLyogUmVzLCBTdWZmIGNudCwgU3R1ZmYgKi8KKwkJLyogTVBFRy0yIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJkLAkJICAgIC8qIFByaXYgU3RyZWFtIDEgc3RhcnQgKi8KKwkJMHgwMCwgMHgxYSwJCQkgICAgLyogbGVuZ3RoICovCisJCTB4ODQsIDB4ODAsIDB4MDcsCQkgICAgLyogZmxhZ3MsIGhkciBkYXRhIGxlbiAqLworCQkweDIxLCAweDAwLCAweDVkLCAweDYzLCAweGE3LCAJICAgIC8qIFBUUywgbWFya2VycyAqLworCQkweGZmLCAweGZmCQkJICAgIC8qIHN0dWZmaW5nICovCiAJfTsKIAljb25zdCBpbnQgc2QgPSBzaXplb2YobXBlZ19oZHJfZGF0YSk7CS8qIHN0YXJ0IG9mIHZiaSBkYXRhICovCiAJaW50IGlkeCA9IGN4LT52YmkuZnJhbWUgJSBDWDE4X1ZCSV9GUkFNRVM7CkBAIC03MSw3ICs4Nyw5IEBACiAJCW1lbWNweShkc3QgKyBzZCArIDQsIGRzdCArIHNkICsgMTIsIGxpbmUgKiA0Myk7CiAJCXNpemUgPSA0ICsgKCg0MyAqIGxpbmUgKyAzKSAmIH4zKTsKIAl9IGVsc2UgewotCQltZW1jcHkoZHN0ICsgc2QsICJjeDAiLCA0KTsKKwkJbWVtY3B5KGRzdCArIHNkLCAiaXR2MCIsIDQpOworCQljcHVfdG9fbGUzMnMoJmxpbmVtYXNrWzBdKTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1sxXSk7CiAJCW1lbWNweShkc3QgKyBzZCArIDQsICZsaW5lbWFza1swXSwgOCk7CiAJCXNpemUgPSAxMiArICgoNDMgKiBsaW5lICsgMykgJiB+Myk7CiAJfQpAQCAtODYsNTggKzEwNCw3NiBAQAogfQogCiAvKiBDb21wcmVzcyByYXcgVkJJIGZvcm1hdCwgcmVtb3ZlcyBsZWFkaW5nIFNBViBjb2RlcyBhbmQgc3VycGx1cyBzcGFjZQotICAgYWZ0ZXIgdGhlIGZpZWxkLgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplLiAqLwotc3RhdGljIHUzMiBjb21wcmVzc19yYXdfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUpCisgICBhZnRlciB0aGUgZnJhbWUuICBSZXR1cm5zIG5ldyBjb21wcmVzc2VkIHNpemUuICovCitzdGF0aWMgdTMyIGNvbXByZXNzX3Jhd19idWYoc3RydWN0IGN4MTggKmN4LCB1OCAqYnVmLCB1MzIgc2l6ZSwgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50OwotCXU4IHNhdjEgPSBjeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9vZGRfZmllbGQ7Ci0JdTggc2F2MiA9IGN4LT52YmkucmF3X2RlY29kZXJfc2F2X2V2ZW5fZmllbGQ7CisJdTMyIGxpbmVfc2l6ZSA9IHZiaV9hY3RpdmVfc2FtcGxlczsKKwl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl1OCAqcSA9IGJ1ZjsKIAl1OCAqcDsKIAlpbnQgaTsKIAorCS8qIFNraXAgdGhlIGhlYWRlciAqLworCWJ1ZiArPSBoZHJfc2l6ZTsKKwogCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CiAJCXAgPSBidWYgKyBpICogbGluZV9zaXplOwogCiAJCS8qIExvb2sgZm9yIFNBViBjb2RlICovCiAJCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8Ci0JCSAgICAocFszXSAhPSBzYXYxICYmIHBbM10gIT0gc2F2MikpCisJCSAgICAocFszXSAhPSByYXdfdmJpX3Nhdl9ycFswXSAmJgorCQkgICAgIHBbM10gIT0gcmF3X3ZiaV9zYXZfcnBbMV0pKQogCQkJYnJlYWs7Ci0JCW1lbWNweShxLCBwICsgNCwgbGluZV9zaXplIC0gNCk7Ci0JCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJaWYgKGkgPT0gbGluZXMgLSAxKSB7CisJCQkvKiBsYXN0IGxpbmUgaXMgaGRyX3NpemUgYnl0ZXMgc2hvcnQgLSBleHRyYXBvbGF0ZSBpdCAqLworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemUpOworCQkJcSArPSBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemU7CisJCQlwICs9IGxpbmVfc2l6ZSAtIGhkcl9zaXplIC0gMTsKKwkJCW1lbXNldChxLCAoaW50KSAqcCwgaGRyX3NpemUpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0KTsKKwkJCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJfQogCX0KIAlyZXR1cm4gbGluZXMgKiAobGluZV9zaXplIC0gNCk7CiB9CiAKLQotLyogQ29tcHJlc3NlZCBWQkkgZm9ybWF0LCBhbGwgZm91bmQgc2xpY2VkIGJsb2NrcyBwdXQgbmV4dCB0byBvbmUgYW5vdGhlcgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplICovCi1zdGF0aWMgdTMyIGNvbXByZXNzX3NsaWNlZF9idWYoc3RydWN0IGN4MTggKmN4LCB1MzIgbGluZSwgdTggKmJ1ZiwKLQkJCSAgICAgICB1MzIgc2l6ZSwgdTggc2F2KQorc3RhdGljIHUzMiBjb21wcmVzc19zbGljZWRfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUsCisJCQkgICAgICAgY29uc3QgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZTsKIAlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgdmJpOwogCWludCBpOworCXUzMiBsaW5lID0gMDsKKwl1MzIgbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyB2YmlfaGJsYW5rX3NhbXBsZXNfNjBIegorCQkJCSAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6OwogCiAJLyogZmluZCB0aGUgZmlyc3QgdmFsaWQgbGluZSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIGJ1ZisrKSB7Ci0JCWlmIChidWZbMF0gPT0gMHhmZiAmJiAhYnVmWzFdICYmICFidWZbMl0gJiYgYnVmWzNdID09IHNhdikKKwlmb3IgKGkgPSBoZHJfc2l6ZSwgYnVmICs9IGhkcl9zaXplOyBpIDwgc2l6ZTsgaSsrLCBidWYrKykgeworCQlpZiAoYnVmWzBdID09IDB4ZmYgJiYgIWJ1ZlsxXSAmJiAhYnVmWzJdICYmCisJCSAgICAoYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzBdIHx8CisJCSAgICAgYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzFdKSkKIAkJCWJyZWFrOwogCX0KIAotCXNpemUgLT0gaTsKKwkvKgorCSAqIFRoZSBsYXN0IGxpbmUgaXMgc2hvcnQgYnkgaGRyX3NpemUgYnl0ZXMsIGJ1dCBmb3IgdGhlIHJlbWFpbmluZworCSAqIGNoZWNrcyBhZ2FpbnN0IHNpemUsIHdlIHByZXRlbmQgdGhhdCBpdCBpcyBub3QsIGJ5IGNvdW50aW5nIHRoZQorCSAqIGhlYWRlciBieXRlcyB3ZSBrbm93aW5nbHkgc2tpcHBlZAorCSAqLworCXNpemUgLT0gKGkgLSBoZHJfc2l6ZSk7CiAJaWYgKHNpemUgPCBsaW5lX3NpemUpCiAJCXJldHVybiBsaW5lOworCiAJZm9yIChpID0gMDsgaSA8IHNpemUgLyBsaW5lX3NpemU7IGkrKykgewogCQl1OCAqcCA9IGJ1ZiArIGkgKiBsaW5lX3NpemU7CiAKLQkJLyogTG9vayBmb3IgU0FWIGNvZGUgICovCi0JCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8IHBbM10gIT0gc2F2KQorCQkvKiBMb29rIGZvciBFQVYgY29kZSAgKi8KKwkJaWYgKHBbMF0gIT0gMHhmZiB8fCBwWzFdIHx8IHBbMl0gfHwKKwkJICAgIChwWzNdICE9IHNsaWNlZF92YmlfZWF2X3JwWzBdICYmCisJCSAgICAgcFszXSAhPSBzbGljZWRfdmJpX2Vhdl9ycFsxXSkpCiAJCQljb250aW51ZTsKIAkJdmJpLnAgPSBwICsgNDsKLQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCAmdmJpKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBkZWNvZGVfdmJpX2xpbmUsICZ2YmkpOwogCQlpZiAodmJpLnR5cGUpIHsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uaWQgPSB2YmkudHlwZTsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uZmllbGQgPSB2YmkuaXNfc2Vjb25kX2ZpZWxkOwpAQCAtMTUwLDUxICsxODYsNTYgQEAKIH0KIAogdm9pZCBjeDE4X3Byb2Nlc3NfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKLQkJCSAgIHU2NCBwdHNfc3RhbXAsIGludCBzdHJlYW10eXBlKQorCQkJICAgaW50IHN0cmVhbXR5cGUpCiB7CisJLyoKKwkgKiBUaGUgQ1gyMzQxOCBwcm92aWRlcyBhIDEyIGJ5dGUgaGVhZGVyIGluIGl0cyByYXcgVkJJIGJ1ZmZlcnMgdG8gdXM6CisJICogMHgzZmZmZmZmZiBbNCBieXRlcyBvZiBzb21ldGhpbmddIFs0IGJ5dGUgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXBdCisJICovCisJc3RydWN0IHZiaV9kYXRhX2hkciB7CisJCV9fYmUzMiBtYWdpYzsKKwkJX19iZTMyIHVua25vd247CisJCV9fYmUzMiBwdHM7CisJfSAqaGRyID0gKHN0cnVjdCB2YmlfZGF0YV9oZHIgKikgYnVmLT5idWY7CisKIAl1OCAqcCA9ICh1OCAqKSBidWYtPmJ1ZjsKIAl1MzIgc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkOworCXUzMiBwdHM7CiAJaW50IGxpbmVzOwogCiAJaWYgKHN0cmVhbXR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIFRoZSBDWDIzNDE4IHNlbmRzIHVzIGRhdGEgdGhhdCBpcyAzMiBiaXQgbGl0dGxlLWVuZGlhbiBzd2FwcGVkLAorCSAqIGJ1dCB3ZSB3YW50IHRoZSByYXcgVkJJIGJ5dGVzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW4gdGhlIHJhc3RlcgorCSAqIGxpbmUuICBUaGlzIGhhcyBhIHNpZGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgaGVhZGVyIGJpZyBlbmRpYW4KKwkgKi8KKwljeDE4X2J1Zl9zd2FwKGJ1Zik7CisKIAkvKiBSYXcgVkJJIGRhdGEgKi8KIAlpZiAoY3gxOF9yYXdfdmJpKGN4KSkgewotCQl1OCB0eXBlOwogCi0JCWN4MThfYnVmX3N3YXAoYnVmKTsKKwkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0KKwkJICAgICBjb21wcmVzc19yYXdfYnVmKGN4LCBwLCBzaXplLCBzaXplb2Yoc3RydWN0IHZiaV9kYXRhX2hkcikpOwogCi0JCS8qIFNraXAgMTIgYnl0ZXMgb2YgaGVhZGVyIHRoYXQgZ2V0cyBzdHVmZmVkIGluICovCi0JCXNpemUgLT0gMTI7Ci0JCW1lbWNweShwLCAmYnVmLT5idWZbMTJdLCBzaXplKTsKLQkJdHlwZSA9IHBbM107Ci0KLQkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0gY29tcHJlc3NfcmF3X2J1ZihjeCwgcCwgc2l6ZSk7Ci0KLQkJLyogc2Vjb25kIGZpZWxkIG9mIHRoZSBmcmFtZT8gKi8KLQkJaWYgKHR5cGUgPT0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCkgewotCQkJLyogRGlydHkgaGFjayBuZWVkZWQgZm9yIGJhY2t3YXJkcwotCQkJICAgY29tcGF0aWJpbGl0eSBvZiBvbGQgVkJJIHNvZnR3YXJlLiAqLwotCQkJcCArPSBzaXplIC0gNDsKLQkJCW1lbWNweShwLCAmY3gtPnZiaS5mcmFtZSwgNCk7Ci0JCQljeC0+dmJpLmZyYW1lKys7Ci0JCX0KKwkJLyoKKwkJICogSGFjayBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgVkJJIHNvZnR3YXJlLgorCQkgKiBXcml0ZSB0aGUgZnJhbWUgIyBhdCB0aGUgbGFzdCA0IGJ5dGVzIG9mIHRoZSBmcmFtZQorCQkgKi8KKwkJcCArPSBzaXplIC0gNDsKKwkJbWVtY3B5KHAsICZjeC0+dmJpLmZyYW1lLCA0KTsKKwkJY3gtPnZiaS5mcmFtZSsrOwogCQlyZXR1cm47CiAJfQogCiAJLyogU2xpY2VkIFZCSSBkYXRhIHdpdGggZGF0YSBpbnNlcnRpb24gKi8KLQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAKLQkvKiBmaXJzdCBmaWVsZCAqLwotCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgMCwgcCwgc2l6ZSAvIDIsCi0JCQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQpOwotCS8qIHNlY29uZCBmaWVsZCAqLwotCS8qIGV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IHRoZSBzZWNvbmQgaGFsZiBkb2VzIG5vdCBhbHdheXMKLQkgICBiZWdpbiBhdCB0aGUgZXhhY3QgYWRkcmVzcy4gU28gc3RhcnQgYSBiaXQgZWFybGllcgotCSAgIChoZW5jZSAzMikuICovCi0JbGluZXMgPSBjb21wcmVzc19zbGljZWRfYnVmKGN4LCBsaW5lcywgcCArIHNpemUgLyAyIC0gMzIsCi0JCQlzaXplIC8gMiArIDMyLCBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkKTsKKwlwdHMgPSAoYmUzMl90b19jcHUoaGRyLT5tYWdpYykgPT0gMHgzZmZmZmZmZikgPyBiZTMyX3RvX2NwdShoZHItPnB0cykKKwkJCQkJCSAgICAgIDogMDsKKworCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgcCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCB2YmlfZGF0YV9oZHIpKTsKKwogCS8qIGFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgKi8KIAlpZiAobGluZXMgPT0gMCkgewogCQljeC0+dmJpLnNsaWNlZF9kYXRhWzBdLmlkID0gMDsKQEAgLTIwNiw2ICsyNDcsNiBAQAogCW1lbWNweShwLCAmY3gtPnZiaS5zbGljZWRfZGF0YVswXSwgc2l6ZSk7CiAKIAlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZykKLQkJY29weV92YmlfZGF0YShjeCwgbGluZXMsIHB0c19zdGFtcCk7CisJCWNvcHlfdmJpX2RhdGEoY3gsIGxpbmVzLCBwdHMpOwogCWN4LT52YmkuZnJhbWUrKzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKaW5kZXggYzU2ZmY3ZC4uZTdlMWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKQEAgLTIyLDUgKzIyLDUgQEAKICAqLwogCiB2b2lkIGN4MThfcHJvY2Vzc192YmlfZGF0YShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAotCQkJICAgdTY0IHB0c19zdGFtcCwgaW50IHN0cmVhbXR5cGUpOworCQkJICAgaW50IHN0cmVhbXR5cGUpOwogaW50IGN4MThfdXNlZF9saW5lKHN0cnVjdCBjeDE4ICpjeCwgaW50IGxpbmUsIGludCBmaWVsZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKaW5kZXggODRjMGZmMS4uYmQ5YmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaApAQCAtMjQsOCArMjQsOCBAQAogCiAjZGVmaW5lIENYMThfRFJJVkVSX05BTUUgImN4MTgiCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDAKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDQKKyNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAxCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCiAKICNkZWZpbmUgQ1gxOF9WRVJTSU9OIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IsIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12aWRlby5jCmluZGV4IDJlNWM0MTkuLjZmZGFkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmlkZW8uYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LXZpZGVvLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogCiB2b2lkIGN4MThfdmlkZW9fc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCkKQEAgLTMyLDcgKzMxLDcgQEAKIAogCXJvdXRlLmlucHV0ID0gY3gtPmNhcmQtPnZpZGVvX2lucHV0c1tpbnBdLnZpZGVvX2lucHV0OwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJdHlwZSA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS52aWRlb190eXBlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA2MDFmM2EyLi45OTU2YWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTU2LDYgKzU2LDIyIEBACiAjZGVmaW5lIEFQVV9DTURfTUFTSyAJCQkJMHgxMDAwMDAwMAogI2RlZmluZSBBUFVfQ01EX01BU0tfQUNLIAkJCShBUFVfQ01EX01BU0sgfCAweDgwMDAwMDAwKQogCisjZGVmaW5lIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHCQkoMCA8PCAyOCkKKyNkZWZpbmUgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX0FDMwkJKDEgPDwgMjgpCisKKy8qIERlc2NyaXB0aW9uOiBDb21tYW5kIEFQVSB0byBzdGFydCBhdWRpbworICAgSU5bMF0gLSBhdWRpbyBwYXJhbWV0ZXJzIChzYW1lIGFzIENYMThfQ1BVX1NFVF9BVURJT19QQVJBTUVURVJTPykKKyAgIElOWzFdIC0gY2FsbGVyIGJ1ZmZlciBhZGRyZXNzLCBvciAwCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCisjZGVmaW5lIENYMThfQVBVX1NUQVJUCQkJCShBUFVfQ01EX01BU0sgfCAweDAxKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gc3RvcCBhdWRpbworICAgSU5bMF0gLSBlbmNvZGluZyBtZXRob2QgdG8gc3RvcAorICAgUmV0dXJuQ29kZSAtID8/PyAqLworI2RlZmluZSBDWDE4X0FQVV9TVE9QCQkJCShBUFVfQ01EX01BU0sgfCAweDAyKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gcmVzZXQgdGhlIEFJCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCiAjZGVmaW5lIENYMThfQVBVX1JFU0VUQUkgCQkJKEFQVV9DTURfTUFTSyB8IDB4MDUpCiAKIC8qIERlc2NyaXB0aW9uOiBUaGlzIGNvbW1hbmQgaW5kaWNhdGVzIHRoYXQgYSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IGhhcyBiZWVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCmluZGV4IGNiYmU0N2YuLjhkZWQ1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGN4MjM0MXggLSBnZW5lcmljIGNvZGUgZm9yIGN4MjM0MTUvNiBiYXNlZCBkZXZpY2VzCisgKiBjeDIzNDF4IC0gZ2VuZXJpYyBjb2RlIGZvciBjeDIzNDE1LzYvOCBiYXNlZCBkZXZpY2VzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgogICoKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9jeDIzNDF4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJjeDIzNDE1LzYgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImN4MjM0MTUvNi84IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTM4LDYgKzM4LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3gyMzQxeF9tcGVnX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfTVBFR19DTEFTUywKIAlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtNTAsNiArNTEsNyBAQAogCVY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMsCiAJVjRMMl9DSURfTVBFR19BVURJT19DUkMsCiAJVjRMMl9DSURfTVBFR19BVURJT19NVVRFLAorCVY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUsCiAJVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORywKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCwKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTLApAQCAtOTQsNiArOTYsNyBAQAogCS5hdWRpb19zYW1wbGluZ19mcmVxID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAsCiAJLmF1ZGlvX2VuY29kaW5nID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJLmF1ZGlvX2wyX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLLAorCS5hdWRpb19hYzNfYml0cmF0ZSA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLLAogCS5hdWRpb19tb2RlID0gVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAogCS5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAogCS5hdWRpb19lbXBoYXNpcyA9IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLApAQCAtMTQ4LDYgKzE1MSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19hYzNfYml0cmF0ZTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19tb2RlOwogCQlicmVhazsKQEAgLTI1Niw2ICsyNjIsMTIgQEAKIAkJcGFyYW1zLT5hdWRpb19zYW1wbGluZ19mcmVxID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJaWYgKGJ1c3kpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKQorCQkJaWYgKGN0cmwtPnZhbHVlICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yICYmCisJCQkgICAgY3RybC0+dmFsdWUgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlyZXR1cm4gLUVSQU5HRTsKIAkJcGFyYW1zLT5hdWRpb19lbmNvZGluZyA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKQEAgLTI2Myw2ICsyNzUsMTMgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCXBhcmFtcy0+YXVkaW9fbDJfYml0cmF0ZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmIChidXN5KQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQlwYXJhbXMtPmF1ZGlvX21vZGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CkBAIC00ODEsMjkgKzUwMCwxMDYgQEAKIAlpbnQgZXJyOwogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIDEsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkkpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FLAorCQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViwgMSwKKwkJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOworCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsIDEsCisJCQkJZGVmYXVsdF9wYXJhbXMuc3RyZWFtX3ZiaV9mbXQpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19BQzMpIHsKKwkJCS8qCisJCQkgKiBUaGUgc3RhdGUgb2YgTDIgJiBBQzMgYml0cmF0ZSBjb250cm9scyBjYW4gY2hhbmdlCisJCQkgKiB3aGVuIHRoaXMgY29udHJvbCBjaGFuZ2VzLCBidXQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoKQorCQkJICogYWxyZWFkeSBzZXRzIFY0TDJfQ1RSTF9GTEFHX1VQREFURSBmb3IKKwkJCSAqIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcsIHNvIHdlIGRvbid0IGhlcmUuCisJCQkgKi8KKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCisJCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2VuY29kaW5nKTsKKwkJfQorCiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwgMSwKIAkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19lbmNvZGluZyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLLAogCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEssIDEsCiAJCQkJZGVmYXVsdF9wYXJhbXMuYXVkaW9fbDJfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzICYmCisJCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCk7CiAJCWlmIChlcnIgPT0gMCAmJgogCQkgICAgcGFyYW1zLT5hdWRpb19tb2RlICE9IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcsIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2LCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SywgMSwKKwkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19hYzNfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSB7CisJCQlpZiAocGFyYW1zLT5hdWRpb19lbmNvZGluZyAhPQorCQkJCQkJICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCX0gZWxzZQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCQlyZXR1cm4gMDsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKIAkJLyogdGhpcyBzZXR0aW5nIGlzIHJlYWQtb25seSBmb3IgdGhlIGN4MjM0MXggc2luY2UgdGhlCiAJCSAgIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgcmVhbGx5IGRldGVybWluZXMgdGhlCkBAIC01MTYsMzIgKzYxMiw1MSBAQAogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMzLCAxLCAyKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKKwkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAxKTsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+dmlkZW9fYml0cmF0ZV9tb2RlID09CiAJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6Ci0JCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJKQotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7Ci0JCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwgMSwKLQkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1fdmJpX2ZtdCk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAwKTsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKLQkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjogIC8qIEluaXQgWVVWIChyZWFsbHkgWUNiQ3IpIHRvIGJsYWNrICovCisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKIAogCS8qIENYMjM0MTUvNiBzcGVjaWZpYyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6CkBAIC02NDMsNyArNzU4LDcgQEAKIAkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1faW5zZXJ0X25hdl9wYWNrZXRzKTsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCX0KIH0KQEAgLTY3MSw2ICs3ODYsMTUgQEAKIAkJTlVMTAogCX07CiAKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ19sMl9hYzNbXSA9IHsKKwkJIiIsCisJCSJNUEVHLTEvMiBMYXllciBJSSIsCisJCSIiLAorCQkiIiwKKwkJIkFDLTMiLAorCQlOVUxMCisJfTsKKwogCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGVfbWVudVtdID0gewogCQkiTWFudWFsIiwKIAkJIkF1dG8iLApAQCAtNzExLDYgKzgzNSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCQlyZXR1cm4gKHAtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19UUykgPwogCQkJbXBlZ19zdHJlYW1fdHlwZV93aXRoX3RzIDogbXBlZ19zdHJlYW1fdHlwZV93aXRob3V0X3RzOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIChwLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSA/CisJCQltcGVnX2F1ZGlvX2VuY29kaW5nX2wyX2FjMyA6IHY0bDJfY3RybF9nZXRfbWVudShpZCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CiAJCXJldHVybiBOVUxMOwpAQCAtNzMwLDE2ICs4NTcsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF9jdHJsX2dldF9tZW51KTsKIAorLyogZGVmaW5pdGlvbnMgZm9yIGF1ZGlvIHByb3BlcnRpZXMgYml0cyAyOS0yOCAqLworI2RlZmluZSBDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9NUEVHCTAKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzCTEKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTFBDTQkyCisKIHN0YXRpYyB2b2lkIGN4MjM0MXhfY2FsY19hdWRpb19wcm9wZXJ0aWVzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMpCiB7Ci0JcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0gKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8Ci0JCSgoMyAtIHBhcmFtcy0+YXVkaW9fZW5jb2RpbmcpIDw8IDIpIHwKLQkJKCgxICsgcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlKSA8PCA0KSB8CisJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0KKwkJKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8CiAJCShwYXJhbXMtPmF1ZGlvX21vZGUgPDwgOCkgfAogCQkocGFyYW1zLT5hdWRpb19tb2RlX2V4dGVuc2lvbiA8PCAxMCkgfAogCQkoKChwYXJhbXMtPmF1ZGlvX2VtcGhhc2lzID09IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcpCiAJCSAgPyAzIDogcGFyYW1zLT5hdWRpb19lbXBoYXNpcykgPDwgMTIpIHwKIAkJKHBhcmFtcy0+YXVkaW9fY3JjIDw8IDE0KTsKKworCWlmICgocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSAmJgorCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpIHsKKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkvKiBOb3Qgc3VyZSBpZiB0aGlzIE1QRUcgTGF5ZXIgSUkgc2V0dGluZyBpcyByZXF1aXJlZCAqLworCQkJKCgzIC0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpIDw8IDIpIHwKKwkJCShwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlIDw8IDQpIHwKKwkJCShDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9BQzMgPDwgMjgpOworCX0gZWxzZSB7CisJCS8qIEFzc3VtaW5nIE1QRUcgTGF5ZXIgSUkgKi8KKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkoKDMgLSBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nKSA8PCAyKSB8CisJCQkoKDEgKyBwYXJhbXMtPmF1ZGlvX2wyX2JpdHJhdGUpIDw8IDQpOworCX0KIH0KIAogaW50IGN4MjM0MXhfZXh0X2N0cmxzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsIGludCBidXN5LApAQCAtMTAyMiw3ICsxMTY3LDEwIEBACiAJCXByZWZpeCwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRKSwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyksCi0JCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCisJCWN4MjM0MXhfbWVudV9pdGVtKHAsCisJCQkgICBwLT5hdWRpb19lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQkJCSAgICAgID8gVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQorCQkJCQkgICAgICA6IFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCiAJCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSksCiAJCXAtPmF1ZGlvX211dGUgPyAiIChtdXRlZCkiIDogIiIpOwogCWlmIChwLT5hdWRpb19tb2RlID09IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggMDBmMWUyZS4uZmQzZmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTE1LDEyICsxNSwxNSBAQAogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjEzMSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODg1IGJhc2VkCiAJICBUViBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZQppbmRleCAyOWMyM2I0Li5hYjhlYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L01ha2VmaWxlCkBAIC0xLDQgKzEsNiBAQAotY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubworY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBcCisJCSAgICBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubyBcCisJCSAgICBuZXR1cC1pbml0Lm8gY2ltYXgyLm8gbmV0dXAtZWVwcm9tLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM4ODUpICs9IGN4MjM4ODUubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NTM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwpAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIGNpbWF4Mi5jCisgKgorICogQ0lNYXgyKFIpIFNQMiBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVcCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCisvKioqKiBCaXQgZGVmaW5pdGlvbnMgZm9yIE1DNDE3X1JXRCBhbmQgTUM0MTdfT0VOIHJlZ2lzdGVycyAgKioqCisgIGJpdHMgMzEtMTYKKystLS0tLS0tLS0tLSsKK3wgUmVzZXJ2ZWQgIHwKKystLS0tLS0tLS0tLSsKKyAgYml0IDE1ICBiaXQgMTQgIGJpdCAxMyBiaXQgMTIgIGJpdCAxMSAgYml0IDEwICBiaXQgOSAgIGJpdCA4CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworfCAgV1IjICB8ICBSRCMgIHwgICAgICAgfCAgQUNLIyB8ICBBREhJIHwgIEFETE8gfCAgQ1MxIyB8ICBDUzAjIHwKKystLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgYml0IDcgICBiaXQgNiAgIGJpdCA1ICAgYml0IDQgICBiaXQgMyAgIGJpdCAyICAgYml0IDEgICBiaXQgMAorKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKK3wgIERBVEE3fCAgREFUQTZ8ICBEQVRBNXwgIERBVEE0fCAgREFUQTN8ICBEQVRBMnwgIERBVEExfCAgREFUQTB8CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworKioqLworLyogTUM0MTcgKi8KKyNkZWZpbmUgTkVUVVBfREFUQQkJMHgwMDAwMDBmZgorI2RlZmluZSBORVRVUF9XUgkJMHgwMDAwODAwMAorI2RlZmluZSBORVRVUF9SRAkJMHgwMDAwNDAwMAorI2RlZmluZSBORVRVUF9BQ0sJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTkVUVVBfQURISQkJMHgwMDAwMDgwMAorI2RlZmluZSBORVRVUF9BRExPCQkweDAwMDAwNDAwCisjZGVmaW5lIE5FVFVQX0NTMQkJMHgwMDAwMDIwMAorI2RlZmluZSBORVRVUF9DUzAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTkVUVVBfRU5fQUxMCQkweDAwMDAxMDAwCisjZGVmaW5lIE5FVFVQX0NUUkxfT0ZGCQkoTkVUVVBfQ1MxIHwgTkVUVVBfQ1MwIHwgTkVUVVBfV1IgfCBORVRVUF9SRCkKKyNkZWZpbmUgTkVUVVBfQ0lfQ1RMCQkweDA0CisjZGVmaW5lIE5FVFVQX0NJX1JECQkxCisKKworc3RhdGljIHVuc2lnbmVkIGludCBjaV9kYmc7Cittb2R1bGVfcGFyYW0oY2lfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaV9kYmcsICJFbmFibGUgQ0kgZGVidWdnaW5nIik7CisKKyNkZWZpbmUgY2lfZGJnX3ByaW50KGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGNpX2RiZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBzdG9yZXMgYWxsIHByaXZhdGUgdmFyaWFibGVzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggQ0kgKi8KK3N0cnVjdCBuZXR1cF9jaV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOworCXN0cnVjdCBtdXRleCBjYV9tdXRleDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXU4IGNpX2kyY19hZGRyOworCWludCBzdGF0dXM7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBtdXRleCBncGlvX211dGV4Oy8qIFR3byBDaU1heCdzIHVzZXMgc2FtZSBHUElPIGxpbmVzICovCisKK2ludCBuZXR1cF9yZWFkX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IDAsCisJCQkuYnVmCT0gJnJlZywKKwkJCS5sZW4JPSAxCisJCX0sIHsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJCS5sZW4JPSBsZW4KKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHJlYWQgZXJyb3IsIFJlZyA9IDB4JTAyeCwgU3RhdHVzID0gJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCisJCXJldHVybiAtMTsKKwl9CisKKwljaV9kYmdfcHJpbnQoIiVzOiBpMmMgcmVhZCBBZGRyPTB4JTA0eCwgUmVnID0gMHglMDJ4LCBkYXRhID0gJTAyeFxuIiwKKwkJCQkJCV9fZnVuY19fLCBhZGRyLCByZWcsIGJ1ZlswXSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX3dyaXRlX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJdTggYnVmZmVyW2xlbiArIDFdOworCisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IGFkZHIsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSAmYnVmZmVyWzBdLAorCQkubGVuCT0gbGVuICsgMQorCX07CisKKwlidWZmZXJbMF0gPSByZWc7CisJbWVtY3B5KCZidWZmZXJbMV0sIGJ1ZiwgbGVuKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHdyaXRlIGVycm9yLCBSZWc9WzB4JTAyeF0sIFN0YXR1cz0lZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX2NpX2dldF9tZW0oc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCit7CisJaW50IG1lbTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKTsKKworCWZvciAoOzspIHsKKwkJbWVtID0gY3hfcmVhZChNQzQxN19SV0QpOworCQlpZiAoKG1lbSAmIE5FVFVQX0FDSykgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJY3hfc2V0KE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYpOworCisJcmV0dXJuIG1lbSAmIDB4ZmY7Cit9CisKK2ludCBuZXR1cF9jaV9vcF9jYW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwKKwkJCQl1OCBmbGFnLCB1OCByZWFkLCBpbnQgYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBzdGF0ZS0+cHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKKworCXU4IHN0b3JlOworCWludCBtZW07CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkJMCwgJnN0b3JlLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlzdG9yZSAmPSB+MHgwYzsKKwlzdG9yZSB8PSBmbGFnOworCisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZzdG9yZSwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZ3Bpb19tdXRleCk7CisKKwkvKiB3cml0ZSBhZGRyICovCisJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwpOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FETE8gfCAoMHhmZiAmIGFkZHIpKTsKKwljeF9jbGVhcihNQzQxN19SV0QsIE5FVFVQX0FETE8pOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FESEkgfCAoMHhmZiAmIChhZGRyID4+IDgpKSk7CisJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BREhJKTsKKworCWlmIChyZWFkKSAvKiBkYXRhIGluICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgTkVUVVBfRU5fQUxMIHwgTkVUVVBfREFUQSk7CisJZWxzZSAvKiBkYXRhIG91dCAqLworCQljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwgZGF0YSk7CisKKwkvKiBjaG9vc2UgY2hpcCAqLworCWN4X2NsZWFyKE1DNDE3X1JXRCwKKwkJCShzdGF0ZS0+Y2lfaTJjX2FkZHIgPT0gMHg0MCkgPyBORVRVUF9DUzAgOiBORVRVUF9DUzEpOworCS8qIHJlYWQvd3JpdGUgKi8KKwljeF9jbGVhcihNQzQxN19SV0QsIChyZWFkKSA/IE5FVFVQX1JEIDogTkVUVVBfV1IpOworCW1lbSA9IG5ldHVwX2NpX2dldF9tZW0oZGV2KTsKKworCW11dGV4X3VubG9jaygmZ3Bpb19tdXRleCk7CisKKwlpZiAoIXJlYWQpCisJCWlmIChtZW0gPCAwKQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwljaV9kYmdfcHJpbnQoIiVzOiAlczogYWRkcj1bMHglMDJ4XSwgJXM9JXhcbiIsIF9fZnVuY19fLAorCQkJKHJlYWQpID8gInJlYWQiIDogIndyaXRlIiwgYWRkciwKKwkJCShmbGFnID09IE5FVFVQX0NJX0NUTCkgPyAiY3RsIiA6ICJtZW0iLAorCQkJKHJlYWQpID8gbWVtIDogZGF0YSk7CisKKwlpZiAocmVhZCkKKwkJcmV0dXJuIG1lbTsKKworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIDAsIE5FVFVQX0NJX1JELCBhZGRyLCAwKTsKK30KKworaW50IG5ldHVwX2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIGludCBhZGRyLCB1OCBkYXRhKQoreworCXJldHVybiBuZXR1cF9jaV9vcF9jYW0oZW41MDIyMSwgc2xvdCwgMCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9yZWFkX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwgdTggYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwKKwkJCQkJCQlORVRVUF9DSV9SRCwgYWRkciwgMCk7Cit9CisKK2ludCBuZXR1cF9jaV93cml0ZV9jYW1fY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsCisJCQkJCQkJdTggYWRkciwgdTggZGF0YSkKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IGVuNTAyMjEtPmRhdGE7CisJdTggYnVmID0gIDB4ODA7CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRlbGF5KDUwMCk7CisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJdWRlbGF5KDUwMCk7CisKKwlidWYgPSAweDAwOworCXJldCA9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmLCAxKTsKKworCW1zbGVlcCgxMDAwKTsKKwlkdmJfY2FfZW41MDIyMV9jYW1yZWFkeV9pcnEoJnN0YXRlLT5jYSwgMCk7CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgbmV0dXBfY2lfc2xvdF9zaHV0ZG93bihzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KQoreworCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfc2xvdF90c19jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwl1OCBidWYgPSAweDYwOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworfQorCisvKiB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIG5ldHVwX3JlYWRfY2lfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUsIHdvcmspOworCXU4IGJ1ZlszM107CisJaW50IHJldDsKKworCXJldCA9IG5ldHVwX3JlYWRfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWZbMF0sIDMzKTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuOworCisJY2lfZGJnX3ByaW50KCIlczogU2xvdCBTdGF0dXMgQWRkcj1bMHglMDR4XSwgUmVnPVsweCUwMnhdLCBkYXRhPSUwMngsICIKKwkJIlRTIGNvbmZpZyA9ICUwMnhcbiIsIF9fZnVuY19fLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsIDAsIGJ1ZlswXSwKKwkJYnVmWzMyXSk7CisKKwlpZiAoYnVmWzBdICYmIDEpCisJCXN0YXRlLT5zdGF0dXMgPSBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwKKwkJCURWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCWVsc2UKKwkJc3RhdGUtPnN0YXR1cyA9IDA7Cit9CisKKy8qIENJIGlycSBoYW5kbGVyICovCitpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKQoreworCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IE5VTEw7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCXBvcnQgPSAmZGV2LT50czE7CisJZWxzZSBpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzEpCisJCXBvcnQgPSAmZGV2LT50czI7CisJZWxzZSAvKiB3aG8gY2FsbHMgPyAqLworCQlyZXR1cm4gMDsKKworCXN0YXRlID0gcG9ydC0+cG9ydF9wcml2OworCisJc2NoZWR1bGVfd29yaygmc3RhdGUtPndvcmspOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBuZXR1cF9wb2xsX2NpX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsIGludCBvcGVuKQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3RhdGUtPnN0YXR1czsKK30KKworaW50IG5ldHVwX2NpX2luaXQoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGU7CisJdTggY2ltYXhfaW5pdFszNF0gPSB7CisJCTB4MDAsIC8qIG1vZHVsZSBBIGNvbnRyb2wqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGhpZ2ggQSAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gaGlnaCBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gbG93IEEgKi8KKwkJMHg0NCwgLyogbWVtb3J5IGFjY2VzcyB0aW1lIEEgKi8KKwkJMHgwMCwgLyogaW52ZXJ0IGlucHV0IEEgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBtb2R1bGUgQiBjb250cm9sKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEIgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBsb3cgQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGhpZ2ggQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBCICovCisJCTB4NDQsIC8qIG1lbW9yeSBhY2Nlc3MgdGltZSBCICovCisJCTB4MDAsIC8qIGludmVydCBpbnB1dCBCICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDIsIC8qIGRlc3RpbmF0aW9uIC0gbW9kdWxlIEEgKi8KKwkJMHgwMSwgLyogcG93ZXIgb24gKHVzZSBpdCBsaWtlIHN0b3JlIHBsYWNlKSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogaW50IHN0YXR1cyByZWFkIG9ubHkgKi8KKwkJMHgwMSwgLyogYWxsIGludCB1bm1hc2tlZCAqLworCQkweDA0LCAvKiBpbnQgY29uZmlnICovCisJCTB4MDAsIC8qIFVTQ0cxICovCisJCTB4MDQsIC8qIGFjayBhY3RpdmUgbG93ICovCisJCTB4MDAsIC8qIExPQ0sgPSAwICovCisJCTB4MzMsIC8qIHNlcmlhbCBtb2RlLCByaXNpbmcgaW4sIHJpc2luZyBvdXQsIE1TQiBmaXJzdCovCisJCTB4MzEsIC8qIHN5bmNyb25pemF0aW9uICovCisJfTsKKwlpbnQgcmV0OworCisJY2lfZGJnX3ByaW50KCIlc1xuIiwgX19mdW5jX18pOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldHVwX2NpX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkgeworCQljaV9kYmdfcHJpbnQoIiVzOiBVbmFibGUgY3JlYXRlIENJIHN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcG9ydC0+cG9ydF9wcml2ID0gc3RhdGU7CisKKwlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJY2FzZSAxOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQwOworCQltdXRleF9pbml0KCZncGlvX211dGV4KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQxOworCQlicmVhazsKKwl9CisKKwlzdGF0ZS0+aTJjX2FkYXAgPSAmcG9ydC0+ZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwOworCXN0YXRlLT5jYS5vd25lciA9IFRISVNfTU9EVUxFOworCXN0YXRlLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV9yZWFkX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLndyaXRlX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS5yZWFkX2NhbV9jb250cm9sID0gbmV0dXBfY2lfcmVhZF9jYW1fY3RsOworCXN0YXRlLT5jYS53cml0ZV9jYW1fY29udHJvbCA9IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGw7CisJc3RhdGUtPmNhLnNsb3RfcmVzZXQgPSBuZXR1cF9jaV9zbG90X3Jlc2V0OworCXN0YXRlLT5jYS5zbG90X3NodXRkb3duID0gbmV0dXBfY2lfc2xvdF9zaHV0ZG93bjsKKwlzdGF0ZS0+Y2Euc2xvdF90c19lbmFibGUgPSBuZXR1cF9jaV9zbG90X3RzX2N0bDsKKwlzdGF0ZS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IG5ldHVwX3BvbGxfY2lfc2xvdF9zdGF0dXM7CisJc3RhdGUtPmNhLmRhdGEgPSBzdGF0ZTsKKwlzdGF0ZS0+cHJpdiA9IHBvcnQ7CisKKwlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkwLCAmY2ltYXhfaW5pdFswXSwgMzQpOworCS8qIGxvY2sgcmVnaXN0ZXJzICovCisJcmV0IHw9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCTB4MWYsICZjaW1heF9pbml0WzB4MThdLCAxKTsKKwkvKiBwb3dlciBvbiBzbG90cyAqLworCXJldCB8PSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkweDE4LCAmY2ltYXhfaW5pdFsweDE4XSwgMSk7CisKKwlpZiAoMCAhPSByZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZHZiX2NhX2VuNTAyMjFfaW5pdCgmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIsCisJCQkJICAgJnN0YXRlLT5jYSwKKwkJCQkgICAvKiBmbGFncyAqLyAwLAorCQkJCSAgIC8qIG5fc2xvdHMgKi8gMSk7CisJaWYgKDAgIT0gcmV0KQorCQlnb3RvIGVycjsKKworCUlOSVRfV09SSygmc3RhdGUtPndvcmssIG5ldHVwX3JlYWRfY2lfc3RhdHVzKTsKKworCWNpX2RiZ19wcmludCgiJXM6IENJIGluaXRpYWxpemVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CitlcnI6CisJY2lfZGJnX3ByaW50KCIlczogQ2Fubm90IGluaXRpYWxpemUgQ0k6IEVycm9yICVkLlxuIiwgX19mdW5jX18sIHJldCk7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmV0dXBfY2lfZXhpdChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZTsKKworCWlmIChOVUxMID09IHBvcnQpCisJCXJldHVybjsKKworCXN0YXRlID0gKHN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqKXBvcnQtPnBvcnRfcHJpdjsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKE5VTEwgPT0gc3RhdGUtPmNhLmRhdGEpCisJCXJldHVybjsKKworCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UoJnN0YXRlLT5jYSk7CisJa2ZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODc0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGNpbWF4Mi5oCisgKgorICogQ0lNYXgoUikgU1AyIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVwIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQ0lNQVgyX0gKKyNkZWZpbmUgQ0lNQVgyX0gKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorCitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IGFkZHIpOworZXh0ZXJuIGludCBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkciwgdTggZGF0YSk7CitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfY2FtX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgdTggYWRkcik7CitleHRlcm4gaW50IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3NodXRkb3duKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3RzX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKTsKK2V4dGVybiBpbnQgbmV0dXBfcG9sbF9jaV9zbG90X3N0YXR1cyhzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IG9wZW4pOworZXh0ZXJuIGludCBuZXR1cF9jaV9pbml0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBuZXR1cF9jaV9leGl0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCBiZmUyNTg0Li42ZjVkZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJIkVSUk9SOiBIb3RwbHVnIGZpcm13YXJlIHJlcXVlc3QgZmFpbGVkICglcykuXG4iLAotCQkJQ1gyMzQxWF9GSVJNX0VOQ19GSUxFTkFNRSk7CisJCQlDWDIzODg1X0ZJUk1fSU1BR0VfTkFNRSk7CiAJCXByaW50ayhLRVJOX0VSUiAiUGxlYXNlIGZpeCB5b3VyIGhvdHBsdWcgc2V0dXAsIHRoZSBib2FyZCB3aWxsICIKIAkJCSJub3Qgd29yayB3aXRob3V0IGZpcm13YXJlIGxvYWRlZCFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0xMTk4LDIxICsxMTk4LDE2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2lucHV0ICppbnB1dDsKLQl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgbjsKIAotCW4gPSBpLT5pbmRleDsKLQotCWlmIChuID49IDQpCisJaWYgKGktPmluZGV4ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbbl07CisJaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbaS0+aW5kZXhdOwogCiAJaWYgKGlucHV0LT50eXBlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKLQogCS8qIEZJWE1FCiAJICogc3RyY3B5KGktPm5hbWUsIGlucHV0LT5uYW1lKTsgKi8KIAlzdHJjcHkoaS0+bmFtZSwgInVuc2V0Iik7CkBAIC0xMjU1LDEwICsxMjUwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0dfVFVORVIsIHQpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfR19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7CiAKIAlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogdHVuZXIgdHlwZSAlZFxuIiwgdC0+dHlwZSk7CiAKQEAgLTEyNzUsNyArMTI2OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVXBkYXRlIHRoZSBBL1YgY29yZSAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODYsMTQgKzEyNzksMTIgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CiAJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCWYtPmZyZXF1ZW5jeSA9IGRldi0+ZnJlcTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjAsOCArMTMxMSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAljeDIzODg1X2luaXRpYWxpemVfY29kZWMoZGV2KTsKIApAQCAtMTMzNSw3ICsxMzI1LDcgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKIAkvKiBVcGRhdGUgdGhlIEEvViBjb3JlICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBzX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDYsNyArMTMzNiw2IEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAgKnRzcG9ydCA9ICZkZXYtPnRzMTsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBkZXYtPm5hbWUpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDIzODg1X2JvYXJkc1t0c3BvcnQtPmRldi0+Ym9hcmRdLm5hbWUsCiAJCXNpemVvZihjYXAtPmNhcmQpKTsKQEAgLTEzNjYsMTYgKzEzNTUsMTAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewotCWludCBpbmRleDsKLQotCWluZGV4ID0gZi0+aW5kZXg7Ci0JaWYgKGluZGV4ICE9IDApCisJaWYgKGYtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPmluZGV4ID0gaW5kZXg7CiAJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUciLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CiAKIAlyZXR1cm4gMDsKQEAgLTEzODcsOCArMTM3MCw2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQpAQCAtMTQwOCwxMiArMTM4OSwxMCBAQAogCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQogCQlkZXYtPnRzMS50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHMxLnRzX3BhY2tldF9jb3VudDsKLQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwogCWRwcmludGsoMSwgIlZJRElPQ19UUllfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAogCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOwpAQCAtMTQyNiw3ICsxNDA1LDYgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KQEAgLTE1NDMsMTIgKzE1MjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8KIAkJIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBWSURJT0NfTE9HX1NUQVRVUywKLQkJTlVMTCk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19MT0dfU1RBVFVTLAotCQlOVUxMKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0xPR19TVEFUVVMsCi0JCU5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gyMzQxeF9sb2dfc3RhdHVzKCZkZXYtPm1wZWdfcGFyYW1zLCBuYW1lKTsKIAlwcmludGsoS0VSTl9JTkZPCiAJCSIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IGNhYTA5OGIuLjVlNGI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBib2FyZCBjb25maWcgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2Miw2ICsxNjMsMjQgQEAKIAkJLm5hbWUJCT0gIkNvbXBybyBWaWRlb01hdGUgRTY1MEYiLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX1RCU182OTIwXSA9IHsKKwkJLm5hbWUJCT0gIlR1cmJvU2lnaHQgVEJTIDY5MjAiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAorCVtDWDIzODg1X0JPQVJEX1RFVklJX1M0NzBdID0geworCQkubmFtZQkJPSAiVGVWaWkgUzQ3MCIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNV0gPSB7CisJCS5uYW1lCQk9ICJEVkJXb3JsZCBEVkItUzIgMjAwNSIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSV0gPSB7CisJCS5jaW1heAkJPSAxLAorCQkubmFtZQkJPSAiTmV0VVAgRHVhbCBEVkItUzIgQ0kiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMjQ1LDYgKzI2NCwyMiBAQAogCQkuc3VidmVuZG9yID0gMHgxODViLAogCQkuc3ViZGV2aWNlID0gMHhlODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4NjkyMCwKKwkJLnN1YmRldmljZSA9IDB4ODg4OCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVEJTXzY5MjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHhkNDcwLAorCQkuc3ViZGV2aWNlID0gMHg5MDIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMSwKKwkJLnN1YmRldmljZSA9IDB4MjAwNSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDFiNTUsCisJCS5zdWJkZXZpY2UgPSAweDJhMmMsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0ksCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC01NTIsNiArNTg3LDM4IEBACiAJCW1kZWxheSgyMCk7CiAJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDQpOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWN4X3dyaXRlKE1DNDE3X0NUTCwgMHgwMDAwMDAzNik7CisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMTgwMCk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQkvKiBHUElPLTAgSU5UQSBmcm9tIENpTWF4MQorCQkgICBHUElPLTEgSU5UQiBmcm9tIENpTWF4MgorCQkgICBHUElPLTIgcmVzZXQgY2hpcHMKKwkJICAgR1BJTy0zIHRvIEdQSU8tMTAgZGF0YS9hZGRyIGZvciBDQQorCQkgICBHUElPLTExIH5DUzAgdG8gQ2lNYXgxCisJCSAgIEdQSU8tMTIgfkNTMSB0byBDaU1heDIKKwkJICAgR1BJTy0xMyBBREwwIGxvYWQgTFNCIGFkZHIKKwkJICAgR1BJTy0xNCBBREwxIGxvYWQgTVNCIGFkZHIKKwkJICAgR1BJTy0xNSB+UkRZIGZyb20gQ2lNYXgKKwkJICAgR1BJTy0xNyB+UkQgdG8gQ2lNYXgKKwkJICAgR1BJTy0xOCB+V1IgdG8gQ2lNYXgKKwkJICovCisJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDApOyAvKiBHUElPIGFzIG91dCAqLworCQkvKiBHUElPMSBhbmQgR1BJTzIgYXMgSU5UQSBhbmQgSU5UQiBmcm9tIENpTWF4ZXMsIHJlc2V0IGxvdyAqLworCQljeF9jbGVhcihHUDBfSU8sIDB4MDAwMzAwMDQpOworCQltZGVsYXkoMTAwKTsvKiByZXNldCBkZWxheSAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDA0KTsgLyogR1BJTyBhcyBvdXQsIHJlc2V0IGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfQ1RMLCAweDAwMDAwMDM3KTsvKiBlbmFibGUgR1BJTzMtMTggcGlucyAqLworCQkvKiBHUElPLTE1IElOIGFzIH5BQ0ssIHJlc3QgYXMgT1VUICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCS8qIH5SRCwgfldSIGhpZ2g7IEFETDAsIEFETDEgbG93OyB+Q1MwLCB+Q1MxIGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDBjMzAwKTsKKwkJLyogZW5hYmxlIGlycSAqLworCQljeF93cml0ZShHUElPX0lTTSwgMHgwMDAwMDAwMCk7LyogSU5URVJSVVBUUyBhY3RpdmUgbG93Ki8KKwkJYnJlYWs7CiAJfQogfQogCkBAIC02MzIsNiArNjk5LDIxIEBACiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwogCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJXT1JMRF8yMDA1OgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweDU7IC8qIFBhcmFsbGVsICovCisJCXRzMS0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czEtPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCXRzMS0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czEtPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMxLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKQEAgLTY1Niw3ICs3MzgsMTcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKLQkJcmVxdWVzdF9tb2R1bGUoImN4MjU4NDAiKTsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKKwkJZGV2LT5zZF9jeDI1ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzJdLmkyY19hZGFwLAorCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEpOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgaW5pdCwgMCk7CisJCWJyZWFrOworCX0KKworCS8qIEFVWC1QTEwgMjdNSHogQ0xLICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCW5ldHVwX2luaXRpYWxpemUoZGV2KTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDhmNmZiMmEuLmRjN2ZmZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgImN4MjM4ODUuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKQEAgLTc5MSw2ICs3OTIsOCBAQAogCWRldi0+cGNpX2J1cyAgPSBkZXYtPnBjaS0+YnVzLT5udW1iZXI7CiAJZGV2LT5wY2lfc2xvdCA9IFBDSV9TTE9UKGRldi0+cGNpLT5kZXZmbik7CiAJZGV2LT5wY2lfaXJxbWFzayA9IDB4MDAxZjAwOworCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDApCisJCWRldi0+cGNpX2lycW1hc2sgfD0gMHgwMTgwMDAwMDsgLyogZm9yIENpTWF4ZXMgKi8KIAogCS8qIEV4dGVybmFsIE1hc3RlciAxIEJ1cyAqLwogCWRldi0+aTJjX2J1c1swXS5uciA9IDA7CkBAIC04NzIsNyArODc1LDcgQEAKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKIAljeDIzODg1X2NhcmRfc2V0dXAoZGV2KTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIAljeDIzODg1X2lyX2luaXQoZGV2KTsKIAogCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBDWDIzODg1X0FOQUxPR19WSURFTykgewpAQCAtMTY0Myw3ICsxNjQ2LDkgQEAKIAkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKSB8fAogCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8CiAJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAotCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkpIHsKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkgewogCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKQogCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLApAQCAtMTY4NSw4ICsxNjkwLDIwIEBACiAJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsCiAJCQkJUENJX01TS19BVURfRVhUKTsKIAorCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfR1BJTzAgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19HUElPMCk7CisKKwkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKQorCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0dQSU8xICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfR1BJTzEpOwogCX0KIAorCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDAgJiYKKwkJKChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkpCisJCS8qIGhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfZ3BpbyhkZXYsIHBjaV9zdGF0dXMpOyAqLworCQloYW5kbGVkICs9IG5ldHVwX2NpX3Nsb3Rfc3RhdHVzKGRldiwgcGNpX3N0YXR1cyk7CisKIAlpZiAodHMxX3N0YXR1cykgewogCQlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgPT0gQ1gyMzg4NV9NUEVHX0RWQikKIAkJCWhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfdHModHMxLCB0czFfc3RhdHVzKTsKQEAgLTE3MjIsMTYgKzE3MzksMjAgQEAKIAlpZiAoTlVMTCA9PSBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBjaV9kZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfZnJlZTsKKwogCS8qIHBjaSBpbml0ICovCiAJZGV2LT5wY2kgPSBwY2lfZGV2OwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgewogCQllcnIgPSAtRUlPOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCWlmIChjeDIzODg1X2Rldl9zZXR1cChkZXYpIDwgMCkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCS8qIHByaW50IHBjaSBpbmZvICovCkBAIC0xNzU4LDExICsxNzc5LDE4IEBACiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWN4X3NldChQQ0lfSU5UX01TSywgMHgwMTgwMDAwMCk7IC8qIGZvciBOZXRVUCAqLworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbF9pcnE6CiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworZmFpbF91bnJlZzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIGZhaWxfZnJlZToKIAlrZnJlZShkZXYpOwogCXJldHVybiBlcnI7CkBAIC0xNzcwLDcgKzE3OTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3gyMzg4NV9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSB0b19jeDIzODg1KHY0bDJfZGV2KTsKIAogCWN4MjM4ODVfc2h1dGRvd24oZGV2KTsKIApAQCAtMTc3OCwxMyArMTgwNywxMyBAQAogCiAJLyogdW5yZWdpc3RlciBzdHVmZiAqLwogCWZyZWVfaXJxKHBjaV9kZXYtPmlycSwgZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiAKIAltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOwogCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogCWtmcmVlKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMWM0NTQxMi4uZDQzYzc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjeDIzODg1LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJtdDIxMzEuaCIKQEAgLTQzLDYgKzQ0LDEzIEBACiAjaW5jbHVkZSAiZGliNzAwMHAuaCIKICNpbmNsdWRlICJkaWJ4MDAwX2NvbW1vbi5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJzdHYwOTAwLmgiCisjaW5jbHVkZSAic3R2NjExMC5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgorI2luY2x1ZGUgImN4MjQxMTYuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKKyNpbmNsdWRlICJuZXR1cC1lZXByb20uaCIKKyNpbmNsdWRlICJuZXR1cC1pbml0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiAKQEAgLTMwOCwxMSArMzE2LDYzIEBACiAJLm5vX3R1bmVyICAgICAgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBuZXR1cF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLnh0YWwgPSAyNzAwMDAwMCwKKwkuY2xrbW9kZSA9IDMsLyogMC1DTEtJLCAyLVhUQUxJLCBlbHNlIEFVVE8gKi8KKwkuZGlzZXFjX21vZGUgPSAyLC8qIDIvMyBQV00gKi8KKwkucGF0aDFfbW9kZSA9IDIsLypTZXJpYWwgY29udGludWVzIGNsb2NrICovCisJLnBhdGgyX21vZGUgPSAyLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCS50dW4xX21hZGRyZXNzID0gMCwvKiAweDYwICovCisJLnR1bjJfbWFkZHJlc3MgPSAzLC8qIDB4NjMgKi8KKwkudHVuMV9hZGMgPSAxLC8qIDEgVnBwICovCisJLnR1bjJfYWRjID0gMSwvKiAxIFZwcCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2EgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MCwKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MywKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAxLAorfTsKKworc3RhdGljIGludCB0YnNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCisJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMWUwMCk7LyogR1BJTy0xMyBoaWdoICovCisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxYTAwKTsvKiBHUElPLTEzIGxvdyAqLworCWVsc2UKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxODAwKTsvKiBHUElPLTEyIGxvdyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRic19jeDI0MTE2X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDUsCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRldmlpX2N4MjQxMTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHZid29ybGRfY3gyNDExNl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA1LAorfTsKKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2kyYyAqaTJjX2J1cyA9IE5VTEw7CiAJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCWludCByZXQ7CiAKIAkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCiAJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKQEAgLTUyNiw2ICs1ODYsNzggQEAKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0YnNfY3gyNDExNl9jb25maWcsCisJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0YnNfc2V0X3ZvbHRhZ2U7CisKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0ZXZpaV9jeDI0MTE2X2NvbmZpZywKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRic19zZXRfdm9sdGFnZTsKKworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNToKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmR2YndvcmxkX2N4MjQxMTZfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCQlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJCS8qIHBvcnQgQiAqLworCQljYXNlIDE6CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsCisJCQkJCQkJJm5ldHVwX3N0djA5MDBfY29uZmlnLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwgMCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWlmIChkdmJfYXR0YWNoKHN0djYxMTBfYXR0YWNoLAorCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19hLAorCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKSkgeworCQkJCQlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwKKwkJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCQkJTE5CSDI0X1BDTCwgMCwgMHgwOSkpCisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCQkiTm8gTE5CSDI0IGZvdW5kIVxuIik7CisKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJLyogcG9ydCBDICovCisJCWNhc2UgMjoKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwKKwkJCQkJCQkmbmV0dXBfc3R2MDkwMF9jb25maWcsCisJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwLCAxKTsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2goc3R2NjExMF9hdHRhY2gsCisJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IsCisJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApKSB7CisJCQkJCWlmICghZHZiX2F0dGFjaChsbmJoMjRfYXR0YWNoLAorCQkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkJCQlMTkJIMjRfUENMLCAwLCAweDBhKSkKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSJObyBMTkJIMjQgZm91bmQhXG4iKTsKKworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkICIKIAkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKQEAgLTU0MSwxNSArNjczLDM5IEBACiAJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKGkyY19idXMsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CiAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCiAJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KGZlMC0+ZHZiLmZyb250ZW5kKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKKwlyZXQgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBwb3J0LAogCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKKwkvKiBpbml0IENJICYgTUFDICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6IHsKKwkJc3RhdGljIHN0cnVjdCBuZXR1cF9jYXJkX2luZm8gY2luZm87CisKKwkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOworCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAorCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgorCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkJcG9ydC0+bnIsCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCisJCW5ldHVwX2NpX2luaXQocG9ydCk7CisJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGN4MjM4ODVfZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKQEAgLTYyMiw2ICs3NzgsMTIgQEAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCiAJCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzKTsKIAorCXN3aXRjaCAocG9ydC0+ZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQluZXR1cF9jaV9leGl0KHBvcnQpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwppbmRleCBiYjdmNzFhLi4zNDIxYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMjY4LDY0ICsyNjgsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDIzODg1X2kyYyAqYnVzID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gYnVzLT5kZXY7Ci0Jc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldi0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgewotCi0JCWRwcmludGsoMSwgIiVzICAodHVuZXIpIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsCi0JCQljbGllbnQtPm5hbWUpOwotCi0JCWlmICgoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHx8Ci0JCQkoZGV2LT50dW5lcl9hZGRyID09IGNsaWVudC0+YWRkcikpIHsKLQotCQkJZHByaW50aygxLCAiJXMgKHR1bmVyIHx8IGFkZHIgVU5TRVQpXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7Ci0KLQkJCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwKLQkJCQljbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0KLQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKLQkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOwotCQkJdHVuX3NldHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7Ci0KLQkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVFVORVJfU0VUX1RZUEVfQUREUiwKLQkJCQkmdHVuX3NldHVwKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWRwcmludGsoMSwgImkyYyBkZXRhY2ggW2NsaWVudD0lc11cbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MjM4ODVfaTJjICpidXMsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGJ1cy0+aTJjX3JjICE9IDApCi0JCXJldHVybjsKLQotCWkyY19jbGllbnRzX2NvbW1hbmQoJmJ1cy0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQogc3RhdGljIHUzMiBjeDIzODg1X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwpAQCAtMzQzLDkgKzI4NSw2IEBACiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQ1gyMzg4NSwKIAkuYWxnbyAgICAgICAgICAgICAgPSAmY3gyMzg4NV9pMmNfYWxnb190ZW1wbGF0ZSwKLQkuY2xhc3MgICAgICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDIzODg1X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CkBAIC00MDIsMTUgKzM0MSwxOCBAQAogCiAJYnVzLT5pMmNfYWxnby5kYXRhID0gYnVzOwogCWJ1cy0+aTJjX2FkYXAuYWxnb19kYXRhID0gYnVzOwotCWkyY19zZXRfYWRhcGRhdGEoJmJ1cy0+aTJjX2FkYXAsIGJ1cyk7CisJaTJjX3NldF9hZGFwZGF0YSgmYnVzLT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CiAKIAlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOwogCiAJaWYgKDAgPT0gYnVzLT5pMmNfcmMpIHsKIAkJZHByaW50aygxLCAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXJlZFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKLQkJaWYgKGkyY19zY2FuKQorCQlpZiAoaTJjX3NjYW4pIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzY2FuIGJ1cyAlZDpcbiIsCisJCQkJCWRldi0+bmFtZSwgYnVzLT5ucik7CiAJCQlkb19pMmNfc2NhbihkZXYtPm5hbWUsICZidXMtPmkyY19jbGllbnQpOworCQl9CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwKIAkJCWRldi0+bmFtZSwgYnVzLT5ucik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCmluZGV4IDIwYjY4YTIuLmVhZmJlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCkBAIC0yMTIsNiArMjEyLDggQEAKIAogI2RlZmluZSBERVZfQ05UUkwyCTB4MDAwNDAwMDAKIAorI2RlZmluZSBQQ0lfTVNLX0dQSU8xICAgKDEgPDwgMjQpCisjZGVmaW5lIFBDSV9NU0tfR1BJTzAgICAoMSA8PCAyMykKICNkZWZpbmUgUENJX01TS19BUEJfRE1BICAgKDEgPDwgMTIpCiAjZGVmaW5lIFBDSV9NU0tfQUxfV1IgICAgICgxIDw8IDExKQogI2RlZmluZSBQQ0lfTVNLX0FMX1JEICAgICAoMSA8PCAxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IGVhYTExODkuLmYwYWM2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMzUsMTEgKzM1LDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI0NCw2ICsyMzksNyBAQAogfTsKIHN0YXRpYyBjb25zdCBpbnQgQ1gyMzg4NV9DVExTID0gQVJSQVlfU0laRShjeDIzODg1X2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIGN4MjM4ODVfdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTMwMywxMSArMjk5LDcgQEAKIAogCWRldi0+dHZub3JtID0gbm9ybTsKIAotCS8qIFRlbGwgdGhlIGFuYWxvZyB0dW5lci9kZW1vZHMgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfU1RELCAmbm9ybSk7Ci0KLQkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19TVEQsICZub3JtKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNCw4ICszMTYsOCBAQAogCWlmIChOVUxMID09IHZmZCkKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT5taW5vciA9IC0xOworCXZmZC0+djRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBkZXYtPm5hbWUsIHR5cGUsIGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwpAQCAtNDE0LDggKzQwNiw3IEBACiAJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCktPnZtdXg7CiAKIAkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLAotCQlWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtODkxLDcgKzg4Miw3IEBACiAJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19HX0NUUkwpXG4iLCBfX2Z1bmNfXyk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBnX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDUsNyArOTk2LDcgQEAKIAlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLAogCQlmaC0+d2lkdGgsIGZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfRk1ULCBmKTsKKwljYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODUsNyArMTI3Niw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMDAsNyArMTI5MSw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAoMTApOwpAQCAtMTMzNCw3ICsxMzI1LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM0Nyw3ICsxMzM4LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyOCw2ICsxNTE5LDI2IEBACiAJLyogRG9uJ3QgZW5hYmxlIFZCSSB5ZXQgKi8KIAljeF9zZXQoUENJX0lOVF9NU0ssIDEpOwogCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7CisKKwkJaWYgKGRldi0+dHVuZXJfYWRkcikKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCWVsc2UKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVikpOworCQlpZiAoc2QpIHsKKwkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CisKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKKwkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOworCQkJdHVuX3NldHVwLmFkZHIgPSB2NGwyX2kyY19zdWJkZXZfYWRkcihzZCk7CisKKwkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisJCX0KKwl9CisKIAogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJZGV2LT52aWRlb19kZXYgPSBjeDIzODg1X3ZkZXZfaW5pdChkZXYsIGRldi0+cGNpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggNjc4MjgwMi4uMDJkOTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgpAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQIDExCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IIDEyCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRiAgIDEzCisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEJTXzY5MjAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSAgICAgICAgICAgIDE2CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSSAgICAgIDE3CiAKIC8qIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBieSB0aGUgZHJpdmVyOiBQQUwvSCwgTlRTQy9LciwgU0VDQU0gQi9HL0gvTEMgKi8KICNkZWZpbmUgQ1gyMzg4NV9OT1JNUyAoXApAQCAtMTg0LDYgKzE4OCw3IEBACiAJICovCiAJdTMyCQkJY2xrX2ZyZXE7CiAJc3RydWN0IGN4MjM4ODVfaW5wdXQgICAgaW5wdXRbTUFYX0NYMjM4ODVfSU5QVVRdOworCWludAkJCWNpbWF4OyAvKiBmb3IgTmV0VVAgKi8KIH07CiAKIHN0cnVjdCBjeDIzODg1X3N1YmlkIHsKQEAgLTI2NiwxMSArMjcxLDEzIEBACiAKIAkvKiBBbGxvdyBhIHNpbmdsZSB0c3BvcnQgdG8gaGF2ZSBtdWx0aXBsZSBmcm9udGVuZHMgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBudW1fZnJvbnRlbmRzOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICpwb3J0X3ByaXY7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CiAJYXRvbWljX3QgICAgICAgICAgICAgICAgICAgcmVmY291bnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKIAogCS8qIHBjaSBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpwY2k7CkBAIC0zMTYsNiArMzIzLDcgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByYWRpb190eXBlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHJhZGlvX2FkZHI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaGFzX3JhZGlvOworCXN0cnVjdCB2NGwyX3N1YmRldiAJICAgKnNkX2N4MjU4NDA7CiAKIAkvKiBWNGwgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBmcmVxOwpAQCAtMzM2LDYgKzM0NCwxNCBAQAogCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDIzODg1X2RldiAqdG9fY3gyMzg4NShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDIzODg1X2RldiwgdjRsMl9kZXYpOworfQorCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGN4MjM4ODVfZGV2bGlzdDsKIAogI2RlZmluZSBTUkFNX0NIMDEgIDAgLyogVmlkZW8gQSAqLwpAQCAtNDUyLDggKzQ2OCw2IEBACiAvKiBjeDIzODg1LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGV4dGVybiBpbnQgY3gyMzg4NV9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfaTJjICpidXMpOwogZXh0ZXJuIGludCBjeDIzODg1X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2kyYyAqYnVzKTsKLWV4dGVybiB2b2lkIGN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cywgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkgICAgIHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZCBjeDIzODg1X2F2X2NsayhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYmJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYwpAQCAtMCwwICsxLDEwNyBAQAorCisvKgorICogbmV0dXAtZWVwcm9tLmMKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgIm5ldHVwLWVlcHJvbS5oIgorCisjZGVmaW5lIEVFUFJPTV9JMkNfQUREUiAweDUwCisKK2ludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwkvKiBSZWFkIGZyb20gRUVQUk9NICovCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gRUVQUk9NX0kyQ19BRERSLAorCQkJLmZsYWdzCT0gMCwKKwkJCS5idWYJPSAmYnVmWzBdLAorCQkJLmxlbgk9IDEKKwkJfSwgeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5idWYJPSAmYnVmWzFdLAorCQkJLmxlbgk9IDEKKwkJfQorCisJfTsKKworCWJ1ZlswXSA9IGFkZHI7CisJYnVmWzFdID0gMHgwOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWVwcm9tIGkyYyByZWFkIGVycm9yLCBzdGF0dXM9JWRcbiIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gYnVmWzFdOworfTsKKworaW50IG5ldHVwX2VlcHJvbV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZ3WzJdOworCisJLyogV3JpdGUgaW50byBFRVBST00gKi8KKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmJ1Zgk9ICZidWZ3WzBdLAorCQkJLmxlbgk9IDIKKwkJfQorCX07CisKKwlidWZ3WzBdID0gYWRkcjsKKwlidWZ3WzFdID0gZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgImVlcHJvbSBpMmMgd3JpdGUgZXJyb3IsIHN0YXR1cz0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1kZWxheSgxMCk7IC8qIHByb3BoeWxhY3RpYyBkZWxheSwgZGF0YXNoZWV0IHdyaXRlIGN5Y2xlIHRpbWUgPSA1IG1zICovCisJcmV0dXJuIDA7Cit9OworCit2b2lkIG5ldHVwX2dldF9jYXJkX2luZm8oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQlzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvICpjaW5mbykKK3sKKwlpbnQgaSwgajsKKworCWNpbmZvLT5yZXYgPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIDEzKTsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNjsgaSsrLCBqKyspCisJCWNpbmZvLT5wb3J0WzBdLm1hY1tqXSA9ICBuZXR1cF9lZXByb21fcmVhZChpMmNfYWRhcCwgaSk7CisKKwlmb3IgKGkgPSA2LCBqID0gMDsgaSA8IDEyOyBpKyssIGorKykKKwkJY2luZm8tPnBvcnRbMV0ubWFjW2pdID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCBpKTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5MjZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbmV0dXAtZWVwcm9tLmgKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIE5FVFVQX0VFUFJPTV9ICisjZGVmaW5lIE5FVFVQX0VFUFJPTV9ICisKK3N0cnVjdCBuZXR1cF9wb3J0X2luZm8geworCXU4IG1hY1s2XTsvKiBjYXJkIE1BQyBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvIHsKKwlzdHJ1Y3QgbmV0dXBfcG9ydF9pbmZvIHBvcnRbMl07LyogcG9ydHMgLSAxLDIgKi8KKwl1OCByZXY7LyogY2FyZCByZXZpc2lvbiAqLworfTsKKworZXh0ZXJuIGludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKTsKK2V4dGVybiBpbnQgbmV0dXBfZWVwcm9tX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIHZvaWQgbmV0dXBfZ2V0X2NhcmRfaW5mbyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCXN0cnVjdCBuZXR1cF9jYXJkX2luZm8gKmNpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg5M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIG5ldHVwLWluaXQuYworICoKKyAqIE5ldFVQIER1YWwgRFZCLVMyIENJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjM4ODUuaCIKKworc3RhdGljIHZvaWQgaTJjX2F2X3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IDB4ODggPj4gMSwKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGJ1ZiwKKwkJLmxlbgk9IDMKKwl9OworCisJYnVmWzBdID0gcmVnID4+IDg7CisJYnVmWzFdID0gcmVnICYgMHhmZjsKKwlidWZbMl0gPSB2YWw7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfd3JpdGU0KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTggYnVmWzZdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSA2CisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzJdID0gdmFsICYgMHhmZjsKKwlidWZbM10gPSAodmFsID4+IDgpICYgMHhmZjsKKwlidWZbNF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJYnVmWzVdID0gdmFsID4+IDI0OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyB3cml0ZSBlcnJvciFcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHU4IGkyY19hdl9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnKQoreworCWludCByZXQ7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSAyCisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworCisJbXNnLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnLmxlbiA9IDE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHJlYWQgZXJyb3IhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gYnVmWzBdOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfYW5kX29yKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1bnNpZ25lZCBhbmRfbWFzaywKKwkJCQkJCQkJdTggb3JfdmFsdWUpCit7CisJaTJjX2F2X3dyaXRlKGkyYywgcmVnLCAoaTJjX2F2X3JlYWQoaTJjLCByZWcpICYgYW5kX21hc2spIHwgb3JfdmFsdWUpOworfQorLyogc2V0IDI3TUh6IG9uIEFVWF9DTEsgKi8KK3ZvaWQgbmV0dXBfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzJdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gJmkyY19idXMtPmkyY19hZGFwOworCisJLyogU3RvcCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDAwKTsKKworCS8qIEF1eCBQTEwgZnJhYyBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTE0LCAweGVhMGViMyk7CisKKwkvKiBBdXggUExMIGludCBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTEwLCAweDA5MDMxOSk7CisKKwkvKiBzdGFydCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDEwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1pbml0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNmFlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBuZXR1cC1pbml0LmgKKyAqCisgKiBOZXRVUCBEdWFsIERWQi1TMiBDSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCitleHRlcm4gdm9pZCBuZXR1cF9pbml0aWFsaXplKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCmluZGV4IGQxOTlkODAuLjkzZDc0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwpAQCAtMzYzLDc1ICszNjMsNzQgQEAKIAl9CiB9CiAKLWludCBjeDI1ODQwX2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCByZXR2YWw7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7Ci0JCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODAzLCB+MHgxMCwgMCk7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOwotCQl9Ci0JCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjbGllbnQsICoodTMyICopYXJnKTsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKLQkJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAweDEwKTsKLQkJfQotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMCk7Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDApOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOworCX0KKwlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCBmcmVxKTsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCAhPSBDWDI1ODQwX0FVRElPX1NFUklBTCkKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOworCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDApOworCXJldHVybiByZXR2YWw7Cit9CiAKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfbXV0ZShjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQoraW50IGN4MjU4NDBfYXVkaW9fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlzZXRfdm9sdW1lKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCXNldF9iYXNzKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJc2V0X3RyZWJsZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQlzZXRfYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlzZXRfbXV0ZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY2xpZW50KTsKIAkJYnJlYWs7Ci0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGNsaWVudCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjbGllbnQpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY2xpZW50KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQogCitpbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXNldF92b2x1bWUoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJc2V0X2Jhc3MoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlzZXRfdHJlYmxlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXNldF9iYWxhbmNlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXNldF9tdXRlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMjVlYjNiZWMuLjczN2VlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAogI2luY2x1ZGUgImN4MjU4NDAtY29yZS5oIgpAQCAtNDgsMTUgKzQ4LDEyIEBACiBNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwsIFR5bGVyIFRyYWZmb3JkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQogc3RhdGljIGludCBjeDI1ODQwX2RlYnVnOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsY3gyNTg0MF9kZWJ1ZywgaW50LCAwNjQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlcyBbMD1PZmYgKGRlZmF1bHQpIDE9T25dIik7CiAKLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC03NjMsNyArNzYwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CiAJCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC03NzgsNyArNzc1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19zX2N0cmwoc2QsIGN0cmwpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MTUsNyArODEyLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19nX2N0cmwoc2QsIGN0cmwpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgyNywxMSArODI0LDkgQEAKIAogc3RhdGljIGludCBjeDI1ODQwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQogCXN3aXRjaCAoZm10LT50eXBlKSB7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX0dfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92YmlfZ19mbXQoc2QsIGZtdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODkzLDEwICs4ODgsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBWSURJT0NfU19GTVQsIGZtdCk7CisJCXJldHVybiBjeDI1ODQwX3ZiaV9zX2ZtdChzZCwgZm10KTsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92Ymlfc19mbXQoc2QsIGZtdCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDEsNiArMTA5NiwxNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBUaGlzIGluaXQgb3BlcmF0aW9uIG11c3QgYmUgY2FsbGVkIHRvIGxvYWQgdGhlIGRyaXZlcidzIGZpcm13YXJlLgorICAgV2l0aG91dCB0aGlzIHRoZSBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gd2lsbCBmYWlsIGFuZCB5b3Ugd2lsbAorICAgb25seSBnZXQgbW9uby4KKworICAgU2luY2UgbG9hZGluZyB0aGUgZmlybXdhcmUgaXMgb2Z0ZW4gcHJvYmxlbWF0aWMgd2hlbiB0aGUgZHJpdmVyIGlzCisgICBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgSSByZWNvbW1lbmQgcG9zdHBvbmluZyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgIHVudGlsIHRoZSBmaXJzdCBvcGVuIG9mIHRoZSB2aWRlbyBkZXZpY2UuIEFub3RoZXIgcmVhc29uIGZvcgorICAgcG9zdHBvbmluZyBpdCBpcyB0aGF0IGxvYWRpbmcgdGhpcyBmaXJtd2FyZSB0YWtlcyBhIGxvbmcgdGltZSAoc2Vjb25kcykKKyAgIGR1ZSB0byB0aGUgc2xvdyBpMmMgYnVzIHNwZWVkLiBTbyBpdCB3aWxsIHNwZWVkIHVwIHRoZSBib290IHByb2Nlc3MgaWYKKyAgIHlvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGUgZncgYXMgbG9uZyBhcyB0aGUgdmlkZW8gZGV2aWNlIGlzbid0IHVzZWQuICAqLwogc3RhdGljIGludCBjeDI1ODQwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC0xMTQ2LDIwICsxMTUxLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCB2YmkpOwotfQotCi1zdGF0aWMgaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX2F1ZGlvKGNsaWVudCwgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRLCAmZnJlcSk7Ci19Ci0KIHN0YXRpYyBpbnQgY3gyNTg0MF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTExOTUsMTAgKzExODYsMTIgQEAKIAogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjEwLDEwICsxMjAzLDExIEBACiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCiAJCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzODAsMTkgKzEzNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjU4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQkvKiBpZ25vcmUgdGhpcyBjb21tYW5kICovCi0JaWYgKGNtZCA9PSBUVU5FUl9TRVRfVFlQRV9BRERSIHx8IGNtZCA9PSBUVU5FUl9TRVRfQ09ORklHKQotCQlyZXR1cm4gMDsKLQotCS8qIE9sZC1zdHlsZSBkcml2ZXJzIHJlbHkgb24gaW5pdGlhbGl6YXRpb24gb24gZmlyc3QgdXNlLCBzbwotCSAgIGNhbGwgdGhlIGluaXQgd2hlbmV2ZXIgYSBjb21tYW5kIGlzIGlzc3VlZCB0byB0aGlzIGRyaXZlci4KLQkgICBOZXctc3R5bGUgZHJpdmVycyB1c2luZyB2NGwyX3N1YmRldiBzaG91bGQgY2FsbCBpbml0IGV4cGxpY2l0bHkuICovCi0JY3gyNTg0MF9pbml0KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCAwKTsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MjU4NDBfY29yZV9vcHMgPSB7CkBAIC0xNTI4LDggKzE1MDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiY3gyNTg0MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NYMjU4NDAsCi0JLmNvbW1hbmQgPSBjeDI1ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gY3gyNTg0MF9wcm9iZSwKIAkucmVtb3ZlID0gY3gyNTg0MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gY3gyNTg0MF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaAppbmRleCBiZTA1NTgyLi45YWQwZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC03NSwxMSArNzUsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtYXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogdm9pZCBjeDI1ODQwX2F1ZGlvX3NldF9wYXRoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKK2ludCBjeDI1ODQwX2F1ZGlvX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDI1ODQwX2F1ZGlvX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBjeDI1ODQwX3ZiaV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CitpbnQgY3gyNTg0MF92YmlfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCmluZGV4IDAzZjA5YjIuLjM1ZjY1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCkBAIC04MiwxOTkgKzgyLDE4MSBAQAogCXJldHVybiBlcnIgJiAweGYwOwogfQogCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MjU4NDBfdmJpX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCXN0YXRpYyBjb25zdCB1MTYgbGNyMnZiaVtdID0geworCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KKwkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KKwkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCisJCTAsIDAsIDAsIDAKKwl9OworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwotCQkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLwotCQkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KLQkJCTAsIDAsIFY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwJLyogOSAqLwotCQkJMCwgMCwgMCwgMAotCQl9OwotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IGk7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOworCS8qIHdlJ3JlIGRvbmUgaWYgcmF3IFZCSSBpcyBhY3RpdmUgKi8KKwlpZiAoKGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDA0KSAmIDB4MTApID09IDApCisJCXJldHVybiAwOwogCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCQkvKiB3ZSdyZSBkb25lIGlmIHJhdyBWQkkgaXMgYWN0aXZlICovCi0JCWlmICgoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gNyk7CiAKLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDcpOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDEwKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gMTApOwogCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gyNTg0MF92Ymlfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKKwlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKKwlpbnQgdmJpX29mZnNldCA9IGlzX3BhbCA/IDEgOiAwOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwotCi0JCQkvKiBWQkkgT2Zmc2V0ICovCi0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIHZiaV9vZmZzZXQpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKLQkJLyogU2xpY2VkIFZCSSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDYsIDB4MTMpOworCQkvKiBWQkkgT2Zmc2V0ICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgdmJpX29mZnNldCk7Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gMDsgaSA8PSA2OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCi0JCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfQotCi0JCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8PSAxOyB4KyspIHsKLQkJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgewotCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKLQkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgotCQkJCQlsY3JbaV0gfD0gNCA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgotCQkJCQlsY3JbaV0gfD0gNiA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKLQkJCQkJbGNyW2ldIHw9IDkgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykgewotCQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbNiArIHhdKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspIHsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQl9Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKSB7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIGksIDApOwotCQkJfQotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDNjLCAweDE2KTsKLQotCQlpZiAoaXNfcGFsKSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzQsIDB4MmEpOwotCQl9IGVsc2UgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc0LCAweDIyKTsKLQkJfQotCQlicmVhazsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQl7Ci0JCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpID0gYXJnOwotCQl1OCAqcCA9IHZiaS0+cDsKLQkJaW50IGlkMSwgaWQyLCBsLCBlcnIgPSAwOworCWZvciAoeCA9IDA7IHggPD0gMjM7IHgrKykKKwkJbGNyW3hdID0gMHgwMDsKIAotCQlpZiAocFswXSB8fCBwWzFdICE9IDB4ZmYgfHwgcFsyXSAhPSAweGZmIHx8Ci0JCSAgICAocFszXSAhPSAweDU1ICYmIHBbM10gIT0gMHg5MSkpIHsKLQkJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7Ci0JCQlicmVhazsKLQkJfQorCS8qIFNldHVwIHN0YW5kYXJkICovCisJY3gyNTg0MF9zdGRfc2V0dXAoY2xpZW50KTsKIAotCQlwICs9IDQ7Ci0JCWlkMSA9IHBbLTFdOwotCQlpZDIgPSBwWzBdICYgMHhmOwotCQlsID0gcFsyXSAmIDB4M2Y7Ci0JCWwgKz0gc3RhdGUtPnZiaV9saW5lX29mZnNldDsKLQkJcCArPSA0OworCS8qIFNsaWNlZCBWQkkgKi8KKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNiwgMHgxMyk7CisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKIAotCQlzd2l0Y2ggKGlkMikgewotCQljYXNlIDE6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7Ci0JCQllcnIgPSAhb2RkX3Bhcml0eShwWzBdKSB8fCAhb2RkX3Bhcml0eShwWzFdKTsKLQkJCWJyZWFrOwotCQljYXNlIDk6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9WUFM7Ci0JCQlpZiAoZGVjb2RlX3ZwcyhwLCBwKSAhPSAwKSB7Ci0JCQkJZXJyID0gMTsKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CisJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgeworCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgorCQkJCWxjcltpXSB8PSAxIDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CisJCQkJbGNyW2ldIHw9IDQgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CisJCQkJbGNyW2ldIHw9IDYgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgorCQkJCWxjcltpXSB8PSA5IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlkMiA9IDA7CisJCX0KKwl9CisKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzNDsgaSsrLCB4KyspCisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbOSArIHhdKTsKKwkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCAwKTsKKwl9CisKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0M2MsIDB4MTYpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOworCXJldHVybiAwOworfQorCitpbnQgY3gyNTg0MF9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4ICpwID0gdmJpLT5wOworCWludCBpZDEsIGlkMiwgbCwgZXJyID0gMDsKKworCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKKwkJCShwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgeworCQl2YmktPmxpbmUgPSB2YmktPnR5cGUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlwICs9IDQ7CisJaWQxID0gcFstMV07CisJaWQyID0gcFswXSAmIDB4ZjsKKwlsID0gcFsyXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OworCXAgKz0gNDsKKworCXN3aXRjaCAoaWQyKSB7CisJY2FzZSAxOgorCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCWVyciA9ICFvZGRfcGFyaXR5KHBbMF0pIHx8ICFvZGRfcGFyaXR5KHBbMV0pOworCQlicmVhazsKKwljYXNlIDk6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZDIgPSAwOworCQllcnIgPSAxOwogCQlicmVhazsKIAl9Ci0JfQogCisJdmJpLT50eXBlID0gZXJyID8gMCA6IGlkMjsKKwl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKKwl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IDJkMjUwYTIuLjQ5OTUyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC02MSw3ICs2MSw3IEBACiAJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVFYwMjg4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29uZXhhbnQgMjM4OHggY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggN2Y1YjhiZi4uNDRlYWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTc0Niw3ICs3NDYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCXJldHVybiAwOwogfQpAQCAtNzU3LDcgKzc1Niw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLwpAQCAtNzc2LDcgKzc3NCw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTc5Myw3ICs3OTAsNiBAQAogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGRldi0+Y29yZTsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTkxOSw3ICs5MTUsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBjb3JlLT5uYW1lKTsKIAlwcmludGsoIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCQljb3JlLT5uYW1lKTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWNhbGxfYWxsKGNvcmUsIGNvcmUsIGxvZ19zdGF0dXMpOwogCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5wYXJhbXMsIG5hbWUpOwogCXByaW50aygiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCiAJCWNvcmUtPm5hbWUpOwpAQCAtOTc0LDcgKzk3MCw3IEBACiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfZnJlcXVlbmN5LCBmKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggNzMzZWRlMy4uMDM2Mzk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC03MzIsNiArNzMyLDggQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkvKiBTb21lIHZhcmlhbnRzIHVzZSBhIHRkYTk4NzQgYW5kIHNvIG5lZWQgdGhlIHR2YXVkaW8gbW9kdWxlLiAqLworCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1RWQVVESU8sCiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKQEAgLTE5MzQsNiArMTkzNiwzOSBAQAogCQl9IH0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSFQgUENJIE1LSUkiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjEsCisJCS5yYWRpb190eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnJhZGlvX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0geyB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwMDAwMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDRmYiwKKwkJCS5ncGlvMSAgPSAweDAxMGVmLAorCQkJLmF1ZGlvcm91dGUgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwZmYsCisJCX0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjM0Myw2ICsyMzc4LDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweGIyMDAsCiAJCS5zdWJkZXZpY2UgPSAweDQyMDAsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBVFRSQURFX1NUNDIwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE1M2IsCisJCS5zdWJkZXZpY2UgPSAweDExNzcsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUksCiAJfSwKIH07CiAKQEAgLTI4MTksNiArMjg1OCw3IEBACiAJCSAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKIAkJY3RsLT5tdHMgPSAxOwogCQlicmVhazsKQEAgLTI5NDcsNyArMjk4Nyw3IEBACiAJCXRlYTU3NjdfY2ZnLnR1bmVyID0gVFVORVJfVEVBNTc2NzsKIAkJdGVhNTc2N19jZmcucHJpdiAgPSAmY3RsOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGVhNTc2N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZWE1NzY3X2NmZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CkBAIC0yOTcyLDcgKzMwMTIsNyBAQAogCQl0dW5fc2V0dXAudHlwZSAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb190eXBlOwogCQl0dW5fc2V0dXAuYWRkciAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb19hZGRyOwogCQl0dW5fc2V0dXAudHVuZXJfY2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOwotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJCW1vZGVfbWFzayAmPSB+VF9SQURJTzsKIAl9CiAKQEAgLTI5ODIsNyArMzAyMiw3IEBACiAJCXR1bl9zZXR1cC5hZGRyICAgICAgICAgICA9IGNvcmUtPmJvYXJkLnR1bmVyX2FkZHI7CiAJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYpIHsKQEAgLTI5OTEsNyArMzAzMSw3IEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiAgPSAmY29yZS0+Ym9hcmQudGRhOTg4N19jb25mOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCiAJaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPT0gVFVORVJfWEMyMDI4KSB7CkBAIC0zMDA3LDkgKzMwNDcsOSBAQAogCQl4YzIwMjhfY2ZnLnByaXYgID0gJmN0bDsKIAkJaW5mb19wcmludGsoY29yZSwgIkFza2luZyB4YzIwMjgvMzAyOCB0byBsb2FkIGZpcm13YXJlICVzXG4iLAogCQkJICAgIGN0bC5mbmFtZSk7Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmeGMyMDI4X2NmZyk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2NvbmZpZywgJnhjMjAyOF9jZmcpOwogCX0KLQljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMwODksNiArMzEyOSw4IEBACiAJaW50IGk7CiAKIAljb3JlID0ga3phbGxvYyhzaXplb2YoKmNvcmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29yZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCWF0b21pY19pbmMoJmNvcmUtPnJlZmNvdW50KTsKIAljb3JlLT5wY2lfYnVzICA9IHBjaS0+YnVzLT5udW1iZXI7CkBAIC0zMTAwLDcgKzMxNDIsMTUgQEAKIAogCWNvcmUtPm5yID0gbnI7CiAJc3ByaW50Zihjb3JlLT5uYW1lLCAiY3g4OFslZF0iLCBjb3JlLT5ucik7CisKKwlzdHJjcHkoY29yZS0+djRsMl9kZXYubmFtZSwgY29yZS0+bmFtZSk7CisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZjb3JlLT52NGwyX2RldikpIHsKKwkJa2ZyZWUoY29yZSk7CisJCXJldHVybiBOVUxMOworCX0KKwogCWlmICgwICE9IGN4ODhfZ2V0X3Jlc291cmNlcyhjb3JlLCBwY2kpKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAkJa2ZyZWUoY29yZSk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTMxMTEsNiArMzE2MSwxMSBAQAogCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKIAljb3JlLT5ibW1pbyA9ICh1OCBfX2lvbWVtICopY29yZS0+bG1taW87CiAKKwlpZiAoY29yZS0+bG1taW8gPT0gTlVMTCkgeworCQlrZnJlZShjb3JlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJLyogYm9hcmQgY29uZmlnICovCiAJY29yZS0+Ym9hcmRuciA9IFVOU0VUOwogCWlmIChjYXJkW2NvcmUtPm5yXSA8IEFSUkFZX1NJWkUoY3g4OF9ib2FyZHMpKQpAQCAtMzE0OSw4ICszMjA0LDM2IEBACiAJY3g4OF9pMmNfaW5pdChjb3JlLCBwY2kpOwogCiAJLyogbG9hZCB0dW5lciBtb2R1bGUsIGlmIG5lZWRlZCAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT5ib2FyZC50dW5lcl90eXBlKSB7CisJCS8qIElnbm9yZSAweDZiIGFuZCAweDZmIG9uIGN4ODggYm9hcmRzLgorCQkgKiBGdXNpb25IRFRWNSBSVCBHb2xkIGhhcyBhbiBpciByZWNlaXZlciBhdCAweDZiCisJCSAqIGFuZCBhbiBSVEMgYXQgMHg2ZiB3aGljaCBjYW4gZ2V0IGNvcnJ1cHRlZCBpZiBwcm9iZWQuICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dl9hZGRyc1tdID0geworCQkJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwJCS8qIHRkYTgyOTAgKi8KKwkJCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCQkweDY4LCAweDY5LCAweDZhLCAweDZjLCAweDZkLCAweDZlLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKwkJaW50IGhhc19kZW1vZCA9IChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYgJiBUREE5ODg3X1BSRVNFTlQpOworCisJCS8qIEkgZG9uJ3QgdHJ1c3QgdGhlIHJhZGlvX3R5cGUgYXMgaXMgc3RvcmVkIGluIHRoZSBjYXJkCisJCSAgIGRlZmluaXRpb25zLCBzbyB3ZSBqdXN0IHByb2JlIGZvciBpdC4KKwkJICAgVGhlIHJhZGlvX3R5cGUgaXMgc29tZXRpbWVzIG1pc3NpbmcsIG9yIHNldCB0byBVTlNFVCBidXQKKwkJICAgbGF0ZXIgY29kZSBjb25maWd1cmVzIGEgdGVhNTc2Ny4KKwkJICovCisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKKwkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQlpZiAoaGFzX2RlbW9kKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCWlmIChjb3JlLT5ib2FyZC50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCBoYXNfZGVtb2QgPyB0dl9hZGRycyArIDQgOiB0dl9hZGRycyk7CisJCX0gZWxzZSB7CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBjb3JlLT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJfQorCX0KIAogCWN4ODhfY2FyZF9zZXR1cChjb3JlKTsKIAljeDg4X2lyX2luaXQoY29yZSwgcGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCBiMDQ1ODc0Li5mMmZiOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC05OTEsNyArOTkxLDcgQEAKIAlzZXRfdHZhdWRpbyhjb3JlKTsKIAogCS8vIHRlbGwgaTJjIGNoaXBzCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfU1RELCZub3JtKTsKKwljYWxsX2FsbChjb3JlLCB0dW5lciwgc19zdGQsIG5vcm0pOwogCiAJLy8gZG9uZQogCXJldHVybiAwOwpAQCAtMTAxMSw3ICsxMDExLDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiA9ICZjb3JlLT52NGwyX2RldjsKKwl2ZmQtPnBhcmVudCA9ICZwY2ktPmRldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBjb3JlLT5uYW1lLCB0eXBlLCBjb3JlLT5ib2FyZC5uYW1lKTsKQEAgLTEwNTgsMTIgKzEwNTksMTYgQEAKIAogCW11dGV4X2xvY2soJmRldmxpc3QpOwogCWN4ODhfaXJfZmluaShjb3JlKTsKLQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCisJaWYgKDAgPT0gY29yZS0+aTJjX3JjKSB7CisJCWlmIChjb3JlLT5pMmNfcnRjKQorCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvcmUtPmkyY19ydGMpOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmNvcmUtPmkyY19hZGFwKTsKKwl9CiAJbGlzdF9kZWwoJmNvcmUtPmRldmxpc3QpOwogCWlvdW5tYXAoY29yZS0+bG1taW8pOwogCWN4ODhfZGV2Y291bnQtLTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAlrZnJlZShjb3JlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBhZWY1Mjk3Li40ZmY0ZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMjQxLDYgKzI0MSwxMiBAQAogCS5kZW1vZF9pbml0ICAgID0gZHZpY29fZHVhbF9kZW1vZF9pbml0LAogfTsKIAorc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gKDB4MWUgPj4gMSksCisJLm5vX3R1bmVyICAgICAgPSAxLAorCS5pZjIgICAgICAgICAgID0gNDU2MDAsCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIHN0YXRpYyBpbnQgZG50dl9saXZlX2R2YnRfcHJvX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CkBAIC0xMTMxLDYgKzExMzcsMTYgQEAKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCiAJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnLAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKQEAgLTExNTIsNyArMTE2OCw3IEBACiAJCWZlMS0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwogCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggYzBmZjIzMC4uOTk2YjRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTk3LDM3ICs5Nyw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICJpMmMgZGV0YWNoIFtjbGllbnQ9JXNdXG4iLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi12b2lkIGN4ODhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKDAgIT0gY29yZS0+aTJjX3JjKQotCQlyZXR1cm47Ci0KLQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQotCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOwotCi0JaWYgKGNvcmUtPmdhdGVfY3RybCkKLQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGN4ODgwMF9pMmNfYWxnb190ZW1wbGF0ZSA9IHsKIAkuc2V0c2RhICA9IGN4ODgwMF9iaXRfc2V0c2RhLAogCS5zZXRzY2wgID0gY3g4ODAwX2JpdF9zZXRzY2wsCkBAIC0xNzMsMjAgKzE0MiwxNCBAQAogCW1lbWNweSgmY29yZS0+aTJjX2FsZ28sICZjeDg4MDBfaTJjX2FsZ29fdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihjb3JlLT5pMmNfYWxnbykpOwogCi0JaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQotCQljb3JlLT5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwotCWlmIChjb3JlLT5ib2FyZC5tcGVnICYgQ1g4OF9NUEVHX0RWQikKLQkJY29yZS0+aTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CiAKIAljb3JlLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBjaS0+ZGV2OwogCXN0cmxjcHkoY29yZS0+aTJjX2FkYXAubmFtZSxjb3JlLT5uYW1lLHNpemVvZihjb3JlLT5pMmNfYWRhcC5uYW1lKSk7CiAJY29yZS0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKIAljb3JlLT5pMmNfYWRhcC5pZCA9IEkyQ19IV19CX0NYMjM4OHg7Ci0JY29yZS0+aTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKLQljb3JlLT5pMmNfYWRhcC5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm07CiAJY29yZS0+aTJjX2FsZ28udWRlbGF5ID0gaTJjX3VkZWxheTsKIAljb3JlLT5pMmNfYWxnby5kYXRhID0gY29yZTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCxjb3JlKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCwgJmNvcmUtPnY0bDJfZGV2KTsKIAljb3JlLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmY29yZS0+aTJjX2FsZ287CiAJY29yZS0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmNvcmUtPmkyY19hZGFwOwogCXN0cmxjcHkoY29yZS0+aTJjX2NsaWVudC5uYW1lLCAiY3g4OHh4IGludGVybmFsIiwgSTJDX05BTUVfU0laRSk7CkBAIC0yMjIsOCArMTg1LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotRVhQT1JUX1NZTUJPTChjeDg4X2NhbGxfaTJjX2NsaWVudHMpOwotCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IDg2ODNkMTAuLmVjMDUzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtNDgsOCArNDgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXUzMiBncGlvX2FkZHI7CiAJdTMyIGxhc3RfZ3BpbzsKIAl1MzIgbWFza19rZXljb2RlOwpAQCAtMTQzLDI3ICsxNDIsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSAoc3RydWN0IGN4ODhfSVIgKilkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBjeDg4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBjeDg4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3g4OF9JUiwgd29yayk7CisJc3RydWN0IGN4ODhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDg4X0lSLCB3b3JrLndvcmspOwogCiAJY3g4OF9pcl9oYW5kbGVfa2V5KGlyKTsKLQltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaXItPnBvbGxpbmcpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CiB9CiAKIHZvaWQgY3g4OF9pcl9zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgY3g4OF9JUiAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCXNldHVwX3RpbWVyKCZpci0+dGltZXIsIGlyX3RpbWVyLCAodW5zaWduZWQgbG9uZylpcik7Ci0JCUlOSVRfV09SSygmaXItPndvcmssIGN4ODhfaXJfd29yayk7Ci0JCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBjeDg4X2lyX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKIAl9CiAJaWYgKGlyLT5zYW1wbGluZykgewogCQljb3JlLT5wY2lfaXJxbWFzayB8PSBQQ0lfSU5UX0lSX1NNUElOVDsKQEAgLTE3OSwxMCArMTcwLDggQEAKIAkJY29yZS0+cGNpX2lycW1hc2sgJj0gflBDSV9JTlRfSVJfU01QSU5UOwogCX0KIAotCWlmIChpci0+cG9sbGluZykgewotCQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9CisJaWYgKGlyLT5wb2xsaW5nKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjI2LDYgKzIxNSw4IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTQ2Niw2ICs0NTcsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKIAkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOwogCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggNzkxZTY5ZC4uNDM0MjM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00MSwxMSArNDEsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0vKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgotCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMjk4LDYgKzI5Myw3IEBACiB9Owogc3RhdGljIGNvbnN0IGludCBDWDg4MDBfQ1RMUyA9IEFSUkFZX1NJWkUoY3g4ODAwX2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3g4OF91c2VyX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfVVNFUl9DTEFTUywKIAlWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtNDM1LDggKzQzMSw3IEBACiAJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCQlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS5hdWRpb3JvdXRlOwotCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCQljYWxsX2FsbChjb3JlLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQl9CiAJCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KIAkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKQEAgLTgzMSw4ICs4MjYsNyBAQAogCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJCQlyb3V0ZS5pbnB1dCA9IGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGU7Ci0JCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQkJCWNhbGxfYWxsKGNvcmUsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJCQl9CiAJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLwogCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKQEAgLTg0Myw3ICs4MzcsNyBAQAogCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKIAkJCWN4ODhfc2V0X3N0ZXJlbyhjb3JlLFY0TDJfVFVORVJfTU9ERV9TVEVSRU8sMSk7CiAJCX0KLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsQVVEQ19TRVRfUkFESU8sTlVMTCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3JhZGlvKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC05MzcsNyArOTMxLDcgQEAKIAlrZnJlZShmaCk7CiAKIAlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvcmUtPnVzZXJzKSkKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwkJY2FsbF9hbGwoZGV2LT5jb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc2LDE1ICsxMjcwLDEyIEBACiAJCVsgQ1g4OF9WTVVYX0RWQiAgICAgICAgXSA9ICJEVkIiLAogCQlbIENYODhfVk1VWF9ERUJVRyAgICAgIF0gPSAiZm9yIGRlYnVnIG9ubHkiLAogCX07Ci0JdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgaW50IG4gPSBpLT5pbmRleDsKIAotCW4gPSBpLT5pbmRleDsKIAlpZiAobiA+PSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCA9PSBJTlBVVChuKS50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoaSwwLHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKIAlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJc3RyY3B5KGktPm5hbWUsaW5hbWVbSU5QVVQobikudHlwZV0pOwogCWlmICgoQ1g4OF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobikudHlwZSkgfHwKQEAgLTE0MDIsNyArMTM5Myw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBjb3JlLT5mcmVxOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTgsNyArMTQwOSw3IEBACiAJbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7CiAJY29yZS0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAljeDg4X25ld3N0YXRpb24oY29yZSk7Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAgKDEwKTsKQEAgLTE1MDAsNyArMTQ5MSw3IEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIwLDcgKzE1MTEsNiBAQAogCWlmICh1bmxpa2VseShhLT5pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MzUsNyArMTUyNSw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODkyLDEyICsxODgyLDMwIEBACiAJLyogbG9hZCBhbmQgY29uZmlndXJlIGhlbHBlciBtb2R1bGVzICovCiAKIAlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1dNODc3NSkKLQkJcmVxdWVzdF9tb2R1bGUoIndtODc3NSIpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkid204Nzc1IiwgIndtODc3NSIsIDB4MzYgPj4gMSk7CisKKwlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1RWQVVESU8pIHsKKwkJLyogVGhpcyBwcm9iZXMgZm9yIGEgdGRhOTg3NCBhcyBpcyB1c2VkIG9uIHNvbWUKKwkJICAgUGl4ZWx2aWV3IFVsdHJhIGJvYXJkcy4gKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGkyY19hZGRyW10gPSB7CisJCQkweGIwID4+IDEsIEkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLAorCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCBpMmNfYWRkcik7CisJfQogCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9HT0xEOgotCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfR09MRDoKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6IHsKKwkJc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBydGNfaW5mbyA9IHsKKwkJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZikKKwkJfTsKKwogCQlyZXF1ZXN0X21vZHVsZSgicnRjLWlzbDEyMDgiKTsKKwkJY29yZS0+aTJjX3J0YyA9IGkyY19uZXdfZGV2aWNlKCZjb3JlLT5pMmNfYWRhcCwgJnJ0Y19pbmZvKTsKKwl9CiAJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86CiAJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCA2MDI1ZmRkLi45YTQzZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CkBAIC0yMzEsNiArMjMxLDcgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9TQVRUUkFERV9TVDQyMDAgICAgICAgICA3NgogI2RlZmluZSBDWDg4X0JPQVJEX1RCU184OTEwICAgICAgICAgICAgICAgIDc3CiAjZGVmaW5lIENYODhfQk9BUkRfUFJPRl82MjAwICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJIDc5CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtMzAyLDcgKzMwMyw2IEBACiAJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICBzdG9wcGVyOwogCXUzMiAgICAgICAgICAgICAgICAgICAgY291bnQ7CiB9Owotc3RydWN0IGN4ODhfY29yZTsKIAogc3RydWN0IGN4ODhfY29yZSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgZGV2bGlzdDsKQEAgLTMyNyw2ICszMjcsOCBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdGF0ZSwgaTJjX3JjOwogCiAJLyogY29uZmlnIGluZm8gLS0gYW5hbG9nICovCisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKmkyY19ydGM7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgYm9hcmRucjsKIAlzdHJ1Y3QgY3g4OF9ib2FyZAkgICBib2FyZDsKIApAQCAtMzY1LDYgKzM2NywyMiBAQAogCWludAkJCSAgIGFjdGl2ZV9mZV9pZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4ODhfY29yZSAqdG9fY29yZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDg4X2NvcmUsIHY0bDJfZGV2KTsKK30KKworI2RlZmluZSBjYWxsX2FsbChjb3JlLCBvLCBmLCBhcmdzLi4uKSAJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIWNvcmUtPmkyY19yYykgewkJCQlcCisJCQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQkJCVwKKwkJCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7CVwKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZjb3JlLT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKTsgXAorCQkJaWYgKGNvcmUtPmdhdGVfY3RybCkJCQlcCisJCQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RydWN0IGN4ODgwMF9kZXY7CiBzdHJ1Y3QgY3g4ODAyX2RldjsKIApAQCAtNjEwLDggKzYyOCw2IEBACiAvKiBjeDg4LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gaW50IGN4ODhfaTJjX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHBjaV9kZXYgKnBjaSk7Ci1leHRlcm4gdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDI5ODgxMGQuLmJhMzcwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMTg5LDE3ICsxODksMjAgQEAKIAkJCQkJZHN0ICs9IGxlbjsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKKwkJCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJCQkiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWRcbiIsIGxlbik7CiAJCQl9CiAJCQllbHNlCiAJCQkJZGV2X3dhcm4oJnB1cmItPmRldi0+ZGV2LCAiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkXG4iLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCi0JCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWRcbiIsCisJCQkJCWRzdCwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QgKCZzLT5wZW5kaW5nX2lvKSAmJiAhcy0+cmVtb3ZlX3BlbmRpbmcgJiYgcy0+c3RhdGUgIT0gX3N0b3BwZWQpIHsKIAkJcy0+b3ZlcnJ1bnMrKzsKLQkJZXJyKCJvdmVycnVuICglZCkiLCBzLT5vdmVycnVucyk7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAib3ZlcnJ1biAoJWQpXG4iLCBzLT5vdmVycnVucyk7CiAJfQogCXdha2VfdXAgKCZzLT53YWl0KTsKIH0KQEAgLTIyMCwxMyArMjIzLDE0IEBACiAJd2hpbGUgKHRyYW5zZmVyX2xlbiA8IChzLT50b3RhbF9idWZmZXJfc2l6ZSA8PCAxMCkpIHsKIAkJYiA9IGt6YWxsb2Moc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiKSB7Ci0JCQllcnIoImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia3phbGxvYyhzaXplb2YoYnVmZl90KSk9PU5VTExcbiIpOwogCQkJZ290byBlcnI7CiAJCX0KIAkJYi0+cyA9IHM7CiAJCWItPnB1cmIgPSB1c2JfYWxsb2NfdXJiKHBhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIWItPnB1cmIpIHsKLQkJCWVycigidXNiX2FsbG9jX3VyYiA9PSBOVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInVzYl9hbGxvY191cmIgPT0gTlVMTFxuIik7CiAJCQlrZnJlZSAoYik7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMjM1LDcgKzIzOSw4IEBACiAJCWlmICghYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQlrZnJlZSAoYi0+cHVyYik7CiAJCQlrZnJlZSAoYik7Ci0JCQllcnIoImttYWxsb2MoJWQpPT1OVUxMIiwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia21hbGxvYyglZCk9PU5VTExcbiIsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJZ290byBlcnI7CiAJCX0KIApAQCAtMjc5LDEwICsyODQsMTEgQEAKIAogCXJldD11c2JfYnVsa19tc2cocy0+dXNiZGV2LCBwaXBlLCBwYi0+ZGF0YSwgcGItPnNpemUsICZhY3R1YWxfbGVuZ3RoLCAxMDApOwogCWlmKHJldDwwKSB7Ci0JCWVycigiZGFidXNiOiB1c2JfYnVsa19tc2cgZmFpbGVkKCVkKSIscmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkidXNiX2J1bGtfbXNnIGZhaWxlZCglZClcbiIsIHJldCk7CiAKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgewotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yOTEsNyArMjk3LDcgQEAKIAlpZiggcmV0ID09IC1FUElQRSApIHsKIAkJZGV2X3dhcm4oJnMtPnVzYmRldi0+ZGV2LCAiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uXG4iKTsKIAkJaWYodXNiX2NsZWFyX2hhbHQocy0+dXNiZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpKSkKLQkJCWVycigicmVxdWVzdCBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVxdWVzdCBmYWlsZWRcbiIpOwogCX0KIAogCXBiLT5zaXplID0gYWN0dWFsX2xlbmd0aDsKQEAgLTMwNSw3ICszMTEsOCBAQAogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW4pOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIGxlbik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzI3LDEzICszMzQsMTQgQEAKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmVjOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bmluaXRpYWxpemVkX3Zhcihmdyk7CiAKIAlkYmcoIkVudGVyIGRhYnVzYl9sb2FkbWVtIChpbnRlcm5hbCkiKTsKIAogCXJldCA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsICJkYWJ1c2IvZmlybXdhcmUuZnciLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9maXJtd2FyZS5md1wiOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvZmlybXdhcmUuZndcIjogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBkYWJ1c2JfODA1MV9yZXNldCAocywgMSk7CkBAIC0zNDYsOSArMzU0LDEwIEBACiAJCXJldCA9IGRhYnVzYl93cml0ZW1lbShzLCBiZTMyX3RvX2NwdShyZWMtPmFkZHIpLCByZWMtPmRhdGEsCiAJCQkJICAgICAgIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpIiwgcmV0LAotCQkJICAgIGJlMzJfdG9fY3B1KHJlYy0+YWRkciksIHJlYy0+ZGF0YSwKLQkJCSAgICBiZTE2X3RvX2NwdShyZWMtPmxlbikpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCXJldCwgYmUzMl90b19jcHUocmVjLT5hZGRyKSwKKwkJCQlyZWMtPmRhdGEsIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM5NiwxMyArNDA1LDE1IEBACiAJZGJnKCJFbnRlciBkYWJ1c2JfZnBnYV9kb3dubG9hZCAoaW50ZXJuYWwpIik7CiAKIAlpZiAoIWIpIHsKLQkJZXJyKCJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTCIpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiZGFidXNiL2JpdHN0cmVhbS5iaW4iLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOwogCQlrZnJlZShiKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00MjUsNyArNDM2LDcgQEAKIAkJbWVtY3B5IChiLT5kYXRhICsgNCwgZnctPmRhdGEgKyA3NCArIG4sIDYwKTsKIAkJcmV0ID0gZGFidXNiX2J1bGsgKHMsIGIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJkYWJ1c2JfYnVsayBmYWlsZWQuIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgImRhYnVzYl9idWxrIGZhaWxlZC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJbWRlbGF5ICgxKTsKQEAgLTQ3OCw5ICs0ODksMTEgQEAKIAogCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKGVuZC0+cHVyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZCIsIHJldCk7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZFxuIiwgcmV0KTsKIAkJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCi0JCQkJCWVycigic3RhcnRyZWs6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkJInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQllbHNlCkBAIC01MjMsNyArNTM2LDggQEAKIAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCi0JCQllcnIoImVycm9yOiByZWNfYnVmX2xpc3QgaXMgZW1wdHkiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCSJlcnJvcjogcmVjX2J1Zl9saXN0IGlzIGVtcHR5XG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTU1Miw3ICs1NjYsOCBAQAogCiAJCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWVycigiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJlcnJvcjogc3RpbGwgbm8gYnVmZmVyIGF2YWlsYWJsZS5cbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwpAQCAtNTczLDcgKzU4OCw3IEBACiAJCWRiZygiY29weV90b191c2VyOiVwICVwICVkIixidWYsIHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHMtPnJlYWRwdHIsIGNudCk7CiAKIAkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzLT5yZWFkcHRyLCBjbnQpKSB7Ci0JCQllcnIoInJlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnI7CkBAIC01ODcsNyArNjAyLDggQEAKIAkJaWYgKHMtPnJlYWRwdHIgPT0gcHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkJLy8gZmluaXNoZWQsIHRha2UgbmV4dCBidWZmZXIKIAkJCWlmIChkYWJ1c2JfYWRkX2J1Zl90YWlsIChzLCAmcy0+ZnJlZV9idWZmX2xpc3QsICZzLT5yZWNfYnVmZl9saXN0KSkKLQkJCQllcnIoInJlYWQ6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJyZWFkOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQlzLT5yZWFkcHRyID0gMDsKIAkJfQogCX0KQEAgLTYyMyw3ICs2MzksNyBAQAogCX0KIAlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMSkgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwotCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcy0+b3BlbmVkID0gMTsKQEAgLTY0OCw3ICs2NjQsNyBAQAogCiAJaWYgKCFzLT5yZW1vdmVfcGVuZGluZykgewogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKQotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJfQogCWVsc2UKIAkJd2FrZV91cCAoJnMtPnJlbW92ZV9vayk7CkBAIC02NTcsNyArNjczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGRhYnVzYl9pb2N0bCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXBidWxrX3RyYW5zZmVyX3QgcGJ1bGs7CkBAIC02NjYsMTMgKzY4MiwxNyBAQAogCiAJZGJnKCJkYWJ1c2JfaW9jdGwiKTsKIAotCWlmIChzLT5yZW1vdmVfcGVuZGluZykKKwlsb2NrX2tlcm5lbCgpOworCWlmIChzLT5yZW1vdmVfcGVuZGluZykgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOworCX0KIAogCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAogCWlmICghcy0+dXNiZGV2KSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzEzLDYgKzczMyw3IEBACiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnMtPm11dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzIxLDcgKzc0Miw3IEBACiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkucmVhZCA9CQlkYWJ1c2JfcmVhZCwKLQkuaW9jdGwgPQlkYWJ1c2JfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0JZGFidXNiX2lvY3RsLAogCS5vcGVuID0JCWRhYnVzYl9vcGVuLAogCS5yZWxlYXNlID0JZGFidXNiX3JlbGVhc2UsCiB9OwpAQCAtNzY0LDcgKzc4NSw3IEBACiAJcy0+ZGV2bnVtID0gaW50Zi0+bWlub3I7CiAKIAlpZiAodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHVzYmRldikgPCAwKSB7Ci0JCWVycigicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIHJlamVjdDsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MjEzMSkgewpAQCAtNzc1LDcgKzc5Niw3IEBACiAJCWRhYnVzYl9mcGdhX2Rvd25sb2FkIChzLCBOVUxMKTsKIAogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKSB7Ci0JCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlnb3RvIHJlamVjdDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggZjEzMmUzMS4uMDEzMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKIAotc3RhdGljIGludCBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoc3RydWN0IGVtMjh4eCAqZGV2KQorc3RhdGljIGludCBlbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oc3RydWN0IGVtMjh4eCAqZGV2KQogewogCWludCBpOwogCkBAIC02Niw2ICs2Niw3IEBACiAJCQl1c2Jfa2lsbF91cmIoZGV2LT5hZGV2LnVyYltpXSk7CiAJCWVsc2UKIAkJCXVzYl91bmxpbmtfdXJiKGRldi0+YWRldi51cmJbaV0pOworCiAJCXVzYl9mcmVlX3VyYihkZXYtPmFkZXYudXJiW2ldKTsKIAkJZGV2LT5hZGV2LnVyYltpXSA9IE5VTEw7CiAKQEAgLTg3LDYgKzg4LDIwIEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgIHN0cmlkZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICAgKnJ1bnRpbWU7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6ICAgICAgICAgICAgLyogZXJyb3IgKi8KKwkJZHByaW50aygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJaWYgKGRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pIHsKIAkJc3Vic3RyZWFtID0gZGV2LT5hZGV2LmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTEzNyw5ICsxNTIsNiBAQAogCX0KIAl1cmItPnN0YXR1cyA9IDA7CiAKLQlpZiAoZGV2LT5hZGV2LnNodXRkb3duKQotCQlyZXR1cm47Ci0KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWVtMjh4eF9lcnJkZXYoInJlc3VibWl0IG9mIGF1ZGlvIHVyYiBmYWlsZWQgKGVycm9yPSVpKVxuIiwKQEAgLTE5Nyw4ICsyMDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfQVVESU9fQlVGUzsgaSsrKSB7CiAJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmFkZXYudXJiW2ldLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVyckNvZGUpIHsKLQkJCWVtMjh4eF9pc29jX2F1ZGlvX2RlaW5pdChkZXYpOwotCisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJfQpAQCAtMjEzLDE0ICsyMjQsMTYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU46Ci0JCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09GRiAmJiBhcmcgPT0gMSkgeworCQlpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PRkYgJiYKKwkJICAgIGFyZyA9PSBFTTI4WFhfU1RBUlRfQVVESU8pIHsKIAkJCWRldi0+YWRldi5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PTjsKIAkJCWVtMjh4eF9pbml0X2F1ZGlvX2lzb2MoZGV2KTsKLQkJfSBlbHNlIGlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OICYmIGFyZyA9PSAwKSB7CisJCX0gZWxzZSBpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTiAmJgorCQkJICAgYXJnID09IEVNMjhYWF9TVE9QX0FVRElPKSB7CiAJCQlkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT0ZGOwotCQkJZW0yOHh4X2lzb2NfYXVkaW9fZGVpbml0KGRldik7CisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQW4gdW5kZXJydW4gdmVyeSBsaWtlbHkgb2NjdXJyZWQuICIKKwkJCWVtMjh4eF9lcnJkZXYoIkFuIHVuZGVycnVuIHZlcnkgbGlrZWx5IG9jY3VycmVkLiAiCiAJCQkJCSJJZ25vcmluZyBpdC5cbiIpOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMjM0LDcgKzI0Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7CiAKLQlkcHJpbnRrKCJBbG9jYXRpbmcgdmJ1ZmZlclxuIik7CisJZHByaW50aygiQWxsb2NhdGluZyB2YnVmZmVyXG4iKTsKIAlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCiAJCQlyZXR1cm4gMDsKQEAgLTMwMiw3ICszMTUsOSBAQAogCQlkcHJpbnRrKCJjaGFuZ2luZyBhbHRlcm5hdGUgbnVtYmVyIHRvIDdcbiIpOwogCX0KIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZGV2LT5hZGV2LnVzZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCWRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC0zMTcsMjIgKzMzMiwxNSBAQAogc3RhdGljIGludCBzbmRfZW0yOHh4X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JZGV2LT5hZGV2LnVzZXJzLS07CiAKIAlkcHJpbnRrKCJjbG9zaW5nIGRldmljZVxuIik7CiAKIAlkZXYtPm11dGUgPSAxOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZGV2LT5hZGV2LnVzZXJzLS07CiAJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQlpZiAoZGV2LT5hZGV2LnVzZXJzID09IDAgJiYgZGV2LT5hZGV2LnNodXRkb3duID09IDEpIHsKLQkJZHByaW50aygiYXVkaW8gdXNlcnM6ICVkXG4iLCBkZXYtPmFkZXYudXNlcnMpOwotCQlkcHJpbnRrKCJkaXNhYmxpbmcgYXVkaW8gc3RyZWFtIVxuIik7Ci0JCWRldi0+YWRldi5zaHV0ZG93biA9IDA7Ci0JCWRwcmludGsoInJlbGVhc2VkIGxvY2tcbiIpOwotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Myw3ICszNzEsNyBAQAogCWRwcmludGsoIlN0b3AgY2FwdHVyZSwgaWYgbmVlZGVkXG4iKTsKIAogCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OKQotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKKwkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgRU0yOFhYX1NUT1BfQVVESU8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzcsMzMgKzM4NSw0MCBAQAogCQkJCSAgICAgIGludCBjbWQpCiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CiAKLQlkcHJpbnRrKCJTaG91bGQgJXMgY2FwdHVyZVxuIiwgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCk/Ci0JCQkJICAgICAgICJzdGFydCI6ICJzdG9wIik7CisJZHByaW50aygiU2hvdWxkICVzIGNhcHR1cmVcbiIsIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8KKwkJCQkgICAgICAgInN0YXJ0IiA6ICJzdG9wIik7CisKKwlzcGluX2xvY2soJmRldi0+YWRldi5zbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAxKTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVEFSVF9BVURJTyk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJZGV2LT5hZGV2LnNodXRkb3duID0gMTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVE9QX0FVRElPKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQorCisJc3Bpbl91bmxvY2soJmRldi0+YWRldi5zbG9jayk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9lbTI4eHhfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQogCQkJCQkJICAgICpzdWJzdHJlYW0pCiB7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVtMjh4eCAqZGV2OwogCXNuZF9wY21fdWZyYW1lc190IGh3cHRyX2RvbmU7CiAKIAlkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+YWRldi5zbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAlod3B0cl9kb25lID0gZGV2LT5hZGV2Lmh3cHRyX2RvbmVfY2FwdHVyZTsKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBod3B0cl9kb25lOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAzYjNjYTNmLi4wZjQ4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMTIyLDYgKzEyMiwyMiBAQAogCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCiB9OwogCisvKiBNdXRlL3VubXV0ZSAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3R2X2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk1LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3N2aWRfZ3Bpb1tdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTQsCQk3LAkJMTB9LAorCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCit9OworCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGNvbXByb19tdXRlX2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk2LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKwogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwogICovCkBAIC0xODMsNiArMTk5LDI1IEBACiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKKwlbRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDBdID0geworCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBUVlIyMDAiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSB9LAorCX0sCiAJW0VNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKQEAgLTIyNSw3ICsyNjAsNyBAQAogCQkubmFtZSAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgMiIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAotCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFfAorCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFIHwKIAkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaGFzX21zcDM0eHggID0gMSwKQEAgLTM1MCwyNiArMzg1LDYgQEAKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKLQlbRU0yODIxX0JPQVJEX1BST0xJTktfUExBWVRWX1VTQjJdID0gewotCQkubmFtZSAgICAgICAgID0gIlNJSUcgQVZUdW5lci1QVlIvUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCi0JCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywJLyogdW5rbm93bj8gKi8KLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwJLyogdW5rbm93bj8gKi8KLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAotCQkuaW5wdXQgICAgICAgID0geyB7Ci0JCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKLQkJfSwgewotCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0gfSwKLQl9LAogCVtFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJTdXBlcmNvbXAgVVNCIDIuMCBUViIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKQEAgLTQ5OCw3ICs1MTMsNyBAQAogCX0sCiAJW0VNMjg2MV9CT0FSRF9ZQUtVTU9fTU9WSUVfTUlYRVJdID0gewogCQkubmFtZSAgICAgICAgICA9ICJZYWt1bW8gTW92aWVNaXhlciIsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KIAkJLmRlY29kZXIgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC02MDQsNiArNjE5LDcgQEAKIAkJLm10c19maXJtd2FyZSA9IDEsCiAJCS5oYXNfZHZiICAgICAgPSAxLAogCQkuZHZiX2dwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTYyOCw2ICs2NDQsNyBAQAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkubXRzX2Zpcm13YXJlID0gMSwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTg0MiwxMSArODU5LDExIEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfR1JBQkJFRVhfVVNCMjgwMF0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiZU1QSUEgVGVjaG5vbG9neSwgSW5jLiBHcmFiQmVlWCsgVmlkZW8gRW5jb2RlciIsCi0JCS5pc19lbTI4MDAgICAgPSAxLAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIGNhcHR1cmUgb25seSBib2FyZCAqLwotCQkuaW5wdXQgICAgICAgID0geyB7CisJCS5uYW1lICAgICAgID0gImVNUElBIFRlY2hub2xvZ3ksIEluYy4gR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIiLAorCQkuaXNfZW0yODAwICA9IDEsCisJCS5kZWNvZGVyICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS50dW5lcl90eXBlID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KKwkJLmlucHV0ICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLApAQCAtODk3LDcgKzkxNCw3IEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBEYXp6bGUgRFZDIDkwL0RWQyAxMDAiLAorCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAogCQkuaW5wdXQgICAgICAgID0geyB7CkBAIC05NTIsNyArOTY5LDcgQEAKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCisJCS5uYW1lICAgICAgICAgPSAiU0lJRyBBVlR1bmVyLVBWUiAvIFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wIiwKIAkJLmhhc19zbmFwc2hvdF9idXR0b24gPSAxLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLApAQCAtMTE5OCw3ICsxMjE1LDkgQEAKIAkJLmhhc19kdmIgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgPSBrd29ybGRfMzMwdV9kaWdpdGFsLAogCQkueGNsayAgICAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xMk1IWiwKLQkJLmkyY19zcGVlZCAgICAgICAgPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8IEVNMjhYWF9JMkNfRUVQUk9NX09OX0JPQVJEIHwgRU0yOFhYX0kyQ19FRVBST01fS0VZX1ZBTElELAorCQkuaTJjX3NwZWVkICAgICAgICA9IEVNMjhYWF9JMkNfQ0xLX1dBSVRfRU5BQkxFIHwKKwkJCQkgICAgRU0yOFhYX0kyQ19FRVBST01fT05fQk9BUkQgfAorCQkJCSAgICBFTTI4WFhfSTJDX0VFUFJPTV9LRVlfVkFMSUQsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xMjIzLDIxICsxMjQyLDg4IEBACiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAorCQkubXV0ZV9ncGlvICAgID0gY29tcHJvX211dGVfZ3BpbywKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gY29tcHJvX3VubXV0ZV90dl9ncGlvLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBjb21wcm9fdW5tdXRlX3N2aWRfZ3BpbywKKwkJfSB9LAorCX0sCisJW0VNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTJdID0geworCQkubmFtZQkgICAgICA9ICJLYWlvbXkgVFZuUEMgVTIiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICA9IDB4NjEsCisJCS5tdHNfZmlybXdhcmUgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19rYWlvbXksCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKKwkJLnJhZGlvCQk9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0KKwl9LAorCVtFTTI4NjBfQk9BUkRfRUFTWUNBUF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiRWFzeSBDYXAgQ2FwdHVyZSBEQy02MCIsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWl0gPSB7CisJCS5uYW1lICAgICAgID0gIklPLURBVEEgR1YtTVZQL1NaIiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogQ29tcG9zaXRlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgeWV0ICovCisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogUy12aWRlbyBoYXMgbm90IGJlZW4gdGVzdGVkIHlldCAqLworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJfSB9LAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGUgW10gPSB7CitzdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yNzUwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTEpLApAQCAtMTI2MCw2ICsxMzQ2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAwVSB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMyksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzA1KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9LV09STERfRFZCXzMwNVUgfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMTApLApAQCAtMTI3OCw2ICsxMzY2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9HUkFCQkVFWF9VU0IyODAwIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzU3KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg3MF9CT0FSRF9LV09STERfMzU1VSB9LAorCXsgVVNCX0RFVklDRSgweDFiODAsIDB4ZTMwMiksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwIH0sIC8qIEthaXNlciBCYWFzIFZpZGVvIHRvIERWRCBtYWtlciAqLwogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNiksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNGMpLApAQCAtMTMzMCw2ICsxNDIwLDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwOTNiLCAweGEwMDUpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODYxX0JPQVJEX1BMRVhUT1JfUFhfVFYxMDBVIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwNTE1KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1ogfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVtMjh4eF9pZF90YWJsZSk7CkBAIC0xMzM3LDcgKzE0MjksNyBAQAogLyoKICAqIEVFUFJPTSBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X2hhc2hfdGFibGUgZW0yOHh4X2VlcHJvbV9oYXNoIFtdID0geworc3RhdGljIHN0cnVjdCBlbTI4eHhfaGFzaF90YWJsZSBlbTI4eHhfZWVwcm9tX2hhc2hbXSA9IHsKIAkvKiBQL046IFNBIDYwMDAyMDcwNDY1IFR1bmVyOiBUVkY3NTMzLU1GICovCiAJezB4NmNlMDVhOGYsIEVNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LAogCXsweDcyY2M1YThiLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LApAQCAtMTM0OSw2ICsxNDQxLDcgQEAKIAl7MHhiMDZhMzJjMywgRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAogCXsweGY1MTIwMGUzLCBFTTI4MDBfQk9BUkRfVkdFQVJfUE9DS0VUVFYsIFRVTkVSX0xHX1BBTF9ORVdfVEFQQ30sCiAJezB4MWJhNTAwODAsIEVNMjg2MF9CT0FSRF9QT0lOVE5JWF9JTlRSQU9SQUxfQ0FNRVJBLCBUVU5FUl9BQlNFTlR9LAorCXsweGM1MTIwMGUzLCBFTTI4MjBfQk9BUkRfR0FETUVJX1RWUjIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIH07CiAKIGludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKQEAgLTEzNjgsNyArMTQ2MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbTI4eHhfdHVuZXJfY2FsbGJhY2spOwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJbWVtY3B5KCZkZXYtPmJvYXJkLCAmZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXSwgc2l6ZW9mKGRldi0+Ym9hcmQpKTsKIApAQCAtMTUwNCw2ICsxNTk3LDM0IEBACiAJCS8qIGVuYWJsZXMgYXVkaW8gZm9yIHRoYXQgZGV2aWNlcyAqLwogCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZkKTsKIAkJYnJlYWs7CisKKwljYXNlIEVNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTI6CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgwNyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDBkLCAiXHg0MiIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCW1zbGVlcCgxMCk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJbXNsZWVwKDEwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg3ZiIsIDEpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZiIiwgMSk7CisKKwkJYnJlYWs7CisJY2FzZSBFTTI4NjBfQk9BUkRfRUFTWUNBUDoKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmOCIsIDEpOworCQlicmVhazsKKworCWNhc2UgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWjoKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZik7CisJCW1zbGVlcCg3MCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZjcpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKKwkJbXNsZWVwKDcwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZCk7CisJCW1zbGVlcCg3MCk7CisJCWJyZWFrOwogCX0KIAogCWVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+Ym9hcmQudHVuZXJfZ3Bpbyk7CkBAIC0xNjEwLDcgKzE3MzEsNyBAQAogCQkJZW0yOHh4X2VycmRldigiSWYgdGhlIGJvYXJkIHdlcmUgbWlzc2RldGVjdGVkLCAiCiAJCQkJICAgICAgInBsZWFzZSBlbWFpbCB0aGlzIGxvZyB0bzpcbiIpOwogCQkJZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0ICIKLQkJCQkgICAgICAiIDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwkJCQkgICAgICAiIDxsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGRldGVjdGVkIGFzICVzXG4iLAogCQkJCSAgICAgIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSk7CiAKQEAgLTE2NDIsNyArMTc2Myw3IEBACiAJCQllbTI4eHhfZXJyZGV2KCJJZiB0aGUgYm9hcmQgd2VyZSBtaXNzZGV0ZWN0ZWQsICIKIAkJCQkgICAgICAicGxlYXNlIGVtYWlsIHRoaXMgbG9nIHRvOlxuIik7CiAJCQllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgIgotCQkJCSAgICAgICIgPHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbT5cbiIpOworCQkJCSAgICAgICIgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQkJZW0yOHh4X2VycmRldigiQm9hcmQgZGV0ZWN0ZWQgYXMgJXNcbiIsCiAJCQkJICAgICAgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lKTsKIApAQCAtMTY1NSw3ICsxNzc2LDcgQEAKIAllbTI4eHhfZXJyZGV2KCJZb3UgbWF5IHRyeSB0byB1c2UgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0byAiCiAJCSAgICAgICJ3b3JrYXJvdW5kIHRoYXQuXG4iKTsKIAllbTI4eHhfZXJyZGV2KCJQbGVhc2Ugc2VuZCBhbiBlbWFpbCB3aXRoIHRoaXMgbG9nIHRvOlxuIik7Ci0JZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0IDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGVlcHJvbSBoYXNoIGlzIDB4JTA4bHhcbiIsIGRldi0+aGFzaCk7CiAJZW0yOHh4X2VycmRldigiQm9hcmQgaTJjIGRldmljZWxpc3QgaGFzaCBpcyAweCUwOGx4XG4iLCBkZXYtPmkyY19oYXNoKTsKIApAQCAtMTgwMCw2ICsxOTIxLDggQEAKIAkJcmVxdWVzdF9tb2R1bGUoInR2cDUxNTAiKTsKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgPT0gRU0yOFhYX1RWQVVESU8pCisJCXJlcXVlc3RfbW9kdWxlKCJ0dmF1ZGlvIik7CiAjZW5kaWYKIAogCWVtMjh4eF9jb25maWdfdHVuZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCmluZGV4IDk0ZmIxYjYuLjhmMTk5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMzMsOCArMzMsOCBAQAogLyogI2RlZmluZSBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnOwotbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjb3JlX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7Cittb2R1bGVfcGFyYW0oY29yZV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbY29yZV0iKTsKIAogI2RlZmluZSBlbTI4eHhfY29yZWRiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAoY29yZV9kZWJ1ZykgXApAQCAtNDIsOCArNDIsOCBAQAogCQkJIGRldi0+bmFtZSwgX19mdW5jX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX2RlYnVnOwotbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZyxpbnQsMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlZ19kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOworbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVnX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOwogCiAjZGVmaW5lIGVtMjh4eF9yZWdkYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKHJlZ19kZWJ1ZykgXApAQCAtNzcsNyArNzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZWdfZGVidWcpIHsKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiSU46ICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWlmIChyZWdfZGVidWcpIHsKIAkJaW50IGJ5dGU7CiAKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiT1VUOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggPj4+IiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC0zNzgsNiArMzc4LDExIEBACiAJCX0KIAl9CiAKKwlpZiAoZGV2LT5ib2FyZC5tdXRlX2dwaW8gJiYgZGV2LT5tdXRlKQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLm11dGVfZ3Bpbyk7CisJZWxzZQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBJTlBVVChkZXYtPmN0bF9pbnB1dCktPmdwaW8pOworCiAJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgaW5wdXQsIDB4YzApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNDI0LDcgKzQyOSw3IEBACiAKIAl4Y2xrID0gZGV2LT5ib2FyZC54Y2xrICYgMHg3ZjsKIAlpZiAoIWRldi0+bXV0ZSkKLQkJeGNsayB8PSAweDgwOworCQl4Y2xrIHw9IEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURTsKIAogCXJldCA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssIHhjbGspOwogCWlmIChyZXQgPCAwKQpAQCAtNDYyLDcgKzQ2Nyw4IEBACiAJCWlmIChkZXYtPmN0bF9hb3V0cHV0ICYgRU0yOFhYX0FPVVRfUENNX0lOKSB7CiAJCQlpbnQgc2VsID0gYWM5N19yZXR1cm5fcmVjb3JkX3NlbGVjdChkZXYtPmN0bF9hb3V0cHV0KTsKIAotCQkJLyogVXNlIHRoZSBzYW1lIGlucHV0IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzICovCisJCQkvKiBVc2UgdGhlIHNhbWUgaW5wdXQgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQKKwkJCSAgIGNoYW5uZWxzICovCiAJCQlzZWwgfD0gKHNlbCA8PCA4KTsKIAogCQkJZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBBQzk3X1JFQ09SRF9TRUxFQ1QsIHNlbCk7CkBAIC02OTgsNyArNzA0LDcgQEAKIAkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjMyX1ZTQ0FMRUxPVywgKGNoYXIgKilidWYsIDIpOwogCQkvKiBpdCBzZWVtcyB0aGF0IGJvdGggSCBhbmQgViBzY2FsZXJzIG11c3QgYmUgYWN0aXZlCiAJCSAgIHRvIHdvcmsgY29ycmVjdGx5ICovCi0JCW1vZGUgPSAoaCB8fCB2KT8gMHgzMDogMHgwMDsKKwkJbW9kZSA9IChoIHx8IHYpID8gMHgzMCA6IDB4MDA7CiAJfQogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4WFhfUjI2X0NPTVBSLCBtb2RlLCAweDMwKTsKIH0KQEAgLTgyNyw2ICs4MzMsMTkgQEAKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBlbTI4eHgsIHZpZHEpOwogCWludCByYywgaTsKIAorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6ICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKwljYXNlIC1FVElNRURPVVQ6ICAgIC8qIE5BSyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJZGVmYXVsdDogICAgICAgICAgICAvKiBlcnJvciAqLworCQllbTI4eHhfaXNvY2RiZygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJLyogQ29weSBkYXRhIGZyb20gVVJCICovCiAJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKIAlyYyA9IGRldi0+aXNvY19jdGwuaXNvY19jb3B5KGRldiwgdXJiKTsKQEAgLTk0NSw3ICs5NjQsNyBAQAogCQkJZW0yOHh4X2VycigidW5hYmxlIHRvIGFsbG9jYXRlICVpIGJ5dGVzIGZvciB0cmFuc2ZlciIKIAkJCQkJIiBidWZmZXIgJWklc1xuIiwKIAkJCQkJc2Jfc2l6ZSwgaSwKLQkJCQkJaW5faW50ZXJydXB0KCk/IiB3aGlsZSBpbiBpbnQiOiIiKTsKKwkJCQkJaW5faW50ZXJydXB0KCkgPyAiIHdoaWxlIGluIGludCIgOiAiIik7CiAJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC05NjMsNyArOTgyLDcgQEAKIAkJCQkgZW0yOHh4X2lycV9jYWxsYmFjaywgZG1hX3EsIDEpOwogCiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBtYXhfcGFja2V0czsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJCWsgPSAwOwogCQlmb3IgKGogPSAwOyBqIDwgbWF4X3BhY2tldHM7IGorKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IDlhZDg1MjcuLmZjZDI1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlICJsZ2R0MzMweC5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKICNpbmNsdWRlICJzNWgxNDA5LmgiCi0jaWZkZWYgRU0yOFhYX0RSWDM5N1hEX1NVUFBPUlQKLSNpbmNsdWRlICJkcngzOTd4RC5oIgotI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCBkNjlmMGVmLi4wMmMxMmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC00MDIsMTAgKzQwMiwxMiBAQAogCQkJCSBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRJMlMgYXVkaW8sIDMgc2FtcGxlIHJhdGVzXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEkyUyBhdWRpbywgMyBzYW1wbGUgcmF0ZXNcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTA4LDEyICs1MTAsMTcgQEAKIAkJZHByaW50azEoMSwgImF0dGFjaF9pbmZvcm06IHR2cDUxNTAgZGV0ZWN0ZWQuXG4iKTsKIAkJYnJlYWs7CiAKKwljYXNlIDB4YjA6CisJCWRwcmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiB0ZGE5ODc0IGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlpZiAoIWRldi0+dHVuZXJfYWRkcikKIAkJCWRldi0+dHVuZXJfYWRkciA9IGNsaWVudC0+YWRkcjsKIAogCQlkcHJpbnRrMSgxLCAiYXR0YWNoIGluZm9ybTogZGV0ZWN0ZWQgSTJDIGFkZHJlc3MgJXhcbiIsCiAJCQkJY2xpZW50LT5hZGRyIDw8IDEpOworCQlkcHJpbnRrMSgxLCAiZHJpdmVyIGlkICVkXG4iLCBjbGllbnQtPmRyaXZlci0+aWQpOwogCiAJfQogCkBAIC01NTIsNiArNTU5LDcgQEAKIAlbMHg4MCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHg4OCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGIwID4+IDFdID0gInRkYTk4NzQiLAogCVsweGI4ID4+IDFdID0gInR2cDUxNTBhIiwKIAlbMHhiYSA+PiAxXSA9ICJ0dnA1MTUwYSIsCiAJWzB4YzAgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCAwNDQzYWZlLi5hNWFiZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtNjgsOCArNjgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXVuc2lnbmVkIGludCBsYXN0X3RvZ2dsZToxOwogCXVuc2lnbmVkIGludCBsYXN0X3JlYWRjb3VudDsKIAl1bnNpZ25lZCBpbnQgcmVwZWF0X2ludGVydmFsOwpAQCAtMjkyLDMyICsyOTEsMjMgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IChzdHJ1Y3QgZW0yOHh4X0lSICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmspOworCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmsud29yayk7CiAKIAllbTI4eHhfaXJfaGFuZGxlX2tleShpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RhcnQoc3RydWN0IGVtMjh4eF9JUiAqaXIpCiB7Ci0Jc2V0dXBfdGltZXIoJmlyLT50aW1lciwgaXJfdGltZXIsICh1bnNpZ25lZCBsb25nKWlyKTsKLQlJTklUX1dPUksoJmlyLT53b3JrLCBlbTI4eHhfaXJfd29yayk7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgZW0yOHh4X2lyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RvcChzdHJ1Y3QgZW0yOHh4X0lSICppcikKIHsKLQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogfQogCiBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4ZTYxYjJjLi41NzU0NzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTg2LDcgKzE4Niw4IEBACiAJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgxKVxuIiwKIAkJCSAgICAgICAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSkgLQogCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKLQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplIC0gKGNoYXIgKilzdGFydHdyaXRlOworCQlsZW5jb3B5ID0gcmVtYWluOwogCX0KIAlpZiAobGVuY29weSA8PSAwKQogCQlyZXR1cm47CkBAIC0yMDIsNyArMjAzLDggQEAKIAkJZWxzZQogCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKIAotCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkgeworCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCisJCSAgICBidWYtPnZiLnNpemUpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgyKVxuIiwKIAkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KIAkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOwpAQCAtMzQ3LDcgKzM0OSw3IEBACiAJCX0KIAkJaWYgKHBbMF0gPT0gMHgyMiAmJiBwWzFdID09IDB4NWEpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlZCwgbGVuZ3RoPSVpLCAlc1xuIiwgcFsyXSwKLQkJCQkgICAgICAgbGVuLCAocFsyXSAmIDEpPyAib2RkIiA6ICJldmVuIik7CisJCQkJICAgICAgIGxlbiwgKHBbMl0gJiAxKSA/ICJvZGQiIDogImV2ZW4iKTsKIAogCQkJaWYgKCEocFsyXSAmIDEpKSB7CiAJCQkJaWYgKGJ1ZiAhPSBOVUxMKQpAQCAtNDc2LDcgKzQ3OCw5IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfYnVmZmVyLAorCQkJCQkJCXZiKTsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CiAJc3RydWN0IGVtMjh4eCAgICAgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OwogCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKQEAgLTQ4OSw3ICs0OTMsOSBAQAogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKIAkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICpidWYgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgKmJ1ZiAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkgICAgc3RydWN0IGVtMjh4eF9idWZmZXIsCisJCQkJCQkgICAgdmIpOwogCXN0cnVjdCBlbTI4eHhfZmggICAgICAgKmZoICAgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBlbTI4eHggICAgICAgICAgKmRldiAgPSAoc3RydWN0IGVtMjh4eCAqKWZoLT5kZXY7CiAKQEAgLTUzNCw2ICs1NDAsMTMgQEAKIAkJCSZyb3V0ZSk7CiAJfQogCisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgIT0gRU0yOFhYX05PQURFQ09ERVIpIHsKKwkJcm91dGUuaW5wdXQgPSBkZXYtPmN0bF9haW5wdXQ7CisJCXJvdXRlLm91dHB1dCA9IGRldi0+Y3RsX2FvdXRwdXQ7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsCisJCQkmcm91dGUpOworCX0KKwogCWVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CiB9CiAKQEAgLTU1Nyw3ICs1NzAsNyBAQAogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKIHsKLQlyZXR1cm4gKGZoLT5zdHJlYW1fb24pOworCXJldHVybiBmaC0+c3RyZWFtX29uOwogfQogCiBzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKQEAgLTc5MSw3ICs4MDQsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgKmZoICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTAwOCw4ICsxMDIxLDEzIEBACiAKIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKLQllbHNlCisJZWxzZSB7CiAJCXJjID0gZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCWlmIChyYyA8IDApIHsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJCQlyYyA9IDA7CisJCX0KKwl9CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJjOwpAQCAtMTM0NSw3ICsxMzYzLDcgQEAKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCiAJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKIApAQCAtMTQzMSw3ICsxNDQ5LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYikpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE0NDUsNyArMTQ2Myw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpKTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQpAQCAtMTQ1OCw3ICsxNDc2LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKSk7CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKQEAgLTE0NzEsOCArMTQ4OSw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKQEAgLTE0OTYsNyArMTUxMyw3IEBACiAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAogCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKQEAgLTE3ODEsNyArMTc5OCw3IEBACiAgKiBlbTI4eHhfdjRsMl9wb2xsKCkKICAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBlbTI4eHhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW0yOHh4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTkzNCw4ICsxOTUxLDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqZW0yOHh4X3ZkZXZfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lKQorCQkJCQljb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKKwkJCQkJY29uc3QgY2hhciAqdHlwZV9uYW1lKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKIApAQCAtMTk4NCw4ICsyMDAxLDkgQEAKIAkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwogCiAvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgMHhjMCk7IGF1ZGlvIHJlZ2lzdGVyICovCi0gICAgICAgdmFsID0gKHU4KWVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSyk7Ci0gICAgICAgZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSywgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOworCXZhbCA9ICh1OCllbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEspOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssCisJCQkgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOwogCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIDB4NTEpOwogCiAJZW0yOHh4X3NldF9vdXRmbXQoZGV2KTsKQEAgLTIwMjAsNyArMjAzOCw4IEBACiAJfQogCiAJaWYgKGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ucmFkaW8udHlwZSA9PSBFTTI4WFhfUkFESU8pIHsKLQkJZGV2LT5yYWRpb19kZXYgPSBlbTI4eHhfdmRldl9pbml0KGRldiwgJmVtMjh4eF9yYWRpb190ZW1wbGF0ZSwgInJhZGlvIik7CisJCWRldi0+cmFkaW9fZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfcmFkaW9fdGVtcGxhdGUsCisJCQkJCQkgICJyYWRpbyIpOwogCQlpZiAoIWRldi0+cmFkaW9fZGV2KSB7CiAJCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggZGQyY2QzNi4uYTMzYTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTcwLDcgKzcwLDYgQEAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1ZJREVPTE9HWV8yMEsxNFhVU0IJICAzMAogI2RlZmluZSBFTTI4MjFfQk9BUkRfVVNCR0VBUl9WRDIwNAkJICAzMQogI2RlZmluZSBFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yCQkgIDMyCi0jZGVmaW5lIEVNMjgyMV9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyCSAgMzMKICNkZWZpbmUgRU0yODYwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUwkJICAzNAogI2RlZmluZSBFTTI4NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVIJCSAgMzUKICNkZWZpbmUgRU0yODYwX0JPQVJEX05FVEdNQkhfQ0FNCQkgIDM2CkBAIC05OCw2ICs5NywxMCBAQAogI2RlZmluZSBFTTI4MjBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9GT1JZT1UJICA1OAogI2RlZmluZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTAJICA2MAogI2RlZmluZSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyCSAgNjEKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDAJCSAgNjIKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMiAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0VBU1lDQVAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWgkJICA2NQogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC0xMTAsNiArMTEzLDEwIEBACiAjZGVmaW5lIEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVEIDEKICNkZWZpbmUgRU0yOFhYX0JPQVJEX1ZBTElEQVRFRAkgICAwCiAKKy8qIFBhcmFtcyBmb3IgZW0yOHh4X2NtZCgpIGF1ZGlvICovCisjZGVmaW5lIEVNMjhYWF9TVEFSVF9BVURJTyAgICAgIDEKKyNkZWZpbmUgRU0yOFhYX1NUT1BfQVVESU8gICAgICAgMAorCiAvKiBtYXhpbXVtIG51bWJlciBvZiBlbTI4eHggYm9hcmRzICovCiAjZGVmaW5lIEVNMjhYWF9NQVhCT0FSRFMgNCAvKkZJWE1FOiBzaG91bGQgYmUgYmlnZ2VyICovCiAKQEAgLTE1NCw3ICsxNjEsOCBAQAogKi8KIAogLyogdGltZSB0byB3YWl0IHdoZW4gc3RvcHBpbmcgdGhlIGlzb2MgdHJhbnNmZXIgKi8KLSNkZWZpbmUgRU0yOFhYX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX05VTV9CVUZTICogRU0yOFhYX05VTV9QQUNLRVRTKQorI2RlZmluZSBFTTI4WFhfVVJCX1RJTUVPVVQgXAorCQkJbXNlY3NfdG9famlmZmllcyhFTTI4WFhfTlVNX0JVRlMgKiBFTTI4WFhfTlVNX1BBQ0tFVFMpCiAKIC8qIHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgaTJjIHdyaXRlcyB0byBmaW5pc2ggKi8KICNkZWZpbmUgRU0yODAwX0kyQ19XUklURV9USU1FT1VUIDIwCkBAIC0zNDgsNiArMzU2LDExIEBACiAJRU0yOFhYX1NBQTcxMVgsCiB9OwogCitlbnVtIGVtMjh4eF9hZGVjb2RlciB7CisJRU0yOFhYX05PQURFQ09ERVIgPSAwLAorCUVNMjhYWF9UVkFVRElPLAorfTsKKwogc3RydWN0IGVtMjh4eF9ib2FyZCB7CiAJY2hhciAqbmFtZTsKIAlpbnQgdmNoYW5uZWxzOwpAQCAtMzYxLDYgKzM3NCw3IEBACiAJc3RydWN0IGVtMjh4eF9yZWdfc2VxICpkdmJfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnN1c3BlbmRfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnR1bmVyX2dwaW87CisJc3RydWN0IGVtMjh4eF9yZWdfc2VxICptdXRlX2dwaW87CiAKIAl1bnNpZ25lZCBpbnQgaXNfZW0yODAwOjE7CiAJdW5zaWduZWQgaW50IGhhc19tc3AzNHh4OjE7CkBAIC0zNzMsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHhjbGssIGkyY19zcGVlZDsKIAogCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKwllbnVtIGVtMjh4eF9hZGVjb2RlciBhZGVjb2RlcjsKIAogCXN0cnVjdCBlbTI4eHhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0VNMjhYWF9JTlBVVF07CiAJc3RydWN0IGVtMjh4eF9pbnB1dAkgIHJhZGlvOwpAQCAtNDIwLDcgKzQzNSw3IEBACiAJdW5zaWduZWQgaW50IGh3cHRyX2RvbmVfY2FwdHVyZTsKIAlzdHJ1Y3Qgc25kX2NhcmQgICAgICAgICAgICAqc25kY2FyZDsKIAotCWludCB1c2Vycywgc2h1dGRvd247CisJaW50IHVzZXJzOwogCWVudW0gZW0yOHh4X3N0cmVhbV9zdGF0ZSBjYXB0dXJlX3N0cmVhbTsKIAlzcGlubG9ja190IHNsb2NrOwogfTsKQEAgLTUyMyw3ICs1MzgsOCBAQAogCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCiAJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLwogCXN0cnVjdCB1cmIgKnVyYltFTTI4WFhfTlVNX0JVRlNdOwkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCi0JY2hhciAqdHJhbnNmZXJfYnVmZmVyW0VNMjhYWF9OVU1fQlVGU107CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNmZXIgKi8KKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX05VTV9CVUZTXTsJLyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYworCQkJCQkJICAgdHJhbnNmZXIgKi8KIAljaGFyIHVyYl9idWZbVVJCX01BWF9DVFJMX1NJWkVdOwkvKiB1cmIgY29udHJvbCBtc2cgYnVmZmVyICovCiAKIAkvKiBoZWxwZXIgZnVuY3MgdGhhdCBjYWxsIHVzYl9jb250cm9sX21zZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IGVlNmE2OTEuLjU3OGRjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTU2LDYgKzU2LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tYXJzLgogCitjb25maWcgVVNCX0dTUENBX01SOTczMTBBCisJdHJpc3RhdGUgIk1hcnMtU2VtaSBNUjk3MzEwQSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBNUjk3MzEwQSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tcjk3MzEwYS4KKwogY29uZmlnIFVTQl9HU1BDQV9PVjUxOQogCXRyaXN0YXRlICJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0xNjcsNiArMTc2LDI0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTYxLgogCitjb25maWcgVVNCX0dTUENBX1NROTA1CisJdHJpc3RhdGUgIlNRIFRlY2hub2xvZ2llcyBTUTkwNSBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcTkwNS4KKworY29uZmlnIFVTQl9HU1BDQV9TUTkwNUMKKwl0cmlzdGF0ZSAiU1EgVGVjaG5vbG9naWVzIFNROTA1QyBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNUMgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3E5MDVjLgorCiBjb25maWcgVVNCX0dTUENBX1NUSzAxNAogCXRyaXN0YXRlICJTeW50ZWsgRFY0MDAwIChTVEswMTQpIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGJkOGQ5ZWUuLjhhNjY0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSw1MCArMSw1NiBAQAotb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkJCSs9IGdzcGNhX21haW4ubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DT05FWCkJKz0gZ3NwY2FfY29uZXgubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9FVE9NUykJKz0gZ3NwY2FfZXRvbXMubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYKQkrPSBnc3BjYV9maW5lcGl4Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfTUFSUykJKz0gZ3NwY2FfbWFycy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KQkrPSBnc3BjYV9vdjUxOS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KQkrPSBnc3BjYV9vdjUzNC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykJKz0gZ3NwY2FfcGFjMjA3Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSkgKz0gZ3NwY2FfcGFjNzMxMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikJKz0gZ3NwY2Ffc29uaXhiLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhKKQkrPSBnc3BjYV9zb25peGoubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwKSArPSBnc3BjYV9zcGNhNTAwLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSkgKz0gZ3NwY2Ffc3BjYTUwMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICs9IGdzcGNhX3NwY2E1MDUubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2KSArPSBnc3BjYV9zcGNhNTA2Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCkgKz0gZ3NwY2Ffc3BjYTUwOC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICs9IGdzcGNhX3NwY2E1NjEubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTKSArPSBnc3BjYV9zdW5wbHVzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KQkrPSBnc3BjYV9zdGswMTQubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UNjEzKQkrPSBnc3BjYV90NjEzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKQkrPSBnc3BjYV90djg1MzIubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9WQzAzMlgpCSs9IGdzcGNhX3ZjMDMyeC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1pDM1hYKQkrPSBnc3BjYV96YzN4eC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBKSAgICAgICAgICArPSBnc3BjYV9tYWluLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NQVJTKSAgICAgKz0gZ3NwY2FfbWFycy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX01SOTczMTBBKSArPSBnc3BjYV9tcjk3MzEwYS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KSAgICArPSBnc3BjYV9vdjUxOS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KSAgICArPSBnc3BjYV9vdjUzNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykgICArPSBnc3BjYV9wYWMyMDcubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikgICArPSBnc3BjYV9zb25peGIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopICAgKz0gZ3NwY2Ffc29uaXhqLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCkgICs9IGdzcGNhX3NwY2E1MDAubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxKSAgKz0gZ3NwY2Ffc3BjYTUwMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICArPSBnc3BjYV9zcGNhNTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNikgICs9IGdzcGNhX3NwY2E1MDYubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4KSAgKz0gZ3NwY2Ffc3BjYTUwOC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICArPSBnc3BjYV9zcGNhNTYxLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDUpICAgICs9IGdzcGNhX3NxOTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDKSAgICs9IGdzcGNhX3NxOTA1Yy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICArPSBnc3BjYV9zdW5wbHVzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KSAgICs9IGdzcGNhX3N0azAxNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1Q2MTMpICAgICArPSBnc3BjYV90NjEzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKSAgICs9IGdzcGNhX3R2ODUzMi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkgICArPSBnc3BjYV92YzAzMngubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCi1nc3BjYV9tYWluLW9ianMJCQk6PSBnc3BjYS5vCi1nc3BjYV9jb25leC1vYmpzCQk6PSBjb25leC5vCi1nc3BjYV9ldG9tcy1vYmpzCQk6PSBldG9tcy5vCi1nc3BjYV9maW5lcGl4LW9ianMJCTo9IGZpbmVwaXgubwotZ3NwY2FfbWFycy1vYmpzCQkJOj0gbWFycy5vCi1nc3BjYV9vdjUxOS1vYmpzCQk6PSBvdjUxOS5vCi1nc3BjYV9vdjUzNC1vYmpzCQk6PSBvdjUzNC5vCi1nc3BjYV9wYWMyMDctb2JqcwkJOj0gcGFjMjA3Lm8KLWdzcGNhX3BhYzczMTEtb2JqcwkJOj0gcGFjNzMxMS5vCi1nc3BjYV9zb25peGItb2JqcwkJOj0gc29uaXhiLm8KLWdzcGNhX3Nvbml4ai1vYmpzCQk6PSBzb25peGoubwotZ3NwY2Ffc3BjYTUwMC1vYmpzCQk6PSBzcGNhNTAwLm8KLWdzcGNhX3NwY2E1MDEtb2JqcwkJOj0gc3BjYTUwMS5vCi1nc3BjYV9zcGNhNTA1LW9ianMJCTo9IHNwY2E1MDUubwotZ3NwY2Ffc3BjYTUwNi1vYmpzCQk6PSBzcGNhNTA2Lm8KLWdzcGNhX3NwY2E1MDgtb2JqcwkJOj0gc3BjYTUwOC5vCi1nc3BjYV9zcGNhNTYxLW9ianMJCTo9IHNwY2E1NjEubwotZ3NwY2Ffc3RrMDE0LW9ianMJCTo9IHN0azAxNC5vCi1nc3BjYV9zdW5wbHVzLW9ianMJCTo9IHN1bnBsdXMubwotZ3NwY2FfdDYxMy1vYmpzCQkJOj0gdDYxMy5vCi1nc3BjYV90djg1MzItb2JqcwkJOj0gdHY4NTMyLm8KLWdzcGNhX3ZjMDMyeC1vYmpzCQk6PSB2YzAzMngubwotZ3NwY2FfemMzeHgtb2JqcwkJOj0gemMzeHgubworZ3NwY2FfbWFpbi1vYmpzICAgICA6PSBnc3BjYS5vCitnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2V0b21zLW9ianMgICAgOj0gZXRvbXMubworZ3NwY2FfZmluZXBpeC1vYmpzICA6PSBmaW5lcGl4Lm8KK2dzcGNhX21hcnMtb2JqcyAgICAgOj0gbWFycy5vCitnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KK2dzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubworZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9wYWMyMDctb2JqcyAgIDo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMgIDo9IHBhYzczMTEubworZ3NwY2Ffc29uaXhiLW9ianMgICA6PSBzb25peGIubworZ3NwY2Ffc29uaXhqLW9ianMgICA6PSBzb25peGoubworZ3NwY2Ffc3BjYTUwMC1vYmpzICA6PSBzcGNhNTAwLm8KK2dzcGNhX3NwY2E1MDEtb2JqcyAgOj0gc3BjYTUwMS5vCitnc3BjYV9zcGNhNTA1LW9ianMgIDo9IHNwY2E1MDUubworZ3NwY2Ffc3BjYTUwNi1vYmpzICA6PSBzcGNhNTA2Lm8KK2dzcGNhX3NwY2E1MDgtb2JqcyAgOj0gc3BjYTUwOC5vCitnc3BjYV9zcGNhNTYxLW9ianMgIDo9IHNwY2E1NjEubworZ3NwY2Ffc3E5MDUtb2JqcyAgICA6PSBzcTkwNS5vCitnc3BjYV9zcTkwNWMtb2JqcyAgIDo9IHNxOTA1Yy5vCitnc3BjYV9zdGswMTQtb2JqcyAgIDo9IHN0azAxNC5vCitnc3BjYV9zdW5wbHVzLW9ianMgIDo9IHN1bnBsdXMubworZ3NwY2FfdDYxMy1vYmpzICAgICA6PSB0NjEzLm8KK2dzcGNhX3R2ODUzMi1vYmpzICAgOj0gdHY4NTMyLm8KK2dzcGNhX3ZjMDMyeC1vYmpzICAgOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMgICAgOj0gemMzeHgubwogCi1vYmotJChDT05GSUdfVVNCX001NjAyKQkJKz0gbTU2MDIvCi1vYmotJChDT05GSUdfVVNCX1NUVjA2WFgpIAkrPSBzdHYwNnh4Lworb2JqLSQoQ09ORklHX1VTQl9NNTYwMikgICArPSBtNTYwMi8KK29iai0kKENPTkZJR19VU0JfU1RWMDZYWCkgKz0gc3R2MDZ4eC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwppbmRleCAxNzUzZjViLi4yMTljZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCkBAIC0zNiw4ICszNiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDMwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCisjZGVmaW5lIFFVQUxJVFlfREVGIDQwCiAKLQl1bnNpZ25lZCBjaGFyIHFpbmRleDsKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTUsMTQgKzgxOSwxMyBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCi0Jc2QtPnFpbmRleCA9IDA7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gKi8KIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOSw2ICs4NDIsMTQgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIyKTsJCS8qIEpQRUcgNDExICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCWN4MTE2NDZfaW5pdHNpemUoZ3NwY2FfZGV2KTsKIAljeDExNjQ2X2Z3KGdzcGNhX2Rldik7CiAJY3hfc2Vuc29yKGdzcGNhX2Rldik7CkBAIC04NDksOCArODYwLDExIEBACiAvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldHJ5ID0gNTA7CiAKKwlrZnJlZShzZC0+anBlZ19oZHIpOworCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKIAlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDApOwpAQCAtODc2LDYgKzg5MCw4IEBACiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKIAogCQkvKiBzdGFydCBvZiBmcmFtZSAqLwpAQCAtODgzLDkgKzg5OSw4IEBACiAJCQkJCWRhdGEsIDApOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAkJZGF0YSArPSAyOwogCQlsZW4gLT0gMjsKIAl9CkBAIC05ODgsNiArMTAwMywzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtOTk4LDYgKzEwNDEsOCBAQAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTAyOSw4ICsxMDc0LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZjNjZDhmZi4uMmMyMGQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtNDcyLDE5ICs0NzIsNiBAQAogCQlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9PX1JFRCArIGksIGJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JaW50IGJyaWdodG5lc3MgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX09fUkVEICsgaSwgMSk7Ci0JCWJyaWdodG5lc3MgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3MgPj4gMzsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTQ5NSwxOSArNDgyLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIEVUX0dfUkVELCBSR0JHLCA2KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQlpbnQgY29udHJhc3QgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX0dfUkVEICsgaSwgMSk7Ci0JCWNvbnRyYXN0ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQl9Ci0Jc2QtPmNvbnRyYXN0ID0gY29udHJhc3QgPj4gMjsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02NTgsNyArNjMyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAxOwogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgewogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CkBAIC04MjEsNyArNzk0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODQwLDcgKzgxMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtODU5LDcgKzgzMCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjgsOCArODk4LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCmluZGV4IGFmYzhiMmQuLjAwZTY4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCkBAIC0yNyw3ICsyNyw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIERlZmF1bHQgdGltZW91dCwgaW4gbXMgKi8KLSNkZWZpbmUgRlBJWF9USU1FT1VUIChIWiAvIDEwKQorI2RlZmluZSBGUElYX1RJTUVPVVQgMjUwCiAKIC8qIE1heGltdW0gdHJhbnNmZXIgc2l6ZSB0byB1c2UuIFRoZSB3aW5kb3dzIGRyaXZlciByZWFkcyBieSBjaHVua3Mgb2YKICAqIDB4MjAwMCBieXRlcywgc28gZG8gdGhlIHNhbWUuIE5vdGU6IHJlYWRpbmcgbW9yZSBzZWVtcyB0byB3b3JrCkBAIC0zOCwzOCArMzgsMTUgQEAKIHN0cnVjdCB1c2JfZnBpeCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCS8qCi0JICogVVNCIHN0dWZmCi0JICovCi0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJscmVxOwotCXN0cnVjdCB1cmIgKmNvbnRyb2xfdXJiOwotCXN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfdGltZXI7Ci0KLQllbnVtIHsKLQkJRlBJWF9OT1AsCS8qIGluYWN0aXZlLCBlbHNlIHN0cmVhbWluZyAqLwotCQlGUElYX1JFU0VULAkvKiBtdXN0IHJlc2V0ICovCi0JCUZQSVhfUkVRX0ZSQU1FLAkvKiByZXF1ZXN0aW5nIGEgZnJhbWUgKi8KLQkJRlBJWF9SRUFEX0ZSQU1FLAkvKiByZWFkaW5nIGZyYW1lICovCi0JfSBzdGF0ZTsKLQotCS8qCi0JICogRHJpdmVyIHN0dWZmCi0JICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayB3cWU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY2FuX2Nsb3NlOwotCWludCBzdHJlYW1pbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKIH07CiAKIC8qIERlbGF5IGFmdGVyIHdoaWNoIGNsYWltIHRoZSBuZXh0IGZyYW1lLiBJZiB0aGUgZGVsYXkgaXMgdG9vIHNtYWxsLAogICogdGhlIGNhbWVyYSB3aWxsIHJldHVybiBvbGQgZnJhbWVzLiBPbiB0aGUgNDgwMFosIDIwbXMgaXMgYmFkLCAyNW1zCi0gKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gKi8KLSNkZWZpbmUgTkVYVF9GUkFNRV9ERUxBWSAgKCgoSFogKiAzMCkgKyA5OTkpIC8gMTAwMCkKLQotI2RlZmluZSBkZXZfbmV3X3N0YXRlKG5ld19zdGF0ZSkgewkJCQlcCi0JCVBERUJVRyhEX1NUUkVBTSwgIm5ldyBzdGF0ZSBmcm9tICVkIHRvICVkIGF0ICVzOiVkIiwJXAotCQkJZGV2LT5zdGF0ZSwgbmV3X3N0YXRlLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi0JCWRldi0+c3RhdGUgPSBuZXdfc3RhdGU7CQkJCQlcCi19CisgKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gT24gdGhlIEEyMTAsCisgKiAzMG1zIGlzIGJhZCB3aGlsZSAzNW1zIGlzIHBlcmZlY3QuICovCisjZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgMzUKIAogLyogVGhlc2UgY2FtZXJhcyBvbmx5IHN1cHBvcnQgMzIweDIwMC4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZwaXhfbW9kZVsxXSA9IHsKQEAgLTgwLDMxNiArNTcsMTgzIEBACiAJCS5wcml2ID0gMH0KIH07CiAKLS8qIFJlYWRzIHBhcnQgb2YgYSBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVhZF9mcmFtZV9wYXJ0KHN0cnVjdCB1c2JfZnBpeCAqZGV2KQorLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIHdlYmNhbSAqLworc3RhdGljIGludCBjb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJaW50IG9yZGVyKQkvKiAwOiByZXNldCwgMTogZnJhbWUgcmVxdWVzdCAqLwogewotCWludCByZXQ7CisJc3RhdGljIHU4IG9yZGVyX3ZhbHVlc1syXVsxMl0gPSB7CisJCXsweGM2LCAwLCAwLCAwLCAwLCAwLCAwLCAgICAwLCAweDIwLCAwLCAwLCAwfSwJLyogcmVzZXQgKi8KKwkJezB4ZDMsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEsICAgIDAsIDAsIDAsIDB9LAkvKiBmciByZXEgKi8KKwl9OwogCi0JUERFQlVHKERfU1RSRUFNLCAicmVhZF9mcmFtZV9wYXJ0Iik7Ci0KLQkvKiBSZWFkcyBwYXJ0IG9mIGEgZnJhbWUgKi8KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmdzcGNhX2Rldi51cmJbMF0sIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpIHsKLQkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICVkIiwKLQkJCXJldCk7Ci0JfSBlbHNlIHsKLQkJLyogU29tZXRpbWVzIHdlIG5ldmVyIGdldCBhIGNhbGxiYWNrLCBzbyB1c2UgYSB0aW1lci4KLQkJICogSXMgdGhpcyBtYXNraW5nIGEgYnVnIHNvbWV3aGVyZSBlbHNlPyAqLwotCQlkZXYtPmJ1bGtfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1MCk7Ci0JCWFkZF90aW1lcigmZGV2LT5idWxrX3RpbWVyKTsKLQl9CisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1Ziwgb3JkZXJfdmFsdWVzW29yZGVyXSwgMTIpOworCXJldHVybiB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkxMiwgRlBJWF9USU1FT1VUKTsKIH0KIAotLyogQ2FsbGJhY2sgZm9yIFVSQnMuICovCi1zdGF0aWMgdm9pZCB1cmJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorLyogd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBkb3N0cmVhbShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mcGl4LCB3b3JrX3N0cnVjdCk7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gJmRldi0+Z3NwY2FfZGV2OworCXN0cnVjdCB1cmIgKnVyYiA9IGdzcGNhX2Rldi0+dXJiWzBdOworCXU4ICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOwogCi0JUERFQlVHKERfUEFDSywKLQkJImVudGVyIHVyYl9jYWxsYmFjayAtIHN0YXR1cz0lZCwgbGVuZ3RoPSVkIiwKLQkJdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgbWFpbiBkcml2ZXIgKi8KKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0YXJ0ZWQiKTsKIAotCWlmIChkZXYtPnN0YXRlID09IEZQSVhfUkVBRF9GUkFNRSkKLQkJZGVsX3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOworCS8qIGxvb3AgcmVhZGluZyBhIGZyYW1lICovCithZ2FpbjoKKwl3aGlsZSAoZ3NwY2FfZGV2LT5wcmVzZW50ICYmIGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCkgewotCQkvKiBXZSBraWxsIGEgc3R1Y2sgdXJiIGV2ZXJ5IDUwIGZyYW1lcyBvbiBhdmVyYWdlLCBzbyBkb24ndAotCQkgKiBkaXNwbGF5IGEgbG9nIG1lc3NhZ2UgZm9yIHRoYXQuICovCi0JCWlmICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKLQkJCVBERUJVRyhEX1NUUkVBTSwgImJhZCBVUkIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQl9CisJCS8qIHJlcXVlc3QgYSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQlicmVhazsKIAotCXN3aXRjaCAoZGV2LT5zdGF0ZSkgewotCWNhc2UgRlBJWF9SRVFfRlJBTUU6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRUFEX0ZSQU1FKTsKLQkJcmVhZF9mcmFtZV9wYXJ0KGRldik7Ci0JCWJyZWFrOworCQkvKiB0aGUgZnJhbWUgY29tZXMgaW4gcGFydHMgKi8KKwkJZm9yICg7OykgeworCQkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQl1cmItPnBpcGUsCisJCQkJCWRhdGEsCisJCQkJCUZQSVhfTUFYX1RSQU5TRkVSLAorCQkJCQkmbGVuLCBGUElYX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQkvKiBNb3N0IG9mIHRoZSB0aW1lIHdlIGdldCBhIHRpbWVvdXQKKwkJCQkgKiBlcnJvci4gSnVzdCByZXN0YXJ0LiAqLworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQkJZ290byBvdXQ7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKCZkZXYtPmdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAotCWNhc2UgRlBJWF9SRUFEX0ZSQU1FOiB7Ci0JCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwkJCWlmIChsZW4gPCBGUElYX01BWF9UUkFOU0ZFUiB8fAorCQkJCShkYXRhW2xlbiAtIDJdID09IDB4ZmYgJiYKKwkJCQkJZGF0YVtsZW4gLSAxXSA9PSAweGQ5KSkgewogCi0JCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoJmRldi0+Z3NwY2FfZGV2KTsKLQkJaWYgKGZyYW1lID09IE5VTEwpCi0JCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IEZQSVhfTUFYX1RSQU5TRkVSIHx8Ci0JCQkoZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMl0gPT0gMHhmZiAmJgotCQkJCWRhdGFbdXJiLT5hY3R1YWxfbGVuZ3RoLTFdID09IDB4ZDkpKSB7Ci0KLQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCi0JCQkgKiBmb3IsIHRoZW4gaXQncyB0aGUgZW5kIG9mIHRoZQotCQkJICogZnJhbWUuIFNvbWV0aW1lIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKLQkJCSAqIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLiBXZSBhbHNvIGVuZAotCQkJICogaGVyZSBpZiB0aGUgdGhlIGpwZWcgZW5kcyByaWdodCBhdCB0aGUgZW5kCi0JCQkgKiBvZiB0aGUgZnJhbWUuICovCi0JCQlpZiAoZnJhbWUpCi0JCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJCWRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIE5FWFRfRlJBTUVfREVMQVkpOwotCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCisJCQkJICogZm9yLCB0aGVuIGl0J3MgdGhlIGVuZCBvZiB0aGUKKwkJCQkgKiBmcmFtZS4gU29tZXRpbWVzIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKKwkJCQkgKiBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4gV2UgYWxzbyBlbmQKKwkJCQkgKiBoZXJlIGlmIHRoZSB0aGUganBlZyBlbmRzIHJpZ2h0IGF0IHRoZSBlbmQKKwkJCQkgKiBvZiB0aGUgZnJhbWUuICovCisJCQkJaWYgKGZyYW1lKQorCQkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCQkJTEFTVF9QQUNLRVQsCisJCQkJCQkJZnJhbWUsCisJCQkJCQkJZGF0YSwgbGVuKTsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogZ290IGEgcGFydGlhbCBpbWFnZSAqLwogCQkJaWYgKGZyYW1lKQogCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCiAJCQkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUKLQkJCQkJCQkJPT0gTEFTVF9QQUNLRVQKKwkJCQkJCQk9PSBMQVNUX1BBQ0tFVAogCQkJCQkJPyBGSVJTVF9QQUNLRVQgOiBJTlRFUl9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXJlYWRfZnJhbWVfcGFydChkZXYpOworCQkJCQkJZnJhbWUsIGRhdGEsIGxlbik7CiAJCX0KLQkJYnJlYWs7Ci0JICAgIH0KIAotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFU0VUOgotCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogUmVxdWVzdCBhIG5ldyBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVxdWVzdF9mcmFtZShzdHJ1Y3QgdXNiX2ZwaXggKmRldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKLQotCS8qIFNldHVwIGNvbW1hbmQgcGFja2V0ICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ZDM7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gMHgwMTsKLQotCS8qIFJlcXVlc3QgYSBmcmFtZSAqLwotCWRldi0+Y3RybHJlcS5iUmVxdWVzdFR5cGUgPQotCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlkZXYtPmN0cmxyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7Ci0JZGV2LT5jdHJscmVxLndWYWx1ZSA9IDA7Ci0JZGV2LT5jdHJscmVxLndJbmRleCA9IDA7Ci0JZGV2LT5jdHJscmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigxMik7Ci0KLQl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmNvbnRyb2xfdXJiLAotCQkJICAgICBnc3BjYV9kZXYtPmRldiwKLQkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+Y3RybHJlcSwKLQkJCSAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLAotCQkJICAgICAxMiwgdXJiX2NhbGxiYWNrLCBnc3BjYV9kZXYpOwotCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jb250cm9sX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCkgewotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQkJUERFQlVHKERfU1RSRUFNLCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggJWQiLCByZXQpOwotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFN0YXRlIG1hY2hpbmUuICovCi1zdGF0aWMgdm9pZCBmcGl4X3NtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2ZwaXgsIHdxZS53b3JrKTsKLQotCVBERUJVRyhEX1NUUkVBTSwgImZwaXhfc20gc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQotCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwotCWlmICghZGV2LT5nc3BjYV9kZXYucHJlc2VudCkgewotCQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgaXMgZ29uZSIpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKLQkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKLQkJcmV0dXJuOworCQkvKiBXZSBtdXN0IHdhaXQgYmVmb3JlIHRyeWluZyByZWFkaW5nIHRoZSBuZXh0CisJCSAqIGZyYW1lLiBJZiB3ZSBkb24ndCwgb3IgaWYgdGhlIGRlbGF5IGlzIHRvbyBzaG9ydCwKKwkJICogdGhlIGNhbWVyYSB3aWxsIGRpc2Nvbm5lY3QuICovCisJCW1zbGVlcChORVhUX0ZSQU1FX0RFTEFZKTsKIAl9CiAKLQlpZiAoIWRldi0+c3RyZWFtaW5nKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInN0b3BwaW5nIHN0YXRlIG1hY2hpbmUiKTsKLQkJZGV2X25ld19zdGF0ZShGUElYX05PUCk7Ci0JCWNvbXBsZXRlKCZkZXYtPmNhbl9jbG9zZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKLQljYXNlIEZQSVhfUkVTRVQ6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRVFfRlJBTUUpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCBIWiAvIDEwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZQSVhfUkVRX0ZSQU1FOgotCQkvKiBnZXQgYW4gaW1hZ2UgKi8KLQkJcmVxdWVzdF9mcmFtZShkZXYpOwotCQlicmVhazsKLQotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFQURfRlJBTUU6Ci0JCVBERUJVRyhEX1NUUkVBTSwgImludmFsaWQgc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQkJYnJlYWs7Ci0JfQorb3V0OgorCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0b3BwZWQiKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKIAljYW0tPmNhbV9tb2RlID0gZnBpeF9tb2RlOwogCWNhbS0+bm1vZGVzID0gMTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CS8qIHRvZG86IGNvcnJlY3QgZm9yIGFsbCBjYW1zPyAqLwogCWNhbS0+YnVsa19zaXplID0gRlBJWF9NQVhfVFJBTlNGRVI7CiAKLS8qCWdzcGNhX2Rldi0+bmJhbHQgPSAxOwkgKiB1c2UgYnVsayB0cmFuc2ZlciAqLworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgZG9zdHJlYW0pOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFN0b3Agc3RyZWFtaW5nIGFuZCBmcmVlIHRoZSByZXNzb3VyY2VzIGFsbG9jYXRlZCBieSBzZF9zdGFydC4gKi8KLXN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JZGV2LT5zdHJlYW1pbmcgPSAwOwotCi0JLyogU3RvcCB0aGUgc3RhdGUgbWFjaGluZSAqLwotCWlmIChkZXYtPnN0YXRlICE9IEZQSVhfTk9QKQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7Ci19Ci0KLS8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgZGlzY29ubmVjdCAqLwotc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0KLQl1c2JfZnJlZV91cmIoZGV2LT5jb250cm9sX3VyYik7Ci0JZGV2LT5jb250cm9sX3VyYiA9IE5VTEw7Ci19Ci0KLS8qIEtpbGwgYW4gVVJCIHRoYXQgaGFzbid0IGNvbXBsZXRlZC4gKi8KLXN0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKLQotCXVzYl91bmxpbmtfdXJiKHVyYik7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d3FlLCBmcGl4X3NtKTsKLQotCWluaXRfdGltZXIoJmRldi0+YnVsa190aW1lcik7Ci0JZGV2LT5idWxrX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOwotCiAJcmV0dXJuIDA7CiB9CiAKKy8qIHN0YXJ0IHRoZSBjYW1lcmEgKi8KIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQlpbnQgc2l6ZV9yZXQ7CisJaW50IHJldCwgbGVuOwogCiAJLyogSW5pdCB0aGUgZGV2aWNlICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4YzY7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzhdID0gMHgyMDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlVU0JfUkVRX0dFVF9TVEFUVVMsCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwKLQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwKLQkJCTEyLCBGUElYX1RJTUVPVVQpOwotCi0JaWYgKHJldCAhPSAxMikgewotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCXJldCA9IGNvbW1hbmQoZ3NwY2FfZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVhZCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiBJZ25vcmUgdGhlIHJlc3VsdCwgZm9yIGl0CiAJICogdmFyaWVzIHdpdGggdGhlIGRldmljZS4gKi8KIAlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciksCi0JCQlnc3BjYV9kZXYtPnVzYl9idWYsIEZQSVhfTUFYX1RSQU5TRkVSLCAmc2l6ZV9yZXQsCisJCQlnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSwKKwkJCWdzcGNhX2Rldi0+dXJiWzBdLT50cmFuc2Zlcl9idWZmZXIsCisJCQlGUElYX01BWF9UUkFOU0ZFUiwgJmxlbiwKIAkJCUZQSVhfVElNRU9VVCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9idWxrX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfU1RSRUFNLCAidXNiX2J1bGtfbXNnIGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVxdWVzdCBhIGZyYW1lLCBidXQgZG9uJ3QgcmVhZCBpdCAqLwotCW1lbXNldChnc3BjYV9kZXYtPnVzYl9idWYsIDAsIDEyKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweGQzOwotCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSA9IDB4MDE7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCi0JCQkxMiwgRlBJWF9USU1FT1VUKTsKLQlpZiAocmV0ICE9IDEyKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgImZyYW1lIHJlcXVlc3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBBZ2FpbiwgcmVzZXQgYnVsayBpbiBlbmRwb2ludCAqLwotCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSk7CiAKLQkvKiBBbGxvY2F0ZSBhIGNvbnRyb2wgVVJCICovCi0JZGV2LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmNvbnRyb2xfdXJiKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBWYXJpb3VzIGluaXRpYWxpemF0aW9ucy4gKi8KLQlpbml0X2NvbXBsZXRpb24oJmRldi0+Y2FuX2Nsb3NlKTsKLQlkZXYtPmJ1bGtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+Z3NwY2FfZGV2LnVyYlswXTsKLQlkZXYtPmdzcGNhX2Rldi51cmJbMF0tPmNvbXBsZXRlID0gdXJiX2NhbGxiYWNrOwotCWRldi0+c3RyZWFtaW5nID0gMTsKLQotCS8qIFNjaGVkdWxlIGEgZnJhbWUgcmVxdWVzdC4gKi8KLQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOwogCiAJcmV0dXJuIDA7Cit9CiAKLWVycm9yOgotCS8qIEZyZWUgdGhlIHJlc3NvdXJjZXMgKi8KLQlzZF9zdG9wTihnc3BjYV9kZXYpOwotCXNkX3N0b3AwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIHJldDsKKy8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQ9PTAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KKy8qIHRoZSB1c2JfbG9jayBpcyBoZWxkIGF0IGVudHJ5IC0gcmVzdG9yZSBvbiBleGl0ICovCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKKworCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHF1ZXVlIHRvIHRlcm1pbmF0ZSAqLworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CiB9CiAKIC8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLwpAQCAtNDI0LDEyICsyNjgsMTEgQEAKIAogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7Ci0JLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCiAJLmNvbmZpZyA9IHNkX2NvbmZpZywKLQkuaW5pdCA9IHNkX2luaXQsCi0JLnN0YXJ0ID0gc2Rfc3RhcnQsCi0JLnN0b3BOID0gc2Rfc3RvcE4sCi0JLnN0b3AwID0gc2Rfc3RvcDAsCisJLmluaXQgICA9IHNkX2luaXQsCisJLnN0YXJ0ICA9IHNkX3N0YXJ0LAorCS5zdG9wMCAgPSBzZF9zdG9wMCwKIH07CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCkBAIC00NDMsMjQgKzI4NiwyOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0gewotCS5uYW1lID0gTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAotCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAotCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisJLnJlc3VtZSAgPSBnc3BjYV9yZXN1bWUsCiAjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKIHsKIAl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCA2NWU0OTAxLi5hNzVjMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0zOCwxNSArMzgsMTYgQEAKICNpbmNsdWRlICJnc3BjYS5oIgogCiAvKiBnbG9iYWwgdmFsdWVzICovCi0jZGVmaW5lIERFRl9OVVJCUyAyCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjZGVmaW5lIERFRl9OVVJCUyAzCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjaWYgREVGX05VUkJTID4gTUFYX05VUkJTCisjZXJyb3IgIkRFRl9OVVJCUyB0b28gYmlnIgorI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDQsIDApCi0KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtMTI2LDE2ICsxMjcsMTggQEAKIAkJCXN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCV9fdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCisJdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCiAJaW50IGksIGxlbiwgc3Q7CiAJY2FtX3BrdF9vcCBwa3Rfc2NhbjsKIAogCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogI2lmZGVmIENPTkZJR19QTQogCQlpZiAoIWdzcGNhX2Rldi0+ZnJvemVuKQogI2VuZGlmCiAJCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gPyAqLworCQlyZXR1cm47CiAJfQogCXBrdF9zY2FuID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5wa3Rfc2NhbjsKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CkBAIC0xNjYsNyArMTY5LDcgQEAKIAkJLyogbGV0IHRoZSBwYWNrZXQgYmUgYW5hbHl6ZWQgYnkgdGhlIHN1YmRyaXZlciAqLwogCQlQREVCVUcoRF9QQUNLLCAicGFja2V0IFslZF0gbzolZCBsOiVkIiwKIAkJCWksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCBsZW4pOwotCQlkYXRhID0gKF9fdTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgogCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwogCQlwa3Rfc2Nhbihnc3BjYV9kZXYsIGZyYW1lLCBkYXRhLCBsZW4pOwogCX0KQEAgLTE4Miw4ICsxODUsNyBAQAogICoKICAqIEFuYWx5c2UgZWFjaCBwYWNrZXQgYW5kIGNhbGwgdGhlIHN1YmRyaXZlciBmb3IgY29weSB0byB0aGUgZnJhbWUgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBpc29jX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGlzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAKQEAgLTE5Niw4ICsxOTgsNyBAQAogLyoKICAqIGJ1bGsgbWVzc2FnZSBpbnRlcnJ1cHQgZnJvbSB0aGUgVVNCIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBidWxrX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGJ1bGtfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKQEAgLTIwOSw2ICsyMTAsOCBAQAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CiAJCXVyYi0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CkBAIC0yMTcsNyArMjIwLDcgQEAKIAkJaWYgKCFnc3BjYV9kZXYtPmZyb3plbikKICNlbmRpZgogCQkJUERFQlVHKERfRVJSfERfUEFDSywgInVyYiBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CQkvKiBkaXNjb25uZWN0aW9uID8gKi8KKwkJcmV0dXJuOwogCX0KIAogCS8qIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLwpAQCAtMzIyLDYgKzMyNSw3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKIAljYXNlIFY0TDJfUElYX0ZNVF9TUENBNTYxOgogCWNhc2UgVjRMMl9QSVhfRk1UX1BBQzIwNzoKKwljYXNlIFY0TDJfUElYX0ZNVF9NUjk3MzEwQToKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNDIyLDEwICs0MjYsOCBAQAogCQlpZiAodXJiID09IE5VTEwpCiAJCQlicmVhazsKIAotCQlCVUdfT04oIWdzcGNhX2Rldi0+ZGV2KTsKIAkJZ3NwY2FfZGV2LT51cmJbaV0gPSBOVUxMOwotCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCiAJCQl1c2JfYnVmZmVyX2ZyZWUoZ3NwY2FfZGV2LT5kZXYsCiAJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTQzOSwyMiArNDQxLDE2IEBACiAgKiBsb29rIGZvciBhbiBpbnB1dCB0cmFuc2ZlciBlbmRwb2ludCBpbiBhbiBhbHRlcm5hdGUgc2V0dGluZwogICovCiBzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfeGZlcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCi0JCQkJCSAgX191OCBlcGFkZHIsCiAJCQkJCSAgX191OCB4ZmVyKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJaW50IGksIGF0dHI7CiAKLQllcGFkZHIgfD0gVVNCX0RJUl9JTjsKIAlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgewogCQllcCA9ICZhbHQtPmVuZHBvaW50W2ldOwotCQlpZiAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBlcGFkZHIpIHsKLQkJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMKLQkJCQkJCSYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci0JCQlpZiAoYXR0ciA9PSB4ZmVyKQotCQkJCXJldHVybiBlcDsKLQkJCWJyZWFrOwotCQl9CisJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKKwkJaWYgKGF0dHIgPT0geGZlcikKKwkJCXJldHVybiBlcDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NzgsMjMgKzQ3NCwyMyBAQAogCWkgPSBnc3BjYV9kZXYtPmFsdDsJCQkvKiBwcmV2aW91cyBhbHQgc2V0dGluZyAqLwogCiAJLyogdHJ5IGlzb2MgKi8KLQl3aGlsZSAoLS1pID4gMCkgewkJCS8qIGFsdCAwIGlzIHVudXNhYmxlICovCisJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbaV0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwogCQlpZiAoZXApCiAJCQlicmVhazsKIAl9CiAKLQkvKiBpZiBubyBpc29jLCB0cnkgYnVsayAqLworCS8qIGlmIG5vIGlzb2MsIHRyeSBidWxrIChhbHQgMCBvbmx5KSAqLwogCWlmIChlcCA9PSBOVUxMKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbMF0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOwogCQlpZiAoZXAgPT0gTlVMTCkgewogCQkJZXJyKCJubyB0cmFuc2ZlciBlbmRwb2ludCBmb3VuZCIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJaSA9IDA7CisJCWdzcGNhX2Rldi0+YnVsayA9IDE7CiAJfQogCVBERUJVRyhEX1NUUkVBTSwgInVzZSBhbHQgJWQgZXAgMHglMDJ4IiwKIAkJCWksIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwpAQCAtNTIxLDcgKzUxNyw3IEBACiAJLyogY2FsY3VsYXRlIHRoZSBwYWNrZXQgc2l6ZSBhbmQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAKLQlpZiAoZ3NwY2FfZGV2LT5hbHQgIT0gMCkgewkJLyogaXNvYyAqLworCWlmICghZ3NwY2FfZGV2LT5idWxrKSB7CQkJLyogaXNvYyAqLwogCiAJCS8qIFNlZSBwYXJhZ3JhcGggNS45IC8gdGFibGUgNS0xMSBvZiB0aGUgdXNiIDIuMCBzcGVjLiAqLwogCQlwc2l6ZSA9IChwc2l6ZSAmIDB4MDdmZikgKiAoMSArICgocHNpemUgPj4gMTEpICYgMykpOwpAQCAtNjAxLDYgKzU5NywxMSBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogc2V0IHRoZSBoaWdoZXIgYWx0ZXJuYXRlIHNldHRpbmcgYW5kCiAJICogbG9vcCB1bnRpbCB1cmIgc3VibWl0IHN1Y2NlZWRzICovCiAJZ3NwY2FfZGV2LT5hbHQgPSBnc3BjYV9kZXYtPm5iYWx0OwpAQCAtNjE2LDEwICs2MTcsOSBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogY2xlYXIgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDApCS8qIGlmIGJ1bGsgdHJhbnNmZXIgKi8KKwkJaWYgKGdzcGNhX2Rldi0+YnVsaykKIAkJCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LAotCQkJCQl1c2JfcmN2aW50cGlwZShnc3BjYV9kZXYtPmRldiwKLQkJCQkJCSBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpKTsKKwkJCQkJZ3NwY2FfZGV2LT51cmJbMF0tPnBpcGUpOwogCiAJCS8qIHN0YXJ0IHRoZSBjYW0gKi8KIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdGFydChnc3BjYV9kZXYpOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMTsKIAogCQkvKiBzb21lIGJ1bGsgdHJhbnNmZXJzIGFyZSBzdGFydGVkIGJ5IHRoZSBzdWJkcml2ZXIgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDAgJiYgZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9PSAwKQorCQlpZiAoZ3NwY2FfZGV2LT5idWxrICYmIGdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPT0gMCkKIAkJCWJyZWFrOwogCiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwpAQCAtNjcxLDExICs2NzEsMTQgQEAKIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKLQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50Ci0JICAgICYmIGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCi0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4oZ3NwY2FfZGV2KTsKLQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKLQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCisJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CisJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCX0KKworCS8qIGFsd2F5cyBjYWxsIHN0b3AwIHRvIGZyZWUgdGhlIHN1YmRyaXZlcidzIHJlc291cmNlcyAqLwogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CiAJUERFQlVHKERfU1RSRUFNLCAic3RyZWFtIG9mZiBPSyIpOwpAQCAtNzYyLDcgKzc2NSw2IEBACiAJZm10ZGVzYy0+cGl4ZWxmb3JtYXQgPSBmbXRfdGJbaW5kZXhdOwogCWlmIChnc3BjYV9pc19jb21wcmVzc2VkKGZtdF90YltpbmRleF0pKQogCQlmbXRkZXNjLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKLQlmbXRkZXNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzBdID0gZm10ZGVzYy0+cGl4ZWxmb3JtYXQgJiAweGZmOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzFdID0gKGZtdGRlc2MtPnBpeGVsZm9ybWF0ID4+IDgpICYgMHhmZjsKIAlmbXRkZXNjLT5kZXNjcmlwdGlvblsyXSA9IChmbXRkZXNjLT5waXhlbGZvcm1hdCA+PiAxNikgJiAweGZmOwpAQCAtOTU3LDggKzk1OSwxNSBAQAogCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IHJldDsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKKwkvKiBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHVzYiBkZXZpY2UgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAJc3RybmNweShjYXAtPmRyaXZlciwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uYW1lLCBzaXplb2YgY2FwLT5kcml2ZXIpOwogCWlmIChnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCAhPSBOVUxMKSB7CiAJCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCwKQEAgLTk2OSwxMyArOTc4LDE1IEBACiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9Ci0Jc3RybmNweShjYXAtPmJ1c19pbmZvLCBnc3BjYV9kZXYtPmRldi0+YnVzLT5idXNfbmFtZSwKLQkJc2l6ZW9mIGNhcC0+YnVzX2luZm8pOworCXVzYl9tYWtlX3BhdGgoZ3NwY2FfZGV2LT5kZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQogCQkJICB8IFY0TDJfQ0FQX1NUUkVBTUlORwogCQkJICB8IFY0TDJfQ0FQX1JFQURXUklURTsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTAzOCw3ICsxMDQ5LDEwIEBACiAJCVBERUJVRyhEX0NPTkYsICJzZXQgY3RybCBbJTA4eF0gPSAlZCIsIGN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gY3RybHMtPnNldChnc3BjYV9kZXYsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5zZXQoZ3NwY2FfZGV2LCBjdHJsLT52YWx1ZSk7CisJCWVsc2UKKwkJCXJldCA9IC1FTk9ERVY7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTA2Miw3ICsxMDc2LDEwIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBjdHJscy0+Z2V0KGdzcGNhX2RldiwgJmN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5nZXQoZ3NwY2FfZGV2LCAmY3RybC0+dmFsdWUpOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEwODEsNyArMTA5OCw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQltZW1zZXQoYXVkaW8sIDAsIHNpemVvZiAqYXVkaW8pOwogCXN0cmNweShhdWRpby0+bmFtZSwgIk1pY3JvcGhvbmUiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTUsNyArMTEzMSw2IEBACiAKIAlpZiAoaW5wdXQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mICppbnB1dCk7CiAJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwKIAkJc2l6ZW9mIGlucHV0LT5uYW1lKTsKQEAgLTEyMjQsMTAgKzEyMzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwogCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMAogCSAgICB8fCAhKGdzcGNhX2Rldi0+ZnJhbWVbMF0udjRsMl9idWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEyOTUsNyArMTMwNywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMxMCw3ICsxMzI1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzIwLDggKzEzMzgsNiBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CiAKLQltZW1zZXQocGFybSwgMCwgc2l6ZW9mICpwYXJtKTsKLQlwYXJtLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CiAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybSkgewpAQCAtMTMyOSw3ICsxMzQ1LDExIEBACiAKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwgcGFybSk7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKKwkJCQkJCQkJIHBhcm0pOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEzNTQsNyArMTM3NCwxMSBAQAogCiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsIHBhcm0pOworCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsCisJCQkJCQkJCSBwYXJtKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMzgyLDcgKzE0MDYsNiBAQAogCQl7CiAJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwogCi0JCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mIGZtdCk7CiAJCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJCWkgPSBnc3BjYV9kZXYtPmNhbS5ubW9kZXMgLSAxOwkvKiBoaWdoZXN0IG1vZGUgKi8KIAkJCWZtdC5mbXQucGl4LndpZHRoID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGg7CkBAIC0xNTI4LDcgKzE1NTEsOCBAQAogCiAJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2spIHsKIAkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Ci0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9CiAJcmV0dXJuIGo7CkBAIC0xNTUwLDYgKzE1NzQsOSBAQAogCWlmICh2NGwyX2J1Zi0+bWVtb3J5ICE9IGdzcGNhX2Rldi0+bWVtb3J5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIGlmIG5vdCBzdHJlYW1pbmcsIGJlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGxvb3AgZm9yZXZlciAqLwogCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCSAgICAmJiAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgZ3NwY2FfZGV2LT51c2VycyA9PSAxKQpAQCAtMTcwMCw4ICsxNzI3LDYgQEAKIAlQREVCVUcoRF9GUkFNLCAicG9sbCIpOwogCiAJcG9sbF93YWl0KGZpbGUsICZnc3BjYV9kZXYtPndxLCB3YWl0KTsKLQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJcmV0dXJuIFBPTExFUlI7CiAKIAkvKiBpZiByZXFidWZzIGlzIG5vdCBkb25lLCB0aGUgdXNlciB3b3VsZCB1c2UgcmVhZCgpICovCiAJaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyA9PSAwKSB7CkBAIC0xNzE0LDEwICsxNzM5LDYgQEAKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykgIT0gMCkKIAkJcmV0dXJuIFBPTExFUlI7Ci0JaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKLQkJcmV0ID0gUE9MTEVSUjsKLQkJZ290byBvdXQ7Ci0JfQogCiAJLyogY2hlY2sgdGhlIG5leHQgaW5jb21pbmcgYnVmZmVyICovCiAJaSA9IGdzcGNhX2Rldi0+ZnJfbzsKQEAgLTE3MjYsOCArMTc0Nyw5IEBACiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CS8qIHNvbWV0aGluZyB0byByZWFkICovCiAJZWxzZQogCQlyZXQgPSAwOwotb3V0OgogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0dXJuIFBPTExIVVA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkyNSw3ICsxOTQ3LDcgQEAKIAlnc3BjYV9kZXYtPnByZXNlbnQgPSAxOwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2LAogCQkJCSAgVkZMX1RZUEVfR1JBQkJFUiwKLQkJCQkgIHZpZGVvX25yKTsKKwkJCQkgIC0xKTsKIAlpZiAocmV0IDwgMCkgewogCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBlcnIgJWQiLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTE5NTMsMTAgKzE5NzUsMTYgQEAKIAogCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7CisKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CisJfQorCisJLyogdGhlIGRldmljZSBpcyBmcmVlZCBhdCBleGl0IG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlnc3BjYV9kZXYtPmRldiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAotCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwotCWdzcGNhX2Rldi0+ZGV2ID0gTlVMTDsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggYzkwYWY5Yy4uZTRkNGNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMzMsMTkgKzMzLDEzIEBACiAjZW5kaWYKICN1bmRlZiBlcnIKICNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCiAjdW5kZWYgaW5mbwogI2RlZmluZSBpbmZvKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncykKICN1bmRlZiB3YXJuCiAjZGVmaW5lIHdhcm4oZm10LCBhcmdzLi4uKSBcCi0JZG8ge1wKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKQogCiAjZGVmaW5lIEdTUENBX01BWF9GUkFNRVMgMTYJLyogbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwogLyogaW1hZ2UgdHJhbnNmZXJzICovCkBAIC02Miw3ICs1Niw2IEBACiAJCQkJICogLSBjYW5ub3QgYmUgPiBNQVhfTlVSQlMKIAkJCQkgKiAtIHdoZW4gMCBhbmQgYnVsa19zaXplICE9IDAgbWVhbnMKIAkJCQkgKiAgIDEgVVJCIGFuZCBzdWJtaXQgZG9uZSBieSBzdWJkcml2ZXIgKi8KLQlfX3U4IGVwYWRkcjsKIH07CiAKIHN0cnVjdCBnc3BjYV9kZXY7CkBAIC0xNzQsNiArMTY3LDcgQEAKIAlfX3U4IGlmYWNlOwkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCiAJX191OCBhbHQ7CQkJLyogVVNCIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJX191OCBuYmFsdDsJCQkvKiBudW1iZXIgb2YgVVNCIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCXU4IGJ1bGs7CQkJLyogaW1hZ2UgdHJhbnNmZXIgYnkgMDppc29jIC8gMTpidWxrICovCiB9OwogCiBpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAppbmRleCBkODIzYjQ3Li5kZTYzYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaApAQCAtMjQsMTcxICsyNCwzOSBAQAogICoKICAqLwogCi0vKiBzdGFydCBvZiBqcGVnIGZyYW1lICsgcXVhbnRpemF0aW9uIHRhYmxlICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxdWFudFtdWzB4ODhdID0gewotLyogaW5kZXggMCAtIFE0MCovCi0gICAgewotCTB4ZmYsIDB4ZDgsCQkJLyoganBlZyAqLwotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCQkJCQkvKiBxdWFudGl6YXRpb24gdGFibGUgcGFydCAxICovCi0gICAgIDIwLCAxNCwgMTUsIDE4LCAxNSwgMTMsIDIwLCAxOCwgMTYsIDE4LCAyMywgMjEsIDIwLCAyNCwgMzAsIDUwLAotICAgICAzMywgMzAsIDI4LCAyOCwgMzAsIDYxLCA0NCwgNDYsIDM2LCA1MCwgNzMsIDY0LCA3NiwgNzUsIDcxLCA2NCwKLSAgICAgNzAsIDY5LCA4MCwgOTAsIDExNSwgOTgsIDgwLCA4NSwgMTA5LCA4NiwgNjksIDcwLCAxMDAsIDEzNiwgMTAxLAotICAgICAxMDksCi0gICAgIDExOSwgMTIzLCAxMjksIDEzMCwgMTI5LCA3OCwgOTYsIDE0MSwgMTUxLCAxNDAsIDEyNSwgMTUwLCAxMTUsCi0gICAgIDEyNiwgMTI5LCAxMjQsCi0xLAkJCQkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHBhcnQgMiAqLwotICAgICAyMSwgMjMsIDIzLCAzMCwgMjYsIDMwLCA1OSwgMzMsIDMzLCA1OSwgMTI0LCA4MywgNzAsIDgzLCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNH0sCi0vKiBpbmRleCAxIC0gUTUwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTYsIDExLCAxMiwgMTQsIDEyLCAxMCwgMTYsIDE0LCAxMywgMTQsIDE4LCAxNywgMTYsIDE5LCAyNCwgNDAsCi0gICAgIDI2LCAyNCwgMjIsIDIyLCAyNCwgNDksIDM1LCAzNywgMjksIDQwLCA1OCwgNTEsIDYxLCA2MCwgNTcsIDUxLAotICAgICA1NiwgNTUsIDY0LCA3MiwgOTIsIDc4LCA2NCwgNjgsIDg3LCA2OSwgNTUsIDU2LCA4MCwgMTA5LCA4MSwgODcsCi0gICAgIDk1LCA5OCwgMTAzLCAxMDQsIDEwMywgNjIsIDc3LCAxMTMsIDEyMSwgMTEyLCAxMDAsIDEyMCwgOTIsIDEwMSwKLSAgICAgMTAzLCA5OSwKLTEsCi0gICAgMTcsIDE4LCAxOCwgMjQsIDIxLCAyNCwgNDcsIDI2LCAyNiwgNDcsIDk5LCA2NiwgNTYsIDY2LCA5OSwgOTksCi0gICAgIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LAotICAgICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKLSAgICAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTl9LAotLyogaW5kZXggMiBRNjAgKi8KLSAgICB7Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotICAgICAxMywgOSwgMTAsIDExLCAxMCwgOCwgMTMsIDExLCAxMCwgMTEsIDE0LCAxNCwgMTMsIDE1LCAxOSwgMzIsCi0gICAgIDIxLCAxOSwgMTgsIDE4LCAxOSwgMzksIDI4LCAzMCwgMjMsIDMyLCA0NiwgNDEsIDQ5LCA0OCwgNDYsIDQxLAotICAgICA0NSwgNDQsIDUxLCA1OCwgNzQsIDYyLCA1MSwgNTQsIDcwLCA1NSwgNDQsIDQ1LCA2NCwgODcsIDY1LCA3MCwKLSAgICAgNzYsIDc4LCA4MiwgODMsIDgyLCA1MCwgNjIsIDkwLCA5NywgOTAsIDgwLCA5NiwgNzQsIDgxLCA4MiwgNzksCi0xLAotICAgICAxNCwgMTQsIDE0LCAxOSwgMTcsIDE5LCAzOCwgMjEsIDIxLCAzOCwgNzksIDUzLCA0NSwgNTMsIDc5LCA3OSwKLSAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksCi0gICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LAotICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OX0sCi0vKiBpbmRleCAzIC0gUTcwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTAsIDcsIDcsIDgsIDcsIDYsIDEwLCA4LCA4LCA4LCAxMSwgMTAsIDEwLCAxMSwgMTQsIDI0LAotICAgICAxNiwgMTQsIDEzLCAxMywgMTQsIDI5LCAyMSwgMjIsIDE3LCAyNCwgMzUsIDMxLCAzNywgMzYsIDM0LCAzMSwKLSAgICAgMzQsIDMzLCAzOCwgNDMsIDU1LCA0NywgMzgsIDQxLCA1MiwgNDEsIDMzLCAzNCwgNDgsIDY1LCA0OSwgNTIsCi0gICAgIDU3LCA1OSwgNjIsIDYyLCA2MiwgMzcsIDQ2LCA2OCwgNzMsIDY3LCA2MCwgNzIsIDU1LCA2MSwgNjIsIDU5LAotMSwKLSAgICAgMTAsIDExLCAxMSwgMTQsIDEzLCAxNCwgMjgsIDE2LCAxNiwgMjgsIDU5LCA0MCwgMzQsIDQwLCA1OSwgNTksCi0gICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTl9LAotLyogaW5kZXggNCAtIFE4MCAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgICA2LCA0LCA1LCA2LCA1LCA0LCA2LCA2LCA1LCA2LCA3LCA3LCA2LCA4LCAxMCwgMTYsCi0gICAgIDEwLCAxMCwgOSwgOSwgMTAsIDIwLCAxNCwgMTUsIDEyLCAxNiwgMjMsIDIwLCAyNCwgMjQsIDIzLCAyMCwKLSAgICAgMjIsIDIyLCAyNiwgMjksIDM3LCAzMSwgMjYsIDI3LCAzNSwgMjgsIDIyLCAyMiwgMzIsIDQ0LCAzMiwgMzUsCi0gICAgIDM4LCAzOSwgNDEsIDQyLCA0MSwgMjUsIDMxLCA0NSwgNDgsIDQ1LCA0MCwgNDgsIDM3LCA0MCwgNDEsIDQwLAotMSwKLSAgICAgIDcsIDcsIDcsIDEwLCA4LCAxMCwgMTksIDEwLCAxMCwgMTksIDQwLCAyNiwgMjIsIDI2LCA0MCwgNDAsCi0gICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLAotICAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwKLSAgICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDB9LAotLyogaW5kZXggNSAtIFE4NSAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgIDUsIDMsIDQsIDQsIDQsIDMsIDUsIDQsIDQsIDQsIDUsIDUsIDUsIDYsIDcsIDEyLAotICAgICA4LCA3LCA3LCA3LCA3LCAxNSwgMTEsIDExLCA5LCAxMiwgMTcsIDE1LCAxOCwgMTgsIDE3LCAxNSwKLSAgICAgMTcsIDE3LCAxOSwgMjIsIDI4LCAyMywgMTksIDIwLCAyNiwgMjEsIDE3LCAxNywgMjQsIDMzLCAyNCwgMjYsCi0gICAgIDI5LCAyOSwgMzEsIDMxLCAzMSwgMTksIDIzLCAzNCwgMzYsIDM0LCAzMCwgMzYsIDI4LCAzMCwgMzEsIDMwLAotMSwKLSAgICAgNSwgNSwgNSwgNywgNiwgNywgMTQsIDgsIDgsIDE0LCAzMCwgMjAsIDE3LCAyMCwgMzAsIDMwLAotICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwKLSAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsCi0gICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSwKLS8qIGluZGV4IDYgLSA4NiAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDA0LAotCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDUsIDB4MDcsIDB4MEIsCi0JMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwRSwgMHgwQSwgMHgwQSwKLQkweDA4LCAweDBCLCAweDEwLCAweDBFLCAweDExLCAweDExLCAweDEwLCAweDBFLAotCTB4MTAsIDB4MEYsIDB4MTIsIDB4MTQsIDB4MUEsIDB4MTYsIDB4MTIsIDB4MTMsCi0JMHgxOCwgMHgxMywgMHgwRiwgMHgxMCwgMHgxNiwgMHgxRiwgMHgxNywgMHgxOCwKLQkweDFCLCAweDFCLCAweDFELCAweDFELCAweDFELCAweDExLCAweDE2LCAweDIwLAotCTB4MjIsIDB4MUYsIDB4MUMsIDB4MjIsIDB4MUEsIDB4MUMsIDB4MUQsIDB4MUMsCi0xLAotCTB4MDUsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDYsIDB4MDcsIDB4MEQsIDB4MDcsCi0JMHgwNywgMHgwRCwgMHgxQywgMHgxMiwgMHgxMCwgMHgxMiwgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLSB9LAotLyogaW5kZXggNyAtIDg4ICovCi17Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotCTB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsCi0JMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNiwgMHgwQSwKLQkweDA2LCAweDA2LCAweDA1LCAweDA1LCAweDA2LCAweDBDLCAweDA4LCAweDA5LAotCTB4MDcsIDB4MEEsIDB4MEUsIDB4MEMsIDB4MEYsIDB4MEUsIDB4MEUsIDB4MEMsCi0JMHgwRCwgMHgwRCwgMHgwRiwgMHgxMSwgMHgxNiwgMHgxMywgMHgwRiwgMHgxMCwKLQkweDE1LCAweDExLCAweDBELCAweDBELCAweDEzLCAweDFBLCAweDEzLCAweDE1LAotCTB4MTcsIDB4MTgsIDB4MTksIDB4MTksIDB4MTksIDB4MEYsIDB4MTIsIDB4MUIsCi0JMHgxRCwgMHgxQiwgMHgxOCwgMHgxRCwgMHgxNiwgMHgxOCwgMHgxOSwgMHgxOCwKLTEsCi0JMHgwNCwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNSwgMHgwNiwgMHgwQiwgMHgwNiwKLQkweDA2LCAweDBCLCAweDE4LCAweDEwLCAweDBELCAweDEwLCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotfSwKLS8qIGluZGV4IDggLSA/PyAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDUsCi0JMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNiwgMHgwNCwgMHgwNSwKLQkweDA0LCAweDA1LCAweDA3LCAweDA2LCAweDA4LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDcsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEEsIDB4MDgsIDB4MDksCi0JMHgwQiwgMHgwOSwgMHgwNywgMHgwNywgMHgwQSwgMHgwRSwgMHgwQSwgMHgwQiwKLQkweDBDLCAweDBDLCAweDBELCAweDBELCAweDBELCAweDA4LCAweDBBLCAweDBFLAotCTB4MEYsIDB4MEUsIDB4MEQsIDB4MEYsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEMsCi0xLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDYsIDB4MDMsCi0JMHgwMywgMHgwNiwgMHgwQywgMHgwOCwgMHgwNywgMHgwOCwgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQwotfQotfTsKKy8qCisgKiBnZW5lcmF0aW9uIG9wdGlvbnMKKyAqCUNPTkVYX0NBTQlDb25leGFudCBpZiBwcmVzZW50CisgKi8KIAotLyogaHVmZm1hbiB0YWJsZSArIHN0YXJ0IG9mIFNPRjAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGh1ZmZtYW5bXSA9IHsKKy8qIEpQRUcgaGVhZGVyICovCitzdGF0aWMgY29uc3QgdTgganBlZ19oZWFkW10gPSB7CisJMHhmZiwgMHhkOCwJCQkvKiBqcGVnICovCisKKy8qIHF1YW50aXphdGlvbiB0YWJsZSBxdWFsaXR5IDUwJSAqLworCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCisjZGVmaW5lIEpQRUdfUVQwX09GRlNFVCA3CisJMHgxMCwgMHgwYiwgMHgwYywgMHgwZSwgMHgwYywgMHgwYSwgMHgxMCwgMHgwZSwKKwkweDBkLCAweDBlLCAweDEyLCAweDExLCAweDEwLCAweDEzLCAweDE4LCAweDI4LAorCTB4MWEsIDB4MTgsIDB4MTYsIDB4MTYsIDB4MTgsIDB4MzEsIDB4MjMsIDB4MjUsCisJMHgxZCwgMHgyOCwgMHgzYSwgMHgzMywgMHgzZCwgMHgzYywgMHgzOSwgMHgzMywKKwkweDM4LCAweDM3LCAweDQwLCAweDQ4LCAweDVjLCAweDRlLCAweDQwLCAweDQ0LAorCTB4NTcsIDB4NDUsIDB4MzcsIDB4MzgsIDB4NTAsIDB4NmQsIDB4NTEsIDB4NTcsCisJMHg1ZiwgMHg2MiwgMHg2NywgMHg2OCwgMHg2NywgMHgzZSwgMHg0ZCwgMHg3MSwKKwkweDc5LCAweDcwLCAweDY0LCAweDc4LCAweDVjLCAweDY1LCAweDY3LCAweDYzLAorMSwKKyNkZWZpbmUgSlBFR19RVDFfT0ZGU0VUIDcyCisJMHgxMSwgMHgxMiwgMHgxMiwgMHgxOCwgMHgxNSwgMHgxOCwgMHgyZiwgMHgxYSwKKwkweDFhLCAweDJmLCAweDYzLCAweDQyLCAweDM4LCAweDQyLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCisvKiBodWZmbWFuIHRhYmxlICovCiAJMHhmZiwgMHhjNCwgMHgwMSwgMHhhMiwKIAkweDAwLCAweDAwLCAweDAxLCAweDA1LCAweDAxLCAweDAxLCAweDAxLCAweDAxLAogCTB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yNDQsNTggKzExMiw1NyBAQAogCTB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsCiAjaWZkZWYgQ09ORVhfQ0FNCiAvKiB0aGUgQ29uZXhhbnQgZnJhbWVzIHN0YXJ0IHdpdGggU09GMCAqLworI2RlZmluZSBKUEVHX0hEUl9TWiA1NTYKICNlbHNlCiAJMHhmZiwgMHhjMCwgMHgwMCwgMHgxMSwJCS8qIFNPRjAgKHN0YXJ0IG9mIGZyYW1lIDAgKi8KIAkweDA4LAkJCQkvKiBkYXRhIHByZWNpc2lvbiAqLwotI2VuZGlmCi19OwotCi0jaWZuZGVmIENPTkVYX0NBTQotLyogdmFyaWFibGUgcGFydDoKLSAqCTB4MDEsIDB4ZTAsCQkJIGhlaWdodAotICoJMHgwMiwgMHg4MCwJCQkgd2lkdGgKLSAqCTB4MDMsCQkJCSBjb21wb25lbnQgbnVtYmVyCi0gKgkJMHgwMSwKLSAqCQkJMHgyMSwJCQlzYW1wbGVzIFkKLSAqLwotCi0vKiBlbmQgb2YgaGVhZGVyICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBlb2hbXSA9IHsKKyNkZWZpbmUgSlBFR19IRUlHSFRfT0ZGU0VUIDU2MQorCTB4MDEsIDB4ZTAsCQkJLyogaGVpZ2h0ICovCisJMHgwMiwgMHg4MCwJCQkvKiB3aWR0aCAqLworCTB4MDMsCQkJCS8qIGNvbXBvbmVudCBudW1iZXIgKi8KKwkJMHgwMSwKKwkJCTB4MjEsCQkvKiBzYW1wbGVzIFkgKi8KIAkJCTB4MDAsCQkvKiBxdWFudCBZICovCiAJCTB4MDIsIDB4MTEsIDB4MDEsCS8qIHNhbXBsZXMgQ2JDciAtIHF1YW50IENiQ3IgKi8KIAkJMHgwMywgMHgxMSwgMHgwMSwKIAogCTB4ZmYsIDB4ZGEsIDB4MDAsIDB4MGMsCQkvKiBTT1MgKHN0YXJ0IG9mIHNjYW4pICovCiAJMHgwMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwMywgMHgxMSwgMHgwMCwgMHgzZiwgMHgwMAorI2RlZmluZSBKUEVHX0hEUl9TWiA1ODkKKyNlbmRpZgogfTsKLSNlbmRpZgogCi0vKiAtLSBvdXRwdXQgdGhlIEpQRUcgaGVhZGVyIC0tICovCi1zdGF0aWMgdm9pZCBqcGVnX3B1dF9oZWFkZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICAgIHN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCi0JCQkgICAgaW50IHFpbmRleCwKLQkJCSAgICBpbnQgc2FtcGxlc1kpCisvKiBkZWZpbmUgdGhlIEpQRUcgaGVhZGVyICovCitzdGF0aWMgdm9pZCBqcGVnX2RlZmluZSh1OCAqanBlZ19oZHIsCisJCQlpbnQgaGVpZ2h0LAorCQkJaW50IHdpZHRoLAorCQkJaW50IHNhbXBsZXNZKQogeworCW1lbWNweShqcGVnX2hkciwganBlZ19oZWFkLCBzaXplb2YganBlZ19oZWFkKTsKICNpZm5kZWYgQ09ORVhfQ0FNCi0JdW5zaWduZWQgY2hhciB0bXBidWZbOF07CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMF0gPSBoZWlnaHQgPj4gODsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAxXSA9IGhlaWdodCAmIDB4ZmY7CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMl0gPSB3aWR0aCA+PiA4OworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDNdID0gd2lkdGggJiAweGZmOworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDZdID0gc2FtcGxlc1k7CiAjZW5kaWYKK30KIAotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBxdWFudFtxaW5kZXhdLCBzaXplb2YgcXVhbnRbMF0pOwotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBodWZmbWFuLCBzaXplb2YgaHVmZm1hbik7Ci0jaWZuZGVmIENPTkVYX0NBTQotCXRtcGJ1ZlswXSA9IGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDg7Ci0JdG1wYnVmWzFdID0gZ3NwY2FfZGV2LT5oZWlnaHQgJiAweGZmOwotCXRtcGJ1ZlsyXSA9IGdzcGNhX2Rldi0+d2lkdGggPj4gODsKLQl0bXBidWZbM10gPSBnc3BjYV9kZXYtPndpZHRoICYgMHhmZjsKLQl0bXBidWZbNF0gPSAweDAzOwkJLyogY29tcG9uZW50IG51bWJlciAqLwotCXRtcGJ1Zls1XSA9IDB4MDE7CQkvKiBmaXJzdCBjb21wb25lbnQgKi8KLQl0bXBidWZbNl0gPSBzYW1wbGVzWTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJdG1wYnVmLCA3KTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJZW9oLCBzaXplb2YgZW9oKTsKLSNlbmRpZgorLyogc2V0IHRoZSBKUEVHIHF1YWxpdHkgKi8KK3N0YXRpYyB2b2lkIGpwZWdfc2V0X3F1YWwodTggKmpwZWdfaGRyLAorCQkJICBpbnQgcXVhbGl0eSkKK3sKKwlpbnQgaSwgc2M7CisKKwlpZiAocXVhbGl0eSA8IDUwKQorCQlzYyA9IDUwMDAgLyBxdWFsaXR5OworCWVsc2UKKwkJc2MgPSAyMDAgLSBxdWFsaXR5ICogMjsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlqcGVnX2hkcltKUEVHX1FUMF9PRkZTRVQgKyBpXSA9CisJCQkoanBlZ19oZWFkW0pQRUdfUVQwX09GRlNFVCArIGldICogc2MgKyA1MCkgLyAxMDA7CisJCWpwZWdfaGRyW0pQRUdfUVQxX09GRlNFVCArIGldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDFfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggZWQ5MDZmZS4uYjM1ZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogCWludCBlcnI7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSAmc2RfZGVzYzsKIAogCWlmIChkdW1wX2JyaWRnZSkKQEAgLTM3NCw4ICszNzMsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IG1vZF9tNTYwMl9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKaW5kZXggM2QyMDkwZS4uNzVlOGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKQEAgLTMyLDE3ICszMiw5MSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JY2hhciBxaW5kZXg7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb2xvcnM7CisJdTggZ2FtbWE7CisJdTggc2hhcnBuZXNzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDcwCisjZGVmaW5lIFFVQUxJVFlfREVGIDUwCisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMzAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTUKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDIwMAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDMsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgR0FNTUFfREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQU1NQV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYW1tYSwKKwkgICAgLmdldCA9IHNkX2dldGdhbW1hLAorCX0sCisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU4OSwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkucHJpdiA9IDJ9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKQEAgLTUyLDY1ICsxMjYsNDUgQEAKIAkJLnByaXYgPSAxfSwKIH07CiAKLS8qIE1JIFJlZ2lzdGVyIHRhYmxlIC8vZWx2aXMgKi8KLWVudW0gewotCVJFR19IV19NSV8wLAotCVJFR19IV19NSV8xLAotCVJFR19IV19NSV8yLAotCVJFR19IV19NSV8zLAotCVJFR19IV19NSV80LAotCVJFR19IV19NSV81LAotCVJFR19IV19NSV82LAotCVJFR19IV19NSV83LAotCVJFR19IV19NSV85ID0gMHgwOSwKLQlSRUdfSFdfTUlfQiA9IDB4MEIsCi0JUkVHX0hXX01JX0MsCi0JUkVHX0hXX01JX0QsCi0JUkVHX0hXX01JXzFFID0gMHgxRSwKLQlSRUdfSFdfTUlfMjAgPSAweDIwLAotCVJFR19IV19NSV8yQiA9IDB4MkIsCi0JUkVHX0hXX01JXzJDLAotCVJFR19IV19NSV8yRCwKLQlSRUdfSFdfTUlfMkUsCi0JUkVHX0hXX01JXzM1ID0gMHgzNSwKLQlSRUdfSFdfTUlfNUYgPSAweDVmLAotCVJFR19IV19NSV82MCwKLQlSRUdfSFdfTUlfNjEsCi0JUkVHX0hXX01JXzYyLAotCVJFR19IV19NSV82MywKLQlSRUdfSFdfTUlfNjQsCi0JUkVHX0hXX01JX0YxID0gMHhmMSwKLQlBVFRSX1RPVEFMX01JX1JFRyA9IDB4ZjIKK3N0YXRpYyBjb25zdCBfX3U4IG1pX2RhdGFbMHgyMF0gPSB7CisvKgkgMDEgICAgMDIgICAwMyAgICAgMDQgICAgMDUgICAgMDYgICAgMDcgICAgMDggKi8KKwkweDQ4LCAweDIyLCAweDAxLCAweDQ3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLAorLyoJIDA5ICAgIDBhICAgMGIgICAgIDBjICAgIDBkICAgIDBlICAgIDBmICAgIDEwICovCisJMHgwMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwKKy8qCSAxMSAgICAxMiAgIDEzICAgICAxNCAgICAxNSAgICAxNiAgICAxNyAgICAxOCAqLworCTB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZTIsIDB4MDIsCisvKgkgMTkgICAgMWEgICAxYiAgICAgMWMgICAgMWQgICAgMWUgICAgMWYgICAgMjAgKi8KKwkweDgyLCAweDAwLCAweDIwLCAweDE3LCAweDgwLCAweDA4LCAweDBjLCAweDAwCiB9OwogCi0vKiB0aGUgYnl0ZXMgdG8gd3JpdGUgYXJlIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworLyogd3JpdGUgPGxlbj4gYnl0ZXMgZnJvbSBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgX191MTYgaW5kZXgsIGludCBsZW4pCisJCSBpbnQgbGVuKQogewotCWludCByYzsKKwlpbnQgYWxlbiwgcmV0OwogCi0JcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQkgdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKLQkJCSAweDEyLAotCQkJIDB4YzgsCQkvKiA/PyAqLwotCQkJIDAsCQkvKiB2YWx1ZSAqLwotCQkJIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKLQlpZiAocmMgPCAwKQotCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwgaW5kZXgsIHJjKTsKLQlyZXR1cm4gcmM7CisJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKKwkJCWxlbiwKKwkJCSZhbGVuLAorCQkJNTAwKTsJLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlIFslMDJ4XSBlcnJvciAlZCIsCisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYnVsa193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgKnBjaCwKLQkJICAgX191MTYgQWRkcmVzcykKK3N0YXRpYyB2b2lkIG1pX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgdTggYWRkciwKKwkJIHU4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MWY7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsJCQkvKiBjb250cm9sIGJ5dGUgKi8KLQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBBZGRyZXNzOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9ICpwY2ggPj4gODsJCS8qIGhpZ2ggYnl0ZSAqLwotCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9ICpwY2g7CQkJLyogbG93IGJ5dGUgKi8KKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBhZGRyOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IHZhbHVlOwogCi0JcmVnX3coZ3NwY2FfZGV2LCBBZGRyZXNzLCA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDQpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xMjEsMTAgKzE3NSwxNCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7Ci0Jc2QtPnFpbmRleCA9IDE7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gdGFibGUgKi8KKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPmdhbW1hID0gR0FNTUFfREVGOworCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJZ3NwY2FfZGV2LT5uYmFsdCA9IDk7CQkvKiB1c2UgdGhlIGFsdHNldHRpbmcgMDggKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2LDI0ICsxOTQsMjIgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBlcnJfY29kZTsKLQlfX3U4ICpkYXRhOwotCV9fdTE2ICpNSV9idWY7Ci0JaW50IGhfc2l6ZSwgdl9zaXplOwotCWludCBpbnRwaXBlOworCXU4ICpkYXRhOworCWludCBpOwogCi0JUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0LCBpZmFjZSAlZCwgYWx0IDgiLCBnc3BjYV9kZXYtPmlmYWNlKTsKLQllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCA4KTsKLQlpZiAoZXJyX2NvZGUgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOwotCQlyZXR1cm4gZXJyX2NvZGU7Ci0JfQorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKIAlkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCiAJZGF0YVswXSA9IDB4MDE7CQkvKiBhZGRyZXNzICovCiAJZGF0YVsxXSA9IDB4MDE7Ci0KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIApAQCAtMTYzLDMwICsyMTksMjggQEAKIAlkYXRhWzBdID0gMHgwMDsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwYyB8IDB4MDE7CS8qIHJlZyAwICovCiAJZGF0YVsyXSA9IDB4MDE7CQkvKiByZWcgMSAqLwotCWhfc2l6ZSA9IGdzcGNhX2Rldi0+d2lkdGg7Ci0Jdl9zaXplID0gZ3NwY2FfZGV2LT5oZWlnaHQ7Ci0JZGF0YVszXSA9IGhfc2l6ZSAvIDg7CS8qIGhfc2l6ZSAsIHJlZyAyICovCi0JZGF0YVs0XSA9IHZfc2l6ZSAvIDg7CS8qIHZfc2l6ZSAsIHJlZyAzICovCisJZGF0YVszXSA9IGdzcGNhX2Rldi0+d2lkdGggLyA4OwkJLyogaF9zaXplICwgcmVnIDIgKi8KKwlkYXRhWzRdID0gZ3NwY2FfZGV2LT5oZWlnaHQgLyA4OwkvKiB2X3NpemUgLCByZWcgMyAqLwogCWRhdGFbNV0gPSAweDMwOwkJLyogcmVnIDQsIE1JLCBQQVM1MTAxIDoKIAkJCQkgKgkweDMwIGZvciAyNG1oeiAsIDB4MjggZm9yIDEybWh6ICovCi0JZGF0YVs2XSA9IDQ7CQkvKiByZWcgNSwgSCBzdGFydCAqLwotCWRhdGFbN10gPSAweGMwOwkJLyogcmVnIDYsIGdhbW1hIDEuNSAqLwotCWRhdGFbOF0gPSAzOwkJLyogcmVnIDcsIFYgc3RhcnQgKi8KKwlkYXRhWzZdID0gMHgwMjsJCS8qIHJlZyA1LCBIIHN0YXJ0IC0gd2FzIDB4MDQgKi8KKwlkYXRhWzddID0gc2QtPmdhbW1hICogMHg0MDsJLyogcmVnIDB4MDY6IGdhbW1hICovCisJZGF0YVs4XSA9IDB4MDE7CQkvKiByZWcgNywgViBzdGFydCAtIHdhcyAweDAzICovCiAvKglpZiAoaF9zaXplID09IDMyMCApICovCiAvKgkJZGF0YVs5XT0gMHg1NjsJICogcmVnIDgsIDI0TUh6LCAyOjEgc2NhbGUgZG93biAqLwogLyoJZWxzZSAqLwogCWRhdGFbOV0gPSAweDUyOwkJLyogcmVnIDgsIDI0TUh6LCBubyBzY2FsZSBkb3duICovCi0JZGF0YVsxMF0gPSAweDVkOwkvKiByZWcgOSwgSTJDIGRldmljZSBhZGRyZXNzCi0JCQkJICoJW2ZvciBQQVM1MTAxICgweDQwKV0gW2ZvciBNSSAoMHg1ZCldICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMTBdID0gMHgxODsKIAotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAxMSk7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHgyMzsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwOTsJCS8qIHJlZyAzNSwgYXBwZW5kIGZyYW1lIGhlYWRlciAqLwogCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKQEAgLTE5NywxMzcgKzI1MSw1NyBAQAogLyoJZWxzZSAqLwogCWRhdGFbMV0gPSA1MDsJCS8qIDUwIHJlZyA2MCwgcGMtY2FtIGZyYW1lIHNpemUKIAkJCQkgKgkodW5pdDogNEtCKSAyMDBLQiAqLwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCi0JaWYgKDApIHsJCQkvKiBmaXhlZCBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoMS43NSkgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDNmOwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCWRhdGFbNF0gPSAwOwkJLyogcmVnIDk3LCBzZXQgZml4ZWQgZGFyayBsZXZlbCAqLwotCQlkYXRhWzVdID0gMDsJCS8qIHJlZyA5OCwgZG9uJ3QgY2FyZSAqLwotCX0gZWxzZSB7CQkJLyogYXV0byBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoYXV0bykgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDc4OwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewotLyoJCWNhc2UgMTI4MDogKi8KLS8qCQkJZGF0YVs0XSA9IDE1NDsKLQkJCQkgKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludCAodW5pdDogMjU2IHBpeGVsKSAqLwotLyoJCQlkYXRhWzVdID0gNTE7Ci0JCQkJICogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkgKgkodWludDogMjU2IHBpeGVsKSAqLwotLyoJCQlicmVhazsgKi8KLQkJZGVmYXVsdDoKLS8qCQljYXNlIDY0MDogKi8KLQkJCWRhdGFbNF0gPSAzNjsJLyogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQKLQkJCQkJICoJKHVuaXQ6IDI1NiBwaXhlbCkgKi8KLQkJCWRhdGFbNV0gPSAxMjsJLyogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkJICoJKHVpbnQ6IDI1NiBwaXhlbCkgKi8KLQkJCWJyZWFrOwotCQljYXNlIDMyMDoKLQkJCWRhdGFbNF0gPSA5OwkvKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludAotCQkJCQkgKgkodW5pdDogMjU2IHBpeGVsKSAqLwotCQkJZGF0YVs1XSA9IDM7CS8qIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50Ci0JCQkJCSAqCSh1aW50OiAyNTYgcGl4ZWwpICovCi0JCQlicmVhazsKLQkJfQotCX0KIAkvKiBhdXRvIGRhcmstZ2FpbiAqLwogCWRhdGFbMF0gPSAweDVlOwkJLyogYWRkcmVzcyAqLworCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKGF1dG8pICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCQkJCS8qIHJlZyAweDVmLzB4NjAgKExFKSA9IHNhdHVyYXRpb24gKi8KKwkJCQkvKiBoICg2MCk6IHh4eHggeDEwMAorCQkJCSAqIGwgKDVmKTogeHh4eCB4MDAwICovCisJZGF0YVsyXSA9IHNkLT5jb2xvcnMgPDwgMzsKKwlkYXRhWzNdID0gKChzZC0+Y29sb3JzID4+IDIpICYgMHhmOCkgfCAweDA0OworCWRhdGFbNF0gPSBzZC0+YnJpZ2h0bmVzczsgLyogcmVnIDB4NjEgPSBicmlnaHRuZXNzICovCisJZGF0YVs1XSA9IDB4MDA7CiAKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgNik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDYpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAogCWRhdGFbMF0gPSAweDY3OwotCWRhdGFbMV0gPSAweDEzOwkJLyogcmVnIDEwMywgZmlyc3QgcGl4ZWwgQiwgZGlzYWJsZSBzaGFycG5lc3MgKi8KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMV0gPSBzZC0+c2hhcnBuZXNzICogNCArIDM7CisJZGF0YVsyXSA9IDB4MTQ7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDMpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgTUkgc2Vuc29yLi4uCi0JICovCi0JTUlfYnVmID0ga3phbGxvYyhBVFRSX1RPVEFMX01JX1JFRyAqIHNpemVvZiAqTUlfYnVmLCBHRlBfS0VSTkVMKTsKLQlNSV9idWZbUkVHX0hXX01JXzFdID0gMHgwMDBhOwotCU1JX2J1ZltSRUdfSFdfTUlfMl0gPSAweDAwMGM7Ci0JTUlfYnVmW1JFR19IV19NSV8zXSA9IDB4MDQwNTsKLQlNSV9idWZbUkVHX0hXX01JXzRdID0gMHgwNTA3OwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfNV0JID0gMHgwMWZmOy8vMTMgKi8KLQlNSV9idWZbUkVHX0hXX01JXzVdID0gMHgwMDEzOwkvKiAxMyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfNl0gPSAweDAwMWY7CS8qIHZlcnRpY2FsIGJsYW5raW5nICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV82XQkgPSAweDA0MDA7ICAvLyB2ZXJ0aWNhbCBibGFua2luZyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfN10gPSAweDAwMDI7Ci0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAxNWY7ICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAzMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV85XSA9IDB4MDM3NDsKLQlNSV9idWZbUkVHX0hXX01JX0JdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfQ10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9EXSA9IDB4MDAwMDsKLQlNSV9idWZbUkVHX0hXX01JXzFFXSA9IDB4ODAwMDsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMjBdCSAgPSAweDExMDQ7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yMF0gPSAweDExMDQ7CS8qIDB4MTExYzsgKi8KLQlNSV9idWZbUkVHX0hXX01JXzJCXSA9IDB4MDAwODsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMkNdCSAgPSAweDAwMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yQ10gPSAweDAwMWY7CS8qIGxpdGEgc3VnZ2VzdCAqLwotCU1JX2J1ZltSRUdfSFdfTUlfMkRdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMkVdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMzVdID0gMHgwMDUxOwotCU1JX2J1ZltSRUdfSFdfTUlfNUZdID0gMHgwOTA0OwkvKiBmYWlsIHRvIHdyaXRlICovCi0JTUlfYnVmW1JFR19IV19NSV82MF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82MV0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82Ml0gPSAweDA0OTg7Ci0JTUlfYnVmW1JFR19IV19NSV82M10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82NF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9GMV0gPSAweDAwMDE7Ci0JLyogY2hhbmdpbmcgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGlmZmVyZW50IHZhbHVlIG9mIGR4L2R5ICovCisJZGF0YVswXSA9IDB4Njk7CisJZGF0YVsxXSA9IDB4MmY7CisJZGF0YVsyXSA9IDB4Mjg7CisJZGF0YVszXSA9IDB4NDI7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWlmIChnc3BjYV9kZXYtPndpZHRoICE9IDEyODApIHsKLQkJTUlfYnVmWzB4MDFdID0gMHgwMTBhOwotCQlNSV9idWZbMHgwMl0gPSAweDAxNGM7Ci0JCU1JX2J1ZlsweDAzXSA9IDB4MDFlNTsKLQkJTUlfYnVmWzB4MDRdID0gMHgwMjg3OwotCX0KLQlNSV9idWZbMHgyMF0gPSAweDExMDQ7CisJZGF0YVswXSA9IDB4NjM7CisJZGF0YVsxXSA9IDB4MDc7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworLypqZm06IHdpbiB0cmFjZSAtIG1hbnkgd3JpdGVzIGhlcmUgdG8gcmVnIDB4NjQqLworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDEsIDEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDIsIDIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDMsIDMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDQsIDQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDUsIDUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDYsIDYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDcsIDcpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDksIDkpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGIsIDB4MGIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGMsIDB4MGMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGQsIDB4MGQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MWUsIDB4MWUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MjAsIDB4MjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmIsIDB4MmIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmMsIDB4MmMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmQsIDB4MmQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmUsIDB4MmUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MzUsIDB4MzUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NWYsIDB4NWYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjAsIDB4NjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjEsIDB4NjEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjIsIDB4NjIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjMsIDB4NjMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjQsIDB4NjQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4ZjEsIDB4ZjEpOwotCWtmcmVlKE1JX2J1Zik7Ci0KLQlpbnRwaXBlID0gdXNiX3NuZGludHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwotCWVycl9jb2RlID0gdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGludHBpcGUpOworCS8qIGluaXRpYWxpemUgdGhlIE1JIHNlbnNvciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgbWlfZGF0YTsgaSsrKQorCQltaV93KGdzcGNhX2RldiwgaSArIDEsIG1pX2RhdGFbaV0pOwogCiAJZGF0YVswXSA9IDB4MDA7CiAJZGF0YVsxXSA9IDB4NGQ7CQkvKiBJU09DIHRyYW5zZmVyaW5nIGVuYWJsZS4uLiAqLwotCXJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7Ci0JcmV0dXJuIGVycl9jb2RlOworCXJlZ193KGdzcGNhX2RldiwgMik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTMzNiwxMSArMzEwLDE4IEBACiAKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOwogCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7Ci0JcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIDIpOworCXJlc3VsdCA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0zNjMsMTYgKzM0NCwxNiBAQAogCQkJICAgIHx8IGRhdGFbNSArIHBdID09IDB4NjUKIAkJCSAgICB8fCBkYXRhWzUgKyBwXSA9PSAweDY2CiAJCQkgICAgfHwgZGF0YVs1ICsgcF0gPT0gMHg2NykgewotCQkJCVBERUJVRyhEX1BBQ0ssICJzb2Ygb2Zmc2V0OiAlZCBsZW5nOiAlZCIsCisJCQkJUERFQlVHKERfUEFDSywgInNvZiBvZmZzZXQ6ICVkIGxlbjogJWQiLAogCQkJCQlwLCBsZW4pOwogCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQkJZnJhbWUsIGRhdGEsIDApOworCQkJCQkJCWZyYW1lLCBkYXRhLCBwKTsKIAogCQkJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgKi8KLQkJCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkJCXNkLT5xaW5kZXgsIDB4MjEpOwotCQkJCWRhdGEgKz0gMTY7Ci0JCQkJbGVuIC09IDE2OworCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOworCQkJCWRhdGEgKz0gcCArIDE2OworCQkJCWxlbiAtPSBwICsgMTY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4MCw2ICszNjEsMTIxIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIAorc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDYxOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWw7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKworCQkvKiBzZWUgc2Rfc3RhcnQgKi8KKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg1ZjsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gc2QtPmNvbG9ycyA8PCAzOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSAoKHNkLT5jb2xvcnMgPj4gMikgJiAweGY4KSB8IDB4MDQ7CisJCXJlZ193KGdzcGNhX2RldiwgMyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDA2OworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWwgKiAweDQwOworCQlyZWdfdyhnc3BjYV9kZXYsIDIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg2NzsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsICogNCArIDM7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0zODksNyArNDg1LDEwIEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtNDIxLDggKzUyMCwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MDFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIE1hcnMgTVI5NzMxMEEgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAibXI5NzMxMGEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9NYXJzLVNlbWkgTVI5NzMxMEEgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7ICAvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJdTggc29mX3JlYWQ7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA0fSwKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX01SOTczMTBBLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgbGVuKQoreworCWludCByYzsKKworCXJjID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDQpLAorCQkJICBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgTlVMTCwgNTAwKTsKKwlpZiAocmMgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwKKwkJICAgICAgIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCXJldHVybiByYzsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggKmRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJaW50IGVycl9jb2RlOworCisJc2QtPnNvZl9yZWFkID0gMDsKKworCS8qIE5vdGU6ICByZWdpc3RlciBkZXNjcmlwdGlvbnMgZ3Vlc3NlZCBmcm9tIE1SOTcxMTNBIGRyaXZlciAqLworCisJZGF0YVswXSA9IDB4MDE7CisJZGF0YVsxXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDAwOworCWRhdGFbMV0gPSAweDBkOworCWRhdGFbMl0gPSAweDAxOworCWRhdGFbNV0gPSAweDJiOworCWRhdGFbN10gPSAweDAwOworCWRhdGFbOV0gPSAweDUwOyAgLyogcmVnIDgsIG5vIHNjYWxlIGRvd24gKi8KKwlkYXRhWzEwXSA9IDB4YzA7CisKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKKwljYXNlIDE2MDoKKwkJZGF0YVs5XSB8PSAweDBjOyAgLyogcmVnIDgsIDQ6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzIwOgorCQlkYXRhWzldIHw9IDB4MDQ7ICAvKiByZWcgOCwgMjoxIHNjYWxlIGRvd24gKi8KKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSA2NDA6CisJZGVmYXVsdDoKKwkJZGF0YVszXSA9IDB4NTA7ICAvKiByZWcgMiwgSCBzaXplICovCisJCWRhdGFbNF0gPSAweDc4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLworCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCisJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDE3NjoKKwkJZGF0YVs5XSB8PSAweDA0OyAgLyogcmVnIDgsIDI6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzUyOgorCQlkYXRhWzNdID0gMHgyYzsgIC8qIHJlZyAyLCBIIHNpemUgKi8KKwkJZGF0YVs0XSA9IDB4NDg7ICAvKiByZWcgMywgViBzaXplICovCisJCWRhdGFbNl0gPSAweDk0OyAgLyogcmVnIDUsIEggc3RhcnQgKi8KKwkJZGF0YVs4XSA9IDB4NjM7ICAvKiByZWcgNywgViBzdGFydCAqLworCQlicmVhazsKKwl9CisKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMTEpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDBhOworCWRhdGFbMV0gPSAweDgwOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNDsKKwlkYXRhWzFdID0gMHgwYTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWI7CisJZGF0YVsxXSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE1OworCWRhdGFbMV0gPSAweDE2OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNjsKKwlkYXRhWzFdID0gMHgxMDsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MTc7CisJZGF0YVsxXSA9IDB4M2E7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE4OworCWRhdGFbMV0gPSAweDY4OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwMDsKKwlkYXRhWzJdID0gMHgwMjsKKwlkYXRhWzNdID0gMHgwNjsKKwlkYXRhWzRdID0gMHg1OTsKKwlkYXRhWzVdID0gMHgwYzsKKwlkYXRhWzZdID0gMHgxNjsKKwlkYXRhWzddID0gMHgwMDsKKwlkYXRhWzhdID0gMHgwNzsKKwlkYXRhWzldID0gMHgwMDsKKwlkYXRhWzEwXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MGE7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4MDE7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4MDA7CisJZGF0YVs3XSA9IDB4MDE7CisJZGF0YVs4XSA9IDB4MDA7CisJZGF0YVs5XSA9IDB4MGE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDEwKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MTI7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4NjM7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4NzA7CisJZGF0YVs3XSA9IDB4MDA7CisJZGF0YVs4XSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDkpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFmOworCWRhdGFbMV0gPSAweDA0OworCWRhdGFbMl0gPSAweDExOworCWRhdGFbM10gPSAweDAxOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA0KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CisJcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgcGFjIGNvbW1vbiBzb2YgZGV0ZWN0aW9uIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInBhY19jb21tb24uaCIKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwgICAgLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLCAgICAgICAgICAgICAgICAgICAvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikgICAgICAgICAgICAgICAgICAgICAgLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwl1bnNpZ25lZCBjaGFyICpzb2Y7CisKKwlzb2YgPSBwYWNfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHBhY19zb2ZfbWFya2VyKQorCQkJbiAtPSBzaXplb2YgcGFjX3NvZl9tYXJrZXI7CisJCWVsc2UKKwkJCW4gPSAwOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbik7CisJCS8qIFN0YXJ0IG5leHQgZnJhbWUuICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlwYWNfc29mX21hcmtlciwgc2l6ZW9mIHBhY19zb2ZfbWFya2VyKTsKKwkJbGVuIC09IHNvZiAtIGRhdGE7CisJCWRhdGEgPSBzb2Y7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MDExMSl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCSAgICAgICBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggZWUyMzI5NS4uMWZmZjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMTM2MCw3ICsxMzYwLDYgQEAKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBPVjUxMV9FTkRQT0lOVF9BRERSRVNTOwogCWlmICghc2QtPnNpZikgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CkBAIC0yMTc3LDggKzIxNzYsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAzYmYxNWU0Li4xOWUwYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIG92NTM0L292NzcyeCBnc3BjYSBkcml2ZXIKKyAqIG92NTM0IGdzcGNhIGRyaXZlcgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSBodHRwOi8vbW9pbmVqZi5mcmVlLmZyCiAgKgogICogQmFzZWQgb24gYSBwcm90b3R5cGUgd3JpdHRlbiBieSBNYXJrIEZlcnJlbGwgPG1ham9ydHJpcHNAZ21haWwuY29tPgogICogVVNCIHByb3RvY29sIHJldmVyc2UgZW5naW5lZXJlZCBieSBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KQEAgLTI2LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLSNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiA/ICovCisjZGVmaW5lIE9WNTM0X1JFR19BRERSRVNTCTB4ZjEJLyogc2Vuc29yIGFkZHJlc3MgKi8KICNkZWZpbmUgT1Y1MzRfUkVHX1NVQkFERFIJMHhmMgogI2RlZmluZSBPVjUzNF9SRUdfV1JJVEUJCTB4ZjMKICNkZWZpbmUgT1Y1MzRfUkVHX1JFQUQJCTB4ZjQKQEAgLTQ2LDkgKzQ3LDEzIEBACiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwotCV9fdTMyIGxhc3RfZmlkOwogCV9fdTMyIGxhc3RfcHRzOwotCWludCBmcmFtZV9yYXRlOworCXUxNiBsYXN0X2ZpZDsKKwl1OCBmcmFtZV9yYXRlOworCisJdTggc2Vuc29yOworI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKKyNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC02MywxMTQgKzY4LDcgQEAKIAkgLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQ7Ci0KLQlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKLQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MSwKLQkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSAgICAgIDB4MCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgIndyaXRlIGZhaWxlZCIpOwotfQotCi1zdGF0aWMgdTggb3Y1MzRfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgMHgxLAotCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICAweDAsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBDVFJMX1RJTUVPVVQpOwotCVBERUJVRyhEX1VTQkksICJyZWc9MHglMDR4LCBkYXRhPTB4JTAyeCIsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlpZiAocmV0IDwgMCkKLQkJUERFQlVHKERfRVJSLCAicmVhZCBmYWlsZWQiKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCi0vKiBUd28gYml0cyBjb250cm9sIExFRDogMHgyMSBiaXQgNyBhbmQgMHgyMyBiaXQgNy4KLSAqIChkaXJlY3Rpb24gYW5kIG91dHB1dCk/ICovCi1zdGF0aWMgdm9pZCBvdjUzNF9zZXRfbGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IHN0YXR1cykKLXsKLQl1OCBkYXRhOwotCi0JUERFQlVHKERfQ09ORiwgImxlZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjEpOwotCWRhdGEgfD0gMHg4MDsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjMpOwotCWlmIChzdGF0dXMpCi0JCWRhdGEgfD0gMHg4MDsKLQllbHNlCi0JCWRhdGEgJj0gfigweDgwKTsKLQotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjMsIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQl1OCBkYXRhOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKLQotCQlzd2l0Y2ggKGRhdGEpIHsKLQkJY2FzZSAweDAwOgotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgMHgwNDoKLQkJCXJldHVybiAwOwotCQljYXNlIDB4MDM6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKLQkJCSAgICAgICBkYXRhLCBpICsgMSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQotewotCVBERUJVRyhEX1VTQk8sICJyZWc6IDB4JTA0eCwgdmFsOiAweCUwMngiLCByZWcsIHZhbCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1dSSVRFLCB2YWwpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzMpOwotCi0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ193cml0ZSBmYWlsZWQiKTsKLX0KLQotI2lmZGVmIEdTUENBX0RFQlVHCi1zdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCi17Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7Ci0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7Ci0KLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOwotCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKLQkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOwotCi0JcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBfX3U4IG92NTM0X3JlZ19pbml0ZGF0YVtdWzJdID0gewotCXsgMHhlNywgMHgzYSB9LAotCi0JeyBPVjUzNF9SRUdfQUREUkVTUywgMHg0MiB9LCAvKiBzZWxlY3QgT1Y3NzJ4IHNlbnNvciAqLwotCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3MjJ4W11bMl0gPSB7CiAJeyAweGMyLCAweDBjIH0sCiAJeyAweDg4LCAweGY4IH0sCiAJeyAweGMzLCAweDY5IH0sCkBAIC0yMjgsNyArMTI2LDcgQEAKIAl7IDB4YzIsIDB4MGMgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzcyeF9yZWdfaW5pdGRhdGFbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjcyMnhbXVsyXSA9IHsKIAl7IDB4MTIsIDB4ODAgfSwKIAl7IDB4MTEsIDB4MDEgfSwKIApAQCAtMzExLDYgKzIwOSw0NTYgQEAKIAl7IDB4MGMsIDB4ZDAgfQogfTsKIAorc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eFtdWzJdID0geworCXsweDg4LCAweGY4fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAzfSwKKwl7MHg5NSwgMHgxMH0sCisJezB4ZTIsIDB4MDB9LAorCXsweGU3LCAweDNlfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4OGUsIDB4MDB9LAorCXsweDhmLCAweDAwfSwKKwl7MHgxZiwgMHgwMH0sCisJezB4YzMsIDB4Zjl9LAorCXsweDg5LCAweGZmfSwKKwl7MHg4OCwgMHhmOH0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAxfSwKKwl7MHg5MywgMHgxOH0sCisJezB4MWMsIDB4MGF9LAorCXsweDFkLCAweDQ4fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDM0LCAweDA1fSwKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweDM0LCAweDA1fSwKKwl7MHhlNywgMHgyZX0sCisJezB4MzEsIDB4Zjl9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4MjUsIDB4NDJ9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSByZXNldCAqLworCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLworCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLworCXsweDAyLCAweDgwfSwJLyogcmVkICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KKwl7MHgwYiwgMHg1N30sCS8qIHZlciAqLworCXsweDBlLCAweDYxfSwJLyogY29tNSAqLworCXsweDBmLCAweDQyfSwJLyogY29tNiAqLworCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDE2LCAweDI0fSwJLyogcnN2ZDE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCisJezB4MmIsIDB4MDB9LAorCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyYmxtICovCisJezB4MzUsIDB4MDB9LAkvKiByc3ZkMzUgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIHJzdmQzNiAqLworCXsweDM4LCAweDcyfSwJLyogYWNvbTM4ICovCisJezB4MzksIDB4NTd9LAkvKiBvZm9uICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiICovCisJezB4M2IsIDB4YzR9LAorCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KKwl7MHgzZiwgMHhjMX0sCisJezB4NDAsIDB4YzB9LAkvKiBjb20xNSAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4NDMsIDB4MGF9LAorCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCisJezB4NTAsIDB4OTh9LAorCXsweDUxLCAweDAwfSwKKwl7MHg1MiwgMHgyOH0sCisJezB4NTMsIDB4NzB9LAorCXsweDU0LCAweDk4fSwKKwl7MHg1OCwgMHgxYX0sCisJezB4NTksIDB4ODV9LAorCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAorCXsweDYwLCAweGYwfSwKKwl7MHg2MSwgMHhmMH0sCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwKKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAorCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAorCXsweDllLCAweDA0fSwKKwl7MHg5ZiwgMHg3YX0sCisJezB4YTAsIDB4Nzl9LAorCXsweGExLCAweDQwfSwJLyogYWVjaG0gKi8KKwl7MHhhNCwgMHg1MH0sCisJezB4YTUsIDB4Njh9LAkvKiBjb20yNiAqLworCXsweGE2LCAweDRhfSwKKwl7MHhhOCwgMHhjMX0sCS8qIGFjb21hOCAqLworCXsweGE5LCAweGVmfSwJLyogYWNvbWE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCisJezB4YWQsIDB4ODB9LAorCXsweGFlLCAweDgwfSwKKwl7MHhhZiwgMHg4MH0sCisJezB4YjIsIDB4ZjJ9LAorCXsweGIzLCAweDIwfSwKKwl7MHhiNCwgMHgyMH0sCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAorCXsweGRiLCAweDdmfSwKKwl7MHhiZSwgMHg3Zn0sCisJezB4YmYsIDB4N2Z9LAorCXsweGMwLCAweGUyfSwKKwl7MHhjMSwgMHhjMH0sCisJezB4YzIsIDB4MDF9LAorCXsweGMzLCAweDRlfSwKKwl7MHhjNiwgMHg4NX0sCisJezB4YzcsIDB4ODB9LAorCXsweGM5LCAweGUwfSwKKwl7MHhjYSwgMHhlOH0sCisJezB4Y2IsIDB4ZjB9LAorCXsweGNjLCAweGQ4fSwKKwl7MHhjZCwgMHhmMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4YzUsIDB4MDN9LAorCXsweDZhLCAweDAyfSwKKworCXsweDEyLCAweDYyfSwJLyogY29tNyAtIFZHQSArIENJRiAqLworCXsweDM2LCAweGZhfSwJLyogcnN2ZDM2ICovCisJezB4NjksIDB4MGF9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMH0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAorCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLworCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4YWF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKworCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4M2YsIDB4MDF9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NTYsIDB4NDB9LAorCXsweDU1LCAweDhmfSwKKwl7MHgxMCwgMHgyNX0sCS8qIGFlY2ggLSBleHBvc3VyZSBoaWdoIGJpdHMgKi8KKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4W11bMl0gPSB7CisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDc4fSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweDI4fSwKKwl7MHg1YiwgMHgxZX0sCisJezB4MzUsIDB4MDB9LAorCXsweGQ5LCAweDIxfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eFtdWzJdID0geworCXsweDNiLCAweGU0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDJ9LAorCXsweGM1LCAweDAzfSwKKwl7MHhhMiwgMHg5Nn0sCisJezB4YTMsIDB4N2R9LAorCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KKwl7MHgxMywgMHhlN30sCisJezB4M2EsIDB4ODB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCit9OworCisKK3N0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAid3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBvdjUzNF9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnPTB4JTA0eCwgZGF0YT0weCUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlYWQgZmFpbGVkIik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworLyogVHdvIGJpdHMgY29udHJvbCBMRUQ6IDB4MjEgYml0IDcgYW5kIDB4MjMgYml0IDcuCisgKiAoZGlyZWN0aW9uIGFuZCBvdXRwdXQpPyAqLworc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2xlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzdGF0dXMpCit7CisJdTggZGF0YTsKKworCVBERUJVRyhEX0NPTkYsICJsZWQgc3RhdHVzOiAlZCIsIHN0YXR1cyk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwlkYXRhIHw9IDB4ODA7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMywgZGF0YSk7CisKKwlpZiAoIXN0YXR1cykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwkJZGF0YSAmPSB+MHg4MDsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJfQorfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKKwkJCSAgICAgICBkYXRhLCBpICsgMSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZzogMHglMDJ4LCB2YWw6IDB4JTAyeCIsIHJlZywgdmFsKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3dyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7CisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7CisKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOworCisJcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOworfQorCisvKiBvdXRwdXQgYSBicmlkZ2Ugc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgKCpkYXRhKVswXSwgKCpkYXRhKVsxXSk7CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIG91dHB1dCBhIHNlbnNvciBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgc2NjYl93X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJaWYgKCgqZGF0YSlbMF0gIT0gMHhmZikgeworCQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAoKmRhdGEpWzFdKTsKKwkJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJCX0KKwkJZGF0YSsrOworCX0KK30KKwogLyogc2V0IGZyYW1lcmF0ZSAqLwogc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2ZyYW1lX3JhdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewpAQCAtMzQ2LDQwICs2OTQsMTcgQEAKIAlQREVCVUcoRF9QUk9CRSwgImZyYW1lX3JhdGU6ICVkIiwgZnIpOwogfQogCi0vKiBzZXR1cCBtZXRob2QgKi8KLXN0YXRpYyB2b2lkIG92NTM0X3NldHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgaTsKLQotCS8qIEluaXRpYWxpemUgYnJpZGdlIGNoaXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjUzNF9yZWdfaW5pdGRhdGEpOyBpKyspCi0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIG92NTM0X3JlZ19pbml0ZGF0YVtpXVswXSwKLQkJCQlvdjUzNF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0JUERFQlVHKERfUFJPQkUsICJzZW5zb3IgaXMgb3YlMDJ4JTAyeCIsCi0JCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKSwKLQkJc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGIpKTsKLQotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQotCS8qIEluaXRpYWxpemUgc2Vuc29yICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X3JlZ19pbml0ZGF0YSk7IGkrKykKLQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBvdjc3MnhfcmVnX2luaXRkYXRhW2ldWzBdLAotCQkJICAgICAgIG92NzcyeF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAKKwlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOworCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCi0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0zOTIsMjYgKzcxNywxMDIgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlvdjUzNF9zZXR1cChnc3BjYV9kZXYpOwotCW92NTM0X3NldF9mcmFtZV9yYXRlKGdzcGNhX2Rldik7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXUxNiBzZW5zb3JfaWQ7CisJc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0geworCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLworCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLworCX07CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA4KTsKKwltc2xlZXAoMTAwKTsKKworCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCisJCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwKTsKKwltc2xlZXAoMTApOworCisJLyogcHJvYmUgdGhlIHNlbnNvciAqLworCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKTsKKwlzZW5zb3JfaWQgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJc2Vuc29yX2lkIHw9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CisKKwkvKiBpbml0aWFsaXplICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT1Y3NzJYOgorCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzIyeCkpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzIyeCkpOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCQlvdjUzNF9zZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdGFydCBzdHJlYW1pbmcgZGF0YSAqLwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc3Mlg6CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjk2NVg6ICovCisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXgpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXgpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKy8qZml4bWU6IG90aGVyIHNlbnNvciBzdGFydCBvbWl0dGVkKi8KKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdG9wIHN0cmVhbWluZyBkYXRhICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzcyWDoKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX09WOTY1WDogKi8KKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCX0KIH0KIAogLyogVmFsdWVzIGZvciBibUhlYWRlckluZm8gKFZpZGVvIGFuZCBTdGlsbCBJbWFnZSBQYXlsb2FkIEhlYWRlcnMsIDIuNC4zLjMpICovCkBAIC00MjksNzUgKzgzMCw3NSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3UzMiB0aGlzX3B0czsKLQlpbnQgdGhpc19maWQ7CisJdTE2IHRoaXNfZmlkOwogCWludCByZW1haW5pbmdfbGVuID0gbGVuOwotCV9fdTggKm5leHRfZGF0YSA9IGRhdGE7CiAKLXNjYW5fbmV4dDoKLQlpZiAocmVtYWluaW5nX2xlbiA8PSAwKQotCQlyZXR1cm47CisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CQkvKmZpeG1lOiB3YXMgMjA0OCovCiAKLQlkYXRhID0gbmV4dF9kYXRhOwotCWxlbiA9IG1pbihyZW1haW5pbmdfbGVuLCAyMDQ4KTsKLQlyZW1haW5pbmdfbGVuIC09IGxlbjsKLQluZXh0X2RhdGEgKz0gbGVuOworCQkvKiBQYXlsb2FkcyBhcmUgcHJlZml4ZWQgd2l0aCBhIFVWQy1zdHlsZSBoZWFkZXIuICBXZQorCQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCisJCSAgIGNoYW5nZXMuICBBIGZyYW1lIGVuZHMgd2hlbiBFT0YgaXMgc2V0LCBhbmQgd2UndmUgcmVjZWl2ZWQKKwkJICAgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzLiAqLwogCi0JLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKLQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCi0JICAgY2hhbmdlcy4gIEEgZnJhbWUgZW5kcyB3aGVuIEVPRiBpcyBzZXQsIGFuZCB3ZSd2ZSByZWNlaXZlZAotCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KLQotCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KLQlpZiAoZGF0YVswXSAhPSAxMiB8fCBsZW4gPCAxMikgewotCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogQ2hlY2sgZXJyb3JzICovCi0JaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VSUikgewotCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogRXh0cmFjdCBQVFMgYW5kIEZJRCAqLwotCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKLQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpIHwgKGRhdGFbM10gPDwgOCkgfCBkYXRhWzJdOwotCXRoaXNfZmlkID0gKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRCkgPyAxIDogMDsKLQotCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLwotCWlmICh0aGlzX3B0cyAhPSBzZC0+bGFzdF9wdHMgfHwgdGhpc19maWQgIT0gc2QtPmxhc3RfZmlkKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKLQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7Ci0JfQotCi0JLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKLQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKLQotCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KLQlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7Ci0JCXNkLT5sYXN0X3B0cyA9IDA7Ci0KLQkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgIT0KLQkJICAgIChnc3BjYV9kZXYtPndpZHRoICogZ3NwY2FfZGV2LT5oZWlnaHQgKiAyKSkgewotCQkJUERFQlVHKERfUEFDSywgInNob3J0IGZyYW1lIik7CisJCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KKwkJaWYgKGRhdGFbMF0gIT0gMTIgfHwgbGVuIDwgMTIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJiYWQgaGVhZGVyIik7CiAJCQlnb3RvIGRpc2NhcmQ7CiAJCX0KIAotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCX0KKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KIAotCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCi0JZ290byBzY2FuX25leHQ7CisJCS8qIEV4dHJhY3QgUFRTIGFuZCBGSUQgKi8KKwkJaWYgKCEoZGF0YVsxXSAmIFVWQ19TVFJFQU1fUFRTKSkgeworCQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisJCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpCisJCQkJCQl8IChkYXRhWzNdIDw8IDgpIHwgZGF0YVsyXTsKKwkJdGhpc19maWQgPSAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEKSA/IDEgOiAwOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJTlVMTCwgMCk7CisJCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKKwkJCXNkLT5sYXN0X2ZpZCA9IHRoaXNfZmlkOworCQl9CisKKwkJLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCisJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KKwkJaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VPRikgeworCQkJc2QtPmxhc3RfcHRzID0gMDsKKworCQkJaWYgKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJzaG9ydCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KKworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlOVUxMLCAwKTsKKwkJfQorCisJCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCisJCWdvdG8gc2Nhbl9uZXh0OwogCiBkaXNjYXJkOgotCS8qIERpc2NhcmQgZGF0YSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKLQlnb3RvIHNjYW5fbmV4dDsKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKKworc2Nhbl9uZXh0OgorCQlyZW1haW5pbmdfbGVuIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJfSB3aGlsZSAocmVtYWluaW5nX2xlbiA+IDApOwogfQogCiAvKiBnZXQgc3RyZWFtIHBhcmFtZXRlcnMgKGZyYW1lcmF0ZSkgKi8KQEAgLTU1Niw5ICs5NTcsOCBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAyKX0sCS8qIEhlcmN1bGVzIEJsb2cgV2ViY2FtICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwJLyogSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cgKi8KLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCl9LAkvKiBTb255IEhEIEV5ZSBmb3IgUFMzIChTTEVIIDAwMjAxKSAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX09WOTY1WH0sCisJe1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y3NzJYfSwKIAl7fQogfTsKIApAQCAtNTg1LDggKzk4NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggYzkwYWM4NS4uOTVhOTdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0yNTYsNyArMjU2LDYgQEAKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCXNkLT5icmlnaHRuZXNzID0gUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVDsKQEAgLTUzNiw2ICs1MzUsNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzEpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3Mil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDc0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzYpfSwKIAl7VVNCX0RFVklDRSgweDE0NWYsIDB4MDEzYSl9LAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHhmMTE1KX0sCkBAIC01NjUsOCArNTY1LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGE5Yzk1Y2IuLmUxZTNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFDNzMwMikgewpAQCAtMTA5Nyw4ICsxMDk2LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCBiM2U0ZTA2Li4xNTNkMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTg3MCw3ICs4NzAsNiBAQAogCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5jdHJsX2RpczsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJaWYgKCEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX1NJRikpIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwpAQCAtMTI3Miw4ICsxMjcxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCAzMzczYjhkLi5jNzJlMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTM1LDM2ICszNSw0NyBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlhdG9taWNfdCBhdmdfbHVtOwotCXVuc2lnbmVkIGludCBleHBvc3VyZTsKKwl1MzIgZXhwb3N1cmU7CiAKLQlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTggY29udHJhc3Q7Ci0JX191OCBjb2xvcnM7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGJsdWU7Ci0JX191OCByZWQ7Ci0JX191OCB2ZmxpcDsJCQkvKiBvdjc2MzAgb25seSAqLwotCV9fdTggaW5mcmFyZWQ7CQkJLyogbWkwMzYwIG9ubHkgKi8KKwl1MTYgYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBjb2xvcnM7CisJdTggYXV0b2dhaW47CisJdTggYmx1ZTsKKwl1OCByZWQ7CisJdTggZ2FtbWE7CisJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggaW5mcmFyZWQ7CQkJLyogbXQ5djExMSBvbmx5ICovCisJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCisjZGVmaW5lIFFVQUxJVFlfTUlOIDYwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDgwCisJdTgganBlZ3F1YWw7CQkJLyogd2ViY2FtIHF1YWxpdHkgKi8KIAotCV9fczggYWdfY250OworCXU4IHJlZzE4OworCisJczggYWdfY250OwogI2RlZmluZSBBR19DTlRfU1RBUlQgMTMKIAotCV9fdTggcWluZGV4OwotCV9fdTggYnJpZGdlOworCXU4IGJyaWRnZTsKICNkZWZpbmUgQlJJREdFX1NOOUMxMDJQIDAKICNkZWZpbmUgQlJJREdFX1NOOUMxMDUgMQogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKICNkZWZpbmUgQlJJREdFX1NOOUMzMjUgNAotCV9fdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKwl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCiAjZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQogI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX09NNjgwMiAzCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzAgNAotI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDUKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA2Ci0JX191OCBpMmNfYmFzZTsKKyNkZWZpbmUgU0VOU09SX01UOVYxMTEgMworI2RlZmluZSBTRU5TT1JfT002ODAyIDQKKyNkZWZpbmUgU0VOU09SX09WNzYzMCA1CisjZGVmaW5lIFNFTlNPUl9PVjc2NDggNgorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKKyNkZWZpbmUgU0VOU09SX1NQODA3MDggOAorCXU4IGkyY19iYXNlOworCisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNzgsNiArODksOCBAQAogc3RhdGljIGludCBzZF9nZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtMTU4LDYgKzE3MSwyMCBAQAogCSAgICAuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCiAJICAgIC5nZXQgPSBzZF9nZXRyZWRfYmFsYW5jZSwKIAl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDQwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEdBTU1BX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEdBTU1BX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGdhbW1hLAorCSAgICAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCisJfSwKICNkZWZpbmUgQVVUT0dBSU5fSURYIDUKIAl7CiAJICAgIHsKQEAgLTE3Myw3ICsyMDAsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotLyogb3Y3NjMwIG9ubHkgKi8KKy8qIG92NzYzMC9vdjc2NDggb25seSAqLwogI2RlZmluZSBWRkxJUF9JRFggNgogCXsKIAkgICAgewpAQCAtMTgzLDEzICsyMTAsMTMgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgVkZMSVBfREVGIDEKKyNkZWZpbmUgVkZMSVBfREVGIDAJCQkvKiB2ZmxpcCBkZWYgPSAxIGZvciBvdjc2MzAgKi8KIAkJLmRlZmF1bHRfdmFsdWUgPSBWRkxJUF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXR2ZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldHZmbGlwLAogCX0sCi0vKiBtaTAzNjAgb25seSAqLworLyogbXQ5djExMSBvbmx5ICovCiAjZGVmaW5lIElORlJBUkVEX0lEWCA3CiAJewogCSAgICB7CkBAIC0yMTEsMTggKzIzOCwyMiBAQAogc3RhdGljIF9fdTMyIGN0cmxfZGlzW10gPSB7CiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCiAJCQkJCQkvKiBTRU5TT1JfSFY3MTMxUiAwICovCi0JKDEgPDwgVkZMSVBfSURYKSwKKwkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKIAkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAogCQkJCQkJLyogU0VOU09SX01PNDAwMCAyICovCisJKDEgPDwgVkZMSVBfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9NVDlWMTExIDMgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgMyAqLworCQkJCQkJLyogU0VOU09SX09NNjgwMiA0ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNSAqLworCSgxIDw8IElORlJBUkVEX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNiAqLworCQkJCQkJLyogU0VOU09SX1NQODA3MDggOCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKQEAgLTI0MywxOTYgKzI3NCwyMjggQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLS8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMzFyICovCi1zdGF0aWMgY29uc3QgX191OCBzbl9odjcxMzFbXSA9IHsKKy8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMXIgKi8KK3N0YXRpYyBjb25zdCB1OCBzbl9odjcxMzFbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDAzLAkweDY0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgxMSwJMHgwMiwJMHgwOSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMywJMHgyOCwJMHgxZSwJMHg0MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBhLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9taTAzNjBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9taTAzNjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQ0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhiMSwJMHg1ZCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMiwJMHgwYSwJMHgyOCwJMHgxZSwJMHg2MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA2LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9tbzQwMDBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tbzQwMDBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KLQkweDEyLAkweDIzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDIwLAkweDE4LAorCTB4MDAsCTB4MjMsCTB4NjAsCTB4MDAsCTB4MWEsCTB4MDAsCTB4MjAsCTB4MTgsCiAvKglyZWc4CXJlZzkJcmVnYQlyZWdiCXJlZ2MJcmVnZAlyZWdlCXJlZ2YgKi8KIAkweDgxLAkweDIxLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAogLyoJcmVnMTAJcmVnMTEJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcgKi8KIAkweDAzLAkgMHgwMCwJMHgwYiwJMHgwZiwJMHgxNCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwOCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA4LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vbTY4MDJbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tdDl2MTExWzB4MWNdID0geworLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCisJMHgwMCwJMHg2MSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKKy8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLworCTB4ODEsCTB4NWMsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLworCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDIsCTB4MWMsCTB4MjgsCTB4MWUsCTB4NDAsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDYsCTB4MDAsCTB4MDAsCTB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBzbl9vbTY4MDJbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIzLAkweDcyLAkweDAwLAkweDFhLAkweDM0LAkweDI3LAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MCwJMHgzNCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHg1MSwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKLQkweDA4LAkweDIyLAkweDQ0LAkweDYzLAkweDdkLAkweDkyLAkweGEzLAkweGFmLAotCTB4YmMsCTB4YzQsCTB4Y2QsCTB4ZDUsCTB4ZGMsCTB4ZTEsCTB4ZTgsCTB4ZWYsCi0JMHhmNworLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA1LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2MzBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2MzBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDFmLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgyMSwJMHg3NiwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwNCwJMHgwMSwJMHgwYSwJMHgyOCwJMHgxZSwJMHhjMiwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NDhbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NDhbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYzLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHgwMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NjBbXQk9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMSwJMHgwMSwJMHgwOCwJMHgyOCwJMHgxZSwJMHgyMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNuX3NwODA3MDhbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDYzLAkweDYwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MSwJMHgxOCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwMCwJMHgwMywJMHgwNCwJMHgyOCwJMHgxZSwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAogLyogc2VxdWVuY2Ugc3BlY2lmaWMgdG8gdGhlIHNlbnNvcnMgLSAhISBpbmRleCA9IFNFTlNPUl94eHggKi8KLXN0YXRpYyBjb25zdCBfX3U4ICpzbl90YltdID0geworc3RhdGljIGNvbnN0IHU4ICpzbl90YltdID0gewogCXNuX2h2NzEzMSwKIAlzbl9taTAzNjAsCiAJc25fbW80MDAwLAorCXNuX210OXYxMTEsCiAJc25fb202ODAyLAogCXNuX292NzYzMCwKIAlzbl9vdjc2NDgsCi0Jc25fb3Y3NjYwCisJc25fb3Y3NjYwLAorCXNuX3NwODA3MDgKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX2RlZltdID0geworLyogZGVmYXVsdCBnYW1tYSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX2RlZlsxN10gPSB7CiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CisJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKKwkweGE5LCAweGI0LCAweGJlLCAweGM4LCAweGQyLCAweGRiLCAweGU0LCAweGVkLCAweGY1Cit9OworLyogZ2FtbWEgZm9yIHNlbnNvciBTUDgwNzA4ICovCitzdGF0aWMgY29uc3QgdTggZ2FtbWFfc3BlY18yWzE3XSA9IHsKKwkweDBhLCAweDJkLCAweDRlLCAweDY4LCAweDdkLCAweDhmLCAweDlmLCAweGFiLAorCTB4YjcsIDB4YzIsIDB4Y2MsIDB4ZDMsIDB4ZDgsIDB4ZGUsIDB4ZTIsIDB4ZTUsIDB4ZTYKK307CiAKIC8qIGNvbG9yIG1hdHJpeCBhbmQgb2Zmc2V0cyAqLwotc3RhdGljIGNvbnN0IF9fdTggcmVnODRbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCByZWc4NFtdID0gewogCTB4MTQsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDcsIDB4MDAsCS8qIFlSIFlHIFlCIGdhaW5zICovCiAJMHhlOCwgMHgwZiwgMHhkYSwgMHgwZiwgMHg0MCwgMHgwMCwJLyogVVIgVUcgVUIgKi8KIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKLXN0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhDMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDQwLCAweEZGLCAweDdGLCAweDdGLCAweDdGLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDE0LCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MTEsIDB4NDAsIDB4ZmYsIDB4N2YsIDB4N2YsIDB4N2YsIDB4MTB9LAorLyoJezB4OTEsIDB4MTEsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqLworCXsweGQxLCAweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgxMSwgMHgxNCwgMHgwMSwgMHhlMiwgMHgwMiwgMHg4MiwgMHgxMH0sCisvKgl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICovCiAKLQl7MHhBMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweDYxLCAweEE4LCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QzEsIDB4MTEsIDB4MzEsIDB4MjAsIDB4MkUsIDB4MjAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweEMzLCAweDUwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdhaW4xNCAqLwotCXsweEMxLCAweDExLCAweDMxLCAweDEwLCAweDEwLCAweDEwLCAweDAwLCAweDEwfSwgLyogciBnIGIgMTAxYTEwICovCisJezB4YTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHg2MSwgMHhhOCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGMxLCAweDExLCAweDMxLCAweDIwLCAweDJlLCAweDIwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHhjMywgMHg1MCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBnYWluMTQgKi8KKwl7MHhjMSwgMHgxMSwgMHgzMSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgwMCwgMHgxMH0sIC8qIHIgZyBiIDEwMWExMCAqLwogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweEQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7Ci0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDBELCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDAzLCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MEQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDFDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDJGLCAweEY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDNELCAweDA2LCAweDhGLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg0MCwgMHgwMSwgMHhFMCwgMHgwMCwgMHhEMSwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg1QSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4NUMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDVFLCAweDAwLCAweDAwLCAweEEzLCAweDFELCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDBkLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDAzLCAweDAxLCAweGUyLCAweDAyLCAweDgyLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MGQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJmLCAweGY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDNkLCAweDA2LCAweDhmLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhkMSwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDVlLCAweDAwLCAweDAwLCAweGEzLCAweDFkLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgyMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MjAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA5LCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyQiwgMHgwMCwgMHhBMCwgMHgwMCwgMHhCMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MkQsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QTAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgyMCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MDksIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJiLCAweDAwLCAweGEwLCAweDAwLCAweGIwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyZCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgwQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCi0JezB4QjEsIDB4NUQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KKwl7MHhiMSwgMHg1ZCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCisJezB4YjEsIDB4NWQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDA1LCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KIAotCXsweEQxLCAweDVELCAweDJCLCAweDAwLCAweEI5LCAweDAwLCAweEUzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyRCwgMHgwMCwgMHg1ZiwgMHgwMCwgMHhCOSwgMHgxMH0sIC8qIDQyICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiBvcmlnICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiAqLwotCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwfSwgLyogdXBkYXRlICovCi0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzZW5zb3Igb24gKi8KKwl7MHhkMSwgMHg1ZCwgMHgyYiwgMHgwMCwgMHhiOSwgMHgwMCwgMHhlMywgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MmQsIDB4MDAsIDB4NWYsIDB4MDAsIDB4YjksIDB4MTB9LCAvKiA0MiAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gb3JpZyAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gKi8KKwl7MHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHVwZGF0ZSAqLworCXsweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIG9uICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTQ1NSw3ICs1MTgsNDkgQEAKIAl7MHhhMSwgMHgyMSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJe30KIH07Ci1zdGF0aWMgX191OCBvbTY4MDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtdDl2MTExX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWMsIDB4MGQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZXNldD8gKi8KKwkvKiBkZWxheSAyMCBtcyAqLworCXsweGIxLCAweDVjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIElGUCBzZWxlY3QgKi8KKwl7MHhiMSwgMHg1YywgMHgwOCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIG91dHB1dCBmbXQgY3RybCAqLworCXsweGIxLCAweDVjLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3AgbW9kZSBjdHJsICovCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAzLCAweDAxLCAweGUxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIHNlbGVjdCAqLworCXsweGIxLCAweDVjLCAweDAyLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDQsIDB4MDIsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByb3cgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwZSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBjb2wgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyBoZWlnaHQgKi8KKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4NywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyB3aWR0aCAqLworCXsweGIxLCAweDVjLCAweDA3LCAweDMwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3V0cHV0IGN0cmwgKi8KKwl7MHhiMSwgMHg1YywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNodXR0ZXIgZGVsYXkgKi8KKwl7MHhiMSwgMHg1YywgMHgxMiwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHpvb20gY29sIHN0YXJ0ICovCisJezB4YjEsIDB4NWMsIDB4MTMsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB6b29tIHJvdyBzdGFydCAqLworCXsweGIxLCAweDVjLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogZGlnaXRhbCB6b29tICovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZWFkIG1vZGUgKi8KKwl7MHhiMSwgMHg1YywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKiovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwOSwgMHgwMSwgMHgyYywgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWMsIDB4MmIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4YTAsIDB4MTB9LCAvKiBncmVlbjEgZ2FpbiAqLworCXsweGQxLCAweDVjLCAweDJkLCAweDAwLCAweGEwLCAweDAwLCAweDMzLCAweDEwfSwgLyogcmVkIGdhaW4gKi8KKwkvKioqKioqKi8KKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHZlcnQgYmxhbmtpbmcgKi8KKwl7MHhiMSwgMHg1YywgMHgwNSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGhvcml6IGJsYW5raW5nICovCisJezB4ZDEsIDB4NWMsIDB4MmMsIDB4MDAsIDB4YWQsIDB4MDAsIDB4YWQsIDB4MTB9LCAvKiBibHVlIGdhaW4gKi8KKwl7MHhiMSwgMHg1YywgMHgzNSwgMHgwMSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdsb2JhbCBnYWluICovCisJe30KK307CitzdGF0aWMgY29uc3QgdTggb202ODAyX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTAsIDB4MzQsIDB4OTAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGEwLCAweDM0LCAweDQ5LCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMCwgMHgzNCwgMHg1YSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC00ODksNyArNTk0LDcgQEAKIC8qCXsweGEwLCAweDM0LCAweDY5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDc2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHhjOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAvKiB3aW46IGRlbGF5IDIwbXMgKi8KQEAgLTU0Myw3ICs2NDgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHg3NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAkvKiByZXNldCAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTU3Miw3ICs2NzcsOCBAQAogCXsweGIxLCAweDIxLCAweDJkLCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIC8qLi4uKi8KIC8qCXsweGExLCAweDIxLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KLS8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KKy8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgICAqIENPTU4KKwkJCQkJCQkgKiBzZXQgYnkgc2V0dmZsaXAgKi8KIAl7MHhhMSwgMHgyMSwgMHgxOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLyoJezB4YTEsIDB4MjEsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCBqZm0gZG9uZSAqLwpAQCAtNTg5LDcgKzY5NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXQgU0NDQiAqLwogLyoJCShkZWxheSAyMG1zKSAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTY3OCwyOCArNzg0LDkyIEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHF0YWJsZTRbXSA9IHsKLQkweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA2LCAweDA2LCAweDA2LCAweDA4LCAweDA2LAotCTB4MDYsIDB4MDgsIDB4MEEsIDB4MTEsCi0JMHgwQSwgMHgwQSwgMHgwOCwgMHgwOCwgMHgwQSwgMHgxNSwgMHgwRiwgMHgwRiwgMHgwQywgMHgxMSwgMHgxOSwgMHgxNSwKLQkweDE5LCAweDE5LCAweDE3LCAweDE1LAotCTB4MTcsIDB4MTcsIDB4MUIsIDB4MUQsIDB4MjUsIDB4MjEsIDB4MUIsIDB4MUQsIDB4MjMsIDB4MUQsIDB4MTcsIDB4MTcsCi0JMHgyMSwgMHgyRSwgMHgyMSwgMHgyMywKLQkweDI3LCAweDI5LCAweDJDLCAweDJDLCAweDJDLCAweDE5LCAweDFGLCAweDMwLCAweDMyLCAweDJFLCAweDI5LCAweDMyLAotCTB4MjUsIDB4MjksIDB4MkMsIDB4MjksCi0JMHgwNiwgMHgwOCwgMHgwOCwgMHgwQSwgMHgwOCwgMHgwQSwgMHgxMywgMHgwQSwgMHgwQSwgMHgxMywgMHgyOSwgMHgxQiwKLQkweDE3LCAweDFCLCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5CitzdGF0aWMgY29uc3QgdTggc3A4MDcwOF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGExLCAweDE4LCAweDA2LCAweGY5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxMSwgMHg0ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTIsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDE1LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxOCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTksIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFhLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MWMsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFkLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDI3LCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyOCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjksIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJhLCAweDc4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmMsIDB4ZjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJkLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZSwgMHhkNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MzksIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNhLCAweDY3LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzYiwgMHg4NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2MsIDB4YTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzZSwgMHhiYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2YsIDB4YzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQwLCAweGQ0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0MSwgMHhkZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDIsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQzLCAweGY1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQ3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDRkLCAweGFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0ZSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGYsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU3LCAweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1OCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTksIDB4YWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVhLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1YiwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWMsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVlLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDYxLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjQsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY1LCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZiwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKioqLworCXsweGExLCAweDE4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDA0LCAweGE0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxNCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDE4LCAweDExLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7fQogfTsKIAogLyogcmVhZCA8bGVuPiBieXRlcyB0byBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiB2YWx1ZSwgaW50IGxlbikKKwkJICB1MTYgdmFsdWUsIGludCBsZW4pCiB7CiAjaWZkZWYgR1NQQ0FfREVCVUcKIAlpZiAobGVuID4gVVNCX0JVRl9TWikgewpAQCAtNzE4LDEwICs4ODgsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgdmFsdWUsCi0JCSAgIF9fdTggZGF0YSkKKwkJICAgdTE2IHZhbHVlLAorCQkgICB1OCBkYXRhKQogewotCVBERUJVRyhEX1VTQk8sICJyZWdfdzEgWyUwMnhdID0gJTAyeCIsIHZhbHVlLCBkYXRhKTsKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cxIFslMDR4XSA9ICUwMngiLCB2YWx1ZSwgZGF0YSk7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gZGF0YTsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNzMzLDExICs5MDMsMTEgQEAKIAkJCTUwMCk7CiB9CiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkgIF9fdTE2IHZhbHVlLAotCQkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCQkgIHUxNiB2YWx1ZSwKKwkJCSAgY29uc3QgdTggKmJ1ZmZlciwKIAkJCSAgaW50IGxlbikKIHsKLQlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwMnhdID0gJTAyeCAlMDJ4IC4uIiwKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwNHhdID0gJTAyeCAlMDJ4IC4uIiwKIAkJdmFsdWUsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKICNpZmRlZiBHU1BDQV9ERUJVRwogCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CkBAIC03NTYsNyArOTI2LDcgQEAKIH0KIAogLyogSTJDIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191OCByZWcsIF9fdTggdmFsKQorc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC03ODEsNyArOTUxLDcgQEAKIAogLyogSTJDIHdyaXRlIDggYnl0ZXMgKi8KIHN0YXRpYyB2b2lkIGkyY193OChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIGNvbnN0IF9fdTggKmJ1ZmZlcikKKwkJICAgY29uc3QgdTggKmJ1ZmZlcikKIHsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIDgpOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKQEAgLTc5NSwxMCArOTY1LDEwIEBACiB9CiAKIC8qIHJlYWQgNSBieXRlcyBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KLXN0YXRpYyB2b2lkIGkyY19yNShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTggcmVnKQorc3RhdGljIHZvaWQgaTJjX3I1KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IG1vZGVbOF07CisJdTggbW9kZVs4XTsKIAogCW1vZGVbMF0gPSAweDgxIHwgMHgxMDsKIAltb2RlWzFdID0gc2QtPmkyY19iYXNlOwpAQCAtODE3LDcgKzk4Nyw3IEBACiAJcmVnX3IoZ3NwY2FfZGV2LCAweDBhLCA1KTsKIH0KIAotc3RhdGljIGludCBwcm9iZXNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IGh2NzEzMXJfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWkyY193MShnc3BjYV9kZXYsIDB4MDIsIDApOwkJCS8qIHNlbnNvciB3YWtldXAgKi8KIAltc2xlZXAoMTApOwpAQCAtODM5LDE2ICsxMDA5LDY2IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICBjb25zdCBfX3U4ICpzbjljMXh4KQorc3RhdGljIHZvaWQgbWkwMzYwX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JY29uc3QgX191OCAqcmVnOWE7Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnOWFfZGVmW10gPQorCWludCBpLCBqOworCXUxNiB2YWwgPSAwOworCXN0YXRpYyBjb25zdCB1OCBwcm9iZV90YltdWzRdWzhdID0geworCSAgICB7CQkJCQkvKiBtaTAzNjAgKi8KKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9CisJICAgIH0sCisJICAgIHsJCQkJCS8qIG10OXYxMTEgKi8KKwkJezB4YjAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1YywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJe30KKwkgICAgfSwKKwl9OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvYmVfdGIpOyBpKyspIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg2Mik7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4MDgpOworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bal0pOworCQltc2xlZXAoMik7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwYSwgNSk7CisJCXZhbCA9IChnc3BjYV9kZXYtPnVzYl9idWZbM10gPDwgOCkgfCBnc3BjYV9kZXYtPnVzYl9idWZbNF07CisJCWlmIChwcm9iZV90YltpXVszXVswXSAhPSAwKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bM10pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDI5KTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg0Mik7CisJCWlmICh2YWwgIT0gMHhmZmZmKQorCQkJYnJlYWs7CisJfQorCXN3aXRjaCAodmFsKSB7CisJY2FzZSAweDgyM2E6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIG10OXYxMTEiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9NVDlWMTExOworCQlzZC0+aTJjX2Jhc2UgPSAweDVjOworCQlicmVhazsKKwljYXNlIDB4ODI0MzoKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgbWkwMzYwIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRyhEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCAtIGZvcmNlZCB0byBtaTAzNjAiLCB2YWwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBjb25zdCB1OCAqc245YzF4eCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJY29uc3QgdTggKnJlZzlhOworCXN0YXRpYyBjb25zdCB1OCByZWc5YV9kZWZbXSA9CiAJCXsweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDAwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCByZWc5YV9zbjljMzI1W10gPQorCXN0YXRpYyBjb25zdCB1OCByZWc5YV9zbjljMzI1W10gPQogCQl7MHgwYSwgMHg0MCwgMHgzOCwgMHgzMCwgMHgwMCwgMHgyMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKKwlzdGF0aWMgY29uc3QgdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKIAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHNuOWMxeHhbMV0pOwpAQCAtODcyLDYgKzEwOTIsMTIgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsICZzbjljMXh4WzNdLCAweDBmKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2MCk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsIDB4NzEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKQEAgLTkwMCwxMiArMTEyNiwyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4MjApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCW1kZWxheSgxMDApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCAweDYyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKIAkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0hWNzEzMVIpIHsKLQkJCWlmIChwcm9iZXNlbnNvcihnc3BjYV9kZXYpIDwgMCkKKwkJCWlmIChodjcxMzFyX3Byb2JlKGdzcGNhX2RldikgPCAwKQogCQkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWJyZWFrOwpAQCAtOTE2LDcgKzExNTAsNyBAQAogc3RhdGljIHZvaWQgaHY3MTMxUl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7Ci0Jc3RhdGljIGNvbnN0IF9fdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KKwlzdGF0aWMgY29uc3QgdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KIAkJeyAweGExLCAweDExLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAl3aGlsZSAoaHY3MTMxcl9zZW5zb3JfaW5pdFtpXVswXSkgewpAQCAtOTQ2LDYgKzExODAsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG10OXYxMTFfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJaSsrOworCW1zbGVlcCgyMCk7CisJd2hpbGUgKG10OXYxMTFfc2Vuc29yX2luaXRbaV1bMF0pIHsKKwkJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJCWkrKzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG9tNjgwMl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7CkBAIC0xMDEwLDYgKzEyNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNwODA3MDhfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2Rldiwgc3A4MDcwOF9zZW5zb3JfaW5pdFtpXSk7CS8qIHJlc2V0IFNDQ0IgKi8KKwlpKys7CisJbXNsZWVwKDIwKTsKKwl3aGlsZSAoc3A4MDcwOF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBzcDgwNzA4X3NlbnNvcl9pbml0W2ldKTsKKwkJaSsrOworCX0KK30KKwogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTAxOCw3ICsxMjc4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0xMDI2LDE2ICsxMjg1LDIxIEBACiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5pMmNfYmFzZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAotCXNkLT5xaW5kZXggPSA0OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+Ymx1ZSA9IEJMVUVfQkFMQU5DRV9ERUY7CiAJc2QtPnJlZCA9IFJFRF9CQUxBTkNFX0RFRjsKKwlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7CiAJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogCXNkLT5hZ19jbnQgPSAtMTsKLQlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzYzMCkKKwkJc2QtPnZmbGlwID0gMDsKKwllbHNlCisJCXNkLT52ZmxpcCA9IDE7CiAJc2QtPmluZnJhcmVkID0gSU5GUkFSRURfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJc2QtPmpwZWdxdWFsID0gODA7CiAKIAlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CiAJcmV0dXJuIDA7CkBAIC0xMDQ1LDggKzEzMDksOCBAQAogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCByZWdHcGlvW10gPSB7IDB4MjksIDB4NzQgfTsKLQlfX3U4IHJlZ0YxOworCXU4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OworCXU4IHJlZ0YxOwogCiAJLyogc2V0dXAgYSBzZWxlY3RvciBieSBicmlkZ2UgKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKQEAgLTEwNjQsMTEgKzEzMjgsMTUgQEAKIAljYXNlIEJSSURHRV9TTjlDMTA1OgogCQlpZiAocmVnRjEgIT0gMHgxMSkKIAkJCXJldHVybiAtRU5PREVWOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKQorCQkJbWkwMzYwX3Byb2JlKGdzcGNhX2Rldik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NOOUMxMjA6CiAJCWlmIChyZWdGMSAhPSAweDEyKQogCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NSTAzNjApCisJCQltaTAzNjBfcHJvYmUoZ3NwY2FfZGV2KTsKIAkJcmVnR3Bpb1sxXSA9IDB4NzA7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwpAQCAtMTA4NiwyMCArMTM1NCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQl1bnNpZ25lZCBpbnQgZXhwbykKK3N0YXRpYyB1MzIgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTMyIGV4cG8pCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0YXRpYyBjb25zdCBfX3U4IGRvaXRbXSA9CQkvKiB1cGRhdGUgc2Vuc29yICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHNlbnNvcmdvW10gPQkJLyogc2Vuc29yIG9uICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IGdhaW5Nb1tdID0KLQkJeyAweGExLCAweDIxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDFkIH07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFSOiB7Ci0JCV9fdTggRXhwb2RvaXRbXSA9CisJCXU4IEV4cG9kb2l0W10gPQogCQkJeyAweGMxLCAweDExLCAweDI1LCAweDA3LCAweDI3LCAweGMwLCAweDAwLCAweDE2IH07CiAKIAkJRXhwb2RvaXRbM10gPSBleHBvID4+IDE2OwpAQCAtMTEwOSw4ICsxMzcxLDEyIEBACiAJCWJyZWFrOwogCSAgICB9CiAJY2FzZSBTRU5TT1JfTUkwMzYwOiB7Ci0JCV9fdTggZXhwb01pW10gPQkgLyogZXhwb3N1cmUgMHgwNjM1IC0+IDQgZnAvcyAweDEwICovCisJCXU4IGV4cG9NaVtdID0JCS8qIGV4cG9zdXJlIDB4MDYzNSAtPiA0IGZwL3MgMHgxMCAqLwogCQkJeyAweGIxLCAweDVkLCAweDA5LCAweDA2LCAweDM1LCAweDAwLCAweDAwLCAweDE2IH07CisJCXN0YXRpYyBjb25zdCB1OCBkb2l0W10gPQkJLyogdXBkYXRlIHNlbnNvciAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwIH07CisJCXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jnb1tdID0JCS8qIHNlbnNvciBvbiAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAkJaWYgKGV4cG8gPiAweDA2MzUpCiAJCQlleHBvID0gMHgwNjM1OwpAQCAtMTEyNCwxMCArMTM5MCwxMiBAQAogCQlicmVhazsKIAkgICAgfQogCWNhc2UgU0VOU09SX01PNDAwMDogewotCQlfX3U4IGV4cG9Nb2ZbXSA9CisJCXU4IGV4cG9Nb2ZbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MGYsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKLQkJX191OCBleHBvTW8xMFtdID0KKwkJdTggZXhwb01vMTBbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IGdhaW5Nb1tdID0KKwkJCXsgMHhhMSwgMHgyMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCB9OwogCiAJCWlmIChleHBvID4gMHgxZmZmKQogCQkJZXhwbyA9IDB4MWZmZjsKQEAgLTExMzksMTQgKzE0MDcsMjcgQEAKIAkJCQl8ICgoZXhwbyAmIDB4MDAwMykgPDwgNCk7CiAJCWkyY193OChnc3BjYV9kZXYsIGV4cG9NbzEwKTsKIAkJaTJjX3c4KGdzcGNhX2RldiwgZ2Fpbk1vKTsKLQkJUERFQlVHKERfQ09ORiwgInNldCBleHBvc3VyZSAlZCIsCisJCVBERUJVRyhEX0ZSQU0sICJzZXQgZXhwb3N1cmUgJWQiLAogCQkJKChleHBvTW8xMFszXSAmIDB4MDcpIDw8IDEwKQogCQkJfCAoZXhwb01vZlszXSA8PCAyKQogCQkJfCAoKGV4cG9NbzEwWzNdICYgMHgzMCkgPj4gNCkpOwogCQlicmVhazsKIAkgICAgfQorCWNhc2UgU0VOU09SX01UOVYxMTE6IHsKKwkJdTggZXhwb19jMVtdID0KKwkJCXsgMHhiMSwgMHg1YywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCisJCWlmIChleHBvID4gMHgwMjgwKQorCQkJZXhwbyA9IDB4MDI4MDsKKwkJZWxzZSBpZiAoZXhwbyA8IDB4MDA0MCkKKwkJCWV4cG8gPSAweDAwNDA7CisJCWV4cG9fYzFbM10gPSBleHBvID4+IDg7CisJCWV4cG9fYzFbNF0gPSBleHBvOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBleHBvX2MxKTsKKwkJYnJlYWs7CisJICAgIH0KIAljYXNlIFNFTlNPUl9PTTY4MDI6IHsKLQkJX191OCBnYWluT21bXSA9CisJCXU4IGdhaW5PbVtdID0KIAkJCXsgMHhhMCwgMHgzNCwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCiAJCWlmIChleHBvID4gMHgwM2ZmKQpAQCAtMTE1Niw3ICsxNDM3LDcgQEAKIAkJZ2Fpbk9tWzNdID0gZXhwbyA+PiAyOwogCQlpMmNfdzgoZ3NwY2FfZGV2LCBnYWluT20pOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCAoZXhwbyA+PiA1KSAmIDB4MWYpOwotCQlQREVCVUcoRF9DT05GLCAic2V0IGV4cG9zdXJlICVkIiwgZ2Fpbk9tWzNdKTsKKwkJUERFQlVHKERfRlJBTSwgInNldCBleHBvc3VyZSAlZCIsIGdhaW5PbVszXSk7CiAJCWJyZWFrOwogCSAgICB9CiAJfQpAQCAtMTE2Nyw3ICsxNDQ4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGV4cG87Ci0JX191OCBrMjsKKwl1OCBrMjsKIAogCWsyID0gKChpbnQpIHNkLT5icmlnaHRuZXNzIC0gMHg4MDAwKSA+PiAxMDsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTExODQsNiArMTQ2NSwxMCBAQAogCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPj4gNDsKIAkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDg7CisJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDY7CiAJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CkBAIC0xMTkxLDE0ICsxNDc2LDE1IEBACiAJCWJyZWFrOwogCX0KIAotCXJlZ193MShnc3BjYV9kZXYsIDB4OTYsIGsyKTsJCS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9NVDlWMTExKQorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCBrMik7CS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggazI7Ci0JX191OCBjb250cmFzdFs2XTsKKwl1OCBrMjsKKwl1OCBjb250cmFzdFs2XTsKIAogCWsyID0gc2QtPmNvbnRyYXN0ICogMHgzMCAvIChDT05UUkFTVF9NQVggKyAxKSArIDB4MTA7CS8qIDEwLi40MCAqLwogCWNvbnRyYXN0WzBdID0gKGsyICsgMSkgLyAyOwkJLyogcmVkICovCkBAIC0xMjE0LDggKzE1MDAsOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlfX3U4IHJlZzhhWzEyXTsJCQkvKiBVICYgViBnYWlucyAqLwotCXN0YXRpYyBfX3MxNiB1dls2XSA9IHsJCS8qIHNhbWUgYXMgcmVnODQgaW4gc2lnbmVkIGRlY2ltYWwgKi8KKwl1OCByZWc4YVsxMl07CQkJLyogVSAmIFYgZ2FpbnMgKi8KKwlzdGF0aWMgczE2IHV2WzZdID0gewkJLyogc2FtZSBhcyByZWc4NCBpbiBzaWduZWQgZGVjaW1hbCAqLwogCQktMjQsIC0zOCwgNjQsCQkvKiBVUiBVRyBVQiAqLwogCQkgNjIsIC01MSwgLTkJCS8qIFZSIFZHIFZCICovCiAJfTsKQEAgLTEyMzYsMjIgKzE1MjIsNzUgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzZC0+Ymx1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGk7CisJdTggZ2FtbWFbMTddOworCWNvbnN0IHU4ICpnYW1tYV9iYXNlOworCXN0YXRpYyBjb25zdCB1OCBkZWx0YVsxN10gPSB7CisJCTB4MDAsIDB4MTQsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWIsIDB4MWEsCisJCTB4MTgsIDB4MTMsIDB4MTAsIDB4MGUsIDB4MDgsIDB4MDcsIDB4MDQsIDB4MDIsIDB4MDAKKwl9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9TUDgwNzA4OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfZGVmOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGdhbW1hOyBpKyspCisJCWdhbW1hW2ldID0gZ2FtbWFfYmFzZVtpXQorCQkJKyBkZWx0YVtpXSAqIChzZC0+Z2FtbWEgLSBHQU1NQV9ERUYpIC8gMzI7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYSwgc2l6ZW9mIGdhbW1hKTsKK30KKwogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQVVUT0dBSU5fSURYKSkKIAkJcmV0dXJuOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzYzMDoKKwljYXNlIFNFTlNPUl9PVjc2NDg6IHsKKwkJdTggY29tYjsKKworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjMwKQorCQkJY29tYiA9IDB4YzA7CisJCWVsc2UKKwkJCWNvbWIgPSAweGEwOworCQlpZiAoc2QtPmF1dG9nYWluKQorCQkJY29tYiB8PSAweDAyOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4MTMsIGNvbWIpOworCQlyZXR1cm47CisJICAgIH0KKwl9CiAJaWYgKHNkLT5hdXRvZ2FpbikKIAkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKIAllbHNlCiAJCXNkLT5hZ19jbnQgPSAtMTsKIH0KIAorLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXR2ZmxpcChzdHJ1Y3Qgc2QgKnNkKQogewotCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwJCQkvKiBDT01OICovCi0JCXNkLT52ZmxpcCA/IDB4ODIgOiAweDAyKTsKKwl1OCBjb21uOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMCkKKwkJY29tbiA9IDB4MDI7CisJZWxzZQorCQljb21uID0gMHgwNjsKKwlpZiAoc2QtPnZmbGlwKQorCQljb21uIHw9IDB4ODA7CisJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTEyNjIsMjAgKzE2MDEsNjMgQEAKIAkJc2QtPmluZnJhcmVkID8gMHg2NiA6IDB4NjQpOwogfQogCitzdGF0aWMgdm9pZCBzZXRqcGVncXVhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpLCBzYzsKKworCWlmIChzZC0+anBlZ3F1YWwgPCA1MCkKKwkJc2MgPSA1MDAwIC8gc2QtPmpwZWdxdWFsOworCWVsc2UKKwkJc2MgPSAyMDAgLSBzZC0+anBlZ3F1YWwgKiAyOworI2lmIFVTQl9CVUZfU1ogPCA2NAorI2Vycm9yICJObyByb29tIGVub3VnaCBpbiB1c2JfYnVmIGZvciBxdWFudGl6YXRpb24gdGFibGUiCisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJZ3NwY2FfZGV2LT51c2JfYnVmW2ldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDBfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMHgwOCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDEwMCwgMCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgNjQsCisJCQk1MDApOworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlnc3BjYV9kZXYtPnVzYl9idWZbaV0gPQorCQkJKGpwZWdfaGVhZFtKUEVHX1FUMV9PRkZTRVQgKyBpXSAqIHNjICsgNTApIC8gMTAwOworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDA4LAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMHgwMTQwLCAwLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCA2NCwKKwkJCTUwMCk7CisKKwlzZC0+cmVnMTggXj0gMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworfQorCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JX191OCByZWcxLCByZWcxNywgcmVnMTg7Ci0JY29uc3QgX191OCAqc245YzF4eDsKKwl1OCByZWcxLCByZWcxNzsKKwljb25zdCB1OCAqc245YzF4eDsKIAlpbnQgbW9kZTsKLQlzdGF0aWMgY29uc3QgX191OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OwotCXN0YXRpYyBjb25zdCBfX3U4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCi0Jc3RhdGljIGNvbnN0IF9fdTggQ0Vfb3Y3Nnh4W10gPQorCXN0YXRpYyBjb25zdCB1OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07CisJc3RhdGljIGNvbnN0IHU4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKKwlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KKwlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwogCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCXNuOWMxeHggPSBzbl90YlsoaW50KSBzZC0+c2Vuc29yXTsKIAljb25maWd1cmVfZ3Bpbyhnc3BjYV9kZXYsIHNuOWMxeHgpOwogCkBAIC0xMjkyLDYgKzE2NzQsOSBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4YzksIDB4M2MpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZzE3ID0gMHhlMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTMxNSwxNCArMTcwMCwyNCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNCwgc245YzF4eFsweDE0XSk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYV9kZWYsIHNpemVvZiBnYW1tYV9kZWYpOworCisJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNyk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MGEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDYwKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKSB7CiAJCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA1KTsKQEAgLTEzNTgsNiArMTc1MywxNSBAQAogLyoJCQlyZWcxID0gMHgwNjsJICogNjQwIGNsayAyNE16IChkb25lKSAqLwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCW10OXYxMTFfSW5pdFNlbnNvcihnc3BjYV9kZXYpOworCQlpZiAobW9kZSkgeworCQkJcmVnMSA9IDB4MDQ7CS8qIDMyMCBjbGsgNDhNaHogKi8KKwkJfSBlbHNlIHsKKy8qCQkJcmVnMSA9IDB4MDY7CSAqIDY0MCBjbGsgMjRNeiAoZG9uZSkgKi8KKwkJCXJlZzE3ID0gMHhjMjsKKwkJfQorCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CiAJCXJlZzE3ID0gMHg2NDsJCS8qIDY0MCBNQ0tTSVpFICovCkBAIC0xMzczLDggKzE3NzcsNyBAQAogCQlyZWcxNyA9IDB4MjE7CiAvKgkJcmVnMSA9IDB4NDI7CQkgKiA0MiAtIDQ2PyAqLwogCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y3NjYwOiAqLworCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJb3Y3NjYwX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKIAkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMjApIHsKIAkJCWlmIChtb2RlKSB7CQkvKiAzMjB4MjQwIC0gMTYweDEyMCAqLwpAQCAtMTM4Nyw2ICsxNzkwLDE2IEBACiAJCQkJCSAqIGludmVyc2UgcG93ZXIgZG93biAqLwogCQl9CiAJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9TUDgwNzA4OiAqLworCQlzcDgwNzA4X0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpIHsKKy8qPz8JCQlyZWcxID0gMHgwNDsJICogMzIwIGNsayA0OE1oeiAqLworCQl9IGVsc2UgeworCQkJcmVnMSA9IDB4NDY7CSAvKiA2NDAgY2xrIDQ4TXogKi8KKwkJCXJlZzE3ID0gMHhhMjsKKwkJfQorCQlicmVhazsKIAl9CiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7CiAJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CkBAIC0xNDAzLDIwICsxODE2LDEzIEBACiAJfQogCiAJLyogaGVyZSBjaGFuZ2Ugc2l6ZSBtb2RlIDAgLT4gVkdBOyAxIC0+IENJRiAqLwotCXJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpOwotCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHJlZzE4IHwgMHg0MCk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTAwLCBxdGFibGU0LCAweDQwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTQwLCBxdGFibGU0ICsgMHg0MCwgMHg0MCk7Ci0KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCByZWcxOCk7CisJc2QtPnJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpIHwgMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworCXNldGpwZWdxdWFsKGdzcGNhX2Rldik7CiAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCByZWcxNyk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMSk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkwMzYwOgotCQlzZXRpbmZyYXJlZChzZCk7Ci0JCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJc2V0dmZsaXAoc2QpOwogCQlicmVhazsKQEAgLTE0MzAsMTQgKzE4MzYsMTQgQEAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcGh2NzEzMVtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcGh2NzEzMVtdID0KIAkJeyAweGExLCAweDExLCAweDAyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG1pMDM2MFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG1pMDM2MFtdID0KIAkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG92NzY0OFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG92NzY0OFtdID0KIAkJeyAweGExLCAweDIxLCAweDc2LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0JX191OCBkYXRhOwotCWNvbnN0IF9fdTggKnNuOWMxeHg7CisJdTggZGF0YTsKKwljb25zdCB1OCAqc245YzF4eDsKIAogCWRhdGEgPSAweDBiOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtMTQ1Miw2ICsxODU4LDcgQEAKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCWkyY193OChnc3BjYV9kZXYsIHN0b3Bvdjc2NDgpOwogCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9NVDlWMTExOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJZGF0YSA9IDB4Mjk7CiAJCWJyZWFrOwpAQCAtMTQ2OCwxMyArMTg3NSwyMCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZGVsdGE7CiAJaW50IGV4cG90aW1lczsKLQlfX3U4IGx1bWFfbWVhbiA9IDEzMDsKLQlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKKwl1OCBsdW1hX21lYW4gPSAxMzA7CisJdTggbHVtYV9kZWx0YSA9IDIwOwogCiAJLyogVGhhbmtzIFMuLCB3aXRob3V0IHlvdXIgYWR2aWNlLCBhdXRvYnJpZ2h0IHNob3VsZCBub3Qgd29yayA6KSAqLwogCWlmIChzZC0+YWdfY250IDwgMCkKQEAgLTE0OTksNiArMTkxMyw3IEBACiAJCWRlZmF1bHQ6CiAvKgkJY2FzZSBTRU5TT1JfTU80MDAwOiAqLwogLyoJCWNhc2UgU0VOU09SX01JMDM2MDogKi8KKy8qCQljYXNlIFNFTlNPUl9NVDlWMTExOiAqLwogLyoJCWNhc2UgU0VOU09SX09NNjgwMjogKi8KIAkJCWV4cG90aW1lcyA9IHNkLT5leHBvc3VyZTsKIAkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0gZGVsdGEpID4+IDY7CkBAIC0xNTE2LDcgKzE5MzEsNyBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBydW4gYXQgaW50ZXJydXB0IGxldmVsLiAqLwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE1NTAsNyArMTk2NSw4IEBACiAJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBMQVNUX1BBQ0tFVCkgewogCiAJCS8qIHB1dCB0aGUgSlBFRyA0MjIgaGVhZGVyICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIxKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogfQpAQCAtMTY0NSw2ICsyMDYxLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xNjk5LDYgKzIxMzMsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTE3MDgsOCArMjE3MCwxMSBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE3MjQsOSArMjE4OSw3IEBACiAjZW5kaWYKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNyksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjgpLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMzApLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDQpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCkBAIC0xNzY0LDEwICsyMjI3LDEwIEBACiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EpLCBCU0koU045QzEyMCwgT1Y3NjQ4LCAweDIxKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiksIEJTSShTTjlDMTIwLCBPVjc2NjAsIDB4MjEpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjKSwgQlNJKFNOOUMxMjAsIEhWNzEzMVIsIDB4MTEpfSwKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNlKSwgQlNJKFNOOUMxMjAsIE9WNzYzMCwgMHg/Pyl9LCAqLwotI2VuZGlmCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgTUkwMzYwLCAweDVkKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgU1A4MDcwOCwgMHgxOCl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CkBAIC0xNzk0LDggKzIyNTcsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IDk0MmYwNGMuLjZmMzhmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC0zOCw4ICszOCwxMSBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDcwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDg1CiAKLQljaGFyIHFpbmRleDsKIAljaGFyIHN1YnR5cGU7CiAjZGVmaW5lIEFnZmFDbDIwIDAKICNkZWZpbmUgQWlwdGVrUG9ja2V0RFYgMQpAQCAtNTYsNiArNTksOCBAQAogI2RlZmluZSBPcHRpbWVkaWEgMTIKICNkZWZpbmUgUGFsbVBpeERDODUgMTMKICNkZWZpbmUgVG9wdHJvSW5kdXMgMTQKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTYyOSw3ICs2MzQsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJc2QtPnN1YnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zdWJ0eXBlICE9IExvZ2l0ZWNoQ2xpY2tTbWFydDMxMCkgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CkBAIC02MzgsMTAgKzY0MiwxMCBAQAogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CiAJfQotCXNkLT5xaW5kZXggPSA1OwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY3LDYgKzY3MSwxMiBAQAogCV9fdTggRGF0YTsKIAlfX3U4IHhtdWx0LCB5bXVsdDsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPnN1YnR5cGUgPT0gTG9naXRlY2hDbGlja1NtYXJ0MzEwKSB7CiAJCXhtdWx0ID0gMHgxNjsKIAkJeW11bHQgPSAweDEyOwpAQCAtNzEzLDcgKzcyMyw4IEBACiAJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDBfdmlzdWFsX2RlZmF1bHRzKTsKIAkJc3BjYTUwMF9zZXRtb2RlKGdzcGNhX2RldiwgeG11bHQsIHltdWx0KTsKIAkJLyogZW5hYmxlIGRyb3AgcGFja2V0ICovCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NTBhLCAweDAwMDEpOworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJaWYgKGVyciA8IDApCiAJCQlQREVCVUcoRF9FUlIsICJmYWlsZWQgdG8gZW5hYmxlIGRyb3AgcGFja2V0Iik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4ODgwLCAzKTsKIAkJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LApAQCAtODgxLDYgKzg5MiwxMyBAQAogCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC05MDEsNyArOTE5LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCWRhdGEgKz0gU1BDQTUwMF9PRkZTRVRfREFUQTsKIAkJbGVuIC09IFNQQ0E1MDBfT0ZGU0VUX0RBVEE7CkBAIC05MzcsMTYgKzk1Niw2IEBACiAJCQkoX191OCkgKHNkLT5icmlnaHRuZXNzIC0gMTI4KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDgxNjcsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmJyaWdodG5lc3MgPSByZXQgKyAxMjg7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05NTQsMTYgKzk2Myw2IEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjgsIHNkLT5jb250cmFzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwLCAweDgxNjgsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmNvbnRyYXN0ID0gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTk3MSwxNiArOTcwLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2OSwgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY5LCAxKTsKLQlpZiAocmV0ID49IDApCi0JCXNkLT5jb2xvcnMgPSByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05OTUsNyArOTg0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTAxNCw3ICsxMDAyLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb250cmFzdChnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29udHJhc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMzLDExICsxMDIwLDM4IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xMDQ3LDcgKzEwNjEsMTAgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0xMDkzLDggKzExMTAsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKaW5kZXggODJlM2UzZS4uZDQ4YjI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKQEAgLTE4ODMsMTAgKzE4ODMsNiBAQAogCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTIsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xODk3LDEwICsxODkzLDYgQEAKIAkJCQkgIHNkLT5jb250cmFzdCAmIDB4ZmYpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkwOCwxMCArMTkwMCw2IEBACiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgwYywgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkzNCw3ICsxOTIyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKQEAgLTIwODQsNyArMjA3MSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDMsNyArMjA4OSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtMjEyMiw3ICsyMTA3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTEsOCArMjE5NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCAyYTMzYTI5Li4yYWNlYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtMzEsOSArMzEsOSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1OCBicmlnaHRuZXNzOwogCi0JY2hhciBzdWJ0eXBlOworCXU4IHN1YnR5cGU7CiAjZGVmaW5lIEludGVsUENDYW1lcmFQcm8gMAogI2RlZmluZSBOeHVsdHJhIDEKIH07CkBAIC00Myw3ICs0Myw2IEBACiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC01Miw3ICs1MSw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC02NCwxMiArNjQsMTIgQEAKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKIAkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDV9LAorCQkucHJpdiA9IDR9LAogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDR9LAorCQkucHJpdiA9IDN9LAogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyAyLApAQCAtOTMsNiArOTMsNyBAQAogCiAjZGVmaW5lIFNQQ0E1MFhfVVNCX0NUUkwgMHgwMAkvKiBzcGNhNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfQ1VTQl9FTkFCTEUgMHgwMSAvKiBzcGNhNTA1ICovCisKICNkZWZpbmUgU1BDQTUwWF9SRUdfR0xPQkFMIDB4MDMJLyogc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dNSVNDMF9JRFNFTCAweDAxIC8qIEdsb2JhbCBjb250cm9sIGRldmljZSBJRCBzZWxlY3Qgc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dMT0JBTF9NSVNDMCAweDAwIC8qIEdsb2JhbCBjb250cm9sIG1pc2NlbGxhbmVvdXMgMCBzcGNhNTA1ICovCkBAIC0xMDEsMjMwICsxMDIsMjMwIEBACiAjZGVmaW5lIFNQQ0E1MFhfR0xPQkFMX01JU0MzIDB4MDMgLyogNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfR01JU0MzX1NBQTcxMTNSU1QgMHgyMAkvKiBOb3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBzcGNhNTA1ICovCiAKKy8qIEltYWdlIGZvcm1hdCBhbmQgY29tcHJlc3Npb24gY29udHJvbCAqLworI2RlZmluZSBTUENBNTBYX1JFR19DT01QUkVTUyAweDA0CisKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDVfaW5pdF9kYXRhW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KLQkvKiAxODE5ICovCitzdGF0aWMgY29uc3QgdTggc3BjYTUwNV9pbml0X2RhdGFbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAl7U1BDQTUwWF9SRUdfR0xPQkFMLCBTUENBNTBYX0dNSVNDM19TQUE3MTEzUlNULCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCiAJLyogU2Vuc29yIHJlc2V0ICovCi0JLyogMTgyMiAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCi0JLyogMTgyNSAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDMX0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAorCXtTUENBNTBYX1JFR19HTE9CQUwsIDB4MDAsIFNQQ0E1MFhfR0xPQkFMX01JU0MxfSwKIAkvKiBCbG9jayBVU0IgcmVzZXQgKi8KLQkvKiAxODI4ICovIHtTUENBNTBYX1JFR19HTE9CQUwsIFNQQ0E1MFhfR01JU0MwX0lEU0VMLAotCQlTUENBNTBYX0dMT0JBTF9NSVNDMH0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzBfSURTRUwsIFNQQ0E1MFhfR0xPQkFMX01JU0MwfSwKIAotCS8qIDE4MzEgKi8gezB4NSwgMHgwMSwgMHgxMH0sCisJezB4MDUsIDB4MDEsIDB4MTB9LAogCQkJCQkvKiBNYXliZSBwb3dlciBkb3duIHNvbWUgc3R1ZmYgKi8KLQkvKiAxODM0ICovIHsweDUsIDB4MGYsIDB4MTF9LAorCXsweDA1LCAweDBmLCAweDExfSwKIAogCS8qIFNldHVwIGludGVybmFsIENDRCAgPyAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCXt9CiB9OwogCiAvKgogICogRGF0YSB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdXNpbmcgdGhlIGludGVybmFsIENDRAogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNV9vcGVuX2RhdGFfY2NkW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KK3N0YXRpYyBjb25zdCB1OCBzcGNhNTA1X29wZW5fZGF0YV9jY2RbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAkvKiBJbnRlcm5hbCBDQ0QgZGF0YSBzZXQgKi8KLQkvKiAxODkxICovIHsweDMsIDB4MDQsIDB4MDF9LAorCXsweDAzLCAweDA0LCAweDAxfSwKIAkvKiBUaGlzIGNvdWxkIGJlIGEgcmVzZXQgKi8KLQkvKiAxODk0ICovIHsweDMsIDB4MDAsIDB4MDF9LAorCXsweDAzLCAweDAwLCAweDAxfSwKIAogCS8qIFNldHVwIGNvbXByZXNzaW9uIGFuZCBpbWFnZSByZWdpc3RlcnMuIDB4NiBhbmQgMHg3IHNlZW0gdG8gYmUKIAkgICByZWxhdGVkIHRvIEgmViBob2xkLCBhbmQgYXJlIHJlc29sdXRpb24gbW9kZSBzcGVjaWZpYyAqLwotCQkvKiAxODk3ICovIHsweDQsIDB4MTAsIDB4MDF9LAorCQl7MHgwNCwgMHgxMCwgMHgwMX0sCiAJCS8qIERJRkYoMHg1MCksIHdhcyAoMHgxMCkgKi8KLQkvKiAxOTAwICovIHsweDQsIDB4MDAsIDB4MDR9LAotCS8qIDE5MDMgKi8gezB4NCwgMHgwMCwgMHgwNX0sCi0JLyogMTkwNiAqLyB7MHg0LCAweDIwLCAweDA2fSwKLQkvKiAxOTA5ICovIHsweDQsIDB4MjAsIDB4MDd9LAorCXsweDA0LCAweDAwLCAweDA0fSwKKwl7MHgwNCwgMHgwMCwgMHgwNX0sCisJezB4MDQsIDB4MjAsIDB4MDZ9LAorCXsweDA0LCAweDIwLCAweDA3fSwKIAotCS8qIDE5MTIgKi8gezB4OCwgMHgwYSwgMHgwMH0sCisJezB4MDgsIDB4MGEsIDB4MDB9LAogCS8qIERJRkYgKDB4NGEpLCB3YXMgKDB4YSkgKi8KIAotCS8qIDE5MTUgKi8gezB4NSwgMHgwMCwgMHgxMH0sCi0JLyogMTkxOCAqLyB7MHg1LCAweDAwLCAweDExfSwKLQkvKiAxOTIxICovIHsweDUsIDB4MDAsIDB4MDB9LAorCXsweDA1LCAweDAwLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDAsIDB4MDB9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTI0ICovIHsweDUsIDB4MDAsIDB4MDF9LAorCXsweDA1LCAweDAwLCAweDAxfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTkyNyAqLyB7MHg1LCAweDAwLCAweDAyfSwKKwl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCS8qIDE5MzAgKi8gezB4NSwgMHgwMCwgMHgwM30sCisJezB4MDUsIDB4MDAsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTMzICovIHsweDUsIDB4MDAsIDB4MDR9LAorCXsweDA1LCAweDAwLCAweDA0fSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5MzYgKi8gezB4NSwgMHg4MCwgMHgwNX0sCisJCXsweDA1LCAweDgwLCAweDA1fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTM5ICovIHsweDUsIDB4ZTAsIDB4MDZ9LAorCQl7MHgwNSwgMHhlMCwgMHgwNn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk0MiAqLyB7MHg1LCAweDIwLCAweDA3fSwKKwkJezB4MDUsIDB4MjAsIDB4MDd9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NDUgKi8gezB4NSwgMHhhMCwgMHgwOH0sCisJCXsweDA1LCAweGEwLCAweDA4fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTQ4ICovIHsweDUsIDB4MCwgMHgxMn0sCisJCXsweDA1LCAweDAsIDB4MTJ9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTk1MSAqLyB7MHg1LCAweDAyLCAweDBmfSwKKwl7MHgwNSwgMHgwMiwgMHgwZn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTU0ICovIHsweDUsIDB4MTAsIDB4NDZ9LAorCQl7MHgwNSwgMHgxMCwgMHg0Nn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk1NyAqLyB7MHg1LCAweDgsIDB4NGF9LAorCQl7MHgwNSwgMHg4LCAweDRhfSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwogCi0JLyogMTk2MCAqLyB7MHgzLCAweDA4LCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwM30sCiAJLyogRElGRiAoMHgzLDB4MjgsMHgzKSAqLwotCS8qIDE5NjMgKi8gezB4MywgMHgwOCwgMHgwMX0sCi0JLyogMTk2NiAqLyB7MHgzLCAweDBjLCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwMX0sCisJezB4MDMsIDB4MGMsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk2OSAqLyB7MHgzLCAweDIxLCAweDAwfSwKKwkJezB4MDMsIDB4MjEsIDB4MDB9LAogCQkvKiBESUZGICgweDM5KSAqLwogCiAvKiBFeHRyYSBibG9jayBjb3BpZWQgZnJvbSBpbml0IHRvIGhvcGVmdWxseSBlbnN1cmUgQ0NEIGlzIGluIGEgc2FuZSBzdGF0ZSAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCS8qIEVuZCBvZiBleHRyYSBibG9jayAqLwogCi0JCS8qIDE5NzIgKi8gezB4NiwgMHgzZiwgMHgxfSwKKwkJezB4MDYsIDB4M2YsIDB4MX0sCiAJCS8qIEJsb2NrIHNraXBwZWQgKi8KLQkvKiAxOTc1ICovIHsweDYsIDB4MTAsIDB4MDJ9LAotCS8qIDE5NzggKi8gezB4NiwgMHg2NCwgMHgwN30sCi0JLyogMTk4MSAqLyB7MHg2LCAweDEwLCAweDA4fSwKLQkvKiAxOTg0ICovIHsweDYsIDB4MDAsIDB4MDl9LAotCS8qIDE5ODcgKi8gezB4NiwgMHgwMCwgMHgwYX0sCi0JLyogMTk5MCAqLyB7MHg2LCAweDAwLCAweDBifSwKLQkvKiAxOTkzICovIHsweDYsIDB4MTAsIDB4MGN9LAotCS8qIDE5OTYgKi8gezB4NiwgMHgwMCwgMHgwZH0sCi0JLyogMTk5OSAqLyB7MHg2LCAweDAwLCAweDBlfSwKLQkvKiAyMDAyICovIHsweDYsIDB4MDAsIDB4MGZ9LAotCS8qIDIwMDUgKi8gezB4NiwgMHgxMCwgMHgxMH0sCi0JLyogMjAwOCAqLyB7MHg2LCAweDAyLCAweDExfSwKLQkvKiAyMDExICovIHsweDYsIDB4MDAsIDB4MTJ9LAotCS8qIDIwMTQgKi8gezB4NiwgMHgwNCwgMHgxM30sCi0JLyogMjAxNyAqLyB7MHg2LCAweDAyLCAweDE0fSwKLQkvKiAyMDIwICovIHsweDYsIDB4OGEsIDB4NTF9LAotCS8qIDIwMjMgKi8gezB4NiwgMHg0MCwgMHg1Mn0sCi0JLyogMjAyNiAqLyB7MHg2LCAweGI2LCAweDUzfSwKLQkvKiAyMDI5ICovIHsweDYsIDB4M2QsIDB4NTR9LAotCS8qIDIwMzIgKi8gezB4NiwgMHg2MCwgMHg1N30sCi0JLyogMjAzNSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMDM4ICovIHsweDYsIDB4MTUsIDB4NTl9LAotCS8qIDIwNDEgKi8gezB4NiwgMHgwNSwgMHg1YX0sCisJezB4MDYsIDB4MTAsIDB4MDJ9LAorCXsweDA2LCAweDY0LCAweDA3fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAorCXsweDA2LCAweDYwLCAweDU3fSwKKwl7MHgwNiwgMHgyMCwgMHg1OH0sCisJezB4MDYsIDB4MTUsIDB4NTl9LAorCXsweDA2LCAweDA1LCAweDVhfSwKIAotCS8qIDIwNDQgKi8gezB4NSwgMHgwMSwgMHhjMH0sCi0JLyogMjA0NyAqLyB7MHg1LCAweDEwLCAweGNifSwKLQkJLyogMjA1MCAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwMSwgMHhjMH0sCisJezB4MDUsIDB4MTAsIDB4Y2J9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JCS8qIDIwNTMgKi8gezB4NSwgMHgwLCAweGMyfSwKKwkJezB4MDUsIDB4MCwgMHhjMn0sCiAJCS8qIDQgd2FzIDAgKi8KLQkvKiAyMDU2ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDU5ICovIHsweDUsIDB4ODAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAgKi8KLQkvKiAyMDYyICovIHsweDUsIDB4MDQsIDB4YzJ9LAotCS8qIDIwNjUgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwNjggKi8gezB4NSwgMHgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHgwLCAweGMxfSwKIAkJLyogICovCi0JLyogMjA3MSAqLyB7MHg1LCAweDAwLCAweGMyfSwKLQkvKiAyMDc0ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDc3ICovIHsweDUsIDB4NDAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJCXsweDA1LCAweDQwLCAweGMxfSwKIAkJLyogKi8KLQkvKiAyMDgwICovIHsweDUsIDB4MTcsIDB4YzJ9LAotCS8qIDIwODMgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwODYgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4MTcsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIwODkgKi8gezB4NSwgMHgwNiwgMHhjMn0sCi0JLyogMjA5MiAqLyB7MHg1LCAweDAwLCAweGNhfSwKLQkJLyogMjA5NSAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNiwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JLyogMjA5OCAqLyB7MHg1LCAweDA0LCAweGMyfSwKLQkvKiAyMTAxICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweDA0LCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCiAKLQkvKiAyMTA0ICovIHsweDMsIDB4NGMsIDB4M30sCi0JLyogMjEwNyAqLyB7MHgzLCAweDE4LCAweDF9LAorCXsweDAzLCAweDRjLCAweDN9LAorCXsweDAzLCAweDE4LCAweDF9LAogCi0JLyogMjExMCAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMTEzICovIHsweDYsIDB4YmUsIDB4NTN9LAotCS8qIDIxMTYgKi8gezB4NiwgMHg3MSwgMHg1N30sCi0JLyogMjExOSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMTIyICovIHsweDYsIDB4MDUsIDB4NTl9LAotCS8qIDIxMjUgKi8gezB4NiwgMHgxNSwgMHg1YX0sCisJezB4MDYsIDB4NzAsIDB4NTF9LAorCXsweDA2LCAweGJlLCAweDUzfSwKKwl7MHgwNiwgMHg3MSwgMHg1N30sCisJezB4MDYsIDB4MjAsIDB4NTh9LAorCXsweDA2LCAweDA1LCAweDU5fSwKKwl7MHgwNiwgMHgxNSwgMHg1YX0sCiAKLQkvKiAyMTI4ICovIHsweDQsIDB4MDAsIDB4MDh9LAorCXsweDA0LCAweDAwLCAweDA4fSwKIAkvKiBDb21wcmVzcyA9IE9GRiAoMHgxIHRvIHR1cm4gb24pICovCi0JLyogMjEzMSAqLyB7MHg0LCAweDEyLCAweDA5fSwKLQkvKiAyMTM0ICovIHsweDQsIDB4MjEsIDB4MGF9LAotCS8qIDIxMzcgKi8gezB4NCwgMHgxMCwgMHgwYn0sCi0JLyogMjE0MCAqLyB7MHg0LCAweDIxLCAweDBjfSwKLQkvKiAyMTQzICovIHsweDQsIDB4MDUsIDB4MDB9LAorCXsweDA0LCAweDEyLCAweDA5fSwKKwl7MHgwNCwgMHgyMSwgMHgwYX0sCisJezB4MDQsIDB4MTAsIDB4MGJ9LAorCXsweDA0LCAweDIxLCAweDBjfSwKKwl7MHgwNCwgMHgwNSwgMHgwMH0sCiAJLyogd2FzIDUgKEltYWdlIFR5cGUgPyApICovCi0JLyogMjE0NiAqLyB7MHg0LCAweDAwLCAweDAxfSwKKwl7MHgwNCwgMHgwMCwgMHgwMX0sCiAKLQkvKiAyMTQ5ICovIHsweDYsIDB4M2YsIDB4MDF9LAorCXsweDA2LCAweDNmLCAweDAxfSwKIAotCS8qIDIxNTIgKi8gezB4NCwgMHgwMCwgMHgwNH0sCi0JLyogMjE1NSAqLyB7MHg0LCAweDAwLCAweDA1fSwKLQkvKiAyMTU4ICovIHsweDQsIDB4NDAsIDB4MDZ9LAotCS8qIDIxNjEgKi8gezB4NCwgMHg0MCwgMHgwN30sCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKwl7MHgwNCwgMHg0MCwgMHgwNn0sCisJezB4MDQsIDB4NDAsIDB4MDd9LAogCi0JLyogMjE2NCAqLyB7MHg2LCAweDFjLCAweDE3fSwKLQkvKiAyMTY3ICovIHsweDYsIDB4ZTIsIDB4MTl9LAotCS8qIDIxNzAgKi8gezB4NiwgMHgxYywgMHgxYn0sCi0JLyogMjE3MyAqLyB7MHg2LCAweGUyLCAweDFkfSwKLQkvKiAyMTc2ICovIHsweDYsIDB4YWEsIDB4MWZ9LAotCS8qIDIxNzkgKi8gezB4NiwgMHg3MCwgMHgyMH0sCisJezB4MDYsIDB4MWMsIDB4MTd9LAorCXsweDA2LCAweGUyLCAweDE5fSwKKwl7MHgwNiwgMHgxYywgMHgxYn0sCisJezB4MDYsIDB4ZTIsIDB4MWR9LAorCXsweDA2LCAweGFhLCAweDFmfSwKKwl7MHgwNiwgMHg3MCwgMHgyMH0sCiAKLQkvKiAyMTgyICovIHsweDUsIDB4MDEsIDB4MTB9LAotCS8qIDIxODUgKi8gezB4NSwgMHgwMCwgMHgxMX0sCi0JLyogMjE4OCAqLyB7MHg1LCAweDAxLCAweDAwfSwKLQkvKiAyMTkxICovIHsweDUsIDB4MDUsIDB4MDF9LAotCQkvKiAyMTk0ICovIHsweDUsIDB4MDAsIDB4YzF9LAorCXsweDA1LCAweDAxLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDEsIDB4MDB9LAorCXsweDA1LCAweDA1LCAweDAxfSwKKwkJezB4MDUsIDB4MDAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIxOTcgKi8gezB4NSwgMHgwMCwgMHhjMn0sCi0JLyogMjIwMCAqLyB7MHg1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAogCi0JLyogMjIwMyAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMjA2ICovIHsweDYsIDB4YmUsIDB4NTN9LAorCXsweDA2LCAweDcwLCAweDUxfSwKKwl7MHgwNiwgMHhiZSwgMHg1M30sCiAJe30KIH07CiAKIC8qCi0gICBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCisgKiBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCiAgKiBTUENBNTA1YiBjaGlwIGJhc2VkIGNhbWVyYXMgaW5pdGlhbGl6YXRpb24gZGF0YQotICoKICAqLwogLyogamZtICovCiAjZGVmaW5lIGluaXRpYWxfYnJpZ2h0bmVzcyAweDdmCS8qIDB4MCh3aGl0ZSktMHhmZihibGFjaykgKi8KQEAgLTMzMiw3ICszMzMsNyBAQAogLyoKICAqIERhdGEgdG8gaW5pdGlhbGl6ZSBhIFNQQ0E1MDUuIENvbW1vbiB0byB0aGUgQ0NEIGFuZCBleHRlcm5hbCBtb2RlcwogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CiAvKiBzdGFydCAqLwogCXsweDAyLCAweDAwLCAweDAwfSwJCS8qIGluaXQgKi8KIAl7MHgwMiwgMHgwMCwgMHgwMX0sCkBAIC0zOTYsNyArMzk3LDcgQEAKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgdGhlIGNhbWVyYSB1c2luZyB0aGUgaW50ZXJuYWwgQ0NECiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA1Yl9vcGVuX2RhdGFfY2NkW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfb3Blbl9kYXRhX2NjZFtdWzNdID0gewogCiAvKiB7MHgwMiwweDAwLDB4MDB9LCAqLwogCXsweDAzLCAweDA0LCAweDAxfSwJCS8qIHJzdCAqLwpAQCAtNDI2LDcgKzQyNyw3IEBACiAJezB4MDUsIDB4MDAsIDB4MTJ9LAogCXsweDA1LCAweDZmLCAweDAwfSwKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJezB4MDUsIDB4MDEsIDB4MDN9LAogCXsweDA1LCAweDAwLCAweDA0fSwKQEAgLTQzNiw3ICs0MzcsNyBAQAogCXsweDA1LCAweGEwLCAweDA4fSwKIAl7MHgwNSwgMHgwMCwgMHgxMn0sCiAJezB4MDUsIDB4MDIsIDB4MGZ9LAotCXsweDA1LCAxMjgsIDB4MTR9LAkJLyogbWF4IGV4cG9zdXJlIG9mZiAoMD1vbikgKi8KKwl7MHgwNSwgMHg4MCwgMHgxNH0sCQkvKiBtYXggZXhwb3N1cmUgb2ZmICgwPW9uKSAqLwogCXsweDA1LCAweDAxLCAweGIwfSwKIAl7MHgwNSwgMHgwMSwgMHhiZn0sCiAJezB4MDMsIDB4MDIsIDB4MDZ9LApAQCAtNTYwLDI2ICs1NjEsMjYgQEAKIAl7MHgwNiwgMHgzMiwgMHgyMH0sCiAKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwNiwgMHhjMX0sCiAJezB4MDUsIDB4NTgsIDB4YzJ9LAotCXsweDA1LCAweDAsIDB4Y2F9LAotCXsweDA1LCAweDAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCiAJe30KIH07CiAKIHN0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCSAgICAgX191MTYgcmVnLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCisJCSAgICAgdTE2IHJlcSwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJCXJlZywKKwkJCXJlcSwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7Ci0JUERFQlVHKERfUEFDSywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsIDB4JXgiLAotCQlyZWcsIGluZGV4LCB2YWx1ZSwgcmV0KTsKKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiAweCUwMngsMHglMDJ4OjB4JTAyeCwgJWQiLAorCQlyZXEsIGluZGV4LCB2YWx1ZSwgcmV0KTsKIAlpZiAocmV0IDwgMCkKIAkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU4Nyw0MiArNTg4LDM0IEBACiAKIC8qIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTE2IHJlZywJLyogYlJlcXVlc3QgKi8KLQkJCV9fdTE2IGluZGV4LAkvKiB3SW5kZXggKi8KLQkJCV9fdTE2IGxlbmd0aCkJLyogd0xlbmd0aCAoMSBvciAyIG9ubHkpICovCisJCQl1MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJdTE2IGluZGV4KQkvKiB3SW5kZXggKi8KIHsKIAlpbnQgcmV0OwogCi0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJcmVnLAorCQkJcmVxLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkoX191MTYpIDAsCQkvKiB2YWx1ZSAqLwotCQkJKF9fdTE2KSBpbmRleCwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAorCQkJMCwJCQkvKiB2YWx1ZSAqLworCQkJaW5kZXgsCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDIsCiAJCQk1MDApOwkJCS8qIHRpbWVvdXQgKi8KLQlpZiAocmV0IDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpICsgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1OCBkYXRhW11bM10pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQsIGkgPSAwOwogCi0Jd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCB8fCBkYXRhW2ldWzFdICE9IDAgfHwgZGF0YVtpXVsyXSAhPSAwKSB7CisJd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCkgewogCQlyZXQgPSByZWdfd3JpdGUoZGV2LCBkYXRhW2ldWzBdLCBkYXRhW2ldWzJdLCBkYXRhW2ldWzFdKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCVBERUJVRyhEX0VSUiwKLQkJCQkiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCV4LDB4JXgsMHgleCIsCi0JCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlpKys7CiAJfQogCXJldHVybiAwOwpAQCAtNjM2LDE0ICs2MjksMTMgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnN1YnR5cGUgIT0gSW50ZWxQQ0NhbWVyYVBybykKLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJZWxzZQkJCS8qIG5vIDY0MHg0ODAgZm9yIEludGVsUENDYW1lcmFQcm8gKi8KLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF0gLSAxOwotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKSAtIDE7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAogCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKSB7CiAJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9pbml0X2RhdGEpKQpAQCAtNjU4LDgxICs2NTAsNzEgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCVBERUJVRyhEX1NUUkVBTSwgIkluaXRpYWxpemluZyBTUENBNTA1Iik7Ci0JaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCi0JCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOwotCWVsc2UKLQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKLQlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDYsIDB4MTYsIDIpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAotCQkgICAgICAgInJlZ2lzdGVyIHJlYWQgZmFpbGVkIGZvciBhZnRlciB2ZWN0b3IgcmVhZCBlcnIgPSAlZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JUERFQlVHKERfU1RSRUFNLAotCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyA6IDB4JXggc2hvdWxkIGJlIDB4MDEwMSIsCi0JCXJldCAmIDB4ZmZmZik7Ci0KLQlyZXQgPSByZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDYsIDB4MTYsIDB4MGEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgInJlZ2lzdGVyIHdyaXRlIGZhaWxlZCBmb3IgKDYsMHhhLDB4MTYpIGVycj0lZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA1LCAweGMyLCAxOCk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKK30KKwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmV0OworCWludCByZXQsIG1vZGU7CisJc3RhdGljIHU4IG1vZGVfdGJbXVszXSA9IHsKKwkvKgkgIHIwMCAgIHIwNiAgIHIwNwkqLworCQl7MHgwMCwgMHgxMCwgMHgxMH0sCS8qIDY0MHg0ODAgKi8KKwkJezB4MDEsIDB4MWEsIDB4MWF9LAkvKiAzNTJ4Mjg4ICovCisJCXsweDAyLCAweDFjLCAweDFkfSwJLyogMzIweDI0MCAqLworCQl7MHgwNCwgMHgzNCwgMHgzNH0sCS8qIDE3NngxNDQgKi8KKwkJezB4MDUsIDB4NDAsIDB4NDB9CS8qIDE2MHgxMjAgKi8KKwl9OworCisJaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOworCWVsc2UKKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKKwlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4MDYsIDB4MTYpOworCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSfERfQ09ORiwKKwkJICAgICAgICJyZWdpc3RlciByZWFkIGZhaWxlZCBlcnI6ICVkIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgIT0gMHgwMTAxKSB7CisJCVBERUJVRyhEX0VSUnxEX0NPTkYsCisJCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyAweCUwNHggc2hvdWxkIGJlIDB4MDEwMSIsCisJCQlyZXQpOworCX0KKworCXJldCA9IHJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNiwgMHgxNiwgMHgwYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweGMyLCAweDEyKTsKIAogCS8qIG5lY2Vzc2FyeSBiZWNhdXNlIHdpdGhvdXQgaXQgd2UgY2FuIHNlZSBzdHJlYW0KIAkgKiBvbmx5IG9uY2UgYWZ0ZXIgbG9hZGluZyBtb2R1bGUgKi8KIAkvKiBzdG9wcGluZyB1c2IgcmVnaXN0ZXJzIFRvbWFzeiBjaGFuZ2UgKi8KLQlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAsIDB4MCk7Ci0Jc3dpdGNoIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdikgewotCWNhc2UgMDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwMCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MTApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDEwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDAxKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgxYSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MWEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDIpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDFjKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgxZCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MzQpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDM0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgNTogKi8KLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4NDApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDQwKTsKLQkJYnJlYWs7Ci0JfQotLyogRW5hYmxlIElTTyBwYWNrZXQgbWFjaGluZSAtIHNob3VsZCB3ZSBkbyB0aGlzIGhlcmUgb3IgaW4gSVNPQyBpbml0ID8gKi8KKwlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAwLCAweDAwKTsKKworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19DT01QUkVTUywgMHgwMCwgbW9kZV90Ylttb2RlXVswXSk7CisJcmVnX3dyaXRlKGRldiwgU1BDQTUwWF9SRUdfQ09NUFJFU1MsIDB4MDYsIG1vZGVfdGJbbW9kZV1bMV0pOworCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX0NPTVBSRVNTLCAweDA3LCBtb2RlX3RiW21vZGVdWzJdKTsKKwogCXJldCA9IHJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwKIAkJCSBTUENBNTBYX1VTQl9DVFJMLAogCQkJIFNQQ0E1MFhfQ1VTQl9FTkFCTEUpOwogCi0vKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgwKTsgKi8KLS8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDEpOyAqLwotLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDExLCAweDIpOyAqLworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MCwxNSArNzMyLDE1IEBACiAKIAkvKiBUaGlzIG1heWJlIHJlc2V0IG9yIHBvd2VyIGNvbnRyb2wgKi8KIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDMsIDB4MjApOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMSwgMHgwKTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDAsIDB4MSk7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDEpOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMSwgMHhmKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDEsIDB4MDApOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMCwgMHgwMSk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDAxKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MTEsIDB4MGYpOwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC03NzEsNyArNzUzLDYgQEAKIAkJCQlkYXRhLCBsZW4pOwogCQlicmVhazsKIAljYXNlIDB4ZmY6CQkJLyogZHJvcCAqLwotLyoJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkYXRhICs9IDE7CkBAIC03ODIsMjQgKzc2Myw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlfX3U4IGJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKLQotfQotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmJyaWdodG5lc3MgPSAyNTUKLQkJLSAoKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwMSwgMSkgPj4gMikKLQkJCSsgKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwLCAxKSA8PCA2KSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC04MTQsNyArNzc3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODYzLDggKzgyNSwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDk2ZTI1MTIuLjNhMGM4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0xOTMsMjQgKzE5Myw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNwY2E1MDZfUmVhZEkyYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHJlZykKLXsKLQlpbnQgcmV0cnkgPSA2MDsKLQotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCBTQUE3MTEzX0kyQ19CQVNFX1dSSVRFLCAweDAwMDQpOwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCByZWcsIDB4MDAwMSk7Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIDB4MDEsIDB4MDAwMik7Ci0Jd2hpbGUgKC0tcmV0cnkpIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDA3LCAweDAwMDMsIDIpOwotCQlpZiAoKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSB8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgPT0gMHgwMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0cnkgPT0gMCkKLQkJcmV0dXJuIC0xOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwNywgMHgwMDAwLCAxKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCiBzdGF0aWMgdm9pZCBzcGNhNTA2X1NldE5vcm1lSW5wdXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJCSBfX3UxNiBub3JtZSwKIAkJCQkgX191MTYgY2hhbm5lbCkKQEAgLTMwMyw3ICsyODUsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKQEAgLTU5NiwxMyArNTc3LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19icmlnaHQpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjEyLDEzICs1ODYsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfY29udHJhc3QpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTYyOCwxMyArNTk1LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmNvbG9ycyA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfc2F0dXJhdGlvbik7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjQ0LDEzICs2MDQsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+aHVlID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19odWUpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjY1LDcgKzYxOCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4NCw3ICs2MzYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMyw3ICs2NTQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQpAQCAtNzIyLDcgKzY3Miw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0aHVlKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5odWU7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsOCArNzIxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IGJlNWQ3NDAuLmFkYWNmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC0xMDEsOCArMTAxLDcgQEAKICAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCiAgKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bM10gPQotI2RlZmluZSBJR04oeCkJCQkvKiBub3RoaW5nICovCitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bMl0gPQogewogCS8qICBsaW5lICAgVVJCICAgICAgdmFsdWUsIGluZGV4ICovCiAJLyogNDQyNzQgIDE4MDQgKi8gezB4MDAwMCwgMHg4NzBifSwKQEAgLTU4OSwxMSArNTg4LDEwIEBACiAJe30KIH07CiAKLQogLyoKICAqIEluaXRpYWxpemF0aW9uIGRhdGEgZm9yIEludGVsIEVhc3lQQyBDYW1lcmEgQ1MxMTAKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhjczExMF9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOGNzMTEwX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDAsIDB4ODcwYn0sIC8qIFJlc2V0IENUTDMgKi8KIAl7MHgwMDAzLCAweDgxMTF9LCAvKiBTb2Z0IFJlc2V0IGNvbXByZXNzaW9uLCBtZW1vcnksIFRHICYgQ0RTUCAqLwogCXsweDAwMDAsIDB4ODExMX0sIC8qIE5vcm1hbCBvcGVyYXRpb24gb24gcmVzZXQgKi8KQEAgLTY3Nyw3ICs2NzUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVsyXSA9IHsKIC8qIFRoaXMgbGluZSBzZWVtcyB0byBzZXR1cCB0aGUgZnJhbWUvY2FudmFzICovCiAJLyozNjggICovIHsweDAwMGYsIDB4ODQwMn0sCiAKQEAgLTc2MCw3ICs3NTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbTJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YVtdWzJdID0gewogLyogMzUgKi8gezB4MDAyMCwgMHg4MTEyfSwKIAogLyogMzYgKi8gezB4MDAwZiwgMHg4NDAyfSwKQEAgLTExMDcsNyArMTEwNSw3IEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gZGF0YSBmb3IgQ3JlYXRpdmUgV2ViY2FtIFZpc3RhCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHUxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHJlZ2lzdGVyICovCiAJezB4MDAwMCwgMHg4NzBifSwJLyogUmVzZXQgQ1RMMyAqLwogCXsweDAwMjAsIDB4ODExMn0sCS8qIFZpZGVvIERyb3AgcGFja2V0IGVuYWJsZSAqLwpAQCAtMTMwOSwxOCArMTMwNywxOCBAQAogCiAJezB4MDA1MCwgMHg4NzAzfSwKIAl7MHgwMDAyLCAweDg3MDR9LAkvKiBFeHRlcm5hbCBpbnB1dCBDS0l4MSAqLwotCXsweDAwMDEsIDB4ODcwQ30sCS8qIFNlbGVjdCBDS094MiBvdXRwdXQgKi8KLQl7MHgwMDlBLCAweDg2MDB9LAkvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCisJezB4MDAwMSwgMHg4NzBjfSwJLyogU2VsZWN0IENLT3gyIG91dHB1dCAqLworCXsweDAwOWEsIDB4ODYwMH0sCS8qIExpbmUgbWVtb3J5IFJlYWQgQ291bnRlciAoTCkgKi8KIAl7MHgwMDAxLCAweDg2MDZ9LCAgLyogMSBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEgpIFJlc3VsdDogKGQpNDEwICovCiAJezB4MDAyMywgMHg4NjAxfSwKIAl7MHgwMDEwLCAweDg2MDJ9LAotCXsweDAwMEEsIDB4ODYwM30sCisJezB4MDAwYSwgMHg4NjAzfSwKIAl7MHgwMDlBLCAweDg2MDB9LAotCXsweDAwMDEsIDB4ODY1Qn0sCS8qIDEgSG9yaXpvbnRhbCBPZmZzZXQgZm9yIFZhbGlkIFBpeGVsKEwpICovCi0JezB4MDAwMywgMHg4NjVDfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAoTCkgKi8KLQl7MHgwMDU4LCAweDg2NUR9LAkvKiBIb3Jpem9udGFsIHZhbGlkIHBpeGVscyB3aW5kb3cgKEwpICovCi0JezB4MDA0OCwgMHg4NjVFfSwJLyogVmVydGljYWwgdmFsaWQgbGluZXMgd2luZG93IChMKSAqLwotCXsweDAwMDAsIDB4ODY1Rn0sCisJezB4MDAwMSwgMHg4NjVifSwJLyogMSBIb3Jpem9udGFsIE9mZnNldCBmb3IgVmFsaWQgUGl4ZWwoTCkgKi8KKwl7MHgwMDAzLCAweDg2NWN9LAkvKiBWZXJ0aWNhbCBvZmZzZXQgZm9yIHZhbGlkIGxpbmVzIChMKSAqLworCXsweDAwNTgsIDB4ODY1ZH0sCS8qIEhvcml6b250YWwgdmFsaWQgcGl4ZWxzIHdpbmRvdyAoTCkgKi8KKwl7MHgwMDQ4LCAweDg2NWV9LAkvKiBWZXJ0aWNhbCB2YWxpZCBsaW5lcyB3aW5kb3cgKEwpICovCisJezB4MDAwMCwgMHg4NjVmfSwKIAogCXsweDAwMDYsIDB4ODY2MH0sCiAJCSAgICAvKiBFbmFibGUgbmliYmxlIGRhdGEgaW5wdXQsIHNlbGVjdCBuaWJibGUgaW5wdXQgb3JkZXIgKi8KQEAgLTEzMjgsNjMgKzEzMjYsNjMgQEAKIAl7MHgwMDEzLCAweDg2MDh9LAkvKiBBMTEgQ29lZmljaWVudHMgZm9yIGNvbG9yIGNvcnJlY3Rpb24gKi8KIAl7MHgwMDI4LCAweDg2MDl9LAogCQkgICAgLyogTm90ZTogdGhlc2UgdmFsdWVzIGFyZSBjb25maXJtZWQgYXQgdGhlIGVuZCBvZiBhcnJheSAqLwotCXsweDAwMDUsIDB4ODYwQX0sCS8qIC4uLiAqLwotCXsweDAwMjUsIDB4ODYwQn0sCi0JezB4MDBFMSwgMHg4NjBDfSwKLQl7MHgwMEZBLCAweDg2MER9LAotCXsweDAwRjQsIDB4ODYwRX0sCi0JezB4MDBFOCwgMHg4NjBGfSwKKwl7MHgwMDA1LCAweDg2MGF9LAkvKiAuLi4gKi8KKwl7MHgwMDI1LCAweDg2MGJ9LAorCXsweDAwZTEsIDB4ODYwY30sCisJezB4MDBmYSwgMHg4NjBEfSwKKwl7MHgwMGY0LCAweDg2MGV9LAorCXsweDAwZTgsIDB4ODYwZn0sCiAJezB4MDAyNSwgMHg4NjEwfSwJLyogQTMzIENvZWYuICovCi0JezB4MDBGQywgMHg4NjExfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IFIgKi8KKwl7MHgwMGZjLCAweDg2MTF9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogUiAqLwogCXsweDAwMDEsIDB4ODYxMn0sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBHciAqLwotCXsweDAwRkUsIDB4ODYxM30sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBCICovCisJezB4MDBmZSwgMHg4NjEzfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEIgKi8KIAl7MHgwMDAwLCAweDg2MTR9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogR2IgKi8KIAogCXsweDAwNjQsIDB4ODY1MX0sCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTJ9LAkvKiBHciBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwogCXsweDAwNjYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwotCXsweDAwMDEsIDB4ODYzRn0sCS8qIEVuYWJsZSBmaXhlZCBnYW1tYSBjb3JyZWN0aW9uICovCisJezB4MDAwMSwgMHg4NjNmfSwJLyogRW5hYmxlIGZpeGVkIGdhbW1hIGNvcnJlY3Rpb24gKi8KIAotCXsweDAwQTEsIDB4ODY1Nn0sCS8qIFNpemUgLSBXaW5kb3cxOiAyNTZ4MjU2LCBXaW5kb3cyOiAxMjh4MTI4ICovCisJezB4MDBhMSwgMHg4NjU2fSwJLyogU2l6ZSAtIFdpbmRvdzE6IDI1NngyNTYsIFdpbmRvdzI6IDEyOHgxMjggKi8KIAkvKiBVViBkaXZpc2lvbjogVVYgbm8gY2hhbmdlLCBFbmFibGUgTmV3IGVkZ2UgZW5oYW5jZW1lbnQgKi8KIAl7MHgwMDE4LCAweDg2NTd9LAkvKiBFZGdlIGdhaW4gaGlnaCB0aHJlc2hvbGQgKi8KIAl7MHgwMDIwLCAweDg2NTh9LAkvKiBFZGdlIGdhaW4gbG93IHRocmVzaG9sZCAqLwogCXsweDAwMEEsIDB4ODY1OX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGhpZ2ggdGhyZXNob2xkICovCi0JezB4MDAwNSwgMHg4NjVBfSwJLyogRWRnZSBiYW5kd2lkdGggbG93IHRocmVzaG9sZCAqLworCXsweDAwMDUsIDB4ODY1YX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGxvdyB0aHJlc2hvbGQgKi8KIAl7MHgwMDY0LCAweDg2MDd9LAkvKiBVViBmaWx0ZXIgZW5hYmxlICovCiAKIAl7MHgwMDE2LCAweDg2NjB9LAotCXsweDAwMDAsIDB4ODZCMH0sCS8qIEJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIGFkZHJlc3MgKi8KLQl7MHgwMERDLCAweDg2QjF9LAkvKiBYIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwMDksIDB4ODZCM30sCS8qIFkgY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLwotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMCwgMHg4NmIwfSwJLyogQmFkIHBpeGVscyBjb21wZW5zYXRpb24gYWRkcmVzcyAqLworCXsweDAwZGMsIDB4ODZiMX0sCS8qIFggY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLworCXsweDAwMDAsIDB4ODZiMn0sCisJezB4MDAwOSwgMHg4NmIzfSwJLyogWSBjb29yZCBmb3IgYmFkIHBpeGVscyBjb21wZW5zYXRpb24gKEwpICovCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDEsIDB4ODZCMH0sCi0JezB4MDBGNSwgMHg4NkIxfSwKLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwQzYsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKKwl7MHgwMDAxLCAweDg2YjB9LAorCXsweDAwZjUsIDB4ODZiMX0sCisJezB4MDAwMCwgMHg4NmIyfSwKKwl7MHgwMGM2LCAweDg2YjN9LAorCXsweDAwMDAsIDB4ODZiNH0sCiAKLQl7MHgwMDAyLCAweDg2QjB9LAotCXsweDAwMUMsIDB4ODZCMX0sCi0JezB4MDAwMSwgMHg4NkIyfSwKLQl7MHgwMEQ3LCAweDg2QjN9LAotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMiwgMHg4NmIwfSwKKwl7MHgwMDFjLCAweDg2YjF9LAorCXsweDAwMDEsIDB4ODZiMn0sCisJezB4MDBkNywgMHg4NmIzfSwKKwl7MHgwMDAwLCAweDg2YjR9LAogCi0JezB4MDAwMywgMHg4NkIwfSwKLQl7MHgwMDFDLCAweDg2QjF9LAotCXsweDAwMDEsIDB4ODZCMn0sCi0JezB4MDBEOCwgMHg4NkIzfSwKLQl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMDMsIDB4ODZiMH0sCisJezB4MDAxYywgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDQsIDB4ODZCMH0sCi0JezB4MDAxRCwgMHg4NkIxfSwKLQl7MHgwMDAxLCAweDg2QjJ9LAotCXsweDAwRDgsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKLQl7MHgwMDFFLCAweDg2NjB9LAorCXsweDAwMDQsIDB4ODZiMH0sCisJezB4MDAxZCwgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKKwl7MHgwMDFlLCAweDg2NjB9LAogCiAJLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjA4IH0gLT4KIAkJMDAwMDogMTMgICovCkBAIC0xNDQ5LDcgKzE0NDcsNyBAQAogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1MTYgZGF0YVtdWzJdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0LCBpID0gMDsKQEAgLTE0ODcsNyArMTQ4NSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJXaW5kb3cgMSBhdmVyYWdlIGx1bWluYW5jZTogJWQiLCBkYXRhMSk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCkBAIC0xNTkzLDEzICsxNTkwLDYgQEAKIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODY1NCwgYnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDg2NTEpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTYxNCw3ICsxNjA0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw4ICsxNjU1LDExIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggM2M5Mjg4MC4uYzk5YzVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTE0MSwzOCArMTQxLDM4IEBACiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1dJTjFHQkFWRSAxNAogI2RlZmluZSBTUENBNTYxX09GRlNFVF9GUkVRIDE1CiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1ZTWU5DIDE2Ci0jZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0RBVEEgMQogI2RlZmluZSBTUENBNTYxX0lOREVYX0kyQ19CQVNFIDB4ODgwMAogI2RlZmluZSBTUENBNTYxX1NOQVBCSVQgMHgyMAogI2RlZmluZSBTUENBNTYxX1NOQVBDVFJMIDB4NDAKIAotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGExW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTE2IHJldjcyYV9yZXNldFtdWzJdID0gewogCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KIAl7MHgwMDAxLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCiAJezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ICovCisJe30KK307CitzdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTFbXVsyXSA9IHsKIAl7MHgwMDAzLCAweDg3MDF9LAkvKiBQQ0xLIGNsb2NrIGRlbGF5IGFkanVzdG1lbnQgKi8KIAl7MHgwMDAxLCAweDg3MDN9LAkvKiBIU1lOQyBmcm9tIGNtb3MgaW52ZXJ0ZWQgKi8KIAl7MHgwMDExLCAweDgxMTh9LAkvKiBFbmFibGUgYW5kIGNvbmYgc2Vuc29yICovCiAJezB4MDAwMSwgMHg4MTE4fSwJLyogQ29uZiBzZW5zb3IgKi8KIAl7MHgwMDkyLCAweDg4MDR9LAkvKiBJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZSAqLwogCXsweDAwMTAsIDB4ODgwMn0sCS8qIDB4ODh4eCByZWdpc3RlcnMsIHNvIEkgd29uJ3QgKi8KLQl7MHgwMDBkLCAweDg4MDV9LAkvKiBzZW5zb3IgZGVmYXVsdCBzZXR0aW5nICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0gewotCQkJCS8qIG1zLXdpbiB2YWx1ZXMgKi8KLQl7MHgwMDAxLCAweDAwMTh9LAkvKiAweDAxIDwtIDB4MGQgKi8KLQl7MHgwMDAyLCAweDAwNjV9LAkvKiAweDAyIDwtIDB4MTggKi8KLQl7MHgwMDA0LCAweDAxMjF9LAkvKiAweDA0IDwtIDB4MDE2NSAqLwotCXsweDAwMDUsIDB4MDBhYX0sCS8qIDB4MDUgPC0gMHgyMSAqLwotCXsweDAwMDcsIDB4MDAwNH0sCS8qIDB4MDcgPC0gMHhhYSAqLwotCXsweDAwMjAsIDB4MTUwMn0sCS8qIDB4MjAgPC0gMHgxNTA0ICovCi0JezB4MDAzOSwgMHgwMDEwfSwJLyogMHgzOSA8LSAweDAyICovCi0JezB4MDAzNSwgMHgwMDQ5fSwJLyogMHgzNSA8LSAweDEwICovCi0JezB4MDAwOSwgMHgxMDBifSwJLyogMHgwOSA8LSAweDEwNDkgKi8KLQl7MHgwMDI4LCAweDAwMGZ9LAkvKiAweDI4IDwtIDB4MGIgKi8KLQl7MHgwMDNiLCAweDAwM2N9LAkvKiAweDNiIDwtIDB4MGYgKi8KLQl7MHgwMDNjLCAweDAwMDB9LAkvKiAweDNjIDwtIDB4MDAgKi8KK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0geworCXsweDAwMDEsIDB4MDAwZH0sCisJezB4MDAwMiwgMHgwMDE4fSwKKwl7MHgwMDA0LCAweDAxNjV9LAorCXsweDAwMDUsIDB4MDAyMX0sCisJezB4MDAwNywgMHgwMGFhfSwKKwl7MHgwMDIwLCAweDE1MDR9LAorCXsweDAwMzksIDB4MDAwMn0sCisJezB4MDAzNSwgMHgwMDEwfSwKKwl7MHgwMDA5LCAweDEwNDl9LAorCXsweDAwMjgsIDB4MDAwYn0sCisJezB4MDAzYiwgMHgwMDBmfSwKKwl7MHgwMDNjLCAweDAwMDB9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEyW11bMl0gPSB7CkBAIC0xOTAsMTUgKzE5MCwxMCBAQAogCXsweDAwMDIsIDB4ODIwMX0sCS8qIE91dHB1dCBhZGRyZXNzIGZvciByL3cgc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHZhbGlkIGJpdCBmb3Igc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDEsIDB4ODIwMH0sCS8qIE9wck1vZGUgdG8gYmUgZXhlY3V0ZWQgYnkgaGFyZHdhcmUgKi8KLQl7MHgwMDA3LCAweDgyMDF9LAkvKiBPdXRwdXQgYWRkcmVzcyBmb3Igci93IHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDA4LCAweDgyMDB9LAkvKiBDbGVhciB2YWxpZCBiaXQgZm9yIHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDAxLCAweDgyMDB9LAkvKiBPcHJNb2RlIHRvIGJlIGV4ZWN1dGVkIGJ5IGhhcmR3YXJlICovCi0JezB4MDAxMCwgMHg4NjYwfSwJLyogQ29tcGVuc2F0aW9uIG1lbW9yeSBzdHVmZiAqLwotCXsweDAwMTgsIDB4ODY2MH0sCS8qIENvbXBlbnNhdGlvbiBtZW1vcnkgc3R1ZmYgKi8KLQotCXsweDAwMDQsIDB4ODYxMX0sCS8qIFIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNCwgMHg4NjEyfSwJLyogR3Igb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNywgMHg4NjEzfSwJLyogQiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKy8qIGZyb20gbXMtd2luICovCisJezB4MDAwMCwgMHg4NjExfSwJLyogUiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMGZkLCAweDg2MTJ9LAkvKiBHciBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDAzLCAweDg2MTN9LAkvKiBCIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwMDAsIDB4ODYxNH0sCS8qIEdiIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogLyogZnJvbSBtcy13aW4gKi8KIAl7MHgwMDM1LCAweDg2NTF9LAkvKiBSIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KQEAgLTIwNiw4ICsyMDEsOCBAQAogCXsweDAwNWYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwNDAsIDB4ODY1NH0sCS8qIEdiIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDAyLCAweDg1MDJ9LAkvKiBNYXhpbXVtIGF2ZXJhZ2UgYml0IHJhdGUgc3R1ZmYgKi8KLQogCXsweDAwMTEsIDB4ODgwMn0sCisKIAl7MHgwMDg3LCAweDg3MDB9LAkvKiBTZXQgbWFzdGVyIGNsb2NrICg5Nk1oej8/Pz8pICovCiAJezB4MDA4MSwgMHg4NzAyfSwJLyogTWFzdGVyIGNsb2NrIG91dHB1dCBlbmFibGUgKi8KIApAQCAtMjE4LDEwNCArMjEzLDE1IEBACiAJezB4MDAwMywgMHg4NjVjfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X3NlbnNvcjJbXVsyXSA9IHsKLQkJCQkvKiBtcy13aW4gdmFsdWVzICovCi0JezB4MDAwMywgMHgwMTIxfSwJLyogMHgwMyA8LSAweDAxIDB4MjEgLy8yODkgKi8KLQl7MHgwMDA0LCAweDAxNjV9LAkvKiAweDA0IDwtIDB4MDEgMHg2NSAvLzM1NyAqLwotCXsweDAwMDUsIDB4MDAyZn0sCS8qIDB4MDUgPC0gMHgyZiAqLwotCXsweDAwMDYsIDB4MDAwMH0sCS8qIDB4MDYgPC0gMCAqLwotCXsweDAwMGEsIDB4MDAwMn0sCS8qIDB4MGEgPC0gMiAqLwotCXsweDAwMDksIDB4MTA2MX0sCS8qIDB4MDkgPC0gMHgxMDYxICovCi0JezB4MDAzNSwgMHgwMDE0fSwJLyogMHgzNSA8LSAweDE0ICovCi0Je30KLX07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTNbXVsyXSA9IHsKLQl7MHgwMDMwLCAweDgxMTJ9LAkvKiBJU08gYW5kIGRyb3AgcGFja2V0IGVuYWJsZSAqLwotLypmaXhtZTogc2hvdWxkIHN0b3AgaGVyZSovCi0JezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ID8/Pz8gKi8KLQl7MHgwMDA5LCAweDgxMTh9LAkvKiBFbmFibGUgc2Vuc29yIGFuZCBzZXQgc3RhbmRieSAqLwotCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KLQl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCi0JezB4MDAwMSwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwotCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8gKi8KLQl7MHgwMDAzLCAweDg3MDF9LAotCXsweDAwMDEsIDB4ODcwM30sCi0JezB4MDAxMSwgMHg4MTE4fSwKLQl7MHgwMDAxLCAweDgxMTh9LAotCS8qKioqKioqKioqKioqKiovCi0JezB4MDA5MiwgMHg4ODA0fSwKLQl7MHgwMDEwLCAweDg4MDJ9LAotCXsweDAwMGQsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMTgsIDB4ODgwNX0sCi0JezB4MDAwMiwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwNjUsIDB4ODgwNX0sCi0JezB4MDAwNCwgMHg4ODAxfSwKLQl7MHgwMDAxLCAweDg4MDB9LAotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwNSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwYWEsIDB4ODgwNX0sCi0JezB4MDAwNywgMHg4ODAxfSwJLyogbW9kZSAweGFhICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDV9LAotCXsweDAwMjAsIDB4ODgwMX0sCi0JezB4MDAxNSwgMHg4ODAwfSwJLyogbW9kZSAweDA0MTUgKi8KLQl7MHgwMDAyLCAweDg4MDV9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDEwLCAweDg4MDV9LAotCXsweDAwMzUsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDQ5LCAweDg4MDV9LAotCXsweDAwMDksIDB4ODgwMX0sCi0JezB4MDAxMCwgMHg4ODAwfSwKLQl7MHgwMDBiLCAweDg4MDV9LAotCXsweDAwMjgsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDBmLCAweDg4MDV9LAotCXsweDAwM2IsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwM2MsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAyLCAweDg1MDJ9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCi0JezB4MDA4NywgMHg4NzAwfSwJLyogb3ZlcndyaXRlIGJ5IHN0YXJ0ICovCi0JezB4MDA4MSwgMHg4NzAyfSwKLQl7MHgwMDAwLCAweDg1MDB9LAotLyoJezB4MDAxMCwgMHg4NTAwfSwgIC0tIFByZXZpb3VzIGxpbmUgd2FzIHRoaXMgKi8KLQl7MHgwMDAyLCAweDg2NWJ9LAotCXsweDAwMDMsIDB4ODY1Y30sCi0JLyoqKioqKioqKioqKioqKi8KLQl7MHgwMDAzLCAweDg4MDF9LAkvKiAweDEyMS0+IDI4OSAqLwotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDF9LAkvKiAweDE2NSAtPiAzNTcgKi8KLQl7MHgwMDY1LCAweDg4MDV9LAotCXsweDAwMDEsIDB4ODgwMH0sCi0JezB4MDAwNSwgMHg4ODAxfSwJLyogMHgyZiAvL2JsYW5raW5nIGNvbnRyb2wgY29sb25uZSAqLwotCXsweDAwMmYsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA2LCAweDg4MDF9LAkvKiAweDAwIC8vYmxhbmtpbmcgbW9kZSByb3cgKi8KLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwYSwgMHg4ODAxfSwJLyogMHgwMSAvLzB4MDIgKi8KLQl7MHgwMDAxLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwOSwgMHg4ODAxfSwJLyogMHgxMDYxIC0gc2V0ZXhwb3N1cmUgdGltZXMgJiYgcGl4ZWwgY2xvY2sKK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMltdWzJdID0geworCXsweDAwMDMsIDB4MDEyMX0sCisJezB4MDAwNCwgMHgwMTY1fSwKKwl7MHgwMDA1LCAweDAwMmZ9LAkvKiBibGFua2luZyBjb250cm9sIGNvbHVtbiAqLworCXsweDAwMDYsIDB4MDAwMH0sCS8qIGJsYW5raW5nIG1vZGUgcm93Ki8KKwl7MHgwMDBhLCAweDAwMDJ9LAorCXsweDAwMDksIDB4MTA2MX0sCS8qIHNldGV4cG9zdXJlIHRpbWVzICYmIHBpeGVsIGNsb2NrCiAJCQkJICogMDAwMSAwIHwgMDAwIDAxMTAgMDAwMSAqLwotCXsweDAwNjEsIDB4ODgwNX0sCS8qIDYxIDMxICovCi0JezB4MDAwOCwgMHg4ODAwfSwJLyogMDggKi8KLQl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDE0IC0gc2V0IGdhaW4gZ2VuZXJhbCAqLwotCXsweDAwMWYsIDB4ODgwNX0sCS8qIDB4MTQgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGUsIDB4ODExMn0sCS8qIHdoaXRlIGJhbGFuY2UgLSB3YXMgMzAgKi8KKwl7MHgwMDM1LCAweDAwMTR9LAogCXt9CiB9OwogCkBAIC00NjAsNiArMzY2LDcgQEAKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDMsIDEpOwogCQlpZiAoIWdzcGNhX2Rldi0+dXNiX2J1ZlswXSkKIAkJCXJldHVybjsKKwkJbXNsZWVwKDEwKTsKIAl9IHdoaWxlICgtLXJldHJ5KTsKIH0KIApAQCAtNDc5LDYgKzM4Niw3IEBACiAJCQlyZWdfcihnc3BjYV9kZXYsIDB4ODgwNSwgMSk7CiAJCQlyZXR1cm4gKChpbnQpIHZhbHVlIDw8IDgpIHwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogCQl9CisJCW1zbGVlcCgxMCk7CiAJfSB3aGlsZSAoLS1yZXRyeSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtNTQxLDcgKzQ0OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAlnc3BjYV9kZXYtPm5iYWx0ID0gNyArIDE7CS8qIGNob29zZSBhbHRlcm5hdGUgNyBmaXJzdCAqLwogCiAJc2QtPmNoaXBfcmV2aXNpb24gPSBpZC0+ZHJpdmVyX2luZm87CkBAIC01NzIsMTEgKzQ3OSwxMyBAQAogc3RhdGljIGludCBzZF9pbml0XzcyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJUERFQlVHKERfU1RSRUFNLCAiQ2hpcCByZXZpc2lvbjogMDcyYSIpOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9yZXNldCk7CisJbXNsZWVwKDIwMCk7CiAJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfZGF0YTEpOwogCXdyaXRlX3NlbnNvcl83MmEoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9zZW5zb3IxKTsKIAl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMik7CiAJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjIpOwotCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGEzKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgzMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMSwxMSArNjQwLDE4IEBACiAJaW50IENsY2s7CiAJaW50IG1vZGU7CiAKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfcmVzZXQpOworCW1zbGVlcCgyMDApOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGExKTsKKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChtb2RlKSB7CiAJZGVmYXVsdDoKLS8qCWNhc2UgMDoKLQljYXNlIDE6ICovCisJY2FzZSAwOgorCQlDbGNrID0gMHgyNzsJCS8qIG1zLXdpbiAweDg3ICovCisJCWJyZWFrOworCWNhc2UgMToKIAkJQ2xjayA9IDB4MjU7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTc0NSwxMyArNjYxLDE0IEBACiAJCUNsY2sgPSAweDIxOwogCQlicmVhazsKIAl9Ci0JcmVnX3dfdmFsKGRldiwgMHg4NTAwLCBtb2RlKTsJLyogbW9kZSAqLwogCXJlZ193X3ZhbChkZXYsIDB4ODcwMCwgQ2xjayk7CS8qIDB4MjcgY2xvY2sgKi8KLQlyZWdfd192YWwoZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKKwlyZWdfd192YWwoZGV2LCAweDg3MDIsIDB4ODEpOworCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMik7CiAJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIC8qCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsJICogZml4bWU6IGJhZCB2YWx1ZXMgKi8KLQlzZXR3aGl0ZShnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2NywxMiArNzg0LDExIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Jc3dpdGNoIChkYXRhWzBdKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCisJbGVuLS07CisJc3dpdGNoICgqZGF0YSsrKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCiAJY2FzZSAwOgkJCQkJLyogc3RhcnQgb2YgZnJhbWUgKi8KIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCWRhdGEsIDApOwotCQlkYXRhICs9IFNQQ0E1NjFfT0ZGU0VUX0RBVEE7Ci0JCWxlbiAtPSBTUENBNTYxX09GRlNFVF9EQVRBOwogCQlpZiAoZGF0YVsxXSAmIDB4MTApIHsKIAkJCS8qIGNvbXByZXNzZWQgYmF5ZXIgKi8KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKQEAgLTg5Myw4ICs4MDksNiBAQAogCWNhc2UgMHhmZjoJCQkvKiBkcm9wIChlbXB0eSBtcGFja2V0cykgKi8KIAkJcmV0dXJuOwogCX0KLQlkYXRhKys7Ci0JbGVuLS07CiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIApAQCAtMTE5Nyw4ICsxMTExLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlM2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIFNROTA1IHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBZGFtIEJha2VyIGFuZCBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogSGlzdG9yeSBhbmQgQWNrbm93bGVkZ21lbnRzCisgKgorICogVGhlIG9yaWdpbmFsIExpbnV4IGRyaXZlciBmb3IgU1E5MDUgYmFzZWQgY2FtZXJhcyB3YXMgd3JpdHRlbiBieQorICogTWFyY2VsbCBMZW5neWVsIGFuZCBmdXJ0ZXIgZGV2ZWxvcGVkIGJ5IG1hbnkgb3RoZXIgY29udHJpYnV0ZXJzCisgKiBhbmQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zcWNhbS8KKyAqCisgKiBUaGlzIGRyaXZlciB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgd29yayBkb25lIGZvcgorICogdGhhdCBkcml2ZXIgYW5kIGZvciBsaWJncGhvdG8yIGJ1dCBzaGFyZXMgbm8gY29kZSB3aXRoIHRoZW0uCisgKgorICogVGhpcyBkcml2ZXIgaGFzIHVzZWQgYXMgYSBiYXNlIHRoZSBmaW5lcGl4IGRyaXZlciBhbmQgb3RoZXIgZ3NwY2EKKyAqIGJhc2VkIGRyaXZlcnMgYW5kIG1heSBzdGlsbCBjb250YWluIGNvZGUgZnJhZ21lbnRzIHRha2VuIGZyb20gdGhvc2UKKyAqIGRyaXZlcnMuCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3E5MDUiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJBZGFtIEJha2VyIDxsaW51eEBiYWtlci1uZXQub3JnLnVrPiwgIgorCQkiVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUTkwNSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNV9DTURfVElNRU9VVCA1MDAKKyNkZWZpbmUgU1E5MDVfREFUQV9USU1FT1VUIDEwMDAKKworLyogTWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIHVzZS4gKi8KKyNkZWZpbmUgU1E5MDVfTUFYX1RSQU5TRkVSIDB4ODAwMAorI2RlZmluZSBGUkFNRV9IRUFERVJfTEVOIDY0CisKKy8qIFRoZSBrbm93biBtb2Rlcywgb3IgcmVnaXN0ZXJzLiBUaGVzZSBnbyBpbiB0aGUgInZhbHVlIiBzbG90LiAqLworCisvKiAwMCBpcyAibm9uZSIgb2J2aW91c2x5ICovCisKKyNkZWZpbmUgU1E5MDVfQlVMS19SRUFECTB4MDMJLyogcHJlY2VkZXMgYW55IGJ1bGsgcmVhZCAqLworI2RlZmluZSBTUTkwNV9DT01NQU5ECTB4MDYJLyogcHJlY2VkZXMgdGhlIGNvbW1hbmQgY29kZXMgYmVsb3cgKi8KKyNkZWZpbmUgU1E5MDVfUElORwkweDA3CS8qIHdoZW4gcmVhZGluZyBhbiAiaWRsaW5nIiBjb21tYW5kICovCisjZGVmaW5lIFNROTA1X1JFQURfRE9ORSAweGMwICAgIC8qIGFjayBidWxrIHJlYWQgY29tcGxldGVkICovCisKKy8qIEFueSBub24temVybyB2YWx1ZSBpbiB0aGUgYm90dG9tIDIgYml0cyBvZiB0aGUgMm5kIGJ5dGUgb2YKKyAqIHRoZSBJRCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSBjYW1lcmEgY2FuIGRvIDY0MCo0ODAuIElmIHRoZQorICogTFNCIG9mIHRoYXQgYnl0ZSBpcyBzZXQgdGhlIGltYWdlIGlzIGp1c3QgdXBzaWRlIGRvd24sIG90aGVyd2lzZQorICogaXQgaXMgcm90YXRlZCAxODAgZGVncmVlcy4gKi8KKyNkZWZpbmUgU1E5MDVfSElSRVNfTUFTSwkweDAwMDAwMzAwCisjZGVmaW5lIFNROTA1X09SSUVOVEFUSU9OX01BU0sJMHgwMDAwMDEwMAorCisvKiBTb21lIGNvbW1hbmQgY29kZXMuIFRoZXNlIGdvIGluIHRoZSAiaW5kZXgiIHNsb3QuICovCisKKyNkZWZpbmUgU1E5MDVfSUQgICAgICAweGYwCS8qIGFza3MgZm9yIG1vZGVsIHN0cmluZyAqLworI2RlZmluZSBTUTkwNV9DT05GSUcgIDB4MjAJLyogZ2V0cyBwaG90byBhbGxvYy4gdGFibGUsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfREFUQSAgICAweDMwCS8qIGFjY2Vzc2VzIHBob3RvIGRhdGEsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfQ0xFQVIgICAweGEwCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVfQ0FQVFVSRV9MT1cgIDB4NjAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLworI2RlZmluZSBTUTkwNV9DQVBUVVJFX01FRCAgMHg2MQkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1X0NBUFRVUkVfSElHSCAweDYyCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDY0MHg0ODAgKHNvbWUgY2FtcyBvbmx5KSAqLworLyogbm90ZSB0aGF0IHRoZSBjYXB0dXJlIGNvbW1hbmQgYWxzbyBjb250cm9scyB0aGUgb3V0cHV0IGRpbWVuc2lvbnMgKi8KKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCS8qCisJICogRHJpdmVyIHN0dWZmCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNxOTA1X21vZGVbXSA9IHsKKwl7IDE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCisJeyAzMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorCXsgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfQorfTsKKworLyoKKyAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuCisgKi8KK3N0YXRpYyBpbnQgc3E5MDVfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQ09NTUFORCwgaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLCAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1BJTkcsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAyICglZCkiLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBY2tub3dsZWRnZSB0aGUgZW5kIG9mIGEgZnJhbWUgLSBzZWUgd2FybmluZyBvbiBzcTkwNV9jb21tYW5kLgorICovCitzdGF0aWMgaW50IHNxOTA1X2Fja19mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9ICdcMCc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1JFQURfRE9ORSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJICAgICAgU1E5MDVfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICByZXF1ZXN0IGFuZCByZWFkIGEgYmxvY2sgb2YgZGF0YSAtIHNlZSB3YXJuaW5nIG9uIHNxOTA1X2NvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQKK3NxOTA1X3JlYWRfZGF0YShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCWludCBhY3RfbGVuOworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQlVMS19SRUFELCBzaXplLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkgICAgICAxLCBTUTkwNV9DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJICAgZGF0YSwgc2l6ZSwgJmFjdF9sZW4sIFNROTA1X0RBVEFfVElNRU9VVCk7CisKKwkvKiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAsIG90aGVyd2lzZSAgbmVnYXRpdmUgKi8KKwlpZiAocmV0IDwgMCB8fCBhY3RfbGVuICE9IHNpemUpIHsKKwkJUERFQlVHKERfRVJSLCAiYnVsayByZWFkIGZhaWwgKCVkKSBsZW4gJWQvJWQiLAorCQkJcmV0LCBhY3RfbGVuLCBzaXplKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHdlIHRha2UgdGhlIGdzcGNhCisgKiB1c2JfbG9jayB3aGVuIHBlcmZvcm1pbmcgVVNCIG9wZXJhdGlvbnMuIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQKKyAqIHRvIHByb3RlY3QgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0IGdzcGNhIG1ha2VzIGR1cmluZworICogc3RyZWFtX29mZiBhcyB0aGUgY2FtZXJhIGRvZXNuJ3QgcHJvdmlkZSBhbnkgY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkKKyAqIHRvIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgc3E5MDVfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGhlYWRlcl9yZWFkOyAvKiB0cnVlIGlmIHdlIGhhdmUgYWxyZWFkeSByZWFkIHRoZSBmcmFtZSBoZWFkZXIuICovCisJaW50IGRpc2NhcmRpbmc7IC8qIHRydWUgaWYgd2UgZmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgZnJhbWUuICovCisJaW50IHBhY2tldF90eXBlOworCWludCBmcmFtZV9zejsKKwlpbnQgcmV0OworCXU4ICpkYXRhOworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1X01BWF9UUkFOU0ZFUiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWlmICghYnVmZmVyKSB7CisJCVBERUJVRyhEX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIFVTQiBidWZmZXIiKTsKKwkJZ290byBxdWl0X3N0cmVhbTsKKwl9CisKKwlmcmFtZV9zeiA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5zaXplaW1hZ2UKKwkJCSsgRlJBTUVfSEVBREVSX0xFTjsKKworCXdoaWxlIChnc3BjYV9kZXYtPnByZXNlbnQgJiYgZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJLyogTmVlZCBhIHNob3J0IGRlbGF5IHRvIGVuc3VyZSBzdHJlYW1pbmcgZmxhZyB3YXMgc2V0IGJ5CisJCSAqIGdzcGNhIGFuZCB0byBtYWtlIHN1cmUgZ3NwY2EgY2FuIGdyYWIgdGhlIG11dGV4LiAqLworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQltc2xlZXAoMSk7CisKKwkJLyogcmVxdWVzdCBzb21lIGRhdGEgYW5kIHRoZW4gcmVhZCBpdCB1bnRpbCB3ZSBoYXZlCisJCSAqIGEgY29tcGxldGUgZnJhbWUuICovCisJCWJ5dGVzX2xlZnQgPSBmcmFtZV9zejsKKwkJaGVhZGVyX3JlYWQgPSAwOworCQlkaXNjYXJkaW5nID0gMDsKKworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1X01BWF9UUkFOU0ZFUiA/CisJCQkJU1E5MDVfTUFYX1RSQU5TRkVSIDogYnl0ZXNfbGVmdDsKKwkJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHNxOTA1X3JlYWRfZGF0YShnc3BjYV9kZXYsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJZGF0YSA9IGJ1ZmZlcjsKKwkJCWlmICghaGVhZGVyX3JlYWQpIHsKKwkJCQlwYWNrZXRfdHlwZSA9IEZJUlNUX1BBQ0tFVDsKKwkJCQkvKiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgZWFjaCBmcmFtZSBhcmUKKwkJCQkgKiBhIGhlYWRlciBmdWxsIG9mIEZGIDAwIGJ5dGVzICovCisJCQkJZGF0YSArPSBGUkFNRV9IRUFERVJfTEVOOworCQkJCWRhdGFfbGVuIC09IEZSQU1FX0hFQURFUl9MRU47CisJCQkJaGVhZGVyX3JlYWQgPSAxOworCQkJfSBlbHNlIGlmIChieXRlc19sZWZ0ID09IDApIHsKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrZXRfdHlwZSA9IElOVEVSX1BBQ0tFVDsKKwkJCX0KKwkJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykgeworCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUsCisJCQkJCQlmcmFtZSwgZGF0YSwgZGF0YV9sZW4pOworCQkJCS8qIElmIGVudGlyZSBmcmFtZSBmaXRzIGluIG9uZSBwYWNrZXQgd2Ugc3RpbGwKKwkJCQkgICBuZWVkIHRvIGFkZCBhIExBU1RfUEFDS0VUICovCisJCQkJaWYgKHBhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCAmJgorCQkJCSAgICBieXRlc19sZWZ0ID09IDApCisJCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQkJCQlMQVNUX1BBQ0tFVCwKKwkJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CisJCQl9IGVsc2UgeworCQkJCWRpc2NhcmRpbmcgPSAxOworCQkJfQorCQl9CisJCS8qIGFja25vd2xlZGdlIHRoZSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQlyZXQgPSBzcTkwNV9hY2tfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCX0KK3F1aXRfc3RyZWFtOgorCS8qIHRoZSB1c2JfbG9jayBpcyBhbHJlYWR5IGFjcXVpcmVkICovCisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0NMRUFSKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUganVzdCBiZWZvcmUgc2RfaW5pdCAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDY0OworCisJSU5JVF9XT1JLKCZkZXYtPndvcmtfc3RydWN0LCBzcTkwNV9kb3N0cmVhbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNV9kb3N0cmVhbSB0byBmaW5pc2ggKi8KKwlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndvcmtfdGhyZWFkKTsKKwlkZXYtPndvcmtfdGhyZWFkID0gTlVMTDsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUzMiBpZGVudDsKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZWFkCisJICogdGhlIG1vZGVsIElEIGFuZCBwcm9jZXNzIHRoYXQgYW5kIHB1dCBpdCBhd2F5LgorCSAqLworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0lEKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzcTkwNV9yZWFkX2RhdGEoZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIHVzYl9idWYgaXMgYWxsb2NhdGVkIHdpdGgga21hbGxvYyBzbyBpcyBhbGlnbmVkLgorCSAqIENhbWVyYSBtb2RlbCBudW1iZXIgaXMgdGhlIHJpZ2h0IHdheSByb3VuZCBpZiB3ZSBhc3N1bWUgdGhpcworCSAqIHJldmVyc2UgZW5naW5lZXJlZCBJRCBpcyBzdXBwb3NlZCB0byBiZSBiaWcgZW5kaWFuLiAqLworCWlkZW50ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilnc3BjYV9kZXYtPnVzYl9idWYpOworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfQ09ORiwgIlNROTA1IGNhbWVyYSBJRCAlMDh4IGRldGVjdGVkIiwgaWRlbnQpOworCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gc3E5MDVfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHNxOTA1X21vZGUpOworCWlmICghKGlkZW50ICYgU1E5MDVfSElSRVNfTUFTSykpCisJCWdzcGNhX2Rldi0+Y2FtLm5tb2Rlcy0tOworCXJldHVybiAwOworfQorCisvKiBTZXQgdXAgZm9yIGdldHRpbmcgZnJhbWVzLiAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJLyogIk9wZW4gdGhlIHNodXR0ZXIiIGFuZCBzZXQgc2l6ZSwgdG8gc3RhcnQgY2FwdHVyZSAqLworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgaGlnaCByZXNvbHV0aW9uIik7CisJCXJldCA9IHNxOTA1X2NvbW1hbmQoJmRldi0+Z3NwY2FfZGV2LCBTUTkwNV9DQVBUVVJFX0hJR0gpOworCQlicmVhazsKKwljYXNlIDE6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBtZWRpdW0gcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9NRUQpOworCQlicmVhazsKKwljYXNlIDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBsb3cgcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9MT1cpOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0IHN0cmVhbWluZyBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxMjApfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2I3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogU1E5MDVDIHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICoKKyAqIFRoaXMgZHJpdmVyIHVzZXMgd29yayBkb25lIGluCisgKiBsaWJncGhvdG8yL2NhbWxpYnMvZGlnaWdyOCwgQ29weXJpZ2h0IChDKSBUaGVvZG9yZSBLaWxnb3JlLgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBhbHNvIHVzZWQgYXMgYSBiYXNlIHRoZSBzcTkwNWMgZHJpdmVyCisgKiBhbmQgbWF5IGNvbnRhaW4gY29kZSBmcmFnbWVudHMgZnJvbSBpdC4KKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzcTkwNWMiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybi5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NROTA1QyBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNUNfQ01EX1RJTUVPVVQgNTAwCisjZGVmaW5lIFNROTA1Q19EQVRBX1RJTUVPVVQgMTAwMAorCisvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiAqLworI2RlZmluZSBTUTkwNUNfTUFYX1RSQU5TRkVSIDB4ODAwMAorCisjZGVmaW5lIEZSQU1FX0hFQURFUl9MRU4gMHg1MAorCisvKiBDb21tYW5kcy4gVGhlc2UgZ28gaW4gdGhlICJ2YWx1ZSIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NMRUFSICAgMHhhMAkJLyogY2xlYXIgZXZlcnl0aGluZyAqLworI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9MT1cgMHhhMDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTUVEIDB4MTQ0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0hJIDB4Mjg0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisKKy8qIEZvciBjYXB0dXJlLCB0aGlzIG11c3QgZ28gaW4gdGhlICJpbmRleCIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSU5ERVggMHgxMTBmCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FwX21vZGU7CisJLyogRHJpdmVyIHN0dWZmICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKKy8qCisgKiBNb3N0IG9mIHRoZXNlIGNhbWVyYXMgd2lsbCBkbyA2NDB4NDgwIGFuZCAzMjB4MjQwLiAxNjB4MTIwIHdvcmtzCisgKiBpbiB0aGVvcnkgYnV0IGdpdmVzIHZlcnkgcG9vciBvdXRwdXQuIFRoZXJlZm9yZSwgbm90IHN1cHBvcnRlZC4KKyAqIFRoZSAweDI3NzA6MHg5MDUwIGNhbWVyYXMgaGF2ZSBtYXggcmVzb2x1dGlvbiBvZiAzMjB4MjQwLgorICovCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzcTkwNWNfbW9kZVtdID0geworCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TUTkwNUMsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKKwl7IDY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU1E5MDVDLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0KK307CisKKy8qIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuICovCitzdGF0aWMgaW50IHNxOTA1Y19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBOVUxMLCAwLAorCQkJICAgICAgU1E5MDVDX0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHRoZSBnc3BjYSB1c2JfbG9jayBpcworICogdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIG9uZSBVU0IgY29udHJvbCBvcGVyYXRpb24gaW5zaWRlIHRoZSB3b3JrcXVldWUsCisgKiB3aGljaCB0ZWxscyB0aGUgY2FtZXJhIHRvIGNsb3NlIHRoZSBzdHJlYW0uIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nCisgKiB3aGljaCBuZWVkcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0CisgKiBnc3BjYSBtYWtlcyBkdXJpbmcgc3RyZWFtX29mZi4gT3RoZXJ3aXNlIHRoZSBjYW1lcmEgZG9lc24ndCBwcm92aWRlIGFueQorICogY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkgdG8gY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBzcTkwNWNfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGFjdF9sZW47CisJaW50IGRpc2NhcmRpbmcgPSAwOyAvKiB0cnVlIGlmIHdlIGZhaWxlZCB0byBnZXQgc3BhY2UgZm9yIGZyYW1lLiAqLworCWludCBwYWNrZXRfdHlwZTsKKwlpbnQgcmV0OworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1Q19NQVhfVFJBTlNGRVIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlQREVCVUcoRF9FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBVU0IgYnVmZmVyIik7CisJCWdvdG8gcXVpdF9zdHJlYW07CisJfQorCisJd2hpbGUgKGdzcGNhX2Rldi0+cHJlc2VudCAmJiBnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdvdG8gcXVpdF9zdHJlYW07CisJCS8qIFJlcXVlc3QgdGhlIGhlYWRlciwgd2hpY2ggdGVsbHMgdGhlIHNpemUgdG8gZG93bmxvYWQgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMHg4MSksCisJCQkJYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOLCAmYWN0X2xlbiwKKwkJCQlTUTkwNUNfREFUQV9USU1FT1VUKTsKKwkJUERFQlVHKERfU1RSRUFNLAorCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGhlYWRlciIsCisJCQlhY3RfbGVuLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IEZSQU1FX0hFQURFUl9MRU4pCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkvKiBzaXplIGlzIHJlYWQgZnJvbSA0IGJ5dGVzIHN0YXJ0aW5nIDB4NDAsIGxpdHRsZSBlbmRpYW4gKi8KKwkJYnl0ZXNfbGVmdCA9IGJ1ZmZlclsweDQwXXwoYnVmZmVyWzB4NDFdPDw4KXwoYnVmZmVyWzB4NDJdPDwxNikKKwkJCQkJfChidWZmZXJbMHg0M108PDI0KTsKKwkJUERFQlVHKERfU1RSRUFNLCAiYnl0ZXNfbGVmdCA9IDB4JXgiLCBieXRlc19sZWZ0KTsKKwkJLyogV2Uga2VlcCB0aGUgaGVhZGVyLiBJdCBoYXMgb3RoZXIgaW5mb3JtYXRpb24sIHRvby4gKi8KKwkJcGFja2V0X3R5cGUgPSBGSVJTVF9QQUNLRVQ7CisJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZSwKKwkJCQlmcmFtZSwgYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJCX0gZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1Q19NQVhfVFJBTlNGRVIgPworCQkJCVNROTA1Q19NQVhfVFJBTlNGRVIgOiBieXRlc19sZWZ0OworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJCWJ1ZmZlciwgZGF0YV9sZW4sICZhY3RfbGVuLAorCQkJCVNROTA1Q19EQVRBX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IGRhdGFfbGVuKQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJaWYgKGJ5dGVzX2xlZnQgPT0gMCkKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJZWxzZQorCQkJCXBhY2tldF90eXBlID0gSU5URVJfUEFDS0VUOworCQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCQkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIHBhY2tldF90eXBlLAorCQkJCQkJZnJhbWUsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl9CisJfQorcXVpdF9zdHJlYW06CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0xFQVIsIDApOworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJa2ZyZWUoYnVmZmVyKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSBqdXN0IGJlZm9yZSBzZF9pbml0ICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1BST0JFLAorCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKKwkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJY2FtLT5jYW1fbW9kZSA9IHNxOTA1Y19tb2RlOworCWNhbS0+bm1vZGVzID0gMjsKKwlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDkwNTApCisJCWNhbS0+bm1vZGVzID0gMTsKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDMyOworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgc3E5MDVjX2Rvc3RyZWFtKTsKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNWNfZG9zdHJlYW0gdG8gZmluaXNoICovCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZXNldCBpdC4gKi8KKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DTEVBUiwgMCk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHVwIGZvciBnZXR0aW5nIGZyYW1lcy4gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCWRldi0+Y2FwX21vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZTsKKwkvKiAiT3BlbiB0aGUgc2h1dHRlciIgYW5kIHNldCBzaXplLCB0byBzdGFydCBjYXB0dXJlICovCisJc3dpdGNoIChnc3BjYV9kZXYtPndpZHRoKSB7CisJY2FzZSA2NDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBoaWdoIHJlc29sdXRpb24iKTsKKwkJZGV2LT5jYXBfbW9kZSsrOworCQlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DQVBUVVJFX0hJLAorCQkJCQkJU1E5MDVDX0NBUFRVUkVfSU5ERVgpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiAzMjAgKi8KKwlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgbWVkaXVtIHJlc29sdXRpb24iKTsKKwkJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0FQVFVSRV9NRUQsCisJCQkJCQlTUTkwNUNfQ0FQVFVSRV9JTkRFWCk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiU3RhcnQgc3RyZWFtaW5nIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFN0YXJ0IHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gdG8gZG8gdGhlIHN0cmVhbWluZyAqLworCWRldi0+d29ya190aHJlYWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShNT0RVTEVfTkFNRSk7CisJcXVldWVfd29yayhkZXYtPndvcmtfdGhyZWFkLCAmZGV2LT53b3JrX3N0cnVjdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGFibGUgb2Ygc3VwcG9ydGVkIFVTQiBkZXZpY2VzICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1Yyl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUwKX0sCisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDYwZGU5YWYuLmYyNWJlMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMzUsMTAgKzM1LDEzIEBACiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKIAl1bnNpZ25lZCBjaGFyIGxpZ2h0ZnJlcTsKLX07CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNjAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODAKIAotLyogZ2xvYmFsIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgc2RfcXVhbnQgPSA3OwkJLyogPD0gNCBLTyAtIDc6IGdvb2QgKGVub3VnaCEpICovCisJdTggKmpwZWdfaGRyOworfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE4MCw3ICsxODMsNyBAQAogCXJlZ193KGdzcGNhX2RldiwgMHg2M2IsIDApOwogCXJlZ193KGdzcGNhX2RldiwgMHg2MzAsIDUpOwogCXJldCA9IHVzYl9idWxrX21zZyhkZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZGV2LCA1KSwKKwkJCXVzYl9yY3ZidWxrcGlwZShkZXYsIDB4MDUpLAogCQkJZ3NwY2FfZGV2LT51c2JfYnVmLAogCQkJNCwJCS8qIGxlbmd0aCAqLwogCQkJJmFsZW4sCkBAIC0yOTQsMTUgKzI5NywxNCBAQAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOwogCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC0zMjYsOCArMzI4LDE1IEBACiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldCwgdmFsdWU7CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJLyogd29yayBvbiBhbHRlcm5hdGUgMSAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCAxKTsKIApAQCAtMzk5LDExICs0MDgsMTkgQEAKIAlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RvcHBlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKIAogCS8qIGEgZnJhbWUgc3RhcnRzIHdpdGg6CkBAIC00MjAsNyArNDM3LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIDQxMSBoZWFkZXIgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsIHNkX3F1YW50LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCS8qIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUgKi8KICNkZWZpbmUgU1RLSERSU1ogMTIKQEAgLTUyMCw2ICs1MzgsMzQgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTUyOSw4ICs1NzUsMTEgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTU2Miw4ICs2MTEsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsNiArNjI2LDMgQEAKIAogbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOwogbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVhbnQsIHNkX3F1YW50LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhxdWFudCwgIlF1YW50aXphdGlvbiBpbmRleCAoMC4uOCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDEzYTAyMWUuLjlkZmYyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtNDI5LDcgKzQyOSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJDb25maWd1cmluZyBjYW1lcmEiKTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IFNUVl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSBzZF9kZXNjOwogCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZC0+ZGVzYzsKIApAQCAtNTAxLDggKzUwMCwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCmluZGV4IDE0MzM1YTkuLmIxNjkwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKQEAgLTMwLDYgKzMwLDY2IEBACiAKICNpbmNsdWRlICJzdHYwNnh4X2hkY3MuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxeDAwX2N0cmxbXSA9IHsKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gaGRjc19nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZiwKKwkJCS5zdGVwCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9nYWluLAorCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGhkY3MxeDAwX21vZGVbXSA9IHsKKwl7CisJCUhEQ1NfMVgwMF9ERUZfV0lEVEgsCisJCUhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJSERDU18xWDAwX0RFRl9XSURUSCAqIEhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gSERDU18xWDAwX0RFRl9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxMDIwX2N0cmxbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBoZGNzMTAyMF9tb2RlW10gPSB7CisJeworCQlIRENTXzEwMjBfREVGX1dJRFRILAorCQlIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCUhEQ1NfMTAyMF9ERUZfV0lEVEggKiBIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IEhEQ1NfMTAyMF9ERUZfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KK307CisKIGVudW0gaGRjc19wb3dlcl9zdGF0ZSB7CiAJSERDU19TVEFURV9TTEVFUCwKIAlIRENTX1NUQVRFX0lETEUsCkBAIC0zNTMsMTAgKzQxMywxMCBAQAogCiAJaW5mbygiSERDUy0xMDAwLzExMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxeDAwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMXgwMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxeDAwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMXgwMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKQEAgLTQxMiwxMCArNDcyLDEwIEBACiAKIAlpbmZvKCJIRENTLTEwMjAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxMDIwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMTAyMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxMDIwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMTAyMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAppbmRleCA5YzcyNzlhLi40MTJmMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCkBAIC0xNTIsNTMgKzE1Miw2IEBACiAJLnN0b3AgPSBoZGNzX3N0b3AsCiAJLmRpc2Nvbm5lY3QgPSBoZGNzX2Rpc2Nvbm5lY3QsCiAJLmR1bXAgPSBoZGNzX2R1bXAsCi0KLQkubmN0cmxzID0gMiwKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZmZmLAotCQkJLnN0ZXAJCT0gMHgxLAotCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IGhkY3NfZ2V0X2V4cG9zdXJlCi0JfSwKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJnYWluIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZiwKLQkJCS5zdGVwCQk9IDB4MSwKLQkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9nYWluLAotCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgotCX0KLQl9LAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xWDAwX0RFRl9XSURUSCwKLQkJSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzFYMDBfREVGX1dJRFRIICogSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzFYMDBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwID0gewpAQCAtMjA3LDI5ICsxNjAsMTEgQEAKIAkuaTJjX2FkZHIgPSAoMHg1NSA8PCAxKSwKIAkuaTJjX2xlbiA9IDEsCiAKLQkubmN0cmxzID0gMCwKLQkuY3RybHMgPSB7fSwKLQogCS5pbml0ID0gaGRjc19pbml0LAogCS5wcm9iZSA9IGhkY3NfcHJvYmVfMTAyMCwKIAkuc3RhcnQgPSBoZGNzX3N0YXJ0LAogCS5zdG9wID0gaGRjc19zdG9wLAogCS5kdW1wID0gaGRjc19kdW1wLAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xMDIwX0RFRl9XSURUSCwKLQkJSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzEwMjBfREVGX1dJRFRIICogSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzEwMjBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogc3RhdGljIGNvbnN0IHUxNiBzdHZfYnJpZGdlX2luaXRbXVsyXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKaW5kZXggZDBhMGY4NS4uMjg1MjIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKQEAgLTQ2LDYgKzQ2LDEzMiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF9wYjAxMDAuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHBiMDEwMF9jdHJsW10gPSB7CisjZGVmaW5lIEdBSU5fSURYIDAKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJHYWluIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9nYWluCisJfSwKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDEKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiUmVkIEJhbGFuY2UiLAorCQkJLm1pbmltdW0JPSAtMjU1LAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfcmVkX2JhbGFuY2UKKwl9LAorI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkJsdWUgQmFsYW5jZSIsCisJCQkubWluaW11bQk9IC0yNTUsCisJCQkubWF4aW11bQk9IDI1NSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwKKyNkZWZpbmUgRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSA1MTEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTIKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2V4cG9zdXJlCisJfSwKKyNkZWZpbmUgQVVUT0dBSU5fSURYIDQKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gYW5kIEV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAxCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2FpbgorCX0sCisjZGVmaW5lIEFVVE9HQUlOX1RBUkdFVF9JRFggNQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAwLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBUYXJnZXQiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4CisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldCwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0CisJfSwKKyNkZWZpbmUgTkFUVVJBTF9JRFggNgorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAxLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJOYXR1cmFsIExpZ2h0IFNvdXJjZSIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMQorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9uYXR1cmFsLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9uYXR1cmFsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGIwMTAwX21vZGVbXSA9IHsKKy8qIGxvdyByZXMgLyBzdWJzYW1wbGUgbW9kZXMgZGlzYWJsZWQgYXMgdGhleSBhcmUgb25seSBoYWxmIHJlcyBob3Jpem9udGFsLAorICAgaGFsdmluZyB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgKi8KKwl7CisJCTMyMCwKKwkJMjQwLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gUEIwMTAwX0NST1BfVE9fVkdBCisJfSwKKwl7CisJCTM1MiwKKwkJMjg4LAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKIHN0YXRpYyBpbnQgcGIwMTAwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTE2IHNlbnNvcjsKQEAgLTU5LDIwICsxODUsMTkgQEAKIAogCWlmICgoc2Vuc29yID4+IDgpID09IDB4NjQpIHsKIAkJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYygKLQkJCQlzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzICogc2l6ZW9mKHMzMiksCisJCQkJQVJSQVlfU0laRShwYjAxMDBfY3RybCkgKiBzaXplb2YoczMyKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5zb3Jfc2V0dGluZ3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpbmZvKCJQaG90b2JpdCBwYjAxMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzOwotCQlmb3IgKGkgPSAwOyBpIDwgc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJsczsgaSsrKQotCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLgotCQkJCQkgICAgIGN0cmxzW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gcGIwMTAwX21vZGU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUocGIwMTAwX21vZGUpOworCQlzZC0+ZGVzYy5jdHJscyA9IHBiMDEwMF9jdHJsOworCQlzZC0+ZGVzYy5uY3RybHMgPSBBUlJBWV9TSVpFKHBiMDEwMF9jdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IHNkLT5kZXNjLm5jdHJsczsgaSsrKQorCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gcGIwMTAwX2N0cmxbaV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAkJc2QtPnNlbnNvcl9wcml2ID0gc2Vuc29yX3NldHRpbmdzOwogCiAJCXJldHVybiAwOwpAQCAtMTQzLDYgKzI2OCwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCBwYjAxMDBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIC8qIEZJWE1FOiBTb3J0IHRoZSBpbml0IGNvbW1hbmRzIG91dCBhbmQgcHV0IHRoZW0gaW50byB0YWJsZXMsCiAJICB0aGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgdGhlIGNhbWVyYSB0byB3b3JrICovCiAvKiBGSVhNRTogTm8gZXJyb3IgaGFuZGxpbmcgZm9yIG5vdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKaW5kZXggNWVhMjFhMS4uNGRlNGZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogc3RhdGljIGludCBwYjAxMDBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgcGIwMTAwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHBiMDEwMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgcGIwMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgcGIwMTAwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CkBAIC0xMzcsMTM5ICsxMzgsMTIgQEAKIAkuaTJjX2FkZHIgPSAweGJhLAogCS5pMmNfbGVuID0gMiwKIAotCS5uY3RybHMgPSA3LAotCS5jdHJscyA9IHsKLSNkZWZpbmUgR0FJTl9JRFggMAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkdhaW4iLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAyNTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4Ci0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2dhaW4KLQl9LAotI2RlZmluZSBSRURfQkFMQU5DRV9JRFggMQotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJSZWQgQmFsYW5jZSIsCi0JCQkubWluaW11bQk9IC0yNTUsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAwCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X3JlZF9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9yZWRfYmFsYW5jZQotCX0sCi0jZGVmaW5lIEJMVUVfQkFMQU5DRV9JRFggMgotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiQmx1ZSBCYWxhbmNlIiwKLQkJCS5taW5pbXVtCT0gLTI1NSwKLQkJCS5tYXhpbXVtCT0gMjU1LAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYmx1ZV9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9ibHVlX2JhbGFuY2UKLQl9LAotI2RlZmluZSBFWFBPU1VSRV9JRFggMwotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJFeHBvc3VyZSIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDUxMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMgotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IHBiMDEwMF9nZXRfZXhwb3N1cmUKLQl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggNAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBhbmQgRXhwb3N1cmUiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAxLAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDEKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2F1dG9nYWluCi0JfSwKLSNkZWZpbmUgQVVUT0dBSU5fVEFSR0VUX0lEWCA1Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkF1dG9tYXRpYyBHYWluIFRhcmdldCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMjgKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW5fdGFyZ2V0LAotCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2Fpbl90YXJnZXQKLQl9LAotI2RlZmluZSBOQVRVUkFMX0lEWCA2Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDEsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gIk5hdHVyYWwgTGlnaHQgU291cmNlIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X25hdHVyYWwsCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X25hdHVyYWwKLQl9LAotCX0sCi0KIAkuaW5pdCA9IHBiMDEwMF9pbml0LAogCS5wcm9iZSA9IHBiMDEwMF9wcm9iZSwKIAkuc3RhcnQgPSBwYjAxMDBfc3RhcnQsCiAJLnN0b3AgPSBwYjAxMDBfc3RvcCwKIAkuZHVtcCA9IHBiMDEwMF9kdW1wLAotCi0JLm5tb2RlcyA9IDIsCi0JLm1vZGVzID0gewotLyogbG93IHJlcyAvIHN1YnNhbXBsZSBtb2RlcyBkaXNhYmxlZCBhcyB0aGV5IGFyZSBvbmx5IGhhbGYgcmVzIGhvcml6b250YWwsCi0gICBoYWx2aW5nIHRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGRvZXMgbm90IHNlZW0gdG8gd29yayAqLwotCXsKLQkJMzIwLAotCQkyNDAsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKLQkJLmJ5dGVzcGVybGluZSA9IDMyMCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSBQQjAxMDBfQ1JPUF9UT19WR0EKLQl9LAotCXsKLQkJMzUyLAotCQkyODgsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKLQkJLmJ5dGVzcGVybGluZSA9IDM1MiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAwCi0JfSwKLQl9CisJLmRpc2Nvbm5lY3QgPSBwYjAxMDBfZGlzY29ubmVjdCwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAppbmRleCBjNzI2ZGFjLi5lODhjNDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaApAQCAtNDEsOCArNDEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfcGIwMTAwOwogCi0jZGVmaW5lIFNUVjA2WFhfTUFYX0NUUkxTCQkoVjRMMl9DSURfTEFTVFAxIC0gVjRMMl9DSURfQkFTRSArIDEwKQotCiBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3IgewogCS8qIERlZmluZXMgdGhlIG5hbWUgb2YgYSBzZW5zb3IgKi8KIAljaGFyIG5hbWVbMzJdOwpAQCAtODEsMTIgKzc5LDYgQEAKIAogCS8qIEluc3RydWN0cyB0aGUgc2Vuc29yIHRvIGR1bXAgYWxsIGl0cyBjb250ZW50cyAqLwogCWludCAoKmR1bXApKHN0cnVjdCBzZCAqc2QpOwotCi0JaW50IG5jdHJsczsKLQlzdHJ1Y3QgY3RybCBjdHJsc1tTVFYwNlhYX01BWF9DVFJMU107Ci0KLQljaGFyIG5tb2RlczsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVzW107CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKaW5kZXggMWNhOTFmMi4uNjljNzdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKQEAgLTI5LDI2ICsyOSw5MiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF92djY0MTAuaCIKIAorc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdnY2NDEwX21vZGVbXSA9IHsKKwl7CisJCTM1NiwKKwkJMjkyLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTYgKiAyOTIsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCB2djY0MTBfY3RybFtdID0geworI2RlZmluZSBIRkxJUF9JRFggMAorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF9oZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfaGZsaXAKKwl9LAorI2RlZmluZSBWRkxJUF9JRFggMQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAorCX0sCisjZGVmaW5lIEdBSU5fSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJhbmFsb2cgZ2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDE1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IHZ2NjQxMF9zZXRfYW5hbG9nX2dhaW4sCisJCS5nZXQgPSB2djY0MTBfZ2V0X2FuYWxvZ19nYWluCisJfQorfTsKKwogc3RhdGljIGludCB2djY0MTBfcHJvYmUoc3RydWN0IHNkICpzZCkKIHsKIAl1MTYgZGF0YTsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJczMyICpzZW5zb3Jfc2V0dGluZ3M7CiAKIAllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREVWSUNFSCwgJmRhdGEpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRhdGEgPT0gMHgxOSkgewogCQlpbmZvKCJ2djY0MTAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubmN0cmxzOworCQlzZW5zb3Jfc2V0dGluZ3MgPSBrbWFsbG9jKEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpICogc2l6ZW9mKHMzMiksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJCWlmICghc2Vuc29yX3NldHRpbmdzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSB2djY0MTBfbW9kZTsKKwkJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRSh2djY0MTBfbW9kZSk7CisJCXNkLT5kZXNjLmN0cmxzID0gdnY2NDEwX2N0cmw7CisJCXNkLT5kZXNjLm5jdHJscyA9IEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpOworCisJCWZvciAoaSA9IDA7IGkgPCBzZC0+ZGVzYy5uY3RybHM7IGkrKykKKwkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHZ2NjQxMF9jdHJsW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5zZW5zb3JfcHJpdiA9IHNlbnNvcl9zZXR0aW5nczsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTgwLDYgKzE0NiwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCB2djY0MTBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIHN0YXRpYyBpbnQgdnY2NDEwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGVycjsKQEAgLTE1NiwxNyArMjI4LDEzIEBACiAKIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7Ci0JaW50IGVycjsKLQl1MTYgaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RBVEFGT1JNQVQsICZpMmNfZGF0YSk7Ci0KLQkqdmFsID0gKGkyY19kYXRhICYgVlY2NDEwX0hGTElQKSA/IDEgOiAwOwotCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdOwogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTE3NCw2ICsyNDIsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTkxLDE3ICsyNjIsMTMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSAoaTJjX2RhdGEgJiBWVjY0MTBfVkZMSVApID8gMSA6IDA7Ci0KKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF07CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTIwOSw2ICsyNzYsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tWRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjI2LDI0ICsyOTYsMjMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfQU5BTE9HR0FJTiwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSBpMmNfZGF0YSAmIDB4ZjsKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXTsKIAogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGFuYWxvZyBnYWluICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2djY0MTBfc2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCisJc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXSA9IHZhbDsKIAlQREVCVUcoRF9WNEwyLCAiU2V0IGFuYWxvZyBnYWluIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgVlY2NDEwX0FOQUxPR0dBSU4sIDB4ZjAgfCAodmFsICYgMHhmKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKaW5kZXggM2ZmOGM0ZS4uOTVhYzU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIGludCB2djY0MTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgdnY2NDEwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHZ2NjQxMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgdnY2NDEwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwpAQCAtMTk3LDYyICsxOTgsNyBAQAogCS5zdGFydCA9IHZ2NjQxMF9zdGFydCwKIAkuc3RvcCA9IHZ2NjQxMF9zdG9wLAogCS5kdW1wID0gdnY2NDEwX2R1bXAsCi0KLQkubmN0cmxzID0gMywKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gImhvcml6b250YWwgZmxpcCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X2hmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF9oZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImFuYWxvZyBnYWluIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMAotCQl9LAotCQkuc2V0ID0gdnY2NDEwX3NldF9hbmFsb2dfZ2FpbiwKLQkJLmdldCA9IHZ2NjQxMF9nZXRfYW5hbG9nX2dhaW4KLQl9Ci0JfSwKLQotCS5ubW9kZXMgPSAxLAotCS5tb2RlcyA9IHsKLQl7Ci0JCTM1NiwKLQkJMjkyLAotCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPQotCQkJMzU2ICogMjkyLAotCQkuYnl0ZXNwZXJsaW5lID0gMzU2LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDAKLQl9Ci0JfQorCS5kaXNjb25uZWN0ID0gdnY2NDEwX2Rpc2Nvbm5lY3QsCiB9OwogCiAvKiBJZiBOVUxMLCBvbmx5IHNpbmdsZSB2YWx1ZSB0byB3cml0ZSwgc3RvcmVkIGluIGxlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCA2ZDkwNGQ1Li5jMmI4YzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtMzksOCArMzksMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOwogCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNzAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODUKIAotCWNoYXIgcWluZGV4OwogCWNoYXIgYnJpZGdlOwogI2RlZmluZSBCUklER0VfU1BDQTUwNCAwCiAjZGVmaW5lIEJSSURHRV9TUENBNTA0QiAxCkBAIC01Miw2ICs1NSw4IEBACiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCAyCiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDgyMCAzCiAjZGVmaW5lIE1lZ2FwaXhWNCA0CisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTIsNyArODE3LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5zdWJ0eXBlID0gaWQtPmRyaXZlcl9pbmZvOwpAQCAtODUwLDEwICs4NTQsMTAgQEAKIAkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUyIC8gc2l6ZW9mIHZnYV9tb2RlMlswXTsKIAkJYnJlYWs7CiAJfQotCXNkLT5xaW5kZXggPSA1OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC05NzAsNiArOTc0LDEyIEBACiAJX191OCBpOwogCV9fdTggaW5mb1s2XTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUwNEIpCiAJCXNwY2E1MDRCX3NldFF0YWJsZShnc3BjYV9kZXYpOwogCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7CkBAIC0xMDc5LDYgKzEwODksMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlrZnJlZShzZC0+anBlZ19oZHIpOworfQorCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KIAkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KQEAgLTExNTUsOSArMTE3Miw4IEBACiAJCQkJCWZmZDksIDIpOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAl9CiAKIAkvKiBhZGQgMHgwMCBhZnRlciAweGZmICovCkBAIC0xMTk4LDI2ICsxMjE0LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiBicmlnaHRuZXNzID0gMDsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhNywgMik7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjBmMCwgMik7Ci0JCWJyZWFrOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9ICgoYnJpZ2h0bmVzcyAmIDB4ZmYpIC0gMTI4KSAlIDI1NTsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEyMzcsMjQgKzEyMzMsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb250cmFzdCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMWE4LCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbnRyYXN0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIwZjEsIDIpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTI3NCwyNCArMTI1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb2xvcnMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhZSwgMikgPj4gMTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbG9ycyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGY2LCAyKSA+PiAxOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMzA2LDcgKzEyNjYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmJyaWdodG5lc3M7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI1LDcgKzEyODQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDQsNyArMTMwMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzY1LDYgKzEzMjIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTEzNzQsNyArMTM1OSwxMCBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE0NjUsOCArMTQ1MywxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA2ZWUxMTFhLi5mNjNlMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtMzcsMjAgKzM3LDIxIEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7Ci0JdW5zaWduZWQgY2hhciBjb250cmFzdDsKLQl1bnNpZ25lZCBjaGFyIGNvbG9yczsKLQl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOwotCXVuc2lnbmVkIGNoYXIgZ2FtbWE7Ci0JdW5zaWduZWQgY2hhciBzaGFycG5lc3M7Ci0JdW5zaWduZWQgY2hhciBmcmVxOwotCXVuc2lnbmVkIGNoYXIgd2hpdGViYWxhbmNlOwotCXVuc2lnbmVkIGNoYXIgbWlycm9yOwotCXVuc2lnbmVkIGNoYXIgZWZmZWN0OworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOworCXU4IGF1dG9nYWluOworCXU4IGdhbW1hOworCXU4IHNoYXJwbmVzczsKKwl1OCBmcmVxOworCXU4IHdoaXRlYmFsYW5jZTsKKwl1OCBtaXJyb3I7CisJdTggZWZmZWN0OwogCi0JX191OCBzZW5zb3I7Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAwCi0jZGVmaW5lIFNFTlNPUl9PTTY4MDIgMQorCXU4IHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX09NNjgwMiAwCisjZGVmaW5lIFNFTlNPUl9PVEhFUiAxCisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAyCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03OCw3ICs3OSw2IEBACiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpOwogCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtODcsMTIgKzg3LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSA4LAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA4CisJICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCSB9LAotI2RlZmluZSBTRF9DT05UUkFTVCAxCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTEwMSwxMiArMTAxLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGQsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDcsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAweDA3CisJICAuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCSB9LAotI2RlZmluZSBTRF9DT0xPUiAyCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLApAQCAtMTE1LDcgKzExNSw4IEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGYsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDUsCisjZGVmaW5lIENPTE9SU19ERUYgMHgwNQorCSAgLmRlZmF1bHRfdmFsdWUgPSBDT0xPUlNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGNvbG9ycywKIAkgLmdldCA9IHNkX2dldGNvbG9ycywKQEAgLTEzNSw3ICsxMzYsNiBAQAogCSAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAkgfSwKLSNkZWZpbmUgU0RfQVVUT0dBSU4gNAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfR0FJTiwJLyogaGVyZSwgaSBhY3RpdmF0ZSBvbmx5IHRoZSBsb3dsaWdodCwKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAweDAxCisJICAuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRsb3dsaWdodCwKIAkgLmdldCA9IHNkX2dldGxvd2xpZ2h0LAogCSB9LAotI2RlZmluZSBTRF9NSVJST1IgNQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfSEZMSVAsCkBAIC0xNjAsMTIgKzE2MCwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBNSVJST1JfREVGIDAKKwkgIC5kZWZhdWx0X3ZhbHVlID0gTUlSUk9SX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmbGlwLAogCSAuZ2V0ID0gc2RfZ2V0ZmxpcAogCX0sCi0jZGVmaW5lIFNEX0xJR0hURlJFUSA2CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE3NCwxMiArMTc0LDEyIEBACiAJICAubWluaW11bSA9IDEsCQkvKiAxIC0+IDB4NTAsIDItPjB4NjAgKi8KIAkgIC5tYXhpbXVtID0gMiwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMSwKKyNkZWZpbmUgRlJFUV9ERUYgMQorCSAgLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAuZ2V0ID0gc2RfZ2V0ZnJlcX0sCiAKLSNkZWZpbmUgU0RfV0hJVEVfQkFMQU5DRSA3CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFLApAQCAtMTg4LDEyICsxODgsMTIgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgV0hJVEVfQkFMQU5DRV9ERUYgMAorCSAgLmRlZmF1bHRfdmFsdWUgPSBXSElURV9CQUxBTkNFX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCiAJIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKIAl9LAotI2RlZmluZSBTRF9TSEFSUE5FU1MgOAkJLyogKGFrYSBkZWZpbml0aW9uIG9uIHdpbikgKi8KIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKQEAgLTIwMiwxMiArMjAyLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE1LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA2LAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDB4MDYKKwkgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0VGRkVDVFMgOQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfRUZGRUNUUywKQEAgLTIxNiw3ICsyMTYsOCBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSA0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBFRkZFQ1RTX0RFRiAwCisJICAuZGVmYXVsdF92YWx1ZSA9IEVGRkVDVFNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGVmZmVjdCwKIAkgLmdldCA9IHNkX2dldGVmZmVjdApAQCAtMjYzLDI4ICsyNjQsNTAgQEAKIAogLyogc2Vuc29yIHNwZWNpZmljIGRhdGEgKi8KIHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHsKLQljb25zdCBfX3U4IGRhdGExWzIwXTsKLQljb25zdCBfX3U4IGRhdGEyWzE4XTsKLQljb25zdCBfX3U4IGRhdGEzWzE4XTsKLQljb25zdCBfX3U4IGRhdGE0WzRdOwotCWNvbnN0IF9fdTggZGF0YTVbNl07Ci0JY29uc3QgX191OCBzdHJlYW1bNF07CisJY29uc3QgdTggZGF0YTFbMTBdOworCWNvbnN0IHU4IGRhdGEyWzldOworCWNvbnN0IHU4IGRhdGEzWzldOworCWNvbnN0IHU4IGRhdGE0WzRdOworCWNvbnN0IHU4IGRhdGE1WzZdOworCWNvbnN0IHU4IHN0cmVhbVs0XTsKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CisgICAgewkJCQkvKiBPTTY4MDIgKi8KKwkuZGF0YTEgPQorCQl7MHhjMiwgMHgyOCwgMHgwZiwgMHgyMiwgMHhjZCwgMHgyNywgMHgyYywgMHgwNiwKKwkJIDB4YjMsIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLAorCQkgMHhmZn0sCisJLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMH0sCisJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCisJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAorICAgIH0sCisgICAgewkJCQkvKiBPVEhFUiAqLworCS5kYXRhMSA9CisJCXsweGMxLCAweDQ4LCAweDA0LCAweDFiLCAweGNhLCAweDJlLCAweDMzLCAweDNhLAorCQkgMHhlOCwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4NGUsIDB4OWMsIDB4ZWMsIDB4NDAsIDB4ODAsIDB4YzAsIDB4NDgsIDB4OTYsCisJCSAweGQ5fSwKKwkuZGF0YTQgPQorCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhhOH0sCisJLmRhdGE1ID0KKwkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MjksIDB4ODEsIDB4Njl9LAorCS5zdHJlYW0gPQorCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHgwMH0sCisgICAgfSwKICAgICB7CQkJCS8qIFRBUzUxMzBBICovCiAJLmRhdGExID0KLQkJezB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsCi0JCSAweGQ0LCAweGJiLCAweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAotCQkgMHhkOCwgMHhjOCwgMHhkOSwgMHhmY30sCisJCXsweGJiLCAweDI4LCAweDEwLCAweDEwLCAweGJiLCAweDI4LCAweDFlLCAweDI3LAorCQkgMHhjOCwgMHhmY30sCiAJLmRhdGEyID0KLQkJezB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsCi0JCSAweGU0LCAweGE4LCAweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAotCQkgMHhlOCwgMHhlMH0sCi0JLmRhdGEzID0KLQkJezB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsCi0JCSAweGNiLCAweGE4LCAweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAotCQkgMHhjZiwgMHhlMH0sCisJCXsweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LAorCQkgMHhlMH0sCiAJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KIAkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAogCS5kYXRhNSA9CkBAIC0yOTIsMzIgKzMxNSwxMiBAQAogCS5zdHJlYW0gPQogCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCiAgICAgfSwKLSAgICB7CQkJCS8qIE9NNjgwMiAqLwotCS5kYXRhMSA9Ci0JCXsweGQwLCAweGMyLCAweGQxLCAweDI4LCAweGQyLCAweDBmLCAweGQzLCAweDIyLAotCQkgMHhkNCwgMHhjZCwgMHhkNSwgMHgyNywgMHhkNiwgMHgyYywgMHhkNywgMHgwNiwKLQkJIDB4ZDgsIDB4YjMsIDB4ZDksIDB4ZmN9LAotCS5kYXRhMiA9Ci0JCXsweGUwLCAweDgwLCAweGUxLCAweGZmLCAweGUyLCAweGZmLCAweGUzLCAweDgwLAotCQkgMHhlNCwgMHhmZiwgMHhlNSwgMHhmZiwgMHhlNiwgMHg4MCwgMHhlNywgMHhmZiwKLQkJIDB4ZTgsIDB4ZmZ9LAotCS5kYXRhMyA9Ci0JCXsweGM3LCAweDgwLCAweGM4LCAweGZmLCAweGM5LCAweGZmLCAweGNhLCAweDgwLAotCQkgMHhjYiwgMHhmZiwgMHhjYywgMHhmZiwgMHhjZCwgMHg4MCwgMHhjZSwgMHhmZiwKLQkJIDB4Y2YsIDB4ZmZ9LAotCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KLQkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjAgfSwKLQkuZGF0YTUgPQkvKiB0aGlzIGNvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi8KLQkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTMsIDB4ODEsIDB4MjN9LAotCS5zdHJlYW0gPQotCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg3OH0sCi0gICAgfQogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CiAvKiBlYXNpbHkgZG9uZSBieSBzb2Z0LCB0aGlzIHRhYmxlIGNvdWxkIGJlIHJlbW92ZWQsCiAgKiBpIGtlZXAgaXQgaGVyZSBqdXN0IGluIGNhc2UgKi8KLXN0YXRpYyBjb25zdCBfX3U4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0geworc3RhdGljIGNvbnN0IHU4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0gewogCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDAwfSwJLyogTm9ybWFsICovCiAJezB4YTgsIDB4YzgsIDB4YzYsIDB4NTIsIDB4YzAsIDB4MDR9LAkvKiBSZXB1amFyICovCiAJezB4YTgsIDB4ZTgsIDB4YzYsIDB4ZDIsIDB4YzAsIDB4MjB9LAkvKiBNb25vY2hyb21lICovCkBAIC0zMjcsOTAgKzMzMCw1OCBAQAogCXsweGE4LCAweGM4LCAweGM2LCAweGQyLCAweGMwLCAweDQwfSwJLyogTmVnYXRpdmUgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMzRdID0gewotCXsweDkwLCAweDAwLCAweDkxLCAweDNlLCAweDkyLCAweDY5LCAweDkzLCAweDg1LAkvKiAwICovCi0JIDB4OTQsIDB4OTUsIDB4OTUsIDB4YTEsIDB4OTYsIDB4YWUsIDB4OTcsIDB4YjksCi0JIDB4OTgsIDB4YzIsIDB4OTksIDB4Y2IsIDB4OWEsIDB4ZDQsIDB4OWIsIDB4ZGIsCi0JIDB4OWMsIDB4ZTMsIDB4OWQsIDB4ZWEsIDB4OWUsIDB4ZjEsIDB4OWYsIDB4ZjgsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDMzLCAweDkyLCAweDVhLCAweDkzLCAweDc1LAkvKiAxICovCi0JIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4YTEsIDB4OTcsIDB4YWQsCi0JIDB4OTgsIDB4YjcsIDB4OTksIDB4YzIsIDB4OWEsIDB4Y2IsIDB4OWIsIDB4ZDQsCi0JIDB4OWMsIDB4ZGUsIDB4OUQsIDB4ZTcsIDB4OWUsIDB4ZjAsIDB4OWYsIDB4ZjcsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDJmLCAweDkyLCAweDUxLCAweDkzLCAweDZiLAkvKiAyICovCi0JIDB4OTQsIDB4N2MsIDB4OTUsIDB4OGEsIDB4OTYsIDB4OTksIDB4OTcsIDB4YTYsCi0JIDB4OTgsIDB4YjEsIDB4OTksIDB4YmMsIDB4OWEsIDB4YzYsIDB4OWIsIDB4ZDAsCi0JIDB4OWMsIDB4ZGIsIDB4OWQsIDB4ZTQsIDB4OWUsIDB4ZWQsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDI5LCAweDkyLCAweDQ4LCAweDkzLCAweDYwLAkvKiAzICovCi0JIDB4OTQsIDB4NzIsIDB4OTUsIDB4ODEsIDB4OTYsIDB4OTAsIDB4OTcsIDB4OWUsCi0JIDB4OTgsIDB4YWEsIDB4OTksIDB4YjUsIDB4OWEsIDB4YmYsIDB4OWIsIDB4Y2IsCi0JIDB4OWMsIDB4ZDYsIDB4OWQsIDB4ZTEsIDB4OWUsIDB4ZWIsIDB4OWYsIDB4ZjUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDIzLCAweDkyLCAweDNmLCAweDkzLCAweDU1LAkvKiA0ICovCi0JIDB4OTQsIDB4NjgsIDB4OTUsIDB4NzcsIDB4OTYsIDB4ODYsIDB4OTcsIDB4OTUsCi0JIDB4OTgsIDB4YTIsIDB4OTksIDB4YWQsIDB4OWEsIDB4YjksIDB4OWIsIDB4YzYsCi0JIDB4OWMsIDB4ZDIsIDB4OWQsIDB4ZGUsIDB4OWUsIDB4ZTksIDB4OWYsIDB4ZjQsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDFiLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAkvKiA1ICovCi0JIDB4OTQsIDB4NTksIDB4OTUsIDB4NjksIDB4OTYsIDB4NzksIDB4OTcsIDB4ODcsCi0JIDB4OTgsIDB4OTYsIDB4OTksIDB4YTMsIDB4OWEsIDB4YjEsIDB4OWIsIDB4YmUsCi0JIDB4OWMsIDB4Y2MsIDB4OWQsIDB4ZGEsIDB4OWUsIDB4ZTcsIDB4OWYsIDB4ZjMsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDEwLCAweDkzLCAweDIwLAkvKiA2ICovCi0JIDB4OTQsIDB4MzIsIDB4OTUsIDB4NDAsIDB4OTYsIDB4NTcsIDB4OTcsIDB4NjcsCi0JIDB4OTgsIDB4NzcsIDB4OTksIDB4ODgsIDB4OWEsIDB4OTksIDB4OWIsIDB4YWEsCi0JIDB4OWMsIDB4YmIsIDB4OWQsIDB4Y2MsIDB4OWUsIDB4ZGQsIDB4OWYsIDB4ZWUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDE0LCAweDkzLCAweDI2LAkvKiA3ICovCi0JIDB4OTQsIDB4MzgsIDB4OTUsIDB4NGEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCi0JIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OWEsIDB4YTAsIDB4OWIsIDB4YjAsCi0JIDB4OWMsIDB4YzAsIDB4OUQsIDB4ZDAsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAkvKiA4ICovCi0JIDB4OTQsIDB4NDcsIDB4OTUsIDB4NWEsIDB4OTYsIDB4NjksIDB4OTcsIDB4NzksCi0JIDB4OTgsIDB4ODgsIDB4OTksIDB4OTcsIDB4OWEsIDB4YTcsIDB4OWIsIDB4YjYsCi0JIDB4OWMsIDB4YzQsIDB4OWQsIDB4ZDMsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDI2LCAweDkzLCAweDQwLAkvKiA5ICovCi0JIDB4OTQsIDB4NTQsIDB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCi0JIDB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsCi0JIDB4OWMsIDB4Y2EsIDB4OWQsIDB4ZDYsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDE4LCAweDkyLCAweDJiLCAweDkzLCAweDQ0LAkvKiAxMCAqLwotCSAweDk0LCAweDYwLCAweDk1LCAweDcwLCAweDk2LCAweDgwLCAweDk3LCAweDhlLAotCSAweDk4LCAweDljLCAweDk5LCAweGFhLCAweDlhLCAweGI3LCAweDliLCAweGM0LAotCSAweDljLCAweGQwLCAweDlkLCAweGQ4LCAweDllLCAweGUyLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxYSwgMHg5MiwgMHgzNCwgMHg5MywgMHg1MiwJLyogMTEgKi8KLQkgMHg5NCwgMHg2NiwgMHg5NSwgMHg3ZSwgMHg5NiwgMHg4RCwgMHg5NywgMHg5QiwKLQkgMHg5OCwgMHhhOCwgMHg5OSwgMHhiNCwgMHg5YSwgMHhjMCwgMHg5YiwgMHhjYiwKLQkgMHg5YywgMHhkNiwgMHg5ZCwgMHhlMSwgMHg5ZSwgMHhlYiwgMHg5ZiwgMHhmNSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4M2YsIDB4OTIsIDB4NWEsIDB4OTMsIDB4NmUsCS8qIDEyICovCi0JIDB4OTQsIDB4N2YsIDB4OTUsIDB4OGUsIDB4OTYsIDB4OWMsIDB4OTcsIDB4YTgsCi0JIDB4OTgsIDB4YjQsIDB4OTksIDB4YmYsIDB4OWEsIDB4YzksIDB4OWIsIDB4ZDMsCi0JIDB4OWMsIDB4ZGMsIDB4OWQsIDB4ZTUsIDB4OWUsIDB4ZWUsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDU0LCAweDkyLCAweDZmLCAweDkzLCAweDgzLAkvKiAxMyAqLwotCSAweDk0LCAweDkzLCAweDk1LCAweGEwLCAweDk2LCAweGFkLCAweDk3LCAweGI3LAotCSAweDk4LCAweGMyLCAweDk5LCAweGNiLCAweDlhLCAweGQ0LCAweDliLCAweGRjLAotCSAweDljLCAweGU0LCAweDlkLCAweGViLCAweDllLCAweGYyLCAweDlmLCAweGY5LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg2ZSwgMHg5MiwgMHg4OCwgMHg5MywgMHg5YSwJLyogMTQgKi8KLQkgMHg5NCwgMHhhOCwgMHg5NSwgMHhiMywgMHg5NiwgMHhiZCwgMHg5NywgMHhjNiwKLQkgMHg5OCwgMHhjZiwgMHg5OSwgMHhkNiwgMHg5YSwgMHhkZCwgMHg5YiwgMHhlMywKLQkgMHg5YywgMHhlOSwgMHg5ZCwgMHhlZiwgMHg5ZSwgMHhmNCwgMHg5ZiwgMHhmYSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4OTMsIDB4OTIsIDB4YTgsIDB4OTMsIDB4YjcsCS8qIDE1ICovCi0JIDB4OTQsIDB4YzEsIDB4OTUsIDB4Y2EsIDB4OTYsIDB4ZDIsIDB4OTcsIDB4ZDgsCi0JIDB4OTgsIDB4ZGUsIDB4OTksIDB4ZTMsIDB4OWEsIDB4ZTgsIDB4OWIsIDB4ZWQsCi0JIDB4OWMsIDB4ZjEsIDB4OWQsIDB4ZjUsIDB4OWUsIDB4ZjgsIDB4OWYsIDB4ZmMsCi0JIDB4YTAsIDB4ZmZ9CitzdGF0aWMgY29uc3QgdTggZ2FtbWFfdGFibGVbR0FNTUFfTUFYXVsxN10gPSB7CisJezB4MDAsIDB4M2UsIDB4NjksIDB4ODUsIDB4OTUsIDB4YTEsIDB4YWUsIDB4YjksCS8qIDAgKi8KKwkgMHhjMiwgMHhjYiwgMHhkNCwgMHhkYiwgMHhlMywgMHhlYSwgMHhmMSwgMHhmOCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MzMsIDB4NWEsIDB4NzUsIDB4ODUsIDB4OTMsIDB4YTEsIDB4YWQsCS8qIDEgKi8KKwkgMHhiNywgMHhjMiwgMHhjYiwgMHhkNCwgMHhkZSwgMHhlNywgMHhmMCwgMHhmNywKKwkgMHhmZn0sCisJezB4MDAsIDB4MmYsIDB4NTEsIDB4NmIsIDB4N2MsIDB4OGEsIDB4OTksIDB4YTYsCS8qIDIgKi8KKwkgMHhiMSwgMHhiYywgMHhjNiwgMHhkMCwgMHhkYiwgMHhlNCwgMHhlZCwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjksIDB4NDgsIDB4NjAsIDB4NzIsIDB4ODEsIDB4OTAsIDB4OWUsCS8qIDMgKi8KKwkgMHhhYSwgMHhiNSwgMHhiZiwgMHhjYiwgMHhkNiwgMHhlMSwgMHhlYiwgMHhmNSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjMsIDB4M2YsIDB4NTUsIDB4NjgsIDB4NzcsIDB4ODYsIDB4OTUsCS8qIDQgKi8KKwkgMHhhMiwgMHhhZCwgMHhiOSwgMHhjNiwgMHhkMiwgMHhkZSwgMHhlOSwgMHhmNCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MWIsIDB4MzMsIDB4NDgsIDB4NTksIDB4NjksIDB4NzksIDB4ODcsCS8qIDUgKi8KKwkgMHg5NiwgMHhhMywgMHhiMSwgMHhiZSwgMHhjYywgMHhkYSwgMHhlNywgMHhmMywKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTAsIDB4MjAsIDB4MzIsIDB4NDAsIDB4NTcsIDB4NjcsCS8qIDYgKi8KKwkgMHg3NywgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTQsIDB4MjYsIDB4MzgsIDB4NGEsIDB4NjAsIDB4NzAsCS8qIDcgKi8KKwkgMHg4MCwgMHg5MCwgMHhhMCwgMHhiMCwgMHhjMCwgMHhkMCwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjIsIDB4MzUsIDB4NDcsIDB4NWEsIDB4NjksIDB4NzksCS8qIDggKi8KKwkgMHg4OCwgMHg5NywgMHhhNywgMHhiNiwgMHhjNCwgMHhkMywgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjYsIDB4NDAsIDB4NTQsIDB4NjUsIDB4NzUsIDB4ODQsCS8qIDkgKi8KKwkgMHg5MywgMHhhMSwgMHhiMCwgMHhiZCwgMHhjYSwgMHhkNiwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTgsIDB4MmIsIDB4NDQsIDB4NjAsIDB4NzAsIDB4ODAsIDB4OGUsCS8qIDEwICovCisJIDB4OWMsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDAsIDB4ZDgsIDB4ZTIsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDFhLCAweDM0LCAweDUyLCAweDY2LCAweDdlLCAweDhELCAweDlCLAkvKiAxMSAqLworCSAweGE4LCAweGI0LCAweGMwLCAweGNiLCAweGQ2LCAweGUxLCAweGViLCAweGY1LAorCSAweGZmfSwKKwl7MHgwMCwgMHgzZiwgMHg1YSwgMHg2ZSwgMHg3ZiwgMHg4ZSwgMHg5YywgMHhhOCwJLyogMTIgKi8KKwkgMHhiNCwgMHhiZiwgMHhjOSwgMHhkMywgMHhkYywgMHhlNSwgMHhlZSwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4NTQsIDB4NmYsIDB4ODMsIDB4OTMsIDB4YTAsIDB4YWQsIDB4YjcsCS8qIDEzICovCisJIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGMsIDB4ZTQsIDB4ZWIsIDB4ZjIsIDB4ZjksCisJIDB4ZmZ9LAorCXsweDAwLCAweDZlLCAweDg4LCAweDlhLCAweGE4LCAweGIzLCAweGJkLCAweGM2LAkvKiAxNCAqLworCSAweGNmLCAweGQ2LCAweGRkLCAweGUzLCAweGU5LCAweGVmLCAweGY0LCAweGZhLAorCSAweGZmfSwKKwl7MHgwMCwgMHg5MywgMHhhOCwgMHhiNywgMHhjMSwgMHhjYSwgMHhkMiwgMHhkOCwJLyogMTUgKi8KKwkgMHhkZSwgMHhlMywgMHhlOCwgMHhlZCwgMHhmMSwgMHhmNSwgMHhmOCwgMHhmYywKKwkgMHhmZn0KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHRhczUxMzBhX3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggdGFzNTEzMGFfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHg2MiwgMHgwOCwgMHg2MywgMHg3MCwgMHg2NCwgMHgxZCwgMHg2MCwgMHgwOX0sCiAJezB4NjIsIDB4MjAsIDB4NjMsIDB4MDEsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDl9LAogCXsweDYyLCAweDA3LCAweDYzLCAweDAzLCAweDY0LCAweDAwLCAweDYwLCAweDA5fSwKQEAgLTQxOCwxMSArMzg5LDExIEBACiAJe30sCiB9OwogCi1zdGF0aWMgX191OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKK3N0YXRpYyB1OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKIAogLyogcmVhZCAxIGJ5dGUgKi8KLXN0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgICBfX3UxNiBpbmRleCkKK3N0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIHUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM1LDcgKzQwNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCkKKwkJICB1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQ0Niw3ICs0MTcsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQorCQkgIGNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCiB7CiAJaWYgKGxlbiA8PSBVU0JfQlVGX1NaKSB7CiAJCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogCQkJCTB4MDEsIDAsCiAJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7CiAJfSBlbHNlIHsKLQkJX191OCAqdG1wYnVmOworCQl1OCAqdG1wYnVmOwogCiAJCXRtcGJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAkJbWVtY3B5KHRtcGJ1ZiwgYnVmZmVyLCBsZW4pOwpAQCAtNDcxLDE0ICs0NDIsNDEgQEAKIAl9CiB9CiAKKy8qIHdyaXRlIHZhbHVlcyB0byBjb25zZWN1dGl2ZSByZWdpc3RlcnMgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2l4YnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCWNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCit7CisJaW50IGk7CisJdTggKnAsICp0bXBidWY7CisKKwlpZiAobGVuICogMiA8PSBVU0JfQlVGX1NaKQorCQlwID0gdG1wYnVmID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWVsc2UKKwkJcCA9IHRtcGJ1ZiA9IGttYWxsb2MobGVuICogMiwgR0ZQX0tFUk5FTCk7CisJaSA9IGxlbjsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJKnArKyA9IHJlZysrOworCQkqcCsrID0gKmJ1ZmZlcisrOworCX0KKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTB4MDEsIDAsCisJCQl0bXBidWYsIGxlbiAqIDIsIDUwMCk7CisJaWYgKGxlbiAqIDIgPiBVU0JfQlVGX1NaKQorCQlrZnJlZSh0bXBidWYpOworfQorCiAvKiBSZXBvcnRlZCBhcyBPTTY4MDIqLwogc3RhdGljIHZvaWQgb202ODAyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaTsKLQljb25zdCBfX3U4ICpwOwotCV9fdTggYnl0ZTsKLQlfX3U4IHZhbFs2XSA9IHsweDYyLCAwLCAweDY0LCAwLCAweDYwLCAweDA1fTsKLQlzdGF0aWMgY29uc3QgX191OCBzZW5zb3JfaW5pdFtdID0geworCWNvbnN0IHU4ICpwOworCXU4IGJ5dGU7CisJdTggdmFsWzZdID0gezB4NjIsIDAsIDB4NjQsIDAsIDB4NjAsIDB4MDV9OworCXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdID0gewogCQkweGRmLCAweDZkLAogCQkweGRkLCAweDE4LAogCQkweDVhLCAweGUwLApAQCAtNDk3LDcgKzQ5NSw3IEBACiAJfTsKIAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7Ci0JbXNsZWVwKDUpOworCW1zbGVlcCgxMDApOwogCWkgPSA0OwogCXdoaWxlICgtLWkgPiAwKSB7CiAJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CkBAIC01MzgsMjAgKzUzNiwyMCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGVfdDE2OwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZV90MTYpOwogCi0Jc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JTX0RFRjsKIAlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7Ci0Jc2QtPm1pcnJvciA9IHNkX2N0cmxzW1NEX01JUlJPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+ZnJlcSA9IHNkX2N0cmxzW1NEX0xJR0hURlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+d2hpdGViYWxhbmNlID0gc2RfY3RybHNbU0RfV0hJVEVfQkFMQU5DRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+c2hhcnBuZXNzID0gc2RfY3RybHNbU0RfU0hBUlBORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5lZmZlY3QgPSBzZF9jdHJsc1tTRF9FRkZFQ1RTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlzZC0+bWlycm9yID0gTUlSUk9SX0RFRjsKKwlzZC0+ZnJlcSA9IEZSRVFfREVGOworCXNkLT53aGl0ZWJhbGFuY2UgPSBXSElURV9CQUxBTkNFX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwlzZC0+ZWZmZWN0ID0gRUZGRUNUU19ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1OSw3ICs1NTcsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKLQlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsKKwl1OCBzZXQ2WzRdID0geyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CiAKIAlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CiAJaWYgKGJyaWdodG5lc3MgPCA3KSB7CkBAIC01NzYsNyArNTc0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwl1MTYgcmVnX3RvX3dyaXRlOwogCiAJaWYgKGNvbnRyYXN0IDwgNykKIAkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gY29udHJhc3QgKiAweDIwMDsKQEAgLTU4OSw3ICs1ODcsNyBAQAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDgwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7CS8qIHdhcyAweGMwICovCiAJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwpAQCAtNjAwLDE0ICs1OTgsMTUgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlQREVCVUcoRF9DT05GLCAiR2FtbWE6ICVkIiwgc2QtPmdhbW1hKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHg5MCwKKwkJZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQorCXU4IHdoaXRlX2JhbGFuY2VbOF0gPQogCQl7MHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOH07CiAKIAlpZiAoc2QtPndoaXRlYmFsYW5jZSkKQEAgLTYxOSw3ICs2MTgsNyBAQAogc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOwogCkBAIC02MzUsMTggKzYzNCwyMiBAQAogCSAqIHRvIHNlZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLiovCiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwotCV9fdTggYnl0ZSwgdGVzdF9ieXRlOworCXUxNiBzZW5zb3JfaWQ7CisJdTggdGVzdF9ieXRlID0gMDsKKwl1MTYgcmVnODAsIHJlZzhlOwogCi0Jc3RhdGljIGNvbnN0IF9fdTggcmVhZF9pbmRleHNbXSA9Ci0JCXsgMHgwNiwgMHgwNywgMHgwYSwgMHgwYiwgMHg2NiwgMHg4MCwgMHg4MSwgMHg4ZSwgMHg4ZiwgMHhhNSwKLQkJICAweGE2LCAweGE4LCAweGJiLCAweGJjLCAweGM2LCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjFbXSA9CisJc3RhdGljIGNvbnN0IHU4IHJlYWRfaW5kZXhzW10gPQorCQl7IDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCisJCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuMVtdID0KIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuMltdID0KKwlzdGF0aWMgY29uc3QgdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjNbXSA9CisJc3RhdGljIGNvbnN0IHU4IG4zWzZdID0KIAkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuNFtdID0KKwlzdGF0aWMgY29uc3QgdTggbjNfb3RoZXJbNl0gPQorCQkJezB4NjEsIDB4YzIsIDB4NjUsIDB4ODgsIDB4NjAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1OCBuNFtdID0KIAkJezB4MDksIDB4MDEsIDB4MTIsIDB4MDQsIDB4NjYsIDB4OGEsIDB4ODAsIDB4M2MsCiAJCSAweDgxLCAweDIyLCAweDg0LCAweDUwLCAweDhhLCAweDc4LCAweDhiLCAweDY4LAogCQkgMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKQEAgLTY1Niw0MCArNjU5LDYxIEBACiAJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAogCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKIAkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ5WzRdID0KLQkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ4WzZdID0KKwlzdGF0aWMgY29uc3QgdTggbjRfb3RoZXJbXSA9CisJCXsweDY2LCAweDAwLCAweDdmLCAweDAwLCAweDgwLCAweGFjLCAweDgxLCAweDY5LAorCQkgMHg4NCwgMHg0MCwgMHg4NSwgMHg3MCwgMHg4NiwgMHgyMCwgMHg4YSwgMHg2OCwKKwkJIDB4OGIsIDB4NTgsIDB4OGMsIDB4ODgsIDB4OGQsIDB4ZmYsIDB4OGUsIDB4YjgsCisJCSAweDhmLCAweDI4LCAweGEyLCAweDYwLCAweGE1LCAweDQwLCAweGE4LCAweGE4LAorCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NCwgMHhhZSwgMHgyNCwgMHhhZiwgMHg1NiwKKwkJIDB4YjAsIDB4NjgsIDB4YjEsIDB4MDAsIDB4YjIsIDB4ODgsIDB4YmIsIDB4YzUsCisJCSAweGJjLCAweDRhLCAweGJlLCAweDM2LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCQkgMHhjNiwgMHhkYSwgMHhlOSwgMHgyNiwgMHhlYiwgMHgwMH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ4WzZdID0KIAkJCXsgMHhhOCwgMHhmMCwgMHhjNiwgMHg4OCwgMHhjMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuc2V0OF9vdGhlcls2XSA9CisJCQl7IDB4YTgsIDB4YTgsIDB4YzYsIDB4ZGEsIDB4YzAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggbnNldDlbNF0gPQorCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ5X290aGVyWzRdID0KKwkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHgwMCB9OwogCi0JYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNik7Ci0JdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDA3KSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3Igb202ODAyIik7CisJc2Vuc29yX2lkID0gKHJlZ19yKGdzcGNhX2RldiwgMHgwNikgPDwgOCkKKwkJCXwgcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKKwlzd2l0Y2ggKHNlbnNvcl9pZCAmIDB4ZmYwZikgeworCWNhc2UgMHgwODAxOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciB0YXM1MTMwYSIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOworCQlicmVhazsKKwljYXNlIDB4MDgwMzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgJ290aGVyJyIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX09USEVSOworCQlicmVhazsKKwljYXNlIDB4MDgwNzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3Igb202ODAyIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT002ODAyOwotCX0gZWxzZSBpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDAxKSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3IgdGFzNTEzMGEiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKLQl9IGVsc2UgewotCQlQREVCVUcoRF9DT05GLCAidW5rbm93biBzZW5zb3IgJTAyeCAlMDJ4IiwgYnl0ZSwgdGVzdF9ieXRlKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSfERfUFJPQkUsICJ1bmtub3duIHNlbnNvciAlMDR4Iiwgc2Vuc29yX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7Ci0JdGVzdF9ieXRlID0gMDsKLQlpID0gNTsKLQl3aGlsZSAoLS1pID49IDApIHsKLQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKLQkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOwotCQltc2xlZXAoMTAwKTsKLQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQotCQkJYnJlYWs7CQkvKiBPSyAqLwotCX0KLQlpZiAoaSA8IDApIHsKLQkJZXJyKCJCYWQgc2Vuc29yIHJlc2V0ICUwMngiLCB0ZXN0X2J5dGUpOwotLyoJCXJldHVybiAtRUlPOyAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMSwgc2l6ZW9mIG4xKTsKKwkJaSA9IDU7CisJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKKwkJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwkJCW1zbGVlcCgxMDApOworCQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQorCQkJCWJyZWFrOwkJLyogT0sgKi8KKwkJfQorCQlpZiAoaSA8IDApIHsKKwkJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKKy8qCQkJcmV0dXJuIC1FSU87ICovCiAvKmZpeG1lOiB0ZXN0IC0gY29udGludWUgKi8KKwkJfQorCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKIAl9Ci0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CiAKIAlpID0gMDsKIAl3aGlsZSAocmVhZF9pbmRleHNbaV0gIT0gMHgwMCkgewpAQCAtNjk5LDIxICs3MjMsMzEgQEAKIAkJaSsrOwogCX0KIAotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09USEVSKSB7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwODApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJCXJlZzgwID0gMHgzODgwOworCQlyZWc4ZSA9IDB4MzM4ZTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuM19vdGhlciwgc2l6ZW9mIG4zX290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjRfb3RoZXIsIHNpemVvZiBuNF9vdGhlcik7CisJCXNkLT5nYW1tYSA9IDU7CisJCXJlZzgwID0gMHhhYzgwOworCQlyZWc4ZSA9IDB4Yjg4ZTsKKwl9CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAogCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwotCXJlZ193KGdzcGNhX2RldiwgMHgzMzhlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzhlKTsKIAogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXRjb250cmFzdChnc3BjYV9kZXYpOwpAQCAtNzMwLDE2ICs3NjQsMjAgQEAKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ4LCBzaXplb2YgbnNldDgpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OF9vdGhlciwgc2l6ZW9mIG5zZXQ4X290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDlfb3RoZXIsIHNpemVvZiBuc2V0OV9vdGhlcik7CisJfQogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDI4ODApOwotCi0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCiAJcmV0dXJuIDA7CkBAIC03NDgsNyArNzg2LDcgQEAKIHN0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGZsaXBjbWRbOF0gPQorCXU4IGZsaXBjbWRbOF0gPQogCQl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX07CiAKIAlpZiAoc2QtPm1pcnJvcikKQEAgLTc3OCw3ICs4MTYsNyBAQAogc3RhdGljIHZvaWQgc2V0bGlnaHRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBmcmVxWzRdID0geyAweDY2LCAweDQwLCAweGE4LCAweGU4IH07CisJdTggZnJlcVs0XSA9IHsgMHg2NiwgMHg0MCwgMHhhOCwgMHhlOCB9OwogCiAJaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KIAkJZnJlcVsxXSA9IDB4MDA7CkBAIC03OTEsMjIgKzgyOSwyMiBAQAogc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMVtdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDFbXSA9CiAJCXsweDY3LCAweDA1LCAweDY4LCAweDgxLCAweDY5LCAweDgwLCAweDZhLCAweDgyLAogCQkgMHg2YiwgMHg2OCwgMHg2YywgMHg2OSwgMHg3MiwgMHhkOSwgMHg3MywgMHgzNCwKIAkJIDB4NzQsIDB4MzIsIDB4NzUsIDB4OTIsIDB4NzYsIDB4MDAsIDB4MDksIDB4MDEsCiAJCSAweDYwLCAweDE0fTsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMltdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDJbXSA9CiAJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAogCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDNbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGwzW10gPQogCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDRbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGw0W10gPQogCQl7MHhhNiwgMHgwYSwgMHhlYSwgMHhjZiwgMHhiZSwgMHgyNiwgMHhiMSwgMHg1ZiwKIAkJIDB4YTEsIDB4YjEsIDB4ZGEsIDB4NmIsIDB4ZGIsIDB4OTgsIDB4ZGYsIDB4MGMsCiAJCSAweGMyLCAweDgwLCAweGMzLCAweDEwfTsKIAotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9UQVM1MTMwQSkgeworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PTTY4MDIpIHsKIAkJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOwogCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKIAkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDIsIHNpemVvZiBwb2xsMik7CkBAIC04MTksMTMgKzg1NywxNCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgbW9kZTsKLQlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KLQkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAotCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKKwl1OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07CisJc3RhdGljIGNvbnN0IHU4IHQzW10gPQorCQl7IDB4MDcsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDYsIDB4MDAsIDB4ZTcsIDB4MDEgfTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0uIHByaXY7CiAJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgkJLyogNjQweDQ4MCAoMHgwMCkgKi8KKwkJYnJlYWs7CiAJY2FzZSAxOgkJLyogMzUyeDI4OCAqLwogCQl0MlsxXSA9IDB4NDA7CiAJCWJyZWFrOwpAQCAtODM1LDE0ICs4NzQsMjAgQEAKIAljYXNlIDM6CQkvKiAxNzZ4MTQ0ICovCiAJCXQyWzFdID0gMHg1MDsKIAkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogMTYweDEyMCAqLworCWRlZmF1bHQ6CisvKgljYXNlIDQ6CQkgKiAxNjB4MTIwICovCiAJCXQyWzFdID0gMHgyMDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoJLyogNjQweDQ4MCAoMHgwMCkgKi8KLQkJYnJlYWs7CiAJfQogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBBKSB7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT002ODAyOgorCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1RIRVI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9UQVM1MTMwQTogKi8KIAkJaSA9IDA7CiAJCXdoaWxlICh0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXVswXSAhPSAwKSB7CiAJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKQEAgLTg1NCwxNCArODk5LDEzIEBACiAJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLAogCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7Ci0JfSBlbHNlIHsKLQkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CisJCWJyZWFrOwogCX0KIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTIpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhiMywgdDMsIHNpemVvZiB0Myk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTMpOwogCW1zbGVlcCgxNSk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLApAQCAtODg1LDE2ICs5MjksMTggQEAKIAltc2xlZXAoMjApOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOwotCW1zbGVlcCgyMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQltc2xlZXAoMjApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwOSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7Ci0Jc3RhdGljIF9fdTggZmZkOVtdID0geyAweGZmLCAweGQ5IH07CisJc3RhdGljIHU4IGZmZDlbXSA9IHsgMHhmZiwgMHhkOSB9OwogCiAJaWYgKGRhdGFbMF0gPT0gMHg1YSkgewogCQkvKiBDb250cm9sIFBhY2tldCwgYWZ0ZXIgdGhpcyBjYW1lIHRoZSBoZWFkZXIgYWdhaW4sCkBAIC0xMTcyLDggKzEyMTgsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCmluZGV4IDk0MTYzY2MuLjlmMjQzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwpAQCAtMzEsNyArMzEsNiBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTE2IGNvbnRyYXN0OwogCiAJX191OCBwYWNrZXQ7CiB9OwpAQCAtMzksMzggKzM4LDIyIEBACiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIkJyaWdodG5lc3MiLAogCSAgLm1pbmltdW0gPSAxLAotCSAgLm1heGltdW0gPSAweDJmZiwKKwkgIC5tYXhpbXVtID0gMHgxNWYsCS8qID0gMzUyIC0gMSAqLwogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDE4ZiwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMHgxNGMKKwkgIC5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0NPTlRSQVNUIDEKLQl7Ci0JIHsKLQkgIC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiQ29udHJhc3QiLAotCSAgLm1pbmltdW0gPSAwLAotCSAgLm1heGltdW0gPSAweGZmZmYsCi0JICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4N2ZmZiwKLQkgIH0sCi0JIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKLQkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAotCSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKQEAgLTg2LDc4ICs2OSw2NCBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotLyoKLSAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCi0gKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KLSAqLwotI2RlZmluZSBURVNUQ0xLIDB4MTAJCS8qIHJlZyAweDJjIC0+IDB4MTIgLy8xMCAqLwotI2RlZmluZSBURVNUQ09NUCAweDkwCQkvKiByZWcgMHgyOCAtPiAweDgwICovCi0jZGVmaW5lIFRFU1RMSU5FIDB4ODEJCS8qIHJlZyAweDI5IC0+IDB4ODEgKi8KLSNkZWZpbmUgUUNJRkxJTkUgMHg0MQkJLyogcmVnIDB4MjkgLT4gMHg4MSAqLwotI2RlZmluZSBURVNUUFRMIDB4MTQJCS8qIHJlZyAweDJEIC0+IDB4MTQgKi8KLSNkZWZpbmUgVEVTVFBUSCAweDAxCQkvKiByZWcgMHgyRSAtPiAweDAxICovCi0jZGVmaW5lIFRFU1RQVEJMIDB4MTIJCS8qIHJlZyAweDJGIC0+IDB4MGEgKi8KLSNkZWZpbmUgVEVTVFBUQkggMHgwMQkJLyogcmVnIDB4MzAgLT4gMHgwMSAqLwotI2RlZmluZSBBRFdJRFRITCAweGU4CQkvKiByZWcgMHgwYyAtPiAweGU4ICovCi0jZGVmaW5lIEFEV0lEVEhIIDB4MDMJCS8qIHJlZyAweDBkIC0+IDB4MDMgKi8KLSNkZWZpbmUgQURIRUlHSEwgMHg5MAkJLyogcmVnIDB4MGUgLT4gMHg5MSAvLzkzICovCi0jZGVmaW5lIEFESEVJR0hIIDB4MDEJCS8qIHJlZyAweDBmIC0+IDB4MDEgKi8KLSNkZWZpbmUgRVhQT0wgMHg4ZgkJLyogcmVnIDB4MWMgLT4gMHg4ZiAqLwotI2RlZmluZSBFWFBPSCAweDAxCQkvKiByZWcgMHgxZCAtPiAweDAxICovCi0jZGVmaW5lIEFEQ0JFR0lOTCAweDQ0CQkvKiByZWcgMHgxMCAtPiAweDQ2IC8vNDcgKi8KLSNkZWZpbmUgQURDQkVHSU5IIDB4MDAJCS8qIHJlZyAweDExIC0+IDB4MDAgKi8KLSNkZWZpbmUgQURSQkVHSU5MIDB4MGEJCS8qIHJlZyAweDE0IC0+IDB4MGIgLy8weDBjICovCi0jZGVmaW5lIEFEUkJFR0lOSCAweDAwCQkvKiByZWcgMHgxNSAtPiAweDAwICovCi0jZGVmaW5lIFRWODUzMl9DTURfVVBEQVRFIDB4ODQKKy8qIFRWLTg1MzJBIChJQ001MzJBKSByZWdpc3RlcnMgKExFKSAqLworI2RlZmluZSBSMDBfUEFSVF9DT05UUk9MIDB4MDAKKyNkZWZpbmUJCUxBVEVOVF9DSEFOR0UJMHg4MAorI2RlZmluZQkJRVhQT19DSEFOR0UJMHgwNAorI2RlZmluZSBSMDFfVElNSU5HX0NPTlRST0xfTE9XIDB4MDEKKyNkZWZpbmUJCUNNRF9FRXByb21fT3BlbiAweDMwCisjZGVmaW5lCQlDTURfRUVwcm9tX0Nsb3NlIDB4MjkKKyNkZWZpbmUgUjAzX1RBQkxFX0FERFIgMHgwMworI2RlZmluZSBSMDRfV1RSQU1fREFUQV9MIDB4MDQKKyNkZWZpbmUgUjA1X1dUUkFNX0RBVEFfTSAweDA1CisjZGVmaW5lIFIwNl9XVFJBTV9EQVRBX0ggMHgwNgorI2RlZmluZSBSMDdfVEFCTEVfTEVOCTB4MDcKKyNkZWZpbmUgUjA4X1JBTV9XUklURV9BQ1RJT04gMHgwOAorI2RlZmluZSBSMENfQURfV0lEVEhMCTB4MGMKKyNkZWZpbmUgUjBEX0FEX1dJRFRISAkweDBkCisjZGVmaW5lIFIwRV9BRF9IRUlHSFRMCTB4MGUKKyNkZWZpbmUgUjBGX0FEX0hFSUdIVEgJMHgwZgorI2RlZmluZSBSMTBfQURfQ09MX0JFR0lOTCAweDEwCisjZGVmaW5lIFIxMV9BRF9DT0xfQkVHSU5IIDB4MTEKKyNkZWZpbmUJCU1JUlJPUgkJMHgwNAkvKiBbMTBdICovCisjZGVmaW5lIFIxNF9BRF9ST1dfQkVHSU5MIDB4MTQKKyNkZWZpbmUgUjE1X0FEX1JPV0JFR0lOSCAgMHgxNQorI2RlZmluZSBSMUNfQURfRVhQT1NFX1RJTUVMIDB4MWMKKyNkZWZpbmUgUjI4X1FVQU5UCTB4MjgKKyNkZWZpbmUgUjI5X0xJTkUJMHgyOQorI2RlZmluZSBSMkNfUE9MQVJJVFkJMHgyYworI2RlZmluZSBSMkRfUE9JTlQJMHgyZAorI2RlZmluZSBSMkVfUE9JTlRICTB4MmUKKyNkZWZpbmUgUjJGX1BPSU5UQgkweDJmCisjZGVmaW5lIFIzMF9QT0lOVEJICTB4MzAKKyNkZWZpbmUgUjMxX1VQRAkJMHgzMQorI2RlZmluZSBSMkFfSElHSF9CVURHRVQgMHgyYQorI2RlZmluZSBSMkJfTE9XX0JVREdFVAkweDJiCisjZGVmaW5lIFIzNF9WSUQJCTB4MzQKKyNkZWZpbmUgUjM1X1ZJREgJMHgzNQorI2RlZmluZSBSMzZfUElECQkweDM2CisjZGVmaW5lIFIzN19QSURICTB4MzcKKyNkZWZpbmUgUjM5X1Rlc3QxCTB4MzkJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjNCX1Rlc3QzCTB4M0IJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjgzX0FEX0lESAkweDgzCisjZGVmaW5lIFI5MV9BRF9TTE9QRVJFRyAweDkxCisjZGVmaW5lIFI5NF9BRF9CSVRDT05UUk9MIDB4OTQKIAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0FkZCAweDAzCi0jZGVmaW5lIFRWODUzMl9FRXByb21fRGF0YUwgMHgwNAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0RhdGFNIDB4MDUKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9EYXRhSCAweDA2Ci0jZGVmaW5lIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGggMHgwNwotI2RlZmluZSBUVjg1MzJfRUVwcm9tX1dyaXRlIDB4MDgKLSNkZWZpbmUgVFY4NTMyX1BBUlRfQ1RSTCAweDAwCi0jZGVmaW5lIFRWODUzMl9DVFJMIDB4MDEKLSNkZWZpbmUgVFY4NTMyX0NNRF9FRXByb21fT3BlbiAweDMwCi0jZGVmaW5lIFRWODUzMl9DTURfRUVwcm9tX0Nsb3NlIDB4MjkKLSNkZWZpbmUgVFY4NTMyX1VEUF9VUERBVEUgMHgzMQotI2RlZmluZSBUVjg1MzJfR1BJTyAweDM5Ci0jZGVmaW5lIFRWODUzMl9HUElPX09FIDB4M0IKLSNkZWZpbmUgVFY4NTMyX1JFUV9SZWdXcml0ZSAweDAyCi0jZGVmaW5lIFRWODUzMl9SRVFfUmVnUmVhZCAweDAzCi0KLSNkZWZpbmUgVFY4NTMyX0FEV0lEVEhfTCAweDBDCi0jZGVmaW5lIFRWODUzMl9BRFdJRFRIX0ggMHgwRAotI2RlZmluZSBUVjg1MzJfQURIRUlHSFRfTCAweDBFCi0jZGVmaW5lIFRWODUzMl9BREhFSUdIVF9IIDB4MEYKLSNkZWZpbmUgVFY4NTMyX0VYUE9TVVJFIDB4MUMKLSNkZWZpbmUgVFY4NTMyX1FVQU5UX0NPTVAgMHgyOAotI2RlZmluZSBUVjg1MzJfTU9ERV9QQUNLRVQgMHgyOQotI2RlZmluZSBUVjg1MzJfU0VUQ0xLIDB4MkMKLSNkZWZpbmUgVFY4NTMyX1BPSU5UX0wgMHgyRAotI2RlZmluZSBUVjg1MzJfUE9JTlRfSCAweDJFCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfTCAweDJGCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfSCAweDMwCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfTCAweDJBCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfSCAweDJCCi0jZGVmaW5lIFRWODUzMl9WSURfTCAweDM0Ci0jZGVmaW5lIFRWODUzMl9WSURfSCAweDM1Ci0jZGVmaW5lIFRWODUzMl9QSURfTCAweDM2Ci0jZGVmaW5lIFRWODUzMl9QSURfSCAweDM3Ci0jZGVmaW5lIFRWODUzMl9EZXZpY2VJRCAweDgzCi0jZGVmaW5lIFRWODUzMl9BRF9TTE9QRSAweDkxCi0jZGVmaW5lIFRWODUzMl9BRF9CSVRDVFJMIDB4OTQKLSNkZWZpbmUgVFY4NTMyX0FEX0NPTEJFR0lOX0wgMHgxMAotI2RlZmluZSBUVjg1MzJfQURfQ09MQkVHSU5fSCAweDExCi0jZGVmaW5lIFRWODUzMl9BRF9ST1dCRUdJTl9MIDB4MTQKLSNkZWZpbmUgVFY4NTMyX0FEX1JPV0JFR0lOX0ggMHgxNQotCi1zdGF0aWMgY29uc3QgX191MzIgdHZfODUzMl9lZXByb21fZGF0YVtdID0gewotLyoJYWRkCQlkYXRhTAkgICBkYXRhTQlkYXRhSCAqLwotCTB4MDAwMTAwMDEsIDB4MDEwMTgwMTEsIDB4MDIwNTAwMTQsIDB4MDMwNTAwMWMsCi0JMHgwNDBkMDAxZSwgMHgwNTA1MDAxZiwgMHgwNjA1MDUxOSwgMHgwNzA1MDExYiwKLQkweDA4MDUwOTFlLCAweDA5MGQ4OTJlLCAweDBhMDU4OTJmLCAweDBiMDUwZGQ5LAotCTB4MGMwNTA5ZjEsIDAKK3N0YXRpYyBjb25zdCB1OCBlZXByb21fZGF0YVtdWzNdID0geworLyoJZGF0YUggZGF0YU0gZGF0YUwgKi8KKwl7MHgwMSwgMHgwMCwgMHgwMX0sCisJezB4MDEsIDB4ODAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweDE0fSwKKwl7MHgwNSwgMHgwMCwgMHgxY30sCisJezB4MGQsIDB4MDAsIDB4MWV9LAorCXsweDA1LCAweDAwLCAweDFmfSwKKwl7MHgwNSwgMHgwNSwgMHgxOX0sCisJezB4MDUsIDB4MDEsIDB4MWJ9LAorCXsweDA1LCAweDA5LCAweDFlfSwKKwl7MHgwZCwgMHg4OSwgMHgyZX0sCisJezB4MDUsIDB4ODksIDB4MmZ9LAorCXsweDA1LCAweDBkLCAweGQ5fSwKKwl7MHgwNSwgMHgwOSwgMHhmMX0sCiB9OwogCiBzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE2NSw3ICsxMzQsNyBAQAogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1JlYWQsCisJCQkweDAzLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLAkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKQEAgLTE3NCwyNyArMTQzLDI3IEBACiB9CiAKIC8qIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgcmVnX3dfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfdzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbHVlOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOwogfQogCiAvKiB3cml0ZSAyIGJ5dGVzICovCi1zdGF0aWMgdm9pZCByZWdfd18yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCwgX191OCB2YWwxLCBfX3U4IHZhbDIpCitzdGF0aWMgdm9pZCByZWdfdzIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIHUxNiBpbmRleCwgdTE2IHZhbHVlKQogewotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDE7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsMjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWx1ZSA+PiA4OwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAyLCA1MDApOwpAQCAtMjAyLDMyICsxNzEsMTggQEAKIAogc3RhdGljIHZvaWQgdHZfODUzMldyaXRlRUVwcm9tKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgaSA9IDA7Ci0JX191OCByZWcsIGRhdGEwLCBkYXRhMSwgZGF0YTI7CisJaW50IGk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU8sIDB4YjApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fT3Blbik7Ci0vKgltc2xlZXAoMSk7ICovCi0Jd2hpbGUgKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0pIHsKLQkJcmVnID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweGZmMDAwMDAwKSA+PiAyNDsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fQWRkLCByZWcpOwotCQkvKiBtc2xlZXAoMSk7ICovCi0JCWRhdGEwID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweDAwMDAwMGZmKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YUwsIGRhdGEwKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMSA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMDAwZmYwMCkgPj4gODsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YU0sIGRhdGExKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMiA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0RhdGFILCBkYXRhMik7Ci0JCS8qIG1zbGVlcCgxKTsgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fV3JpdGUsIDApOwotCQkvKiBtc2xlZXAoMTApOyAqLwotCQlpKys7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9PcGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlZXByb21fZGF0YSk7IGkrKykgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDNfVEFCTEVfQUREUiwgaSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwNF9XVFJBTV9EQVRBX0wsIGVlcHJvbV9kYXRhW2ldWzJdKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjA1X1dUUkFNX0RBVEFfTSwgZWVwcm9tX2RhdGFbaV1bMV0pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDZfV1RSQU1fREFUQV9ILCBlZXByb21fZGF0YVtpXVswXSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwOF9SQU1fV1JJVEVfQUNUSU9OLCAwKTsKIAl9Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGgsIGkpOwotLyoJbXNsZWVwKDEpOyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOworCXJlZ193MShnc3BjYV9kZXYsIFIwN19UQUJMRV9MRU4sIGkpOworCXJlZ193MShnc3BjYV9kZXYsIFIwMV9USU1JTkdfQ09OVFJPTF9MT1csIENNRF9FRXByb21fQ2xvc2UpOwogCW1zbGVlcCgxMCk7CiB9CiAKQEAgLTIzOCw3OSArMTkzLDc2IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAotCXR2Xzg1MzJXcml0ZUVFcHJvbShnc3BjYV9kZXYpOwotCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMTsKIAljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBzaXplb2Ygc2lmX21vZGUgLyBzaXplb2Ygc2lmX21vZGVbMF07CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIAotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyUmVhZFJlZ2lzdGVycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JX191OCBkYXRhOworCWludCBpOworCXN0YXRpYyB1OCByZWdfdGJbXSA9IHsKKwkJUjBDX0FEX1dJRFRITCwKKwkJUjBEX0FEX1dJRFRISCwKKwkJUjI4X1FVQU5ULAorCQlSMjlfTElORSwKKwkJUjJDX1BPTEFSSVRZLAorCQlSMkRfUE9JTlQsCisJCVIyRV9QT0lOVEgsCisJCVIyRl9QT0lOVEIsCisJCVIzMF9QT0lOVEJILAorCQlSMkFfSElHSF9CVURHRVQsCisJCVIyQl9MT1dfQlVER0VULAorCQlSMzRfVklELAorCQlSMzVfVklESCwKKwkJUjM2X1BJRCwKKwkJUjM3X1BJREgsCisJCVI4M19BRF9JREgsCisJCVIxMF9BRF9DT0xfQkVHSU5MLAorCQlSMTFfQURfQ09MX0JFR0lOSCwKKwkJUjE0X0FEX1JPV19CRUdJTkwsCisJCVIxNV9BRF9ST1dCRUdJTkgsCisJCTAKKwl9OwogCi0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAxKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMS0+ICV4IiwgZGF0YSk7Ci0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAyKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMi0+ICV4IiwgZGF0YSk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVApOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VUKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEspOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQlVER0VUX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0JVREdFVF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9WSURfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfVklEX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BJRF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QSURfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfRGV2aWNlSUQpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0gpOworCWkgPSAwOworCWRvIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCByZWdfdGJbaV0pOworCQlpKys7CisJfSB3aGlsZSAocmVnX3RiW2ldICE9IDApOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX3NldFJlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9MLAotCQkJQURDQkVHSU5MKTsJCQkvKiAweDEwICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9ILAotCQkJQURDQkVHSU5IKTsJCQkvKiBhbHNvIGRpZ2l0YWwgZ2FpbiAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxMF9BRF9DT0xfQkVHSU5MLCAweDQ0KTsKKwkJCQkJCS8qIGJlZ2luIGFjdGl2ZSBsaW5lICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjExX0FEX0NPTF9CRUdJTkgsIDB4MDApOworCQkJCQkJLyogbWlycm9yIGFuZCBkaWdpdGFsIGdhaW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogPSAweDg0ICovCiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGEpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYSk7CS8qIFRlc3QwU2VsID0gMTAgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfTCwgQURIRUlHSEwpOyAvKiAwZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfSCwgQURIRUlHSEgpOyAvKiAwZiAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCi0JCQlFWFBPTCwgRVhQT0gpOwkJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fTCwKLQkJCUFEQ0JFR0lOTCk7CQkJLyogMHgxMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fSCwKLQkJCUFEQ0JFR0lOSCk7CQkJLyogYWxzbyBkaWdpdGFsIGdhaW4gKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wsCi0JCQlBRFJCRUdJTkwpOwkJCS8qIDB4MTQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHg5MCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjBGX0FEX0hFSUdIVEgsIDB4MDEpOworCXJlZ193Mihnc3BjYV9kZXYsIFIxQ19BRF9FWFBPU0VfVElNRUwsIDB4MDE4Zik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjEwX0FEX0NPTF9CRUdJTkwsIDB4NDQpOworCQkJCQkJLyogYmVnaW4gYWN0aXZlIGxpbmUgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMTFfQURfQ09MX0JFR0lOSCwgMHgwMCk7CisJCQkJCQkvKiBtaXJyb3IgYW5kIGRpZ2l0YWwgZ2FpbiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxNF9BRF9ST1dfQkVHSU5MLCAweDBhKTsKIAotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MDApOwkvKiAweDkxICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAyKTsJLyogMHg5NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDIpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9DVFJMLAotCQkJVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOwkvKiAweDAxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9DbG9zZSk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDAwKTsJLyogMHg5MSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qID0gMHg4NCAqLwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX1BvbGxSZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMzE5LDU0ICsyNzEsNTUgQEAKIAogCS8qIHN0cmFuZ2UgcG9sbGluZyBmcm9tIHRnYyAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLLAotCQkJVEVTVENMSyk7CQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMkNfUE9MQVJJVFksIDB4MTApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLAorCQkJCUxBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwogCX0KIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MzIpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMCk7CisJdHZfODUzMldyaXRlRUVwcm9tKGdzcGNhX2Rldik7CisKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAorCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKIAl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7Ci0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9BREhFSUdIVF9MLCBBREhFSUdITCwKLQkJCQlBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsIEVYUE9MLAotCQkJCUVYUE9IKTsJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MLCBBRFdJRFRITCk7CS8qIDB4MjA7IDB4MGMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfSCwgQURXSURUSEgpOwkvKiAweDBkICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCAweDAxOGYpOworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QLAotCQkJVEVTVENPTVApOwkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVRFU1RMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyOF9RVUFOVCwgMHg5MCk7CisJCQkJCS8qIG5vIGNvbXByZXNzIC0gZml4ZWQgUSAtIHF1YW50IDAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg4MSk7CisJCQkJCS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEssCi0JCQlURVNUQ0xLKTsJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfTCwKLQkJCVRFU1RQVEwpOwkJLyogMHgzODsgMHgyZCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfSCwKLQkJCVRFU1RQVEgpOwkJLyogMHgwNDsgMHgyZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0wsCi0JCQlURVNUUFRCTCk7CQkvKiAweDA0OyAweDJmICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCwKLQkJCVRFU1RQVEJIKTsJCS8qIDB4MDQ7IDB4MzAgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyQ19QT0xBUklUWSwgMHgxMCk7CisJCQkJCQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCQkJCQkJLyogMHgzODsgMHgyZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCQkJCQkJLyogMHgwNDsgMHgyZSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCQkJCQkJLyogMHgwNDsgMHgyZiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwkJCQkJCS8qIDB4MDQ7IDB4MzAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogMHgwMDwtMHg4NCAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMSk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAxKTsJLyogdXBkYXRlIHJlZ2lzdGVycyAqLwogCW1zbGVlcCgyMDApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzc3LDExICszMzAsMTAgQEAKIHN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwogCi0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJYnJpZ2h0bmVzcyA+PiA4LCBicmlnaHRuZXNzKTsJCS8qIDFjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCBzZC0+YnJpZ2h0bmVzcyk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qIDB4ODQgKi8KIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwpAQCAtMzg5LDU3ICszNDEsNTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDMyKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0JJVENUUkwsIDB4MDApOworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgzMik7CS8qIHNsb3BlIGJlZ2luIDEsN1YsCisJCQkJCQkJICogc2xvcGUgcmF0ZSAyICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDApOwogCXR2Xzg1MzJSZWFkUmVnaXN0ZXJzKGdzcGNhX2Rldik7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBiKTsKLQlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0wsCi0JCUFESEVJR0hMLCBBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotLyoJcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJRVhQT0wsIEVYUE9IKTsJCSAqIDM1MGQgMHgwMTRjOyAxYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CisKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOwkJLyogMHgyMDsgMHgwYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVAsCi0JCQlURVNUQ09NUCk7CS8qIDB4NzIgY29tcHJlc3NlZCBtb2RlIDB4MjggKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjhfUVVBTlQsIDB4OTApOworCQkJCQkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CiAJCS8qIDE3NngxNDQgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVFDSUZMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg0MSk7CisJCQkJCS8qIENJRiAtIDIgbGluZXMvcGFja2V0ICovCiAJfSBlbHNlIHsKIAkJLyogMzUyeDI4OCAqLwotCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VULAotCQkJVEVTVExJTkUpOwkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCisJCXJlZ193MShnc3BjYV9kZXYsIFIyOV9MSU5FLCAweDgxKTsKKwkJCQkJLyogQ0lGIC0gMiBsaW5lcy9wYWNrZXQgKi8KIAl9CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1NFVENMSywKLQkJCVRFU1RDTEspOwkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MLAotCQkJVEVTVFBUTCk7CQkvKiAweDM4OyAweDJkICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9ILAotCQkJVEVTVFBUSCk7CQkvKiAweDA0OyAweDJlICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCwKLQkJCVRFU1RQVEJMKTsJCS8qIDB4MDQ7IDB4MmYgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9ILAotCQkJVEVTVFBUQkgpOwkJLyogMHgwNDsgMHgzMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkvKiAweDAwPC0weDg0ICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjJDX1BPTEFSSVRZLCAweDEwKTsJCS8qIHNsb3cgY2xvY2sgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwkvKiB1cGRhdGUgcmVnaXN0ZXJzICovCiAJbXNsZWVwKDIwMCk7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDApOwkJLyogZW5kIHVwZGF0ZSAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDApOwkvKiAweDMxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMCk7CS8qIGVuZCB1cGRhdGUgKi8KIAogCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gMDsJCS8qIGNoZWNrIHRoZSBlbXB0eSBwYWNrZXRzICovCiAJc2QtPnBhY2tldCA9IDA7CQkJCS8qIGlnbm9yZSB0aGUgZmlyc3QgcGFja2V0cyAqLwpAQCAtNDQ5LDcgKzM5NCw3IEBACiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCiB9CiAKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTQ3Myw5ICs0MTgsOSBAQAogCiAJLyogZWFjaCBwYWNrZXQgY29udGFpbnM6CiAJICogLSBoZWFkZXIgMiBieXRlcwotCSAqIC0gUkcgbGluZQorCSAqIC0gUkdSRyBsaW5lCiAJICogLSA0IGJ5dGVzCi0JICogLSBHQiBsaW5lCisJICogLSBHQkdCIGxpbmUKIAkgKiAtIDQgYnl0ZXMKIAkgKi8KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZTAsCkBAIC00ODQsMTAgKzQyOSw2IEBACiAJCQlmcmFtZSwgZGF0YSArIGdzcGNhX2Rldi0+d2lkdGggKyA2LCBnc3BjYV9kZXYtPndpZHRoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNTA2LDI0ICs0NDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+Y29udHJhc3Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01NzAsOCArNDkzLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCAwNTI1ZWE1Li40YzgwMmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTM3LDE4ICszNywyMSBAQAogCV9fdTggbGlnaHRmcmVxOwogCV9fdTggc2hhcnBuZXNzOwogCisJdTggaW1hZ2Vfb2Zmc2V0OworCiAJY2hhciBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9WQzAzMjEgMAogI2RlZmluZSBCUklER0VfVkMwMzIzIDEKIAljaGFyIHNlbnNvcjsKICNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAogI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKLSNkZWZpbmUgU0VOU09SX01JMTMyMCAyCi0jZGVmaW5lIFNFTlNPUl9NSTEzMTBfU09DIDMKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA0Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NzAgNQotI2RlZmluZSBTRU5TT1JfUE8xMjAwIDYKLSNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDcKKyNkZWZpbmUgU0VOU09SX01JMTMxMF9TT0MgMgorI2RlZmluZSBTRU5TT1JfTUkxMzIwIDMKKyNkZWZpbmUgU0VOU09SX01JMTMyMF9TT0MgNAorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDUKKyNkZWZpbmUgU0VOU09SX09WNzY3MCA2CisjZGVmaW5lIFNFTlNPUl9QTzEyMDAgNworI2RlZmluZSBTRU5TT1JfUE8zMTMwTkMgOAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMTQ5LDggKzE1Miw1MCBAQAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCiAJCS5wcml2ID0gMH0sCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsIC8qIG1pMTN4MF9zb2Mgb25seSAqLworCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMSAvIDQgKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCiB9OwotCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBiaV9tb2RlW10gPSB7CisvKmZpeG1lOiBqZWcgZG9lcyBub3Qgd29yaworCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDV9LAorKi8KKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDR9LAorLyoKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAzfSwKKyovCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKy8qCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAxIC8gNCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKyovCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHN2Z2FfbW9kZVtdID0gewogCXs4MDAsIDYwMCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDgwMCwKQEAgLTQwMCw5MiArNDQ1LDIwOCBAQAogc3RhdGljIGNvbnN0IF9fdTggbWkxMzEwX3NvY2luaXRWR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAotCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAogCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjIsIDB4MDMsIDB4Y2N9LAotCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDAwLCAweGQwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweGM4LCAweDlmLCAweDBiLCAweGJifSwKLQl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4MDgsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCi0JezB4MzQsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDM1LCAweGZmLCAweDAwLCAweGJifSwKLQl7MHhkYywgMHgwNywgMHgwMiwgMHhiYn0sCi0JezB4ZGQsIDB4M2MsIDB4MTgsIDB4YmJ9LAotCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCi0JezB4ZTAsIDB4ZmYsIDB4ZTcsIDB4YmJ9LAotCXsweDA2LCAweGYwLCAweDBkLCAweGJifSwKLQl7MHgwNiwgMHg3MCwgMHgwZSwgMHhiYn0sCi0JezB4NGMsIDB4MDAsIDB4MDEsIDB4YmJ9LAotCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MmUsIDB4MGMsIDB4NTUsIDB4YmJ9LAotCXsweDIxLCAweGI2LCAweDZlLCAweGJifSwKLQl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCi0JezB4MDgsIDB4MDIsIDB4NGEsIDB4YmJ9LAotCXsweDA1LCAweDAxLCAweDEwLCAweGJifSwKLQl7MHgwNiwgMHgwMCwgMHgzOSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCi0JezB4NWEsIDB4MDIsIDB4NjcsIDB4YmJ9LAotCXsweDU5LCAweDAyLCAweDAwLCAweGJifSwKLQl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCi0JezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAotCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2IsIDB4MDYsIDB4MTgsIDB4YmJ9LAotCXsweDNjLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHg2NCwgMHg3YiwgMHg1YiwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCi0JezB4YmMsIDB4MGUsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDBmLCAweDA1LCAweGNjfSwKLQl7MHhiYywgMHgxMCwgMHhjMCwgMHhjY30sCi0JezB4YmMsIDB4MTEsIDB4MDMsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgyYiwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4MmMsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJkLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZSwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4NDEsIDB4MDAsIDB4ZDcsIDB4YmJ9LAorCXsweDA5LCAweDAyLCAweDNhLCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAwLCAweDhjLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgzMiwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4YzYsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDE5LCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHg2ZiwgMHhiYn0sCisJezB4YzgsIDB4MDAsIDB4MGYsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDBmLCAweGJifSwKIAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCiAJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAogCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKIAl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCiAJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAotCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKLQl7MHhiNiwgMHgxMywgMHgyNSwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAogCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKIAl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCiAJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKIAl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKIAl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCi0JezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDEwLCAweGNjfSwKKwl7MHhiOSwgMHgxMiwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTMsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE0LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNSwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTYsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDEwLCAweGJifSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4MmYsIDB4MDAsIDB4QzAsIDB4YmJ9LAorCXsweGI4LCAweGEwLCAweDEyLCAweGNjfSwKKwl7fSwKK307CitzdGF0aWMgY29uc3QgX191OCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHg3OCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MGYsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCiAJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAogCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKIAl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCkBAIC00OTYsMTMxICs2NTcsMTIzIEBACiAJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAogCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKIAl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCi0JezB4ODEsIDB4YzcsIDB4MTQsIDB4YmJ9LAotCXsweDgyLCAweGViLCAweGU4LCAweGJifSwKLQl7MHg4MywgMHhmZSwgMHhmNCwgMHhiYn0sCi0JezB4ODQsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCi0JezB4ODcsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg4LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4OSwgMHgwMSwgMHhmMSwgMHhiYn0sCi0JezB4OGEsIDB4ZTUsIDB4MTcsIDB4YmJ9LAotCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCi0JezB4OGQsIDB4MDAsIDB4ZmYsIDB4YmJ9LAotCXsweDhlLCAweGVjLCAweDEwLCAweGJifSwKLQl7MHg4ZiwgMHhmMCwgMHhlZCwgMHhiYn0sCi0JezB4OTAsIDB4ZjksIDB4ZjIsIDB4YmJ9LAotCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCi0JezB4OTMsIDB4ZjQsIDB4ZjIsIDB4YmJ9LAotCXsweDk0LCAweGZiLCAweGY1LCAweGJifSwKLQl7MHg5NSwgMHgwMCwgMHhmZiwgMHhiYn0sCi0JezB4YjYsIDB4MGYsIDB4MDgsIDB4YmJ9LAotCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCi0JezB4YjksIDB4MWMsIDB4MDcsIDB4YmJ9LAotCXsweGJhLCAweDBhLCAweDAzLCAweGJifSwKLQl7MHhiYiwgMHgxYiwgMHgwOSwgMHhiYn0sCi0JezB4YmMsIDB4MTcsIDB4MGQsIDB4YmJ9LAotCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCi0JezB4YmYsIDB4MTEsIDB4MDksIDB4YmJ9LAotCXsweGMwLCAweDE2LCAweDE1LCAweGJifSwKLQl7MHhjMSwgMHgwMCwgMHgxYiwgMHhiYn0sCi0JezB4YzIsIDB4MGUsIDB4MDcsIDB4YmJ9LAotCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCi0JezB4MDYsIDB4NzQsIDB4OGUsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNiwgMHhmNCwgMHg4ZSwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAotCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MjQsIDB4NTAsIDB4MjAsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHgzNCwgMHgwYywgMHg1MCwgMHhiYn0sCiAJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKIAl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTAsIDB4YmJ9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAogCXt9LAogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0UVZHQV9KUEdbXVs0XSA9IHsKLQl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKLQl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCXsweGJjLCAweDAwLCAweGYwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgyZiwgMHhkZSwgMHgyMCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKLQl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKLQl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKLQl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKLQl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKLQl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKLQl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKLQl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKLQl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKLQl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKLQl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKLQl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI1LCAweGNjfSwKLQl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKLQl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKLQl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKLQl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKLQl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKLQl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKLQl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKLQl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKLQl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKLQl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKLQl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKLQl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKLQl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKLQl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKLQl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKLQl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDA2LCAweGY0LCAweDhlLCAweGJifSwKLQl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKLQl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCi0Je30sCitzdGF0aWMgY29uc3QgdTggbWkxMzEwX3NvY19Jbml0U1hHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwZCwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCisJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKKwl7MHhiOCwgMHgyNiwgMHg4MCwgMHhjY30sCisJezB4YjgsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDA3LCAweDA1LCAweGNjfSwKKwl7MHhiOCwgMHgwOCwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDksIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMSwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwMywgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDA1LCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDQsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MGEsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgxNCwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MTQsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MWUsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDFlLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgxZSwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MWUsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAorCXt9CiB9OwogCiBzdGF0aWMgY29uc3QgX191OCBtaTEzMjBfZ2FtbWFbMTddID0gewpAQCAtNzc4LDYgKzkzMSw3MjIgQEAKIAl7fQogfTsKIAorc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFZHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGM4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNywgMHgwMCwgMHhlMCwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MGIsIDB4YmJ9LAorCXsweDIxLCAweDAwLCAweDBjLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDAyLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDU4LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhjOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4MDcsIDB4MDAsIDB4ZTAsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDBiLCAweGJifSwKKwl7MHgyMSwgMHgwMCwgMHgwYywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGJjLCAweDAyLCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCisJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDgsIDB4MzAsIDB4Y2N9LAorCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwKKwl7MHhiYywgMHgwYSwgMHgxMCwgMHhjY30sCisJezB4YmMsIDB4MGIsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZjAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDMsIDB4NTAsIDB4Y2N9LAorCXsweGJjLCAweDA0LCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCisJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAorCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRTWEdBX0pQR1tdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDA0LCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDI5LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwYSwgMHhjY30sCisJezB4YjYsIDB4MTcsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCisJezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDFiLCAweGJifSwKKwl7MHgzYiwgMHgwMCwgMHg5NSwgMHhiYn0sCisJezB4M2MsIDB4MDQsIDB4ZGIsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NiwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDMzLCAweGJifSwKKwl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCisJezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAorCXsweDY0LCAweDVlLCAweDFjLCAweGJifSwKKwl7MHgyZiwgMHg5MCwgMHgwMCwgMHhiYn0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX3NvY19Jbml0U1hHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMSwgMHg0MiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweGNhLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAorCXsweDNjLCAweDA1LCAweDQwLCAweGJifSwKKwl7MHg1NywgMHgwMSwgMHg5YywgMHhiYn0sCisJezB4NTgsIDB4MDEsIDB4ZWUsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGYwLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAorCXsweDVkLCAweDIyLCAweDFjLCAweGJifSwKKwl7MHg2NCwgMHgxZSwgMHgxYywgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyMiwgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjMsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDI0LCAweDdmLCAweDAwLCAweGJifSwKKwl7MHgyOCwgMHhlYSwgMHgwMiwgMHhiYn0sCisJezB4MjksIDB4ODYsIDB4N2EsIDB4YmJ9LAorCXsweDVlLCAweDUyLCAweDRjLCAweGJifSwKKwl7MHg1ZiwgMHgyMCwgMHgyNCwgMHhiYn0sCisJezB4NjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAyLCAweDAwLCAweGVlLCAweGJifSwKKwl7MHgwMywgMHgzOSwgMHgyMywgMHhiYn0sCisJezB4MDQsIDB4MDcsIDB4MjQsIDB4YmJ9LAorCXsweDA5LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHgwYSwgMHgwMCwgMHg3OSwgMHhiYn0sCisJezB4MGIsIDB4MDAsIDB4MDQsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDVjLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHhkOSwgMHhiYn0sCisJezB4MGUsIDB4MDAsIDB4NTMsIDB4YmJ9LAorCXsweDBmLCAweDAwLCAweDIxLCAweGJifSwKKwl7MHgxMCwgMHgwMCwgMHhhNCwgMHhiYn0sCisJezB4MTEsIDB4MDAsIDB4ZTUsIDB4YmJ9LAorCXsweDE1LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTcsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFiLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFlLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZTAsIDB4MGUsIDB4YmJ9LAorCXsweDA2LCAweDYwLCAweDBlLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDEzLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHgwZCwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4MWIsIDB4YmJ9LAorCXsweDNiLCAweDAwLCAweDk1LCAweGJifSwKKwl7MHgzYywgMHgwNCwgMHhkYiwgMHhiYn0sCisJezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDU4LCAweDAyLCAweDY2LCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MzMsIDB4YmJ9LAorCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCisJezB4NjQsIDB4NWUsIDB4MWMsIDB4YmJ9LAorCXt9Cit9Owogc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX2dhbW1hWzE3XSA9IHsKIAkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAogCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKQEAgLTE3NjQsMjYgKzI2MzMsNDMgQEAKIH07CiAKIHN0cnVjdCBzZW5zb3JfaW5mbyB7Ci0JaW50IHNlbnNvcklkOwotCV9fdTggSTJjQWRkOwotCV9fdTggSWRBZGQ7Ci0JX191MTYgVnBJZDsKLQlfX3U4IG0xOwotCV9fdTggbTI7Ci0JX191OCBvcDsKLQl9OworCXM4IHNlbnNvcklkOworCXU4IEkyY0FkZDsKKwl1OCBJZEFkZDsKKwl1MTYgVnBJZDsKKwl1OCBtMTsKKwl1OCBtMjsKKwl1OCBvcDsKK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewogLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCi0Je1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODIsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODMsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCiAJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweGM4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAotCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiAJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKIC8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KIC8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisJey0xLAkJICAgIDB4ODAgfCAweDQwLCAweDAwLCAweDAwMDAsIDB4MjAsIDB4MjIsIDB4MDV9LAorCXtTRU5TT1JfT1Y3NjYwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY2MCwgMHgyNiwgMHgyNiwgMHgwNX0sCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sICovCisJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAogCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisJey0xLAkJICAgIDB4ODAgfCAweDJkLCAweDAwLCAweDAwMDAsIDB4NjUsIDB4NjcsIDB4MDF9LAorCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjBfU09DLCAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY3LCAweDAxfSwKKy8qZml4bWU6IHByZXZpb3VzbHkgZGV0ZWN0ZWQ/Ki8KKwl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAorLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyovCisJe1NFTlNPUl9PVjc2NzAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjczLCAweDY2LCAweDY3LCAweDA1fSwKIH07CiAKIC8qIHJlYWQgJ2xlbicgYnl0ZXMgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xODE0LDUxICsyNzAwLDQ5IEBACiAJCQk1MDApOwogfQogCi1zdGF0aWMgdm9pZCByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJX191MTYgYWRkcmVzcywgX191MTYgKnZhbHVlKQorc3RhdGljIHUxNiByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJdTE2IGFkZHJlc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggbGRhdGEsIG1kYXRhLCBoZGF0YTsKKwl1OCBsZGF0YSwgbWRhdGEsIGhkYXRhOwogCWludCByZXRyeSA9IDUwOwogCi0JKnZhbHVlID0gMDsKLQogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNmLCAxKTsKLQkvKlBERUJVRyhEX1BST0JFLCAiIEkyYyBCdXMgQnVzeSBXYWl0ICAweCUwMlggIiwgdG1wdmFsdWUpOyAqLwogCWlmICghKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICVkIiwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpOwotCQlyZXR1cm47CisJCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICUwMngiLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJlZ193KGRldiwgMHhhMCwgYWRkcmVzcywgMHhiMzNhKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzOSk7CiAKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0Jd2hpbGUgKHJldHJ5LS0gJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKSB7CisJZG8gewogCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0vKgkJUERFQlVHKERfUFJPQkUsICJSZWFkIGFnYWluIDB4YjMzYiAlZCIsIHRtcHZhbHVlKTsgKi8KLQkJbXNsZWVwKDEpOwotCX0KKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCg0MCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+PSAwKTsKKwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNlLCAxKTsKIAlsZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZCwgMSk7CiAJbWRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2MsIDEpOwogCWhkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCVBERUJVRyhEX1BST0JFLCAiUmVhZCBTZW5zb3IgJTAyeCUwMnggJTAyeCIsCi0JCWhkYXRhLCBtZGF0YSwgbGRhdGEpOworCWlmIChoZGF0YSAhPSAwICYmIG1kYXRhICE9IDAgJiYgbGRhdGEgIT0gMCkKKwkJUERFQlVHKERfUFJPQkUsICJSZWFkIFNlbnNvciAlMDJ4JTAyeCAlMDJ4IiwKKwkJCWhkYXRhLCBtZGF0YSwgbGRhdGEpOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzM0LCAxKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDB4MDIpCi0JCSp2YWx1ZSA9IChoZGF0YSA8PCA4KSArIG1kYXRhOwotCWVsc2UKLQkJKnZhbHVlID0gaGRhdGE7CisJCXJldHVybiAoaGRhdGEgPDwgOCkgKyBtZGF0YTsKKwlyZXR1cm4gaGRhdGE7CiB9CiAKIHN0YXRpYyBpbnQgdmMwMzJ4X3Byb2JlX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTE2IHZhbHVlOworCXUxNiB2YWx1ZTsKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7CkBAIC0xODcyLDQ4ICsyNzU2LDUxIEBACiAJCXJlZ193KGRldiwgMHhhMCwgMHgwYywgMHhiMzA5KTsKIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5JMmNBZGQsIDB4YjMzNSk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+b3AsIDB4YjMwMSk7Ci0JCXJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQsICZ2YWx1ZSk7Ci0JCWlmICh2YWx1ZSA9PSBwdHNlbnNvcl9pbmZvLT5WcElkKQotCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOworCQl2YWx1ZSA9IHJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQpOworCQlpZiAodmFsdWUgPT0gMCAmJiBwdHNlbnNvcl9pbmZvLT5JZEFkZCA9PSAweDgyKQorCQkJdmFsdWUgPSByZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIDB4ODMpOworCQlpZiAodmFsdWUgIT0gMCkgeworCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJTZW5zb3IgSUQgJTA0eCAoJWQpIiwKKwkJCQl2YWx1ZSwgaSk7CisJCQlpZiAodmFsdWUgPT0gcHRzZW5zb3JfaW5mby0+VnBJZCkKKwkJCQlyZXR1cm4gcHRzZW5zb3JfaW5mby0+c2Vuc29ySWQ7CiAKLQkJLyogc3BlY2lhbCBjYXNlIGZvciBNSTAzNjAgKi8KLQkJaWYgKHB0c2Vuc29yX2luZm8tPnNlbnNvcklkID09IFNFTlNPUl9NSTEzMTBfU09DCi0JCSAgICAmJiB2YWx1ZSA9PSAweDgyNDMpCi0JCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKKwkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgMHg3NjczOgorCQkJCXJldHVybiBTRU5TT1JfT1Y3NjcwOworCQkJY2FzZSAweDgyNDM6CisJCQkJcmV0dXJuIFNFTlNPUl9NSTAzNjA7CisJCQl9CisvKmZpeG1lOiBzaG91bGQgcmV0dXJuIGhlcmUqLworCQl9CiAJfQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIF9fdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTggcmVnLCBjb25zdCBfX3U4ICp2YWwsIF9fdTggc2l6ZSkKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcsIGNvbnN0IHU4ICp2YWwsCisJCQl1OCBzaXplKQkJLyogMSBvciAyICovCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXRyeTsKIAotCWlmIChzaXplID4gMyB8fCBzaXplIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2YsIDEpOworLypmaXhtZTpzaG91bGQgY2hlY2sgaWYgKCEoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICYgMHgwMikpIGVycm9yKi8KIAlyZWdfdyhkZXYsIDB4YTAsIHNpemUsIDB4YjMzNCk7CiAJcmVnX3coZGV2LCAweGEwLCByZWcsIDB4YjMzYSk7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlpZiAoc2l6ZSA+IDEpCiAJCXJlZ193KGRldiwgMHhhMCwgdmFsWzFdLCAweGIzMzcpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXJlZ193KGRldiwgMHhhMCwgdmFsWzBdLCAweGIzMzYpOwotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMl0sIDB4YjMzOCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM5KTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwOworCXJldHJ5ID0gNDsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNiLCAxKTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgyMCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+IDApOworCWlmIChyZXRyeSA8PSAwKQorCQlQREVCVUcoRF9FUlIsICJpMmNfd3JpdGUgZmFpbGVkIik7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90YWJfdG9fcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE5MzgsNyArMjgyNSw3IEBACiAJCQlyZXR1cm47CiAJCWNhc2UgMHhjYzoJCQkvKiBub3JtYWwgd3JpdGUgKi8KIAkJCXJlZ193KGRldiwgMHhhMCwgZGF0YVtpXVsyXSwKLQkJCQkJKChkYXRhW2ldWzBdKTw8OCkgfCBkYXRhW2ldWzFdKTsKKwkJCQkJKGRhdGFbaV1bMF0pIDw8IDggfCBkYXRhW2ldWzFdKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4YWE6CQkJLyogaTJjIG9wICovCiAJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBkYXRhW2ldWzFdLCAmZGF0YVtpXVsyXSwgMSk7CkBAIC0xOTU1LDE5ICsyODQyLDYgQEAKIAkvKm5vdCByZWFjaGVkKi8KIH0KIAotLyoKLSAiR2FtbWFUIj1oZXg6MDQsMTcsMzEsNGYsNmEsODMsOTksYWQsYmYsY2UsZGEsZTUsZWUsZjUsZmIsZmYsZmYKLSAiTWF0cml4VCI9aGV4OjYwLGY5LGU1LGU3LDUwLDA1LGYzLGU2LDY2Ci0gKi8KLQotc3RhdGljIHZvaWQgdmMwMzIxX3Jlc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMDRkKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKLQltc2xlZXAoMTAwKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMDAzKTsKLQltc2xlZXAoMTAwKTsKLX0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTk3OSwxMCArMjg1Myw3IEBACiAJaW50IHNlbnNvcjsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQotCXZjMDMyMV9yZXNldChnc3BjYV9kZXYpOwogCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNlbnNvcikgewogCWNhc2UgLTE6CkBAIC0yMDAxLDYgKzI4NzIsOSBAQAogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjAiKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjBfU09DIik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NjAiKTsKIAkJYnJlYWs7CkBAIC0yMDIwLDEyICsyODk0LDIzIEBACiAJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjFfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyMV9tb2RlKTsKIAl9IGVsc2UgewotCQlpZiAoc2Vuc29yICE9IFNFTlNPUl9QTzEyMDApIHsKLQkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKLQkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSk7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaCAoc2Vuc29yKSB7CisJCWNhc2UgU0VOU09SX1BPMTIwMDoKIAkJCWNhbS0+Y2FtX21vZGUgPSBzdmdhX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc3ZnYV9tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IHZjMDMyM19tb2RlOworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyM19tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IGJpX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYmlfbW9kZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSkgLSAxOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTIwNjEsNyArMjk0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCB0aW1lICovCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJcmV0dXJuIDA7CkBAIC0yMTI0LDkgKzMwMDksMTggQEAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwljb25zdCBfX3U4ICgqaW5pdClbNF07CiAJY29uc3QgX191OCAqR2FtbWFUID0gTlVMTDsKIAljb25zdCBfX3U4ICpNYXRyaXhUID0gTlVMTDsKIAlpbnQgbW9kZTsKKwlzdGF0aWMgY29uc3QgdTggKCptaTEzMjBfc29jX2luaXRbXSlbNF0gPSB7CisJCW1pMTMyMF9zb2NfSW5pdFNYR0EsCisJCW1pMTMyMF9zb2NfSW5pdFNYR0FfSlBHLAorCQltaTEzMjBfc29jX0luaXRWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFZHQV9KUEcsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHCisJfTsKIAogCS8qIEFzc3VtZSBzdGFydCB1c2UgdGhlIGdvb2QgcmVzb2x1dGlvbiBmcm9tIGdzcGNhX2Rldi0+bW9kZSAqLwogCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKQEAgLTIxMzQsNiArMzAyOCwxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVkKTsKIAkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZSk7CiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWYpOworCQlzZC0+aW1hZ2Vfb2Zmc2V0ID0gNDY7CisJfSBlbHNlIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5waXhlbGZvcm1hdAorCQkJCT09IFY0TDJfUElYX0ZNVF9KUEVHKQorCQkJc2QtPmltYWdlX29mZnNldCA9IDA7CisJCWVsc2UKKwkJCXNkLT5pbWFnZV9vZmZzZXQgPSAzMjsKIAl9CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0yMTQxLDExNSArMzA0Miw4NyBAQAogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCUdhbW1hVCA9IGh2NzEzMXJfZ2FtbWE7CiAJCU1hdHJpeFQgPSBodjcxMzFyX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGh2NzEzMXJfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRWR0FfZGF0YSk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gaHY3MTMxcl9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBodjcxMzFyX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCUdhbW1hVCA9IG92NzY2MF9nYW1tYTsKIAkJTWF0cml4VCA9IG92NzY2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFZHQV9kYXRhKTsKLQkJfQorCQlpZiAobW9kZSkKKwkJCWluaXQgPSBvdjc2NjBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gb3Y3NjYwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NzA6CiAJCS8qR2FtbWFUID0gb3Y3NjYwX2dhbW1hOyAqLwogCQkvKk1hdHJpeFQgPSBvdjc2NjBfbWF0cml4OyAqLwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjcwX2luaXRRVkdBX0pQRyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NzBfaW5pdFZHQV9KUEcpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG92NzY3MF9pbml0UVZHQV9KUEc7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IG92NzY3MF9pbml0VkdBX0pQRzsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NSTAzNjA6CiAJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKIAkJTWF0cml4VCA9IG1pMDM2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTAzNjBfaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMDM2MF9pbml0VkdBX0pQRyk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gbWkwMzYwX2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gbWkwMzYwX2luaXRWR0FfSlBHOwkvKiA2NDB4NDgwICovCiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMxMF9zb2Npbml0VkdBX0pQRyk7CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQlpbml0ID0gbWkxMzEwX3NvY2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWluaXQgPSBtaTEzMTBfc29jaW5pdFZHQV9KUEc7CS8qIDY0MHg0ODAgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5pdCA9IG1pMTMxMF9zb2NfSW5pdFNYR0FfSlBHOwkvKiAxMjgweDEwMjQgKi8KKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJR2FtbWFUID0gbWkxMzIwX2dhbW1hOwogCQlNYXRyaXhUID0gbWkxMzIwX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0UVZHQV9kYXRhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0VkdBX2RhdGEpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG1pMTMyMF9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBtaTEzMjBfaW5pdFZHQV9kYXRhOwkvKiA2NDB4NDgwICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCWluaXQgPSBtaTEzMjBfc29jX2luaXRbbW9kZV07CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BPMzEzME5DOgogCQlHYW1tYVQgPSBwbzMxMzBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzMxMzBfbWF0cml4OwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRRVkdBX2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRWR0FfZGF0YSk7Ci0JCX0KLQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX3J1bmRhdGEpOwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9QTzEyMDA6Ci0JCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKLQkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7Ci0JCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMTIwMF9pbml0VkdBX2RhdGEpOworCQlpZiAobW9kZSkKKwkJCWluaXQgPSBwbzMxMzBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gcG8zMTMwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKKwkJaW5pdCA9IHBvMzEzMF9ydW5kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQREVCVUcoRF9QUk9CRSwgIkRhbW5lZCAhISBubyBzZW5zb3IgZm91bmQgQnllIik7Ci0JCXJldHVybiAtRU1FRElVTVRZUEU7CisvKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKKwkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7CisJCWluaXQgPSBwbzEyMDBfaW5pdFZHQV9kYXRhOworCQlicmVhazsKIAl9CisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODRhKTsKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NWIpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg2Yyk7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgTWF0cml4VCwgOSwgMHhiODJjKTsKIAotCQkvKiBTZWVtIFNIQVJQTkVTUyAqLwotCQkvKgotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg4MCwgMHhiODBhKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YjgwYik7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGI4MGUpOwotCQkqLwotCQkvKiBhbGwgMHg0MCA/Pz8gZG8gbm90aGluZwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg0MCwgMHhiODIyKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4NDAsIDB4YjgyMyk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDQwLCAweGI4MjQpOwotCQkqLwotCQkvKiBPbmx5IHdvcmtzIGZvciBIVjcxMzFSID8/Ci0JCXJlZ19yIChnc3BjYV9kZXYsIDB4YTEsIDB4Yjg4MSwgMSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZlMDEsIDB4Yjg4MSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDc5LCAweGI4MDEpOwotCQkqLwotCQkvKiBvbmx5IGh2NzEzMXIgZXQgb3Y3NjYwCi0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDIwLCAweGI4MjcpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiODI2KTsgKiBJU1BfR0FJTiA4MAotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyMywgMHhiODAwKTsgKiBJU1AgQ1RSTF9CQVMKLQkJKi8KIAkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7CiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwpAQCAtMjI5NiwxMiArMzE2OSw4IEBACiAJCQkidmMwMzJ4IGhlYWRlciBwYWNrZXQgZm91bmQgbGVuICVkIiwgbGVuKTsKIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCQlkYXRhLCAwKTsKLQkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewotI2RlZmluZSBWQ0hEUlNaIDQ2Ci0JCQlkYXRhICs9IFZDSERSU1o7Ci0JCQlsZW4gLT0gVkNIRFJTWjsKLSN1bmRlZiBWQ0hEUlNaCi0JCX0KKwkJZGF0YSArPSBzZC0+aW1hZ2Vfb2Zmc2V0OworCQlsZW4gLT0gc2QtPmltYWdlX29mZnNldDsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKIAkJCQlkYXRhLCBsZW4pOwogCQlyZXR1cm47CkBAIC0yMzk5LDcgKzMyNjgsOCBAQAogCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCiAJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQlkZWZhdWx0OgorLyoJCWNhc2UgMjoJCSAqIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KIAkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yNDI0LDYgKzMyOTQsNyBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDViKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk3KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCkBAIC0yNDMyLDYgKzMzMDMsNyBAQAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzI4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDEpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAorCXtVU0JfREVWSUNFKDB4MTViOCwgMHg2MDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgxNWI4LCAweDYwMDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKIAl7VVNCX0RFVklDRSgweDE3ZWYsIDB4NDgwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXt9CkBAIC0yNDYwLDggKzMzMzIsMTEgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IGVjMmE1M2QuLjRmZTAxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJqcGVnLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKQEAgLTMxLDcgKzMyLDcgQEAKIAogc3RhdGljIGludCBmb3JjZV9zZW5zb3IgPSAtMTsKIAotI2luY2x1ZGUgImpwZWcuaCIKKyNkZWZpbmUgUVVBTlRfVkFMIDEJCS8qIHF1YW50aXphdGlvbiB0YWJsZSAqLwogI2luY2x1ZGUgInpjM3h4LXJlZy5oIgogCiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwpAQCAtNDQsMzAgKzQ1LDM2IEBACiAJX191OCBhdXRvZ2FpbjsKIAlfX3U4IGxpZ2h0ZnJlcTsKIAlfX3U4IHNoYXJwbmVzczsKKwl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KKyNkZWZpbmUgUVVBTElUWV9NSU4gNDAKKyNkZWZpbmUgUVVBTElUWV9NQVggNjAKKyNkZWZpbmUgUVVBTElUWV9ERUYgNTAKIAotCWNoYXIgcWluZGV4OwogCXNpZ25lZCBjaGFyIHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KIC8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KLSNkZWZpbmUgU0VOU09SX0NTMjEwMiAwCi0jZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDEKLSNkZWZpbmUgU0VOU09SX0dDMDMwNSAyCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgMwotI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA0Ci0jZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDUKLSNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNgotI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA3Ci0jZGVmaW5lIFNFTlNPUl9PVjc2MjAgOAotLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOCAtIHNhbWUgdmFsdWVzICovCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDkKLSNkZWZpbmUgU0VOU09SX1BBUzEwNiAxMAotI2RlZmluZSBTRU5TT1JfUEFTMjAyQiAxMQotI2RlZmluZSBTRU5TT1JfUEIwMzMwIDEyCi0jZGVmaW5lIFNFTlNPUl9QTzIwMzAgMTMKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDSyAxNAotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCAxNQotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2Ci0jZGVmaW5lIFNFTlNPUl9NQVggMTcKKyNkZWZpbmUgU0VOU09SX0FEQ00yNzAwIDAKKyNkZWZpbmUgU0VOU09SX0NTMjEwMiAxCisjZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDIKKyNkZWZpbmUgU0VOU09SX0dDMDMwNSAzCisjZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAorI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1CisjZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKKyNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNworI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4CisjZGVmaW5lIFNFTlNPUl9PVjc2MjAgOQorLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOSAtIHNhbWUgdmFsdWVzICovCisjZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDEwCisjZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTEKKyNkZWZpbmUgU0VOU09SX1BBUzIwMkIgMTIKKyNkZWZpbmUgU0VOU09SX1BCMDMzMCAxMworI2RlZmluZSBTRU5TT1JfUE8yMDMwIDE0CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTUKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTYKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNworI2RlZmluZSBTRU5TT1JfTUFYIDE4CiAJdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTIwNiw2ICsyMTMsMjEzIEBACiAJX191MTYJaWR4OwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMDQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDMsY2MgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGRlLCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxkZSxjYyAqLworCXsweGEwLCAweDg2LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg2LGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCS8qIDAxLDAxLDM3LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCQkvKiAwMSw4OSwwNixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAkJLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCQkvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExNl9SR0FJTn0sCQkJLyogMDEsMTYsNTgsY2MgKi8KKwl7MHhhMCwgMHg1YSwgWkMzWFhfUjExOF9CR0FJTn0sCQkJLyogMDEsMTgsNWEsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAyLGNjICovCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4YixkMyxjYyAqLworCXsweGJiLCAweDAwLCAweDA0MDh9LAkJCQkvKiAwNCwwMCwwOCxiYiAqLworCXsweGRkLCAweDAwLCAweDAyMDB9LAkJCQkvKiAwMCwwMiwwMCxkZCAqLworCXsweGJiLCAweDAwLCAweDA0MDB9LAkJCQkvKiAwNCwwMCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDBmLCAweDE0MGZ9LAkJCQkvKiAxNCwwZiwwZixiYiAqLworCXsweGJiLCAweGUwLCAweDBjMmV9LAkJCQkvKiAwYyxlMCwyZSxiYiAqLworCXsweGJiLCAweDAxLCAweDIwMDB9LAkJCQkvKiAyMCwwMSwwMCxiYiAqLworCXsweGJiLCAweDk2LCAweDI0MDB9LAkJCQkvKiAyNCw5NiwwMCxiYiAqLworCXsweGJiLCAweDA2LCAweDEwMDZ9LAkJCQkvKiAxMCwwNiwwNixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDVmLCAweDIwOTB9LAkJCQkvKiAyMCw1Ziw5MCxiYiAqLworCXsweGJiLCAweDAxLCAweDgwMDB9LAkJCQkvKiA4MCwwMSwwMCxiYiAqLworCXsweGJiLCAweDA5LCAweDg0MDB9LAkJCQkvKiA4NCwwOSwwMCxiYiAqLworCXsweGJiLCAweDg2LCAweDAwMDJ9LAkJCQkvKiAwMCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDA0MDF9LAkJCQkvKiAwNCxlNiwwMSxiYiAqLworCXsweGJiLCAweDg2LCAweDA4MDJ9LAkJCQkvKiAwOCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDBjMDF9LAkJCQkvKiAwYyxlNiwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMjB9LAkJCQkvKiAwMCxmZSwyMCxhYSAqLworLyptc3dpbisqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGZlLCAweDAwMDJ9LAorCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGI0LCAweGNkMzd9LAorCXsweGFhLCAweGE0LCAweDAwMDR9LAorCXsweGFhLCAweGE4LCAweDAwMDd9LAorCXsweGFhLCAweGFjLCAweDAwMDR9LAorLyptc3dpbi0qLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDA0LCAweDA0MDB9LAkJCQkvKiAwNCwwNCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCQkvKiAwMCwwMSwwMCxkZCAqLworCXsweGJiLCAweDAxLCAweDA0MDB9LAkJCQkvKiAwNCwwMSwwMCxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDQxLCAweDI4MDN9LAkJCQkvKiAyOCw0MSwwMyxiYiAqLworCXsweGJiLCAweDQwLCAweDJjMDN9LAkJCQkvKiAyYyw0MCwwMyxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMyxjYyAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweGQzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAkJLyogMDAsOGIsZDMsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCQkvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwJCS8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwJCS8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJCS8qIDAxLDFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJCS8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJCS8qIDAwLDljLGQ4LGNjICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAkJLyogMDAsOWUsODgsY2MgKi8KKwl7MHhiYiwgMHgwMCwgMHgwNDAwfSwJCQkJLyogMDQsMDAsMDAsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHgwZiwgMHgxNDBmfSwJCQkJLyogMTQsMGYsMGYsYmIgKi8KKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLyogMDEsMDEsMzcsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJCS8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCQkvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJCS8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCQkvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDU4LCBaQzNYWF9SMTE2X1JHQUlOfSwJCQkvKiAwMSwxNiw1OCxjYyAqLworCXsweGEwLCAweDVhLCBaQzNYWF9SMTE4X0JHQUlOfSwJCQkvKiAwMSwxOCw1YSxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsMDIsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwOH0sCQkJCS8qIDA0LDAwLDA4LGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDIwMH0sCQkJCS8qIDAwLDAyLDAwLGRkICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDA1MH0sCQkJCS8qIDAwLDAwLDUwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YmIsIDB4ZTAsIDB4MGMyZX0sCQkJCS8qIDBjLGUwLDJlLGJiICovCisJezB4YmIsIDB4MDEsIDB4MjAwMH0sCQkJCS8qIDIwLDAxLDAwLGJiICovCisJezB4YmIsIDB4OTYsIDB4MjQwMH0sCQkJCS8qIDI0LDk2LDAwLGJiICovCisJezB4YmIsIDB4MDYsIDB4MTAwNn0sCQkJCS8qIDEwLDA2LDA2LGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4NWYsIDB4MjA5MH0sCQkJCS8qIDIwLDVmLDkwLGJiICovCisJezB4YmIsIDB4MDEsIDB4ODAwMH0sCQkJCS8qIDgwLDAxLDAwLGJiICovCisJezB4YmIsIDB4MDksIDB4ODQwMH0sCQkJCS8qIDg0LDA5LDAwLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDAwMn0sCQkJCS8qIDAwLDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MDQwMX0sCQkJCS8qIDA0LGU2LDAxLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDgwMn0sCQkJCS8qIDA4LDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MGMwMX0sCQkJCS8qIDBjLGU2LDAxLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAyMH0sCQkJCS8qIDAwLGZlLDIwLGFhICovCisJLyoqKioqKiovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MDQsIDB4MDQwMH0sCQkJCS8qIDA0LDA0LDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJCS8qIDAwLDAxLDAwLGRkICovCisJezB4YmIsIDB4MDEsIDB4MDQwMH0sCQkJCS8qIDA0LDAxLDAwLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YmIsIDB4NDEsIDB4MjgwM30sCQkJCS8qIDI4LDQxLDAzLGJiICovCisJezB4YmIsIDB4NDAsIDB4MmMwM30sCQkJCS8qIDJjLDQwLDAzLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAxMH0sCQkJCS8qIDAwLGZlLDEwLGFhICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gYWRjbTI3MDBfNTBIWltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA1LCAweDg0MDB9LAkJCQkvKiA4NCwwNSwwMCxiYiAqLworCXsweGJiLCAweGQwLCAweGIwMDd9LAkJCQkvKiBiMCxkMCwwNyxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MGZ9LAkJCQkvKiBiOCxhMCwwZixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXsweGFhLCAweDI2LCAweDAwZDB9LAkJCQkvKiAwMCwyNixkMCxhYSAqLworCXsweGFhLCAweDI4LCAweDAwMDJ9LAkJCQkvKiAwMCwyOCwwMixhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwXzYwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHgwNywgMHg4NDAwfSwJCQkJLyogODQsMDcsMDAsYmIgKi8KKwl7MHhiYiwgMHg4MiwgMHhiMDA2fSwJCQkJLyogYjAsODIsMDYsYmIgKi8KKwl7MHhiYiwgMHgwNCwgMHhiODBkfSwJCQkJLyogYjgsMDQsMGQsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDU3fSwJCQkJLyogMDAsMjYsNTcsYWEgKi8KKwl7MHhhYSwgMHgyOCwgMHgwMDAyfSwJCQkJLyogMDAsMjgsMDIsYWEgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA3LCAweDg0MDB9LAkJCQkvKiA4NCwwNywwMCxiYiAqLworCXsweGJiLCAweDA1LCAweGIwMDB9LAkJCQkvKiBiMCwwNSwwMCxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MDF9LAkJCQkvKiBiOCxhMCwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsW10gPSB7CiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCkBAIC04NzcsNyArMTA5MSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC04OTQsNiArMTEwOCw3IEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKIAl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKy8qZml4bWU6IG5leHQgc2VxdWVuY2UgPSBpMmMgZXhjaGFuZ2VzKi8KIAl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKIAl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCkBAIC0xMDc3LDIwNyArMTI5Miw2IEBACiAJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKIAl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAotCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCi0JezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKLQl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAotCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKLQl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBBLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MEIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwQywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg3YiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBELCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweEEzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4ZmIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwRSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE3LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDBDLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHhmNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHg3OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKLQl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKLQl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKLQl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKLQl7MHhhMCwgMHgwMSwgMHgwMWIxfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLwotCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLwotCXsweGEwLCAweDEzLCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSA0ICovCi0JezB4YTAsIDB4MzgsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCi0JezB4YTAsIDB4NTksIFpDM1hYX1IxMjJfR0FNTUEwMn0sCi0JezB4YTAsIDB4NzksIFpDM1hYX1IxMjNfR0FNTUEwM30sCi0JezB4YTAsIDB4OTIsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCi0JezB4YTAsIDB4YTcsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCi0JezB4YTAsIDB4YjksIFpDM1hYX1IxMjZfR0FNTUEwNn0sCi0JezB4YTAsIDB4YzgsIFpDM1hYX1IxMjdfR0FNTUEwN30sCi0JezB4YTAsIDB4ZDQsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCi0JezB4YTAsIDB4ZGYsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCi0JezB4YTAsIDB4ZTcsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCi0JezB4YTAsIDB4ZWUsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCi0JezB4YTAsIDB4ZjksIFpDM1hYX1IxMkRfR0FNTUEwRH0sCi0JezB4YTAsIDB4ZmMsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCi0JezB4YTAsIDB4MjYsIFpDM1hYX1IxMzBfR0FNTUExMH0sCi0JezB4YTAsIDB4MjIsIFpDM1hYX1IxMzFfR0FNTUExMX0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxMzJfR0FNTUExMn0sCi0JezB4YTAsIDB4MWMsIFpDM1hYX1IxMzNfR0FNTUExM30sCi0JezB4YTAsIDB4MTYsIFpDM1hYX1IxMzRfR0FNTUExNH0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxMzVfR0FNTUExNX0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxMzZfR0FNTUExNn0sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCi0JezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxM0JfR0FNTUExQn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IxM0NfR0FNTUExQ30sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxM0RfR0FNTUExRH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxM0VfR0FNTUExRX0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1OCwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwKLQl7MHhhMCwgMHgyMiwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKLQl7MHhhMCwgMHhlZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKLQl7MHhhMCwgMHgzYSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAotCXsweGEwLCAweDBjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAotCXsweGEwLCAweDI4LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCi0JezB4YTAsIDB4MTksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCi0JezB4YTAsIDB4MWYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LApAQCAtMTMzNCw2ICsxMzQ4LDcgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKy8qZml4bWU6d2hhdCBkb2VzIHRoZSBuZXh0IHNlcXVlbmNlPyovCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCkBAIC02MjM3LDcgKzYyNTIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgaW50IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHU4IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCkBAIC02MjUwLDEwICs2MjY1LDEwIEBACiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAotc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKLQlpbnQgcmV0OworCXU4IHJldDsKIAogCXJldCA9IHJlZ19yX2koZ3NwY2FfZGV2LCBpbmRleCk7CiAJUERFQlVHKERfVVNCSSwgInJlZyByIFslMDR4XSAtPiAlMDJ4IiwgaW5kZXgsIHJldCk7CkBAIC02Mjg2LDggKzYzMDEsOCBAQAogCV9fdTggcmV0Ynl0ZTsKIAlfX3UxNiByZXR2YWw7CiAKLQlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4OTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCisJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOworCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KIAltc2xlZXAoMjUpOwogCXJldGJ5dGUgPSByZWdfcl9pKGdzcGNhX2RldiwgMHgwMDkxKTsJCS8qIHJlYWQgc3RhdHVzICovCiAJcmV0dmFsID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5NSk7CQkvKiByZWFkIExvd2J5dGUgKi8KQEAgLTYzMzIsNiArNjM0NywxMiBAQAogCQkJCSAgYWN0aW9uLT5pZHggJiAweGZmLAkJLyogdmFsTCAqLwogCQkJCSAgYWN0aW9uLT5pZHggPj4gOCk7CQkvKiB2YWxIICovCiAJCQlicmVhazsKKwkJY2FzZSAweGJiOgorCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwKKwkJCQkgIGFjdGlvbi0+aWR4ID4+IDgsCQkvKiByZWcgKi8KKwkJCQkgIGFjdGlvbi0+aWR4ICYgMHhmZiwJCS8qIHZhbEwgKi8KKwkJCQkgIGFjdGlvbi0+dmFsKTsJCQkvKiB2YWxIICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCiAJCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKQEAgLTYzNDcsNiArNjM2OCwxMCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKIAljb25zdCBfX3U4ICptYXRyaXg7CisJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CisvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLworLyptcy13aW4qLworCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07CiAJc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CiAJCXsweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwfTsKIAlzdGF0aWMgY29uc3QgX191OCBvdjc2MjBfbWF0cml4WzldID0KQEAgLTYzNTgsMjMgKzYzODMsMjQgQEAKIAlzdGF0aWMgY29uc3QgX191OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwogCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7Ci0JCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KLQkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX0dDMDMwNSAyICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFCIDQgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFDIDUgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KLQkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX09WNzYyMCA4ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfT1Y3NjMwQyA5ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLwotCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMiAqLwotCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDEzICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLwotCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDIgMSAqLworCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMksgMiAqLworCQlnYzAzMDVfbWF0cml4LAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUMgNiAqLworCQlOVUxMLAkJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQlOVUxMLAkJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9PVjc2MzBDIDEwICovCisJCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMiAqLworCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMyAqLworCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDE0ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNiAqLworCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE3ICovCiAJfTsKIAogCW1hdHJpeCA9IG1hdHJpeF90YltzZC0+c2Vuc29yXTsKQEAgLTYzOTgsOCArNjQyNCwxMSBAQAogLypmaXhtZTogaXMgaXQgcmVhbGx5IHdyaXRlIHRvIDAxMWQgYW5kIDAxOGQgZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwogCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgYnJpZ2h0bmVzcywgMHgwMTFkKTsKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxQikKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKKwljYXNlIFNFTlNPUl9IVjcxMzFCOgogCQlyZXR1cm47CisJfQogCWlmIChicmlnaHRuZXNzIDwgMHg3MCkKIAkJYnJpZ2h0bmVzcyArPSAweDEwOwogCWVsc2UKQEAgLTY1MzYsMTAgKzY1NjUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcXVhbGl0eTsKIAlfX3U4IGZyeHQ7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CkBAIC02NTQ3LDI2ICs2NTc2LDE4IEBACiAJCXJldHVybjsKIAl9CiAvKmZpeG1lOiBpcyBpdCByZWFsbHkgMDAwOCAwMDA3IDAwMTggZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwotCXF1YWxpdHkgPSBzZC0+cWluZGV4OwotCXJlZ193KGRldiwgcXVhbGl0eSwgMHgwMDA4KTsKKwlyZWdfdyhkZXYsIFFVQU5UX1ZBTCwgMHgwMDA4KTsKIAlmcnh0ID0gMHgzMDsKIAlyZWdfdyhkZXYsIGZyeHQsIDB4MDAwNyk7Ci0Jc3dpdGNoIChxdWFsaXR5KSB7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQljYXNlIDI6Ci0JCWZyeHQgPSAweGZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWZyeHQgPSAweGYwOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWZyeHQgPSAweGUwOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWZyeHQgPSAweDIwOwotCQlicmVhazsKLQl9CisjaWYgUVVBTlRfVkFMID09IDAgfHwgUVVBTlRfVkFMID09IDEgfHwgUVVBTlRfVkFMID09IDIKKwlmcnh0ID0gMHhmZjsKKyNlbGlmIFFVQU5UX1ZBTCA9PSAzCisJZnJ4dCA9IDB4ZjA7CisjZWxpZiBRVUFOVF9WQUwgPT0gNAorCWZyeHQgPSAweGUwOworI2Vsc2UKKwlmcnh0ID0gMHgyMDsKKyNlbmRpZgogCXJlZ193KGRldiwgZnJ4dCwgMHgwMDE4KTsKIH0KIApAQCAtNjU4Myw3MSArNjYwNCw3NSBAQAogCWludCBpLCBtb2RlOwogCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfZnJlcTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmZyZXFfdGJbU0VOU09SX01BWF1bNl0gPSB7Ci0vKiBTRU5TT1JfQ1MyMTAyIDAgKi8KKy8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCXthZGNtMjcwMF9Ob0ZsaWtlciwgYWRjbTI3MDBfTm9GbGlrZXIsCisJCSBhZGNtMjcwMF81MEhaLCBhZGNtMjcwMF81MEhaLAorCQkgYWRjbTI3MDBfNjBIWiwgYWRjbTI3MDBfNjBIWn0sCisvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBjczIxMDJfNTBIWiwgY3MyMTAyXzUwSFpTY2FsZSwKIAkJIGNzMjEwMl82MEhaLCBjczIxMDJfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KKy8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBOVUxMLCBOVUxMLCAvKiBjdXJyZW50bHkgZGlzYWJsZWQgKi8KIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0dDMDMwNSAyICovCisvKiBTRU5TT1JfR0MwMzA1IDMgKi8KIAkJe2djMDMwNV9Ob0ZsaWtlciwgZ2MwMzA1X05vRmxpa2VyLAogCQkgZ2MwMzA1XzUwSFosIGdjMDMwNV81MEhaLAogCQkgZ2MwMzA1XzYwSFosIGdjMDMwNV82MEhafSwKLS8qIFNFTlNPUl9IRENTMjAyMGIgMyAqLworLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCiAJCXtoZGNzMjAyMGJfTm9GbGlrZXIsIGhkY3MyMDIwYl9Ob0ZsaWtlciwKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQiA0ICovCisvKiBTRU5TT1JfSFY3MTMxQiA1ICovCiAJCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCiAJCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAogCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQyA1ICovCisvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0lDTTEwNUEgNiAqLworLyogU0VOU09SX0lDTTEwNUEgNyAqLwogCQl7aWNtMTA1YV9Ob0ZsaWtlciwgaWNtMTA1YV9Ob0ZsaWtlclNjYWxlLAogCQkgaWNtMTA1YV81MEhaLCBpY20xMDVhXzUwSFpTY2FsZSwKIAkJIGljbTEwNWFfNjBIWiwgaWNtMTA1YV82MEhaU2NhbGV9LAotLyogU0VOU09SX01DNTAxQ0IgNyAqLworLyogU0VOU09SX01DNTAxQ0IgOCAqLwogCQl7TUM1MDFDQl9Ob0ZsaWtlciwgTUM1MDFDQl9Ob0ZsaWtlclNjYWxlLAogCQkgTUM1MDFDQl81MEhaLCBNQzUwMUNCXzUwSFpTY2FsZSwKIAkJIE1DNTAxQ0JfNjBIWiwgTUM1MDFDQl82MEhaU2NhbGV9LAotLyogU0VOU09SX09WNzYyMCA4ICovCisvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KIAkJe09WNzYyMF9Ob0ZsaWtlciwgT1Y3NjIwX05vRmxpa2VyLAogCQkgT1Y3NjIwXzUwSFosIE9WNzYyMF81MEhaLAogCQkgT1Y3NjIwXzYwSFosIE9WNzYyMF82MEhafSwKLS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KKy8qIFNFTlNPUl9PVjc2MzBDIDEwICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX1BBUzEwNiAxMCAqLworLyogU0VOU09SX1BBUzEwNiAxMSAqLwogCQl7cGFzMTA2Yl9Ob0ZsaWtlciwgcGFzMTA2Yl9Ob0ZsaWtlciwKIAkJIHBhczEwNmJfNTBIWiwgcGFzMTA2Yl81MEhaLAogCQkgcGFzMTA2Yl82MEhaLCBwYXMxMDZiXzYwSFp9LAotLyogU0VOU09SX1BBUzIwMkIgMTEgKi8KKy8qIFNFTlNPUl9QQVMyMDJCIDEyICovCiAJCXtwYXMyMDJiX05vRmxpa2VyU2NhbGUsIHBhczIwMmJfTm9GbGlrZXIsCiAJCSBwYXMyMDJiXzUwSFpTY2FsZSwgcGFzMjAyYl81MEhaLAogCQkgcGFzMjAyYl82MEhaU2NhbGUsIHBhczIwMmJfNjBIWn0sCi0vKiBTRU5TT1JfUEIwMzMwIDEyICovCisvKiBTRU5TT1JfUEIwMzMwIDEzICovCiAJCXtwYjAzMzBfTm9GbGlrZXIsIHBiMDMzMF9Ob0ZsaWtlclNjYWxlLAogCQkgcGIwMzMwXzUwSFosIHBiMDMzMF81MEhaU2NhbGUsCiAJCSBwYjAzMzBfNjBIWiwgcGIwMzMwXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfUE8yMDMwIDEzICovCisvKiBTRU5TT1JfUE8yMDMwIDE0ICovCiAJCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKIAkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKIAkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCi0vKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCisvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCiAJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAogCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLworLyogU0VOU09SX1RBUzUxMzBDWFggMTYgKi8KIAkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKy8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAkJe3RhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlciwgdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNTBIWiwgdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF82MEhaLCB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlfSwKQEAgLTY3MDEsNiArNjcyNiw3IEBACiAJCXJlZ193KGRldiwgMHgwYywgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDA4LCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCWNhc2UgU0VOU09SX1BCMDMzMDoKQEAgLTY3NDMsMjYgKzY3NjksMjUgQEAKIHN0YXRpYyBpbnQgdmdhXzJ3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAwKTsJCS8qIEhWNzEzMUIgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAwOwkJCS8qIEhWNzEzMUIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDQpOwkJLyogQ1MyMTAyICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwNDsJCQkvKiBDUzIxMDIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDYpOwkJLyogT21uaVZpc2lvbiAqLwogCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDExLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDExKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQkvKiAoc2hvdWxkIGhhdmUgcmV0dXJuZWQgMHhhYSkgLS0+IE9tbml2aXNpb24/ICovCiAJCS8qIHJlZ19yIDB4MTAgLT4gMHgwNiAtLT4gICovCiAJCWdvdG8gb3ZfY2hlY2s7CkBAIC02NzcwLDQwICs2Nzk1LDQwIEBACiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA4KTsJCS8qIEhEQ1MyMDIwICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwODsJCQkvKiBIRENTMjAyMCAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwYSk7CQkvKiBQQjAzMzAgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDA3LCAweGFhLCAweGFhKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDcpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNCk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA0KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwYTsJCQkvKiBQQjAzMzAgPz8gKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGMpOwkJLyogSUNNMTA1QSAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4MTEsIDB4MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGM7CQkJLyogSUNNMTA1QSAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwZSk7CQkvKiBQQVMyMDJCQ0IgKi8KIAlyZWdfdyhkZXYsIDB4MDgsIDB4MDA4ZCk7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgMHhhYSwgMHgwMCk7CiAJbXNsZWVwKDUwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAzKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwZTsJCQkvKiBQQVMyMDJCQ0IgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogPz8gKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAyOwkJCS8qID8/ICovCiBvdl9jaGVjazoKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CQkvKiA/PyAqLwpAQCAtNjgxNywxMiArNjg0MiwxMCBAQAogCW1zbGVlcCg1MDApOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwLCAweDAwKTsJLyogc2Vuc29yIHJlc2V0ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSk7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGIpOwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgMndyIG92IHZnYSAweCUwNHgiLCBjaGVja3dvcmQpOwotCXN3aXRjaCAoY2hlY2t3b3JkKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlyZXR3b3JkIHw9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAyd3Igb3YgdmdhIDB4JTA0eCIsIHJldHdvcmQpOworCXN3aXRjaCAocmV0d29yZCkgewogCWNhc2UgMHg3NjMxOgkJCQkvKiBPVjc2MzBDICovCiAJCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKIAkJYnJlYWs7CkBAIC02ODMyLDcgKzY4NTUsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsJCQkvKiBub3QgT21uaVZpc2lvbiAqLwogCX0KLQlyZXR1cm4gY2hlY2t3b3JkOworCXJldHVybiByZXR3b3JkOwogfQogCiBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gewpAQCAtNjg0NSw2ICs2ODY4LDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4NDAwMSwgMHgxNn0sCQkvKiBBRENNMjcwMCAqLwogfTsKIAogc3RhdGljIGludCB2Z2FfM3dyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTY4NTMsNyArNjg3Nyw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwogCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIC8qZml4bWU6IGxhY2sgb2YgOGI9YjMgKDExLDEyKS0+IDEwLCA4Yj1lMCAoMTQsMTUsMTYpLT4gMTIgZm91bmQgaW4gZ3NwY2F2MSovCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwpAQCAtNjg2NSwyNyArNjg4OSwyNSBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CiAJcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNCk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTYpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNik7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwogCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYik7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7Ci0JY2hlY2t3b3JkIHw9IHJldGJ5dGU7Ci0JUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgY2hlY2t3b3JkKTsKKwlyZXR3b3JkID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGIpIDw8IDg7CisJcmV0d29yZCB8PSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgcmV0d29yZCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwogCS8qIHRoaXMgaXMgdGVzdGVkIG9ubHkgb25jZSBhbnl3YXkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwc2V0X3JldmlzaW9uX3NlbnNvcik7IGkrKykgewotCQlpZiAoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbaV0ucmV2aXNpb24gPT0gY2hlY2t3b3JkKSB7Ci0JCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IGNoZWNrd29yZDsKKwkJaWYgKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLnJldmlzaW9uID09IHJldHdvcmQpIHsKKwkJCXNkLT5jaGlwX3JldmlzaW9uID0gcmV0d29yZDsKIAkJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QQjAzMzApOwogCQkJcmV0dXJuIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLmludGVybmFsX3NlbnNvcl9pZDsKIAkJfQpAQCAtNjg5Nyw4ICs2OTE5LDggQEAKIAlyZWdfdyhkZXYsIDB4MGEsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7CiAJCXJldHVybiAweDBhOwkJCS8qID8/ICovCiAJfQpAQCAtNjkxMCwxNCArNjkzMiwxNCBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAltc2xlZXAoMik7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOwotCWlmIChyZXRieXRlICE9IDApIHsKLQkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldGJ5dGUpOwotCQlpZiAocmV0Ynl0ZSA9PSAweDExKQkJCS8qIFZGMDI1MCAqLworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCWlmIChyZXR3b3JkICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldHdvcmQpOworCQlpZiAocmV0d29yZCA9PSAweDAwMTEpCQkJLyogVkYwMjUwICovCiAJCQlyZXR1cm4gMHgwMjUwOwotCQlpZiAocmV0Ynl0ZSA9PSAweDI5KQkJCS8qIGdjMDMwNSAqLworCQlpZiAocmV0d29yZCA9PSAweDAwMjkpCQkJLyogZ2MwMzA1ICovCiAJCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfR0MwMzA1KTsKLQkJcmV0dXJuIHJldGJ5dGU7CisJCXJldHVybiByZXR3b3JkOwogCX0KIAogCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJLyogY2hlY2sgT21uaVZpc2lvbiAqLwpAQCAtNjkyNyw4ICs2OTQ5LDggQEAKIAlyZWdfdyhkZXYsIDB4MDYsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDdmCS8qIE9WNzYxMCAtIG1hbnVmYWN0dXJlciBJRCAqLwotCSAgICAmJiBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWQpID09IDB4YTIpIHsKKwlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDAwN2YJLyogT1Y3NjEwIC0gbWFudWZhY3R1cmVyIElEICovCisJICAgICYmIGkyY19yZWFkKGdzcGNhX2RldiwgMHgxZCkgPT0gMHgwMGEyKSB7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9PVjc2MjApOwogCQlyZXR1cm4gMHgwNjsJCS8qIE9tbmlWaXNpb24gY29uZmlybSA/ICovCiAJfQpAQCAtNjk0MiwxNiArNjk2NCwxNCBAQAogLyoJbXNsZWVwKDE1MCk7ICovCiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDApOwkJLyogSUQgMCAqLwotCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDEpOwkJLyogSUQgMSAqLwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIGNoZWNrd29yZCk7Ci0JaWYgKGNoZWNrd29yZCA9PSAweDIwMzApIHsKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKSA8PCA4OwkvKiBJRCAwICovCisJcmV0d29yZCB8PSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwkJLyogSUQgMSAqLworCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIHJldHdvcmQpOworCWlmIChyZXR3b3JkID09IDB4MjAzMCkgewogCQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAyKTsJLyogcmV2aXNpb24gbnVtYmVyICovCiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIFBPMjAzMCByZXYgMHglMDJ4IiwgcmV0Ynl0ZSk7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QTzIwMzApOwotCQlyZXR1cm4gY2hlY2t3b3JkOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7CkBAIC02OTYyLDEwICs2OTgyLDEwIEBACiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDAxKTsKIAlyZWdfdyhkZXYsIDB4ZDMsIDB4MDA4Yik7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkgewotCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7Ci0JCXJldHVybiAweDBhOwkJCS8qID8/ICovCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/IHJldDogJTA0eCIsIHJldHdvcmQpOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtNjk3Myw3ICs2OTkzLDcgQEAKIHN0YXRpYyBpbnQgemN4eF9wcm9iZVNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCBzZW5zb3IsIHNlbnNvcjI7CisJaW50IHNlbnNvcjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01DNTAxQ0I6CkBAIC02OTg4LDE2ICs3MDA4LDkgQEAKIAkJYnJlYWs7CiAJfQogCXNlbnNvciA9IHZnYV8yd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yID49IDApIHsKLQkJaWYgKHNlbnNvciA8IDB4NzYwMCkKLQkJCXJldHVybiBzZW5zb3I7Ci0JCS8qIG5leHQgcHJvYmUgaXMgbmVlZGVkIGZvciBPbW5pVmlzaW9uID8gKi8KLQl9Ci0Jc2Vuc29yMiA9IHZnYV8zd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yMiA+PSAwCi0JICAgICYmIHNlbnNvciA+PSAwKQorCWlmIChzZW5zb3IgPj0gMCkKIAkJcmV0dXJuIHNlbnNvcjsKLQlyZXR1cm4gc2Vuc29yMjsKKwlyZXR1cm4gdmdhXzN3cl9wcm9iZShnc3BjYV9kZXYpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC03MDA5LDIzICs3MDIyLDI0IEBACiAJaW50IHNlbnNvcjsKIAlpbnQgdmdhID0gMTsJCS8qIDE6IHZnYSwgMDogc2lmICovCiAJc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7Ci0JCTUsCS8qIFNFTlNPUl9DUzIxMDIgMCAqLwotCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAxICovCi0JCTQsCS8qIFNFTlNPUl9HQzAzMDUgMiAqLwotCQk0LAkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUIgNCAqLwotCQk0LAkvKiBTRU5TT1JfSFY3MTMxQyA1ICovCi0JCTQsCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJNCwJLyogU0VOU09SX01DNTAxQ0IgNyAqLwotCQkzLAkvKiBTRU5TT1JfT1Y3NjIwIDggKi8KLQkJNCwJLyogU0VOU09SX09WNzYzMEMgOSAqLwotCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDExICovCi0JCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTIgKi8KLQkJNCwJLyogU0VOU09SX1BPMjAzMCAxMyAqLwotCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE1ICovCi0JCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKwkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJNSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJNCwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTQsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQk0LAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTQsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJNCwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQk0LAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTMsCS8qIFNFTlNPUl9PVjc2MjAgOSAqLworCQk0LAkvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLworCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDEyICovCisJCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTMgKi8KKwkJNCwJLyogU0VOU09SX1BPMjAzMCAxNCAqLworCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE2ICovCisJCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAl9OwogCiAJLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwpAQCAtNzAzMyw3ICs3MDQ3LDcgQEAKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKIAlpZiAoc2Vuc29yID49IDApCi0JCVBERUJVRyhEX1BST0JFLCAicHJvYmUgc2Vuc29yIC0+ICUwMngiLCBzZW5zb3IpOworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIHNlbnNvciAtPiAlMDR4Iiwgc2Vuc29yKTsKIAlpZiAoKHVuc2lnbmVkKSBmb3JjZV9zZW5zb3IgPCBTRU5TT1JfTUFYKSB7CiAJCXNkLT5zZW5zb3IgPSBmb3JjZV9zZW5zb3I7CiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIGZvcmNlZCB0byAlZCIsIGZvcmNlX3NlbnNvcik7CkBAIC03MTEyLDYgKzcxMjYsMTAgQEAKIAkJCQlzZC0+Y2hpcF9yZXZpc2lvbik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDSzsKIAkJCWJyZWFrOworCQljYXNlIDB4MTY6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEFEQ00yNzAwIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0FEQ00yNzAwOworCQkJYnJlYWs7CiAJCWNhc2UgMHgyOToKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgR0MwMzA1Iik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX0dDMDMwNTsKQEAgLTcxMjksMTIgKzcxNDcsMTYgQEAKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjIwIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsKIAkJCWJyZWFrOworCQljYXNlIDB4NzYzMToKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjMwQyIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MzBDOworCQkJYnJlYWs7CiAJCWNhc2UgMHg3NjQ4OgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NDgiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y3NjIwOwkvKiBzYW1lIHNlbnNvciAoPykgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJVbmtub3duIHNlbnNvciAlMDJ4Iiwgc2Vuc29yKTsKKwkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCIsIHNlbnNvcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTcxNDcsNyArNzE2OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIC8qZml4bWU6dGVzdCovCiAJZ3NwY2FfZGV2LT5uYmFsdC0tOwogCWlmICh2Z2EpIHsKQEAgLTcxNTcsMTIgKzcxNzgsMTIgQEAKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0KLQlzZC0+cWluZGV4ID0gMTsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07CiAJc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0dDMDMwNToKQEAgLTcxOTYsMjcgKzcyMTcsMzQgQEAKIAljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMCAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDEgKi8KLQkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwJCS8qIDIgKi8KLQkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiAzICovCi0JCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDQgKi8KLQkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNSAqLwotCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA2ICovCi0JCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogNyAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDggKi8KLQkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiA5ICovCi0JCXtwYXMxMDZiX0luaXRpYWxTY2FsZSwgcGFzMTA2Yl9Jbml0aWFsfSwJLyogMTAgKi8KLQkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLwotCQl7cGIwMzMweHhfSW5pdGlhbFNjYWxlLCBwYjAzMzB4eF9Jbml0aWFsfSwJLyogMTIgKi8KKwkJe2FkY20yNzAwX0luaXRpYWwsIGFkY20yNzAwX0luaXRpYWxTY2FsZX0sCS8qIDAgKi8KKwkJe2NzMjEwMl9Jbml0aWFsU2NhbGUsIGNzMjEwMl9Jbml0aWFsfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbFNjYWxlLCBjczIxMDJLX0luaXRpYWx9LAkvKiAyICovCisJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCisJCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLworCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCisJCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KKwkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLworCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiA5ICovCisJCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTAgKi8KKwkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMSAqLworCQl7cGFzMjAyYl9Jbml0aWFsLCBwYXMyMDJiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCisJCXtwYjAzMzB4eF9Jbml0aWFsU2NhbGUsIHBiMDMzMHh4X0luaXRpYWx9LAkvKiAxMyAqLwogLyogb3IJCXtwYjAzMzAzeF9Jbml0aWFsU2NhbGUsIHBiMDMzMDN4X0luaXRpYWx9LCAqLwotCQl7UE8yMDMwX21vZGUwLCBQTzIwMzBfbW9kZTF9LAkJCS8qIDEzICovCi0JCXt0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlLCB0YXM1MTMwQ0tfSW5pdGlhbH0sCS8qIDE0ICovCi0JCXt0YXM1MTMwY3h4X0luaXRpYWxTY2FsZSwgdGFzNTEzMGN4eF9Jbml0aWFsfSwJLyogMTUgKi8KKwkJe1BPMjAzMF9tb2RlMCwgUE8yMDMwX21vZGUxfSwJCQkvKiAxNCAqLworCQl7dGFzNTEzMENLX0luaXRpYWxTY2FsZSwgdGFzNTEzMENLX0luaXRpYWx9LAkvKiAxNSAqLworCQl7dGFzNTEzMGN4eF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjeHhfSW5pdGlhbH0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbH0sCi0JCQkJCQkJCS8qIDE2ICovCisJCQkJCQkJCS8qIDE3ICovCiAJfTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNzI0MywxMSArNzI3MSwxMiBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKLQkJbXNsZWVwKDEwMCk7CQkJLyogPz8gKi8KKy8qCQltc2xlZXAoMTAwKTsJCQkgKiA/PyAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7CS8qIC0tPiAweDQwICovCiAJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwpAQCAtNzI2MCw2ICs3Mjg5LDcgQEAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA4KTsKQEAgLTczMDEsNiArNzMzMSwxMyBAQAogCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CisJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KKwkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOworCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDE4MCk7CisJCQkJCQkvKiBtcy13aW4gKyAqLworCQlyZWdfdyhkZXYsIDB4NDAsIDB4MDExNyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CkBAIC03MzIzLDE5ICs3MzYwLDE2IEBACiAKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX1BBUzIwMkI6Ci0JCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTAwKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwNyk7CisJCS8qZmFsbCB0aHJ1Ki8KKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCi0JCXJlZ193KGRldiwgMHgwMiwgMHgwMDA4KTsKKwkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJCWJyZWFrOwogCX0KLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKLQkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNDQsNiArNzM3OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwogCXNlbmRfdW5rbm93bihnc3BjYV9kZXYtPmRldiwgc2QtPnNlbnNvcik7CkBAIC03MzU0LDE0ICs3Mzg5LDE1IEBACiAJCQlfX3U4ICpkYXRhLAogCQkJaW50IGxlbikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLwogCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKIAkJCQkJZGF0YSwgMCk7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMSk7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKKwogCQkvKiByZW1vdmUgdGhlIHdlYmNhbSdzIGhlYWRlcjoKIAkJICogZmYgZDggZmYgZmUgMDAgMGUgMDAgMDAgc3Mgc3MgMDAgMDEgd3cgd3cgaGggaGggcHAgcHAKIAkJICoJLSAnc3Mgc3MnIGlzIHRoZSBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgKEJFKQpAQCAtNzUwMyw2ICs3NTM5LDM0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03NTEzLDYgKzc1NzcsOCBAQAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CkBAIC03NTYzLDExICs3NjI5LDkgQEAKIAl7VVNCX0RFVklDRSgweDA1NWYsIDB4ZDAwNCl9LAogCXtVU0JfREVWSUNFKDB4MDY5OCwgMHgyMDAzKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMDEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMwMil9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzAyKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBUzEwNn0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwMWIpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMV9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYil9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwNWIpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzA3Yil9LAogCXtVU0JfREVWSUNFKDB4MTBmZCwgMHgwMTI4KX0sCkBAIC03NjAwLDggKzc2NjQsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjQ3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorCitjb25maWcgVklERU9fSERQVlIKKwl0cmlzdGF0ZSAiSGF1cHBhdWdlIEhEIFBWUiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgSGF1cHBhdWdlJ3MgSEQgUFZSIFVTQiBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhkcHZyCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjMwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAoraGRwdnItb2Jqcwk6PSBoZHB2ci1jb250cm9sLm8gaGRwdnItY29yZS5vIGhkcHZyLXZpZGVvLm8KKworaGRwdnItJChDT05GSUdfSTJDKSArPSBoZHB2ci1pMmMubworCitvYmotJChDT05GSUdfVklERU9fSERQVlIpICs9IGhkcHZyLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworCitFWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3OTE3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogSGF1cHBhdWdlIEhEIFBWUiBVU0IgZHJpdmVyIC0gdmlkZW8gNCBsaW51eCAyIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsIHU4IHZhbGJ1ZikKK3sKKwlpbnQgcmV0OworCWNoYXIgcmVxdWVzdF90eXBlID0gMHgzOCwgc25kX3JlcXVlc3QgPSAweDAxOworCisJbXNsZWVwKDEwKTsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJZGV2LT51c2JjX2J1ZlswXSA9IHZhbGJ1ZjsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICBzbmRfcmVxdWVzdCwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIHZhbHVlLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCAxLCAxMDAwMCk7CisKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJjb25maWcgY2FsbCByZXF1ZXN0IGZvciB2YWx1ZSAweCV4IHJldHVybmVkICVkXG4iLCB2YWx1ZSwKKwkJIHJldCk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvICpnZXRfdmlkZW9faW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKnZpZGluZiA9IE5VTEw7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1ZlsxNV07CisjZW5kaWYKKwlpbnQgcmV0OworCisJdmlkaW5mID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZpZGluZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ODEsIDB4ODAgfCAweDM4LAorCQkJICAgICAgMHgxNDAwLCAweDAwMDMsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCA1LAorCQkJICAgICAgMTAwMCk7CisJaWYgKHJldCA9PSA1KSB7CisJCXZpZGluZi0+d2lkdGgJPSBkZXYtPnVzYmNfYnVmWzFdIDw8IDggfCBkZXYtPnVzYmNfYnVmWzBdOworCQl2aWRpbmYtPmhlaWdodAk9IGRldi0+dXNiY19idWZbM10gPDwgOCB8IGRldi0+dXNiY19idWZbMl07CisJCXZpZGluZi0+ZnBzCT0gZGV2LT51c2JjX2J1Zls0XTsKKwl9CisKKyNpZmRlZiBIRFBWUl9ERUJVRworCWlmIChoZHB2cl9kZWJ1ZyAmIE1TR19JTkZPKSB7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihkZXYtPnVzYmNfYnVmLCA1LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiZ2V0IHZpZGVvIGluZm8gcmV0dXJuZWQ6ICVkLCAlc1xuIiwgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWlmICghdmlkaW5mLT53aWR0aCB8fCAhdmlkaW5mLT5oZWlnaHQgfHwgIXZpZGluZi0+ZnBzKSB7CisJCWtmcmVlKHZpZGluZik7CisJCXZpZGluZiA9IE5VTEw7CisJfQorZXJyOgorCXJldHVybiB2aWRpbmY7Cit9CisKK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1Zls5XTsKKyNlbmRpZgorCWludCByZXQsIGxpbmVzOworCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweDgxLCAweDgwIHwgMHgzOCwKKwkJCSAgICAgIDB4MTgwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgMywKKwkJCSAgICAgIDEwMDApOworCisjaWZkZWYgSERQVlJfREVCVUcKKwlpZiAoaGRwdnJfZGVidWcgJiBNU0dfSU5GTykgeworCQloZXhfZHVtcF90b19idWZmZXIoZGV2LT51c2JjX2J1ZiwgMywgMTYsIDEsIHByaW50X2J1ZiwKKwkJCQkgICBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgImdldCBpbnB1dCBsaW5lcyBpbmZvIHJldHVybmVkOiAlZCwgJXNcbiIsIHJldCwKKwkJCSBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWxpbmVzID0gZGV2LT51c2JjX2J1ZlsxXSA8PCA4IHwgZGV2LT51c2JjX2J1ZlswXTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJcmV0dXJuIGxpbmVzOworfQorCisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJbWVtc2V0KGRldi0+dXNiY19idWYsIDAsIDQpOworCWRldi0+dXNiY19idWZbMF0gPSBkZXYtPm9wdGlvbnMuYml0cmF0ZTsKKwlkZXYtPnVzYmNfYnVmWzJdID0gZGV2LT5vcHRpb25zLnBlYWtfYml0cmF0ZTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQklUUkFURV9WQUxVRSwKKwkJCSAgICAgIENUUkxfREVGQVVMVF9JTkRFWCwgZGV2LT51c2JjX2J1ZiwgNCwgMTAwMCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9hdWRpbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHU4IGlucHV0LAorCQkgICAgZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgY29kZWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCQltZW1zZXQoZGV2LT51c2JjX2J1ZiwgMCwgMik7CisJCWRldi0+dXNiY19idWZbMF0gPSBpbnB1dDsKKwkJaWYgKGNvZGVjID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMpCisJCQlkZXYtPnVzYmNfYnVmWzFdID0gMDsKKwkJZWxzZSBpZiAoY29kZWMgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCWRldi0+dXNiY19idWZbMV0gPSAxOworCQllbHNlIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiaW52YWxpZCBhdWRpbyBjb2RlYyAlZFxuIiwKKwkJCQkgY29kZWMpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQVVESU9fSU5QVVRfVkFMVUUsCisJCQkJICAgICAgQ1RSTF9ERUZBVUxUX0lOREVYLCBkZXYtPnVzYmNfYnVmLCAyLAorCQkJCSAgICAgIDEwMDApOworCQltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJCWlmIChyZXQgPT0gMikKKwkJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9BVURJT19JTlBVVF9WQUxVRSwKKwkJCQkJZGV2LT5vcHRpb25zLmF1ZGlvX2lucHV0KzEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIGRldi0+b3B0aW9ucy52aWRlb19zdGQpOworCisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX0lOUFVUX1ZBTFVFLAorCQkJIGRldi0+b3B0aW9ucy52aWRlb19pbnB1dCsxKTsKKworICAgICAgIGhkcHZyX3NldF9hdWRpbyhkZXYsIGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCsxLAorCQkgICAgICAgZGV2LT5vcHRpb25zLmF1ZGlvX2NvZGVjKTsKKworICAgICAgIGhkcHZyX3NldF9iaXRyYXRlKGRldik7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRSwKKwkJCSBkZXYtPm9wdGlvbnMuYml0cmF0ZV9tb2RlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfR09QX01PREVfVkFMVUUsIGRldi0+b3B0aW9ucy5nb3BfbW9kZSk7CisKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgZGV2LT5vcHRpb25zLmJyaWdodG5lc3MpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgICBkZXYtPm9wdGlvbnMuY29udHJhc3QpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsICAgICAgICBkZXYtPm9wdGlvbnMuaHVlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgZGV2LT5vcHRpb25zLnNhdHVyYXRpb24pOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TSEFSUE5FU1MsICBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzKTsKKworICAgICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhiZDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgSmFubmUgR3J1bmF1IChqQGphbm5hdS5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKb2huIFBvZXQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCitzdGF0aWMgaW50IHZpZGVvX25yW0hEUFZSX01BWF0gPSB7WzAgLi4uIChIRFBWUl9NQVggLSAxKV0gPSBVTlNFVH07Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gZGV2aWNlIG51bWJlciAoLTE9QXV0bykiKTsKKworLyogaG9sZHMgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZXZpY2VzICovCitzdGF0aWMgYXRvbWljX3QgZGV2X25yID0gQVRPTUlDX0lOSVQoLTEpOworCitpbnQgaGRwdnJfZGVidWc7Cittb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOworCit1aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF92aWRlb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF92aWRlb19pbnB1dCwgImRlZmF1bHQgdmlkZW8gaW5wdXQ6IDA9Q29tcG9uZW50IC8gIgorCQkgIjE9Uy1WaWRlbyAvIDI9Q29tcG9zaXRlIik7CisKK3VpbnQgZGVmYXVsdF9hdWRpb19pbnB1dCA9IEhEUFZSX0FVRElPX0lOUFVUUzsKK21vZHVsZV9wYXJhbShkZWZhdWx0X2F1ZGlvX2lucHV0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2F1ZGlvX2lucHV0LCAiZGVmYXVsdCBhdWRpbyBpbnB1dDogMD1SQ0EgYmFjayAvICIKKwkJICIxPVJDQSBmcm9udCAvIDI9Uy9QRElGIik7CisKK3N0YXRpYyBpbnQgYm9vc3RfYXVkaW87Cittb2R1bGVfcGFyYW0oYm9vc3RfYXVkaW8sIGJvb2wsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJvb3N0X2F1ZGlvLCAiYm9vc3QgdGhlIGF1ZGlvIHNpZ25hbCIpOworCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoZHB2cl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQxKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDIpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CisKKwordm9pZCBoZHB2cl9kZWxldGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCWhkcHZyX2ZyZWVfYnVmZmVycyhkZXYpOworCisJaWYgKGRldi0+dmlkZW9fZGV2KQorCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZpZGVvX2Rldik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworfQorCitzdGF0aWMgdm9pZCBjaGFsbGVuZ2UodTggKmJ5dGVzKQoreworCXU2NCAqaTY0UCwgdG1wNjQ7CisJdWludCBpLCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDMyOyArK2lkeCkgeworCisJCWlmIChpZHggJiAweDMpCisJCQlieXRlc1soaWR4ID4+IDMpICsgM10gPSBieXRlc1soaWR4ID4+IDIpICYgMHgzXTsKKworCQlzd2l0Y2ggKGlkeCAmIDB4MykgeworCQljYXNlIDB4MzoKKwkJCWJ5dGVzWzJdICs9IGJ5dGVzWzNdICogNCArIGJ5dGVzWzRdICsgYnl0ZXNbNV07CisJCQlieXRlc1s0XSArPSBieXRlc1soaWR4ICYgMHgxKSAqIDJdICogOSArIDk7CisJCQlicmVhazsKKwkJY2FzZSAweDE6CisJCQlieXRlc1swXSAqPSA4OworCQkJYnl0ZXNbMF0gKz0gNyppZHggKyA0OworCQkJYnl0ZXNbNl0gKz0gYnl0ZXNbM10gKiAzOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOgorCQkJYnl0ZXNbMyAtIChpZHggPj4gMyldID0gYnl0ZXNbaWR4ID4+IDJdOworCQkJYnl0ZXNbNV0gKz0gYnl0ZXNbNl0gKiAzOworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQlieXRlc1szXSAqPSBieXRlc1szXSArIDE7CisJCQlicmVhazsKKwkJY2FzZSAweDI6CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJCWJ5dGVzWzFdICo9IGJ5dGVzWzZdICsgMTsKKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQlpNjRQID0gKHU2NCAqKWJ5dGVzOworCQkJCXRtcDY0ID0gbGU2NF90b19jcHVwKGk2NFApOworCQkJCXRtcDY0IDw8PSBieXRlc1s3XSAmIDB4MGY7CisJCQkJKmk2NFAgKz0gY3B1X3RvX2xlNjQodG1wNjQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qIHRyeSB0byBpbml0IHRoZSBkZXZpY2UgbGlrZSB0aGUgd2luZG93cyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2F1dGhvcml6YXRpb24oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCisJaW50IHJldCwgcmV0dmFsID0gLUVOT01FTTsKKwljaGFyIHJlcXVlc3RfdHlwZSA9IDB4MzgsIHJjdl9yZXF1ZXN0ID0gMHg4MTsKKwljaGFyICpyZXNwb25zZTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCXNpemVfdCBidWZfc2l6ZSA9IDQ2OworCWNoYXIgKnByaW50X2J1ZiA9IGt6YWxsb2MoNSpidWZfc2l6ZSsxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2J1ZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKyNlbmRpZgorCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICByY3ZfcmVxdWVzdCwgMHg4MCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDQwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgNDYsCisJCQkgICAgICAxMDAwMCk7CisJaWYgKHJldCAhPSA0NikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCSAidW5leHBlY3RlZCBhbnN3ZXIgb2Ygc3RhdHVzIHJlcXVlc3QsIGxlbiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisjaWZkZWYgSERQVlJfREVCVUcKKwllbHNlIHsKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKGRldi0+dXNiY19idWYsIDQ2LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiU3RhdHVzIHJlcXVlc3QgcmV0dXJuZWQsIGxlbiAlZDogJXNcbiIsCisJCQkgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWlmIChkZXYtPnVzYmNfYnVmWzFdID09IEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04pIHsKKwkJZGV2LT5mbGFncyAmPSB+SERQVlJfRkxBR19BQzNfQ0FQOworCX0gZWxzZSBpZiAoZGV2LT51c2JjX2J1ZlsxXSA9PSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgaWYgKGRldi0+dXNiY19idWZbMV0gPiBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJ1bnRlc3RlZCBmaXJtd2FyZSB2ZXJzaW9uIDB4JXgsICIKKwkJCSAgInRoZSBkcml2ZXIgbWlnaHQgbm90IHdvcmtcbiIsIGRldi0+dXNiY19idWZbMV0pOworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInVua25vd24gZmlybXdhcmUgdmVyc2lvbiAweCV4XG4iLAorCQkJZGV2LT51c2JjX2J1ZlsxXSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVzcG9uc2UgPSBkZXYtPnVzYmNfYnVmKzM4OworI2lmZGVmIEhEUFZSX0RFQlVHCisJaGV4X2R1bXBfdG9fYnVmZmVyKHJlc3BvbnNlLCA4LCAxNiwgMSwgcHJpbnRfYnVmLCBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwgImNoYWxsZW5nZTogJXNcbiIsCisJCSBwcmludF9idWYpOworI2VuZGlmCisJY2hhbGxlbmdlKHJlc3BvbnNlKTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1Ziwgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsICIgcmVzcG9uc2U6ICVzXG4iLAorCQkgcHJpbnRfYnVmKTsKKyNlbmRpZgorCisJbXNsZWVwKDEwMCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHhkMSwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDAwMCwgMHgwMDAwLAorCQkJICAgICAgcmVzcG9uc2UsIDgsCisJCQkgICAgICAxMDAwMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJtYWdpYyByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCXJldHZhbCA9IHJldCAhPSA4OworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBoZHB2cl9kZXZpY2VfaW5pdChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwl1OCAqYnVmOworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2aWNlX2F1dGhvcml6YXRpb24oZGV2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwkvKiBkZWZhdWx0IG9wdGlvbnMgZm9yIGluaXQgKi8KKwloZHB2cl9zZXRfb3B0aW9ucyhkZXYpOworCisJLyogc2V0IGZpbHRlciBvcHRpb25zICovCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlidWYgPSBkZXYtPnVzYmNfYnVmOworCWJ1ZlswXSA9IDB4MDM7IGJ1ZlsxXSA9IDB4MDM7IGJ1ZlsyXSA9IDB4MDA7IGJ1ZlszXSA9IDB4MDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHgzOCwKKwkJCSAgICAgIENUUkxfTE9XX1BBU1NfRklMVEVSX1ZBTFVFLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBidWYsIDQsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwl2aWRpbmYgPSBnZXRfdmlkZW9faW5mbyhkZXYpOworCWlmICghdmlkaW5mKQorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJIm5vIHZhbGlkIHZpZGVvIHNpZ25hbCBvciBkZXZpY2UgaW5pdCBmYWlsZWRcbiIpOworCWVsc2UKKwkJa2ZyZWUodmlkaW5mKTsKKworCS8qIGVuYWJsZSBmYW4gYW5kIGJsaW5nIGxlZHMgKi8KKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCWJ1ZlswXSA9IDB4MTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweGQ0LCAweDM4LCAwLCAwLCBidWYsIDEsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCS8qIGJvb3N0IGFuYWxvZyBhdWRpbyAqLworCWJ1ZlswXSA9IGJvb3N0X2F1ZGlvOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ZDUsIDB4MzgsIDAsIDAsIGJ1ZiwgMSwKKwkJCSAgICAgIDEwMDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiY29udHJvbCByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX0lETEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRwdnJfb3B0aW9ucyBoZHB2cl9kZWZhdWx0X29wdGlvbnMgPSB7CisJLnZpZGVvX3N0ZAk9IEhEUFZSXzYwSFosCisJLnZpZGVvX2lucHV0CT0gSERQVlJfQ09NUE9ORU5ULAorCS5hdWRpb19pbnB1dAk9IEhEUFZSX1JDQV9CQUNLLAorCS5iaXRyYXRlCT0gNjUsIC8qIDYgbWJwcyAqLworCS5wZWFrX2JpdHJhdGUJPSA5MCwgLyogOSBtYnBzICovCisJLmJpdHJhdGVfbW9kZQk9IEhEUFZSX0NPTlNUQU5ULAorCS5nb3BfbW9kZQk9IEhEUFZSX1NJTVBMRV9JRFJfR09QLAorCS5hdWRpb19jb2RlYwk9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJLmJyaWdodG5lc3MJPSAweDg2LAorCS5jb250cmFzdAk9IDB4ODAsCisJLmh1ZQkJPSAweDgwLAorCS5zYXR1cmF0aW9uCT0gMHg4MCwKKwkuc2hhcnBuZXNzCT0gMHg4MCwKK307CisKK3N0YXRpYyBpbnQgaGRwdnJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWdpc3RlciB2NGwyX2RldmljZSBlYXJseSBzbyBpdCBjYW4gYmUgdXNlZCBmb3IgcHJpbnRrcyAqLworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmaW50ZXJmYWNlLT5kZXYsICZkZXYtPnY0bDJfZGV2KSkgeworCQllcnIoInY0bDJfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCW11dGV4X2luaXQoJmRldi0+aW9fbXV0ZXgpOworCW11dGV4X2luaXQoJmRldi0+aTJjX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnVzYmNfbXV0ZXgpOworCWRldi0+dXNiY19idWYgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dXNiY19idWYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfYnVmZmVyKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZGF0YSk7CisKKwlkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJoZHB2cl9idWZmZXIiKTsKKwlpZiAoIWRldi0+d29ya3F1ZXVlKQorCQlnb3RvIGVycm9yOworCisJLyogaW5pdCB2aWRlbyB0cmFuc2ZlciBxdWV1ZXMgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlkZXYtPm9wdGlvbnMgPSBoZHB2cl9kZWZhdWx0X29wdGlvbnM7CisKKwlpZiAoZGVmYXVsdF92aWRlb19pbnB1dCA8IEhEUFZSX1ZJREVPX0lOUFVUUykKKwkJZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0ID0gZGVmYXVsdF92aWRlb19pbnB1dDsKKworCWlmIChkZWZhdWx0X2F1ZGlvX2lucHV0IDwgSERQVlJfQVVESU9fSU5QVVRTKQorCQlkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQgPSBkZWZhdWx0X2F1ZGlvX2lucHV0OworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKKwkJCS8qIFVTQiBpbnRlcmZhY2UgZGVzY3JpcHRpb24gaXMgYnVnZ3ksIHJlcG9ydGVkIG1heAorCQkJICogcGFja2V0IHNpemUgaXMgNTEyIGJ5dGVzLCB3aW5kb3dzIGRyaXZlciB1c2VzIDgxOTIgKi8KKwkJCWJ1ZmZlcl9zaXplID0gODE5MjsKKwkJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKworCX0KKwlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0IHRoZSBkZXZpY2UgKi8KKwlpZiAoaGRwdnJfZGV2aWNlX2luaXQoZGV2KSkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImRldmljZSBpbml0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKGhkcHZyX2FsbG9jX2J1ZmZlcnMoZGV2LCBOVU1fQlVGRkVSUykpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkgImFsbG9jYXRpbmcgdHJhbnNmZXIgYnVmZmVycyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJaWYgKGhkcHZyX3JlZ2lzdGVyX3ZpZGVvZGV2KGRldiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICB2aWRlb19uclthdG9taWNfaW5jX3JldHVybigmZGV2X25yKV0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgdmlkZW9kZXYgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKyNpZmRlZiBDT05GSUdfSTJDCisJLyogdW50aWwgaTJjIGlzIHdvcmtpbmcgcHJvcGVybHkgKi8KKwlyZXR2YWwgPSAwOyAvKiBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOyAqLworCWlmIChyZXR2YWwgPCAwKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisjZW5kaWYgLyogQ09ORklHX0kyQyAqLworCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgImRldmljZSBub3cgYXR0YWNoZWQgdG8gL2Rldi92aWRlbyVkXG4iLAorCQkgIGRldi0+dmlkZW9fZGV2LT5taW5vcik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChkZXYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJLyogdGhpcyBmcmVlcyBhbGxvY2F0ZWQgbWVtb3J5ICovCisJCWhkcHZyX2RlbGV0ZShkZXYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBoZHB2cl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OworCWludCBtaW5vcjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwltaW5vciA9IGRldi0+dmlkZW9fZGV2LT5taW5vcjsKKworCS8qIHByZXZlbnQgbW9yZSBJL08gZnJvbSBzdGFydGluZyBhbmQgc3RvcCBhbnkgb25nb2luZyAqLworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0RJU0NPTk5FQ1RFRDsKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZkZXYtPnY0bDJfZGV2KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfZGF0YSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCW1zbGVlcCgxMDApOworCWZsdXNoX3dvcmtxdWV1ZShkZXYtPndvcmtxdWV1ZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrcXVldWUpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkvKiBkZXJlZ2lzdGVyIEkyQyBhZGFwdGVyICovCisjaWZkZWYgQ09ORklHX0kyQworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKwlpZiAoZGV2LT5pMmNfYWRhcHRlcikKKwkJaTJjX2RlbF9hZGFwdGVyKGRldi0+aTJjX2FkYXB0ZXIpOworCWtmcmVlKGRldi0+aTJjX2FkYXB0ZXIpOworCWRldi0+aTJjX2FkYXB0ZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KKworCWF0b21pY19kZWMoJmRldl9ucik7CisKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2UgL2Rldi92aWRlbyVkIGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJa2ZyZWUoZGV2LT51c2JjX2J1Zik7CisJa2ZyZWUoZGV2KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGRwdnJfdXNiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiaGRwdnIiLAorCS5wcm9iZSA9CWhkcHZyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JaGRwdnJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQloZHB2cl90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhkcHZyX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhkcHZyX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGhkcHZyX2luaXQpOworbW9kdWxlX2V4aXQoaGRwdnJfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbm5lIEdydW5hdSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXVwcGF1Z2UgSEQgUFZSIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNWQxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKQEAgLTAsMCArMSwxNDUgQEAKKworLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisjZGVmaW5lIENUUkxfUkVBRF9SRVFVRVNUCTB4YjgKKyNkZWZpbmUgQ1RSTF9XUklURV9SRVFVRVNUCTB4MzgKKworI2RlZmluZSBSRVFUWVBFX0kyQ19SRUFECTB4YjEKKyNkZWZpbmUgUkVRVFlQRV9JMkNfV1JJVEUJMHhiMAorI2RlZmluZSBSRVFUWVBFX0kyQ19XUklURV9TVEFUVAkweGQwCisKK3N0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwljaGFyICpidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfUkVBRCwgQ1RSTF9SRUFEX1JFUVVFU1QsCisJCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisKKwlpZiAocmV0ID09IGxlbikgeworCQltZW1jcHkoZGF0YSwgYnVmLCBsZW4pOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAocmV0ID49IDApCisJCXJldCA9IC1FSU87CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZHB2cl9pMmNfd3JpdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgICBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJY2hhciAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShidWYsIGRhdGEsIGxlbik7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEUsIENUUkxfV1JJVEVfUkVRVUVTVCwKKwkJCSAgICAgIDB4MTAwfGFkZHIsIDAsIGJ1ZiwgbGVuLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQsIENUUkxfUkVBRF9SRVFVRVNULAorCQkJICAgICAgMCwgMCwgYnVmLCAyLCAxMDAwKTsKKworCWlmIChyZXQgPT0gMikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQgPj0gMCkKKwkJcmV0ID0gLUVJTzsKKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhkcHZyX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkJICBpbnQgbnVtKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIpOworCWludCByZXR2YWwgPSAwLCBpLCBhZGRyOworCisJaWYgKG51bSA8PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW0gJiYgIXJldHZhbDsgaSsrKSB7CisJCWFkZHIgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3JlYWQoZGV2LCBhZGRyLCBtc2dzW2ldLmJ1ZiwKKwkJCQkJCW1zZ3NbaV0ubGVuKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3dyaXRlKGRldiwgYWRkciwgbXNnc1tpXS5idWYsCisJCQkJCQkgbXNnc1tpXS5sZW4pOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IG51bTsKK30KKworc3RhdGljIHUzMiBoZHB2cl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGhkcHZyX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBoZHB2cl90cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGhkcHZyX2Z1bmN0aW9uYWxpdHksCit9OworCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlpMmNfYWRhcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmIChpMmNfYWRhcCA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3RybGNweShpMmNfYWRhcC0+bmFtZSwgIkhhdXBwYXVnZSBIRCBQVlIgSTJDIiwKKwkJc2l6ZW9mKGkyY19hZGFwLT5uYW1lKSk7CisJaTJjX2FkYXAtPmFsZ28gID0gJmhkcHZyX2FsZ287CisJaTJjX2FkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKwlpMmNfYWRhcC0+aWQgICAgPSBJMkNfSFdfQl9IRFBWUjsKKwlpMmNfYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlpMmNfYWRhcC0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKworCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIGRldik7CisKKwlyZXR2YWwgPSBpMmNfYWRkX2FkYXB0ZXIoaTJjX2FkYXApOworCisJaWYgKCFyZXR2YWwpCisJCWRldi0+aTJjX2FkYXB0ZXIgPSBpMmNfYWRhcDsKKwllbHNlCisJCWtmcmVlKGkyY19hZGFwKTsKKworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZmZmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0wLDAgKzEsMTI0OCBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlciAtIHZpZGVvIDQgbGludXggMiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgImhkcHZyLmgiCisKKyNkZWZpbmUgQlVMS19VUkJfVElNRU9VVCAxMjUwIC8qIDEuMjUgc2Vjb25kcyAqLworCisjZGVmaW5lIHByaW50X2J1ZmZlcl9zdGF0dXMoKSB7IFwKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAlcCisJCQkgIiVzOiVkIGJ1ZmZlciBzdGF0OiAlZCBmcmVlLCAlZCBwcm9jXG4iLAlcCisJCQkgX19mdW5jX18sIF9fTElORV9fLAkJCQlcCisJCQkgbGlzdF9zaXplKCZkZXYtPmZyZWVfYnVmZl9saXN0KSwJCVwKKwkJCSBsaXN0X3NpemUoJmRldi0+cmVjX2J1ZmZfbGlzdCkpOyB9CisKK3N0cnVjdCBoZHB2cl9maCB7CisJc3RydWN0IGhkcHZyX2RldmljZQkqZGV2OworfTsKKworc3RhdGljIHVpbnQgbGlzdF9zaXplKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVpbnQgY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaCh0bXAsIGxpc3QpIHsKKwkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiB1cmIgY2FsbGJhY2sgKi8KK3N0YXRpYyB2b2lkIGhkcHZyX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmID0gKHN0cnVjdCBoZHB2cl9idWZmZXIgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gYnVmLT5kZXY7CisKKwkvKiBtYXJraW5nIGJ1ZmZlciBhcyByZWNlaXZlZCBhbmQgd2FrZSB3YWl0aW5nICovCisJYnVmLT5zdGF0dXMgPSBCVUZTVEFUX1JFQURZOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2RhdGEpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmZlciBiaXRzICovCisKKy8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLworaW50IGhkcHZyX2NhbmNlbF9xdWV1ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZkZXYtPnJlY19idWZmX2xpc3QsIGJ1ZmZfbGlzdCkgeworCQl1c2Jfa2lsbF91cmIoYnVmLT51cmIpOworCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfQVZBSUxBQkxFOworCX0KKworCWxpc3Rfc3BsaWNlX2luaXQoJmRldi0+cmVjX2J1ZmZfbGlzdCwgZGV2LT5mcmVlX2J1ZmZfbGlzdC5wcmV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkcHZyX2ZyZWVfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCisJZm9yIChwID0gcS0+bmV4dDsgcCAhPSBxOykgeworCQlidWYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZHB2cl9idWZmZXIsIGJ1ZmZfbGlzdCk7CisKKwkJdXJiID0gYnVmLT51cmI7CisJCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbChwKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfZnJlZV9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgY291bnQpCit7CisJdWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXU4ICptZW07CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiYWxsb2NhdGluZyAldSBidWZmZXJzXG4iLCBjb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCisJCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHB2cl9idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT5kZXYgPSBkZXY7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVyYlxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT51cmIgPSB1cmI7CisKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMLAorCQkJCSAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIW1lbSkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkJICJjYW5ub3QgYWxsb2NhdGUgdXNiIHRyYW5zZmVyIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfZmlsbF9idWxrX3VyYihidWYtPnVyYiwgZGV2LT51ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJCSAgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkJICBtZW0sIGRldi0+YnVsa19pbl9zaXplLAorCQkJCSAgaGRwdnJfcmVhZF9idWxrX2NhbGxiYWNrLCBidWYpOworCisJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJfQorCXJldHVybiAwOworZXhpdDoKKwloZHB2cl9mcmVlX2J1ZmZlcnMoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3N1Ym1pdF9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXQgPSAwLCBlcnJfY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwl3aGlsZSAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORyAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5mcmVlX2J1ZmZfbGlzdCkpIHsKKworCQlidWYgPSBsaXN0X2VudHJ5KGRldi0+ZnJlZV9idWZmX2xpc3QubmV4dCwgc3RydWN0IGhkcHZyX2J1ZmZlciwKKwkJCQkgYnVmZl9saXN0KTsKKwkJaWYgKGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfQVZBSUxBQkxFKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgImJ1ZmZlciBub3QgbWFya2VkIGFzIGF2YWlsYmFsZVxuIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQl1cmIgPSBidWYtPnVyYjsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIGluICVzIHJldHVybmVkICVkXG4iLAorCQkJCSBfX2Z1bmNfXywgcmV0KTsKKwkJCWlmICgrK2Vycl9jb3VudCA+IDIpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfSU5QUk9HUkVTUzsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5yZWNfYnVmZl9saXN0KTsKKwl9CitlcnI6CisJcHJpbnRfYnVmZmVyX3N0YXR1cygpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBoZHB2cl9idWZmZXIgKmhkcHZyX2dldF9uZXh0X2J1ZmZlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5yZWNfYnVmZl9saXN0KSkgeworCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlidWYgPSBsaXN0X2VudHJ5KGRldi0+cmVjX2J1ZmZfbGlzdC5uZXh0LCBzdHJ1Y3QgaGRwdnJfYnVmZmVyLAorCQkJIGJ1ZmZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGhkcHZyX3RyYW5zbWl0X2J1ZmZlcnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaGRwdnJfZGV2aWNlLAorCQkJCQkJd29ya2VyKTsKKworCXdoaWxlIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfU1RSRUFNSU5HKSB7CisKKwkJaWYgKGhkcHZyX3N1Ym1pdF9idWZmZXJzKGRldikpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY291bGRuJ3Qgc3VibWl0IGJ1ZmZlcnNcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d2FpdF9idWZmZXIsCisJCQkJIWxpc3RfZW1wdHkoJmRldi0+ZnJlZV9idWZmX2xpc3QpIHx8CisJCQkJCSAgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykpCisJCQlnb3RvIGVycm9yOworCX0KKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidHJhbnNtaXQgd29ya2VyIGV4aXRlZFxuIik7CisJcmV0dXJuOworZXJyb3I6CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJ0cmFuc21pdCBidWZmZXJzIGVycm9yZWRcbiIpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0VSUk9SOworfQorCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJdmlkaW5mID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKworCWlmICh2aWRpbmYpIHsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJ2aWRlbyBzaWduYWw6ICVkeCVkQCVkaHpcbiIsIHZpZGluZi0+d2lkdGgsCisJCQkgdmlkaW5mLT5oZWlnaHQsIHZpZGluZi0+ZnBzKTsKKwkJa2ZyZWUodmlkaW5mKTsKKworCQkvKiBzdGFydCBzdHJlYW1pbmcgMiByZXF1ZXN0ICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICAgICAgMHhiOCwgMHgzOCwgMHgxLCAwLCBOVUxMLCAwLCA4MDAwKTsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJlbmNvZGVyIHN0YXJ0IGNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU1RBUlRfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKworCQlJTklUX1dPUksoJmRldi0+d29ya2VyLCBoZHB2cl90cmFuc21pdF9idWZmZXJzKTsKKwkJcXVldWVfd29yayhkZXYtPndvcmtxdWV1ZSwgJmRldi0+d29ya2VyKTsKKworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgInN0cmVhbWluZyBzdGFydGVkXG4iKTsKKwkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfU1RSRUFNSU5HOworCisJCXJldHVybiAwOworCX0KKwltc2xlZXAoMjUwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgIm5vIHZpZGVvIHNpZ25hbCBhdCBpbnB1dCAlZFxuIiwgZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0KTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJdTggKmJ1ZjsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlidWYgPSBrbWFsbG9jKGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IGJ1ZmZlciAiCisJCQkgImZvciBlbXB0eWluZyB0aGUgaW50ZXJuYWwgZGV2aWNlIGJ1ZmZlci4gIgorCQkJICJOZXh0IGNhcHR1cmUgc3RhcnQgd2lsbCBiZSBzbG93XG4iKTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX1NIVVRUSU5HX0RPV047CisJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NUT1BfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltc2xlZXAoNTApOworCisJZmx1c2hfd29ya3F1ZXVlKGRldi0+d29ya3F1ZXVlKTsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCS8qIGtpbGwgdGhlIHN0aWxsIG91dHN0YW5kaW5nIHVyYnMgKi8KKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCS8qIGVtcHR5aW5nIHRoZSBkZXZpY2UgYnVmZmVyIGJlZm9yZXNodXR0aW5nIGl0IGRvd24gKi8KKwl3aGlsZSAoYnVmICYmICsrYyA8IDUwMCAmJgorCSAgICAgICAhdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJICAgICBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCSAgICAgYnVmLCBkZXYtPmJ1bGtfaW5fc2l6ZSwgJmFjdHVhbF9sZW5ndGgsCisJCQkgICAgIEJVTEtfVVJCX1RJTUVPVVQpKSB7CisJCS8qIHdhaXQgKi8KKwkJbXNsZWVwKDUpOworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgIiUyZDogZ290ICVkIGJ5dGVzXG4iLCBjLCBhY3R1YWxfbGVuZ3RoKTsKKwl9CisJa2ZyZWUoYnVmKTsKKwl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidXNlZCAlZCB1cmJzIHRvIGVtcHR5IGRldmljZSBidWZmZXJzXG4iLCBjLTEpOworCW1zbGVlcCgxMCk7CisKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCisJcmV0dXJuIDA7Cit9CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICogdmlkZW8gNCBsaW51eCAyIGZpbGUgb3BlcmF0aW9ucworICovCisKK3N0YXRpYyBpbnQgaGRwdnJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IGhkcHZyX2ZoICpmaDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IChzdHJ1Y3QgaGRwdnJfZGV2aWNlICopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaWYgKCFkZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJvcGVuIGZhaWxpbmcgd2l0aCB3aXRoIEVOT0RFVlxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisJLyogbG9jayB0aGUgZGV2aWNlIHRvIGFsbG93IGNvcnJlY3RseSBoYW5kbGluZyBlcnJvcnMKKwkgKiBpbiByZXN1bXB0aW9uICovCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJZGV2LT5vcGVuX2NvdW50Kys7CisKKwlmaC0+ZGV2ID0gZGV2OworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKworCXJldHZhbCA9IDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhkcHZyX2ZoCQkqZmggID0gKHN0cnVjdCBoZHB2cl9maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXYgPSBmaC0+ZGV2OworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKCEoLS1kZXYtPm9wZW5fY291bnQpICYmIGRldi0+c3RhdHVzID09IFNUQVRVU19TVFJFQU1JTkcpCisJCWhkcHZyX3N0b3Bfc3RyZWFtaW5nKGRldik7CisKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBoZHB2cl92NGwyX3JlYWQoKQorICogd2lsbCBhbGxvY2F0ZSBidWZmZXJzIHdoZW4gY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZQorICovCitzdGF0aWMgc3NpemVfdCBoZHB2cl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWYgPSBOVUxMOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwlpbnQgcmVtLCBjbnQ7CisKKwlpZiAoKnBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpIHsKKwkJaWYgKGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpKSB7CisJCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJCSAic3RhcnRfc3RyZWFtaW5nIGZhaWxlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJbXNsZWVwKDIwMCk7CisJCQlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCS8qIHdhaXQgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCisJd2hpbGUgKGNvdW50ID4gMCAmJiBidWYpIHsKKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSAmJgorCQkgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0RJU0NPTk5FQ1RFRCkgeworCQkJLyogcmV0dXJuIG5vbmJsb2NraW5nICovCisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICAgYnVmLT5zdGF0dXMgPT0gQlVGU1RBVF9SRUFEWSkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSkKKwkJCWJyZWFrOworCisJCS8qIHNldCByZW1haW5pbmcgYnl0ZXMgdG8gY29weSAqLworCQl1cmIgPSBidWYtPnVyYjsKKwkJcmVtID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gYnVmLT5wb3M7CisJCWNudCA9IHJlbSA+IGNvdW50ID8gY291bnQgOiByZW07CisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYnVmLT5wb3MsCisJCQkJIGNudCkpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQlidWYtPnBvcyArPSBjbnQ7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKworCQkvKiBmaW5pc2hlZCwgdGFrZSBuZXh0IGJ1ZmZlciAqLworCQlpZiAoYnVmLT5wb3MgPT0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWJ1Zi0+cG9zID0gMDsKKwkJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZidWYtPmJ1ZmZfbGlzdCwgJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCisJCQlwcmludF9idWZmZXJfc3RhdHVzKCk7CisKKwkJCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2J1ZmZlcik7CisKKwkJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCQl9CisJfQorZXJyOgorCWlmICghcmV0ICYmICFidWYpCisJCXJldCA9IC1FQUdBSU47CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZHB2cl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZiA9IE5VTEw7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IChzdHJ1Y3QgaGRwdnJfZmggKilmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWlmICh2aWRlb19pc191bnJlZ2lzdGVyZWQoZGV2LT52aWRlb19kZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkgeworCQlpZiAoaGRwdnJfc3RhcnRfc3RyZWFtaW5nKGRldikpIHsKKwkJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCQkgInN0YXJ0X3N0cmVhbWluZyBmYWlsZWRcbiIpOworCQkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfSURMRTsKKwkJfQorCisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCS8qIG9ubHkgd2FpdCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZSAqLworCWlmICghYnVmIHx8IGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfUkVBRFkpIHsKKwkJcG9sbF93YWl0KGZpbHAsICZkZXYtPndhaXRfZGF0YSwgd2FpdCk7CisJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCX0KKwlpZiAoYnVmICYmIGJ1Zi0+c3RhdHVzID09IEJVRlNUQVRfUkVBRFkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiBtYXNrOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgaGRwdnJfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaGRwdnJfb3BlbiwKKwkucmVsZWFzZQk9IGhkcHZyX3JlbGVhc2UsCisJLnJlYWQJCT0gaGRwdnJfcmVhZCwKKwkucG9sbAkJPSBoZHB2cl9wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqIFY0TDIgaW9jdGwgaGFuZGxpbmcKKyAqLworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7CisJc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCWNhcC0+dmVyc2lvbiA9IEhEUFZSX1ZFUlNJT047CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfQVVESU8gICAgICAgICB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdTggc3RkX3R5cGUgPSAxOworCisJaWYgKCpzdGQgJiAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTF82MCkpCisJCXN0ZF90eXBlID0gMDsKKworCXJldHVybiBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIHN0ZF90eXBlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJW0hEUFZSX0NPTVBPTkVOVF0gPSAiQ29tcG9uZW50IiwKKwlbSERQVlJfU1ZJREVPXSAgICA9ICJTLVZpZGVvIiwKKwlbSERQVlJfQ09NUE9TSVRFXSA9ICJDb21wb3NpdGUiLAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IG47CisKKwluID0gaS0+aW5kZXg7CisJaWYgKG4gPj0gSERQVlJfVklERU9fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJc3RybmNweShpLT5uYW1lLCBpbmFtZVtuXSwgc2l6ZW9mKGktPm5hbWUpIC0gMSk7CisJaS0+bmFtZVtzaXplb2YoaS0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlpLT5hdWRpb3NldCA9IDE8PEhEUFZSX1JDQV9GUk9OVCB8IDE8PEhEUFZSX1JDQV9CQUNLIHwgMTw8SERQVlJfU1BESUY7CisKKwlpLT5zdGQgPSBkZXYtPnZpZGVvX2Rldi0+dHZub3JtczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJldHZhbDsKKworCWlmIChpbmRleCA+PSBIRFBWUl9WSURFT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9WSURFT19JTlBVVF9WQUxVRSwgaW5kZXgrMSk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy52aWRlb19pbnB1dCA9IGluZGV4OworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCSppbmRleCA9IGRldi0+b3B0aW9ucy52aWRlb19pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqYXVkaW9faW5hbWVbXSA9IHsKKwlbSERQVlJfUkNBX0ZST05UXSA9ICJSQ0EgZnJvbnQiLAorCVtIRFBWUl9SQ0FfQkFDS10gID0gIlJDQSBiYWNrIiwKKwlbSERQVlJfU1BESUZdICAgICA9ICJTUERJRiIsCit9OworCitzdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXVuc2lnbmVkIGludCBuOworCisJbiA9IGF1ZGlvLT5pbmRleDsKKwlpZiAobiA+PSBIRFBWUl9BVURJT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVtuXSwgc2l6ZW9mKGF1ZGlvLT5uYW1lKSAtIDEpOworCWF1ZGlvLT5uYW1lW3NpemVvZihhdWRpby0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlpZiAoYXVkaW8tPmluZGV4ID49IEhEUFZSX0FVRElPX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dmFsID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgYXVkaW8tPmluZGV4KzEsIGRldi0+b3B0aW9ucy5hdWRpb19jb2RlYyk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCA9IGF1ZGlvLT5pbmRleDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCWF1ZGlvLT5pbmRleCA9IGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dDsKKwlhdWRpby0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVthdWRpby0+aW5kZXhdLCBzaXplb2YoYXVkaW8tPm5hbWUpKTsKKwlhdWRpby0+bmFtZVtzaXplb2YoYXVkaW8tPm5hbWUpIC0gMV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgczMyIHN1cHBvcnRlZF92NGwyX2N0cmxzW10gPSB7CisJVjRMMl9DSURfQlJJR0hUTkVTUywKKwlWNEwyX0NJRF9DT05UUkFTVCwKKwlWNEwyX0NJRF9TQVRVUkFUSU9OLAorCVY0TDJfQ0lEX0hVRSwKKwlWNEwyX0NJRF9TSEFSUE5FU1MsCisJVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORywKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSwKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSywKK307CisKK3N0YXRpYyBpbnQgZmlsbF9xdWVyeWN0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYywKKwkJCSAgaW50IGFjMykKK3sKKwlpbnQgZXJyOworCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDg2KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDgwKTsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAsIDB4ZmYsIDEsIDB4ODApOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKAorCQkJcWMsIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQlhYzMgPyBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQk6IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQkxLCBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQywKKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMpOworCisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPXz8gbWF5YmUga2V5ZnJhbWUgaW50ZXJ2YWw6ICovCisvKiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI4LCAxMjgsIDApOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKKwkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMTAwMDAwMCwgMTM1MDAwMDAsIDEwMDAwMCwKKwkJCQkJICAgIDY1MDAwMDApOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAxMTAwMDAwLCAyMDIwMDAwMCwgMTAwMDAwLAorCQkJCQkgICA5MDAwMDAwKTsKKwkJaWYgKCFlcnIgJiYgb3B0LT5iaXRyYXRlX21vZGUgPT0gSERQVlJfQ09OU1RBTlQpCisJCQlxYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCXJldHVybiBlcnI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgbmV4dDsKKwl1MzIgaWQgPSBxYy0+aWQ7CisKKwltZW1zZXQocWMsIDAsIHNpemVvZigqcWMpKTsKKworCW5leHQgPSAhIShpZCAmICBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwpOworCXFjLT5pZCA9IGlkICYgflY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF92NGwyX2N0cmxzKTsgaSsrKSB7CisJCWlmIChuZXh0KSB7CisJCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQkJcWMtPmlkID0gc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV07CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAocWMtPmlkID09IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldKQorCQkJcmV0dXJuIGZpbGxfcXVlcnljdHJsKCZkZXYtPm9wdGlvbnMsIHFjLAorCQkJCQkgICAgICBkZXYtPmZsYWdzICYgSERQVlJfRkxBR19BQzNfQ0FQKTsKKworCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5icmlnaHRuZXNzOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5zYXR1cmF0aW9uOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuaHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TQVRVUkFUSU9OLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlkZXYtPm9wdGlvbnMuaHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0hBUlBORVNTLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNoYXJwbmVzcyA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfZ2V0X2N0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmF1ZGlvX2NvZGVjOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkM7CisJCWJyZWFrOworLyogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogKi8KKy8qIAkJY3RybC0+dmFsdWUgPSAob3B0LT5nb3BfbW9kZSAmIDB4MikgPyAwIDogMTI4OyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQljdHJsLT52YWx1ZSA9IG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UCisJCQk/IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSCisJCQk6IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmJpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWN0cmwtPnZhbHVlID0gb3B0LT5wZWFrX2JpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQkJZXJyID0gaGRwdnJfZ2V0X2N0cmwoJmRldi0+b3B0aW9ucywgY3RybCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfdHJ5X2N0cmwoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIGludCBhYzMpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyB8fAorCQkgICAgKGFjMyAmJiBjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAqLworLyogCQlpZiAoY3RybC0+dmFsdWUgPT0gMCB8fCBjdHJsLT52YWx1ZSA9PSAxMjgpICovCisvKiAJCQlyZXQgPSAwOyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgfHwKKwkJICAgIGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKwkJaWYgKGJpdHJhdGUgPj0gMTAgJiYgYml0cmF0ZSA8PSAxMzUpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwl7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisJCWlmIChwZWFrX2JpdHJhdGUgPj0gMTAgJiYgcGVha19iaXRyYXRlIDw9IDIwMikKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJCWVyciA9IGhkcHZyX3RyeV9jdHJsKGN0cmwsCisJCQkJCSAgICAgZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgaW50IGhkcHZyX3NldF9jdHJsKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCA9ICZkZXYtPm9wdGlvbnM7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQkJb3B0LT5hdWRpb19jb2RlYyA9IGN0cmwtPnZhbHVlOworCQkJcmV0ID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgb3B0LT5hdWRpb19pbnB1dCwKKwkJCQkJICAgICAgb3B0LT5hdWRpb19jb2RlYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQlicmVhazsKKy8qIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAwICYmICEob3B0LT5nb3BfbW9kZSAmIDB4MikpIHsgKi8KKy8qIAkJCW9wdC0+Z29wX21vZGUgfD0gMHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAxMjggJiYgb3B0LT5nb3BfbW9kZSAmIDB4MikgeyAqLworLyogCQkJb3B0LT5nb3BfbW9kZSAmPSB+MHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWJyZWFrOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiAmJgorCQkgICAgb3B0LT5iaXRyYXRlX21vZGUgIT0gSERQVlJfQ09OU1RBTlQpIHsKKwkJCW9wdC0+Yml0cmF0ZV9tb2RlID0gSERQVlJfQ09OU1RBTlQ7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgJiYKKwkJICAgIG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKSB7CisJCQlvcHQtPmJpdHJhdGVfbW9kZSA9IEhEUFZSX1ZBUklBQkxFX0FWRVJBR0U7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKworCQlvcHQtPmJpdHJhdGUgPSBiaXRyYXRlOworCQlpZiAoYml0cmF0ZSA+PSBvcHQtPnBlYWtfYml0cmF0ZSkKKwkJCW9wdC0+cGVha19iaXRyYXRlID0gYml0cmF0ZSsxOworCisJCWhkcHZyX3NldF9iaXRyYXRlKGRldik7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOiB7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKQorCQkJYnJlYWs7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZSA8IHBlYWtfYml0cmF0ZSkgeworCQkJb3B0LT5wZWFrX2JpdHJhdGUgPSBwZWFrX2JpdHJhdGU7CisJCQloZHB2cl9zZXRfYml0cmF0ZShkZXYpOworCQl9IGVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCQllcnIgPSBoZHB2cl90cnlfY3RybChjdHJsLAorCQkJCQkgICAgIGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApOworCQkJaWYgKGVycikgeworCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gaGRwdnJfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCWlmIChlcnIpIHsKKwkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZXJyOworCisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKworCWlmIChmLT5pbmRleCAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCXN0cm5jcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHMi1UUyB3aXRoIEFWQy9BQUMgc3RyZWFtcyIsIDMyKTsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRfaW5mbzsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZpZF9pbmZvID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKwlpZiAoIXZpZF9pbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXgud2lkdGgJPSB2aWRfaW5mby0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQJPSB2aWRfaW5mby0+aGVpZ2h0OworCWYtPmZtdC5waXguc2l6ZWltYWdlCT0gZGV2LT5idWxrX2luX3NpemU7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlCT0gMDsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZQk9IDA7CisJZi0+Zm10LnBpeC5maWVsZAk9IFY0TDJfRklFTERfQU5ZOworCisJa2ZyZWUodmlkX2luZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCAqYSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCisJbWVtc2V0KCZhLT5yYXcsIDAsIHNpemVvZihhLT5yYXcpKTsKKwlzd2l0Y2ggKGEtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCQlhLT5mbGFncyA9IDA7CisJCXJlcyA9IGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCQlyZXMgPSBoZHB2cl9zdG9wX3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJVbnN1cHBvcnRlZCBlbmNvZGVyIGNtZCAlZFxuIiwgYS0+Y21kKTsKKwkJcmVzID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICphKQoreworCXN3aXRjaCAoYS0+Y21kKSB7CisJY2FzZSBWNEwyX0VOQ19DTURfU1RBUlQ6CisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIGhkcHZyX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCT0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAorCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsCQk9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX2dfZXh0X2N0cmxzCT0gdmlkaW9jX2dfZXh0X2N0cmxzLAorCS52aWRpb2Nfc19leHRfY3RybHMJPSB2aWRpb2Nfc19leHRfY3RybHMsCisJLnZpZGlvY190cnlfZXh0X2N0cmxzCT0gdmlkaW9jX3RyeV9leHRfY3RybHMsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfZW5jb2Rlcl9jbWQsCisJLnZpZGlvY190cnlfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfdHJ5X2VuY29kZXJfY21kLAorfTsKKworc3RhdGljIHZvaWQgaGRwdnJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKworCWhkcHZyX2RlbGV0ZShkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBoZHB2cl92aWRlb190ZW1wbGF0ZSA9IHsKKy8qIAkudHlwZQkJCT0gVkZMX1RZUEVfR1JBQkJFUiwgKi8KKy8qIAkudHlwZTIJCQk9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9NUEVHX0VOQ09ERVIsICovCisJLmZvcHMJCQk9ICZoZHB2cl9mb3BzLAorCS5yZWxlYXNlCQk9IGhkcHZyX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMgCQk9ICZoZHB2cl9pb2N0bF9vcHMsCisJLnR2bm9ybXMgCQk9CisJCVY0TDJfU1REX05UU0MgIHwgVjRMMl9TVERfU0VDQU0gfCBWNEwyX1NURF9QQUxfQiB8CisJCVY0TDJfU1REX1BBTF9HIHwgVjRMMl9TVERfUEFMX0ggfCBWNEwyX1NURF9QQUxfSSB8CisJCVY0TDJfU1REX1BBTF9EIHwgVjRMMl9TVERfUEFMX00gfCBWNEwyX1NURF9QQUxfTiB8CisJCVY0TDJfU1REX1BBTF82MCwKK307CisKK2ludCBoZHB2cl9yZWdpc3Rlcl92aWRlb2RldihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJCSAgICBpbnQgZGV2bnVtKQoreworCS8qIHNldHVwIGFuZCByZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KKwlkZXYtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghZGV2LT52aWRlb19kZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJ2aWRlb19kZXZpY2VfYWxsb2MoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCSooZGV2LT52aWRlb19kZXYpID0gaGRwdnJfdmlkZW9fdGVtcGxhdGU7CisJc3RyY3B5KGRldi0+dmlkZW9fZGV2LT5uYW1lLCAiSGF1cHBhdWdlIEhEIFBWUiIpOworCWRldi0+dmlkZW9fZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52aWRlb19kZXYsIGRldik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCBkZXZudW0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAidmlkZW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworZXJyb3I6CisJcmV0dXJuIC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZDg3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNkZWZpbmUgSERQVlJfTUFKT1JfVkVSU0lPTiAwCisjZGVmaW5lIEhEUFZSX01JTk9SX1ZFUlNJT04gMgorI2RlZmluZSBIRFBWUl9SRUxFQVNFIDAKKyNkZWZpbmUgSERQVlJfVkVSU0lPTiBcCisJS0VSTkVMX1ZFUlNJT04oSERQVlJfTUFKT1JfVkVSU0lPTiwgSERQVlJfTUlOT1JfVkVSU0lPTiwgSERQVlJfUkVMRUFTRSkKKworI2RlZmluZSBIRFBWUl9NQVggOAorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLworI2RlZmluZSBIRF9QVlJfVkVORE9SX0lECTB4MjA0MAorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRAkweDQ5MDAKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQxCTB4NDkwMQorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDIJMHg0OTAyCisKKyNkZWZpbmUgVU5TRVQgICAgKC0xVSkKKworI2RlZmluZSBOVU1fQlVGRkVSUyA2NAorCisjZGVmaW5lIEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04JCTB4OAorI2RlZmluZSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMwkweGQKKworLyogI2RlZmluZSBIRFBWUl9ERUJVRyAqLworCitleHRlcm4gaW50IGhkcHZyX2RlYnVnOworCisjZGVmaW5lIE1TR19JTkZPCTEKKyNkZWZpbmUgTVNHX0JVRkZFUgkyCisKK3N0cnVjdCBoZHB2cl9vcHRpb25zIHsKKwl1OAl2aWRlb19zdGQ7CisJdTgJdmlkZW9faW5wdXQ7CisJdTgJYXVkaW9faW5wdXQ7CisJdTgJYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CXBlYWtfYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CWJpdHJhdGVfbW9kZTsKKwl1OAlnb3BfbW9kZTsKKwllbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZwlhdWRpb19jb2RlYzsKKwl1OAlicmlnaHRuZXNzOworCXU4CWNvbnRyYXN0OworCXU4CWh1ZTsKKwl1OAlzYXR1cmF0aW9uOworCXU4CXNoYXJwbmVzczsKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgaGRwdnJfZGV2aWNlIHsKKwkvKiB0aGUgdjRsIGRldmljZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7CisJLyogdGhlIHVzYiBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJLyogdjRsMi1kZXZpY2UgdW51c2VkICovCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworCisJLyogdGhlIG1heCBwYWNrZXQgc2l6ZSBvZiB0aGUgYnVsayBlbmRwb2ludCAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsKKwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsKKworCS8qIGhvbGRzIHRoZSBjdXJyZW50IGRldmljZSBzdGF0dXMgKi8KKwlfX3U4CQkJc3RhdHVzOworCS8qIGNvdW50IHRoZSBudW1iZXIgb2Ygb3BlbmVycyAqLworCXVpbnQJCQlvcGVuX2NvdW50OworCisJLyogaG9sZHMgdGhlIGN1cmVlbnQgc2V0IG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaGRwdnJfb3B0aW9ucwlvcHRpb25zOworCisJdWludAkJCWZsYWdzOworCisJLyogc3luY2hyb25pemUgSS9PICovCisJc3RydWN0IG11dGV4CQlpb19tdXRleDsKKwkvKiBhdmFpbGFibGUgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9idWZmX2xpc3Q7CisJLyogaW4gcHJvZ3Jlc3MgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVjX2J1ZmZfbGlzdDsKKwkvKiB3YWl0cXVldWUgZm9yIGJ1ZmZlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2J1ZmZlcjsKKwkvKiB3YWl0cXVldWUgZm9yIGRhdGEgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2RhdGE7CisJLyoqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CisJLyoqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrZXI7CisKKwkvKiBJMkMgYWRhcHRlciAqLworCXN0cnVjdCBpMmNfYWRhcHRlcgkqaTJjX2FkYXB0ZXI7CisJLyogSTJDIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWkyY19tdXRleDsKKworCS8qIHVzYiBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlciBhbmQgbG9jayAqLworCXN0cnVjdCBtdXRleAkJdXNiY19tdXRleDsKKwl1OAkJCSp1c2JjX2J1ZjsKK307CisKKworLyogYnVmZmVyIG9uZSBidWxrIHVyYiBvZiBkYXRhICovCitzdHJ1Y3QgaGRwdnJfYnVmZmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJ1ZmZfbGlzdDsKKworCXN0cnVjdCB1cmIJCSp1cmI7CisKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXY7CisKKwl1aW50CQkJcG9zOworCisJX191OAkJCXN0YXR1czsKK307CisKKy8qICovCisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvIHsKKwl1MTYJd2lkdGg7CisJdTE2CWhlaWdodDsKKwl1OAlmcHM7Cit9OworCitlbnVtIHsKKwlTVEFUVVNfVU5JTklUSUFMSVpFRAk9IDAsCisJU1RBVFVTX0lETEUsCisJU1RBVFVTX1NUQVJUSU5HLAorCVNUQVRVU19TSFVUVElOR19ET1dOLAorCVNUQVRVU19TVFJFQU1JTkcsCisJU1RBVFVTX0VSUk9SLAorCVNUQVRVU19ESVNDT05ORUNURUQsCit9OworCitlbnVtIHsKKwlIRFBWUl9GTEFHX0FDM19DQVAgPSAxLAorfTsKKworZW51bSB7CisJQlVGU1RBVF9VTklOSVRJQUxJWkVEID0gMCwKKwlCVUZTVEFUX0FWQUlMQUJMRSwKKwlCVUZTVEFUX0lOUFJPR1JFU1MsCisJQlVGU1RBVF9SRUFEWSwKK307CisKKyNkZWZpbmUgQ1RSTF9TVEFSVF9TVFJFQU1JTkdfVkFMVUUJMHgwNzAwCisjZGVmaW5lIENUUkxfU1RPUF9TVFJFQU1JTkdfVkFMVUUJMHgwODAwCisjZGVmaW5lIENUUkxfQklUUkFURV9WQUxVRQkJMHgxMDAwCisjZGVmaW5lIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFCQkweDEyMDAKKyNkZWZpbmUgQ1RSTF9HT1BfTU9ERV9WQUxVRQkJMHgxMzAwCisjZGVmaW5lIENUUkxfVklERU9fSU5QVVRfVkFMVUUJCTB4MTUwMAorI2RlZmluZSBDVFJMX1ZJREVPX1NURF9UWVBFCQkweDE3MDAKKyNkZWZpbmUgQ1RSTF9BVURJT19JTlBVVF9WQUxVRQkJMHgyNTAwCisjZGVmaW5lIENUUkxfQlJJR0hUTkVTUwkJCTB4MjkwMAorI2RlZmluZSBDVFJMX0NPTlRSQVNUCQkJMHgyYTAwCisjZGVmaW5lIENUUkxfSFVFCQkJMHgyYjAwCisjZGVmaW5lIENUUkxfU0FUVVJBVElPTgkJCTB4MmMwMAorI2RlZmluZSBDVFJMX1NIQVJQTkVTUwkJCTB4MmQwMAorI2RlZmluZSBDVFJMX0xPV19QQVNTX0ZJTFRFUl9WQUxVRQkweDMxMDAKKworI2RlZmluZSBDVFJMX0RFRkFVTFRfSU5ERVgJCTB4MDAwMworCisKKwkvKiA6MCBzIDM4IDAxIDEwMDAgMDAwMyAwMDA0IDQgPSAwYTAwY2EwMAorCSAqIEJJVFJBVEUgU0VUVElORworCSAqICAgMXN0IGFuZCAybmQgYnl0ZSAobGl0dGxlIGVuZGlhbik6IGF2ZXJhZ2UgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxIG1iaXQvcywgbWF4OiAxMy41IG1iaXQvcworCSAqICAgM3JkIGFuZCA0dGggYnl0ZSAobGl0dGxlIGVuZGlhbik6IHBlYWsgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBhdmVyYWdlICsgMTAwa2JpdC9zLAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDIwLjIgbWJpdC9zCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEyMDAgMDAwMyAwMDAxIDEgPSAwMgorCSAqIEJJVCBSQVRFIE1PREUKKwkgKiAgY29uc3RhbnQgPSAxLCB2YXJpYWJsZSAocGVhaykgPSAyLCB2YXJpYWJsZSAoYXZlcmFnZSkgPSAzCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEzMDAgMDAwMyAwMDAxIDEgPSAwMworCSAqIEdPUCBNT0RFICgyIGJpdCkKKwkgKiAgICBsb3cgYml0IDAvMTogYWR2YW5jZWQvc2ltcGxlIEdPUAorCSAqICAgaGlnaCBiaXQgMC8xOiBJRFIoNC8zMi8xMjgpIC8gbm8gSURSICg0LzMyLzApCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDE3MDAgMDAwMyAwMDAxIDEgPSAwMAorCSAqIFZJREVPIFNUQU5EQVJEIG9yIEZSRVFVTkNZIDAgPSA2MGh6LCAxID0gNTBoegorCSAqLworCisJLyogOjAgcyAzOCAwMSAzMTAwIDAwMDMgMDAwNCA0ID0gMDMwMzAwMDAKKwkgKiBGSUxURVIgQ09OVFJPTAorCSAqICAgMXN0IGJ5dGUgbHVtYSBsb3cgcGFzcyBmaWx0ZXIgc3RyZW5ndGgsCisJICogICAybmQgYnl0ZSBjaHJvbWEgbG93IHBhc3MgZmlsdGVyIHN0cmVuZ3RoLAorCSAqICAgM3JkIGJ5dGUgTUYgZW5hYmxlIGNocm9tYSwgbWluPTAsIG1heD0xCisJICogICA0dGggYnl0ZSBuCisJICovCisKKworCS8qIDowIHMgMzggYjkgMDAwMSAwMDAwIDAwMDAgMCAqLworCisKKworLyogOjAgcyAzOCBkMyAwMDAwIDAwMDAgMDAwMSAxID0gMDAgKi8KKy8qIAkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgKi8KKy8qIAkJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKi8KKy8qIAkJCQkgICAgICAweGQzLCAweDM4LCAqLworLyogCQkJCSAgICAgIDAsIDAsICovCisvKiAJCQkJICAgICAgIlwwIiwgMSwgKi8KKy8qIAkJCQkgICAgICAxMDAwKTsgKi8KKworLyogCQlpbmZvKCJjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWQiLCByZXQpOyAqLworLyogCQltc2xlZXAoNTAwMCk7ICovCisKKworCS8qIDowIHMgYjggODEgMTQwMCAwMDAzIDAwMDUgNSA8CisJICogOjAgMCA1ID0gZDAwMjQwMDIgMTkKKwkgKiBRVUVSWSBGUkFNRSBTSVpFIEFORCBSQVRFCisJICogICAxc3QgYW5kIDJuZCBieXRlIChsaXR0bGUgZW5kaWFuKTogaG9yaXpvbnRhbCByZXNvbHV0aW9uCisJICogICAzcmQgYW5kIDR0aCBieXRlIChsaXR0bGUgZW5kaWFuKTogdmVydGljYWwgcmVzb2x1dGlvbgorCSAqICAgNXRoIGJ5dGU6IGZyYW1lIHJhdGUKKwkgKi8KKworCS8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8CisJICogOjAgMCAzID0gMDMwMTA0CisJICogUVVFUlkgU0lHTkFMIEFORCBERVRFQ1RFRCBMSU5FUywgbWF5YmUgSU5QVVQKKwkgKi8KKworZW51bSBoZHB2cl92aWRlb19zdGQgeworCUhEUFZSXzYwSFogPSAwLAorCUhEUFZSXzUwSFosCit9OworCitlbnVtIGhkcHZyX3ZpZGVvX2lucHV0IHsKKwlIRFBWUl9DT01QT05FTlQgPSAwLAorCUhEUFZSX1NWSURFTywKKwlIRFBWUl9DT01QT1NJVEUsCisJSERQVlJfVklERU9fSU5QVVRTCit9OworCitlbnVtIGhkcHZyX2F1ZGlvX2lucHV0cyB7CisJSERQVlJfUkNBX0JBQ0sgPSAwLAorCUhEUFZSX1JDQV9GUk9OVCwKKwlIRFBWUl9TUERJRiwKKwlIRFBWUl9BVURJT19JTlBVVFMKK307CisKK2VudW0gaGRwdnJfYml0cmF0ZV9tb2RlIHsKKwlIRFBWUl9DT05TVEFOVCA9IDEsCisJSERQVlJfVkFSSUFCTEVfUEVBSywKKwlIRFBWUl9WQVJJQUJMRV9BVkVSQUdFLAorfTsKKworZW51bSBoZHB2cl9nb3BfbW9kZSB7CisJSERQVlJfQURWQU5DRURfSURSX0dPUCA9IDAsCisJSERQVlJfU0lNUExFX0lEUl9HT1AsCisJSERQVlJfQURWQU5DRURfTk9JRFJfR09QLAorCUhEUFZSX1NJTVBMRV9OT0lEUl9HT1AsCit9OworCit2b2lkIGhkcHZyX2RlbGV0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9ucyAqLworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCitpbnQgaGRwdnJfc2V0X2F1ZGlvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdTggaW5wdXQsCisJCSAgICBlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyBjb2RlYyk7CisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsYnVmKTsKKworc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKmdldF92aWRlb19pbmZvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKKy8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8ICovCisvKiA6MCAwIDMgPSAwMzAxZmYgKi8KK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIHY0bDIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfdmlkZW9kZXYoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQkgICAgaW50IGRldm51bWJlcik7CisKK2ludCBoZHB2cl9jYW5jZWxfcXVldWUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmVyIG1hbmFnZW1lbnQgKi8KK2ludCBoZHB2cl9mcmVlX2J1ZmZlcnMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKK2ludCBoZHB2cl9hbGxvY19idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdWludCBjb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IDc5MzkzZDEuLjhlMTQ2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC01NiwxNyArNTYsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfUVVFUllDVFJMLCAJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfU1RELAkJU0FBNzE0Nl9BRlRFUiB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyAwLAkJCTAgfQotfTsKLQogI2RlZmluZSBIRVhJVU1fQ09OVFJPTFMJMQogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBoZXhpdW1fY29udHJvbHNbXSA9IHsKIAl7IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIkIvVyIsIDAsIDEsIDEsIDAsIDAgfSwKQEAgLTIzMSw2ICsyMjAsMTMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCisgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQorICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgeworCQkJKnFjID0gaGV4aXVtX2NvbnRyb2xzW2ldOworCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19xdWVyeWN0cmwoZmlsZSwgZmgsIHFjKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19nX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKSB7CisJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OworCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCWludCBpID0gMDsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19zX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKQorCQloZXhpdW0tPmN1cl9idyA9IHZjLT52YWx1ZTsKKworCURFQl9EKCgiVklESU9DX1NfQ1RSTCBCVzolZC5cbiIsIGhleGl1bS0+Y3VyX2J3KSk7CisKKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzYyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKKwkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9zZWNhbSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzY19idyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpCisJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YTsKIAogLyogdGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Jpbmcgd2FzIHN1Y2Nlc3NmdWwgKi8KQEAgLTI3OSw2ICszOTQsMTIgQEAKIAloZXhpdW0tPmN1cl9pbnB1dCA9IDA7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gZ2VtaW5pIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzA2LDE1MyArNDI3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaGV4aXVtLT5jdXJfaW5wdXQgPSBpbnB1dDsKLQkJCWhleGl1bV9zZXRfaW5wdXQoaGV4aXVtLCBpbnB1dCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQotCQkgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQotCQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJCSpxYyA9IGhleGl1bV9jb250cm9sc1tpXTsKLQkJCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGkgPCAwKSB7Ci0JCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodmMtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTp7Ci0JCQkJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OwotCQkJCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCQlpbnQgaSA9IDA7Ci0KLQkJCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQkJaWYgKGhleGl1bV9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaSA8IDApIHsKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCX0KLQotCQkJc3dpdGNoICh2Yy0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfUFJJVkFURV9CQVNFOnsKLQkJCQkJaGV4aXVtLT5jdXJfYncgPSB2Yy0+dmFsdWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJREVCX0QoKCJWSURJT0NfU19DVFJMIEJXOiVkLlxuIiwgaGV4aXVtLT5jdXJfYncpKTsKLQotCQkJaWYgKDAgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fc2VjYW0pOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJaWYgKDEgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CkBAIC01MTQsOCArNDg4LDYgQEAKIAkuc3RkcyA9ICZoZXhpdW1fc3RhbmRhcmRzWzBdLAogCS5udW1fc3RkcyA9IHNpemVvZihoZXhpdW1fc3RhbmRhcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjayA9ICZzdGRfY2FsbGJhY2ssCi0JLmlvY3RscyA9ICZpb2N0bHNbMF0sCi0JLmlvY3RsID0gaGV4aXVtX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBoZXhpdW1fZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKaW5kZXggMDc0YmVjNy4uMmJjMzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCkBAIC01NywxNCArNTcsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1NURCwJCVNBQTcxNDZfQUZURVIgfSwKLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgaGV4aXVtCiB7CiAJaW50IHR5cGU7CkBAIC0zMjksNiArMzIxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIC8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCkBAIC0zMzksNiArMzY5LDkgQEAKIAlERUJfRUUoKCIuXG4iKSk7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gb3Jpb24iLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlwcmludGsoImhleGl1bV9vcmlvbjogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTM3MCw1OCArNDAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0JCQloZXhpdW1fc2V0X2lucHV0KGhleGl1bSwgaW5wdXQpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXJldHVybiAwOwpAQCAtNDc5LDggKzQ2MCw2IEBACiAJLnN0ZHMgPSAmaGV4aXVtX3N0YW5kYXJkc1swXSwKIAkubnVtX3N0ZHMgPSBzaXplb2YoaGV4aXVtX3N0YW5kYXJkcykgLyBzaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sgPSAmc3RkX2NhbGxiYWNrLAotCS5pb2N0bHMgPSAmaW9jdGxzWzBdLAotCS5pb2N0bCA9IGhleGl1bV9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwppbmRleCA4NGI5ZTRmLi4zZDY5NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwpAQCAtMTksMTAgKzE5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogLyogSW5keUNhbSBkZWNvZGVzIHN0cmVhbSBvZiBwaG90b25zIGludG8gZGlnaXRhbCBpbWFnZSByZXByZXNlbnRhdGlvbiA7LSkgKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogI2luY2x1ZGUgImluZHljYW0uaCIKIApAQCAtMzMsNiArMzUsNyBAQAogTU9EVUxFX0FVVEhPUigiTWlrYWVsIE5vdXNpYWluZW4gPHRtbm91c2lhQGNjLmh1dC5maT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiAvLyAjZGVmaW5lIElORFlDQU1fREVCVUcKIAogI2lmZGVmIElORFlDQU1fREVCVUcKQEAgLTQ0LDExICs0NywxNCBAQAogI2VuZGlmCiAKIHN0cnVjdCBpbmR5Y2FtIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCB2ZXJzaW9uOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfaW5keWNhbTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZHljYW0gKnRvX2luZHljYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgaW5keWNhbSwgc2QpOworfQogCiBzdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewogCUlORFlDQU1fQ09OVFJPTF9BR0NFTkEsCQkvKiBJTkRZQ0FNX0NPTlRST0wgKi8KQEAgLTYzLDggKzY5LDkgQEAKIAogLyogSW5keUNhbSByZWdpc3RlciBoYW5kbGluZyAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCAqdmFsdWUpCitzdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCAqdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQ7CiAKIAlpZiAocmVnID09IElORFlDQU1fUkVHX1JFU0VUKSB7CkBAIC04NywxMiArOTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgZXJyOwogCi0JaWYgKChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUykKLQkgICAgfHwgKHJlZyA9PSBJTkRZQ0FNX1JFR19WRVJTSU9OKSkgeworCWlmIChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUyB8fCByZWcgPT0gSU5EWUNBTV9SRUdfVkVSU0lPTikgewogCQlkcHJpbnRrKCJpbmR5Y2FtX3dyaXRlX3JlZygpOiAiCiAJCQkic2tpcHBpbmcgcmVhZC1vbmx5IHJlZ2lzdGVyICVkXG4iLCByZWcpOwogCQlyZXR1cm4gMDsKQEAgLTEwOCwxMyArMTE1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKK3N0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCiAJCQkgICAgICAgdTggbGVuZ3RoLCB1OCAqZGF0YSkKIHsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgcmVnICsgaSwgZGF0YVtpXSk7CisJCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCByZWcgKyBpLCBkYXRhW2ldKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTI1LDc5ICsxMzIsNzggQEAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIAogI2lmZGVmIElORFlDQU1fREVCVUcKLXN0YXRpYyB2b2lkIGluZHljYW1fcmVnZHVtcF9kZWJ1ZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgaW5keWNhbV9yZWdkdW1wX2RlYnVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJaW50IGk7CiAJdTggdmFsOwogCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewotCQlpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgaSwgJnZhbCk7CisJCWluZHljYW1fcmVhZF9yZWcoc2QsIGksICZ2YWwpOwogCQlkcHJpbnRrKCJSZWcgJWQgPSAweCUwMnhcbiIsIGksIHZhbCk7CiAJfQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaW5keWNhbV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGluZHljYW1fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BR0M6Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQVdCOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87Ci0JCWlmIChjdHJsLT50eXBlID09IElORFlDQU1fQ09OVFJPTF9BR0MpCisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikKIAkJCWN0cmwtPnZhbHVlID0gKHJlZyAmIElORFlDQU1fQ09OVFJPTF9BR0NFTkEpCiAJCQkJPyAxIDogMDsKIAkJZWxzZQogCQkJY3RybC0+dmFsdWUgPSAocmVnICYgSU5EWUNBTV9DT05UUk9MX0FXQkNUTCkKIAkJCQk/IDEgOiAwOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgPT0gMHgwMCkgPyAweGZmIDogKChzMzIpcmVnIC0gMSk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBSU46Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCAmcmVnKTsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0dBSU4sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKIAkJCQkgICAgICAgSU5EWUNBTV9SRUdfUkVEX1NBVFVSQVRJT04sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsCiAJCQkJICAgICAgIElORFlDQU1fUkVHX0JMVUVfU0FUVVJBVElPTiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLAogCQkJCQkgICAgICAgSU5EWUNBTV9SRUdfR0FNTUEsICZyZWcpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTIxMywyMSArMjE5LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgc3RydWN0IGluZHljYW1fY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgaW5keWNhbV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOwogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKIAotCXN3aXRjaCAoY3RybC0+dHlwZSkgewotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0FHQzoKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BV0I6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19DT05UUk9MLCAmcmVnKTsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQlpZiAoY3RybC0+dHlwZSA9PSBJTkRZQ0FNX0NPTlRST0xfQUdDKSB7CisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikgewogCQkJaWYgKGN0cmwtPnZhbHVlKQogCQkJCXJlZyB8PSBJTkRZQ0FNX0NPTlRST0xfQUdDRU5BOwogCQkJZWxzZQpAQCAtMjM5LDM0ICsyNDQsMzQgQEAKIAkJCQlyZWcgJj0gfklORFlDQU1fQ09OVFJPTF9BV0JDVEw7CiAJCX0KIAotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsIHJlZyk7CisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLCByZWcpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgorCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCXJlZyA9IChjdHJsLT52YWx1ZSA9PSAweGZmKSA/IDB4MDAgOiAoY3RybC0+dmFsdWUgKyAxKTsKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19TSFVUVEVSLCByZWcpOworCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FJTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfR0FJTiwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfU0FUVVJBVElPTiwKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9TQVRVUkFUSU9OLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQU1NQSwKKwkJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19HQU1NQSwKIAkJCQkJCWN0cmwtPnZhbHVlKTsKIAkJfQogCQlicmVhazsKQEAgLTI3OSwxOTIgKzI4NCwxMDMgQEAKIAogLyogSTJDLWludGVyZmFjZSAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBpbmR5Y2FtX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9JTkRZQ0FNLAorCQkgICAgICAgY2FtZXJhLT52ZXJzaW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBpbmR5Y2FtX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBpbmR5Y2FtX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gaW5keWNhbV9nX2N0cmwsCisJLnNfY3RybCA9IGluZHljYW1fc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgaW5keWNhbV9vcHMgPSB7CisJLmNvcmUgPSAmaW5keWNhbV9jb3JlX29wcywKK307CisKK3N0YXRpYyBpbnQgaW5keWNhbV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGluZHljYW0gKmNhbWVyYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTR0kgSW5keUNhbSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgSU5EWUNBTV9NT0RVTEVfVkVSU0lPTik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJY2FtZXJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZHljYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbWVyYSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NsaWVudDsKLQl9CisJaWYgKCFjYW1lcmEpCisJCXJldHVybiAtRU5PTUVNOwogCi0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfaW5keWNhbTsKLQljbGllbnQtPmZsYWdzID0gMDsKLQlzdHJjcHkoY2xpZW50LT5uYW1lLCAiSW5keUNhbSBjbGllbnQiKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjYW1lcmEpOwotCi0JY2FtZXJhLT5jbGllbnQgPSBjbGllbnQ7Ci0KLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfY2FtZXJhOworCXNkID0gJmNhbWVyYS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmluZHljYW1fb3BzKTsKIAogCWNhbWVyYS0+dmVyc2lvbiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCQkgICBJTkRZQ0FNX1JFR19WRVJTSU9OKTsKIAlpZiAoY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX0lORFkgJiYKIAkgICAgY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX01PT1NFKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2RldGFjaF9jbGllbnQ7CisJCWtmcmVlKGNhbWVyYSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIkluZHlDYW0gdiVkLiVkIGRldGVjdGVkXG4iLAogCSAgICAgICBJTkRZQ0FNX1ZFUlNJT05fTUFKT1IoY2FtZXJhLT52ZXJzaW9uKSwKIAkgICAgICAgSU5EWUNBTV9WRVJTSU9OX01JTk9SKGNhbWVyYS0+dmVyc2lvbikpOwogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIGluaXRpYWxpemUKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX2Jsb2NrKGNsaWVudCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CisJZXJyID0gaW5keWNhbV93cml0ZV9ibG9jayhzZCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW0gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoY2FtZXJhKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIHdoaXRlIGJhbGFuY2UKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsCisJZXJyID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsCiAJCQkgIElORFlDQU1fQ09OVFJPTF9BR0NFTkEgfCBJTkRZQ0FNX0NPTlRST0xfQVdCQ1RMKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW5keUNhbTogV2hpdGUgYmFsYW5jaW5nIGNhbWVyYSBmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShjYW1lcmEpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpbmR5Y2FtX3JlZ2R1bXAoY2xpZW50KTsKKwlpbmR5Y2FtX3JlZ2R1bXAoc2QpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5keUNhbSBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKLQotb3V0X2RldGFjaF9jbGllbnQ6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLW91dF9mcmVlX2NhbWVyYToKLQlrZnJlZShjYW1lcmEpOwotb3V0X2ZyZWVfY2xpZW50OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgaW5keWNhbV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQkvKiBJbmR5IHNwZWNpZmljIGNyYXAgKi8KLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKQotCQlyZXR1cm4gaW5keWNhbV9hdHRhY2goYWRhcCwgSU5EWUNBTV9BRERSLCAwKTsKLQkvKiBGZWVsIGZyZWUgdG8gYWRkIHByb2JlIGhlcmUgOi0pICovCi0JcmV0dXJuIC1FTk9ERVY7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi1zdGF0aWMgaW50IGluZHljYW1fZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShjYW1lcmEpOwotCWtmcmVlKGNsaWVudCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2luZHljYW0oc2QpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmFyZykKLXsKLQkvLyBzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQkvKiBUaGUgb2xkIHZpZGVvX2RlY29kZXIgaW50ZXJmYWNlIGp1c3QgaXNuJ3QgZW5vdWdoLAotCSAqIHNvIHdlJ2xsIHVzZSBzb21lIGN1c3RvbSBjb21tYW5kcy4gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOiB7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzICA9IFZJREVPX0RFQ09ERVJfTlRTQzsKLQkJY2FwLT5pbnB1dHMgPSAxOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCSppYXJnID0gREVDT0RFUl9TVEFUVVNfR09PRCB8IERFQ09ERVJfU1RBVFVTX05UU0MgfAotCQkJREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDogewotCQkvKiBBbHdheXMgZW5hYmxlZCAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOiB7Ci0JCS8vIHN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCS8qIFRPRE86IGNvbnZlcnQgdmFsdWVzIGZvciBpbmR5Y2FtX3NldF9jb250cm9scygpICovCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfSU5EWUNBTV9HRVRfQ09OVFJPTDogewotCQlyZXR1cm4gaW5keWNhbV9nZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWNhc2UgREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MOiB7Ci0JCXJldHVybiBpbmR5Y2FtX3NldF9jb250cm9sKGNsaWVudCwgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2luZHljYW0gPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gImluZHljYW0iLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9JTkRZQ0FNLAotCS5hdHRhY2hfYWRhcHRlciA9IGluZHljYW1fcHJvYmUsCi0JLmRldGFjaF9jbGllbnQJPSBpbmR5Y2FtX2RldGFjaCwKLQkuY29tbWFuZAk9IGluZHljYW1fY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpbmR5Y2FtX2lkW10gPSB7CisJeyAiaW5keWNhbSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaW5keWNhbV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGluZHljYW1faW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9pbmR5Y2FtKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGluZHljYW1fZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2luZHljYW0pOwotfQotCi1tb2R1bGVfaW5pdChpbmR5Y2FtX2luaXQpOwotbW9kdWxlX2V4aXQoaW5keWNhbV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJpbmR5Y2FtIiwKKwkucHJvYmUgPSBpbmR5Y2FtX3Byb2JlLAorCS5yZW1vdmUgPSBpbmR5Y2FtX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBpbmR5Y2FtX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKaW5kZXggZTZlZTgyMC4uODgxZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKQEAgLTg3LDIyICs4Nyw3IEBACiAKIC8qIERyaXZlciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQUdDCQkJMAkvKiBib29sZWFuICovCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9BV0IJCQkxCS8qIGJvb2xlYW4gKi8KLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX1NIVVRURVIJCQkyCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9HQUlOCQkJMwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0UJCTQKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfQkFMQU5DRQkJNQotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04JCTYKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTgkJNwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUEJCQk4Ci0KLXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgewotCXU4IHR5cGU7Ci0JczMyIHZhbHVlOwotfTsKLQotI2RlZmluZQlERUNPREVSX0lORFlDQU1fR0VUX0NPTlRST0wJX0lPUignZCcsIDE5Mywgc3RydWN0IGluZHljYW1fY29udHJvbCkKLSNkZWZpbmUJREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MCV9JT1coJ2QnLCAxOTQsIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wpCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTgkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04JCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggZDQ2NThjNS4uMDkyYzdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTE2LDYgKzE2LDggQEAKICAqICAgICAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CiAgKiAgICAgIE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgogICogICAgICBCcmlhbiBSb2dlcnMgPGJyaWFuX3JvZ2Vyc0Bjb21jYXN0Lm5ldD4KKyAqIG1vZGlmaWVkIGZvciBBVmVyTWVkaWEgQ2FyZGJ1cyBieQorICogICAgICBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjE2LDYgKzIxOCw0NiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdldF9rZXlfYXZlcm1lZGlhX2NhcmRidXMoc3RydWN0IElSX2kyYyAqaXIsCisJCQkJICAgICB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBzdWJhZGRyLCBrZXksIGtleWdyb3VwOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gaXItPmMuYWRkciwgLmZsYWdzID0gMCwKKwkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkgeyAuYWRkciA9IGlyLT5jLmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAgLmJ1ZiA9ICZrZXksIC5sZW4gPSAxfSB9OworCXN1YmFkZHIgPSAweDBkOworCWlmICgyICE9IGkyY190cmFuc2Zlcihpci0+Yy5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWRwcmludGsoMSwgInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoa2V5ID09IDB4ZmYpCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MGI7CisJbXNnWzFdLmJ1ZiA9ICZrZXlncm91cDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMuYWRhcHRlciwgbXNnLCAyKSkgeworCQlkcHJpbnRrKDEsICJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGtleWdyb3VwID09IDB4ZmYpCisJCXJldHVybiAwOworCisJZHByaW50aygxLCAicmVhZCBrZXkgMHglMDJ4LzB4JTAyeFxuIiwga2V5LCBrZXlncm91cCk7CisJaWYgKGtleWdyb3VwIDwgMiB8fCBrZXlncm91cCA+IDMpIHsKKwkJLyogT25seSBhIHdhcm5pbmcgKi8KKwkJZHByaW50aygxLCAid2FybmluZzogaW52YWxpZCBrZXkgZ3JvdXAgMHglMDJ4IGZvciBrZXkgMHglMDJ4XG4iLAorCQkJCQkJCQlrZXlncm91cCwga2V5KTsKKwl9CisJa2V5IHw9IChrZXlncm91cCAmIDEpIDw8IDY7CisKKwkqaXJfa2V5ID0ga2V5OworCSppcl9yYXcgPSBrZXk7CisJcmV0dXJuIDE7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkIGlyX2tleV9wb2xsKHN0cnVjdCBJUl9pMmMgKmlyKQpAQCAtMjM3LDE1ICsyNzksOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBJUl9pMmMgKmlyID0gKHN0cnVjdCBJUl9pMmMqKWRhdGE7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBpcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrKTsKKwlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrLndvcmspOwogCWludCBwb2xsaW5nX2ludGVydmFsID0gMTAwOwogCiAJLyogTVNJIFRWQG55d2hlcmUgUGx1cyByZXF1aXJlcyBtb3JlIGZyZXF1ZW50IHBvbGxpbmcKQEAgLTI1NCw3ICsyOTAsNyBAQAogCQlwb2xsaW5nX2ludGVydmFsID0gNTA7CiAKIAlpcl9rZXlfcG9sbChpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTM2MCw2ICszOTYsMTIgQEAKIAkJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9PVEhFUjsKIAkJfQogCQlicmVhazsKKwljYXNlIDB4NDA6CisJCW5hbWUgICAgICAgID0gIkFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSI7CisJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKKwkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOworCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCiAJCXByaW50ayhERVZOQU1FICI6IEh1aD8gdW5rbm93biBpMmMgYWRkcmVzcyAoMHglMDJ4KT9cbiIsIGFkZHIpOwpAQCAtNDA0LDExICs0NDYsOCBAQAogCSAgICAgICBpci0+aW5wdXQtPm5hbWUsIGlyLT5pbnB1dC0+cGh5cywgYWRhcC0+bmFtZSk7CiAKIAkvKiBzdGFydCBwb2xsaW5nIHZpYSBldmVudGQgKi8KLQlJTklUX1dPUksoJmlyLT53b3JrLCBpcl93b3JrKTsKLQlpbml0X3RpbWVyKCZpci0+dGltZXIpOwotCWlyLT50aW1lci5mdW5jdGlvbiA9IGlyX3RpbWVyOwotCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWlyOwotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIGlyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogCiAJcmV0dXJuIDA7CiAKQEAgLTQyNSw4ICs0NjQsNyBAQAogCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBraWxsIG91dHN0YW5kaW5nIHBvbGxzICovCi0JZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIAogCS8qIHVucmVnaXN0ZXIgZGV2aWNlcyAqLwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CkBAIC01MjQsNiArNTYyLDIyIEBACiAJCQlpcl9hdHRhY2goYWRhcCwgbXNnLmFkZHIsIDAsIDApOwogCX0KIAorCS8qIFNwZWNpYWwgY2FzZSBmb3IgQVZlck1lZGlhIENhcmRidXMgcmVtb3RlICovCisJaWYgKGFkYXAtPmlkID09IEkyQ19IV19TQUE3MTM0KSB7CisJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgZGF0YTsKKwkJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSAwLAorCQkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkJIHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkJICAgLmJ1ZiA9ICZkYXRhLCAubGVuID0gMX0gfTsKKwkJc3ViYWRkciA9IDB4MGQ7CisJCXJjID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMik7CisJCWRwcmludGsoMSwgInByb2JlIDB4JTAyeC8weCUwMnggQCAlczogJXNcbiIsCisJCQltc2dbMF0uYWRkciwgc3ViYWRkciwgYWRhcC0+bmFtZSwKKwkJCSgyID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCWlmICgyID09IHJjKQorCQkJaXJfYXR0YWNoKGFkYXAsIG1zZ1swXS5hZGRyLCAwLCAwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKaW5kZXggNjJhYTA2Zi4uODQ5OTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCiAjaW5jbHVkZSAiaXZ0di1jb250cm9scy5oIgogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGM0NmM5OTAuLmVjYThiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIHN0YXRpYyB2b2lkIGl2dHZfcHJvY2Vzc19lZXByb20oc3RydWN0IGl2dHYgKml0dikKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7Ci0JaW50IHBjaV9zbG90ID0gUENJX1NMT1QoaXR2LT5kZXYtPmRldmZuKTsKKwlpbnQgcGNpX3Nsb3QgPSBQQ0lfU0xPVChpdHYtPnBkZXYtPmRldmZuKTsKIAogCWl2dHZfcmVhZF9lZXByb20oaXR2LCAmdHYpOwogCkBAIC02MDQsNyArNjA0LDcgQEAKIAlpdHYtPnN0ZCA9IGl2dHZfcGFyc2Vfc3RkKGl0dik7CiAJaWYgKGl0di0+c3RkID09IDAgJiYgdHVuZXJ0eXBlID49IDApCiAJCWl0di0+c3RkID0gdHVuZXJ0eXBlID8gVjRMMl9TVERfTU4gOiAoVjRMMl9TVERfQUxMICYgflY0TDJfU1REX01OKTsKLQlpdHYtPmhhc19jeDIzNDE1ID0gKGl0di0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOworCWl0di0+aGFzX2N4MjM0MTUgPSAoaXR2LT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOwogCWNoaXBuYW1lID0gaXR2LT5oYXNfY3gyMzQxNSA/ICJjeDIzNDE1IiA6ICJjeDIzNDE2IjsKIAlpZiAoaXR2LT5vcHRpb25zLmNhcmR0eXBlID09IC0xKSB7CiAJCUlWVFZfSU5GTygiSWdub3JlIGNhcmQgKGRldGVjdGVkICVzIGJhc2VkIGNoaXApXG4iLCBjaGlwbmFtZSk7CkBAIC02MTcsOSArNjE3LDkgQEAKIAkJSVZUVl9FUlIoIlVua25vd24gdXNlciBzcGVjaWZpZWQgdHlwZSwgdHJ5aW5nIHRvIGF1dG9kZXRlY3QgY2FyZFxuIik7CiAJfQogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewotCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFIHx8Ci0JCSAgICBpdHYtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAotCQkgICAgaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFX0FMVDIpIHsKKwkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0UgfHwKKwkJICAgIGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAorCQkgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IElWVFZfUENJX0lEX0hBVVBQQVVHRV9BTFQyKSB7CiAJCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKGl0di0+aGFzX2N4MjM0MTUgPyBJVlRWX0NBUkRfUFZSXzM1MCA6IElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkIEhhdXBwYXVnZSBjYXJkICglcyBiYXNlZClcbiIsCiAJCQkJCWNoaXBuYW1lKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBACiAJCQlpZiAoaXR2LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgaXR2LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2U7IGorKykgewotCQkJCWlmIChpdHYtPmRldi0+ZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+ZGV2aWNlICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uZGV2aWNlKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgIT0KKwkJCQlpZiAoaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX3ZlbmRvcikKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGl0di0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBpdHYtPmNhcmQtPnBjaV9saXN0W2pdLnN1YnN5c3RlbV9kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwogCQkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkICVzIGNhcmQgKCVzIGJhc2VkKVxuIiwKQEAgLTY1MCw5ICs2NTAsOSBAQAogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewogCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJSVZUVl9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCi0JCSAgICAgaXR2LT5kZXYtPnZlbmRvciwgaXR2LT5kZXYtPmRldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT52ZW5kb3IsIGl0di0+cGRldi0+ZGV2aWNlKTsKIAkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlJVlRWX0VSUigiICAgICAgICAgICAgICAlcyBiYXNlZFxuIiwgY2hpcG5hbWUpOwogCQlJVlRWX0VSUigiRGVmYXVsdGluZyB0byAlcyBjYXJkXG4iLCBpdHYtPmNhcmQtPm5hbWUpOwogCQlJVlRWX0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpdnR2X2luaXRfc3RydWN0MShzdHJ1Y3QgaXZ0diAqaXR2KQogewotCWl0di0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGl0di0+ZGV2LCAwKTsKKwlpdHYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpdHYtPnBkZXYsIDApOwogCWl0di0+ZW5jX21ib3gubWF4X21ib3ggPSAyOyAvKiB0aGUgZW5jb2RlciBoYXMgMyBtYWlsYm94ZXMgKDAtMikgKi8KIAlpdHYtPmRlY19tYm94Lm1heF9tYm94ID0gMTsgLyogdGhlIGRlY29kZXIgaGFzIDIgbWFpbGJveGVzICgwLTEpICovCiAKQEAgLTY4Miw3ICs2ODIsNyBAQAogCXNwaW5fbG9ja19pbml0KCZpdHYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZpdHYtPmRtYV9yZWdfbG9jayk7CiAKLQlpdHYtPmlycV93b3JrX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGl0di0+ZGV2aWNlLm5hbWUpOworCWl0di0+aXJxX3dvcmtfcXVldWVzID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoaXR2LT5pcnFfd29ya19xdWV1ZXMgPT0gTlVMTCkgewogCQlJVlRWX0VSUigiQ291bGQgbm90IGNyZWF0ZSBpdnR2IHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtMTsKQEAgLTc2Niw3ICs3NjYsNyBAQAogCWl0di0+YXVkaW9faW5wdXQgPSBpdHYtPmNhcmQtPnZpZGVvX2lucHV0c1tpXS5hdWRpb19pbmRleDsKIH0KIAotc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNzc1LDExICs3NzUsMTEgQEAKIAogCUlWVFZfREVCVUdfSU5GTygiRW5hYmxpbmcgcGNpIGRldmljZVxuIik7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlJVlRWX0VSUigiQ2FuJ3QgZW5hYmxlIGRldmljZSFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LCAweGZmZmZmZmZmKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmYpKSB7CiAJCUlWVFZfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTgwNSwxMSArODA1LDExIEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGJ1cyBtYXN0ZXJpbmcgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQlJVlRWX0RFQlVHX0lORk8oIkF0dGVtcHRpbmcgdG8gZW5hYmxlIEJ1cyBNYXN0ZXJpbmdcbiIpOwotCQlwY2lfc2V0X21hc3RlcihkZXYpOwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAkJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQkJSVZUVl9FUlIoIkJ1cyBNYXN0ZXJpbmcgaXMgbm90IGVuYWJsZWRcbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKQEAgLTgxNywyNiArODE3LDI2IEBACiAJfQogCUlWVFZfREVCVUdfSU5GTygiQnVzIE1hc3RlcmluZyBFbmFibGVkLlxuIik7CiAKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKIAogCWlmIChwY2lfbGF0ZW5jeSA8IDY0ICYmIGl2dHZfcGNpX2xhdGVuY3kpIHsKIAkJSVZUVl9JTkZPKCJVbnJlYXNvbmFibHkgbG93IGxhdGVuY3kgdGltZXIsICIKIAkJCSAgICAgICAic2V0dGluZyB0byA2NCAod2FzICVkKVxuIiwgcGNpX2xhdGVuY3kpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAJfQogCS8qIFRoaXMgY29uZmlnIHNwYWNlIHZhbHVlIHJlbGF0ZXMgdG8gRE1BIGxhdGVuY2llcy4gVGhlCiAJICAgZGVmYXVsdCB2YWx1ZSAweDgwODAgaXMgdG9vIGxvdyBob3dldmVyIGFuZCB3aWxsIGxlYWQKIAkgICB0byBETUEgZXJyb3JzLiAweGZmZmYgaXMgdGhlIG1heCB2YWx1ZSB3aGljaCBzb2x2ZXMKIAkgICB0aGVzZSBwcm9ibGVtcy4gKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgMHhmZmZmKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIDB4ZmZmZik7CiAKIAlJVlRWX0RFQlVHX0lORk8oIiVkIChyZXYgJWQpIGF0ICUwMng6JTAyeC4leCwgIgogCQkgICAiaXJxOiAlZCwgbGF0ZW5jeTogJWQsIG1lbW9yeTogMHglbHhcbiIsCi0JCSAgIGl0di0+ZGV2LT5kZXZpY2UsIGNhcmRfcmV2LCBkZXYtPmJ1cy0+bnVtYmVyLAotCQkgICBQQ0lfU0xPVChkZXYtPmRldmZuKSwgUENJX0ZVTkMoZGV2LT5kZXZmbiksCi0JCSAgIGl0di0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZylpdHYtPmJhc2VfYWRkcik7CisJCSAgIHBkZXYtPmRldmljZSwgY2FyZF9yZXYsIHBkZXYtPmJ1cy0+bnVtYmVyLAorCQkgICBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKKwkJICAgcGRldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpaXR2LT5iYXNlX2FkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzUsNyArOTM1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTk0NSwxNyArOTQ1LDE3IEBACiAJaXR2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl2dHYpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaXR2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWl0di0+ZGV2ID0gZGV2OworCWl0di0+cGRldiA9IHBkZXY7CiAJaXR2LT5pbnN0YW5jZSA9IGF0b21pY19pbmNfcmV0dXJuKCZpdnR2X2luc3RhbmNlKSAtIDE7CiAKLQlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZpdHYtPmRldmljZSk7CisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJml0di0+djRsMl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJa2ZyZWUoaXR2KTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJLyogIml2dHYgKyBQQ0kgSUQiIGlzIGEgYml0IG9mIGEgbW91dGhmdWwsIHNvIHVzZQogCSAgICJpdnR2ICsgaW5zdGFuY2UiIGluc3RlYWQuICovCi0Jc25wcmludGYoaXR2LT5kZXZpY2UubmFtZSwgc2l6ZW9mKGl0di0+ZGV2aWNlLm5hbWUpLAorCXNucHJpbnRmKGl0di0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGl0di0+djRsMl9kZXYubmFtZSksCiAJCQkiaXZ0diVkIiwgaXR2LT5pbnN0YW5jZSk7CiAJSVZUVl9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgaXR2LT5pbnN0YW5jZSk7CiAKQEAgLTk3MiwxMiArOTcyLDExIEBACiAJSVZUVl9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgaXR2LT5iYXNlX2FkZHIpOwogCiAJLyogUENJIERldmljZSBTZXR1cCAqLwotCWlmICgocmV0dmFsID0gaXZ0dl9zZXR1cF9wY2koaXR2LCBkZXYsIHBjaV9pZCkpICE9IDApIHsKLQkJaWYgKHJldHZhbCA9PSAtRUlPKQotCQkJZ290byBmcmVlX3dvcmtxdWV1ZTsKLQkJZWxzZSBpZiAocmV0dmFsID09IC1FTlhJTykKLQkJCWdvdG8gZnJlZV9tZW07Ci0JfQorCXJldHZhbCA9IGl2dHZfc2V0dXBfcGNpKGl0diwgcGRldiwgcGNpX2lkKTsKKwlpZiAocmV0dmFsID09IC1FSU8pCisJCWdvdG8gZnJlZV93b3JrcXVldWU7CisJaWYgKHJldHZhbCA9PSAtRU5YSU8pCisJCWdvdG8gZnJlZV9tZW07CiAKIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJSVZUVl9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCkBAIC0xMTU0LDggKzExNTMsOCBAQAogCWl2dHZfc2V0X2lycV9tYXNrKGl0diwgMHhmZmZmZmZmZik7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpdHYtPmRldi0+aXJxLCBpdnR2X2lycV9oYW5kbGVyLAotCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBpdHYtPmRldmljZS5uYW1lLCAodm9pZCAqKWl0dik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXR2LT5wZGV2LT5pcnEsIGl2dHZfaXJxX2hhbmRsZXIsCisJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGl0di0+djRsMl9kZXYubmFtZSwgKHZvaWQgKilpdHYpOwogCWlmIChyZXR2YWwpIHsKIAkJSVZUVl9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC0xMTc3LDcgKzExNzYsNyBAQAogZnJlZV9zdHJlYW1zOgogCWl2dHZfc3RyZWFtc19jbGVhbnVwKGl0diwgMSk7CiBmcmVlX2lycToKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIGZyZWVfaTJjOgogCWV4aXRfaXZ0dl9pMmMoaXR2KTsKIGZyZWVfaW86CkBAIC0xMTk0LDcgKzExOTMsNyBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUlWVFZfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJml0di0+ZGV2aWNlKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMjkyLDEwICsxMjkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl2dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIHZvaWQgaXZ0dl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBjaV9kZXYtPmRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KHY0bDJfZGV2KTsKIAlpbnQgaTsKIAogCUlWVFZfREVCVUdfSU5GTygiUmVtb3ZpbmcgY2FyZFxuIik7CkBAIC0xMzM2LDExICsxMzM1LDkgQEAKIAlpdnR2X3N0cmVhbXNfY2xlYW51cChpdHYsIDEpOwogCWl2dHZfdWRtYV9mcmVlKGl0dik7CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPmRldmljZSk7Ci0KIAlleGl0X2l2dHZfaTJjKGl0dik7CiAKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIAlpdnR2X2lvdW5tYXAoaXR2KTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpdHYtPmJhc2VfYWRkciwgSVZUVl9FTkNPREVSX1NJWkUpOwpAQCAtMTM0OCwxMSArMTM0NSwxMyBAQAogCWlmIChpdHYtPmhhc19jeDIzNDE1KQogCQlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX0RFQ09ERVJfT0ZGU0VULCBJVlRWX0RFQ09ERVJfU0laRSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UoaXR2LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShpdHYtPnBkZXYpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX1ZCSV9GUkFNRVM7IGkrKykKIAkJa2ZyZWUoaXR2LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpdnR2OiBSZW1vdmVkICVzXG4iLCBpdHYtPmNhcmRfbmFtZSk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCmluZGV4IGNlOGQ5YjcuLjQ0MGY3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCkBAIC0xMzMsNyArMTMzLDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGl2dHZfZGVidWcpIFwKLQkJCXY0bDJfaW5mbygmaXR2LT5kZXZpY2UsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAorCQkJdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWX0RFQlVHX1dBUk4oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVRyhJVlRWX0RCR0ZMR19XQVJOLCAgIndhcm4iLCAgZm10ICwgIyMgYXJncykKICNkZWZpbmUgSVZUVl9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUcoSVZUVl9EQkdGTEdfSU5GTywgICJpbmZvIiwgIGZtdCAsICMjIGFyZ3MpCkBAIC0xNDksNyArMTQ5LDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBpdnR2X2RlYnVnKSAmJiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0hJR0hWT0wpKSAJXAotCQkJdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgIiAiIHR5cGUgIjogIiBmbXQgLCAjI2FyZ3MpOwlcCisJCQl2NGwyX2luZm8oJml0di0+djRsMl9kZXYsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIElWVFZfREVCVUdfSElfV0FSTihmbXQsIGFyZ3MuLi4pICBJVlRWX0RFQlVHX0hJR0hfVk9MKElWVFZfREJHRkxHX1dBUk4sICAid2FybiIsICBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBJVlRWX0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19JTkZPLCAgImluZm8iLCAgZm10ICwgIyMgYXJncykKQEAgLTE2Myw5ICsxNjMsOSBAQAogI2RlZmluZSBJVlRWX0RFQlVHX0hJX1lVVihmbXQsIGFyZ3MuLi4pICAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19ZVVYsICAgInl1diIsICAgZm10ICwgIyMgYXJncykKIAogLyogU3RhbmRhcmQga2VybmVsIG1lc3NhZ2VzICovCi0jZGVmaW5lIElWVFZfRVJSKGZtdCwgYXJncy4uLikgICAgICB2NGwyX2VycigmaXR2LT5kZXZpY2UsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIElWVFZfV0FSTihmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oJml0di0+ZGV2aWNlLCBmbXQgLCAjIyBhcmdzKQotI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgdjRsMl93YXJuKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBvdXRwdXQgbW9kZXMgKGN4MjM0MTUgb25seSkgKi8KICNkZWZpbmUgT1VUX05PTkUgICAgICAgIDAKQEAgLTMxNSw3ICszMTUsNyBAQAogc3RydWN0IGl2dHZfc3RyZWFtIHsKIAkvKiBUaGVzZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqdjRsMmRldjsJLyogTlVMTCB3aGVuIHN0cmVhbSBub3QgY3JlYXRlZCAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CS8qIE5VTEwgd2hlbiBzdHJlYW0gbm90IGNyZWF0ZWQgKi8KIAlzdHJ1Y3QgaXZ0diAqaXR2OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtNTkyLDcgKzU5Miw3IEBACiAvKiBTdHJ1Y3QgdG8gaG9sZCBpbmZvIGFib3V0IGl2dHYgY2FyZHMgKi8KIHN0cnVjdCBpdnR2IHsKIAkvKiBHZW5lcmFsIGZpeGVkIGNhcmQgZGF0YSAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7CQkvKiBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKiBQQ0kgZGV2aWNlICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZCAqY2FyZDsJLyogY2FyZCBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IGNoYXIgKmNhcmRfbmFtZTsgICAgICAgICAgLyogZnVsbCBuYW1lIG9mIHRoZSBjYXJkICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZF90dW5lcl9pMmMgKmNhcmRfaTJjOyAvKiBpMmMgYWRkcmVzc2VzIHRvIHByb2JlIGZvciB0dW5lciAqLwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpyZWdfbWVtOyAvKiBwb2ludGVyIHRvIG1hcHBlZCByZWdpc3RlcnMgKi8KIAlzdHJ1Y3QgaXZ0dl9vcHRpb25zIG9wdGlvbnM7IAkvKiB1c2VyIG9wdGlvbnMgKi8KIAotCXN0cnVjdCB2NGwyX2RldmljZSBkZXZpY2U7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2NGwyX3N1YmRldiBzZF9ncGlvOwkvKiBHUElPIHN1Yi1kZXZpY2UgKi8KIAl1MTYgaW5zdGFuY2U7CiAKQEAgLTY5Niw3ICs2OTYsNyBAQAogCXU2NCB2YmlfZGF0YV9pbnNlcnRlZDsgICAgICAgICAgLyogbnVtYmVyIG9mIFZCSSBieXRlcyBpbnNlcnRlZCBpbnRvIHRoZSBNUEVHIHN0cmVhbSAqLwogCXUzMiBsYXN0X2RlY190aW1pbmdbM107ICAgICAgICAgLyogY2FjaGUgbGFzdCByZXRyaWV2ZWQgcHRzL3Njci9mcmFtZSB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBsb25nIGR1YWx3YXRjaF9qaWZmaWVzOy8qIGppZmZpZXMgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGR1YWx3YXRjaCBjaGVjayAqLwotCXUxNiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7ICAgICAgLyogY3VycmVudCBkZXRlY3RlZCBkdWFsd2F0Y2ggc3RlcmVvIG1vZGUgKi8KKwl1MzIgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOyAgICAgIC8qIGN1cnJlbnQgZGV0ZWN0ZWQgZHVhbHdhdGNoIHN0ZXJlbyBtb2RlICovCiAKIAogCS8qIFZCSSBzdGF0ZSBpbmZvICovCkBAIC03MTksOSArNzE5LDkgQEAKIAlzdHJ1Y3Qgb3NkX2luZm8gKm9zZF9pbmZvOyAgICAgIC8qIGl2dHZmYiBwcml2YXRlIE9TRCBpbmZvICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpdnR2ICp0b19pdnR2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXZ0diAqdG9faXZ0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXZ0diwgZGV2aWNlKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgaXZ0diwgdjRsMl9kZXYpOwogfQogCiAvKiBHbG9iYWxzICovCkBAIC03ODgsNyArNzg4LDcgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgaHcgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9odyhpdHYsIGh3LCBvLCBmLCBhcmdzLi4uKSAJCQkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+ZGV2aWNlLCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCiAKICNkZWZpbmUgaXZ0dl9jYWxsX2FsbChpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9odyhpdHYsIDAsIG8sIGYgLCAjI2FyZ3MpCiAKQEAgLTc5Niw3ICs3OTYsNyBAQAogICAgbWF0Y2ggdGhlbSBhbGwpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IKICAgIC1FTk9JT0NUTENNRCwgdGhlbiByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9od19lcnIoaXR2LCBodywgbywgZiwgYXJncy4uLikgIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycigmKGl0diktPmRldmljZSwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoJihpdHYpLT52NGwyX2RldiwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKIAogI2RlZmluZSBpdnR2X2NhbGxfYWxsX2VycihpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9od19lcnIoaXR2LCAwLCBvLCBmICwgIyNhcmdzKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggZDU5NGJjMi4uY2ZhYWNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKIHN0YXRpYyB2b2lkIGl2dHZfZHVhbHdhdGNoKHN0cnVjdCBpdnR2ICppdHYpCiB7CiAJc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JdTE2IG5ld19iaXRtYXA7Ci0JdTE2IG5ld19zdGVyZW9fbW9kZTsKLQljb25zdCB1MTYgc3RlcmVvX21hc2sgPSAweDAzMDA7Ci0JY29uc3QgdTE2IGR1YWwgPSAweDAyMDA7CisJdTMyIG5ld19iaXRtYXA7CisJdTMyIG5ld19zdGVyZW9fbW9kZTsKKwljb25zdCB1MzIgc3RlcmVvX21hc2sgPSAweDAzMDA7CisJY29uc3QgdTMyIGR1YWwgPSAweDAyMDA7CiAKIAluZXdfc3RlcmVvX21vZGUgPSBpdHYtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAltdXRleF9sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoaXZ0dl9pbml0X29uX2ZpcnN0X29wZW4oaXR2KSkgewogCQlJVlRWX0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCi0JCQkJcy0+djRsMmRldi0+bWlub3IpOworCQkJCXZkZXYtPm1pbm9yKTsKIAkJbXV0ZXhfdW5sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCA2ZGJhNTViLi5jMWI3ZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlpbnQgcmV0cmllcyA9IDM7CiAKIHJldHJ5OgotCWlmIChyZXRyaWVzICYmIHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJml0di0+ZGV2LT5kZXYpID09IDApIHsKKwlpZiAocmV0cmllcyAmJiByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZpdHYtPnBkZXYtPmRldikgPT0gMCkgewogCQlpbnQgaTsKIAkJdm9sYXRpbGUgdTMyIF9faW9tZW0gKmRzdCA9ICh2b2xhdGlsZSB1MzIgX19pb21lbSAqKW1lbTsKIAkJY29uc3QgdTMyICpzcmMgPSAoY29uc3QgdTMyICopZnctPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKaW5kZXggZGMyODUwZS4uMzMyMTk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmluaXRpYWxfdmFsdWUgfCBwaW4sIElWVFZfUkVHX0dQSU9fT1VUKTsKIAl3cml0ZV9yZWcoaXR2LT5jYXJkLT5ncGlvX2luaXQuZGlyZWN0aW9uIHwgcGluLCBJVlRWX1JFR19HUElPX0RJUik7CiAJdjRsMl9zdWJkZXZfaW5pdCgmaXR2LT5zZF9ncGlvLCAmc3ViZGV2X29wcyk7Ci0Jc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT5kZXZpY2UubmFtZSk7CisJc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpdHYtPnNkX2dwaW8uZ3JwX2lkID0gSVZUVl9IV19HUElPOwotCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJml0di0+ZGV2aWNlLCAmaXR2LT5zZF9ncGlvKTsKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LCAmaXR2LT5zZF9ncGlvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggY2ExZDk1NS4uZTczYTE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTE5NCwxNCArMTk0LDE0IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlzcGluX2xvY2soJml0di0+ZGV2aWNlLmxvY2spOwotCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+ZGV2aWNlKSB7CisJc3Bpbl9sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+djRsMl9kZXYpIHsKIAkJaWYgKHNkLT5ncnBfaWQgPT0gaHcpIHsKIAkJCXJlc3VsdCA9IHNkOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJml0di0+ZGV2aWNlLmxvY2spOworCXNwaW5fdW5sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3Miw4ICs0NzIsOCBAQAogICAgaW50ZXJ2ZW5pbmcgc3RvcCBjb25kaXRpb24gKi8KIHN0YXRpYyBpbnQgaXZ0dl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewotCXN0cnVjdCB2NGwyX2RldmljZSAqZHJ2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZHJ2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYodjRsMl9kZXYpOwogCWludCByZXR2YWw7CiAJaW50IGk7CiAKQEAgLTYwNCwxMiArNjA0LDEyIEBACiAKIAlzcHJpbnRmKGl0di0+aTJjX2FkYXAubmFtZSArIHN0cmxlbihpdHYtPmkyY19hZGFwLm5hbWUpLCAiICMlZCIsCiAJCWl0di0+aW5zdGFuY2UpOwotCWkyY19zZXRfYWRhcGRhdGEoJml0di0+aTJjX2FkYXAsICZpdHYtPmRldmljZSk7CisJaTJjX3NldF9hZGFwZGF0YSgmaXR2LT5pMmNfYWRhcCwgJml0di0+djRsMl9kZXYpOwogCiAJbWVtY3B5KCZpdHYtPmkyY19jbGllbnQsICZpdnR2X2kyY19jbGllbnRfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCWl0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJml0di0+aTJjX2FkYXA7Ci0JaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+ZGV2LT5kZXY7CisJaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+cGRldi0+ZGV2OwogCiAJSVZUVl9ERUJVR19JMkMoInNldHRpbmcgc2NsIGFuZCBzZGEgdG8gMVxuIik7CiAJaXZ0dl9zZXRzY2woaXR2LCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IGMxM2JkMmEuLjlhMDQyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMzQ1LDEwICszNDUsOCBAQAogCXBpeGZtdC0+cHJpdiA9IDA7CiAJaWYgKGlkLT50eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVikgewogCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0hNMTI7Ci0JCS8qIFlVViBzaXplIGlzIChZPShoKncpICsgVVY9KGgqKHcvMikpKSAqLwotCQlwaXhmbXQtPnNpemVpbWFnZSA9Ci0JCQlwaXhmbXQtPmhlaWdodCAqIHBpeGZtdC0+d2lkdGggKwotCQkJcGl4Zm10LT5oZWlnaHQgKiAocGl4Zm10LT53aWR0aCAvIDIpOworCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCo3MjApICsgVVY9KGgqKDcyMC8yKSkpICovCisJCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5oZWlnaHQgKiA3MjAgKiAzIC8gMjsKIAkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSA3MjA7CiAJfSBlbHNlIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwpAQCAtNDY5LDExICs0NjcsMTcgQEAKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJaW50IG1pbl9oID0gMjsKIAogCXcgPSBtaW4odywgNzIwKTsKIAl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCWggPSBtYXgoaCwgMik7CisJaCA9IG1heChoLCBtaW5faCk7CiAJaXZ0dl9nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCWZtdC0+Zm10LnBpeC53aWR0aCA9IHc7CiAJZm10LT5mbXQucGl4LmhlaWdodCA9IGg7CkBAIC03NjYsNyArNzcwLDcgQEAKIAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBJVlRWX0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBpdHYtPmNhcmRfbmFtZSwgc2l6ZW9mKHZjYXAtPmNhcmQpKTsKLQlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGl0di0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShpdHYtPnBkZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gSVZUVl9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gaXR2LT52NGwyX2NhcDsgCSAgICAvKiBjYXBhYmlsaXRpZXMgKi8KIAlyZXR1cm4gMDsKQEAgLTE1MTMsMTIgKzE1MTcsMTIgQEAKIAl9CiAJSVZUVl9JTkZPKCJUdW5lcjogICVzXG4iLAogCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKLQljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPmRldmljZS5uYW1lKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCUlWVFZfSU5GTygiU3RhdHVzIGZsYWdzOiAgICAweCUwOGx4XG4iLCBpdHYtPmlfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMIHx8IHMtPmJ1ZmZlcnMgPT0gMCkKKwkJaWYgKHMtPnZkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJSVZUVl9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLCBzLT5uYW1lLCBzLT5zX2ZsYWdzLAogCQkJCShzLT5idWZmZXJzIC0gcy0+cV9mcmVlLmJ1ZmZlcnMpICogMTAwIC8gcy0+YnVmZmVycywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggZjVkMDBlYy4uMDFjMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogCUlWVFZfREVCVUdfSElfRE1BKCJpdnR2X3Bpb193b3JrX2hhbmRsZXJcbiIpOwogCWlmIChpdHYtPmN1cl9waW9fc3RyZWFtIDwgMCB8fCBpdHYtPmN1cl9waW9fc3RyZWFtID49IElWVFZfTUFYX1NUUkVBTVMgfHwKLQkJCXMtPnY0bDJkZXYgPT0gTlVMTCB8fCAhaXZ0dl91c2VfcGlvKHMpKSB7CisJCQlzLT52ZGV2ID09IE5VTEwgfHwgIWl2dHZfdXNlX3BpbyhzKSkgewogCQlpdHYtPmN1cl9waW9fc3RyZWFtID0gLTE7CiAJCS8qIHRyaWdnZXIgUElPIGNvbXBsZXRlIHVzZXIgaW50ZXJydXB0ICovCiAJCXdyaXRlX3JlZyhJVlRWX0lSUV9FTkNfUElPX0NPTVBMRVRFLCAweDQ0KTsKQEAgLTEwOSw3ICsxMDksNyBAQAogCWludCByYzsKIAogCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKSB7CisJaWYgKHMtPnZkZXYgPT0gTlVMTCkgewogCQlJVlRWX0RFQlVHX1dBUk4oIlN0cmVhbSAlcyBub3Qgc3RhcnRlZFxuIiwgcy0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuYwppbmRleCA3MWJkMTNlLi5mZjdiN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKGl2dHZfbWlnaHRfdXNlX2RtYShzKSkgewotCQlzLT5zZ19oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CisJCXMtPnNnX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CiAJCWl2dHZfc3RyZWFtX3N5bmNfZm9yX2NwdShzKTsKIAl9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQl9CiAJCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOwogCQlpZiAoaXZ0dl9taWdodF91c2VfZG1hKHMpKSB7Ci0JCQlidWYtPmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShzLT5pdHYtPmRldiwKKwkJCWJ1Zi0+ZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHMtPml0di0+cGRldiwKIAkJCQlidWYtPmJ1Ziwgcy0+YnVmX3NpemUgKyAyNTYsIHMtPmRtYSk7CiAJCQlpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJfQpAQCAtMjcxLDcgKzI3MSw3IEBACiAJLyogZW1wdHkgcV9mcmVlICovCiAJd2hpbGUgKChidWYgPSBpdnR2X2RlcXVldWUocywgJnMtPnFfZnJlZSkpKSB7CiAJCWlmIChpdnR2X21pZ2h0X3VzZV9kbWEocykpCi0JCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CkBAIC0yODAsNyArMjgwLDcgQEAKIAkvKiBGcmVlIFNHIEFycmF5L0xpc3RzICovCiAJaWYgKHMtPnNnX2RtYSAhPSBOVUxMKSB7CiAJCWlmIChzLT5zZ19oYW5kbGUgIT0gSVZUVl9ETUFfVU5NQVBQRUQpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5wZGV2LCBzLT5zZ19oYW5kbGUsCiAJCQkJIHNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlzLT5zZ19oYW5kbGUgPSBJVlRWX0RNQV9VTk1BUFBFRDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmgKaW5kZXggNDc2NTU2YS4uOTEyMzM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5oCkBAIC01MywxNCArNTMsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUoc3RydWN0IGl2dHZfc3RyZWFtICpzLCBzdHJ1Y3QgaXZ0dl9idWZmZXIgKmJ1ZikKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9idWZfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBpdnR2X3N0cmVhbSAqcywgc3RydWN0IGl2dHZfYnVmZmVyICpidWYpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSArIDI1Niwgcy0+ZG1hKTsKIH0KIApAQCAtODIsMTQgKzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9zdHJlYW1fc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2X3N0cmVhbSAqcykKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgcy0+c2dfaGFuZGxlLAogCQkJc2l6ZW9mKHN0cnVjdCBpdnR2X3NnX2VsZW1lbnQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfc3RyZWFtX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBzLT5zZ19oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIHMtPnNnX2hhbmRsZSwKIAkJCXNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA4NTRhOTUwLi4xNWRhMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogc3RhdGljIHZvaWQgaXZ0dl9zdHJlYW1faW5pdChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHMtPnY0bDJkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHMtPnZkZXY7CiAKLQkvKiB3ZSBuZWVkIHRvIGtlZXAgdjRsMmRldiwgc28gcmVzdG9yZSBpdCBhZnRlcndhcmRzICovCisJLyogd2UgbmVlZCB0byBrZWVwIHZkZXYsIHNvIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcyAqLwogCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKLQlzLT52NGwyZGV2ID0gZGV2OworCXMtPnZkZXYgPSB2ZGV2OwogCiAJLyogaW5pdGlhbGl6ZSBpdnR2X3N0cmVhbSBmaWVsZHMgKi8KIAlzLT5pdHYgPSBpdHY7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQAogCWludCBudW1fb2Zmc2V0ID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwogCWludCBudW0gPSBpdHYtPmluc3RhbmNlICsgaXZ0dl9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKLQkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KKwkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2ZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmRldiA9IE5VTEw7CiAJcy0+aXR2ID0gaXR2OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xOTcsMjEgKzE5NywyMSBAQAogCWl2dHZfc3RyZWFtX2luaXQoaXR2LCB0eXBlKTsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocy0+dmRldiA9PSBOVUxMKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCBhbGxvY2F0ZSB2NGwyIHZpZGVvX2RldmljZSBmb3IgJXNcbiIsIHMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICIlcyAlcyIsCi0JCQlpdHYtPmRldmljZS5uYW1lLCBzLT5uYW1lKTsKKwlzbnByaW50ZihzLT52ZGV2LT5uYW1lLCBzaXplb2Yocy0+dmRldi0+bmFtZSksICIlcyAlcyIsCisJCQlpdHYtPnY0bDJfZGV2Lm5hbWUsIHMtPm5hbWUpOwogCi0Jcy0+djRsMmRldi0+bnVtID0gbnVtOwotCXMtPnY0bDJkZXYtPnY0bDJfZGV2ID0gJml0di0+ZGV2aWNlOwotCXMtPnY0bDJkZXYtPmZvcHMgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7Ci0Jcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCXMtPnY0bDJkZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7Ci0JaXZ0dl9zZXRfZnVuY3Mocy0+djRsMmRldik7CisJcy0+dmRldi0+bnVtID0gbnVtOworCXMtPnZkZXYtPnY0bDJfZGV2ID0gJml0di0+djRsMl9kZXY7CisJcy0+dmRldi0+Zm9wcyA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0uZm9wczsKKwlzLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJcy0+dmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwlpdnR2X3NldF9mdW5jcyhzLT52ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJCWlmIChpdnR2X3ByZXBfZGV2KGl0diwgdHlwZSkpCiAJCQlicmVhazsKIAotCQlpZiAoaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPT0gTlVMTCkKKwkJaWYgKGl0di0+c3RyZWFtc1t0eXBlXS52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAogCQkvKiBBbGxvY2F0ZSBTdHJlYW0gKi8KQEAgLTI0NywyOCArMjQ3LDI4IEBACiAJaW50IHZmbF90eXBlID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS52ZmxfdHlwZTsKIAlpbnQgbnVtOwogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmRldiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAJLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLwogCWlmICh0eXBlICE9IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRykgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnNfbXBnID0gJml0di0+c3RyZWFtc1tJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmRldikKKwkJCW51bSA9IHNfbXBnLT52ZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQotCXZpZGVvX3NldF9kcnZkYXRhKHMtPnY0bDJkZXYsIHMpOworCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZkZXYsIHMpOwogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG51bSkpIHsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnZkZXYsIHZmbF90eXBlLCBudW0pKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCQlzLT5uYW1lLCBudW0pOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKLQkJcy0+djRsMmRldiA9IE5VTEw7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnZkZXYpOworCQlzLT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgpAQCAtMzE2LDkgKzMxNiw5IEBACiAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBJVlRWX01BWF9TVFJFQU1TOyB0eXBlKyspIHsKLQkJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGl0di0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaXR2LT5zdHJlYW1zW3R5cGVdLnZkZXY7CiAKLQkJaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQlpdHYtPnN0cmVhbXNbdHlwZV0udmRldiA9IE5VTEw7CiAJCWlmICh2ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJaW50IGNhcHR5cGUgPSAwLCBzdWJ0eXBlID0gMDsKIAlpbnQgZW5hYmxlX3Bhc3N0aHJvdWdoID0gMDsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTYxMSw3ICs2MTEsNyBAQAogCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwogCWludCBkYXRhdHlwZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlNldHRpbmcgc29tZSBpbml0aWFsIGRlY29kZXIgc2V0dGluZ3NcbiIpOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChJVlRWX0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKQEAgLTcwNSw3ICs3MDUsNyBAQAogCWZvciAoaSA9IElWVFZfTUFYX1NUUkVBTVMgLSAxOyBpID49IDA7IGktLSkgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHRlc3RfYml0KElWVFZfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7CiAJCQlpdnR2X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJaW50IGNhcF90eXBlOwogCWludCBzdG9wbW9kZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGFsbG93ZWQgdG8gc3RvcCB0aGUgY2FwdHVyZQpAQCAtODM0LDcgKzgzNCw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYgJiYgcy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEcpCkBAIC04OTUsNyArODk1LDcgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnl1dl9zdHJlYW0gPSAmaXR2LT5zdHJlYW1zW0lWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVl07CiAJc3RydWN0IGl2dHZfc3RyZWFtICpkZWNfc3RyZWFtID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdOwogCi0JaWYgKHl1dl9zdHJlYW0tPnY0bDJkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHl1dl9zdHJlYW0tPnZkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJSVZUVl9ERUJVR19JTkZPKCJpdnR2IGlvY3RsOiBTZWxlY3QgcGFzc3Rocm91Z2ggbW9kZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKaW5kZXggNDYwZGIwMy4uZDA3YWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwpAQCAtOTMsNyArOTMsNyBAQAogewogCWlmIChpdHYtPnVkbWEuU0dfaGFuZGxlID09IDApIHsKIAkJLyogTWFwIERNQSBQYWdlIEFycmF5IEJ1ZmZlciAqLwotCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5kZXYsIGl0di0+dWRtYS5TR2FycmF5LAorCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5wZGV2LCBpdHYtPnVkbWEuU0dhcnJheSwKIAkJCSAgIHNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpdnR2X3VkbWFfc3luY19mb3JfY3B1KGl0dik7CiAJfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJfQogCiAJLyogTWFwIFNHIExpc3QgKi8KLQlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYS0+U0dfbGVuZ3RoID0gcGNpX21hcF9zZyhpdHYtPnBkZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogRmlsbCBTRyBBcnJheSB3aXRoIG5ldyB2YWx1ZXMgKi8KIAlpdnR2X3VkbWFfZmlsbF9zZ19hcnJheSAoZG1hLCBpdnR2X2Rlc3RfYWRkciwgMCwgLTEpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAkvKiBVbm1hcCBTY2F0dGVybGlzdCAqLwogCWlmIChkbWEtPlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZG1hLT5TR19sZW5ndGggPSAwOwogCX0KIAkvKiBzeW5jIERNQSAqLwpAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAogCS8qIFVubWFwIFNHIEFycmF5ICovCiAJaWYgKGl0di0+dWRtYS5TR19oYW5kbGUpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCQkgc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogVW5tYXAgU2NhdHRlcmxpc3QgKi8KIAlpZiAoaXR2LT51ZG1hLlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGl0di0+dWRtYS5TR2xpc3QsIGl0di0+dWRtYS5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NnKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHbGlzdCwgaXR2LT51ZG1hLnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJVlRWX0RNQV9TR19PU0RfRU5UOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaAppbmRleCBkZjcyN2UyLi5lZTNjOWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5oCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfdWRtYV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGl2dHYgKml0dikKIHsKLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoKHN0cnVjdCBwY2lfZGV2ICopaXR2LT5kZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKIAkJc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X3VkbWFfc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KChzdHJ1Y3QgcGNpX2RldiAqKWl0di0+ZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAorCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCXNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IDVjNWQxYzQuLmY0MjBkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC0xODUsNiArMTg1LDggQEAKIAkJc2l6ZSA9IDQgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0gZWxzZSB7CiAJCW1lbWNweShkc3QgKyBzZCwgIml0djAiLCA0KTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1swXSk7CisJCWNwdV90b19sZTMycygmbGluZW1hc2tbMV0pOwogCQltZW1jcHkoZHN0ICsgc2QgKyA0LCAmbGluZW1hc2tbMF0sIDgpOwogCQlzaXplID0gMTIgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaAppbmRleCA4Y2Q3NTNkLi5iNTMwZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIElWVFZfRFJJVkVSX05BTUUgIml2dHYiCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQogI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SIDQKLSNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKKyNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDEKIAogI2RlZmluZSBJVlRWX1ZFUlNJT04gX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUixJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SLElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKaW5kZXggZWU5MTEwNy4uNzkxMmVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlkbWEtPnBhZ2VfY291bnQgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZG1hLT5TR19sZW5ndGggPSBwY2lfbWFwX3NnKGl0di0+ZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCS8qIEZpbGwgU0cgQXJyYXkgd2l0aCBuZXcgdmFsdWVzICovCiAJaXZ0dl91ZG1hX2ZpbGxfc2dfYXJyYXkoZG1hLCB5X2J1ZmZlcl9vZmZzZXQsIHV2X2J1ZmZlcl9vZmZzZXQsIHlfc2l6ZSk7CkBAIC05MTAsNyArOTEwLDcgQEAKIAkvKiBXZSBuZWVkIGEgYnVmZmVyIGZvciBibGFua2luZyB3aGVuIFkgcGxhbmUgaXMgb2Zmc2V0IC0gbm9uLWZhdGFsIGlmIHdlIGNhbid0IGdldCBvbmUgKi8KIAl5aS0+YmxhbmtpbmdfcHRyID0ga3phbGxvYyg3MjAgKiAxNiwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOwogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7Ci0JCXlpLT5ibGFua2luZ19kbWFwdHIgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJeWktPmJsYW5raW5nX2RtYXB0ciA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9IGVsc2UgewogCQl5aS0+YmxhbmtpbmdfZG1hcHRyID0gMDsKIAkJSVZUVl9ERUJVR19XQVJOKCJGYWlsZWQgdG8gYWxsb2NhdGUgeXV2IGJsYW5raW5nIGJ1ZmZlclxuIik7CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7CiAJCWtmcmVlKHlpLT5ibGFua2luZ19wdHIpOwogCQl5aS0+YmxhbmtpbmdfcHRyID0gTlVMTDsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX2RtYXB0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIHlpLT5ibGFua2luZ19kbWFwdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogSW52YWxpZGF0ZSB0aGUgb2xkIGRpbWVuc2lvbiBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IDM2YWJkMmEuLjY2ZTZlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTExOTIsMTIgKzExOTIsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGl2dHZmYl9jYWxsYmFja19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmIChpdnR2ZmJfaW5pdF9jYXJkKGl0dikgPT0gMCkgewogCQkJSVZUVkZCX0lORk8oIkZyYW1lYnVmZmVyIHJlZ2lzdGVyZWQgb24gJXNcbiIsCi0JCQkJCWl0di0+ZGV2aWNlLm5hbWUpOworCQkJCQlpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCQkJKCooaW50ICopcCkrKzsKIAkJfQogCX0KQEAgLTEyMDcsNyArMTIwNyw3IEBACiBzdGF0aWMgaW50IGl2dHZmYl9jYWxsYmFja19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmICh1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZpdHYtPm9zZF9pbmZvLT5pdnR2ZmJfaW5mbykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCmluZGV4IGJhZTJkMmIuLjg0MTAyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwpAQCAtMzksMTkgKzM5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJrczAxMjcuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJLUzAxMjcgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJ5YW4gRHJha2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBLU19UWVBFX1VOS05PV04JMAotI2RlZmluZSBLU19UWVBFXzAxMjJTCTEKLSNkZWZpbmUgS1NfVFlQRV8wMTI3CTIKLSNkZWZpbmUgS1NfVFlQRV8wMTI3QgkzCisvKiBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKKyNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKKwogCiAvKiBrczAxMjcgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgS1NfU1RBVCAgICAgMHgwMApAQCAtMTk3LDE1ICsxOTgsMTcgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCWludAkJZm9ybWF0X3dpZHRoOwotCWludAkJZm9ybWF0X2hlaWdodDsKLQlpbnQJCWNhcF93aWR0aDsKLQlpbnQJCWNhcF9oZWlnaHQ7Ci0JaW50CQlub3JtOwotCWludAkJa3NfdHlwZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQJbm9ybTsKKwlpbnQJCWlkZW50OwogCXU4IAkJcmVnc1syNTZdOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3MwMTI3ICp0b19rczAxMjcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qga3MwMTI3LCBzZCk7Cit9CisKIAogc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLwogCkBAIC0zMTEsNDMgKzMxNCw0NSBAQAogICovCiAKIAotc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCitzdGF0aWMgdTgga3MwMTI3X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljaGFyIHZhbCA9IDA7CiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7IGMtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCi0JCXsgYy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsIH0KKwkJeyBjbGllbnQtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWwgfQogCX07CiAJaW50IHJldDsKIAotCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKIAlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCi0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZWFkIGVycm9yXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVhZCBlcnJvclxuIik7CiAKIAlyZXR1cm4gdmFsOwogfQogCiAKLXN0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIndyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIndyaXRlIGVycm9yXG4iKTsKIAogCWtzLT5yZWdzW3JlZ10gPSB2YWw7CiB9CiAKIAogLyogZ2VuZXJpYyBiaXQtdHdpZGRsaW5nICovCi1zdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CiAKIAl1OCB2YWwgPSBrcy0+cmVnc1tyZWddOwogCXZhbCA9ICh2YWwgJiBhbmRfdikgfCBvcl92OwotCWtzMDEyN193cml0ZShjbGllbnQsIHJlZywgdmFsKTsKKwlrczAxMjdfd3JpdGUoc2QsIHJlZywgdmFsKTsKIH0KIAogCkBAIC0zNTUsNDM5ICszNjAsMzYzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdGF0aWMgdm9pZCBrczAxMjdfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CiAJaW50IGk7CiAKLQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKKwlrcy0+aWRlbnQgPSBWNEwyX0lERU5UX0tTMDEyNzsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZXNldFxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAogCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBpLCB0YWJsZVtpXSk7CiAKIAlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCi0JCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CisJCWtzMDEyN193cml0ZShzZCwgaSwgdGFibGVbaV0pOwogCiAJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCi0JaWYgKChrczAxMjdfcmVhZChjLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjJTOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTIycyBmb3VuZFxuIik7CisJaWYgKChrczAxMjdfcmVhZChzZCwgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7CisJCWtzLT5pZGVudCA9IFY0TDJfSURFTlRfS1MwMTIyUzsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAia3MwMTIycyBmb3VuZFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgeworCXN3aXRjaCAoa3MwMTI3X3JlYWQoc2QsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjcgZm91bmRcbiIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjcgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgOToKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjdCOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJa3MtPmlkZW50ID0gVjRMMl9JREVOVF9LUzAxMjdCOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidW5rbm93biByZXZpc2lvblxuIik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGtzMDEyN19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JaW50CQkqaWFyZyA9IChpbnQgKilhcmc7Ci0JaW50CQlzdGF0dXM7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JaWYgKCFrcykKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzI6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMzoKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzU6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogQ29tcG9zaXRlXG4iLCByb3V0ZS0+aW5wdXQpOworCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCS8qIFZTRT0wICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOworCQkvKiBzZXQgaW5wdXQgbGluZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURCLCAgIDB4YjAsIHJvdXRlLT5pbnB1dCk7CisJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCS8qIGFuYWxvZyBpbnB1dCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CisJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0lOSVRcbiIpOwotCQlrczAxMjdfcmVzZXQoYyk7CisJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8yOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8zOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwotCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwotCQkJLyogVlNFPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7Ci0JCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKLQkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7Ci0JCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKLQkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsCi0JCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfTFVNQV0pfDB4MGMpOwotCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwotCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKKwljYXNlIEtTX0lOUFVUX1NWSURFT18xOgorCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CisJY2FzZSBLU19JTlBVVF9TVklERU9fMzoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogUy1WaWRlb1xuIiwgcm91dGUtPmlucHV0KTsKKwkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkvKiBWU0U9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJLyogc2V0IGlucHV0IGxpbmUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCByb3V0ZS0+aW5wdXQpOworCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkvKiBhbmFsb2cgaW5wdXQgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfTFVNQSwgMHgwMCwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOworCQkvKiBkaXNhYmxlIGx1bWEgY29tYiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19WRVJUSUFdJjB4ZjApfDB4MDEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1NWSURFT18xOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18yOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18zOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKLQkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKLQkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwotCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7Ci0JCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwotCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7Ci0JCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwotCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAotCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUIDE1OiBZVVY2NTZcbiIpOwotCQkJaWYgKGtzLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAotCQkJICAgIGtzLT5ub3JtID09IEtTX1NURF9QQUxfTSkKLQkJCQkvKiBmb3JjZSA2MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKLQkJCWVsc2UKLQkJCQkvKiBmb3JjZSA1MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLwotCQkJLyogc2V0IGlucHV0IGxpbmUgYW5kIFZBTElHTiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKLQkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCi0JCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDg3KTsKLQkJCS8qIGRpZ2l0YWwgaW5wdXQsIFNZTkRJUiA9IDAgSU5QU0w9MDEgQ0xLRElSPTAgRUFWPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKLQkJCS8qIGRpc2FibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwotCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCi0JCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwotCi0JCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KLQkJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19IVUUsIDB4MDAsIDApOwotCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7Ci0KLQkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGSCwgMHgwMCwgMHg0Zik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwotCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoYywgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCWJyZWFrOwogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX09VVFBVVF9ZVVY2NTZFOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfT1VUUFVUOiBPVVRQVVRfWVVWNjU2RSAoTWlzc2luZylcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBLU19JTlBVVF9ZVVY2NTY6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfcm91dGluZyAxNTogWVVWNjU2XG4iKTsKKwkJaWYgKGtzLT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKQorCQkJLyogZm9yY2UgNjAgSHogKi8KKwkJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CisJCWVsc2UKKwkJCS8qIGZvcmNlIDUwIEh6ICovCisJCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOwogCi0JCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGYwLCAweDA5KTsKLQkJCWJyZWFrOwotCQl9CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCisJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCAocm91dGUtPmlucHV0IHwgMHg0MCkpOworCQkvKiBmcmVlcnVubmluZyBtb2RlLCAqLworCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQywgICAweDcwLCAweDg3KTsKKwkJLyogZGlnaXRhbCBpbnB1dCwgU1lORElSID0gMCBJTlBTTD0wMSBDTEtESVI9MCBFQVY9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkvKiBkaXNhYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKKwkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CisKKwkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKKworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DT04sIDB4MDAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KKwkJCS8qIHNwZWM6IDIyOSAoZTUpICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1NBVCwgMHgwMCwgMHhlOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0hVRSwgMHgwMCwgMCk7CisKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVUdBSU4sIDB4MDAsIDIzOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1ZHQUlOLCAweDAwLCAweDAwKTsKKworCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLyogc2FtIFRoaXMgYmxvY2sgbWl4ZXMgb2xkIGFuZCBuZXcgbm9ybSBuYW1lcy4uLiAqLwotCQkvKiBTZXQgdG8gYXV0b21hdGljIFNFQ0FNL0ZzYyBtb2RlICovCi0JCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwotCi0JCWtzLT5ub3JtID0gKmlhcmc7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJLyogdGhpcyBpcyB1bnRlc3RlZCAhISAqLwotCQkvKiBJdCBqdXN0IGRldGVjdHMgUEFMX04vTlRTQ19NIChubyBzcGVjaWFsIGZyZXF1ZW5jaWVzKSAqLwotCQkvKiBBbmQgeW91IGhhdmUgdG8gc2V0IHRoZSBzdGFuZGFyZCBhIHNlY29uZCB0aW1lIGFmdGVyd2FyZHMgKi8KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKLQotCQkJLyogVGhlIGNoaXAgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0ICovCi0JCQkvKiBiYXNlZCBvbiB0aGUgY3VycmVudCBmaWVsZCByYXRlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7Ci0JCQkvKiBUaGlzIGlzIHdyb25nIGZvciBQQUwgISBBcyBJIHNhaWQsICovCi0JCQkvKiB5b3UgbmVlZCB0byBzZXQgdGhlIHN0YW5kYXJkIG9uY2UgYWdhaW4gISEgKi8KLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX05UU0NfTjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogTlRTQ19OIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX1BBTF9NOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiS1MwMTI3X1NFVF9OT1JNOiBQQUxfTSAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogU0VDQU1cbiIpOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCi0JCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTArMSk7Ci0KLQkJCS8qIGRpZCBpdCBhdXRvZGV0ZWN0PyAqLwotCQkJaWYgKGtzMDEyN19yZWFkKGMsIEtTX0RFTU9EKSAmIDB4NDApCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGZvcmNlIHRvIHNlY2FtIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NPTlRSQVNUOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8gKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0NfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfUElYQ0xLX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6ICovCi0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCBlbmFibGU7Ci0KLQkJaWFyZyA9IGFyZzsKLQkJZW5hYmxlID0gKCppYXJnICE9IDApOwotCQlpZiAoZW5hYmxlKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb25cbiIpOwotCQkJLyogQWxsIG91dHB1dCBwaW5zIG9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGNmLCAweDMwKTsKLQkJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7Ci0JCX0gZWxzZSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb2ZmXG4iKTsKLQkJCS8qIFZpZGVvIG91dHB1dCBwaW5zIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7Ci0JCQkvKiBJZ25vcmUgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7Ci0JCX0KKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19yb3V0aW5nOiBVbmtub3duIGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOwogCQlicmVhazsKIAl9CiAKLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLworCS8qIGhhY2s6IENETUxQRiBzb21ldGltZXMgc3BvbnRhbmVvdXNseSBzd2l0Y2hlcyBvbjsgKi8KKwkvKiBmb3JjZSBiYWNrIG9mZiAqLworCWtzMDEyN193cml0ZShzZCwgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0dFVF9TVEFUVVNcbiIpOwotCQkqaWFyZyA9IDA7Ci0JCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwotCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwotCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0NPTE9SKTsKLQkJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KLQkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfUEFMKTsKLQkJZWxzZQotCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19OVFNDKTsKLQkJYnJlYWs7CitzdGF0aWMgaW50IGtzMDEyN19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwotCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duOiAweCUwOHhcbiIsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KKwlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisKKwlrcy0+bm9ybSA9IHN0ZDsKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUxfTikgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTiAoZml4bWUpXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFBBTF9OXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTF9NKSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSJzX3N0ZDogUEFMX00gKGZpeG1lKVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFNFQ0FNXG4iKTsKKworCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKKworCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KKwkJaWYgKCEoa3MwMTI3X3JlYWQoc2QsIEtTX0RFTU9EKSAmIDB4NDApKQorCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihzZCwgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RkOiBVbmtub3duIG5vcm0gJWxseFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGtzMDEyN19zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RyZWFtKCVkKVxuIiwgZW5hYmxlKTsKKwlpZiAoZW5hYmxlKSB7CisJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CisJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CisJfSBlbHNlIHsKKwkJLyogVmlkZW8gb3V0cHV0IHBpbnMgb2ZmICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NERU0sIDB4N2YsIDB4ODApOworCX0KKwlyZXR1cm4gMDsKK30KIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK3N0YXRpYyBpbnQga3MwMTI3X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQoreworCWludCBzdGF0ID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJdTggc3RhdHVzOworCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX0FMTDsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfS1MwMTI3X0FERE9OID4+IDEsCi0JSTJDX0tTMDEyN19PTkJPQVJEID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKKwlzdGF0dXMgPSBrczAxMjdfcmVhZChzZCwgS1NfU1RBVCk7CisJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLworCQlzdGF0ID0gMDsKKwlpZiAoIShzdGF0dXMgJiAweDAxKSkJCSAgICAgIC8qIENMT0NLIHNldCAqLworCQlzdGF0IHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7CisJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KKwkJc3RkID0gVjRMMl9TVERfUEFMOworCWVsc2UKKwkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwlpZiAocHN0ZCkKKwkJKnBzdGQgPSBzdGQ7CisJaWYgKHBzdGF0dXMpCisJCSpwc3RhdHVzID0gc3RhdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrczAxMjdfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJxdWVyeXN0ZFxuIik7CisJcmV0dXJuIGtzMDEyN19zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQga3MwMTI3X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfaW5wdXRfc3RhdHVzXG4iKTsKKwlyZXR1cm4ga3MwMTI3X3N0YXR1cyhzZCwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIGludCBrczAxMjdfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBrcy0+aWRlbnQsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGtzMDEyN19jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0ga3MwMTI3X2dfY2hpcF9pZGVudCwKIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMga3MwMTI3X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBrczAxMjdfc19zdGQsCit9OwogCi1zdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMga3MwMTI3X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0ga3MwMTI3X3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSBrczAxMjdfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0ga3MwMTI3X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IGtzMDEyN19nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGtzMDEyN19vcHMgPSB7CisJLmNvcmUgPSAma3MwMTI3X2NvcmVfb3BzLAorCS50dW5lciA9ICZrczAxMjdfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZrczAxMjdfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGtzMDEyNyAqa3M7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCi0JCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CisJdjRsX2luZm8oY2xpZW50LCAiJXMgY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJY2xpZW50LT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJa3MgPSBremFsbG9jKHNpemVvZigqa3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoa3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwotCi0Ja3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CisJc2QgPSAma3MtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZrczAxMjdfb3BzKTsKIAogCS8qIHBvd2VyIHVwICovCiAJaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CisJa3MwMTI3X3dyaXRlKHNkLCBLU19DTURBLCAweDJjKTsKIAltZGVsYXkoMTApOwogCiAJLyogcmVzZXQgdGhlIGRldmljZSAqLwotCWtzMDEyN19yZXNldChjKTsKKwlrczAxMjdfaW5pdChzZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3N0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWtzMDEyN193cml0ZShjLCBLU19PRk1UQSwgMHgyMCk7IC8qIHRyaXN0YXRlICovCi0Ja3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0Ja2ZyZWUoa3MpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrczAxMjdfd3JpdGUoc2QsIEtTX09GTVRBLCAweDIwKTsgLyogdHJpc3RhdGUgKi8KKwlrczAxMjdfd3JpdGUoc2QsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLworCWtmcmVlKHRvX2tzMDEyNyhzZCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzMDEyN19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CiAJeyAia3MwMTI3IiwgMCB9LAorCXsgImtzMDEyN2IiLCAwIH0sCisJeyAia3MwMTIycyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywga3MwMTI3X2lkKTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImtzMDEyNyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAogCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKIAkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSBrczAxMjdfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmgKaW5kZXggMWVjNTc4OC4uY2I4YWJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5oCkBAIC0yNCw4ICsyNCw2IEBACiAjaWZuZGVmIEtTMDEyN19ICiAjZGVmaW5lIEtTMDEyN19ICiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCiAvKiBpbnB1dCBjaGFubmVscyAqLwogI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfMSAgICAwCiAjZGVmaW5lIEtTX0lOUFVUX0NPTVBPU0lURV8yICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IGRlMzk3ZWYuLjFmMzQwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMTMyLDExICsxMzIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG01Mjc5MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbTUyNzkwX2NvcmVfb3BzID0gewpAQCAtMjEwLDggKzIwNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJtNTI3OTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9NNTI3OTAsCi0JLmNvbW1hbmQgPSBtNTI3OTBfY29tbWFuZCwKIAkucHJvYmUgPSBtNTI3OTBfcHJvYmUsCiAJLnJlbW92ZSA9IG01Mjc5MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gbTUyNzkwX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBiNzZlMzNkLi4yYWQxMWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMTAxNyw3ICsxMDE3LDYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJtZXllIik7CiAJc3RyY3B5KGNhcC0+Y2FyZCwgIm1leWUiKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShtZXllLm1jaGlwX2RldikpOwpAQCAtMTAzNiw4ICsxMDM1LDYgQEAKIAlpZiAoaS0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7Ci0JaS0+aW5kZXggPSAwOwogCXN0cmNweShpLT5uYW1lLCAiQ2FtZXJhIik7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAKQEAgLTEyNTksMjIgKzEyNTYsMTMgQEAKIAlpZiAoZi0+aW5kZXggPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+aW5kZXggPT0gMCkgewogCQkvKiBzdGFuZGFyZCBZVVYgNDIyIGNhcHR1cmUgKi8KLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT5pbmRleCA9IDA7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWYtPmZsYWdzID0gMDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiWVVWNDIyIik7CiAJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJfSBlbHNlIHsKIAkJLyogY29tcHJlc3NlZCBNSlBFRyBjYXB0dXJlICovCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+aW5kZXggPSAxOwotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiTUpQRUciKTsKIAkJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CkBAIC0xMjg2LDkgKzEyNzQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVVlWICYmCiAJICAgIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMTksMTIgKzEzMDQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZmLT5mbXQucGl4LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KIAlzd2l0Y2ggKG1leWUubWNoaXBfbW9kZSkgewogCWNhc2UgTUNISVBfSElDX01PREVfQ09OVF9PVVQ6CiAJZGVmYXVsdDoKQEAgLTEzNDEsOCArMTMyMCw2IEBACiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICogMjsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICoKIAkJCSAgICAgICBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSAwOwotCWYtPmZtdC5waXgucHJpdiA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTAsOSArMTMyNyw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVZViAmJgogCSAgICBmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzk4LDkgKzEzNzIsNiBAQAogewogCWludCBpOwogCi0JaWYgKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNDQxLDE1ICsxNDEyLDExIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaW50IGluZGV4ID0gYnVmLT5pbmRleDsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBidWYtPmluZGV4OwogCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnYnVmZmVycykKKwlpZiAoaW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKLQotCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlidWYtPmluZGV4ID0gaW5kZXg7CiAJYnVmLT5ieXRlc3VzZWQgPSBtZXllLmdyYWJfYnVmZmVyW2luZGV4XS5zaXplOwogCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKIApAQCAtMTQ3MSwxMyArMTQzOCwxMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCisJaWYgKGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1leWUuZ3JhYl9idWZmZXJbYnVmLT5pbmRleF0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQpAQCAtMTQ5Nyw5ICsxNDYxLDYgQEAKIHsKIAlpbnQgcmVxbnI7CiAKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA0ZDdhOTE4Li45ZThlMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC0zNjYsMjkgKzM2Niw2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi1zdGF0aWMgaW50IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShpbnQgcnhzdWJjaGFucywgaW50IGF1ZG1vZGUpCi17Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKLQkJcmV0dXJuIFZJREVPX1NPVU5EX01PTk87Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQlyZXR1cm4gVklERU9fU09VTkRfU1RFUkVPOwotCWlmIChhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikKLQkJcmV0dXJuIFZJREVPX1NPVU5EX0xBTkcyOwotCXJldHVybiBWSURFT19TT1VORF9MQU5HMTsKLX0KLQotc3RhdGljIGludCBtc3BfbW9kZV92NGwxX3RvX3Y0bDIoaW50IG1vZGUpCi17Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzIpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzI7Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKLQkJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci19Ci0jZW5kaWYKIAogc3RhdGljIGludCBtc3BfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CkBAIC00ODIsOTYgKzQ1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGxvbmcgbXNwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRSB8IFZJREVPX0FVRElPX01VVEFCTEU7Ci0JCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCi0JCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fQkFMQU5DRSB8Ci0JCQkJVklERU9fQVVESU9fQkFTUyB8Ci0JCQkJVklERU9fQVVESU9fVFJFQkxFOwotCQlpZiAoc3RhdGUtPm11dGVkKQotCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEU7Ci0JCXZhLT52b2x1bWUgPSBzdGF0ZS0+dm9sdW1lOwotCQl2YS0+YmFsYW5jZSA9IHN0YXRlLT52b2x1bWUgPyBzdGF0ZS0+YmFsYW5jZSA6IDMyNzY4OwotCQl2YS0+YmFzcyA9IHN0YXRlLT5iYXNzOwotCQl2YS0+dHJlYmxlID0gc3RhdGUtPnRyZWJsZTsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0JCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQotCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKLQkJdmEtPm1vZGUgPSBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoc3RhdGUtPnJ4c3ViY2hhbnMsIHN0YXRlLT5hdWRtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NTQVVESU86Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCXN0YXRlLT5tdXRlZCA9ICh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKLQkJc3RhdGUtPnZvbHVtZSA9IHZhLT52b2x1bWU7Ci0JCXN0YXRlLT5iYWxhbmNlID0gdmEtPmJhbGFuY2U7Ci0JCXN0YXRlLT5iYXNzID0gdmEtPmJhc3M7Ci0JCXN0YXRlLT50cmVibGUgPSB2YS0+dHJlYmxlOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7Ci0KLQkJaWYgKHZhLT5tb2RlICE9IDAgJiYgc3RhdGUtPnJhZGlvID09IDAgJiYKLQkJICAgIHN0YXRlLT5hdWRtb2RlICE9IG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpIHsKLQkJCXN0YXRlLT5hdWRtb2RlID0gbXNwX21vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKTsKLQkJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmMgPSBhcmc7Ci0JCWludCB1cGRhdGUgPSAwOwotCQl2NGwyX3N0ZF9pZCBzdGQ7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCXVwZGF0ZSA9IDE7Ci0JCXN0YXRlLT5yYWRpbyA9IDA7Ci0JCWlmICh2Yy0+bm9ybSA9PSBWSURFT19NT0RFX1BBTCkKLQkJCXN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJZWxzZSBpZiAodmMtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCXN0ZCA9IFY0TDJfU1REX1NFQ0FNOwotCQllbHNlCi0JCQlzdGQgPSBWNEwyX1NURF9OVFNDOwotCQlpZiAoc3RkICE9IHN0YXRlLT52NGwyX3N0ZCkgewotCQkJc3RhdGUtPnY0bDJfc3RkID0gc3RkOwotCQkJdXBkYXRlID0gMTsKLQkJfQotCQlpZiAodXBkYXRlKQotCQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0ZSRVE6Ci0JewotCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qIC0tLSB2NGwyIGlvY3RscyAtLS0gKi8KIHN0YXRpYyBpbnQgbXNwX3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKQEAgLTcxMywyMiArNjAwLDI0IEBACiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDU4ODgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04MjAsOSArNzA5LDYgQEAKIAkuZ19jdHJsID0gbXNwX2dfY3RybCwKIAkuc19jdHJsID0gbXNwX3NfY3RybCwKIAkucXVlcnljdHJsID0gbXNwX3F1ZXJ5Y3RybCwKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotCS5pb2N0bCA9IG1zcF9pb2N0bCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgbXNwX3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKaW5kZXggYzFiZjc1ZS4uZmE3ZTUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC03Myw5ICs3Miw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMDAxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCi0JaW50IHN3aXRjaF9ncGlvOwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwotCXVuc2lnbmVkIGNoYXIgZGF0YXdpZHRoOwogfTsKIAogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgY29uc3QgdTggcmVnKQpAQCAtMTgxLDkyICsxNzgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsCi0JCQkgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCBncGlvID0gaWNsLT5ncGlvOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKLQkJLyogV2UgaGF2ZSBhIGRhdGEgYnVzIHN3aXRjaC4gKi8KLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJtdDltMDAxIik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwgIkNhbm5vdCBnZXQgR1BJTyAldVxuIiwKLQkJCQlncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5bTAwMS0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDltMDAxLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDltMDAxICptdDltMDAxKQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5bTAwMS0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OW0wMDEtPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OW0wMDEgKm10OW0wMDEpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDltMDAxLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwotCWludCByZXQ7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwogCi0JLyogRmxhZ3MgdmFsaWRpdHkgdmVyaWZpZWQgaW4gdGVzdF9idXNfcGFyYW0gKi8KKwkvKiBPbmx5IG9uZSB3aWR0aCBiaXQgbWF5IGJlIHNldCAqLworCWlmICghaXNfcG93ZXJfb2ZfMih3aWR0aF9mbGFnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKG10OW0wMDEtPmRhdGF3aWR0aCAhPSAxMCAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfMTApKSB8fAotCSAgICAobXQ5bTAwMS0+ZGF0YXdpZHRoICE9IDkgICYmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF85KSkgfHwKLQkgICAgKG10OW0wMDEtPmRhdGF3aWR0aCAhPSA4ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCkpKSB7Ci0JCS8qIFdlbGwsIHdlIGFjdHVhbGx5IG9ubHkgY2FuIGRvIDEwIG9yIDggYml0cy4uLiAqLwotCQlpZiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDltMDAxLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwlpZiAoaWNsLT5zZXRfYnVzX3BhcmFtKQorCQlyZXR1cm4gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CiAKLQkJbXQ5bTAwMS0+ZGF0YXdpZHRoID0gd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCA/IDggOiAxMDsKLQl9CisJLyoKKwkgKiBXaXRob3V0IGJvYXJkIHNwZWNpZmljIGJ1cyB3aWR0aCBzZXR0aW5ncyB3ZSBvbmx5IHN1cHBvcnQgdGhlCisJICogc2Vuc29ycyBuYXRpdmUgYnVzIHdpZHRoCisJICovCisJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMDAxX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKQEAgLTI3NCwxOCArMjA3LDIwIEBACiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCS8qIE1UOU0wMDEgaGFzIGFsbCBjYXB0dXJlX2Zvcm1hdCBwYXJhbWV0ZXJzIGZpeGVkICovCi0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9NQVNURVI7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVI7CiAKLQlpZiAoYnVzX3N3aXRjaF9wb3NzaWJsZShtdDltMDAxKSkKLQkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDltMDAxX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlpbnQgcmV0OwpAQCAtMzI0LDYgKzI1OSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBmLT5mbXQucGl4LndpZHRoLAorCQkuaGVpZ2h0CT0gZi0+Zm10LnBpeC5oZWlnaHQsCisJfTsKKworCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgc28gZmFyLCBqdXN0IGNyb3AuIFRPRE86IHVzZSBza2lwcGluZyAqLworCXJldHVybiBtdDltMDAxX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTQ0OSw2ICszOTgsNyBAQAogCS5yZWxlYXNlCQk9IG10OW0wMDFfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMDAxX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDltMDAxX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gbXQ5bTAwMV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBtdDltMDAxX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gbXQ5bTAwMV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OW0wMDFfc2V0X2J1c19wYXJhbSwKQEAgLTU4Myw2ICs1MzMsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KIAkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLwpAQCAtNjAzLDE4ICs1NTQsMTAgQEAKIAljYXNlIDB4ODQyMToKIAkJbXQ5bTAwMS0+bW9kZWwgPSBWNEwyX0lERU5UX01UOU0wMDFDMTJTVDsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5bTAwMV9jb2xvdXJfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfY29sb3VyX2Zvcm1hdHMpOwotCQllbHNlCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAweDg0MzE6CiAJCW10OW0wMDEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMDAxQzEyU1RNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7CkBAIC02MjMsNiArNTY2LDI2IEBACiAJCWdvdG8gZWkyYzsKIAl9CiAKKwlpY2QtPm51bV9mb3JtYXRzID0gMDsKKworCS8qCisJICogVGhpcyBpcyBhIDEwYml0IHNlbnNvciwgc28gYnkgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IDEwYml0LgorCSAqIFRoZSBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBkaWZmZXJlbnQgYnVzIHdpZHRocyBkdWUgdG8KKwkgKiBkaWZmZXJlbnQgcm91dGluZyBvZiB0aGUgZGF0YSBsaW5lcy4KKwkgKi8KKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKTsKKwllbHNlCisJCWZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisJZWxzZQorCQlpY2QtPmZvcm1hdHMrKzsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisKIAlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOU0wMDEgY2hpcCBJRCAleCAoJXMpXG4iLCBkYXRhLAogCQkgZGF0YSA9PSAweDg0MzEgPyAiQzEyU1RNIiA6ICJDMTJTVCIpOwogCkBAIC02ODgsMTggKzY1MSwxMCBAQAogCWljZC0+aGVpZ2h0X21heAk9IDEwMjQ7CiAJaWNkLT55X3NraXBfdG9wCT0gMTsKIAlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7Ci0JLyogRGVmYXVsdCBkYXRhd2lkdGggLSB0aGlzIGlzIHRoZSBvbmx5IHdpZHRoIHRoaXMgY2FtZXJhIChub3JtYWxseSkKLQkgKiBzdXBwb3J0cy4gSXQgaXMgb25seSB3aXRoIGV4dHJhIGxvZ2ljIHRoYXQgaXQgY2FuIHN1cHBvcnQKLQkgKiBvdGhlciB3aWR0aHMuIFRoZXJlZm9yZSBpdCBzZWVtcyB0byBiZSBhIHNlbnNpYmxlIGRlZmF1bHQuICovCi0JbXQ5bTAwMS0+ZGF0YXdpZHRoID0gMTA7CiAJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKIAkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KIAltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAxOwogCi0JcmV0ID0gYnVzX3N3aXRjaF9yZXF1ZXN0KG10OW0wMDEsIGljbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlc3dpbml0OwotCiAJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVpc2RyOwpAQCAtNzA3LDggKzY2Miw2IEBACiAJcmV0dXJuIDA7CiAKIGVpc2RyOgotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKLWVzd2luaXQ6CiAJa2ZyZWUobXQ5bTAwMSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcxOCw3ICs2NzEsNiBAQAogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMDAxLT5pY2QpOwotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKIAlrZnJlZShtdDltMDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCA1YjhlMjA5Li5jZGQxZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExeCogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAJdTMyIHBpeGZtdDsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKQEAgLTI0OSwxMiArMjQ5LDEzIEBACiAJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxBKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcmVjdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKIAlpbnQgcmV0LCBpc19yYXdfZm9ybWF0OwotCWludCB3aWR0aCA9IG10OW0xMTEtPndpZHRoOwotCWludCBoZWlnaHQgPSBtdDltMTExLT5oZWlnaHQ7CisJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CisJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKIAogCWlmICgobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJICAgIHx8IChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpKQpAQCAtMjYyLDkgKzI2Myw5IEBACiAJZWxzZQogCQlpc19yYXdfZm9ybWF0ID0gMDsKIAotCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIG10OW0xMTEtPmxlZnQpOworCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCBtdDltMTExLT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCByZWN0LT50b3ApOwogCiAJaWYgKGlzX3Jhd19mb3JtYXQpIHsKIAkJaWYgKCFyZXQpCkBAIC0zOTMsNiArMzk0LDggQEAKIAogc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogeworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFKTsKQEAgLTQwMSw2ICs0MDQsMTAgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUKIAkJCQl8IE1UOU0xMTFfUkVTRVRfUkVTRVRfU09DKTsKKworCWlmIChpY2wtPnJlc2V0KQorCQlpY2wtPnJlc2V0KCZtdDltMTExLT5jbGllbnQtPmRldik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjAsNyArNDI3LDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMTExLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fREFUQVdJRFRIXzg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBV0lEVEhfODsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KQEAgLTQzMCw2ICs0MzcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDltMTExX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCisJCV9fZnVuY19fLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPndpZHRoLAorCQlyZWN0LT5oZWlnaHQpOworCisJcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgcmVjdCk7CisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnJlY3QgPSAqcmVjdDsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTMyIHBpeGZtdCkKIHsKIAlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOwpAQCAtNDgwLDIzICs1MDMsMjcgQEAKIH0KIAogc3RhdGljIGludCBtdDltMTExX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gbXQ5bTExMS0+cmVjdC5sZWZ0LAorCQkudG9wCT0gbXQ5bTExMS0+cmVjdC50b3AsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OwogCWludCByZXQ7CiAKLQltdDltMTExLT5sZWZ0ID0gcmVjdC0+bGVmdDsKLQltdDltMTExLT50b3AgPSByZWN0LT50b3A7Ci0JbXQ5bTExMS0+d2lkdGggPSByZWN0LT53aWR0aDsKLQltdDltMTExLT5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7Ci0KIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCi0JCV9fZnVuY19fLCBwaXhmbXQsIG10OW0xMTEtPmxlZnQsIG10OW0xMTEtPnRvcCwgbXQ5bTExMS0+d2lkdGgsCi0JCW10OW0xMTEtPmhlaWdodCk7CisJCV9fZnVuY19fLCBwaXgtPnBpeGVsZm9ybWF0LCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLAorCQlyZWN0LmhlaWdodCk7CiAKLQlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkKTsKKwlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkLCAmcmVjdCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeGZtdCk7CisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICghcmV0KQorCQltdDltMTExLT5yZWN0ID0gcmVjdDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjcsNiArNjU0LDcgQEAKIAkucmVsZWFzZQkJPSBtdDltMTExX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTExMV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTExMV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IG10OW0xMTFfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gbXQ5bTExMV9zZXRfZm10LAogCS50cnlfZm10CQk9IG10OW0xMTFfdHJ5X2ZtdCwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0sCkBAIC04MTEsNyArODM5LDcgQEAKIAogCW10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKIAltdDltMTExX3NldF9waXhmbXQoaWNkLCBtdDltMTExLT5waXhmbXQpOwotCW10OW0xMTFfc2V0dXBfcmVjdChpY2QpOworCW10OW0xMTFfc2V0dXBfcmVjdChpY2QsICZtdDltMTExLT5yZWN0KTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+aGZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKIAltdDltMTExX3NldF9nbG9iYWxfZ2FpbihpY2QsIGljZC0+Z2Fpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCmluZGV4IDM0OWQ4ZTMuLjIzZjljZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC0xNDQsMTMgKzE0NCwxMSBAQAogCWludCByZXQ7CiAKIAkvKiBEaXNhYmxlIGNoaXAgb3V0cHV0LCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCi0JZGV2X2RiZyhpY2QtPnZkZXYtPnBhcmVudCwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JFU0VULCAxKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUkVTRVQsIDApOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMyk7CisJCXJldCA9IHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCiAJcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CiB9CkBAIC0xNTgsMTQgKzE1NiwxNCBAQAogc3RhdGljIGludCBtdDl0MDMxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwotCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpOworCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG10OXQwMzFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KLQlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpIDwgMCkKKwlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNyArMTcxLDcgQEAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLwotCWlmIChyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKSA8IDApCisJaWYgKHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xODYsOSArMTg0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQotCQlyZWdfc2V0KGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOwotCWVsc2UKIAkJcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOworCWVsc2UKKwkJcmVnX3NldChpY2QsIE1UOVQwMzFfUElYRUxfQ0xPQ0tfQ09OVFJPTCwgMHg4MDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAxLDY3ICsxOTksNzMgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBNVDlUMDMxX0JVU19QQVJBTSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorLyogUm91bmQgdXAgbWluaW1hIGFuZCByb3VuZCBkb3duIG1heGltYSAqLworc3RhdGljIHZvaWQgcmVjYWxjdWxhdGVfbGltaXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHUxNiB4c2tpcCwgdTE2IHlza2lwKQoreworCWljZC0+eF9taW4gPSAoTVQ5VDAzMV9DT0xVTU5fU0tJUCArIHhza2lwIC0gMSkgLyB4c2tpcDsKKwlpY2QtPnlfbWluID0gKE1UOVQwMzFfUk9XX1NLSVAgKyB5c2tpcCAtIDEpIC8geXNraXA7CisJaWNkLT53aWR0aF9taW4gPSAoTVQ5VDAzMV9NSU5fV0lEVEggKyB4c2tpcCAtIDEpIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWluID0gKE1UOVQwMzFfTUlOX0hFSUdIVCArIHlza2lwIC0gMSkgLyB5c2tpcDsKKwlpY2QtPndpZHRoX21heCA9IE1UOVQwMzFfTUFYX1dJRFRIIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUIC8geXNraXA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfcGFyYW1zKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwgdTE2IHhza2lwLCB1MTYgeXNraXApCiB7CiAJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKIAlpbnQgcmV0OworCXUxNiB4YmluLCB5YmluLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3A7CiAJY29uc3QgdTE2IGhibGFuayA9IE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOSywKIAkJdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKLQl1MTYgeGJpbiwgeHNraXAgPSBtdDl0MDMxLT54c2tpcCwgeWJpbiwgeXNraXAgPSBtdDl0MDMxLT55c2tpcCwKLQkJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwLCBoZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKIAotCWlmIChwaXhmbXQpIHsKLQkJLyogU19GTVQgLSB1c2UgYmlubmluZyBhbmQgc2tpcHBpbmcgZm9yIHNjYWxpbmcsIHJlY2FsY3VsYXRlICovCi0JCS8qIElzIHRoaXMgbW9yZSBvcHRpbWFsIHRoYW4ganVzdCBhIGRpdmlzaW9uPyAqLwotCQlmb3IgKHhza2lwID0gODsgeHNraXAgPiAxOyB4c2tpcC0tKQotCQkJaWYgKHJlY3QtPndpZHRoICogeHNraXAgPD0gaWNkLT53aWR0aF9tYXgpCi0JCQkJYnJlYWs7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBzZW5zb3IgbGltaXRzICovCisJaWYgKHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQorCQlyZWN0LT5sZWZ0ID0gKGljZC0+d2lkdGhfbWF4IC0gcmVjdC0+d2lkdGgpIC8gMiArIGljZC0+eF9taW47CiAKLQkJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKLQkJCWlmIChyZWN0LT5oZWlnaHQgKiB5c2tpcCA8PSBpY2QtPmhlaWdodF9tYXgpCi0JCQkJYnJlYWs7CisJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKKwkJcmVjdC0+dG9wID0gKGljZC0+aGVpZ2h0X21heCAtIHJlY3QtPmhlaWdodCkgLyAyICsgaWNkLT55X21pbjsKIAotCQl3aWR0aCA9IHJlY3QtPndpZHRoICogeHNraXA7Ci0JCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOwotCi0JCWRldl9kYmcoJmljZC0+ZGV2LCAieHNraXAgJXUsIHdpZHRoICV1LCB5c2tpcCAldSwgaGVpZ2h0ICV1XG4iLAotCQkJeHNraXAsIHdpZHRoLCB5c2tpcCwgaGVpZ2h0KTsKLQl9CisJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwOworCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOworCWxlZnQgPSByZWN0LT5sZWZ0ICogeHNraXA7CisJdG9wID0gcmVjdC0+dG9wICogeXNraXA7CiAKIAl4YmluID0gbWluKHhza2lwLCAodTE2KTMpOwogCXliaW4gPSBtaW4oeXNraXAsICh1MTYpMyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIGZyYW1lIGxpbWl0cyAqLwotCWlmIChyZWN0LT5sZWZ0ICsgd2lkdGggPiBpY2QtPndpZHRoX21heCkKLQkJcmVjdC0+bGVmdCA9IChpY2QtPndpZHRoX21heCAtIHdpZHRoKSAvIDI7CisJZGV2X2RiZygmaWNkLT5kZXYsICJ4c2tpcCAldSwgd2lkdGggJXUvJXUsIHlza2lwICV1LCBoZWlnaHQgJXUvJXVcbiIsCisJCXhza2lwLCB3aWR0aCwgcmVjdC0+d2lkdGgsIHlza2lwLCBoZWlnaHQsIHJlY3QtPmhlaWdodCk7CiAKLQlpZiAocmVjdC0+dG9wICsgaGVpZ2h0ID4gaWNkLT5oZWlnaHRfbWF4KQotCQlyZWN0LT50b3AgPSAoaWNkLT5oZWlnaHRfbWF4IC0gaGVpZ2h0KSAvIDI7Ci0KLQkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbik7IGJ1dCB0aGlzIGlzIGNoZWFwZXIgKi8KKwkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbiAqIDIpOyBidXQgdGhpcyBpcyBjaGVhcGVyICovCiAJc3dpdGNoICh4YmluKSB7CiAJY2FzZSAyOgotCQlyZWN0LT5sZWZ0ID0gKHJlY3QtPmxlZnQgKyAxKSAmIH4xOworCQlsZWZ0ID0gKGxlZnQgKyAzKSAmIH4zOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXJlY3QtPmxlZnQgPSByb3VuZHVwKHJlY3QtPmxlZnQsIDMpOworCQlsZWZ0ID0gcm91bmR1cChsZWZ0LCA2KTsKIAl9CiAKIAlzd2l0Y2ggKHliaW4pIHsKIAljYXNlIDI6Ci0JCXJlY3QtPnRvcCA9IChyZWN0LT50b3AgKyAxKSAmIH4xOworCQl0b3AgPSAodG9wICsgMykgJiB+MzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlyZWN0LT50b3AgPSByb3VuZHVwKHJlY3QtPnRvcCwgMyk7CisJCXRvcCA9IHJvdW5kdXAodG9wLCA2KTsKIAl9CiAKKwkvKiBEaXNhYmxlIHJlZ2lzdGVyIHVwZGF0ZSwgcmVjb25maWd1cmUgYXRvbWljYWxseSAqLworCXJldCA9IHJlZ19zZXQoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIEJsYW5raW5nIGFuZCBzdGFydCB2YWx1ZXMgLSBkZWZhdWx0Li4uICovCiAJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LSU5HLCBoYmxhbmspOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9WRVJUSUNBTF9CTEFOS0lORywgdmJsYW5rKTsKIAotCWlmIChwaXhmbXQpIHsKKwlpZiAoeXNraXAgIT0gbXQ5dDAzMS0+eXNraXAgfHwgeHNraXAgIT0gbXQ5dDAzMS0+eHNraXApIHsKIAkJLyogQmlubmluZywgc2tpcHBpbmcgKi8KIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fQUREUkVTU19NT0RFLApAQCAtMjcwLDE0ICsyNzQsMTQgQEAKIAkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERSwKIAkJCQkJKCh5YmluIC0gMSkgPDwgNCkgfCAoeXNraXAgLSAxKSk7CiAJfQotCWRldl9kYmcoJmljZC0+ZGV2LCAibmV3IGxlZnQgJXUsIHRvcCAldVxuIiwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIm5ldyBwaHlzaWNhbCBsZWZ0ICV1LCB0b3AgJXVcbiIsIGxlZnQsIHRvcCk7CiAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgZ3VhcmFudGVlZCBieQogCSAqIGljZC0+dHJ5X2ZtdF9jYXAoKSwgc29jX2NhbWVyYV9zX2Nyb3AoKSBhbmQgc29jX2NhbWVyYV9jcm9wY2FwKCkgKi8KIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fU1RBUlQsIGxlZnQpOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7CisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX1NUQVJULCB0b3ApOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9XSU5ET1dfV0lEVEgsIHdpZHRoIC0gMSk7CiAJaWYgKHJldCA+PSAwKQpAQCAtMjk3LDEyICszMDEsNTggQEAKIAkJfQogCX0KIAotCWlmICghcmV0ICYmIHBpeGZtdCkgeworCS8qIFJlLWVuYWJsZSByZWdpc3RlciB1cGRhdGUsIGNvbW1pdCBhbGwgY2hhbmdlcyAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwkvKiBDUk9QIC0gbm8gY2hhbmdlIGluIHNjYWxpbmcsIG9yIGluIGxpbWl0cyAqLworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCByZWN0LCBtdDl0MDMxLT54c2tpcCwgbXQ5dDAzMS0+eXNraXApOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCWludCByZXQ7CisJdTE2IHhza2lwLCB5c2tpcDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKKwkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAorCX07CisKKwkvKgorCSAqIHRyeV9mbXQgaGFzIHB1dCByZWN0YW5nbGUgd2l0aGluIGxpbWl0cy4KKwkgKiBTX0ZNVCAtIHVzZSBiaW5uaW5nIGFuZCBza2lwcGluZyBmb3Igc2NhbGluZywgcmVjYWxjdWxhdGUKKwkgKiBsaW1pdHMsIHVzZWQgZm9yIGNyb3BwaW5nCisJICovCisJLyogSXMgdGhpcyBtb3JlIG9wdGltYWwgdGhhbiBqdXN0IGEgZGl2aXNpb24/ICovCisJZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKKwkJaWYgKHJlY3Qud2lkdGggKiB4c2tpcCA8PSBNVDlUMDMxX01BWF9XSURUSCkKKwkJCWJyZWFrOworCisJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKKwkJaWYgKHJlY3QuaGVpZ2h0ICogeXNraXAgPD0gTVQ5VDAzMV9NQVhfSEVJR0hUKQorCQkJYnJlYWs7CisKKwlyZWNhbGN1bGF0ZV9saW1pdHMoaWNkLCB4c2tpcCwgeXNraXApOworCisJcmV0ID0gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIHhza2lwLCB5c2tpcCk7CisJaWYgKCFyZXQpIHsKIAkJbXQ5dDAzMS0+eHNraXAgPSB4c2tpcDsKIAkJbXQ5dDAzMS0+eXNraXAgPSB5c2tpcDsKIAl9CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC0zMTAsMTQgKzM2MCwxNCBAQAogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCi0JaWYgKHBpeC0+aGVpZ2h0IDwgaWNkLT5oZWlnaHRfbWluKQotCQlwaXgtPmhlaWdodCA9IGljZC0+aGVpZ2h0X21pbjsKLQlpZiAocGl4LT5oZWlnaHQgPiBpY2QtPmhlaWdodF9tYXgpCi0JCXBpeC0+aGVpZ2h0ID0gaWNkLT5oZWlnaHRfbWF4OwotCWlmIChwaXgtPndpZHRoIDwgaWNkLT53aWR0aF9taW4pCi0JCXBpeC0+d2lkdGggPSBpY2QtPndpZHRoX21pbjsKLQlpZiAocGl4LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQotCQlwaXgtPndpZHRoID0gaWNkLT53aWR0aF9tYXg7CisJaWYgKHBpeC0+aGVpZ2h0IDwgTVQ5VDAzMV9NSU5fSEVJR0hUKQorCQlwaXgtPmhlaWdodCA9IE1UOVQwMzFfTUlOX0hFSUdIVDsKKwlpZiAocGl4LT5oZWlnaHQgPiBNVDlUMDMxX01BWF9IRUlHSFQpCisJCXBpeC0+aGVpZ2h0ID0gTVQ5VDAzMV9NQVhfSEVJR0hUOworCWlmIChwaXgtPndpZHRoIDwgTVQ5VDAzMV9NSU5fV0lEVEgpCisJCXBpeC0+d2lkdGggPSBNVDlUMDMxX01JTl9XSURUSDsKKwlpZiAocGl4LT53aWR0aCA+IE1UOVQwMzFfTUFYX1dJRFRIKQorCQlwaXgtPndpZHRoID0gTVQ5VDAzMV9NQVhfV0lEVEg7CiAKIAlwaXgtPndpZHRoICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwogCXBpeC0+aGVpZ2h0ICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwpAQCAtMzkwLDYgKzQ0MCwxNCBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDAsCiAJfSwgeworCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIEhvcml6b250YWxseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwgewogCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUJCT0gIkdhaW4iLApAQCAtNDMxLDYgKzQ4OSw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5dDAzMV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXQwMzFfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXQwMzFfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl0MDMxX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXQwMzFfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl0MDMxX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5dDAzMV9zZXRfYnVzX3BhcmFtLApAQCAtNTEzLDIxICs1NzIsMjMgQEAKIAkJCWlmIChkYXRhIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCS8qIFBhY2sgaXQgaW50byAxLjEyNS4uMTUgdmFyaWFibGUgc3RlcCwgcmVnaXN0ZXIgdmFsdWVzIDkuLjY3ICovCisJCQkvKiBQYWNrIGl0IGludG8gMS4xMjUuLjEyOCB2YXJpYWJsZSBzdGVwLCByZWdpc3RlciB2YWx1ZXMgOS4uMHg3ODYwICovCiAJCQkvKiBXZSBhc3N1bWUgcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDEgPiAwICovCiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDE7CisJCQkvKiBjYWxjdWxhdGVkIGdhaW46IG1hcCA2NS4uMTI3IHRvIDkuLjEwMjQgc3RlcCAwLjEyNSAqLwogCQkJdW5zaWduZWQgbG9uZyBnYWluID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5kZWZhdWx0X3ZhbHVlIC0gMSkgKgotCQkJCQkgICAgICAgMTExICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgOTsKKwkJCQkJICAgICAgIDEwMTUgKyByYW5nZSAvIDIpIC8gcmFuZ2UgKyA5OwogCi0JCQlpZiAoZ2FpbiA8PSAzMikKKwkJCWlmIChnYWluIDw9IDMyKQkJLyogY2FsY3VsYXRlZCBnYWluIDkuLjMyIC0+IDkuLjMyICovCiAJCQkJZGF0YSA9IGdhaW47Ci0JCQllbHNlIGlmIChnYWluIDw9IDY0KQorCQkJZWxzZSBpZiAoZ2FpbiA8PSA2NCkJLyogY2FsY3VsYXRlZCBnYWluIDMzLi42NCAtPiAweDUxLi4weDYwICovCiAJCQkJZGF0YSA9ICgoZ2FpbiAtIDMyKSAqIDE2ICsgMTYpIC8gMzIgKyA4MDsKIAkJCWVsc2UKLQkJCQlkYXRhID0gKChnYWluIC0gNjQpICogNyArIDI4KSAvIDU2ICsgOTY7CisJCQkJLyogY2FsY3VsYXRlZCBnYWluIDY1Li4xMDI0IC0+ICgxLi4xMjApIDw8IDggKyAweDYwICovCisJCQkJZGF0YSA9ICgoKGdhaW4gLSA2NCArIDcpICogMzIpICYgMHhmZjAwKSB8IDB4NjA7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWRcbiIsCi0JCQkJIHJlZ19yZWFkKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiksIGRhdGEpOworCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIGdhaW4gZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCQkJcmVnX3JlYWQoaWNkLCBNVDlUMDMxX0dMT0JBTF9HQUlOKSwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IGIwNGM4Y2IuLjRkM2I0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KQEAgLTg5LDkgKzg4LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOVYwMjIqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KLQlpbnQgc3dpdGNoX2dwaW87CiAJdTE2IGNoaXBfY29udHJvbDsKLQl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKIH07CiAKIHN0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHU4IHJlZykKQEAgLTIwOSw2NiArMjA2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKLXsKLSNpZmRlZiBDT05GSUdfTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IGdwaW8gPSBpY2wtPmdwaW87Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgewotCQkvKiBXZSBoYXZlIGEgZGF0YSBidXMgc3dpdGNoLiAqLwotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgIm10OXYwMjIiKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJm10OXYwMjItPmNsaWVudC0+ZGV2LCAiQ2Fubm90IGdldCBHUElPICV1XG4iLCBncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5djAyMi0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDl2MDIyLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDl2MDIyICptdDl2MDIyKQotewotI2lmZGVmIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5djAyMi0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OXYwMjItPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OXYwMjIgKm10OXYwMjIpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDl2MDIyLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtMjgyLDE5ICsyMTksMTcgQEAKIAlpZiAoIWlzX3Bvd2VyX29mXzIod2lkdGhfZmxhZykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChtdDl2MDIyLT5kYXRhd2lkdGggIT0gMTAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKSkgfHwKLQkgICAgKG10OXYwMjItPmRhdGF3aWR0aCAhPSA5ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkpIHx8Ci0JICAgIChtdDl2MDIyLT5kYXRhd2lkdGggIT0gOCAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpKSkgewotCQkvKiBXZWxsLCB3ZSBhY3R1YWxseSBvbmx5IGNhbiBkbyAxMCBvciA4IGJpdHMuLi4gKi8KLQkJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDl2MDIyLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQorCWlmIChpY2wtPnNldF9idXNfcGFyYW0pIHsKKwkJcmV0ID0gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CisJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCW10OXYwMjItPmRhdGF3aWR0aCA9IHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzggPyA4IDogMTA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2l0aG91dCBib2FyZCBzcGVjaWZpYyBidXMgd2lkdGggc2V0dGluZ3Mgd2Ugb25seSBzdXBwb3J0IHRoZQorCQkgKiBzZW5zb3JzIG5hdGl2ZSBidXMgd2lkdGgKKwkJICovCisJCWlmICh3aWR0aF9mbGFnICE9IFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZsYWdzID0gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CkBAIC0zMjgsNDQgKzI2MywyNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnOwogCi0JaWYgKGJ1c19zd2l0Y2hfcG9zc2libGUobXQ5djAyMikpCi0JCXdpZHRoX2ZsYWcgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQl3aWR0aF9mbGFnID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmCisJCQlTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKwllbHNlCisJCXdpZHRoX2ZsYWcgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8Ci0JCVNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKIAkJd2lkdGhfZmxhZzsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG10OXYwMjJfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwogCWludCByZXQ7CiAKLQkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KLQkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLwotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQkvKiBObyBmb3JtYXQgY2hhbmdlLCBvbmx5IGdlb21ldHJ5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIExpa2UgaW4gZXhhbXBsZSBhcHAuIENvbnRyYWRpY3RzIHRoZSBkYXRhc2hlZXQgdGhvdWdoICovCiAJcmV0ID0gcmVnX3JlYWQoaWNkLCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFKTsKIAlpZiAocmV0ID49IDApIHsKQEAgLTQwMyw2ICszMjEsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisKKwkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KKwkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLworCXN3aXRjaCAocGl4LT5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CisJY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJLyogTm8gZm9ybWF0IGNoYW5nZSwgb25seSBnZW9tZXRyeSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIG9uIHRoaXMgY2FtZXJhLCBqdXN0IGNyb3AuICovCisJcmV0dXJuIG10OXYwMjJfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgbXQ5djAyMl90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewpAQCAtNTQ0LDYgKzQ5OCw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5djAyMl9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXYwMjJfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXYwMjJfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl2MDIyX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXYwMjJfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl2MDIyX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5djAyMl9zZXRfYnVzX3BhcmFtLApAQCAtNjk5LDYgKzY1NCw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAogCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKQEAgLTczMiwyMiArNjg4LDM2IEBACiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfUElYRUxfT1BFUkFUSU9OX01PREUsIDQgfCAweDExKTsKIAkJbXQ5djAyMi0+bW9kZWwgPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEM7CiAJCWljZC0+Zm9ybWF0cyA9IG10OXYwMjJfY29sb3VyX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX2NvbG91cl9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfSBlbHNlIHsKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERSwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OXYwMjJfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfQogCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlaXNpczsKKworCWljZC0+bnVtX2Zvcm1hdHMgPSAwOworCisJLyoKKwkgKiBUaGlzIGlzIGEgMTBiaXQgc2Vuc29yLCBzbyBieSBkZWZhdWx0IHdlIG9ubHkgYWxsb3cgMTBiaXQuCisJICogVGhlIHBsYXRmb3JtIG1heSBzdXBwb3J0IGRpZmZlcmVudCBidXMgd2lkdGhzIGR1ZSB0bworCSAqIGRpZmZlcmVudCByb3V0aW5nIG9mIHRoZSBkYXRhIGxpbmVzLgorCSAqLworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJZmxhZ3MgPSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpOworCWVsc2UKKwkJZmxhZ3MgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKwllbHNlCisJCWljZC0+Zm9ybWF0cysrOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaXNpczsKIApAQCAtODEyLDE0ICs3ODIsNiBAQAogCWljZC0+aGVpZ2h0X21heAk9IDQ4MDsKIAlpY2QtPnlfc2tpcF90b3AJPSAxOwogCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKLQkvKiBEZWZhdWx0IGRhdGF3aWR0aCAtIHRoaXMgaXMgdGhlIG9ubHkgd2lkdGggdGhpcyBjYW1lcmEgKG5vcm1hbGx5KQotCSAqIHN1cHBvcnRzLiBJdCBpcyBvbmx5IHdpdGggZXh0cmEgbG9naWMgdGhhdCBpdCBjYW4gc3VwcG9ydAotCSAqIG90aGVyIHdpZHRocy4gVGhlcmVmb3JlIGl0IHNlZW1zIHRvIGJlIGEgc2Vuc2libGUgZGVmYXVsdC4gKi8KLQltdDl2MDIyLT5kYXRhd2lkdGggPSAxMDsKLQotCXJldCA9IGJ1c19zd2l0Y2hfcmVxdWVzdChtdDl2MDIyLCBpY2wpOwotCWlmIChyZXQpCi0JCWdvdG8gZXN3aW5pdDsKIAogCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CiAJaWYgKHJldCkKQEAgLTgyOCw4ICs3OTAsNiBAQAogCXJldHVybiAwOwogCiBlaXNkcjoKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7Ci1lc3dpbml0OgogCWtmcmVlKG10OXYwMjIpOwogCXJldHVybiByZXQ7CiB9CkBAIC04MzksNyArNzk5LDYgQEAKIAlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5djAyMi0+aWNkKTsKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7CiAJa2ZyZWUobXQ5djAyMik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MjllMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCkBAIC0wLDAgKzEsMTIyMCBAQAorLyoKKyAqIFY0TDIgRHJpdmVyIGZvciBpLk1YM3ggY2FtZXJhIGhvc3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldHNraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CisKKyNkZWZpbmUgTVgzX0NBTV9EUlZfTkFNRSAibXgzLWNhbWVyYSIKKworLyogQ01PUyBTZW5zb3IgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBDU0lfUkVHX1NUQVJUCQkweDYwCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORgkJKDB4NjAgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfU0VOU19GUk1fU0laRQkoMHg2NCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9BQ1RfRlJNX1NJWkUJKDB4NjggLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfT1VUX0ZSTV9DVFJMCSgweDZDIC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX1RTVF9DVFJMCQkoMHg3MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9DQ0lSX0NPREVfMQkJKDB4NzQgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfQ0NJUl9DT0RFXzIJCSgweDc4IC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX0NDSVJfQ09ERV8zCQkoMHg3QyAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMQkoMHg4MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMgkoMHg4NCAtIENTSV9SRUdfU1RBUlQpCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQJCTAKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQJCTEKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVAkJMgorI2RlZmluZSBDU0lfU0VOU19DT05GX1BJWF9DTEtfUE9MX1NISUZUCQkzCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfU0VOU19QUlRDTF9TSElGVAkJNAorI2RlZmluZSBDU0lfU0VOU19DT05GX1NFTlNfQ0xLU1JDX1NISUZUCQk3CisjZGVmaW5lIENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQJCTgKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUCQkxMAorI2RlZmluZSBDU0lfU0VOU19DT05GX0VYVF9WU1lOQ19TSElGVAkJMTUKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9ESVZSQVRJT19TSElGVAkJMTYKKworI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1JHQl9ZVVY0NDQJKDBVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1lVVjQyMgkJKDJVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX0JBWUVSCQkoM1VMIDw8IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQpCisKKyNkZWZpbmUgTUFYX1ZJREVPX01FTSAxNgorCitzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCQkJdmI7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQJKmZtdDsKKworCS8qIE9uZSBkZXNjcmlwdG90IHBlciBzY2F0dGVybGlzdCAocGVyIGZyYW1lKSAqLworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkJKnR4ZDsKKworCS8qIFdlIGhhdmUgdG8gImJ1aWxkIiBhIHNjYXR0ZXJsaXN0IG91cnNlbHZlcyAtIG9uZSBlbGVtZW50IHBlciBmcmFtZSAqLworCXN0cnVjdCBzY2F0dGVybGlzdAkJCXNnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgLSBpLk1YM3ggY2FtZXJhIChDU0kpIG9iamVjdAorICogQGRldjoJCWNhbWVyYSBkZXZpY2UsIHRvIHdoaWNoIHRoZSBjb2hlcmVudCBidWZmZXIgaXMgYXR0YWNoZWQKKyAqIEBpY2Q6CQljdXJyZW50bHkgYXR0YWNoZWQgY2FtZXJhIHNlbnNvcgorICogQGNsazoJCXBvaW50ZXIgdG8gY2xvY2sKKyAqIEBiYXNlOgkJcmVtYXBwZWQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKiBAcGRhdGE6CQlwbGF0Zm9ybSBkYXRhCisgKiBAcGxhdGZvcm1fZmxhZ3M6CXBsYXRmb3JtIGZsYWdzCisgKiBAbWNsazoJCW1hc3RlciBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqIEBjYXB0dXJlOgkJbGlzdCBvZiBjYXB0dXJlIHZpZGVvYnVmZmVycworICogQGxvY2s6CQlwcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMKKyAqIEBhY3RpdmU6CQlhY3RpdmUgdmlkZW8gYnVmZmVyCisgKiBAaWRtYWNfY2hhbm5lbDoJYXJyYXkgb2YgcG9pbnRlcnMgdG8gSVBVIERNQUMgRE1BIGNoYW5uZWxzCisgKiBAc29jX2hvc3Q6CQllbWJlZGRlZCBzb2NfaG9zdCBvYmplY3QKKyAqLworc3RydWN0IG14M19jYW1lcmFfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCS8qCisJICogaS5NWDN4IGlzIG9ubHkgc3VwcG9zZWQgdG8gaGFuZGxlIG9uZSBjYW1lcmEgb24gaXRzIENhbWVyYSBTZW5zb3IKKwkgKiBJbnRlcmZhY2UuIElmIGFueW9uZSBldmVyIGJ1aWxkcyBoYXJkd2FyZSB0byBlbmFibGUgbW9yZSB0aGFuIG9uZQorCSAqIGNhbWVyYSBfc2ltdWx0YW5lb3VzbHlfLCB0aGV5IHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhpcyBkcml2ZXIgdG9vCisJICovCisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGNsawkJKmNsazsKKworCXZvaWQgX19pb21lbQkJKmJhc2U7CisKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YQkqcGRhdGE7CisKKwl1bnNpZ25lZCBsb25nCQlwbGF0Zm9ybV9mbGFnczsKKwl1bnNpZ25lZCBsb25nCQltY2xrOworCisJc3RydWN0IGxpc3RfaGVhZAljYXB0dXJlOworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBQcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMgKi8KKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmFjdGl2ZTsKKworCS8qIElETUFDIC8gZG1hZW5naW5lIGludGVyZmFjZSAqLworCXN0cnVjdCBpZG1hY19jaGFubmVsCSppZG1hY19jaGFubmVsWzFdOwkvKiBXZSBuZWVkIG9uZSBjaGFubmVsICovCisKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0CXNvY19ob3N0OworfTsKKworc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgeworCXN0cnVjdCBteDNfY2FtZXJhX2RldgkqbXgzX2NhbTsKKwllbnVtIGlwdV9jaGFubmVsCWlkOworfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCk7CisKK3N0YXRpYyB1MzIgY3NpX3JlZ19yZWFkKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzLCBvZmZfdCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG14My0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNzaV9yZWdfd3JpdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDMsIHUzMiB2YWx1ZSwgb2ZmX3QgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgbXgzLT5iYXNlICsgcmVnKTsKK30KKworLyogQ2FsbGVkIGZyb20gdGhlIElQVSBJRE1BQyBJU1IgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1fZG1hX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjID0gdG9fdHhfZGVzYyhhcmcpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGRlc2MtPnR4ZC5jaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbm5lbCA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNoYW5uZWwtPmNsaWVudDsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5kZXYsICJjYWxsYmFjayBjb29raWUgJWQsIGFjdGl2ZSBETUEgMHglMDh4XG4iLAorCQlkZXNjLT50eGQuY29va2llLCBteDNfY2FtLT5hY3RpdmUgPyBzZ19kbWFfYWRkcmVzcygmbXgzX2NhbS0+YWN0aXZlLT5zZykgOiAwKTsKKworCXNwaW5fbG9jaygmbXgzX2NhbS0+bG9jayk7CisJaWYgKG14M19jYW0tPmFjdGl2ZSkgeworCQl2YiA9ICZteDNfY2FtLT5hY3RpdmUtPnZiOworCisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwkJdmItPmZpZWxkX2NvdW50Kys7CisJCXdha2VfdXAoJnZiLT5kb25lKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmbXgzX2NhbS0+Y2FwdHVyZSkpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworCisJCS8qCisJCSAqIHN0b3AgY2FwdHVyZSAtIHdpdGhvdXQgZnVydGhlciBidWZmZXJzIElQVV9DSEFfQlVGMF9SRFkgd2lsbAorCQkgKiBub3QgZ2V0IHVwZGF0ZWQKKwkJICovCisJCXJldHVybjsKKwl9CisKKwlteDNfY2FtLT5hY3RpdmUgPSBsaXN0X2VudHJ5KG14M19jYW0tPmNhcHR1cmUubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciwgdmIucXVldWUpOworCW14M19jYW0tPmFjdGl2ZS0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSAmYnVmLT52YjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCA9IGJ1Zi0+dHhkOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbjsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qCisJICogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubworCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFCisJICovCisJdmlkZW9idWZfd2FpdG9uKHZiLCAwLCAwKTsKKwlpZiAodHhkKSB7CisJCWljaGFuID0gdG9faWRtYWNfY2hhbih0eGQtPmNoYW4pOworCQlhc3luY190eF9hY2sodHhkKTsKKwl9CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJYnVmLT50eGQgPSBOVUxMOworCisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworLyoKKyAqIFZpZGVvYnVmIG9wZXJhdGlvbnMKKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSBfX2J1ZmZlcl9fIChub3QgZGF0YSkgc2l6ZSBhbmQgbnVtYmVyIG9mIGJ1ZmZlcnMuCisgKiBDYWxsZWQgd2l0aCAudmJfbG9jayBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwkvKgorCSAqIGJpdHMtcGVyLXBpeGVsIChkZXB0aCkgYXMgc3BlY2lmaWVkIGluIGNhbWVyYSdzIHBpeGVsIGZvcm1hdCBkb2VzCisJICogbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHdoYXQgdGhlIGNhbWVyYSBpbnRlcmZhY2Ugd3JpdGVzIHRvIFJBTSwgYnV0CisJICogaXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBub3cuCisJICovCisJdW5zaWduZWQgaW50IGJwcCA9IERJVl9ST1VORF9VUChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCwgOCk7CisKKwlpZiAoIW14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJKnNpemUgPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKiBicHA7CisKKwlpZiAoISpjb3VudCkKKwkJKmNvdW50ID0gMzI7CisKKwlpZiAoKnNpemUgKiAqY291bnQgPiBNQVhfVklERU9fTUVNICogMTAyNCAqIDEwMjQpCisJCSpjb3VudCA9IE1BWF9WSURFT19NRU0gKiAxMDI0ICogMTAyNCAvICpzaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciAqYnVmID0KKwkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiKTsKKwkvKiBjdXJyZW50X2ZtdCBfbXVzdF8gYWx3YXlzIGJlIHNldCAqLworCXNpemVfdCBuZXdfc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqCisJCSgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJIHRoaW5rLCBpbiBidWZfcHJlcGFyZSB5b3Ugb25seSBoYXZlIHRvIHByb3RlY3QgZ2xvYmFsIGRhdGEsCisJICogdGhlIGFjdHVhbCBidWZmZXIgaXMgeW91cnMKKwkgKi8KKworCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CisJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKKwkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+ZmllbGQJPSBmaWVsZDsKKwkJaWYgKHZiLT5zdGF0ZSAhPSBWSURFT0JVRl9ORUVEU19JTklUKQorCQkJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJfQorCisJaWYgKHZiLT5iYWRkciAmJiB2Yi0+YnNpemUgPCBuZXdfc2l6ZSkgeworCQkvKiBVc2VyIHByb3ZpZGVkIGJ1ZmZlciwgYnV0IGl0IGlzIHRvbyBzbWFsbCAqLworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmItPnN0YXRlID09IFZJREVPQlVGX05FRURTX0lOSVQpIHsKKwkJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9ICZidWYtPnNnOworCisJCS8qCisJCSAqIFRoZSB0b3RhbCBzaXplIG9mIHZpZGVvLWJ1ZmZlcnMgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCAvIG1hcHBlZC4KKwkJICogKnNpemUgdGhhdCB3ZSBjYWxjdWxhdGVkIGluIHZpZGVvYnVmX3NldHVwIGdldHMgYXNzaWduZWQgdG8KKwkJICogdmItPmJzaXplLCBhbmQgbm93IHdlIHVzZSB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0byBnZXQgdmItPnNpemUuCisJCSAqLworCQl2Yi0+c2l6ZSA9IG5ld19zaXplOworCisJCS8qIFRoaXMgYWN0dWFsbHkgKGFsbG9jYXRlcyBhbmQpIG1hcHMgYnVmZmVycyAqLworCQlyZXQgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQkvKgorCQkgKiBXZSB3aWxsIGhhdmUgdG8gY29uZmlndXJlIHRoZSBJRE1BQyBjaGFubmVsLiBJdCBoYXMgdHdvIHNsb3RzCisJCSAqIGZvciBETUEgYnVmZmVycywgd2Ugc2hhbGwgZW50ZXIgdGhlIGZpcnN0IHR3byBidWZmZXJzIHRoZXJlLAorCQkgKiBhbmQgdGhlbiBzdWJtaXQgbmV3IGJ1ZmZlcnMgaW4gRE1BLXJlYWR5IGludGVycnVwdHMKKwkJICovCisJCXNnX2luaXRfdGFibGUoc2csIDEpOworCQlzZ19kbWFfYWRkcmVzcyhzZykJPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwkJc2dfZG1hX2xlbihzZykJCT0gdmItPnNpemU7CisKKwkJYnVmLT50eGQgPSBpY2hhbi0+ZG1hX2NoYW4uZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZygKKwkJCSZpY2hhbi0+ZG1hX2NoYW4sIHNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQpOworCQlpZiAoIWJ1Zi0+dHhkKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsOworCQl9CisKKwkJYnVmLT50eGQtPmNhbGxiYWNrX3BhcmFtCT0gYnVmLT50eGQ7CisJCWJ1Zi0+dHhkLT5jYWxsYmFjawkJPSBteDNfY2FtX2RtYV9kb25lOworCisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHZxLCBidWYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBpeGVsX2ZtdCBmb3VyY2NfdG9faXB1X3BpeChfX3UzMiBmb3VyY2MpCit7CisJLyogQWRkIG1vcmUgZm9ybWF0cyBhcyBuZWVkIGFyaXNlcyBhbmQgdGVzdCBwb3NzaWJpbGl0aWVzIGFwcGVhci4uLiAqLworCXN3aXRjaCAoZm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCNTY1OworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMjQ7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzMyOgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMzMyOworCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6CisJCXJldHVybiBJUFVfUElYX0ZNVF9ZVlU0MjJQOworCWRlZmF1bHQ6CisJCXJldHVybiBJUFVfUElYX0ZNVF9HRU5FUklDOworCX0KK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQgPSBidWYtPnR4ZDsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSB0b19pZG1hY19jaGFuKHR4ZC0+Y2hhbik7CisJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpkYXRhX2ZtdCA9IGljZC0+Y3VycmVudF9mbXQ7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBvbmUgc2ctZWxlbWVudCAqLworCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gZm91cmNjX3RvX2lwdV9waXgoZGF0YV9mbXQtPmZvdXJjYyk7CisJdmlkZW8tPm91dF93aWR0aAk9IGljZC0+d2lkdGg7CisJdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwl2aWRlby0+b3V0X3N0cmlkZQk9IGljZC0+d2lkdGg7CisKKyNpZmRlZiBERUJVRworCS8qIGhlbHBzIHRvIHNlZSB3aGF0IERNQSBhY3R1YWxseSBoYXMgd3JpdHRlbiAqLworCW1lbXNldCgodm9pZCAqKXZiLT5iYWRkciwgMHhhYSwgdmItPmJzaXplKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJm14M19jYW0tPmNhcHR1cmUpOworCisJaWYgKCFteDNfY2FtLT5hY3RpdmUpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gYnVmOworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJfSBlbHNlIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7CisJZGV2X2RiZygmaWNkLT5kZXYsICJTdWJtaXR0ZWQgY29va2llICVkIERNQSAweCUwOHhcbiIsIGNvb2tpZSwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpKTsKKwlpZiAoY29va2llID49IDApCisJCXJldHVybjsKKworCS8qIFN1Ym1pdCBlcnJvciAqLworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisKKwlpZiAobXgzX2NhbS0+YWN0aXZlID09IGJ1ZikKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiUmVsZWFzZSVzIERNQSAweCUwOHggKHN0YXRlICVkKSwgcXVldWUgJXNlbXB0eVxuIiwKKwkJbXgzX2NhbS0+YWN0aXZlID09IGJ1ZiA/ICIgYWN0aXZlIiA6ICIiLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZyksCisJCSB2Yi0+c3RhdGUsIGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkgPyAiIiA6ICJub3QgIik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKwlpZiAoKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUgfHwgdmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJaWYgKG14M19jYW0tPmFjdGl2ZSA9PSBidWYpCisJCQlteDNfY2FtLT5hY3RpdmUgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIG14M192aWRlb2J1Zl9vcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gbXgzX3ZpZGVvYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IG14M192aWRlb2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IG14M192aWRlb2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBteDNfdmlkZW9idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfaW5pdF92aWRlb2J1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14M192aWRlb2J1Zl9vcHMsIG14M19jYW0tPmRldiwKKwkJCQkgICAgICAgJm14M19jYW0tPmxvY2ssCisJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG14M19jYW1lcmFfYnVmZmVyKSwgaWNkKTsKK30KKworLyogRmlyc3QgcGFydCBvZiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfYWN0aXZhdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXUzMiBjb25mOworCWxvbmcgcmF0ZTsKKworCS8qIFNldCBkZWZhdWx0IHNpemU6IGlwdV9jc2lfc2V0X3dpbmRvd19zaXplKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sICg2NDAgLSAxKSB8ICgoNDgwIC0gMSkgPDwgMTYpLCBDU0lfQUNUX0ZSTV9TSVpFKTsKKwkvKiAuLi5hbmQgcG9zaXRpb24gdG8gMDowOiBpcHVfY3NpX3NldF93aW5kb3dfcG9zKCkgKi8KKwljb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyogV2UgdXNlIG9ubHkgZ2F0ZWQgY2xvY2sgc3luY2hyb25pc2F0aW9uIG1vZGUgc28gZmFyICovCisJY29uZiA9IDAgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX1BSVENMX1NISUZUOworCisJLyogU2V0IGdlbmVyaWMgZGF0YSwgcGxhdGZvcm0tYmlnZ2VzdCBidXMtd2lkdGggKi8KKwljb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKKwkJY29uZiB8PSAzIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKQorCQljb25mIHw9IDIgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCWVsc2UgaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlLyogaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCkqLworCQljb25mIHw9IDAgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9DTEtfU1JDKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX0NMS1NSQ19TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0VYVF9WU1lOQykKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfRVhUX1ZTWU5DX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfRFApCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfUENQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0hTUCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQ7CisKKwkvKiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9TRU5TX0NPTkYpOworCisJY2xrX2VuYWJsZShteDNfY2FtLT5jbGspOworCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShteDNfY2FtLT5jbGssIG14M19jYW0tPm1jbGspOworCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOworCWlmIChyYXRlKQorCQljbGtfc2V0X3JhdGUobXgzX2NhbS0+Y2xrLCByYXRlKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLworc3RhdGljIGludCBteDNfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCWludCByZXQ7CisKKwlpZiAobXgzX2NhbS0+aWNkKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlYnVzeTsKKwl9CisKKwlteDNfY2FtZXJhX2FjdGl2YXRlKG14M19jYW0sIGljZCk7CisJcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKKwlpZiAocmV0IDwgMCkgeworCQljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCQlnb3RvIGVpbml0OworCX0KKworCW14M19jYW0tPmljZCA9IGljZDsKKworZWluaXQ6CitlYnVzeToKKwlpZiAoIXJldCkKKwkJZGV2X2luZm8oJmljZC0+ZGV2LCAiTVgzIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkJIGljZC0+ZGV2bnVtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJQlVHX09OKGljZCAhPSBteDNfY2FtLT5pY2QpOworCisJaWYgKCppY2hhbikgeworCQlkbWFfcmVsZWFzZV9jaGFubmVsKCYoKmljaGFuKS0+ZG1hX2NoYW4pOworCQkqaWNoYW4gPSBOVUxMOworCX0KKworCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CisKKwljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCisJbXgzX2NhbS0+aWNkID0gTlVMTDsKKworCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMyBDYW1lcmEgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOworfQorCitzdGF0aWMgYm9vbCBjaGFubmVsX2NoYW5nZV9yZXF1ZXN0ZWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJLyogRG8gYnVmZmVycyBoYXZlIHRvIGJlIHJlLWFsbG9jYXRlZCBvciBjaGFubmVsIHJlLWNvbmZpZ3VyZWQ/ICovCisJcmV0dXJuIGljaGFuICYmIHJlY3QtPndpZHRoICogcmVjdC0+aGVpZ2h0ID4gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0OworfQorCitzdGF0aWMgaW50IHRlc3RfcGxhdGZvcm1fcGFyYW0oc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYnVzd2lkdGgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCS8qCisJICogUGxhdGZvcm0gc3BlY2lmaWVkIHN5bmNocm9uaXphdGlvbiBhbmQgcGl4ZWwgY2xvY2sgcG9sYXJpdGllcyBhcmUKKwkgKiBvbmx5IGEgcmVjb21tZW5kYXRpb24gYW5kIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHByb2JpbmcuIE1YM3gKKwkgKiBjYW1lcmEgaW50ZXJmYWNlIG9ubHkgd29ya3MgaW4gbWFzdGVyIG1vZGUsIGkuZS4sIHVzZXMgSFNZTkMgYW5kCisJICogVlNZTkMgc2lnbmFscyBmcm9tIHRoZSBzZW5zb3IKKwkgKi8KKwkqZmxhZ3MgPSBTT0NBTV9NQVNURVIgfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0xPVzsKKworCS8qIElmIHJlcXVlc3RlZCBkYXRhIHdpZHRoIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sIHVzZSBpdCBvciBhbnkKKwkgKiBwb3NzaWJsZSBsb3dlciB2YWx1ZSAtIGkuTVgzMSBpcyBzbWFydCBlbm91Z2ggdG8gc2NoaWZ0IGJpdHMgKi8KKwlzd2l0Y2ggKGJ1c3dpZHRoKSB7CisJY2FzZSAxNToKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNSB8IFNPQ0FNX0RBVEFXSURUSF8xMCB8CisJCQlTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF80OworCQlicmVhazsKKwljYXNlIDEwOgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwIHwgU09DQU1fREFUQVdJRFRIXzggfAorCQkJU09DQU1fREFUQVdJRFRIXzQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8obXgzX2NhbS0+ZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoICVkXG4iLCBidXN3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IGRlcHRoKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGRlcHRoLCAmYnVzX2ZsYWdzKTsKKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLCBkZXB0aCwgcmV0KTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJcmV0ID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZpY2QtPmRldiwgIkZsYWdzIGluY29tcGF0aWJsZTogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQkgY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgY2hhbl9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgKnJxID0gYXJnOworCXN0cnVjdCBteDNfY2FtZXJhX3BkYXRhICpwZGF0YTsKKworCWlmICghcnEpCisJCXJldHVybiBmYWxzZTsKKworCXBkYXRhID0gcnEtPm14M19jYW0tPmRldi0+cGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgorCQlwZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG14M19jYW1lcmFfZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUJCT0gIkJheWVyIChzUkdCKSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJfSwgeworCQkubmFtZQkJPSAiTW9ub2Nocm9tZSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCX0sCit9OworCitzdGF0aWMgYm9vbCBidXN3aWR0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJc3dpdGNoIChkZXB0aCkgeworCWNhc2UgNDoKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCk7CisJY2FzZSA4OgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KTsKKwljYXNlIDEwOgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCk7CisJY2FzZSAxNToKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKKwkJCQkgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaW50IGZvcm1hdHMgPSAwLCBidXN3aWR0aCwgcmV0OworCisJYnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKworCWlmICghYnVzd2lkdGhfc3VwcG9ydGVkKGljaSwgYnVzd2lkdGgpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShpY2QsIGJ1c3dpZHRoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwkJZ290byBwYXNzdGhyb3VnaDsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzFdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwlkZWZhdWx0OgorcGFzc3Rocm91Z2g6CisJCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKKwkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOworCQkJeGxhdGUrKzsKKwkJCWRldl9kYmcoJmljaS0+ZGV2LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGZvcm1hdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9nZW9tZXRyeShzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0sCisJCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwl1MzIgY3RybCwgd2lkdGhfZmllbGQsIGhlaWdodF9maWVsZDsKKworCS8qIFNldHVwIGZyYW1lIHNpemUgLSB0aGlzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uLXRoZS1mbHkuLi4gKi8KKwl3aWR0aF9maWVsZCA9IHJlY3QtPndpZHRoIC0gMTsKKwloZWlnaHRfZmllbGQgPSByZWN0LT5oZWlnaHQgLSAxOworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX1NFTlNfRlJNX1NJWkUpOworCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCB3aWR0aF9maWVsZCA8PCAxNiwgQ1NJX0ZMQVNIX1NUUk9CRV8xKTsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIChoZWlnaHRfZmllbGQgPDwgMTYpIHwgMHgyMiwgQ1NJX0ZMQVNIX1NUUk9CRV8yKTsKKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX0FDVF9GUk1fU0laRSk7CisKKwkvKiAuLi5hbmQgcG9zaXRpb24gKi8KKwljdHJsID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwkvKiBTZW5zb3IgZG9lcyB0aGUgY3JvcHBpbmcgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGN0cmwgfCAwIHwgKDAgPDwgOCksIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGZyZWUgcmVzb3VyY2VzIGhlcmUgaWYgd2UgZmFpbCwgd2UnbGwgc2VlIGlmIHdlIG5lZWQgdG8KKwkgKiBkbyB0aGlzIG5leHQgdGltZSB3ZSBhcmUgY2FsbGVkCisJICovCit9CisKK3N0YXRpYyBpbnQgYWNxdWlyZV9kbWFfY2hhbm5lbChzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0pCit7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCS8qIFdlIGhhdmUgdG8gdXNlIElETUFDX0lDXzcgZm9yIEJheWVyIC8gZ2VuZXJpYyBkYXRhICovCisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgcnEgPSB7Lm14M19jYW0gPSBteDNfY2FtLAorCQkJCSAgICAgIC5pZCA9IElETUFDX0lDXzd9OworCisJaWYgKCppY2hhbikgeworCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgKl92YjsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmKCppY2hhbiktPmRtYV9jaGFuKTsKKwkJKmljaGFuID0gTlVMTDsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZiLCBfdmIsICZteDNfY2FtLT5jYXB0dXJlLCBxdWV1ZSkgeworCQkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQkJd2FrZV91cCgmdmItPmRvbmUpOworCQl9CisJfQorCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCSppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJKCppY2hhbiktPmNsaWVudCA9IG14M19jYW07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJLyoKKwkgKiBXZSBub3cga25vdyBwaXhlbCBmb3JtYXRzIGFuZCBjYW4gZGVjaWRlIHVwb24gRE1BLWNoYW5uZWwocykKKwkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKKwkgKi8KKwlpZiAoY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKGljZCwgcmVjdCkpIHsKKwkJaW50IHJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgcmVjdCk7CisKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJfTsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1pZ2h0IGhhdmUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIGludGVyZmFjZSBpbml0aWFsaXNhdGlvbiBsaWtlIGluCisJICogaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpIGluIG14Y192NGwyX3NfcGFyYW0oKS4gQWxzbyBjb25zaWRlcgorCSAqIG14Y192NGwyX3NfZm10KCkKKwkgKi8KKworCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCAmcmVjdCk7CisKKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIGYpOworCWlmICghcmV0KSB7CisJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CisJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKHBpeGZtdCAmJiAheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbGltaXQgdG8gTVgzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworCWlmIChwaXgtPmhlaWdodCA+IDQwOTYpCisJCXBpeC0+aGVpZ2h0ID0gNDA5NjsKKwlpZiAocGl4LT53aWR0aCA+IDQwOTYpCisJCXBpeC0+d2lkdGggPSA0MDk2OworCisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKKwkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKworCS8qIGNhbWVyYSBoYXMgdG8gc2VlIGl0cyBmb3JtYXQsIGJ1dCB0aGUgdXNlciB0aGUgb3JpZ2luYWwgb25lICovCisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLworCXJldCA9IGljZC0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5ob3N0X2ZtdC0+Zm91cmNjOworCisJZmllbGQgPSBwaXgtPmZpZWxkOworCisJaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfcmVxYnVmcyhzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBteDNfY2FtZXJhX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmaWNmLT52Yl92aWRxLCBwdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9xdWVyeWNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2ksCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCS8qIGNhcC0+bmFtZSBpcyBzZXQgYnkgdGhlIGZpcmVuZGx5IGNhbGxlcjotPiAqLworCXN0cmxjcHkoY2FwLT5jYXJkLCAiaS5NWDN4IENhbWVyYSIsIHNpemVvZihjYXAtPmNhcmQpKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAyLCAyKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOworCXUzMiBkdywgc2Vuc19jb25mOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGljZC0+YnVzd2lkdGgsICZidXNfZmxhZ3MpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLAorCQlpY2QtPmJ1c3dpZHRoLCByZXQpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CisKKwljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKwlpZiAoIWNvbW1vbl9mbGFncykgeworCQlkZXZfZGJnKCZpY2ktPmRldiwgIm5vIGNvbW1vbiBmbGFnczogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQljYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE1ha2UgY2hvaWNlcywgYmFzZWQgb24gcGxhdGZvcm0gcHJlZmVyZW5jZXMgKi8KKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIKSAmJgorCSAgICAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9IU1ApCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQV9BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9EQVRBX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKSkgeworCQlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1BDUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfUklTSU5HOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkc7CisJfQorCisJLyogTWFrZSB0aGUgY2FtZXJhIHdvcmsgaW4gd2lkZXN0IGNvbW1vbiBtb2RlLCB3ZSdsbCB0YWtlIGNhcmUgb2YKKwkgKiB0aGUgcmVzdCAqLworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTUpCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xNTsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xMDsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKKwkJY29tbW9uX2ZsYWdzID0gKGNvbW1vbl9mbGFncyAmIH5TT0NBTV9EQVRBV0lEVEhfTUFTSykgfAorCQkJU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CisJCQlTT0NBTV9EQVRBV0lEVEhfNDsKKworCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogU28gZmFyIG9ubHkgZ2F0ZWQgY2xvY2sgbW9kZSBpcyBzdXBwb3J0ZWQuIEFkZCBhIGxpbmUKKwkgKgkoMyA8PCBDU0lfU0VOU19DT05GX1NFTlNfUFJUQ0xfU0hJRlQpIHwKKwkgKiBiZWxvdyBhbmQgc2VsZWN0IHRoZSByZXF1aXJlZCBtb2RlIHdoZW4gc3VwcG9ydGluZyBvdGhlcgorCSAqIHN5bmNocm9uaXNhdGlvbiBwcm90b2NvbHMuCisJICovCisJc2Vuc19jb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9TRU5TX0NPTkYpICYKKwkJfigoMSA8PCBDU0lfU0VOU19DT05GX1ZTWU5DX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUKSB8CisJCSAgKDEgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfUElYX0NMS19QT0xfU0hJRlQpIHwKKwkJICAoMyA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKSB8CisJCSAgKDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUKSk7CisKKwkvKiBUT0RPOiBTdXBwb3J0IFJHQiBhbmQgWVVWIGZvcm1hdHMgKi8KKworCS8qIFRoaXMgaGFzIGJlZW4gc2V0IGluIG14M19jYW1lcmFfYWN0aXZhdGUoKSwgYnV0IHdlIGNsZWFyIGl0IGFib3ZlICovCisJc2Vuc19jb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQ7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfVlNZTkNfUE9MX1NISUZUOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9QT0xfU0hJRlQ7CisKKwkvKiBKdXN0IGRvIHdoYXQgd2UncmUgYXNrZWQgdG8gZG8gKi8KKwlzd2l0Y2ggKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgpIHsKKwljYXNlIDQ6CisJCWR3ID0gMCA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZHcgPSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZHcgPSAyIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgMTUgbm93LCBkZWZhdWx0IGlzIGp1c3QgdG8gc2lsZW5jZQorCQkgKiBjb21waWxlciB3YXJuaW5ncworCQkgKi8KKwljYXNlIDE1OgorCQlkdyA9IDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCX0KKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgc2Vuc19jb25mIHwgZHcsIENTSV9TRU5TX0NPTkYpOworCisJZGV2X2RiZygmaWNpLT5kZXYsICJTZXQgU0VOU19DT05GIHRvICV4XG4iLCBzZW5zX2NvbmYgfCBkdyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIG14M19zb2NfY2FtZXJhX2hvc3Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYWRkCQk9IG14M19jYW1lcmFfYWRkX2RldmljZSwKKwkucmVtb3ZlCQk9IG14M19jYW1lcmFfcmVtb3ZlX2RldmljZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IG14M19jYW1lcmFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG14M19jYW1lcmFfcmVzdW1lLAorI2VuZGlmCisJLnNldF9jcm9wCT0gbXgzX2NhbWVyYV9zZXRfY3JvcCwKKwkuc2V0X2ZtdAk9IG14M19jYW1lcmFfc2V0X2ZtdCwKKwkudHJ5X2ZtdAk9IG14M19jYW1lcmFfdHJ5X2ZtdCwKKwkuZ2V0X2Zvcm1hdHMJPSBteDNfY2FtZXJhX2dldF9mb3JtYXRzLAorCS5pbml0X3ZpZGVvYnVmCT0gbXgzX2NhbWVyYV9pbml0X3ZpZGVvYnVmLAorCS5yZXFidWZzCT0gbXgzX2NhbWVyYV9yZXFidWZzLAorCS5wb2xsCQk9IG14M19jYW1lcmFfcG9sbCwKKwkucXVlcnljYXAJPSBteDNfY2FtZXJhX3F1ZXJ5Y2FwLAorCS5zZXRfYnVzX3BhcmFtCT0gbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICpzb2NfaG9zdDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlZ2V0cmVzOworCX0KKworCW14M19jYW0gPSB2bWFsbG9jKHNpemVvZigqbXgzX2NhbSkpOworCWlmICghbXgzX2NhbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbXgzIGNhbWVyYSBvYmplY3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVhbGxvYzsKKwl9CisJbWVtc2V0KG14M19jYW0sIDAsIHNpemVvZigqbXgzX2NhbSkpOworCisJbXgzX2NhbS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY3NpX2NsayIpOworCWlmIChJU19FUlIobXgzX2NhbS0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKG14M19jYW0tPmNsayk7CisJCWdvdG8gZWNsa2dldDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbXgzX2NhbSk7CisKKwlteDNfY2FtLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzID0gbXgzX2NhbS0+cGRhdGEtPmZsYWdzOworCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgKE1YM19DQU1FUkFfREFUQVdJRFRIXzQgfAorCQkJTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzEwIHwKKwkJCU1YM19DQU1FUkFfREFUQVdJRFRIXzE1KSkpIHsKKwkJLyogUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgZGF0YSB3aWR0aHMuIFRoaXMgaXMgYmFkLgorCQkgKiBXYXJuIGFuZCB1c2UgYSBkZWZhdWx0LiAqLworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiV0FSTklORyEgUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgIgorCQkJICJkYXRhIHdpZHRocywgdXNpbmcgZGVmYXVsdCA4IGJpdFxuIik7CisJCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzIHw9IE1YM19DQU1FUkFfREFUQVdJRFRIXzg7CisJfQorCisJbXgzX2NhbS0+bWNsayA9IG14M19jYW0tPnBkYXRhLT5tY2xrXzEwa2h6ICogMTAwMDA7CisJaWYgKCFteDNfY2FtLT5tY2xrKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIm1jbGtfMTBraHogPT0gMCEgUGxlYXNlLCBmaXggeW91ciBwbGF0Zm9ybSBkYXRhLiAiCisJCQkgIlVzaW5nIGRlZmF1bHQgMjBNSHpcbiIpOworCQlteDNfY2FtLT5tY2xrID0gMjAwMDAwMDA7CisJfQorCisJLyogbGlzdCBvZiB2aWRlby1idWZmZXJzICovCisJSU5JVF9MSVNUX0hFQUQoJm14M19jYW0tPmNhcHR1cmUpOworCXNwaW5fbG9ja19pbml0KCZteDNfY2FtLT5sb2NrKTsKKworCWJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghYmFzZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVpb3JlbWFwOworCX0KKworCW14M19jYW0tPmJhc2UJPSBiYXNlOworCW14M19jYW0tPmRldgk9ICZwZGV2LT5kZXY7CisKKwlzb2NfaG9zdAkJPSAmbXgzX2NhbS0+c29jX2hvc3Q7CisJc29jX2hvc3QtPmRydl9uYW1lCT0gTVgzX0NBTV9EUlZfTkFNRTsKKwlzb2NfaG9zdC0+b3BzCQk9ICZteDNfc29jX2NhbWVyYV9ob3N0X29wczsKKwlzb2NfaG9zdC0+cHJpdgkJPSBteDNfY2FtOworCXNvY19ob3N0LT5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NfaG9zdC0+bnIJCT0gcGRldi0+aWQ7CisJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHNvY19ob3N0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVjYW1ob3N0cmVnOworCisJLyogSURNQUMgaW50ZXJmYWNlICovCisJZG1hZW5naW5lX2dldCgpOworCisJcmV0dXJuIDA7CisKK2VjYW1ob3N0cmVnOgorCWlvdW5tYXAoYmFzZSk7CitlaW9yZW1hcDoKKwljbGtfcHV0KG14M19jYW0tPmNsayk7CitlY2xrZ2V0OgorCXZmcmVlKG14M19jYW0pOworZWFsbG9jOgorZWdldHJlczoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBteDNfY2FtZXJhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2xrX3B1dChteDNfY2FtLT5jbGspOworCisJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoJm14M19jYW0tPnNvY19ob3N0KTsKKworCWlvdW5tYXAobXgzX2NhbS0+YmFzZSk7CisKKwkvKgorCSAqIFRoZSBjaGFubmVsIGhhcyBlaXRoZXIgbm90IGJlZW4gYWxsb2NhdGVkLAorCSAqIG9yIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQKKwkgKi8KKwlpZiAoV0FSTl9PTihteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXS0+ZG1hX2NoYW4pOworCisJdmZyZWUobXgzX2NhbSk7CisKKwlkbWFlbmdpbmVfcHV0KCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaS5NWDN4IENhbWVyYSBkcml2ZXIgdW5sb2FkZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14M19jYW1lcmFfZHJpdmVyID0geworCS5kcml2ZXIgCT0geworCQkubmFtZQk9IE1YM19DQU1fRFJWX05BTUUsCisJfSwKKwkucHJvYmUJCT0gbXgzX2NhbWVyYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG14M19jYW1lcmFfcmVtb3ZlKSwKK307CisKKworc3RhdGljIGludCBfX2RldmluaXQgbXgzX2NhbWVyYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzX2NhbWVyYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXgzX2NhbWVyYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14M19jYW1lcmFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXgzX2NhbWVyYV9pbml0KTsKK21vZHVsZV9leGl0KG14M19jYW1lcmFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWDN4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8bGdAZGVueC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGUzY2JlMTQuLjg0YWVjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMjUsMTYgKzI1LDIwIEBACiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CiAKICNpbmNsdWRlICJteGIuaCIKICNpbmNsdWRlICJ0ZWE2NDE1Yy5oIgogI2luY2x1ZGUgInRlYTY0MjAuaCIKLSNpbmNsdWRlICJ0ZGE5ODQwLmgiCiAKLSNkZWZpbmUgSTJDX1NBQTcxMTEgMHgyNAorI2RlZmluZQlJMkNfU0FBNTI0NkEgIDB4MTEKKyNkZWZpbmUgSTJDX1NBQTcxMTFBICAweDI0CisjZGVmaW5lCUkyQ19UREE5ODQwICAgMHg0MgorI2RlZmluZQlJMkNfVEVBNjQxNUMgIDB4NDMKKyNkZWZpbmUJSTJDX1RFQTY0MjBfMSAweDRjCisjZGVmaW5lCUkyQ19URUE2NDIwXzIgMHg0ZAorI2RlZmluZQlJMkNfVFVORVIgICAgIDB4NjAKIAogI2RlZmluZSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCkKIApAQCAtNzksNTcgKzgzLDM1IEBACiBzdGF0aWMgaW50IHZpZGVvX2F1ZGlvX2Nvbm5lY3RbTVhCX0lOUFVUU10gPQogCXsgMCwgMSwgMywgMyB9OwogCi0vKiB0aGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQotKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dCAqLwotc3RhdGljIHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCBURUE2NDIwX2NkW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MSwxLDB9LHsxLDEsMH19LAkvKiBUdW5lciAqLwotCQl7ezUsMSwwfSx7NiwxLDB9fSwJLyogQVVYIDEgKi8KLQkJe3s0LDEsMH0sezYsMSwwfX0sCS8qIEFVWCAyICovCi0JCXt7MywxLDB9LHs2LDEsMH19LAkvKiBBVVggMyAqLwotCQl7ezEsMSwwfSx7MywxLDB9fSwJLyogUmFkaW8gKi8KLQkJe3sxLDEsMH0sezIsMSwwfX0sCS8qIENELVJvbSAqLwotCQl7ezYsMSwwfSx7NiwxLDB9fQkvKiBNdXRlICovCi0JCX07CisvKiBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQorICAgKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dC4gTm90ZSB0aGF0IGdhaW4gaXMgc2V0IHRvIDAgaW4gdGhpcyB0YWJsZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9yb3V0aW5nIFRFQTY0MjBfY2RbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAxLCAxIH0sIHsgMSwgMSB9IH0sCS8qIFR1bmVyICovCisJeyB7IDUsIDEgfSwgeyA2LCAxIH0gfSwJLyogQVVYIDEgKi8KKwl7IHsgNCwgMSB9LCB7IDYsIDEgfSB9LAkvKiBBVVggMiAqLworCXsgeyAzLCAxIH0sIHsgNiwgMSB9IH0sCS8qIEFVWCAzICovCisJeyB7IDEsIDEgfSwgeyAzLCAxIH0gfSwJLyogUmFkaW8gKi8KKwl7IHsgMSwgMSB9LCB7IDIsIDEgfSB9LAkvKiBDRC1Sb20gKi8KKwl7IHsgNiwgMSB9LCB7IDYsIDEgfSB9CS8qIE11dGUgKi8KK307CiAKLS8qIHRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCi0oc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggVEVBNjQyMF9saW5lW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MiwzLDB9LHsxLDIsMH19LAotCQl7ezUsMywwfSx7NiwyLDB9fSwKLQkJe3s0LDMsMH0sezYsMiwwfX0sCi0JCXt7MywzLDB9LHs2LDIsMH19LAotCQl7ezIsMywwfSx7MywyLDB9fSwKLQkJe3syLDMsMH0sezIsMiwwfX0sCi0JCXt7NiwzLDB9LHs2LDIsMH19CS8qIE11dGUgKi8KLQkJfTsKKy8qIFRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCisgICAoc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQuIE5vdGUgdGhhdCBnYWluIGlzIHNldCB0byAwIGluIHRoaXMgdGFibGUuICovCitzdGF0aWMgc3RydWN0IHY0bDJfcm91dGluZyBURUE2NDIwX2xpbmVbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAyLCAzIH0sIHsgMSwgMiB9IH0sCisJeyB7IDUsIDMgfSwgeyA2LCAyIH0gfSwKKwl7IHsgNCwgMyB9LCB7IDYsIDIgfSB9LAorCXsgeyAzLCAzIH0sIHsgNiwgMiB9IH0sCisJeyB7IDIsIDMgfSwgeyAzLCAyIH0gfSwKKwl7IHsgMiwgMyB9LCB7IDIsIDIgfSB9LAorCXsgeyA2LCAzIH0sIHsgNiwgMiB9IH0JLyogTXV0ZSAqLworfTsKIAogI2RlZmluZSBNQVhDT05UUk9MUwkxCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIG14Yl9jb250cm9sc1tdID0gewogCXsgVjRMMl9DSURfQVVESU9fTVVURSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIk11dGUiLCAwLCAxLCAxLCAwLCAwIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19RVUVSWUNUUkwsIAlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfR19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19GUkVRVUVOQ1ksIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0RCR19HX1JFR0lTVEVSLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19EQkdfU19SRUdJU1RFUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBNWEJfU19BVURJT19DRCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCi0JeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgbXhiCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwpAQCAtMTM3LDEyICsxMTksMTIgQEAKIAogCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKIAotCXN0cnVjdCBpMmNfY2xpZW50CSpzYWE3MTExYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGRhOTg0MDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQxNWM7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnR1bmVyOwotCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDIwXzE7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MjBfMjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnNhYTcxMTFhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdGRhOTg0MDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnRlYTY0MTVjOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzE7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzI7CiAKIAlpbnQJY3VyX21vZGU7CS8qIGN1cnJlbnQgYXVkaW8gbW9kZSAobW9ubywgc3RlcmVvLCAuLi4pICovCiAJaW50CWN1cl9pbnB1dDsJLyogY3VycmVudCBpbnB1dCAqLwpAQCAtMTUwLDg0ICsxMzIsNTEgQEAKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kJY3VyX2ZyZXE7CS8qIGN1cnJlbnQgZnJlcXVlbmN5IHRoZSB0dW5lciBpcyB0dW5lZCB0byAqLwogfTsKIAorI2RlZmluZSBzYWE3MTExYV9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT5zYWE3MTExYSwgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0ZWE2NDIwXzFfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+dGVhNjQyMF8xLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MjBfMl9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZWE2NDIwXzIsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgdGRhOTg0MF9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZGE5ODQwLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MTVjX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnRlYTY0MTVjLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHR1bmVyX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnR1bmVyLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uOwogCi1zdGF0aWMgaW50IG14Yl9jaGVja19jbGllbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbXhiX3Byb2JlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQogewotCXN0cnVjdCBteGIgKm14YiA9IGRhdGE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7Ci0KLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoSTJDX0FERFJfVEVBNjQyMF8xID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT50ZWE2NDIwXzEgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQyMF8yID0gY2xpZW50OwotCWlmIChJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQxNWMgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1REQTk4NDAgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnRkYTk4NDAgPSBjbGllbnQ7Ci0JaWYgKEkyQ19TQUE3MTExID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT5zYWE3MTExYSA9IGNsaWVudDsKLQlpZiAoMHg2MCA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dHVuZXIgPSBjbGllbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteGJfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCi17Ci0Jc3RydWN0IG14YiogbXhiID0gTlVMTDsKLQlpbnQgcmVzdWx0OwotCi0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14Yjogc2FhNzExMSBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0ZWE2NDIwIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHRlYTY0MjAgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQxNWMiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14YjogdGVhNjQxNWMgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGRhOTg0MCIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0ZGE5ODQwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHR1bmVyIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc3RydWN0IG14YiAqbXhiID0gTlVMTDsKIAogCW14YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGIpLCBHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSBteGIgKSB7CisJaWYgKG14YiA9PSBOVUxMKSB7CiAJCURFQl9EKCgibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlteGItPmkyY19hZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlcikgewotCQkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCX07Ci0KIAlzbnByaW50ZihteGItPmkyY19hZGFwdGVyLm5hbWUsIHNpemVvZihteGItPmkyY19hZGFwdGVyLm5hbWUpLCAibXhiJWQiLCBteGJfbnVtKTsKIAogCXNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShkZXYsICZteGItPmkyY19hZGFwdGVyLCBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwKTsKLQlpZihpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgeworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgewogCQlERUJfUygoImNhbm5vdCByZWdpc3RlciBpMmMtZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJa2ZyZWUobXhiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JLyogbG9vcCB0aHJvdWdoIGFsbCBpMmMtZGV2aWNlcyBvbiB0aGUgYnVzIGFuZCBsb29rIHdobyBpcyB0aGVyZSAqLwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmbXhiLT5pMmNfYWRhcHRlci5kZXYsIG14YiwgbXhiX2NoZWNrX2NsaWVudHMpOworCW14Yi0+c2FhNzExMWEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNzExNSIsICJzYWE3MTExIiwgSTJDX1NBQTcxMTFBKTsKKwlteGItPnRlYTY0MjBfMSA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8xKTsKKwlteGItPnRlYTY0MjBfMiA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8yKTsKKwlteGItPnRlYTY0MTVjID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInRlYTY0MTVjIiwgInRlYTY0MTVjIiwgSTJDX1RFQTY0MTVDKTsKKwlteGItPnRkYTk4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidGRhOTg0MCIsICJ0ZGE5ODQwIiwgSTJDX1REQTk4NDApOworCW14Yi0+dHVuZXIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidHVuZXIiLCAidHVuZXIiLCBJMkNfVFVORVIpOworCWlmICh2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNTI0NmEiLCAic2FhNTI0NmEiLCBJMkNfU0FBNTI0NkEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm14YjogZm91bmQgdGVsZXRleHQgZGVjb2RlclxuIik7CisJfQogCiAJLyogY2hlY2sgaWYgYWxsIGRldmljZXMgYXJlIHByZXNlbnQgKi8KIAlpZiAoIW14Yi0+dGVhNjQyMF8xIHx8ICFteGItPnRlYTY0MjBfMiB8fCAhbXhiLT50ZWE2NDE1YyB8fApAQCAtMzE1LDQ3ICsyNjQsNDUgQEAKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJaW50IGkgPSAwLCBlcnIgPSAwOwotCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggdm07CiAKIAkvKiBzZWxlY3QgdmlkZW8gbW9kZSBpbiBzYWE3MTExYSAqLwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfU19TVEQsICZzdGQpOworCXNhYTcxMTFhX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7CiAJcm91dGUuaW5wdXQgPSBTQUE3MTE1X0NPTVBPU0lURTA7CiAJcm91dGUub3V0cHV0ID0gU0FBNzExMV9GTVRfQ0NJUiB8IFNBQTcxMTFfVkJJX0JZUEFTUzsKLQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiBzZWxlY3QgYSB0dW5lciB0eXBlICovCiAJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOwogCXR1bl9zZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKIAl0dW5fc2V0dXAudHlwZSA9IFRVTkVSX1BISUxJUFNfUEFMOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAkvKiB0dW5lIGluIHNvbWUgZnJlcXVlbmN5IG9uIHR1bmVyICovCiAJbXhiLT5jdXJfZnJlcS50dW5lciA9IDA7CiAJbXhiLT5jdXJfZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJbXhiLT5jdXJfZnJlcS5mcmVxdWVuY3kgPSBmcmVxOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19GUkVRVUVOQ1ksCi0JCQkJCSZteGItPmN1cl9mcmVxKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfZnJlcXVlbmN5LCAmbXhiLT5jdXJfZnJlcSk7CiAKIAkvKiBzZXQgYSBkZWZhdWx0IHZpZGVvIHN0YW5kYXJkICovCi0JbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAogCS8qIG11dGUgYXVkaW8gb24gdGVhNjQyMHMgKi8KLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMV0pOwotCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzFdKTsKKwl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMF0pOworCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMV0pOwogCi0JLyogc3dpdGNoIHRvIHR1bmVyLWNoYW5uZWwgb24gdGVhNjQxNWMqLwotCXZtLm91dCA9IDE3OwotCXZtLmluICA9IDM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwkvKiBzd2l0Y2ggdG8gdHVuZXItY2hhbm5lbCBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxNzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyovCi0Jdm0uaW4gID0gMzsKLQl2bS5vdXQgPSAxMzsKLQlteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pOworCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxMzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCS8qIHRoZSByZXN0IGZvciBteGIgKi8KIAlteGItPmN1cl9pbnB1dCA9IDA7CkBAIC00MjQsNiArMzcxLDM0MyBAQAogfQogKi8KIAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSBxYy0+aWQpIHsKKwkJCSpxYyA9IG14Yl9jb250cm9sc1tpXTsKKwkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCXJldHVybiBkZXYtPmV4dF92dl9kYXRhLT5jb3JlX29wcy0+dmlkaW9jX2dfY3RybChmaWxlLCBmaCwgdmMpOworCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7CisJCURFQl9EKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7CisJCXJldHVybiAwOworCX0KKworCURFQl9FRSgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2Nfc19jdHJsKGZpbGUsIGZoLCB2Yyk7CisKKwlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKKwkJaWYgKCF2Yy0+dmFsdWUpIHsKKwkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCisJCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMV0pOworCQl9IGVsc2UgeworCQkJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLAorCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJCX0KKwkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IE1YQl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwkqaSA9IG14Yi0+Y3VyX2lucHV0OworCisJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCWludCBpID0gMDsKKworCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlteGItPmN1cl9pbnB1dCA9IGlucHV0OworCisJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAorCQkJaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zeW5jKTsKKworCS8qIHByZXBhcmUgc3dpdGNoaW5nIG9mIHRlYTY0MTVjIGFuZCBzYWE3MTExYTsKKwkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLworCXN3aXRjaCAoaW5wdXQpIHsKKwljYXNlIFRVTkVSOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDM7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzFcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJLyogY29ubmVjdCB0dW5lci1vdXRwdXQgYWx3YXlzIHRvIG11bHRpY2FibGUgKi8KKwkJcm91dGUuaW5wdXQgPSAzOworCQlyb3V0ZS5vdXRwdXQgPSAxMzsKKwkJYnJlYWs7CisJY2FzZSBBVVgzX1lDOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4M195YyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgzOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgxOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDE7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCQlicmVhazsKKwl9CisKKwkvKiBzd2l0Y2ggdmlkZW8gaW4gdGVhNjQxNWMgb25seSBpZiBuZWNlc3NhcnkgKi8KKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBUVU5FUjoKKwljYXNlIEFVWDE6CisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCisJcm91dGUuaW5wdXQgPSBpOworCXJvdXRlLm91dHB1dCA9IDA7CisJaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpKQorCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOworCisJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoMCA9PSBteGItPmN1cl9tdXRlKSB7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVsxXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlpZiAodC0+aW5kZXgpIHsKKwkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlERUJfRUUoKCJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KSk7CisKKwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJc3RybGNweSh0LT5uYW1lLCAiVFYgVHVuZXIiLCBzaXplb2YodC0+bmFtZSkpOworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCXQtPmF1ZG1vZGUgPSBteGItPmN1cl9tb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmICh0LT5pbmRleCkgeworCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW14Yi0+Y3VyX21vZGUgPSB0LT5hdWRtb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX0dfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLAorCQkJCQlteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqZiA9IG14Yi0+Y3VyX2ZyZXE7CisKKwlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisKKwlpZiAoZi0+dHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX1NfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLCBteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlteGItPmN1cl9mcmVxID0gKmY7CisJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisKKwkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJm14Yi0+Y3VyX2ZyZXEpOworCisJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJdnYtPnZiaV9maWVsZGNvdW50ID0gMDsKKwlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7CisJCURFQl9EKCgiVklESU9DX0dfQVVESU8gJWQgb3V0IG9mIHJhbmdlLlxuIiwgYS0+aW5kZXgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX0dfQVVESU8gJWQuXG4iLCBhLT5pbmRleCkpOworCW1lbWNweShhLCAmbXhiX2F1ZGlvc1t2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV0sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworfQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHZpZGlvY19kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNWEJfU19BVURJT19DRDoKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIiwgaSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlERUJfRUUoKCJNWEJfU19BVURJT19DRDogaTolZC5cbiIsIGkpKTsKKworCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2NkW2ldWzBdKTsKKwkJdGVhNjQyMF8yX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9jZFtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgTVhCX1NfQVVESU9fTElORToKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCURFQl9FRSgoIk1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisvKgorCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7CisqLworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiAvKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwpAQCAtNDM3LDYgKzcyMSwyMyBAQAogCSAgIGFscmVhZHkgZGlkIHRoaXMgaW4gIm14Yl92bDQyX3Byb2JlIiAqLwogCiAJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCXZ2X2RhdGEub3BzLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXI7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lcjsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3k7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2F1ZGlvID0gdmlkaW9jX2dfYXVkaW87CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfYXVkaW8gPSB2aWRpb2Nfc19hdWRpbzsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJdnZfZGF0YS5vcHMudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlcjsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyOworI2VuZGlmCisJdnZfZGF0YS5vcHMudmlkaW9jX2RlZmF1bHQgPSB2aWRpb2NfZGVmYXVsdDsKIAlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmlkZW9fZGV2LCBkZXYsICJteGIiLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXJldHVybiAtMTsKQEAgLTQ0OSwxMyArNzUwLDYgQEAKIAkJfQogCX0KIAotCWkyY191c2VfY2xpZW50KG14Yi0+dGVhNjQyMF8xKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZWE2NDE1Yyk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZGE5ODQwKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnR1bmVyKTsKLQogCXByaW50aygibXhiOiBmb3VuZCBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAjJWQuXG4iLCBteGJfbnVtKTsKIAogCW14Yl9udW0rKzsKQEAgLTQ2OSwxMyArNzYzLDYgQEAKIAogCURFQl9FRSgoImRldjolcFxuIiwgZGV2KSk7CiAKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZWE2NDIwXzEpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQxNWMpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRkYTk4NDApOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50dW5lcik7Ci0KIAlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldixkZXYpOwogCWlmIChNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKQogCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZiaV9kZXYsIGRldik7CkBAIC00ODksMzMwICs3NzYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsaS0+aW5kZXgpKTsKLQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBNWEJfSU5QVVRTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCi0JICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKLQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJKnFjID0gbXhiX2NvbnRyb2xzW2ldOwotCQkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA8IDApCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCWludCBpID0gMDsKLQotCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKLQkJCWlmICghdmMtPnZhbHVlKSB7Ci0JCQkJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2UgKi8KLQkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzFdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbNl1bMV0pOwotCQkJfQotCQkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopYXJnOwotCQkqaW5wdXQgPSBteGItPmN1cl9pbnB1dDsKLQotCQlERUJfRUUoKCJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCWludCBpbnB1dCA9ICooaW50ICopYXJnOwotCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCQlpbnQgaSA9IDA7Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW14Yi0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0KLQkJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAotCQkJCWlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7Ci0KLQkJLyogcHJlcGFyZSBzd2l0Y2hpbmcgb2YgdGVhNjQxNWMgYW5kIHNhYTcxMTFhOwotCQkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOwotCQkJdm0uaW4gID0gMzsKLQkJCXZtLm91dCA9IDE3OwotCi0JCQlpZiAobXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCi0JCQl2bS5pbiAgPSAzOwotCQkJdm0ub3V0ID0gMTM7Ci0JCQlicmVhazsKLQkJY2FzZSBBVVgzX1lDOgotCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDNfeWMgaXMKLQkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLwotCQkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKLQkJCWJyZWFrOwotCQljYXNlIEFVWDM6Ci0JCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcwotCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCi0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVYMToKLQkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTA7Ci0JCQl2bS5pbiAgPSAxOwotCQkJdm0ub3V0ID0gMTc7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiB0ZWE2NDE1YyBvbmx5IGlmIG5lY2Vzc2FyeSAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCWNhc2UgQVVYMToKLQkJCWlmIChteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCQlyb3V0ZS5pbnB1dCA9IGk7Ci0JCXJvdXRlLm91dHB1dCA9IDA7Ci0JCWlmIChteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSkpCi0JCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOwotCi0JCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCi0JCWlmKCAwID09IG14Yi0+Y3VyX211dGUgKSB7Ci0JCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMF0pOwotCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJICAgICAgICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzFdKTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKHQtPmluZGV4KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpKTsKLQotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKLQotCQlzdHJsY3B5KHQtPm5hbWUsICJUViBUdW5lciIsIHNpemVvZih0LT5uYW1lKSk7Ci0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBcCi0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwotCQl0LT5hdWRtb2RlID0gbXhiLT5jdXJfbW9kZTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQotCQlpZiAodC0+aW5kZXgpIHsKLQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIGF0dGFjaGVkLlxuIix0LT5pbmRleCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlteGItPmN1cl9tb2RlID0gdC0+YXVkbW9kZTsKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJaWYgKG14Yi0+Y3VyX2lucHV0KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwKLQkJCQkJCW14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCSpmID0gbXhiLT5jdXJfZnJlcTsKLQotCQlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlpZiAoZi0+dHVuZXIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfU19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsIG14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW14Yi0+Y3VyX2ZyZXEgPSAqZjsKLQkJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0KLQkJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfRlJFUVVFTkNZLCAmbXhiLT5jdXJfZnJlcSk7Ci0KLQkJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLwotCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwotCQl2di0+dmJpX2ZpZWxkY291bnQgPSAwOwotCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fQ0Q6Ci0JewotCQlpbnQgaSA9ICooaW50Kilhcmc7Ci0KLQkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgewotCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIk1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0KLQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFtpXVsxXSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fTElORToKLQl7Ci0JCWludCBpID0gKihpbnQqKWFyZzsKLQotCQlpZiAoaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TKSB7Ci0JCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIixpKSk7Ci0JCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW2ldWzFdKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCi0JCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsIGEtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJbWVtY3B5KGEsICZteGJfYXVkaW9zW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlERUJfRCgoIlZJRElPQ19TX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJcmV0dXJuIDA7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKLQljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0vKgotCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7Ci0qLwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzdGRfY2FsbGJhY2soc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICpzdGFuZGFyZCkKIHsKIAlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7Ci0JaW50IHplcm8gPSAwOwotCWludCBvbmUgPSAxOwogCiAJaWYgKFY0TDJfU1REX1BBTF9JID09IHN0YW5kYXJkLT5pZCkgewogCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfSTsKQEAgLTgyMSw4ICs3ODcsOCBAQAogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogdW5zZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZ6ZXJvKTsKLQkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJCXNhYTcxMTFhX2NhbGwobXhiLCBjb3JlLCBzX2dwaW8sIDApOworCQl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfc3RkLCBzdGQpOwogCX0gZWxzZSB7CiAJCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKIApAQCAtODMwLDggKzc5Niw4IEBACiAJCS8qIHNldCB0aGUgNzE0NiBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCiAJCXNhYTcxNDZfd3JpdGUoZGV2LCBHUElPX0NUUkwsIDB4MDA0MDQwNTApOwogCQkvKiBzZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZvbmUpOwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKKwkJc2FhNzExMWFfY2FsbChteGIsIGNvcmUsIHNfZ3BpbywgMSk7CisJCXR1bmVyX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODg1LDggKzg1MSw2IEBACiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLAogCS5udW1fc3Rkcwk9IHNpemVvZihzdGFuZGFyZCkvc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IG14Yl9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDczZWI2NTYuLjVmYzRhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTgwLDE3ICs4MCwxNyBAQAogewogCWludCBydmFsID0gMDsKIAotCWNhbS0+ZmNrID0gY2xrX2dldChjYW0tPmRldiwgImNhbV9mY2siKTsKKwljYW0tPmZjayA9IGNsa19nZXQoY2FtLT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKGNhbS0+ZmNrKSkgewotCQlkZXZfZXJyKGNhbS0+ZGV2LCAiY2FuJ3QgZ2V0IGNhbV9mY2siKTsKKwkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1lcmEgZmNrIik7CiAJCXJ2YWwgPSBQVFJfRVJSKGNhbS0+ZmNrKTsKIAkJb21hcDI0eHhjYW1fY2xvY2tfcHV0KGNhbSk7CiAJCXJldHVybiBydmFsOwogCX0KIAotCWNhbS0+aWNrID0gY2xrX2dldChjYW0tPmRldiwgImNhbV9pY2siKTsKKwljYW0tPmljayA9IGNsa19nZXQoY2FtLT5kZXYsICJpY2siKTsKIAlpZiAoSVNfRVJSKGNhbS0+aWNrKSkgewotCQlkZXZfZXJyKGNhbS0+ZGV2LCAiY2FuJ3QgZ2V0IGNhbV9pY2siKTsKKwkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1lcmEgaWNrIik7CiAJCXJ2YWwgPSBQVFJfRVJSKGNhbS0+aWNrKTsKIAkJb21hcDI0eHhjYW1fY2xvY2tfcHV0KGNhbSk7CiAJfQpAQCAtMTI4NSw5ICsxMjg1LDYgQEAKIAlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKIAlpbnQgcnZhbDsKIAotCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAltdXRleF9sb2NrKCZjYW0tPm11dGV4KTsKIAlydmFsID0gdmlkaW9jX2ludF9nX3Bhcm0oY2FtLT5zZGV2LCBhKTsKIAltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOwpAQCAtMTMwMyw5ICsxMzAwLDYgQEAKIAlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIG9sZF9zdHJlYW1wYXJtOwogCWludCBydmFsOwogCi0JaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOwogCWlmIChjYW0tPnN0cmVhbWluZykgewogCQlydmFsID0gLUVCVVNZOwpAQCAtMTY2NSw3ICsxNjU5LDYgQEAKIAl2ZmQtPnBhcmVudCA9IGNhbS0+ZGV2OwogCiAJc3RybGNweSh2ZmQtPm5hbWUsIENBTV9OQU1FLCBzaXplb2YodmZkLT5uYW1lKSk7Ci0JdmZkLT52ZmxfdHlwZQkJID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX0NIUk9NQUtFWTsKIAl2ZmQtPmZvcHMJCSA9ICZvbWFwMjR4eGNhbV9mb3BzOwogCXZmZC0+bWlub3IJCSA9IC0xOwogCXZmZC0+aW9jdGxfb3BzCQkgPSAmb21hcDI0eHhjYW1faW9jdGxfZm9wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCmluZGV4IDA1YzE0YTIuLjBlMjE4NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwpAQCAtMTIsMTggKzEyLDIyIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogCiBNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGxvdy1sZXZlbCBkcml2ZXIgZm9yIE9tbmlWaXNpb24gb3Y3NjcwIHNlbnNvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKKwogLyoKICAqIEJhc2ljIHdpbmRvdyBzaXplcy4gIFRoZXNlIHByb2JhYmx5IGJlbG9uZyBzb21ld2hlcmUgbW9yZSBnbG9iYWxseQogICogdXNlZnVsLgpAQCAtMTg5LDExICsxOTMsMTYgQEAKICAqLwogc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0OyAgLyogY29taW5nIGxhdGVyICovCiBzdHJ1Y3Qgb3Y3NjcwX2luZm8geworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKmZtdDsgIC8qIEN1cnJlbnQgZm9ybWF0ICovCiAJdW5zaWduZWQgY2hhciBzYXQ7CQkvKiBTYXR1cmF0aW9uIHZhbHVlICovCiAJaW50IGh1ZTsJCQkvKiBIdWUgdmFsdWUgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG92NzY3MF9pbmZvICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdjc2NzBfaW5mbywgc2QpOworfQogCiAKIApAQCAtNDAwLDI0ICs0MDksMjcgQEAKICAqIExvdy1sZXZlbCByZWdpc3RlciBJL08uCiAgKi8KIAotc3RhdGljIGludCBvdjc2NzBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCitzdGF0aWMgaW50IG92NzY3MF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNoYXIgcmVnLAogCQl1bnNpZ25lZCBjaGFyICp2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IHJldDsKIAotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjLCByZWcpOworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiAJaWYgKHJldCA+PSAwKSB7Ci0JCSp2YWx1ZSA9ICh1bnNpZ25lZCBjaGFyKSByZXQ7CisJCSp2YWx1ZSA9ICh1bnNpZ25lZCBjaGFyKXJldDsKIAkJcmV0ID0gMDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCitzdGF0aWMgaW50IG92NzY3MF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKLQlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjLCByZWcsIHZhbHVlKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IHJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKKwogCWlmIChyZWcgPT0gUkVHX0NPTTcgJiYgKHZhbHVlICYgQ09NN19SRVNFVCkpCiAJCW1zbGVlcCgyKTsgIC8qIFdhaXQgZm9yIHJlc2V0IHRvIHJ1biAqLwogCXJldHVybiByZXQ7CkBAIC00MjcsMTAgKzQzOSwxMCBAQAogLyoKICAqIFdyaXRlIGEgbGlzdCBvZiByZWdpc3RlciBzZXR0aW5nczsgZmYvZmYgc3RvcHMgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgb3Y3NjcwX3dyaXRlX2FycmF5KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnZhbHMpCitzdGF0aWMgaW50IG92NzY3MF93cml0ZV9hcnJheShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnZhbHMpCiB7CiAJd2hpbGUgKHZhbHMtPnJlZ19udW0gIT0gMHhmZiB8fCB2YWxzLT52YWx1ZSAhPSAweGZmKSB7Ci0JCWludCByZXQgPSBvdjc2NzBfd3JpdGUoYywgdmFscy0+cmVnX251bSwgdmFscy0+dmFsdWUpOworCQlpbnQgcmV0ID0gb3Y3NjcwX3dyaXRlKHNkLCB2YWxzLT5yZWdfbnVtLCB2YWxzLT52YWx1ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJdmFscysrOwpAQCAtNDQyLDM0ICs0NTQsMzUgQEAKIC8qCiAgKiBTdHVmZiB0aGF0IGtub3dzIGFib3V0IHRoZSBzZW5zb3IuCiAgKi8KLXN0YXRpYyB2b2lkIG92NzY3MF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBvdjc2NzBfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKLQlvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ09NNywgQ09NN19SRVNFVCk7CisJb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09NNywgQ09NN19SRVNFVCk7CiAJbXNsZWVwKDEpOworCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgb3Y3NjcwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKLQlyZXR1cm4gb3Y3NjcwX3dyaXRlX2FycmF5KGNsaWVudCwgb3Y3NjcwX2RlZmF1bHRfcmVncyk7CisJcmV0dXJuIG92NzY3MF93cml0ZV9hcnJheShzZCwgb3Y3NjcwX2RlZmF1bHRfcmVncyk7CiB9CiAKIAogCi1zdGF0aWMgaW50IG92NzY3MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgb3Y3NjcwX2RldGVjdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXVuc2lnbmVkIGNoYXIgdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb3Y3NjcwX2luaXQoY2xpZW50KTsKKwlyZXQgPSBvdjc2NzBfaW5pdChzZCwgMCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTUlESCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTUlESCwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4N2YpIC8qIE9WIG1hbnVmLiBpZC4gKi8KIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTUlETCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTUlETCwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4YTIpCkBAIC00NzcsMTIgKzQ5MCwxMiBAQAogCS8qCiAJICogT0ssIHdlIGtub3cgd2UgaGF2ZSBhbiBPbW5pVmlzaW9uIGNoaXAuLi5idXQgd2hpY2ggb25lPwogCSAqLwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX1BJRCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfUElELCAmdik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHYgIT0gMHg3NikgIC8qIFBJRCArIFZFUiA9IDB4NzYgLyAweDczICovCiAJCXJldHVybiAtRU5PREVWOwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX1ZFUiwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfVkVSLCAmdik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHYgIT0gMHg3MykgIC8qIFBJRCArIFZFUiA9IDB4NzYgLyAweDczICovCkBAIC02MjcsNyArNjQwLDcgQEAKIC8qCiAgKiBTdG9yZSBhIHNldCBvZiBzdGFydC9zdG9wIHZhbHVlcyBpbnRvIHRoZSBjYW1lcmEuCiAgKi8KLXN0YXRpYyBpbnQgb3Y3NjcwX3NldF9odyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaHN0YXJ0LCBpbnQgaHN0b3AsCitzdGF0aWMgaW50IG92NzY3MF9zZXRfaHcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGhzdGFydCwgaW50IGhzdG9wLAogCQlpbnQgdnN0YXJ0LCBpbnQgdnN0b3ApCiB7CiAJaW50IHJldDsKQEAgLTYzNywyNiArNjUwLDI2IEBACiAgKiBoc3RhcnQgYXJlIGluIGhyZWZbMjowXSwgYm90dG9tIDMgb2YgaHN0b3AgaW4gaHJlZls1OjNdLiAgVGhlcmUgaXMKICAqIGEgbXlzdGVyeSAiZWRnZSBvZmZzZXQiIHZhbHVlIGluIHRoZSB0b3AgdHdvIGJpdHMgb2YgaHJlZi4KICAqLwotCXJldCA9ICBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFNUQVJULCAoaHN0YXJ0ID4+IDMpICYgMHhmZik7Ci0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19IU1RPUCwgKGhzdG9wID4+IDMpICYgMHhmZik7Ci0JcmV0ICs9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0hSRUYsICZ2KTsKKwlyZXQgPSAgb3Y3NjcwX3dyaXRlKHNkLCBSRUdfSFNUQVJULCAoaHN0YXJ0ID4+IDMpICYgMHhmZik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0hTVE9QLCAoaHN0b3AgPj4gMykgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3JlYWQoc2QsIFJFR19IUkVGLCAmdik7CiAJdiA9ICh2ICYgMHhjMCkgfCAoKGhzdG9wICYgMHg3KSA8PCAzKSB8IChoc3RhcnQgJiAweDcpOwogCW1zbGVlcCgxMCk7Ci0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19IUkVGLCB2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfSFJFRiwgdik7CiAvKgogICogVmVydGljYWw6IHNpbWlsYXIgYXJyYW5nZW1lbnQsIGJ1dCBvbmx5IDEwIGJpdHMuCiAgKi8KLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZTVEFSVCwgKHZzdGFydCA+PiAyKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfVlNUT1AsICh2c3RvcCA+PiAyKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19WUkVGLCAmdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX1ZTVEFSVCwgKHZzdGFydCA+PiAyKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19WU1RPUCwgKHZzdG9wID4+IDIpICYgMHhmZik7CisJcmV0ICs9IG92NzY3MF9yZWFkKHNkLCBSRUdfVlJFRiwgJnYpOwogCXYgPSAodiAmIDB4ZjApIHwgKCh2c3RvcCAmIDB4MykgPDwgMikgfCAodnN0YXJ0ICYgMHgzKTsKIAltc2xlZXAoMTApOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfVlJFRiwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX1ZSRUYsIHYpOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfZW51bV9mbXQoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3N0YXRpYyBpbnQgb3Y3NjcwX2VudW1fZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKIHsKIAlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKm9mbXQ7CiAKQEAgLTY3MSw3ICs2ODQsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RyeV9mbXQoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LAorc3RhdGljIGludCBvdjc2NzBfdHJ5X2ZtdF9pbnRlcm5hbChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwKIAkJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICoqcmV0X2ZtdCwKIAkJc3RydWN0IG92NzY3MF93aW5fc2l6ZSAqKnJldF93c2l6ZSkKIHsKQEAgLTcxNSwxOCArNzI5LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb3Y3NjcwX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJcmV0dXJuIG92NzY3MF90cnlfZm10X2ludGVybmFsKHNkLCBmbXQsIE5VTEwsIE5VTEwpOworfQorCiAvKgogICogU2V0IGEgZm9ybWF0LgogICovCi1zdGF0aWMgaW50IG92NzY3MF9zX2ZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IG92NzY3MF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqb3ZmbXQ7CiAJc3RydWN0IG92NzY3MF93aW5fc2l6ZSAqd3NpemU7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXVuc2lnbmVkIGNoYXIgY29tNywgY2xrcmM7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOworCXVuc2lnbmVkIGNoYXIgY29tNywgY2xrcmMgPSAwOwogCi0JcmV0ID0gb3Y3NjcwX3RyeV9mbXQoYywgZm10LCAmb3ZmbXQsICZ3c2l6ZSk7CisJcmV0ID0gb3Y3NjcwX3RyeV9mbXRfaW50ZXJuYWwoc2QsIGZtdCwgJm92Zm10LCAmd3NpemUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJLyoKQEAgLTczNSw3ICs3NTQsNyBAQAogCSAqIHRoZSBjb2xvcnMuCiAJICovCiAJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCNTY1KSB7Ci0JCXJldCA9IG92NzY3MF9yZWFkKGMsIFJFR19DTEtSQywgJmNsa3JjKTsKKwkJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTEtSQywgJmNsa3JjKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNzQ3LDIwICs3NjYsMjAgQEAKIAkgKi8KIAljb203ID0gb3ZmbXQtPnJlZ3NbMF0udmFsdWU7CiAJY29tNyB8PSB3c2l6ZS0+Y29tN19iaXQ7Ci0Jb3Y3NjcwX3dyaXRlKGMsIFJFR19DT003LCBjb203KTsKKwlvdjc2NzBfd3JpdGUoc2QsIFJFR19DT003LCBjb203KTsKIAkvKgogCSAqIE5vdyB3cml0ZSB0aGUgcmVzdCBvZiB0aGUgYXJyYXkuICBBbHNvIHN0b3JlIHN0YXJ0L3N0b3BzCiAJICovCi0Jb3Y3NjcwX3dyaXRlX2FycmF5KGMsIG92Zm10LT5yZWdzICsgMSk7Ci0Jb3Y3NjcwX3NldF9odyhjLCB3c2l6ZS0+aHN0YXJ0LCB3c2l6ZS0+aHN0b3AsIHdzaXplLT52c3RhcnQsCisJb3Y3NjcwX3dyaXRlX2FycmF5KHNkLCBvdmZtdC0+cmVncyArIDEpOworCW92NzY3MF9zZXRfaHcoc2QsIHdzaXplLT5oc3RhcnQsIHdzaXplLT5oc3RvcCwgd3NpemUtPnZzdGFydCwKIAkJCXdzaXplLT52c3RvcCk7CiAJcmV0ID0gMDsKIAlpZiAod3NpemUtPnJlZ3MpCi0JCXJldCA9IG92NzY3MF93cml0ZV9hcnJheShjLCB3c2l6ZS0+cmVncyk7CisJCXJldCA9IG92NzY3MF93cml0ZV9hcnJheShzZCwgd3NpemUtPnJlZ3MpOwogCWluZm8tPmZtdCA9IG92Zm10OwogCiAJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCNTY1ICYmIHJldCA9PSAwKQotCQlyZXQgPSBvdjc2NzBfd3JpdGUoYywgUkVHX0NMS1JDLCBjbGtyYyk7CisJCXJldCA9IG92NzY3MF93cml0ZShzZCwgUkVHX0NMS1JDLCBjbGtyYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzY4LDcgKzc4Nyw3IEBACiAgKiBJbXBsZW1lbnQgRy9TX1BBUk0uICBUaGVyZSBpcyBhICJoaWdoIHF1YWxpdHkiIG1vZGUgd2UgY291bGQgdHJ5CiAgKiB0byBkbyBzb21lZGF5OyBmb3Igbm93LCB3ZSBqdXN0IGRvIHRoZSBmcmFtZSByYXRlIHR3ZWFrLgogICovCi1zdGF0aWMgaW50IG92NzY3MF9nX3Bhcm0oc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm1zKQorc3RhdGljIGludCBvdjc2NzBfZ19wYXJtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm1zKQogewogCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZwYXJtcy0+cGFybS5jYXB0dXJlOwogCXVuc2lnbmVkIGNoYXIgY2xrcmM7CkBAIC03NzYsNyArNzk1LDcgQEAKIAogCWlmIChwYXJtcy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldCA9IG92NzY3MF9yZWFkKGMsIFJFR19DTEtSQywgJmNsa3JjKTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NMS1JDLCAmY2xrcmMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCW1lbXNldChjcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtKSk7CkBAIC03ODgsNyArODA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfc19wYXJtKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfcGFybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKIHsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmcGFybXMtPnBhcm0uY2FwdHVyZTsKIAlzdHJ1Y3QgdjRsMl9mcmFjdCAqdHBmID0gJmNwLT50aW1lcGVyZnJhbWU7CkBAIC04MDIsNyArODIxLDcgQEAKIAkvKgogCSAqIENMS1JDIGhhcyBhIHJlc2VydmVkIGJpdCwgc28gbGV0J3MgcHJlc2VydmUgaXQuCiAJICovCi0JcmV0ID0gb3Y3NjcwX3JlYWQoYywgUkVHX0NMS1JDLCAmY2xrcmMpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ0xLUkMsICZjbGtyYyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHRwZi0+bnVtZXJhdG9yID09IDAgfHwgdHBmLT5kZW5vbWluYXRvciA9PSAwKQpAQCAtODE2LDcgKzgzNSw3IEBACiAJY2xrcmMgPSAoY2xrcmMgJiAweDgwKSB8IGRpdjsKIAl0cGYtPm51bWVyYXRvciA9IDE7CiAJdHBmLT5kZW5vbWluYXRvciA9IE9WNzY3MF9GUkFNRV9SQVRFL2RpdjsKLQlyZXR1cm4gb3Y3NjcwX3dyaXRlKGMsIFJFR19DTEtSQywgY2xrcmMpOworCXJldHVybiBvdjc2NzBfd3JpdGUoc2QsIFJFR19DTEtSQywgY2xrcmMpOwogfQogCiAKQEAgLTgyOSw3ICs4NDgsNyBAQAogCiAKIAotc3RhdGljIGludCBvdjc2NzBfc3RvcmVfY21hdHJpeChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBvdjc2NzBfc3RvcmVfY21hdHJpeChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQlpbnQgbWF0cml4W0NNQVRSSVhfTEVOXSkKIHsKIAlpbnQgaSwgcmV0OwpAQCAtODM5LDcgKzg1OCw3IEBACiAJICogV2VpcmQgY3JhcCBzZWVtcyB0byBleGlzdCBpbiB0aGUgdXBwZXIgcGFydCBvZgogCSAqIHRoZSBzaWduIGJpdHMgcmVnaXN0ZXIsIHNvIGxldCdzIHByZXNlcnZlIGl0LgogCSAqLwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NNQVRSSVhfU0lHTiwgJnNpZ25iaXRzKTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NNQVRSSVhfU0lHTiwgJnNpZ25iaXRzKTsKIAlzaWduYml0cyAmPSAweGMwOwogCiAJZm9yIChpID0gMDsgaSA8IENNQVRSSVhfTEVOOyBpKyspIHsKQEAgLTg1OCw5ICs4NzcsOSBAQAogCQkJZWxzZQogCQkJCXJhdyA9IG1hdHJpeFtpXSAmIDB4ZmY7CiAJCX0KLQkJcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19DTUFUUklYX0JBU0UgKyBpLCByYXcpOworCQlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ01BVFJJWF9CQVNFICsgaSwgcmF3KTsKIAl9Ci0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19DTUFUUklYX1NJR04sIHNpZ25iaXRzKTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ01BVFJJWF9TSUdOLCBzaWduYml0cyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTQzLDI5ICs5NjIsMjkgQEAKIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3Rfc2F0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3Nfc2F0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAJaW50IG1hdHJpeFtDTUFUUklYX0xFTl07CiAJaW50IHJldDsKIAogCWluZm8tPnNhdCA9IHZhbHVlOwogCW92NzY3MF9jYWxjX2NtYXRyaXgoaW5mbywgbWF0cml4KTsKLQlyZXQgPSBvdjc2NzBfc3RvcmVfY21hdHJpeChjbGllbnQsIG1hdHJpeCk7CisJcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc2QsIG1hdHJpeCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfcV9zYXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19zYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKIAogCSp2YWx1ZSA9IGluZm8tPnNhdDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfdF9odWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19odWUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgbWF0cml4W0NNQVRSSVhfTEVOXTsKIAlpbnQgcmV0OwogCkBAIC05NzMsMTQgKzk5MiwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbmZvLT5odWUgPSB2YWx1ZTsKIAlvdjc2NzBfY2FsY19jbWF0cml4KGluZm8sIG1hdHJpeCk7Ci0JcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoY2xpZW50LCBtYXRyaXgpOworCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KHNkLCBtYXRyaXgpOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfcV9odWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19odWUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKIAogCSp2YWx1ZSA9IGluZm8tPmh1ZTsKIAlyZXR1cm4gMDsKQEAgLTk5NCw4ICsxMDEzLDcgQEAKIHsKIAlpZiAoKHYgJiAweDgwKSA9PSAwKQogCQlyZXR1cm4gdiArIDEyODsKLQllbHNlCi0JCXJldHVybiAxMjggLSAodiAmIDB4N2YpOworCXJldHVybiAxMjggLSAodiAmIDB4N2YpOwogfQogCiAKQEAgLTEwMDMsMzY5ICsxMDIxLDI3NSBAQAogewogCWlmICh2ID4gMTI3KQogCQlyZXR1cm4gdiAmIDB4N2Y7Ci0JZWxzZQotCQlyZXR1cm4gKDEyOCAtIHYpIHwgMHg4MDsKKwlyZXR1cm4gKDEyOCAtIHYpIHwgMHg4MDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfdF9icmlnaHRuZXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfYnJpZ2h0bmVzcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciBjb204ID0gMCwgdjsKIAlpbnQgcmV0OwogCi0Jb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQ09NOCwgJmNvbTgpOworCW92NzY3MF9yZWFkKHNkLCBSRUdfQ09NOCwgJmNvbTgpOwogCWNvbTggJj0gfkNPTThfQUVDOwotCW92NzY3MF93cml0ZShjbGllbnQsIFJFR19DT004LCBjb204KTsKKwlvdjc2NzBfd3JpdGUoc2QsIFJFR19DT004LCBjb204KTsKIAl2ID0gb3Y3NjcwX2Fic190b19zbSh2YWx1ZSk7Ci0JcmV0ID0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0JSSUdIVCwgdik7CisJcmV0ID0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQlJJR0hULCB2KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9xX2JyaWdodG5lc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19icmlnaHRuZXNzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwotCWludCByZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19CUklHSFQsICZ2KTsKKwlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19CUklHSFQsICZ2KTsKIAogCSp2YWx1ZSA9IG92NzY3MF9zbV90b19hYnModik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfdF9jb250cmFzdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2NvbnRyYXN0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTlRSQVMsICh1bnNpZ25lZCBjaGFyKSB2YWx1ZSk7CisJcmV0dXJuIG92NzY3MF93cml0ZShzZCwgUkVHX0NPTlRSQVMsICh1bnNpZ25lZCBjaGFyKSB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfY29udHJhc3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19jb250cmFzdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKLQlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQ09OVFJBUywgJnYpOworCWludCByZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NPTlRSQVMsICZ2KTsKIAogCSp2YWx1ZSA9IHY7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfcV9oZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX2hmbGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NVkZQLCAmdik7CiAJKnZhbHVlID0gKHYgJiBNVkZQX01JUlJPUikgPT0gTVZGUF9NSVJST1I7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF90X2hmbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfaGZsaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAJaW50IHJldDsKIAotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01WRlAsICZ2KTsKIAlpZiAodmFsdWUpCiAJCXYgfD0gTVZGUF9NSVJST1I7CiAJZWxzZQogCQl2ICY9IH5NVkZQX01JUlJPUjsKIAltc2xlZXAoMTApOyAgLyogRklYTUUgKi8KLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX01WRlAsIHYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19NVkZQLCB2KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKIAotc3RhdGljIGludCBvdjc2NzBfcV92ZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX3ZmbGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NVkZQLCAmdik7CiAJKnZhbHVlID0gKHYgJiBNVkZQX0ZMSVApID09IE1WRlBfRkxJUDsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfdmZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc192ZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCWlmICh2YWx1ZSkKIAkJdiB8PSBNVkZQX0ZMSVA7CiAJZWxzZQogCQl2ICY9IH5NVkZQX0ZMSVA7CiAJbXNsZWVwKDEwKTsgIC8qIEZJWE1FICovCi0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19NVkZQLCB2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfTVZGUCwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgc3RydWN0IG92NzY3MF9jb250cm9sIHsKLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7Ci0JaW50ICgqcXVlcnkpKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBfX3MzMiAqdmFsdWUpOwotCWludCAoKnR3ZWFrKShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgaW50IHZhbHVlKTsKLX0gb3Y3NjcwX2NvbnRyb2xzW10gPQotewotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gIkJyaWdodG5lc3MiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAyNTUsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4ODAsCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfYnJpZ2h0bmVzcywKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfYnJpZ2h0bmVzcywKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJDb250cmFzdCIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDEyNywKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg0MCwgICAvKiBYWFggb3Y3NjcwIHNwZWMgKi8KLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9jb250cmFzdCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfY29udHJhc3QsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJTYXR1cmF0aW9uIiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU2LAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDgwLAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X3NhdCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3Ffc2F0LAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9IVUUsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJIVUUiLAotCQkJLm1pbmltdW0gPSAtMTgwLAotCQkJLm1heGltdW0gPSAxODAsCi0JCQkuc3RlcCA9IDUsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfaHVlLAotCQkucXVlcnkgPSBvdjc2NzBfcV9odWUsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX1ZGTElQLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUgPSAiVmVydGljYWwgZmxpcCIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDEsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X3ZmbGlwLAotCQkucXVlcnkgPSBvdjc2NzBfcV92ZmxpcCwKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfSEZMSVAsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCQkubmFtZSA9ICJIb3Jpem9udGFsIG1pcnJvciIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDEsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDAsCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2hmbGlwLAotCQkucXVlcnkgPSBvdjc2NzBfcV9oZmxpcCwKLQl9LAotfTsKLSNkZWZpbmUgTl9DT05UUk9MUyAoQVJSQVlfU0laRShvdjc2NzBfY29udHJvbHMpKQotCi1zdGF0aWMgc3RydWN0IG92NzY3MF9jb250cm9sICpvdjc2NzBfZmluZF9jb250cm9sKF9fdTMyIGlkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5fQ09OVFJPTFM7IGkrKykKLQkJaWYgKG92NzY3MF9jb250cm9sc1tpXS5xYy5pZCA9PSBpZCkKLQkJCXJldHVybiBvdjc2NzBfY29udHJvbHMgKyBpOwotCXJldHVybiBOVUxMOwotfQotCi0KLXN0YXRpYyBpbnQgb3Y3NjcwX3F1ZXJ5Y3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBvdjc2NzBfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3RydWN0IG92NzY3MF9jb250cm9sICpjdHJsID0gb3Y3NjcwX2ZpbmRfY29udHJvbChxYy0+aWQpOwotCi0JaWYgKGN0cmwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JKnFjID0gY3RybC0+cWM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NjcwX2dfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBvdjc2NzBfY29udHJvbCAqb2N0cmwgPSBvdjc2NzBfZmluZF9jb250cm9sKGN0cmwtPmlkKTsKLQlpbnQgcmV0OwotCi0JaWYgKG9jdHJsID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldCA9IG9jdHJsLT5xdWVyeShjbGllbnQsICZjdHJsLT52YWx1ZSk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG92NzY3MF9zX2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKm9jdHJsID0gb3Y3NjcwX2ZpbmRfY29udHJvbChjdHJsLT5pZCk7Ci0JaW50IHJldDsKLQotCWlmIChvY3RybCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSAgb2N0cmwtPnR3ZWFrKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0KLQotCi0KLS8qCi0gKiBCYXNpYyBpMmMgc3R1ZmYuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBvdjc2NzBfZHJpdmVyOwotCi1zdGF0aWMgaW50IG92NzY3MF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm87Ci0KLQkvKgotCSAqIEZvciBub3c6IG9ubHkgZGVhbCB3aXRoIGFkYXB0ZXJzIHdlIHJlY29nbml6ZS4KLQkgKi8KLQlpZiAoYWRhcHRlci0+aWQgIT0gSTJDX0hXX1NNQlVTX0NBRkUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+YWRkciA9IE9WNzY3MF9JMkNfQUREUjsKLQljbGllbnQtPmRyaXZlciA9ICZvdjc2NzBfZHJpdmVyLAotCXN0cmNweShjbGllbnQtPm5hbWUsICJPVjc2NzAiKTsKLQkvKgotCSAqIFNldCB1cCBvdXIgaW5mbyBzdHJ1Y3R1cmUuCi0JICovCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgb3Y3NjcwX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoISBpbmZvKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWluZm8tPmZtdCA9ICZvdjc2NzBfZm9ybWF0c1swXTsKLQlpbmZvLT5zYXQgPSAxMjg7CS8qIFJldmlldyB0aGlzICovCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaW5mbyk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSBpdCdzIGFuIG92NzY3MAotCSAqLwotCXJldCA9IG92NzY3MF9kZXRlY3QoY2xpZW50KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlX2luZm87Ci0JcmV0ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlX2luZm87Ci0JcmV0dXJuIDA7Ci0KLSAgb3V0X2ZyZWVfaW5mbzoKLQlrZnJlZShpbmZvKTsKLSAgb3V0X2ZyZWU6Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgb3Y3NjcwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBvdjc2NzBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQl2b2lkICphcmcpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19EQkdfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBhcmcsIFY0TDJfSURFTlRfT1Y3NjcwLCAwKTsKLQotCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKLQkJb3Y3NjcwX3Jlc2V0KGNsaWVudCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBWSURJT0NfSU5UX0lOSVQ6Ci0JCXJldHVybiBvdjc2NzBfaW5pdChjbGllbnQpOwotCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JCXJldHVybiBvdjc2NzBfZW51bV9mbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm10ZGVzYyAqKSBhcmcpOwotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JCXJldHVybiBvdjc2NzBfdHJ5X2ZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKikgYXJnLCBOVUxMLCBOVUxMKTsKLQljYXNlIFZJRElPQ19TX0ZNVDoKLQkJcmV0dXJuIG92NzY3MF9zX2ZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKikgYXJnKTsKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiBvdjc2NzBfcXVlcnljdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqKSBhcmcpOwotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIG92NzY3MF9zX2N0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKSBhcmcpOwotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIG92NzY3MF9nX2N0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKSBhcmcpOwotCWNhc2UgVklESU9DX1NfUEFSTToKLQkJcmV0dXJuIG92NzY3MF9zX3Bhcm0oY2xpZW50LCAoc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqKSBhcmcpOwotCWNhc2UgVklESU9DX0dfUEFSTToKLQkJcmV0dXJuIG92NzY3MF9nX3Bhcm0oY2xpZW50LCAoc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqKSBhcmcpOworCS8qIEZpbGwgaW4gbWluLCBtYXgsIHN0ZXAgYW5kIGRlZmF1bHQgdmFsdWUgZm9yIHRoZXNlIGNvbnRyb2xzLiAqLworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU2LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xODAsIDE4MCwgNSwgMCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG92NzY3MF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gb3Y3NjcwX2dfYnJpZ2h0bmVzcyhzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gb3Y3NjcwX2dfY29udHJhc3Qoc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gb3Y3NjcwX2dfc2F0KHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gb3Y3NjcwX2dfaHVlKHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCXJldHVybiBvdjc2NzBfZ192ZmxpcChzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlyZXR1cm4gb3Y3NjcwX2dfaGZsaXAoc2QsICZjdHJsLT52YWx1ZSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQogCitzdGF0aWMgaW50IG92NzY3MF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gb3Y3NjcwX3NfYnJpZ2h0bmVzcyhzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHVybiBvdjc2NzBfc19jb250cmFzdChzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIG92NzY3MF9zX3NhdChzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gb3Y3NjcwX3NfaHVlKHNkLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJcmV0dXJuIG92NzY3MF9zX3ZmbGlwKHNkLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJcmV0dXJuIG92NzY3MF9zX2hmbGlwKHNkLCBjdHJsLT52YWx1ZSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3Y3NjcwX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJvdjc2NzAiLAotCX0sCi0JLmlkIAkJPSBJMkNfRFJJVkVSSURfT1Y3NjcwLAotCS5hdHRhY2hfYWRhcHRlciA9IG92NzY3MF9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQJPSBvdjc2NzBfZGV0YWNoLAotCS5jb21tYW5kCT0gb3Y3NjcwX2NvbW1hbmQsCitzdGF0aWMgaW50IG92NzY3MF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9PVjc2NzAsIDApOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBvdjc2NzBfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdW5zaWduZWQgY2hhciB2YWwgPSAwOworCWludCByZXQ7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIHJlZy0+cmVnICYgMHhmZiwgJnZhbCk7CisJcmVnLT52YWwgPSB2YWw7CisJcmVnLT5zaXplID0gMTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzY3MF9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlvdjc2NzBfd3JpdGUoc2QsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG92NzY3MF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gb3Y3NjcwX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gb3Y3NjcwX2dfY3RybCwKKwkuc19jdHJsID0gb3Y3NjcwX3NfY3RybCwKKwkucXVlcnljdHJsID0gb3Y3NjcwX3F1ZXJ5Y3RybCwKKwkucmVzZXQgPSBvdjc2NzBfcmVzZXQsCisJLmluaXQgPSBvdjc2NzBfaW5pdCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIgPSBvdjc2NzBfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IG92NzY3MF9zX3JlZ2lzdGVyLAorI2VuZGlmCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjc2NzBfdmlkZW9fb3BzID0geworCS5lbnVtX2ZtdCA9IG92NzY3MF9lbnVtX2ZtdCwKKwkudHJ5X2ZtdCA9IG92NzY3MF90cnlfZm10LAorCS5zX2ZtdCA9IG92NzY3MF9zX2ZtdCwKKwkuc19wYXJtID0gb3Y3NjcwX3NfcGFybSwKKwkuZ19wYXJtID0gb3Y3NjcwX2dfcGFybSwKK307CiAKLS8qCi0gKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24KLSAqLwotc3RhdGljIGludCBfX2luaXQgb3Y3NjcwX21vZF9pbml0KHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjc2NzBfb3BzID0geworCS5jb3JlID0gJm92NzY3MF9jb3JlX29wcywKKwkudmlkZW8gPSAmb3Y3NjcwX3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgb3Y3NjcwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJPbW5pVmlzaW9uIG92NzY3MCBzZW5zb3IgZHJpdmVyLCBhdCB5b3VyIHNlcnZpY2VcbiIpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmb3Y3NjcwX2RyaXZlcik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm87CisJaW50IHJldDsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3Y3NjcwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZpbmZvLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmb3Y3NjcwX29wcyk7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBhbiBvdjc2NzAgKi8KKwlyZXQgPSBvdjc2NzBfZGV0ZWN0KHNkKTsKKwlpZiAocmV0KSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJjaGlwIGZvdW5kIEAgMHgleCAoJXMpIGlzIG5vdCBhbiBvdjc2NzAgY2hpcC5cbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwkJa2ZyZWUoaW5mbyk7CisJCXJldHVybiByZXQ7CisJfQorCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJaW5mby0+Zm10ID0gJm92NzY3MF9mb3JtYXRzWzBdOworCWluZm8tPnNhdCA9IDEyODsJLyogUmV2aWV3IHRoaXMgKi8KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgb3Y3NjcwX21vZF9leGl0KHZvaWQpCisKK3N0YXRpYyBpbnQgb3Y3NjcwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWkyY19kZWxfZHJpdmVyKCZvdjc2NzBfZHJpdmVyKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKIH0KIAotbW9kdWxlX2luaXQob3Y3NjcwX21vZF9pbml0KTsKLW1vZHVsZV9leGl0KG92NzY3MF9tb2RfZXhpdCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgb3Y3NjcwX2lkW10gPSB7CisJeyAib3Y3NjcwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBvdjc2NzBfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAib3Y3NjcwIiwKKwkucHJvYmUgPSBvdjc2NzBfcHJvYmUsCisJLnJlbW92ZSA9IG92NzY3MF9yZW1vdmUsCisJLmlkX3RhYmxlID0gb3Y3NjcwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCmluZGV4IDNjOWUwYmEuLjg0YjBmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtMjE3LDEwICsyMTcsMTEgQEAKICNkZWZpbmUgT0NBUF80eCAgICAgICAgIDB4MDMJLyogNHggKi8KIAogLyogQ09NMyAqLwotI2RlZmluZSBTV0FQX01BU0sgICAgICAgMHgzOAorI2RlZmluZSBTV0FQX01BU0sgICAgICAgKFNXQVBfUkdCIHwgU1dBUF9ZVVYgfCBTV0FQX01MKQorI2RlZmluZSBJTUdfTUFTSyAgICAgICAgKFZGTElQX0lNRyB8IEhGTElQX0lNRykKIAotI2RlZmluZSBWRklNR19PTl9PRkYgICAgMHg4MAkvKiBWZXJ0aWNhbCBmbGlwIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgSE1JTUdfT05fT0ZGICAgIDB4NDAJLyogSG9yaXpvbnRhbCBtaXJyb3IgaW1hZ2UgT04vT0ZGIHNlbGVjdGlvbiAqLworI2RlZmluZSBWRkxJUF9JTUcgICAgICAgMHg4MAkvKiBWZXJ0aWNhbCBmbGlwIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgSEZMSVBfSU1HICAgICAgIDB4NDAJLyogSG9yaXpvbnRhbCBtaXJyb3IgaW1hZ2UgT04vT0ZGIHNlbGVjdGlvbiAqLwogI2RlZmluZSBTV0FQX1JHQiAgICAgICAgMHgyMAkvKiBTd2FwIEIvUiAgb3V0cHV0IHNlcXVlbmNlIGluIFJHQiBtb2RlICovCiAjZGVmaW5lIFNXQVBfWVVWICAgICAgICAweDEwCS8qIFN3YXAgWS9VViBvdXRwdXQgc2VxdWVuY2UgaW4gWVVWIG1vZGUgKi8KICNkZWZpbmUgU1dBUF9NTCAgICAgICAgIDB4MDgJLyogU3dhcCBvdXRwdXQgTVNCL0xTQiAqLwpAQCAtMjcxLDExICsyNzIsMTMgQEAKICNkZWZpbmUgU0xDVF9RVkdBICAgICAgIDB4NDAJLyogICAxIDogUVZHQSAqLwogI2RlZmluZSBJVFU2NTZfT05fT0ZGICAgMHgyMAkvKiBJVFU2NTYgcHJvdG9jb2wgT04vT0ZGIHNlbGVjdGlvbiAqLwogCQkJCS8qIFJHQiBvdXRwdXQgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgRk1UX01BU0sgICAgICAgIDB4MGMJLyogICAgICBNYXNrIG9mIGNvbG9yIGZvcm1hdCAqLwogI2RlZmluZSBGTVRfR0JSNDIyICAgICAgMHgwMAkvKiAgICAgIDAwIDogR0JSIDQ6MjoyICovCiAjZGVmaW5lIEZNVF9SR0I1NjUgICAgICAweDA0CS8qICAgICAgMDEgOiBSR0IgNTY1ICovCiAjZGVmaW5lIEZNVF9SR0I1NTUgICAgICAweDA4CS8qICAgICAgMTAgOiBSR0IgNTU1ICovCiAjZGVmaW5lIEZNVF9SR0I0NDQgICAgICAweDBjCS8qIDExIDogUkdCIDQ0NCAqLwogCQkJCS8qIE91dHB1dCBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSBPRk1UX01BU0sgICAgICAgMHgwMyAgICAvKiAgICAgIE1hc2sgb2Ygb3V0cHV0IGZvcm1hdCAqLwogI2RlZmluZSBPRk1UX1lVViAgICAgICAgMHgwMAkvKiAgICAgIDAwIDogWVVWICovCiAjZGVmaW5lIE9GTVRfUF9CUkFXICAgICAweDAxCS8qICAgICAgMDEgOiBQcm9jZXNzZWQgQmF5ZXIgUkFXICovCiAjZGVmaW5lIE9GTVRfUkdCICAgICAgICAweDAyCS8qICAgICAgMTAgOiBSR0IgKi8KQEAgLTI5OSw3ICszMDIsNyBAQAogI2RlZmluZSBHQUlOXzJ4ICAgICAgICAgMHgwMAkvKiAgICAwMDAgOiAgIDJ4ICovCiAjZGVmaW5lIEdBSU5fNHggICAgICAgICAweDEwCS8qICAgIDAwMSA6ICAgNHggKi8KICNkZWZpbmUgR0FJTl84eCAgICAgICAgIDB4MjAJLyogICAgMDEwIDogICA4eCAqLwotI2RlZmluZSBHQUlOXzE2eCAgICAgICAgMHgzMAkvKiAwMTEgOiAgMTZ4ICovCisjZGVmaW5lIEdBSU5fMTZ4ICAgICAgICAweDMwCS8qICAgIDAxMSA6ICAxNnggKi8KICNkZWZpbmUgR0FJTl8zMnggICAgICAgIDB4NDAJLyogICAgMTAwIDogIDMyeCAqLwogI2RlZmluZSBHQUlOXzY0eCAgICAgICAgMHg1MAkvKiAxMDEgOiAgNjR4ICovCiAjZGVmaW5lIEdBSU5fMTI4eCAgICAgICAweDYwCS8qIDExMCA6IDEyOHggKi8KQEAgLTM1NiwxMyArMzU5LDYgQEAKICNkZWZpbmUgVk9TWl9RVkdBICAgICAgIDB4NzgKIAogLyoKLSAqIGJpdCBjb25maWd1cmUgKDMyIGJpdCkKLSAqIHRoaXMgaXMgdXNlZCBpbiBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCA6OiBvcHRpb24KLSAqLwotI2RlZmluZSBPUF9VViAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE9QX1NXQVBfUkdCIDB4MDAwMDAwMDIKLQotLyoKICAqIElECiAgKi8KICNkZWZpbmUgT1Y3NzIwICAweDc3MjAKQEAgLTM4MCw4ICszNzYsOSBAQAogc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgewogCWNoYXIgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKIAlfX3UzMiAgICAgICAgICAgICAgICAgICAgIGZvdXJjYzsKLQljb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnJlZ3M7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICBvcHRpb247CisJdTggICAgICAgICAgICAgICAgICAgICAgICBkc3AzOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgY29tMzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGNvbTc7CiB9OwogCiBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplIHsKQEAgLTM5OSwzOSArMzk2LDEzIEBACiAJY29uc3Qgc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgKmZtdDsKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplICAgICAqd2luOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgZmxhZ192ZmxpcDoxOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBmbGFnX2hmbGlwOjE7CiB9OwogCiAjZGVmaW5lIEVORE1BUktFUiB7IDB4ZmYsIDB4ZmYgfQogCiAvKgotICogcmVnaXN0ZXIgc2V0dGluZyBmb3IgY29sb3IgZm9ybWF0Ci0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1JHQjU1NV9yZWdzW10gPSB7Ci0JeyBDT00zLCAweDAwIH0sCi0JeyBDT003LCBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IgfSwKLQlFTkRNQVJLRVIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9SR0I1NjVfcmVnc1tdID0gewotCXsgQ09NMywgMHgwMCB9LAotCXsgQ09NNywgRk1UX1JHQjU2NSB8IE9GTVRfUkdCIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfWVlVVl9yZWdzW10gPSB7Ci0JeyBDT00zLCBTV0FQX1lVViB9LAotCXsgQ09NNywgT0ZNVF9ZVVYgfSwKLQlFTkRNQVJLRVIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9VVllZX3JlZ3NbXSA9IHsKLQl7IENPTTMsIDB4MDAgfSwKLQl7IENPTTcsIE9GTVRfWVVWIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotCi0vKgogICogcmVnaXN0ZXIgc2V0dGluZyBmb3Igd2luZG93IHNpemUKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfcXZnYV9yZWdzW10gPSB7CkBAIC01MDAsMzggKzQ3MSw0OCBAQAogLyoKICAqIGNvbG9yIGZvcm1hdCBsaXN0CiAgKi8KLSNkZWZpbmUgVF9ZVVlWIDAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCBvdjc3MnhfY2ZtdHNbXSA9IHsKLQlbVF9ZVVlWXSA9IHsKKwl7CiAJCVNFVEZPVVJDQyhZVVlWKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9ZWVVWX3JlZ3MsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSBTV0FQX1lVViwKKwkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoWVZZVSksCi0JCS5yZWdzICAgPSBvdjc3MnhfWVlVVl9yZWdzLAotCQkub3B0aW9uID0gT1BfVVYsCisJCS5kc3AzICAgPSBVVl9PTiwKKwkJLmNvbTMgICA9IFNXQVBfWVVWLAorCQkuY29tNyAgID0gT0ZNVF9ZVVYsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhVWVZZKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9VVllZX3JlZ3MsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSAweDAsCisJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFJHQjU1NSksCi0JCS5yZWdzICAgPSBvdjc3MnhfUkdCNTU1X3JlZ3MsCi0JCS5vcHRpb24gPSBPUF9TV0FQX1JHQiwKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IFNXQVBfUkdCLAorCQkuY29tNyAgID0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoUkdCNTU1WCksCi0JCS5yZWdzICAgPSBvdjc3MnhfUkdCNTU1X3JlZ3MsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSAweDAsCisJCS5jb203ICAgPSBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NjUpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU2NV9yZWdzLAotCQkub3B0aW9uID0gT1BfU1dBUF9SR0IsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSBTV0FQX1JHQiwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NjUgfCBPRk1UX1JHQiwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFJHQjU2NVgpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU2NV9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gMHgwLAorCQkuY29tNyAgID0gRk1UX1JHQjU2NSB8IE9GTVRfUkdCLAogCX0sCiB9OwogCkBAIC01NjIsNiArNTQzLDI3IEBACiAJLnJlZ3MgICAgID0gb3Y3NzJ4X3F2Z2FfcmVncywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgb3Y3NzJ4X2NvbnRyb2xzW10gPSB7CisJeworCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIFZlcnRpY2FsbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIEhvcml6b250YWxseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwKK307CisKIAogLyoKICAqIGdlbmVyYWwgZnVuY3Rpb24KQEAgLTU4Nyw4ICs1ODksMTEgQEAKIAkJCQkJICB1OCAgc2V0KQogewogCXMzMiB2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKwogCXZhbCAmPSB+bWFzazsKLQl2YWwgfD0gIHNldDsKKwl2YWwgfD0gc2V0ICYgbWFzazsKIAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCwgdmFsKTsKIH0KQEAgLTYzNSw3NCArNjQwLDI0IEBACiBzdGF0aWMgaW50IG92NzcyeF9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQlpbnQgICAgICAgICAgICAgICAgIHJldDsKIAotCWlmICghcHJpdi0+d2luKQotCQlwcml2LT53aW4gPSAmb3Y3NzJ4X3dpbl92Z2E7Ci0JaWYgKCFwcml2LT5mbXQpCi0JCXByaXYtPmZtdCA9ICZvdjc3MnhfY2ZtdHNbVF9ZVVlWXTsKLQotCS8qCi0JICogcmVzZXQgaGFyZHdhcmUKLQkgKi8KLQlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKLQotCS8qCi0JICogc2V0IGNvbG9yIGZvcm1hdAotCSAqLwotCXJldCA9IG92NzcyeF93cml0ZV9hcnJheShwcml2LT5jbGllbnQsIHByaXYtPmZtdC0+cmVncyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gc3RhcnRfZW5kOwotCi0JLyoKLQkgKiBzZXQgc2l6ZSBmb3JtYXQKLQkgKi8KLQlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHN0YXJ0X2VuZDsKLQotCS8qCi0JICogc2V0IENPTTcgYml0ICggUVZHQSBvciBWR0EgKQotCSAqLwotCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCi0JCQkgICAgICBDT003LCBTTENUX01BU0ssIHByaXYtPndpbi0+Y29tN19iaXQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHN0YXJ0X2VuZDsKLQotCS8qCi0JICogc2V0IFVWIHNldHRpbmcKLQkgKi8KLQlpZiAocHJpdi0+Zm10LT5vcHRpb24gJiBPUF9VVikgewotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAotCQkJCSAgICAgIERTUF9DVFJMMywgVVZfTUFTSywgVVZfT04pOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gc3RhcnRfZW5kOworCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5mbXQpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJub3JtIG9yIHdpbiBzZWxlY3QgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCS8qCi0JICogc2V0IFNXQVAgc2V0dGluZwotCSAqLwotCWlmIChwcml2LT5mbXQtPm9wdGlvbiAmIE9QX1NXQVBfUkdCKSB7Ci0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCi0JCQkJICAgICAgQ09NMywgU1dBUF9NQVNLLCBTV0FQX1JHQik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBzdGFydF9lbmQ7Ci0JfQorCW92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTIsIFNPRlRfU0xFRVBfTU9ERSwgMCk7CiAKIAlkZXZfZGJnKCZpY2QtPmRldiwKIAkJICJmb3JtYXQgJXMsIHdpbiAlc1xuIiwgcHJpdi0+Zm10LT5uYW1lLCBwcml2LT53aW4tPm5hbWUpOwogCi1zdGFydF9lbmQ6Ci0JcHJpdi0+Zm10ID0gTlVMTDsKLQlwcml2LT53aW4gPSBOVUxMOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvdjc3Mnhfc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIFNPRlRfU0xFRVBfTU9ERSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOCwxMSArNjczLDU0IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gcHJpdi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fTUFTVEVSIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8Ci0JCXByaXYtPmluZm8tPmJ1c3dpZHRoOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgcHJpdi0+aW5mby0+YnVzd2lkdGg7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgb3Y3NzJ4X2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJY3RybC0+dmFsdWUgPSBwcml2LT5mbGFnX3ZmbGlwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQljdHJsLT52YWx1ZSA9IHByaXYtPmZsYWdfaGZsaXA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlpbnQgcmV0ID0gMDsKKwl1OCB2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJdmFsID0gY3RybC0+dmFsdWUgPyBWRkxJUF9JTUcgOiAweDAwOworCQlwcml2LT5mbGFnX3ZmbGlwID0gY3RybC0+dmFsdWU7CisJCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX1ZGTElQKQorCQkJdmFsIF49IFZGTElQX0lNRzsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMywgVkZMSVBfSU1HLCB2YWwpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQl2YWwgPSBjdHJsLT52YWx1ZSA/IEhGTElQX0lNRyA6IDB4MDA7CisJCXByaXYtPmZsYWdfaGZsaXAgPSBjdHJsLT52YWx1ZTsKKwkJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfSEZMSVApCisJCQl2YWwgXj0gSEZMSVBfSU1HOworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00zLCBIRkxJUF9JTUcsIHZhbCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgb3Y3NzJ4X2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgICAqaWQpCiB7CkBAIC03ODcsMTMgKzc4NSwxMSBAQAogCXJldHVybiB3aW47CiB9CiAKLQotc3RhdGljIGludCBvdjc3Mnhfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgX191MzIgICAgICAgICAgICAgICAgICAgICBwaXhmbXQsCi0JCQkgIHN0cnVjdCB2NGwyX3JlY3QgICAgICAgICAqcmVjdCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9wYXJhbXMoc3RydWN0IG92NzcyeF9wcml2ICpwcml2LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCQkgICAgIHUzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwogCWludCByZXQgPSAtRUlOVkFMOworCXU4ICB2YWw7CiAJaW50IGk7CiAKIAkvKgpAQCAtODAzLDE3ICs3OTksOTkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjc3MnhfY2ZtdHMpOyBpKyspIHsKIAkJaWYgKHBpeGZtdCA9PSBvdjc3MnhfY2ZtdHNbaV0uZm91cmNjKSB7CiAJCQlwcml2LT5mbXQgPSBvdjc3MnhfY2ZtdHMgKyBpOwotCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmICghcHJpdi0+Zm10KQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCiAJLyoKIAkgKiBzZWxlY3Qgd2luCiAJICovCi0JcHJpdi0+d2luID0gb3Y3NzJ4X3NlbGVjdF93aW4ocmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisJcHJpdi0+d2luID0gb3Y3NzJ4X3NlbGVjdF93aW4od2lkdGgsIGhlaWdodCk7CisKKwkvKgorCSAqIHJlc2V0IGhhcmR3YXJlCisJICovCisJb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisKKwkvKgorCSAqIHNldCBzaXplIGZvcm1hdAorCSAqLworCXJldCA9IG92NzcyeF93cml0ZV9hcnJheShwcml2LT5jbGllbnQsIHByaXYtPndpbi0+cmVncyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CisKKwkvKgorCSAqIHNldCBEU1BfQ1RSTDMKKwkgKi8KKwl2YWwgPSBwcml2LT5mbXQtPmRzcDM7CisJaWYgKHZhbCkgeworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQkJCSAgICAgIERTUF9DVFJMMywgVVZfTUFTSywgdmFsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCX0KKworCS8qCisJICogc2V0IENPTTMKKwkgKi8KKwl2YWwgPSBwcml2LT5mbXQtPmNvbTM7CisJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfVkZMSVApCisJCXZhbCB8PSBWRkxJUF9JTUc7CisJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfSEZMSVApCisJCXZhbCB8PSBIRkxJUF9JTUc7CisJaWYgKHByaXYtPmZsYWdfdmZsaXApCisJCXZhbCBePSBWRkxJUF9JTUc7CisJaWYgKHByaXYtPmZsYWdfaGZsaXApCisJCXZhbCBePSBIRkxJUF9JTUc7CisKKwlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQkJICAgICAgQ09NMywgU1dBUF9NQVNLIHwgSU1HX01BU0ssIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CisKKwkvKgorCSAqIHNldCBDT003CisJICovCisJdmFsID0gcHJpdi0+d2luLT5jb203X2JpdCB8IHByaXYtPmZtdC0+Y29tNzsKKwlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQkJICAgICAgQ09NNywgKFNMQ1RfTUFTSyB8IEZNVF9NQVNLIHwgT0ZNVF9NQVNLKSwKKwkJCSAgICAgIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKIAlyZXR1cm4gcmV0OworCitvdjc3Mnhfc2V0X2ZtdF9lcnJvcjoKKworCW92NzcyeF9yZXNldChwcml2LT5jbGllbnQpOworCXByaXYtPndpbiA9IE5VTEw7CisJcHJpdi0+Zm10ID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisKKwlpZiAoIXByaXYtPmZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gb3Y3NzJ4X3NldF9wYXJhbXMocHJpdiwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwKKwkJCQkgcHJpdi0+Zm10LT5mb3VyY2MpOworfQorCitzdGF0aWMgaW50IG92NzcyeF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJcmV0dXJuIG92NzcyeF9zZXRfcGFyYW1zKHByaXYsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0LAorCQkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIH0KIAogc3RhdGljIGludCBvdjc3MnhfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKQEAgLTg4OSw3ICs5NjcsNiBAQAogCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgTUlESCksCiAJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBNSURMKSk7CiAKLQogCXJldHVybiBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CiB9CiAKQEAgLTkwNiwxMCArOTgzLDE1IEBACiAJLnJlbGVhc2UJCT0gb3Y3NzJ4X3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gb3Y3NzJ4X3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBvdjc3Mnhfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBvdjc3Mnhfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gb3Y3NzJ4X3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gb3Y3NzJ4X3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gb3Y3NzJ4X3NldF9idXNfcGFyYW0sCiAJLnF1ZXJ5X2J1c19wYXJhbQk9IG92NzcyeF9xdWVyeV9idXNfcGFyYW0sCisJLmNvbnRyb2xzCQk9IG92NzcyeF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUob3Y3NzJ4X2NvbnRyb2xzKSwKKwkuZ2V0X2NvbnRyb2wJCT0gb3Y3NzJ4X2dldF9jb250cm9sLAorCS5zZXRfY29udHJvbAkJPSBvdjc3Mnhfc2V0X2NvbnRyb2wsCiAJLmdldF9jaGlwX2lkCQk9IG92NzcyeF9nZXRfY2hpcF9pZCwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJLmdldF9yZWdpc3RlcgkJPSBvdjc3MnhfZ2V0X3JlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKaW5kZXggYzg0MWY0ZS4uZDU3M2Q4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCkBAIC0xNSw2ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJvdmNhbWNoaXBfcHJpdi5oIgogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4yNyBmb3IgTGludXggMi42IgpAQCAtNDQsNiArNDcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiAvKiBSZWdpc3RlcnMgY29tbW9uIHRvIGFsbCBjaGlwcywgdGhhdCBhcmUgbmVlZGVkIGZvciBkZXRlY3Rpb24gKi8KICNkZWZpbmUgR0VORVJJQ19SRUdfSURfSElHSCAgICAgICAweDFDCS8qIG1hbnVmYWN0dXJlciBJRCBNU0IgKi8KICNkZWZpbmUgR0VORVJJQ19SRUdfSURfTE9XICAgICAgICAweDFECS8qIG1hbnVmYWN0dXJlciBJRCBMU0IgKi8KQEAgLTYxLDEwICs2NSw2IEBACiAJW0NDX09WNjYzMEFGXQk9ICJPVjY2MzBBRiIsCiB9OwogCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGludCBvdl93cml0ZV9yZWd2YWxzKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3JlZ3ZhbHMgKnJ2YWxzKQpAQCAtMjUzLDExMiArMjUzLDM2IEBACiAKIAkvKiBUZXN0IGZvciA3eHgwICovCiAJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjd4eDAiKTsKLQljLT5hZGRyID0gT1Y3eHgwX1NJRDsKLQlpZiAoaW5pdF9jYW1jaGlwKGMpIDwgMCkgewotCQkvKiBUZXN0IGZvciA2eHgwICovCi0JCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY2eHgwIik7Ci0JCWMtPmFkZHIgPSBPVjZ4eDBfU0lEOwotCQlpZiAoaW5pdF9jYW1jaGlwKGMpIDwgMCkgewotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAob3Y2eHgwX2RldGVjdChjKSA8IDApIHsKLQkJCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WNnh4MCIpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoaW5pdF9jYW1jaGlwKGMpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyogNy1iaXQgYWRkcmVzc2VzIHdpdGggYml0IDAgc2V0IGFyZSBmb3IgdGhlIE9WN3h4MCAqLworCWlmIChjLT5hZGRyICYgMSkgewogCQlpZiAob3Y3eHgwX2RldGVjdChjKSA8IDApIHsKIAkJCVBFUlJPUigiRmFpbGVkIHRvIGluaXQgT1Y3eHgwIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCQlyZXR1cm4gMDsKIAl9Ci0KKwkvKiBUZXN0IGZvciA2eHgwICovCisJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjZ4eDAiKTsKKwlpZiAob3Y2eHgwX2RldGVjdChjKSA8IDApIHsKKwkJUEVSUk9SKCJGYWlsZWQgdG8gaW5pdCBPVjZ4eDAiKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IG92Y2FtY2hpcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGxvbmcgb3ZjYW1jaGlwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBvdmNhbWNoaXAgKm92OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwotCi0JLyogSTJDIGlzIG5vdCBhIFBuUCBidXMsIHNvIHdlIGNhbiBuZXZlciBiZSBjZXJ0YWluIHRoYXQgd2UncmUgdGFsa2luZwotCSAqIHRvIHRoZSByaWdodCBjaGlwLiBUbyBwcmV2ZW50IGRhbWFnZSB0byBFRVBST01TIGFuZCBzdWNoLCBvbmx5Ci0JICogYXR0YWNoIHRvIGFkYXB0ZXJzIHRoYXQgYXJlIGtub3duIHRvIGNvbnRhaW4gT1YgY2FtZXJhIGNoaXBzLiAqLwotCi0Jc3dpdGNoIChhZGFwLT5pZCkgewotCWNhc2UgSTJDX0hXX1NNQlVTX09WNTExOgotCWNhc2UgSTJDX0hXX1NNQlVTX09WNTE4OgotCWNhc2UgSTJDX0hXX1NNQlVTX1c5OTY4Q0Y6Ci0JCVBERUJVRygxLCAiQWRhcHRlciBJRCAweCUwNnggYWNjZXB0ZWQiLCBhZGFwLT5pZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygxLCAiQWRhcHRlciBJRCAweCUwNnggcmVqZWN0ZWQiLCBhZGFwLT5pZCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWMgPSBrbWFsbG9jKHNpemVvZiAqYywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBub19jbGllbnQ7Ci0JfQotCW1lbWNweShjLCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2YgKmMpOwotCWMtPmFkYXB0ZXIgPSBhZGFwOwotCXN0cmNweShjLT5uYW1lLCAiT1Y/Pz8/Iik7Ci0KLQlvdiA9IGt6YWxsb2Moc2l6ZW9mICpvdiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvdikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gbm9fb3Y7Ci0JfQotCWkyY19zZXRfY2xpZW50ZGF0YShjLCBvdik7Ci0KLQlyYyA9IG92Y2FtY2hpcF9kZXRlY3QoYyk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBlcnJvcjsKLQotCXN0cmNweShjLT5uYW1lLCBjaGlwX25hbWVzW292LT5zdWJ0eXBlXSk7Ci0KLQlQREVCVUcoMSwgIkNhbWVyYSBjaGlwIGRldGVjdGlvbiBjb21wbGV0ZSIpOwotCi0JaTJjX2F0dGFjaF9jbGllbnQoYyk7Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcjoKLQlrZnJlZShvdik7Ci1ub19vdjoKLQlrZnJlZShjKTsKLW5vX2NsaWVudDoKLQlQREVCVUcoMSwgInJldHVybmluZyAlZCIsIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgb3ZjYW1jaGlwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IG92LT5zb3BzLT5mcmVlKGMpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWkyY19kZXRhY2hfY2xpZW50KGMpOwotCi0Ja2ZyZWUob3YpOwotCWtmcmVlKGMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92Y2FtY2hpcF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IG92Y2FtY2hpcCAqb3YgPSB0b19vdmNhbWNoaXAoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKIAlpZiAoIW92LT5pbml0aWFsaXplZCAmJgogCSAgICBjbWQgIT0gT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEUgJiYKIAkgICAgY21kICE9IE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSkgewotCQlkZXZfZXJyKCZjLT5kZXYsICJFUlJPUjogQ2FtZXJhIGNoaXAgbm90IGluaXRpYWxpemVkIHlldCFcbiIpOworCQl2NGwyX2VycihzZCwgIkNhbWVyYSBjaGlwIG5vdCBpbml0aWFsaXplZCB5ZXQhXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTM3OSwxMCArMzAzLDEwIEBACiAKIAkJaWYgKG92LT5tb25vKSB7CiAJCQlpZiAob3YtPnN1YnR5cGUgIT0gQ0NfT1Y3NjIwKQotCQkJCWRldl93YXJuKCZjLT5kZXYsICJXYXJuaW5nOiBNb25vY2hyb21lIG5vdCAiCisJCQkJdjRsMl93YXJuKHNkLCAiTW9ub2Nocm9tZSBub3QgIgogCQkJCQkiaW1wbGVtZW50ZWQgZm9yIHRoaXMgY2hpcFxuIik7CiAJCQllbHNlCi0JCQkJZGV2X2luZm8oJmMtPmRldiwgIkluaXRpYWxpemluZyBjaGlwIGFzICIKKwkJCQl2NGwyX2luZm8oc2QsICJJbml0aWFsaXppbmcgY2hpcCBhcyAiCiAJCQkJCSJtb25vY2hyb21lXG4iKTsKIAkJfQogCkBAIC00MDAsMzUgKzMyNCw3MiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0JCSJvdmNhbWNoaXAiLAotCX0sCi0JLmlkID0JCQlJMkNfRFJJVkVSSURfT1ZDQU1DSElQLAotCS5hdHRhY2hfYWRhcHRlciA9CW92Y2FtY2hpcF9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQgPQlvdmNhbWNoaXBfZGV0YWNoLAotCS5jb21tYW5kID0JCW92Y2FtY2hpcF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBvdmNhbWNoaXBfY29yZV9vcHMgPSB7CisJLmlvY3RsID0gb3ZjYW1jaGlwX2lvY3RsLAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9CQkiKHVuc2V0KSIsCi0JLmRyaXZlciA9CSZkcml2ZXIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdmNhbWNoaXBfb3BzID0geworCS5jb3JlID0gJm92Y2FtY2hpcF9jb3JlX29wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG92Y2FtY2hpcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IG92Y2FtY2hpcF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotI2lmZGVmIERFQlVHCi0Jb3ZjYW1jaGlwX2RlYnVnID0gZGVidWc7Ci0jZW5kaWYKKwlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCWludCByYyA9IDA7CiAKLQlQSU5GTyhEUklWRVJfVkVSU0lPTiAiIDogIiBEUklWRVJfREVTQyk7Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOworCW92ID0ga3phbGxvYyhzaXplb2YgKm92LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW92KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19vdjsKKwl9CisJc2QgPSAmb3YtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZvdmNhbWNoaXBfb3BzKTsKKworCXJjID0gb3ZjYW1jaGlwX2RldGVjdChjbGllbnQpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwl2NGxfaW5mbyhjbGllbnQsICIlcyBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJY2hpcF9uYW1lc1tvdi0+c3VidHlwZV0sIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJUERFQlVHKDEsICJDYW1lcmEgY2hpcCBkZXRlY3Rpb24gY29tcGxldGUiKTsKKworCXJldHVybiByYzsKK2Vycm9yOgorCWtmcmVlKG92KTsKK25vX292OgorCVBERUJVRygxLCAicmV0dXJuaW5nICVkIiwgcmMpOworCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG92Y2FtY2hpcF9leGl0KHZvaWQpCitzdGF0aWMgaW50IG92Y2FtY2hpcF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92Y2FtY2hpcCAqb3YgPSB0b19vdmNhbWNoaXAoc2QpOworCWludCByYzsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlyYyA9IG92LT5zb3BzLT5mcmVlKGNsaWVudCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJa2ZyZWUob3YpOworCXJldHVybiAwOwogfQogCi1tb2R1bGVfaW5pdChvdmNhbWNoaXBfaW5pdCk7Ci1tb2R1bGVfZXhpdChvdmNhbWNoaXBfZXhpdCk7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgb3ZjYW1jaGlwX2lkW10gPSB7CisJeyAib3ZjYW1jaGlwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBvdmNhbWNoaXBfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAib3ZjYW1jaGlwIiwKKwkucHJvYmUgPSBvdmNhbWNoaXBfcHJvYmUsCisJLnJlbW92ZSA9IG92Y2FtY2hpcF9yZW1vdmUsCisJLmlkX3RhYmxlID0gb3ZjYW1jaGlwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCmluZGV4IGEwNTY1MGYuLjRmMDdiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBfX0xJTlVYX09WQ0FNQ0hJUF9QUklWX0gKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvb3ZjYW1jaGlwLmg+CiAKICNpZmRlZiBERUJVRwpAQCAtNDYsNiArNDcsNyBAQAogfTsKIAogc3RydWN0IG92Y2FtY2hpcCB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXN0cnVjdCBvdmNhbWNoaXBfb3BzICpzb3BzOwogCXZvaWQgKnNwcml2OyAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGF0YSBmb3IgT1Y3eDEwLmMgZXRjLi4uICovCiAJaW50IHN1YnR5cGU7ICAgICAgICAgICAgICAgLyogPSBTRU5fT1Y3NjEwIGV0Yy4uLiAqLwpAQCAtNTMsNiArNTUsMTEgQEAKIAlpbnQgaW5pdGlhbGl6ZWQ7ICAgICAgICAgICAvKiBPVkNBTUNISVBfQ01EX0lOSVRJQUxJWkUgd2FzIHN1Y2Nlc3NmdWwgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG92Y2FtY2hpcCAqdG9fb3ZjYW1jaGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92Y2FtY2hpcCwgc2QpOworfQorCiBleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDIwX29wczsKIGV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjZ4MzBfb3BzOwogZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gxMF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCmluZGV4IDg1NGMyYTguLmY5YjYwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCkBAIC00MCwxMCArNDAsMTAgQEAKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDA5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IERWQl9UREExMDA0OCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCisJc2VsZWN0IERWQl9UREExMDA0OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyOTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIERWQiBpbnRlcmZhY2UgZm9yIHRoZSBwdnJ1c2IyIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQppbmRleCA0ZmRhMmRlLi5kZTJmYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCkBAIC0yLDE0ICsyLDE1IEBACiBvYmotcHZydXNiMi1kZWJ1Z2lmYy0kKENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDKSA6PSBwdnJ1c2IyLWRlYnVnaWZjLm8KIG9iai1wdnJ1c2IyLWR2Yi0kKENPTkZJR19WSURFT19QVlJVU0IyX0RWQikgOj0gcHZydXNiMi1kdmIubwogCi1wdnJ1c2IyLW9ianMJOj0gcHZydXNiMi1pMmMtY29yZS5vIHB2cnVzYjItaTJjLWNtZC12NGwyLm8gXAotCQkgICBwdnJ1c2IyLWF1ZGlvLm8gcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5vIFwKK3B2cnVzYjItb2Jqcwk6PSBwdnJ1c2IyLWkyYy1jb3JlLm8gXAorCQkgICBwdnJ1c2IyLWF1ZGlvLm8gXAogCQkgICBwdnJ1c2IyLWVuY29kZXIubyBwdnJ1c2IyLXZpZGVvLXY0bC5vIFwKLQkJICAgcHZydXNiMi1lZXByb20ubyBwdnJ1c2IyLXR1bmVyLm8gXAorCQkgICBwdnJ1c2IyLWVlcHJvbS5vIFwKIAkJICAgcHZydXNiMi1tYWluLm8gcHZydXNiMi1oZHcubyBwdnJ1c2IyLXY0bDIubyBcCiAJCSAgIHB2cnVzYjItY3RybC5vIHB2cnVzYjItc3RkLm8gcHZydXNiMi1kZXZhdHRyLm8gXAogCQkgICBwdnJ1c2IyLWNvbnRleHQubyBwdnJ1c2IyLWlvLm8gcHZydXNiMi1pb3JlYWQubyBcCiAJCSAgIHB2cnVzYjItY3gyNTg0eC12NGwubyBwdnJ1c2IyLXdtODc3NS5vIFwKKwkJICAgcHZydXNiMi1jczUzbDMyYS5vIFwKIAkJICAgJChvYmotcHZydXNiMi1kdmIteSkgXAogCQkgICAkKG9iai1wdnJ1c2IyLXN5c2ZzLXkpICQob2JqLXB2cnVzYjItZGVidWdpZmMteSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKaW5kZXggY2RlZGFhNS4uY2NmMmEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCkBAIC0yNiwxNCArMjYsNiBAQAogI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCi1zdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciBpMmNfaGFuZGxlcjsKLQl1bnNpZ25lZCBsb25nIHN0YWxlX21hc2s7Ci19OwotCi0KIAogc3RydWN0IHJvdXRpbmdfc2NoZW1lIHsKIAljb25zdCBpbnQgKmRlZjsKQEAgLTYzLDEyMyArNTUsMzMgQEAKIAl9LAogfTsKIAotLyogVGhpcyBmdW5jdGlvbiBzZWxlY3RzIHRoZSBjb3JyZWN0IGF1ZGlvIGlucHV0IHNvdXJjZSAqLwotc3RhdGljIHZvaWQgc2V0X3N0ZXJlbyhzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCit2b2lkIHB2cjJfbXNwMzQwMF9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKLQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwkJY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKKwkJdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKIAotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIG1zcDM0MDAgdjRsMiBzZXRfc3RlcmVvIik7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiBtc3AzNDAwIHY0bDIgc2V0X3N0ZXJlbyIpOwogCi0JaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCi0JICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgewotCQlyb3V0ZS5pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdOwotCX0gZWxzZSB7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAotCQkJICAgIioqKiBXQVJOSU5HICoqKiBpMmMgbXNwMzQwMCB2NGwyIHNldF9zdGVyZW86IgotCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkgYW5kL29yIGlucHV0ICglZCkiLAotCQkJICAgc2lkLGhkdy0+aW5wdXRfdmFsKTsKLQkJcmV0dXJuOwotCX0KLQlyb3V0ZS5vdXRwdXQgPSBNU1BfT1VUUFVUKE1TUF9TQ19JTl9EU1BfU0NBUlQxKTsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfc3RlcmVvKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eTsKLX0KLQotCi1zdHJ1Y3QgcHZyMl9tc3AzNDAwX29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICopOwotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKik7Ci19OwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9tc3AzNDAwX29wcyBtc3AzNDAwX29wc1tdID0gewotCXsgLnVwZGF0ZSA9IHNldF9zdGVyZW8sIC5jaGVjayA9IGNoZWNrX3N0ZXJlb30sCi19OwotCi0KLXN0YXRpYyBpbnQgbXNwMzQwMF9jaGVjayhzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShtc3AzNDAwX29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7Ci0JCWlmIChtc3AzNDAwX29wc1tpZHhdLmNoZWNrKGN0eHQpKSB7Ci0JCQljdHh0LT5zdGFsZV9tYXNrIHw9IG1zazsKKwkJaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCisJCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgeworCQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKKwkJfSBlbHNlIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSAgICIqKiogV0FSTklORyAqKiogc3ViZGV2IG1zcDM0MDAgc2V0X2lucHV0OiIKKwkJCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSIKKwkJCQkgICAiIGFuZC9vciBpbnB1dCAoJWQpIiwKKwkJCQkgICBzaWQsIGhkdy0+aW5wdXRfdmFsKTsKKwkJCXJldHVybjsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIG1zcDM0MDBfdXBkYXRlKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKG1zcDM0MDBfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmICghKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJY3R4dC0+c3RhbGVfbWFzayAmPSB+bXNrOwotCQltc3AzNDAwX29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVChNU1BfU0NfSU5fRFNQX1NDQVJUMSk7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIHB2cjJfbXNwMzQwMF9kZXRhY2goc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQotewotCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0Ja2ZyZWUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX21zcDM0MDBfZGVzY3JpYmUoc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0LAotCQkJCQkgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi1hdWRpbyB2NGwyIik7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBtc3AzNDAwX2Z1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX21zcDM0MDBfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpbXNwMzQwMF9jaGVjaywKLQkudXBkYXRlID0gKHZvaWQgKCopKHZvaWQgKikpbXNwMzQwMF91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKXB2cjJfbXNwMzQwMF9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX21zcDM0MDBfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0OwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5pMmNfaGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfdGFibGUgPSAmbXNwMzQwMF9mdW5jczsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUobXNwMzQwMF9vcHMpKSAtIDE7Ci0JY3AtPmhhbmRsZXIgPSAmY3R4dC0+aTJjX2hhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCBtc3AzNDAwIFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKICAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaAppbmRleCBhYzU0ZWVkLi5lM2U2M2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmgKQEAgLTIyLDEwICsyMiw4IEBACiAjaWZuZGVmIF9fUFZSVVNCMl9BVURJT19ICiAjZGVmaW5lIF9fUFZSVVNCMl9BVURJT19ICiAKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCi0KLWludCBwdnIyX2kyY19tc3AzNDAwX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgordm9pZCBwdnIyX21zcDM0MDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICopOwogI2VuZGlmIC8qIF9fUFZSVVNCMl9BVURJT19IICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWMzNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworLyoKKworICAgVGhpcyBzb3VyY2UgZmlsZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlCisgICB2NGwtZHZiIGNzNTNsMzJhIG1vZHVsZS4KKworKi8KKworI2luY2x1ZGUgInB2cnVzYjItY3M1M2wzMmEuaCIKKworCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IHJvdXRpbmdfc2NoZW1lIHsKKwljb25zdCBpbnQgKmRlZjsKKwl1bnNpZ25lZCBpbnQgY250OworfTsKKworCitzdGF0aWMgY29uc3QgaW50IHJvdXRpbmdfc2NoZW1lMVtdID0geworCVtQVlIyX0NWQUxfSU5QVVRfVFZdID0gMiwgIC8qIDEgb3IgMiBzZWVtcyB0byB3b3JrIGhlcmUgKi8KKwlbUFZSMl9DVkFMX0lOUFVUX1JBRElPXSA9IDIsCisJW1BWUjJfQ1ZBTF9JTlBVVF9DT01QT1NJVEVdID0gMCwKKwlbUFZSMl9DVkFMX0lOUFVUX1NWSURFT10gPSAgMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgcm91dGluZ19zY2hlbWVzW10gPSB7CisJW1BWUjJfUk9VVElOR19TQ0hFTUVfT05BSVJdID0geworCQkuZGVmID0gcm91dGluZ19zY2hlbWUxLAorCQkuY250ID0gQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZTEpLAorCX0sCit9OworCisKK3ZvaWQgcHZyMl9jczUzbDMyYV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwkJY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKKwkJdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2lucHV0KCVkKSIsCisJCQkgICBoZHctPmlucHV0X3ZhbCk7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiB2NGwyIHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CisJCX0KKwkJcm91dGUub3V0cHV0ID0gMDsKKwkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKKwl9Cit9CisKKworLyoKKyAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKKyAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCisgICoqKiBtb2RlOiBjICoqKgorICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgorICAqKiogdGFiLXdpZHRoOiA4ICoqKgorICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCisgICoqKiBFbmQ6ICoqKgorICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuaAppbmRleCBlZjRhZmFmLi41M2JhNTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmgKQEAgLTIsNiArMiw3IEBACiAgKgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNywxNCArMTgsMjQgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKgogICovCi0jaWZuZGVmIF9fUFZSVVNCMl9UVU5FUl9ICi0jZGVmaW5lIF9fUFZSVVNCMl9UVU5FUl9ICiAKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCisjaWZuZGVmIF9fUFZSVVNCMl9DUzUzTDMyQV9ICisjZGVmaW5lIF9fUFZSVVNCMl9DUzUzTDMyQV9ICiAKLWludCBwdnIyX2kyY190dW5lcl9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOworLyoKIAotI2VuZGlmIC8qIF9fUFZSVVNCMl9UVU5FUl9IICovCisgICBUaGlzIG1vZHVsZSBjb25uZWN0cyB0aGUgcHZydXNiMiBkcml2ZXIgdG8gdGhlIEkyQyBjaGlwIGxldmVsCisgICBkcml2ZXIgd2hpY2ggaGFuZGxlcyBkZXZpY2UgdmlkZW8gcHJvY2Vzc2luZy4gIFRoaXMgaW50ZXJmYWNlIGlzCisgICB1c2VkIGludGVybmFsbHkgYnkgdGhlIGRyaXZlcjsgaGlnaGVyIGxldmVsIGNvZGUgc2hvdWxkIG9ubHkKKyAgIGludGVyYWN0IHRocm91Z2ggdGhlIGludGVyZmFjZSBwcm92aWRlZCBieSBwdnJ1c2IyLWhkdy5oLgorCisqLworCisKKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgordm9pZCBwdnIyX2NzNTNsMzJhX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqKTsKKworI2VuZGlmIC8qIF9fUFZSVVNCMl9BVURJT19DUzUzTDMyQV9IICovCiAKIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYwppbmRleCA4OTU4NTllLi40ZTAxN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgInB2cnVzYjItY3gyNTg0eC12NGwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCiAKIAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCkBAIC0zOSwxNCArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi1zdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCB7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaGFuZGxlcjsKLQlzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgY3RybDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQogCiBzdHJ1Y3Qgcm91dGluZ19zY2hlbWVfaXRlbSB7CiAJaW50IHZpZDsKQEAgLTExMCwyMTggKzEwMSw0NCBAQAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBzZXRfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCit2b2lkIHB2cjJfY3gyNTg0MF9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHZpZF9pbnB1dDsKLQllbnVtIGN4MjU4NDBfYXVkaW9faW5wdXQgYXVkX2lucHV0OwotCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7Ci0JdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgY3gyNTg0eCB1cGRhdGUuLi4iKTsKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJCWVudW0gY3gyNTg0MF92aWRlb19pbnB1dCB2aWRfaW5wdXQ7CisJCWVudW0gY3gyNTg0MF9hdWRpb19pbnB1dCBhdWRfaW5wdXQ7CisJCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7CisJCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CiAKLQltZW1zZXQoJnJvdXRlLDAsc2l6ZW9mKHJvdXRlKSk7CisJCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOwogCi0JaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCi0JICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgewotCQl2aWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS52aWQ7Ci0JCWF1ZF9pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdLmF1ZDsKLQl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICIqKiogV0FSTklORyAqKiogaTJjIGN4MjU4NHggc2V0X2lucHV0OiIKLQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIGFuZC9vciBpbnB1dCAoJWQpIiwKLQkJCSAgIHNpZCxoZHctPmlucHV0X3ZhbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBjeDI1ODR4IHNldF9pbnB1dCB2aWQ9MHgleCBhdWQ9MHgleCIsCi0JCSAgIHZpZF9pbnB1dCxhdWRfaW5wdXQpOwotCXJvdXRlLmlucHV0ID0gKHUzMil2aWRfaW5wdXQ7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsJnJvdXRlKTsKLQlyb3V0ZS5pbnB1dCA9ICh1MzIpYXVkX2lucHV0OwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19pbnB1dChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eSAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHNldF9hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQl1MzIgdmFsOwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0eCBzZXRfYXVkaW8gJWQiLAotCQkgICBoZHctPnNyYXRlX3ZhbCk7Ci0Jc3dpdGNoIChoZHctPnNyYXRlX3ZhbCkgewotCWRlZmF1bHQ6Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDoKLQkJdmFsID0gNDgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA6Ci0JCXZhbCA9IDQ0MTAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwOgotCQl2YWwgPSAzMjAwMDsKLQkJYnJlYWs7Ci0JfQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwmdmFsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2F1ZGlvKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXJldHVybiBoZHctPnNyYXRlX2RpcnR5ICE9IDA7Ci19Ci0KLQotc3RydWN0IHB2cjJfdjRsX2N4MjU4NHhfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKik7Ci19OwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eF9vcHMgZGVjb2Rlcl9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfaW5wdXQsIC5jaGVjayA9IGNoZWNrX2lucHV0fSwKLQl7IC51cGRhdGUgPSBzZXRfYXVkaW8sIC5jaGVjayA9IGNoZWNrX2F1ZGlvfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9kZXRhY2goc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihjdHh0LT5oZHcsTlVMTCk7Ci0Ja2ZyZWUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIGludCBkZWNvZGVyX2NoZWNrKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwotCQlpZiAoZGVjb2Rlcl9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXZpZF9pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdLnZpZDsKKwkJCWF1ZF9pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdLmF1ZDsKKwkJfSBlbHNlIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSAgICIqKiogV0FSTklORyAqKiogc3ViZGV2IGN4MjU4NHggc2V0X2lucHV0OiIKKwkJCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSIKKwkJCQkgICAiIGFuZC9vciBpbnB1dCAoJWQpIiwKKwkJCQkgICBzaWQsIGhkdy0+aW5wdXRfdmFsKTsKKwkJCXJldHVybjsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQogCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfdXBkYXRlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCWRlY29kZXJfb3BzW2lkeF0udXBkYXRlKGN0eHQpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCisJCQkgICAic3ViZGV2IGN4MjU4NHggc2V0X2lucHV0IHZpZD0weCV4IGF1ZD0weCV4IiwKKwkJCSAgIHZpZF9pbnB1dCwgYXVkX2lucHV0KTsKKwkJcm91dGUuaW5wdXQgPSAodTMyKXZpZF9pbnB1dDsKKwkJc2QtPm9wcy0+dmlkZW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKKwkJcm91dGUuaW5wdXQgPSAodTMyKWF1ZF9pbnB1dDsKKwkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKIAotc3RhdGljIHZvaWQgZGVjb2Rlcl9lbmFibGUoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQsaW50IGZsKQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NDAgZGVjb2Rlcl9lbmFibGUoJWQpIixmbCk7Ci0JcHZyMl92NGwyX2NtZF9zdHJlYW0oY3R4dC0+Y2xpZW50LGZsKTsKLX0KLQotCi1zdGF0aWMgaW50IGRlY29kZXJfZGV0ZWN0KHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCWludCByZXQ7Ci0JLyogQXR0ZW1wdCB0byBxdWVyeSB0aGUgZGVjb2RlciAtIGxldCdzIHNlZSBpZiBpdCB3aWxsIGFuc3dlciAqLwotCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxYzsKLQotCW1lbXNldCgmcWMsMCxzaXplb2YocWMpKTsKLQotCXFjLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKLQotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsVklESU9DX1FVRVJZQ1RSTCwmcWMpOwotCXJldHVybiByZXQgPT0gMDsgLyogUmV0dXJuIHRydWUgaWYgaXQgYW5zd2VyZWQgKi8KLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQsCi0JCQkJICAgICBjaGFyICpidWYsdW5zaWduZWQgaW50IGNudCkKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixjbnQsImhhbmRsZXI6IHB2cnVzYjItY3gyNTg0eC12NGwiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3Jlc2V0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCWludCByZXQ7Ci0JcmV0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9SRVNFVCxOVUxMKTsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBjeDI1ODQwIGRlY29kZXJfcmVzZXQgKHJldD0lZCkiLHJldCk7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBoZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpZGVjb2Rlcl9jaGVjaywKLQkudXBkYXRlID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKWRlY29kZXJfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY19jeDI1ODR4X3Y0bF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCSAgICAgICBzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dDsKLQotCWlmIChoZHctPmRlY29kZXJfY3RybCkgcmV0dXJuIDA7Ci0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQlpZiAoIWRlY29kZXJfZGV0ZWN0KGNwKSkgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aGFuZGxlci5mdW5jX3RhYmxlID0gJmhmdW5jczsKLQljdHh0LT5jdHJsLmN0eHQgPSBjdHh0OwotCWN0eHQtPmN0cmwuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl9kZXRhY2g7Ci0JY3R4dC0+Y3RybC5lbmFibGUgPSAodm9pZCAoKikodm9pZCAqLGludCkpZGVjb2Rlcl9lbmFibGU7Ci0JY3R4dC0+Y3RybC5mb3JjZV9yZXNldCA9ICh2b2lkICgqKSh2b2lkKikpZGVjb2Rlcl9yZXNldDsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpKSAtIDE7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoaGR3LCZjdHh0LT5jdHJsKTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOwotCXsKLQkJLyoKLQkJICBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IDE5LU5vdi0yMDA2IC0gVGhpcyBiaXQKLQkJICBvZiBudXR0aW5lc3MgZm9yIGN4MjU4NDAgY2F1c2VzIHRoYXQgbW9kdWxlIHRvCi0JCSAgY29ycmVjdGx5IHNldCB1cCBpdHMgdmlkZW8gc2NhbGluZy4gIFRoaXMgaXMgcmVhbGx5Ci0JCSAgYSBwcm9ibGVtIGluIHRoZSBjeDI1ODQwIG1vZHVsZSBpdHNlbGYsIGJ1dCB3ZSB3b3JrCi0JCSAgYXJvdW5kIGl0IGhlcmUuICBUaGUgcHJvYmxlbSBoYXMgbm90IGJlZW4gc2VlbiBpbgotCQkgIGl2dHYgYmVjYXVzZSB0aGVyZSBWQkkgaXMgc3VwcG9ydGVkIGFuZCBzZXQgdXAuICBXZQotCQkgIGRvbid0IGRvIFZCSSBoZXJlIChhdCBsZWFzdCBub3QgeWV0KSBhbmQgdGh1cyB3ZQotCQkgIG5ldmVyIGF0dGVtcHRlZCB0byBldmVuIHNldCBpdCB1cC4KLQkJICovCi0JCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0JCW1lbXNldCgmZm10LDAsc2l6ZW9mKGZtdCkpOwotCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOwotCQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfU19GTVQsJmZtdCk7Ci0JfQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggY3gyNTg0eCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KLQogCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmgKaW5kZXggNjZhYmY3Ny4uZTM1YzIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCkBAIC0zNCw5ICszNCw5IEBACiAKIAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAKLWludCBwdnIyX2kyY19jeDI1ODR4X3Y0bF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwordm9pZCBwdnIyX2N4MjU4NDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9DWDI1ODRYX1Y0TF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYwppbmRleCBjYTg5MmZiLi5mYmUzODU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnaWZjLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgogCiBzdHJ1Y3QgZGVidWdpZmNfbWFza19pdGVtIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMTQ3LDEwICsxNDYsNiBAQAogCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKIAljY250ID0gcHZyMl9oZHdfc3RhdGVfcmVwb3J0KGhkdyxidWYsYWNudCk7CiAJYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwotCWNjbnQgPSBzY25wcmludGYoYnVmLGFjbnQsIkF0dGFjaGVkIEkyQyBtb2R1bGVzOlxuIik7Ci0JYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwotCWNjbnQgPSBwdnIyX2kyY19yZXBvcnQoaGR3LGJ1ZixhY250KTsKLQliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAKIAlyZXR1cm4gYmNudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oCmluZGV4IGUyNGZmNTkuLjJmOGQ0NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaApAQCAtMjIsMTYgKzIyLDE2IEBACiAKIHN0cnVjdCBwdnIyX2hkdzsKIAotLyogTm9uLWludHJ1c2l2ZWx5IHByaW50IHNvbWUgdXNlZnVsIGRlYnVnZ2luZyBpbmZvIGZyb20gaW5zaWRlIHRoZQotICAgZHJpdmVyLiAgVGhpcyBzaG91bGQgd29yayBldmVuIGlmIHRoZSBkcml2ZXIgYXBwZWFycyB0byBiZQotICAgd2VkZ2VkLiAqLwotaW50IHB2cjJfZGVidWdpZmNfcHJpbnRfaW5mbyhzdHJ1Y3QgcHZyMl9oZHcgKiwKLQkJCSAgICAgY2hhciAqYnVmX3B0cix1bnNpZ25lZCBpbnQgYnVmX3NpemUpOwotCiAvKiBQcmludCBnZW5lcmFsIHN0YXR1cyBvZiBkcml2ZXIuICBUaGlzIHdpbGwgYWxzbyB0cmlnZ2VyIGEgcHJvYmUgb2YKICAgIHRoZSBVU0IgbGluay4gIFVubGlrZSBwcmludF9pbmZvKCksIHRoaXMgb25lIHN5bmNocm9uaXplcyB3aXRoIHRoZQogICAgZHJpdmVyIHNvIHRoZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgc2VsZi1jb25zaXN0ZW50IChidXQgaXQgd2lsbAogICAgaGFuZyBpZiB0aGUgZHJpdmVyIGlzIHdlZGdlZCkuICovCitpbnQgcHZyMl9kZWJ1Z2lmY19wcmludF9pbmZvKHN0cnVjdCBwdnIyX2hkdyAqLAorCQkJICAgICBjaGFyICpidWZfcHRyLCB1bnNpZ25lZCBpbnQgYnVmX3NpemUpOworCisvKiBOb24taW50cnVzaXZlbHkgcHJpbnQgc29tZSB1c2VmdWwgZGVidWdnaW5nIGluZm8gZnJvbSBpbnNpZGUgdGhlCisgICBkcml2ZXIuICBUaGlzIHNob3VsZCB3b3JrIGV2ZW4gaWYgdGhlIGRyaXZlciBhcHBlYXJzIHRvIGJlCisgICB3ZWRnZWQuICovCiBpbnQgcHZyMl9kZWJ1Z2lmY19wcmludF9zdGF0dXMoc3RydWN0IHB2cjJfaGR3ICosCiAJCQkgICAgICAgY2hhciAqYnVmX3B0cix1bnNpZ25lZCBpbnQgYnVmX3NpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKaW5kZXggY2JlMmEzNC4uMWNiNmEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwpAQCAtNDYsMTAgKzQ2LDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBIYXVwcGF1Z2UgUFZSLVVTQjIgTW9kZWwgMjl4eHggKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50XzI5eHh4W10gPSB7Ci0JIm1zcDM0MDAiLAotCSJzYWE3MTE1IiwKLQkidHVuZXIiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV8yOXh4eFtdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9NU1AzNDAwIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9ERU1PRCB9LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzI5eHh4W10gPSB7CkBAIC01OSw4ICs2MCw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfMjl4eHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBQVlIgVVNCMiBNb2RlbCBDYXRlZ29yeSAyOXh4eCIsCiAJCS5zaG9ydG5hbWUgPSAiMjl4eHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfMjl4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50XzI5eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV8yOXh4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzI5eHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc18yOXh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzI5eHh4KSwKIAkJLmZsYWdfaGFzX2hhdXBwYXVnZV9yb20gPSAhMCwKQEAgLTc3LDEwICs3OCwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogSGF1cHBhdWdlIFBWUi1VU0IyIE1vZGVsIDI0eHh4ICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF8yNHh4eFtdID0gewotCSJjeDI1ODQwIiwKLQkidHVuZXIiLAotCSJ3bTg3NzUiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV8yNHh4eFtdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NYMjU4NDAgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1dNODc3NSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0RFTU9EIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9mdzFfbmFtZXNfMjR4eHhbXSA9IHsKQEAgLTkwLDggKzkyLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV8yNHh4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIFBWUiBVU0IyIE1vZGVsIENhdGVnb3J5IDI0eHh4IiwKIAkJLnNob3J0bmFtZSA9ICIyNHh4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF8yNHh4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfMjR4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzI0eHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfMjR4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzI0eHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfMjR4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApAQCAtMTExLDE2ICsxMTMsMTYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEdPVFZJRVcgVVNCMi4wIERWRDIgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50X2dvdHZpZXdfMltdID0gewotCSJjeDI1ODQwIiwKLQkidHVuZXIiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV9nb3R2aWV3XzJbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9nb3R2aWV3XzIgPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJHb3R2aWV3IFVTQiAyLjAgRFZEIDIiLAogCQkuc2hvcnRuYW1lID0gImd2MiIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF9nb3R2aWV3XzIsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50X2dvdHZpZXdfMiksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfZ290dmlld18yLAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfZ290dmlld18yKSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKIAkJLmRlZmF1bHRfdHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAogCQkuZmxhZ19oYXNfYW5hbG9ndHVuZXIgPSAhMCwKQEAgLTE0MCw4ICsxNDIsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlX2dvdHZpZXdfMmQgPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJHb3R2aWV3IFVTQiAyLjAgRFZEIERlbHV4ZSIsCiAJCS5zaG9ydG5hbWUgPSAiZ3YyZCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF9nb3R2aWV3XzIsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50X2dvdHZpZXdfMiksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfZ290dmlld18yLAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfZ290dmlld18yKSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKIAkJLmRlZmF1bHRfdHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAogCQkuZmxhZ19oYXNfYW5hbG9ndHVuZXIgPSAhMCwKQEAgLTE4MSwyOSArMTgzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl9jcmVhdG9yX2ZlX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX2NyZWF0b3JfZmVfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfbGdkdDMzMDNfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX2xnaDA2eGZfYXR0YWNoLAogfTsKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfb25haXJfY3JlYXRvcltdID0gewotCSJzYWE3MTE1IiwKLQkidHVuZXIiLAotCSJjczUzbDMyYSIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpX29uYWlyX2NyZWF0b3JbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1IH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1M1M0wzMkEgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlX29uYWlyX2NyZWF0b3IgPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJPbkFpciBDcmVhdG9yIEh5YnJpZCBVU0IgdHVuZXIiLAogCQkuc2hvcnRuYW1lID0gIm9hYyIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF9vbmFpcl9jcmVhdG9yLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9vbmFpcl9jcmVhdG9yKSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV9vbmFpcl9jcmVhdG9yLAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfb25haXJfY3JlYXRvciksCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9MR19URFZTX0gwNlhGLAogCQkuZmxhZ19oYXNfYW5hbG9ndHVuZXIgPSAhMCwKIAkJLmZsYWdfaGFzX2NvbXBvc2l0ZSA9ICEwLAogCQkuZmxhZ19oYXNfc3ZpZGVvID0gITAsCiAJCS5mbGFnX2RpZ2l0YWxfcmVxdWlyZXNfY3gyMzQxNiA9ICEwLAotCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9IQVVQUEFVR0UsCisJCS5zaWduYWxfcm91dGluZ19zY2hlbWUgPSBQVlIyX1JPVVRJTkdfU0NIRU1FX09OQUlSLAogCQkuZGlnaXRhbF9jb250cm9sX3NjaGVtZSA9IFBWUjJfRElHSVRBTF9TQ0hFTUVfT05BSVIsCiAJCS5kZWZhdWx0X3N0ZF9tYXNrID0gVjRMMl9TVERfTlRTQ19NLAogI2lmZGVmIENPTkZJR19WSURFT19QVlJVU0IyX0RWQgpAQCAtMjQxLDI5ICsyNDMsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX3VzYjJfZmVfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfb25haXJfdXNiMl9mZV9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9sZ2R0MzMwMl9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfZmN2MTIzNmRfYXR0YWNoLAogfTsKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfb25haXJfdXNiMltdID0gewotCSJzYWE3MTE1IiwKLQkidHVuZXIiLAotCSJjczUzbDMyYSIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpX29uYWlyX3VzYjJbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1IH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1M1M0wzMkEgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlX29uYWlyX3VzYjIgPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJPbkFpciBVU0IyIEh5YnJpZCBVU0IgdHVuZXIiLAogCQkuc2hvcnRuYW1lID0gIm9hMiIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF9vbmFpcl91c2IyLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9vbmFpcl91c2IyKSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV9vbmFpcl91c2IyLAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfb25haXJfdXNiMiksCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX0ZDVjEyMzZELAogCQkuZmxhZ19oYXNfYW5hbG9ndHVuZXIgPSAhMCwKIAkJLmZsYWdfaGFzX2NvbXBvc2l0ZSA9ICEwLAogCQkuZmxhZ19oYXNfc3ZpZGVvID0gITAsCiAJCS5mbGFnX2RpZ2l0YWxfcmVxdWlyZXNfY3gyMzQxNiA9ICEwLAotCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9IQVVQUEFVR0UsCisJCS5zaWduYWxfcm91dGluZ19zY2hlbWUgPSBQVlIyX1JPVVRJTkdfU0NIRU1FX09OQUlSLAogCQkuZGlnaXRhbF9jb250cm9sX3NjaGVtZSA9IFBWUjJfRElHSVRBTF9TQ0hFTUVfT05BSVIsCiAJCS5kZWZhdWx0X3N0ZF9tYXNrID0gVjRMMl9TVERfTlRTQ19NLAogI2lmZGVmIENPTkZJR19WSURFT19QVlJVU0IyX0RWQgpAQCAtMzE0LDE1ICszMTYsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzczeHh4X2R2Yl9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83M3h4eF9kdmJfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfdGRhMTAwNDhfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyXzczeHh4X3RkYTE4MjcxXzgyOTVfYXR0YWNoLAogfTsKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfNzN4eHhbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfNzN4eHhbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIsCisJICAuaTJjX2FkZHJlc3NfbGlzdCA9ICJceDQyIn0sCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9mdzFfbmFtZXNfNzN4eHhbXSA9IHsKQEAgLTMzMiw4ICszMzUsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzczeHh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgSFZSLTE5MDAgTW9kZWwgQ2F0ZWdvcnkgNzN4eHgiLAogCQkuc2hvcnRuYW1lID0gIjczeHh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50XzczeHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF83M3h4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfNzN4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV83M3h4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfNzN4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc183M3h4eCksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCkBAIC00MTgsMjIgKzQyMSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUweHhfZHZiX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MHh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9zNWgxNDA5X2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTF4eF9kdmJfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUxeHhfZHZiX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX3M1aDE0MTFfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX3RkYTE4MjcxXzgyOTVfYXR0YWNoLAogfTsKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfNzV4eHhbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2Z3MV9uYW1lc183NXh4eFtdID0gewogCQkidjRsLXB2cnVzYjItNzN4eHgtMDEuZnciLAogfTsKQEAgLTQ0MSw4ICs0MzksOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzc1MHh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgSFZSLTE5NTAgTW9kZWwgQ2F0ZWdvcnkgNzUweHgiLAogCQkuc2hvcnRuYW1lID0gIjc1MHh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50Xzc1eHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF83NXh4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfNzN4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV83M3h4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfNzV4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc183NXh4eCksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCkBAIC00NjMsOCArNDYxLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV83NTF4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIEhWUi0xOTUwIE1vZGVsIENhdGVnb3J5IDc1MXh4IiwKIAkJLnNob3J0bmFtZSA9ICI3NTF4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF83NXh4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfNzV4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzczeHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfNzN4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzc1eHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfNzV4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCmluZGV4IGNiM2EzM2UuLjNlNTUzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKQEAgLTMzLDYgKzMzLDM0IEBACiAqLwogCiAKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfTlVMTCAwCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX01TUDM0MDAgMQorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwIDIKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfU0FBNzExNSAzCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX1RVTkVSIDQKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfQ1M1M0wzMkEgNQorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9XTTg3NzUgNgorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9ERU1PRCA3CisKK3N0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyB7CisJLyogT25lIG92ciBQVlIyX0NMSUVOVF9JRF94eHh4ICovCisJdW5zaWduZWQgY2hhciBtb2R1bGVfaWQ7CisKKwkvKiBOdWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2YgSTJDIGFkZHJlc3NlcyB0byB0cnkgaW4gb3JkZXIKKwkgICBpbml0aWFsaXplIHRoZSBtb2R1bGUuICBJdCdzIHNhZmUgdG8gbWFrZSB0aGlzIG51bGwgdGVybWluYXRlZAorCSAgIHNpbmNlIHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGVuY291bnRlciBhbiBpMmMgZGV2aWNlIHdpdGggYW4KKwkgICBhZGRyZXNzIG9mIHplcm8uICBJZiB0aGlzIGlzIGEgbnVsbCBwb2ludGVyIG9yIHplcm8tbGVuZ3RoLAorCSAgIHRoZW4gbm8gSTJDIGFkZHJlc3NlcyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIHdlJ2xsCisJICAgdHJ5IHNvbWUgY29tcGlsZWQgaW4gZGVmYXVsdHMgZm9yIG5vdy4gKi8KKwl1bnNpZ25lZCBjaGFyICppMmNfYWRkcmVzc19saXN0OworfTsKKworc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF90YWJsZSB7CisJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjICpsc3Q7CisJdW5zaWduZWQgY2hhciBjbnQ7Cit9OworCisKIHN0cnVjdCBwdnIyX3N0cmluZ190YWJsZSB7CiAJY29uc3QgY2hhciAqKmxzdDsKIAl1bnNpZ25lZCBpbnQgY250OwpAQCAtNDAsNiArNjgsNyBAQAogCiAjZGVmaW5lIFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFIDAKICNkZWZpbmUgUFZSMl9ST1VUSU5HX1NDSEVNRV9HT1RWSUVXIDEKKyNkZWZpbmUgUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUiAyCiAKICNkZWZpbmUgUFZSMl9ESUdJVEFMX1NDSEVNRV9OT05FIDAKICNkZWZpbmUgUFZSMl9ESUdJVEFMX1NDSEVNRV9IQVVQUEFVR0UgMQpAQCAtNjYsNiArOTUsOSBAQAogCS8qIExpc3Qgb2YgYWRkaXRpb25hbCBjbGllbnQgbW9kdWxlcyB3ZSBuZWVkIHRvIGxvYWQgKi8KIAlzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgY2xpZW50X21vZHVsZXM7CiAKKwkvKiBMaXN0IG9mIGRlZmluZWQgY2xpZW50IG1vZHVsZXMgd2UgbmVlZCB0byBsb2FkICovCisJc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF90YWJsZSBjbGllbnRfdGFibGU7CisKIAkvKiBMaXN0IG9mIEZYMiBmaXJtd2FyZSBmaWxlIG5hbWVzIHdlIHNob3VsZCBzZWFyY2g7IGlmIGVtcHR5IHRoZW4KIAkgICBGWDIgZmlybXdhcmUgY2hlY2sgLyBsb2FkIGlzIHNraXBwZWQgYW5kIHdlIGFzc3VtZSB0aGUgZGV2aWNlCiAJICAgd2FzIGluaXRpYWxpemVkIGZyb20gaW50ZXJuYWwgUk9NLiAqLwpAQCAtNzMsNyArMTA1LDcgQEAKIAogI2lmZGVmIENPTkZJR19WSURFT19QVlJVU0IyX0RWQgogCS8qIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBoYW5kbGUgYXR0YWNobWVudCBvZiBkaWdpdGFsIHR1bmVyICYgZGVtb2QgKi8KLQlzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgKmR2Yl9wcm9wczsKKwljb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgKmR2Yl9wcm9wczsKIAogI2VuZGlmCiAJLyogSW5pdGlhbCBzdGFuZGFyZCBiaXRzIHRvIHVzZSBmb3IgdGhpcyBkZXZpY2UsIGlmIG5vdCB6ZXJvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kdmIuYwppbmRleCA3N2IzYzMzLi5iN2Y1YzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kdmIuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiBzdGF0aWMgaW50IHB2cjJfZHZiX2Zyb250ZW5kX2luaXQoc3RydWN0IHB2cjJfZHZiX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBhZGFwLT5jaGFubmVsLmhkdzsKLQlzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgKmR2Yl9wcm9wcyA9IGhkdy0+aGR3X2Rlc2MtPmR2Yl9wcm9wczsKKwljb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgKmR2Yl9wcm9wcyA9IGhkdy0+aGR3X2Rlc2MtPmR2Yl9wcm9wczsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChkdmJfcHJvcHMgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCmluZGV4IDI3M2QyYTEuLjU0YWM1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCWludCBlbmNNaXNjM0FyZyA9IDA7CiAKICNpZiAwCi0JLyogVGhpcyBpbmV4cGxpY2FibGUgYml0IGhhcHBlbnMgaW4gdGhlIEhhdXBwYWdlIHdpbmRvd3MKKwkvKiBUaGlzIGluZXhwbGljYWJsZSBiaXQgaGFwcGVucyBpbiB0aGUgSGF1cHBhdWdlIHdpbmRvd3MKIAkgICBkcml2ZXIgKGZvciBib3RoIDI0eHh4IGFuZCAyOXh4eCBkZXZpY2VzKS4gIEhvd2V2ZXIgSQogCSAgIGN1cnJlbnRseSBzZWUgbm8gZGlmZmVyZW5jZSBpbiBiZWhhdmlvciB3aXRoIG9yIHdpdGhvdXQKIAkgICB0aGlzIHN0dWZmLiAgTGVhdmUgdGhpcyBoZXJlIGFzIGEgbm90ZSBvZiBpdHMgZXhpc3RlbmNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCBkZTdlZTcyLi41ZDc1ZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAicHZydXNiMi1oZHcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWlvLmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9jeDIzNDF4Lmg+CiAjaW5jbHVkZSAicHZydXNiMi1kZXZhdHRyLmgiCiAKQEAgLTU3LDggKzU4LDYgQEAKICNkZWZpbmUgTE9DS19UQUtFKHgpIGRvIHsgbXV0ZXhfbG9jaygmeCMjX211dGV4KTsgeCMjX2hlbGQgPSAhMDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgTE9DS19HSVZFKHgpIGRvIHsgeCMjX2hlbGQgPSAwOyBtdXRleF91bmxvY2soJngjI19tdXRleCk7IH0gd2hpbGUgKDApCiAKLXN0cnVjdCBwdnIyX2RlY29kZXI7Ci0KIHR5cGVkZWYgaW50ICgqcHZyMl9jdGxmX2lzX2RpcnR5KShzdHJ1Y3QgcHZyMl9jdHJsICopOwogdHlwZWRlZiB2b2lkICgqcHZyMl9jdGxmX2NsZWFyX2RpcnR5KShzdHJ1Y3QgcHZyMl9jdHJsICopOwogdHlwZWRlZiBpbnQgKCpwdnIyX2N0bGZfY2hlY2tfdmFsdWUpKHN0cnVjdCBwdnIyX2N0cmwgKixpbnQpOwpAQCAtMTM5LDIyICsxMzgsNiBAQAogfTsKIAogCi1zdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgewotCXZvaWQgKmN0eHQ7Ci0Jdm9pZCAoKmRldGFjaCkodm9pZCAqKTsKLQl2b2lkICgqZW5hYmxlKSh2b2lkICosaW50KTsKLQl2b2lkICgqZm9yY2VfcmVzZXQpKHZvaWQgKik7Ci19OwotCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfREVURUNUICAweDAxICAvKiBOZWVkIHRvIGRldGVjdCBhIGNsaWVudCB0eXBlICovCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfQ0xJRU5UICAweDAyICAvKiBDbGllbnQgbmVlZHMgYSBzcGVjaWZpYyB1cGRhdGUgKi8KLSNkZWZpbmUgUFZSMl9JMkNfUEVORF9SRUZSRVNIIDB4MDQgIC8qIENsaWVudCBoYXMgc3BlY2lmaWMgcGVuZGluZyBiaXRzICovCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfU1RBTEUgICAweDA4ICAvKiBCcm9hZGNhc3QgcGVuZGluZyBiaXRzICovCi0KLSNkZWZpbmUgUFZSMl9JMkNfUEVORF9BTEwgKFBWUjJfSTJDX1BFTkRfREVURUNUIHxcCi0JCQkgICBQVlIyX0kyQ19QRU5EX0NMSUVOVCB8XAotCQkJICAgUFZSMl9JMkNfUEVORF9SRUZSRVNIIHxcCi0JCQkgICBQVlIyX0kyQ19QRU5EX1NUQUxFKQogCiAvKiBEaXNwb3NpdGlvbiBvZiBmaXJtd2FyZTEgbG9hZGluZyBzaXR1YXRpb24gKi8KICNkZWZpbmUgRlcxX1NUQVRFX1VOS05PV04gMApAQCAtMTc5LDYgKzE2Miw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmOwogCisJLyogT3VyIGhhbmRsZSBpbnRvIHRoZSB2NGwyIHN1Yi1kZXZpY2UgYXJjaGl0ZWN0dXJlICovCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCS8qIERldmljZSBkZXNjcmlwdGlvbiwgYW55dGhpbmcgdGhhdCBtdXN0IGFkanVzdCBiZWhhdmlvciBiYXNlZCBvbgogCSAgIGRldmljZSBzcGVjaWZpYyBpbmZvIHdpbGwgdXNlIGluZm9ybWF0aW9uIGhlbGQgaGVyZS4gKi8KIAljb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyAqaGR3X2Rlc2M7CkBAIC0xODYsNyArMTcxLDYgQEAKIAkvKiBLZXJuZWwgd29ya2VyIHRocmVhZCBoYW5kbGluZyAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtwb2xsOyAgICAgLyogVXBkYXRlIGRyaXZlciBzdGF0ZSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JraTJjc3luYzsgIC8qIFVwZGF0ZSBpMmMgY2xpZW50cyAqLwogCiAJLyogVmlkZW8gc3BpZ290ICovCiAJc3RydWN0IHB2cjJfc3RyZWFtICp2aWRfc3RyZWFtOwpAQCAtMTk1LDIwICsxNzksMjYgQEAKIAlzdHJ1Y3QgbXV0ZXggYmlnX2xvY2tfbXV0ZXg7CiAJaW50IGJpZ19sb2NrX2hlbGQ7ICAvKiBGb3IgZGVidWdnaW5nICovCiAKKwkvKiBUaGlzIGlzIGEgc2ltcGxlIHN0cmluZyB3aGljaCBpZGVudGlmaWVzIHRoZSBpbnN0YW5jZSBvZiB0aGlzCisJICAgZHJpdmVyLiAgSXQgaXMgdW5pcXVlIHdpdGhpbiB0aGUgc2V0IG9mIGV4aXN0aW5nIGRldmljZXMsIGJ1dAorCSAgIHRoZXJlIGlzIG5vIGF0dGVtcHQgdG8ga2VlcCB0aGUgbmFtZSBjb25zaXN0ZW50IHdpdGggdGhlIHNhbWUKKwkgICBwaHlzaWNhbCBkZXZpY2UgZWFjaCB0aW1lLiAqLwogCWNoYXIgbmFtZVszMl07CiAKKwkvKiBUaGlzIGlzIGEgc2ltcGxlIHN0cmluZyB3aGljaCBpZGVudGlmaWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UKKwkgICBpbnN0YW5jZSBpdHNlbGYgLSBpZiBwb3NzaWJsZS4gIChJZiBub3QgcG9zc2libGUsIHRoZW4gaXQgaXMKKwkgICBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgZHJpdmVyIGluc3RhbmNlLCBzaW1pbGFyIHRvIG5hbWUgYWJvdmUuKQorCSAgIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCB1c2Vyc3BhY2UgbWlnaHQgaG9wZWZ1bGx5IGJlIGFibGUgdG8gdXNlCisJICAgdGhpcyByZWNvZ25pemUgc3BlY2lmaWMgdHVuZXJzLiAgSXQgd2lsbCBlbmNvZGUgYSBzZXJpYWwgbnVtYmVyLAorCSAgIGlmIGF2YWlsYWJsZS4gKi8KKwljaGFyIGlkZW50aWZpZXJbMzJdOworCiAJLyogSTJDIHN0dWZmICovCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCXN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19hbGdvOwogCXB2cjJfaTJjX2Z1bmMgaTJjX2Z1bmNbUFZSMl9JMkNfRlVOQ19DTlRdOwogCWludCBpMmNfY3gyNTg0MF9oYWNrX3N0YXRlOwogCWludCBpMmNfbGlua2VkOwotCXVuc2lnbmVkIGludCBpMmNfcGVuZF90eXBlczsgICAgLyogV2hpY2ggdHlwZXMgb2YgdXBkYXRlIGFyZSBuZWVkZWQgKi8KLQl1bnNpZ25lZCBsb25nIGkyY19wZW5kX21hc2s7ICAgIC8qIENoYW5nZSBiaXRzIHdlIG5lZWQgdG8gc2NhbiAqLwotCXVuc2lnbmVkIGxvbmcgaTJjX3N0YWxlX21hc2s7ICAgLyogUGVuZGluZyBicm9hZGNhc3QgY2hhbmdlIGJpdHMgKi8KLQl1bnNpZ25lZCBsb25nIGkyY19hY3RpdmVfbWFzazsgIC8qIEFsbCBjaGFuZ2UgYml0cyBjdXJyZW50bHkgaW4gdXNlICovCi0Jc3RydWN0IGxpc3RfaGVhZCBpMmNfY2xpZW50czsKLQlzdHJ1Y3QgbXV0ZXggaTJjX2xpc3RfbG9jazsKIAogCS8qIEZyZXF1ZW5jeSB0YWJsZSAqLwogCXVuc2lnbmVkIGludCBmcmVxVGFibGVbRlJFUVRBQkxFX1NJWkVdOwpAQCAtMjc1LDYgKzI2NSw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc3RhdGVfd2FpdF9kYXRhOwogCiAKKwlpbnQgZm9yY2VfZGlydHk7ICAgICAgICAvKiBjb25zaWRlciBhbGwgY29udHJvbHMgZGlydHkgaWYgdHJ1ZSAqLwogCWludCBmbGFnX29rOyAgICAgICAgICAgIC8qIGRldmljZSBpbiBrbm93biBnb29kIHN0YXRlICovCiAJaW50IGZsYWdfZGlzY29ubmVjdGVkOyAgLyogZmxhZ19vayA9PSAwIGR1ZSB0byBkaXNjb25uZWN0ICovCiAJaW50IGZsYWdfaW5pdF9vazsgICAgICAgLyogdHJ1ZSBpZiBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKi8KQEAgLTI4MywxNyArMjc0LDEzIEBACiAJaW50IGZsYWdfZGVjb2Rlcl9taXNzZWQ7LyogV2UndmUgbm90aWNlZCBtaXNzaW5nIGRlY29kZXIgKi8KIAlpbnQgZmxhZ190cmlwcGVkOyAgICAgICAvKiBJbmRpY2F0ZXMgb3ZlcmFsbCBmYWlsdXJlIHRvIHN0YXJ0ICovCiAKLQlzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgKmRlY29kZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgZGVjb2Rlcl9jbGllbnRfaWQ7CiAKIAkvLyBDUFUgZmlybXdhcmUgaW5mbyAodXNlZCB0byBoZWxwIGZpbmQgLyBzYXZlIGZpcm13YXJlIGRhdGEpCiAJY2hhciAqZndfYnVmZmVyOwogCXVuc2lnbmVkIGludCBmd19zaXplOwogCWludCBmd19jcHVfZmxhZzsgLyogVHJ1ZSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBDUFUgKi8KIAotCS8vIFRydWUgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IHRvIHRyaWdnZXIgbG9nZ2luZyBvZiBzdGF0ZSBpbiBlYWNoCi0JLy8gbW9kdWxlLgotCWludCBsb2dfcmVxdWVzdGVkOwotCiAJLyogVHVuZXIgLyBmcmVxdWVuY3kgY29udHJvbCBzdHVmZiAqLwogCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOwogCWludCB0dW5lcl91cGRhdGVkOwpAQCAtMzkxLDcgKzM3OCw4IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgY3VycmVudCBmcmVxdWVuY3kgKi8KIHVuc2lnbmVkIGxvbmcgcHZyMl9oZHdfZ2V0X2N1cl9mcmVxKHN0cnVjdCBwdnIyX2hkdyAqKTsKLXZvaWQgcHZyMl9oZHdfc2V0X2RlY29kZXIoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsICopOworCit2b2lkIHB2cjJfaGR3X3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9IRFdfSU5URVJOQUxfSCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IGZhMzA0ZTUuLjdhNjViNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0yNCwxNyArMjQsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlICJwdnJ1c2IyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1zdGQuaCIKICNpbmNsdWRlICJwdnJ1c2IyLXV0aWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy5oIgogI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXR1bmVyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1lZXByb20uaCIKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgogI2luY2x1ZGUgInB2cnVzYjItZW5jb2Rlci5oIgogI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWZ4Mi1jbWQuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLXdtODc3NS5oIgorI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCisjaW5jbHVkZSAicHZydXNiMi1jeDI1ODR4LXY0bC5oIgorI2luY2x1ZGUgInB2cnVzYjItY3M1M2wzMmEuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWF1ZGlvLmgiCiAKICNkZWZpbmUgVFZfTUlOX0ZSRVEgICAgIDU1MjUwMDAwTAogI2RlZmluZSBUVl9NQVhfRlJFUSAgICA4NTAwMDAwMDBMCkBAIC0xMDQsNiArMTA5LDM5IEBACiAvKiBzaXplIG9mIGEgZmlybXdhcmUgY2h1bmsgKi8KICNkZWZpbmUgRklSTVdBUkVfQ0hVTktfU0laRSAweDIwMDAKIAordHlwZWRlZiB2b2lkICgqcHZyMl9zdWJkZXZfdXBkYXRlX2Z1bmMpKHN0cnVjdCBwdnIyX2hkdyAqLAorCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CisKK3N0YXRpYyBjb25zdCBwdnIyX3N1YmRldl91cGRhdGVfZnVuYyBwdnIyX21vZHVsZV91cGRhdGVfZnVuY3Rpb25zW10gPSB7CisJW1BWUjJfQ0xJRU5UX0lEX1dNODc3NV0gPSBwdnIyX3dtODc3NV9zdWJkZXZfdXBkYXRlLAorCVtQVlIyX0NMSUVOVF9JRF9TQUE3MTE1XSA9IHB2cjJfc2FhNzExNV9zdWJkZXZfdXBkYXRlLAorCVtQVlIyX0NMSUVOVF9JRF9NU1AzNDAwXSA9IHB2cjJfbXNwMzQwMF9zdWJkZXZfdXBkYXRlLAorCVtQVlIyX0NMSUVOVF9JRF9DWDI1ODQwXSA9IHB2cjJfY3gyNTg0MF9zdWJkZXZfdXBkYXRlLAorCVtQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQV0gPSBwdnIyX2NzNTNsMzJhX3N1YmRldl91cGRhdGUsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbW9kdWxlX25hbWVzW10gPSB7CisJW1BWUjJfQ0xJRU5UX0lEX01TUDM0MDBdID0gIm1zcDM0MDAiLAorCVtQVlIyX0NMSUVOVF9JRF9DWDI1ODQwXSA9ICJjeDI1ODQwIiwKKwlbUFZSMl9DTElFTlRfSURfU0FBNzExNV0gPSAic2FhNzExNSIsCisJW1BWUjJfQ0xJRU5UX0lEX1RVTkVSXSA9ICJ0dW5lciIsCisJW1BWUjJfQ0xJRU5UX0lEX0RFTU9EXSA9ICJ0dW5lciIsCisJW1BWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBXSA9ICJjczUzbDMyYSIsCisJW1BWUjJfQ0xJRU5UX0lEX1dNODc3NV0gPSAid204Nzc1IiwKK307CisKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1vZHVsZV9pMmNfYWRkcmVzc2VzW10gPSB7CisJW1BWUjJfQ0xJRU5UX0lEX1RVTkVSXSA9ICJceDYwXHg2MVx4NjJceDYzIiwKKwlbUFZSMl9DTElFTlRfSURfREVNT0RdID0gIlx4NDMiLAorCVtQVlIyX0NMSUVOVF9JRF9NU1AzNDAwXSA9ICJceDQwIiwKKwlbUFZSMl9DTElFTlRfSURfU0FBNzExNV0gPSAiXHgyMSIsCisJW1BWUjJfQ0xJRU5UX0lEX1dNODc3NV0gPSAiXHgxYiIsCisJW1BWUjJfQ0xJRU5UX0lEX0NYMjU4NDBdID0gIlx4NDQiLAorCVtQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQV0gPSAiXHgxMSIsCit9OworCisKIC8qIERlZmluZSB0aGUgbGlzdCBvZiBhZGRpdGlvbmFsIGNvbnRyb2xzIHdlJ2xsIGR5bmFtaWNhbGx5IGNvbnN0cnVjdCBiYXNlZAogICAgb24gcXVlcnkgb2YgdGhlIGN4MjM0MXggbW9kdWxlLiAqLwogc3RydWN0IHB2cjJfbXBlZ19pZHMgewpAQCAtMjc3LDcgKzMxNSw2IEBACiBzdGF0aWMgdm9pZCBwdnIyX2hkd19zdGF0ZV9zY2hlZChzdHJ1Y3QgcHZyMl9oZHcgKik7CiBzdGF0aWMgaW50IHB2cjJfaGR3X3N0YXRlX2V2YWwoc3RydWN0IHB2cjJfaGR3ICopOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfc2V0X2N1cl9mcmVxKHN0cnVjdCBwdnIyX2hkdyAqLHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIHZvaWQgcHZyMl9oZHdfd29ya2VyX2kyYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfd29ya2VyX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBpbnQgcHZyMl9oZHdfd2FpdChzdHJ1Y3QgcHZyMl9oZHcgKixpbnQgc3RhdGUpOwogc3RhdGljIGludCBwdnIyX2hkd191bnRyaXBfdW5sb2NrZWQoc3RydWN0IHB2cjJfaGR3ICopOwpAQCAtNjQyLDcgKzY3OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmdjsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKIAlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKLQkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCQlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCX0KIAlmdiA9IGhkdy0+dHVuZXJfc2lnbmFsX2luZm8ucmFuZ2VoaWdoOwogCWlmICghZnYpIHsKQEAgLTY2NCw3ICs3MDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZnY7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7CiAJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7Ci0JCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAl9CiAJZnYgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJhbmdlbG93OwogCWlmICghZnYpIHsKQEAgLTg1OCw3ICs4OTUsNyBAQAogc3RhdGljIGludCBjdHJsX3NpZ25hbF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQogewogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwotCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCSp2cCA9IGhkdy0+dHVuZXJfc2lnbmFsX2luZm8uc2lnbmFsOwogCXJldHVybiAwOwogfQpAQCAtODY4LDcgKzkwNSw3IEBACiAJaW50IHZhbCA9IDA7CiAJdW5zaWduZWQgaW50IHN1YmNoYW47CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7Ci0JcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJc3ViY2hhbiA9IGhkdy0+dHVuZXJfc2lnbmFsX2luZm8ucnhzdWJjaGFuczsKIAlpZiAoc3ViY2hhbiAmIFY0TDJfVFVORVJfU1VCX01PTk8pIHsKIAkJdmFsIHw9ICgxIDw8IFY0TDJfVFVORVJfTU9ERV9NT05PKTsKQEAgLTEyODMsNiArMTMyMCwxMiBAQAogfQogCiAKK2NvbnN0IGNoYXIgKnB2cjJfaGR3X2dldF9kZXZpY2VfaWRlbnRpZmllcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlyZXR1cm4gaGR3LT5pZGVudGlmaWVyOworfQorCisKIHVuc2lnbmVkIGxvbmcgcHZyMl9oZHdfZ2V0X2N1cl9mcmVxKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCXJldHVybiBoZHctPmZyZXFTZWxlY3RvciA/IGhkdy0+ZnJlcVZhbFRlbGV2aXNpb24gOiBoZHctPmZyZXFWYWxSYWRpbzsKQEAgLTE2MzQsMzMgKzE2NzcsMjcgQEAKIAogc3RhdGljIGludCBwdnIyX2RlY29kZXJfZW5hYmxlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGludCBlbmFibGVmbCkKIHsKLQlpZiAoIWhkdy0+ZGVjb2Rlcl9jdHJsKSB7Ci0JCWlmICghaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSB7Ci0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCQkgICAiV0FSTklORzogTm8gZGVjb2RlciBwcmVzZW50Iik7Ci0JCQloZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQgPSAhMDsKLQkJCXRyYWNlX3N0Yml0KCJmbGFnX2RlY29kZXJfbWlzc2VkIiwKLQkJCQkgICAgaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKTsKLQkJfQotCQlyZXR1cm4gLUVJTzsKKwkvKiBFdmVuIHRob3VnaCB3ZSByZWFsbHkgb25seSBjYXJlIGFib3V0IHRoZSB2aWRlbyBkZWNvZGVyIGNoaXAgYXQKKwkgICB0aGlzIHBvaW50LCB3ZSdsbCBicm9hZGNhc3Qgc3RyZWFtIG9uL29mZiB0byBhbGwgc3ViLWRldmljZXMKKwkgICBhbnl3YXksIGp1c3QgaW4gY2FzZSBzb21lYm9keSBlbHNlIHdhbnRzIHRvIGhlYXIgdGhlCisJICAgY29tbWFuZC4uLiAqLworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHN0cmVhbT0lcyIsCisJCSAgIChlbmFibGVmbCA/ICJvbiIgOiAib2ZmIikpOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIGVuYWJsZWZsKTsKKwlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCkgeworCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgZW5jb2RlciBoYXMgYmVlbiBub3RpY2VkLiAgT3RoZXJ3aXNlCisJCSAgIHdlJ2xsIGlzc3VlIGEgd2FybmluZyB0byB0aGUgdXNlciAod2hpY2ggc2hvdWxkCisJCSAgIG5vcm1hbGx5IG5ldmVyIGhhcHBlbikuICovCisJCXJldHVybiAwOwogCX0KLQloZHctPmRlY29kZXJfY3RybC0+ZW5hYmxlKGhkdy0+ZGVjb2Rlcl9jdHJsLT5jdHh0LGVuYWJsZWZsKTsKLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIHB2cjJfaGR3X3NldF9kZWNvZGVyKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCAqcHRyKQotewotCWlmIChoZHctPmRlY29kZXJfY3RybCA9PSBwdHIpIHJldHVybjsKLQloZHctPmRlY29kZXJfY3RybCA9IHB0cjsKLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwgJiYgaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSB7Ci0JCWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCA9IDA7CisJaWYgKCFoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkgICAiV0FSTklORzogTm8gZGVjb2RlciBwcmVzZW50Iik7CisJCWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCA9ICEwOwogCQl0cmFjZV9zdGJpdCgiZmxhZ19kZWNvZGVyX21pc3NlZCIsCiAJCQkgICAgaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKTsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiRGVjb2RlciBoYXMgYXBwZWFyZWQiKTsKLQkJcHZyMl9oZHdfc3RhdGVfc2NoZWQoaGR3KTsKIAl9CisJcmV0dXJuIC1FSU87CiB9CiAKIApAQCAtMTkyNyw2ICsxOTY0LDE2NiBAQAogfQogCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9jb3B5X2kyY19hZGRyX2xpc3QoCisJdW5zaWduZWQgc2hvcnQgKmRzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCXVuc2lnbmVkIGludCBkc3RfbWF4KQoreworCXVuc2lnbmVkIGludCBjbnQgPSAwOworCWlmICghc3JjKSByZXR1cm4gMDsKKwl3aGlsZSAoc3JjW2NudF0gJiYgKGNudCArIDEpIDwgZHN0X21heCkgeworCQlkc3RbY250XSA9IHNyY1tjbnRdOworCQljbnQrKzsKKwl9CisJZHN0W2NudF0gPSBJMkNfQ0xJRU5UX0VORDsKKwlyZXR1cm4gY250OworfQorCisKK3N0YXRpYyBpbnQgcHZyMl9oZHdfbG9hZF9zdWJkZXYoc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjICpjZCkKK3sKKwljb25zdCBjaGFyICpmbmFtZTsKKwl1bnNpZ25lZCBjaGFyIG1pZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCBpMmNjbnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKwkvKiBBcmJpdHJhcnkgY291bnQgLSBtYXggIyBpMmMgYWRkcmVzc2VzIHdlIHdpbGwgcHJvYmUgKi8KKwl1bnNpZ25lZCBzaG9ydCBpMmNhZGRyWzI1XTsKKworCW1pZCA9IGNkLT5tb2R1bGVfaWQ7CisJZm5hbWUgPSAobWlkIDwgQVJSQVlfU0laRShtb2R1bGVfbmFtZXMpKSA/IG1vZHVsZV9uYW1lc1ttaWRdIDogTlVMTDsKKwlpZiAoIWZuYW1lKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIk1vZHVsZSBJRCAldSBmb3IgZGV2aWNlICVzIGhhcyBubyBuYW1lIiwKKwkJCSAgIG1pZCwKKwkJCSAgIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkgICAiTW9kdWxlIElEICV1ICglcykgZm9yIGRldmljZSAlcyBiZWluZyBsb2FkZWQuLi4iLAorCQkgICBtaWQsIGZuYW1lLAorCQkgICBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbik7CisKKwlpMmNjbnQgPSBwdnIyX2NvcHlfaTJjX2FkZHJfbGlzdChpMmNhZGRyLCBjZC0+aTJjX2FkZHJlc3NfbGlzdCwKKwkJCQkJIEFSUkFZX1NJWkUoaTJjYWRkcikpOworCWlmICghaTJjY250ICYmICgocCA9IChtaWQgPCBBUlJBWV9TSVpFKG1vZHVsZV9pMmNfYWRkcmVzc2VzKSkgPworCQkJIG1vZHVsZV9pMmNfYWRkcmVzc2VzW21pZF0gOiBOVUxMKSAhPSBOVUxMKSkgeworCQkvKiBTZWNvbmQgY2hhbmNlOiBUcnkgZGVmYXVsdCBpMmMgYWRkcmVzcyBsaXN0ICovCisJCWkyY2NudCA9IHB2cjJfY29weV9pMmNfYWRkcl9saXN0KGkyY2FkZHIsIHAsCisJCQkJCQkgQVJSQVlfU0laRShpMmNhZGRyKSk7CisJCWlmIChpMmNjbnQpIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJCSAgICIgVXNpbmcgZGVmYXVsdCBpMmMgYWRkcmVzcyBsaXN0IiwKKwkJCQkgICBtaWQpOworCQl9CisJfQorCisJaWYgKCFpMmNjbnQpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkgICAiTW9kdWxlIElEICV1ICglcykgZm9yIGRldmljZSAlczoiCisJCQkgICAiIE5vIGkyYyBhZGRyZXNzZXMiLAorCQkJICAgbWlkLCBmbmFtZSwgaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBOb3RlIGhvdyB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBmb3IgYm90aAorCSAqIHY0bDJfaTJjX25ld19zdWJkZXYoKSBhbmQgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoKS4gIFdoeT8KKwkgKiBXZWxsIHRoZSAybmQgYXJndW1lbnQgaXMgdGhlIG1vZHVsZSBuYW1lIHRvIGxvYWQsIHdoaWxlIHRoZSAzcmQKKwkgKiBhcmd1bWVudCBpcyBkb2N1bWVudGVkIGluIHRoZSBmcmFtZXdvcmsgYXMgYmVpbmcgdGhlICJjaGlwaWQiIC0KKwkgKiBhbmQgZXZlcnkgb3RoZXIgcGxhY2Ugd2hlcmUgSSBjYW4gZmluZCBleGFtcGxlcyBvZiB0aGlzLCB0aGUKKwkgKiAiY2hpcGlkIiBhcHBlYXJzIHRvIGp1c3QgYmUgdGhlIG1vZHVsZSBuYW1lIGFnYWluLiAgU28gaGVyZSB3ZQorCSAqIGp1c3QgZG8gdGhlIHNhbWUgdGhpbmcuICovCisJaWYgKGkyY2NudCA9PSAxKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkJICAgIk1vZHVsZSBJRCAldToiCisJCQkgICAiIFNldHRpbmcgdXAgd2l0aCBzcGVjaWZpZWQgaTJjIGFkZHJlc3MgMHgleCIsCisJCQkgICBtaWQsIGkyY2FkZHJbMF0pOworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmhkdy0+aTJjX2FkYXAsCisJCQkJCSBmbmFtZSwgZm5hbWUsCisJCQkJCSBpMmNhZGRyWzBdKTsKKwl9IGVsc2UgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJICAgIiBTZXR0aW5nIHVwIHdpdGggYWRkcmVzcyBwcm9iZSBsaXN0IiwKKwkJCSAgIG1pZCk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmhkdy0+aTJjX2FkYXAsCisJCQkJCQlmbmFtZSwgZm5hbWUsCisJCQkJCQlpMmNhZGRyKTsKKwl9CisKKwlpZiAoIXNkKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIk1vZHVsZSBJRCAldSAoJXMpIGZvciBkZXZpY2UgJXMgZmFpbGVkIHRvIGxvYWQiLAorCQkJICAgbWlkLCBmbmFtZSwgaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBUYWcgdGhpcyBzdWItZGV2aWNlIGluc3RhbmNlIHdpdGggdGhlIG1vZHVsZSBJRCB3ZSBrbm93IGFib3V0LgorCSAgIEluIG90aGVyIHBsYWNlcyB3ZSdsbCB1c2UgdGhhdCB0YWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbnN0YW5jZQorCSAgIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcuICovCisJc2QtPmdycF9pZCA9IG1pZDsKKworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTkZPLCAiQXR0YWNoZWQgc3ViLWRyaXZlciAlcyIsIGZuYW1lKTsKKworCisJLyogY2xpZW50LXNwZWNpZmljIHNldHVwLi4uICovCisJc3dpdGNoIChtaWQpIHsKKwljYXNlIFBWUjJfQ0xJRU5UX0lEX0NYMjU4NDA6CisJCWhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQgPSBtaWQ7CisJCXsKKwkJCS8qCisJCQkgIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gMTktTm92LTIwMDYgLSBUaGlzCisJCQkgIGJpdCBvZiBudXR0aW5lc3MgZm9yIGN4MjU4NDAgY2F1c2VzIHRoYXQgbW9kdWxlCisJCQkgIHRvIGNvcnJlY3RseSBzZXQgdXAgaXRzIHZpZGVvIHNjYWxpbmcuICBUaGlzIGlzCisJCQkgIHJlYWxseSBhIHByb2JsZW0gaW4gdGhlIGN4MjU4NDAgbW9kdWxlIGl0c2VsZiwKKwkJCSAgYnV0IHdlIHdvcmsgYXJvdW5kIGl0IGhlcmUuICBUaGUgcHJvYmxlbSBoYXMgbm90CisJCQkgIGJlZW4gc2VlbiBpbiBpdnR2IGJlY2F1c2UgdGhlcmUgVkJJIGlzIHN1cHBvcnRlZAorCQkJICBhbmQgc2V0IHVwLiAgV2UgZG9uJ3QgZG8gVkJJIGhlcmUgKGF0IGxlYXN0IG5vdAorCQkJICB5ZXQpIGFuZCB0aHVzIHdlIG5ldmVyIGF0dGVtcHRlZCB0byBldmVuIHNldCBpdAorCQkJICB1cC4KKwkJCSovCisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCQkJICAgIk1vZHVsZSBJRCAldToiCisJCQkJICAgIiBFeGVjdXRpbmcgY3gyNTg0MCBWQkkgaGFjayIsCisJCQkJICAgbWlkKTsKKwkJCW1lbXNldCgmZm10LCAwLCBzaXplb2YoZm10KSk7CisJCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOworCQkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIG1pZCwKKwkJCQkJICAgICB2aWRlbywgc19mbXQsICZmbXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgUFZSMl9DTElFTlRfSURfU0FBNzExNToKKwkJaGR3LT5kZWNvZGVyX2NsaWVudF9pZCA9IG1pZDsKKwkJYnJlYWs7CisJZGVmYXVsdDogYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgcHZyMl9oZHdfbG9hZF9tb2R1bGVzKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJY29uc3Qgc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlICpjbTsKKwljb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X3RhYmxlICpjdDsKKwlpbnQgb2tGbCA9ICEwOworCisJY20gPSAmaGR3LT5oZHdfZGVzYy0+Y2xpZW50X21vZHVsZXM7CisJZm9yIChpZHggPSAwOyBpZHggPCBjbS0+Y250OyBpZHgrKykgeworCQlyZXF1ZXN0X21vZHVsZShjbS0+bHN0W2lkeF0pOworCX0KKworCWN0ID0gJmhkdy0+aGR3X2Rlc2MtPmNsaWVudF90YWJsZTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGN0LT5jbnQ7IGlkeCsrKSB7CisJCWlmIChwdnIyX2hkd19sb2FkX3N1YmRldihoZHcsICZjdC0+bHN0W2lkeF0pIDwgMCkgb2tGbCA9IDA7CisJfQorCWlmICghb2tGbCkgcHZyMl9oZHdfcmVuZGVyX3VzZWxlc3MoaGR3KTsKK30KKworCiBzdGF0aWMgdm9pZCBwdnIyX2hkd19zZXR1cF9sb3coc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJaW50IHJldDsKQEAgLTE5NjYsOSArMjE2Myw3IEBACiAKIAlpZiAoIXB2cjJfaGR3X2Rldl9vayhoZHcpKSByZXR1cm47CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IGhkdy0+aGR3X2Rlc2MtPmNsaWVudF9tb2R1bGVzLmNudDsgaWR4KyspIHsKLQkJcmVxdWVzdF9tb2R1bGUoaGR3LT5oZHdfZGVzYy0+Y2xpZW50X21vZHVsZXMubHN0W2lkeF0pOwotCX0KKwloZHctPmZvcmNlX2RpcnR5ID0gITA7CiAKIAlpZiAoIWhkdy0+aGR3X2Rlc2MtPmZsYWdfbm9fcG93ZXJ1cCkgewogCQlwdnIyX2hkd19jbWRfcG93ZXJ1cChoZHcpOwpAQCAtMTk4Nyw2ICsyMTgyLDExIEBACiAJcHZyMl9pMmNfY29yZV9pbml0KGhkdyk7CiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCisJcHZyMl9oZHdfbG9hZF9tb2R1bGVzKGhkdyk7CisJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOworCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGNvcmUsIGluaXQsIDApOworCiAJZm9yIChpZHggPSAwOyBpZHggPCBDVFJMREVGX0NPVU5UOyBpZHgrKykgewogCQljcHRyID0gaGR3LT5jb250cm9scyArIGlkeDsKIAkJaWYgKGNwdHItPmluZm8tPnNraXBfaW5pdCkgY29udGludWU7CkBAIC0yMDI0LDYgKzIyMjQsMTkgQEAKIAkJaGR3LT5zdGRfbWFza19lZXByb20gPSBWNEwyX1NURF9BTEw7CiAJfQogCisJaWYgKGhkdy0+c2VyaWFsX251bWJlcikgeworCQlpZHggPSBzY25wcmludGYoaGR3LT5pZGVudGlmaWVyLCBzaXplb2YoaGR3LT5pZGVudGlmaWVyKSAtIDEsCisJCQkJInNuLSVsdSIsIGhkdy0+c2VyaWFsX251bWJlcik7CisJfSBlbHNlIGlmIChoZHctPnVuaXRfbnVtYmVyID49IDApIHsKKwkJaWR4ID0gc2NucHJpbnRmKGhkdy0+aWRlbnRpZmllciwgc2l6ZW9mKGhkdy0+aWRlbnRpZmllcikgLSAxLAorCQkJCSJ1bml0LSVjIiwKKwkJCQloZHctPnVuaXRfbnVtYmVyICsgJ2EnKTsKKwl9IGVsc2UgeworCQlpZHggPSBzY25wcmludGYoaGR3LT5pZGVudGlmaWVyLCBzaXplb2YoaGR3LT5pZGVudGlmaWVyKSAtIDEsCisJCQkJInVuaXQtPz8iKTsKKwl9CisJaGR3LT5pZGVudGlmaWVyW2lkeF0gPSAwOworCiAJcHZyMl9oZHdfc2V0dXBfc3RkKGhkdyk7CiAKIAlpZiAoIWdldF9kZWZhdWx0X3R1bmVyX3R5cGUoaGR3KSkgewpAQCAtMjAzMiw4ICsyMjQ1LDYgQEAKIAkJCSAgIGhkdy0+dHVuZXJfdHlwZSk7CiAJfQogCi0JcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShoZHcpOwotCWhkdy0+dHVuZXJfdXBkYXRlZCA9IDA7CiAKIAlpZiAoIXB2cjJfaGR3X2Rldl9vayhoZHcpKSByZXR1cm47CiAKQEAgLTIxNzEsMTEgKzIzODIsMTQgQEAKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IE5VTEw7CiAJaW50IHZhbGlkX3N0ZF9tYXNrOwogCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CiAJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKmhkd19kZXNjOwogCV9fdTggaWZudW07CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwogCXN0cnVjdCBwdnIyX2N0bF9pbmZvICpjaXB0cjsKIAorCXVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCiAJaGR3X2Rlc2MgPSAoY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKikoZGV2aWQtPmRyaXZlcl9pbmZvKTsKIAogCWlmIChoZHdfZGVzYyA9PSBOVUxMKSB7CkBAIC0yMzYwLDYgKzI1NzQsMTEgQEAKIAloZHctPmN0bF9yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCxHRlBfS0VSTkVMKTsKIAlpZiAoIWhkdy0+Y3RsX3JlYWRfdXJiKSBnb3RvIGZhaWw7CiAKKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnVzYl9kZXYtPmRldiwgJmhkdy0+djRsMl9kZXYpICE9IDApIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkgICAiRXJyb3IgcmVnaXN0ZXJpbmcgd2l0aCB2NGwgY29yZSwgZ2l2aW5nIHVwIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJbXV0ZXhfbG9jaygmcHZyMl91bml0X210eCk7IGRvIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBQVlJfTlVNOyBpZHgrKykgewogCQkJaWYgKHVuaXRfcG9pbnRlcnNbaWR4XSkgY29udGludWU7CkBAIC0yMzgyLDcgKzI2MDEsNiBAQAogCiAJaGR3LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShoZHctPm5hbWUpOwogCUlOSVRfV09SSygmaGR3LT53b3JrcG9sbCxwdnIyX2hkd193b3JrZXJfcG9sbCk7Ci0JSU5JVF9XT1JLKCZoZHctPndvcmtpMmNzeW5jLHB2cjJfaGR3X3dvcmtlcl9pMmMpOwogCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsIkRyaXZlciB1bml0IG51bWJlciBpcyAlZCwgbmFtZSBpcyAlcyIsCiAJCSAgIGhkdy0+dW5pdF9udW1iZXIsaGR3LT5uYW1lKTsKQEAgLTIzOTEsMTIgKzI2MDksOSBAQAogCWhkdy0+ZmxhZ19vayA9ICEwOwogCiAJaGR3LT51c2JfaW50ZiA9IGludGY7Ci0JaGR3LT51c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwloZHctPnVzYl9kZXYgPSB1c2JfZGV2OwogCi0Jc2NucHJpbnRmKGhkdy0+YnVzX2luZm8sc2l6ZW9mKGhkdy0+YnVzX2luZm8pLAotCQkgICJ1c2IgJXMgYWRkcmVzcyAlZCIsCi0JCSAgZGV2X25hbWUoJmhkdy0+dXNiX2Rldi0+ZGV2KSwKLQkJICBoZHctPnVzYl9kZXYtPmRldm51bSk7CisJdXNiX21ha2VfcGF0aChoZHctPnVzYl9kZXYsIGhkdy0+YnVzX2luZm8sIHNpemVvZihoZHctPmJ1c19pbmZvKSk7CiAKIAlpZm51bSA9IGhkdy0+dXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJdXNiX3NldF9pbnRlcmZhY2UoaGR3LT51c2JfZGV2LGlmbnVtLDApOwpAQCAtMjQ1NCw2ICsyNjY5LDEwIEBACiAJCWhkdy0+Y3RsX3dyaXRlX2J1ZmZlciA9IE5VTEw7CiAJfQogCWhkdy0+ZmxhZ19kaXNjb25uZWN0ZWQgPSAhMDsKKwkvKiBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZXJlIHdpbGwgYmUgYSBkYW5nbGluZyBzdHJ1Y3QgZGV2aWNlCisJICAgcmVmZXJlbmNlIHRvIG91ciBkaXNhcHBlYXJpbmcgZGV2aWNlIHBlcnNpc3RpbmcgaW5zaWRlIHRoZSBWNEwKKwkgICBjb3JlLi4uICovCisJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmaGR3LT52NGwyX2Rldik7CiAJaGR3LT51c2JfZGV2ID0gTlVMTDsKIAloZHctPnVzYl9pbnRmID0gTlVMTDsKIAlwdnIyX2hkd19yZW5kZXJfdXNlbGVzcyhoZHcpOwpAQCAtMjQ4MSwxMCArMjcwMCw4IEBACiAJCXB2cjJfc3RyZWFtX2Rlc3Ryb3koaGR3LT52aWRfc3RyZWFtKTsKIAkJaGR3LT52aWRfc3RyZWFtID0gTlVMTDsKIAl9Ci0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsKSB7Ci0JCWhkdy0+ZGVjb2Rlcl9jdHJsLT5kZXRhY2goaGR3LT5kZWNvZGVyX2N0cmwtPmN0eHQpOwotCX0KIAlwdnIyX2kyY19jb3JlX2RvbmUoaGR3KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZoZHctPnY0bDJfZGV2KTsKIAlwdnIyX2hkd19yZW1vdmVfdXNiX3N0dWZmKGhkdyk7CiAJbXV0ZXhfbG9jaygmcHZyMl91bml0X210eCk7IGRvIHsKIAkJaWYgKChoZHctPnVuaXRfbnVtYmVyID49IDApICYmCkBAIC0yNjc4LDYgKzI4OTUsMTUwIEBACiB9CiAKIAorc3RhdGljIHZvaWQgcHZyMl9zdWJkZXZfc2V0X2NvbnRyb2woc3RydWN0IHB2cjJfaGR3ICpoZHcsIGludCBpZCwKKwkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgJXM9JWQiLCBuYW1lLCB2YWwpOworCW1lbXNldCgmY3RybCwgMCwgc2l6ZW9mKGN0cmwpKTsKKwljdHJsLmlkID0gaWQ7CisJY3RybC52YWx1ZSA9IHZhbDsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgc19jdHJsLCAmY3RybCk7Cit9CisKKyNkZWZpbmUgUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBpZCwgbGFiKSBcCisJaWYgKChoZHcpLT5sYWIjI19kaXJ0eSB8fCAoaGR3KS0+Zm9yY2VfZGlydHkpIHsJCVwKKwkJcHZyMl9zdWJkZXZfc2V0X2NvbnRyb2woaGR3LCBpZCwgI2xhYiwgKGhkdyktPmxhYiMjX3ZhbCk7IFwKKwl9CisKKy8qIEV4ZWN1dGUgd2hhdGV2ZXIgY29tbWFuZHMgYXJlIHJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgc3RhdGUgb2YgYWxsIHRoZQorICAgc3ViLWRldmljZXMgc28gdGhhdCB0aGV5IG1hdGNoIG91ciBjdXJyZW50IGNvbnRyb2wgdmFsdWVzLiAqLworc3RhdGljIHZvaWQgcHZyMl9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJdW5zaWduZWQgaW50IGlkOworCXB2cjJfc3ViZGV2X3VwZGF0ZV9mdW5jIGZwOworCisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHVwZGF0ZS4uLiIpOworCisJaWYgKGhkdy0+dHVuZXJfdXBkYXRlZCB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB0dW5lcl9zZXR1cCBzZXR1cDsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHR1bmVyIHNldF90eXBlKCVkKSIsCisJCQkgICBoZHctPnR1bmVyX3R5cGUpOworCQlpZiAoKChpbnQpKGhkdy0+dHVuZXJfdHlwZSkpID49IDApIHsKKwkJCXNldHVwLmFkZHIgPSBBRERSX1VOU0VUOworCQkJc2V0dXAudHlwZSA9IGhkdy0+dHVuZXJfdHlwZTsKKwkJCXNldHVwLm1vZGVfbWFzayA9IFRfUkFESU8gfCBUX0FOQUxPR19UVjsKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLAorCQkJCQkgICAgIHR1bmVyLCBzX3R5cGVfYWRkciwgJnNldHVwKTsKKwkJfQorCX0KKworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+c3RkX2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X3N0YW5kYXJkIik7CisJCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLAorCQkJCQkgICAgIHR1bmVyLCBzX3JhZGlvKTsKKwkJfSBlbHNlIHsKKwkJCXY0bDJfc3RkX2lkIHZzOworCQkJdnMgPSBoZHctPnN0ZF9tYXNrX2N1cjsKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLAorCQkJCQkgICAgIHR1bmVyLCBzX3N0ZCwgdnMpOworCQl9CisJCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gITA7CisJCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOworCX0KKworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQlJJR0hUTkVTUywgYnJpZ2h0bmVzcyk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9DT05UUkFTVCwgY29udHJhc3QpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfU0FUVVJBVElPTiwgc2F0dXJhdGlvbik7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9IVUUsIGh1ZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19NVVRFLCBtdXRlKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgdm9sdW1lKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsIGJhbGFuY2UpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fQkFTUywgYmFzcyk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19UUkVCTEUsIHRyZWJsZSk7CisKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmF1ZGlvbW9kZV9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OworCQltZW1zZXQoJnZ0LCAwLCBzaXplb2YodnQpKTsKKwkJdnQuYXVkbW9kZSA9IGhkdy0+YXVkaW9tb2RlX3ZhbDsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX3R1bmVyLCAmdnQpOworCX0KKworCWlmIChoZHctPmZyZXFEaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXVuc2lnbmVkIGxvbmcgZnY7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmcmVxOworCQlmdiA9IHB2cjJfaGR3X2dldF9jdXJfZnJlcShoZHcpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfZnJlcSglbHUpIiwgZnYpOworCQlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CisJCW1lbXNldCgmZnJlcSwgMCwgc2l6ZW9mKGZyZXEpKTsKKwkJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX2luZm8uY2FwYWJpbGl0eSAmIFY0TDJfVFVORVJfQ0FQX0xPVykgeworCQkJLyogKChmdiAqIDEwMDApIC8gNjI1MDApICovCisJCQlmcmVxLmZyZXF1ZW5jeSA9IChmdiAqIDIpIC8gMTI1OworCQl9IGVsc2UgeworCQkJZnJlcS5mcmVxdWVuY3kgPSBmdiAvIDYyNTAwOworCQl9CisJCS8qIHR1bmVyLWNvcmUgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBjYXJlIGFib3V0IHRoaXMsIGJ1dAorCQkgICBsZXQncyBzZXQgaXQgYW55d2F5IGZvciBjb21wbGV0ZW5lc3MuICovCisJCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKKwkJCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCX0gZWxzZSB7CisJCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJfQorCQlmcmVxLnR1bmVyID0gMDsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHR1bmVyLAorCQkJCSAgICAgc19mcmVxdWVuY3ksICZmcmVxKTsKKwl9CisKKwlpZiAoaGR3LT5yZXNfaG9yX2RpcnR5IHx8IGhkdy0+cmVzX3Zlcl9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisJCW1lbXNldCgmZm10LCAwLCBzaXplb2YoZm10KSk7CisJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmbXQuZm10LnBpeC53aWR0aCA9IGhkdy0+cmVzX2hvcl92YWw7CisJCWZtdC5mbXQucGl4LmhlaWdodCA9IGhkdy0+cmVzX3Zlcl92YWw7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9zaXplKCVkeCVkKSIsCisJCQkgICBmbXQuZm10LnBpeC53aWR0aCwgZm10LmZtdC5waXguaGVpZ2h0KTsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CisJfQorCisJaWYgKGhkdy0+c3JhdGVfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQl1MzIgdmFsOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfYXVkaW8gJWQiLAorCQkJICAgaGR3LT5zcmF0ZV92YWwpOworCQlzd2l0Y2ggKGhkdy0+c3JhdGVfdmFsKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA6CisJCQl2YWwgPSA0ODAwMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwOgorCQkJdmFsID0gNDQxMDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMDoKKwkJCXZhbCA9IDMyMDAwOworCQkJYnJlYWs7CisJCX0KKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsCisJCQkJICAgICBhdWRpbywgc19jbG9ja19mcmVxLCB2YWwpOworCX0KKworCS8qIFVuYWJsZSB0byBzZXQgY3JvcCBwYXJhbWV0ZXJzOyB0aGVyZSBpcyBhcHBhcmVudGx5IG5vIGVxdWl2YWxlbnQKKwkgICBmb3IgVklESU9DX1NfQ1JPUCAqLworCisJdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCAmaGR3LT52NGwyX2RldikgeworCQlpZCA9IHNkLT5ncnBfaWQ7CisJCWlmIChpZCA+PSBBUlJBWV9TSVpFKHB2cjJfbW9kdWxlX3VwZGF0ZV9mdW5jdGlvbnMpKSBjb250aW51ZTsKKwkJZnAgPSBwdnIyX21vZHVsZV91cGRhdGVfZnVuY3Rpb25zW2lkXTsKKwkJaWYgKCFmcCkgY29udGludWU7CisJCSgqZnApKGhkdywgc2QpOworCX0KKworCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSB8fCBoZHctPmNyb3BjYXBfc3RhbGUpIHsKKwkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKKwl9Cit9CisKKwogLyogRmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGNvbW1pdCBjb250cm9sIGNoYW5nZXMuICBJZiBzbywgbWFyayBpbnRlcm5hbAogICAgc3RhdGUgZmxhZ3MgdG8gaW5kaWNhdGUgdGhpcyBmYWN0IGFuZCByZXR1cm4gdHJ1ZS4gIE90aGVyd2lzZSBkbyBub3RoaW5nCiAgICBlbHNlIGFuZCByZXR1cm4gZmFsc2UuICovCkBAIC0yNjg2LDcgKzMwNDcsNyBAQAogCXVuc2lnbmVkIGludCBpZHg7CiAJc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKIAlpbnQgdmFsdWU7Ci0JaW50IGNvbW1pdF9mbGFnID0gMDsKKwlpbnQgY29tbWl0X2ZsYWcgPSBoZHctPmZvcmNlX2RpcnR5OwogCWNoYXIgYnVmWzEwMF07CiAJdW5zaWduZWQgaW50IGJjbnQsY2NudDsKIApAQCAtMjg0MiwxOCArMzIwMyw2IEBACiAJCWN4MjM0MXhfZXh0X2N0cmxzKCZoZHctPmVuY19jdGxfc3RhdGUsIDAsICZjcyxWSURJT0NfU19FWFRfQ1RSTFMpOwogCX0KIAotCS8qIFNjYW4gaTJjIGNvcmUgYXQgdGhpcyBwb2ludCAtIGJlZm9yZSB3ZSBjbGVhciBhbGwgdGhlIGRpcnR5Ci0JICAgYml0cy4gIFZhcmlvdXMgcGFydHMgb2YgdGhlIGkyYyBjb3JlIHdpbGwgbm90aWNlIGRpcnR5IGJpdHMgYXMKLQkgICBhcHByb3ByaWF0ZSBhbmQgYXJyYW5nZSB0byBicm9hZGNhc3Qgb3IgZGlyZWN0bHkgc2VuZCB1cGRhdGVzIHRvCi0JICAgdGhlIGNsaWVudCBkcml2ZXJzIGluIG9yZGVyIHRvIGtlZXAgZXZlcnl0aGluZyBpbiBzeW5jICovCi0JcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShoZHcpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmNvbnRyb2xfY250OyBpZHgrKykgewotCQljcHRyID0gaGR3LT5jb250cm9scyArIGlkeDsKLQkJaWYgKCFjcHRyLT5pbmZvLT5jbGVhcl9kaXJ0eSkgY29udGludWU7Ci0JCWNwdHItPmluZm8tPmNsZWFyX2RpcnR5KGNwdHIpOwotCX0KLQogCWlmIChoZHctPmFjdGl2ZV9zdHJlYW1fdHlwZSAhPSBoZHctPmRlc2lyZWRfc3RyZWFtX3R5cGUpIHsKIAkJLyogSGFuZGxlIGFueSBzaWRlIGVmZmVjdHMgb2Ygc3RyZWFtIGNvbmZpZyBoZXJlICovCiAJCWhkdy0+YWN0aXZlX3N0cmVhbV90eXBlID0gaGR3LT5kZXNpcmVkX3N0cmVhbV90eXBlOwpAQCAtMjg3Myw4ICszMjIyLDE2IEBACiAJCX0KIAl9CiAKLQkvKiBOb3cgZXhlY3V0ZSBpMmMgY29yZSB1cGRhdGUgKi8KLQlwdnIyX2kyY19jb3JlX3N5bmMoaGR3KTsKKwkvKiBDaGVjayBhbmQgdXBkYXRlIHN0YXRlIGZvciBhbGwgc3ViLWRldmljZXMuICovCisJcHZyMl9zdWJkZXZfdXBkYXRlKGhkdyk7CisKKwloZHctPnR1bmVyX3VwZGF0ZWQgPSAwOworCWhkdy0+Zm9yY2VfZGlydHkgPSAwOworCWZvciAoaWR4ID0gMDsgaWR4IDwgaGR3LT5jb250cm9sX2NudDsgaWR4KyspIHsKKwkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7CisJCWlmICghY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkpIGNvbnRpbnVlOworCQljcHRyLT5pbmZvLT5jbGVhcl9kaXJ0eShjcHRyKTsKKwl9CiAKIAlpZiAoKGhkdy0+cGF0aHdheV9zdGF0ZSA9PSBQVlIyX1BBVEhXQVlfQU5BTE9HKSAmJgogCSAgICBoZHctPnN0YXRlX2VuY29kZXJfcnVuKSB7CkBAIC0yOTA0LDE1ICszMjYxLDYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBwdnIyX2hkd193b3JrZXJfaTJjKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBwdnIyX2hkdyx3b3JraTJjc3luYyk7Ci0JTE9DS19UQUtFKGhkdy0+YmlnX2xvY2spOyBkbyB7Ci0JCXB2cjJfaTJjX2NvcmVfc3luYyhoZHcpOwotCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7Ci19Ci0KLQogc3RhdGljIHZvaWQgcHZyMl9oZHdfd29ya2VyX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCWludCBmbCA9IDA7CkBAIC0yOTczLDcgKzMzMjEsNyBAQAogdm9pZCBwdnIyX2hkd19leGVjdXRlX3R1bmVyX3BvbGwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJTE9DS19UQUtFKGhkdy0+YmlnX2xvY2spOyBkbyB7Ci0JCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwogfQogCkBAIC0yOTgzLDcgKzMzMzEsNyBAQAogCWlmICghaGR3LT5jcm9wY2FwX3N0YWxlKSB7CiAJCXJldHVybiAwOwogCX0KLQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAlpZiAoaGR3LT5jcm9wY2FwX3N0YWxlKSB7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTMwMTAsNyArMzM1OCw3IEBACiB7CiAJTE9DS19UQUtFKGhkdy0+YmlnX2xvY2spOyBkbyB7CiAJCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCQkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAkJfQogCQltZW1jcHkodnRwLCZoZHctPnR1bmVyX3NpZ25hbF9pbmZvLHNpemVvZihzdHJ1Y3QgdjRsMl90dW5lcikpOwogCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7CkBAIC0zMDI5LDExICszMzc3LDggQEAKIHsKIAlpbnQgbnIgPSBwdnIyX2hkd19nZXRfdW5pdF9udW1iZXIoaGR3KTsKIAlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJaGR3LT5sb2dfcmVxdWVzdGVkID0gITA7CiAJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6ID09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLCBucik7Ci0JCXB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoaGR3KTsKLQkJaGR3LT5sb2dfcmVxdWVzdGVkID0gMDsKLQkJcHZyMl9pMmNfY29yZV9zeW5jKGhkdyk7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBjb3JlLCBsb2dfc3RhdHVzKTsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lORk8sImN4MjM0MXggY29uZmlnOiIpOwogCQljeDIzNDF4X2xvZ19zdGF0dXMoJmhkdy0+ZW5jX2N0bF9zdGF0ZSwgInB2cnVzYjIiKTsKIAkJcHZyMl9oZHdfc3RhdGVfbG9nX3N0YXRlKGhkdyk7CkBAIC0zNzE2LDIyICs0MDYxLDE2IEBACiAKIGludCBwdnIyX2hkd19jbWRfZGVjb2Rlcl9yZXNldChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKLQlpZiAoIWhkdy0+ZGVjb2Rlcl9jdHJsKSB7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAotCQkJICAgIlVuYWJsZSB0byByZXNldCBkZWNvZGVyOiBub3RoaW5nIGF0dGFjaGVkIik7Ci0JCXJldHVybiAtRU5PVFRZOwotCX0KLQotCWlmICghaGR3LT5kZWNvZGVyX2N0cmwtPmZvcmNlX3Jlc2V0KSB7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAotCQkJICAgIlVuYWJsZSB0byByZXNldCBkZWNvZGVyOiBub3QgaW1wbGVtZW50ZWQiKTsKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCiAJCSAgICJSZXF1ZXN0aW5nIGRlY29kZXIgcmVzZXQiKTsKLQloZHctPmRlY29kZXJfY3RybC0+Zm9yY2VfcmVzZXQoaGR3LT5kZWNvZGVyX2N0cmwtPmN0eHQpOwotCXJldHVybiAwOworCWlmIChoZHctPmRlY29kZXJfY2xpZW50X2lkKSB7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCBoZHctPmRlY29kZXJfY2xpZW50X2lkLAorCQkJCSAgICAgY29yZSwgcmVzZXQsIDApOworCQlyZXR1cm4gMDsKKwl9CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCSAgICJVbmFibGUgdG8gcmVzZXQgZGVjb2Rlcjogbm90aGluZyBhdHRhY2hlZCIpOworCXJldHVybiAtRU5PVFRZOwogfQogCiAKQEAgLTQ0NzYsNiArNDgxNSw3OSBAQAogfQogCiAKKy8qIEdlbmVyYXRlIHJlcG9ydCBjb250YWluaW5nIGluZm8gYWJvdXQgYXR0YWNoZWQgc3ViLWRldmljZXMgYW5kIGF0dGFjaGVkCisgICBpMmMgY2xpZW50cywgaW5jbHVkaW5nIGFuIGluZGljYXRpb24gb2Ygd2hpY2ggYXR0YWNoZWQgaTJjIGNsaWVudHMgYXJlCisgICBhY3R1YWxseSBzdWItZGV2aWNlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9oZHdfcmVwb3J0X2NsaWVudHMoc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkJCSAgICBjaGFyICpidWYsIHVuc2lnbmVkIGludCBhY250KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJdW5zaWduZWQgaW50IHRjbnQgPSAwOworCXVuc2lnbmVkIGludCBjY250OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKKwl2b2lkICpjZDsKKwljb25zdCBjaGFyICpwOworCXVuc2lnbmVkIGludCBpZDsKKworCWNjbnQgPSBzY25wcmludGYoYnVmLCBhY250LCAiQXNzb2NpYXRlZCB2NGwyLXN1YmRldiBkcml2ZXJzOiIpOworCXRjbnQgKz0gY2NudDsKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZoZHctPnY0bDJfZGV2KSB7CisJCWlkID0gc2QtPmdycF9pZDsKKwkJcCA9IE5VTEw7CisJCWlmIChpZCA8IEFSUkFZX1NJWkUobW9kdWxlX25hbWVzKSkgcCA9IG1vZHVsZV9uYW1lc1tpZF07CisJCWlmIChwKSB7CisJCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LCAiICVzIiwgcCk7CisJCQl0Y250ICs9IGNjbnQ7CisJCX0gZWxzZSB7CisJCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LAorCQkJCQkgIiAodW5rbm93biBpZD0ldSkiLCBpZCk7CisJCQl0Y250ICs9IGNjbnQ7CisJCX0KKwl9CisJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIlxuIik7CisJdGNudCArPSBjY250OworCisJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIkkyQyBjbGllbnRzOlxuIik7CisJdGNudCArPSBjY250OworCisJbXV0ZXhfbG9jaygmaGR3LT5pMmNfYWRhcC5jbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZoZHctPmkyY19hZGFwLmNsaWVudHMpIHsKKwkJY2xpZW50ID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgaTJjX2NsaWVudCwgbGlzdCk7CisJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsCisJCQkJICIgICVzOiBpMmM9JTAyeCIsIGNsaWVudC0+bmFtZSwgY2xpZW50LT5hZGRyKTsKKwkJdGNudCArPSBjY250OworCQljZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCQl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZoZHctPnY0bDJfZGV2KSB7CisJCQlpZiAoY2QgPT0gc2QpIHsKKwkJCQlpZCA9IHNkLT5ncnBfaWQ7CisJCQkJcCA9IE5VTEw7CisJCQkJaWYgKGlkIDwgQVJSQVlfU0laRShtb2R1bGVfbmFtZXMpKSB7CisJCQkJCXAgPSBtb2R1bGVfbmFtZXNbaWRdOworCQkJCX0KKwkJCQlpZiAocCkgeworCQkJCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsCisJCQkJCQkJIGFjbnQgLSB0Y250LAorCQkJCQkJCSAiIHN1YmRldj0lcyIsIHApOworCQkJCQl0Y250ICs9IGNjbnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LAorCQkJCQkJCSBhY250IC0gdGNudCwKKwkJCQkJCQkgIiBzdWJkZXY9IGlkICV1KSIsCisJCQkJCQkJIGlkKTsKKwkJCQkJdGNudCArPSBjY250OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LCAiXG4iKTsKKwkJdGNudCArPSBjY250OworCX0KKwltdXRleF91bmxvY2soJmhkdy0+aTJjX2FkYXAuY2xpc3RfbG9jayk7CisJcmV0dXJuIHRjbnQ7Cit9CisKKwogdW5zaWduZWQgaW50IHB2cjJfaGR3X3N0YXRlX3JlcG9ydChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKIAkJCQkgICBjaGFyICpidWYsdW5zaWduZWQgaW50IGFjbnQpCiB7CkBAIC00NDkwLDYgKzQ5MDIsOCBAQAogCQlidWZbMF0gPSAnXG4nOyBjY250ID0gMTsKIAkJYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwogCX0KKwljY250ID0gcHZyMl9oZHdfcmVwb3J0X2NsaWVudHMoaGR3LCBidWYsIGFjbnQpOworCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKIAlMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7CiAJcmV0dXJuIGJjbnQ7CiB9CkBAIC00NDk3LDE0ICs0OTExLDI1IEBACiAKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3N0YXRlX2xvZ19zdGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKLQljaGFyIGJ1ZlsxMjhdOwotCXVuc2lnbmVkIGludCBpZHgsY2NudDsKKwljaGFyIGJ1ZlsyNTZdOworCXVuc2lnbmVkIGludCBpZHgsIGNjbnQ7CisJdW5zaWduZWQgaW50IGxjbnQsIHVjbnQ7CiAKIAlmb3IgKGlkeCA9IDA7IDsgaWR4KyspIHsKIAkJY2NudCA9IHB2cjJfaGR3X3JlcG9ydF91bmxvY2tlZChoZHcsaWR4LGJ1ZixzaXplb2YoYnVmKSk7CiAJCWlmICghY2NudCkgYnJlYWs7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzICUuKnNcbiIsaGR3LT5uYW1lLGNjbnQsYnVmKTsKIAl9CisJY2NudCA9IHB2cjJfaGR3X3JlcG9ydF9jbGllbnRzKGhkdywgYnVmLCBzaXplb2YoYnVmKSk7CisJdWNudCA9IDA7CisJd2hpbGUgKHVjbnQgPCBjY250KSB7CisJCWxjbnQgPSAwOworCQl3aGlsZSAoKGxjbnQgKyB1Y250IDwgY2NudCkgJiYgKGJ1ZltsY250ICsgdWNudF0gIT0gJ1xuJykpIHsKKwkJCWxjbnQrKzsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICIlcyAlLipzXG4iLCBoZHctPm5hbWUsIGxjbnQsIGJ1ZiArIHVjbnQpOworCQl1Y250ICs9IGxjbnQgKyAxOworCX0KIH0KIAogCkBAIC00NjQxLDYgKzUwNjYsMzAgQEAKIH0KIAogCit2b2lkIHB2cjJfaGR3X3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXN0cnVjdCB2NGwyX3R1bmVyICp2dHAgPSAmaGR3LT50dW5lcl9zaWduYWxfaW5mbzsKKwltZW1zZXQodnRwLCAwLCBzaXplb2YoKnZ0cCkpOworCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gMDsKKwkvKiBOb3RlOiBUaGVyZSBhcHBhcmVudGx5IGlzIG5vIHJlcGxhY2VtZW50IGZvciBWSURJT0NfQ1JPUENBUAorCSAgIHVzaW5nIHY0bDItc3ViZGV2IC0gdGhlcmVmb3JlIHdlIGNhbid0IHN1cHBvcnQgdGhhdCBBVCBBTEwgcmlnaHQKKwkgICBub3cuICAoT2YgY291cnNlLCBubyBzdWItZHJpdmVycyBzZWVtIHRvIGltcGxlbWVudCBpdCBlaXRoZXIuCisJICAgQnV0IG5vdyBpdCdzIGEgYSBjaGlja2VuIGFuZCBlZ2cgcHJvYmxlbS4uLikgKi8KKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdHVuZXIsIGdfdHVuZXIsCisJCQkgICAgICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvKTsKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgc3RhdHVzIHBvbGwiCisJCSAgICIgdHlwZT0ldSBzdHJlbmd0aD0ldSBhdWRpbz0weCV4IGNhcD0weCV4IgorCQkgICAiIGxvdz0ldSBoaT0ldSIsCisJCSAgIHZ0cC0+dHlwZSwKKwkJICAgdnRwLT5zaWduYWwsIHZ0cC0+cnhzdWJjaGFucywgdnRwLT5jYXBhYmlsaXR5LAorCQkgICB2dHAtPnJhbmdlbG93LCB2dHAtPnJhbmdlaGlnaCk7CisKKwkvKiBXZSBoYXZlIHRvIGRvIHRoaXMgdG8gYXZvaWQgZ2V0dGluZyBpbnRvIGNvbnN0YW50IHBvbGxpbmcgaWYKKwkgICB0aGVyZSdzIG5vYm9keSB0byBhbnN3ZXIgYSBwb2xsIG9mIGNyb3BjYXAgaW5mby4gKi8KKwloZHctPmNyb3BjYXBfc3RhbGUgPSAwOworfQorCisKIHVuc2lnbmVkIGludCBwdnIyX2hkd19nZXRfaW5wdXRfYXZhaWxhYmxlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCXJldHVybiBoZHctPmlucHV0X2F2YWlsX21hc2s7CkBAIC00NzM2LDcgKzUxODUsNiBAQAogCQkJICAgICBpbnQgc2V0RmwsIHU2NCAqdmFsX3B0cikKIHsKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7CiAJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyIHJlcTsKIAlpbnQgc3RhdCA9IDA7CiAJaW50IG9rRmwgPSAwOwpAQCAtNDc0NiwyMSArNTE5NCw5IEBACiAJcmVxLm1hdGNoID0gKm1hdGNoOwogCXJlcS5yZWcgPSByZWdfaWQ7CiAJaWYgKHNldEZsKSByZXEudmFsID0gKnZhbF9wdHI7Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudCgKLQkJCQkgICAgY3AtPmNsaWVudCwKLQkJCQkgICAgJnJlcS5tYXRjaCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXN0YXQgPSBwdnIyX2kyY19jbGllbnRfY21kKAotCQkJCWNwLChzZXRGbCA/IFZJRElPQ19EQkdfU19SRUdJU1RFUiA6Ci0JCQkJICAgIFZJRElPQ19EQkdfR19SRUdJU1RFUiksJnJlcSk7Ci0JCQlpZiAoIXNldEZsKSAqdmFsX3B0ciA9IHJlcS52YWw7Ci0JCQlva0ZsID0gITA7Ci0JCQlicmVhazsKLQkJfQotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7CisJLyogSXQgd291bGQgYmUgbmljZSB0byBrbm93IGlmIGEgc3ViLWRldmljZSBhbnN3ZXJlZCB0aGUgcmVxdWVzdCAqLworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBjb3JlLCBnX3JlZ2lzdGVyLCAmcmVxKTsKKwlpZiAoIXNldEZsKSAqdmFsX3B0ciA9IHJlcS52YWw7CiAJaWYgKG9rRmwpIHsKIAkJcmV0dXJuIHN0YXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCAxYjRmZWMzLi43YjY5NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtMTMyLDYgKzEzMiw5IEBACiAvKiBSZXRyaWV2ZSBidXMgbG9jYXRpb24gaW5mbyBvZiBkZXZpY2UgKi8KIGNvbnN0IGNoYXIgKnB2cjJfaGR3X2dldF9idXNfaW5mbyhzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKKy8qIFJldHJpZXZlIHBlci1pbnN0YW5jZSBzdHJpbmcgaWRlbnRpZmllciBmb3IgdGhpcyBzcGVjaWZpYyBkZXZpY2UgKi8KK2NvbnN0IGNoYXIgKnB2cjJfaGR3X2dldF9kZXZpY2VfaWRlbnRpZmllcihzdHJ1Y3QgcHZyMl9oZHcgKik7CisKIC8qIENhbGxlZCB3aGVuIGhhcmR3YXJlIGhhcyBiZWVuIHVucGx1Z2dlZCAqLwogdm9pZCBwdnIyX2hkd19kaXNjb25uZWN0KHN0cnVjdCBwdnIyX2hkdyAqKTsKIApAQCAtMjM2LDggKzIzOSw3IEBACiAJCQkJICAgICBlbnVtIHB2cjJfdjRsX3R5cGUgaW5kZXgsaW50KTsKIAogLyogRGlyZWN0IHJlYWQvd3JpdGUgYWNjZXNzIHRvIGNoaXAncyByZWdpc3RlcnM6Ci0gICBtYXRjaF90eXBlIC0gaG93IHRvIGludGVycHJldCBtYXRjaF9jaGlwIChlLmcuIGRyaXZlciBJRCwgaTJjIGFkZHJlc3MpCi0gICBtYXRjaF9jaGlwIC0gY2hpcCBtYXRjaCB2YWx1ZSAoZS5nLiBJMkNfRFJJVkVSRF94eHh4KQorICAgbWF0Y2ggLSBzcGVjaWZ5IGNyaXRlcmlhIHRvIGlkZW50aWZ5IHRhcmdldCBjaGlwICh0aGlzIGlzIGEgdjRsIGRiZyBzdHJ1Y3QpCiAgICByZWdfaWQgIC0gcmVnaXN0ZXIgbnVtYmVyIHRvIGFjY2VzcwogICAgc2V0RmwgICAtIHRydWUgdG8gc2V0IHRoZSByZWdpc3RlciwgZmFsc2UgdG8gcmVhZCBpdAogICAgdmFsX3B0ciAtIHN0b3JhZ2UgbG9jYXRpb24gZm9yIHNvdXJjZSAvIHJlc3VsdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE0NzcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCi0jaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWF1ZGlvLmgiCi0jaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgotI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1jeDI1ODR4LXY0bC5oIgotI2luY2x1ZGUgInB2cnVzYjItd204Nzc1LmgiCi0KLSNkZWZpbmUgdHJhY2VfaTJjKC4uLikgcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQyxfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBPUF9TVEFOREFSRCAwCi0jZGVmaW5lIE9QX0FVRElPTU9ERSAxCi0jZGVmaW5lIE9QX0JDU0ggMgotI2RlZmluZSBPUF9WT0xVTUUgMwotI2RlZmluZSBPUF9GUkVRIDQKLSNkZWZpbmUgT1BfQVVESU9SQVRFIDUKLSNkZWZpbmUgT1BfQ1JPUCA2Ci0jZGVmaW5lIE9QX1NJWkUgNwotI2RlZmluZSBPUF9MT0cgOAotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wICogY29uc3Qgb3BzW10gPSB7Ci0JW09QX1NUQU5EQVJEXSA9ICZwdnIyX2kyY19vcF92NGwyX3N0YW5kYXJkLAotCVtPUF9BVURJT01PREVdID0gJnB2cjJfaTJjX29wX3Y0bDJfYXVkaW9tb2RlLAotCVtPUF9CQ1NIXSA9ICZwdnIyX2kyY19vcF92NGwyX2Jjc2gsCi0JW09QX1ZPTFVNRV0gPSAmcHZyMl9pMmNfb3BfdjRsMl92b2x1bWUsCi0JW09QX0ZSRVFdID0gJnB2cjJfaTJjX29wX3Y0bDJfZnJlcXVlbmN5LAotCVtPUF9DUk9QXSA9ICZwdnIyX2kyY19vcF92NGwyX2Nyb3AsCi0JW09QX1NJWkVdID0gJnB2cjJfaTJjX29wX3Y0bDJfc2l6ZSwKLQlbT1BfTE9HXSA9ICZwdnIyX2kyY19vcF92NGwyX2xvZywKLX07Ci0KLXZvaWQgcHZyMl9pMmNfcHJvYmUoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0JaW50IGlkOwotCWlkID0gY3AtPmNsaWVudC0+ZHJpdmVyLT5pZDsKLQljcC0+Y3RsX21hc2sgPSAoKDEgPDwgT1BfU1RBTkRBUkQpIHwKLQkJCSgxIDw8IE9QX0FVRElPTU9ERSkgfAotCQkJKDEgPDwgT1BfQkNTSCkgfAotCQkJKDEgPDwgT1BfVk9MVU1FKSB8Ci0JCQkoMSA8PCBPUF9GUkVRKSB8Ci0JCQkoMSA8PCBPUF9DUk9QKSB8Ci0JCQkoMSA8PCBPUF9TSVpFKSB8Ci0JCQkoMSA8PCBPUF9MT0cpKTsKLQljcC0+c3RhdHVzX3BvbGwgPSBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsOwotCi0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9NU1AzNDAwKSB7Ci0JCWlmIChwdnIyX2kyY19tc3AzNDAwX3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX1RVTkVSKSB7Ci0JCWlmIChwdnIyX2kyY190dW5lcl9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9DWDI1ODQwKSB7Ci0JCWlmIChwdnIyX2kyY19jeDI1ODR4X3Y0bF9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9XTTg3NzUpIHsKLQkJaWYgKHB2cjJfaTJjX3dtODc3NV9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9TQUE3MTFYKSB7Ci0JCWlmIChwdnIyX2kyY19kZWNvZGVyX3Y0bF9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wICpwdnIyX2kyY19nZXRfb3AodW5zaWduZWQgaW50IGlkeCkKLXsKLQlpZiAoaWR4ID49IEFSUkFZX1NJWkUob3BzKSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIG9wc1tpZHhdOwotfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YmIxMTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAqCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgotI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLXN0YXRpYyB2b2lkIHNldF9zdGFuZGFyZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9zdGFuZGFyZCIpOwotCi0JaWYgKGhkdy0+aW5wdXRfdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgewotCQlwdnIyX2kyY19jb3JlX2NtZChoZHcsQVVEQ19TRVRfUkFESU8sTlVMTCk7Ci0JfSBlbHNlIHsKLQkJdjRsMl9zdGRfaWQgdnM7Ci0JCXZzID0gaGR3LT5zdGRfbWFza19jdXI7Ci0JCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19TVEQsJnZzKTsKLQl9Ci0JaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgPSAhMDsKLQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3N0YW5kYXJkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5pbnB1dF9kaXJ0eSAhPSAwKSB8fCAoaGR3LT5zdGRfZGlydHkgIT0gMCk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQgPSB7Ci0JLmNoZWNrID0gY2hlY2tfc3RhbmRhcmQsCi0JLnVwZGF0ZSA9IHNldF9zdGFuZGFyZCwKLQkubmFtZSA9ICJ2NGwyX3N0YW5kYXJkIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2Jjc2goc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2Jjc2giCi0JCSAgICIgYj0lZCBjPSVkIHM9JWQgaD0lZCIsCi0JCSAgIGhkdy0+YnJpZ2h0bmVzc192YWwsaGR3LT5jb250cmFzdF92YWwsCi0JCSAgIGhkdy0+c2F0dXJhdGlvbl92YWwsaGR3LT5odWVfdmFsKTsKLQltZW1zZXQoJmN0cmwsMCxzaXplb2YoY3RybCkpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwotCWN0cmwudmFsdWUgPSBoZHctPmJyaWdodG5lc3NfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7Ci0JY3RybC52YWx1ZSA9IGhkdy0+Y29udHJhc3RfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTjsKLQljdHJsLnZhbHVlID0gaGR3LT5zYXR1cmF0aW9uX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0hVRTsKLQljdHJsLnZhbHVlID0gaGR3LT5odWVfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2Jjc2goc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPmJyaWdodG5lc3NfZGlydHkgfHwKLQkJaGR3LT5jb250cmFzdF9kaXJ0eSB8fAotCQloZHctPnNhdHVyYXRpb25fZGlydHkgfHwKLQkJaGR3LT5odWVfZGlydHkpOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Jjc2ggPSB7Ci0JLmNoZWNrID0gY2hlY2tfYmNzaCwKLQkudXBkYXRlID0gc2V0X2Jjc2gsCi0JLm5hbWUgPSAidjRsMl9iY3NoIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X3ZvbHVtZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLAotCQkgICAiaTJjIHY0bDIgc2V0X3ZvbHVtZSIKLQkJICAgIih2b2w9JWQgYmFsPSVkIGJhcz0lZCB0cmViPSVkIG11dGU9JWQpIiwKLQkJICAgaGR3LT52b2x1bWVfdmFsLAotCQkgICBoZHctPmJhbGFuY2VfdmFsLAotCQkgICBoZHctPmJhc3NfdmFsLAotCQkgICBoZHctPnRyZWJsZV92YWwsCi0JCSAgIGhkdy0+bXV0ZV92YWwpOwotCW1lbXNldCgmY3RybCwwLHNpemVvZihjdHJsKSk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX01VVEU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+bXV0ZV92YWwgPyAxIDogMDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTsKLQljdHJsLnZhbHVlID0gaGR3LT52b2x1bWVfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fQkFMQU5DRTsKLQljdHJsLnZhbHVlID0gaGR3LT5iYWxhbmNlX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0JBU1M7Ci0JY3RybC52YWx1ZSA9IGhkdy0+YmFzc192YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19UUkVCTEU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+dHJlYmxlX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja192b2x1bWUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPnZvbHVtZV9kaXJ0eSB8fAotCQloZHctPmJhbGFuY2VfZGlydHkgfHwKLQkJaGR3LT5iYXNzX2RpcnR5IHx8Ci0JCWhkdy0+dHJlYmxlX2RpcnR5IHx8Ci0JCWhkdy0+bXV0ZV9kaXJ0eSk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfdm9sdW1lID0gewotCS5jaGVjayA9IGNoZWNrX3ZvbHVtZSwKLQkudXBkYXRlID0gc2V0X3ZvbHVtZSwKLQkubmFtZSA9ICJ2NGwyX3ZvbHVtZSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9hdWRpb21vZGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JbWVtc2V0KCZ2dCwwLHNpemVvZih2dCkpOwotCXZ0LmF1ZG1vZGUgPSBoZHctPmF1ZGlvbW9kZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX1RVTkVSLCZ2dCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19hdWRpb21vZGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPmlucHV0X2RpcnR5IHx8Ci0JCWhkdy0+YXVkaW9tb2RlX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGUgPSB7Ci0JLmNoZWNrID0gY2hlY2tfYXVkaW9tb2RlLAotCS51cGRhdGUgPSBzZXRfYXVkaW9tb2RlLAotCS5uYW1lID0gInY0bDJfYXVkaW9tb2RlIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQl1bnNpZ25lZCBsb25nIGZ2OwotCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmcmVxOwotCWZ2ID0gcHZyMl9oZHdfZ2V0X2N1cl9mcmVxKGhkdyk7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfZnJlcSglbHUpIixmdik7Ci0JaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7Ci0JCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKLQl9Ci0JbWVtc2V0KCZmcmVxLDAsc2l6ZW9mKGZyZXEpKTsKLQlpZiAoaGR3LT50dW5lcl9zaWduYWxfaW5mby5jYXBhYmlsaXR5ICYgVjRMMl9UVU5FUl9DQVBfTE9XKSB7Ci0JCS8vICgoZnYgKiAxMDAwKSAvIDYyNTAwKQotCQlmcmVxLmZyZXF1ZW5jeSA9IChmdiAqIDIpIC8gMTI1OwotCX0gZWxzZSB7Ci0JCWZyZXEuZnJlcXVlbmN5ID0gZnYgLyA2MjUwMDsKLQl9Ci0JLyogdHVuZXItY29yZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGNhcmUgYWJvdXQgdGhpcywgYnV0Ci0JICAgbGV0J3Mgc2V0IGl0IGFueXdheSBmb3IgY29tcGxldGVuZXNzLiAqLwotCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKLQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl9IGVsc2UgewotCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQl9Ci0JZnJlcS50dW5lciA9IDA7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0ZSRVFVRU5DWSwmZnJlcSk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19mcmVxdWVuY3koc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIGhkdy0+ZnJlcURpcnR5ICE9IDA7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfZnJlcXVlbmN5ID0gewotCS5jaGVjayA9IGNoZWNrX2ZyZXF1ZW5jeSwKLQkudXBkYXRlID0gc2V0X2ZyZXF1ZW5jeSwKLQkubmFtZSA9ICJ2NGwyX2ZyZXEiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfc2l6ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCi0JbWVtc2V0KCZmbXQsMCxzaXplb2YoZm10KSk7Ci0KLQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlmbXQuZm10LnBpeC53aWR0aCA9IGhkdy0+cmVzX2hvcl92YWw7Ci0JZm10LmZtdC5waXguaGVpZ2h0ID0gaGR3LT5yZXNfdmVyX3ZhbDsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X3NpemUoJWR4JWQpIiwKLQkJCSAgIGZtdC5mbXQucGl4LndpZHRoLGZtdC5mbXQucGl4LmhlaWdodCk7Ci0KLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfRk1ULCZmbXQpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfc2l6ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+cmVzX2hvcl9kaXJ0eSB8fCBoZHctPnJlc192ZXJfZGlydHkpOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3NpemUgPSB7Ci0JLmNoZWNrID0gY2hlY2tfc2l6ZSwKLQkudXBkYXRlID0gc2V0X3NpemUsCi0JLm5hbWUgPSAidjRsMl9zaXplIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2Nyb3Aoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfY3JvcCBjcm9wOwotCi0JbWVtc2V0KCZjcm9wLCAwLCBzaXplb2YgY3JvcCk7Ci0JY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWNyb3AuYy5sZWZ0ID0gaGR3LT5jcm9wbF92YWw7Ci0JY3JvcC5jLnRvcCA9IGhkdy0+Y3JvcHRfdmFsOwotCWNyb3AuYy5oZWlnaHQgPSBoZHctPmNyb3BoX3ZhbDsKLQljcm9wLmMud2lkdGggPSBoZHctPmNyb3B3X3ZhbDsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywKLQkJICAgImkyYyB2NGwyIHNldF9jcm9wIGNyb3A9JWQ6JWQ6JWQ6JWQiLAotCQkgICBjcm9wLmMud2lkdGgsIGNyb3AuYy5oZWlnaHQsIGNyb3AuYy5sZWZ0LCBjcm9wLmMudG9wKTsKLQotCXB2cjJfaTJjX2NvcmVfY21kKGhkdywgVklESU9DX1NfQ1JPUCwgJmNyb3ApOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX2Nyb3Aoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPmNyb3BsX2RpcnR5IHx8IGhkdy0+Y3JvcHRfZGlydHkgfHwKLQkJaGR3LT5jcm9wd19kaXJ0eSB8fCBoZHctPmNyb3BoX2RpcnR5KTsKLX0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfY3JvcCA9IHsKLQkuY2hlY2sgPSBjaGVja19jcm9wLAotCS51cGRhdGUgPSBzZXRfY3JvcCwKLQkubmFtZSA9ICJ2NGwyX2Nyb3AiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBkb19sb2coc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBkb19sb2coKSIpOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfTE9HX1NUQVRVUyxOVUxMKTsKLQotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfbG9nKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiBoZHctPmxvZ19yZXF1ZXN0ZWQgIT0gMDsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9sb2cgPSB7Ci0JLmNoZWNrID0gY2hlY2tfbG9nLAotCS51cGRhdGUgPSBkb19sb2csCi0JLm5hbWUgPSAidjRsMl9sb2ciLAotfTsKLQotCi12b2lkIHB2cjJfdjRsMl9jbWRfc3RyZWFtKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLGludCBmbCkKLXsKLQlwdnIyX2kyY19jbGllbnRfY21kKGNwLAotCQkJICAgIChmbCA/IFZJRElPQ19TVFJFQU1PTiA6IFZJRElPQ19TVFJFQU1PRkYpLE5VTEwpOwotfQotCi0KLXZvaWQgcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlpbnQgc3RhdDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwLT5oZHc7Ci0JaWYgKGhkdy0+Y3JvcGNhcF9zdGFsZSkgewotCQloZHctPmNyb3BjYXBfaW5mby50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQlzdGF0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjcCwgVklESU9DX0NST1BDQVAsCi0JCQkJCSAgICZoZHctPmNyb3BjYXBfaW5mbyk7Ci0JCWlmIChzdGF0ID09IDApIHsKLQkJCS8qIENoZWNrIHdhcyBzdWNjZXNzZnVsLCBzbyB0aGUgZGF0YSBpcyBubwotCQkJICAgbG9uZ2VyIGNvbnNpZGVyZWQgc3RhbGUuICovCi0JCQloZHctPmNyb3BjYXBfc3RhbGUgPSAwOwotCQl9Ci0JfQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3AsIFZJRElPQ19HX1RVTkVSLCAmaGR3LT50dW5lcl9zaWduYWxfaW5mbyk7Ci19Ci0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3NDRhMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fUFZSVVNCMl9DTURfVjRMMl9ICi0jZGVmaW5lIF9fUFZSVVNCMl9DTURfVjRMMl9ICi0KLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9yYWRpbzsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9iY3NoOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3ZvbHVtZTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3k7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfY3JvcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zaXplOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2F1ZGlvbW9kZTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9sb2c7Ci0KLXZvaWQgcHZyMl92NGwyX2NtZF9zdHJlYW0oc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqLGludCk7Ci12b2lkIHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLQotI2VuZGlmIC8qIF9fUFZSVVNCMl9DTURfVjRMMl9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCmluZGV4IGQ2YTM1NDAuLjk0NjQ4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwpAQCAtMTgsNiArMTgsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgpAQCAtMjksOCArMzAsNyBAQAogLyoKIAogICBUaGlzIG1vZHVsZSBhdHRlbXB0cyB0byBpbXBsZW1lbnQgYSBjb21wbGlhbnQgSTJDIGFkYXB0ZXIgZm9yIHRoZSBwdnJ1c2IyCi0gIGRldmljZS4gIEJ5IGRvaW5nIHRoaXMgd2UgY2FuIHRoZW4gbWFrZSB1c2Ugb2YgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBpbgotICBWNEwgKGUuZy4gdHVuZXIuYykgcmF0aGVyIHRoYW4gcm9sbGluZyBvdXIgb3duLgorICBkZXZpY2UuCiAKICovCiAKQEAgLTQyLDEwICs0Miw2IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJfbW9kZSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJfbW9kZSwic3BlY2lmeTogMD1kaXNhYmxlIElSIHJlY2VwdGlvbiwgMT1ub3JtYWwgSVIiKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGRldGFpbCwKLQkJCQkJICAgICBjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbik7Ci0KIHN0YXRpYyBpbnQgcHZyMl9pMmNfd3JpdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIC8qIENvbnRleHQgKi8KIAkJCSAgdTggaTJjX2FkZHIsICAgICAgLyogSTJDIGFkZHJlc3Mgd2UncmUgdGFsa2luZyB0byAqLwogCQkJICB1OCAqZGF0YSwgICAgICAgICAvKiBEYXRhIHRvIHdyaXRlICovCkBAIC01MjQsNDE0ICs1MjAsMTMgQEAKIAlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DX0kyQzsKIH0KIAotc3RhdGljIGludCBwdnIyX2kyY19jb3JlX3NpbmdsZXRvbihzdHJ1Y3QgaTJjX2NsaWVudCAqY3AsCi0JCQkJICAgdW5zaWduZWQgaW50IGNtZCx2b2lkICphcmcpCi17Ci0JaW50IHN0YXQ7Ci0JaWYgKCFjcCkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCEoY3AtPmRyaXZlcikpIHJldHVybiAtRUlOVkFMOwotCWlmICghKGNwLT5kcml2ZXItPmNvbW1hbmQpKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNwLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHJldHVybiAtRUFHQUlOOwotCXN0YXQgPSBjcC0+ZHJpdmVyLT5jb21tYW5kKGNwLGNtZCxhcmcpOwotCW1vZHVsZV9wdXQoY3AtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQlyZXR1cm4gc3RhdDsKLX0KLQotaW50IHB2cjJfaTJjX2NsaWVudF9jbWQoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsdW5zaWduZWQgaW50IGNtZCx2b2lkICphcmcpCi17Ci0JaW50IHN0YXQ7Ci0JaWYgKHB2cnVzYjJfZGVidWcgJiBQVlIyX1RSQUNFX0kyQ19DTUQpIHsKLQkJY2hhciBidWZbMTAwXTsKLQkJdW5zaWduZWQgaW50IGNudDsKLQkJY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKGNwLFBWUjJfSTJDX0RFVEFJTF9ERUJVRywKLQkJCQkJICAgICAgIGJ1ZixzaXplb2YoYnVmKSk7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ01ELAotCQkJICAgImkyYyBDT01NQU5EIChjb2RlPSV1IDB4JXgpIHRvICUuKnMiLAotCQkJICAgY21kLGNtZCxjbnQsYnVmKTsKLQl9Ci0Jc3RhdCA9IHB2cjJfaTJjX2NvcmVfc2luZ2xldG9uKGNwLT5jbGllbnQsY21kLGFyZyk7Ci0JaWYgKHB2cnVzYjJfZGVidWcgJiBQVlIyX1RSQUNFX0kyQ19DTUQpIHsKLQkJY2hhciBidWZbMTAwXTsKLQkJdW5zaWduZWQgaW50IGNudDsKLQkJY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKGNwLFBWUjJfSTJDX0RFVEFJTF9ERUJVRywKLQkJCQkJICAgICAgIGJ1ZixzaXplb2YoYnVmKSk7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ01ELAotCQkJICAgImkyYyBDT01NQU5EIHRvICUuKnMgKHJldD0lZCkiLGNudCxidWYsc3RhdCk7Ci0JfQotCXJldHVybiBzdGF0OwotfQotCi1pbnQgcHZyMl9pMmNfY29yZV9jbWQoc3RydWN0IHB2cjJfaGR3ICpoZHcsdW5zaWduZWQgaW50IGNtZCx2b2lkICphcmcpCi17Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsICpuY3A7Ci0JaW50IHN0YXQgPSAtRUlOVkFMOwotCi0JaWYgKCFoZHcpIHJldHVybiBzdGF0OwotCi0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3AsIG5jcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJaWYgKCFjcC0+cmVjdl9lbmFibGUpIGNvbnRpbnVlOwotCQltdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCXN0YXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLGNtZCxhcmcpOwotCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCX0KLQltdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JcmV0dXJuIHN0YXQ7Ci19Ci0KLQotc3RhdGljIGludCBoYW5kbGVyX2NoZWNrKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyICpocCA9IGNwLT5oYW5kbGVyOwotCWlmICghaHApIHJldHVybiAwOwotCWlmICghaHAtPmZ1bmNfdGFibGUtPmNoZWNrKSByZXR1cm4gMDsKLQlyZXR1cm4gaHAtPmZ1bmNfdGFibGUtPmNoZWNrKGhwLT5mdW5jX2RhdGEpICE9IDA7Ci19Ci0KLSNkZWZpbmUgQlVGU0laRSA1MDAKLQotCi12b2lkIHB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnRwID0gJmhkdy0+dHVuZXJfc2lnbmFsX2luZm87Ci0JCW1lbXNldCh2dHAsMCxzaXplb2YoKnZ0cCkpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJaWYgKCFjcC0+ZGV0ZWN0ZWRfZmxhZykgY29udGludWU7Ci0JCQlpZiAoIWNwLT5zdGF0dXNfcG9sbCkgY29udGludWU7Ci0JCQljcC0+c3RhdHVzX3BvbGwoY3ApOwotCQl9Ci0JCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gMDsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgc3RhdHVzIHBvbGwiCi0JCQkgICAiIHR5cGU9JXUgc3RyZW5ndGg9JXUgYXVkaW89MHgleCBjYXA9MHgleCIKLQkJCSAgICIgbG93PSV1IGhpPSV1IiwKLQkJCSAgIHZ0cC0+dHlwZSwKLQkJCSAgIHZ0cC0+c2lnbmFsLHZ0cC0+cnhzdWJjaGFucyx2dHAtPmNhcGFiaWxpdHksCi0JCQkgICB2dHAtPnJhbmdlbG93LHZ0cC0+cmFuZ2VoaWdoKTsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotfQotCi0KLS8qIElzc3VlIHZhcmlvdXMgSTJDIG9wZXJhdGlvbnMgdG8gYnJpbmcgY2hpcC1sZXZlbCBkcml2ZXJzIGludG8gc3luYyB3aXRoCi0gICBzdGF0ZSBzdG9yZWQgaW4gdGhpcyBkcml2ZXIuICovCi12b2lkIHB2cjJfaTJjX2NvcmVfc3luYyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLCAqbmNwOwotCi0JaWYgKCFoZHctPmkyY19saW5rZWQpIHJldHVybjsKLQlpZiAoIShoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9BTEwpKSB7Ci0JCXJldHVybjsKLQl9Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogY29yZV9zeW5jIEJFR0lOIik7Ci0JCWlmIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9ERVRFQ1QpIHsKLQkJCS8qIE9uZSBvciBtb3JlIEkyQyBjbGllbnRzIGhhdmUgYXR0YWNoZWQgc2luY2Ugd2UKLQkJCSAgIGxhc3Qgc3luY2VkLiAgU28gc2NhbiB0aGUgbGlzdCBhbmQgaWRlbnRpZnkgdGhlCi0JCQkgICBuZXcgY2xpZW50cy4gKi8KLQkJCWNoYXIgKmJ1ZjsKLQkJCXVuc2lnbmVkIGludCBjbnQ7Ci0JCQl1bnNpZ25lZCBsb25nIGFtYXNrID0gMDsKLQkJCWJ1ZiA9IGttYWxsb2MoQlVGU0laRSxHRlBfS0VSTkVMKTsKLQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBQRU5EX0RFVEVDVCIpOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyAmPSB+UFZSMl9JMkNfUEVORF9ERVRFQ1Q7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJCWlmICghY3AtPmRldGVjdGVkX2ZsYWcpIHsKLQkJCQkJY3AtPmN0bF9tYXNrID0gMDsKLQkJCQkJcHZyMl9pMmNfcHJvYmUoaGR3LGNwKTsKLQkJCQkJY3AtPmRldGVjdGVkX2ZsYWcgPSAhMDsKLQkJCQkJbXNrID0gY3AtPmN0bF9tYXNrOwotCQkJCQljbnQgPSAwOwotCQkJCQlpZiAoYnVmKSB7Ci0JCQkJCQljbnQgPSBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoCi0JCQkJCQkJY3AsCi0JCQkJCQkJUFZSMl9JMkNfREVUQUlMX0FMTCwKLQkJCQkJCQlidWYsQlVGU0laRSk7Ci0JCQkJCX0KLQkJCQkJdHJhY2VfaTJjKCJQcm9iZWQ6ICUuKnMiLGNudCxidWYpOwotCQkJCQlpZiAoaGFuZGxlcl9jaGVjayhjcCkpIHsKLQkJCQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0KLQkJCQkJCQlQVlIyX0kyQ19QRU5EX0NMSUVOVDsKLQkJCQkJfQotCQkJCQljcC0+cGVuZF9tYXNrID0gbXNrOwotCQkJCQloZHctPmkyY19wZW5kX21hc2sgfD0gbXNrOwotCQkJCQloZHctPmkyY19wZW5kX3R5cGVzIHw9Ci0JCQkJCQlQVlIyX0kyQ19QRU5EX1JFRlJFU0g7Ci0JCQkJfQotCQkJCWFtYXNrIHw9IGNwLT5jdGxfbWFzazsKLQkJCX0KLQkJCWhkdy0+aTJjX2FjdGl2ZV9tYXNrID0gYW1hc2s7Ci0JCQlpZiAoYnVmKSBrZnJlZShidWYpOwotCQl9Ci0JCWlmIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9TVEFMRSkgewotCQkJLyogTmVlZCB0byBkbyBvbmUgb3IgbW9yZSBnbG9iYWwgdXBkYXRlcy4gIEFycmFuZ2UKLQkJCSAgIGZvciB0aGlzIHRvIGhhcHBlbi4gKi8KLQkJCXVuc2lnbmVkIGxvbmcgbTI7Ci0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCQkJICAgImkyYzogUEVORF9TVEFMRSAoMHglbHgpIiwKLQkJCQkgICBoZHctPmkyY19zdGFsZV9tYXNrKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfU1RBTEU7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJCW0yID0gaGR3LT5pMmNfc3RhbGVfbWFzazsKLQkJCQltMiAmPSBjcC0+Y3RsX21hc2s7Ci0JCQkJbTIgJj0gfmNwLT5wZW5kX21hc2s7Ci0JCQkJaWYgKG0yKSB7Ci0JCQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwKLQkJCQkJCSAgICJpMmM6IGNwPSVwIHNldHRpbmcgMHglbHgiLAotCQkJCQkJICAgY3AsbTIpOwotCQkJCQljcC0+cGVuZF9tYXNrIHw9IG0yOwotCQkJCX0KLQkJCX0KLQkJCWhkdy0+aTJjX3BlbmRfbWFzayB8PSBoZHctPmkyY19zdGFsZV9tYXNrOwotCQkJaGR3LT5pMmNfc3RhbGVfbWFzayA9IDA7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzIHw9IFBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJfQotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQ0xJRU5UKSB7Ci0JCQkvKiBPbmUgb3IgbW9yZSBjbGllbnQgaGFuZGxlcnMgYXJlIGFza2luZyBmb3IgYW4KLQkJCSAgIHVwZGF0ZS4gIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIGNsaWVudHMKLQkJCSAgIGFuZCB1cGRhdGUgZWFjaCBvbmUuICovCi0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogUEVORF9DTElFTlQiKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfQ0xJRU5UOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwLCBuY3AsICZoZHctPmkyY19jbGllbnRzLAotCQkJCQkJIGxpc3QpIHsKLQkJCQlpZiAoIWNwLT5oYW5kbGVyKSBjb250aW51ZTsKLQkJCQlpZiAoIWNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT51cGRhdGUpIGNvbnRpbnVlOwotCQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwKLQkJCQkJICAgImkyYzogY3A9JXAgdXBkYXRlIixjcCk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJCWNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT51cGRhdGUoCi0JCQkJCWNwLT5oYW5kbGVyLT5mdW5jX2RhdGEpOwotCQkJCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCQkJLyogSWYgY2xpZW50J3MgdXBkYXRlIGZ1bmN0aW9uIHNldCBzb21lCi0JCQkJICAgYWRkaXRpb25hbCBwZW5kaW5nIGJpdHMsIGFjY291bnQgZm9yIHRoYXQKLQkJCQkgICBoZXJlLiAqLwotCQkJCWlmIChjcC0+cGVuZF9tYXNrICYgfmhkdy0+aTJjX3BlbmRfbWFzaykgewotCQkJCQloZHctPmkyY19wZW5kX21hc2sgfD0gY3AtPnBlbmRfbWFzazsKLQkJCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PQotCQkJCQkJUFZSMl9JMkNfUEVORF9SRUZSRVNIOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfUkVGUkVTSCkgewotCQkJY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wICpvcGY7Ci0JCQl1bnNpZ25lZCBsb25nIHBtOwotCQkJLyogU29tZSBhY3R1YWwgdXBkYXRlcyBhcmUgcGVuZGluZy4gIFdhbGsgdGhyb3VnaAotCQkJICAgZWFjaCB1cGRhdGUgdHlwZSBhbmQgcGVyZm9ybSBpdC4gKi8KLQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBQRU5EX1JFRlJFU0giCi0JCQkJICAgIiAoMHglbHgpIixoZHctPmkyY19wZW5kX21hc2spOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyAmPSB+UFZSMl9JMkNfUEVORF9SRUZSRVNIOwotCQkJcG0gPSBoZHctPmkyY19wZW5kX21hc2s7Ci0JCQloZHctPmkyY19wZW5kX21hc2sgPSAwOwotCQkJZm9yIChpZHggPSAwLCBtc2sgPSAxOyBwbTsgaWR4KyssIG1zayA8PD0gMSkgewotCQkJCWlmICghKHBtICYgbXNrKSkgY29udGludWU7Ci0JCQkJcG0gJj0gfm1zazsKLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywKLQkJCQkJCSAgICBsaXN0KSB7Ci0JCQkJCWlmIChjcC0+cGVuZF9tYXNrICYgbXNrKSB7Ci0JCQkJCQljcC0+cGVuZF9tYXNrICY9IH5tc2s7Ci0JCQkJCQljcC0+cmVjdl9lbmFibGUgPSAhMDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNwLT5yZWN2X2VuYWJsZSA9IDA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJb3BmID0gcHZyMl9pMmNfZ2V0X29wKGlkeCk7Ci0JCQkJaWYgKCFvcGYpIGNvbnRpbnVlOwotCQkJCW11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJCQlvcGYtPnVwZGF0ZShoZHcpOwotCQkJCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCQl9Ci0JCX0KLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IGNvcmVfc3luYyBFTkQiKTsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotfQotCi1pbnQgcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQl1bnNpZ25lZCBsb25nIG1zayxzbSxwbTsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqb3BmOwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwotCXVuc2lnbmVkIGludCBwdCA9IDA7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsInB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUgQkVHSU4iKTsKLQotCXBtID0gaGR3LT5pMmNfYWN0aXZlX21hc2s7Ci0Jc20gPSAwOwotCWZvciAoaWR4ID0gMCwgbXNrID0gMTsgcG07IGlkeCsrLCBtc2sgPDw9IDEpIHsKLQkJaWYgKCEobXNrICYgcG0pKSBjb250aW51ZTsKLQkJcG0gJj0gfm1zazsKLQkJb3BmID0gcHZyMl9pMmNfZ2V0X29wKGlkeCk7Ci0JCWlmICghb3BmKSBjb250aW51ZTsKLQkJaWYgKG9wZi0+Y2hlY2soaGR3KSkgewotCQkJc20gfD0gbXNrOwotCQl9Ci0JfQotCWlmIChzbSkgcHQgfD0gUFZSMl9JMkNfUEVORF9TVEFMRTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KQotCQlpZiAoaGFuZGxlcl9jaGVjayhjcCkpCi0JCQlwdCB8PSBQVlIyX0kyQ19QRU5EX0NMSUVOVDsKLQotCWlmIChwdCkgewotCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzIHw9IHB0OwotCQkJaGR3LT5pMmNfc3RhbGVfbWFzayB8PSBzbTsKLQkJCWhkdy0+aTJjX3BlbmRfbWFzayB8PSBoZHctPmkyY19zdGFsZV9tYXNrOwotCQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCX0KLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwKLQkJICAgImkyYzogdHlwZXM9MHgleCBzdGFsZT0weCVseCBwZW5kPTB4JWx4IiwKLQkJICAgaGR3LT5pMmNfcGVuZF90eXBlcywKLQkJICAgaGR3LT5pMmNfc3RhbGVfbWFzaywKLQkJICAgaGR3LT5pMmNfcGVuZF9tYXNrKTsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsInB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUgRU5EIik7Ci0KLQlyZXR1cm4gKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0FMTCkgIT0gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGRldGFpbCwKLQkJCQkJICAgICBjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgY2NudCxiY250OwotCWludCBzcGNmbCA9IDA7Ci0JY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wICpvcGY7Ci0KLQljY250ID0gMDsKLQlpZiAoZGV0YWlsICYgUFZSMl9JMkNfREVUQUlMX0RFQlVHKSB7Ci0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwKLQkJCQkgImN0eHQ9JXAgY3RsX21hc2s9MHglbHgiLAotCQkJCSBjcCxjcC0+Y3RsX21hc2spOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJc3BjZmwgPSAhMDsKLQl9Ci0JYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLAotCQkJICIlcyVzIEAgMHgleCIsCi0JCQkgKHNwY2ZsID8gIiAiIDogIiIpLAotCQkJIGNwLT5jbGllbnQtPm5hbWUsCi0JCQkgY3AtPmNsaWVudC0+YWRkcik7Ci0JY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JaWYgKChkZXRhaWwgJiBQVlIyX0kyQ19ERVRBSUxfSEFORExFUikgJiYKLQkgICAgY3AtPmhhbmRsZXIgJiYgY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRlc2NyaWJlKSB7Ci0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiICgiKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCWJjbnQgPSBjcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+ZGVzY3JpYmUoCi0JCQljcC0+aGFuZGxlci0+ZnVuY19kYXRhLGJ1ZixtYXhsZW4pOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCIpIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCX0KLQlpZiAoKGRldGFpbCAmIFBWUjJfSTJDX0RFVEFJTF9DVExNQVNLKSAmJiBjcC0+Y3RsX21hc2spIHsKLQkJdW5zaWduZWQgaW50IGlkeDsKLQkJdW5zaWduZWQgbG9uZyBtc2ssc207Ci0KLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCIgWyIpOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJc20gPSAwOwotCQlzcGNmbCA9IDA7Ci0JCWZvciAoaWR4ID0gMCwgbXNrID0gMTsgbXNrOyBpZHgrKywgbXNrIDw8PSAxKSB7Ci0JCQlpZiAoIShjcC0+Y3RsX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJCW9wZiA9IHB2cjJfaTJjX2dldF9vcChpZHgpOwotCQkJaWYgKG9wZikgewotCQkJCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiJXMlcyIsCi0JCQkJCQkgc3BjZmwgPyAiICIgOiAiIiwKLQkJCQkJCSBvcGYtPm5hbWUpOwotCQkJCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQkJCXNwY2ZsID0gITA7Ci0JCQl9IGVsc2UgewotCQkJCXNtIHw9IG1zazsKLQkJCX0KLQkJfQotCQlpZiAoc20pIHsKLQkJCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiJXMlbHgiLAotCQkJCQkgaWR4ICE9IDAgPyAiICIgOiAiIixzbSk7Ci0JCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJfQotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIl0iKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JfQotCXJldHVybiBjY250OwotfQotCi11bnNpZ25lZCBpbnQgcHZyMl9pMmNfcmVwb3J0KHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkJICAgICBjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgY2NudCxiY250OwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwotCWNjbnQgPSAwOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWJjbnQgPSBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoCi0JCQkJY3AsCi0JCQkJKFBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSfAotCQkJCSBQVlIyX0kyQ19ERVRBSUxfQ1RMTUFTSyksCi0JCQkJYnVmLG1heGxlbik7Ci0JCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiXG4iKTsKLQkJCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQl9Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQlyZXR1cm4gY2NudDsKLX0KLQogc3RhdGljIGludCBwdnIyX2kyY19hdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSAoc3RydWN0IHB2cjJfaGR3ICopKGNsaWVudC0+YWRhcHRlci0+YWxnb19kYXRhKTsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQlpbnQgZmwgPSAhKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0FMTCk7Ci0JY3AgPSBremFsbG9jKHNpemVvZigqY3ApLEdGUF9LRVJORUwpOwotCXRyYWNlX2kyYygiaTJjX2F0dGFjaCBbY2xpZW50PSVzIEAgMHgleCBjdHh0PSVwXSIsCi0JCSAgY2xpZW50LT5uYW1lLAotCQkgIGNsaWVudC0+YWRkcixjcCk7Ci0JaWYgKCFjcCkgcmV0dXJuIC1FTk9NRU07Ci0JY3AtPmhkdyA9IGhkdzsKLQlJTklUX0xJU1RfSEVBRCgmY3AtPmxpc3QpOwotCWNwLT5jbGllbnQgPSBjbGllbnQ7Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKLQkJbGlzdF9hZGRfdGFpbCgmY3AtPmxpc3QsJmhkdy0+aTJjX2NsaWVudHMpOwotCQloZHctPmkyY19wZW5kX3R5cGVzIHw9IFBWUjJfSTJDX1BFTkRfREVURUNUOwotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JaWYgKGZsKSBxdWV1ZV93b3JrKGhkdy0+d29ya3F1ZXVlLCZoZHctPndvcmtpMmNzeW5jKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwdnIyX2kyY19kZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSAoc3RydWN0IHB2cjJfaGR3ICopKGNsaWVudC0+YWRhcHRlci0+YWxnb19kYXRhKTsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwgKm5jcDsKLQl1bnNpZ25lZCBsb25nIGFtYXNrID0gMDsKLQlpbnQgZm91bmRmbCA9IDA7Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwLCBuY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQlpZiAoY3AtPmNsaWVudCA9PSBjbGllbnQpIHsKLQkJCQl0cmFjZV9pMmMoInB2cjJfaTJjX2RldGFjaCIKLQkJCQkJICAiIFtjbGllbnQ9JXMgQCAweCV4IGN0eHQ9JXBdIiwKLQkJCQkJICBjbGllbnQtPm5hbWUsCi0JCQkJCSAgY2xpZW50LT5hZGRyLGNwKTsKLQkJCQlpZiAoY3AtPmhhbmRsZXIgJiYKLQkJCQkgICAgY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRldGFjaCkgewotCQkJCQljcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+ZGV0YWNoKAotCQkJCQkJY3AtPmhhbmRsZXItPmZ1bmNfZGF0YSk7Ci0JCQkJfQotCQkJCWxpc3RfZGVsKCZjcC0+bGlzdCk7Ci0JCQkJa2ZyZWUoY3ApOwotCQkJCWZvdW5kZmwgPSAhMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWFtYXNrIHw9IGNwLT5jdGxfbWFzazsKLQkJfQotCQloZHctPmkyY19hY3RpdmVfbWFzayA9IGFtYXNrOwotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JaWYgKCFmb3VuZGZsKSB7Ci0JCXRyYWNlX2kyYygicHZyMl9pMmNfZGV0YWNoIFtjbGllbnQ9JXMgQCAweCV4IGN0eHQ9PHVua25vd24+XSIsCi0JCQkgIGNsaWVudC0+bmFtZSwKLQkJCSAgY2xpZW50LT5hZGRyKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk0Miw3ICs1MzcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHB2cjJfaTJjX2FkYXBfdGVtcGxhdGUgPSB7CiAJLm93bmVyICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkuY2xhc3MJICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAorCS5jbGFzcwkgICAgICAgPSAwLAogCS5pZCAgICAgICAgICAgID0gSTJDX0hXX0JfQlQ4NDgsCiAJLmNsaWVudF9yZWdpc3RlciA9IHB2cjJfaTJjX2F0dGFjaF9pbmZvcm0sCiAJLmNsaWVudF91bnJlZ2lzdGVyID0gcHZyMl9pMmNfZGV0YWNoX2luZm9ybSwKQEAgLTEwMDksMTIgKzYwNCw4IEBACiAJaGR3LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmhkdy0+dXNiX2Rldi0+ZGV2OwogCWhkdy0+aTJjX2FkYXAuYWxnbyA9ICZoZHctPmkyY19hbGdvOwogCWhkdy0+aTJjX2FkYXAuYWxnb19kYXRhID0gaGR3OwotCWhkdy0+aTJjX3BlbmRfbWFzayA9IDA7Ci0JaGR3LT5pMmNfc3RhbGVfbWFzayA9IDA7Ci0JaGR3LT5pMmNfYWN0aXZlX21hc2sgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZoZHctPmkyY19jbGllbnRzKTsKLQltdXRleF9pbml0KCZoZHctPmkyY19saXN0X2xvY2spOwogCWhkdy0+aTJjX2xpbmtlZCA9ICEwOworCWkyY19zZXRfYWRhcGRhdGEoJmhkdy0+aTJjX2FkYXAsICZoZHctPnY0bDJfZGV2KTsKIAlpMmNfYWRkX2FkYXB0ZXIoJmhkdy0+aTJjX2FkYXApOwogCWlmIChoZHctPmkyY19mdW5jWzB4MThdID09IGkyY18yNHh4eF9pcikgewogCQkvKiBQcm9iZSBmb3IgYSBkaWZmZXJlbnQgdHlwZSBvZiBJUiByZWNlaXZlciBvbiB0aGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaAppbmRleCA2ZWY3YTFjLi42YTc1NzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKQEAgLTIwLDY4ICsyMCwxMyBAQAogI2lmbmRlZiBfX1BWUlVTQjJfSTJDX0NPUkVfSAogI2RlZmluZSBfX1BWUlVTQjJfSTJDX0NPUkVfSAogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCiBzdHJ1Y3QgcHZyMl9oZHc7Ci1zdHJ1Y3QgcHZyMl9pMmNfY2xpZW50Owotc3RydWN0IHB2cjJfaTJjX2hhbmRsZXI7Ci1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnM7Ci1zdHJ1Y3QgcHZyMl9pMmNfb3A7Ci1zdHJ1Y3QgcHZyMl9pMmNfb3BfZnVuY3Rpb25zOwotCi1zdHJ1Y3QgcHZyMl9pMmNfY2xpZW50IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKLQlpbnQgZGV0ZWN0ZWRfZmxhZzsKLQlpbnQgcmVjdl9lbmFibGU7Ci0JdW5zaWduZWQgbG9uZyBwZW5kX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBjdGxfbWFzazsKLQl2b2lkICgqc3RhdHVzX3BvbGwpKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci19OwotCi1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciB7Ci0Jdm9pZCAqZnVuY19kYXRhOwotCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyAqZnVuY190YWJsZTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyB7Ci0Jdm9pZCAoKmRldGFjaCkodm9pZCAqKTsKLQlpbnQgKCpjaGVjaykodm9pZCAqKTsKLQl2b2lkICgqdXBkYXRlKSh2b2lkICopOwotCXVuc2lnbmVkIGludCAoKmRlc2NyaWJlKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCk7Ci19OwotCi1zdHJ1Y3QgcHZyMl9pMmNfb3AgewotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfaGR3ICopOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwogCiB2b2lkIHB2cjJfaTJjX2NvcmVfaW5pdChzdHJ1Y3QgcHZyMl9oZHcgKik7CiB2b2lkIHB2cjJfaTJjX2NvcmVfZG9uZShzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKLWludCBwdnIyX2kyY19jbGllbnRfY21kKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKix1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7Ci1pbnQgcHZyMl9pMmNfY29yZV9jbWQoc3RydWN0IHB2cjJfaGR3ICosdW5zaWduZWQgaW50IGNtZCx2b2lkICphcmcpOwogCi1pbnQgcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaTJjX2NvcmVfc3luYyhzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICopOwotdW5zaWduZWQgaW50IHB2cjJfaTJjX3JlcG9ydChzdHJ1Y3QgcHZyMl9oZHcgKixjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbik7Ci0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9ERUJVRyAgIDB4MDAwMQotI2RlZmluZSBQVlIyX0kyQ19ERVRBSUxfSEFORExFUiAweDAwMDIKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0sgMHgwMDA0Ci0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9BTEwgKFwKLQlQVlIyX0kyQ19ERVRBSUxfREVCVUcgfFwKLQlQVlIyX0kyQ19ERVRBSUxfSEFORExFUiB8XAotCVBWUjJfSTJDX0RFVEFJTF9DVExNQVNLKQotCi12b2lkIHB2cjJfaTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKnB2cjJfaTJjX2dldF9vcCh1bnNpZ25lZCBpbnQgaWR4KTsKLQotI2VuZGlmIC8qIF9fUFZSVVNCMl9JMkNfQ09SRV9IICovCisjZW5kaWYgLyogX19QVlJVU0IyX0kyQ19BREFQVEVSX0ggKi8KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IDliM2M4NzQuLjg2ODlkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKQEAgLTEzNywxMCArMTM3LDEwIEBACiAJcmV0ID0gdXNiX3JlZ2lzdGVyKCZwdnJfZHJpdmVyKTsKIAogCWlmIChyZXQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiAiIERSSVZFUl9WRVJTSU9OICI6IgogCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJaWYgKHB2cnVzYjJfZGVidWcpCi0JCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogRGVidWcgbWFzayBpcyAlZCAoMHgleClcbiIsCisJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IERlYnVnIG1hc2sgaXMgJWQgKDB4JXgpXG4iLAogCQkgICAgICAgcHZydXNiMl9kZWJ1ZyxwdnJ1c2IyX2RlYnVnKTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJwdnJfaW5pdCBjb21wbGV0ZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggZTY0MWNkOS4uZTIwYmExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02MjcsMTYgKzYyNyw4IEBACiAJcHZyMl9zeXNmc190cmFjZSgiQ3JlYXRpbmcgY2xhc3NfZGV2IGlkPSVwIixjbGFzc19kZXYpOwogCiAJY2xhc3NfZGV2LT5jbGFzcyA9ICZjbGFzc19wdHItPmNsYXNzOwotCWlmIChwdnIyX2hkd19nZXRfc24oc2ZwLT5jaGFubmVsLmhkdykpIHsKLQkJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgInNuLSVsdSIsCi0JCQkgcHZyMl9oZHdfZ2V0X3NuKHNmcC0+Y2hhbm5lbC5oZHcpKTsKLQl9IGVsc2UgaWYgKHB2cjJfaGR3X2dldF91bml0X251bWJlcihzZnAtPmNoYW5uZWwuaGR3KSA+PSAwKSB7Ci0JCWRldl9zZXRfbmFtZShjbGFzc19kZXYsICJ1bml0LSVjIiwKLQkJCSBwdnIyX2hkd19nZXRfdW5pdF9udW1iZXIoc2ZwLT5jaGFubmVsLmhkdykgKyAnYScpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGNsYXNzX2Rldik7Ci0JCXJldHVybjsKLQl9CisJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgIiVzIiwKKwkJICAgICBwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc2ZwLT5jaGFubmVsLmhkdykpOwogCiAJY2xhc3NfZGV2LT5wYXJlbnQgPSAmdXNiX2Rldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3NzVkMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicHZydXNiMi5oIgotI2luY2x1ZGUgInB2cnVzYjItdXRpbC5oIgotI2luY2x1ZGUgInB2cnVzYjItdHVuZXIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLXN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciBpMmNfaGFuZGxlcjsKLQlpbnQgdHlwZV91cGRhdGVfZmw7Ci19OwotCi0KLXN0YXRpYyB2b2lkIHNldF90eXBlKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHR1bmVyX3NldHVwIHNldHVwOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHR1bmVyIHNldF90eXBlKCVkKSIsaGR3LT50dW5lcl90eXBlKTsKLQlpZiAoKChpbnQpKGhkdy0+dHVuZXJfdHlwZSkpIDwgMCkgcmV0dXJuOwotCi0Jc2V0dXAuYWRkciA9IEFERFJfVU5TRVQ7Ci0Jc2V0dXAudHlwZSA9IGhkdy0+dHVuZXJfdHlwZTsKLQlzZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPIHwgVF9BTkFMT0dfVFY7Ci0JLyogV2UgbWF5IHJlYWxseSB3YW50IG1vZGVfbWFzayB0byBiZSBUX0FOQUxPR19UViBmb3Igbm93ICovCi0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVFVORVJfU0VUX1RZUEVfQUREUiwmc2V0dXApOwotCWN0eHQtPnR5cGVfdXBkYXRlX2ZsID0gMDsKLX0KLQotCi1zdGF0aWMgaW50IHR1bmVyX2NoZWNrKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JaWYgKGhkdy0+dHVuZXJfdXBkYXRlZCkgY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAhMDsKLQlyZXR1cm4gY3R4dC0+dHlwZV91cGRhdGVfZmwgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCB0dW5lcl91cGRhdGUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlpZiAoY3R4dC0+dHlwZV91cGRhdGVfZmwpIHNldF90eXBlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB2b2lkIHB2cjJfdHVuZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfdHVuZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCxjaGFyICpidWYsdW5zaWduZWQgaW50IGNudCkKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixjbnQsImhhbmRsZXI6IHB2cnVzYjItdHVuZXIiKTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIHR1bmVyX2Z1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX3R1bmVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKXR1bmVyX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl0dW5lcl91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKXB2cjJfdHVuZXJfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY190dW5lcl9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0OwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5pMmNfaGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfdGFibGUgPSAmdHVuZXJfZnVuY3M7Ci0JY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAhMDsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3AtPmhhbmRsZXIgPSAmY3R4dC0+aTJjX2hhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCB0dW5lciBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCmluZGV4IDg3OGZkNTIuLjllMGYyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkuY2FyZCAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIHB2ci11c2IyIiwKIAkuYnVzX2luZm8gICAgICAgPSAidXNiIiwKIAkudmVyc2lvbiAgICAgICAgPSBLRVJORUxfVkVSU0lPTigwLDgsMCksCi0JLmNhcGFiaWxpdGllcyAgID0gKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CisJLmNhcGFiaWxpdGllcyAgID0gKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJICAgVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JBRElPIHwKIAkJCSAgIFY0TDJfQ0FQX1JFQURXUklURSksCiAJLnJlc2VydmVkICAgICAgID0gezAsMCwwLDB9CkBAIC05NTIsMTAgKzk1Miw2IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAotLyogVGVtcG9yYXJ5IGhhY2sgOiB1c2UgaXZ0diBhcGkgdW50aWwgYSB2NGwyIG9uZSBpcyBhdmFpbGFibGUuICovCi0jZGVmaW5lIElWVFZfSU9DX0dfQ09ERUMgICAgICAgIDB4RkZFRTc3MDMKLSNkZWZpbmUgSVZUVl9JT0NfU19DT0RFQyAgICAgICAgMHhGRkVFNzcwNAotCWlmIChjbWQgPT0gSVZUVl9JT0NfR19DT0RFQyB8fCBjbWQgPT0gSVZUVl9JT0NfU19DT0RFQykgcmV0dXJuIDA7CiAJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBwdnIyX3Y0bDJfZG9faW9jdGwpOwogfQogCkBAIC0xMjY4LDggKzEyNjQsOSBAQAogCQlkaXAtPm1pbm9yX3R5cGUgPSBwdnIyX3Y0bF90eXBlX3ZpZGVvOwogCQlucl9wdHIgPSB2aWRlb19ucjsKIAkJaWYgKCFkaXAtPnN0cmVhbSkgewotCQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIHZpZGVvIGRldiIKLQkJCSAgICAiIGR1ZSB0byBtaXNzaW5nIHN0cmVhbSBpbnN0YW5jZSIpOworCQkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkJIjogRmFpbGVkIHRvIHNldCB1cCBwdnJ1c2IyIHY0bCB2aWRlbyBkZXYiCisJCQkJIiBkdWUgdG8gbWlzc2luZyBzdHJlYW0gaW5zdGFuY2VcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMTI4Niw4ICsxMjgzLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogQmFpbCBvdXQgKHRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUpICovCi0JCWVycigiRmFpbGVkIHRvIHNldCB1cCBwdnJ1c2IyIHY0bCBkZXYiCi0JCSAgICAiIGR1ZSB0byB1bnJlY29nbml6ZWQgY29uZmlnIik7CisJCXByX2VycihLQlVJTERfTU9ETkFNRSAiOiBGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIGRldiIKKwkJICAgICIgZHVlIHRvIHVucmVjb2duaXplZCBjb25maWdcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzAzLDcgKzEzMDAsOCBAQAogCQkJCSAgIGRpcC0+djRsX3R5cGUsIG1pbmRldm51bSkgPCAwKSAmJgogCSAgICAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UsCiAJCQkJICAgZGlwLT52NGxfdHlwZSwgLTEpIDwgMCkpIHsKLQkJZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgcHZydXNiMiB2NGwgZGV2aWNlIik7CisJCXByX2VycihLQlVJTERfTU9ETkFNRQorCQkJIjogRmFpbGVkIHRvIHJlZ2lzdGVyIHB2cnVzYjIgdjRsIGRldmljZVxuIik7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMldSBbJXNdXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwppbmRleCA0MDU5NjQ4Li5iMzg2MmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwpAQCAtMjgsNyArMjgsNyBAQAogKi8KIAogI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKKwogCiAKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgpAQCAtMzksMTUgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIGN0cmw7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KLQogc3RydWN0IHJvdXRpbmdfc2NoZW1lIHsKIAljb25zdCBpbnQgKmRlZjsKIAl1bnNpZ25lZCBpbnQgY250OwpAQCAtNjMsMTkwICs1NCw1MSBAQAogCVtQVlIyX0NWQUxfSU5QVVRfU1ZJREVPXSA9ICBTQUE3MTE1X1NWSURFTzIsCiB9OwogCitzdGF0aWMgY29uc3QgaW50IHJvdXRpbmdfc2NoZW1lMVtdID0geworCVtQVlIyX0NWQUxfSU5QVVRfVFZdID0gU0FBNzExNV9DT01QT1NJVEU0LAorCVtQVlIyX0NWQUxfSU5QVVRfUkFESU9dID0gU0FBNzExNV9DT01QT1NJVEU1LAorCVtQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFXSA9IFNBQTcxMTVfQ09NUE9TSVRFMywKKwlbUFZSMl9DVkFMX0lOUFVUX1NWSURFT10gPSAgU0FBNzExNV9TVklERU8yLCAvKiBvciBTVklERU8wLCBpdCBzZWVtcyAqLworfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSByb3V0aW5nX3NjaGVtZXNbXSA9IHsKIAlbUFZSMl9ST1VUSU5HX1NDSEVNRV9IQVVQUEFVR0VdID0gewogCQkuZGVmID0gcm91dGluZ19zY2hlbWUwLAogCQkuY250ID0gQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZTApLAogCX0sCisJW1BWUjJfUk9VVElOR19TQ0hFTUVfT05BSVJdID0geworCQkuZGVmID0gcm91dGluZ19zY2hlbWUxLAorCQkuY250ID0gQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZTEpLAorCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBzZXRfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCit2b2lkIHB2cjJfc2FhNzExNV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKLQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfaW5wdXQoJWQpIixoZHctPmlucHV0X3ZhbCk7Ci0KLQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKLQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7Ci0JCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07Ci0JfSBlbHNlIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiKioqIFdBUk5JTkcgKioqIGkyYyB2NGwyIHNldF9pbnB1dDoiCi0JCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSBhbmQvb3IgaW5wdXQgKCVkKSIsCi0JCQkgICBzaWQsaGR3LT5pbnB1dF92YWwpOwotCQlyZXR1cm47Ci0JfQotCi0Jcm91dGUub3V0cHV0ID0gMDsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywmcm91dGUpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0JdTMyIHZhbDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2F1ZGlvICVkIiwKLQkJICAgaGR3LT5zcmF0ZV92YWwpOwotCXN3aXRjaCAoaGR3LT5zcmF0ZV92YWwpIHsKLQlkZWZhdWx0OgotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXZhbCA9IDQ4MDAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwOgotCQl2YWwgPSA0NDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMDoKLQkJdmFsID0gMzIwMDA7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsJnZhbCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5zcmF0ZV9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyX29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKik7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX2RlY29kZXJfb3BzIGRlY29kZXJfb3BzW10gPSB7Ci0JeyAudXBkYXRlID0gc2V0X2lucHV0LCAuY2hlY2sgPSBjaGVja19pbnB1dH0sCi0JeyAudXBkYXRlID0gc2V0X2F1ZGlvLCAuY2hlY2sgPSBjaGVja19hdWRpb30sCi19OwotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoY3R4dC0+aGR3LE5VTEwpOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgZGVjb2Rlcl9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKGRlY29kZXJfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwkJY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKKwkJdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2lucHV0KCVkKSIsCisJCQkgICBoZHctPmlucHV0X3ZhbCk7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiB2NGwyIHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmICghKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJY3R4dC0+c3RhbGVfbWFzayAmPSB+bXNrOwotCQlkZWNvZGVyX29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJcm91dGUub3V0cHV0ID0gMDsKKwkJc2QtPm9wcy0+dmlkZW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKIAotc3RhdGljIGludCBkZWNvZGVyX2RldGVjdChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQkvKiBBdHRlbXB0IHRvIHF1ZXJ5IHRoZSBkZWNvZGVyIC0gbGV0J3Mgc2VlIGlmIGl0IHdpbGwgYW5zd2VyICovCi0Jc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JaW50IHJldDsKLQotCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19HX1RVTkVSLCZ2dCk7Ci0JcmV0dXJuIHJldCA9PSAwOyAvKiBSZXR1cm4gdHJ1ZSBpZiBpdCBhbnN3ZXJlZCAqLwotfQotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZW5hYmxlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0LGludCBmbCkKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIGRlY29kZXJfZW5hYmxlKCVkKSIsZmwpOwotCXB2cjJfdjRsMl9jbWRfc3RyZWFtKGN0eHQtPmNsaWVudCxmbCk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWNvZGVyX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0LGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi12aWRlby12NGwiKTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIGhmdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSlkZWNvZGVyX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpZGVjb2Rlcl9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX2RlY29kZXJfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkJICAgICAgIHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0OwotCi0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsKSByZXR1cm4gMDsKLQlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwotCWlmICghZGVjb2Rlcl9kZXRlY3QoY3ApKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwotCWN0eHQtPmN0cmwuY3R4dCA9IGN0eHQ7Ci0JY3R4dC0+Y3RybC5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaDsKLQljdHh0LT5jdHJsLmVuYWJsZSA9ICh2b2lkICgqKSh2b2lkICosaW50KSlkZWNvZGVyX2VuYWJsZTsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpKSAtIDE7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoaGR3LCZjdHh0LT5jdHJsKTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggc2FhNzExeCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KLQotCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgogICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKaW5kZXggNGZmNWI4OS4uM2IwYmQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKQEAgLTMyLDExICszMiw4IEBACiAqLwogCiAKLQotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLQotaW50IHB2cjJfaTJjX2RlY29kZXJfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgordm9pZCBwdnIyX3NhYTcxMTVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX1ZJREVPX1Y0TF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKaW5kZXggZjZmY2YwYS4uMTY3MGFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKQEAgLTI3LDcgKzI3LDYgQEAKICovCiAKICNpbmNsdWRlICJwdnJ1c2IyLXdtODc3NS5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCiAKIAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCkBAIC0zNywxMjggKzM2LDMxIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLXN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2lucHV0KHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCit2b2lkIHB2cjJfd204Nzc1X3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKLQltZW1zZXQoJnJvdXRlLDAsc2l6ZW9mKHJvdXRlKSk7CisJCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOwogCi0Jc3dpdGNoKGhkdy0+aW5wdXRfdmFsKSB7Ci0JY2FzZSBQVlIyX0NWQUxfSU5QVVRfUkFESU86Ci0JCXJvdXRlLmlucHV0ID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogQWxsIG90aGVyIGNhc2VzIGp1c3QgdXNlIHRoZSBzZWNvbmQgaW5wdXQgKi8KLQkJcm91dGUuaW5wdXQgPSAyOwotCQlicmVhazsKLQl9Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgd204Nzc1IHNldF9pbnB1dCh2YWw9JWQgcm91dGU9MHgleCkiLAotCQkgICBoZHctPmlucHV0X3ZhbCxyb3V0ZS5pbnB1dCk7Ci0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX2lucHV0KHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdHJ1Y3QgcHZyMl92NGxfd204Nzc1X29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqKTsKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX3Y0bF93bTg3NzVfb3BzIHdtODc3NV9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfaW5wdXQsIC5jaGVjayA9IGNoZWNrX2lucHV0fSwKLX07Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCB3bTg3NzVfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCwKLQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi13bTg3NzUiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCB3bTg3NzVfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgaW50IHdtODc3NV9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUod204Nzc1X29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7Ci0JCWlmICh3bTg3NzVfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCQlzd2l0Y2ggKGhkdy0+aW5wdXRfdmFsKSB7CisJCWNhc2UgUFZSMl9DVkFMX0lOUFVUX1JBRElPOgorCQkJcm91dGUuaW5wdXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBBbGwgb3RoZXIgY2FzZXMganVzdCB1c2UgdGhlIHNlY29uZCBpbnB1dCAqLworCQkJcm91dGUuaW5wdXQgPSAyOworCQkJYnJlYWs7CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHdtODc3NSIKKwkJCSAgICIgc2V0X2lucHV0KHZhbD0lZCByb3V0ZT0weCV4KSIsCisJCQkgICBoZHctPmlucHV0X3ZhbCwgcm91dGUuaW5wdXQpOwogCi0KLXN0YXRpYyB2b2lkIHdtODc3NV91cGRhdGUoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHdtODc3NV9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCXdtODc3NV9vcHNbaWR4XS51cGRhdGUoY3R4dCk7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CiAJfQogfQogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpd204Nzc1X2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSl3bTg3NzVfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY193bTg3NzVfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dDsKLQotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aGFuZGxlci5mdW5jX3RhYmxlID0gJmhmdW5jczsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUod204Nzc1X29wcykpIC0gMTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggd204Nzc1IFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQotCiAKIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCmluZGV4IDgwNzA5MDkuLjA1NzdiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCkBAIC0zNCw5ICszNCw5IEBACiAKIAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAKLWludCBwdnIyX2kyY193bTg3NzVfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKK3ZvaWQgcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9XTTg3NzVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKaW5kZXggNzI5OGNmMi4uOGI5ZjBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCkBAIC0zNSwzICszNSwxMyBAQAogCSAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBwd2MgZHJpdmVyIGdlbmVyYXRlIHZlcmJvc2UgZGVidWdnaW5nCiAJICBtZXNzYWdlcy4KIAkgIEEgc3BlY2lhbCBtb2R1bGUgb3B0aW9ucyAndHJhY2UnIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgdmVyYm9zaXR5LgorCitjb25maWcgVVNCX1BXQ19JTlBVVF9FVkRFVgorCWJvb2wgIlVTQiBQaGlsaXBzIENhbWVyYXMgaW5wdXQgZXZlbnRzIGRldmljZSBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCX1BXQyAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIG1ha2VzIFVTQiBQaGlsaXBzIGNhbWVyYXMgcmVnaXN0ZXIgdGhlIHNuYXBzaG90IGJ1dHRvbiBhcworCSAgYW4gaW5wdXQgZGV2aWNlIHRvIHJlcG9ydCBidXR0b24gZXZlbnRzLgorCisJICBJZiB5b3UgYXJlIGluIGRvdWJ0LCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggMGQ4MTAxOC4uN2M1NDJjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTUzLDYgKzUzLDcgQEAKICAgIC0gWGF2aWVyIFJvY2hlOiBRdWlja0NhbSBQcm8gNDAwMCBJRAogICAgLSBKZW5zIEtudWRzZW46IFF1aWNrQ2FtIFpvb20gSUQKICAgIC0gSi4gRGViZXJ0OiBRdWlja0NhbSBmb3IgTm90ZWJvb2tzIElECisgICAtIFBoYW0gVGhhbmggTmFtOiB3ZWJjYW0gc25hcHNob3QgYnV0dG9uIGFzIGFuIGV2ZW50IGlucHV0IGRldmljZQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02MSw2ICs2Miw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC01ODYsNiArNTkwLDIzIEBACiAJCQkJcGRldi0+dmZyYW1lX2NvdW50KTsKIH0KIAorc3RhdGljIHZvaWQgcHdjX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGRvd24pCit7CisJaWYgKGRvd24pIHsKKwkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOworCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKKwl9IGVsc2UgeworCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiByZWxlYXNlZC5cbiIpOworCX0KKworI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisJaWYgKHBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShwZGV2LT5idXR0b25fZGV2LCBCVE5fMCwgZG93bik7CisJCWlucHV0X3N5bmMocGRldi0+YnV0dG9uX2Rldik7CisJfQorI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgcHdjX3Jjdl9zaG9ydF9wYWNrZXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGNvbnN0IHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmKQogewogCWludCBhd2FrZSA9IDA7CkBAIC02MDMsMTMgKzYyNCw3IEBACiAJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CiAJCX0KIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDEpIHsKLQkJCWlmIChwdHJbMF0gJiAweDAxKSB7Ci0JCQkJcGRldi0+c25hcHNob3RfYnV0dG9uX3N0YXR1cyA9IDE7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcmVsZWFzZWQuXG4iKTsKLQkJCX0KKwkJCXB3Y19zbmFwc2hvdF9idXR0b24ocGRldiwgcHRyWzBdICYgMHgwMSk7CiAJCX0KIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDIpIHsKIAkJCWlmIChwdHJbMF0gJiAweDAyKQpAQCAtNjMzLDEyICs2NDgsNyBAQAogCWVsc2UgaWYgKHBkZXYtPnR5cGUgPT0gNzQwIHx8IHBkZXYtPnR5cGUgPT0gNzIwKSB7CiAJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmJ1Zi0+ZGF0YTsKIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDEpIHsKLQkJCWlmIChwdHJbMF0gJiAweDAxKSB7Ci0JCQkJcGRldi0+c25hcHNob3RfYnV0dG9uX3N0YXR1cyA9IDE7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOwotCQkJfQotCQkJZWxzZQotCQkJCVBXQ19UUkFDRSgiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJCQlwd2Nfc25hcHNob3RfYnV0dG9uKHBkZXYsIHB0clswXSAmIDB4MDEpOwogCQl9CiAJCXBkZXYtPnZtaXJyb3IgPSBwdHJbMF0gJiAweDAzOwogCX0KQEAgLTExMTUsNiArMTEyNSw3IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcGRldi0+bW9kbG9jayk7CisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLwogCWlmICghcGRldi0+dXNiX2luaXQpIHsKIAkJUFdDX0RFQlVHX09QRU4oIkRvaW5nIGZpcnN0IHRpbWUgaW5pdGlhbGl6YXRpb24uXG4iKTsKIAkJcGRldi0+dXNiX2luaXQgPSAxOwpAQCAtMTEzOSw3ICsxMTUwLDYgQEAKIAlpZiAocHdjX3NldF9sZWRzKHBkZXYsIGxlZF9vbiwgbGVkX29mZikgPCAwKQogCQlQV0NfREVCVUdfT1BFTigiRmFpbGVkIHRvIHNldCBMRUQgb24vb2ZmIHRpbWUuXG4iKTsKIAotCXB3Y19jb25zdHJ1Y3QocGRldik7IC8qIHNldCBtaW4vbWF4IHNpemVzIGNvcnJlY3QgKi8KIAogCS8qIFNvIGZhciwgc28gZ29vZC4gQWxsb2NhdGUgbWVtb3J5LiAqLwogCWkgPSBwd2NfYWxsb2NhdGVfYnVmZmVycyhwZGV2KTsKQEAgLTEyMTYsNiArMTIyNiwxNSBAQAogewogCXB3Y19yZW1vdmVfc3lzZnNfZmlsZXMocGRldi0+dmRldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocGRldi0+dmRldik7CisKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCWlmIChwZGV2LT5idXR0b25fZGV2KSB7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlpbnB1dF9mcmVlX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKKwkJa2ZyZWUocGRldi0+YnV0dG9uX2Rldi0+cGh5cyk7CisJCXBkZXYtPmJ1dHRvbl9kZXYgPSBOVUxMOworCX0KKyNlbmRpZgogfQogCiAvKiBOb3RlIHRoYXQgYWxsIGNsZWFudXAgaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSBvcmRlciBhcyBpbiBfb3BlbiAqLwpAQCAtMTQ4Myw2ICsxNTAyLDkgQEAKIAlpbnQgZmVhdHVyZXMgPSAwOwogCWludCB2aWRlb19uciA9IC0xOyAvKiBkZWZhdWx0OiB1c2UgbmV4dCBhdmFpbGFibGUgZGV2aWNlICovCiAJY2hhciBzZXJpYWxfbnVtYmVyWzMwXSwgKm5hbWU7CisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwljaGFyICpwaHlzID0gTlVMTDsKKyNlbmRpZgogCiAJdmVuZG9yX2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CiAJcHJvZHVjdF9pZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKQEAgLTE4MDcsNiArMTgyOSwzNSBAQAogCXB3Y19zZXRfbGVkcyhwZGV2LCAwLCAwKTsKIAlwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDApOwogCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwkvKiByZWdpc3RlciB3ZWJjYW0gc25hcHNob3QgYnV0dG9uIGlucHV0IGRldmljZSAqLworCXBkZXYtPmJ1dHRvbl9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJUFdDX0VSUk9SKCJFcnIsIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gZGV2aWNlLiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwZGV2LT5idXR0b25fZGV2LT5uYW1lID0gIlBXQyBzbmFwc2hvdCBidXR0b24iOworCXBoeXMgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwidXNiLSVzLSVzIiwgcGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgcGRldi0+dWRldi0+ZGV2cGF0aCk7CisJaWYgKCFwaHlzKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGRldi0+YnV0dG9uX2Rldi0+cGh5cyA9IHBoeXM7CisJdXNiX3RvX2lucHV0X2lkKHBkZXYtPnVkZXYsICZwZGV2LT5idXR0b25fZGV2LT5pZCk7CisJcGRldi0+YnV0dG9uX2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT51ZGV2LT5kZXY7CisJcGRldi0+YnV0dG9uX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCXBkZXYtPmJ1dHRvbl9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fMCldID0gQklUX01BU0soQlROXzApOworCisJcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJaWYgKHJjKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlrZnJlZShwZGV2LT5idXR0b25fZGV2LT5waHlzKTsKKwkJcGRldi0+YnV0dG9uX2RldiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisjZW5kaWYKKwogCXJldHVybiAwOwogCiBlcnJfdW5yZWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCmluZGV4IDAxNDExZmIuLjBiZTZmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjZW5kaWYKIAogI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCiAjaW5jbHVkZSA8bWVkaWEvcHdjLWlvY3RsLmg+CkBAIC0yNTUsNiArMjU4LDkgQEAKICAgIGludCBwYW5fYW5nbGU7CQkJLyogaW4gZGVncmVlcyAqIDEwMCAqLwogICAgaW50IHRpbHRfYW5nbGU7CQkJLyogYWJzb2x1dGUgYW5nbGU7IDAsMCBpcyBob21lIHBvc2l0aW9uICovCiAgICBpbnQgc25hcHNob3RfYnV0dG9uX3N0YXR1czsJCS8qIHNldCB0byAxIHdoZW4gdGhlIHVzZXIgcHVzaCB0aGUgYnV0dG9uLCByZXNldCB0byAwIHdoZW4gdGhpcyB2YWx1ZSBpcyByZWFkICovCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKyAgIHN0cnVjdCBpbnB1dF9kZXYgKmJ1dHRvbl9kZXY7CS8qIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gaW5wdXQgKi8KKyNlbmRpZgogCiAgICAvKioqIE1pc2MuIGRhdGEgKioqLwogICAgd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVxOwkJLyogV2hlbiB3YWl0aW5nIGZvciBhIGZyYW1lIHRvIGZpbmlzaC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCAwN2MzMzRmLi5jNTIyNjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KIAogI2RlZmluZSBQWEFfQ0FNX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCA1KQpAQCAtODc5LDYgKzg3OCw3IEBACiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKIAkJU09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKIApAQCAtMTE1MCw0NiArMTE1MCwyOCBAQAogCXJldHVybiBmb3JtYXRzOwogfQogCi1zdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOwogCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0gewogCQkubWFzdGVyX2Nsb2NrID0gcGNkZXYtPm1jbGssCiAJCS5waXhlbF9jbG9ja19tYXggPSBwY2Rldi0+Y2ljbGsgLyA0LAogCX07CiAJaW50IHJldDsKIAotCWlmIChwaXhmbXQpIHsKLQkJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7Ci0JCWlmICgheGxhdGUpIHsKLQkJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNhbV9mbXQgPSB4bGF0ZS0+Y2FtX2ZtdDsKLQl9Ci0KIAkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSAwOgkJCQkvKiBPbmx5IGdlb21ldHJ5IGNoYW5nZSAqLwotCQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHBpeGZtdCwgcmVjdCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgY2FtX2ZtdC0+Zm91cmNjLCByZWN0KTsKLQl9CisJcmV0ID0gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl93YXJuKCZpY2ktPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKLQkJCSBwaXhmbXQpOworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGYWlsZWQgdG8gY3JvcCB0byAldXgldUAldToldVxuIiwKKwkJCSByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOwogCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKIAkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CiAJCQlkZXZfZXJyKCZpY2ktPmRldiwKQEAgLTEyMDAsNyArMTE4Miw1NSBAQAogCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHNlbnNlLnBpeGVsX2Nsb2NrKTsKIAl9CiAKLQlpZiAocGl4Zm10ICYmICFyZXQpIHsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1fZm10ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlID0gTlVMTDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKKwkJLm1hc3Rlcl9jbG9jayA9IHBjZGV2LT5tY2xrLAorCQkucGl4ZWxfY2xvY2tfbWF4ID0gcGNkZXYtPmNpY2xrIC8gNCwKKwl9OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOworCWludCByZXQ7CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CisJaWYgKCF4bGF0ZSkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OworCisJLyogSWYgUENMSyBpcyB1c2VkIHRvIGxhdGNoIGRhdGEgZnJvbSB0aGUgc2Vuc29yLCBjaGVjayBzZW5zZSAqLworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCisJCWljZC0+c2Vuc2UgPSAmc2Vuc2U7CisKKwljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gY2FtX2ZtdC0+Zm91cmNjOworCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKKworCWljZC0+c2Vuc2UgPSBOVUxMOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBmb3IgZm9ybWF0ICV4XG4iLAorCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOworCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKKwkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CisJCQlkZXZfZXJyKCZpY2ktPmRldiwKKwkJCQkicGl4ZWwgY2xvY2sgJWx1IHNldCBieSB0aGUgY2FtZXJhIHRvbyBoaWdoISIsCisJCQkJc2Vuc2UucGl4ZWxfY2xvY2spOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCBzZW5zZS5waXhlbF9jbG9jayk7CisJfQorCisJaWYgKCFyZXQpIHsKIAkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKIAkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKIAl9CkBAIC0xMzY0LDYgKzEzOTQsNyBAQAogCS5yZW1vdmUJCT0gcHhhX2NhbWVyYV9yZW1vdmVfZGV2aWNlLAogCS5zdXNwZW5kCT0gcHhhX2NhbWVyYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhX2NhbWVyYV9yZXN1bWUsCisJLnNldF9jcm9wCT0gcHhhX2NhbWVyYV9zZXRfY3JvcCwKIAkuZ2V0X2Zvcm1hdHMJPSBweGFfY2FtZXJhX2dldF9mb3JtYXRzLAogCS5zZXRfZm10CT0gcHhhX2NhbWVyYV9zZXRfZm10LAogCS50cnlfZm10CT0gcHhhX2NhbWVyYV90cnlfZm10LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDEzZjg1YWQuLmI1YmU2MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTMzNiwxNCArMzM2LDE5IEBACiAJCQkgICAgIHUxNiBpbmRleCwgdTE2IHZhbHVlLCB2b2lkICpidWYsCiAJCQkgICAgIHMzMiBidWZfbGVuLCBpbnQgYk91dCk7CiAKKy8qIGRldl9lcnIgbWFjcm8gd2l0aCBkcml2ZXIgbmFtZSAqLworI2RlZmluZSBTMjI1NV9EUklWRVJfTkFNRSAiczIyNTUiCisjZGVmaW5lIHMyMjU1X2Rldl9lcnIoZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJZGV2X2VycihkZXYsIFMyMjU1X0RSSVZFUl9OQU1FICIgLSAiIGZtdCwgIyNhcmcpCisKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKnMyMjU1X2RlYnVnID49IChsZXZlbCkpIHsJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiAiIGZtdCwgIyNhcmcpOwlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBTMjI1NV9EUklWRVJfTkFNRQkJXAorCQkJCSI6ICIgZm10LCAjI2FyZyk7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXI7CiAKIApAQCAtNTI4LDE0ICs1MzMsMTQgQEAKIAlpbnQgbGVuOwogCWRwcmludGsoMTAwLCAidWRldiAlcCB1cmIgJXAiLCB1ZGV2LCB1cmIpOwogCWlmICh1cmItPnN0YXR1cykgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVUkIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVUkIgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJCWF0b21pY19zZXQoJmRhdGEtPmZ3X3N0YXRlLCBTMjI1NV9GV19GQUlMRUQpOwogCQkvKiB3YWtlIHVwIGFueXRoaW5nIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSAqLwogCQl3YWtlX3VwKCZkYXRhLT53YWl0X2Z3KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoZGF0YS0+ZndfdXJiID09IE5VTEwpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiczIyNTUgZGlzY29ubmVjdGVkXG4iKTsKKwkJczIyNTVfZGV2X2VycigmdWRldi0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0ZBSUxFRCk7CiAJCS8qIHdha2UgdXAgYW55dGhpbmcgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlICovCiAJCXdha2VfdXAoJmRhdGEtPndhaXRfZncpOwpAQCAtODQxLDggKzg0Niw3IEBACiAJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiczIyNTUiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgInMyMjU1Iiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwKLQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAljYXAtPnZlcnNpb24gPSBTMjI1NV9WRVJTSU9OOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAlyZXR1cm4gMDsKQEAgLTEyNzgsNyArMTI4Miw3IEBACiAJfQogCiAJaWYgKCFyZXNfZ2V0KGRldiwgZmgpKSB7Ci0JCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiczIyNTU6IHN0cmVhbSBidXN5XG4iKTsKKwkJczIyNTVfZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJzdHJlYW0gYnVzeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xNTQ1LDcgKzE1NDksOCBAQAogCiAJc3dpdGNoIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkpIHsKIAljYXNlIFMyMjU1X0ZXX0ZBSUxFRDoKLQkJZXJyKCIyMjU1IGZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKKwkJCSJmaXJtd2FyZSBsb2FkIGZhaWxlZC4gcmV0cnlpbmcuXG4iKTsKIAkJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMSk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCiAJCQkJICAgKChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkKQEAgLTIxNzMsNyArMjE3OCw4IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIyMjU1IHVzYiBmaXJtd2FyZSB2ZXJzaW9uICVkIFxuIiwgZndfdmVyKTsKIAlpZiAoZndfdmVyIDwgQ1VSX1VTQl9GV1ZFUikKLQkJZXJyKCJ1c2IgZmlybXdhcmUgbm90IHVwIHRvIGRhdGUgJWRcbiIsIGZ3X3Zlcik7CisJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LAorCQkJInVzYiBmaXJtd2FyZSBub3QgdXAgdG8gZGF0ZSAlZFxuIiwgZndfdmVyKTsKIAogCWZvciAoaiA9IDA7IGogPCBNQVhfQ0hBTk5FTFM7IGorKykgewogCQlkZXYtPmJfYWNxdWlyZVtqXSA9IDA7CkBAIC0yMjI4LDEzICsyMjM0LDEzIEBACiAJZHByaW50aygxMDAsICJyZWFkIHBpcGUgY29tcGxldGlvbiAlcCwgc3RhdHVzICVkXG4iLCBwdXJiLAogCQlwdXJiLT5zdGF0dXMpOwogCWlmIChwaXBlX2luZm8gPT0gTlVMTCkgewotCQllcnIoIm5vIGNvbnRleHQgISIpOworCQlkZXZfZXJyKCZwdXJiLT5kZXYtPmRldiwgIm5vIGNvbnRleHQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWRldiA9IHBpcGVfaW5mby0+ZGV2OwogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoIm5vIGNvbnRleHQgISIpOworCQlkZXZfZXJyKCZwdXJiLT5kZXYtPmRldiwgIm5vIGNvbnRleHQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlzdGF0dXMgPSBwdXJiLT5zdGF0dXM7CkBAIC0yMjg2LDcgKzIyOTIsNyBAQAogCQlwaXBlX2luZm8tPnN0cmVhbV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBpcGVfaW5mby0+c3RyZWFtX3VyYikgewogCQkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCi0JCQkJIlJlYWRTdHJlYW06IFVuYWJsZSB0byBhbGxvYyBVUkIiKTsKKwkJCQkiUmVhZFN0cmVhbTogVW5hYmxlIHRvIGFsbG9jIFVSQlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQkvKiB0cmFuc2ZlciBidWZmZXIgYWxsb2NhdGVkIGluIGJvYXJkX2luaXQgKi8KQEAgLTIzOTEsNyArMjM5Nyw3IEBACiAJaW50IGo7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZXJyKCJzMjI1NTogaW52YWxpZCBkZXZpY2UiKTsKKwkJczIyNTVfZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJpbnZhbGlkIGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJZHByaW50ayg0LCAic3RvcCByZWFkIHBpcGVcbiIpOwpAQCAtMjQ1Myw3ICsyNDU5LDcgQEAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgdG8gemVybyAqLwogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzMjI1NV9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZXJyKCJzMjI1NTogb3V0IG9mIG1lbW9yeSIpOworCQlzMjI1NV9kZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjQ4Nyw3ICsyNDkzLDcgQEAKIAl9CiAKIAlpZiAoIWRldi0+cmVhZF9lbmRwb2ludCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJ1bGstaW4gZW5kcG9pbnQiKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI1ODMsNyArMjU4OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiczIyNTUiLAorCS5uYW1lID0gUzIyNTVfRFJJVkVSX05BTUUsCiAJLnByb2JlID0gczIyNTVfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBzMjI1NV9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9IHMyMjU1X3RhYmxlLApAQCAtMjU5Nyw3ICsyNjAzLDggQEAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnMyMjU1X2RyaXZlcik7CiAKIAlpZiAocmVzdWx0KQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXByX2VycihLQlVJTERfTU9ETkFNRQorCQkJIjogdXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXN1bHQpOwogCiAJZHByaW50aygyLCAiczIyNTVfaW5pdDogZG9uZVxuIik7CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwppbmRleCBlNjM3ZTQ0Li5kYTQ3YjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCkBAIC00NiwxMCArNDYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBHZW5nIDxsaW51eEBNaWNoYWVsR2VuZy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE1MjQ2QSwgU0FBNTI4MSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOwpAQCAtMzg4LDEzICszODksMTkgQEAKIAogc3RydWN0IHNhYTUyNDZhX2RldmljZQogeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXU4ICAgICBwZ2J1ZltOVU1fREFVU11bVlRYX1ZJUlRVQUxTSVpFXTsKIAlpbnQgICAgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0b19kZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlLCBzZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZTsJLyogRGVjbGFyZWQgbmVhciBib3R0b20gKi8KIAogLyoKQEAgLTQwMywxMiArNDEwLDEzIEBACiAKIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOwogCWNoYXIgYnVmWzY0XTsKIAogCWJ1ZlswXSA9IHJlZzsKIAltZW1jcHkoYnVmKzEsIGRhdGEsIGNvdW50KTsKIAotCWlmKGkyY19tYXN0ZXJfc2VuZCh0LT5jbGllbnQsIGJ1ZiwgY291bnQrMSk9PWNvdW50KzEpCisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCiAJCXJldHVybiAwOwogCXJldHVybiAtMTsKIH0KQEAgLTQzNiw3ICs0NDQsOSBAQAogICovCiBzdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQsIGludCBjb3VudCwgdTggKmJ1ZikKIHsKLQlpZihpMmNfbWFzdGVyX3JlY3YodC0+Y2xpZW50LCBidWYsIGNvdW50KSE9Y291bnQpCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnQtPnNkKTsKKworCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIGNvdW50KSAhPSBjb3VudCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtOTYxLDkgKzk3MSw2IEBACiB7CiAJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAodC0+Y2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnQtPmluX3VzZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTEwMzMsMTggKzEwNDAsMjkgQEAKIAkubWlub3IgICAgPSAtMSwKIH07CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgaW50IHNhYTUyNDZhX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLUkyQ19DTElFTlRfSU5TTU9EOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNTI0NkEsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTUyNDZhX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE1MjQ2YV9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE1MjQ2YV9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNTI0NmFfY29yZV9vcHMsCit9OworCiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcGdidWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKIAlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC0xMDUzLDQwICsxMDcxLDQzIEBACiAJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmdC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTUyNDZhX29wcyk7CiAJbXV0ZXhfaW5pdCgmdC0+bG9jayk7CiAKIAkvKiBOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlICovCi0JdmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAodmQgPT0gTlVMTCkgeworCXQtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodC0+dmRldiA9PSBOVUxMKSB7CiAJCWtmcmVlKHQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOwotCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCW1lbWNweSh0LT52ZGV2LCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnQtPnZkZXYpKTsKIAogCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKSB7CiAJCW1lbXNldCh0LT5wZ2J1ZltwZ2J1Zl0sICcgJywgc2l6ZW9mKHQtPnBnYnVmWzBdKSk7CiAJCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKIAl9Ci0JdmlkZW9fc2V0X2RydmRhdGEodmQsIHQpOworCXZpZGVvX3NldF9kcnZkYXRhKHQtPnZkZXYsIHQpOwogCiAJLyogUmVnaXN0ZXIgaXQgKi8KLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwgLTEpOworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh0LT52ZGV2LCBWRkxfVFlQRV9WVFgsIC0xKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZSh0KTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh0LT52ZGV2KTsKKwkJdC0+dmRldiA9IE5VTEw7CiAJCXJldHVybiBlcnI7CiAJfQotCXQtPmNsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE1MjQ2YV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0ID0gdG9fZGV2KHNkKTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5OCw3ICsxMTE5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTUyNDZhIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwKIAkucHJvYmUgPSBzYWE1MjQ2YV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNTI0NmFfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTUyNDZhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwppbmRleCBlMjk3NjUxLi40OGIyN2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwpAQCAtNTAsMTUgKzUwLDE3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvdGV4dC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0OSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKICNkZWZpbmUgVlRYX1ZFUl9NQUogMQogI2RlZmluZSBWVFhfVkVSX01JTiA4CiAKQEAgLTk1LDE3ICs5NywyMyBAQAogCiBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAl2ZGF1X3QgdmRhdVtOVU1fREFVU107CQkJLyogRGF0YSBmb3IgdmlydHVhbCBEQVVzICh0aGUgNTI0OSBvbmx5IGhhcyBvbmUgKi8KIAkJCQkJCS8qIHJlYWwgREFVLCBzbyB3ZSBoYXZlIHRvIHNpbXVsYXRlIHNvbWUgbW9yZSkgKi8KIAlpbnQgdnR4X3VzZV9jb3VudDsKIAlpbnQgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKIAlpbnQgZGlzcF9tb2RlOwogCWludCB2aXJ0dWFsX21vZGU7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0b19kZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UsIHNkKTsKK30KKwogCiAjZGVmaW5lIENDVFdSIDM0CQkvKiBJskMgd3JpdGUvcmVhZC1hZGRyZXNzIG9mIHZ0eC1jaGlwICovCiAjZGVmaW5lIENDVFJEIDM1CkBAIC0xNDcsMTIgKzE1NSwxMyBAQAogCiBzdGF0aWMgaW50IGkyY19zZW5kYnVmKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOwogCWNoYXIgYnVmWzY0XTsKIAogCWJ1ZlswXSA9IHJlZzsKIAltZW1jcHkoYnVmKzEsIGRhdGEsIGNvdW50KTsKIAotCWlmIChpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQorCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xODAsNyArMTg5LDkgQEAKIAogc3RhdGljIGludCBpMmNfZ2V0ZGF0YShzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQsIGludCBjb3VudCwgdTggKmJ1ZikKIHsKLQlpZihpMmNfbWFzdGVyX3JlY3YodC0+Y2xpZW50LCBidWYsIGNvdW50KSE9Y291bnQpCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnQtPnNkKTsKKworCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIGNvdW50KSAhPSBjb3VudCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtNDk3LDkgKzUwOCw2IEBACiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcGdidWY7CiAKLQlpZiAodC0+Y2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnQtPmluX3VzZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTU1MywxOCArNTYxLDI4IEBACiAJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGludCBzYWE1MjQ5X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLUkyQ19DTElFTlRfSU5TTU9EOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNTI0OSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNTI0OV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNTI0OV9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE1MjQ5X29wcyA9IHsKKwkuY29yZSA9ICZzYWE1MjQ5X2NvcmVfb3BzLAorfTsKIAogc3RhdGljIGludCBzYWE1MjQ5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHBnYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC01NzMsMTYgKzU5MSwxNyBAQAogCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwogCWlmICh0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnQtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE1MjQ5X29wcyk7CiAJbXV0ZXhfaW5pdCgmdC0+bG9jayk7CiAKIAkvKiBOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlICovCi0JdmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZkID09IE5VTEwpIHsKKwl0LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHQtPnZkZXYgPT0gTlVMTCkgewogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOwotCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCW1lbWNweSh0LT52ZGV2LCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnQtPnZkZXYpKTsKIAogCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKSB7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOwpAQCAtNTkzLDI2ICs2MTIsMjcgQEAKIAkJdC0+dmRhdVtwZ2J1Zl0uc3RvcHBlZCA9IHRydWU7CiAJCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKIAl9Ci0JdmlkZW9fc2V0X2RydmRhdGEodmQsIHQpOworCXZpZGVvX3NldF9kcnZkYXRhKHQtPnZkZXYsIHQpOwogCiAJLyogUmVnaXN0ZXIgaXQgKi8KLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwgLTEpOworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh0LT52ZGV2LCBWRkxfVFlQRV9WVFgsIC0xKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZSh0KTsKLQkJa2ZyZWUodmQpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh0LT52ZGV2KTsKKwkJdC0+dmRldiA9IE5VTEw7CiAJCXJldHVybiBlcnI7CiAJfQotCXQtPmNsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE1MjQ5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHRvX2RldihzZCk7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2ZCk7Ci0Ja2ZyZWUodmlkZW9fZ2V0X2RydmRhdGEodmQpKTsKLQlrZnJlZSh2ZCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHQpOwogCXJldHVybiAwOwogfQogCkBAIC02MjQsNyArNjQ0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTUyNDkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAogCS5wcm9iZSA9IHNhYTUyNDlfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTUyNDlfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTUyNDlfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCmluZGV4IGYwNTAyNDIuLmMyNWU4MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTMyLDE1ICszMiwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDIwID4+IDEsCi0JMHgyMiA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIGluc21vZCBvcHRpb25zICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwpAQCAtNzIsOSArNjcsOCBAQAogI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50awogCiBzdHJ1Y3Qgc2FhNjU4OCB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgYnVmX3NpemU7CkBAIC04Niw4ICs4MCwxMCBAQAogCWludCBkYXRhX2F2YWlsYWJsZV9mb3JfcmVhZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNjU4OCAqdG9fc2FhNjU4OChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE2NTg4LCBzZCk7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjU4LDYgKzI1NCw3IEBACiAKIHN0YXRpYyB2b2lkIHNhYTY1ODhfaTJjX3BvbGwoc3RydWN0IHNhYTY1ODggKnMpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnMtPnNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzZdOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tudW07CkBAIC0yNjUsNyArMjYyLDcgQEAKIAogCS8qIEFsdGhvdWdoIHdlIG9ubHkgbmVlZCAzIGJ5dGVzLCB3ZSBoYXZlIHRvIHJlYWQgYXQgbGVhc3QgNi4KIAkgICBTQUE2NTg4IHJldHVybnMgZ2FyYmFnZSBvdGhlcndpc2UgKi8KLQlpZiAoNiAhPSBpMmNfbWFzdGVyX3JlY3YoJnMtPmNsaWVudCwgJnRtcGJ1ZlswXSwgNikpIHsKKwlpZiAoNiAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmdG1wYnVmWzBdLCA2KSkgewogCQlpZiAoZGVidWcgPiAxKQogCQkJZHByaW50ayhQUkVGSVggInJlYWQgZXJyb3IhXG4iKTsKIAkJcmV0dXJuOwpAQCAtMzE2LDIzICszMTMsMTcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnMtPnJlYWRfcXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCBzYWE2NTg4X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IChzdHJ1Y3Qgc2FhNjU4OCAqKWRhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZzLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgc2FhNjU4OF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2FhNjU4OCwgd29yayk7CisJc3RydWN0IHNhYTY1ODggKnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNhYTY1ODgsIHdvcmsud29yayk7CiAKIAlzYWE2NTg4X2kyY19wb2xsKHMpOwotCW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDIwKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNjU4OF9jb25maWd1cmUoc3RydWN0IHNhYTY1ODggKnMpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnMtPnNkKTsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKIAlpbnQgcmM7CiAKQEAgLTM4MCw3ICszNzEsOCBAQAogCWRwcmludGsoUFJFRklYICJ3cml0aW5nOiAwdz0weCUwMnggMXc9MHglMDJ4IDJ3PTB4JTAyeFxuIiwKIAkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSk7CiAKLQlpZiAoMyAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoJnMtPmNsaWVudCwgYnVmLCAzKSkpCisJcmMgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOworCWlmIChyYyAhPSAzKQogCQlwcmludGsoUFJFRklYICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDMpXG4iLCByYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTM4OCw3MCArMzgwLDEwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE2NTg4X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBsb25nIHNhYTY1ODhfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBzYWE2NTg4ICpzOwotCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLQljbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7Ci0KLQlwcmludGsoUFJFRklYICJjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkciA8PCAxKTsKLQotCWlmIChOVUxMID09IChzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcy0+YnVmX3NpemUgPSBidWZibG9ja3MgKiAzOwotCi0JaWYgKE5VTEwgPT0gKHMtPmJ1ZmZlciA9IGttYWxsb2Mocy0+YnVmX3NpemUsIEdGUF9LRVJORUwpKSkgewotCQlrZnJlZShzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKLQlzLT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7Ci0Jcy0+YmxvY2tfY291bnQgPSAwOwotCXMtPndyX2luZGV4ID0gMDsKLQlzLT5yZF9pbmRleCA9IDA7Ci0Jcy0+bGFzdF9ibG9ja251bSA9IDB4ZmY7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+cmVhZF9xdWV1ZSk7Ci0Jcy0+ZGF0YV9hdmFpbGFibGVfZm9yX3JlYWQgPSAwOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmcy0+Y2xpZW50LCBzKTsKLQlpMmNfYXR0YWNoX2NsaWVudCgmcy0+Y2xpZW50KTsKLQotCXNhYTY1ODhfY29uZmlndXJlKHMpOwotCi0JLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCi0JSU5JVF9XT1JLKCZzLT53b3JrLCBzYWE2NTg4X3dvcmspOwotCWluaXRfdGltZXIoJnMtPnRpbWVyKTsKLQlzLT50aW1lci5mdW5jdGlvbiA9IHNhYTY1ODhfdGltZXI7Ci0Jcy0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXM7Ci0Jc2NoZWR1bGVfd29yaygmcy0+d29yayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBzYWE2NTg4X2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZGVsX3RpbWVyX3N5bmMoJnMtPnRpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShzLT5idWZmZXIpOwotCWtmcmVlKHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTY1ODhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCByZHNfY29tbWFuZCAqYSA9IChzdHJ1Y3QgcmRzX2NvbW1hbmQgKilhcmc7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgKmEgPSBhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewogCQkvKiAtLS0gb3BlbigpIGZvciAvZGV2L3JhZGlvIC0tLSAqLwpAQCAtNDc5LDQ1ICs0MTEsOTQgQEAKIAogCWRlZmF1bHQ6CiAJCS8qIG5vdGhpbmcgKi8KLQkJYnJlYWs7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTY1ODhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNjU4OCwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNjU4OF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNjU4OF9nX2NoaXBfaWRlbnQsCisJLmlvY3RsID0gc2FhNjU4OF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTY1ODhfb3BzID0geworCS5jb3JlID0gJnNhYTY1ODhfY29yZV9vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgc2FhNjU4OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNjU4OCAqczsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJdjRsX2luZm8oY2xpZW50LCAic2FhNjU4OCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzLT5idWZfc2l6ZSA9IGJ1ZmJsb2NrcyAqIDM7CisKKwlzLT5idWZmZXIgPSBrbWFsbG9jKHMtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocy0+YnVmZmVyID09IE5VTEwpIHsKKwkJa2ZyZWUocyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzZCA9ICZzLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNjU4OF9vcHMpOworCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKKwlzLT5ibG9ja19jb3VudCA9IDA7CisJcy0+d3JfaW5kZXggPSAwOworCXMtPnJkX2luZGV4ID0gMDsKKwlzLT5sYXN0X2Jsb2NrbnVtID0gMHhmZjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5yZWFkX3F1ZXVlKTsKKwlzLT5kYXRhX2F2YWlsYWJsZV9mb3JfcmVhZCA9IDA7CisKKwlzYWE2NTg4X2NvbmZpZ3VyZShzKTsKKworCS8qIHN0YXJ0IHBvbGxpbmcgdmlhIGV2ZW50ZCAqLworCUlOSVRfREVMQVlFRF9XT1JLKCZzLT53b3JrLCBzYWE2NTg4X3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcy0+d29yaywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjU4OF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcy0+d29yayk7CisKKwlrZnJlZShzLT5idWZmZXIpOworCWtmcmVlKHMpOworCXJldHVybiAwOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTY1ODgiLAotCX0sCi0JLmlkID0gLTEsCQkvKiBGSVhNRSAqLwotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTY1ODhfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE2NTg4X2RldGFjaCwKLQkuY29tbWFuZCA9IHNhYTY1ODhfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE2NTg4X2lkW10gPSB7CisJeyAic2FhNjU4OCIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNjU4OF9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNjU4OCIsCi0JLmRyaXZlciA9ICZkcml2ZXIsCisJLnByb2JlID0gc2FhNjU4OF9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNjU4OF9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNjU4OF9pZCwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhYTY1ODhfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYWE2NTg4X2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTY1ODhfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoc2FhNjU4OF9jbGVhbnVwX21vZHVsZSk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwppbmRleCAzNzg2MDY5Li5kZjRlMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwpAQCAtMzMsMTUgKzMzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWxpbmUgTWlkZGVsaW5rIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwpAQCAtNTIsOSArNTMsMTAgQEAKICNkZWZpbmUgU0FBNzExMF9OUl9SRUcJCTB4MzUKIAogc3RydWN0IHNhYTcxMTAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCByZWdbU0FBNzExMF9OUl9SRUddOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKIAlpbnQgYnJpZ2h0OwpAQCAtNjUsMjAgKzY3LDI4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTEwICp0b19zYWE3MTEwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxMTAsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEkyQyBzdXBwb3J0IGZ1bmN0aW9ucwkJCQkJCSAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKIAlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzExMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnID0gKmRhdGE7CQkvKiBmaXJzdCByZWdpc3RlciB0byB3cml0ZSB0byAqLwogCkBAIC04OSwxNSArOTksMTMgQEAKIAkvKiB0aGUgc2FhNzExMCBoYXMgYW4gYXV0b2luY3JlbWVudCBmdW5jdGlvbiwgdXNlIGl0IGlmCiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBsZW4pOwogCiAJCS8qIENhY2hlIHRoZSB3cml0dGVuIGRhdGEgKi8KIAkJbWVtY3B5KGRlY29kZXItPnJlZyArIHJlZywgZGF0YSArIDEsIGxlbiAtIDEpOwogCX0gZWxzZSB7CiAJCWZvciAoKytkYXRhLCAtLWxlbjsgbGVuOyBsZW4tLSkgewotCQkJcmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLCAqZGF0YSsrKTsKKwkJCXJldCA9IHNhYTcxMTBfd3JpdGUoc2QsIHJlZysrLCAqZGF0YSsrKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xMDYsOCArMTE0LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTEwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogfQogCkBAIC0xMTUsMTEgKzEyNSwxMSBAQAogLyogU0FBNzExMCBmdW5jdGlvbnMJCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgRlJFU1BfMDZIX0NPTVBTVCAweDAzCS8vMHgxMwotI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLy8weEMwCisjZGVmaW5lIEZSRVNQXzA2SF9DT01QU1QgMHgwMwkvKjB4MTMqLworI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLyoweEMwKi8KIAogCi1zdGF0aWMgaW50IHNhYTcxMTBfc2VsbXV4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBjaGFuKQorc3RhdGljIGludCBzYWE3MTEwX3NlbG11eChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgY2hhbikKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb2Rlc1s5XVs4XSA9IHsKIAkJLyogbW9kZSAwICovCkBAIC0xNTAsMTcgKzE2MCwxNyBAQAogCQl7RlJFU1BfMDZIX1NWSURFTywgMHgzQywgMHgyNywgMHhDMSwgMHgyMywKIAkJCSAgICAgIDB4NDQsIDB4NzUsIDB4MjF9CiAJfTsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyID0gbW9kZXNbY2hhbl07CiAKLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgcHRyWzBdKTsJLyogTHVtaW5hbmNlIGNvbnRyb2wgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMCwgcHRyWzFdKTsJLyogQW5hbG9nIENvbnRyb2wgIzEgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgcHRyWzJdKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMiwgcHRyWzNdKTsJLyogTWl4ZXIgQ29udHJvbCAjMSAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyQywgcHRyWzRdKTsJLyogTWl4ZXIgQ29udHJvbCAjMiAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgzMCwgcHRyWzVdKTsJLyogQURDcyBnYWluIGNvbnRyb2wgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgzMSwgcHRyWzZdKTsJLyogTWl4ZXIgQ29udHJvbCAjMyAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgcHRyWzddKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDA2LCBwdHJbMF0pOwkvKiBMdW1pbmFuY2UgY29udHJvbCAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjAsIHB0clsxXSk7CS8qIEFuYWxvZyBDb250cm9sICMxICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMSwgcHRyWzJdKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDIyLCBwdHJbM10pOwkvKiBNaXhlciBDb250cm9sICMxICAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MkMsIHB0cls0XSk7CS8qIE1peGVyIENvbnRyb2wgIzIgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgzMCwgcHRyWzVdKTsJLyogQURDcyBnYWluIGNvbnRyb2wgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDMxLCBwdHJbNl0pOwkvKiBNaXhlciBDb250cm9sICMzICAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjEsIHB0cls3XSk7CS8qIEFuYWxvZyBDb250cm9sICMyICAgICovCiAJZGVjb2Rlci0+aW5wdXQgPSBjaGFuOwogCiAJcmV0dXJuIDA7CkBAIC0xNzYsMjQ2ICsxODYsMjYwIEBACiAJLyogMHgzMCAqLyAweDQ0LCAweDcxLCAweDAyLCAweDhDLCAweDAyCiB9OwogCi1zdGF0aWMgaW50IGRldGVybWluZV9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdjRsMl9zdGRfaWQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAJaW50IHN0YXR1czsKIAogCS8qIG1vZGUgY2hhbmdlZCwgc3RhcnQgYXV0b21hdGljIGRldGVjdGlvbiAqLwotCXNhYTcxMTBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwotCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgZGVjb2Rlci0+aW5wdXQpOworCXNhYTcxMTBfd3JpdGVfYmxvY2soc2QsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJc2FhNzExMF9zZWxtdXgoc2QsIGRlY29kZXItPmlucHV0KTsKIAlwcmVwYXJlX3RvX3dhaXQoJmRlY29kZXItPndxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNTApKTsKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKLQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKKwlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOwogCWlmIChzdGF0dXMgJiAweDQwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsIHN0YXR1cyk7Ci0JCXJldHVybiBkZWNvZGVyLT5ub3JtOwkvLyBubyBjaGFuZ2UKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIGRlY29kZXItPm5vcm07CS8qIG5vIGNoYW5nZSovCiAJfQogCWlmICgoc3RhdHVzICYgMykgPT0gMCkgewotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHg4Myk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDYsIDB4ODMpOwogCQlpZiAoc3RhdHVzICYgMHgyMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7Ci0JCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg4MSk7Ci0JCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsMHgyRSwweDgxKTsqLworCQkJcmV0dXJuIFY0TDJfU1REX05UU0M7CiAJCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOwotCQlyZXR1cm4gVklERU9fTU9ERV9QQUw7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggKFBBTC9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CisJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4OUEpOyovCisJCXJldHVybiBWNEwyX1NURF9QQUw7CiAJfQotCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgwNiwweDAzKTsKKwkvKnNhYTcxMTBfd3JpdGUoc2QsMHgwNiwweDAzKTsqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CS8qIDYwSHogKi8KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7Ci0JCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKLQkJcmV0dXJuIFZJREVPX01PREVfTlRTQzsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDUwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHgyQyk7CisJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4ODEpOyovCisJCXJldHVybiBWNEwyX1NURF9OVFNDOwogCX0KIAogCS8qIDUwSHogLT4gUEFML1NFQ0FNICovCi0Jc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7Ci0JLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4OUEpOyovCiAKIAlwcmVwYXJlX3RvX3dhaXQoJmRlY29kZXItPndxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNTApKTsKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKIAotCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOworCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAJaWYgKChzdGF0dXMgJiAweDAzKSA9PSAweDAxKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFNFQ0FNKVxuIiwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwotCQlyZXR1cm4gVklERU9fTU9ERV9TRUNBTTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg3KTsKKwkJcmV0dXJuIFY0TDJfU1REX1NFQ0FNOwogCX0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOwotCXJldHVybiBWSURFT19NT0RFX1BBTDsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOworCXJldHVybiBWNEwyX1NURF9QQUw7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTEwX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqcHN0YXR1cykKIHsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB2OworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCWludCBzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8vc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0JCWJyZWFrOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggbm9ybT0lbGx4XG4iLAorCQkgICAgICAgc3RhdHVzLCAodW5zaWduZWQgbG9uZyBsb25nKWRlY29kZXItPm5vcm0pOworCWlmICghKHN0YXR1cyAmIDB4NDApKQorCQlyZXMgPSAwOworCWlmICghKHN0YXR1cyAmIDB4MDMpKQorCQlyZXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKIAotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqZGMgPSBhcmc7CisJKnBzdGF0dXMgPSByZXM7CisJcmV0dXJuIDA7Cit9CiAKLQkJZGMtPmZsYWdzID0KLQkJICAgIFZJREVPX0RFQ09ERVJfUEFMIHwgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfCBWSURFT19ERUNPREVSX0FVVE87Ci0JCWRjLT5pbnB1dHMgPSBTQUE3MTEwX01BWF9JTlBVVDsKLQkJZGMtPm91dHB1dHMgPSBTQUE3MTEwX01BWF9PVVRQVVQ7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbnQgc2FhNzExMF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCSoodjRsMl9zdGRfaWQgKilzdGQgPSBkZXRlcm1pbmVfbm9ybShzZCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXMgPSAwOworc3RhdGljIGludCBzYWE3MTEwX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOwogCi0JCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCi0JCQkgICAgICAgc3RhdHVzLCBkZWNvZGVyLT5ub3JtKTsKLQkJaWYgKCEoc3RhdHVzICYgMHg0MCkpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKLQkJaWYgKHN0YXR1cyAmIDB4MDMpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCX0KLQkJKihpbnQgKikgYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmIChkZWNvZGVyLT5ub3JtICE9IHYpIHsKLQkJCWRlY29kZXItPm5vcm0gPSB2OwotCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHgwMyk7Ci0JCQlzd2l0Y2ggKHYpIHsKLQkJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4MkMpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4ODEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBQQUxcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIEFVVE9cbiIpOwotCQkJCWRlY29kZXItPm5vcm0gPSBkZXRlcm1pbmVfbm9ybShjbGllbnQpOwotCQkJCSooaW50ICopIGFyZyA9IGRlY29kZXItPm5vcm07Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQlpZiAodiA8IDAgfHwgdiA+PSBTQUE3MTEwX01BWF9JTlBVVCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwgdik7CisJaWYgKGRlY29kZXItPm5vcm0gIT0gc3RkKSB7CisJCWRlY29kZXItPm5vcm0gPSBzdGQ7CisJCS8qc2FhNzExMF93cml0ZShzZCwgMHgwNiwgMHgwMyk7Ki8KKwkJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRiwgMHg1MCk7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDJDKTsKKwkJCS8qc2FhNzExMF93cml0ZShzZCwgMHgyRSwgMHg4MSk7Ki8KKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOworCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gUEFMXG4iKTsKKwkJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nyk7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gU0VDQU1cbiIpOworCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGRlY29kZXItPmlucHV0ICE9IHYpIHsKLQkJCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgdik7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBpbnB1dD0lZFxuIiwgdik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQkJdiA9ICooaW50ICopIGFyZzsKLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKHYgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IHYpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IHY7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRSwgdiA/IDB4MTggOiAweDgwKTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIllVViAlc1xuIiwgdiA/ICJvbiIgOiAib2ZmIik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxOSwgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDEyLCBkZWNvZGVyLT5zYXQgPj4gOSk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNywKLQkJCQkgICAgICAoZGVjb2Rlci0+aHVlID4+IDgpIC0gMTI4KTsKLQkJfQotCQlicmVhazsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfRFVNUDoKLQkJaWYgKCFkZWJ1ZykKLQkJCWJyZWFrOwotCQlmb3IgKHYgPSAwOyB2IDwgU0FBNzExMF9OUl9SRUc7IHYgKz0gMTYpIHsKLQkJCWludCBqOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJTAyeDoiLCB2KTsKLQkJCWZvciAoaiA9IDA7IGogPCAxNiAmJiB2ICsgaiA8IFNBQTcxMTBfTlJfUkVHOyBqKyspCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBkZWNvZGVyLT5yZWdbdiArIGpdKTsKLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCX0KLQkJYnJlYWs7CitzdGF0aWMgaW50IHNhYTcxMTBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKKwlpZiAocm91dGUtPmlucHV0IDwgMCB8fCByb3V0ZS0+aW5wdXQgPj0gU0FBNzExMF9NQVhfSU5QVVQpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwgcm91dGUtPmlucHV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChkZWNvZGVyLT5pbnB1dCAhPSByb3V0ZS0+aW5wdXQpIHsKKwkJc2FhNzExMF9zZWxtdXgoc2QsIHJvdXRlLT5pbnB1dCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCByb3V0ZS0+aW5wdXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKworCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRSwgZW5hYmxlID8gMHgxOCA6IDB4ODApOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJZVVYgJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJZGVmYXVsdDoKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidW5rbm93biBjb21tYW5kICUwOHhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE3MTEwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmJyaWdodDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnNhdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+aHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExMF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+YnJpZ2h0ID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDE5LCBkZWNvZGVyLT5icmlnaHQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTMsIGRlY29kZXItPmNvbnRyYXN0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPnNhdCA9IGN0cmwtPnZhbHVlOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMiwgZGVjb2Rlci0+c2F0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+aHVlID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDA3LCBkZWNvZGVyLT5odWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxMTAsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTEwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE3MTEwX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gc2FhNzExMF9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTcxMTBfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBzYWE3MTEwX3F1ZXJ5Y3RybCwKK307CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OWMgPj4gMSwgMHg5ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNzExMF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNzExMF9zX3N0ZCwKK307CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNzExMF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHNhYTcxMTBfc19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IHNhYTcxMTBfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0gc2FhNzExMF9xdWVyeXN0ZCwKKwkuZ19pbnB1dF9zdGF0dXMgPSBzYWE3MTEwX2dfaW5wdXRfc3RhdHVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzExMF9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzExMF9jb3JlX29wcywKKwkudHVuZXIgPSAmc2FhNzExMF90dW5lcl9vcHMsCisJLnZpZGVvID0gJnNhYTcxMTBfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlpbnQgcnY7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCkBAIC00MjksNyArNDUzLDkgQEAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlY29kZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzExMF9vcHMpOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7CkBAIC00MzcsMzAgKzQ2MywyOSBAQAogCWRlY29kZXItPmh1ZSA9IDMyNzY4OwogCWRlY29kZXItPnNhdCA9IDMyNzY4OwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRlY29kZXItPndxKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCXJ2ID0gc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJcnYgPSBzYWE3MTEwX3dyaXRlX2Jsb2NrKHNkLCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwogCWlmIChydiA8IDApIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIHJ2KTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBzdGF0dXMgJWRcbiIsIHJ2KTsKIAl9IGVsc2UgewogCQlpbnQgdmVyLCBzdGF0dXM7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCAweDEwKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MGUsIDB4MTgpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHgwNCk7Ci0JCXZlciA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHgwNik7Ci0JCS8vbWRlbGF5KDE1MCk7Ci0JCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAorCQlzYWE3MTEwX3dyaXRlKHNkLCAweDIxLCAweDEwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwZSwgMHgxOCk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4MDQpOworCQl2ZXIgPSBzYWE3MTEwX3JlYWQoc2QpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDA2KTsKKwkJLyptZGVsYXkoMTUwKTsqLworCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAogCQkJICAgICAgIHZlciwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCS8qc2FhNzExMF93cml0ZShzZCwgMHgyRSwgMHg5QSk7Ki8KIAl9CiAKLQkvL3NhYTcxMTBfc2VsbXV4KGNsaWVudCwwKTsKLQkvL2RldGVybWluZV9ub3JtKGNsaWVudCk7CisJLypzYWE3MTEwX3NlbG11eChzZCwwKTsqLworCS8qZGV0ZXJtaW5lX25vcm0oc2QpOyovCiAJLyogc2V0dXAgYW5kIGltcGxpY2l0IG1vZGUgMCBzZWxlY3QgaGFzIGJlZW4gcGVyZm9ybWVkICovCiAKIAlyZXR1cm4gMDsKQEAgLTQ2OCw3ICs0OTMsMTAgQEAKIAogc3RhdGljIGludCBzYWE3MTEwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc2FhNzExMChzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsOCArNTEwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxMTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCS5jb21tYW5kID0gc2FhNzExMF9jb21tYW5kLAogCS5wcm9iZSA9IHNhYTcxMTBfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTcxMTBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTcxMTBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDczOGEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBzYWE3MTExIC0gUGhpbGlwcyBTQUE3MTExQSB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4zCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgotICoKLSAqIFNsaWdodCBjaGFuZ2VzIGZvciB2aWRlbyB0aW1pbmcgYW5kIGF0dGFjaG1lbnQgb3V0cHV0IGJ5Ci0gKiBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4KLSAqCi0gKiBDaGFuZ2VzIGJ5IFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgIC0gbW92ZWQgb3ZlciB0byBsaW51eD49Mi40LnggaTJjIHByb3RvY29sICgxLzEvMjAwMykKLSAqCi0gKiBDaGFuZ2VzIGJ5IE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Ci0gKiAgICAtIGltcGxlbWVudGVkIERFQ09ERVJfU0VUX0dQSU8sIERFQ09ERVJfSU5JVCwgREVDT0RFUl9TRVRfVkJJX0JZUEFTUwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTEgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIFNBQTcxMTFfTlJfUkVHCQkweDE4Ci0KLXN0cnVjdCBzYWE3MTExIHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1tTQUE3MTExX05SX1JFR107Ci0KLQlpbnQgbm9ybTsKLQlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZGVjb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCi17Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWlmIChkZWNvZGVyLT5yZWdbcmVnXSAhPSB2YWx1ZSkgewotCQlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwotCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNhYTcxMTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC0xOwotCXU4IHJlZzsKLQotCS8qIHRoZSBzYWE3MTExIGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKLQkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCi0JaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQl1OCBibG9ja19kYXRhWzMyXTsKLQkJaW50IGJsb2NrX2xlbjsKLQotCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCWJsb2NrX2xlbiA9IDA7Ci0JCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07Ci0JCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPQotCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKLQkJCQlsZW4gLT0gMjsKLQkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7Ci0JCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gLT0gMjsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9pbml0X2RlY29kZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCkKLXsKLQlyZXR1cm4gc2FhNzExMV93cml0ZV9ibG9jayhjbGllbnQsIGluaXQtPmRhdGEsIGluaXQtPmxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTFfaTJjX2luaXRbXSA9IHsKLQkweDAwLCAweDAwLAkJLyogMDAgLSBJRCBieXRlICovCi0JMHgwMSwgMHgwMCwJCS8qIDAxIC0gcmVzZXJ2ZWQgKi8KLQotCS8qZnJvbnQgZW5kICovCi0JMHgwMiwgMHhkMCwJCS8qIDAyIC0gRlVTRT0zLCBHVURMPTIsIE1PREU9MCAqLwotCTB4MDMsIDB4MjMsCQkvKiAwMyAtIEhMTlJTPTAsIFZCU0w9MSwgV1BPRkY9MCwKLQkJCQkgKiBIT0xERz0wLCBHQUZJWD0wLCBHQUkxPTI1NiwgR0FJMj0yNTYgKi8KLQkweDA0LCAweDAwLAkJLyogMDQgLSBHQUkxPTI1NiAqLwotCTB4MDUsIDB4MDAsCQkvKiAwNSAtIEdBSTI9MjU2ICovCi0KLQkvKiBkZWNvZGVyICovCi0JMHgwNiwgMHhmMywJCS8qIDA2IC0gSFNCIGF0ICAxMyg1MEh6KSAvICAxNyg2MEh6KQotCQkJCSAqIHBpeGVscyBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCi0JLyoweDA3LCAweDEzLCAgICAgKiAwNyAtIEhTUyBhdCAxMTMoNTBIeikgLyAxMTcoNjBIeikgcGl4ZWxzCi0JCQkJICogYWZ0ZXIgZW5kIG9mIGxhc3QgbGluZSAqLwotCTB4MDcsIDB4ZTgsCQkvKiAwNyAtIEhTUyBzZWVtcyB0byBiZSBuZWVkZWQgdG8KLQkJCQkgKiB3b3JrIHdpdGggTlRTQywgdG9vICovCi0JMHgwOCwgMHhjOCwJCS8qIDA4IC0gQVVGRD0xLCBGU0VMPTEsIEVYRklMPTAsCi0JCQkJICogVlRSQz0xLCBIUExMPTAsIFZOT0k9MCAqLwotCTB4MDksIDB4MDEsCQkvKiAwOSAtIEJZUFM9MCwgUFJFRj0wLCBCUFNTPTAsCi0JCQkJICogVkJMQj0wLCBVUFRDVj0wLCBBUEVSPTEgKi8KLQkweDBhLCAweDgwLAkJLyogMGEgLSBCUklHPTEyOCAqLwotCTB4MGIsIDB4NDcsCQkvKiAwYiAtIENPTlQ9MS4xMDkgKi8KLQkweDBjLCAweDQwLAkJLyogMGMgLSBTQVROPTEuMCAqLwotCTB4MGQsIDB4MDAsCQkvKiAwZCAtIEhVRT0wICovCi0JMHgwZSwgMHgwMSwJCS8qIDBlIC0gQ0RUTz0wLCBDU1REPTAsIERDQ0Y9MCwKLQkJCQkgKiBGQ1RDPTAsIENIQlc9MSAqLwotCTB4MGYsIDB4MDAsCQkvKiAwZiAtIHJlc2VydmVkICovCi0JMHgxMCwgMHg0OCwJCS8qIDEwIC0gT0ZUUz0xLCBIREVMPTAsIFZSTE49MSwgWURFTD0wICovCi0JMHgxMSwgMHgxYywJCS8qIDExIC0gR1BTVz0wLCBDTTk5PTAsIEZFQ089MCwgQ09NUE89MSwKLQkJCQkgKiBPRVlDPTEsIE9FSFY9MSwgVklQQj0wLCBDT0xPPTAgKi8KLQkweDEyLCAweDAwLAkJLyogMTIgLSBvdXRwdXQgY29udHJvbCAyICovCi0JMHgxMywgMHgwMCwJCS8qIDEzIC0gb3V0cHV0IGNvbnRyb2wgMyAqLwotCTB4MTQsIDB4MDAsCQkvKiAxNCAtIHJlc2VydmVkICovCi0JMHgxNSwgMHgwMCwJCS8qIDE1IC0gVkJJICovCi0JMHgxNiwgMHgwMCwJCS8qIDE2IC0gVkJJICovCi0JMHgxNywgMHgwMCwJCS8qIDE3IC0gVkJJICovCi19OwotCi1zdGF0aWMgaW50IHNhYTcxMTFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWNhc2UgREVDT0RFUl9JTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCA9IGFyZzsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0KLQkJaWYgKE5VTEwgIT0gaW5pdCkKLQkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsIGluaXQpOwotCQl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7Ci0JCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCX0KLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNBQTcxMTFfTlJfUkVHOyBpICs9IDE2KSB7Ci0JCQlpbnQgajsKLQotCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIGkgKyBqIDwgU0FBNzExMV9OUl9SRUc7ICsraikgewotCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwKLQkJCQkgICAgICAgc2FhNzExMV9yZWFkKGNsaWVudCwgaSArIGopKTsKLQkJCX0KLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9TRUNBTSB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSA4OwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlczsKLQotCQlzdGF0dXMgPSBzYWE3MTExX3JlYWQoY2xpZW50LCAweDFmKTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7Ci0JCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQl9Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgKDEgPDwgNSkpICE9IDApIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgMCkpICE9IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJfQotCQkqaWFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9HUElPOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpZiAoMCAhPSAqaWFyZykgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJKGRlY29kZXItPnJlZ1sweDExXSB8IDB4ODApKTsKLQkJfSBlbHNlIHsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCShkZWNvZGVyLT5yZWdbMHgxMV0gJiAweDdmKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpZiAoMCAhPSAqaWFyZykgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTMsCi0JCQkJKGRlY29kZXItPnJlZ1sweDEzXSAmIDB4ZjApIHwgMHgwYSk7Ci0JCX0gZWxzZSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0KLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDQwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHgwMCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHgwMCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikgfCAweDUwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHg4MCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCX0KLQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJICAgICAgIHJlZ1sweDAyXSAmIDB4ZjgpIHwgZGVjb2Rlci0+aW5wdXQpOwotCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA5LAotCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkgICAgICAgcmVnWzB4MDldICYgMHg3ZikgfCAoKGRlY29kZXItPgotCQkJCQkJCSAgICAgaW5wdXQgPgotCQkJCQkJCSAgICAgMykgPyAweDgwIDoKLQkJCQkJCQkgICAgMCkpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOwotCi0JCQkvKiBSSjogSWYgb3V0cHV0IHNob3VsZCBiZSBkaXNhYmxlZCAoZm9yCi0JCQkgKiBwbGF5aW5nIHZpZGVvcyksIHdlIGFsc28gbmVlZCBhIG9wZW4gUExMLgotCQkJICogVGhlIGlucHV0IGlzIHNldCB0byAwICh3aGVyZSBubyBpbnB1dAotCQkJICogc291cmNlIGlzIGNvbm5lY3RlZCksIGFsdGhvdWdoIHRoaXMKLQkJCSAqIGlzIG5vdCBuZWNlc3NhcnkuCi0JCQkgKgotCQkJICogSWYgb3V0cHV0IHNob3VsZCBiZSBlbmFibGVkLCB3ZSBoYXZlIHRvCi0JCQkgKiByZXZlcnNlIHRoZSBhYm92ZS4KLQkJCSAqLwotCi0JCQlpZiAoZGVjb2Rlci0+ZW5hYmxlKSB7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDIsCi0JCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkJICAgICAgIHJlZ1sweDAyXSAmIDB4ZjgpIHwKLQkJCQkJICAgICAgZGVjb2Rlci0+aW5wdXQpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHhmYikpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJCSAgICAgICByZWdbMHgxMV0gJiAweGYzKSB8IDB4MGMpOwotCQkJfSBlbHNlIHsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDAyXSAmIDB4ZjgpKTsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkJICAgICAgKGRlY29kZXItPgotCQkJCQkgICAgICAgcmVnWzB4MDhdICYgMHhmYikgfCAweDA0KTsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMSwKLQkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDExXSAmIDB4ZjMpKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKGNsaWVudCwgMHgwYSwgcGljLT5icmlnaHRuZXNzID4+IDgpOwotCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBiLCBwaWMtPmNvbnRyYXN0ID4+IDkpOwotCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBjLCBwaWMtPmNvbG91ciA+PiA5KTsKLQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZCwgKHBpYy0+aHVlIC0gMzI3NjgpID4+IDgpOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIGludCBzYWE3MTExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXI7Ci0Jc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTExKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQlkZWNvZGVyLT5pbnB1dCA9IDA7Ci0JZGVjb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKLQotCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMTFfaTJjX2luaXQpOwotCWkgPSBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCWlmIChpIDwgMCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7Ci0JfSBlbHNlIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJXhcbiIsCi0JCQlzYWE3MTExX3JlYWQoY2xpZW50LCAweDAwKSA+PiA0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTExX2lkW10gPSB7Ci0JeyAic2FhNzExMV9vbGQiLCAwIH0sCS8qICJzYWE3MTExIiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLwotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTExX2lkKTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewotCS5uYW1lID0gInNhYTcxMTEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQkuY29tbWFuZCA9IHNhYTcxMTFfY29tbWFuZCwKLQkucHJvYmUgPSBzYWE3MTExX3Byb2JlLAotCS5yZW1vdmUgPSBzYWE3MTExX3JlbW92ZSwKLQkuaWRfdGFibGUgPSBzYWE3MTExX2lkLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYTcwOWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDY4ICswLDAgQEAKLS8qCi0gKiBzYWE3MTE0IC0gUGhpbGlwcyBTQUE3MTE0SCB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4xCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPgotICoKLSAqIEJhc2VkIG9uIHNhYTcxMTEgZHJpdmVyIGJ5IERhdmUgUGVya3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+Ci0gKgotICogU2xpZ2h0IGNoYW5nZXMgZm9yIHZpZGVvIHRpbWluZyBhbmQgYXR0YWNobWVudCBvdXRwdXQgYnkKLSAqIFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgotICoKLSAqIENoYW5nZXMgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgLSBtb3ZlZCBvdmVyIHRvIGxpbnV4Pj0yLjQueCBpMmMgcHJvdG9jb2wgKDEvMS8yMDAzKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTRIIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0cnVjdCBzYWE3MTE0IHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1sweGYwICogMl07Ci0KLQlpbnQgbm9ybTsKLQlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7Ci0JaW50IHBsYXliYWNrOwotfTsKLQotI2RlZmluZSAgIEkyQ19ERUxBWSAgIDEwCi0KLQotLy8jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQgICAgICAgKC0zKQotLy8jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUCAgICAgICAgKC0xOCkKLQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUICAoLTE3KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hTWU5DX1NUT1AgICAoLTMyKQotCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IT0ZGU0VUICAgICAgICAgICAoNSkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IT0ZGU0VUCQkoNikKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19WT0ZGU0VUICAgICAgICAgICAoMTApCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfV0lEVEggICAgICAgICAgICAgKDcyMCkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IRUlHSFQgICAgICAgICAgICAoMjUwKQotCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hTWU5DX1NUQVJUICAgICAgKC0xNykKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSFNZTkNfU1RPUCAgICAgICAoLTMyKQotCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hPRkZTRVQgICAgICAgICAgKDIpCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX1ZPRkZTRVQgICAgICAgICAgKDEwKQotI2RlZmluZSBTQUFfNzExNF9TRUNBTV9XSURUSCAgICAgICAgICAgICg3MjApCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hFSUdIVCAgICAgICAgICAgKDMwMCkKLQotI2RlZmluZSBTQUFfNzExNF9QQUxfSFNZTkNfU1RBUlQgICAgICAgICgtMTcpCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IU1lOQ19TVE9QICAgICAgICAgKC0zMikKLQotI2RlZmluZSBTQUFfNzExNF9QQUxfSE9GRlNFVCAgICAgICAgICAgICgyKQotI2RlZmluZSBTQUFfNzExNF9QQUxfVk9GRlNFVCAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0FBXzcxMTRfUEFMX1dJRFRIICAgICAgICAgICAgICAoNzIwKQotI2RlZmluZSBTQUFfNzExNF9QQUxfSEVJR0hUICAgICAgICAgICAgICgzMDApCi0KLQotCi0jZGVmaW5lIFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQgICAgICAgICAwCS8vMHg1MDUwNDA0MAotI2RlZmluZSBTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCAgICAgICAgICAgMAotCi0jZGVmaW5lIFJFR19BRERSKHgpICgoKHgpIDw8IDEpICsgMSkKLSNkZWZpbmUgTE9CWVRFKHgpICgodW5zaWduZWQgY2hhcikoKHgpICYgMHhmZikpCi0jZGVmaW5lIEhJQllURSh4KSAoKHVuc2lnbmVkIGNoYXIpKCgoeCkgPj4gOCkgJiAweGZmKSkKLSNkZWZpbmUgTE9XT1JEKHgpICgodW5zaWduZWQgc2hvcnQgaW50KSgoeCkgJiAweGZmZmYpKQotI2RlZmluZSBISVdPUkQoeCkgKCh1bnNpZ25lZCBzaG9ydCBpbnQpKCgoeCkgPj4gMTYpICYgMHhmZmZmKSkKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTE0X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKLX0KLQotc3RhdGljIGludCBzYWE3MTE0X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCByZXQgPSAtMTsKLQl1OCByZWc7Ci0KLQkvKiB0aGUgc2FhNzExNCBoYXMgYW4gYXV0b2luY3JlbWVudCBmdW5jdGlvbiwgdXNlIGl0IGlmCi0JICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwotCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJdTggYmxvY2tfZGF0YVszMl07Ci0JCWludCBibG9ja19sZW47Ci0KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlibG9ja19sZW4gPSAwOwotCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSByZWcgPSBkYXRhWzBdOwotCQkJZG8gewotCQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gZGF0YVsxXTsKLQkJCQlyZWcrKzsKLQkJCQlsZW4gLT0gMjsKLQkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7Ci0JCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gLT0gMjsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8vIGluaXRpYWxseSBzZXQgTlRTQywgY29tcG9zaXRlCi0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdFtdID0gewotCTB4MDAsIDB4MDAsCQkvKiAwMCAtIElEIGJ5dGUgLCBjaGlwIHZlcnNpb24sCi0JCQkJICogcmVhZCBvbmx5ICovCi0JMHgwMSwgMHgwOCwJCS8qIDAxIC0gWCxYLFgsWCwgSURFTDMgdG8gSURFTDAgLQotCQkJCSAqIGhvcml6b250YWwgaW5jcmVtZW50IGRlbGF5LAotCQkJCSAqIHJlY29tbWVuZGVkIHBvc2l0aW9uICovCi0JMHgwMiwgMHgwMCwJCS8qIDAyIC0gRlVTRT0zLCBHVURMPTIsIE1PREU9MCA7Ci0JCQkJICogaW5wdXQgY29udHJvbCAqLwotCTB4MDMsIDB4MTAsCQkvKiAwMyAtIEhMTlJTPTAsIFZCU0w9MSwgV1BPRkY9MCwKLQkJCQkgKiBIT0xERz0wLCBHQUZJWD0wLCBHQUkxPTI1NiwgR0FJMj0yNTYgKi8KLQkweDA0LCAweDkwLAkJLyogMDQgLSBHQUkxPTI1NiAqLwotCTB4MDUsIDB4OTAsCQkvKiAwNSAtIEdBSTI9MjU2ICovCi0JMHgwNiwgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVCwJLyogMDYgLSBIU0I6IGhzeW5jIHN0YXJ0LAotCQkJCSAqIGRlcGVuZHMgb24gdGhlIHZpZGVvIHN0YW5kYXJkICovCi0JMHgwNywgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QLAkvKiAwNyAtIEhTUzogaHN5bmMgc3RvcCwgZGVwZW5kcwotCQkJCSAqb24gdGhlIHZpZGVvIHN0YW5kYXJkICovCi0JMHgwOCwgMHhiOCwJCS8qIDA4IC0gQVVGRD0xLCBGU0VMPTEsIEVYRklMPTAsIFZUUkM9MSwKLQkJCQkgKiBIUExMOiBmcmVlIHJ1bm5pbmcgaW4gcGxheWJhY2ssIGxvY2tlZAotCQkJCSAqIGluIGNhcHR1cmUsIFZOT0k9MCAqLwotCTB4MDksIDB4ODAsCQkvKiAwOSAtIEJZUFM9MCwgUFJFRj0wLCBCUFNTPTAsIFZCTEI9MCwKLQkJCQkgKiBVUFRDVj0wLCBBUEVSPTE7IGRlcGVuZHMgZnJvbSBpbnB1dCAqLwotCTB4MGEsIDB4ODAsCQkvKiAwYSAtIEJSSUc9MTI4ICovCi0JMHgwYiwgMHg0NCwJCS8qIDBiIC0gQ09OVD0xLjEwOSAqLwotCTB4MGMsIDB4NDAsCQkvKiAwYyAtIFNBVE49MS4wICovCi0JMHgwZCwgMHgwMCwJCS8qIDBkIC0gSFVFPTAgKi8KLQkweDBlLCAweDg0LAkJLyogMGUgLSBDRFRPLCBDU1REMiB0byAwLCBEQ1ZGLCBGQ1RDLAotCQkJCSAqIENDT01COyBkZXBlbmRzIGZyb20gdmlkZW8gc3RhbmRhcmQgKi8KLQkweDBmLCAweDI0LAkJLyogMGYgLSBBQ0dDLENHQUlONiB0byBDR0FJTjA7IGRlcGVuZHMKLQkJCQkgKiBmcm9tIHZpZGVvIHN0YW5kYXJkICovCi0JMHgxMCwgMHgwMywJCS8qIDEwIC0gT0ZGVTEgdG8gMCwgT0ZGVjEgdG8gMCwgQ0hCVywKLQkJCQkgKiBMQ0JXMiB0byAwICovCi0JMHgxMSwgMHg1OSwJCS8qIDExIC0gQ09MTywgUlRQMSwgSEVETDEgdG8gMCwgUlRQMCwKLQkJCQkgKiBZREVMMiB0byAwICovCi0JMHgxMiwgMHhjOSwJCS8qIDEyIC0gUlQgc2lnbmFsIGNvbnRyb2wgUlRTRTEzIHRvIDEwCi0JCQkJICogYW5kIDAzIHRvIDAwICovCi0JMHgxMywgMHg4MCwJCS8qIDEzIC0gUlQvWCBwb3J0IG91dHB1dCBjb250cm9sICAqLwotCTB4MTQsIDB4MDAsCQkvKiAxNCAtIGFuYWxvZywgQURDLCBjb21wYXRpYmlsaXR5IGNvbnRyb2wgKi8KLQkweDE1LCAweDAwLAkJLyogMTUgLSBWR0FURSBzdGFydCBGSUQgY2hhbmdlICAqLwotCTB4MTYsIDB4ZmUsCQkvKiAxNiAtIFZHQVRFIHN0b3AgKi8KLQkweDE3LCAweDAwLAkJLyogMTcgLSBNaXNjLiwgVkdBVEUgTVNCcyAqLwotCTB4MTgsIDB4NDAsCQkvKiBSQVdHICovCi0JMHgxOSwgMHg4MCwJCS8qIFJBV08gKi8KLQkweDFhLCAweDAwLAotCTB4MWIsIDB4MDAsCi0JMHgxYywgMHgwMCwKLQkweDFkLCAweDAwLAotCTB4MWUsIDB4MDAsCi0JMHgxZiwgMHgwMCwJCS8qIHN0YXR1cyBieXRlLCByZWFkIG9ubHkgKi8KLQkweDIwLCAweDAwLAkJLyogdmlkZW8gZGVjb2RlciByZXNlcnZlZCBwYXJ0ICovCi0JMHgyMSwgMHgwMCwKLQkweDIyLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDI1LCAweDAwLAotCTB4MjYsIDB4MDAsCi0JMHgyNywgMHgwMCwKLQkweDI4LCAweDAwLAotCTB4MjksIDB4MDAsCi0JMHgyYSwgMHgwMCwKLQkweDJiLCAweDAwLAotCTB4MmMsIDB4MDAsCi0JMHgyZCwgMHgwMCwKLQkweDJlLCAweDAwLAotCTB4MmYsIDB4MDAsCi0JMHgzMCwgMHhiYywJCS8qIGF1ZGlvIGNsb2NrIGdlbmVyYXRvciAqLwotCTB4MzEsIDB4ZGYsCi0JMHgzMiwgMHgwMiwKLQkweDMzLCAweDAwLAotCTB4MzQsIDB4Y2QsCi0JMHgzNSwgMHhjYywKLQkweDM2LCAweDNhLAotCTB4MzcsIDB4MDAsCi0JMHgzOCwgMHgwMywKLQkweDM5LCAweDEwLAotCTB4M2EsIDB4MDAsCi0JMHgzYiwgMHgwMCwKLQkweDNjLCAweDAwLAotCTB4M2QsIDB4MDAsCi0JMHgzZSwgMHgwMCwKLQkweDNmLCAweDAwLAotCTB4NDAsIDB4MDAsCQkvKiBWQkkgZGF0YSBzbGljZXIgKi8KLQkweDQxLCAweGZmLAotCTB4NDIsIDB4ZmYsCi0JMHg0MywgMHhmZiwKLQkweDQ0LCAweGZmLAotCTB4NDUsIDB4ZmYsCi0JMHg0NiwgMHhmZiwKLQkweDQ3LCAweGZmLAotCTB4NDgsIDB4ZmYsCi0JMHg0OSwgMHhmZiwKLQkweDRhLCAweGZmLAotCTB4NGIsIDB4ZmYsCi0JMHg0YywgMHhmZiwKLQkweDRkLCAweGZmLAotCTB4NGUsIDB4ZmYsCi0JMHg0ZiwgMHhmZiwKLQkweDUwLCAweGZmLAotCTB4NTEsIDB4ZmYsCi0JMHg1MiwgMHhmZiwKLQkweDUzLCAweGZmLAotCTB4NTQsIDB4ZmYsCi0JMHg1NSwgMHhmZiwKLQkweDU2LCAweGZmLAotCTB4NTcsIDB4ZmYsCi0JMHg1OCwgMHg0MCwJCS8vIGZyYW1pbmcgY29kZQotCTB4NTksIDB4NDcsCQkvLyBob3Jpem9udGFsIG9mZnNldAotCTB4NWEsIDB4MDYsCQkvLyB2ZXJ0aWNhbCBvZmZzZXQKLQkweDViLCAweDgzLAkJLy8gZmllbGQgb2Zmc2V0Ci0JMHg1YywgMHgwMCwJCS8vIHJlc2VydmVkCi0JMHg1ZCwgMHgzZSwJCS8vIGhlYWRlciBhbmQgZGF0YQotCTB4NWUsIDB4MDAsCQkvLyBzbGljZWQgZGF0YQotCTB4NWYsIDB4MDAsCQkvLyByZXNlcnZlZAotCTB4NjAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDYxLCAweDAwLAotCTB4NjIsIDB4MDAsCi0JMHg2MywgMHgwMCwKLQkweDY0LCAweDAwLAotCTB4NjUsIDB4MDAsCi0JMHg2NiwgMHgwMCwKLQkweDY3LCAweDAwLAotCTB4NjgsIDB4MDAsCi0JMHg2OSwgMHgwMCwKLQkweDZhLCAweDAwLAotCTB4NmIsIDB4MDAsCi0JMHg2YywgMHgwMCwKLQkweDZkLCAweDAwLAotCTB4NmUsIDB4MDAsCi0JMHg2ZiwgMHgwMCwKLQkweDcwLCAweDAwLAkJLyogdmlkZW8gZGVjb2RlciByZXNlcnZlZCBwYXJ0ICovCi0JMHg3MSwgMHgwMCwKLQkweDcyLCAweDAwLAotCTB4NzMsIDB4MDAsCi0JMHg3NCwgMHgwMCwKLQkweDc1LCAweDAwLAotCTB4NzYsIDB4MDAsCi0JMHg3NywgMHgwMCwKLQkweDc4LCAweDAwLAotCTB4NzksIDB4MDAsCi0JMHg3YSwgMHgwMCwKLQkweDdiLCAweDAwLAotCTB4N2MsIDB4MDAsCi0JMHg3ZCwgMHgwMCwKLQkweDdlLCAweDAwLAotCTB4N2YsIDB4MDAsCi0JMHg4MCwgMHgwMCwJCS8qIFgtcG9ydCwgSS1wb3J0IGFuZCBzY2FsZXIgKi8KLQkweDgxLCAweDAwLAotCTB4ODIsIDB4MDAsCi0JMHg4MywgMHgwMCwKLQkweDg0LCAweGM1LAotCTB4ODUsIDB4MGQsCQkvLyBoc3luYyBhbmQgdnN5bmMgPwotCTB4ODYsIDB4NDAsCi0JMHg4NywgMHgwMSwKLQkweDg4LCAweDAwLAotCTB4ODksIDB4MDAsCi0JMHg4YSwgMHgwMCwKLQkweDhiLCAweDAwLAotCTB4OGMsIDB4MDAsCi0JMHg4ZCwgMHgwMCwKLQkweDhlLCAweDAwLAotCTB4OGYsIDB4MDAsCi0JMHg5MCwgMHgwMywJCS8qIFRhc2sgQSBkZWZpbml0aW9uICAgICAgICAgICAqLwotCTB4OTEsIDB4MDgsCi0JMHg5MiwgMHgwMCwKLQkweDkzLCAweDQwLAotCTB4OTQsIDB4MDAsCQkvLyB3aW5kb3cgc2V0dGluZ3MKLQkweDk1LCAweDAwLAotCTB4OTYsIDB4MDAsCi0JMHg5NywgMHgwMCwKLQkweDk4LCAweDAwLAotCTB4OTksIDB4MDAsCi0JMHg5YSwgMHgwMCwKLQkweDliLCAweDAwLAotCTB4OWMsIDB4MDAsCi0JMHg5ZCwgMHgwMCwKLQkweDllLCAweDAwLAotCTB4OWYsIDB4MDAsCi0JMHhhMCwgMHgwMSwJCS8qIGhvcml6b250YWwgaW50ZWdlciBwcmVzY2FsaW5nIHJhdGlvICovCi0JMHhhMSwgMHgwMCwJCS8qIGhvcml6b250YWwgcHJlc2NhbGVyIGFjY3VtdWxhdGlvbgotCQkJCSAqIHNlcXVlbmNlIGxlbmd0aCAqLwotCTB4YTIsIDB4MDAsCQkvKiBVViBGSVIgZmlsdGVyLCBZIEZJUiBmaWx0ZXIsIHByZXNjYWxlcgotCQkJCSAqIERDIGdhaW4gKi8KLQkweGEzLCAweDAwLAotCTB4YTQsIDB4ODAsCQkvLyBsdW1pbmFuY2UgYnJpZ2h0bmVzcwotCTB4YTUsIDB4NDAsCQkvLyBsdW1pbmFuY2UgZ2FpbgotCTB4YTYsIDB4NDAsCQkvLyBjaHJvbWluYW5jZSBzYXR1cmF0aW9uCi0JMHhhNywgMHgwMCwKLQkweGE4LCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGE5LCAweDA0LAotCTB4YWEsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGFiLCAweDAwLAotCTB4YWMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhhZCwgMHgwMiwKLQkweGFlLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGFmLCAweDAwLAotCTB4YjAsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGIxLCAweDA0LAotCTB4YjIsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YjMsIDB4MDQsCi0JMHhiNCwgMHgwMCwKLQkweGI1LCAweDAwLAotCTB4YjYsIDB4MDAsCi0JMHhiNywgMHgwMCwKLQkweGI4LCAweDAwLAotCTB4YjksIDB4MDAsCi0JMHhiYSwgMHgwMCwKLQkweGJiLCAweDAwLAotCTB4YmMsIDB4MDAsCi0JMHhiZCwgMHgwMCwKLQkweGJlLCAweDAwLAotCTB4YmYsIDB4MDAsCi0JMHhjMCwgMHgwMiwJCS8vIFRhc2sgQiBkZWZpbml0aW9uCi0JMHhjMSwgMHgwOCwKLQkweGMyLCAweDAwLAotCTB4YzMsIDB4NDAsCi0JMHhjNCwgMHgwMCwJCS8vIHdpbmRvdyBzZXR0aW5ncwotCTB4YzUsIDB4MDAsCi0JMHhjNiwgMHgwMCwKLQkweGM3LCAweDAwLAotCTB4YzgsIDB4MDAsCi0JMHhjOSwgMHgwMCwKLQkweGNhLCAweDAwLAotCTB4Y2IsIDB4MDAsCi0JMHhjYywgMHgwMCwKLQkweGNkLCAweDAwLAotCTB4Y2UsIDB4MDAsCi0JMHhjZiwgMHgwMCwKLQkweGQwLCAweDAxLAkJLy8gaG9yaXpvbnRhbCBpbnRlZ2VyIHByZXNjYWxpbmcgcmF0aW8KLQkweGQxLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBwcmVzY2FsZXIgYWNjdW11bGF0aW9uIHNlcXVlbmNlIGxlbmd0aAotCTB4ZDIsIDB4MDAsCQkvLyBVViBGSVIgZmlsdGVyLCBZIEZJUiBmaWx0ZXIsIHByZXNjYWxlciBEQyBnYWluCi0JMHhkMywgMHgwMCwKLQkweGQ0LCAweDgwLAkJLy8gbHVtaW5hbmNlIGJyaWdodG5lc3MKLQkweGQ1LCAweDQwLAkJLy8gbHVtaW5hbmNlIGdhaW4KLQkweGQ2LCAweDQwLAkJLy8gY2hyb21pbmFuY2Ugc2F0dXJhdGlvbgotCTB4ZDcsIDB4MDAsCi0JMHhkOCwgMHgwMCwJCS8vIGhvcml6b250YWwgbHVtaW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhkOSwgMHgwNCwKLQkweGRhLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0Ci0JMHhkYiwgMHgwMCwKLQkweGRjLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4ZGQsIDB4MDIsCi0JMHhkZSwgMHgwMCwJCS8vIGhvcml6b250YWwgY2hyb21pbmFuY2UgcGhhc2Ugb2Zmc2V0Ci0JMHhkZiwgMHgwMCwKLQkweGUwLCAweDAwLAkJLy8gdmVydGljYWwgbHVtaW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhlMSwgMHgwNCwKLQkweGUyLCAweDAwLAkJLy8gdmVydGljYWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGUzLCAweDA0LAotCTB4ZTQsIDB4MDAsCi0JMHhlNSwgMHgwMCwKLQkweGU2LCAweDAwLAotCTB4ZTcsIDB4MDAsCi0JMHhlOCwgMHgwMCwKLQkweGU5LCAweDAwLAotCTB4ZWEsIDB4MDAsCi0JMHhlYiwgMHgwMCwKLQkweGVjLCAweDAwLAotCTB4ZWQsIDB4MDAsCi0JMHhlZSwgMHgwMCwKLQkweGVmLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHNhYTcxMTRfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8vZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB3cml0aW5nIGluaXRcbiIsIEkyQ19OQU1FKGNsaWVudCkpOwotCQkvL3NhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJaW50IGk7Ci0KLQkJaWYgKCFkZWJ1ZykKLQkJCWJyZWFrOwotCQl2NGxfaW5mbyhjbGllbnQsICJkZWNvZGVyIGR1bXBcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgewotCQkJaW50IGo7Ci0KLQkJCXY0bF9pbmZvKGNsaWVudCwgIiUwM3giLCBpKTsKLQkJCWZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAotCQkJCSAgICAgICBzYWE3MTE0X3JlYWQoY2xpZW50LCBpICsgaikpOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gODsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXM7Ci0KLQkJc3RhdHVzID0gc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZik7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7Ci0JCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQl9Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgKDEgPDwgNSkpICE9IDApIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgMCkpICE9IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJfQotCQkqaWFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXNob3J0IGludCBob2ZmID0gMCwgdm9mZiA9IDAsIHcgPSAwLCBoID0gMDsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybVxuIik7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIk5UU0NcbiIpOwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDYpXSA9Ci0JCQkgICAgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVDsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQotCQkJICAgIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUDsKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IGRlY29kZXItPnBsYXliYWNrID8gMHg3YyA6IDB4Yjg7CS8vIFBMTCBmcmVlIHdoZW4gcGxheWJhY2ssIFBMTCBjbG9zZSB3aGVuIGNhcHR1cmUKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSA9IDB4ODU7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZildID0gMHgyNDsKLQotCQkJaG9mZiA9IFNBQV83MTE0X05UU0NfSE9GRlNFVDsKLQkJCXZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7Ci0JCQl3ID0gU0FBXzcxMTRfTlRTQ19XSURUSDsKLQkJCWggPSBTQUFfNzExNF9OVFNDX0hFSUdIVDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlBBTFxuIik7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KLQkJCSAgICBTQUFfNzExNF9QQUxfSFNZTkNfU1RBUlQ7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNyldID0KLQkJCSAgICBTQUFfNzExNF9QQUxfSFNZTkNfU1RPUDsKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IGRlY29kZXItPnBsYXliYWNrID8gMHg3YyA6IDB4Yjg7CS8vIFBMTCBmcmVlIHdoZW4gcGxheWJhY2ssIFBMTCBjbG9zZSB3aGVuIGNhcHR1cmUKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSA9IDB4ODE7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZildID0gMHgyNDsKLQotCQkJaG9mZiA9IFNBQV83MTE0X1BBTF9IT0ZGU0VUOwotCQkJdm9mZiA9IFNBQV83MTE0X1BBTF9WT0ZGU0VUOwotCQkJdyA9IFNBQV83MTE0X1BBTF9XSURUSDsKLQkJCWggPSBTQUFfNzExNF9QQUxfSEVJR0hUOwotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVW5rbm93biB2aWRlbyBtb2RlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NSldID0gSElCWVRFKGhvZmYpICYgMHgwZjsJLy8gaG9mZnNldCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk2KV0gPSBMT0JZVEUodyk7CS8vIHdpZHRoIGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OCldID0gTE9CWVRFKHZvZmYpOwkvLyB2b2Zmc2V0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OSldID0gSElCWVRFKHZvZmYpICYgMHgwZjsJLy8gdm9mZnNldCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDliKV0gPSBISUJZVEUoaCArIDIpICYgMHgwZjsJLy8gaGVpZ2h0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWMpXSA9IExPQllURSh3KTsJLy8gb3V0IHdpZHRoIGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWUpXSA9IExPQllURShoKTsJLy8gb3V0IGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWYpXSA9IEhJQllURShoKSAmIDB4MGY7CS8vIG91dCBoZWlnaHQgaGlnaAotCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2EpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2IpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgwNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2sgZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQotCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MDYgPDwgMSksCi0JCQkJICAgIDMgPDwgMSk7Ci0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwZSA8PCAxKSwKLQkJCQkgICAgMiA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDVhIDw8IDEpLAotCQkJCSAgICAyIDw8IDEpOwotCi0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg5NCA8PCAxKSwKLQkJCQkgICAgKDB4OWYgKyAxIC0gMHg5NCkgPDwgMSk7Ci0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjNCA8PCAxKSwKLQkJCQkgICAgKDB4Y2YgKyAxIC0gMHhjNCkgPDwgMSk7Ci0KLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgzNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2sgZW5kIGNsb2NrIHNlbGVjdGlvbgotCi0JCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgKCVkKVxuIiwgKmlhcmcpOwotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAotCQkJCSppYXJnID49IDYgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIik7Ci0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCi0JCQkvKiBzZWxlY3QgbW9kZSAqLwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSA9Ci0JCQkgICAgKGRlY29kZXItPgotCQkJICAgICByZWdbUkVHX0FERFIoMHgwMildICYgMHhmMCkgfCAoZGVjb2Rlci0+Ci0JCQkJCQkJICAgIGlucHV0IDwKLQkJCQkJCQkgICAgNiA/IDB4MCA6IDB4OSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildKTsKLQotCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDYuLjkgKi8KLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0gPQotCQkJICAgIChkZWNvZGVyLT4KLQkJCSAgICAgcmVnW1JFR19BRERSKDB4MDkpXSAmIDB4N2YpIHwgKGRlY29kZXItPgotCQkJCQkJCSAgICBpbnB1dCA8Ci0JCQkJCQkJICAgIDYgPyAweDAgOgotCQkJCQkJCSAgICAweDgwKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA5LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0pOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0KLQkJCSAgICBkZWNvZGVyLT5pbnB1dCA8Ci0JCQkgICAgNiA/IGRlY29kZXItPgotCQkJICAgIHJlZ1tSRUdfQUREUigweDBlKV0gfCAxIDogZGVjb2Rlci0+Ci0JCQkgICAgcmVnW1JFR19BRERSKDB4MGUpXSAmIH4xOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dFxuIik7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzIG91dHB1dFxuIiwKLQkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKLQotCQlkZWNvZGVyLT5wbGF5YmFjayA9ICFlbmFibGU7Ci0KLQkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQotCQkJLyogUko6IElmIG91dHB1dCBzaG91bGQgYmUgZGlzYWJsZWQgKGZvcgotCQkJICogcGxheWluZyB2aWRlb3MpLCB3ZSBhbHNvIG5lZWQgYSBvcGVuIFBMTC4KLQkJCSAqIFRoZSBpbnB1dCBpcyBzZXQgdG8gMCAod2hlcmUgbm8gaW5wdXQKLQkJCSAqIHNvdXJjZSBpcyBjb25uZWN0ZWQpLCBhbHRob3VnaCB0aGlzCi0JCQkgKiBpcyBub3QgbmVjZXNzYXJ5LgotCQkJICoKLQkJCSAqIElmIG91dHB1dCBzaG91bGQgYmUgZW5hYmxlZCwgd2UgaGF2ZSB0bwotCQkJICogcmV2ZXJzZSB0aGUgYWJvdmUuCi0JCQkgKi8KLQotCQkJaWYgKGRlY29kZXItPmVuYWJsZSkgewotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0gPSAweGI4OwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweGM5OwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDgwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAxOwotCQkJfSBlbHNlIHsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gMHg3YzsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMildID0gMHgwMDsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMyldID0gMHgwMDsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg4NyldID0gMHgwMDsKLQkJCX0KLQotCQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsCi0JCQkJCSAgICBkZWNvZGVyLT5yZWcgKyAoMHgxMiA8PCAxKSwKLQkJCQkJICAgIDIgPDwgMSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg3LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0pOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsKLQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJImRlY29kZXIgc2V0IHBpY3R1cmUgYnJpZ2h0PSVkIGNvbnRyYXN0PSVkIHNhdHVyYXRpb249JWQgaHVlPSVkXG4iLAotCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91ciwgcGljLT5odWUpOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwYSwgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwYiwKLQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBjLCBkZWNvZGVyLT5zYXQgPj4gOSk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZCwKLQkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQyID4+IDEsIDB4NDAgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCWludCBpLCBlcnJbMzBdOwotCXNob3J0IGludCBob2ZmID0gU0FBXzcxMTRfTlRTQ19IT0ZGU0VUOwotCXNob3J0IGludCB2b2ZmID0gU0FBXzcxMTRfTlRTQ19WT0ZGU0VUOwotCXNob3J0IGludCB3ID0gU0FBXzcxMTRfTlRTQ19XSURUSDsKLQlzaG9ydCBpbnQgaCA9IFNBQV83MTE0X05UU0NfSEVJR0hUOwotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyOwotCi0JLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCi0JCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExNCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JZGVjb2Rlci0+aW5wdXQgPSAtMTsKLQlkZWNvZGVyLT5lbmFibGUgPSAxOwotCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OwotCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+aHVlID0gMzI3Njg7Ci0JZGVjb2Rlci0+c2F0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+cGxheWJhY2sgPSAwOwkvLyBpbml0aWFsbHkgY2FwdHVyZSBtb2RlIHVzZWRhCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7Ci0KLQltZW1jcHkoZGVjb2Rlci0+cmVnLCBpbml0LCBzaXplb2YoaW5pdCkpOwotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTQpXSA9IExPQllURShob2ZmKTsJLy8gaG9mZnNldCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NSldID0gSElCWVRFKGhvZmYpICYgMHgwZjsJLy8gaG9mZnNldCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTcpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OCldID0gTE9CWVRFKHZvZmYpOwkvLyB2b2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YSldID0gTE9CWVRFKGggKyAyKTsJLy8gaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDliKV0gPSBISUJZVEUoaCArIDIpICYgMHgwZjsJLy8gaGVpZ2h0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWQpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIG91dCB3aWR0aCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWUpXSA9IExPQllURShoKTsJLy8gb3V0IGhlaWdodCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2IpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNjKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGI4KV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiOSldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmEpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJiKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJjKV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmQpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiZSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJmKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlOCldID0KLQkgICAgTE9CWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZTkpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVhKV0gPQotCSAgICBMT0JZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlYildID0KLQkgICAgSElCWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlYyldID0KLQkgICAgTE9CWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVkKV0gPQotCSAgICBISUJZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWUpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlZildID0KLQkgICAgSElCWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMyldID0gMHg4MDsJLy8gUlRDMCBvbgotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAxOwkvLyBJLVBvcnQKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMildID0gMHhjOTsJLy8gUlRTMAotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSA9IDB4YzA7CS8vIHNldCBjb21wb3NpdGUxIGlucHV0LCBhdmVhc3kKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOSldID0gMHgwMDsJLy8gY2hyb21pbmFuY2UgdHJhcAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gfD0gMTsJLy8gY29tYmZpbHRlciBvbgotCi0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGFydGluZyBpbml0XG4iKTsKLQotCWVyclswXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgyMCA8PCAxKSwKLQkJCQkweDEwIDw8IDEpOwotCWVyclsxXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgzMCA8PCAxKSwKLQkJCQkweDEwIDw8IDEpOwotCWVyclsyXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg2MyA8PCAxKSwKLQkJCQkoMHg3ZiArIDEgLSAweDYzKSA8PCAxKTsKLQllcnJbM10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ODkgPDwgMSksCi0JCQkJNiA8PCAxKTsKLQllcnJbNF0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YjggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZTggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQotCi0JZm9yIChpID0gMDsgaSA8PSA1OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwotCX0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJInBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIik7Ci0KLQllcnJbNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgwNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2tlbmQgY2xvY2sgc2VsZWN0aW9uLCB0YXNrIEEmQiBvZmYKLQllcnJbN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCWVycls4XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQotCWZvciAoaSA9IDY7IGkgPD0gODsgaSsrKSB7Ci0JCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlpLCBlcnJbaV0pOwotCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInBlcmZvcm1pbmcgdGhlIHJlc3Qgb2YgaW5pdFxuIik7Ci0KLQllcnJbOV0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMSwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDEpXSk7Ci0JZXJyWzEwXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwMyA8PCAxKSwgKDB4MWUgKyAxIC0gMHgwMykgPDwgMSk7CS8vIGJpZyBzZXEKLQllcnJbMTFdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDQwIDw8IDEpLCAoMHg1ZiArIDEgLSAweDQwKSA8PCAxKTsJLy8gc2xpY2VyCi0JZXJyWzEyXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4MSA8PCAxKSwgMiA8PCAxKTsJLy8gPwotCWVyclsxM10gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ODMgPDwgMSksIDUgPDwgMSk7CS8vID8KLQllcnJbMTRdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDkwIDw8IDEpLCA0IDw8IDEpOwkvLyBUYXNrIEEKLQllcnJbMTVdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDk0IDw8IDEpLAotCQkJCTEyIDw8IDEpOwotCWVyclsxNl0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YTAgPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMTddID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGE4IDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE4XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhiMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxOV0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YzAgPDwgMSksIDQgPDwgMSk7CS8vIFRhc2sgQgotCWVyclsxNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YzQgPDwgMSksCi0JCQkJMTIgPDwgMSk7Ci0JZXJyWzE2XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhkMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxN10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZDggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMThdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGUwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0KLQlmb3IgKGkgPSA5OyBpIDw9IDE4OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0KLQlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0KLQlmb3IgKGkgPSAweDExOyBpIDw9IDB4MTM7IGkrKykgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwotCX0KLQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0dGluZyB2aWRlbyBpbnB1dFxuIik7Ci0KLQllcnJbMTldID0KLQkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDIsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwotCWVyclsyMF0gPQotCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwOSwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSk7Ci0JZXJyWzIxXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBlLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldKTsKLQotCWZvciAoaSA9IDE5OyBpIDw9IDIxOyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKLQotCWVyclsyMl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCWVyclsyM10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCi0JZXJyWzI0XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgotCi0KLQlmb3IgKGkgPSAyMjsgaSA8PSAyNDsgaSsrKSB7Ci0JCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlpLCBlcnJbaV0pOwotCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCWVyclsyNV0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNiwgaW5pdFtSRUdfQUREUigweDA2KV0pOwotCWVyclsyNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNywgaW5pdFtSRUdfQUREUigweDA3KV0pOwotCWVyclsyN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgxMCwgaW5pdFtSRUdfQUREUigweDEwKV0pOwotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpKTsKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCSJwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAotCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4ZikpOwotCi0KLQlmb3IgKGkgPSAweDk0OyBpIDwgMHg5NjsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0JLy9pID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTE0X2lkW10gPSB7Ci0JeyAic2FhNzExNF9vbGQiLCAwIH0sCS8qICJzYWE3MTE0IiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLwotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTE0X2lkKTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewotCS5uYW1lID0gInNhYTcxMTQiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAotCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAotCS5wcm9iZSA9IHNhYTcxMTRfcHJvYmUsCi0JLnJlbW92ZSA9IHNhYTcxMTRfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHNhYTcxMTRfaWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCA0NmM3OTZjLi5jZWJmMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtNzc4LDcgKzc3OCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewogCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtOTMxLDggKzkzMSw4IEBACiAJLyogUHJldmVudCB1bm5lY2Vzc2FyeSBzdGFuZGFyZCBjaGFuZ2VzLiBEdXJpbmcgYSBzdGFuZGFyZAogCSAgIGNoYW5nZSB0aGUgSS1Qb3J0IGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkLiBBbnkgZGV2aWNlcwogCSAgIHJlYWRpbmcgZnJvbSB0aGF0IHBvcnQgY2FuIGdldCBjb25mdXNlZC4KLQkgICBOb3RlIHRoYXQgVklESU9DX1NfU1REIGlzIGFsc28gdXNlZCB0byBzd2l0Y2ggZnJvbQotCSAgIHJhZGlvIHRvIFRWIG1vZGUsIHNvIGlmIGEgVklESU9DX1NfU1REIGlzIGJyb2FkY2FzdCB0bworCSAgIE5vdGUgdGhhdCBzX3N0ZCBpcyBhbHNvIHVzZWQgdG8gc3dpdGNoIGZyb20KKwkgICByYWRpbyB0byBUViBtb2RlLCBzbyBpZiBhIHNfc3RkIGlzIGJyb2FkY2FzdCB0bwogCSAgIGFsbCBJMkMgZGV2aWNlcyB0aGVuIHlvdSBkbyBub3Qgd2FudCB0byBoYXZlIGFuIHVud2FudGVkCiAJICAgc2lkZS1lZmZlY3QgaGVyZS4gKi8KIAlpZiAoc3RkID09IHN0YXRlLT5zdGQpCkBAIC0xMjA2LDEwICsxMjA2LDEyIEBACiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzMDgsMTEgKzEzMTAsMTIgQEAKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlcyBvdXRwdXRcbiIsCiAJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAKLQlpZiAoc3RhdGUtPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJc3RhdGUtPmVuYWJsZSA9IGVuYWJsZTsKLQkJc2FhNzExeF93cml0ZShzZCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwKLQkJCQlzdGF0ZS0+ZW5hYmxlKTsKLQl9CisJaWYgKHN0YXRlLT5lbmFibGUgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKwlzdGF0ZS0+ZW5hYmxlID0gZW5hYmxlOworCWlmICghc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCkpCisJCXJldHVybiAwOworCXNhYTcxMXhfd3JpdGUoc2QsIFJfODdfSV9QT1JUX0lfT19FTkFfT1VUX0NMS19BTkRfR0FURUQsIHN0YXRlLT5lbmFibGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzcwLDYgKzEzNzMsNDcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc2FhNzExeF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgcmVnMWU7CisKKwkqc3RkID0gVjRMMl9TVERfQUxMOworCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTE1KQorCQlyZXR1cm4gMDsKKwlyZWcxZSA9IHNhYTcxMXhfcmVhZChzZCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisKKwlzd2l0Y2ggKHJlZzFlICYgMHgwMykgeworCWNhc2UgMToKKwkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkqc3RkID0gVjRMMl9TVERfU0VDQU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTF4X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgcmVnMWUgPSAweDgwOworCWludCByZWcxZjsKKworCSpzdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNSkKKwkJcmVnMWUgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUVfU1RBVFVTX0JZVEVfMV9WRF9ERUMpOworCXJlZzFmID0gc2FhNzExeF9yZWFkKHNkLCBSXzFGX1NUQVRVU19CWVRFXzJfVkRfREVDKTsKKwlpZiAoKHJlZzFmICYgMHhjMSkgPT0gMHg4MSAmJiAocmVnMWUgJiAweGMwKSA9PSAweDgwKQorCQkqc3RhdHVzID0gMDsKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgc2FhNzExeF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewpAQCAtMTQ5Myw2ICsxNTM3LDggQEAKIAkuZ192YmlfZGF0YSA9IHNhYTcxMXhfZ192YmlfZGF0YSwKIAkuZGVjb2RlX3ZiaV9saW5lID0gc2FhNzExeF9kZWNvZGVfdmJpX2xpbmUsCiAJLnNfc3RyZWFtID0gc2FhNzExeF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSBzYWE3MTF4X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxMXhfZ19pbnB1dF9zdGF0dXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTF4X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggMDUyMjFkNC4uMTI4YmI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTgxMCw3ICs4MTAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzEyNyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMjcsCiAJLnByb2JlID0gc2FhNzEyN19wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzEyN19yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzEyN19pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKaW5kZXggZmMyMTY0ZS4uMGJhNjg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCiAJc2VsZWN0IENSQzMyCisJc2VsZWN0IFZJREVPX1NBQTY1ODggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBQaGlsaXBzIFNBQTcxM3ggYmFzZWQKIAkgIFRWIGNhcmRzLgpAQCAtMzUsOCArMzYsMTYgQEAKIAlzZWxlY3QgRFZCX1REQTEwMDg2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UREE4MjZYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfSVNMNjQwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAwMzYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzEyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCmluZGV4IDFmZWU2ZTguLmRjMjIxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTMzLDkgKzMzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogCkBAIC00NCwxMCArNDUsNiBAQAogI2RlZmluZSBNUEVHX1RPVEFMX1RBUkdFVF9CSVRSQVRFX01BWCAgMjcwMDAKICNkZWZpbmUgTVBFR19QSURfTUFYICgoMSA8PCAxNCkgLSAxKQogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDIwLCBJMkNfQ0xJRU5UX0VORH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIHNhYTY3NTJocyBNUEVHMiBlbmNvZGVyIik7CiBNT0RVTEVfQVVUSE9SKCJBbmRyZXcgZGUgUXVpbmNleSIpOwpAQCAtOTUsNiArOTIsNyBAQAogfTsKIAogc3RydWN0IHNhYTY3NTJoc19zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgc2Q7CiAJaW50IAkJCSAgICAgIGNoaXA7CiAJdTMyIAkJCSAgICAgIHJldmlzaW9uOwogCWludCAJCQkgICAgICBoYXNfYWMzOwpAQCAtMTE1LDYgKzExMywxMSBAQAogCVNBQTY3NTJIU19DT01NQU5EX01BWAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdTggUEFUW10gPSB7CkBAIC0zNjAsMTg1ICszNjMsMTkxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY3NTJoc19zZXRfc3Vic2FtcGxpbmcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisKK3N0YXRpYyBpbnQgZ2V0X2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBkaXN0XzM1MiwgZGlzdF80ODAsIGRpc3RfNzIwOwotCi0JLyoKLQkgIEZJWE1FOiB0cmFuc2xhdGUgYW5kIHJvdW5kIHdpZHRoL2hlaWdodCBpbnRvIEVNUFJFU1MKLQkgIHN1YnNhbXBsZSB0eXBlOgotCi0JICB0eXBlICAgfCAgIFBBTCAgIHwgIE5UU0MKLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgU0lGICAgIHwgMzUyeDI4OCB8IDM1MngyNDAKLQkgIDEvMiBEMSB8IDM1Mng1NzYgfCAzNTJ4NDgwCi0JICAyLzMgRDEgfCA0ODB4NTc2IHwgNDgweDQ4MAotCSAgRDEgICAgIHwgNzIweDU3NiB8IDcyMHg0ODAKLQkqLwotCi0JZGlzdF8zNTIgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDM1Mik7Ci0JZGlzdF80ODAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDQ4MCk7Ci0JZGlzdF83MjAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDcyMCk7Ci0JaWYgKGRpc3RfNzIwIDwgZGlzdF80ODApIHsKLQkJZi0+Zm10LnBpeC53aWR0aCA9IDcyMDsKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7Ci0JCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9EMTsKLQl9Ci0JZWxzZSBpZiAoZGlzdF80ODAgPCBkaXN0XzM1MikgewotCQlmLT5mbXQucGl4LndpZHRoID0gNDgwOwotCQlmLT5mbXQucGl4LmhlaWdodCA9IDU3NjsKLQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzJfM19EMTsKLQl9Ci0JZWxzZSB7Ci0JCWYtPmZtdC5waXgud2lkdGggPSAzNTI7Ci0JCWlmIChhYnMoZi0+Zm10LnBpeC5oZWlnaHQgLSA1NzYpIDwKLQkJICAgIGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDI4OCkpIHsKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzFfMl9EMTsKLQkJfQotCQllbHNlIHsKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjg4OwotCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX1NJRjsKLQkJfQotCX0KLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9jdHJsKGludCBoYXNfYWMzLCBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMsCi0JCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCB1bnNpZ25lZCBpbnQgY21kKQotewotCWludCBvbGQgPSAwLCBuZXc7Ci0JaW50IHNldCA9IChjbWQgPT0gVklESU9DX1NfRVhUX0NUUkxTKTsKLQotCW5ldyA9IGN0cmwtPnZhbHVlOwogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgotCQkJb2xkID0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3BtdDsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9wbXQgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86Ci0JCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9hdWRpbzsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9hdWRpbyA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3ZpZGVvID0gbmV3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3BjcjsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQkJb2xkID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yICYmCi0JCQkgICAgKCFoYXNfYWMzIHx8IG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCW5ldyA9IG9sZDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJCW9sZCA9IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgJiYKLQkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SykKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPD0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SykKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLOwotCQkJZWxzZQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEs7Ci0JCQlwYXJhbXMtPmF1X2wyX2JpdHJhdGUgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgotCQkJaWYgKCFoYXNfYWMzKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJb2xkID0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLICYmCi0JCQkJICAgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SykKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SzsKLQkJCWVsc2UKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzsKLQkJCXBhcmFtcy0+YXVfYWMzX2JpdHJhdGUgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6Ci0JCQlvbGQgPSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCW5ldyA9IG9sZDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6Ci0JCQlvbGQgPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2FzcGVjdDsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAmJgotCQkJCSAgIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MykKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5KQotCQkJCW5ldyA9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzOwotCQkJcGFyYW1zLT52aV9hc3BlY3QgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGUgKiAxMDAwOwotCQkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKLQkJCQluZXcgPSBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDA7Ci0JCQlwYXJhbXMtPnZpX2JpdHJhdGUgPSBuZXcgLyAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayAqIDEwMDA7Ci0JCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrID0gbmV3IC8gMTAwMDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCQkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlX21vZGU7Ci0JCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9IG5ldzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnRzX3BpZF9wbXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnRzX3BpZF92aWRlbzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3BjcjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfZW5jb2Rpbmc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQlpZiAoIWhhc19hYzMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9hc3BlY3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKGNtZCA9PSBWSURJT0NfR19FWFRfQ1RSTFMpCi0JCWN0cmwtPnZhbHVlID0gb2xkOwotCWVsc2UKLQkJY3RybC0+dmFsdWUgPSBuZXc7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX3FjdHJsKHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmgsCi0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCitzdGF0aWMgaW50IGhhbmRsZV9jdHJsKGludCBoYXNfYWMzLCBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMsCisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCBpbnQgc2V0KQogeworCWludCBvbGQgPSAwLCBuZXc7CisKKwluZXcgPSBjdHJsLT52YWx1ZTsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlvbGQgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKKwkJb2xkID0gcGFyYW1zLT50c19waWRfcG10OworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9wbXQgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9hdWRpbzsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCW5ldyA9IE1QRUdfUElEX01BWDsKKwkJcGFyYW1zLT50c19waWRfYXVkaW8gPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF92aWRlbzsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCW5ldyA9IE1QRUdfUElEX01BWDsKKwkJcGFyYW1zLT50c19waWRfdmlkZW8gPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKKwkJb2xkID0gcGFyYW1zLT50c19waWRfcGNyOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJb2xkID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKKwkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKKwkJICAgICghaGFzX2FjMyB8fCBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJbmV3ID0gb2xkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKKwkJb2xkID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLICYmCisJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkspCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLOworCQllbHNlCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLOworCQlwYXJhbXMtPmF1X2wyX2JpdHJhdGUgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJaWYgKCFoYXNfYWMzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW9sZCA9IHBhcmFtcy0+YXVfYWMzX2JpdHJhdGU7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLICYmCisJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SykKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOworCQllbHNlCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzsKKwkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOworCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJbmV3ID0gb2xkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCW9sZCA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCW9sZCA9IHBhcmFtcy0+dmlfYXNwZWN0OworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDkgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSkKKwkJCW5ldyA9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzOworCQlwYXJhbXMtPnZpX2FzcGVjdCA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7CisJCW5ldyA9IDEwMDAgKiAobmV3IC8gMTAwMCk7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQluZXcgPSBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDA7CisJCXBhcmFtcy0+dmlfYml0cmF0ZSA9IG5ldyAvIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICogMTAwMDsKKwkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKKwkJcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgPSBuZXcgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZTsKKwkJcGFyYW1zLT52aV9iaXRyYXRlX21vZGUgPSBuZXc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljdHJsLT52YWx1ZSA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNhYTY3NTJoc19xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcyA9ICZoLT5wYXJhbXM7CiAJaW50IGVycjsKIApAQCAtNTgzLDcgKzU5Miw3IEBACiAJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA4MDAwMDAwKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9PQogCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSKQpAQCAtNTk3LDEyICs2MDYsMjAgQEAKIAkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDE2KTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNjApOwogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI1Nik7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTkpOwogCiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC02MTAsOCArNjI3LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKLQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQogewogCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19hdWRpb19lbmNvZGluZ1tdID0gewogCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwKQEAgLTYzMiwxMSArNjQ4LDEyIEBACiAJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLLAogCQlWNEwyX0NUUkxfTUVOVV9JRFNfRU5ECiAJfTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlpbnQgZXJyOwogCiAJcWN0cmwuaWQgPSBxbWVudS0+aWQ7Ci0JZXJyID0gc2FhNjc1MmhzX3FjdHJsKGgsICZxY3RybCk7CisJZXJyID0gc2FhNjc1MmhzX3F1ZXJ5Y3RybChzZCwgJnFjdHJsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXN3aXRjaCAocW1lbnUtPmlkKSB7CkBAIC02NTYsMTcgKzY3MywxNiBAQAogCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgbGVhZGluZ19udWxsX2J5dGVzKQorc3RhdGljIGludCBzYWE2NzUyaHNfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgbGVhZGluZ19udWxsX2J5dGVzKQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzldLCBidWYyWzRdOwotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmg7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdW5zaWduZWQgc2l6ZTsKIAl1MzIgY3JjOwogCXVuc2lnbmVkIGNoYXIgbG9jYWxQQVRbMjU2XTsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsUE1UWzI1Nl07CiAKLQloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KIAkvKiBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncyAqLwogCXNldF9yZWc4KGNsaWVudCwgMHg0MSwgaC0+dmlkZW9fZm9ybWF0KTsKIApAQCAtNzYyLDcgKzc3OCw3IEBACiAJYnVmWzNdID0gMHg4MjsKIAlidWZbNF0gPSAweEIwOwogCWJ1Zls1XSA9IGJ1ZjJbMF07Ci0Jc3dpdGNoKGgtPnBhcmFtcy52aV9hc3BlY3QpIHsKKwlzd2l0Y2ggKGgtPnBhcmFtcy52aV9hc3BlY3QpIHsKIAljYXNlIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OToKIAkJYnVmWzZdID0gYnVmMlsxXSB8IDB4NDA7CiAJCWJyZWFrOwpAQCAtNzcwLDcgKzc4Niw2IEBACiAJZGVmYXVsdDoKIAkJYnVmWzZdID0gYnVmMlsxXSAmIDB4QkY7CiAJCWJyZWFrOwotCQlicmVhazsKIAl9CiAJYnVmWzddID0gYnVmMlsyXTsKIAlidWZbOF0gPSBidWYyWzNdOwpAQCAtNzc5LDgxICs3OTQsMTYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTY3NTJoc19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2RvX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzLCBpbnQgc2V0KQogewotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzID0gYXJnOworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyBwYXJhbXM7Ci0JaW50IGVyciA9IDA7CiAJaW50IGk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9JTklUOgotCQkvKiBhcHBseSBzZXR0aW5ncyBhbmQgc3RhcnQgZW5jb2RlciAqLwotCQlzYWE2NzUyaHNfaW5pdChjbGllbnQsICoodTMyICopYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCQlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcGFyYW1zID0gaC0+cGFyYW1zOwotCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKLQkJCWVyciA9IGhhbmRsZV9jdHJsKGgtPmhhc19hYzMsICZwYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGksIGNtZCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW1zID0gaC0+cGFyYW1zOworCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQlpbnQgZXJyID0gaGFuZGxlX2N0cmwoaC0+aGFzX2FjMywgJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgc2V0KTsKKworCQlpZiAoZXJyKSB7CisJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCXJldHVybiBlcnI7CiAJCX0KKwl9CisJaWYgKHNldCkKIAkJaC0+cGFyYW1zID0gcGFyYW1zOwotCQlicmVhazsKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiBzYWE2NzUyaHNfcWN0cmwoaCwgYXJnKTsKLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiBzYWE2NzUyaHNfcW1lbnUoaCwgYXJnKTsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCi0JICAgaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKLQkJICAgaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOwotCSAgIGYtPmZtdC5waXgud2lkdGggPQotCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXgud2lkdGg7Ci0JICAgZi0+Zm10LnBpeC5oZWlnaHQgPQotCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXguaGVpZ2h0OwotCSAgIGJyZWFrIDsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkJc2FhNjc1MmhzX3NldF9zdWJzYW1wbGluZyhjbGllbnQsIGYpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCWgtPnN0YW5kYXJkID0gKigodjRsMl9zdGRfaWQgKikgYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19EQkdfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAotCQkJCWFyZywgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOwotCi0JZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXJldHVybiBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHNkLCBjdHJscywgMSk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3RyeV9leHRfY3RybHMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlyZXR1cm4gc2FhNjc1MmhzX2RvX2V4dF9jdHJscyhzZCwgY3RybHMsIDApOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19nX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisJaW50IGk7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCWludCBlcnIgPSBnZXRfY3RybChoLT5oYXNfYWMzLCAmaC0+cGFyYW1zLCBjdHJscy0+Y29udHJvbHMgKyBpKTsKKworCQlpZiAoZXJyKSB7CisJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKKwkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOworCWYtPmZtdC5waXgud2lkdGggPQorCQl2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXgud2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgPQorCQl2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXguaGVpZ2h0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZGlzdF8zNTIsIGRpc3RfNDgwLCBkaXN0XzcyMDsKKworCS8qCisJICBGSVhNRTogdHJhbnNsYXRlIGFuZCByb3VuZCB3aWR0aC9oZWlnaHQgaW50byBFTVBSRVNTCisJICBzdWJzYW1wbGUgdHlwZToKKworCSAgdHlwZSAgIHwgICBQQUwgICB8ICBOVFNDCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIFNJRiAgICB8IDM1MngyODggfCAzNTJ4MjQwCisJICAxLzIgRDEgfCAzNTJ4NTc2IHwgMzUyeDQ4MAorCSAgMi8zIEQxIHwgNDgweDU3NiB8IDQ4MHg0ODAKKwkgIEQxICAgICB8IDcyMHg1NzYgfCA3MjB4NDgwCisJKi8KKworCWRpc3RfMzUyID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSAzNTIpOworCWRpc3RfNDgwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA0ODApOworCWRpc3RfNzIwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA3MjApOworCWlmIChkaXN0XzcyMCA8IGRpc3RfNDgwKSB7CisJCWYtPmZtdC5waXgud2lkdGggPSA3MjA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7CisJfSBlbHNlIGlmIChkaXN0XzQ4MCA8IGRpc3RfMzUyKSB7CisJCWYtPmZtdC5waXgud2lkdGggPSA0ODA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMl8zX0QxOworCX0gZWxzZSB7CisJCWYtPmZtdC5waXgud2lkdGggPSAzNTI7CisJCWlmIChhYnMoZi0+Zm10LnBpeC5oZWlnaHQgLSA1NzYpIDwKKwkJICAgIGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDI4OCkpIHsKKwkJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzFfMl9EMTsKKwkJfSBlbHNlIHsKKwkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjg4OworCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX1NJRjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwloLT5zdGFuZGFyZCA9IHN0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCWNoaXAsIGgtPmNoaXAsIGgtPnJldmlzaW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE2NzUyaHNfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTY3NTJoc19nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBzYWE2NzUyaHNfaW5pdCwKKwkucXVlcnljdHJsID0gc2FhNjc1MmhzX3F1ZXJ5Y3RybCwKKwkucXVlcnltZW51ID0gc2FhNjc1MmhzX3F1ZXJ5bWVudSwKKwkuZ19leHRfY3RybHMgPSBzYWE2NzUyaHNfZ19leHRfY3RybHMsCisJLnNfZXh0X2N0cmxzID0gc2FhNjc1MmhzX3NfZXh0X2N0cmxzLAorCS50cnlfZXh0X2N0cmxzID0gc2FhNjc1MmhzX3RyeV9leHRfY3RybHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE2NzUyaHNfdHVuZXJfb3BzID0geworCS5zX3N0ZCA9IHNhYTY3NTJoc19zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTY3NTJoc192aWRlb19vcHMgPSB7CisJLnNfZm10ID0gc2FhNjc1MmhzX3NfZm10LAorCS5nX2ZtdCA9IHNhYTY3NTJoc19nX2ZtdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTY3NTJoc19vcHMgPSB7CisJLmNvcmUgPSAmc2FhNjc1MmhzX2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE2NzUyaHNfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZzYWE2NzUyaHNfdmlkZW9fb3BzLAorfTsKKwogc3RhdGljIGludCBzYWE2NzUyaHNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBremFsbG9jKHNpemVvZigqaCksIEdGUF9LRVJORUwpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJdTggYWRkciA9IDB4MTM7CiAJdTggZGF0YVsxMl07CiAKQEAgLTg2MSw2ICs5NTcsOCBAQAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAJaWYgKGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmaC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTY3NTJoc19vcHMpOwogCiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgJmFkZHIsIDEpOwogCWkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGRhdGEsIHNpemVvZihkYXRhKSk7CkBAIC04NzQsMTQgKzk3MiwxNSBAQAogCX0KIAloLT5wYXJhbXMgPSBwYXJhbV9kZWZhdWx0czsKIAloLT5zdGFuZGFyZCA9IDA7IC8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTY3NTJoc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg5Myw4ICs5OTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNjc1MmhzIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTLAotCS5jb21tYW5kID0gc2FhNjc1MmhzX2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNjc1MmhzX3Byb2JlLAogCS5yZW1vdmUgPSBzYWE2NzUyaHNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTY3NTJoc19pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IGUyZmViY2QuLmE3OTBhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlICJ0ZWE1NzY3LmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKIAogLyogY29tbWx5IHVzZWQgc3RyaW5ncyAqLwogc3RhdGljIGNoYXIgbmFtZV9tdXRlW10gICAgPSAibXV0ZSI7CkBAIC0yNzIsNiArMjczLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKQEAgLTQwOCw2ICs0MTAsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZgk9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmdwaW9tYXNrCT0gMHg4MjAwMDAsCiAJCS5pbnB1dHMJCT0ge3sKQEAgLTgxOCw2ICs4MjEsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKIAkJCS52bXV4ID0gNCwKQEAgLTk3Nyw2ICs5ODEsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKIAkJCS52bXV4ID0gMSwKQEAgLTE2OTksNiArMTcwNCw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTIzNjQsNiArMjM3MCw3IEBACiAJCS5yYWRpb190eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjEsCiAJCS5pbnB1dHMJCT0ge3sKIAkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDAiLAogCQkJLnZtdXggICA9IDAsCkBAIC0zMjkxLDYgKzMyOTgsNjggQEAKIAkJCS5ncGlvID0gMHgwMjAwMTAwLAogCQl9LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjExMjAgQVRTQy9RQU0tSHlicmlkIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMywKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLnRzX3R5cGUJPSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDA4MDAxMDAsIC8qIEdQSU8gMjEgaXMgYW4gSU5QVVQgKi8KKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAwMDEwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwODAwMTAwLCAvKiBHUElPIDIzIEhJIGZvciBGTSAqLworCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSM10gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTExMHIzIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMywKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwODAwMTAwLCAvKiBHUElPIDIxIGlzIGFuIElOUFVUICovCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQkJLmdwaW8gPSAweDAwMDAxMDAsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMyBISSBmb3IgRk0gKi8KKwkJfSwKKwl9LAogCVtTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSFQgUENNQ0lBIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKQEAgLTQwNzAsNiArNDEzOSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfdHYsCkBAIC00MTA2LDYgKzQxNzYsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtNDE0Myw2ICs0MjE0LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQzMjMsMTMgKzQzOTUsMTMgQEAKIAkJCSAuYW11eCA9IFRWLAogCQkJIC50diAgID0gMSwKIAkJIH0sIHsKLQkJCSAubmFtZSA9IG5hbWVfY29tcCwKLQkJCSAudm11eCA9IDAsCisJCQkgLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJIC52bXV4ID0gMywKIAkJCSAuYW11eCA9IExJTkUxLAogCQkgfSwgewogCQkJIC5uYW1lID0gbmFtZV9zdmlkZW8sCiAJCQkgLnZtdXggPSA4LAotCQkJIC5hbXV4ID0gTElORTEsCisJCQkgLmFtdXggPSBMSU5FMiwKIAkJIH0gfSwKIAkJIC5yYWRpbyA9IHsKIAkJCSAubmFtZSA9IG5hbWVfcmFkaW8sCkBAIC00NDIxLDggKzQ0OTMsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLyogbm8gRFZCIHN1cHBvcnQgZm9yIG5vdyAqLwotCQkvKiAubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLCAqLworCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV9jb21wLAogCQkJLnZtdXggPSAxLApAQCAtNDQ0MSw4ICs0NTEyLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS8qIG5vIERWQiBzdXBwb3J0IGZvciBub3cgKi8KLQkJLyogLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwgKi8KKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfY29tcCwKIAkJCS52bXV4ID0gMSwKQEAgLTQ2MTEsNyArNDY4MSw3IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKIAkJLnJhZGlvX3R5cGUgICAgID0gVFVORVJfVEVBNTc2NywKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gMHg2MCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHg4MDAwMDcwMCwKIAkJLmlucHV0cyA9IHsgewogCQkJLm5hbWUgICA9IG5hbWVfdHYsCkBAIC01NDA1LDYgKzU0NzUsMzYgQEAKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzA2LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzA3LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDgsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDksCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwYSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMywKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHgxNTNiLAogCQkuc3ViZGV2aWNlICAgID0gMHgxMTcyLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQSwKQEAgLTU4MjEsOCArNTkyMSw4IEBACiB9CiAKIAotc3RhdGljIGludCBzYWE3MTM0X3RkYTgyOTBfY2FsbGJhY2soc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJICAgIGludCBjb21tYW5kLCBpbnQgYXJnKQorc3RhdGljIGludCBzYWE3MTM0X3RkYTgyOTBfODI3eF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXU4IHN5bmNfY29udHJvbDsKIApAQCAtNTg0OCw2ICs1OTQ4LDY1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMzRfdGRhMTgyNzFfaHZyMTF4MF90b2dnbGVfYWdjKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkJICAgICAgZW51bSB0ZGExODI3MV9tb2RlIG1vZGUpCit7CisJLyogdG9nZ2xlIEFHQyBzd2l0Y2ggdGhyb3VnaCBHUElPIDI2ICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBUREExODI3MV9BTkFMT0c6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNiwgMCk7CisJCWJyZWFrOworCWNhc2UgVERBMTgyNzFfRElHSVRBTDoKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF8xODI3MV9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJICBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgVERBMTgyNzFfQ0FMTEJBQ0tfQ01EX0FHQ19FTkFCTEU6IC8qIDAgKi8KKwkJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwkJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCQlyZXQgPSBzYWE3MTM0X3RkYTE4MjcxX2h2cjExeDBfdG9nZ2xlX2FnYyhkZXYsIGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkgICAgaW50IGNvbW1hbmQsIGludCBhcmcpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJLyogdGRhODI5MCArIHRkYTE4MjcxICovCisJCXJldCA9IHNhYTcxMzRfdGRhODI5MF8xODI3MV9jYWxsYmFjayhkZXYsIGNvbW1hbmQsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHRkYTgyOTAgKyB0ZGE4Mjd4ICovCisJCXJldCA9IHNhYTcxMzRfdGRhODI5MF84Mjd4X2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKIGludCBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcHJpdjsKQEAgLTU4NzgsMTEgKzYwMzcsMTYgQEAKIAlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA2NzAxOTogLyogV2luVFYtSFZSMTExMCAoUmV0YWlsLCBJUiBCbGFzdGVyLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLwogCWNhc2UgNjcxMDk6IC8qIFdpblRWLUhWUjEwMDAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgYW5hbG9nLCBubyBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KKwljYXNlIDY3MjAxOiAvKiBXaW5UVi1IVlIxMTIwIChSZXRhaWwsIElSIFJlY2VpdmUsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCisJY2FzZSA2NzMwMTogLyogV2luVFYtSFZSMTAwMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBhbmFsb2csIG5vIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLworCWNhc2UgNjcyMDk6IC8qIFdpblRWLUhWUjExMTAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KIAljYXNlIDY3NTU5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCiAJY2FzZSA2NzU2OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSkgKi8KIAljYXNlIDY3NTc5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIG5vIEZNKSAqLwogCWNhc2UgNjc1ODk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAljYXNlIDY3NTk5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIG5vIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCisJY2FzZSA2NzY1MTogLyogV2luVFYtSFZSMTEyMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLworCWNhc2UgNjc2NTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdhcm5pbmc6ICIKQEAgLTYwMTksNiArNjE4MywxMSBAQAogCQltc2xlZXAoMTApOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVNfNTA2OgorCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDApOworCQltc2xlZXAoMTApOworCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDEpOworCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9JMkM7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEwMzoKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIzLCAwKTsKIAkJbXNsZWVwKDEwKTsKQEAgLTYwNTQsNiArNjIyMywxNiBAQAogCiAJCXNhYV93cml0ZWIgKFNBQTcxMzRfUFJPRFVDVElPTl9URVNUX01PREUsIDB4MDApOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCS8qIEdQSU8gMjYgaGlnaCBmb3IgZGlnaXRhbCwgbG93IGZvciBhbmFsb2cgKi8KKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAwKTsKKwkJbXNsZWVwKDEpOworCisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMiwgMCk7CisJCW1zbGVlcCgxMCk7CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMiwgMSk7CisJCWJyZWFrOwogCS8qIGkyYyByZW1vdGVzICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpOgpAQCAtNjA3OSwxNSArNjI1OCwxNSBAQAogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHg4YzA0MDAwNywgMHg4YzA0MDAwNyk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDBjMDAwN2NkLCAweDBjMDAwN2NkKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfSFlCUklEOgorCQlwcmludGsoIiVzOiAlczogaHlicmlkIGFuYWxvZy9kdmIgY2FyZFxuIgorCQkgICAgICAgIiVzOiBTb3JyeSwgb2YgdGhlIGFuYWxvZyBpbnB1dHMsIG9ubHkgYW5hbG9nIHMtdmlkZW8gYW5kIGNvbXBvc2l0ZSAiCisJCSAgICAgICAiYXJlIHN1cHBvcnRlZCBmb3Igbm93LlxuIiwKKwkJCWRldi0+bmFtZSwgY2FyZChkZXYpLm5hbWUsIGRldi0+bmFtZSk7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKIAkJLyogd3JpdGUgd2luZG93cyBncGlvIHZhbHVlcyAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHg4MDA0MDEwMCwgMHg4MDA0MDEwMCk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDgwMDQwMTAwLCAweDAwMDQwMTAwKTsKLQkJcHJpbnRrKCIlczogJXM6IGh5YnJpZCBhbmFsb2cvZHZiIGNhcmRcbiIKLQkJICAgICAgICIlczogU29ycnksIG9ubHkgYW5hbG9nIHMtdmlkZW8gYW5kIGNvbXBvc2l0ZSBpbnB1dCAiCi0JCSAgICAgICAiYXJlIHN1cHBvcnRlZCBmb3Igbm93LlxuIiwKLQkJCWRldi0+bmFtZSwgY2FyZChkZXYpLm5hbWUsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYxMDksNyArNjI4OCw3IEBACiAKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfUkFESU87CiAKLQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJCW1vZGVfbWFzayAmPSB+VF9SQURJTzsKIAl9CiAKQEAgLTYxMjEsNyArNjMwMCw3IEBACiAKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IG1vZGVfbWFzazsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAl9CiAKIAlpZiAoZGV2LT50ZGE5ODg3X2NvbmYpIHsKQEAgLTYxMzAsOCArNjMwOSw3IEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiA9ICZkZXYtPnRkYTk4ODdfY29uZjsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLAotCQkJCQkgJnRkYTk4ODdfY2ZnKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCX0KIAogCWlmIChkZXYtPnR1bmVyX3R5cGUgPT0gVFVORVJfWEMyMDI4KSB7CkBAIC02MTU4LDcgKzYzMzYsNyBAQAogCQl4YzIwMjhfY2ZnLnR1bmVyID0gVFVORVJfWEMyMDI4OwogCQl4YzIwMjhfY2ZnLnByaXYgID0gJmN0bDsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmeGMyMDI4X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnhjMjAyOF9jZmcpOwogCX0KIH0KIApAQCAtNjE2OCw5ICs2MzQ2LDIwIEBACiAJdW5zaWduZWQgY2hhciBidWY7CiAJaW50IGJvYXJkOwogCisJLyogUHV0IGhlcmUgdGhlIGNvZGUgdGhhdCBlbmFibGVzIHRoZSBjaGlwcyB0aGF0IGFyZSBuZWVkZWQKKwkgICBmb3IgYW5hbG9nIG1vZGUgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSB0dW5lciBhdHRhY2htZW50LgorCSAgIEl0IGlzIGFsc28gYSBnb29kIGlkZWEgdG8gZ2V0IHR1bmVyIHR5cGUgZnJvbSBlZXByb20sIGV0YyBiZWZvcmUKKwkgICBpbml0aWFsaXppbmcgdHVuZXIsIHNpbmNlIHdlIGNhbiBhdm9pZCBsb2FkaW5nIHR1bmVyIGRyaXZlcgorCSAgIG9uIGRldmljZXMgdGhhdCBoYXMgVFVORVJfQUJTRU5UCisJICovCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX05PVFVORVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX1RVTkVSOgorCQkvKiBDaGVja3MgaWYgdGhlIGRldmljZSBoYXMgYSB0dW5lciBhdCAweDYwIGFkZHIKKwkJICAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUgYSB0dW5lciwgVFVORVJfQUJTRU5UCisJCSAgIHdpbGwgYmUgdXNlZCBhdCB0dW5lcl90eXBlLCBhdm9pZGluZyBsb2FkaW5nIHR1bmVyCisJCSAgIHdpdGhvdXQgbmVlZGluZyBpdAorCQkgKi8KIAkJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweDYwOwogCQlib2FyZCA9IChpMmNfbWFzdGVyX3JlY3YoJmRldi0+aTJjX2NsaWVudCwgJmJ1ZiwgMCkgPCAwKQogCQkJPyBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX05PVFVORVIKQEAgLTYxODgsMTEgKzYzNzcsMTUgQEAKIAkJdTggc3ViYWRkcjsKIAkJdTggZGF0YVszXTsKIAkJaW50IHJldCwgdHVuZXJfdDsKLQogCQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHt7LmFkZHI9MHg1MCwgLmZsYWdzPTAsIC5idWY9JnN1YmFkZHIsIC5sZW4gPSAxfSwKIAkJCQkJey5hZGRyPTB4NTAsIC5mbGFncz1JMkNfTV9SRCwgLmJ1Zj1kYXRhLCAubGVuID0gM319OworCiAJCXN1YmFkZHI9IDB4MTQ7CiAJCXR1bmVyX3QgPSAwOworCisJCS8qIFJldHJpZXZlIGRldmljZSBkYXRhIGZyb20gZWVwcm9tLCBjaGVja2luZyBmb3IgdGhlCisJCSAgIHByb3BlciB0dW5lcl90eXBlLgorCQkgKi8KIAkJcmV0ID0gaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCBtc2csIDIpOwogCQlpZiAocmV0ICE9IDIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRUVQUk9NIHJlYWQgZmFpbHVyZVxuIik7CkBAIC02MjQ4LDEyICs2NDQxLDE0IEBACiAJCQkJZGV2LT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CisJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQ6CiAJewogCi0JCS8qIFRoZSBQaGlsaXBzIEVVUk9QQSBiYXNlZCBoeWJyaWQgYm9hcmRzIGhhdmUgdGhlIHR1bmVyIGNvbm5lY3RlZCB0aHJvdWdoCi0JCSAqIHRoZSBjaGFubmVsIGRlY29kZXIuIFdlIGhhdmUgdG8gbWFrZSBpdCB0cmFuc3BhcmVudCB0byBmaW5kIGl0CisJCS8qIFRoZSBQaGlsaXBzIEVVUk9QQSBiYXNlZCBoeWJyaWQgYm9hcmRzIGhhdmUgdGhlIHR1bmVyCisJCSAgIGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBjaGFubmVsIGRlY29kZXIuIFdlIGhhdmUgdG8gbWFrZSBpdAorCQkgICB0cmFuc3BhcmVudCB0byBmaW5kIGl0CiAJCSAqLwogCQl1OCBkYXRhW10gPSB7IDB4MDcsIDB4MDJ9OwogCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CkBAIC02Mjc0LDIxICs2NDY5LDE1IEBACiAJCWlmIChkZXYtPmJvYXJkID09IFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUl9TKSB7CiAJCQlkZXYtPnR1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX1REQTgyOTA7CiAKLQkJCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKLQogCQkJZGF0YVsyXSA9IDB4Njg7CiAJCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwotCi0JCQkvKiBUdW5lciBzZXR1cCBpcyBoYW5kbGVkIGJlZm9yZSBJMkMgdHJhbnNmZXIuCi0JCQkgICBEdWUgdG8gdGhhdCwgdGhlcmUncyBubyBuZWVkIHRvIGRvIGl0IGxhdGVyCi0JCQkgKi8KLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KIAkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKIAkJYnJlYWs7CiAJfQotICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RWRk03MTM1OgotICAgICAgIC8qIFRoZSBjYXJkIGJlbG93IGlzIGRldGVjdGVkIGFzIGNhcmQ9NTMsIGJ1dCBpcyBkaWZmZXJlbnQgKi8KKwljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19UVkZNNzEzNToKKwkvKiBUaGUgY2FyZCBiZWxvdyBpcyBkZXRlY3RlZCBhcyBjYXJkPTUzLCBidXQgaXMgZGlmZmVyZW50ICovCiAJICAgICAgIGlmIChkZXYtPmF1dG9kZXRlY3RlZCAmJiAoZGV2LT5lZWRhdGFbMHgyN10gPT0gMHgwMykpIHsKIAkJICAgICAgIGRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfQU5BTE9HOwogCQkgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFA3MTMxIGFuYWxvZyBvbmx5LCB1c2luZyAiCkBAIC02Mjk2LDYgKzY0ODUsMTAgQEAKIAkJICAgICAgIGRldi0+bmFtZSwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CiAJICAgICAgIH0KIAkgICAgICAgYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzOgorCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGErMHg4MCk7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKIAkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhKzB4ODApOwogCQkvKiBicmVhayBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKi8KQEAgLTYzNTEsMjIgKzY1NDQsNiBAQAogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX0hEVFZfUENJOgotCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKLQl7Ci0JCS8qIGVuYWJsZSB0dW5lciAqLwotCQlpbnQgaTsKLQkJc3RhdGljIGNvbnN0IHU4IGJ1ZmZlciBbXSA9IHsgMHgxMCwgMHgxMiwgMHgxMywgMHgwNCwgMHgxNiwKLQkJCQkJICAgICAgMHgwMCwgMHgxNCwgMHgwNCwgMHgxNywgMHgwMCB9OwotCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4MGE7Ci0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoJmRldi0+aTJjX2NsaWVudCwKLQkJCQkJCSAmYnVmZmVyW2kqMl0sIDIpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHR1bmVyKCVpKS5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgaSk7Ci0JCWJyZWFrOwotCX0KIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgogCQkvKiBUaGUgVDIwMCBhbmQgdGhlIFQyMDBBIHNoYXJlIHRoZSBzYW1lIHBjaSBpZC4gIENvbnNlcXVlbnRseSwKQEAgLTYzNzUsOSArNjU1Miw5IEBACiAKIAkJLyogRG9uJ3QgZG8gdGhpcyBpZiB0aGUgYm9hcmQgd2FzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aXRoIGFuCiAJCSAqIGluc21vZCBvcHRpb24gb3IgaWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIFQyMDAqLwotCQlpZighZGV2LT5hdXRvZGV0ZWN0ZWQgfHwgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4ZDApKQorCQlpZiAoIWRldi0+YXV0b2RldGVjdGVkIHx8IChkZXYtPmVlZGF0YVsweDQxXSA9PSAweGQwKSkKIAkJCWJyZWFrOwotCQlpZihkZXYtPmVlZGF0YVsweDQxXSA9PSAweDAyKSB7CisJCWlmIChkZXYtPmVlZGF0YVsweDQxXSA9PSAweDAyKSB7CiAJCQkvKiBSZWNvbmZpZ3VyZSBib2FyZCAgYXMgVDIwMEEgKi8KIAkJCWRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE7CiAJCQlkZXYtPnR1bmVyX3R5cGUgICA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX3R5cGU7CkBAIC02MzkwLDYgKzY1NjcsNTggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSToKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6CisJeworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwYSwgLmZsYWdzID0gMCB9OworCQlpbnQgaTsKKwkJc3RhdGljIHU4IGJ1ZmZlcltdWzJdID0geworCQkJeyAweDEwLCAweDEyIH0sCisJCQl7IDB4MTMsIDB4MDQgfSwKKwkJCXsgMHgxNiwgMHgwMCB9LAorCQkJeyAweDE0LCAweDA0IH0sCisJCQl7IDB4MTcsIDB4MDAgfSwKKwkJfTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZmZXIpOyBpKyspIHsKKwkJCW1zZy5idWYgPSAmYnVmZmVyW2ldWzBdOworCQkJbXNnLmxlbiA9IEFSUkFZX1NJWkUoYnVmZmVyWzBdKTsKKwkJCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKwkJfQorCQlicmVhazsKKwl9CisJfSAvKiBzd2l0Y2goKSAqLworCisJLyogaW5pdGlhbGl6ZSB0dW5lciAqLworCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKSB7CisJCWludCBoYXNfZGVtb2QgPSAoZGV2LT50ZGE5ODg3X2NvbmYgJiBUREE5ODg3X1BSRVNFTlQpOworCisJCS8qIE5vdGU6IHJhZGlvIHR1bmVyIGFkZHJlc3MgaXMgYWx3YXlzIGZpbGxlZCBpbiwKKwkJICAgc28gd2UgZG8gbm90IG5lZWQgdG8gcHJvYmUgZm9yIGEgcmFkaW8gdHVuZXIgZGV2aWNlLiAqLworCQlpZiAoZGV2LT5yYWRpb190eXBlICE9IFVOU0VUKQorCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnJhZGlvX2FkZHIpOworCQlpZiAoaGFzX2RlbW9kKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJaWYgKGRldi0+dHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB7CisJCQllbnVtIHY0bDJfaTJjX3R1bmVyX3R5cGUgdHlwZSA9CisJCQkJaGFzX2RlbW9kID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOworCisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CisJCX0gZWxzZSB7CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCX0KKwl9CisKKwlzYWE3MTM0X3R1bmVyX3NldHVwKGRldik7CisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX0NPTFVNQlVTX1RWRk06CiAJewogCQlzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgdGVhNTc2N19jZmc7CkBAIC02NDAxLDEyICs2NjMwLDEwIEBACiAJCWN0bC54dGFsX2ZyZXEgPSBURUE1NzY3X0hJR0hfTE9fMTNNSHo7CiAJCXRlYTU3NjdfY2ZnLnR1bmVyID0gVFVORVJfVEVBNTc2NzsKIAkJdGVhNTc2N19jZmcucHJpdiAgPSAmY3RsOwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmdGVhNTc2N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZWE1NzY3X2NmZyk7CiAJCWJyZWFrOwogCX0KIAl9IC8qIHN3aXRjaCgpICovCiAKLQlzYWE3MTM0X3R1bmVyX3NldHVwKGRldik7Ci0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCA5OTIyMWQ3Li5kYWZhMGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC01NCwxMyArNTQsOSBAQAogbW9kdWxlX3BhcmFtKGdwaW9fdHJhY2tpbmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGdwaW9fdHJhY2tpbmcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbZ3Bpb10iKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhbHNhOworc3RhdGljIHVuc2lnbmVkIGludCBhbHNhID0gMTsKIG1vZHVsZV9wYXJhbShhbHNhLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhbHNhLCJlbmFibGUgQUxTQSBETUEgc291bmQgW2RtYXNvdW5kXSIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG9zczsKLW1vZHVsZV9wYXJhbShvc3MsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9zcywiZW5hYmxlIE9TUyBETUEgc291bmQgW2RtYXNvdW5kXSIpOworTU9EVUxFX1BBUk1fREVTQyhhbHNhLCJlbmFibGUvZGlzYWJsZSBBTFNBIERNQSBzb3VuZCBbZG1hc291bmRdIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeSA9IFVOU0VUOwogbW9kdWxlX3BhcmFtKGxhdGVuY3ksIGludCwgMDQ0NCk7CkBAIC05MCw4ICs4NiwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyh0dW5lciwgICAgInR1bmVyIHR5cGUiKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2FyZCwgICAgICJjYXJkIHR5cGUiKTsKIAotc3RhdGljIERFRklORV9NVVRFWChkZXZsaXN0X2xvY2spOworREVGSU5FX01VVEVYKHNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogTElTVF9IRUFEKHNhYTcxMzRfZGV2bGlzdCk7CitFWFBPUlRfU1lNQk9MKHNhYTcxMzRfZGV2bGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKG1vcHNfbGlzdCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNhYTcxMzRfZGV2Y291bnQ7CiAKQEAgLTE1NiwxMCArMTU0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWVtcHJlc3MiKTsKIAlpZiAoY2FyZF9pc19kdmIoZGV2KSkKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZHZiIik7Ci0JaWYgKGFsc2EpCi0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWFsc2EiKTsKLQlpZiAob3NzKQotCQlyZXF1ZXN0X21vZHVsZSgic2FhNzEzNC1vc3MiKTsKKwlpZiAoYWxzYSkgeworCQlpZiAoZGV2LT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCkKKwkJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWFsc2EiKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcXVlc3Rfc3VibW9kdWxlcyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTc3OCw3ICs3NzYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAkqdmZkID0gKnRlbXBsYXRlOwogCXZmZC0+bWlub3IgICA9IC0xOwotCXZmZC0+cGFyZW50ICA9ICZkZXYtPnBjaS0+ZGV2OworCXZmZC0+djRsMl9kZXYgID0gJmRldi0+djRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmZkLT5kZWJ1ZyAgID0gdmlkZW9fZGVidWc7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLApAQCAtODUxLDYgKzg0OSwxMCBAQAogCWlmIChOVUxMID09IGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGNpX2Rldi0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMDsKKwogCS8qIHBjaSBpbml0ICovCiAJZGV2LT5wY2kgPSBwY2lfZGV2OwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgewpAQCAtOTI3LDYgKzkyOSw4IEBACiAJZGV2LT5hdXRvZGV0ZWN0ZWQgPSBjYXJkW2Rldi0+bnJdICE9IGRldi0+Ym9hcmQ7CiAJZGV2LT50dW5lcl90eXBlID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfdHlwZTsKIAlkZXYtPnR1bmVyX2FkZHIgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50dW5lcl9hZGRyOworCWRldi0+cmFkaW9fdHlwZSA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvX3R5cGU7CisJZGV2LT5yYWRpb19hZGRyID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmFkaW9fYWRkcjsKIAlkZXYtPnRkYTk4ODdfY29uZiA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnRkYTk4ODdfY29uZjsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbZGV2LT5ucl0pCiAJCWRldi0+dHVuZXJfdHlwZSA9IHR1bmVyW2Rldi0+bnJdOwpAQCAtOTcxLDIzICs5NzUsNDggQEAKIAkvKiB3YWl0IGEgYml0LCByZWdpc3RlciBpMmMgYnVzICovCiAJbXNsZWVwKDEwMCk7CiAJc2FhNzEzNF9pMmNfcmVnaXN0ZXIoZGV2KTsKLQotCS8qIGluaXRpYWxpemUgaGFyZHdhcmUgIzIgKi8KLQlpZiAoVFVORVJfQUJTRU5UICE9IGRldi0+dHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CiAJc2FhNzEzNF9ib2FyZF9pbml0MihkZXYpOwogCiAJc2FhNzEzNF9od2luaXQyKGRldik7CiAKIAkvKiBsb2FkIGkyYyBoZWxwZXJzICovCiAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJzYWE2NzUyaHMiKTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJzYWE2NzUyaHMiLCAic2FhNjc1MmhzIiwKKwkJCQlzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5lbXByZXNzX2FkZHIpOworCisJCWlmIChzZCkKKwkJCXNkLT5ncnBfaWQgPSBHUlBfRU1QUkVTUzsKKwl9CisKKwlpZiAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmRzX2FkZHIpIHsKKwkJdW5zaWduZWQgc2hvcnQgYWRkcnNbMl0gPSB7IDAsIEkyQ19DTElFTlRfRU5EIH07CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwkJYWRkcnNbMF0gPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcjsKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInNhYTY1ODgiLAorCQkJICAgICJzYWE2NTg4IiwgYWRkcnMpOworCQlpZiAoc2QpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUkRTIGRlY29kZXJcbiIsIGRldi0+bmFtZSk7CiAJfQogCiAJcmVxdWVzdF9zdWJtb2R1bGVzKGRldik7CiAKIAl2NGwyX3ByaW9faW5pdCgmZGV2LT5wcmlvKTsKIAorCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vcHMsICZtb3BzX2xpc3QsIG5leHQpCisJCW1wZWdfb3BzX2F0dGFjaChtb3BzLCBkZXYpOworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJnNhYTcxMzRfZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CisKKwkvKiBjaGVjayBmb3Igc2lnbmFsICovCisJc2FhNzEzNF9pcnFfdmlkZW9fc2lnbmFsY2hhbmdlKGRldik7CisKKwlpZiAoVFVORVJfQUJTRU5UICE9IGRldi0+dHVuZXJfdHlwZSkKKwkJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgc19zdGFuZGJ5LCAwKTsKKwogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA+IDApCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBPdmVybGF5IHN1cHBvcnQgZGlzYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTAyMywyNCArMTA1MiwxMCBAQAogCX0KIAogCS8qIGV2ZXJ5dGhpbmcgd29ya2VkICovCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsZGV2KTsKIAlzYWE3MTM0X2RldmNvdW50Kys7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKLQkJbXBlZ19vcHNfYXR0YWNoKG1vcHMsIGRldik7Ci0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZzYWE3MTM0X2Rldmxpc3QpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKLQotCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KLQlzYWE3MTM0X2lycV92aWRlb19zaWduYWxjaGFuZ2UoZGV2KTsKLQotCWlmIChzYWE3MTM0X2RtYXNvdW5kX2luaXQgJiYgIWRldi0+ZG1hc291bmQucHJpdl9kYXRhKSB7CisJaWYgKHNhYTcxMzRfZG1hc291bmRfaW5pdCAmJiAhZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpCiAJCXNhYTcxMzRfZG1hc291bmRfaW5pdChkZXYpOwotCX0KLQotCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTA1NSwxMyArMTA3MCwxNiBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwwKSk7CiAgZmFpbDE6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisgZmFpbDA6CiAJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2FhNzEzNF9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzYWE3MTM0X2RldiwgdjRsMl9kZXYpOwogCXN0cnVjdCBzYWE3MTM0X21wZWdfb3BzICptb3BzOwogCiAJLyogUmVsZWFzZSBETUEgc291bmQgbW9kdWxlcyBpZiBwcmVzZW50ICovCkBAIC0xMDg4LDExICsxMTA2LDExIEBACiAJc2FhNzEzNF9od2ZpbmkoZGV2KTsKIAogCS8qIHVucmVnaXN0ZXIgKi8KLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vcHMsICZtb3BzX2xpc3QsIG5leHQpCiAJCW1wZWdfb3BzX2RldGFjaChtb3BzLCBkZXYpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlzYWE3MTM0X2RldmNvdW50LS07CiAKIAlzYWE3MTM0X2kyY191bnJlZ2lzdGVyKGRldik7CkBAIC0xMTEzLDcgKzExMzEsOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwwKSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAogCS8qIGZyZWUgbWVtb3J5ICovCiAJa2ZyZWUoZGV2KTsKQEAgLTExNDgsOCArMTE2Nyw4IEBACiAKIHN0YXRpYyBpbnQgc2FhNzEzNF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ICwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCi0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxMzRfZGV2LCB2NGwyX2Rldik7CiAKIAkvKiBkaXNhYmxlIG92ZXJsYXkgLSBhcHBzIHNob3VsZCBlbmFibGUgaXQgZXhwbGljaXRseSBvbiByZXN1bWUqLwogCWRldi0+b3ZlbmFibGUgPSAwOwpAQCAtMTE4NSw3ICsxMjA0LDggQEAKIAogc3RhdGljIGludCBzYWE3MTM0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIHY0bDJfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwpAQCAtMTI0NywxMSArMTI2NywxMSBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzYWE3MTM0X2Rldmxpc3QsIGRldmxpc3QpCiAJCW1wZWdfb3BzX2F0dGFjaChvcHMsIGRldik7CiAJbGlzdF9hZGRfdGFpbCgmb3BzLT5uZXh0LCZtb3BzX2xpc3QpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI1OSwxMSArMTI3OSwxMSBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJbGlzdF9kZWwoJm9wcy0+bmV4dCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzYWE3MTM0X2Rldmxpc3QsIGRldmxpc3QpCiAJCW1wZWdfb3BzX2RldGFjaChvcHMsIGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfdHNfcmVnaXN0ZXIpOwpAQCAtMTMwNyw4ICsxMzI3LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9zZXRfZ3Bpbyk7Ci1FWFBPUlRfU1lNQk9MKHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyk7Ci1FWFBPUlRfU1lNQk9MKHNhYTcxMzRfZGV2bGlzdCk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfYm9hcmRzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0gZm9yIHRoZSBETUEgc291bmQgbW9kdWxlcyAtLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggYjUzNzBiMy4uNGVmZjFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTQ4LDkgKzQ4LDE1IEBACiAjaW5jbHVkZSAiaXNsNjQwNS5oIgogI2luY2x1ZGUgImxuYnAyMS5oIgogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgorI2luY2x1ZGUgInRkYTE4MjcxLmgiCisjaW5jbHVkZSAibGdkdDMzMDUuaCIKKyNpbmNsdWRlICJ0ZGE4MjkwLmgiCiAKICNpbmNsdWRlICJ6bDEwMzUzLmgiCiAKKyNpbmNsdWRlICJ6bDEwMDM2LmgiCisjaW5jbHVkZSAibXQzMTIuaCIKKwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xODksNyArMTk1LDcgQEAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldixWSURJT0NfU19GUkVRVUVOQ1ksJmYpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJmYpOwogCW1zZy5idWYgPSBvbjsKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwpAQCAtOTUwLDYgKzk1Niw0NSBAQAogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IG10MzEyX2NvbmZpZyBhdmVydHZfYTcwMF9tdDMxMiA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCisJLnZvbHRhZ2VfaW52ZXJ0ZWQgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCB6bDEwMDM2X2NvbmZpZyBhdmVydHZfYTcwMF90dW5lciA9IHsKKwkudHVuZXJfYWRkcmVzcyA9IDB4NjAsCit9OworCitzdGF0aWMgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyBoY3dfbGdkdDMzMDVfY29uZmlnID0geworCS5pMmNfYWRkciAgICAgICAgICAgPSAweDBlLAorCS5tcGVnX21vZGUgICAgICAgICAgPSBMR0RUMzMwNV9NUEVHX1NFUklBTCwKKwkudHBjbGtfZWRnZSAgICAgICAgID0gTEdEVDMzMDVfVFBDTEtfUklTSU5HX0VER0UsCisJLnRwdmFsaWRfcG9sYXJpdHkgICA9IExHRFQzMzA1X1RQX1ZBTElEX0hJR0gsCisJLmRlbnlfaTJjX3JwdHIgICAgICA9IDEsCisJLnNwZWN0cmFsX2ludmVyc2lvbiA9IDEsCisJLnFhbV9pZl9raHogICAgICAgICA9IDQwMDAsCisJLnZzYl9pZl9raHogICAgICAgICA9IDMyNTAsCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXAgaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAgPSB7CisJLmF0c2NfNiAgID0geyAuaWZfZnJlcSA9IDMyNTAsIC5hZ2NfbW9kZSA9IDMsIC5zdGQgPSA0LAorCQkgICAgICAuaWZfbHZsID0gMSwgLnJmYWdjX3RvcCA9IDB4NTgsIH0sCisJLnFhbV82ICAgID0geyAuaWZfZnJlcSA9IDQwMDAsIC5hZ2NfbW9kZSA9IDMsIC5zdGQgPSA1LAorCQkgICAgICAuaWZfbHZsID0gMSwgLnJmYWdjX3RvcCA9IDB4NTgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoY3dfdGRhMTgyNzFfY29uZmlnID0geworCS5zdGRfbWFwID0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAorCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLmNvbmZpZyAgPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGE4Mjl4X2NvbmZpZyB0ZGE4Mjl4X25vX3Byb2JlID0geworCS5wcm9iZV90dW5lciA9IFREQTgyOVhfRE9OVF9QUk9CRSwKK307CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29yZSBjb2RlCiAgKi8KQEAgLTEwNzYsNiArMTEyMSwxOSBAQAogCQkJCQkgJnRkYTgyN3hfY2ZnXzEpIDwgMCkKIAkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMDVfYXR0YWNoLAorCQkJCQkgICAgICAgJmhjd19sZ2R0MzMwNV9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NGIsCisJCQkJICAgJnRkYTgyOXhfbm9fcHJvYmUpOworCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSAgIDB4NjAsICZkZXYtPmkyY19hZGFwLAorCQkJCSAgICZoY3dfdGRhMTgyNzFfY29uZmlnKTsKKwkJfQorCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMOgogCQlpZiAoY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmYXN1c19wNzEzMV9kdWFsX2NvbmZpZywKIAkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCkBAIC0xMzc2LDYgKzE0MzQsMTkgQEAKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTcwMF9QUk86CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX0hZQlJJRDoKKwkJLyogWmFybGluayBaTDEwMzEzICovCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDMxMl9hdHRhY2gsCisJCQkmYXZlcnR2X2E3MDBfbXQzMTIsICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh6bDEwMDM2X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZhdmVydHZfYTcwMF90dW5lciwgJmRldi0+aTJjX2FkYXApID09IE5VTEwpIHsKKwkJCQl3cHJpbnRrKCIlczogTm8gemwxMDAzNiBmb3VuZCFcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CkBAIC0xNDQ5LDcgKzE1MjAsNyBAQAogCQl0ZGE5ODg3X2NmZy5wcml2ICA9ICZvbjsKIAogCQkvKiBvdGhlcndpc2Ugd2UgZG9uJ3QgZGV0ZWN0IHRoZSB0dW5lciBvbiBuZXh0IGluc21vZCAqLwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfSBlbHNlIGlmIChkZXYtPmJvYXJkID09IFNBQTcxMzRfQk9BUkRfTUVESU9OX01EODgwMF9RVUFEUk8pIHsKIAkJaWYgKChkZXYtPmVlZGF0YVsyXSA9PSAweDA3KSAmJiB1c2VfZnJvbnRlbmQpIHsKIAkJCS8qIHR1cm4gb2ZmIHRoZSAybmQgbG5iIHN1cHBseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IGM5ZDhiZWIuLjlkYjM0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJYnJlYWs7CiAJfQogCXRzX3Jlc2V0X2VuY29kZXIoZGV2KTsKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0lOSVQsICZsZWFkaW5nX251bGxfYnl0ZXMpOworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGluaXQsIGxlYWRpbmdfbnVsbF9ieXRlcyk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMjM0LDcgKzIzNCw3IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19GTVQsIGYpOworCXNhYV9jYWxsX2FsbChkZXYsIHZpZGVvLCBnX2ZtdCwgZik7CiAKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gVFNfUEFDS0VUX1NJWkUgKiBkZXYtPnRzLm5yX3BhY2tldHM7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0ZNVCwgZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKIAogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBUU19QQUNLRVRfU0laRSAqIGRldi0+dHMubnJfcGFja2V0czsKQEAgLTMxNyw3ICszMTcsNyBAQAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19FWFRfQ1RSTFMsIGN0cmxzKTsKKwllcnIgPSBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgc19leHRfY3RybHMsIGN0cmxzKTsKIAl0c19pbml0X2VuY29kZXIoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19HX0VYVF9DVFJMUywgY3RybHMpOworCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19leHRfY3RybHMsIGN0cmxzKTsKIH0KIAogc3RhdGljIGludCBlbXByZXNzX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTM1Miw2ICszNTIsNyBAQAogc3RhdGljIGludCBlbXByZXNzX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjKQogeworCS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIAlzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAkJVjRMMl9DSURfVVNFUl9DTEFTUywKIAkJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTM2NCw2ICszNjUsNyBAQAogCQkwCiAJfTsKIAorCS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIAlzdGF0aWMgY29uc3QgdTMyIG1wZWdfY3RybHNbXSA9IHsKIAkJVjRMMl9DSURfTVBFR19DTEFTUywKIAkJVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSwKQEAgLTM4OCwxMCArMzkwLDEwIEBACiAJaWYgKGMtPmlkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9VU0VSX0NMQVNTIHx8IGMtPmlkID09IFY0TDJfQ0lEX01QRUdfQ0xBU1MpCi0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjLCAwLCAwLCAwLCAwKTsKIAlpZiAoVjRMMl9DVFJMX0lEMkNMQVNTKGMtPmlkKSAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIHNhYTcxMzRfcXVlcnljdHJsKGZpbGUsIHByaXYsIGMpOwotCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfUVVFUllDVFJMLCBjKTsKKwlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIHF1ZXJ5Y3RybCwgYyk7CiB9CiAKIHN0YXRpYyBpbnQgZW1wcmVzc19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC00MDEsNyArNDAzLDcgQEAKIAogCWlmIChWNEwyX0NUUkxfSUQyQ0xBU1MoYy0+aWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1FVRVJZTUVOVSwgYyk7CisJcmV0dXJuIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBxdWVyeW1lbnUsIGMpOwogfQogCiBzdGF0aWMgaW50IGVtcHJlc3NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTQxMSwxNCArNDEzLDExIEBACiAKIAljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKIAljaGlwLT5yZXZpc2lvbiA9IDA7Ci0JaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChjaGlwLT5tYXRjaC50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSICYmCiAJICAgICFzdHJjbXAoY2hpcC0+bWF0Y2gubmFtZSwgInNhYTY3NTJocyIpKQotCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0RCR19HX0NISVBfSURFTlQsIGNoaXApOwotCWlmIChjaGlwLT5tYXRjaC50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAmJgotCSAgICBjaGlwLT5tYXRjaC5hZGRyID09IGRldi0+bXBlZ19pMmNfY2xpZW50LT5hZGRyKQotCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0RCR19HX0NISVBfSURFTlQsIGNoaXApOworCQlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CisJaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQorCQlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKaW5kZXggMjBjMWIzMy4uZjNlMjg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKIAkJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpCiAJCQkJYWRkciB8PSAxOwotCQkJaWYgKGkgPiAwICYmIG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJaWYgKGkgPiAwICYmIG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCAmJiBtc2dzW2ldLmFkZHIgIT0gMHg0MCkgewogCQkJCS8qIHdvcmthcm91bmQgZm9yIGEgc2FhNzEzNCBpMmMgYnVnCiAJCQkJICogbmVlZGVkIHRvIHRhbGsgdG8gdGhlIG10MzUyIGRlbXV4CiAJCQkJICogdGhhbmtzIHRvIHBpbm5hY2xlIGZvciB0aGUgaGludCAqLwpAQCAtMzI3LDggKzMyNyw2IEBACiAKIAlkMXByaW50ayggIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAogCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQlpZiAoY2xpZW50LT5hZGRyID09IDB4MjAgJiYgY2xpZW50LT5kcml2ZXIgJiYgY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCWRldi0+bXBlZ19pMmNfY2xpZW50ID0gY2xpZW50OwogCiAJLyogQW0gSSBhbiBpMmMgcmVtb3RlIGNvbnRyb2w/ICovCiAKQEAgLTM1Nyw3ICszNTUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNhYTcxMzRfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5jbGFzcyAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKIAkubmFtZSAgICAgICAgICA9ICJzYWE3MTM0IiwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19TQUE3MTM0LAogCS5hbGdvICAgICAgICAgID0gJnNhYTcxMzRfYWxnbywKQEAgLTQyMSwyOSArNDE4LDEzIEBACiAJfQogfQogCi12b2lkIHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlCVUdfT04oTlVMTCA9PSBkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSk7Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCi1pbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBkZXYtPm1wZWdfaTJjX2NsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGRldi0+bXBlZ19pMmNfY2xpZW50LAotCQkJCQkJCQljbWQsIGFyZyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIpOwotCiBpbnQgc2FhNzEzNF9pMmNfcmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJZGV2LT5pMmNfYWRhcCA9IHNhYTcxMzRfYWRhcF90ZW1wbGF0ZTsKIAlkZXYtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKIAlzdHJjcHkoZGV2LT5pMmNfYWRhcC5uYW1lLGRldi0+bmFtZSk7CiAJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7CisJaTJjX3NldF9hZGFwZGF0YSgmZGV2LT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKIAlkZXYtPmkyY19jbGllbnQgPSBzYWE3MTM0X2NsaWVudF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCmluZGV4IGVmNTVhNTkuLmNjOGI5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwpAQCAtNzksOCArNzksMTkgQEAKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDApOwogCiAJCS8qIFN0YXJ0IFRTIHN0cmVhbSAqLwotCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhFQyk7CisJCXN3aXRjaCAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfdHlwZSkgeworCQljYXNlIFNBQTcxMzRfTVBFR19UU19QQVJBTExFTDoKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJCQlicmVhazsKKwkJY2FzZSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMOgorCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDAsIDB4ZDgpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTF9TRVJJQUwsIDB4YmMpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDIpOworCQkJYnJlYWs7CisJCX0KKwogCQlkZXYtPnRzX3N0YXRlID0gU0FBNzEzNF9UU19TVEFSVEVEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggYTFmN2UzNS4uNDA0ZjcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0zMCwxMSArMzAsNyBAQAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2VuZGlmCisjaW5jbHVkZSA8bWVkaWEvcmRzLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC00NTIsNiArNDQ4LDcgQEAKIAkJLm5hbWUgICAgICAgICAgPSAieSBvZmZzZXQgb2RkIGZpZWxkIiwKIAkJLm1pbmltdW0gICAgICAgPSAwLAogCQkubWF4aW11bSAgICAgICA9IDEyOCwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LHsKQEAgLTQ1OSw2ICs0NTYsNyBAQAogCQkubmFtZSAgICAgICAgICA9ICJ5IG9mZnNldCBldmVuIGZpZWxkIiwKIAkJLm1pbmltdW0gICAgICAgPSAwLAogCQkubWF4aW11bSAgICAgICA9IDEyOCwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LHsKQEAgLTYyNywxMCArNjI1LDEwIEBACiAJc2FhNzEzNF9zZXRfZGVjb2RlcihkZXYpOwogCiAJaWYgKGNhcmRfaW4oZGV2LCBkZXYtPmN0bF9pbnB1dCkudHYpCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX1NURCwgJmRldi0+dHZub3JtLT5pZCk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3N0ZCwgZGV2LT50dm5vcm0tPmlkKTsKIAkvKiBTZXQgdGhlIGNvcnJlY3Qgbm9ybSBmb3IgdGhlIHNhYTY3NTJocy4gVGhpcyBmdW5jdGlvbgogCSAgIGRvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyBzYWE2NzUyaHMuICovCi0Jc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1NfU1RELCAmZGV2LT50dm5vcm0tPmlkKTsKKwlzYWFfY2FsbF9lbXByZXNzKGRldiwgdHVuZXIsIHNfc3RkLCBkZXYtPnR2bm9ybS0+aWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaF9wcmVzY2FsZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IHRhc2ssIGludCBwcmVzY2FsZSkKQEAgLTEyNjYsOCArMTI2NCw3IEBACiAJCQllbHNlCiAJCQkJZGV2LT50ZGE5ODg3X2NvbmYgJj0gflREQTk4ODdfQVVUT01VVEU7CiAKLQkJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsCi0JCQkJCQkgJnRkYTk4ODdfY2ZnKTsKKwkJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMzM0LDcgKzEzMzEsNyBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWludCByYWRpbyA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkgewogCQlpZiAoZGV2LT52aWRlb19kZXYgJiYgKGRldi0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikpCiAJCQlnb3RvIGZvdW5kOwpAQCAtMTM0NywxOSArMTM0NCwyMCBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJcmV0dXJuIC1FTk9ERVY7Ci0gZm91bmQ6CisKK2ZvdW5kOgorCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCiAJZHByaW50aygib3BlbiBtaW5vcj0lZCByYWRpbz0lZCB0eXBlPSVzXG4iLG1pbm9yLHJhZGlvLAogCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmIChOVUxMID09IGZoKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAJZmgtPnJhZGlvICAgID0gcmFkaW87CkBAIC0xMzg3LDEyICsxMzg1LDExIEBACiAJaWYgKGZoLT5yYWRpbykgewogCQkvKiBzd2l0Y2ggdG8gcmFkaW8gbW9kZSAqLwogCQlzYWE3MTM0X3R2YXVkaW9fc2V0aW5wdXQoZGV2LCZjYXJkKGRldikucmFkaW8pOwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LEFVRENfU0VUX1JBRElPLCBOVUxMKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfcmFkaW8pOwogCX0gZWxzZSB7CiAJCS8qIHN3aXRjaCB0byB2aWRlby92YmkgbW9kZSAqLwogCQl2aWRlb19tdXgoZGV2LGRldi0+Y3RsX2lucHV0KTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDY2LDYgKzE0NjMsNyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiB0dXJuIG9mZiBvdmVybGF5ICovCkBAIC0xNDk4LDcgKzE0OTYsOSBAQAogCXNhYV9hbmRvcmIoU0FBNzEzNF9PRk1UX0RBVEFfQSwgMHgxZiwgMCk7CiAJc2FhX2FuZG9yYihTQUE3MTM0X09GTVRfREFUQV9CLCAweDFmLCAwKTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0YW5kYnksIDApOworCWlmIChmaC0+cmFkaW8pCisJCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKIAogCS8qIGZyZWUgc3R1ZmYgKi8KIAl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT5jYXApOwpAQCAtMTUxOSw2ICsxNTE5LDM3IEBACiAJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKHNhYTcxMzRfcXVldWUoZmgpLCB2bWEpOwogfQogCitzdGF0aWMgc3NpemVfdCByYWRpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CisKKwljbWQuYmxvY2tfY291bnQgPSBjb3VudC8zOworCWNtZC5idWZmZXIgPSBkYXRhOworCWNtZC5pbnN0YW5jZSA9IGZpbGU7CisJY21kLnJlc3VsdCA9IC1FTk9ERVY7CisKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9SRUFELCAmY21kKTsKKworCXJldHVybiBjbWQucmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJhZGlvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCisJY21kLmluc3RhbmNlID0gZmlsZTsKKwljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CisJY21kLnJlc3VsdCA9IC1FTk9ERVY7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfUE9MTCwgJmNtZCk7CisKKwlyZXR1cm4gY21kLnJlc3VsdDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc2FhNzEzNF90cnlfZ2V0X3NldF9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTIwNDEsNyArMjA3Miw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPmN0bF9mcmVxID0gZi0+ZnJlcXVlbmN5OwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCiAJc2FhNzEzNF90dmF1ZGlvX2RvX3NjYW4oZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CkBAIC0yMjk5LDcgKzIzMzAsNyBAQAogCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKIAl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7CiAJaWYgKGRldi0+aW5wdXQtPmFtdXggPT0gVFYpIHsKIAkJdC0+c2lnbmFsID0gMHhmODAwIC0gKChzYWFfcmVhZGIoMHg1ODEpICYgMHgxZikgPDwgMTEpOwogCQl0LT5yeHN1YmNoYW5zID0gKHNhYV9yZWFkYigweDUyOSkgJiAweDA4KSA/CkBAIC0yMzE2LDcgKzIzNDcsNyBAQAogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX1RVTkVSLCB0KTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDMsOCArMjQ3NCwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyByYWRpb19mb3BzID0gewogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JICA9IHZpZGVvX29wZW4sCisJLnJlYWQgICAgID0gcmFkaW9fcmVhZCwKIAkucmVsZWFzZSAgPSB2aWRlb19yZWxlYXNlLAogCS5pb2N0bAkgID0gdmlkZW9faW9jdGwyLAorCS5wb2xsICAgICA9IHJhZGlvX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHJhZGlvX2lvY3RsX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDE0ZWUyNjUuLmEyZGQzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KQEAgLTI3Nyw2ICsyNzgsOCBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVIgICAgICAgICAxNTIKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9LV09STERfUExVU19UVl9BTkFMT0cgMTUzCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTV9QTFVTIDE1NAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwICAgICAxNTUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzICAgMTU2CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtMzA5LDYgKzMxMiwxMSBAQAogCVNBQTcxMzRfTVBFR19EVkIsCiB9OwogCitlbnVtIHNhYTcxMzRfbXBlZ190c190eXBlIHsKKwlTQUE3MTM0X01QRUdfVFNfUEFSQUxMRUwgPSAwLAorCVNBQTcxMzRfTVBFR19UU19TRVJJQUwsCit9OworCiBzdHJ1Y3Qgc2FhNzEzNF9ib2FyZCB7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgYXVkaW9fY2xvY2s7CkBAIC0zMjQsNiArMzMyLDggQEAKIAl1bnNpZ25lZCBpbnQJCXJhZGlvX3R5cGU7CiAJdW5zaWduZWQgY2hhcgkJdHVuZXJfYWRkcjsKIAl1bnNpZ25lZCBjaGFyCQlyYWRpb19hZGRyOworCXVuc2lnbmVkIGNoYXIJCWVtcHJlc3NfYWRkcjsKKwl1bnNpZ25lZCBjaGFyCQlyZHNfYWRkcjsKIAogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHRkYTk4ODdfY29uZjsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICB0dW5lcl9jb25maWc7CkBAIC0zMzEsNiArMzQxLDcgQEAKIAkvKiBwZXJpcGhlcmFsIEkvTyAqLwogCWVudW0gc2FhNzEzNF92aWRlb19vdXQgIHZpZGVvX291dDsKIAllbnVtIHNhYTcxMzRfbXBlZ190eXBlICBtcGVnOworCWVudW0gc2FhNzEzNF9tcGVnX3RzX3R5cGUgdHNfdHlwZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICB2aWRfcG9ydF9vcHRzOwogfTsKIApAQCAtNDQ1LDcgKzQ1Niw2IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgYnVmc2l6ZTsKIAlzdHJ1Y3Qgc2FhNzEzNF9wZ3RhYmxlICAgICBwdDsKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICAgICBkbWE7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgd3E7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgZG1hX2JsazsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX29mZnNldDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX2NvdW50OwpAQCAtNDgyLDYgKzQ5Miw3IEBACiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKIAlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICAgICBwcmlvOworCXN0cnVjdCB2NGwyX2RldmljZSAgICAgICAgIHY0bDJfZGV2OwogCS8qIHdvcmtzdHJ1Y3QgZm9yIGxvYWRpbmcgbW9kdWxlcyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X21vZHVsZV93azsKIApAQCAtNTcyLDcgKzU4Myw2IEBACiAJZW51bSBzYWE3MTM0X3RzX3N0YXR1cyAJICAgdHNfc3RhdGU7CiAJdW5zaWduZWQgaW50IAkJICAgYnVmZl9jbnQ7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgICAgKm1vcHM7Ci0Jc3RydWN0IGkyY19jbGllbnQgCSAgICptcGVnX2kyY19jbGllbnQ7CiAKIAkvKiBTQUE3MTM0X01QRUdfRU1QUkVTUyBvbmx5ICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAgICAgICAgKmVtcHJlc3NfZGV2OwpAQCAtNTg4LDYgKzU5OCw3IEBACiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CiAjZW5kaWYKKwl2b2lkICgqZ2F0ZV9jdHJsKShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IG9wZW4pOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYxNiwxMCArNjI3LDMxIEBACiAJCVY0TDJfU1REX05UU0MgICB8IFY0TDJfU1REX1BBTF9NIHwgXAogCQlWNEwyX1NURF9QQUxfNjApCiAKKyNkZWZpbmUgR1JQX0VNUFJFU1MgKDEpCisjZGVmaW5lIHNhYV9jYWxsX2FsbChkZXYsIG8sIGYsIGFyZ3MuLi4pIGRvIHsJCQkJXAorCWlmIChkZXYtPmdhdGVfY3RybCkJCQkJCQlcCisJCWRldi0+Z2F0ZV9jdHJsKGRldiwgMSk7CQkJCQlcCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJihkZXYpLT52NGwyX2RldiwgMCwgbywgZiAsICMjYXJncyk7CVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDApOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzYWFfY2FsbF9lbXByZXNzKGRldiwgbywgZiwgYXJncy4uLikgKHsJCQkJXAorCWxvbmcgX3JjOwkJCQkJCQlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAxKTsJCQkJCVwKKwlfcmMgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmKGRldiktPnY0bDJfZGV2LAkJXAorCQkJCQkgR1JQX0VNUFJFU1MsIG8sIGYgLCAjI2FyZ3MpOwlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAwKTsJCQkJCVwKKwlfcmM7CQkJCQkJCQlcCit9KQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc2FhNzEzNC1jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgIHNhYTcxMzRfZGV2bGlzdDsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggc2FhNzEzNF9kZXZsaXN0X2xvY2s7CiBleHRlcm4gaW50IHNhYTcxMzRfbm9fb3ZlcmxheTsKIAogdm9pZCBzYWE3MTM0X3RyYWNrX2dwaW8oc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIGNoYXIgKm1zZyk7CkBAIC02NjgsMTAgKzcwMCw2IEBACiAKIGludCBzYWE3MTM0X2kyY19yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CiBpbnQgc2FhNzEzNF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci12b2lkIHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaAppbmRleCAyODMwYjVlLi45ZmFkYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaApAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLQogI2lmbmRlZiBPX05PTkNBUAogI2RlZmluZSBPX05PTkNBUAlPX1RSVU5DCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKaW5kZXggODhjNWU5NC4uMjViZjIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI3IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CisJCWlmIChjdHJsLT52YWx1ZSA8IC0xMjggfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKIAkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KQEAgLTEzODAsMTEgKzEzODAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxN3hfY29yZV9vcHMgPSB7CkBAIC0xNTI4LDEwICsxNTIzLDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxN3giLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTdYLAotCS5jb21tYW5kID0gc2FhNzE3eF9jb21tYW5kLAogCS5wcm9iZSA9IHNhYTcxN3hfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTcxN3hfcmVtb3ZlLAotCS5sZWdhY3lfY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HIHwgSTJDX0NMQVNTX1RWX0RJR0lUQUwsCiAJLmlkX3RhYmxlID0gc2FhNzE3eF9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCmluZGV4IDZkZWJiNjUuLjc1NzQ3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCkBAIC0zMCw1MiArMzAsNTggQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTg1IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMTI4XTsKIAotCWludCBub3JtOwotCWludCBlbmFibGU7Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTg1ICp0b19zYWE3MTg1KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxODUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgc2FhNzE4NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTg1X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogfQogCi1zdGF0aWMgaW50IHNhYTcxODVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4IHNldCB0byAlMDJ4XG4iLCByZWcsIHZhbHVlKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlMDJ4IHNldCB0byAlMDJ4XG4iLCByZWcsIHZhbHVlKTsKIAllbmNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE4NV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTgzLDcgKzg5LDYgQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCQl1OCBibG9ja19kYXRhWzMyXTsKIAkJaW50IGJsb2NrX2xlbjsKIApAQCAtMTA0LDcgKzEwOSw3IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzE4NV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlyZXQgPSBzYWE3MTg1X3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKQEAgLTIxMywxMzMgKzIxOCwxMDYgQEAKIAkweDY2LCAweDIxLAkJLyogRlNDMyAqLwogfTsKIAotc3RhdGljIGludCBzYWE3MTg1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCisKK3N0YXRpYyBpbnQgc2FhNzE4NV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKKwlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwllbHNlCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTg1X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKQorCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwllbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzE4NV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIFNBNzExMQorCSByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSAwOgotCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQlzd2l0Y2ggKGVuY29kZXItPm5vcm0pIHsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlicmVhazsKLQkJfQorCQkvKiB0dXJuIG9mZiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDBmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMSAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2ZSwgMHgwMSk7CiAJCWJyZWFrOwogCi0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9Ci0JCSAgICBWSURFT19FTkNPREVSX1BBTCB8IFZJREVPX0VOQ09ERVJfTlRTQyB8Ci0JCSAgICBWSURFT19FTkNPREVSX1NFQ0FNIHwgVklERU9fRU5DT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDE7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7CisJY2FzZSAxOgorCQkvKiB0dXJuIG9mZiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDBmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDAwKTsKKwkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAwKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8vc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKKwljYXNlIDI6CisJCS8qIHR1cm4gb24gY29sb3JiYXIgKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHgzYSwgMHg4Zik7CisJCS8qIFN3aXRjaCBSVENFIHRvIDAgKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2MSwgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4ZjcpIHwgMHgwOCk7CisJCS8qIFNXOiBhIHNsaWdodCBzeW5jIHByb2JsZW0uLi4gKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2ZSwgMHgwMSk7CiAJCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogUko6ICppYXJnID0gMDogaW5wdXQgaXMgZnJvbSBTQTcxMTEKLQkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwICovCi0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIDA6Ci0JCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCi0JCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKLQkJCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDZlLCAweDAxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCS8qIFN3aXRjaCBSVENFIHRvIDAgKi8KLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDApOwotCQkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NmUsIDB4MDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJICAgICAgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4YmYpIHwKLQkJCSAgICAgIChlbmNvZGVyLT5lbmFibGUgPyAweDAwIDogMHg0MCkpOwotCQlicmVhazsKLQl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE3MTg1X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxODUsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxODVfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxODVfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gc2FhNzE4NV9pbml0LAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzYWE3MTg1X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gc2FhNzE4NV9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IHNhYTcxODVfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzE4NV9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzE4NV9jb3JlX29wcywKKwkudmlkZW8gPSAmc2FhNzE4NV92aWRlb19vcHMsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc2FhNzE4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC0zNTEsMjggKzMyOSwyOSBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE4NSksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzE4NV9vcHMpOwogCi0JaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAlpZiAoaSA+PSAwKQotCQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yICVkXG4iLCBpKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBlcnJvciAlZFxuIiwgaSk7CiAJZWxzZQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAweCV4XG4iLAotCQkJCXNhYTcxODVfcmVhZChjbGllbnQpID4+IDUpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJyZXZpc2lvbiAweCV4XG4iLAorCQkJCXNhYTcxODVfcmVhZChzZCkgPj4gNSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNzE4NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCi0Jc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLwotCS8vc2FhNzE4NV93cml0ZShjbGllbnQsIDB4M2EsIChlbmNvZGVyLT5yZWdbMHgzYV0pIHwgMHg4MCk7IC8qIFNXOiBjb2xvciBiYXIgKi8KLQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwkvKiBTVzogb3V0cHV0IG9mZiBpcyBhY3RpdmUgKi8KKwlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdKSB8IDB4NDApOwogCWtmcmVlKGVuY29kZXIpOwogCXJldHVybiAwOwogfQpAQCAtMzg3LDggKzM2Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE3MTg1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCi0JLmNvbW1hbmQgPSBzYWE3MTg1X2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzE4NV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzE4NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzE4NV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKaW5kZXggYjQwMThjYy4uM2Y1MjNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKQEAgLTE5LDkgKzE5LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiAjaW5jbHVkZSAic2FhNzE5MS5oIgogCkBAIC0zMiw2ICszNCw3IEBACiBNT0RVTEVfQVVUSE9SKCJNaWthZWwgTm91c2lhaW5lbiA8dG1ub3VzaWFAY2MuaHV0LmZpPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKIC8vICNkZWZpbmUgU0FBNzE5MV9ERUJVRwogCiAjaWZkZWYgU0FBNzE5MV9ERUJVRwpAQCAtNDQsMTcgKzQ3LDIwIEBACiAjZGVmaW5lIFNBQTcxOTFfU1lOQ19ERUxBWQkxMDAJLyogbWlsbGlzZWNvbmRzICovCiAKIHN0cnVjdCBzYWE3MTkxIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAogCS8qIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlIGFzIHRoZSBhY3R1YWwKIAkgKiBJMkMtcmVnaXN0ZXJzIGFyZSB3cml0ZS1vbmx5ICovCiAJdTggcmVnWzI1XTsKIAogCWludCBpbnB1dDsKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzE5MTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxOTEgKnRvX3NhYTcxOTEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzE5MSwgc2QpOworfQogCiBzdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewogCTAsCS8qIFN1YmFkZHJlc3MgKi8KQEAgLTEwMCwxNSArMTA2LDE0IEBACiAKIC8qIFNBQTcxOTEgcmVnaXN0ZXIgaGFuZGxpbmcgKi8KIAotc3RhdGljIHU4IHNhYTcxOTFfcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgIHU4IHJlZykKK3N0YXRpYyB1OCBzYWE3MTkxX3JlYWRfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKLQlyZXR1cm4gKChzdHJ1Y3Qgc2FhNzE5MSAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+cmVnW3JlZ107CisJcmV0dXJuIHRvX3NhYTcxOTEoc2QpLT5yZWdbcmVnXTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3JlYWRfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgdTggKnZhbHVlKQorc3RhdGljIGludCBzYWE3MTkxX3JlYWRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4ICp2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IHJldDsKIAogCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHZhbHVlLCAxKTsKQEAgLTEyMSwyMSArMTI2LDIzIEBACiB9CiAKIAotc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsCi0JCQkgICAgIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCSgoc3RydWN0IHNhYTcxOTEgKilpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPnJlZ1tyZWddID0gdmFsdWU7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJdG9fc2FhNzE5MShzZCktPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAogLyogdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBtdXN0IGJlIHRoZSBmaXJzdCBzdWJhZGRyZXNzIG51bWJlciAocmVnaXN0ZXIpICovCi1zdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgc2FhNzE5MV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJICAgICAgIHU4IGxlbmd0aCwgY29uc3QgdTggKmRhdGEpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CiAJaW50IGk7CiAJaW50IHJldDsKIAotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gKHN0cnVjdCBzYWE3MTkxICopaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJZm9yIChpID0gMDsgaSA8IChsZW5ndGggLSAxKTsgaSsrKSB7CiAJCWRlY29kZXItPnJlZ1tkYXRhWzBdICsgaV0gPSBkYXRhW2kgKyAxXTsKIAl9CkBAIC0xNTIsMTQgKzE1OSwxNSBAQAogCiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfaW5wdXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGlucHV0KQorc3RhdGljIGludCBzYWE3MTkxX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCWNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggbHVtYSA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQl1OCBpb2NrID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0lPQ0spOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CisJdTggbHVtYSA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCXU4IGlvY2sgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19JT0NLKTsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoIChpbnB1dCkgeworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSBTQUE3MTkxX0lOUFVUX0NPTVBPU0lURTogLyogU2V0IENvbXBvc2l0ZSBpbnB1dCAqLwogCQlpb2NrICY9IH4oU0FBNzE5MV9JT0NLX0NIUlMgfCBTQUE3MTkxX0lPQ0tfR1BTVzEKIAkJCSAgfCBTQUE3MTkxX0lPQ0tfR1BTVzIpOwpAQCAtMTc1LDU0ICsxODMsNTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BLCBsdW1hKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSwgbHVtYSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19JT0NLLCBpb2NrKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfSU9DSywgaW9jayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87CiAKLQlkZWNvZGVyLT5pbnB1dCA9IGlucHV0OworCWRlY29kZXItPmlucHV0ID0gcm91dGUtPmlucHV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbm9ybSkKK3N0YXRpYyBpbnQgc2FhNzE5MV9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBub3JtKQogewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19TVERDKTsKLQl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOwotCXU4IGNoY3YgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ0hDVik7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKKwl1OCBzdGRjID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfU1REQyk7CisJdTggY3RsMyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOworCXU4IGNoY3YgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DSENWKTsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoKG5vcm0pIHsKLQljYXNlIFNBQTcxOTFfTk9STV9QQUw6CisJaWYgKG5vcm0gJiBWNEwyX1NURF9QQUwpIHsKIAkJc3RkYyAmPSB+U0FBNzE5MV9TVERDX1NFQ1M7CiAJCWN0bDMgJj0gfihTQUE3MTkxX0NUTDNfQVVGRCB8IFNBQTcxOTFfQ1RMM19GU0VMKTsKIAkJY2hjdiA9IFNBQTcxOTFfQ0hDVl9QQUw7Ci0JCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQykgewogCQlzdGRjICY9IH5TQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+U0FBNzE5MV9DVEwzX0FVRkQ7CiAJCWN0bDMgfD0gU0FBNzE5MV9DVEwzX0ZTRUw7CiAJCWNoY3YgPSBTQUE3MTkxX0NIQ1ZfTlRTQzsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX05PUk1fU0VDQU06CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pIHsKIAkJc3RkYyB8PSBTQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEIHwgU0FBNzE5MV9DVEwzX0ZTRUwpOwogCQljaGN2ID0gU0FBNzE5MV9DSENWX1BBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCBzdGRjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NIQ1YsIGNoY3YpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DSENWLCBjaGN2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjMwLDE5ICsyMzQsMTkgQEAKIAogCWRwcmludGsoImN0bDM6ICUwMnggc3RkYzogJTAyeCBjaGN2OiAlMDJ4XG4iLCBjdGwzLAogCQlzdGRjLCBjaGN2KTsKLQlkcHJpbnRrKCJub3JtOiAlZFxuIiwgbm9ybSk7CisJZHByaW50aygibm9ybTogJWxseFxuIiwgbm9ybSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqc3RhdHVzKQorc3RhdGljIGludCBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCAqc3RhdHVzKQogewogCWludCBpID0gMDsKIAogCWRwcmludGsoIkNoZWNraW5nIGZvciBzaWduYWwuLi5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFNBQTcxOTFfU1lOQ19DT1VOVDsgaSsrKSB7Ci0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgc3RhdHVzKSkKKwkJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsIHN0YXR1cykpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlpZiAoKCgqc3RhdHVzKSAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApIHsKQEAgLTI1OCwzMSArMjYyLDM0IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybV9leHRlbmRlZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTkxX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpub3JtKQogewotCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7Ci0JdTggY3RsMyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzKTsKKwlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOworCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKKwl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7CiAJdTggc3RhdHVzOworCXY0bDJfc3RkX2lkIG9sZF9ub3JtID0gZGVjb2Rlci0+bm9ybTsKIAlpbnQgZXJyID0gMDsKIAogCWRwcmludGsoIlNBQTcxOTEgZXh0ZW5kZWQgc2lnbmFsIGF1dG8tZGV0ZWN0aW9uLi4uXG4iKTsKIAorCSpub3JtID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOwogCXN0ZGMgJj0gflNBQTcxOTFfU1REQ19TRUNTOwogCWN0bDMgJj0gfihTQUE3MTkxX0NUTDNfRlNFTCk7CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCBzdGRjKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCWN0bDMgfD0gU0FBNzE5MV9DVEwzX0FVRkQ7Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CiAJaWYgKGVycikgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTI5MCw1MyArMjk3LDU0IEBACiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpIHsKIAkJLyogNjBIeiBzaWduYWwgLT4gTlRTQyAqLwogCQlkcHJpbnRrKCI2MEh6IHNpZ25hbDogTlRTQ1xuIik7Ci0JCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX05UU0MpOworCQkqbm9ybSA9IFY0TDJfU1REX05UU0M7CisJCXJldHVybiAwOwogCX0KIAogCS8qIDUwSHogc2lnbmFsICovCiAJZHByaW50aygiNTBIeiBzaWduYWw6IFRyeWluZyBQQUwuLi5cbiIpOwogCiAJLyogdHJ5IFBBTCBmaXJzdCAqLwotCWVyciA9IHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fUEFMKTsKKwllcnIgPSBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9QQUwpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7CiAKLQllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChjbGllbnQsICZzdGF0dXMpOworCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHNkLCAmc3RhdHVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCS8qIG5vdCA1MEh6ID8gKi8KIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQlkcHJpbnRrKCJObyA1MEh6IHNpZ25hbFxuIik7Ci0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OworCQlzYWE3MTkxX3Nfc3RkKHNkLCBvbGRfbm9ybSk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSB7CiAJCWRwcmludGsoIlBBTFxuIik7Ci0JCXJldHVybiAwOworCQkqbm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKIAl9CiAKIAlkcHJpbnRrKCJObyBjb2xvciBkZXRlY3RlZCB3aXRoIFBBTCAtIFRyeWluZyBTRUNBTS4uLlxuIik7CiAKIAkvKiBubyBjb2xvciBkZXRlY3RlZCA/IC0+IHRyeSBTRUNBTSAqLwotCWVyciA9IHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LAotCQkJICAgICAgIFNBQTcxOTFfTk9STV9TRUNBTSk7CisJZXJyID0gc2FhNzE5MV9zX3N0ZChzZCwgVjRMMl9TVERfU0VDQU0pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7CiAKLQllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChjbGllbnQsICZzdGF0dXMpOworCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHNkLCAmc3RhdHVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMzUwLDMyICszNTgsMTcgQEAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkgewogCQkvKiBDb2xvciBkZXRlY3RlZCAtPiBTRUNBTSAqLwogCQlkcHJpbnRrKCJTRUNBTVxuIik7Ci0JCXJldHVybiAwOworCQkqbm9ybSA9IFY0TDJfU1REX1NFQ0FNOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogCX0KIAogCWRwcmludGsoIk5vIGNvbG9yIGRldGVjdGVkIHdpdGggU0VDQU0gLSBHb2luZyBiYWNrIHRvIFBBTC5cbiIpOwogCi0JLyogc3RpbGwgbm8gY29sb3IgZGV0ZWN0ZWQgPwotCSAqIC0+IHNldCBub3JtIGJhY2sgdG8gUEFMICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsCi0JCQkgICAgICAgU0FBNzE5MV9OT1JNX1BBTCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KIG91dDoKLQljdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOwotCWlmIChjdGwzICYgU0FBNzE5MV9DVEwzX0FVRkQpIHsKLQkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEKTsKLQkJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKLQkJaWYgKGVycikgewotCQkJZXJyID0gLUVJTzsKLQkJfQotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXU4IHN0YXR1czsKIApAQCAtMzgzLDcgKzM3Niw3IEBACiAKIAlkcHJpbnRrKCJSZWFkaW5nIHN0YXR1cy4uLlxuIik7CiAKLQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXMpKQorCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKHNkLCAmc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlkcHJpbnRrKCJDaGVja2luZyBmb3Igc2lnbmFsLi4uXG4iKTsKQEAgLTM5OSwyNiArMzkyLDI1IEBACiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpIHsKIAkJLyogNjBoeiBzaWduYWwgLT4gTlRTQyAqLwogCQlkcHJpbnRrKCJOVFNDXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7CisJCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKIAl9IGVsc2UgewogCQkvKiA1MGh6IHNpZ25hbCAtPiBQQUwgKi8KIAkJZHByaW50aygiUEFMXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fUEFMKTsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1BBTCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBzYWE3MTkxX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKIAotCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUzoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQ6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfTFVNQSk7Ci0JCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BKTsKKwkJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUzoKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9MVU1BX0JQU1NfTUFTSykKIAkJCQk+PiBTQUE3MTkxX0xVTUFfQlBTU19TSElGVDsKQEAgLTQzNSwxNSArNDI3LDE1IEBACiAJCWJyZWFrOwogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUjoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTjoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0dBSU4pOwotCQlpZiAoY3RybC0+dHlwZSA9PSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSKQorCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOKTsKKwkJaWYgKGN0cmwtPmlkID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpCiAJCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfR0FJTl9DT0xPKSA/IDEgOiAwOwogCQllbHNlCiAJCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfR0FJTl9MRklTX01BU0spCiAJCQkJPj4gU0FBNzE5MV9HQUlOX0xGSVNfU0hJRlQ7CiAJCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0hVRToKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19IVUVDKTsKIAkJaWYgKHJlZyA8IDB4ODApCiAJCQlyZWcgKz0gMHg4MDsKIAkJZWxzZQpAQCAtNDUxLDE4ICs0NDMsMTggQEAKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVlRSQzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX1NURENfVlRSQykgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWToKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX0NUTDNfWURFTF9NQVNLKQogCQkJPj4gU0FBNzE5MV9DVEwzX1lERUxfU0hJRlQ7CiAJCWlmIChjdHJsLT52YWx1ZSA+PSA0KQogCQkJY3RybC0+dmFsdWUgLT0gODsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVk5SOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0spCiAJCQk+PiBTQUE3MTkxX0NUTDRfVk5PSV9TSElGVDsKIAkJYnJlYWs7CkBAIC00NzMsMTggKzQ2NSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxOTFfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7CisJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQkJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCQkJcmVnICY9IH5TQUE3MTkxX0xVTUFfQlBTU19NQVNLOwogCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0xVTUFfQlBTU19TSElGVCkKQEAgLTUwMSwxMiArNDkyLDEyIEBACiAJCQkJJiBTQUE3MTkxX0xVTUFfQ09SSV9NQVNLOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTik7Ci0JCWlmIChjdHJsLT50eXBlID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpIHsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfR0FJTik7CisJCWlmIChjdHJsLT5pZCA9PSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSKSB7CiAJCQlpZiAoY3RybC0+dmFsdWUpCiAJCQkJcmVnIHw9IFNBQTcxOTFfR0FJTl9DT0xPOwogCQkJZWxzZQpAQCAtNTE2LDQxICs1MDcsNDEgQEAKIAkJCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9HQUlOX0xGSVNfU0hJRlQpCiAJCQkJJiBTQUE3MTkxX0dBSU5fTEZJU19NQVNLOwogCQl9Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTiwgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0dBSU4sIHJlZyk7CiAJCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0hVRToKKwljYXNlIFY0TDJfQ0lEX0hVRToKIAkJcmVnID0gY3RybC0+dmFsdWUgJiAweGZmOwogCQlpZiAocmVnIDwgMHg4MCkKIAkJCXJlZyArPSAweDgwOwogCQllbHNlCiAJCQlyZWcgLT0gMHg4MDsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19IVUVDLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfSFVFQywgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVlRSQzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKIAkJaWYgKGN0cmwtPnZhbHVlKQogCQkJcmVnIHw9IFNBQTcxOTFfU1REQ19WVFJDOwogCQllbHNlCiAJCQlyZWcgJj0gflNBQTcxOTFfU1REQ19WVFJDOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZOiB7CiAJCXMzMiB2YWx1ZSA9IGN0cmwtPnZhbHVlOwogCQlpZiAodmFsdWUgPCAwKQogCQkJdmFsdWUgKz0gODsKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAkJcmVnICY9IH5TQUE3MTkxX0NUTDNfWURFTF9NQVNLOwogCQlyZWcgfD0gKHZhbHVlIDw8IFNBQTcxOTFfQ1RMM19ZREVMX1NISUZUKQogCQkJJiBTQUE3MTkxX0NUTDNfWURFTF9NQVNLOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCByZWcpOwogCQlicmVhazsKIAl9CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVk5SOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwogCQlyZWcgJj0gflNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7CiAJCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9DVEw0X1ZOT0lfU0hJRlQpCiAJCQkmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCwgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQsIHJlZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC01NjEsMjQ3ICs1NTIsMTA4IEBACiAKIC8qIEkyQy1pbnRlcmZhY2UgKi8KIAotc3RhdGljIGludCBzYWE3MTkxX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgc2FhNzE5MV9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwl1OCBzdGF0dXNfcmVnOworCWludCByZXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKworCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKHNkLCAmc3RhdHVzX3JlZykpCisJCXJldHVybiAtRUlPOworCWlmICgoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApCisJCXJlcyA9IDA7CisJaWYgKCEoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpKQorCQlyZXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKKwkqc3RhdHVzID0gcmVzOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2FhNzE5MV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE3MTkxLCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTkxX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE3MTkxX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gc2FhNzE5MV9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTcxOTFfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNzE5MV90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNzE5MV9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxOTFfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBzYWE3MTkxX3Nfcm91dGluZywKKwkucXVlcnlzdGQgPSBzYWE3MTkxX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxOTFfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTkxX29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTkxX2NvcmVfb3BzLAorCS52aWRlbyA9ICZzYWE3MTkxX3ZpZGVvX29wcywKKwkudHVuZXIgPSAmc2FhNzE5MV90dW5lcl9vcHMsCit9OworCitzdGF0aWMgaW50IHNhYTcxOTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCXByaW50ayhLRVJOX0lORk8gIlBoaWxpcHMgU0FBNzE5MSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgU0FBNzE5MV9NT0RVTEVfVkVSU0lPTik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2YoKmRlY29kZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlY29kZXIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9jbGllbnQ7Ci0JfQorCWlmICghZGVjb2RlcikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQljbGllbnQtPmFkZHIgPSBhZGRyOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTkxOwotCWNsaWVudC0+ZmxhZ3MgPSAwOwotCXN0cmNweShjbGllbnQtPm5hbWUsICJzYWE3MTkxIGNsaWVudCIpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTkxX29wcyk7CiAKLQlkZWNvZGVyLT5jbGllbnQgPSBjbGllbnQ7Ci0KLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfZGVjb2RlcjsKLQotCWVyciA9IHNhYTcxOTFfd3JpdGVfYmxvY2soY2xpZW50LCBzaXplb2YoaW5pdHNlcSksIGluaXRzZXEpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfYmxvY2soc2QsIHNpemVvZihpbml0c2VxKSwgaW5pdHNlcSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIlNBQTcxOTEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoZGVjb2Rlcik7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU0FBNzE5MSBpbml0aWFsaXplZFxuIik7CiAKIAlkZWNvZGVyLT5pbnB1dCA9IFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFOwotCWRlY29kZXItPm5vcm0gPSBTQUE3MTkxX05PUk1fUEFMOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAKLQllcnIgPSBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShjbGllbnQpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRUJVU1kpKSB7CisJZXJyID0gc2FhNzE5MV9hdXRvZGV0ZWN0X25vcm0oc2QpOworCWlmIChlcnIgJiYgKGVyciAhPSAtRUJVU1kpKQogCQlwcmludGsoS0VSTl9FUlIgIlNBQTcxOTE6IFNpZ25hbCBhdXRvLWRldGVjdGlvbiBmYWlsZWRcbiIpOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfZGV0YWNoX2NsaWVudDoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotb3V0X2ZyZWVfZGVjb2RlcjoKLQlrZnJlZShkZWNvZGVyKTsKLW91dF9mcmVlX2NsaWVudDoKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JLyogQWx3YXlzIGNvbm5lY3RlZCB0byBWSU5PICovCi0JaWYgKGFkYXAtPmlkID09IEkyQ19IV19TR0lfVklOTykKLQkJcmV0dXJuIHNhYTcxOTFfYXR0YWNoKGFkYXAsIFNBQTcxOTFfQUREUiwgMCk7Ci0JLyogRmVlbCBmcmVlIHRvIGFkZCBwcm9iZSBoZXJlIDotKSAqLwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTkxX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzogewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyAgPSBWSURFT19ERUNPREVSX1BBTCB8IFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwgVklERU9fREVDT0RFUl9BVVRPOwotCQljYXAtPmlucHV0cyA9IChjbGllbnQtPmFkYXB0ZXItPmlkID09IEkyQ19IV19TR0lfVklOTykgPyAyIDogMTsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJdTggc3RhdHVzOwotCQlpbnQgcmVzID0gMDsKLQotCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXMpKSB7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZiAoKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKLQkJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFNBQTcxOTFfTk9STV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBTQUE3MTkxX05PUk1fUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPOgotCQlkZWZhdWx0OgotCQkJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQllbHNlCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9OT1JNOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOwotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX05UU0MpOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9TRUNBTSk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoJewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJc3dpdGNoIChjbGllbnQtPmFkYXB0ZXItPmlkKSB7Ci0JCWNhc2UgSTJDX0hXX1NHSV9WSU5POgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X2lucHV0KGNsaWVudCwgKmlhcmcpOwotCQlkZWZhdWx0OgotCQkJaWYgKCppYXJnICE9IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6IHsKLQkJLyogQWx3YXlzIGVuYWJsZWQgKi8KLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRTogewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCQl1bnNpZ25lZCB2YWw7Ci0JCWludCBlcnI7Ci0KLQkJdmFsID0gKHBpYy0+aHVlID4+IDgpIC0gMHg4MDsKLQotCQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMsIHZhbCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgKnN0YXR1cyA9IGFyZzsKLQkJdTggc3RhdHVzX3JlZzsKLQotCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXNfcmVnKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCXN0YXR1cy0+c2lnbmFsID0gKChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKLQkJCT8gMSA6IDA7Ci0JCXN0YXR1cy0+c2lnbmFsXzYwaHogPSAoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpCi0JCQk/IDEgOiAwOwotCQlzdGF0dXMtPmNvbG9yID0gKHN0YXR1c19yZWcgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSA/IDEgOiAwOwotCi0JCXN0YXR1cy0+aW5wdXQgPSBkZWNvZGVyLT5pbnB1dDsKLQkJc3RhdHVzLT5ub3JtID0gZGVjb2Rlci0+bm9ybTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfU0VUX05PUk06IHsKLQkJaW50ICpub3JtID0gYXJnOwotCi0JCXN3aXRjaCAoKm5vcm0pIHsKLQkJY2FzZSBTQUE3MTkxX05PUk1fQVVUTzoKLQkJCXJldHVybiBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShjbGllbnQpOwotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPX0VYVDoKLQkJCXJldHVybiBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybV9leHRlbmRlZChjbGllbnQpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCAqbm9ybSk7Ci0JCX0KLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfR0VUX0NPTlRST0w6IHsKLQkJcmV0dXJuIHNhYTcxOTFfZ2V0X2NvbnRyb2woY2xpZW50LCBhcmcpOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTDogewotCQlyZXR1cm4gc2FhNzE5MV9zZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTkxID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lIAk9ICJzYWE3MTkxIiwKLQl9LAotCS5pZAkJPSBJMkNfRFJJVkVSSURfU0FBNzE5MSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTkxX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50CT0gc2FhNzE5MV9kZXRhY2gsCi0JLmNvbW1hbmQJPSBzYWE3MTkxX2NvbW1hbmQKK3N0YXRpYyBpbnQgc2FhNzE5MV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc2FhNzE5MShzZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzE5MV9pZFtdID0geworCXsgInNhYTcxOTEiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxOTFfaWQpOwogCi1zdGF0aWMgaW50IHNhYTcxOTFfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTkxKTsKLX0KLQotc3RhdGljIHZvaWQgc2FhNzE5MV9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzE5MSk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxOTFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTkxX2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxOTEiLAorCS5wcm9iZSA9IHNhYTcxOTFfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxOTFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxOTFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaAppbmRleCBhMjMxMGRhLi44MDNjNzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaApAQCAtMTc2LDExICsxNzYsOSBAQAogI2RlZmluZSBTQUE3MTkxX0lOUFVUX0NPTVBPU0lURQkwCiAjZGVmaW5lIFNBQTcxOTFfSU5QVVRfU1ZJREVPCTEKIAotI2RlZmluZSBTQUE3MTkxX05PUk1fQVVUTwkwCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9QQUwJMQogI2RlZmluZSBTQUE3MTkxX05PUk1fTlRTQwkyCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9TRUNBTQkzCi0jZGVmaW5lIFNBQTcxOTFfTk9STV9BVVRPX0VYVAk0CS8qIGV4dGVuZGVkIGF1dG8tZGV0ZWN0aW9uICovCiAKIHN0cnVjdCBzYWE3MTkxX3N0YXR1cyB7CiAJLyogMD1ubyBzaWduYWwsIDE9c2lnbmFsIGRldGVjdGVkICovCkBAIC0yMzIsMjQgKzIzMCwxNiBAQAogI2RlZmluZSBTQUE3MTkxX1ZOUl9NQVgJCQkweDAzCiAjZGVmaW5lIFNBQTcxOTFfVk5SX0RFRkFVTFQJCTB4MDAKIAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MJMAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUCTEKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0NPUklORwkJMgotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSCTMJLyogYm9vbGVhbiAqLwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU4JNAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfSFVFCQk1Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WVFJDCQk2CS8qIGJvb2xlYW4gKi8KLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVkJNwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVk5SCQk4Ci0KLXN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgewotCXU4IHR5cGU7Ci0JczMyIHZhbHVlOwotfTsKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMikKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUgkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMykKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0KQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVlRSQwkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDUpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA2KQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVk5SCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNykKIAogI2RlZmluZQlERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUwlfSU9SKCdkJywgMTk1LCBzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMpCiAjZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9TRVRfTk9STQlfSU9XKCdkJywgMTk2LCBpbnQpCi0jZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9HRVRfQ09OVFJPTAlfSU9SKCdkJywgMTk3LCBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sKQotI2RlZmluZQlERUNPREVSX1NBQTcxOTFfU0VUX0NPTlRST0wJX0lPVygnZCcsIDE5OCwgc3RydWN0IHNhYTcxOTFfY29udHJvbCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggZGRjYjgxZC4uYjVlMzdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtOTQsMTMgKzk0LDM3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgY2FwdHVyZTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICphY3RpdmU7Ci0JaW50IGlzX2ludGVybGFjZTsKKwlpbnQgaXNfaW50ZXJsYWNlZDsKIAogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gKnBkYXRhOwogCiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbWVyYV9mbXQ7CiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWtlX2J1c19wYXJhbShzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IFNPQ0FNX01BU1RFUiB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAocGNkZXYtPnBkYXRhLT5mbGFncyAmIFNIX0NFVV9GTEFHX1VTRV84QklUX0JVUykKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisKKwlpZiAocGNkZXYtPnBkYXRhLT5mbGFncyAmIFNIX0NFVV9GTEFHX1VTRV8xNkJJVF9CVVMpCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNjsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLKQorCQlyZXR1cm4gZmxhZ3M7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2V1X3dyaXRlKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcHJpdiwKIAkJICAgICAgdW5zaWduZWQgbG9uZyByZWdfb2ZmcywgdTMyIGRhdGEpCiB7CkBAIC0xNTAsNiArMTc0LDcgQEAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCUJVRygpOwogCisJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLCAwLCAwKTsKIAl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsICZidWYtPnZiKTsKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZyZWVkXG4iLCBfX2Z1bmNfXyk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CkBAIC0xODEsNyArMjA2LDcgQEAKIAogCXBoeXNfYWRkcl90b3AgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHBjZGV2LT5hY3RpdmUpOwogCWNldV93cml0ZShwY2RldiwgQ0RBWVIsIHBoeXNfYWRkcl90b3ApOwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7CiAJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT53aWR0aDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREJZUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJfQpAQCAtMTkzLDcgKzIxOCw3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKIAkJcGh5c19hZGRyX3RvcCArPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQ7CiAJCWNldV93cml0ZShwY2RldiwgQ0RBQ1IsIHBoeXNfYWRkcl90b3ApOwotCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZSkgeworCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT53aWR0aDsKIAkJCWNldV93cml0ZShwY2RldiwgQ0RCQ1IsIHBoeXNfYWRkcl9ib3R0b20pOwogCQl9CkBAIC0zOTYsNyArNDIxLDcgQEAKIAogCWNhbWVyYV9mbGFncyA9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0oaWNkKTsKIAljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywKLQkJCQkJCSAgICAgICBwY2Rldi0+cGRhdGEtPmZsYWdzKTsKKwkJCQkJCSAgICAgICBtYWtlX2J1c19wYXJhbShwY2RldikpOwogCWlmICghY29tbW9uX2ZsYWdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDU3LDcgKzQ4Miw3IEBACiAJY2V1X3dyaXRlKHBjZGV2LCBDQU1DUiwgdmFsdWUpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBDUiwgMHgwMDMwMDAwMCk7Ci0JY2V1X3dyaXRlKHBjZGV2LCBDQUlGUiwgKHBjZGV2LT5pc19pbnRlcmxhY2UpID8gMHgxMDEgOiAwKTsKKwljZXVfd3JpdGUocGNkZXYsIENBSUZSLCBwY2Rldi0+aXNfaW50ZXJsYWNlZCA/IDB4MTAxIDogMCk7CiAKIAltZGVsYXkoMSk7CiAKQEAgLTQ3Myw3ICs0OTgsNyBAQAogCX0KIAogCWhlaWdodCA9IGljZC0+aGVpZ2h0OwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7CiAJCWhlaWdodCAvPSAyOwogCQljZHdkcl93aWR0aCAqPSAyOwogCX0KQEAgLTUxNyw3ICs1NDIsNyBAQAogCiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAotCQkJCQkJICAgICAgIHBjZGV2LT5wZGF0YS0+ZmxhZ3MpOworCQkJCQkJICAgICAgIG1ha2VfYnVzX3BhcmFtKHBjZGV2KSk7CiAJaWYgKCFjb21tb25fZmxhZ3MpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01NjIsMTEgKzU4NywyOSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIAorCS8qIEJlZ2lubmluZyBvZiBhIHBhc3MgKi8KKwlpZiAoIWlkeCkKKwkJaWNkLT5ob3N0X3ByaXYgPSBOVUxMOworCiAJc3dpdGNoIChpY2QtPmZvcm1hdHNbaWR4XS5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCWNhc2UgVjRMMl9QSVhfRk1UX1ZZVVk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgorCQlpZiAoaWNkLT5ob3N0X3ByaXYpCisJCQlnb3RvIGFkZF9zaW5nbGVfZm9ybWF0OworCisJCS8qCisJCSAqIE91ciBjYXNlIGlzIHNpbXBsZSBzbyBmYXI6IGZvciBhbnkgb2YgdGhlIGFib3ZlIGZvdXIgY2FtZXJhCisJCSAqIGZvcm1hdHMgd2UgYWRkIGFsbCBvdXIgZm91ciBzeW50aGVzaXplZCBOViogZm9ybWF0cywgc28sCisJCSAqIGp1c3QgbWFya2luZyB0aGUgZGV2aWNlIHdpdGggYSBzaW5nbGUgZmxhZyBzdWZmaWNlcy4gSWYKKwkJICogdGhlIGZvcm1hdCBnZW5lcmF0aW9uIHJ1bGVzIGFyZSBtb3JlIGNvbXBsZXgsIHlvdSB3b3VsZCBoYXZlCisJCSAqIHRvIGFjdHVhbGx5IGhhbmcgeW91ciBhbHJlYWR5IGFkZGVkIC8gY291bnRlZCBmb3JtYXRzIG9udG8KKwkJICogdGhlIGhvc3RfcHJpdiBwb2ludGVyIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBmb3JtYXQgeW91J3JlCisJCSAqIGdvaW5nIHRvIGFkZCBub3cgaXMgYWxyZWFkeSB0aGVyZS4KKwkJICovCisJCWljZC0+aG9zdF9wcml2ID0gKHZvaWQgKilzaF9tb2JpbGVfY2V1X2Zvcm1hdHM7CisKIAkJbiA9IEFSUkFZX1NJWkUoc2hfbW9iaWxlX2NldV9mb3JtYXRzKTsKIAkJZm9ybWF0cyArPSBuOwogCQlmb3IgKGsgPSAwOyB4bGF0ZSAmJiBrIDwgbjsgaysrKSB7CkBAIC01NzksNiArNjIyLDcgQEAKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQogCWRlZmF1bHQ6CithZGRfc2luZ2xlX2Zvcm1hdDoKIAkJLyogR2VuZXJpYyBwYXNzLXRocm91Z2ggKi8KIAkJZm9ybWF0cysrOwogCQlpZiAoeGxhdGUpIHsKQEAgLTU5NSwyNCArNjM5LDMwIEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlfX3UzMiBwaXhmbXQgPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CiAJaW50IHJldDsKIAotCWlmICghcGl4Zm10KQotCQlyZXR1cm4gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBwaXhmbXQsIHJlY3QpOwotCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewogCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHhsYXRlLT5jYW1fZm10LT5mb3VyY2MsIHJlY3QpOworCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOworCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKIAogCWlmICghcmV0KSB7CiAJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CkBAIC02NjIsMTMgKzcxMiwxMyBAQAogCiAJc3dpdGNoIChmLT5mbXQucGl4LmZpZWxkKSB7CiAJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2UgPSAxOworCQlwY2Rldi0+aXNfaW50ZXJsYWNlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9GSUVMRF9BTlk6CiAJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwogCWNhc2UgVjRMMl9GSUVMRF9OT05FOgotCQlwY2Rldi0+aXNfaW50ZXJsYWNlID0gMDsKKwkJcGNkZXYtPmlzX2ludGVybGFjZWQgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNzM0LDcgKzc4NCw4IEBACiAJCQkJICAgICAgICZzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX29wcywKIAkJCQkgICAgICAgJmljaS0+ZGV2LCAmcGNkZXYtPmxvY2ssCiAJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCQkgICAgICAgVjRMMl9GSUVMRF9BTlksCisJCQkJICAgICAgIHBjZGV2LT5pc19pbnRlcmxhY2VkID8KKwkJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIDogVjRMMl9GSUVMRF9OT05FLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyKSwKIAkJCQkgICAgICAgaWNkKTsKIH0KQEAgLTc0NCw2ICs3OTUsNyBAQAogCS5hZGQJCT0gc2hfbW9iaWxlX2NldV9hZGRfZGV2aWNlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2NldV9yZW1vdmVfZGV2aWNlLAogCS5nZXRfZm9ybWF0cwk9IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMsCisJLnNldF9jcm9wCT0gc2hfbW9iaWxlX2NldV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAk9IHNoX21vYmlsZV9jZXVfc2V0X2ZtdCwKIAkudHJ5X2ZtdAk9IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdCwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCmluZGV4IDhjYjM0NTcuLjM4YTcxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApAQCAtOTYsOSArOTYsNyBAQAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSwgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY3LCBCUklER0VfU045QzEwNSksIH0sCi0jZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNywgQlJJREdFX1NOOUMxMDUpLCB9LAotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyOCwgQlJJREdFX1NOOUMxMDUpLCB9LAogI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzAsIEJSSURHRV9TTjlDMTA1KSwgfSwKQEAgLTEyMyw3ICsxMjEsOSBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhLCBCUklER0VfU045QzEyMCksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiwgQlJJREdFX1NOOUMxMjApLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYywgQlJJREdFX1NOOUMxMjApLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UsIEJSSURHRV9TTjlDMTIwKSwgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IGZjYjA1ZjAuLjZkOGJmZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKKy8qIERlZmF1bHQgdG8gVkdBIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgREVGQVVMVF9XSURUSAk2NDAKKyNkZWZpbmUgREVGQVVMVF9IRUlHSFQJNDgwCisKIHN0YXRpYyBMSVNUX0hFQUQoaG9zdHMpOwogc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9sb2NrKTsKQEAgLTI1Niw2ICsyNjAsNDYgQEAKIAl2ZnJlZShpY2QtPnVzZXJfZm9ybWF0cyk7CiB9CiAKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWludCByZXQ7CisKKwkvKiBXZSBhbHdheXMgY2FsbCB0cnlfZm10KCkgYmVmb3JlIHNldF9mbXQoKSBvciBzZXRfY3JvcCgpICovCisJcmV0ID0gaWNpLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGljaS0+b3BzLT5zZXRfZm10KGljZCwgZik7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKCFpY2QtPmN1cnJlbnRfZm10IHx8CisJCSAgIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyAhPSBwaXgtPnBpeGVsZm9ybWF0KSB7CisJCWRldl9lcnIoJmljaS0+ZGV2LAorCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljZC0+d2lkdGgJCT0gcGl4LT53aWR0aDsKKwlpY2QtPmhlaWdodAkJPSBwaXgtPmhlaWdodDsKKwlpY2YtPnZiX3ZpZHEuZmllbGQJPQorCQlpY2QtPmZpZWxkCT0gcGl4LT5maWVsZDsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiQXR0ZW50aW9uISBXcm9uZyBidWYtdHlwZSAlZFxuIiwKKwkJCSBmLT50eXBlKTsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAorCQlpY2QtPndpZHRoLCBpY2QtPmhlaWdodCk7CisKKwkvKiBzZXQgcGh5c2ljYWwgYnVzIHBhcmFtZXRlcnMgKi8KKwlyZXR1cm4gaWNpLT5vcHMtPnNldF9idXNfcGFyYW0oaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKQEAgLTI5NywxNCArMzQxLDI4IEBACiAKIAkvKiBOb3cgd2UgcmVhbGx5IGhhdmUgdG8gYWN0aXZhdGUgdGhlIGNhbWVyYSAqLwogCWlmIChpY2QtPnVzZV9jb3VudCA9PSAxKSB7Ci0JCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVpdWZtdDsKKwkJLyogUmVzdG9yZSBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgbGFzdCBjbG9zZSgpIHBlciBWNEwyIEFQSSAqLworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmZtdC5waXggPSB7CisJCQkJLndpZHRoCQk9IGljZC0+d2lkdGgsCisJCQkJLmhlaWdodAkJPSBpY2QtPmhlaWdodCwKKwkJCQkuZmllbGQJCT0gaWNkLT5maWVsZCwKKwkJCQkucGl4ZWxmb3JtYXQJPSBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MsCisJCQkJLmNvbG9yc3BhY2UJPSBpY2QtPmN1cnJlbnRfZm10LT5jb2xvcnNwYWNlLAorCQkJfSwKKwkJfTsKKwogCQlyZXQgPSBpY2ktPm9wcy0+YWRkKGljZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGFjdGl2YXRlIHRoZSBjYW1lcmE6ICVkXG4iLCByZXQpOwogCQkJZ290byBlaWNpYWRkOwogCQl9CisKKwkJLyogVHJ5IHRvIGNvbmZpZ3VyZSB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyAqLworCQlyZXQgPSBzb2NfY2FtZXJhX3NldF9mbXQoaWNmLCAmZik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlc2ZtdDsKIAl9CiAKIAltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CkBAIC0zMTYsMTAgKzM3NCwxMyBAQAogCiAJcmV0dXJuIDA7CiAKLQkvKiBGaXJzdCB0d28gZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIC52aWRlb19sb2NrIGhlbGQgKi8KKwkvKgorCSAqIEZpcnN0IHRocmVlIGVycm9ycyBhcmUgZW50ZXJlZCB3aXRoIHRoZSAudmlkZW9fbG9jayBoZWxkCisJICogYW5kIHVzZV9jb3VudCA9PSAxCisJICovCitlc2ZtdDoKKwlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CiBlaWNpYWRkOgotCXNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoaWNkKTsKLWVpdWZtdDoKIAlpY2QtPnVzZV9jb3VudC0tOwogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CkBAIC0zMzksMTAgKzQwMCw5IEBACiAKIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCWljZC0+dXNlX2NvdW50LS07Ci0JaWYgKCFpY2QtPnVzZV9jb3VudCkgeworCWlmICghaWNkLT51c2VfY291bnQpCiAJCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKLQkJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOwotCX0KKwogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAogCW1vZHVsZV9wdXQoaWNkLT5vcHMtPm93bmVyKTsKQEAgLTQxNSwxOCArNDc1LDEwIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0JX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKIAlpbnQgcmV0OwotCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0JcmV0ID0gc29jX2NhbWVyYV90cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAltdXRleF9sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CiAKIAlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmaWNmLT52Yl92aWRxKSkgewpAQCAtNDM1LDMzICs0ODcsNyBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKLQlyZWN0LmxlZnQJPSBpY2QtPnhfY3VycmVudDsKLQlyZWN0LnRvcAk9IGljZC0+eV9jdXJyZW50OwotCXJlY3Qud2lkdGgJPSBwaXgtPndpZHRoOwotCXJlY3QuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7Ci0JcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCBwaXgtPnBpeGVsZm9ybWF0LCAmcmVjdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZ290byB1bmxvY2s7Ci0JfSBlbHNlIGlmICghaWNkLT5jdXJyZW50X2ZtdCB8fAotCQkgICBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MgIT0gcGl4Zm10KSB7Ci0JCWRldl9lcnIoJmljaS0+ZGV2LAotCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCWljZC0+d2lkdGgJCT0gcmVjdC53aWR0aDsKLQlpY2QtPmhlaWdodAkJPSByZWN0LmhlaWdodDsKLQlpY2YtPnZiX3ZpZHEuZmllbGQJPSBwaXgtPmZpZWxkOwotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiQXR0ZW50aW9uISBXcm9uZyBidWYtdHlwZSAlZFxuIiwKLQkJCSBmLT50eXBlKTsKLQotCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAotCQlpY2QtPndpZHRoLCBpY2QtPmhlaWdodCk7Ci0KLQkvKiBzZXQgcGh5c2ljYWwgYnVzIHBhcmFtZXRlcnMgKi8KLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIHBpeGZtdCk7CisJcmV0ID0gc29jX2NhbWVyYV9zZXRfZm10KGljZiwgZik7CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKQEAgLTY0OCw4ICs2NzQsOCBAQAogCWEtPmJvdW5kcy5oZWlnaHQJCT0gaWNkLT5oZWlnaHRfbWF4OwogCWEtPmRlZnJlY3QubGVmdAkJCT0gaWNkLT54X21pbjsKIAlhLT5kZWZyZWN0LnRvcAkJCT0gaWNkLT55X21pbjsKLQlhLT5kZWZyZWN0LndpZHRoCQk9IDY0MDsKLQlhLT5kZWZyZWN0LmhlaWdodAkJPSA0ODA7CisJYS0+ZGVmcmVjdC53aWR0aAkJPSBERUZBVUxUX1dJRFRIOworCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IERFRkFVTFRfSEVJR0hUOwogCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CiAJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOwogCkBAIC02ODUsNyArNzExLDcgQEAKIAkvKiBDcm9wcGluZyBpcyBhbGxvd2VkIGR1cmluZyBhIHJ1bm5pbmcgY2FwdHVyZSwgZ3VhcmQgY29uc2lzdGVuY3kgKi8KIAltdXRleF9sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CiAKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2ZtdChpY2QsIDAsICZhLT5jKTsKKwlyZXQgPSBpY2ktPm9wcy0+c2V0X2Nyb3AoaWNkLCAmYS0+Yyk7CiAJaWYgKCFyZXQpIHsKIAkJaWNkLT53aWR0aAk9IGEtPmMud2lkdGg7CiAJCWljZC0+aGVpZ2h0CT0gYS0+Yy5oZWlnaHQ7CkBAIC04NDQsOSArODcwLDE4IEBACiAJCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7CiAJCWljZC0+ZXhwb3N1cmUgPSBxY3RybCA/IHFjdHJsLT5kZWZhdWx0X3ZhbHVlIDoKIAkJCSh1bnNpZ25lZCBzaG9ydCl+MDsKLQl9Ci0JaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogCisJCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVpdWZtdDsKKworCQlpY2QtPmhlaWdodAk9IERFRkFVTFRfSEVJR0hUOworCQlpY2QtPndpZHRoCT0gREVGQVVMVF9XSURUSDsKKwkJaWNkLT5maWVsZAk9IFY0TDJfRklFTERfQU5ZOworCX0KKworZWl1Zm10OgorCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpYWRkOgogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CkBAIC04NjUsNiArOTAwLDggQEAKIAlpZiAoaWNkLT5vcHMtPnJlbW92ZSkKIAkJaWNkLT5vcHMtPnJlbW92ZShpY2QpOwogCisJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxOCw2ICs5NTUsNyBAQAogCWlmICghaWNpIHx8ICFpY2ktPm9wcyB8fAogCSAgICAhaWNpLT5vcHMtPnRyeV9mbXQgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfZm10IHx8CisJICAgICFpY2ktPm9wcy0+c2V0X2Nyb3AgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfYnVzX3BhcmFtIHx8CiAJICAgICFpY2ktPm9wcy0+cXVlcnljYXAgfHwKIAkgICAgIWljaS0+b3BzLT5pbml0X3ZpZGVvYnVmIHx8CkBAIC05OTgsNiArMTAzNiw3IEBACiAJICAgICFpY2QtPm9wcy0+cmVsZWFzZSB8fAogCSAgICAhaWNkLT5vcHMtPnN0YXJ0X2NhcHR1cmUgfHwKIAkgICAgIWljZC0+b3BzLT5zdG9wX2NhcHR1cmUgfHwKKwkgICAgIWljZC0+b3BzLT5zZXRfY3JvcCB8fAogCSAgICAhaWNkLT5vcHMtPnNldF9mbXQgfHwKIAkgICAgIWljZC0+b3BzLT50cnlfZm10IHx8CiAJICAgICFpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IDAxM2FiMDYuLmM0ODY3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC03OSw4ICs3OSwxNCBAQAogCXJldHVybiBwLT5idXNfcGFyYW07CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJICAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKwkJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXJldHVybiAwOwogfQpAQCAtMTI1LDYgKzEzMSw3IEBACiAJLnJlbGVhc2UJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfYnVzX3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCAyNjM3OGNmLi4xYTZkMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtOTMzLDggKzkzMyw2IEBACiBzdGF0aWMgaW50IHN0a192aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZCkKIHsKLQlmbXRkLT5mbGFncyA9IDA7Ci0KIAlzd2l0Y2ggKGZtdGQtPmluZGV4KSB7CiAJY2FzZSAwOgogCQlmbXRkLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0I1NjU7CkBAIC05OTIsNyArOTkwLDYgQEAKIAlwaXhfZm9ybWF0LT5oZWlnaHQgPSBzdGtfc2l6ZXNbaV0uaDsKIAlwaXhfZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlwaXhfZm9ybWF0LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcGl4X2Zvcm1hdC0+cHJpdiA9IDA7CiAJcGl4X2Zvcm1hdC0+cGl4ZWxmb3JtYXQgPSBkZXYtPnZzZXR0aW5ncy5wYWxldHRlOwogCWlmIChkZXYtPnZzZXR0aW5ncy5wYWxldHRlID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJCXBpeF9mb3JtYXQtPmJ5dGVzcGVybGluZSA9IHBpeF9mb3JtYXQtPndpZHRoOwpAQCAtMTExNSw4ICsxMTEyLDYgQEAKIAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGlzX3N0cmVhbWluZyhkZXYpCkBAIC0xMTM5LDE2ICsxMTM0LDEwIEBACiBzdGF0aWMgaW50IHN0a192aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQogewotCWludCBpbmRleDsKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gcHJpdjsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpbmRleCA9IGJ1Zi0+aW5kZXg7Ci0KLQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGRldi0+bl9zYnVmcykKKwlpZiAoYnVmLT5pbmRleCA8IDAgfHwgYnVmLT5pbmRleCA+PSBkZXYtPm5fc2J1ZnMpCiAJCXJldHVybiAtRUlOVkFMOwogCXNidWYgPSBkZXYtPnNpb19idWZzICsgYnVmLT5pbmRleDsKIAkqYnVmID0gc2J1Zi0+djRsYnVmOwpAQCAtMTE2MSw4ICsxMTUwLDYgQEAKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gcHJpdjsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTg5LDggKzExNzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCi0JCXx8ICFpc19zdHJlYW1pbmcoZGV2KSkKKwlpZiAoIWlzX3N0cmVhbWluZyhkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJiBsaXN0X2VtcHR5KCZkZXYtPnNpb19mdWxsKSkKQEAgLTEyNDksMTYgKzEyMzUsMTAgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQogewotCWlmIChzcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3AtPnBhcm0uY2FwdHVyZS5jYXBhYmlsaXR5ID0gMDsKLQlzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlID0gMDsKIAkvKkZJWE1FIFRoaXMgaXMgbm90IGNvcnJlY3QgKi8KIAlzcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwogCXNwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gMzA7CiAJc3AtPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IDI7Ci0Jc3AtPnBhcm0uY2FwdHVyZS5leHRlbmRlZG1vZGUgPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCmluZGV4IDI5OTkxZDEuLmIzMGM0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCkBAIC01MCw3ICs1MCw3IEBACiB9OwogCiAvKiBsaXN0IG9mIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IFRDTTgyNVggc2Vuc29yICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyB0Y204MjV4X2Zvcm1hdHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHRjbTgyNXhfZm9ybWF0c1tdID0gewogCXsKIAkJLmRlc2NyaXB0aW9uID0gIllVWVYgKFlVViA0OjI6MiksIHBhY2tlZCIsCiAJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLApAQCAtNzYsMTUgKzc2LDE1IEBACiAgKiBUQ004MjVYIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgcGl4ZWwgZm9ybWF0IGFuZAogICogaW1hZ2Ugc2l6ZQogICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHN1YnFjaWYJPQl7IDB4MjAsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHFjaWYJPQl7IDB4MTgsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIGNpZgk9CXsgMHgxNCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcXF2Z2EJPQl7IDB4MGMsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHF2Z2EJPQl7IDB4MDQsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHZnYQk9CXsgMHgwMCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgc3VicWNpZgk9CXsgMHgyMCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcWNpZgk9CXsgMHgxOCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgY2lmCT0JeyAweDE0LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxcXZnYQk9CXsgMHgwYywgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcXZnYQk9CXsgMHgwNCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgdmdhCT0JeyAweDAwLCBUQ004MjVYX1BJQ1NJWiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHl1djQyMgk9CXsgMHgwMCwgVENNODI1WF9QSUNGTVQgfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcmdiNTY1CT0JeyAweDAyLCBUQ004MjVYX1BJQ0ZNVCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyB5dXY0MjIJPQl7IDB4MDAsIFRDTTgyNVhfUElDRk1UIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHJnYjU2NQk9CXsgMHgwMiwgVENNODI1WF9QSUNGTVQgfTsKIAogLyogT3VyIG93biBzcGVjaWZpYyBjb250cm9scyAqLwogI2RlZmluZSBWNEwyX0NJRF9BTEMJCQkJVjRMMl9DSURfUFJJVkFURV9CQVNFCkBAIC0yNDgsMTAgKzI0OCwxMCBAQAogfTsKIAogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X3Npel9yZWdbTlVNX0lNQUdFX1NJWkVTXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X3Npel9yZWdbTlVNX0lNQUdFX1NJWkVTXSA9CiB7ICZzdWJxY2lmLCAmcXF2Z2EsICZxY2lmLCAmcXZnYSwgJmNpZiwgJnZnYSB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X2ZtdF9yZWdbTlVNX1BJWEVMX0ZPUk1BVFNdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfZm10X3JlZ1tOVU1fUElYRUxfRk9STUFUU10gPQogeyAmeXV2NDIyLCAmcmdiNTY1IH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCmluZGV4IDc3MGViYWMuLjViN2U2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCkBAIC0xODgsNyArMTg4LDcgQEAKIC8qIEFycmF5IG9mIGltYWdlIHNpemVzIHN1cHBvcnRlZCBieSBUQ004MjVYLiAgVGhlc2UgbXVzdCBiZSBvcmRlcmVkIGZyb20KICAqIHNtYWxsZXN0IGltYWdlIHNpemUgdG8gbGFyZ2VzdC4KICAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBjYXB0dXJlX3NpemUgdGNtODI1eF9zaXplc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjYXB0dXJlX3NpemUgdGNtODI1eF9zaXplc1tdID0gewogCXsgMTI4LCAgOTYgfSwgLyogc3ViUUNJRiAqLwogCXsgMTYwLCAxMjAgfSwgLyogUVFWR0EgKi8KIAl7IDE3NiwgMTQ0IH0sIC8qIFFDSUYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKaW5kZXggMGMwMjA1OC4uMDA1ZjhhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogI2lmbmRlZiBWSURFT19BVURJT19CQUxBTkNFCiAjIGRlZmluZSBWSURFT19BVURJT19CQUxBTkNFIDMyCkBAIC02OSwxMyArNjksNiBAQAogbW9kdWxlX3BhcmFtKG1heHZvbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKIAotLyogQWRkcmVzcyB0byBzY2FuIChJMkMgYWRkcmVzcyBvZiB0aGlzIGNoaXApICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19BRERSX1REQTc0MzIgPj4gMSwKLQlJMkNfQ0xJRU5UX0VORCwKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBTdHJ1Y3R1cmUgb2YgYWRkcmVzcyBhbmQgc3ViYWRkcmVzc2VzIGZvciB0aGUgdGRhNzQzMiAqLwogCkBAIC00MjEsMjEgKzQxNCwxOCBAQAogc3RhdGljIGludCB0ZGE3NDMyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewogCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdGRhNzQzMl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGRhNzQzMl9jb3JlX29wcyA9IHsKQEAgLTQ5OCw4ICs0ODgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGRhNzQzMiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTc0MzIsCi0JLmNvbW1hbmQgPSB0ZGE3NDMyX2NvbW1hbmQsCiAJLnByb2JlID0gdGRhNzQzMl9wcm9iZSwKIAkucmVtb3ZlID0gdGRhNzQzMl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdGRhNzQzMl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKaW5kZXggNmFmYjcwNS4uZmUxMTU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotI2luY2x1ZGUgInRkYTk4NDAuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigidGRhOTg0MCBkcml2ZXIiKTsKQEAgLTU2LDExICs1Niw2IEBACiAjZGVmaW5lIFREQTk4NDBfU0VUX0JPVEhfUiAgICAgICAgICAgICAgMHgxNgogI2RlZmluZSBUREE5ODQwX1NFVF9FWFRFUk5BTCAgICAgICAgICAgIDB4N2EKIAotLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHg0MiAoNy1CaXQpICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQUREUl9UREE5ODQwLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIHN0YXRpYyB2b2lkIHRkYTk4NDBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7CkBAIC0xMzcsNjAgKzEzMiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyB0ZGE5ODQwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZGE5ODQwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKLQlpbnQgYnl0ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVERBOTg0MF9MRVZFTF9BREpVU1Q6Ci0JCWJ5dGUgPSAqKGludCAqKWFyZzsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVERBOTg0MF9MRVZFTF9BREpVU1Q6ICVkXG4iLCBieXRlKTsKLQotCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwotCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBjYWxjdWxhdGUgYWN0dWFsIHZhbHVlIHRvIHNldCwgc2VlIHNwZWNzLCBwYWdlIDE4ICovCi0JCWJ5dGUgLz0gNTsKLQkJaWYgKDAgPCBieXRlKQotCQkJYnl0ZSArPSAweDg7Ci0JCWVsc2UKLQkJCWJ5dGUgPSAtYnl0ZTsKLQkJdGRhOTg0MF93cml0ZShzZCwgTEVWRUxfQURKVVNULCBieXRlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFREQTk4NDBfU1RFUkVPX0FESlVTVDoKLQkJYnl0ZSA9ICooaW50ICopYXJnOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX1NURVJFT19BREpVU1Q6ICVkXG4iLCBieXRlKTsKLQotCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwotCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBjYWxjdWxhdGUgYWN0dWFsIHZhbHVlIHRvIHNldCAqLwotCQlieXRlIC89IDU7Ci0JCWlmICgwIDwgYnl0ZSkKLQkJCWJ5dGUgKz0gMHgyMDsKLQkJZWxzZQotCQkJYnl0ZSA9IC1ieXRlOwotCi0JCXRkYTk4NDBfd3JpdGUoc2QsIFNURVJFT19BREpVU1QsIGJ5dGUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODQwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1REQTk4NDAsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRkYTk4NDBfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGRhOTg0MF9pb2N0bCwKKwkuZ19jaGlwX2lkZW50ID0gdGRhOTg0MF9nX2NoaXBfaWRlbnQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyB0ZGE5ODQwX3R1bmVyX29wcyA9IHsKQEAgLTIwOSw4ICsxNjEsNiBAQAogCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQlpbnQgcmVzdWx0OwotCWludCBieXRlOwogCiAJLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLApAQCAtMjI3LDE1ICsxNzcsOSBAQAogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZGE5ODQwX29wcyk7CiAKIAkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGxldmVsICYgc3RlcmVvIC0gYWRqdXN0bWVudCwgbW9kZSAqLwotCWJ5dGUgPSAwOwotCXJlc3VsdCA9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfTEVWRUxfQURKVVNULCAmYnl0ZSk7Ci0JcmVzdWx0IHw9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfU1RFUkVPX0FESlVTVCwgJmJ5dGUpOworCXRkYTk4NDBfd3JpdGUoc2QsIExFVkVMX0FESlVTVCwgMCk7CisJdGRhOTg0MF93cml0ZShzZCwgU1RFUkVPX0FESlVTVCwgMCk7CiAJdGRhOTg0MF93cml0ZShzZCwgU1dJVENILCBUREE5ODQwX1NFVF9TVEVSRU8pOwotCWlmIChyZXN1bHQpIHsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiY291bGQgbm90IGluaXRpYWxpemUgdGRhOTg0MFxuIik7Ci0JCWtmcmVlKHNkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0yNDgsMTIgKzE5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGRhOTg0MF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRkYTk4NDBfaWRbXSA9IHsKIAl7ICJ0ZGE5ODQwIiwgMCB9LAogCXsgfQpAQCAtMjYyLDEwICsyMDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGRhOTg0MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTk4NDAsCi0JLmNvbW1hbmQgPSB0ZGE5ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gdGRhOTg0MF9wcm9iZSwKIAkucmVtb3ZlID0gdGRhOTg0MF9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IHRkYTk4NDBfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRkYTk4NDBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxMmFlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX19JTkNMVURFRF9UREE5ODQwX18KLSNkZWZpbmUgX19JTkNMVURFRF9UREE5ODQwX18KLQotI2RlZmluZQlJMkNfQUREUl9UREE5ODQwCQkweDQyCi0KLS8qIHZhbHVlcyBtYXkgcmFuZ2UgYmV0d2VlbiArMi41IGFuZCAtMi4wOwotICAgdGhlIHZhbHVlIGhhcyB0byBiZSBtdWx0aXBsaWVkIHdpdGggMTAgKi8KLSNkZWZpbmUgVERBOTg0MF9MRVZFTF9BREpVU1QJX0lPVygndicsMyxpbnQpCi0KLS8qIHZhbHVlcyBtYXkgcmFuZ2UgYmV0d2VlbiArMi41IGFuZCAtMi40OwotICAgdGhlIHZhbHVlIGhhcyB0byBiZSBtdWx0aXBsaWVkIHdpdGggMTAgKi8KLSNkZWZpbmUgVERBOTg0MF9TVEVSRU9fQURKVVNUCV9JT1coJ3YnLDQsaW50KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKaW5kZXggMDBjNmNiZS4uMjRlMmI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKQEAgLTI4LDIwICsyOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gIHsKLSAgICBJMkNfQUREUl9UREE5ODc1ID4+IDEsCi0gICAgSTJDX0NMSUVOVF9FTkQKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFREQTk4NzUgKi8KIHN0cnVjdCB0ZGE5ODc1IHsKQEAgLTMxMywxOCArMzA2LDE0IEBACiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDU4ODgwKTsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB0ZGE5ODc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE5ODc1X2NvcmVfb3BzID0gewpAQCAtNDAxLDggKzM5MCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE5ODc1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBOTg3NSwKLQkuY29tbWFuZCA9IHRkYTk4NzVfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE5ODc1X3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE5ODc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0ZGE5ODc1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IDc1MTlmZDEuLmQ2MWM1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgInRlYTY0MTVjLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CkBAIC00NCwyNSArNDUsMjIgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLS8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4MDMgYW5kL29yIDB4NDMgKDctYml0KSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1RFQTY0MTVDXzEsIEkyQ19URUE2NDE1Q18yLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLS8qIG1ha2VzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dC1waW4gJ2knIGFuZCB0aGUgb3V0cHV0LXBpbiAnbycKLSAgIGZvciB0aGUgdGVhNjQxNWMtY2xpZW50ICdjbGllbnQnICovCi1zdGF0aWMgaW50IHN3aXRjaF9tYXRyaXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGksIGludCBvKQorLyogbWFrZXMgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0LXBpbiAnaScgYW5kIHRoZSBvdXRwdXQtcGluICdvJyAqLworc3RhdGljIGludCB0ZWE2NDE1Y19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXU4IGJ5dGUgPSAwOworCXUzMiBpID0gcm91dGUtPmlucHV0OworCXUzMiBvID0gcm91dGUtPm91dHB1dDsKIAlpbnQgcmV0OwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaT0lZCwgbz0lZFxuIiwgaSwgbyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaT0lZCwgbz0lZFxuIiwgaSwgbyk7CiAKIAkvKiBjaGVjayBpZiB0aGUgcGlucyBhcmUgdmFsaWQgKi8KIAlpZiAoMCA9PSAoKDEgPT0gaSB8fCAgMyA9PSBpIHx8ICA1ID09IGkgfHwgIDYgPT0gaSB8fCAgOCA9PSBpIHx8IDEwID09IGkgfHwgMjAgPT0gaSB8fCAxMSA9PSBpKQogCSAgICAgICYmICgxOCA9PSBvIHx8IDE3ID09IG8gfHwgMTYgPT0gbyB8fCAxNSA9PSBvIHx8IDE0ID09IG8gfHwgMTMgPT0gbykpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdG8gdW5kZXJzdGFuZCB0aGlzLCBoYXZlIGEgbG9vayBhdCB0aGUgdGVhNjQxNWMtc3BlY3MgKHAuNSkgKi8KIAlzd2l0Y2ggKG8pIHsKQEAgLTExNSwzNyArMTEzLDMzIEBACiAKIAlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIGJ5dGUpOwogCWlmIChyZXQpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCQkiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBsb25nIHRlYTY0MTVjX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZWE2NDE1Y19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7Ci0JaWYgKGNtZCA9PSBURUE2NDE1Q19TV0lUQ0gpIHsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4ICp2ID0gKHN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKilhcmc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCXJldHVybiBzd2l0Y2hfbWF0cml4KGNsaWVudCwgdi0+aW4sIHYtPm91dCk7Ci0JfQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGVhNjQxNWNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVEVBNjQxNUMsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRlYTY0MTVjX2NvcmVfb3BzID0gewotCS5pb2N0bCA9IHRlYTY0MTVjX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZWE2NDE1Y19nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB0ZWE2NDE1Y192aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHRlYTY0MTVjX3Nfcm91dGluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRlYTY0MTVjX29wcyA9IHsKIAkuY29yZSA9ICZ0ZWE2NDE1Y19jb3JlX29wcywKKwkudmlkZW8gPSAmdGVhNjQxNWNfdmlkZW9fb3BzLAogfTsKIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCkBAIC0xNzYsMTIgKzE3MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVhNjQxNWNfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgotCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZWE2NDE1Y19pZFtdID0gewogCXsgInRlYTY0MTVjIiwgMCB9LApAQCAtMTkxLDEwICsxNzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGVhNjQxNWMiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKLQkuY29tbWFuZCA9IHRlYTY0MTVjX2NvbW1hbmQsCiAJLnByb2JlID0gdGVhNjQxNWNfcHJvYmUsCiAJLnJlbW92ZSA9IHRlYTY0MTVjX3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0gdGVhNjQxNWNfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRlYTY0MTVjX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaAppbmRleCBmODRlZDgwLi4zYTQ3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX19JTkNMVURFRF9URUE2NDE1Q19fCiAjZGVmaW5lIF9fSU5DTFVERURfVEVBNjQxNUNfXwogCi0vKiBwb3NzaWJsZSBpMmMtYWRkcmVzc2VzICovCi0jZGVmaW5lCUkyQ19URUE2NDE1Q18xCQkweDAzCi0jZGVmaW5lCUkyQ19URUE2NDE1Q18yCQkweDQzCi0KIC8qIHRoZSB0ZWE2NDE1YydzIGRlc2lnbiBpcyBxdWl0ZSBicmFpbi1kZWFkLiBhbHRob3VnaCB0aGVyZSBhcmUKICAgIDggaW5wdXRzIGFuZCA2IG91dHB1dHMsIHRoZXNlIGFyZW4ndCBlbnVtZXJhdGVkIGluIGFueSB3YXkuIGJlY2F1c2UKICAgIEkgZG9uJ3Qgd2FudCB0byBzYXkgImNvbm5lY3QgaW5wdXQgcGluIDIwIHRvIG91dHB1dCBwaW4gMTciLCBJIGRlZmluZQpAQCAtMjgsMTIgKzI0LDQgQEAKICNkZWZpbmUgVEVBNjQxNUNfSU5QVVQ3IDEKICNkZWZpbmUgVEVBNjQxNUNfSU5QVVQ4IDExCiAKLXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXgKLXsKLQlpbnQJaW47CS8qIGlucHV0LXBpbiAqLwotCWludAlvdXQ7CS8qIG91dHB1dC1waW4gKi8KLX07Ci0KLSNkZWZpbmUgVEVBNjQxNUNfU1dJVENICQlfSU9XKCd2JywxLHN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXgpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCAwODFlNzRmLi4zNDkyMjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAidGVhNjQyMC5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwpAQCAtNDQsMjQgKzQ1LDIzIEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0vKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDRjIGFuZC9vciAweDRkICg3LUJpdCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1RFQTY0MjBfMSwgSTJDX0FERFJfVEVBNjQyMF8yLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIG1ha2UgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0ICdpJyBhbmQgdGhlIG91dHB1dCAnbycKLSAgIHdpdGggZ2FpbiAnZycgZm9yIHRoZSB0ZWE2NDIwLWNsaWVudCAnY2xpZW50JyAobm90ZTogaSA9IDYgbWVhbnMgJ211dGUnKSAqLwotc3RhdGljIGludCB0ZWE2NDIwX3N3aXRjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaSwgaW50IG8sIGludCBnKQorICAgd2l0aCBnYWluICdnJyAobm90ZTogaSA9IDYgbWVhbnMgJ211dGUnKSAqLworc3RhdGljIGludCB0ZWE2NDIwX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IGkgPSByb3V0ZS0+aW5wdXQ7CisJaW50IG8gPSByb3V0ZS0+b3V0cHV0ICYgMHhmOworCWludCBnID0gKHJvdXRlLT5vdXRwdXQgPj4gNCkgJiAweGY7CiAJdTggYnl0ZTsKIAlpbnQgcmV0OwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaT0lZCwgbz0lZCwgZz0lZFxuIiwgaSwgbywgZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaT0lZCwgbz0lZCwgZz0lZFxuIiwgaSwgbywgZyk7CiAKIAkvKiBjaGVjayBpZiB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KIAlpZiAoaSA8IDEgfHwgaSA+IDYgfHwgbyA8IDEgfHwgbyA+IDQgfHwgZyA8IDAgfHwgZyA+IDYgfHwgZyAlIDIgIT0gMCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ5dGUgPSAoKG8gLSAxKSA8PCA1KTsKIAlieXRlIHw9IChpIC0gMSk7CkBAIC04MywzNyArODMsMzMgQEAKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgYnl0ZSk7CiAJaWYgKHJldCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIHRlYTY0MjBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRlYTY0MjBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCWlmIChjbWQgPT0gVEVBNjQyMF9TV0lUQ0gpIHsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCQlzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKmEgPSAoc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4ICopYXJnOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCQlyZXR1cm4gdGVhNjQyMF9zd2l0Y2goY2xpZW50LCBhLT5pbiwgYS0+b3V0LCBhLT5nYWluKTsKLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCB0ZWE2NDIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RFQTY0MjAsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRlYTY0MjBfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGVhNjQyMF9pb2N0bCwKKwkuZ19jaGlwX2lkZW50ID0gdGVhNjQyMF9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyB0ZWE2NDIwX2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdGVhNjQyMF9zX3JvdXRpbmcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0ZWE2NDIwX29wcyA9IHsKIAkuY29yZSA9ICZ0ZWE2NDIwX2NvcmVfb3BzLAorCS5hdWRpbyA9ICZ0ZWE2NDIwX2F1ZGlvX29wcywKIH07CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwpAQCAtMTMwLDIwICsxMjYsMjQgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCWlmIChzZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOworCiAJLyogc2V0IGluaXRpYWwgdmFsdWVzOiBzZXQgIm11dGUiLWlucHV0IHRvIGFsbCBvdXRwdXRzIGF0IGdhaW4gMCAqLwogCWVyciA9IDA7CiAJZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotCQllcnIgKz0gdGVhNjQyMF9zd2l0Y2goY2xpZW50LCA2LCBpLCAwKTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKworCQlyb3V0ZS5pbnB1dCA9IDY7CisJCXJvdXRlLm91dHB1dCA9IGk7CisJCWVyciArPSB0ZWE2NDIwX3Nfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiAJaWYgKGVycikgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZWE2NDIwXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCi0Jc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRlYTY0MjBfb3BzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2LDEyICsxNTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlYTY0MjBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgotCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZWE2NDIwX2lkW10gPSB7CiAJeyAidGVhNjQyMCIsIDAgfSwKQEAgLTE3MSwxMCArMTY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRlYTY0MjAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDIwLAotCS5jb21tYW5kID0gdGVhNjQyMF9jb21tYW5kLAogCS5wcm9iZSA9IHRlYTY0MjBfcHJvYmUsCiAJLnJlbW92ZSA9IHRlYTY0MjBfcmVtb3ZlLAotCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDIwX2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSB0ZWE2NDIwX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKaW5kZXggNWVmN2MxOC4uNGFhM2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKQEAgLTEsMTcgKzEsMjQgQEAKICNpZm5kZWYgX19JTkNMVURFRF9URUE2NDIwX18KICNkZWZpbmUgX19JTkNMVURFRF9URUE2NDIwX18KIAotLyogcG9zc2libGUgYWRkcmVzc2VzICovCi0jZGVmaW5lCUkyQ19BRERSX1RFQTY0MjBfMQkJMHg0YwotI2RlZmluZQlJMkNfQUREUl9URUE2NDIwXzIJCTB4NGQKKy8qIGlucHV0IHBpbnMgKi8KKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQxIDEKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQyIDIKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQzIDMKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQ0IDQKIAotc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4Ci17Ci0JaW50CWluOwkvKiBpbnB1dCBvZiBhdWRpbyBzd2l0Y2ggKi8KLQlpbnQJb3V0OwkvKiBvdXRwdXQgb2YgYXVkaW8gc3dpdGNoICAqLwotCWludAlnYWluOwkvKiBnYWluIG9mIGNvbm5lY3Rpb24gKi8KLX07CisvKiBvdXRwdXQgcGlucyAqLworI2RlZmluZSBURUE2NDIwX0lOUFVUMSAxCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQyIDIKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDMgMworI2RlZmluZSBURUE2NDIwX0lOUFVUNCA0CisjZGVmaW5lIFRFQTY0MjBfSU5QVVQ1IDUKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDYgNgogCi0jZGVmaW5lIFRFQTY0MjBfU1dJVENICQlfSU9XKCd2JywxLHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCkKKy8qIGdhaW4gb24gdGhlIG91dHB1dCBwaW5zLCBPUmVkIHdpdGggdGhlIG91dHB1dCBwaW4gKi8KKyNkZWZpbmUgVEVBNjQyMF9HQUlOMCAweDAwCisjZGVmaW5lIFRFQTY0MjBfR0FJTjIgMHgyMAorI2RlZmluZSBURUE2NDIwX0dBSU40IDB4NDAKKyNkZWZpbmUgVEVBNjQyMF9HQUlONiAweDYwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKaW5kZXggNWM5NWVjZC4uMDc3ODljNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCkBAIC0zMSwxNSArMzEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ0bHYzMjBhaWMyM2IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTY290dCBBbGZ0ZXIsIFVsZiBFa2x1bmQsIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM0ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMjEsMTEgKzExOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGx2MzIwYWljMjNiX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0bHYzMjBhaWMyM2JfY29yZV9vcHMgPSB7CkBAIC0yMDgsOCArMjAwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRsdjMyMGFpYzIzYiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RMVjMyMEFJQzIzQiwKLQkuY29tbWFuZCA9IHRsdjMyMGFpYzIzYl9jb21tYW5kLAogCS5wcm9iZSA9IHRsdjMyMGFpYzIzYl9wcm9iZSwKIAkucmVtb3ZlID0gdGx2MzIwYWljMjNiX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0bHYzMjBhaWMyM2JfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IDMwNjQwZmIuLjcyZDQxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0zNjQsNyArMzY0LDggQEAKIAl9CiAKIAl0LT50eXBlID0gdHlwZTsKLQl0LT5jb25maWcgPSBuZXdfY29uZmlnOworCS8qIHByZXZlbnQgaW52YWxpZCBjb25maWcgdmFsdWVzICovCisJdC0+Y29uZmlnID0gKChuZXdfY29uZmlnID49IDApICYmIChuZXdfY29uZmlnIDwgMjU2KSkgPyBuZXdfY29uZmlnIDogMDsKIAlpZiAodHVuZXJfY2FsbGJhY2sgIT0gTlVMTCkgewogCQl0dW5lcl9kYmcoImRlZmluaW5nIEdQSU8gY2FsbGJhY2tcbiIpOwogCQl0LT5mZS5jYWxsYmFjayA9IHR1bmVyX2NhbGxiYWNrOwpAQCAtNDUyLDcgKzQ1Myw4IEBACiAJCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp4Y190dW5lcl9vcHM7CiAKIAkJeGM1MDAwX2NmZy5pMmNfYWRkcmVzcwkgID0gdC0+aTJjLT5hZGRyOwotCQl4YzUwMDBfY2ZnLmlmX2toegkgID0gNTM4MDsKKwkJLyogaWZfa2h6IHdpbGwgYmUgc2V0IHdoZW4gdGhlIGRpZ2l0YWwgZHZiX2F0dGFjaCgpIG9jY3VycyAqLworCQl4YzUwMDBfY2ZnLmlmX2toegkgID0gMDsKIAkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsCiAJCQkJJnQtPmZlLCB0LT5pMmMtPmFkYXB0ZXIsICZ4YzUwMDBfY2ZnKSkKIAkJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKQEAgLTc3Niw4ICs3NzgsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX1JBRElPLCAiQVVEQ19TRVRfUkFESU8iKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX1JBRElPLCAic19yYWRpbyIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCWlmICh0LT5yYWRpb19mcmVxKQogCQlzZXRfZnJlcShjbGllbnQsIHQtPnJhZGlvX2ZyZXEpOwpAQCAtNzkxLDcgKzc5Miw3IEBACiAKIAl0dW5lcl9kYmcoIlB1dHRpbmcgdHVuZXIgdG8gc2xlZXBcbiIpOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlRVTkVSX1NFVF9TVEFOREJZIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAic19zdGFuZGJ5IikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAJdC0+bW9kZSA9IFRfU1RBTkRCWTsKIAlpZiAoYW5hbG9nX29wcy0+c3RhbmRieSkKQEAgLTc5OSwxMzIgKzgwMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGxvbmcgdHVuZXJfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7Ci0Jc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ1NBVURJTzoKLQkJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ1NBVURJTyIpID09IC1FSU5WQUwpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCXJldHVybiAwOwotCi0JCS8qIFNob3VsZCBiZSBpbXBsZW1lbnRlZCwgc2luY2UgYnR0diBjYWxscyBpdCAqLwotCQl0dW5lcl9kYmcoIlZJRElPQ1NBVURJTyBub3QgaW1wbGVtZW50ZWQuXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NTQ0hBTjoKLQkJewotCQkJc3RhdGljIGNvbnN0IHY0bDJfc3RkX2lkIG1hcFtdID0gewotCQkJCVtWSURFT19NT0RFX1BBTF0gPSBWNEwyX1NURF9QQUwsCi0JCQkJW1ZJREVPX01PREVfTlRTQ10gPSBWNEwyX1NURF9OVFNDX00sCi0JCQkJW1ZJREVPX01PREVfU0VDQU1dID0gVjRMMl9TVERfU0VDQU0sCi0JCQkJWzQgLyogYnR0diAqLyBdID0gVjRMMl9TVERfUEFMX00sCi0JCQkJWzUgLyogYnR0diAqLyBdID0gVjRMMl9TVERfUEFMX04sCi0JCQkJWzYgLyogYnR0diAqLyBdID0gVjRMMl9TVERfTlRTQ19NX0pQLAotCQkJfTsKLQkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2YyA9IGFyZzsKLQotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKHNldF9tb2RlKGNsaWVudCx0LFY0TDJfVFVORVJfQU5BTE9HX1RWLCAiVklESU9DU0NIQU4iKT09LUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKHZjLT5ub3JtIDwgQVJSQVlfU0laRShtYXApKQotCQkJCXQtPnN0ZCA9IG1hcFt2Yy0+bm9ybV07Ci0JCQl0dW5lcl9maXh1cF9zdGQodCk7Ci0JCQlpZiAodC0+dHZfZnJlcSkKLQkJCQlzZXRfdHZfZnJlcShjbGllbnQsIHQtPnR2X2ZyZXEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NGUkVROgotCQl7Ci0JCQl1bnNpZ25lZCBsb25nICp2ID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DU0ZSRVEiKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJc2V0X2ZyZXEoY2xpZW50LCAqdik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnZ0ID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DR1RVTkVSIikgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChjaGVja192NGwyKHQpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKLQkJCQlpZiAoZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKSB7Ci0JCQkJCXUzMiB0dW5lcl9zdGF0dXM7Ci0KLQkJCQkJZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKCZ0LT5mZSwgJnR1bmVyX3N0YXR1cyk7Ci0JCQkJCWlmICh0dW5lcl9zdGF0dXMgJiBUVU5FUl9TVEFUVVNfU1RFUkVPKQotCQkJCQkJdnQtPmZsYWdzIHw9IFZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJZWxzZQotCQkJCQkJdnQtPmZsYWdzICY9IH5WSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbykgewotCQkJCQkJaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbygmdC0+ZmUpKQotCQkJCQkJCXZ0LT5mbGFncyB8PQotCQkJCQkJCQlWSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJCQllbHNlCi0JCQkJCQkJdnQtPmZsYWdzICY9Ci0JCQkJCQkJCX5WSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKGFuYWxvZ19vcHMtPmhhc19zaWduYWwpCi0JCQkJCXZ0LT5zaWduYWwgPQotCQkJCQkJYW5hbG9nX29wcy0+aGFzX3NpZ25hbCgmdC0+ZmUpOwotCi0JCQkJdnQtPmZsYWdzIHw9IFZJREVPX1RVTkVSX0xPVzsJLyogQWxsb3cgZnJlcXMgYXQgNjIuNSBIeiAqLwotCi0JCQkJdnQtPnJhbmdlbG93ID0gcmFkaW9fcmFuZ2VbMF0gKiAxNjAwMDsKLQkJCQl2dC0+cmFuZ2VoaWdoID0gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMDsKLQotCQkJfSBlbHNlIHsKLQkJCQl2dC0+cmFuZ2Vsb3cgPSB0dl9yYW5nZVswXSAqIDE2OwotCQkJCXZ0LT5yYW5nZWhpZ2ggPSB0dl9yYW5nZVsxXSAqIDE2OwotCQkJfQotCi0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DR0FVRElPIikgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChjaGVja192NGwyKHQpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKLQkJCQlpZiAoZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKSB7Ci0JCQkJCXUzMiB0dW5lcl9zdGF0dXM7Ci0KLQkJCQkJZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKCZ0LT5mZSwgJnR1bmVyX3N0YXR1cyk7Ci0JCQkJCXZhLT5tb2RlID0gKHR1bmVyX3N0YXR1cyAmIFRVTkVSX1NUQVRVU19TVEVSRU8pCi0JCQkJCSAgICA/IFZJREVPX1NPVU5EX1NURVJFTyA6IFZJREVPX1NPVU5EX01PTk87Ci0JCQkJfSBlbHNlIGlmIChhbmFsb2dfb3BzLT5pc19zdGVyZW8pCi0JCQkJCXZhLT5tb2RlID0gYW5hbG9nX29wcy0+aXNfc3RlcmVvKCZ0LT5mZSkKLQkJCQkJICAgID8gVklERU9fU09VTkRfU1RFUkVPIDogVklERU9fU09VTkRfTU9OTzsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCB0dW5lcl9zX2NvbmZpZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgKmNmZykKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CkBAIC05NTAsOCArODI1LDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKHNldF9tb2RlKGNsaWVudCwgdCwgVjRMMl9UVU5FUl9BTkFMT0dfVFYsICJWSURJT0NfU19TVEQiKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX0FOQUxPR19UViwgInNfc3RkIikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2hfdjRsMigpOwpAQCAtOTY4LDggKzg0Miw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIGYtPnR5cGUsICJWSURJT0NfU19GUkVRVUVOQ1kiKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBmLT50eXBlLCAic19mcmVxdWVuY3kiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCXNldF9mcmVxKGNsaWVudCwgZi0+ZnJlcXVlbmN5KTsKQEAgLTk4Miw3ICs4NTUsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqZmVfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7CiAKLQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DX0dfRlJFUVVFTkNZIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAiZ19mcmVxdWVuY3kiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCWYtPnR5cGUgPSB0LT5tb2RlOwpAQCAtMTAwNiw3ICs4NzksNyBAQAogCXN0cnVjdCBhbmFsb2dfZGVtb2Rfb3BzICphbmFsb2dfb3BzID0gJnQtPmZlLm9wcy5hbmFsb2dfb3BzOwogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfR19UVU5FUiIpID09IC1FSU5WQUwpCisJaWYgKGNoZWNrX21vZGUodCwgImdfdHVuZXIiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCkBAIC0xMDU1LDcgKzkyOCw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfU19UVU5FUiIpID09IC1FSU5WQUwpCisJaWYgKGNoZWNrX21vZGUodCwgInNfdHVuZXIiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaF92NGwyKCk7CkBAIC0xMTEyLDkgKzk4NSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR1bmVyX2NvcmVfb3BzID0gewogCS5sb2dfc3RhdHVzID0gdHVuZXJfbG9nX3N0YXR1cywKIAkuc19zdGFuZGJ5ID0gdHVuZXJfc19zdGFuZGJ5LAotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi0JLmlvY3RsID0gdHVuZXJfaW9jdGwsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHR1bmVyX3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggMDc2ZWQ1Yi4uMjI2YmYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTEwNDcsNiArMTA0NywxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogYXVkaW8gY2hpcCBkZXNjcmlwdGlvbiAtIGRlZmluZXMrZnVuY3Rpb25zIGZvciB0ZGE5ODc1ICAgICAgICAgICAgICAgICAqLworLyogVGhlIFREQTk4NzUgaXMgbWFkZSBieSBQaGlsaXBzIFNlbWljb25kdWN0b3IKKyAqIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20KKyAqIFREQTk4NzU6IEkyQy1idXMgY29udHJvbGxlZCBEU1AgYXVkaW8gcHJvY2Vzc29yLCBGTSBkZW1vZHVsYXRvcgorICoKKyAqLworCisvKiBzdWJhZGRyZXNzZXMgZm9yIFREQTk4NzUgKi8KKyNkZWZpbmUgVERBOTg3NV9NVVQgICAgICAgICAweDEyICAvKkdlbmVyYWwgbXV0ZSAgKHZhbHVlIC0tPiAwYjExMDAxMTAwKi8KKyNkZWZpbmUgVERBOTg3NV9DRkcgICAgICAgICAweDAxICAvKiBDb25maWcgcmVnaXN0ZXIgKHZhbHVlIC0tPiAwYjAwMDAwMDAwICovCisjZGVmaW5lIFREQTk4NzVfREFDT1MgICAgICAgMHgxMyAgLypEQUMgaS9vIHNlbGVjdCAoQURDKSAwYjAwMDAxMDAqLworI2RlZmluZSBUREE5ODc1X0xPU1IgICAgICAgIDB4MTYgIC8qTGluZSBvdXRwdXQgc2VsZWN0IHJlZ2lydGVyIDBiMDEwMCAwMDAxKi8KKworI2RlZmluZSBUREE5ODc1X0NIMVYgICAgICAgIDB4MGMgIC8qQ2hhbm5lbCAxIHZvbHVtZSAobXV0ZSkqLworI2RlZmluZSBUREE5ODc1X0NIMlYgICAgICAgIDB4MGQgIC8qQ2hhbm5lbCAyIHZvbHVtZSAobXV0ZSkqLworI2RlZmluZSBUREE5ODc1X1NDMSAgICAgICAgIDB4MTQgIC8qU0NBUlQgMSBpbiAobW9ubykqLworI2RlZmluZSBUREE5ODc1X1NDMiAgICAgICAgIDB4MTUgIC8qU0NBUlQgMiBpbiAobW9ubykqLworCisjZGVmaW5lIFREQTk4NzVfQURDSVMgICAgICAgMHgxNyAgLypBREMgaW5wdXQgc2VsZWN0IChtb25vKSAwYjAxMTAgMDAwKi8KKyNkZWZpbmUgVERBOTg3NV9BRVIgICAgICAgICAweDE5ICAvKkF1ZGlvIGVmZmVjdCAoQVZMK1BzZXVkbykgMGIwMDAwIDAxMTAqLworI2RlZmluZSBUREE5ODc1X01DUyAgICAgICAgIDB4MTggIC8qTWFpbiBjaGFubmVsIHNlbGVjdCAoREFDKSAwYjAwMDAxMDAqLworI2RlZmluZSBUREE5ODc1X01WTCAgICAgICAgIDB4MWEgIC8qIE1haW4gdm9sdW1lIGdhdWNoZSAqLworI2RlZmluZSBUREE5ODc1X01WUiAgICAgICAgIDB4MWIgIC8qIE1haW4gdm9sdW1lIGRyb2l0ZSAqLworI2RlZmluZSBUREE5ODc1X01CQSAgICAgICAgIDB4MWQgIC8qIE1haW4gQmFzc2UgKi8KKyNkZWZpbmUgVERBOTg3NV9NVFIgICAgICAgICAweDFlICAvKiBNYWluIHRyZWJsZSAqLworI2RlZmluZSBUREE5ODc1X0FDUyAgICAgICAgIDB4MWYgIC8qIEF1eGlsYXJ5IGNoYW5uZWwgc2VsZWN0IChGTSkgMGIwMDAwMDAwKi8KKyNkZWZpbmUgVERBOTg3NV9BVkwgICAgICAgICAweDIwICAvKiBBdXhpbGFyeSB2b2x1bWUgZ2F1Y2hlICovCisjZGVmaW5lIFREQTk4NzVfQVZSICAgICAgICAgMHgyMSAgLyogQXV4aWxhcnkgdm9sdW1lIGRyb2l0ZSAqLworI2RlZmluZSBUREE5ODc1X0FCQSAgICAgICAgIDB4MjIgIC8qIEF1eGlsYXJ5IEJhc3NlICovCisjZGVmaW5lIFREQTk4NzVfQVRSICAgICAgICAgMHgyMyAgLyogQXV4aWxhcnkgdHJlYmxlICovCisKKyNkZWZpbmUgVERBOTg3NV9NU1IgICAgICAgICAweDAyICAvKiBNb25pdG9yIHNlbGVjdCByZWdpc3RlciAqLworI2RlZmluZSBUREE5ODc1X0MxTVNCICAgICAgIDB4MDMgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMU1JQiAgICAgICAweDA0ICAvKiBDYXJyaWVyIDEgKEZNKSBmcmVxdWVuY3kgcmVnaXN0ZXIgKDE2LThdYiAqLworI2RlZmluZSBUREE5ODc1X0MxTFNCICAgICAgIDB4MDUgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBMU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMk1TQiAgICAgICAweDA2ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTVNCICovCisjZGVmaW5lIFREQTk4NzVfQzJNSUIgICAgICAgMHgwNyAgLyogQ2FycmllciAyIChuaWNhbSkgZnJlcXVlbmN5IHJlZ2lzdGVyICgxNi04XWIgKi8KKyNkZWZpbmUgVERBOTg3NV9DMkxTQiAgICAgICAweDA4ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTFNCICovCisjZGVmaW5lIFREQTk4NzVfRENSICAgICAgICAgMHgwOSAgLyogRGVtb2R1bGF0ZXVyIGNvbmZpZ3VyYXRpb24gcmVnaXJ0ZXIqLworI2RlZmluZSBUREE5ODc1X0RFRU0gICAgICAgIDB4MGEgIC8qIEZNIGRlLWVtcGhhc2lzIHJlZ2lydGVyKi8KKyNkZWZpbmUgVERBOTg3NV9GTUFUICAgICAgICAweDBiICAvKiBGTSBNYXRyaXggcmVnaXJ0ZXIqLworCisvKiB2YWx1ZXMgKi8KKyNkZWZpbmUgVERBOTg3NV9NVVRFX09OCSAgICAweGZmIC8qIGdlbmVyYWwgbXV0ZSAqLworI2RlZmluZSBUREE5ODc1X01VVEVfT0ZGICAgIDB4Y2MgLyogZ2VuZXJhbCBubyBtdXRlICovCisKK3N0YXRpYyBpbnQgdGRhOTg3NV9pbml0aWFsaXplKHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCit7CisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0NGRywgMHhkMCk7IC8qcmVnIGRlIGNvbmZpZyAwIChyZXNldCkqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NU1IsIDB4MDMpOyAgICAvKiBNb25pdG9yIDBiMDAwMDBYWFgqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMU1TQiwgMHgwMCk7ICAvKkNhcjEoRk0pIE1TQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzFNSUIsIDB4MDApOyAgLypDYXIxKEZNKSBNSUIgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MxTFNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTFNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMk1TQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIE1TQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzJNSUIsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBNSUIgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MyTFNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTFNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9EQ1IsIDB4MDApOyAgICAvKkRlbW9kIGNvbmZpZyAweDAwKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfREVFTSwgMHg0NCk7ICAgLypERS1FbXBoIDBiMDEwMCAwMTAwKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfRk1BVCwgMHgwMCk7ICAgLypGTSBNYXRyaXggcmVnIDB4MDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9TQzEsIDB4MDApOyAgICAvKiBTQ0FSVCAxIChTQzEpKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfU0MyLCAweDAxKTsgICAgLyogU0NBUlQgMiAoc2MyKSovCisKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQ0gxViwgMHgxMCk7ICAvKiBDaGFubmVsIHZvbHVtZSAxIG11dGUqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DSDJWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDIgbXV0ZSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9EQUNPUywgMHgwMik7IC8qIHNpZyBEQUMgaS9vKGluOm5pY2FtKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FEQ0lTLCAweDZmKTsgLyogc2lnIEFEQyBpbnB1dChpbjptb25vKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0xPU1IsIDB4MDApOyAgLyogbGluZSBvdXQgKGluOm1vbm8pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQUVSLCAweDAwKTsgICAvKjA2IEVmZmVjdCAoQVZMK1BTRVVETykgKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTUNTLCAweDQ0KTsgICAvKiBNYWluIGNoIHNlbGVjdCAoREFDKSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NVkwsIDB4MDMpOyAgIC8qIFZvbCBNYWluIGxlZnQgMTBkQiAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NVlIsIDB4MDMpOyAgIC8qIFZvbCBNYWluIHJpZ2h0IDEwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NQkEsIDB4MDApOyAgIC8qIE1haW4gQmFzcyBNYWluIDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01UUiwgMHgwMCk7ICAgLyogTWFpbiBUcmVibGUgTWFpbiAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BQ1MsIDB4NDQpOyAgIC8qIEF1eCBjaGFuIHNlbGVjdCAoZGFjKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FWTCwgMHgwMCk7ICAgLyogVm9sIEF1eCBsZWZ0IDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FWUiwgMHgwMCk7ICAgLyogVm9sIEF1eCByaWdodCAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BQkEsIDB4MDApOyAgIC8qIEF1eCBCYXNzIE1haW4gMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVRSLCAweDAwKTsgICAvKiBBdXggQWlndXMgTWFpbiAwZEIqLworCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01VVCwgMHhjYyk7ICAgLyogR2VuZXJhbCBtdXRlICAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTk4NzVfdm9sdW1lKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSh2YWwgLyA2MDIgLSA4NCk7IH0KK3N0YXRpYyBpbnQgdGRhOTg3NV9iYXNzKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKShtYXgoLTEyLCB2YWwgLyAyMTE1IC0gMTUpKTsgfQorc3RhdGljIGludCB0ZGE5ODc1X3RyZWJsZShpbnQgdmFsKSB7IHJldHVybiAodW5zaWduZWQgY2hhcikodmFsIC8gMjYyMiAtIDEyKTsgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqICoKKyAqIGkyYyBpbnRlcmZhY2UgZnVuY3Rpb25zICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqICovCisKK3N0YXRpYyBpbnQgdGRhOTg3NV9jaGVja2l0KHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKKwlpbnQgZGljLCByZXY7CisKKwlkaWMgPSBjaGlwX3JlYWQyKGNoaXAsIDI1NCk7CisJcmV2ID0gY2hpcF9yZWFkMihjaGlwLCAyNTUpOworCisJaWYgKGRpYyA9PSAwIHx8IGRpYyA9PSAyKSB7IC8qIHRkYTk4NzUgYW5kIHRkYTk4NzVBICovCisJCXY0bDJfaW5mbyhzZCwgImZvdW5kIHRkYTk4NzUlcyByZXYuICVkLlxuIiwKKwkJCWRpYyA9PSAwID8gIiIgOiAiQSIsIHJldik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYXVkaW8gY2hpcCBkZXNjcmlwdGlvbnMgLSBkZWZpbmVzK2Z1bmN0aW9ucyBmb3IgdGVhNjQyMCAgICAgICAgICAgICAgICAqLwpAQCAtMTI4MCw2ICsxMzkwLDcgQEAKIHN0YXRpYyBpbnQgdGRhOTg1NSAgPSAxOwogc3RhdGljIGludCB0ZGE5ODczICA9IDE7CiBzdGF0aWMgaW50IHRkYTk4NzRhID0gMTsKK3N0YXRpYyBpbnQgdGRhOTg3NSAgPSAxOwogc3RhdGljIGludCB0ZWE2MzAwOwkvKiBkZWZhdWx0IDAgLSBhZGRyZXNzIGNsYXNoIHdpdGggbXNwMzR4eCAqLwogc3RhdGljIGludCB0ZWE2MzIwOwkvKiBkZWZhdWx0IDAgLSBhZGRyZXNzIGNsYXNoIHdpdGggbXNwMzR4eCAqLwogc3RhdGljIGludCB0ZWE2NDIwICA9IDE7CkBAIC0xMjkyLDYgKzE0MDMsNyBAQAogbW9kdWxlX3BhcmFtKHRkYTk4NTUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGRhOTg3MywgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZGE5ODc0YSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbSh0ZGE5ODc1LCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRlYTYzMDAsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGVhNjMyMCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZWE2NDIwLCBpbnQsIDA0NDQpOwpAQCAtMTM0OSw2ICsxNDYxLDI2IEBACiAJCS5zZXRtb2RlICAgID0gdGRhOTg3NGFfc2V0bW9kZSwKIAl9LAogCXsKKwkJLm5hbWUgICAgICAgPSAidGRhOTg3NSIsCisJCS5pbnNtb2RvcHQgID0gJnRkYTk4NzUsCisJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVERBOTg3NSA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1REQTk4NzUgPj4gMSwKKwkJLmZsYWdzICAgICAgPSBDSElQX0hBU19WT0xVTUUgfCBDSElQX0hBU19CQVNTVFJFQkxFLAorCisJCS8qIGNhbGxiYWNrcyAqLworCQkuaW5pdGlhbGl6ZSA9IHRkYTk4NzVfaW5pdGlhbGl6ZSwKKwkJLmNoZWNraXQgICAgPSB0ZGE5ODc1X2NoZWNraXQsCisJCS52b2xmdW5jICAgID0gdGRhOTg3NV92b2x1bWUsCisJCS5iYXNzZnVuYyAgID0gdGRhOTg3NV9iYXNzLAorCQkudHJlYmxlZnVuYyA9IHRkYTk4NzVfdHJlYmxlLAorCQkubGVmdHJlZyAgICA9IFREQTk4NzVfTVZMLAorCQkucmlnaHRyZWcgICA9IFREQTk4NzVfTVZSLAorCQkuYmFzc3JlZyAgICA9IFREQTk4NzVfTUJBLAorCQkudHJlYmxlcmVnICA9IFREQTk4NzVfTVRSLAorCQkubGVmdGluaXQgICA9IDU4ODgwLAorCQkucmlnaHRpbml0ICA9IDU4ODgwLAorCX0sCisJewogCQkubmFtZSAgICAgICA9ICJ0ZGE5ODUwIiwKIAkJLmluc21vZG9wdCAgPSAmdGRhOTg1MCwKIAkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODV4X0wgPj4gMSwKQEAgLTE1MTEsNiArMTY0Myw4IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSkKKwkJCWJyZWFrOwogCQljdHJsLT52YWx1ZT1jaGlwLT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CkBAIC0xNTUyLDYgKzE2ODYsOSBAQAogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkpCisJCQlicmVhazsKKwogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID49IDIpCiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJY2hpcC0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKQEAgLTE2MzYsMjEgKzE3NzMsMjYgQEAKIAogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOworCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0JcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgdHZhdWRpb19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcnQpCkBAIC0xNjU4LDcgKzE4MDAsOSBAQAogCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAotCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpIHx8IHJ0LT5pbnB1dCA+PSA0KQorCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpKQorCQlyZXR1cm4gMDsKKwlpZiAocnQtPmlucHV0ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIFRoZXJlIGFyZSBmb3VyIGlucHV0czogdHVuZXIsIHJhZGlvLCBleHRlcm4gYW5kIGludGVybi4gKi8KIAljaGlwLT5pbnB1dCA9IHJ0LT5pbnB1dDsKQEAgLTE2NzUsOCArMTgxOSwxMSBAQAogCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CiAJaW50IG1vZGUgPSAwOwogCisJaWYgKCFkZXNjLT5zZXRtb2RlKQorCQlyZXR1cm4gMDsKIAlpZiAoY2hpcC0+cmFkaW8pCiAJCXJldHVybiAwOworCiAJc3dpdGNoICh2dC0+YXVkbW9kZSkgewogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgpAQCAtMTY5Miw3ICsxODM5LDcgQEAKIAl9CiAJY2hpcC0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwogCi0JaWYgKGRlc2MtPnNldG1vZGUgJiYgbW9kZSkgeworCWlmIChtb2RlKSB7CiAJCWNoaXAtPndhdGNoX3N0ZXJlbyA9IDA7CiAJCS8qIGRlbF90aW1lcigmY2hpcC0+d3QpOyAqLwogCQljaGlwLT5tb2RlID0gbW9kZTsKQEAgLTE3MDcsMTUgKzE4NTQsMTcgQEAKIAlzdHJ1Y3QgQ0hJUERFU0MgKmRlc2MgPSBjaGlwLT5kZXNjOwogCWludCBtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKKwlpZiAoIWRlc2MtPmdldG1vZGUpCisJCXJldHVybiAwOwogCWlmIChjaGlwLT5yYWRpbykKIAkJcmV0dXJuIDA7CisKIAl2dC0+YXVkbW9kZSA9IGNoaXAtPmF1ZG1vZGU7CiAJdnQtPnJ4c3ViY2hhbnMgPSAwOwogCXZ0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKIAkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKIAotCWlmIChkZXNjLT5nZXRtb2RlKQotCQltb2RlID0gZGVzYy0+Z2V0bW9kZShjaGlwKTsKKwltb2RlID0gZGVzYy0+Z2V0bW9kZShjaGlwKTsKIAogCWlmIChtb2RlICYgVjRMMl9UVU5FUl9NT0RFX01PTk8pCiAJCXZ0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX01PTk87CkBAIC0xOTAxLDYgKzIwNTAsNyBAQAogCX0KIAogCWNoaXAtPnRocmVhZCA9IE5VTEw7CisJaW5pdF90aW1lcigmY2hpcC0+d3QpOwogCWlmIChkZXNjLT5mbGFncyAmIENISVBfTkVFRF9DSEVDS01PREUpIHsKIAkJaWYgKCFkZXNjLT5nZXRtb2RlIHx8ICFkZXNjLT5zZXRtb2RlKSB7CiAJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZwpAQCAtMTkxMCw3ICsyMDYwLDYgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIHN0YXJ0IGFzeW5jIHRocmVhZCAqLwotCQlpbml0X3RpbWVyKCZjaGlwLT53dCk7CiAJCWNoaXAtPnd0LmZ1bmN0aW9uID0gY2hpcF90aHJlYWRfd2FrZTsKIAkJY2hpcC0+d3QuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyljaGlwOwogCQljaGlwLT50aHJlYWQgPSBrdGhyZWFkX3J1bihjaGlwX3RocmVhZCwgY2hpcCwgY2xpZW50LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCA3ODI3N2FiLi5lMjRhMzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0yNjEsNyArMjYxLDEyIEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNV92MiJ9LAogCXsgVFVORVJfUEhJTElQU19UREE4MjkwLCAJIlBoaWxpcHMgMTgyNzFfODI5NSJ9LAogCS8qIDE1MC0xNTkgKi8KLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJYY2VpdmUgWEM1MDAwIn0sCisJeyBUVU5FUl9YQzUwMDAsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDNTAwMCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzMwMjhMIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiTlhQIDE4MjcxQzJfNzE2eCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzQwMDAifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJEaWJjb20gNzA3MCJ9LAorCXsgVFVORVJfUEhJTElQU19UREE4MjkwLCAgICAgICAgIk5YUCAxODI3MUMyIn0sCiB9OwogCiAvKiBVc2UgVjRMMl9JREVOVF9BTUJJR1VPVVMgZm9yIHRob3NlIGF1ZGlvICdjaGlwcycgdGhhdCBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKaW5kZXggOGUyM2FhNS4uNDI2MmU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKQEAgLTg2LDkgKzg2LDEyIEBACiAJc3RydWN0IHY0bDJfc3RhbmRhcmQgc3RhbmRhcmQ7CiB9OwogCitzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFsweDQwXTsKIC8qKgotICogc3RydWN0IHR2cDUxNHhfZGVjb2RlZCAtIFRWUDUxNDYvNDcgZGVjb2RlciBvYmplY3QKKyAqIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgLSBUVlA1MTQ2LzQ3IGRlY29kZXIgb2JqZWN0CiAgKiBAdjRsMl9pbnRfZGV2aWNlOiBTbGF2ZSBoYW5kbGUKKyAqIEB0dnA1MTR4X3NsYXZlOiBTbGF2ZSBwb2ludGVyIHdoaWNoIGlzIHVzZWQgYnkgQHY0bDJfaW50X2RldmljZQorICogQHR2cDUxNHhfcmVnczogY29weSBvZiBodydzIHJlZ3Mgd2l0aCBwcmVzZXQgdmFsdWVzLgogICogQHBkYXRhOiBCb2FyZCBzcGVjaWZpYwogICogQGNsaWVudDogSTJDIGNsaWVudCBkYXRhCiAgKiBAaWQ6IEVudHJ5IGZyb20gSTJDIHRhYmxlCkBAIC0xMDMsNyArMTA2LDkgQEAKICAqIEByb3V0ZTogaW5wdXQgYW5kIG91dHB1dCByb3V0aW5nIGF0IGNoaXAgbGV2ZWwKICAqLwogc3RydWN0IHR2cDUxNHhfZGVjb2RlciB7Ci0Jc3RydWN0IHY0bDJfaW50X2RldmljZSAqdjRsMl9pbnRfZGV2aWNlOworCXN0cnVjdCB2NGwyX2ludF9kZXZpY2UgdjRsMl9pbnRfZGV2aWNlOworCXN0cnVjdCB2NGwyX2ludF9zbGF2ZSB0dnA1MTR4X3NsYXZlOworCXN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ3NbQVJSQVlfU0laRSh0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHQpXTsKIAljb25zdCBzdHJ1Y3QgdHZwNTE0eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCkBAIC0xMjQsNyArMTI5LDcgQEAKIH07CiAKIC8qIFRWUDUxNHggZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdFtdID0geworc3RhdGljIHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHRbXSA9IHsKIAl7VE9LX1dSSVRFLCBSRUdfSU5QVVRfU0VMLCAweDA1fSwJLyogQ29tcG9zaXRlIHNlbGVjdGVkICovCiAJe1RPS19XUklURSwgUkVHX0FGRV9HQUlOX0NUUkwsIDB4MEZ9LAogCXtUT0tfV1JJVEUsIFJFR19WSURFT19TVEQsIDB4MDB9LAkvKiBBdXRvIG1vZGUgKi8KQEAgLTQyMiw3ICs0MjcsNyBAQAogCiAJLyogY29tbW9uIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCiAJZXJyID0KLQkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgdHZwNTE0eF9yZWdfbGlzdCk7CisJICAgIHR2cDUxNHhfd3JpdGVfcmVncyhkZWNvZGVyLT5jbGllbnQsIGRlY29kZXItPnR2cDUxNHhfcmVncyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTgwLDcgKzU4NSw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGk7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfVklERU9fU1REXS52YWwgPSBkZWNvZGVyLT5zdGRfbGlzdFtpXS52aWRlb19zdGQ7CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19WSURFT19TVERdLnZhbCA9CisJCWRlY29kZXItPnN0ZF9saXN0W2ldLnZpZGVvX3N0ZDsKIAogCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwgIlN0YW5kYXJkIHNldCB0bzogJXMiLAogCQkJZGVjb2Rlci0+c3RkX2xpc3RbaV0uc3RhbmRhcmQubmFtZSk7CkBAIC02MjUsOCArNjMxLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfSU5QVVRfU0VMXS52YWwgPSBpbnB1dF9zZWw7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfT1VUUFVUX0ZPUk1BVFRFUjFdLnZhbCA9IG91dHB1dF9zZWw7CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19JTlBVVF9TRUxdLnZhbCA9IGlucHV0X3NlbDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX09VVFBVVF9GT1JNQVRURVIxXS52YWwgPSBvdXRwdXRfc2VsOwogCiAJLyogQ2xlYXIgc3RhdHVzICovCiAJbXNsZWVwKExPQ0tfUkVUUllfREVMQVkpOwpAQCAtNjg2LDcgKzY5Miw3IEBACiAJCQlicmVhazsJLyogSW5wdXQgZGV0ZWN0ZWQgKi8KIAl9CiAKLQlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDwgMCkpCisJaWYgKChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkgfHwgKHRyeV9jb3VudCA8PSAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGN1cnJlbnRfc3RkOwpAQCAtNzE5LDEwICs3MjUsOSBAQAogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCS8qIEJyaWdodG5lc3Mgc3VwcG9ydGVkIGlzIHNhbWUgYXMgc3RhbmRhcmQgb25lICgwLTI1NSksCi0JCSAqIHNvIG1ha2UgdXNlIG9mIHN0YW5kYXJkIEFQSSBwcm92aWRlZC4KKwkJLyogQnJpZ2h0bmVzcyBzdXBwb3J0ZWQgaXMgKDAtMjU1KSwKIAkJICovCi0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDEyOCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgpAQCAtNzc5LDE2ICs3ODQsMTYgQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQlJJR0hUTkVTU10udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0NPTlRSQVNUXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19DT05UUkFTVF0udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfU0FUVVJBVElPTl0udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfU0FUVVJBVElPTl0udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19IVUVdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0hVRV0udmFsOwogCQlpZiAoY3RybC0+dmFsdWUgPT0gMHg3RikKIAkJCWN0cmwtPnZhbHVlID0gMTgwOwogCQllbHNlIGlmIChjdHJsLT52YWx1ZSA9PSAweDgwKQpAQCAtNzk4LDcgKzgwMyw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19BRkVfR0FJTl9DVFJMXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19BRkVfR0FJTl9DVFJMXS52YWw7CiAJCWlmICgoY3RybC0+dmFsdWUgJiAweDMpID09IDMpCiAJCQljdHJsLT52YWx1ZSA9IDE7CiAJCWVsc2UKQEAgLTg0OCw3ICs4NTMsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0JSSUdIVE5FU1NdLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0JSSUdIVE5FU1NdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7CkBAIC04NjEsNyArODY2LDcgQEAKIAkJCQl2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl0dnA1MTR4X3JlZ19saXN0W1JFR19DT05UUkFTVF0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQ09OVFJBU1RdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKQEAgLTg3NCw3ICs4NzksNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1NBVFVSQVRJT05dLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NBVFVSQVRJT05dLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAkJaWYgKHZhbHVlID09IDE4MCkKQEAgLTg5Myw3ICs4OTgsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0hVRV0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfSFVFXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKIAkJaWYgKHZhbHVlID09IDEpCkBAIC05MTAsNyArOTE1LDcgQEAKIAkJCQl2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl0dnA1MTR4X3JlZ19saXN0W1JFR19BRkVfR0FJTl9DVFJMXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19BRkVfR0FJTl9DVFJMXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCkBAIC0xMjc1LDcgKzEyODAsNyBAQAogCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwogCiAJLyogU2V0IGRlZmF1bHQgc3RhbmRhcmQgdG8gYXV0byAqLwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1ZJREVPX1NURF0udmFsID0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KIAkgICAgVklERU9fU1REX0FVVE9fU1dJVENIX0JJVDsKIAogCXJldHVybiB0dnA1MTR4X2NvbmZpZ3VyZShkZWNvZGVyKTsKQEAgLTEzNDQsMTEgKzEzNDksNiBAQAogCQkodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX3JvdXRpbmd9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX2ludF9zbGF2ZSB0dnA1MTR4X3NsYXZlID0gewotCS5pb2N0bHMgPSB0dnA1MTR4X2lvY3RsX2Rlc2MsCi0JLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfaW9jdGxfZGVzYyksCi19OwotCiBzdGF0aWMgc3RydWN0IHR2cDUxNHhfZGVjb2RlciB0dnA1MTR4X2RldiA9IHsKIAkuc3RhdGUgPSBTVEFURV9OT1RfREVURUNURUQsCiAKQEAgLTEzNjksMTcgKzEzNjksMTUgQEAKIAkuY3VycmVudF9zdGQgPSBTVERfTlRTQ19NSiwKIAkuc3RkX2xpc3QgPSB0dnA1MTR4X3N0ZF9saXN0LAogCS5udW1fc3RkcyA9IEFSUkFZX1NJWkUodHZwNTE0eF9zdGRfbGlzdCksCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlIHR2cDUxNHhfaW50X2RldmljZSA9IHsKLQkubW9kdWxlID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAotCS5wcml2ID0gJnR2cDUxNHhfZGV2LAotCS50eXBlID0gdjRsMl9pbnRfdHlwZV9zbGF2ZSwKLQkudSA9IHsKLQkgICAgICAuc2xhdmUgPSAmdHZwNTE0eF9zbGF2ZSwKLQkgICAgICB9LAorCS52NGwyX2ludF9kZXZpY2UgPSB7CisJCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAorCQkudHlwZSA9IHY0bDJfaW50X3R5cGVfc2xhdmUsCisJfSwKKwkudHZwNTE0eF9zbGF2ZSA9IHsKKwkJLmlvY3RscyA9IHR2cDUxNHhfaW9jdGxfZGVzYywKKwkJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfaW9jdGxfZGVzYyksCisJfSwKIH07CiAKIC8qKgpAQCAtMTM5MiwyNiArMTM5MCwzNyBAQAogc3RhdGljIGludAogdHZwNTE0eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9ICZ0dnA1MTR4X2RldjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyOwogCWludCBlcnI7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRUlPOwogCi0JZGVjb2Rlci0+cGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghZGVjb2Rlci0+cGRhdGEpIHsKKwlkZWNvZGVyID0ga3phbGxvYyhzaXplb2YoKmRlY29kZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlY29kZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCXY0bF9lcnIoY2xpZW50LCAiTm8gcGxhdGZvcm0gZGF0YSEhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQorCisJKmRlY29kZXIgPSB0dnA1MTR4X2RldjsKKwlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UucHJpdiA9IGRlY29kZXI7CisJZGVjb2Rlci0+cGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWRlY29kZXItPnY0bDJfaW50X2RldmljZS51LnNsYXZlID0gJmRlY29kZXItPnR2cDUxNHhfc2xhdmU7CisJbWVtY3B5KGRlY29kZXItPnR2cDUxNHhfcmVncywgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0LAorCQkJc2l6ZW9mKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCkpOwogCS8qCiAJICogRmV0Y2ggcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSwgYW5kIGNvbmZpZ3VyZSB0aGUKIAkgKiB0dnA1MTR4X3JlZ19saXN0W10gYWNjb3JkaW5nbHkuIFNpbmNlIHRoaXMgaXMgb25lCiAJICogdGltZSBjb25maWd1cmF0aW9uLCBubyBuZWVkIHRvIHByZXNlcnZlLgogCSAqLwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX09VVFBVVF9GT1JNQVRURVIyXS52YWwgfD0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX09VVFBVVF9GT1JNQVRURVIyXS52YWwgfD0KIAkJCShkZWNvZGVyLT5wZGF0YS0+Y2xrX3BvbGFyaXR5IDw8IDEpOwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1NZTkNfQ09OVFJPTF0udmFsIHw9CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19TWU5DX0NPTlRST0xdLnZhbCB8PQogCQkJKChkZWNvZGVyLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgMikgfAogCQkJKGRlY29kZXItPnBkYXRhLT52c19wb2xhcml0eSA8PCAzKSk7CiAJLyoKQEAgLTE0MTksMjMgKzE0MjgsMjcgQEAKIAkgKi8KIAlkZWNvZGVyLT5pZCA9IChzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKWlkOwogCS8qIEF0dGFjaCB0byBNYXN0ZXIgKi8KLQlzdHJjcHkodHZwNTE0eF9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywgZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7Ci0JZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlID0gJnR2cDUxNHhfaW50X2RldmljZTsKKwlzdHJjcHkoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywKKwkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOwogCWRlY29kZXItPmNsaWVudCA9IGNsaWVudDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggVjRMMiBsYXllciBhcyBzbGF2ZSBkZXZpY2UgKi8KLQllcnIgPSB2NGwyX2ludF9kZXZpY2VfcmVnaXN0ZXIoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKKwllcnIgPSB2NGwyX2ludF9kZXZpY2VfcmVnaXN0ZXIoJmRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CiAJaWYgKGVycikgewogCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAkJdjRsX2VycihjbGllbnQsCiAJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHRvIHY0bDIuIEVyclslZF1cbiIsIGVycik7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAl9IGVsc2UKIAkJdjRsX2luZm8oY2xpZW50LCAiUmVnaXN0ZXJlZCB0byB2NGwyIG1hc3RlciAlcyEhXG4iLAogCQkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOwotCiAJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCWtmcmVlKGRlY29kZXIpOworCXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMTQ1Miw5ICsxNDY1LDkgQEAKIAlpZiAoIWNsaWVudC0+YWRhcHRlcikKIAkJcmV0dXJuIC1FTk9ERVY7CS8qIG91ciBjbGllbnQgaXNuJ3QgYXR0YWNoZWQgKi8KIAotCXY0bDJfaW50X2RldmljZV91bnJlZ2lzdGVyKGRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CisJdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoJmRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0KKwlrZnJlZShkZWNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCmluZGV4IDJjZDY0ZWYuLjNhNWE5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZwNTE1MC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KQEAgLTYzMiw3ICs2MzEsNyBAQAogCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncyA9IHZiaV9yYW1fZGVmYXVsdDsKIAlpbnQgbGluZTsKIAotCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX3NsaWNlZF92YmlfY2FwXG4iKTsKIAltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7CiAKIAl3aGlsZSAocmVncy0+cmVnICE9ICh1MTYpLTEgKSB7CkBAIC04MzEsNyArODMwLDcgQEAKIAogc3RhdGljIGludCB0dnA1MTUwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19HX0NUUkwgY2FsbGVkXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX2N0cmwgY2FsbGVkXG4iKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC04NjEsNyArODYwLDcgQEAKIAkJaWYgKGN0cmwtPnZhbHVlIDwgdHZwNTE1MF9xY3RybFtpXS5taW5pbXVtIHx8CiAJCSAgICBjdHJsLT52YWx1ZSA+IHR2cDUxNTBfcWN0cmxbaV0ubWF4aW11bSkKIAkJCXJldHVybiAtRVJBTkdFOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJWSURJT0NfU19DVFJMOiBpZD0lZCwgdmFsdWU9JWRcbiIsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfY3RybDogaWQ9JWQsIHZhbHVlPSVkXG4iLAogCQkJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAl9CkBAIC0xMDE1LDcgKzEwMTQsNyBAQAogewogCWludCBpOwogCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX1FVRVJZQ1RSTCBjYWxsZWRcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInF1ZXJ5Y3RybCBjYWxsZWRcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHZwNTE1MF9xY3RybCk7IGkrKykKIAkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgewpAQCAtMTEyNiw3ICsxMTI1LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInR2cDUxNTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9UVlA1MTUwLAogCS5jb21tYW5kID0gdHZwNTE1MF9jb21tYW5kLAogCS5wcm9iZSA9IHR2cDUxNTBfcHJvYmUsCiAJLnJlbW92ZSA9IHR2cDUxNTBfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKaW5kZXggNTJjMDM1Ny4uYTM5OTQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC00NjAsOSArNDYwLDExIEBACiAJCQkgICB1OCBtYXNrLCB1OCBzZXQpCiB7CiAJczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOwogCiAJdmFsICY9IH5tYXNrOwotCXZhbCB8PSAgc2V0OworCXZhbCB8PSBzZXQgJiBtYXNrOwogCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kLCB2YWwpOwogfQpAQCAtNjM5LDggKzY0MSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCB0dzk5MTBfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgX191MzIgcGl4Zm10LAotCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CiAJaW50ICAgICAgICAgICAgICAgICByZXQgID0gLUVJTlZBTDsKQEAgLTczMSw4ICs3MzMsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0geworCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAorCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OworCWludCBpOworCisJLyoKKwkgKiBjaGVjayBjb2xvciBmb3JtYXQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KTsgaSsrKQorCQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSB0dzk5MTBfY29sb3JfZm10W2ldLmZvdXJjYykKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdHc5OTEwX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IHR3OTkxMF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKQEAgLTgyMCw2ICs4NDcsNyBAQAogCS5yZWxlYXNlCQk9IHR3OTkxMF9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IHR3OTkxMF9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gdHc5OTEwX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gdHc5OTEwX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IHR3OTkxMF9zZXRfZm10LAogCS50cnlfZm10CQk9IHR3OTkxMF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IHR3OTkxMF9zZXRfYnVzX3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKaW5kZXggZjQ1MjJiYi4uYzBhYzY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCkBAIC0xODcsMTEgKzE4Nyw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCB1cGQ2NDAzMWFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHVwZDY0MDMxYV9jb3JlX29wcyA9IHsKQEAgLTI2Nyw4ICsyNjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidXBkNjQwMzFhIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVVBENjQwMzFBLAotCS5jb21tYW5kID0gdXBkNjQwMzFhX2NvbW1hbmQsCiAJLnByb2JlID0gdXBkNjQwMzFhX3Byb2JlLAogCS5yZW1vdmUgPSB1cGQ2NDAzMWFfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHVwZDY0MDMxYV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwppbmRleCBhNWZiNzRiLi40MTBjOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCkBAIC0xNjQsMTEgKzE2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXBkNjQwODNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHVwZDY0MDgzX2NvcmVfb3BzID0gewpAQCAtMjM5LDggKzIzNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ1cGQ2NDA4MyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1VQRDY0MDgzLAotCS5jb21tYW5kID0gdXBkNjQwODNfY29tbWFuZCwKIAkucHJvYmUgPSB1cGQ2NDA4M19wcm9iZSwKIAkucmVtb3ZlID0gdXBkNjQwODNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHVwZDY0MDgzX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDJmMTEwNjMuLjhkNzM5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogewogCWludCBlcnI7CiAJY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZWM7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVuaW5pdGlhbGl6ZWRfdmFyKGZ3KTsKIAogCWVyciA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsICJ2aWNhbS9maXJtd2FyZS5mdyIsICZjYW0tPnVkZXYtPmRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKaW5kZXggOWU0ZjUwNi4uYTBmZWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC0zODEsOCArMzgwLDkgQEAKIAl1c2J2aXNpb24tPnNjcmF0Y2ggPSB2bWFsbG9jXzMyKHNjcmF0Y2hfYnVmX3NpemUpOwogCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKIAlpZih1c2J2aXNpb24tPnNjcmF0Y2ggPT0gTlVMTCkgewotCQllcnIoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHNjcmF0Y2giLAotCQkgICAgX19mdW5jX18sIHNjcmF0Y2hfYnVmX3NpemUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHNjcmF0Y2hcbiIsCisJCQkJX19mdW5jX18sIHNjcmF0Y2hfYnVmX3NpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00OTEsOCArNDkxLDkgQEAKIAlpbnQgSUZCX3NpemUgPSBNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogMyAvIDI7CiAJdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID0gdm1hbGxvY18zMihJRkJfc2l6ZSk7CiAJaWYgKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlciIsCi0JCSAgICBfX2Z1bmNfXywgSUZCX3NpemUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgZm9yIGNvbXByLiBmcmFtZSBidWZmZXJcbiIsCisJCQkJX19mdW5jX18sIElGQl9zaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXJldHVybiAwOwpAQCAtMTUxNCw4ICsxNTE1LDkgQEAKIAllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAKIAlpZihlcnJDb2RlKSB7Ci0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWQiLAotCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAl9CiAKIAlyZXR1cm47CkBAIC0xNTQ2LDcgKzE1NDgsOCBAQAogCQkJCTAsIChfX3UxNikgcmVnLCBidWZmZXIsIDEsIEhaKTsKIAogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBmYWlsZWQ6IGVycm9yICVkIiwgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCXJldHVybiBlcnJDb2RlOwogCX0KIAlyZXR1cm4gYnVmZmVyWzBdOwpAQCAtMTU3NCw3ICsxNTc3LDggQEAKIAkJCQlVU0JfUkVDSVBfRU5EUE9JTlQsIDAsIChfX3UxNikgcmVnLCAmdmFsdWUsIDEsIEhaKTsKIAogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBmYWlsZWQ6IGVycm9yICVkIiwgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJfQogCXJldHVybiBlcnJDb2RlOwogfQpAQCAtMTg1MCw3ICsxODU0LDggQEAKIAkJCQkgMCwgKF9fdTE2KSBVU0JWSVNJT05fTFhTSVpFX08sIHZhbHVlLCA0LCBIWik7CiAKIAkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQllcnIoIiVzIGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlcyBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCQlyZXR1cm4gZXJyQ29kZTsKIAkJfQogCQl1c2J2aXNpb24tPmN1cndpZHRoID0gdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoICogVXNiV2lkdGg7CkBAIC0yMjM2LDcgKzIyNDEsNyBAQAogCQkJICAgICAoX191MTYpIFVTQlZJU0lPTl9EUk1fUFJNMSwgdmFsdWUsIDgsIEhaKTsKIAogCWlmIChyYyA8IDApIHsKLQkJZXJyKCIlc0VSUk9SPSVkIiwgX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwgIiVzRVJST1I9JWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTI0MzIsOCArMjQzNyw5IEBACiAJCVBERUJVRyhEQkdfRlVOQywic2V0dGluZyBhbHRlcm5hdGUgJWQgd2l0aCB3TWF4UGFja2V0U2l6ZT0ldSIsIGRldi0+aWZhY2VBbHQsZGV2LT5pc29jUGFja2V0U2l6ZSk7CiAJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPmRldiwgZGV2LT5pZmFjZSwgZGV2LT5pZmFjZUFsdCk7CiAJCWlmIChlcnJDb2RlIDwgMCkgewotCQkJZXJyICgiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSkiLAotCQkJCQkJCWRldi0+aWZhY2VBbHQsIGVyckNvZGUpOworCQkJZGV2X2VycigmZGV2LT5kZXYtPmRldiwKKwkJCQkiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSlcbiIsCisJCQkJCWRldi0+aWZhY2VBbHQsIGVyckNvZGUpOwogCQkJcmV0dXJuIGVyckNvZGU7CiAJCX0KIAl9CkBAIC0yNDg0LDcgKzI0OTAsOCBAQAogCiAJCXVyYiA9IHVzYl9hbGxvY191cmIoVVNCVklTSU9OX1VSQl9GUkFNRVMsIEdGUF9LRVJORUwpOwogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWVycigiJXM6IHVzYl9hbGxvY191cmIoKSBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlczogdXNiX2FsbG9jX3VyYigpIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiID0gdXJiOwpAQCAtMjQ5Niw3ICsyNTAzLDcgQEAKIAkJdXJiLT5kZXYgPSBkZXY7CiAJCXVyYi0+Y29udGV4dCA9IHVzYnZpc2lvbjsKIAkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXNidmlzaW9uLT52aWRlb19lbmRwKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCQl1cmItPmludGVydmFsID0gMTsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhOwogCQl1cmItPmNvbXBsZXRlID0gdXNidmlzaW9uX2lzb2NJcnE7CkBAIC0yNTE2LDggKzI1MjMsOSBAQAogCQkJZXJyQ29kZSA9IHVzYl9zdWJtaXRfdXJiKHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYiwKIAkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKGVyckNvZGUpIHsKLQkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiKCVkKSBmYWlsZWQ6IGVycm9yICVkIiwKLQkJCSAgICBfX2Z1bmNfXywgYnVmSWR4LCBlcnJDb2RlKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiglZCkgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGJ1ZklkeCwgZXJyQ29kZSk7CiAJCX0KIAl9CiAKQEAgLTI1NjYsOCArMjU3NCw5IEBACiAJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2J2aXNpb24tPmRldiwgdXNidmlzaW9uLT5pZmFjZSwKIAkJCQkJICAgIHVzYnZpc2lvbi0+aWZhY2VBbHQpOwogCQlpZiAoZXJyQ29kZSA8IDApIHsKLQkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZCIsCi0JCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCQkiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCQkJdXNidmlzaW9uLT5sYXN0X2Vycm9yID0gZXJyQ29kZTsKIAkJfQogCQlyZWdWYWx1ZSA9ICgxNi11c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fQUxURVJfUkVHKSkgJiAweDBGOwpAQCAtMjYyMyw3ICsyNjMyLDcgQEAKIAl9CiAJcm91dGUuaW5wdXQgPSBtb2RlW2NoYW5uZWxdOwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCXVzYnZpc2lvbl9zZXRfYXVkaW8odXNidmlzaW9uLCBhdWRpb1tjaGFubmVsXSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggNmI2NmFlNC4uZGQyZjhmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMTE5LDcgKzExOSw4IEBACiAJCS8qIHRyeSBleHRlbmRlZCBhZGRyZXNzIGNvZGUuLi4gKi8KIAkJcmV0ID0gdHJ5X3dyaXRlX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOwogCQlpZiAocmV0ICE9IDEpIHsKLQkJCWVycigiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUsIHdoaWxlIHdyaXRpbmciKTsKKwkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsCisJCQkJImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLAl3aGlsZSB3cml0aW5nXG4iKTsKIAkJCXJldHVybiAtRVJFTU9URUlPOwogCQl9CiAJCWFkZFswXSA9IGFkZHI7CkBAIC0xMjgsNyArMTI5LDggQEAKIAkJCWFkZHIgfD0gMHgwMTsKIAkJCXJldCA9IHRyeV9yZWFkX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOwogCQkJaWYgKHJldCAhPSAxKSB7Ci0JCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgcmVhZGluZyIpOworCQkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsCisJCQkJCSJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgcmVhZGluZ1xuIik7CiAJCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCQl9CiAJCX0KQEAgLTIwMCw3MiArMjAyLDc4IEBACiB9OwogCiAKLS8qCi0gKiByZWdpc3RlcmluZyBmdW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUKLSAqLwotc3RhdGljIGludCB1c2J2aXNpb25faTJjX3VzYl9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlQREVCVUcoREJHX0kyQywgIkkyQyAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFtpMmNdIik7Ci0JUERFQlVHKERCR19JMkMsICJBTEdPICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKLQotCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KLQotCWFkYXAtPmFsZ28gPSAmdXNidmlzaW9uX2FsZ287Ci0KLQlhZGFwLT50aW1lb3V0ID0gMTAwOwkvKiBkZWZhdWx0IHZhbHVlcywgc2hvdWxkICAgICAgICovCi0JYWRhcC0+cmV0cmllcyA9IDM7CS8qIGJlIHJlcGxhY2VkIGJ5IGRlZmluZXMgICAgICAgKi8KLQotCWkyY19hZGRfYWRhcHRlcihhZGFwKTsKLQotCVBERUJVRyhEQkdfSTJDLCJpMmMgYnVzIGZvciAlcyByZWdpc3RlcmVkIiwgYWRhcC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHVzYnZpc2lvbiBzcGVjaWZpYyBJMkMgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcF90ZW1wbGF0ZTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50X3RlbXBsYXRlOwogCiBpbnQgdXNidmlzaW9uX2kyY19yZWdpc3RlcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogeworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzYWE3MTF4X2FkZHJzW10gPSB7CisJCTB4NGEgPj4gMSwgMHg0OCA+PiAxLAkvKiBTQUE3MTExLCBTQUE3MTExQSBhbmQgU0FBNzExMyAqLworCQkweDQyID4+IDEsIDB4NDAgPj4gMSwJLyogU0FBNzExNCwgU0FBNzExNSBhbmQgU0FBNzExOCAqLworCQlJMkNfQ0xJRU5UX0VORCB9OworCiAJbWVtY3B5KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmaTJjX2FkYXBfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKLQltZW1jcHkoJnVzYnZpc2lvbi0+aTJjX2NsaWVudCwgJmkyY19jbGllbnRfdGVtcGxhdGUsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCiAJc3ByaW50Zih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUgKyBzdHJsZW4odXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKSwKIAkJIiAjJWQiLCB1c2J2aXNpb24tPnZkZXYtPm51bSk7CiAJUERFQlVHKERCR19JMkMsIkFkYXB0ZXJuYW1lOiAlcyIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CiAJdXNidmlzaW9uLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnVzYnZpc2lvbi0+ZGV2LT5kZXY7CiAKLQlpMmNfc2V0X2FkYXBkYXRhKCZ1c2J2aXNpb24tPmkyY19hZGFwLCB1c2J2aXNpb24pOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmdXNidmlzaW9uLT5pMmNfY2xpZW50LCB1c2J2aXNpb24pOwotCi0JdXNidmlzaW9uLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmdXNidmlzaW9uLT5pMmNfYWRhcDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmdXNidmlzaW9uLT52NGwyX2Rldik7CiAKIAlpZiAodXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfTU9ERSwgVVNCVklTSU9OX0lJQ19MUk5BQ0spIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9yZWdpc3RlcjogY2FuJ3Qgd3JpdGUgcmVnXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUworCVBERUJVRyhEQkdfSTJDLCAiSTJDICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKKwlQREVCVUcoREJHX0kyQywgIkFMR08gICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOworCisJLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLworCisJdXNidmlzaW9uLT5pMmNfYWRhcC5hbGdvID0gJnVzYnZpc2lvbl9hbGdvOworCisJdXNidmlzaW9uLT5pMmNfYWRhcC50aW1lb3V0ID0gMTAwOwkvKiBkZWZhdWx0IHZhbHVlcywgc2hvdWxkICAgICAgICovCisJdXNidmlzaW9uLT5pMmNfYWRhcC5yZXRyaWVzID0gMzsJLyogYmUgcmVwbGFjZWQgYnkgZGVmaW5lcyAgICAgICAqLworCisJaTJjX2FkZF9hZGFwdGVyKCZ1c2J2aXNpb24tPmkyY19hZGFwKTsKKworCVBERUJVRyhEQkdfSTJDLCAiaTJjIGJ1cyBmb3IgJXMgcmVnaXN0ZXJlZCIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CisKIAkvKiBSZXF1ZXN0IHRoZSBsb2FkIG9mIHRoZSBpMmMgbW9kdWxlcyB3ZSBuZWVkICovCiAJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMpIHsKIAljYXNlIENPREVDX1NBQTcxMTM6Ci0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTE1Iik7Ci0JCWJyZWFrOwogCWNhc2UgQ09ERUNfU0FBNzExMToKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJzYWE3MTE1IiwKKwkJCQkic2FhNzExNV9hdXRvIiwgc2FhNzExeF9hZGRycyk7CiAJCWJyZWFrOwogCX0KIAlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlR1bmVyID09IDEpIHsKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JfQotI2VuZGlmCisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlOworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JcmV0dXJuIHVzYnZpc2lvbl9pMmNfdXNiX2FkZF9idXMoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCS8qIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGZvdW5kIGEgZGVtb2Qgb3Igbm90LCBzZWxlY3QKKwkJICAgdGhlIHR1bmVyIHR5cGUuICovCisJCXR5cGUgPSBzZCA/IEFERFJTX1RWX1dJVEhfREVNT0QgOiBBRERSU19UVjsKKworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKKworCQlpZiAodXNidmlzaW9uLT50dW5lcl90eXBlICE9IC0xKSB7CisJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX1JBRElPOworCQkJdHVuX3NldHVwLnR5cGUgPSB1c2J2aXNpb24tPnR1bmVyX3R5cGU7CisJCQl0dW5fc2V0dXAuYWRkciA9IHY0bDJfaTJjX3N1YmRldl9hZGRyKHNkKTsKKwkJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiBpbnQgdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCkBAIC0yNzgsNjcgKzI4Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLAotCQkgICAgICB2b2lkICphcmcpCi17Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmdXNidmlzaW9uLT5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwotCi0JdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0Jc3dpdGNoIChjbGllbnQtPmFkZHIgPDwgMSkgewotCQljYXNlIDB4NDIgPDwgMToKLQkJY2FzZSAweDQzIDw8IDE6Ci0JCWNhc2UgMHg0YSA8PCAxOgotCQljYXNlIDB4NGIgPDwgMToKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiB0ZGE5ODg3IGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MjoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTE0IGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0YToKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTEzIGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0ODoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTExIGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhhMDoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBlZXByb20gZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJewotCQkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7Ci0KLQkJCQlQREVCVUcoREJHX0kyQywiYXR0YWNoIGluZm9ybTogZGV0ZWN0ZWQgSTJDIGFkZHJlc3MgJXgiLCBjbGllbnQtPmFkZHIgPDwgMSk7Ci0JCQkJdXNidmlzaW9uLT50dW5lcl9hZGRyID0gY2xpZW50LT5hZGRyOwotCi0JCQkJaWYgKCh1c2J2aXNpb24tPmhhdmVfdHVuZXIpICYmICh1c2J2aXNpb24tPnR1bmVyX3R5cGUgIT0gLTEpKSB7Ci0JCQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87Ci0JCQkJCXR1bl9zZXR1cC50eXBlID0gdXNidmlzaW9uLT50dW5lcl90eXBlOwotCQkJCQl0dW5fc2V0dXAuYWRkciA9IHVzYnZpc2lvbi0+dHVuZXJfYWRkcjsKLQkJCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbjsKLQotCXVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCVBERUJVRyhEQkdfSTJDLCJ1c2J2aXNpb25bJWRdIGRldGFjaGVzICVzIiwgdXNidmlzaW9uLT5uciwgY2xpZW50LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogdXNidmlzaW9uX2kyY19yZWFkX21heDQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciBhZGRyLAogCQkgICAgIGNoYXIgKmJ1Ziwgc2hvcnQgbGVuKQpAQCAtNTExLDE0ICs0NTgsNiBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgICAgICAgPSAidXNidmlzaW9uIiwKLQkuaWQgICAgICAgICAgICAgICAgPSBJMkNfSFdfQl9CVDg0OCwgLyogRklYTUUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAotCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCi0JLmNsYXNzCQkgICA9IEkyQ19DTEFTU19UVl9BTkFMT0csCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZQkJPSAidXNidmlzaW9uIGludGVybmFsIiwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDI2MjJkZTAuLmZhNjJhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC0yMTIsNyArMjExLDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfSFVFOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaHVlLCBTX0lSVUdPLCBzaG93X2h1ZSwgTlVMTCk7CkBAIC0yMjcsNyArMjI2LDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CiAJY3RybC52YWx1ZSA9IDA7CiAJaWYodXNidmlzaW9uLT51c2VyKQotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjb250cmFzdCwgU19JUlVHTywgc2hvd19jb250cmFzdCwgTlVMTCk7CkBAIC0yNDIsNyArMjQxLDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08sIHNob3dfYnJpZ2h0bmVzcywgTlVMTCk7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTjsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKHNhdHVyYXRpb24sIFNfSVJVR08sIHNob3dfc2F0dXJhdGlvbiwgTlVMTCk7CkBAIC0zMjksNyArMzI4LDcgQEAKIAkJCXJldHVybjsKIAl9IHdoaWxlICgwKTsKIAotCWVycigiJXMgZXJyb3I6ICVkXG4iLCBfX2Z1bmNfXywgcmVzKTsKKwlkZXZfZXJyKCZ2ZGV2LT5kZXYsICIlcyBlcnJvcjogJWRcbiIsIF9fZnVuY19fLCByZXMpOwogfQogCiBzdGF0aWMgdm9pZCB1c2J2aXNpb25fcmVtb3ZlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCkBAIC00ODcsOCArNDg2LDkgQEAKIAkvKiBOVDEwMHggaGFzIGEgOC1iaXQgcmVnaXN0ZXIgc3BhY2UgKi8KIAllcnJDb2RlID0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZik7CiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IFZJRElPQ19EQkdfR19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCisJCQkiJXM6IFZJRElPQ19EQkdfR19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJlZy0+dmFsID0gZXJyQ29kZTsKQEAgLTUwNyw4ICs1MDcsOSBAQAogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwogCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZiwgcmVnLT52YWwpOwogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBWSURJT0NfREJHX1NfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZCIsCi0JCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+dmRldi0+ZGV2LAorCQkJIiVzOiBWSURJT0NfREJHX1NfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCXJldHVybiBlcnJDb2RlOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUyNCw4ICs1MjUsNyBAQAogCXN0cmxjcHkodmMtPmNhcmQsCiAJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Nb2RlbFN0cmluZywKIAkJc2l6ZW9mKHZjLT5jYXJkKSk7Ci0Jc3RybGNweSh2Yy0+YnVzX2luZm8sIGRldl9uYW1lKCZ1c2J2aXNpb24tPmRldi0+ZGV2KSwKLQkJc2l6ZW9mKHZjLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgodXNidmlzaW9uLT5kZXYsIHZjLT5idXNfaW5mbywgc2l6ZW9mKHZjLT5idXNfaW5mbykpOwogCXZjLT52ZXJzaW9uID0gVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OOwogCXZjLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfQVVESU8gfApAQCAtNjIxLDggKzYyMSw3IEBACiAJdXNidmlzaW9uLT50dm5vcm1JZD0qaWQ7CiAKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19TVEQsCi0JCQkgJnVzYnZpc2lvbi0+dHZub3JtSWQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfc3RkLCB1c2J2aXNpb24tPnR2bm9ybUlkKTsKIAltdXRleF91bmxvY2soJnVzYnZpc2lvbi0+bG9jayk7CiAJLyogcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGRlY29kZXIgKi8KIAl1c2J2aXNpb25fbXV4c2VsKHVzYnZpc2lvbiwgdXNidmlzaW9uLT5jdGxfaW5wdXQpOwpAQCAtNjQ0LDcgKzY0Myw3IEBACiAJCXN0cmNweSh2dC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAl9CiAJLyogTGV0IGNsaWVudHMgZmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc3RydWN0ICovCi0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX0dfVFVORVIsdnQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIGdfdHVuZXIsIHZ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU4LDcgKzY1Nyw3IEBACiAJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgdnQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBsZXQgY2xpZW50cyBoYW5kbGUgdGhpcyAqLwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TX1RVTkVSLHZ0KTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY4OSw3ICs2ODgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXVzYnZpc2lvbi0+ZnJlcSA9IGZyZXEtPmZyZXF1ZW5jeTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfRlJFUVVFTkNZLCBmcmVxKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZnJlcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5OCw3ICs2OTcsNiBAQAogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlpZih1c2J2aXNpb24tPnJhZGlvKSB7CiAJCXN0cmNweShhLT5uYW1lLCJSYWRpbyIpOwogCX0gZWxzZSB7CkBAIC03MjIsMTIgKzcyMCw4IEBACiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBpZD1jdHJsLT5pZDsKIAotCW1lbXNldChjdHJsLDAsc2l6ZW9mKCpjdHJsKSk7Ci0JY3RybC0+aWQ9aWQ7Ci0KLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1FVRVJZQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBxdWVyeWN0cmwsIGN0cmwpOwogCiAJaWYgKCFjdHJsLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczOSw3ICs3MzMsNyBAQAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCBjdHJsKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzQ4LDcgKzc0Miw3IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBzX2N0cmwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjMsOCArNzU3LDcgQEAKIAogCS8qIENoZWNrIGlucHV0IHZhbGlkaXR5OgogCSAgIHRoZSB1c2VyIG11c3QgZG8gYSBWSURFTyBDQVBUVVJFIGFuZCBNTUFQIG1ldGhvZC4gKi8KLQlpZigodnItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB8fAotCSAgICh2ci0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApKQorCWlmICh2ci0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX09uKSB7CkBAIC03ODksOSArNzgyLDYgQEAKIAogCS8qIEZJWE1FIDogbXVzdCBjb250cm9sCiAJICAgdGhhdCBidWZmZXJzIGFyZSBtYXBwZWQgKFZJRElPQ19SRVFCVUZTIGhhcyBiZWVuIGNhbGxlZCkgKi8KLQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODI1LDkgKzgxNSw2IEBACiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCiAJLyogRklYTUUgOiB3b3JrcyBvbmx5IG9uIFZJREVPX0NBUFRVUkUgTU9ERSwgTU1BUC4gKi8KLQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODYyLDkgKzg0OSw2IEBACiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLQlpZiAodmItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5vdXRxdWV1ZSkpKSB7CiAJCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fSWRsZSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtODk5LDEwICs4ODMsOSBAQAogc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBiPVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09uOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PTiAsICZiKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMSw3ICs4OTQsNiBAQAogCQkJICAgIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBiPVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MTksNyArOTAxLDcgQEAKIAlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKIAkJdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQodXNidmlzaW9uKTsKIAkJLyogU3RvcCBhbGwgdmlkZW8gc3RyZWFtaW5ncyAqLwotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfU1RSRUFNT0ZGICwgJmIpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJfQogCXVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcyh1c2J2aXNpb24pOwogCkBAIC05MzIsMTEgKzkxNCw4IEBACiAJaWYodmZkLT5pbmRleD49VVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUy0xKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl2ZmQtPmZsYWdzID0gMDsKLQl2ZmQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJc3RyY3B5KHZmZC0+ZGVzY3JpcHRpb24sdXNidmlzaW9uX3Y0bDJfZm9ybWF0W3ZmZC0+aW5kZXhdLmRlc2MpOwogCXZmZC0+cGl4ZWxmb3JtYXQgPSB1c2J2aXNpb25fdjRsMl9mb3JtYXRbdmZkLT5pbmRleF0uZm9ybWF0OwotCW1lbXNldCh2ZmQtPnJlc2VydmVkLCAwLCBzaXplb2YodmZkLT5yZXNlcnZlZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQyLDcgKzEwMjEsNyBAQAogCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nICE9IFN0cmVhbV9PbikgewogCQkvKiBubyBzdHJlYW0gaXMgcnVubmluZywgbWFrZSBpdCBydW5uaW5nICEgKi8KIAkJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247Ci0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PTiAsIE5VTEwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJfQogCiAJLyogVGhlbiwgZW5xdWV1ZSBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZQpAQCAtMTE4OSw3ICsxMTY4LDkgQEAKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJaWYgKHVzYnZpc2lvbi0+dXNlcikgewotCQllcnIoIiVzOiBTb21lb25lIHRyaWVkIHRvIG9wZW4gYW4gYWxyZWFkeSBvcGVuZWQgVVNCVmlzaW9uIFJhZGlvISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5yZGV2LT5kZXYsCisJCQkiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBVU0JWaXNpb24gUmFkaW8hXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJZXJyQ29kZSA9IC1FQlVTWTsKIAl9CiAJZWxzZSB7CkBAIC0xMjExLDcgKzExOTIsNyBAQAogCiAJCS8vIElmIHNvIGZhciBubyBlcnJvcnMgdGhlbiB3ZSBzaGFsbCBzdGFydCB0aGUgcmFkaW8KIAkJdXNidmlzaW9uLT5yYWRpbyA9IDE7Ci0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLEFVRENfU0VUX1JBRElPLCZ1c2J2aXNpb24tPnR1bmVyX3R5cGUpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX3JhZGlvKTsKIAkJdXNidmlzaW9uX3NldF9hdWRpbyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BVURJT19SQURJTyk7CiAJCXVzYnZpc2lvbi0+dXNlcisrOwogCX0KQEAgLTE0MTMsNyArMTM5NCw4IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAogCWlmICh1c2JfZGV2ID09IE5VTEwpIHsKLQkJZXJyKCIlczogdXNidmlzaW9uLT5kZXYgaXMgbm90IHNldCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCSIlczogdXNidmlzaW9uLT5kZXYgaXMgbm90IHNldFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE0MjMsNyArMTQwNSw3IEBACiAJfQogCSp2ZGV2ID0gKnZkZXZfdGVtcGxhdGU7CiAvLwl2ZGV2LT5taW5vciAgID0gLTE7Ci0JdmRldi0+cGFyZW50ICA9ICZ1c2JfZGV2LT5kZXY7CisJdmRldi0+djRsMl9kZXYgPSAmdXNidmlzaW9uLT52NGwyX2RldjsKIAlzbnByaW50Zih2ZGV2LT5uYW1lLCBzaXplb2YodmRldi0+bmFtZSksICIlcyIsIG5hbWUpOwogCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIHVzYnZpc2lvbik7CiAJcmV0dXJuIHZkZXY7CkBAIC0xNTI0LDcgKzE1MDYsOSBAQAogCXJldHVybiAwOwogCiAgZXJyX2V4aXQ6Ci0JZXJyKCJVU0JWaXNpb25bJWRdOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWQiLCB1c2J2aXNpb24tPm5yKTsKKwlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkiVVNCVmlzaW9uWyVkXTogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgZmFpbGVkXG4iLAorCQkJdXNidmlzaW9uLT5ucik7CiAJdXNidmlzaW9uX3VucmVnaXN0ZXJfdmlkZW8odXNidmlzaW9uKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNTQyLDMzICsxNTI2LDMwIEBACiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbjsKIAotCWlmICgodXNidmlzaW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl91c2J2aXNpb24pLCBHRlBfS0VSTkVMKSkgPT0KLQkgICAgTlVMTCkgewotCQlnb3RvIGVycl9leGl0OwotCX0KKwl1c2J2aXNpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiksIEdGUF9LRVJORUwpOworCWlmICh1c2J2aXNpb24gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAl1c2J2aXNpb24tPmRldiA9IGRldjsKKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmdXNidmlzaW9uLT52NGwyX2RldikpCisJCWdvdG8gZXJyX2ZyZWU7CiAKIAltdXRleF9pbml0KCZ1c2J2aXNpb24tPmxvY2spOwkvKiBhdmFpbGFibGUgKi8KIAogCS8vIHByZXBhcmUgY29udHJvbCB1cmIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgZHVyaW5nIGludGVycnVwdHMKIAl1c2J2aXNpb24tPmN0cmxVcmIgPSB1c2JfYWxsb2NfdXJiKFVTQlZJU0lPTl9VUkJfRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlpZiAodXNidmlzaW9uLT5jdHJsVXJiID09IE5VTEwpIHsKLQkJZ290byBlcnJfZXhpdDsKLQl9CisJaWYgKHVzYnZpc2lvbi0+Y3RybFVyYiA9PSBOVUxMKQorCQlnb3RvIGVycl91bnJlZzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2J2aXNpb24tPmN0cmxVcmJfd3EpOwogCiAJdXNidmlzaW9uX2luaXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOwogCiAJcmV0dXJuIHVzYnZpc2lvbjsKIAotZXJyX2V4aXQ6Ci0JaWYgKHVzYnZpc2lvbiAmJiB1c2J2aXNpb24tPmN0cmxVcmIpIHsKLQkJdXNiX2ZyZWVfdXJiKHVzYnZpc2lvbi0+Y3RybFVyYik7Ci0JfQotCWlmICh1c2J2aXNpb24pIHsKLQkJa2ZyZWUodXNidmlzaW9uKTsKLQl9CitlcnJfdW5yZWc6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdXNidmlzaW9uLT52NGwyX2Rldik7CitlcnJfZnJlZToKKwlrZnJlZSh1c2J2aXNpb24pOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNTk4LDYgKzE1NzksNyBAQAogCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5jdHJsVXJiKTsKIAl9CiAKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKIAlrZnJlZSh1c2J2aXNpb24pOwogCiAJUERFQlVHKERCR19QUk9CRSwgInN1Y2Nlc3MiKTsKQEAgLTE2NzUsMjAgKzE2NTcsMjAgQEAKIAl9CiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOwogCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlbmRwb2ludCkpIHsKLQkJZXJyKCIlczogaW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAorCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogaW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCFcbiIsCiAJCSAgICBfX2Z1bmNfXywgaWZudW0pOwotCQllcnIoIiVzOiBFbmRwb2ludCBhdHRyaWJ1dGVzICVkIiwKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IEVuZHBvaW50IGF0dHJpYnV0ZXMgJWQiLAogCQkgICAgX19mdW5jX18sIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF9kaXJfb3V0KGVuZHBvaW50KSkgewotCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsCisJCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50IVxuIiwKIAkJICAgIF9fZnVuY19fLCBpZm51bSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodXNidmlzaW9uID0gdXNidmlzaW9uX2FsbG9jKGRldikpID09IE5VTEwpIHsKLQkJZXJyKCIlczogY291bGRuJ3QgYWxsb2NhdGUgVVNCVmlzaW9uIHN0cnVjdCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGNvdWxkbid0IGFsbG9jYXRlIFVTQlZpc2lvbiBzdHJ1Y3RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNzExLDcgKzE2OTMsNyBAQAogCXVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIqCiAJCQkJCSAgICAgIHVzYnZpc2lvbi0+bnVtX2FsdCxHRlBfS0VSTkVMKTsKIAlpZiAodXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKLQkJZXJyKCJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAidXNidmlzaW9uOiBvdXQgb2YgbWVtb3J5IVxuIik7CiAJCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTczMyw4ICsxNzE1LDYgQEAKIAkJdXNidmlzaW9uLT50dW5lcl90eXBlID0gdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5UdW5lclR5cGU7CiAJfQogCi0JdXNidmlzaW9uLT50dW5lcl9hZGRyID0gQUREUl9VTlNFVDsKLQogCXVzYnZpc2lvbi0+RGV2TW9kZWwgPSBtb2RlbDsKIAl1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nID0gMDsKIAl1c2J2aXNpb24tPmlmYWNlID0gaWZudW07CkBAIC0xNzcyLDcgKzE3NTIsOCBAQAogCVBERUJVRyhEQkdfUFJPQkUsICIiKTsKIAogCWlmICh1c2J2aXNpb24gPT0gTlVMTCkgewotCQllcnIoIiVzOiB1c2JfZ2V0X2ludGZkYXRhKCkgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2JfZ2V0X2ludGZkYXRhKCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CkBAIC0xNzgyLDYgKzE3NjMsOCBAQAogCS8vIEF0IHRoaXMgdGltZSB3ZSBhc2sgdG8gY2FuY2VsIG91dHN0YW5kaW5nIFVSQnMKIAl1c2J2aXNpb25fc3RvcF9pc29jKHVzYnZpc2lvbik7CiAKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKKwogCWlmICh1c2J2aXNpb24tPnBvd2VyKSB7CiAJCXVzYnZpc2lvbl9pMmNfdW5yZWdpc3Rlcih1c2J2aXNpb24pOwogCQl1c2J2aXNpb25fcG93ZXJfb2ZmKHVzYnZpc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCmluZGV4IDIwZDdlYzYuLmY4ZDc0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgRHdhaW5lIEdhcmRlbiA8ZHdhaW5lZ2FyZGVuQHJvZ2Vycy5jb20+CiAgKgogICoKLSAqIFJlcG9ydCBwcm9ibGVtcyB0byB2NGwgTWFpbGluZ0xpc3QgOiBodHRwOi8vd3d3LnJlZGhhdC5jb20vbWFpbG1hbi9saXN0aW5mby92aWRlbzRsaW51eC1saXN0CisgKiBSZXBvcnQgcHJvYmxlbXMgdG8gdjRsIE1haWxpbmdMaXN0OiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKICAqCiAgKiBUaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHVzYnZpc2lvbiBkcml2ZXIgcHJvamVjdC4KICAqIFVwZGF0ZXMgdG8gZHJpdmVyIGNvbXBsZXRlZCBieSBEd2FpbmUgUC4gR2FyZGVuCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIApAQCAtMzU3LDEzICszNTcsMTMgQEAKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J2aXNpb25fdGFibGVbXTsKIAogc3RydWN0IHVzYl91c2J2aXNpb24geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OyAgICAgICAgIAkJCQkvKiBWaWRlbyBEZXZpY2UgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpyZGV2OyAgICAgICAgICAgICAgIAkJCS8qIFJhZGlvIERldmljZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaTsgCQkJCQkvKiBWQkkgRGV2aWNlICAgKi8KIAogCS8qIGkyYyBEZWNsYXJhdGlvbiBTZWN0aW9uKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKIAogCXN0cnVjdCB1cmIgKmN0cmxVcmI7CiAJdW5zaWduZWQgY2hhciBjdHJsVXJiQnVmZmVyWzhdOwpAQCAtMzc0LDcgKzM3NCw2IEBACiAJLyogY29uZmlndXJhdGlvbiBwYXJ0ICovCiAJaW50IGhhdmVfdHVuZXI7CiAJaW50IHR1bmVyX3R5cGU7Ci0JaW50IHR1bmVyX2FkZHI7CiAJaW50IGJyaWRnZVR5cGU7CQkJCQkJCS8vIE5UMTAwMywgTlQxMDA0LCBOVDEwMDUKIAlpbnQgcmFkaW87CiAJaW50IHZpZGVvX2lucHV0czsJCQkJCQkvLyAjIG9mIGlucHV0cwpAQCAtNDY0LDYgKzQ2Myw4IEBACiAJaW50IENvbXByQmxvY2tUeXBlc1s0XTsKIH07CiAKKyNkZWZpbmUgY2FsbF9hbGwodXNidmlzaW9uLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJnVzYnZpc2lvbi0+djRsMl9kZXYsIDAsIG8sIGYsICMjYXJncykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkZWZpbmVkIGluIHVzYnZpc2lvbi1pMmMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ3NSw3ICs0NzYsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIGludCB1c2J2aXNpb25faTJjX3JlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogaW50IHVzYnZpc2lvbl9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKLXZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CiAKIC8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGludCB1c2J2aXNpb25fcmVhZF9yZWcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciByZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggZDI1NzZmNi4uMGQ3ZTM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC03ODYsNyArNzg2LDcgQEAKIAltZW1zZXQodjRsMl9jdHJsLCAwLCBzaXplb2YgKnY0bDJfY3RybCk7CiAJdjRsMl9jdHJsLT5pZCA9IG1hcHBpbmctPmlkOwogCXY0bDJfY3RybC0+dHlwZSA9IG1hcHBpbmctPnY0bDJfdHlwZTsKLQlzdHJuY3B5KHY0bDJfY3RybC0+bmFtZSwgbWFwcGluZy0+bmFtZSwgc2l6ZW9mIHY0bDJfY3RybC0+bmFtZSk7CisJc3RybGNweSh2NGwyX2N0cmwtPm5hbWUsIG1hcHBpbmctPm5hbWUsIHNpemVvZiB2NGwyX2N0cmwtPm5hbWUpOwogCXY0bDJfY3RybC0+ZmxhZ3MgPSAwOwogCiAJaWYgKCEoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCBiMTI4NzMyLi4zOTk0MTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkJZm10ZGVzYyA9IHV2Y19mb3JtYXRfYnlfZ3VpZCgmYnVmZmVyWzVdKTsKIAogCQlpZiAoZm10ZGVzYyAhPSBOVUxMKSB7Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgZm10ZGVzYy0+bmFtZSwKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCBmbXRkZXNjLT5uYW1lLAogCQkJCXNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJZm9ybWF0LT5mY2MgPSBmbXRkZXNjLT5mY2M7CiAJCX0gZWxzZSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJc3RybmNweShmb3JtYXQtPm5hbWUsICJNSlBFRyIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIk1KUEVHIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCWZvcm1hdC0+ZmNjID0gVjRMMl9QSVhfRk1UX01KUEVHOwogCQlmb3JtYXQtPmZsYWdzID0gVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJCWZvcm1hdC0+YnBwID0gMDsKQEAgLTM2MywxMyArMzYzLDEzIEBACiAKIAkJc3dpdGNoIChidWZmZXJbOF0gJiAweDdmKSB7CiAJCWNhc2UgMDoKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiU0QtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiU0QtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIlNETC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQkJc3RybGNweShmb3JtYXQtPm5hbWUsICJTREwtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIkhELURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIkhELURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgdmlkZW9zdHJlYW1pbmciCkBAIC0zNzksNyArMzc5LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJc3RybmNhdChmb3JtYXQtPm5hbWUsIGJ1ZmZlcls4XSAmICgxIDw8IDcpID8gIiA2MEh6IiA6ICIgNTBIeiIsCisJCXN0cmxjYXQoZm9ybWF0LT5uYW1lLCBidWZmZXJbOF0gJiAoMSA8PCA3KSA/ICIgNjBIeiIgOiAiIDUwSHoiLAogCQkJc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAKIAkJZm9ybWF0LT5mY2MgPSBWNEwyX1BJWF9GTVRfRFY7CkBAIC0xNTI2LDcgKzE1MjYsNyBAQAogCXZkZXYtPm1pbm9yID0gLTE7CiAJdmRldi0+Zm9wcyA9ICZ1dmNfZm9wczsKIAl2ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0Jc3RybmNweSh2ZGV2LT5uYW1lLCBkZXYtPm5hbWUsIHNpemVvZiB2ZGV2LT5uYW1lKTsKKwlzdHJsY3B5KHZkZXYtPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIHZkZXYtPm5hbWUpOwogCiAJLyogU2V0IHRoZSBkcml2ZXIgZGF0YSBiZWZvcmUgY2FsbGluZyB2aWRlb19yZWdpc3Rlcl9kZXZpY2UsIG90aGVyd2lzZQogCSAqIHV2Y192NGwyX29wZW4gbWlnaHQgcmFjZSB1cy4KQEAgLTE2MjEsNyArMTYyMSw3IEBACiAJZGV2LT5xdWlya3MgPSBpZC0+ZHJpdmVyX2luZm8gfCB1dmNfcXVpcmtzX3BhcmFtOwogCiAJaWYgKHVkZXYtPnByb2R1Y3QgIT0gTlVMTCkKLQkJc3RybmNweShkZXYtPm5hbWUsIHVkZXYtPnByb2R1Y3QsIHNpemVvZiBkZXYtPm5hbWUpOworCQlzdHJsY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CiAJZWxzZQogCQlzbnByaW50ZihkZXYtPm5hbWUsIHNpemVvZiBkZXYtPm5hbWUsCiAJCQkiVVZDIENhbWVyYSAoJTA0eDolMDR4KSIsCkBAIC0xODMzLDYgKzE4MzMsMTUgQEAKIAkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwIH0sCisJLyogQWxjb3IgTWljcm8gQVUzODIwIChGdXR1cmUgQm95IFBDIFVTQiBXZWJjYW0pICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgwNThmLAorCSAgLmlkUHJvZHVjdAkJPSAweDM4MjAsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCiAJLyogQXBwbGUgQnVpbHQtSW4gaVNpZ2h0ICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODUyLDYgKzE4NjEsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKKwkvKiBWaU1pY3JvICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgwYWM4LAorCSAgLmlkUHJvZHVjdAkJPSAweDAwMDAsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfRklYX0JBTkRXSURUSCB9LAogCS8qIE1UNjIyNyAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApAQCAtMTg3OSw3ICsxODk3LDcgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKLQkvKiBBc3VzIEY5U0cgKi8KKwkvKiBTeW50ZWsgKEFzdXMgRjlTRykgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKIAkgIC5pZFZlbmRvcgkJPSAweDE3NGYsCkBAIC0xODk3LDYgKzE5MTUsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKKwkvKiBTeW50ZWsgKEpBT3RlY2ggU21hcnQgVGVybWluYWwpICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxNzRmLAorCSAgLmlkUHJvZHVjdAkJPSAweDhhMzQsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAogCS8qIExlbm92byBUaGlua3BhZCBTTDUwMCAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCmluZGV4IGM3MDVmMjQuLjIxZDg3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKQEAgLTI0LDI2ICsyNCwxOSBAQAogI2lmZGVmIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVYKIHN0YXRpYyBpbnQgdXZjX2lucHV0X2luaXQoc3RydWN0IHV2Y19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRldi0+dWRldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQljaGFyICpwaHlzID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoaW5wdXQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwaHlzID0ga21hbGxvYyg2ICsgc3RybGVuKHVkZXYtPmJ1cy0+YnVzX25hbWUpICsgc3RybGVuKHVkZXYtPmRldnBhdGgpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKHBoeXMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQlzcHJpbnRmKHBoeXMsICJ1c2ItJXMtJXMiLCB1ZGV2LT5idXMtPmJ1c19uYW1lLCB1ZGV2LT5kZXZwYXRoKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgZGV2LT5pbnB1dF9waHlzLCBzaXplb2YoZGV2LT5pbnB1dF9waHlzKSk7CisJc3RybGNhdChkZXYtPmlucHV0X3BoeXMsICIvYnV0dG9uIiwgc2l6ZW9mKGRldi0+aW5wdXRfcGh5cykpOwogCiAJaW5wdXQtPm5hbWUgPSBkZXYtPm5hbWU7Ci0JaW5wdXQtPnBoeXMgPSBwaHlzOwotCXVzYl90b19pbnB1dF9pZCh1ZGV2LCAmaW5wdXQtPmlkKTsKKwlpbnB1dC0+cGh5cyA9IGRldi0+aW5wdXRfcGh5czsKKwl1c2JfdG9faW5wdXRfaWQoZGV2LT51ZGV2LCAmaW5wdXQtPmlkKTsKIAlpbnB1dC0+ZGV2LnBhcmVudCA9ICZkZXYtPmludGYtPmRldjsKIAogCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CkBAIC01Nyw3ICs1MCw2IEBACiAKIGVycm9yOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKLQlrZnJlZShwaHlzKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCBkNjgxNTE5Li4yYTgwY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW51X2luZm8gPSAmbWFwcGluZy0+bWVudV9pbmZvW3F1ZXJ5X21lbnUtPmluZGV4XTsKLQlzdHJuY3B5KHF1ZXJ5X21lbnUtPm5hbWUsIG1lbnVfaW5mby0+bmFtZSwgMzIpOworCXN0cmxjcHkocXVlcnlfbWVudS0+bmFtZSwgbWVudV9pbmZvLT5uYW1lLCBzaXplb2YgcXVlcnlfbWVudS0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NiwxMCArNDg2LDEwIEBACiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7Ci0JCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ1dmN2aWRlbyIsIHNpemVvZiBjYXAtPmRyaXZlcik7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCB2ZGV2LT5uYW1lLCAzMik7Ci0JCXN0cm5jcHkoY2FwLT5idXNfaW5mbywgdmlkZW8tPmRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwKLQkJCXNpemVvZiBjYXAtPmJ1c19pbmZvKTsKKwkJc3RybGNweShjYXAtPmRyaXZlciwgInV2Y3ZpZGVvIiwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKKwkJc3RybGNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIHNpemVvZiBjYXAtPmNhcmQpOworCQl1c2JfbWFrZV9wYXRoKHZpZGVvLT5kZXYtPnVkZXYsCisJCQkgICAgICBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCQljYXAtPnZlcnNpb24gPSBEUklWRVJfVkVSU0lPTl9OVU1CRVI7CiAJCWlmICh2aWRlby0+c3RyZWFtaW5nLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQpAQCAtNjIwLDcgKzYyMCw3IEBACiAKIAkJbWVtc2V0KGlucHV0LCAwLCBzaXplb2YgKmlucHV0KTsKIAkJaW5wdXQtPmluZGV4ID0gaW5kZXg7Ci0JCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGl0ZXJtLT5uYW1lLCBzaXplb2YgaW5wdXQtPm5hbWUpOworCQlzdHJsY3B5KGlucHV0LT5uYW1lLCBpdGVybS0+bmFtZSwgc2l6ZW9mIGlucHV0LT5uYW1lKTsKIAkJaWYgKFVWQ19FTlRJVFlfVFlQRShpdGVybSkgPT0gSVRUX0NBTUVSQSkKIAkJCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAkJYnJlYWs7CkBAIC02NzMsMTYgKzY3MywyMiBAQAogCXsKIAkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOwogCQlzdHJ1Y3QgdXZjX2Zvcm1hdCAqZm9ybWF0OworCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZtdC0+dHlwZTsKKwkJX191MzIgaW5kZXggPSBmbXQtPmluZGV4OwogCiAJCWlmIChmbXQtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSB8fAogCQkgICAgZm10LT5pbmRleCA+PSB2aWRlby0+c3RyZWFtaW5nLT5uZm9ybWF0cykKIAkJCXJldHVybiAtRUlOVkFMOwogCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+aW5kZXggPSBpbmRleDsKKwkJZm10LT50eXBlID0gdHlwZTsKKwogCQlmb3JtYXQgPSAmdmlkZW8tPnN0cmVhbWluZy0+Zm9ybWF0W2ZtdC0+aW5kZXhdOwogCQlmbXQtPmZsYWdzID0gMDsKIAkJaWYgKGZvcm1hdC0+ZmxhZ3MgJiBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRCkKIAkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCQlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGZvcm1hdC0+bmFtZSwKKwkJc3RybGNweShmbXQtPmRlc2NyaXB0aW9uLCBmb3JtYXQtPm5hbWUsCiAJCQlzaXplb2YgZm10LT5kZXNjcmlwdGlvbik7CiAJCWZtdC0+ZGVzY3JpcHRpb25bc2l6ZW9mIGZtdC0+ZGVzY3JpcHRpb24gLSAxXSA9IDA7CiAJCWZtdC0+cGl4ZWxmb3JtYXQgPSBmb3JtYXQtPmZjYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggOWJjNDcwNS4uYTk1ZTE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZjX2ZpeHVwX2J1ZmZlcl9zaXplKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyB2b2lkIHV2Y19maXh1cF92aWRlb19jdHJsKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQ7CkBAIC04NCw2ICs4NCwzMSBAQAogCSAgICAgIHZpZGVvLT5kZXYtPnV2Y192ZXJzaW9uIDwgMHgwMTEwKSkKIAkJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKKworCWlmICh2aWRlby0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfRklYX0JBTkRXSURUSCAmJgorCSAgICB2aWRlby0+c3RyZWFtaW5nLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKKwkJdTMyIGludGVydmFsOworCQl1MzIgYmFuZHdpZHRoOworCisJCWludGVydmFsID0gKGN0cmwtPmR3RnJhbWVJbnRlcnZhbCA+IDEwMDAwMCkKKwkJCSA/IGN0cmwtPmR3RnJhbWVJbnRlcnZhbAorCQkJIDogZnJhbWUtPmR3RnJhbWVJbnRlcnZhbFswXTsKKworCQkvKiBDb21wdXRlIGEgYmFuZHdpZHRoIGVzdGltYXRpb24gYnkgbXVsdGlwbHlpbmcgdGhlIGZyYW1lCisJCSAqIHNpemUgYnkgdGhlIG51bWJlciBvZiB2aWRlbyBmcmFtZXMgcGVyIHNlY29uZCwgZGl2aWRlIHRoZQorCQkgKiByZXN1bHQgYnkgdGhlIG51bWJlciBvZiBVU0IgZnJhbWVzIChvciBtaWNyby1mcmFtZXMgZm9yCisJCSAqIGhpZ2gtc3BlZWQgZGV2aWNlcykgcGVyIHNlY29uZCBhbmQgYWRkIHRoZSBVVkMgaGVhZGVyIHNpemUKKwkJICogKGFzc3VtZWQgdG8gYmUgMTIgYnl0ZXMgbG9uZykuCisJCSAqLworCQliYW5kd2lkdGggPSBmcmFtZS0+d1dpZHRoICogZnJhbWUtPndIZWlnaHQgLyA4ICogZm9ybWF0LT5icHA7CisJCWJhbmR3aWR0aCAqPSAxMDAwMDAwMCAvIGludGVydmFsICsgMTsKKwkJYmFuZHdpZHRoIC89IDEwMDA7CisJCWlmICh2aWRlby0+ZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWJhbmR3aWR0aCAvPSA4OworCQliYW5kd2lkdGggKz0gMTI7CisKKwkJY3RybC0+ZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplID0gYmFuZHdpZHRoOworCX0KIH0KIAogc3RhdGljIGludCB1dmNfZ2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLApAQCAtMTU4LDEwICsxODMsMTEgQEAKIAkJY3RybC0+Yk1heFZlcnNpb24gPSAwOwogCX0KIAotCS8qIFNvbWUgYnJva2VuIGRldmljZXMgcmV0dXJuIGEgbnVsbCBvciB3cm9uZyBkd01heFZpZGVvRnJhbWVTaXplLgotCSAqIFRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGZvcm1hdCBhbmQgZnJhbWUgZGVzY3JpcHRvcnMuCisJLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXR1cm4gbnVsbCBvciB3cm9uZyBkd01heFZpZGVvRnJhbWVTaXplIGFuZAorCSAqIGR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZSBmaWVsZHMuIFRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlCisJICogZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4KIAkgKi8KLQl1dmNfZml4dXBfYnVmZmVyX3NpemUodmlkZW8sIGN0cmwpOworCXV2Y19maXh1cF92aWRlb19jdHJsKHZpZGVvLCBjdHJsKTsKIAlyZXQgPSAwOwogCiBvdXQ6CkBAIC01NDAsNiArNTY2LDkgQEAKIAl1OCAqbWVtOwogCWludCBsZW4sIHJldDsKIAorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCiAJbWVtID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSArPSBsZW47CkBAIC02OTksMjcgKzcyOCw0NyBAQAogICogYWxyZWFkeSBhbGxvY2F0ZWQgd2hlbiByZXN1bWluZyBmcm9tIHN1c3BlbmQsIGluIHdoaWNoIGNhc2UgaXQgd2lsbAogICogcmV0dXJuIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGJ1ZmZlcnMuCiAgKgotICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqIExpbWl0IHRoZSBidWZmZXIgc2l6ZSB0byBVVkNfTUFYX1BBQ0tFVFMgYnVsay9pc29jaHJvbm91cyBwYWNrZXRzLiBJZiB0aGUKKyAqIHN5c3RlbSBpcyB0b28gbG93IG9uIG1lbW9yeSB0cnkgc3VjY2Vzc2l2ZWx5IHNtYWxsZXIgbnVtYmVycyBvZiBwYWNrZXRzCisgKiB1bnRpbCBhbGxvY2F0aW9uIHN1Y2NlZWRzLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBwYWNrZXRzIG9uIHN1Y2Nlc3Mgb3IgMCB3aGVuIG91dCBvZiBtZW1vcnkuCiAgKi8KIHN0YXRpYyBpbnQgdXZjX2FsbG9jX3VyYl9idWZmZXJzKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKLQl1bnNpZ25lZCBpbnQgc2l6ZSkKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CisJdW5zaWduZWQgaW50IG5wYWNrZXRzOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogQnVmZmVycyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQsIGJhaWwgb3V0LiAqLwogCWlmICh2aWRlby0+dXJiX3NpemUpCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKLQkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKHZpZGVvLT5kZXYtPnVkZXYsCi0JCQlzaXplLCBHRlBfS0VSTkVMLCAmdmlkZW8tPnVyYl9kbWFbaV0pOwotCQlpZiAodmlkZW8tPnVyYl9idWZmZXJbaV0gPT0gTlVMTCkgewotCQkJdXZjX2ZyZWVfdXJiX2J1ZmZlcnModmlkZW8pOwotCQkJcmV0dXJuIC1FTk9NRU07CisJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhY2tldHMuIEJ1bGsgZW5kcG9pbnRzIG1pZ2h0IHRyYW5zZmVyIFVWQworCSAqIHBheWxvYWRzIGFjY3Jvc3MgbXVsdGlwbGUgVVJCcy4KKwkgKi8KKwlucGFja2V0cyA9IERJVl9ST1VORF9VUChzaXplLCBwc2l6ZSk7CisJaWYgKG5wYWNrZXRzID4gVVZDX01BWF9QQUNLRVRTKQorCQlucGFja2V0cyA9IFVWQ19NQVhfUEFDS0VUUzsKKworCS8qIFJldHJ5IGFsbG9jYXRpb25zIHVudGlsIG9uZSBzdWNjZWVkLiAqLworCWZvciAoOyBucGFja2V0cyA+IDE7IG5wYWNrZXRzIC89IDIpIHsKKwkJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKKwkJCXZpZGVvLT51cmJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYygKKwkJCQl2aWRlby0+ZGV2LT51ZGV2LCBwc2l6ZSAqIG5wYWNrZXRzLAorCQkJCWdmcF9mbGFncyB8IF9fR0ZQX05PV0FSTiwgJnZpZGVvLT51cmJfZG1hW2ldKTsKKwkJCWlmICghdmlkZW8tPnVyYl9idWZmZXJbaV0pIHsKKwkJCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaSA9PSBVVkNfVVJCUykgeworCQkJdmlkZW8tPnVyYl9zaXplID0gcHNpemUgKiBucGFja2V0czsKKwkJCXJldHVybiBucGFja2V0czsKIAkJfQogCX0KIAotCXZpZGVvLT51cmJfc2l6ZSA9IHNpemU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1MywyOSArODAyLDE5IEBACiB7CiAJc3RydWN0IHVyYiAqdXJiOwogCXVuc2lnbmVkIGludCBucGFja2V0cywgaSwgajsKLQlfX3UxNiBwc2l6ZTsKLQlfX3UzMiBzaXplOworCXUxNiBwc2l6ZTsKKwl1MzIgc2l6ZTsKIAotCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBpc29jaHJvbm91cyBwYWNrZXRzIHRvIGFsbG9jYXRlIGJ5IGRpdmlkaW5nCi0JICogdGhlIG1heGltdW0gdmlkZW8gZnJhbWUgc2l6ZSBieSB0aGUgcGFja2V0IHNpemUuIExpbWl0IHRoZSByZXN1bHQKLQkgKiB0byBVVkNfTUFYX0lTT19QQUNLRVRTLgotCSAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7Ci0KIAlzaXplID0gdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFZpZGVvRnJhbWVTaXplOwotCWlmIChzaXplID4gVVZDX01BWF9GUkFNRV9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKLQlpZiAobnBhY2tldHMgPiBVVkNfTUFYX0lTT19QQUNLRVRTKQotCQlucGFja2V0cyA9IFVWQ19NQVhfSVNPX1BBQ0tFVFM7CisJbnBhY2tldHMgPSB1dmNfYWxsb2NfdXJiX2J1ZmZlcnModmlkZW8sIHNpemUsIHBzaXplLCBnZnBfZmxhZ3MpOworCWlmIChucGFja2V0cyA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNpemUgPSBucGFja2V0cyAqIHBzaXplOwogCi0JaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWZvciAoaSA9IDA7IGkgPCBVVkNfVVJCUzsgKytpKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBhY2tldHMsIGdmcF9mbGFncyk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewpAQCAtODE0LDI1ICs4NTMsMjAgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGludCBwaXBlLCBpOwotCV9fdTE2IHBzaXplOwotCV9fdTMyIHNpemU7CisJdW5zaWduZWQgaW50IG5wYWNrZXRzLCBwaXBlLCBpOworCXUxNiBwc2l6ZTsKKwl1MzIgc2l6ZTsKIAotCS8qIENvbXB1dGUgdGhlIGJ1bGsgVVJCIHNpemUuIFNvbWUgZGV2aWNlcyBzZXQgdGhlIG1heGltdW0gcGF5bG9hZAotCSAqIHNpemUgdG8gYSB2YWx1ZSB0b28gaGlnaCBmb3IgbWVtb3J5LWNvbnN0cmFpbmVkIGRldmljZXMuIFdlIG11c3QKLQkgKiB0aGVuIHRyYW5zZmVyIHRoZSBwYXlsb2FkIGFjY3Jvc3MgbXVsdGlwbGUgVVJCcy4gVG8gYmUgY29uc2lzdGFudAotCSAqIHdpdGggaXNvY2hyb25vdXMgbW9kZSwgYWxsb2NhdGUgbWF4aW11bSBVVkNfTUFYX0lTT19QQUNLRVRTIHBlciBidWxrCi0JICogVVJCLgotCSAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpICYgMHgwN2ZmOwogCXNpemUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdHJsLmR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZTsKIAl2aWRlby0+YnVsay5tYXhfcGF5bG9hZF9zaXplID0gc2l6ZTsKLQlpZiAoc2l6ZSA+IHBzaXplICogVVZDX01BWF9JU09fUEFDS0VUUykKLQkJc2l6ZSA9IHBzaXplICogVVZDX01BWF9JU09fUEFDS0VUUzsKIAotCWlmICh1dmNfYWxsb2NfdXJiX2J1ZmZlcnModmlkZW8sIHNpemUpIDwgMCkKKwlucGFja2V0cyA9IHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSwgcHNpemUsIGdmcF9mbGFncyk7CisJaWYgKG5wYWNrZXRzID09IDApCiAJCXJldHVybiAtRU5PTUVNOwogCisJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CisKIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZXAtPmRlc2MpKQogCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHZpZGVvLT5kZXYtPnVkZXYsCiAJCQkJICAgICAgIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwpAQCAtMTAyMSwxMSArMTA1NSwyMCBAQAogCSAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKHZpZGVvLT5kZXYtPnVkZXYsIHZpZGVvLT5zdHJlYW1pbmctPmludGZudW0sIDApOwogCi0JLyogU29tZSB3ZWJjYW1zIGRvbid0IHN1cG9ydCBHRVRfREVGIHJlcXVlc3RzIG9uIHRoZSBwcm9iZSBjb250cm9sLiBXZQotCSAqIGZhbGwgYmFjayB0byBHRVRfQ1VSIGlmIEdFVF9ERUYgZmFpbHMuCisJLyogU2V0IHRoZSBzdHJlYW1pbmcgcHJvYmUgY29udHJvbCB3aXRoIGRlZmF1bHQgc3RyZWFtaW5nIHBhcmFtZXRlcnMKKwkgKiByZXRyaWV2ZWQgZnJvbSB0aGUgZGV2aWNlLiBXZWJjYW1zIHRoYXQgZG9uJ3Qgc3Vwb3J0IEdFVF9ERUYKKwkgKiByZXF1ZXN0cyBvbiB0aGUgcHJvYmUgY29udHJvbCB3aWxsIGp1c3Qga2VlcCB0aGVpciBjdXJyZW50IHN0cmVhbWluZworCSAqIHBhcmFtZXRlcnMuCiAJICovCi0JaWYgKChyZXQgPSB1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfREVGKSkgPCAwICYmCi0JICAgIChyZXQgPSB1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfQ1VSKSkgPCAwKQorCWlmICh1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfREVGKSA9PSAwKQorCQl1dmNfc2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzIHdpdGggdGhlIHByb2JlIGNvbnRyb2wgY3VycmVudAorCSAqIHZhbHVlLiBUaGlzIG1ha2VzIHN1cmUgU0VUX0NVUiByZXF1ZXN0cyBvbiB0aGUgc3RyZWFtaW5nIGNvbW1pdAorCSAqIGNvbnRyb2wgd2lsbCBhbHdheXMgdXNlIHZhbHVlcyByZXRyaWV2ZWQgZnJvbSBhIHN1Y2Nlc3NmdWwgR0VUX0NVUgorCSAqIHJlcXVlc3Qgb24gdGhlIHByb2JlIGNvbnRyb2wsIGFzIHJlcXVpcmVkIGJ5IHRoZSBVVkMgc3BlY2lmaWNhdGlvbi4KKwkgKi8KKwlpZiAoKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9DVVIpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBDaGVjayBpZiB0aGUgZGVmYXVsdCBmb3JtYXQgZGVzY3JpcHRvciBleGlzdHMuIFVzZSB0aGUgZmlyc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCmluZGV4IDAyNzk0N2UuLmU1MDE0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaApAQCAtMjk2LDEwICsyOTYsOCBAQAogCiAvKiBOdW1iZXIgb2YgaXNvY2hyb25vdXMgVVJCcy4gKi8KICNkZWZpbmUgVVZDX1VSQlMJCTUKLS8qIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgcGVyIGlzb2Nocm9ub3VzIFVSQi4gKi8KLSNkZWZpbmUgVVZDX01BWF9JU09fUEFDS0VUUwk0MAotLyogTWF4aW11bSBmcmFtZSBzaXplIGluIGJ5dGVzLCBmb3Igc2FuaXR5IGNoZWNraW5nLiAqLwotI2RlZmluZSBVVkNfTUFYX0ZSQU1FX1NJWkUJKDE2KjEwMjQqMTAyNCkKKy8qIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgcGVyIFVSQi4gKi8KKyNkZWZpbmUgVVZDX01BWF9QQUNLRVRTCQkzMgogLyogTWF4aW11bSBudW1iZXIgb2YgdmlkZW8gYnVmZmVycy4gKi8KICNkZWZpbmUgVVZDX01BWF9WSURFT19CVUZGRVJTCTMyCiAvKiBNYXhpbXVtIHN0YXR1cyBidWZmZXIgc2l6ZSBpbiBieXRlcyBvZiBpbnRlcnJ1cHQgVVJCLiAqLwpAQCAtMzE2LDYgKzMxNCw3IEBACiAjZGVmaW5lIFVWQ19RVUlSS19TVFJFQU1fTk9fRklECQkweDAwMDAwMDEwCiAjZGVmaW5lIFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVAkweDAwMDAwMDIwCiAjZGVmaW5lIFVWQ19RVUlSS19QUlVORV9DT05UUk9MUwkweDAwMDAwMDQwCisjZGVmaW5lIFVWQ19RVUlSS19GSVhfQkFORFdJRFRICQkweDAwMDAwMDgwCiAKIC8qIEZvcm1hdCBmbGFncyAqLwogI2RlZmluZSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRAkJMHgwMDAwMDAwMQpAQCAtNjQ5LDYgKzY0OCw3IEBACiAJc3RydWN0IHVyYiAqaW50X3VyYjsKIAlfX3U4ICpzdGF0dXM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJY2hhciBpbnB1dF9waHlzWzY0XTsKIAogCS8qIFZpZGVvIFN0cmVhbWluZyBpbnRlcmZhY2VzICovCiAJc3RydWN0IGxpc3RfaGVhZCBzdHJlYW1pbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggYjhmMmJlOC4uMWRhOGNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMzM0LDYgKzMzNCwxMiBAQAogCQkiQXBlcnR1cmUgUHJpb3JpdHkgTW9kZSIsCiAJCU5VTEwKIAl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcmZ4W10gPSB7CisJCSJOb25lIiwKKwkJIkJsYWNrICYgV2hpdGUiLAorCQkiU2VwaWEiLAorCQlOVUxMCisJfTsKIAogCXN3aXRjaCAoaWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CkBAIC0zNzAsNiArMzc2LDggQEAKIAkJCXJldHVybiBjYW1lcmFfcG93ZXJfbGluZV9mcmVxdWVuY3k7CiAJCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJCXJldHVybiBjYW1lcmFfZXhwb3N1cmVfYXV0bzsKKwkJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgorCQkJcmV0dXJuIGNvbG9yZng7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0zODIsMTYgKzM5MCwxNiBAQAogCXN3aXRjaCAoaWQpIHsKIAkvKiBVU0VSIGNvbnRyb2xzICovCiAJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJCXJldHVybiAiVXNlciBDb250cm9scyI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6IAkJcmV0dXJuICJWb2x1bWUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCQlyZXR1cm4gIkJhbGFuY2UiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzogCQlyZXR1cm4gIkJhc3MiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOiAJCXJldHVybiAiVHJlYmxlIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJCXJldHVybiAiTG91ZG5lc3MiOwogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCQlyZXR1cm4gIkJyaWdodG5lc3MiOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IAkJcmV0dXJuICJDb250cmFzdCI7CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJCXJldHVybiAiU2F0dXJhdGlvbiI7CiAJY2FzZSBWNEwyX0NJRF9IVUU6IAkJCXJldHVybiAiSHVlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCQlyZXR1cm4gIlZvbHVtZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJCXJldHVybiAiQmFsYW5jZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJCXJldHVybiAiQmFzcyI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAkJcmV0dXJuICJUcmVibGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAkJcmV0dXJuICJMb3VkbmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9CTEFDS19MRVZFTDoJCXJldHVybiAiQmxhY2sgTGV2ZWwiOwogCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOglyZXR1cm4gIldoaXRlIEJhbGFuY2UsIEF1dG9tYXRpYyI7CiAJY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOgkJcmV0dXJuICJEbyBXaGl0ZSBCYWxhbmNlIjsKQEAgLTQxMiw2ICs0MjAsNyBAQAogCWNhc2UgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTjoJcmV0dXJuICJCYWNrbGlnaHQgQ29tcGVuc2F0aW9uIjsKIAljYXNlIFY0TDJfQ0lEX0NIUk9NQV9BR0M6CQlyZXR1cm4gIkNocm9tYSBBR0MiOwogCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgkJcmV0dXJuICJDb2xvciBLaWxsZXIiOworCWNhc2UgVjRMMl9DSURfQ09MT1JGWDoJCQlyZXR1cm4gIkNvbG9yIEVmZmVjdHMiOwogCiAJLyogTVBFRyBjb250cm9scyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzogCQlyZXR1cm4gIk1QRUcgRW5jb2RlciBDb250cm9scyI7CkBAIC00OTAsMTYgKzQ5OSwyNSBAQAogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAljYXNlIFY0TDJfQ0lEX0hVRV9BVVRPOgorCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKKwljYXNlIFY0TDJfQ0lEX0NPTE9SX0tJTExFUjoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOgogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWToKKwljYXNlIFY0TDJfQ0lEX0ZPQ1VTX0FVVE86CiAJY2FzZSBWNEwyX0NJRF9QUklWQUNZOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CiAJCW1pbiA9IDA7CiAJCW1heCA9IHN0ZXAgPSAxOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRVNFVDoKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CisJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OOworCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJbWluID0gbWF4ID0gc3RlcCA9IGRlZiA9IDA7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgpAQCAtNTE3LDYgKzUzNSw3IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlU7CiAJCXN0ZXAgPSAxOwogCQlicmVhazsKQEAgLTU0NywxNjEgKzU2NiwyOSBAQAogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFOgorCWNhc2UgVjRMMl9DSURfRk9DVVNfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgorCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJYnJlYWs7CiAJfQogCXFjdHJsLT5taW5pbXVtID0gbWluOwogCXFjdHJsLT5tYXhpbXVtID0gbWF4OwogCXFjdHJsLT5zdGVwID0gc3RlcDsKIAlxY3RybC0+ZGVmYXVsdF92YWx1ZSA9IGRlZjsKIAlxY3RybC0+cmVzZXJ2ZWRbMF0gPSBxY3RybC0+cmVzZXJ2ZWRbMV0gPSAwOwotCXNucHJpbnRmKHFjdHJsLT5uYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpLCBuYW1lKTsKKwlzdHJsY3B5KHFjdHJsLT5uYW1lLCBuYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGwpOwogCi0vKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnljdHJsIHdpdGggc3RhbmRhcmQgdmFsdWVzIGJhc2VkIG9uCi0gICB0aGUgY29udHJvbCBJRC4gKi8KLWludCB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKLXsKLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCS8qIFVTRVIgY29udHJvbHMgKi8KLQljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDAsIDAsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMTI4KTsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxMjcsIDEsIDY0KTsKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAtMTI4LCAxMjcsIDEsIDApOwotCi0JLyogTVBFRyBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDAsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2Syk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySywKLQkJCQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMjBLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MkspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCA2NDAwLCAxLCAzMjAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzE2LCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORSwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3LCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FLAotCQkJCVY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAzMywgMSwgMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDEsIDM0LCAxLCAxMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDEpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA2MDAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA4MDAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjogIC8qIEluaXQgWVVWIChyZWFsbHkgWUNiQ3IpIHRvIGJsYWNrICovCi0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIDEsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMTYpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI2MCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU2KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU5KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYsIDEsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKTsKLQogLyogRmlsbCBpbiBhIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSBiYXNlZCBvbiB0aGUgc3RydWN0IHY0bDJfcXVlcnljdHJsIGFuZAogICAgdGhlIG1lbnUuIFRoZSBxY3RybCBwb2ludGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIGlnbm9yZWQuCiAgICBJZiBtZW51X2l0ZW1zIGlzIE5VTEwsIHRoZW4gdGhlIG1lbnUgaXRlbXMgYXJlIHJldHJpZXZlZCB1c2luZwpAQCAtNzIwLDcgKzYwNyw3IEBACiAJZm9yIChpID0gMDsgaSA8IHFtZW51LT5pbmRleCAmJiBtZW51X2l0ZW1zW2ldOyBpKyspIDsKIAlpZiAobWVudV9pdGVtc1tpXSA9PSBOVUxMIHx8IG1lbnVfaXRlbXNbaV1bMF0gPT0gJ1wwJykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc25wcmludGYocW1lbnUtPm5hbWUsIHNpemVvZihxbWVudS0+bmFtZSksIG1lbnVfaXRlbXNbcW1lbnUtPmluZGV4XSk7CisJc3RybGNweShxbWVudS0+bmFtZSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdLCBzaXplb2YocW1lbnUtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X21lbnUpOwpAQCAtNzM3LDggKzYyNCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXdoaWxlICgqaWRzICE9IFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQpIHsKIAkJaWYgKCppZHMrKyA9PSBxbWVudS0+aW5kZXgpIHsKLQkJCXNucHJpbnRmKHFtZW51LT5uYW1lLCBzaXplb2YocW1lbnUtPm5hbWUpLAotCQkJCSAgICAgICBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0pOworCQkJc3RybGNweShxbWVudS0+bmFtZSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdLAorCQkJCQlzaXplb2YocW1lbnUtPm5hbWUpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNzQ5LDcgKzYzNiw3IEBACiAvKiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycywgdGhlIGxhc3QgZWxlbWVudCBpcwogICAgYSBOVUxMIHBvaW50ZXIuIEVhY2ggdTMyIGFycmF5IGlzIGEgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLgogICAgRWFjaCBhcnJheSBtdXN0IGJlIHNvcnRlZCBsb3cgdG8gaGlnaCBhbmQgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wKLSAgIGNsYXNzLiBUaGUgYXJyYXkgb2YgdTMyIHBvaW50ZXIgbXVzdCBhbHNvIGJlIHNvcnRlZCwgZnJvbSBsb3cgY2xhc3MgSURzCisgICBjbGFzcy4gVGhlIGFycmF5IG9mIHUzMiBwb2ludGVycyBtdXN0IGFsc28gYmUgc29ydGVkLCBmcm9tIGxvdyBjbGFzcyBJRHMKICAgIHRvIGhpZ2ggY2xhc3MgSURzLgogCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IElEIHRoYXQgZm9sbG93cyBhZnRlciB0aGUgZ2l2ZW4gSUQuCkBAIC05MTAsMTAgKzc5NywxMCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwogCiAJQlVHX09OKCFkZXYpOwotI2lmZGVmIE1PRFVMRQorCiAJaWYgKG1vZHVsZV9uYW1lKQogCQlyZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZSk7Ci0jZW5kaWYKKwogCS8qIFNldHVwIHRoZSBpMmMgYm9hcmQgaW5mbyB3aXRoIHRoZSBkZXZpY2UgdHlwZSBhbmQKIAkgICB0aGUgZGV2aWNlIGFkZHJlc3MuICovCiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwpAQCAtOTI3LDExICs4MTQsMTEgQEAKIAkgICBXZSBuZWVkIGJldHRlciBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbCBzbyB0aGF0IHdlCiAJICAgY2FuIGVhc2lseSB3YWl0IGZvciB0aGUgbG9hZCB0byBmaW5pc2guICovCiAJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycm9yOwogCiAJLyogTG9jayB0aGUgbW9kdWxlIHNvIHdlIGNhbiBzYWZlbHkgZ2V0IHRoZSB2NGwyX3N1YmRldiBwb2ludGVyICovCiAJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAJc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHY0bDJfZGV2aWNlIHdoaWNoIGluY3JlYXNlcyB0aGUgbW9kdWxlJ3MKQEAgLTk0MCw4ICs4MjcsMTMgQEAKIAkJc2QgPSBOVUxMOwogCS8qIERlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50IHRvIG1hdGNoIHRoZSBmaXJzdCB0cnlfbW9kdWxlX2dldC4gKi8KIAltb2R1bGVfcHV0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCXJldHVybiBzZDsKIAorZXJyb3I6CisJLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAorCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLworCWlmIChjbGllbnQgJiYgc2QgPT0gTlVMTCkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJcmV0dXJuIHNkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3N1YmRldik7CiAKQEAgLTk1OCwxMCArODUwLDEwIEBACiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAKIAlCVUdfT04oIWRldik7Ci0jaWZkZWYgTU9EVUxFCisKIAlpZiAobW9kdWxlX25hbWUpCiAJCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKLSNlbmRpZgorCiAJLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAogCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC05NzQsMTEgKzg2NiwxMSBAQAogCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKIAkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KIAlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAKIAkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncwpAQCAtOTg3LDggKzg3OSw1OSBAQAogCQlzZCA9IE5VTEw7CiAJLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLwogCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7CisKK2Vycm9yOgorCS8qIElmIHdlIGhhdmUgYSBjbGllbnQgYnV0IG5vIHN1YmRldiwgdGhlbiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQKKwkgICB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGNsaWVudC4gKi8KKwlpZiAoY2xpZW50ICYmIHNkID09IE5VTEwpCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwogCXJldHVybiBzZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KTsKIAorLyogUmV0dXJuIGkyYyBjbGllbnQgYWRkcmVzcyBvZiB2NGwyX3N1YmRldi4gKi8KK3Vuc2lnbmVkIHNob3J0IHY0bDJfaTJjX3N1YmRldl9hZGRyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+YWRkciA6IEkyQ19DTElFTlRfRU5EOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfc3ViZGV2X2FkZHIpOworCisvKiBSZXR1cm4gYSBsaXN0IG9mIEkyQyB0dW5lciBhZGRyZXNzZXMgdG8gcHJvYmUuIFVzZSBvbmx5IGlmIHRoZSB0dW5lcgorICAgYWRkcmVzc2VzIGFyZSB1bmtub3duLiAqLworY29uc3QgdW5zaWduZWQgc2hvcnQgKnY0bDJfaTJjX3R1bmVyX2FkZHJzKGVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCByYWRpb19hZGRyc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEpIHx8IGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjFfTU9EVUxFKQorCQkweDEwLAorI2VuZGlmCisJCTB4NjAsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVtb2RfYWRkcnNbXSA9IHsKKwkJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dl9hZGRyc1tdID0geworCQkweDQyLCAweDQzLCAweDRhLCAweDRiLAkJLyogdGRhODI5MCAqLworCQkweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAorCQkweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAorCQlJMkNfQ0xJRU5UX0VORAorCX07CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFERFJTX1JBRElPOgorCQlyZXR1cm4gcmFkaW9fYWRkcnM7CisJY2FzZSBBRERSU19ERU1PRDoKKwkJcmV0dXJuIGRlbW9kX2FkZHJzOworCWNhc2UgQUREUlNfVFY6CisJCXJldHVybiB0dl9hZGRyczsKKwljYXNlIEFERFJTX1RWX1dJVEhfREVNT0Q6CisJCXJldHVybiB0dl9hZGRycyArIDQ7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfdHVuZXJfYWRkcnMpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKaW5kZXggMTEwMzc2Yi4uMDA1NmIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTEwNDcsNyArMTA0Nyw2IEBACiAJY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6CiAJY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6CiAJY2FzZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDoKLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlRfT0xEOgogCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgogCQlyZXQgPSBkb192aWRlb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IDEzZjg3YzIuLjkxMjI4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTE5OCw2ICsxOTgsMjMgQEAKIAlyZXR1cm4gdmRldi0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCBhcmcpOwogfQogCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSB2NGwyX2dldF91bm1hcHBlZF9hcmVhIE5VTEwKKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2NGwyX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCisJaWYgKCF2ZGV2LT5mb3BzLT5nZXRfdW5tYXBwZWRfYXJlYSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHZkZXYtPmZvcHMtPmdldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHY0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKQEAgLTI1MCw2ICsyNjcsNyBAQAogCS5yZWFkID0gdjRsMl9yZWFkLAogCS53cml0ZSA9IHY0bDJfd3JpdGUsCiAJLm9wZW4gPSB2NGwyX29wZW4sCisJLmdldF91bm1hcHBlZF9hcmVhID0gdjRsMl9nZXRfdW5tYXBwZWRfYXJlYSwKIAkubW1hcCA9IHY0bDJfbW1hcCwKIAkudW5sb2NrZWRfaW9jdGwgPSB2NGwyX3VubG9ja2VkX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTI2NSw2ICsyODMsNyBAQAogCS5yZWFkID0gdjRsMl9yZWFkLAogCS53cml0ZSA9IHY0bDJfd3JpdGUsCiAJLm9wZW4gPSB2NGwyX29wZW4sCisJLmdldF91bm1hcHBlZF9hcmVhID0gdjRsMl9nZXRfdW5tYXBwZWRfYXJlYSwKIAkubW1hcCA9IHY0bDJfbW1hcCwKIAkuaW9jdGwgPSB2NGwyX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTI4OCwzNyArMzA3LDM4IEBACiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCBudW0pCiB7Ci0JdTMyIHVzZWQgPSAwOwotCWNvbnN0IGludCBtYXhfaW5kZXggPSBzaXplb2YodXNlZCkgKiA4IC0gMTsKKwkvKiBUaGlzIGNhbiBiZSBzdGF0aWMgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZ2xvYmFsCisJICAgdmlkZW9kZXZfbG9jayBoZWxkLiAqLworCXN0YXRpYyBERUNMQVJFX0JJVE1BUCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CiAJaW50IGk7CiAKLQkvKiBDdXJyZW50bHkgYSBzaW5nbGUgdjRsIGRyaXZlciBpbnN0YW5jZSBjYW5ub3QgY3JlYXRlIG1vcmUgdGhhbgotCSAgIDMyIGRldmljZXMuCi0JICAgSW5jcmVhc2UgdG8gdTY0IG9yIGFuIGFycmF5IG9mIHUzMiBpZiBtb3JlIGFyZSBuZWVkZWQuICovCi0JaWYgKG51bSA+IG1heF9pbmRleCkgeworCWlmIChudW0gPj0gVklERU9fTlVNX0RFVklDRVMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWRlb2RldjogJXMgbnVtIGlzIHRvbyBsYXJnZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBTb21lIGRyaXZlcnMgZG8gbm90IHNldCB0aGUgcGFyZW50LiBJbiB0aGF0IGNhc2UgYWx3YXlzIHJldHVybiAwLiAqLworCS8qIFNvbWUgZHJpdmVycyBkbyBub3Qgc2V0IHRoZSBwYXJlbnQuIEluIHRoYXQgY2FzZSBhbHdheXMgcmV0dXJuCisJICAgbnVtIG9yIDAuICovCiAJaWYgKHZkZXYtPnBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIG51bSA+PSAwID8gbnVtIDogMDsKKworCWJpdG1hcF96ZXJvKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIAogCWZvciAoaSA9IDA7IGkgPCBWSURFT19OVU1fREVWSUNFUzsgaSsrKSB7CiAJCWlmICh2aWRlb19kZXZpY2VbaV0gIT0gTlVMTCAmJgogCQkgICAgdmlkZW9fZGV2aWNlW2ldLT5wYXJlbnQgPT0gdmRldi0+cGFyZW50KSB7Ci0JCQl1c2VkIHw9IDEgPDwgdmlkZW9fZGV2aWNlW2ldLT5pbmRleDsKKwkJCXNldF9iaXQodmlkZW9fZGV2aWNlW2ldLT5pbmRleCwgdXNlZCk7CiAJCX0KIAl9CiAKIAlpZiAobnVtID49IDApIHsKLQkJaWYgKHVzZWQgJiAoMSA8PCBudW0pKQorCQlpZiAodGVzdF9iaXQobnVtLCB1c2VkKSkKIAkJCXJldHVybiAtRU5GSUxFOwogCQlyZXR1cm4gbnVtOwogCX0KIAotCWkgPSBmZnoodXNlZCk7Ci0JcmV0dXJuIGkgPiBtYXhfaW5kZXggPyAtRU5GSUxFIDogaTsKKwlpID0gZmluZF9maXJzdF96ZXJvX2JpdCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CisJcmV0dXJuIGkgPT0gVklERU9fTlVNX0RFVklDRVMgPyAtRU5GSUxFIDogaTsKIH0KIAogaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQpAQCAtMzY1LDEyICszODUsMTEgQEAKIAogCS8qIEEgbWlub3IgdmFsdWUgb2YgLTEgbWFya3MgdGhpcyB2aWRlbyBkZXZpY2UgYXMgbmV2ZXIKIAkgICBoYXZpbmcgYmVlbiByZWdpc3RlcmVkICovCi0JaWYgKHZkZXYpCi0JCXZkZXYtPm1pbm9yID0gLTE7CisJdmRldi0+bWlub3IgPSAtMTsKIAogCS8qIHRoZSByZWxlYXNlIGNhbGxiYWNrIE1VU1QgYmUgcHJlc2VudCAqLwotCVdBUk5fT04oIXZkZXYgfHwgIXZkZXYtPnJlbGVhc2UpOwotCWlmICghdmRldiB8fCAhdmRldi0+cmVsZWFzZSkKKwlXQVJOX09OKCF2ZGV2LT5yZWxlYXNlKTsKKwlpZiAoIXZkZXYtPnJlbGVhc2UpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUGFydCAxOiBjaGVjayBkZXZpY2UgdHlwZSAqLwpAQCAtMzk1LDcgKzQxNCw3IEBACiAKIAl2ZGV2LT52ZmxfdHlwZSA9IHR5cGU7CiAJdmRldi0+Y2RldiA9IE5VTEw7Ci0JaWYgKHZkZXYtPnY0bDJfZGV2KQorCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+ZGV2KQogCQl2ZGV2LT5wYXJlbnQgPSB2ZGV2LT52NGwyX2Rldi0+ZGV2OwogCiAJLyogUGFydCAyOiBmaW5kIGEgZnJlZSBtaW5vciwga2VybmVsIG51bWJlciBhbmQgZGV2aWNlIGluZGV4LiAqLwpAQCAtNTgyLDYgKzYwMSw3IEBACiBNT0RVTEVfQVVUSE9SKCJBbGFuIENveCwgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSByZWdpc3RyYXIgZm9yIFZpZGVvNExpbnV4IGRyaXZlcnMgdjIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFZJREVPX01BSk9SKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCmluZGV4IDhhNGI3NGYuLjk0YWE0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTI2LDQ4ICsyNiw2NiBAQAogCiBpbnQgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCWlmIChkZXYgPT0gTlVMTCB8fCB2NGwyX2RldiA9PSBOVUxMKQorCWlmICh2NGwyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBXYXJuIGlmIHdlIGFwcGFyZW50bHkgcmUtcmVnaXN0ZXIgYSBkZXZpY2UgKi8KLQlXQVJOX09OKGRldl9nZXRfZHJ2ZGF0YShkZXYpICE9IE5VTEwpOworCiAJSU5JVF9MSVNUX0hFQUQoJnY0bDJfZGV2LT5zdWJkZXZzKTsKIAlzcGluX2xvY2tfaW5pdCgmdjRsMl9kZXYtPmxvY2spOwogCXY0bDJfZGV2LT5kZXYgPSBkZXY7Ci0Jc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICIlcyAlcyIsCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCS8qIElmIGRldiA9PSBOVUxMLCB0aGVuIG5hbWUgbXVzdCBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlciAqLworCQlXQVJOX09OKCF2NGwyX2Rldi0+bmFtZVswXSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFNldCBuYW1lIHRvIGRyaXZlciBuYW1lICsgZGV2aWNlIG5hbWUgaWYgaXQgaXMgZW1wdHkuICovCisJaWYgKCF2NGwyX2Rldi0+bmFtZVswXSkKKwkJc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICIlcyAlcyIsCiAJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CisJaWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKQorCQl2NGwyX3dhcm4odjRsMl9kZXYsICJOb24tTlVMTCBkcnZkYXRhIG9uIHJlZ2lzdGVyXG4iKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9yZWdpc3Rlcik7CiAKK3ZvaWQgdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCWlmICh2NGwyX2Rldi0+ZGV2KSB7CisJCWRldl9zZXRfZHJ2ZGF0YSh2NGwyX2Rldi0+ZGV2LCBOVUxMKTsKKwkJdjRsMl9kZXYtPmRldiA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfZGlzY29ubmVjdCk7CisKIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QsICpuZXh0OwogCi0JaWYgKHY0bDJfZGV2ID09IE5VTEwgfHwgdjRsMl9kZXYtPmRldiA9PSBOVUxMKQorCWlmICh2NGwyX2RldiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JZGV2X3NldF9kcnZkYXRhKHY0bDJfZGV2LT5kZXYsIE5VTEwpOwotCS8qIHVucmVnaXN0ZXIgc3ViZGV2cyAqLworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QodjRsMl9kZXYpOworCisJLyogVW5yZWdpc3RlciBzdWJkZXZzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkLCBuZXh0LCAmdjRsMl9kZXYtPnN1YmRldnMsIGxpc3QpCiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQotCXY0bDJfZGV2LT5kZXYgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKLWludCB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCitpbnQgdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCisJCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCS8qIENoZWNrIGZvciB2YWxpZCBpbnB1dCAqLwotCWlmIChkZXYgPT0gTlVMTCB8fCBzZCA9PSBOVUxMIHx8ICFzZC0+bmFtZVswXSkKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCB8fCBzZCA9PSBOVUxMIHx8ICFzZC0+bmFtZVswXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogV2FybiBpZiB3ZSBhcHBhcmVudGx5IHJlLXJlZ2lzdGVyIGEgc3ViZGV2ICovCi0JV0FSTl9PTihzZC0+ZGV2ICE9IE5VTEwpOworCVdBUk5fT04oc2QtPnY0bDJfZGV2ICE9IE5VTEwpOwogCWlmICghdHJ5X21vZHVsZV9nZXQoc2QtPm93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0Jc2QtPmRldiA9IGRldjsKLQlzcGluX2xvY2soJmRldi0+bG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZkZXYtPnN1YmRldnMpOwotCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCXNkLT52NGwyX2RldiA9IHY0bDJfZGV2OworCXNwaW5fbG9jaygmdjRsMl9kZXYtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJnNkLT5saXN0LCAmdjRsMl9kZXYtPnN1YmRldnMpOworCXNwaW5fdW5sb2NrKCZ2NGwyX2Rldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYpOwpAQCAtNzUsMTIgKzkzLDEyIEBACiB2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJLyogcmV0dXJuIGlmIGl0IGlzbid0IHJlZ2lzdGVyZWQgKi8KLQlpZiAoc2QgPT0gTlVMTCB8fCBzZC0+ZGV2ID09IE5VTEwpCisJaWYgKHNkID09IE5VTEwgfHwgc2QtPnY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQlzcGluX2xvY2soJnNkLT5kZXYtPmxvY2spOworCXNwaW5fbG9jaygmc2QtPnY0bDJfZGV2LT5sb2NrKTsKIAlsaXN0X2RlbCgmc2QtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZzZC0+ZGV2LT5sb2NrKTsKLQlzZC0+ZGV2ID0gTlVMTDsKKwlzcGluX3VubG9jaygmc2QtPnY0bDJfZGV2LT5sb2NrKTsKKwlzZC0+djRsMl9kZXYgPSBOVUxMOwogCW1vZHVsZV9wdXQoc2QtPm93bmVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggNTJkNjg3Yi4uZjQxYzZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2RlZmluZSBfX09MRF9WSURJT0NfIC8qIFRvIGFsbG93IGZpeGluZyBvbGQgY2FsbHMgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDEKQEAgLTI0LDcgKzI1LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KIAogI2RlZmluZSBkYmdhcmcoY21kLCBmbXQsIGFyZy4uLikgXAogCQlkbyB7CQkJCQkJCVwKQEAgLTEwMCwyNSArMTAxLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfbm9ybV90b19uYW1lKTsKIAorLyogUmV0dXJucyBmcmFtZSBwZXJpb2QgZm9yIHRoZSBnaXZlbiBzdGFuZGFyZCAqLwordm9pZCB2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaW50IGlkLCBzdHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVwZXJpb2QpCit7CisJaWYgKGlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCWZyYW1lcGVyaW9kLT5udW1lcmF0b3IgPSAxMDAxOworCQlmcmFtZXBlcmlvZC0+ZGVub21pbmF0b3IgPSAzMDAwMDsKKwl9IGVsc2UgeworCQlmcmFtZXBlcmlvZC0+bnVtZXJhdG9yID0gMTsKKwkJZnJhbWVwZXJpb2QtPmRlbm9taW5hdG9yID0gMjU7CisJfQorfQorRVhQT1JUX1NZTUJPTCh2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QpOworCiAvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgYSB2NGwyX3N0YW5kYXJkIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlCiAgICAnaWQnIGFuZCAndHJhbnNtaXNzaW9uJyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvci4gICovCiBpbnQgdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0cnVjdCB2NGwyX3N0YW5kYXJkICp2cywKIAkJCSAgICAgaW50IGlkLCBjb25zdCBjaGFyICpuYW1lKQogewotCXUzMiBpbmRleCA9IHZzLT5pbmRleDsKLQotCW1lbXNldCh2cywgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSk7Ci0JdnMtPmluZGV4ID0gaW5kZXg7Ci0JdnMtPmlkICAgID0gaWQ7Ci0JaWYgKGlkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCXZzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOwotCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKLQkJdnMtPmZyYW1lbGluZXMgPSA1MjU7Ci0JfSBlbHNlIHsKLQkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0JCXZzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OwotCQl2cy0+ZnJhbWVsaW5lcyA9IDYyNTsKLQl9CisJdnMtPmlkID0gaWQ7CisJdjRsMl92aWRlb19zdGRfZnJhbWVfcGVyaW9kKGlkLCAmdnMtPmZyYW1lcGVyaW9kKTsKKwl2cy0+ZnJhbWVsaW5lcyA9IChpZCAmIFY0TDJfU1REXzUyNV82MCkgPyA1MjUgOiA2MjU7CiAJc3RybGNweSh2cy0+bmFtZSwgbmFtZSwgc2l6ZW9mKHZzLT5uYW1lKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzMsMTkgKzI3Niw2IEBACiAjZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCiAKIHN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQlbX0lPQ19OUihERUNPREVSX0dFVF9DQVBBQklMSVRJRVMpXSAgICA9ICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVMiLAotCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfTk9STSldICAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfTk9STSIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfSU5QVVQpXSAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfSU5QVVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCi0JW19JT0NfTlIoREVDT0RFUl9FTkFCTEVfT1VUUFVUKV0gICAgICAgPSAiREVDT0RFUl9FTkFCTEVfT1VUUFVUIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9QSUNUVVJFKV0gICAgICAgICA9ICJERUNPREVSX1NFVF9QSUNUVVJFIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKLQlbX0lPQ19OUihERUNPREVSX0lOSVQpXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0lOSVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX1ZCSV9CWVBBU1MpXSAgICAgID0gIkRFQ09ERVJfU0VUX1ZCSV9CWVBBU1MiLAotCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCi0jZW5kaWYKIAlbX0lPQ19OUihBVURDX1NFVF9SQURJTyldICAgICAgICAgICAgICA9ICJBVURDX1NFVF9SQURJTyIsCiAKIAlbX0lPQ19OUihUVU5FUl9TRVRfVFlQRV9BRERSKV0gICAgICAgICA9ICJUVU5FUl9TRVRfVFlQRV9BRERSIiwKQEAgLTY1NCw4ICs2NDQsNiBAQAogCWlmIChjbWQgPT0gVklESU9DR01CVUYpIHsKIAkJc3RydWN0IHZpZGVvX21idWYgKnAgPSBhcmc7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCiAJCWlmICghb3BzLT52aWRpb2NnbWJ1ZikKIAkJCXJldHVybiByZXQ7CiAJCXJldCA9IG9wcy0+dmlkaW9jZ21idWYoZmlsZSwgZmgsIHApOwpAQCAtNjgyLDcgKzY3MCw2IEBACiAJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSAoc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqKWFyZzsKLQkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3F1ZXJ5Y2FwKQogCQkJYnJlYWs7CkBAIC03MjUsMTYgKzcxMiw4IEBACiAJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmID0gYXJnOwotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKLQkJdW5zaWduZWQgaW50IGluZGV4OwogCi0JCWluZGV4ID0gZi0+aW5kZXg7Ci0JCXR5cGUgID0gZi0+dHlwZTsKLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT5pbmRleCA9IGluZGV4OwotCQlmLT50eXBlICA9IHR5cGU7Ci0KLQkJc3dpdGNoICh0eXBlKSB7CisJCXN3aXRjaCAoZi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKIAkJCWlmIChvcHMtPnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKQogCQkJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOwpAQCAtNzcxLDggKzc1MCw2IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnOwogCi0JCW1lbXNldChmLT5mbXQucmF3X2RhdGEsIDAsIHNpemVvZihmLT5mbXQucmF3X2RhdGEpKTsKLQogCQkvKiBGSVhNRTogU2hvdWxkIGJlIG9uZSBkdW1wIHBlciB0eXBlICovCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAKQEAgLTEwODgsNyArMTA2NSw2IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QocCwgY3Vycl9pZCwgZGVzY3IpOwotCQlwLT5pbmRleCA9IGluZGV4OwogCiAJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgaWQ9MHglTHgsIG5hbWU9JXMsIGZwcz0lZC8lZCwgIgogCQkJCSJmcmFtZWxpbmVzPSVkXG4iLCBwLT5pbmRleCwKQEAgLTExNTMsMTIgKzExMjksOSBAQAogCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2lucHV0ICpwID0gYXJnOwotCQlpbnQgaSA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9pbnB1dCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaTsKIAogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2lucHV0KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCkBAIC0xMTk3LDEyICsxMTcwLDkgQEAKIAljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgogCXsKIAkJc3RydWN0IHY0bDJfb3V0cHV0ICpwID0gYXJnOwotCQlpbnQgaSA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9vdXRwdXQpCiAJCQlicmVhazsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGk7CiAKIAkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9vdXRwdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTEzNzgsMTMgKzEzNDgsMTAgQEAKIAljYXNlIFZJRElPQ19HX0FVRElPOgogCXsKIAkJc3RydWN0IHY0bDJfYXVkaW8gKnAgPSBhcmc7Ci0JCV9fdTMyIGluZGV4ID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2F1ZGlvKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGluZGV4OwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2F1ZGlvKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9MHgleCwgIgpAQCAtMTQyNiw3ICsxMzkzLDcgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfYXVkb3V0KQogCQkJYnJlYWs7Ci0JCWRiZ2FyZyhjbWQsICJFbnVtIGZvciBpbmRleD0lZFxuIiwgcC0+aW5kZXgpOworCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfYXVkb3V0KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcyKCJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgIgpAQCAtMTQ3OSwxNSArMTQ0NiwxMCBAQAogCWNhc2UgVklESU9DX0dfQ1JPUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2Nyb3AgKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGU7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2Nyb3ApCiAJCQlicmVhazsKIAotCQl0eXBlID0gcC0+dHlwZTsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT50eXBlID0gdHlwZTsKLQogCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2Nyb3AoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTE1MDgsMTYgKzE0NzAsMTEgQEAKIAljYXNlIFZJRElPQ19DUk9QQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZTsKIAogCQkvKkZJWE1FOiBTaG91bGQgYWxzbyBzaG93IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3QgKi8KIAkJaWYgKCFvcHMtPnZpZGlvY19jcm9wY2FwKQogCQkJYnJlYWs7CiAKLQkJdHlwZSA9IHAtPnR5cGU7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7Ci0KIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIAkJcmV0ID0gb3BzLT52aWRpb2NfY3JvcGNhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KSB7CkBAIC0xNTMzLDggKzE0OTAsNiBAQAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfanBlZ2NvbXApCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19qcGVnY29tcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgInF1YWxpdHk9JWQsIEFQUG49JWQsICIKQEAgLTE1NzUsNyArMTUzMCw2IEBACiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQltZW1zZXQoJnAtPnJhdywgMCwgc2l6ZW9mKHAtPnJhdykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19lbmNvZGVyX2NtZChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNtZD0lZCwgZmxhZ3M9JXhcbiIsIHAtPmNtZCwgcC0+ZmxhZ3MpOwpAQCAtMTU4Nyw3ICsxNTQxLDYgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3RyeV9lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQltZW1zZXQoJnAtPnJhdywgMCwgc2l6ZW9mKHAtPnJhdykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY190cnlfZW5jb2Rlcl9jbWQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJjbWQ9JWQsIGZsYWdzPSV4XG4iLCBwLT5jbWQsIHAtPmZsYWdzKTsKQEAgLTE1OTYsMjMgKzE1NDksMTggQEAKIAljYXNlIFZJRElPQ19HX1BBUk06CiAJewogCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwID0gYXJnOwotCQlfX3UzMiB0eXBlID0gcC0+dHlwZTsKLQotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOwogCiAJCWlmIChvcHMtPnZpZGlvY19nX3Bhcm0pIHsKKwkJCXJldCA9IGNoZWNrX2ZtdChvcHMsIHAtPnR5cGUpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKIAkJCXJldCA9IG9wcy0+dmlkaW9jX2dfcGFybShmaWxlLCBmaCwgcCk7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzOwotCiAJCQlpZiAocC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCgmcywgdmZkLT5jdXJyZW50X25vcm0sCi0JCQkJCQkgdjRsMl9ub3JtX3RvX25hbWUodmZkLT5jdXJyZW50X25vcm0pKTsKLQotCQkJcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSA9IHMuZnJhbWVwZXJpb2Q7CisJCQl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QodmZkLT5jdXJyZW50X25vcm0sCisJCQkJCQkgICAgJnAtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUpOwogCQkJcmV0ID0gMDsKIAkJfQogCkBAIC0xNjI1LDYgKzE1NzMsMTAgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3NfcGFybSkKIAkJCWJyZWFrOworCQlyZXQgPSBjaGVja19mbXQob3BzLCBwLT50eXBlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVkXG4iLCBwLT50eXBlKTsKIAkJcmV0ID0gb3BzLT52aWRpb2Nfc19wYXJtKGZpbGUsIGZoLCBwKTsKIAkJYnJlYWs7CkBAIC0xNjMyLDE0ICsxNTg0LDEwIEBACiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICpwID0gYXJnOwotCQlfX3UzMiBpbmRleCA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZ190dW5lcikKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+aW5kZXggPSBpbmRleDsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19nX3R1bmVyKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIG5hbWU9JXMsIHR5cGU9JWQsICIKQEAgLTE2NzYsOCArMTYyNCw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZ19mcmVxdWVuY3kpCiAJCQlicmVhazsKIAotCQltZW1zZXQocC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihwLT5yZXNlcnZlZCkpOwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfZnJlcXVlbmN5KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAidHVuZXI9JWQsIHR5cGU9JWQsIGZyZXF1ZW5jeT0lZFxuIiwKQEAgLTE2OTgsMTIgKzE2NDQsMTMgQEAKIAljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGUgPSBwLT50eXBlOwogCiAJCWlmICghb3BzLT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOworCisJCS8qIENsZWFyIHVwIHRvIHR5cGUsIGV2ZXJ5dGhpbmcgYWZ0ZXIgdHlwZSBpcyB6ZXJvZCBhbHJlYWR5ICovCisJCW1lbXNldChwLCAwLCBvZmZzZXRvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCwgdHlwZSkpOworCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMocC0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXAoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTE3NDUsMTYgKzE2OTIsMTMgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfY2hpcF9pZGVudCkKIAkJCWJyZWFrOworCQlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwkJcC0+cmV2aXNpb24gPSAwOwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2NoaXBfaWRlbnQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJjaGlwX2lkZW50PSV1LCByZXZpc2lvbj0weCV4XG4iLCBwLT5pZGVudCwgcC0+cmV2aXNpb24pOwogCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UX09MRDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfR19DSElQX0lERU5UIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgZGlzYXBwZWFyIGluIDIuNi4zMC5cbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIkl0IGlzIGEgZGVidWdnaW5nIGlvY3RsIGFuZCBtdXN0IG5vdCBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucyFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgogCXsKIAkJc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrICpwID0gYXJnOwpAQCAtMTc3NCw4ICsxNzE4LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMpCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mcmFtZXNpemVzKGZpbGUsIGZoLCBwKTsKIAkJZGJnYXJnKGNtZCwKIAkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIHR5cGU9JWQgIiwKQEAgLTE4MDcsOCArMTc0OSw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9mcmFtZWludGVydmFscykKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKGZpbGUsIGZoLCBwKTsKIAkJZGJnYXJnKGNtZCwKIAkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIHR5cGU9JWQgIiwKQEAgLTE4NTcsNiArMTc5Nyw0NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIEluIHNvbWUgY2FzZXMsIG9ubHkgYSBmZXcgZmllbGRzIGFyZSB1c2VkIGFzIGlucHV0LCBpLmUuIHdoZW4gdGhlIGFwcCBzZXRzCisgKiAiaW5kZXgiIGFuZCB0aGVuIHRoZSBkcml2ZXIgZmlsbHMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBmb3IgdGhlIHRoaW5nCisgKiB3aXRoIHRoYXQgaW5kZXguICBXZSBvbmx5IG5lZWQgdG8gY29weSB1cCB0aGUgZmlyc3Qgbm9uLWlucHV0IGZpZWxkLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtZF9pbnB1dF9zaXplKHVuc2lnbmVkIGludCBjbWQpCit7CisJLyogU2l6ZSBvZiBzdHJ1Y3R1cmUgdXAgdG8gYW5kIGluY2x1ZGluZyAnZmllbGQnICovCisjZGVmaW5lIENNRElOU0laRShjbWQsIHR5cGUsIGZpZWxkKSAJCQkJXAorCWNhc2UgVklESU9DXyMjY21kOiAJCQkJCVwKKwkJcmV0dXJuIG9mZnNldG9mKHN0cnVjdCB2NGwyXyMjdHlwZSwgZmllbGQpICsgCVwKKwkJCXNpemVvZigoKHN0cnVjdCB2NGwyXyMjdHlwZSAqKTApLT5maWVsZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQlDTURJTlNJWkUoRU5VTV9GTVQsCQlmbXRkZXNjLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEdfRk1ULAkJZm9ybWF0LAkJdHlwZSk7CisJCUNNRElOU0laRShRVUVSWUJVRiwJCWJ1ZmZlciwJCXR5cGUpOworCQlDTURJTlNJWkUoR19QQVJNLAkJc3RyZWFtcGFybSwJdHlwZSk7CisJCUNNRElOU0laRShFTlVNU1RELAkJc3RhbmRhcmQsCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1JTlBVVCwJCWlucHV0LAkJaW5kZXgpOworCQlDTURJTlNJWkUoR19DVFJMLAkJY29udHJvbCwJaWQpOworCQlDTURJTlNJWkUoR19UVU5FUiwJCXR1bmVyLAkJaW5kZXgpOworCQlDTURJTlNJWkUoUVVFUllDVFJMLAkJcXVlcnljdHJsLAlpZCk7CisJCUNNRElOU0laRShRVUVSWU1FTlUsCQlxdWVyeW1lbnUsCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1PVVRQVVQsCQlvdXRwdXQsCQlpbmRleCk7CisJCUNNRElOU0laRShHX01PRFVMQVRPUiwJCW1vZHVsYXRvciwJaW5kZXgpOworCQlDTURJTlNJWkUoR19GUkVRVUVOQ1ksCQlmcmVxdWVuY3ksCXR1bmVyKTsKKwkJQ01ESU5TSVpFKENST1BDQVAsCQljcm9wY2FwLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEdfQ1JPUCwJCWNyb3AsCQl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1BVURJTywJCWF1ZGlvLCAJCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1BVURPVVQsCQlhdWRpb291dCwgCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOQ09ERVJfQ01ELAkJZW5jb2Rlcl9jbWQsCWZsYWdzKTsKKwkJQ01ESU5TSVpFKFRSWV9FTkNPREVSX0NNRCwJZW5jb2Rlcl9jbWQsCWZsYWdzKTsKKwkJQ01ESU5TSVpFKEdfU0xJQ0VEX1ZCSV9DQVAsCXNsaWNlZF92YmlfY2FwLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1fRlJBTUVTSVpFUywJZnJtc2l6ZWVudW0sCXBpeGVsX2Zvcm1hdCk7CisJCUNNRElOU0laRShFTlVNX0ZSQU1FSU5URVJWQUxTLAlmcm1pdmFsZW51bSwJaGVpZ2h0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gX0lPQ19TSVpFKGNtZCk7CisJfQorfQorCiBsb25nIHZpZGVvX2lvY3RsMihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xODc1LDEzICsxODU0LDcgQEAKIAkJICAgICAgIGNtZCA9PSBWSURJT0NfVFJZX0VYVF9DVFJMUyk7CiAKIAkvKiAgQ29weSBhcmd1bWVudHMgaW50byB0ZW1wIGtlcm5lbCBidWZmZXIgICovCi0Jc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7Ci0JY2FzZSBfSU9DX05PTkU6Ci0JCXBhcmcgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIF9JT0NfUkVBRDoKLQljYXNlIF9JT0NfV1JJVEU6Ci0JY2FzZSAoX0lPQ19XUklURSB8IF9JT0NfUkVBRCk6CisJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19OT05FKSB7CiAJCWlmIChfSU9DX1NJWkUoY21kKSA8PSBzaXplb2Yoc2J1ZikpIHsKIAkJCXBhcmcgPSBzYnVmOwogCQl9IGVsc2UgewpAQCAtMTg5MywxMCArMTg2NiwxOSBAQAogCQl9CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmcsICh2b2lkIF9fdXNlciAqKWFyZywgX0lPQ19TSVpFKGNtZCkpKQorCQlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgbiA9IGNtZF9pbnB1dF9zaXplKGNtZCk7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihwYXJnLCAodm9pZCBfX3VzZXIgKilhcmcsIG4pKQogCQkJCWdvdG8gb3V0OwotCQlicmVhazsKKworCQkJLyogemVybyBvdXQgYW55dGhpbmcgd2UgZG9uJ3QgY29weSBmcm9tIHVzZXJzcGFjZSAqLworCQkJaWYgKG4gPCBfSU9DX1NJWkUoY21kKSkKKwkJCQltZW1zZXQoKHU4ICopcGFyZyArIG4sIDAsIF9JT0NfU0laRShjbWQpIC0gbik7CisJCX0gZWxzZSB7CisJCQkvKiByZWFkLW9ubHkgaW9jdGwgKi8KKwkJCW1lbXNldChwYXJnLCAwLCBfSU9DX1NJWkUoY21kKSk7CisJCX0KIAl9CiAKIAlpZiAoaXNfZXh0X2N0cmwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYwppbmRleCAyMTIwODgwLi5kYzg4MTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCkBAIC0zMyw2ICszMywxMiBAQAogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19jdHJsLCBhcmcpOwogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfY3RybCwgYXJnKTsKKwljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfZXh0X2N0cmxzLCBhcmcpOworCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19leHRfY3RybHMsIGFyZyk7CisJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHRyeV9leHRfY3RybHMsIGFyZyk7CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgcXVlcnltZW51LCBhcmcpOwogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CkBAIC05MiwxNiArOTgsMjggQEAKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3ZiaV9kYXRhLCBhcmcpOwogCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19zbGljZWRfdmJpX2NhcCwgYXJnKTsKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBlbnVtX2ZtdCwgYXJnKTsKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfU19GTVQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfR19GTVQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfSU5UX1NfU1REX09VVFBVVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsICoodjRsMl9zdGRfaWQgKilhcmcpOworCWNhc2UgVklESU9DX1FVRVJZU1REOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHF1ZXJ5c3RkLCBhcmcpOworCWNhc2UgVklESU9DX0lOVF9HX0lOUFVUX1NUQVRVUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgYXJnKTsKIAljYXNlIFZJRElPQ19TVFJFQU1PTjoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwljYXNlIFZJRElPQ19TX1BBUk06CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19wYXJtLCBhcmcpOworCWNhc2UgVklESU9DX0dfUEFSTToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3Bhcm0sIGFyZyk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKaW5kZXggMzE5NDRiMS4uNjEwOWZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCSAgIFNvLCBpdCBzaG91bGQgZnJlZSBtZW1vcnkgb25seSBpZiB0aGUgbWVtb3J5IHdlcmUgYWxsb2NhdGVkIGZvcgogCSAgIHJlYWQoKSBvcGVyYXRpb24uCiAJICovCi0JaWYgKChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9VU0VSUFRSKSB8fCAhYnVmLT5iYWRkcikKKwlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8IGJ1Zi0+YmFkZHIpCiAJCXJldHVybjsKIAogCWlmICghbWVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCBiZTY1YTJmLi4zMGFlMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAJICAgU28sIGl0IHNob3VsZCBmcmVlIG1lbW9yeSBvbmx5IGlmIHRoZSBtZW1vcnkgd2VyZSBhbGxvY2F0ZWQgZm9yCiAJICAgcmVhZCgpIG9wZXJhdGlvbi4KIAkgKi8KLQlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8IChidWYtPmJhZGRyID09IDApKQorCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgYnVmLT5iYWRkcikKIAkJcmV0dXJuOwogCiAJaWYgKCFtZW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IDg4YmY4NDUuLjhkYTRkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC04LDYgKzgsMTIgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGZvciAyLjQga2VybmVscyBieToKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+CisgKgorICogdjRsMl9kZXZpY2UvdjRsMl9zdWJkZXYgY29udmVyc2lvbiBieToKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqCisgKiBOb3RlOiB0aGlzIGNvbnZlcnNpb24gaXMgdW50ZXN0ZWQhIFBsZWFzZSBjb250YWN0IHRoZSBsaW51eC1tZWRpYQorICogbWFpbGluZ2xpc3QgaWYgeW91IGNhbiB0ZXN0IHRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIHRlc3QgcmVzdWx0cy4KICAqLwogCiAvKgpAQCAtMzMsMTIgKzM5LDEwIEBACiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tc2dpLmg+CiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhY2Nlc3MuaD4KQEAgLTEzOSwxMyArMTQzLDIzIEBACiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX1BBTAkJMQogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9TRUNBTQkJMgogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9EMQkJMwotLyogVGhlIGZvbGxvd2luZyBhcmUgc3BlY2lhbCBlbnRyaWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8KLSAqIGF1dG9kZXRlY3QgdGhlIG5vcm0uICovCi0jZGVmaW5lIFZJTk9fREFUQV9OT1JNX0FVVE8JCTB4ZmUKLSNkZWZpbmUgVklOT19EQVRBX05PUk1fQVVUT19FWFQJCTB4ZmYKIAogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9DT1VOVAkJNAogCisvKiBJMkMgY29udHJvbGxlciBmbGFncyAqLworI2RlZmluZSBTR0lfSTJDX0ZPUkNFX0lETEUJCSgwIDw8IDApCisjZGVmaW5lIFNHSV9JMkNfTk9UX0lETEUJCSgxIDw8IDApCisjZGVmaW5lIFNHSV9JMkNfV1JJVEUJCQkoMCA8PCAxKQorI2RlZmluZSBTR0lfSTJDX1JFQUQJCQkoMSA8PCAxKQorI2RlZmluZSBTR0lfSTJDX1JFTEVBU0VfQlVTCQkoMCA8PCAyKQorI2RlZmluZSBTR0lfSTJDX0hPTERfQlVTCQkoMSA8PCAyKQorI2RlZmluZSBTR0lfSTJDX1hGRVJfRE9ORQkJKDAgPDwgNCkKKyNkZWZpbmUgU0dJX0kyQ19YRkVSX0JVU1kJCSgxIDw8IDQpCisjZGVmaW5lIFNHSV9JMkNfQUNLCQkJKDAgPDwgNSkKKyNkZWZpbmUgU0dJX0kyQ19OQUNLCQkJKDEgPDwgNSkKKyNkZWZpbmUgU0dJX0kyQ19CVVNfT0sJCQkoMCA8PCA3KQorI2RlZmluZSBTR0lfSTJDX0JVU19FUlIJCQkoMSA8PCA3KQorCiAvKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAqLwogCiBzdHJ1Y3Qgdmlub19pbnB1dCB7CkBAIC0yODksMjIgKzMwMywyMCBAQAogCXN0cnVjdCB2aW5vX2ludGVycnVwdF9kYXRhIGludF9kYXRhOwogCiAJLyogVjRMIHN1cHBvcnQgKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGxfZGV2aWNlOwotfTsKLQotc3RydWN0IHZpbm9fY2xpZW50IHsKLQkvKiB0aGUgY2hhbm5lbCB3aGljaCBvd25zIHRoaXMgY2xpZW50OgotCSAqIFZJTk9fTk9fQ0hBTk5FTCwgVklOT19DSEFOTkVMX0Egb3IgVklOT19DSEFOTkVMX0IgKi8KLQl1bnNpZ25lZCBpbnQgb3duZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmRyaXZlcjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogfTsKIAogc3RydWN0IHZpbm9fc2V0dGluZ3MgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIGE7CiAJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyBiOwogCi0Jc3RydWN0IHZpbm9fY2xpZW50IGRlY29kZXI7Ci0Jc3RydWN0IHZpbm9fY2xpZW50IGNhbWVyYTsKKwkvKiB0aGUgY2hhbm5lbCB3aGljaCBvd25zIHRoaXMgY2xpZW50OgorCSAqIFZJTk9fTk9fQ0hBTk5FTCwgVklOT19DSEFOTkVMX0Egb3IgVklOT19DSEFOTkVMX0IgKi8KKwl1bnNpZ25lZCBpbnQgZGVjb2Rlcl9vd25lcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmRlY29kZXI7CisJdW5zaWduZWQgaW50IGNhbWVyYV9vd25lcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmNhbWVyYTsKIAogCS8qIGEgbG9jayBmb3IgdmlubyByZWdpc3RlciBhY2Nlc3MgKi8KIAlzcGlubG9ja190IHZpbm9fbG9jazsKQEAgLTM0NCwxMSArMzU2LDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgdmlub19zZXR0aW5ncyAqdmlub19kcnZkYXRhOwogCisjZGVmaW5lIGNhbWVyYV9jYWxsKG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGRlY29kZXJfY2FsbChvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbCh2aW5vX2RydmRhdGEtPmRlY29kZXIsIG8sIGYsICMjYXJncykKKwogc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fZHJpdmVyX25hbWUgPSAidmlubyI7CiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19kcml2ZXJfZGVzY3JpcHRpb24gPSAiU0dJIFZJTk8iOwogc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fYnVzX25hbWUgPSAiR0lPNjQgYnVzIjsKLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX3Y0bF9kZXZpY2VfbmFtZV9hID0gIlNHSSBWSU5PIENoYW5uZWwgQSI7Ci1zdGF0aWMgY29uc3QgY2hhciAqdmlub192NGxfZGV2aWNlX25hbWVfYiA9ICJTR0kgVklOTyBDaGFubmVsIEIiOworc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdmRldl9uYW1lX2EgPSAiU0dJIFZJTk8gQ2hhbm5lbCBBIjsKK3N0YXRpYyBjb25zdCBjaGFyICp2aW5vX3ZkZXZfbmFtZV9iID0gIlNHSSBWSU5PIENoYW5uZWwgQiI7CiAKIHN0YXRpYyB2b2lkIHZpbm9fY2FwdHVyZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgY2hhbm5lbCk7CiAKQEAgLTM2MCwxMSArMzc3LDExIEBACiAJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwKIAkJfCBWNEwyX1NURF9TRUNBTSwKLQl9LHsKKwl9LCB7CiAJCS5uYW1lCQk9ICJTLVZpZGVvIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMCiAJCXwgVjRMMl9TVERfU0VDQU0sCi0JfSx7CisJfSwgewogCQkubmFtZQkJPSAiRDEvSW5keUNhbSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQywKIAl9CkBAIC0zNzYsMTcgKzM5MywxNyBAQAogCQkuYnBwCQk9IDEsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9HUkVZLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiOC1iaXQgZGl0aGVyZWQgUkdCIDMtMy0yIiwKIAkJLmJwcAkJPSAxLAogCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCMzMyLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIjMyLWJpdCBSR0IiLAogCQkuYnBwCQk9IDQsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMiwKIAkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICJZVVYgNDoyOjIiLAogCQkuYnBwCQk9IDIsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLCAvLyBYWFg6IHN3YXBwZWQ/CkBAIC00MTcsNyArNDM0LDcgQEAKIAkJCSsgVklOT19OVFNDX0hFSUdIVCAvIDIgLSAxLAogCQkJLnJpZ2h0CT0gVklOT19OVFNDX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIlBBTCIsCiAJCS5zdGQJCT0gVjRMMl9TVERfUEFMLAogCQkuZnBzX21pbgk9IDUsCkBAIC00MzksNyArNDU2LDcgQEAKIAkJCSsgVklOT19QQUxfSEVJR0hUIC8gMiAtIDEsCiAJCQkucmlnaHQJPSBWSU5PX1BBTF9XSURUSCwKIAkJfSwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICJTRUNBTSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfU0VDQU0sCiAJCS5mcHNfbWluCT0gNSwKQEAgLTQ2MSw3ICs0NzgsNyBAQAogCQkJKyBWSU5PX1BBTF9IRUlHSFQgLyAyIC0gMSwKIAkJCS5yaWdodAk9IFZJTk9fUEFMX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIk5UU0MvRDEiLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MsCiAJCS5mcHNfbWluCT0gNiwKQEAgLTQ5Nyw5ICs1MTQsNyBAQAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0FHQ19ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9BR0MsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJBdXRvbWF0aWMgV2hpdGUgQmFsYW5jZSIsCkBAIC01MDcsOSArNTIyLDcgQEAKIAkJLm1heGltdW0gPSAxLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9BV0JfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQVdCLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkdhaW4iLApAQCAtNTE3LDI5ICs1MzAsMjMgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0dBSU5fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9HQUlOX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX0dBSU4sIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFLAorCX0sIHsKKwkJLmlkID0gSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlJlZCBTYXR1cmF0aW9uIiwKIAkJLm1pbmltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01JTiwKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04sIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSwKKwl9LCB7CisJCS5pZCA9IElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiQmx1ZSBTYXR1cmF0aW9uIiwKIAkJLm1pbmltdW0gPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9NSU4sCiAJCS5tYXhpbXVtID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQkxVRV9TQVRVUkFUSU9OLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJSZWQgQmFsYW5jZSIsCkBAIC01NDcsOSArNTU0LDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9CQUxBTkNFX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX0JBTEFOQ0VfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0UsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJCbHVlIEJhbGFuY2UiLApAQCAtNTU3LDkgKzU2Miw3IEBACiAJCS5tYXhpbXVtID0gSU5EWUNBTV9CTFVFX0JBTEFOQ0VfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9CTFVFX0JBTEFOQ0VfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJTaHV0dGVyIENvbnRyb2wiLApAQCAtNTY3LDkgKzU3MCw3IEBACiAJCS5tYXhpbXVtID0gSU5EWUNBTV9TSFVUVEVSX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fU0hVVFRFUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9TSFVUVEVSLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9HQU1NQSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJHYW1tYSIsCkBAIC01NzcsOCArNTc4LDYgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0dBTU1BX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fR0FNTUFfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfR0FNTUEsIDAgfSwKIAl9CiB9OwogCkBAIC01OTMsMjA5ICs1OTIsNzMgQEAKIAkJLm1heGltdW0gPSBTQUE3MTkxX0hVRV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0hVRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9IVUUsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBCYW5kcGFzcyIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9CQU5EUEFTU19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9CQU5EUEFTU19NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0JBTkRQQVNTX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hULAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBCYW5kcGFzcyBXZWlnaHQiLAogCQkubWluaW11bSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX1dFSUdIVF9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0JBTkRQQVNTX1dFSUdIVF9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMiwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9DT1JJTkcsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiSEYgTHVtaW5hbmNlIENvcmluZyIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9DT1JJTkdfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQ09SSU5HX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQ09SSU5HX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0NPUklORywgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJGb3JjZSBDb2xvdXIiLAogCQkubWluaW11bSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0ZPUkNFX0NPTE9VUl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0ZPUkNFX0NPTE9VUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNCwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJDaHJvbWluYW5jZSBHYWluIENvbnRyb2wiLAogCQkubWluaW11bSA9IFNBQTcxOTFfQ0hST01BX0dBSU5fTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQ0hST01BX0dBSU5fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA1LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX1ZUUkMsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAkJLm5hbWUgPSAiVlRSIFRpbWUgQ29uc3RhbnQiLAogCQkubWluaW11bSA9IFNBQTcxOTFfVlRSQ19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9WVFJDX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfVlRSQ19ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9WVFJDLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJMdW1pbmFuY2UgRGVsYXkgQ29tcGVuc2F0aW9uIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0xVTUFfREVMQVlfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0xVTUFfREVMQVlfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWSwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA3LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX1ZOUiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJWZXJ0aWNhbCBOb2lzZSBSZWR1Y3Rpb24iLAogCQkubWluaW11bSA9IFNBQTcxOTFfVk5SX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX1ZOUl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX1ZOUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9WTlIsIDAgfSwKIAl9CiB9OwogCi0vKiBWSU5PIEkyQyBidXMgZnVuY3Rpb25zICovCi0KLXVuc2lnbmVkIGkyY192aW5vX2dldGN0cmwodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2NvbnRyb2w7Ci19Ci0KLXZvaWQgaTJjX3Zpbm9fc2V0Y3RybCh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCi17Ci0Jdmluby0+aTJjX2NvbnRyb2wgPSB2YWw7Ci19Ci0KLXVuc2lnbmVkIGkyY192aW5vX3JkYXRhKHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHZpbm8tPmkyY19kYXRhOwotfQotCi12b2lkIGkyY192aW5vX3dkYXRhKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKLXsKLQl2aW5vLT5pMmNfZGF0YSA9IHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSBpMmNfc2dpX3Zpbm9fZGF0YSA9Ci17Ci0JLmdldGN0cmwgPSAmaTJjX3Zpbm9fZ2V0Y3RybCwKLQkuc2V0Y3RybCA9ICZpMmNfdmlub19zZXRjdHJsLAotCS5yZGF0YSAgID0gJmkyY192aW5vX3JkYXRhLAotCS53ZGF0YSAgID0gJmkyY192aW5vX3dkYXRhLAotCS54ZmVyX3RpbWVvdXQgPSAyMDAsCi0JLmFja190aW1lb3V0ICA9IDEwMDAsCi19OwotCi0vKgotICogVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjbGllbnRzIG9uIFZJTk8gSTJDIGJ1cywgc28gd2UgbGltaXQgdXNhZ2Ugb25seQotICogdG8gdGhlbS4KLSAqLwotc3RhdGljIGludCBpMmNfdmlub19jbGllbnRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNsaWVudC0+ZHJpdmVyLT5pZCkgewotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxOTE6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyID0gY2xpZW50OwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9JTkRZQ0FNOgotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIgPSBjbGllbnQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9ERVY7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpMmNfdmlub19jbGllbnRfdW5yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCWlmIChjbGllbnQgPT0gdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgewotCQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyICE9IFZJTk9fTk9fQ0hBTk5FTCkKLQkJCXJldCA9IC1FQlVTWTsKLQkJZWxzZQotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciA9IE5VTEw7Ci0JfSBlbHNlIGlmIChjbGllbnQgPT0gdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7Ci0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciAhPSBWSU5PX05PX0NIQU5ORUwpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciB2aW5vX2kyY19hZGFwdGVyID0KLXsKLQkubmFtZQkJCT0gIlZJTk8gSTJDIGJ1cyIsCi0JLmlkCQkJPSBJMkNfSFdfU0dJX1ZJTk8sCi0JLmFsZ29fZGF0YQkJPSAmaTJjX3NnaV92aW5vX2RhdGEsCi0JLmNsaWVudF9yZWdpc3Rlcgk9ICZpMmNfdmlub19jbGllbnRfcmVnLAotCS5jbGllbnRfdW5yZWdpc3Rlcgk9ICZpMmNfdmlub19jbGllbnRfdW5yZWcsCi19OwotCi1zdGF0aWMgaW50IHZpbm9faTJjX2FkZF9idXModm9pZCkKLXsKLQlyZXR1cm4gaTJjX3NnaV9hZGRfYnVzKCZ2aW5vX2kyY19hZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCB2aW5vX2kyY19kZWxfYnVzKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX2NhbWVyYV9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyLT4KLQkJZHJpdmVyLT5jb21tYW5kKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciwKLQkJCQljbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX2RlY29kZXJfY29tbWFuZCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXItPgotCQlkcml2ZXItPmNvbW1hbmQodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciwKLQkJCQljbWQsIGFyZyk7Ci19Ci0KIC8qIFZJTk8gZnJhbWVidWZmZXIvRE1BIGRlc2NyaXB0b3IgbWFuYWdlbWVudCAqLwogCiBzdGF0aWMgdm9pZCB2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiLApAQCAtMTc0MSw2ICsxNjA0LDE4NCBAQAogCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21heCk7CiB9CiAKKy8qIFZJTk8gSTJDIGJ1cyBmdW5jdGlvbnMgKi8KKworc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIHsKKwl2b2lkICpkYXRhOwkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIHJvdXRpbmVzICovCisJdW5zaWduZWQgKCpnZXRjdHJsKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqc2V0Y3RybCkodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKTsKKwl1bnNpZ25lZCAoKnJkYXRhKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqd2RhdGEpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCk7CisKKwlpbnQgeGZlcl90aW1lb3V0OworCWludCBhY2tfdGltZW91dDsKK307CisKK3N0YXRpYyBpbnQgd2FpdF94ZmVyX2RvbmUoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXAtPnhmZXJfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfWEZFUl9CVVNZKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCB3YWl0X2FjayhzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlpZiAod2FpdF94ZmVyX2RvbmUoYWRhcCkpCisJCXJldHVybiAtRVRJTUVET1VUOworCWZvciAoaSA9IDA7IGkgPCBhZGFwLT5hY2tfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTkFDSykgPT0gMCkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgZm9yY2VfaWRsZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfRk9SQ0VfSURMRSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXAtPnhmZXJfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTk9UX0lETEUpID09IDApCisJCQlnb3RvIG91dDsKKwkJdWRlbGF5KDEpOworCX0KKwlyZXR1cm4gLUVUSU1FRE9VVDsKK291dDoKKwlpZiAoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfQlVTX0VSUikKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fYWRkcmVzcyhzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGludCBhZGRyLAorCQkgICAgICBpbnQgcmQpCit7CisJaWYgKHJkKQorCQlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfTk9UX0lETEUpOworCS8qIENoZWNrIGlmIGJ1cyBpcyBpZGxlLCBldmVudHVhbGx5IGZvcmNlIGl0IHRvIGRvIHNvICovCisJaWYgKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX05PVF9JRExFKQorCQlpZiAoZm9yY2VfaWRsZShhZGFwKSkKKwkJCXJldHVybiAtRUlPOworCS8qIFdyaXRlIG91dCB0aGUgaTJjIGNoaXAgYWRkcmVzcyBhbmQgc3BlY2lmeSBvcGVyYXRpb24gKi8KKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsCisJCSAgICAgIFNHSV9JMkNfSE9MRF9CVVMgfCBTR0lfSTJDX1dSSVRFIHwgU0dJX0kyQ19OT1RfSURMRSk7CisJaWYgKHJkKQorCQlhZGRyIHw9IDE7CisJYWRhcC0+d2RhdGEoYWRhcC0+ZGF0YSwgYWRkcik7CisJaWYgKHdhaXRfYWNrKGFkYXApKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMmNfcmVhZChzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGk7CisKKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsCisJCSAgICAgIFNHSV9JMkNfSE9MRF9CVVMgfCBTR0lfSTJDX1JFQUQgfCBTR0lfSTJDX05PVF9JRExFKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHdhaXRfeGZlcl9kb25lKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJCWJ1ZltpXSA9IGFkYXAtPnJkYXRhKGFkYXAtPmRhdGEpOworCX0KKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfUkVMRUFTRV9CVVMgfCBTR0lfSTJDX0ZPUkNFX0lETEUpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBpMmNfd3JpdGUoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCS8qIFdlIGFyZSBhbHJlYWR5IGluIHdyaXRlIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWFkYXAtPndkYXRhKGFkYXAtPmRhdGEsIGJ1ZltpXSk7CisJCWlmICh3YWl0X2FjayhhZGFwKSkKKwkJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZ2lfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywKKwkJICAgIGludCBudW0pCit7CisJc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX21zZyAqcDsKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7ICFlcnIgJiYgaSA8IG51bTsgaSsrKSB7CisJCXAgPSAmbXNnc1tpXTsKKwkJZXJyID0gZG9fYWRkcmVzcyhhZGFwLCBwLT5hZGRyLCBwLT5mbGFncyAmIEkyQ19NX1JEKTsKKwkJaWYgKGVyciB8fCAhcC0+bGVuKQorCQkJY29udGludWU7CisJCWlmIChwLT5mbGFncyAmIEkyQ19NX1JEKQorCQkJZXJyID0gaTJjX3JlYWQoYWRhcCwgcC0+YnVmLCBwLT5sZW4pOworCQllbHNlCisJCQllcnIgPSBpMmNfd3JpdGUoYWRhcCwgcC0+YnVmLCBwLT5sZW4pOworCX0KKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiBpOworfQorCitzdGF0aWMgdTMyIHNnaV9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNnaV9hbGdvID0geworCS5tYXN0ZXJfeGZlcgk9IHNnaV94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gc2dpX2Z1bmMsCit9OworCitzdGF0aWMgdW5zaWduZWQgaTJjX3Zpbm9fZ2V0Y3RybCh2b2lkICpkYXRhKQoreworCXJldHVybiB2aW5vLT5pMmNfY29udHJvbDsKK30KKworc3RhdGljIHZvaWQgaTJjX3Zpbm9fc2V0Y3RybCh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCit7CisJdmluby0+aTJjX2NvbnRyb2wgPSB2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpMmNfdmlub19yZGF0YSh2b2lkICpkYXRhKQoreworCXJldHVybiB2aW5vLT5pMmNfZGF0YTsKK30KKworc3RhdGljIHZvaWQgaTJjX3Zpbm9fd2RhdGEodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKQoreworCXZpbm8tPmkyY19kYXRhID0gdmFsOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIGkyY19zZ2lfdmlub19kYXRhID0geworCS5nZXRjdHJsID0gJmkyY192aW5vX2dldGN0cmwsCisJLnNldGN0cmwgPSAmaTJjX3Zpbm9fc2V0Y3RybCwKKwkucmRhdGEgICA9ICZpMmNfdmlub19yZGF0YSwKKwkud2RhdGEgICA9ICZpMmNfdmlub193ZGF0YSwKKwkueGZlcl90aW1lb3V0ID0gMjAwLAorCS5hY2tfdGltZW91dCAgPSAxMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciB2aW5vX2kyY19hZGFwdGVyID0geworCS5uYW1lCQkJPSAiVklOTyBJMkMgYnVzIiwKKwkuaWQJCQk9IEkyQ19IV19TR0lfVklOTywKKwkuYWxnbwkJCT0gJnNnaV9hbGdvLAorCS5hbGdvX2RhdGEJCT0gJmkyY19zZ2lfdmlub19kYXRhLAorCS5vd25lciAJCQk9IFRISVNfTU9EVUxFLAorfTsKKwogLyoKICAqIFByZXBhcmUgVklOTyBmb3IgRE1BIHRyYW5zZmVyLi4uCiAgKiAoZXhlY3V0ZSBvbmx5IHdpdGggdmlub19sb2NrIGFuZCBpbnB1dF9sb2NrIGxvY2tlZCkKQEAgLTI0OTAsODYgKzI1MzEsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdmlub19nZXRfc2FhNzE5MV9ub3JtKHVuc2lnbmVkIGludCBkYXRhX25vcm0pCi17Ci0Jc3dpdGNoIChkYXRhX25vcm0pIHsKLQljYXNlIFZJTk9fREFUQV9OT1JNX0FVVE86Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fQVVUTzsKLQljYXNlIFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX0FVVE9fRVhUOwotCWNhc2UgVklOT19EQVRBX05PUk1fUEFMOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX1BBTDsKLQljYXNlIFZJTk9fREFUQV9OT1JNX05UU0M6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fTlRTQzsKLQljYXNlIFZJTk9fREFUQV9OT1JNX1NFQ0FNOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX1NFQ0FNOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTzogdmlub19nZXRfc2FhNzE5MV9ub3JtKCk6ICIKLQkJICAgICAgICJpbnZhbGlkIG5vcm0hXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotc3RhdGljIGludCB2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybShpbnQgc2FhNzE5MV9ub3JtKQotewotCXN3aXRjaCAoc2FhNzE5MV9ub3JtKSB7Ci0JY2FzZSBTQUE3MTkxX05PUk1fUEFMOgotCQlyZXR1cm4gVklOT19EQVRBX05PUk1fUEFMOwotCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9OVFNDOwotCWNhc2UgU0FBNzE5MV9OT1JNX1NFQ0FNOgotCQlyZXR1cm4gVklOT19EQVRBX05PUk1fU0VDQU07Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiB2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybSgpOiAiCi0JCSAgICAgICAiaW52YWxpZCBub3JtIVxuIik7Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9OT05FOwotCX0KLX0KLQotc3RhdGljIGludCB2aW5vX3NhYTcxOTFfc2V0X25vcm0odW5zaWduZWQgaW50ICpkYXRhX25vcm0pCi17Ci0JaW50IHNhYTcxOTFfbm9ybSwgbmV3X2RhdGFfbm9ybTsKLQlpbnQgZXJyID0gMDsKLQotCXNhYTcxOTFfbm9ybSA9IHZpbm9fZ2V0X3NhYTcxOTFfbm9ybSgqZGF0YV9ub3JtKTsKLQotCWVyciA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX1NFVF9OT1JNLAotCQkJCSAgJnNhYTcxOTFfbm9ybSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKCpkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fQVVUTykKLQkgICAgfHwgKCpkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fQVVUT19FWFQpKSB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyBzdGF0dXM7Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywKLQkJCQkJICAmc3RhdHVzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCW5ld19kYXRhX25vcm0gPQotCQkJdmlub19nZXRfZnJvbV9zYWE3MTkxX25vcm0oc3RhdHVzLm5vcm0pOwotCQlpZiAobmV3X2RhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9OT05FKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkqZGF0YV9ub3JtID0gKHVuc2lnbmVkIGludCluZXdfZGF0YV9ub3JtOwotCX0KLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIC8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwogc3RhdGljIGludCB2aW5vX2lzX2lucHV0X293bmVyKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKIHsKIAlzd2l0Y2godmNzLT5pbnB1dCkgewogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJcmV0dXJuICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKTsKKwkJcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWw7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlyZXR1cm4gKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCk7CisJCXJldHVybiB2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWw7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjU4NSwyMyArMjU1NSwyMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCS8qIEZpcnN0IHRyeSBEMSBhbmQgdGhlbiBTQUE3MTkxICovCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcgotCSAgICAmJiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgewotCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IHZjcy0+Y2hhbm5lbDsKKwlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEKKwkgICAgJiYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkpIHsKKwkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAJCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX0QxOwogCQl2Y3MtPmRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0QxOwotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcgotCQkgICAmJiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkpIHsKLQkJaW50IGlucHV0LCBkYXRhX25vcm07Ci0JCWludCBzYWE3MTkxX2lucHV0OworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyCisJCSAgICYmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgeworCQlpbnQgaW5wdXQ7CisJCWludCBkYXRhX25vcm07CisJCXY0bDJfc3RkX2lkIG5vcm07CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAotCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKTsKIAkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKIAotCQlzYWE3MTkxX2lucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7Ci0JCXJldCA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TRVRfSU5QVVQsCi0JCQkJCSAgJnNhYTcxOTFfaW5wdXQpOworCQlyb3V0ZS5pbnB1dCA9IHZpbm9fZ2V0X3NhYTcxOTFfaW5wdXQoaW5wdXQpOworCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJaWYgKHJldCkgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjYxMiwxMiArMjU4MSwxNSBAQAogCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBhdXRvLWRldGVjdGluZyBub3JtCiAJCSAqIGFzIGl0IG1heSB0YWtlIGEgd2hpbGUuLi4gKi8KIAotCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVDsKLQotCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7Ci0JCWlmICgocmV0ID09IC1FQlVTWSkgfHwgKHJldCA9PSAtRUFHQUlOKSkgewotCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOwotCQkJcmV0ID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOworCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7CisJCWlmICghcmV0KSB7CisJCQlmb3IgKGRhdGFfbm9ybSA9IDA7IGRhdGFfbm9ybSA8IDM7IGRhdGFfbm9ybSsrKSB7CisJCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQorCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKKwkJCXJldCA9IGRlY29kZXJfY2FsbCh0dW5lciwgc19zdGQsIG5vcm0pOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwpAQCAtMjYyNyw3ICsyNTk5LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzLT5jaGFubmVsOworCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAKIAkJdmNzLT5pbnB1dCA9IGlucHV0OwogCQl2Y3MtPmRhdGFfbm9ybSA9IGRhdGFfbm9ybTsKQEAgLTI2NzIsMjUgKzI2NDQsMjQgQEAKIAlzd2l0Y2ggKGlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwkJaWYgKCF2aW5vX2RydmRhdGEtPmRlY29kZXIpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSB7Ci0JCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKTsKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IHZjcy0+Y2hhbm5lbDsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKKwkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQlpbnQgZGF0YV9ub3JtOwotCQkJaW50IHNhYTcxOTFfaW5wdXQ7CisJCQl2NGwyX3N0ZF9pZCBub3JtOworCQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCi0JCQlzYWE3MTkxX2lucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7Ci0JCQlyZXQgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0VUX0lOUFVULAotCQkJCQkJICAmc2FhNzE5MV9pbnB1dCk7CisJCQlyb3V0ZS5pbnB1dCA9IHZpbm9fZ2V0X3NhYTcxOTFfaW5wdXQoaW5wdXQpOworCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtMjcwMCwxOCArMjY3MSwyMSBAQAogCQkJLyogRG9uJ3QgaG9sZCBzcGlubG9ja3Mgd2hpbGUgYXV0by1kZXRlY3Rpbmcgbm9ybQogCQkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVDsKLQotCQkJcmV0ID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOwotCQkJaWYgKChyZXQgID09IC1FQlVTWSkgfHwgKHJldCA9PSAtRUFHQUlOKSkgewotCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKLQkJCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7CisJCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7CisJCQlpZiAoIXJldCkgeworCQkJCWZvciAoZGF0YV9ub3JtID0gMDsgZGF0YV9ub3JtIDwgMzsgZGF0YV9ub3JtKyspIHsKKwkJCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQorCQkJCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7CisJCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAJCQl9CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCQkJaWYgKHJldCkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTI3MjgsMzcgKzI3MDIsMzEgQEAKIAkJCXZjcy0+ZGF0YV9ub3JtID0gdmNzMi0+ZGF0YV9ub3JtOwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQkvKiBUcmFuc2ZlciB0aGUgb3duZXJzaGlwIG9yIHJlbGVhc2UgdGhlIGlucHV0ICovCiAJCQlpZiAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCQl9IGVsc2UgewotCQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPgotCQkJCQkJICAgY2FtZXJhLmRyaXZlcik7Ci0JCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSB7Ci0JCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MtPmNoYW5uZWw7Ci0JCX0KKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzLT5jaGFubmVsOwogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQkvKiBUcmFuc2ZlciB0aGUgb3duZXJzaGlwIG9yIHJlbGVhc2UgdGhlIGlucHV0ICovCiAJCQlpZiAoKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFKSB8fAogCQkJCSAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9TVklERU8pKSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQkJfSBlbHNlIHsKLQkJCQlpMmNfcmVsZWFzZV9jbGllbnQodmlub19kcnZkYXRhLT4KLQkJCQkJCSAgIGRlY29kZXIuZHJpdmVyKTsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQkJfQogCQl9CiAKQEAgLTI3OTUsMjAgKzI3NjMsMTggQEAKIAkvKiBSZWxlYXNlIG93bmVyc2hpcCBvZiB0aGUgY2hhbm5lbAogCSAqIGFuZCBpZiB0aGUgb3RoZXIgY2hhbm5lbCB0YWtlcyBpbnB1dCBmcm9tCiAJICogdGhlIHNhbWUgc291cmNlLCB0cmFuc2ZlciB0aGUgb3duZXJzaGlwICovCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJaWYgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKIAkJfSBlbHNlIHsKLQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IHZjcy0+Y2hhbm5lbCkgewogCQlpZiAoKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFKSB8fAogCQkJICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IHZjczItPmNoYW5uZWw7CisJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQl9IGVsc2UgewotCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQl9CiAJfQogCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX05PTkU7CkBAIC0yODI5LDE4ICsyNzk1LDE2IEBACiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgogCQkvKiBvbmx5IG9uZSAibm9ybSIgc3VwcG9ydGVkICovCi0JCWlmICgoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0QxKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpCisJCWlmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fRDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7CisJCXY0bDJfc3RkX2lkIG5vcm07CisKIAkJaWYgKChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fUEFMKQogCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9OVFNDKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9TRUNBTSkKLQkJICAgICYmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fQVVUTykKLQkJICAgICYmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fQVVUT19FWFQpKQorCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9TRUNBTSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssICpmbGFncyk7CkBAIC0yODQ4LDcgKzI4MTIsOCBAQAogCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBzZXR0aW5nIG5vcm0KIAkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCWVyciA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKKwkJbm9ybSA9IHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZDsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgKmZsYWdzKTsKIApAQCAtMjg4NCw0MSArMjg0OSwxMyBAQAogCXJldHVybiBWSU5PX0RBVEFfRk1UX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgdmlub19lbnVtX2RhdGFfbm9ybShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIF9fdTMyIGluZGV4KQotewotCWludCBkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9OT05FOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoKHZjcy0+aW5wdXQpIHsKLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86Ci0JCWlmIChpbmRleCA9PSAwKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JCX0gZWxzZSBpZiAoaW5kZXggPT0gMSkgewotCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fTlRTQzsKLQkJfSBlbHNlIGlmIChpbmRleCA9PSAyKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9TRUNBTTsKLQkJfQotCQlicmVhazsKLQljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCWlmIChpbmRleCA9PSAwKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9EMTsKLQkJfQotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZGF0YV9ub3JtOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZW51bV9pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIF9fdTMyIGluZGV4KQorc3RhdGljIGludCB2aW5vX2ludF9lbnVtX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCiB7CiAJaW50IGlucHV0ID0gVklOT19JTlBVVF9OT05FOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgMDoKIAkJCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7CkBAIC0yOTMwLDcgKzI4NjcsNyBAQAogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0QxOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgMDoKIAkJCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7CkBAIC0yOTM5LDcgKzI4NzYsNyBAQAogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX1NWSURFTzsKIAkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0QxOwpAQCAtMjk1Nyw3ICsyODk0LDcgQEAKIAlfX3UzMiBpbmRleCA9IDA7CiAJLy8gRklYTUU6IGRldGVjdCB3aGVuIG5vIGlucHV0cyBhdmFpbGFibGUKIAotCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyICYmIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJCQlpbmRleCA9IDA7CkBAIC0yOTY5LDcgKzI5MDYsNyBAQAogCQkJaW5kZXggPSAyOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAkJCWluZGV4ID0gMDsKQEAgLTI5NzgsNyArMjkxNSw3IEBACiAJCQlpbmRleCA9IDE7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0QxOgogCQkJaW5kZXggPSAwOwpAQCAtMjk5MSw3ICsyOTI4LDggQEAKIAogLyogVjRMMiBpb2N0bHMgKi8KIAotc3RhdGljIHZvaWQgdmlub192NGwyX3F1ZXJ5Y2FwKHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3N0YXRpYyBpbnQgdmlub19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCW1lbXNldChjYXAsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CiAKQEAgLTMwMDMsMTYgKzI5NDEsMTggQEAKIAkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1NUUkVBTUlORzsKIAkvLyBWNEwyX0NBUF9PVkVSTEFZLCBWNEwyX0NBUF9SRUFEV1JJVEUKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bWlucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2lucHV0ICppKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJX191MzIgaW5kZXggPSBpLT5pbmRleDsKIAlpbnQgaW5wdXQ7CiAJZHByaW50aygicmVxdWVzdGVkIGluZGV4ID0gJWRcbiIsIGluZGV4KTsKIAotCWlucHV0ID0gdmlub19lbnVtX2lucHV0KHZjcywgaW5kZXgpOworCWlucHV0ID0gdmlub19pbnRfZW51bV9pbnB1dCh2Y3MsIGluZGV4KTsKIAlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzAyMywyMCArMjk2MywxNSBAQAogCWktPnN0ZCA9IHZpbm9faW5wdXRzW2lucHV0XS5zdGQ7CiAJc3RyY3B5KGktPm5hbWUsIHZpbm9faW5wdXRzW2lucHV0XS5uYW1lKTsKIAotCWlmICgoaW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpCi0JICAgIHx8IChpbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJc3RydWN0IHNhYTcxOTFfc3RhdHVzIHN0YXR1czsKLQkJaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCWktPnN0YXR1cyB8PSBzdGF0dXMuc2lnbmFsID8gMCA6IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCQlpLT5zdGF0dXMgfD0gc3RhdHVzLmNvbG9yID8gMCA6IFY0TDJfSU5fU1RfTk9fQ09MT1I7Ci0JfQotCisJaWYgKGlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFIHx8IGlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKQorCQlkZWNvZGVyX2NhbGwodmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmaS0+c3RhdHVzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgdW5zaWduZWQgaW50ICppKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJX191MzIgaW5kZXg7CiAJaW50IGlucHV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDU3LDUyICsyOTkyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW50IHZpbm9fc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgaW5wdXQ7Ci0JZHByaW50aygicmVxdWVzdGVkIGlucHV0ID0gJWRcbiIsICppKTsKKwlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5wdXQgPSAlZFxuIiwgaSk7CiAKLQlpbnB1dCA9IHZpbm9fZW51bV9pbnB1dCh2Y3MsICppKTsKKwlpbnB1dCA9IHZpbm9faW50X2VudW1faW5wdXQodmNzLCBpKTsKIAlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB2aW5vX3NldF9pbnB1dCh2Y3MsIGlucHV0KTsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bXN0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgIHN0cnVjdCB2NGwyX3N0YW5kYXJkICpzKQotewotCWludCBpbmRleCA9IHMtPmluZGV4OwotCWludCBkYXRhX25vcm07Ci0KLQlkYXRhX25vcm0gPSB2aW5vX2VudW1fZGF0YV9ub3JtKHZjcywgaW5kZXgpOwotCWRwcmludGsoInN0YW5kYXJkIGluZGV4ID0gJWRcbiIsIGluZGV4KTsKLQotCWlmIChkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fTk9ORSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHJpbnRrKCJzdGFuZGFyZCBuYW1lID0gJXNcbiIsCi0JICAgICAgIHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmRlc2NyaXB0aW9uKTsKLQotCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKLQlzLT5pbmRleCA9IGluZGV4OwotCi0Jcy0+aWQgPSB2aW5vX2RhdGFfbm9ybXNbZGF0YV9ub3JtXS5zdGQ7Ci0Jcy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQlzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9Ci0JCXZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmZwc19tYXg7Ci0Jcy0+ZnJhbWVsaW5lcyA9Ci0JCXZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmZyYW1lbGluZXM7Ci0Jc3RyY3B5KHMtPm5hbWUsCi0JICAgICAgIHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmRlc2NyaXB0aW9uKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeXN0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzExNCwxOSArMzAyMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgc3RhdHVzOwotCi0JCWkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCi0JCWlmIChzdGF0dXMuc2lnbmFsKSB7Ci0JCQlpZiAoc3RhdHVzLnNpZ25hbF82MGh6KSB7Ci0JCQkJKnN0ZCA9IFY0TDJfU1REX05UU0M7Ci0JCQl9IGVsc2UgewotCQkJCSpzdGQgPSBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCSpzdGQgPSB2aW5vX2lucHV0c1t2Y3MtPmlucHV0XS5zdGQ7Ci0JCX0KKwkJZGVjb2Rlcl9jYWxsKHZpZGVvLCBxdWVyeXN0ZCwgc3RkKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC0zMTM4LDkgKzMwMzMsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX3N0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKQEAgLTMxNTMsOSArMzA0OSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX3N0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMzE3NiwxMiArMzA3Myw3IEBACiAJCWlmICh2Y3MtPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkKLQkJICAgICYmICgoKnN0ZCkgJiBWNEwyX1NURF9OVFNDKQotCQkgICAgJiYgKCgqc3RkKSAmIFY0TDJfU1REX1NFQ0FNKSkgewotCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fQVVUT19FWFQsCi0JCQkJCQkgJmZsYWdzKTsKLQkJfSBlbHNlIGlmICgoKnN0ZCkgJiBWNEwyX1NURF9QQUwpIHsKKwkJaWYgKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkgewogCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fUEFMLAogCQkJCQkJICZmbGFncyk7CiAJCX0gZWxzZSBpZiAoKCpzdGQpICYgVjRMMl9TVERfTlRTQykgewpAQCAtMzIwNywxODUgKzMwOTksMTQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bV9mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmZCkKIHsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZkLT50eXBlOwotCWludCBpbmRleCA9IGZkLT5pbmRleDsKLQlkcHJpbnRrKCJmb3JtYXQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOworCWRwcmludGsoImZvcm1hdCBpbmRleCA9ICVkXG4iLCBmZC0+aW5kZXgpOwogCi0Jc3dpdGNoIChmZC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoKGZkLT5pbmRleCA8IDApIHx8Ci0JCSAgICAoZmQtPmluZGV4ID49IFZJTk9fREFUQV9GTVRfQ09VTlQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRwcmludGsoImZvcm1hdCBuYW1lID0gJXNcbiIsCi0JCSAgICAgICB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0uZGVzY3JpcHRpb24pOwotCi0JCW1lbXNldChmZCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2ZtdGRlc2MpKTsKLQkJZmQtPmluZGV4ID0gaW5kZXg7Ci0JCWZkLT50eXBlID0gdHlwZTsKLQkJZmQtPnBpeGVsZm9ybWF0ID0gdmlub19kYXRhX2Zvcm1hdHNbaW5kZXhdLnBpeGVsZm9ybWF0OwotCQlzdHJjcHkoZmQtPmRlc2NyaXB0aW9uLCB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0uZGVzY3JpcHRpb24pOwotCQlicmVhazsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCWlmIChmZC0+aW5kZXggPj0gVklOT19EQVRBX0ZNVF9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWRwcmludGsoImZvcm1hdCBuYW1lID0gJXNcbiIsIHZpbm9fZGF0YV9mb3JtYXRzW2ZkLT5pbmRleF0uZGVzY3JpcHRpb24pOwogCisJZmQtPnBpeGVsZm9ybWF0ID0gdmlub19kYXRhX2Zvcm1hdHNbZmQtPmluZGV4XS5waXhlbGZvcm1hdDsKKwlzdHJjcHkoZmQtPmRlc2NyaXB0aW9uLCB2aW5vX2RhdGFfZm9ybWF0c1tmZC0+aW5kZXhdLmRlc2NyaXB0aW9uKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfdHJ5X2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIHRlbXB2Y3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OwogCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKKwlkcHJpbnRrKCJyZXF1ZXN0ZWQ6IHcgPSAlZCwgaCA9ICVkXG4iLAorCQkJcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKIAotCQlkcHJpbnRrKCJyZXF1ZXN0ZWQ6IHcgPSAlZCwgaCA9ICVkXG4iLAotCQkgICAgICAgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJbWVtY3B5KCZ0ZW1wdmNzLCB2Y3MsIHNpemVvZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQltZW1jcHkoJnRlbXB2Y3MsIHZjcywgc2l6ZW9mKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwotCQlpZiAodGVtcHZjcy5kYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKLQkJCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCQlwZi0+cGl4ZWxmb3JtYXQgPQotCQkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLgotCQkJCXBpeGVsZm9ybWF0OwotCQl9Ci0KLQkJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KLQkJdmlub19zZXRfc2NhbGluZygmdGVtcHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKLQotCQlkcHJpbnRrKCJkYXRhIGZvcm1hdCA9ICVzXG4iLAotCQkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOwotCi0JCXBmLT53aWR0aCA9ICh0ZW1wdmNzLmNsaXBwaW5nLnJpZ2h0IC0gdGVtcHZjcy5jbGlwcGluZy5sZWZ0KSAvCi0JCQl0ZW1wdmNzLmRlY2ltYXRpb247Ci0JCXBmLT5oZWlnaHQgPSAodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLwotCQkJdGVtcHZjcy5kZWNpbWF0aW9uOwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHRlbXB2Y3MubGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdGVtcHZjcy5saW5lX3NpemUgKgotCQkJKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KLQkJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQlwZi0+d2lkdGggPSAodmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdCkgLwotCQkJdmNzLT5kZWNpbWF0aW9uOwotCQlwZi0+aGVpZ2h0ID0gKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKKwl0ZW1wdmNzLmRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7CisJaWYgKHRlbXB2Y3MuZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7CisJCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7CiAJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5waXhlbGZvcm1hdDsKLQotCQlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKLQkJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKLQkJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5jb2xvcnNwYWNlID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7Ci0KLQkJcGYtPnByaXYgPSAwOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS4KKwkJCXBpeGVsZm9ybWF0OwogCX0KIAorCS8qIGRhdGEgZm9ybWF0IG11c3QgYmUgc2V0IGJlZm9yZSBjbGlwcGluZy9zY2FsaW5nICovCisJdmlub19zZXRfc2NhbGluZygmdGVtcHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKworCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCisJCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5kZXNjcmlwdGlvbik7CisKKwlwZi0+d2lkdGggPSAodGVtcHZjcy5jbGlwcGluZy5yaWdodCAtIHRlbXB2Y3MuY2xpcHBpbmcubGVmdCkgLworCQl0ZW1wdmNzLmRlY2ltYXRpb247CisJcGYtPmhlaWdodCA9ICh0ZW1wdmNzLmNsaXBwaW5nLmJvdHRvbSAtIHRlbXB2Y3MuY2xpcHBpbmcudG9wKSAvCisJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdGVtcHZjcy5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHRlbXB2Y3MubGluZV9zaXplICoKKwkJKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KKwkJdGVtcHZjcy5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisKKwlwZi0+d2lkdGggPSAodmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdCkgLworCQl2Y3MtPmRlY2ltYXRpb247CisJcGYtPmhlaWdodCA9ICh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+cGl4ZWxmb3JtYXQgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5waXhlbGZvcm1hdDsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdmNzLT5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKKwkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpbm9fc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBkYXRhX2Zvcm1hdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CiAKLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJZGF0YV9mb3JtYXQgPSB2aW5vX2ZpbmRfZGF0YV9mb3JtYXQocGYtPnBpeGVsZm9ybWF0KTsKIAotCQlkYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwotCi0JCWlmIChkYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKLQkJCXZjcy0+ZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCQlwZi0+cGl4ZWxmb3JtYXQgPQotCQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLgotCQkJCXBpeGVsZm9ybWF0OwotCQl9IGVsc2UgewotCQkJdmNzLT5kYXRhX2Zvcm1hdCA9IGRhdGFfZm9ybWF0OwotCQl9Ci0KLQkJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KLQkJdmlub19zZXRfc2NhbGluZyh2Y3MsIHBmLT53aWR0aCwgcGYtPmhlaWdodCk7Ci0KLQkJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKLQkJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKLQotCQlwZi0+d2lkdGggPSB2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0OwotCQlwZi0+aGVpZ2h0ID0gdmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcDsKLQotCQlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKLQkJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKLQkJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5jb2xvcnNwYWNlID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7Ci0KLQkJcGYtPnByaXYgPSAwOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgeworCQl2Y3MtPmRhdGFfZm9ybWF0ID0gVklOT19EQVRBX0ZNVF9HUkVZOworCQlwZi0+cGl4ZWxmb3JtYXQgPQorCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uCisJCQlwaXhlbGZvcm1hdDsKKwl9IGVsc2UgeworCQl2Y3MtPmRhdGFfZm9ybWF0ID0gZGF0YV9mb3JtYXQ7CiAJfQogCisJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KKwl2aW5vX3NldF9zY2FsaW5nKHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKworCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCisJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKKworCXBmLT53aWR0aCA9IHZjcy0+Y2xpcHBpbmcucmlnaHQgLSB2Y3MtPmNsaXBwaW5nLmxlZnQ7CisJcGYtPmhlaWdodCA9IHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3A7CisKKwlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOworCXBmLT5zaXplaW1hZ2UgPSB2Y3MtPmxpbmVfc2l6ZSAqCisJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+Y29sb3JzcGFjZSA9CisJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7CisKKwlwZi0+cHJpdiA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfY3JvcGNhcChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2NhcCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWNvbnN0IHN0cnVjdCB2aW5vX2RhdGFfbm9ybSAqbm9ybTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNDE1LDkgKzMyNjYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19jcm9wKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfY3JvcCAqYykKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzd2l0Y2ggKGMtPnR5cGUpIHsKQEAgLTM0MzksOSArMzI5MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX2Nyb3Aoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoYy0+dHlwZSkgewpAQCAtMzQ2MSwxMDggKzMzMTQsODMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19wYXJtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwogCi0Jc3dpdGNoIChzcC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwotCQltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSkpOworCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCWNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKIAotCQljcC0+Y2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKLQkJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHZjcy0+ZnBzOwogCi0JCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSB2Y3MtPmZwczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkvLyBUT0RPOiBjcC0+cmVhZGJ1ZmZlcnMgPSB4eHg7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJLyogVE9ETzogY3AtPnJlYWRidWZmZXJzID0geHh4OyAqLwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfcGFybShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKIAotCXN3aXRjaCAoc3AtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKLQkJICAgIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID09IDApKSB7Ci0JCQkvKiByZXNldCBmcmFtZXJhdGUgKi8KLQkJCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7Ci0JCX0gZWxzZSB7Ci0JCQl2aW5vX3NldF9mcmFtZXJhdGUodmNzLCBjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yIC8KLQkJCQkJICAgY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJLy8gVE9ETzogc2V0IGJ1ZmZlcnMgYWNjb3JkaW5nIHRvIGNwLT5yZWFkYnVmZmVycwotCQlicmVhazsKKwlpZiAoKGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID09IDApIHx8CisJICAgIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID09IDApKSB7CisJCS8qIHJlc2V0IGZyYW1lcmF0ZSAqLworCQl2aW5vX3NldF9kZWZhdWx0X2ZyYW1lcmF0ZSh2Y3MpOworCX0gZWxzZSB7CisJCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgLworCQkJCSAgIGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yKTsKIAl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfcmVxYnVmcyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChyYi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKLQkJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygidHlwZSBub3QgbW1hcFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHByaW50aygiY291bnQgPSAlZFxuIiwgcmItPmNvdW50KTsKKwlpZiAocmItPmNvdW50ID4gMCkgeworCQlpZiAodmlub19pc19jYXB0dXJpbmcodmNzKSkgeworCQkJZHByaW50aygiYnVzeSwgY2FwdHVyaW5nXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlkcHJpbnRrKCJjb3VudCA9ICVkXG4iLCByYi0+Y291bnQpOwotCQlpZiAocmItPmNvdW50ID4gMCkgewotCQkJaWYgKHZpbm9faXNfY2FwdHVyaW5nKHZjcykpIHsKLQkJCQlkcHJpbnRrKCJidXN5LCBjYXB0dXJpbmdcbiIpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0KLQkJCWlmICh2aW5vX3F1ZXVlX2hhc19tYXBwZWRfYnVmZmVycygmdmNzLT5mYl9xdWV1ZSkpIHsKLQkJCQlkcHJpbnRrKCJidXN5LCBidWZmZXJzIHN0aWxsIG1hcHBlZFxuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0gZWxzZSB7Ci0JCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCQkJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7Ci0JCQkJdmlub19xdWV1ZV9pbml0KCZ2Y3MtPmZiX3F1ZXVlLCAmcmItPmNvdW50KTsKLQkJCX0KKwkJaWYgKHZpbm9fcXVldWVfaGFzX21hcHBlZF9idWZmZXJzKCZ2Y3MtPmZiX3F1ZXVlKSkgeworCQkJZHByaW50aygiYnVzeSwgYnVmZmVycyBzdGlsbCBtYXBwZWRcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfSBlbHNlIHsKIAkJCXZjcy0+c3RyZWFtaW5nID0gMDsKLQkJCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7CiAJCQl2aW5vX3F1ZXVlX2ZyZWUoJnZjcy0+ZmJfcXVldWUpOworCQkJdmlub19xdWV1ZV9pbml0KCZ2Y3MtPmZiX3F1ZXVlLCAmcmItPmNvdW50KTsKIAkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJdmNzLT5zdHJlYW1pbmcgPSAwOworCQl2aW5vX2NhcHR1cmVfc3RvcCh2Y3MpOworCQl2aW5vX3F1ZXVlX2ZyZWUoJnZjcy0+ZmJfcXVldWUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzYwNiwxNTYgKzM0MzQsMTM1IEBACiAJCWZiLT5pZCwgZmItPnNpemUsIGZiLT5kYXRhX3NpemUsIGZiLT5vZmZzZXQpOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeWJ1ZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOwotCi0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKLQkJaWYgKGItPmluZGV4ID49IHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSkpIHsKLQkJCWRwcmludGsoImludmFsaWQgaW5kZXggPSAlZFxuIiwKLQkJCSAgICAgICBiLT5pbmRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZiID0gdmlub19xdWV1ZV9nZXRfYnVmZmVyKCZ2Y3MtPmZiX3F1ZXVlLAotCQkJCQkgICBiLT5pbmRleCk7Ci0JCWlmIChmYiA9PSBOVUxMKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9idWZmZXIoKSBmYWlsZWQiKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKGItPmluZGV4ID49IHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSkpIHsKKwkJZHByaW50aygiaW52YWxpZCBpbmRleCA9ICVkXG4iLAorCQkgICAgICAgYi0+aW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlmYiA9IHZpbm9fcXVldWVfZ2V0X2J1ZmZlcigmdmNzLT5mYl9xdWV1ZSwKKwkJCQkgICBiLT5pbmRleCk7CisJaWYgKGZiID09IE5VTEwpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9nZXRfYnVmZmVyKCkgZmFpbGVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xYnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7CisJaW50IHJldDsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JCWludCByZXQ7Ci0KLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAoYi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKLQkJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmYiA9IHZpbm9fY2FwdHVyZV9lbnF1ZXVlKHZjcywgYi0+aW5kZXgpOwotCQlpZiAoZmIgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKLQotCQlpZiAodmNzLT5zdHJlYW1pbmcpIHsKLQkJCXJldCA9IHZpbm9fY2FwdHVyZV9uZXh0KHZjcywgMSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6CisJLyogVE9ETzogY2hlY2sgcXVldWUgdHlwZSAqLworCWlmIChiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJZmIgPSB2aW5vX2NhcHR1cmVfZW5xdWV1ZSh2Y3MsIGItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7CisKKwlpZiAodmNzLT5zdHJlYW1pbmcpIHsKKwkJcmV0ID0gdmlub19jYXB0dXJlX25leHQodmNzLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2RxYnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKLQkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYiwKLQkJCSAgIHVuc2lnbmVkIGludCBub25ibG9ja2luZykKK3N0YXRpYyBpbnQgdmlub19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXVuc2lnbmVkIGludCBub25ibG9ja2luZyA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwl1bnNpZ25lZCBpbnQgaW5jb21pbmcsIG91dGdvaW5nOworCWludCBlcnI7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOwotCQl1bnNpZ25lZCBpbnQgaW5jb21pbmcsIG91dGdvaW5nOwotCQlpbnQgZXJyOworCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KIAotCQkvLyBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlCisJZXJyID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllcnIgPSB2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygmdmNzLT5mYl9xdWV1ZSwgJm91dGdvaW5nKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JCWVyciA9IHZpbm9fcXVldWVfZ2V0X2luY29taW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmaW5jb21pbmcpOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7CisJZHByaW50aygiaW5jb21pbmcgPSAlZCwgb3V0Z29pbmcgPSAlZFxuIiwgaW5jb21pbmcsIG91dGdvaW5nKTsKKworCWlmIChvdXRnb2luZyA9PSAwKSB7CisJCWlmIChpbmNvbWluZyA9PSAwKSB7CisJCQlkcHJpbnRrKCJubyBpbmNvbWluZyBvciBvdXRnb2luZyBidWZmZXJzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWVyciA9IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmb3V0Z29pbmcpOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygpIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG5vbmJsb2NraW5nKSB7CisJCQlkcHJpbnRrKCJub24tYmxvY2tpbmcgSS9PIHdhcyBzZWxlY3RlZCBhbmQgIgorCQkJCSJ0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBkZXF1ZXVlXG4iKTsKKwkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAKLQkJZHByaW50aygiaW5jb21pbmcgPSAlZCwgb3V0Z29pbmcgPSAlZFxuIiwgaW5jb21pbmcsIG91dGdvaW5nKTsKLQotCQlpZiAob3V0Z29pbmcgPT0gMCkgewotCQkJaWYgKGluY29taW5nID09IDApIHsKLQkJCQlkcHJpbnRrKCJubyBpbmNvbWluZyBvciBvdXRnb2luZyBidWZmZXJzXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChub25ibG9ja2luZykgewotCQkJCWRwcmludGsoIm5vbi1ibG9ja2luZyBJL08gd2FzIHNlbGVjdGVkIGFuZCAiCi0JCQkJCSJ0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBkZXF1ZXVlXG4iKTsKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCX0KLQorCQllcnIgPSB2aW5vX3dhaXRfZm9yX2ZyYW1lKHZjcyk7CisJCWlmIChlcnIpIHsKIAkJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKIAkJCWlmIChlcnIpIHsKLQkJCQllcnIgPSB2aW5vX3dhaXRfZm9yX2ZyYW1lKHZjcyk7Ci0JCQkJaWYgKGVycikgewotCQkJCQkvKiBpbnRlcnJ1cHRlZCBvcgotCQkJCQkgKiBubyBmcmFtZXMgY2FwdHVyZWQgYmVjYXVzZQotCQkJCQkgKiBvZiBmcmFtZSBza2lwcGluZyAqLwotCQkJCQkvLyB2aW5vX2NhcHR1cmVfZmFpbGVkKHZjcyk7Ci0JCQkJCXJldHVybiAtRUlPOwotCQkJCX0KKwkJCQkvKiBpbnRlcnJ1cHRlZCBvciBubyBmcmFtZXMgY2FwdHVyZWQgYmVjYXVzZSBvZgorCQkJCSAqIGZyYW1lIHNraXBwaW5nICovCisJCQkJLyogdmlub19jYXB0dXJlX2ZhaWxlZCh2Y3MpOyAqLworCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQl9Ci0KLQkJZmIgPSB2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmItPmluZGV4KTsKLQkJaWYgKGZiID09IE5VTEwpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfcmVtb3ZlKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZXJyID0gdmlub19jaGVja19idWZmZXIodmNzLCBmYik7Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlicmVhazsKIAl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKworCWZiID0gdmlub19xdWV1ZV9yZW1vdmUoJnZjcy0+ZmJfcXVldWUsICZiLT5pbmRleCk7CisJaWYgKGZiID09IE5VTEwpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwllcnIgPSB2aW5vX2NoZWNrX2J1ZmZlcih2Y3MsIGZiKTsKKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3N0cmVhbW9uKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKK3N0YXRpYyBpbnQgdmlub19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBpbnQgaW5jb21pbmc7CiAJaW50IHJldDsKIAlpZiAodmNzLT5yZWFkaW5nKQpAQCAtMzc5Miw4ICszNTk5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3N0cmVhbW9mZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MpCitzdGF0aWMgaW50IHZpbm9fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQllbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTM4MDYsOSArMzYxNSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeWN0cmwoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnF1ZXJ5Y3RybCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CkBAIC0zODU1LDkgKzM2NjUsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2N0cmwoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjb250cm9sKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgZXJyID0gMDsKQEAgLTM4NjYsNTYgKzM2NzcsMzggQEAKIAogCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCWNhc2UgVklOT19JTlBVVF9EMTogewotCQlzdHJ1Y3QgaW5keWNhbV9jb250cm9sIGluZHljYW1fY3RybDsKLQorCQllcnIgPSAtRUlOVkFMOwogCQlmb3IgKGkgPSAwOyBpIDwgVklOT19JTkRZQ0FNX1Y0TDJfQ09OVFJPTF9DT1VOVDsgaSsrKSB7Ci0JCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0KLQkJCSAgICBjb250cm9sLT5pZCkgewotCQkJCWdvdG8gZm91bmQxOworCQkJaWYgKHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCi1mb3VuZDE6Ci0JCWluZHljYW1fY3RybC50eXBlID0gdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ucmVzZXJ2ZWRbMF07Ci0KLQkJZXJyID0gaTJjX2NhbWVyYV9jb21tYW5kKERFQ09ERVJfSU5EWUNBTV9HRVRfQ09OVFJPTCwKLQkJCQkJICZpbmR5Y2FtX2N0cmwpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCX0KIAotCQljb250cm9sLT52YWx1ZSA9IGluZHljYW1fY3RybC52YWx1ZTsKKwkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKKwkJaWYgKGVycikKKwkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJc3RydWN0IHNhYTcxOTFfY29udHJvbCBzYWE3MTkxX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlnb3RvIGZvdW5kMjsKKwkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQotZm91bmQyOgotCQlzYWE3MTkxX2N0cmwudHlwZSA9IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCi0JCWVyciA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX0dFVF9DT05UUk9MLAotCQkJCQkgICZzYWE3MTkxX2N0cmwpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCX0KIAotCQljb250cm9sLT52YWx1ZSA9IHNhYTcxOTFfY3RybC52YWx1ZTsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKGNvcmUsIGdfY3RybCwgY29udHJvbCk7CisJCWlmIChlcnIpCisJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTM5MjgsOSArMzcyMSwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfY3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBlcnIgPSAwOwpAQCAtMzk0NCw2NSArMzczOCw0MyBAQAogCiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOiB7Ci0JCXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgaW5keWNhbV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJaWYgKChjb250cm9sLT52YWx1ZSA+PQotCQkJCSAgICAgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSkKLQkJCQkgICAgJiYgKGNvbnRyb2wtPnZhbHVlIDw9Ci0JCQkJCXZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLgotCQkJCQltYXhpbXVtKSkgewotCQkJCQlnb3RvIGZvdW5kMTsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIgPSAtRVJBTkdFOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0KLWZvdW5kMToKLQkJaW5keWNhbV9jdHJsLnR5cGUgPSB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQkJaW5keWNhbV9jdHJsLnZhbHVlID0gY29udHJvbC0+dmFsdWU7Ci0KLQkJZXJyID0gaTJjX2NhbWVyYV9jb21tYW5kKERFQ09ERVJfSU5EWUNBTV9TRVRfQ09OVFJPTCwKLQkJCQkJICZpbmR5Y2FtX2N0cmwpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWlmIChjb250cm9sLT52YWx1ZSA8IHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLm1pbmltdW0gfHwKKwkJICAgIGNvbnRyb2wtPnZhbHVlID4gdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWF4aW11bSkgeworCQkJZXJyID0gLUVSQU5HRTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IGNhbWVyYV9jYWxsKGNvcmUsIHNfY3RybCwgY29udHJvbCk7CiAJCWlmIChlcnIpCiAJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgc2FhNzE5MV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX1NBQTcxOTFfVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJaWYgKChjb250cm9sLT52YWx1ZSA+PQotCQkJCSAgICAgdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSkKLQkJCQkgICAgJiYgKGNvbnRyb2wtPnZhbHVlIDw9Ci0JCQkJCXZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLgotCQkJCQltYXhpbXVtKSkgewotCQkJCQlnb3RvIGZvdW5kMjsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIgPSAtRVJBTkdFOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCQlpZiAodmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWlmIChjb250cm9sLT52YWx1ZSA8IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLm1pbmltdW0gfHwKKwkJICAgIGNvbnRyb2wtPnZhbHVlID4gdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWF4aW11bSkgeworCQkJZXJyID0gLUVSQU5HRTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLWZvdW5kMjoKLQkJc2FhNzE5MV9jdHJsLnR5cGUgPSB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQkJc2FhNzE5MV9jdHJsLnZhbHVlID0gY29udHJvbC0+dmFsdWU7Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfU0VUX0NPTlRST0wsCi0JCQkJCSAgJnNhYTcxOTFfY3RybCk7CisJCWVyciA9IGRlY29kZXJfY2FsbChjb3JlLCBzX2N0cmwsIGNvbnRyb2wpOwogCQlpZiAoZXJyKQogCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC00MjMzLDExNiArNDAwNSw5IEBACiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKIGVycm9yOgotCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcgdmlub19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLSNpZmRlZiBWSU5PX0RFQlVHCi0Jc3dpdGNoIChfSU9DX1RZUEUoY21kKSkgewotCWNhc2UgJ3YnOgotCQlkcHJpbnRrKCJpb2N0bCgpOiBWNEwxIHVuc3VwcG9ydGVkICgweCUwOHgpXG4iLCBjbWQpOwotCQlicmVhazsKLQljYXNlICdWJzoKLQkJZHByaW50aygiaW9jdGwoKTogVjRMMiAlcyAoMHglMDh4KVxuIiwKLQkJCXY0bDJfaW9jdGxfbmFtZXNbX0lPQ19OUihjbWQpXSwgY21kKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygiaW9jdGwoKTogdW5zdXBwb3J0ZWQgY29tbWFuZCAweCUwOHhcbiIsIGNtZCk7Ci0JfQotI2VuZGlmCi0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIFY0TDIgaW50ZXJmYWNlICovCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6IHsKLQkJdmlub192NGwyX3F1ZXJ5Y2FwKGFyZyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9lbnVtaW5wdXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19pbnB1dCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2lucHV0KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfRU5VTVNURDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1zdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWVNURDogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5c3RkKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19TVEQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX3N0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19zdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1fZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX3RyeV9mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX2dfZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2ZtdCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0NST1BDQVA6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9jcm9wY2FwKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19DUk9QOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19jcm9wKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19DUk9QOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19jcm9wKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19QQVJNOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19wYXJtKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19QQVJNOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19wYXJtKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfUkVRQlVGUzogewotCQlyZXR1cm4gdmlub192NGwyX3JlcWJ1ZnModmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5YnVmKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfUUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX3FidWYodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19EUUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX2RxYnVmKHZjcywgYXJnLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JfQotCWNhc2UgVklESU9DX1NUUkVBTU9OOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc3RyZWFtb24odmNzKTsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc3RyZWFtb2ZmKHZjcyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5Y3RybCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX2dfY3RybCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX3NfY3RybCh2Y3MsIGFyZyk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBsb25nIHZpbm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDM1Miw3ICs0MDE3LDcgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2Y3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FSU5UUjsKIAotCXJldCA9IHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB2aW5vX2RvX2lvY3RsKTsKKwlyZXQgPSB2aWRlb19pb2N0bDIoZmlsZSwgY21kLCBhcmcpOwogCiAJbXV0ZXhfdW5sb2NrKCZ2Y3MtPm11dGV4KTsKIApAQCAtNDM2NCw0NSArNDAyOSw3NSBAQAogLyogX19pbml0ZGF0YSAqLwogc3RhdGljIGludCB2aW5vX2luaXRfc3RhZ2U7CiAKK2NvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aW5vX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgID0gdmlub19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJICAgICA9IHZpbm9fZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkgICAgID0gdmlub19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCSAgICAgPSB2aW5vX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkgICAgID0gdmlub19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAJICAgICA9IHZpbm9fZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAJICAgICA9IHZpbm9fZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgICAJICAgICA9IHZpbm9fc19pbnB1dCwKKwkudmlkaW9jX2dfc3RkIAkJICAgICA9IHZpbm9fZ19zdGQsCisJLnZpZGlvY19zX3N0ZCAJCSAgICAgPSB2aW5vX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5c3RkLAorCS52aWRpb2NfY3JvcGNhcCAgICAgIAkgICAgID0gdmlub19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wICAgICAgIAkgICAgID0gdmlub19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgICAgICAgCSAgICAgPSB2aW5vX2dfY3JvcCwKKwkudmlkaW9jX3NfcGFybSAJCSAgICAgPSB2aW5vX3NfcGFybSwKKwkudmlkaW9jX2dfcGFybSAJCSAgICAgPSB2aW5vX2dfcGFybSwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgID0gdmlub19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICAgPSB2aW5vX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgICA9IHZpbm9fZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb2ZmLAorCS52aWRpb2NfcXVlcnljdHJsICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgID0gdmlub19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgICA9IHZpbm9fc19jdHJsLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aW5vX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHZpbm9fb3BlbiwKIAkucmVsZWFzZQk9IHZpbm9fY2xvc2UsCi0JLmlvY3RsCQk9IHZpbm9faW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gdmlub19pb2N0bCwKIAkubW1hcAkJPSB2aW5vX21tYXAsCiAJLnBvbGwJCT0gdmlub19wb2xsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdjRsX2RldmljZV90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXZfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCT0gIk5PVCBTRVQiLAogCS5mb3BzCQk9ICZ2aW5vX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdmlub19pb2N0bF9vcHMsCisJLnR2bm9ybXMgCT0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAogCS5taW5vcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIHZpbm9fbW9kdWxlX2NsZWFudXAoaW50IHN0YWdlKQogewogCXN3aXRjaChzdGFnZSkgeworCWNhc2UgMTE6CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2KTsKKwkJdmlub19kcnZkYXRhLT5iLnZkZXYgPSBOVUxMOwogCWNhc2UgMTA6Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlKTsKLQkJdmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UgPSBOVUxMOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldik7CisJCXZpbm9fZHJ2ZGF0YS0+YS52ZGV2ID0gTlVMTDsKIAljYXNlIDk6Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlKTsKLQkJdmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UgPSBOVUxMOworCQlpMmNfZGVsX2FkYXB0ZXIoJnZpbm9faTJjX2FkYXB0ZXIpOwogCWNhc2UgODoKLQkJdmlub19pMmNfZGVsX2J1cygpOwotCWNhc2UgNzoKIAkJZnJlZV9pcnEoU0dJX1ZJTk9fSVJRLCBOVUxMKTsKKwljYXNlIDc6CisJCWlmICh2aW5vX2RydmRhdGEtPmIudmRldikgeworCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5iLnZkZXYpOworCQkJdmlub19kcnZkYXRhLT5iLnZkZXYgPSBOVUxMOworCQl9CiAJY2FzZSA2OgotCQlpZiAodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpIHsKLQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlKTsKLQkJCXZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlID0gTlVMTDsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmEudmRldik7CisJCQl2aW5vX2RydmRhdGEtPmEudmRldiA9IE5VTEw7CiAJCX0KIAljYXNlIDU6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UpOwotCQkJdmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UgPSBOVUxMOwotCQl9Ci0JY2FzZSA0OgogCQkvKiBhbGwgZW50cmllcyBpbiBkbWFfY3B1IGR1bW15IHRhYmxlIGhhdmUgdGhlIHNhbWUgYWRkcmVzcyAqLwogCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCiAJCQkJIHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWFfY3B1WzBdLApAQCAtNDQxMiw4ICs0MTA3LDEwIEBACiAJCQkJICAodm9pZCAqKXZpbm9fZHJ2ZGF0YS0+CiAJCQkJICBkdW1teV9kZXNjX3RhYmxlLmRtYV9jcHUsCiAJCQkJICB2aW5vX2RydmRhdGEtPmR1bW15X2Rlc2NfdGFibGUuZG1hKTsKLQljYXNlIDM6CisJY2FzZSA0OgogCQlmcmVlX3BhZ2Uodmlub19kcnZkYXRhLT5kdW1teV9wYWdlKTsKKwljYXNlIDM6CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOwogCWNhc2UgMjoKIAkJa2ZyZWUodmlub19kcnZkYXRhKTsKIAljYXNlIDE6CkBAIC00NDY4LDYgKzQxNjUsNyBAQAogc3RhdGljIGludCB2aW5vX2luaXQodm9pZCkKIHsKIAlkbWFfYWRkcl90IGRtYV9kdW1teV9hZGRyZXNzOworCWludCBlcnI7CiAJaW50IGk7CiAKIAl2aW5vX2RydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdmlub19zZXR0aW5ncyksIEdGUF9LRVJORUwpOwpAQCAtNDQ3Niw2ICs0MTc0LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKKwlzdHJsY3B5KHZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYubmFtZSwgInZpbm8iLAorCQkJc2l6ZW9mKHZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYubmFtZSkpOworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXZpbm9faW5pdF9zdGFnZSsrOwogCiAJLyogY3JlYXRlIGEgZHVtbXkgZG1hIGRlc2NyaXB0b3IgKi8KIAl2aW5vX2RydmRhdGEtPmR1bW15X3BhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwpAQCAtNDU0MiwyNSArNDI0NiwyNyBAQAogCXNwaW5fbG9ja19pbml0KCZ2Y3MtPmZiX3F1ZXVlLnF1ZXVlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZjcy0+ZmJfcXVldWUuZnJhbWVfd2FpdF9xdWV1ZSk7CiAKLQl2Y3MtPnY0bF9kZXZpY2UgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIXZjcy0+djRsX2RldmljZSkgeworCXZjcy0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghdmNzLT52ZGV2KSB7CiAJCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JbWVtY3B5KHZjcy0+djRsX2RldmljZSwgJnY0bF9kZXZpY2VfdGVtcGxhdGUsCisJbWVtY3B5KHZjcy0+dmRldiwgJnZkZXZfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0Jc3RyY3B5KHZjcy0+djRsX2RldmljZS0+bmFtZSwgbmFtZSk7Ci0JdmNzLT52NGxfZGV2aWNlLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJc3RyY3B5KHZjcy0+dmRldi0+bmFtZSwgbmFtZSk7CisJdmNzLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmNzLT52ZGV2LT52NGwyX2RldiA9ICZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2OwogCi0JdmlkZW9fc2V0X2RydmRhdGEodmNzLT52NGxfZGV2aWNlLCB2Y3MpOworCXZpZGVvX3NldF9kcnZkYXRhKHZjcy0+dmRldiwgdmNzKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB2aW5vX21vZHVsZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgc2hvcnQgYWRkcltdID0geyAwLCBJMkNfQ0xJRU5UX0VORCB9OwogCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJTR0kgVklOTyBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKQEAgLTQ1ODAsMTIgKzQyODYsMTIgQEAKIAlzcGluX2xvY2tfaW5pdCgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrKTsKIAogCXJldCA9IHZpbm9faW5pdF9jaGFubmVsX3NldHRpbmdzKCZ2aW5vX2RydmRhdGEtPmEsIFZJTk9fQ0hBTk5FTF9BLAotCQkJCSAgICB2aW5vX3Y0bF9kZXZpY2VfbmFtZV9hKTsKKwkJCQkgICAgdmlub192ZGV2X25hbWVfYSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHZpbm9faW5pdF9jaGFubmVsX3NldHRpbmdzKCZ2aW5vX2RydmRhdGEtPmIsIFZJTk9fQ0hBTk5FTF9CLAotCQkJCSAgICB2aW5vX3Y0bF9kZXZpY2VfbmFtZV9iKTsKKwkJCQkgICAgdmlub192ZGV2X25hbWVfYik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDYwMSwxNSArNDMwNywxNiBAQAogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAotCXJldCA9IHZpbm9faTJjX2FkZF9idXMoKTsKKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJnZpbm9faTJjX2FkYXB0ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIEkyQyBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJaTJjX3NldF9hZGFwZGF0YSgmdmlub19pMmNfYWRhcHRlciwgJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOwogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlLAorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldiwKIAkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVklOTyBjaGFubmVsIEEgVmlkZW80TGludXgtZGV2aWNlICIKQEAgLTQ2MTksNyArNDMyNiw3IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlLAorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmIudmRldiwKIAkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVklOTyBjaGFubmVsIEIgVmlkZW80TGludXgtZGV2aWNlICIKQEAgLTQ2MjksMTAgKzQzMzYsMTIgQEAKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLSNpZmRlZiBNT0RVTEUKLQlyZXF1ZXN0X21vZHVsZSgic2FhNzE5MSIpOwotCXJlcXVlc3RfbW9kdWxlKCJpbmR5Y2FtIik7Ci0jZW5kaWYKKwlhZGRyWzBdID0gMHg0NTsKKwl2aW5vX2RydmRhdGEtPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdmlub19pMmNfYWRhcHRlciwKKwkJCSJzYWE3MTkxIiwgInNhYTcxOTEiLCBhZGRyKTsKKwlhZGRyWzBdID0gMHgyYjsKKwl2aW5vX2RydmRhdGEtPmNhbWVyYSA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ2aW5vX2kyY19hZGFwdGVyLAorCQkJImluZHljYW0iLCAiaW5keWNhbSIsIGFkZHIpOwogCiAJZHByaW50aygiaW5pdCBjb21wbGV0ZSFcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDgxZDVhYTUuLmZiZmVmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0yOCwxNyArMjgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0vKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSAiZm9udC5oIgogCiAjZGVmaW5lIFZJVklfTU9EVUxFX05BTUUgInZpdmkiCiAKQEAgLTQ3LDE4ICs0NCwzMiBAQAogI2RlZmluZSBXQUtFX0RFTk9NSU5BVE9SIDEwMDEKICNkZWZpbmUgQlVGRkVSX1RJTUVPVVQgICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSAgLyogMC41IHNlY29uZHMgKi8KIAotI2luY2x1ZGUgImZvbnQuaCIKLQogI2RlZmluZSBWSVZJX01BSk9SX1ZFUlNJT04gMAotI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNgogI2RlZmluZSBWSVZJX1JFTEVBU0UgMAogI2RlZmluZSBWSVZJX1ZFUlNJT04gXAogCUtFUk5FTF9WRVJTSU9OKFZJVklfTUFKT1JfVkVSU0lPTiwgVklWSV9NSU5PUl9WRVJTSU9OLCBWSVZJX1JFTEVBU0UpCiAKLS8qIERlY2xhcmUgc3RhdGljIHZhcnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgcGFyYW1ldGVycyAqLwotc3RhdGljIHVuc2lnbmVkIGludCB2aWRfbGltaXQgPSAxNjsJLyogVmlkZW8gbWVtb3J5IGxpbWl0LCBpbiBNYiAqLwotc3RhdGljIGludCB2aWRlb19uciA9IC0xOwkJLyogL2Rldi92aWRlb04sIC0xIGZvciBhdXRvZGV0ZWN0ICovCi1zdGF0aWMgaW50IG5fZGV2cyA9IDE7CQkJLyogTnVtYmVyIG9mIHZpcnR1YWwgZGV2aWNlcyAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiLCBUZWQgV2FsdGhlciBhbmQgSm9obiBTb2tvbCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCitzdGF0aWMgdW5zaWduZWQgdmlkZW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW9YIHN0YXJ0IG51bWJlciwgLTEgaXMgYXV0b2RldGVjdCIpOworCitzdGF0aWMgdW5zaWduZWQgbl9kZXZzID0gMTsKK21vZHVsZV9wYXJhbShuX2RldnMsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhuX2RldnMsICJudW1iZXIgb2YgdmlkZW8gZGV2aWNlcyB0byBjcmVhdGUiKTsKKworc3RhdGljIHVuc2lnbmVkIGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OworbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZF9saW1pdCwgImNhcHR1cmUgbWVtb3J5IGxpbWl0IGluIG1lZ2FieXRlcyIpOworCiAKIC8qIHN1cHBvcnRlZCBjb250cm9scyAqLwogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB2aXZpX3FjdHJsW10gPSB7CkBAIC02OSw3ICs4MCw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCiAJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAogCQkuZGVmYXVsdF92YWx1ZSA9IDY1NTM1LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJfSwgewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC03OSw3ICs5MCw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gMjU1LAogCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtODgsNyArOTksNyBAQAogCQkubWF4aW11bSAgICAgICA9IDI1NSwKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtOTcsNyArMTA4LDcgQEAKIAkJLm1heGltdW0gICAgICAgPSAyNTUsCiAJCS5zdGVwICAgICAgICAgID0gMHgxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDEyNywKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfSFVFLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xMDYsMTcgKzExNywxMiBAQAogCQkubWF4aW11bSAgICAgICA9IDEyNywKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9CiB9OwogCi1zdGF0aWMgaW50IHFjdGxfcmVnc1tBUlJBWV9TSVpFKHZpdmlfcWN0cmwpXTsKLQotI2RlZmluZSBkcHJpbnRrKGRldiwgbGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoZGV2LT52ZmQtPmRlYnVnID49IChsZXZlbCkpCQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ2aXZpOiAiIGZtdCAsICMjIGFyZyk7CVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBkcHJpbnRrKGRldiwgbGV2ZWwsIGZtdCwgYXJnLi4uKSBcCisJdjRsMl9kYmcobGV2ZWwsIGRlYnVnLCAmZGV2LT52NGwyX2RldiwgZm10LCAjIyBhcmcpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUJhc2ljIHN0cnVjdHVyZXMKQEAgLTIwNiw2ICsyMTIsNyBAQAogCiBzdHJ1Y3Qgdml2aV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIHZpdmlfZGV2bGlzdDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgCSAgIHY0bDJfZGV2OwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CiAJc3RydWN0IG11dGV4CQkgICBtdXRleDsKQEAgLTIyMyw2ICsyMzAsMTIgQEAKIAljaGFyICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RyWzEzXTsKIAogCWludAkJCSAgIG12X2NvdW50OwkvKiBDb250cm9scyBiYXJzIG1vdmVtZW50ICovCisKKwkvKiBJbnB1dCBOdW1iZXIgKi8KKwlpbnQJCQkgICBpbnB1dDsKKworCS8qIENvbnRyb2wgJ3JlZ2lzdGVycycgKi8KKwlpbnQgCQkJICAgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml2aV9xY3RybCldOwogfTsKIAogc3RydWN0IHZpdmlfZmggewpAQCAtMjM1LDYgKzI0OCw3IEBACiAKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGJhcnNbOF1bM107CisJaW50CQkJICAgaW5wdXQ7IAkvKiBJbnB1dCBOdW1iZXIgb24gYmFycyAqLwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTQsMTggKzI2OCw3MiBAQAogCUJMQUNLLAogfTsKIAotc3RhdGljIHU4IGJhcnNbOF1bM10gPSB7CiAJLyogUiAgIEcgICBCICovCi0JezIwNCwgMjA0LCAyMDR9LCAgLyogd2hpdGUgKi8KLQl7MjA4LCAyMDgsICAgMH0sICAvKiBhbWJhciAqLwotCXsgIDAsIDIwNiwgMjA2fSwgIC8qIGN5YW4gKi8KLQl7ICAwLCAyMzksICAgMH0sICAvKiBncmVlbiAqLwotCXsyMzksICAgMCwgMjM5fSwgIC8qIG1hZ2VudGEgKi8KLQl7MjA1LCAgIDAsICAgMH0sICAvKiByZWQgKi8KLQl7ICAwLCAgIDAsIDI1NX0sICAvKiBibHVlICovCi0JeyAgMCwgICAwLCAgIDB9LCAgLyogYmxhY2sgKi8KKyNkZWZpbmUgQ09MT1JfV0hJVEUJezIwNCwgMjA0LCAyMDR9CisjZGVmaW5lIENPTE9SX0FNQkFSCXsyMDgsIDIwOCwgICAwfQorI2RlZmluZSBDT0xPUl9DSUFOCXsgIDAsIDIwNiwgMjA2fQorI2RlZmluZQlDT0xPUl9HUkVFTgl7ICAwLCAyMzksICAgMH0KKyNkZWZpbmUgQ09MT1JfTUFHRU5UQQl7MjM5LCAgIDAsIDIzOX0KKyNkZWZpbmUgQ09MT1JfUkVECXsyMDUsICAgMCwgICAwfQorI2RlZmluZSBDT0xPUl9CTFVFCXsgIDAsICAgMCwgMjU1fQorI2RlZmluZSBDT0xPUl9CTEFDSwl7ICAwLCAgIDAsICAgMH0KKworc3RydWN0IGJhcl9zdGQgeworCXU4IGJhcls4XVszXTsKIH07CiAKKy8qIE1heGltdW0gbnVtYmVyIG9mIGJhcnMgYXJlIDEwIC0gb3RoZXJ3aXNlLCB0aGUgaW5wdXQgcHJpbnQgY29kZQorICAgc2hvdWxkIGJlIG1vZGlmaWVkICovCitzdGF0aWMgc3RydWN0IGJhcl9zdGQgYmFyc1tdID0geworCXsJLyogU3RhbmRhcmQgSVRVLVIgY29sb3IgYmFyIHNlcXVlbmNlICovCisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9DSUFOLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9NQUdFTlRBLAorCQkJQ09MT1JfUkVELAorCQkJQ09MT1JfQkxVRSwKKwkJCUNPTE9SX0JMQUNLLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0NJQU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQ0lBTiwKKwkJCUNPTE9SX0JMQUNLLAorCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9DSUFOLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQl9CisJfSwKK307CisKKyNkZWZpbmUgTlVNX0lOUFVUUyBBUlJBWV9TSVpFKGJhcnMpCisKICNkZWZpbmUgVE9fWShyLCBnLCBiKSBcCiAJKCgoMTY4MjkgKiByICsgMzMwMzkgKiBnICsgNjQxNiAqIGIgICsgMzI3NjgpID4+IDE2KSArIDE2KQogLyogUkdCIHRvICBWKENyKSBDb2xvciB0cmFuc2Zvcm0gKi8KQEAgLTI3NSw5ICszNDMsMTAgQEAKICNkZWZpbmUgVE9fVShyLCBnLCBiKSBcCiAJKCgoLTk3MTQgKiByIC0gMTkwNzAgKiBnICsgMjg3ODQgKiBiICsgMzI3NjgpID4+IDE2KSArIDEyOCkKIAotI2RlZmluZSBUU1RBTVBfTUlOX1kgMjQKLSNkZWZpbmUgVFNUQU1QX01BWF9ZIFRTVEFNUF9NSU5fWSsxNQotI2RlZmluZSBUU1RBTVBfTUlOX1ggNjQKKyNkZWZpbmUgVFNUQU1QX01JTl9ZCTI0CisjZGVmaW5lIFRTVEFNUF9NQVhfWQkoVFNUQU1QX01JTl9ZICsgMTUpCisjZGVmaW5lIFRTVEFNUF9JTlBVVF9YCTEwCisjZGVmaW5lIFRTVEFNUF9NSU5fWAkoNTQgKyBUU1RBTVBfSU5QVVRfWCkKIAogc3RhdGljIHZvaWQgZ2VuX3R3b3BpeChzdHJ1Y3Qgdml2aV9maCAqZmgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvbG9ycG9zKQogewpAQCAtMzkyLDkgKzQ2MSwyOSBAQAogCQlwb3MgKz0gNDsgLyogb25seSAxNiBicHAgc3VwcG9ydGVkIGZvciBub3cgKi8KIAl9CiAKLQkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KKwkvKiBQcmludHMgaW5wdXQgZW50cnkgbnVtYmVyICovCisKKwkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gaW5wdXQgbnVtYmVyICovCiAJaWYgKFRTVEFNUF9NQVhfWSA+PSBobWF4KQogCQlnb3RvIGVuZDsKKworCWlmIChUU1RBTVBfSU5QVVRfWCArIHN0cmxlbih0aW1lc3RyKSA+PSB3bWF4KQorCQlnb3RvIGVuZDsKKworCWlmIChsaW5lID49IFRTVEFNUF9NSU5fWSAmJiBsaW5lIDw9IFRTVEFNUF9NQVhfWSkgeworCQljaHIgPSByb204eDE2X2JpdHNbZmgtPmlucHV0ICogMTYgKyBsaW5lIC0gVFNUQU1QX01JTl9ZXTsKKwkJcG9zID0gVFNUQU1QX0lOUFVUX1g7CisJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJCS8qIERyYXcgd2hpdGUgZm9udCBvbiBibGFjayBiYWNrZ3JvdW5kICovCisJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKQorCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBXSElURSk7CisJCQllbHNlCisJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIEJMQUNLKTsKKwkJCXBvcyArPSAyOworCQl9CisJfQorCisJLyogQ2hlY2tzIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGltZXN0YW1wICovCiAJaWYgKFRTVEFNUF9NSU5fWCArIHN0cmxlbih0aW1lc3RyKSA+PSB3bWF4KQogCQlnb3RvIGVuZDsKIApAQCAtNTc3LDcgKzY2Niw3IEBACiAJZG1hX3EtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bih2aXZpX3RocmVhZCwgZmgsICJ2aXZpIik7CiAKIAlpZiAoSVNfRVJSKGRtYV9xLT5rdGhyZWFkKSkgewotCQlwcmludGsoS0VSTl9FUlIgInZpdmk6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihkbWFfcS0+a3RocmVhZCk7CiAJfQogCS8qIFdha2VzIHRocmVhZCAqLwpAQCAtNzIwLDggKzgwOSwxMiBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CisJc3RydWN0IHZpdmlfZmggICpmaCAgPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKKwogCXN0cmNweShjYXAtPmRyaXZlciwgInZpdmkiKTsKIAlzdHJjcHkoY2FwLT5jYXJkLCAidml2aSIpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IFZJVklfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9CVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfApAQCAtODA3LDM4ICs5MDAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLypGSVhNRTogVGhpcyBzZWVtcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBiZSBhdCB2aWRlb2RldjIgKi8KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKy8qIHByZWNhbGN1bGF0ZSBjb2xvciBiYXIgdmFsdWVzIHRvIHNwZWVkIHVwIHJlbmRlcmluZyAqLworc3RhdGljIHZvaWQgcHJlY2FsY3VsYXRlX2JhcnMoc3RydWN0IHZpdmlfZmggKmZoKQogewotCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBwcml2OwotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmJfdmlkcTsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJdW5zaWduZWQgY2hhciByLCBnLCBiOwogCWludCBrLCBpc195dXY7CiAKLQlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAocmV0KTsKKwlmaC0+aW5wdXQgPSBkZXYtPmlucHV0OwogCi0JbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7Ci0KLQlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7Ci0JCWRwcmludGsoZmgtPmRldiwgMSwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmaC0+Zm10ICAgICAgICAgICA9IGdldF9mb3JtYXQoZik7Ci0JZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOwotCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCWZoLT50eXBlICAgICAgICAgID0gZi0+dHlwZTsKLQotCS8qIHByZWNhbGN1bGF0ZSBjb2xvciBiYXIgdmFsdWVzIHRvIHNwZWVkIHVwIHJlbmRlcmluZyAqLwogCWZvciAoayA9IDA7IGsgPCA4OyBrKyspIHsKLQkJciA9IGJhcnNba11bMF07Ci0JCWcgPSBiYXJzW2tdWzFdOwotCQliID0gYmFyc1trXVsyXTsKKwkJciA9IGJhcnNbZmgtPmlucHV0XS5iYXJba11bMF07CisJCWcgPSBiYXJzW2ZoLT5pbnB1dF0uYmFyW2tdWzFdOworCQliID0gYmFyc1tmaC0+aW5wdXRdLmJhcltrXVsyXTsKIAkJaXNfeXV2ID0gMDsKIAogCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgewpAQCAtODcxLDExICs5NDUsNDAgQEAKIAkJfQogCX0KIAorfQorCisvKkZJWE1FOiBUaGlzIHNlZW1zIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIGF0IHZpZGVvZGV2MiAqLworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCisJaW50IHJldCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CisKKwlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7CisJCWRwcmludGsoZmgtPmRldiwgMSwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlmaC0+Zm10ICAgICAgICAgICA9IGdldF9mb3JtYXQoZik7CisJZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCWZoLT50eXBlICAgICAgICAgID0gZi0+dHlwZTsKKworCXByZWNhbGN1bGF0ZV9iYXJzKGZoKTsKKwogCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtOTUwLDI3ICsxMDUzLDM2IEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnApCiB7Ci0JaWYgKGlucC0+aW5kZXggIT0gMCkKKwlpZiAoaW5wLT5pbmRleCA+PSBOVU1fSU5QVVRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaW5wLT5zdGQgPSBWNEwyX1NURF81MjVfNjA7Ci0Jc3RyY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIpOworCXNwcmludGYoaW5wLT5uYW1lLCAiQ2FtZXJhICV1IiwgaW5wLT5pbmRleCk7CiAKIAlyZXR1cm4gKDApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7Ci0JKmkgPSAwOworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJKmkgPSBkZXYtPmlucHV0OwogCiAJcmV0dXJuICgwKTsKIH0KIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpID4gMCkKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmIChpID49IE5VTV9JTlBVVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2LT5pbnB1dCA9IGk7CisJcHJlY2FsY3VsYXRlX2JhcnMoZmgpOworCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtOTkzLDEyICsxMTA1LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdmlfcWN0cmwpOyBpKyspCiAJCWlmIChjdHJsLT5pZCA9PSB2aXZpX3FjdHJsW2ldLmlkKSB7Ci0JCQljdHJsLT52YWx1ZSA9IHFjdGxfcmVnc1tpXTsKLQkJCXJldHVybiAoMCk7CisJCQljdHJsLT52YWx1ZSA9IGRldi0+cWN0bF9yZWdzW2ldOworCQkJcmV0dXJuIDA7CiAJCX0KIAogCXJldHVybiAtRUlOVkFMOwpAQCAtMTAwNiwxNiArMTEyMCwxOCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQogCQlpZiAoY3RybC0+aWQgPT0gdml2aV9xY3RybFtpXS5pZCkgewotCQkJaWYgKGN0cmwtPnZhbHVlIDwgdml2aV9xY3RybFtpXS5taW5pbXVtCi0JCQkgICAgfHwgY3RybC0+dmFsdWUgPiB2aXZpX3FjdHJsW2ldLm1heGltdW0pIHsKLQkJCQkJcmV0dXJuICgtRVJBTkdFKTsKLQkJCQl9Ci0JCQlxY3RsX3JlZ3NbaV0gPSBjdHJsLT52YWx1ZTsKLQkJCXJldHVybiAoMCk7CisJCQlpZiAoY3RybC0+dmFsdWUgPCB2aXZpX3FjdHJsW2ldLm1pbmltdW0gfHwKKwkJCSAgICBjdHJsLT52YWx1ZSA+IHZpdmlfcWN0cmxbaV0ubWF4aW11bSkgeworCQkJCXJldHVybiAtRVJBTkdFOworCQkJfQorCQkJZGV2LT5xY3RsX3JlZ3NbaV0gPSBjdHJsLT52YWx1ZTsKKwkJCXJldHVybiAwOwogCQl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDI2LDMyICsxMTQyLDIwIEBACiAKIHN0YXRpYyBpbnQgdml2aV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCB2aXZpX2RldiAqZGV2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgdml2aV9maCAqZmggPSBOVUxMOwotCWludCBpOwogCWludCByZXR2YWwgPSAwOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsIG1pbm9yKTsKLQotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZ2aXZpX2Rldmxpc3QsIHZpdmlfZGV2bGlzdCkKLQkJaWYgKGRldi0+dmZkLT5taW5vciA9PSBtaW5vcikKLQkJCWdvdG8gZm91bmQ7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAtRU5PREVWOwotCi1mb3VuZDoKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlkZXYtPnVzZXJzKys7CiAKIAlpZiAoZGV2LT51c2VycyA+IDEpIHsKIAkJZGV2LT51c2Vycy0tOwotCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCWdvdG8gdW5sb2NrOworCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWRwcmludGsoZGV2LCAxLCAib3BlbiBtaW5vcj0lZCB0eXBlPSVzIHVzZXJzPSVkXG4iLCBtaW5vciwKKwlkcHJpbnRrKGRldiwgMSwgIm9wZW4gL2Rldi92aWRlbyVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsIGRldi0+dmZkLT5udW0sCiAJCXY0bDJfdHlwZV9uYW1lc1tWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdLCBkZXYtPnVzZXJzKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCkBAIC0xMDU5LDE0ICsxMTYzLDExIEBACiAJaWYgKE5VTEwgPT0gZmgpIHsKIAkJZGV2LT51c2Vycy0tOwogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIHVubG9jazsKIAl9Ci11bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKworCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0JfQogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwpAQCAtMTA3NiwxMCArMTE3Nyw2IEBACiAJZmgtPndpZHRoICAgID0gNjQwOwogCWZoLT5oZWlnaHQgICA9IDQ4MDsKIAotCS8qIFB1dCBhbGwgY29udHJvbHMgYXQgYSBzYW5lIHN0YXRlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKLQkJcWN0bF9yZWdzW2ldID0gdml2aV9xY3RybFtpXS5kZWZhdWx0X3ZhbHVlOwotCiAJLyogUmVzZXRzIGZyYW1lIGNvdW50ZXJzICovCiAJZGV2LT5oID0gMDsKIAlkZXYtPm0gPSAwOwpAQCAtMTA5NSw3ICsxMTkyLDYgQEAKIAkJCXNpemVvZihzdHJ1Y3Qgdml2aV9idWZmZXIpLCBmaCk7CiAKIAl2aXZpX3N0YXJ0X3RocmVhZChmaCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTUxLDMyICsxMjQ3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aXZpX3JlbGVhc2Uodm9pZCkKLXsKLQlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZ2aXZpX2Rldmxpc3QpKSB7Ci0JCWxpc3QgPSB2aXZpX2Rldmxpc3QubmV4dDsKLQkJbGlzdF9kZWwobGlzdCk7Ci0JCWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpdmlfZGV2LCB2aXZpX2Rldmxpc3QpOwotCi0JCWlmICgtMSAhPSBkZXYtPnZmZC0+bWlub3IpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bnJlZ2lzdGVyaW5nIC9kZXYvdmlkZW8lZFxuIiwKLQkJCQlWSVZJX01PRFVMRV9OQU1FLCBkZXYtPnZmZC0+bnVtKTsKLQkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWxlYXNpbmcgL2Rldi92aWRlbyVkXG4iLAotCQkJCVZJVklfTU9EVUxFX05BTUUsIGRldi0+dmZkLT5udW0pOwotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZmQpOwotCQl9Ci0KLQkJa2ZyZWUoZGV2KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aXZpX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xMjM5LDg3ICsxMzA5LDEzMCBAQAogCS50dm5vcm1zICAgICAgICAgICAgICA9IFY0TDJfU1REXzUyNV82MCwKIAkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCiB9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgc3R1ZmYKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBpbnQgdml2aV9yZWxlYXNlKHZvaWQpCit7CisJc3RydWN0IHZpdmlfZGV2ICpkZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmdml2aV9kZXZsaXN0KSkgeworCQlsaXN0ID0gdml2aV9kZXZsaXN0Lm5leHQ7CisJCWxpc3RfZGVsKGxpc3QpOworCQlkZXYgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aXZpX2Rldiwgdml2aV9kZXZsaXN0KTsKKworCQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJ1bnJlZ2lzdGVyaW5nIC9kZXYvdmlkZW8lZFxuIiwKKwkJCWRldi0+dmZkLT5udW0pOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZmZCk7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCQlrZnJlZShkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB2aXZpX2NyZWF0ZV9pbnN0YW5jZShpbnQgaW5zdCkKK3sKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJldCwgaTsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbnByaW50ZihkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUpLAorCQkJIiVzLSUwM2QiLCBWSVZJX01PRFVMRV9OQU1FLCBpbnN0KTsKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmZGV2LT52NGwyX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2RldjsKKworCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZpZHEud3EpOworCisJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLworCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKKworCXJldCA9IC1FTk9NRU07CisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2ZmQpCisJCWdvdG8gdW5yZWdfZGV2OworCisJKnZmZCA9IHZpdmlfdGVtcGxhdGU7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVsX3ZkZXY7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CisKKwkvKiBTZXQgYWxsIGNvbnRyb2xzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKKwkJZGV2LT5xY3RsX3JlZ3NbaV0gPSB2aXZpX3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7CisKKwkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJmRldi0+dml2aV9kZXZsaXN0LCAmdml2aV9kZXZsaXN0KTsKKworCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAoJWkpIiwKKwkJCXZpdmlfdGVtcGxhdGUubmFtZSwgdmZkLT5udW0pOworCisJaWYgKHZpZGVvX25yID49IDApCisJCXZpZGVvX25yKys7CisKKwlkZXYtPnZmZCA9IHZmZDsKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwKKwkJCXZmZC0+bnVtKTsKKwlyZXR1cm4gMDsKKworcmVsX3ZkZXY6CisJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKK3VucmVnX2RldjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKK2ZyZWVfZGV2OgorCWtmcmVlKGRldik7CisJcmV0dXJuIHJldDsKK30KKwogLyogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBmcm9tIDEgdG8gbl9kZXZzIHZpcnR1YWwgZHJpdmVycy4KIAogICAgVGhlIHJlYWwgbWF4aW11bSBudW1iZXIgb2YgdmlydHVhbCBkcml2ZXJzIHdpbGwgZGVwZW5kIG9uIGhvdyBtYW55IGRyaXZlcnMKICAgIHdpbGwgc3VjY2VlZC4gVGhpcyBpcyBsaW1pdGVkIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkZXZpY2VzIHRoYXQKLSAgIHZpZGVvZGV2IHN1cHBvcnRzLiBTaW5jZSB0aGVyZSBhcmUgNjQgbWlub3JzIGZvciB2aWRlbyBncmFiYmVycywgdGhpcyBpcwotICAgY3VycmVudGx5IHRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIGxpbWl0LiBIb3dldmVyLCBhIGZ1cnRoZXIgbGltaXQgZG9lcwotICAgZXhpc3QgYXQgdmlkZW9kZXYgdGhhdCBmb3JiaWRzIGFueSBkcml2ZXIgdG8gcmVnaXN0ZXIgbW9yZSB0aGFuIDMyIHZpZGVvCi0gICBncmFiYmVycy4KKyAgIHZpZGVvZGV2IHN1cHBvcnRzLCB3aGljaCBpcyBlcXVhbCB0byBWSURFT19OVU1fREVWSUNFUy4KICAqLwogc3RhdGljIGludCBfX2luaXQgdml2aV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9NRU0sIGk7Ci0Jc3RydWN0IHZpdmlfZGV2ICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCWludCByZXQgPSAwLCBpOwogCiAJaWYgKG5fZGV2cyA8PSAwKQogCQluX2RldnMgPSAxOwogCiAJZm9yIChpID0gMDsgaSA8IG5fZGV2czsgaSsrKSB7Ci0JCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkZXYpCi0JCQlicmVhazsKLQotCQkvKiBpbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8KLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZpZHEud3EpOwotCi0JCS8qIGluaXRpYWxpemUgbG9ja3MgKi8KLQkJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwotCQltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKLQotCQl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQkJaWYgKCF2ZmQpIHsKLQkJCWtmcmVlKGRldik7Ci0JCQlicmVhazsKLQkJfQotCi0JCSp2ZmQgPSB2aXZpX3RlbXBsYXRlOwotCi0JCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZmZCk7Ci0JCQlrZnJlZShkZXYpOwotCi0JCQkvKiBJZiBzb21lIHJlZ2lzdGVycyBzdWNjZWVkZWQsIGtlZXAgZHJpdmVyICovCisJCXJldCA9IHZpdmlfY3JlYXRlX2luc3RhbmNlKGkpOworCQlpZiAocmV0KSB7CisJCQkvKiBJZiBzb21lIGluc3RhbnRpYXRpb25zIHN1Y2NlZWRlZCwga2VlcCBkcml2ZXIgKi8KIAkJCWlmIChpKQogCQkJCXJldCA9IDA7Ci0KIAkJCWJyZWFrOwogCQl9Ci0KLQkJLyogTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lLCBsZXQncyBhZGQgaXQgdG8gZGV2aWNlIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmZGV2LT52aXZpX2Rldmxpc3QsICZ2aXZpX2Rldmxpc3QpOwotCi0JCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAoJWkpIiwKLQkJCSB2aXZpX3RlbXBsYXRlLm5hbWUsIHZmZC0+bWlub3IpOwotCi0JCWlmICh2aWRlb19uciA+PSAwKQotCQkJdmlkZW9fbnIrKzsKLQotCQlkZXYtPnZmZCA9IHZmZDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLAotCQkJVklWSV9NT0RVTEVfTkFNRSwgdmZkLT5udW0pOwogCX0KIAogCWlmIChyZXQgPCAwKSB7Ci0JCXZpdmlfcmVsZWFzZSgpOwogCQlwcmludGsoS0VSTl9JTkZPICJFcnJvciAlZCB3aGlsZSBsb2FkaW5nIHZpdmkgZHJpdmVyXG4iLCByZXQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyAiCisJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvICIKIAkJCSJDYXB0dXJlIEJvYXJkIHZlciAldS4ldS4ldSBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIiwKIAkJCShWSVZJX1ZFUlNJT04gPj4gMTYpICYgMHhGRiwgKFZJVklfVkVSU0lPTiA+PiA4KSAmIDB4RkYsCiAJCQlWSVZJX1ZFUlNJT04gJiAweEZGKTsKIAotCQkvKiBuX2RldnMgd2lsbCByZWZsZWN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBkZXZpY2VzICovCi0JCW5fZGV2cyA9IGk7Ci0JfQorCS8qIG5fZGV2cyB3aWxsIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRldmljZXMgKi8KKwluX2RldnMgPSBpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzMzEsMTkgKzE0NDQsMyBAQAogCiBtb2R1bGVfaW5pdCh2aXZpX2luaXQpOwogbW9kdWxlX2V4aXQodml2aV9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiLCBUZWQgV2FsdGhlciBhbmQgSm9obiBTb2tvbCIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotCi1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIHVpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGltaW5vciBzdGFydCBudW1iZXIiKTsKLQotbW9kdWxlX3BhcmFtKG5fZGV2cywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5fZGV2cywgIm51bWJlciBvZiB2aWRlbyBkZXZpY2VzIHRvIGNyZWF0ZSIpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHZpdmlfdGVtcGxhdGUuZGVidWcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKLQotbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKaW5kZXggNWQ3M2Y2Ni4uNDJlMjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwpAQCAtMTI5LDExICsxMjksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZwMjdzbXB4X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB2cDI3c21weF9jb3JlX29wcyA9IHsKQEAgLTIwNiw4ICsyMDEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidnAyN3NtcHgiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUDI3U01QWCwKLQkuY29tbWFuZCA9IHZwMjdzbXB4X2NvbW1hbmQsCiAJLnByb2JlID0gdnAyN3NtcHhfcHJvYmUsCiAJLnJlbW92ZSA9IHZwMjdzbXB4X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB2cDI3c21weF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggNjdhYTBkYi4uMmZhN2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTI0LDEwICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7CkBAIC0zNywxNCArMzcsMTcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKICNkZWZpbmUgVlBYX1RJTUVPVVRfQ09VTlQgIDEwCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB2cHgzMjIwIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMjU1XTsKIAotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CisJaW50IGlkZW50OwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC01MywzMCArNTYsMzggQEAKIAlpbnQgc2F0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdnB4MzIyMCAqdG9fdnB4MzIyMChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB2cHgzMjIwLCBzZCk7Cit9CisKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgImludGVybmFsIiwgImNvbXBvc2l0ZSIsICJzdmlkZW8iIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9mcF9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBWUFhfVElNRU9VVF9DT1VOVDsgaSsrKSB7Ci0JCXN0YXR1cyA9IHZweDMyMjBfcmVhZChjbGllbnQsIDB4MjkpOworCQlzdGF0dXMgPSB2cHgzMjIwX3JlYWQoc2QsIDB4MjkpOwogCiAJCWlmICghKHN0YXR1cyAmIDQpKQogCQkJcmV0dXJuIDA7CkBAIC05MCw1NyArMTAxLDYwIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHZweDMyMjBfZnBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggZnBhZGRyLCB1MTYgZGF0YSkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCBmcGFkZHIsIHUxNiBkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBXUiByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNywgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHZweDMyMjBfZnBfc3RhdHVzKGNsaWVudCkgPCAwKQorCWlmICh2cHgzMjIwX2ZwX3N0YXR1cyhzZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGRhdGEgdG8gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI4LCBzd2FiMTYoZGF0YSkpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgdnB4MzIyMF9mcF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBmcGFkZHIpCitzdGF0aWMgdTE2IHZweDMyMjBfZnBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgZnBhZGRyKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzMTYgZGF0YTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBSRCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNiwgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHZweDMyMjBfZnBfc3RhdHVzKGNsaWVudCkgPCAwKQorCWlmICh2cHgzMjIwX2ZwX3N0YXR1cyhzZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBSZWFkIHRoZSAxNi1iaXQgZGF0YSBmcm9tIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAweDI4KTsKIAlpZiAoZGF0YSA9PSAtMSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBzd2FiMTYoZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IC0xOwogCiAJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCXJldCA9IHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlyZXQgPSB2cHgzMjIwX3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCQlsZW4gLT0gMjsKQEAgLTE0OSw3ICsxNjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWNvbnN0IHUxNiAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CkBAIC0xNTcsNyArMTcxLDcgQEAKIAogCXdoaWxlIChsZW4gPiAxKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCXJldCB8PSB2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJcmV0IHw9IHZweDMyMjBfZnBfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCWxlbiAtPSAyOwogCX0KIApAQCAtMjU5LDI3NiArMjczLDI3NyBAQAogCTB4NGIsIDB4Mjk4LAkJLyogUExMIGdhaW4gKi8KIH07CiAKLXN0YXRpYyB2b2lkIHZweDMyMjBfZHVtcF9pMmMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgbGVuID0gc2l6ZW9mKGluaXRfY29tbW9uKTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW5pdF9jb21tb247CiAKLQl3aGlsZSAobGVuID4gMSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpMmMgcmVnIDB4JTAyeCBkYXRhIDB4JTAyeFxuIiwKLQkJCSpkYXRhLCB2cHgzMjIwX3JlYWQoY2xpZW50LCAqZGF0YSkpOwotCQlkYXRhICs9IDI7Ci0JCWxlbiAtPSAyOwotCX0KK3N0YXRpYyBpbnQgdnB4MzIyMF9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKworCXZweDMyMjBfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CisJaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpID4+IDEpOworCWVsc2UgaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9QQUwpCisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpID4+IDEpOworCWVsc2UgaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9TRUNBTSkKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9zZWNhbSwgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOworCWVsc2UKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2cHgzMjIwX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQogewotCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMLCBzdGF0dXM7CisJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotCXsKLQkJdnB4MzIyMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAotCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKLQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsCi0JCQkJICAgICAgIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOworCXN0YXR1cyA9IHZweDMyMjBfZnBfcmVhZChzZCwgMHgwZjMpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzOiAweCUwNHhcbiIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmICgoc3RhdHVzICYgMHgyMCkgPT0gMCkgeworCQlyZXMgPSAwOworCisJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgeworCQljYXNlIDB4MDA6CisJCWNhc2UgMHgxMDoKKwkJY2FzZSAweDE0OgorCQljYXNlIDB4MTg6CisJCQlzdGQgPSBWNEwyX1NURF9QQUw7CiAJCQlicmVhazsKIAotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9zZWNhbSwKLQkJCQkJICAgICAgIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJdnB4MzIyMF9kdW1wX2kyYyhjbGllbnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMzsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgcmVzID0gMCwgc3RhdHVzOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX1NUQVRVU1xuIik7Ci0KLQkJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHgwZjMpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDR4XG4iLCBzdGF0dXMpOwotCi0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQotCQlpZiAoKHN0YXR1cyAmIDB4MjApID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EIHwgREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0KLQkJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgewotCQkJY2FzZSAweDAwOgotCQkJY2FzZSAweDEwOgotCQkJY2FzZSAweDE0OgotCQkJY2FzZSAweDE4OgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMHgwODoKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfU0VDQU07Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMHgwNDoKLQkJCWNhc2UgMHgwYzoKLQkJCWNhc2UgMHgxYzoKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCSooaW50ICopIGFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnLCBkYXRhOwotCQlpbnQgdGVtcF9pbnB1dDsKLQotCQkvKiBIZXJlIHdlIGJhY2sgdXAgdGhlIGlucHV0IHNlbGVjdGlvbiBiZWNhdXNlIGl0IGdldHMKLQkJICAgb3ZlcndyaXR0ZW4gd2hlbiB3ZSBmaWxsIHRoZSByZWdpc3RlcnMgd2l0aCB0aGUKLQkJICAgY2hvb3NlbiB2aWRlbyBub3JtICovCi0JCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX1NFVF9OT1JNICVkXG4iLCAqaWFyZyk7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIpOworCQljYXNlIDB4MDg6CisJCQlzdGQgPSBWNEwyX1NURF9TRUNBTTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOworCQljYXNlIDB4MDQ6CisJCWNhc2UgMHgwYzoKKwkJY2FzZSAweDFjOgorCQkJc3RkID0gVjRMMl9TVERfTlRTQzsKIAkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3NlY2FtLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCS8qIEZJWE1FIFRoaXMgaXMgb25seSBwcmVsaW1pbmFyeSBzdXBwb3J0ICovCi0JCQlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMikgJiAweDIwOwotCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIDB4MDBjMCB8IGRhdGEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBBVVRPXG4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CisJfQorCWlmIChwc3RkKQorCQkqcHN0ZCA9IHN0ZDsKKwlpZiAocHN0YXR1cykKKwkJKnBzdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CiAKLQkJLyogQW5kIGhlcmUgd2Ugc2V0IHRoZSBiYWNrZWQgdXAgdmlkZW8gaW5wdXQgYWdhaW4gKi8KLQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOwotCQl1ZGVsYXkoMTApOwotCQlicmVhazsKK3N0YXRpYyBpbnQgdnB4MzIyMF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInF1ZXJ5c3RkXG4iKTsKKwlyZXR1cm4gdnB4MzIyMF9zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQgdnB4MzIyMF9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX2lucHV0X3N0YXR1c1xuIik7CisJcmV0dXJuIHZweDMyMjBfc3RhdHVzKHNkLCBzdGF0dXMsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisJaW50IHRlbXBfaW5wdXQ7CisKKwkvKiBIZXJlIHdlIGJhY2sgdXAgdGhlIGlucHV0IHNlbGVjdGlvbiBiZWNhdXNlIGl0IGdldHMKKwkgICBvdmVyd3JpdHRlbiB3aGVuIHdlIGZpbGwgdGhlIHJlZ2lzdGVycyB3aXRoIHRoZQorCSAgIGNob29zZW4gdmlkZW8gbm9ybSAqLworCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdGQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vcm0gc3dpdGNoZWQgdG8gUEFMXG4iKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfc2VjYW0sIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZywgZGF0YTsKKwlkZWNvZGVyLT5ub3JtID0gc3RkOwogCi0JCS8qIFJKOiAgKmlhcmcgPSAwOiBTVDggKFBDVFYpIGlucHV0Ci0JCSAqaWFyZyA9IDE6IENPTVBPU0lURSAgaW5wdXQKLQkJICppYXJnID0gMjogU1ZIUyAgICAgICBpbnB1dCAgKi8KKwkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLworCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOworCXVkZWxheSgxMCk7CisJcmV0dXJuIDA7Cit9CiAKLQkJY29uc3QgaW50IGlucHV0WzNdWzJdID0gewotCQkJezB4MGMsIDB9LAotCQkJezB4MGQsIDB9LAotCQkJezB4MGUsIDF9Ci0JCX07CitzdGF0aWMgaW50IHZweDMyMjBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCWludCBkYXRhOwogCi0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiAyKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJLyogUko6ICAgcm91dGUtPmlucHV0ID0gMDogU1Q4IChQQ1RWKSBpbnB1dAorCQkgcm91dGUtPmlucHV0ID0gMTogQ09NUE9TSVRFICBpbnB1dAorCQkgcm91dGUtPmlucHV0ID0gMjogU1ZIUyAgICAgICBpbnB1dCAgKi8KIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzWyppYXJnXSk7CisJY29uc3QgaW50IGlucHV0WzNdWzJdID0geworCQl7MHgwYywgMH0sCisJCXsweDBkLCAwfSwKKwkJezB4MGUsIDF9CisJfTsKIAotCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHgzMywgaW5wdXRbKmlhcmddWzBdKTsKKwlpZiAocm91dGUtPmlucHV0IDwgMCB8fCByb3V0ZS0+aW5wdXQgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMikgJiB+KDB4MDAyMCk7Ci0JCWlmIChkYXRhIDwgMCkKLQkJCXJldHVybiBkYXRhOwotCQkvKiAweDAwMTAgaXMgcmVxdWlyZWQgdG8gbGF0Y2ggdGhlIHNldHRpbmcgKi8KLQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsCi0JCQkJIGRhdGEgfCAoaW5wdXRbKmlhcmddWzFdIDw8IDUpIHwgMHgwMDEwKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW3JvdXRlLT5pbnB1dF0pOwogCi0JCXVkZWxheSgxMCk7CisJdnB4MzIyMF93cml0ZShzZCwgMHgzMywgaW5wdXRbcm91dGUtPmlucHV0XVswXSk7CisKKwlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKHNkLCAweGYyKSAmIH4oMHgwMDIwKTsKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCS8qIDB4MDAxMCBpcyByZXF1aXJlZCB0byBsYXRjaCB0aGUgc2V0dGluZyAqLworCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4ZjIsCisJCQlkYXRhIHwgKGlucHV0W3JvdXRlLT5pbnB1dF1bMV0gPDwgNSkgfCAweDAwMTApOworCisJdWRlbGF5KDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdHJlYW0gJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CisKKwl2cHgzMjIwX3dyaXRlKHNkLCAweGYyLCAoZW5hYmxlID8gMHgxYiA6IDB4MDApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDYzLCAxLCAzMik7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwgKmlhcmcpOwotCi0JCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGYyLCAoKmlhcmcgPyAweDFiIDogMHgwMCkpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDQwOTUsIDEsIDIwNDgpOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI4IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHhlNiwKLQkJCQkgICAgICAoZGVjb2Rlci0+YnJpZ2h0IC0gMzI3NjgpID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNjQgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCS8qIEJpdCA3IGFuZCA4IGlzIGZvciBub2lzZSBzaGFwaW5nICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHhlNywKLQkJCQkgICAgICAoZGVjb2Rlci0+Y29udHJhc3QgPj4gMTApICsgMTkyKTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNDA5NiB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7Ci0JCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhhMCwKLQkJCQkJIGRlY29kZXItPnNhdCA+PiA0KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC01MTIgdG8gNTEyIHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweDFjLAotCQkJCQkgKChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gNikgJiAweEZGRik7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC01MTIsIDUxMSwgMSwgMCk7CiAJCWJyZWFrOwotCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZweDMyMjBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQl2cHgzMjIwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7Ci0JLyogRGVmYXVsdCB0byBQQUwgKi8KLQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKIAorCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+YnJpZ2h0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+c2F0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2cHgzMjIwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfd3JpdGUoc2QsIDB4ZTYsIGRlY29kZXItPmJyaWdodCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQkvKiBCaXQgNyBhbmQgOCBpcyBmb3Igbm9pc2Ugc2hhcGluZyAqLworCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfd3JpdGUoc2QsIDB4ZTcsIGRlY29kZXItPmNvbnRyYXN0ICsgMTkyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPnNhdCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhhMCwgZGVjb2Rlci0+c2F0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl2cHgzMjIwX2ZwX3dyaXRlKHNkLCAweDFjLCBkZWNvZGVyLT5odWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIGRlY29kZXItPmlkZW50LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB2cHgzMjIwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSB2cHgzMjIwX2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IHZweDMyMjBfaW5pdCwKKwkuZ19jdHJsID0gdnB4MzIyMF9nX2N0cmwsCisJLnNfY3RybCA9IHZweDMyMjBfc19jdHJsLAorCS5xdWVyeWN0cmwgPSB2cHgzMjIwX3F1ZXJ5Y3RybCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHZweDMyMjBfdHVuZXJfb3BzID0geworCS5zX3N0ZCA9IHZweDMyMjBfc19zdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB2cHgzMjIwX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdnB4MzIyMF9zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gdnB4MzIyMF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSB2cHgzMjIwX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHZweDMyMjBfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB2cHgzMjIwX29wcyA9IHsKKwkuY29yZSA9ICZ2cHgzMjIwX2NvcmVfb3BzLAorCS50dW5lciA9ICZ2cHgzMjIwX3R1bmVyX29wcywKKwkudmlkZW8gPSAmdnB4MzIyMF92aWRlb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2xpZW50IG1hbmFnZW1lbnQgY29kZQogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODYgPj4gMSwgMHg4ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQogc3RhdGljIGludCB2cHgzMjIwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKIAl1OCB2ZXI7CiAJdTE2IHBuOwpAQCAtNTQxLDE4ICs1NTYsMjAgQEAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZweDMyMjApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGVjb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnZweDMyMjBfb3BzKTsKKwlkZWNvZGVyLT5ub3JtID0gVjRMMl9TVERfUEFMOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwogCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OwogCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7CiAJZGVjb2Rlci0+aHVlID0gMzI3Njg7CiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKIAl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAwKTsKIAlwbiA9IChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAyKSA8PCA4KSArCiAJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDEpOworCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9WUFgzMjIwQTsKIAlpZiAodmVyID09IDB4ZWMpIHsKIAkJc3dpdGNoIChwbikgewogCQljYXNlIDB4NDY4MDoKQEAgLTU2MCwyNiArNTc3LDM0IEBACiAJCQlicmVhazsKIAkJY2FzZSAweDQyNjA6CiAJCQluYW1lID0gInZweDMyMTZiIjsKKwkJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9WUFgzMjE2QjsKIAkJCWJyZWFrOwogCQljYXNlIDB4NDI4MDoKIAkJCW5hbWUgPSAidnB4MzIxNGMiOworCQkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMTRDOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKG5hbWUpCi0JCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAorCQl2NGwyX2luZm8oc2QsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgbmFtZSwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCWVsc2UKLQkJdjRsX2luZm8oY2xpZW50LCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJdjRsMl9pbmZvKHNkLCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCXZlciwgcG4sIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JdnB4MzIyMF9pbml0X2NsaWVudChjbGllbnQpOworCXZweDMyMjBfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CisJLyogRGVmYXVsdCB0byBQQUwgKi8KKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2cHgzMjIwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fdnB4MzIyMChzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC01OTMsOCArNjE4LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInZweDMyMjAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCS5jb21tYW5kID0gdnB4MzIyMF9jb21tYW5kLAogCS5wcm9iZSA9IHZweDMyMjBfcHJvYmUsCiAJLnJlbW92ZSA9IHZweDMyMjBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHZweDMyMjBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKaW5kZXggMDM4ZmYzMi4uZGNhZGU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwpAQCAtNTcsNyArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCAxMDVhODMyLi4zYjA4YmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlICJ3OTk2OGNmLmgiCkBAIC02OCw3ICs2OSw2IEBACiBNT0RVTEVfTElDRU5TRShXOTk2OENGX01PRFVMRV9MSUNFTlNFKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJWaWRlbyIpOwogCi1zdGF0aWMgaW50IG92bW9kX2xvYWQgPSBXOTk2OENGX09WTU9EX0xPQUQ7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKIHN0YXRpYyBzaG9ydCB2aWRlb19ucltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IC0xfTsgLyotMT1maXJzdCBmcmVlKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9CkBAIC0xMTEsOSArMTExLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBwYXJhbV9udlsyNF07IC8qIG51bWJlciBvZiB2YWx1ZXMgcGVyIHBhcmFtZXRlciAqLwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLW1vZHVsZV9wYXJhbShvdm1vZF9sb2FkLCBib29sLCAwNjQ0KTsKLSNlbmRpZgogbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCAmcGFyYW1fbnZbMF0sIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBhY2tldF9zaXplLCB1aW50LCAmcGFyYW1fbnZbMV0sIDA0NDQpOwpAQCAtMTQ0LDE4ICsxNDEsNiBAQAogbW9kdWxlX3BhcmFtKHNwZWNpZmljX2RlYnVnLCBib29sLCAwNjQ0KTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLU1PRFVMRV9QQVJNX0RFU0Mob3Ztb2RfbG9hZCwKLQkJICJcbjwwfDE+IEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZy4iCi0JCSAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotCQkgIlxuSWYgZW5hYmxlZCwnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnIgotCQkgIlxubW9kdWxlIGluIHRoZSBzeXN0ZW0sIGFjY29yZGluZyB0byBpdHMgY29uZmlndXJhdGlvbiwgYW5kIgotCQkgIlxuYXR0ZW1wdHMgdG8gbG9hZCB0aGF0IG1vZHVsZSBhdXRvbWF0aWNhbGx5LiBUaGlzIGFjdGlvbiBpcyIKLQkJICJcbnBlcmZvcm1lZCBvbmNlIGFzIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIgotCQkgIlxuaW50byBtZW1vcnkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfT1ZNT0RfTE9BRCkiLiIKLQkJICJcbiIpOwotI2VuZGlmCiBNT0RVTEVfUEFSTV9ERVNDKHNpbWNhbXMsCiAJCSAiXG48bj4gTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkuIgogCQkgIlxubiBtYXkgdmFyeSBmcm9tIDAgdG8gIgpAQCAtNDQzLDggKzQyOCw2IEBACiAJCQkJICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAogCQkJCSAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CiBzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOwogCiAvKiBNZW1vcnkgbWFuYWdlbWVudCAqLwogc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CkBAIC0xNDQzLDE5ICsxNDI2LDExIEBACiAJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLAogCQkgICAgICAgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQogewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJdTggaTsKIAlpbnQgZXJyID0gMDsKIAotCXN3aXRjaCAoYWRkcikgewotCQljYXNlIE9WNnh4MF9TSUQ6Ci0JCWNhc2UgT1Y3eHgwX1NJRDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHKDQsICJSZWplY3RlZCBzbGF2ZSBJRCAweCUwNFgiLCBhZGRyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEUpIHsKIAkJLyogV2h5IGFkZHIgPDw9IDE/IFNlZSBPVlhYWDBfU0lEIGRlZmluZXMgaW4gb3ZjYW1jaGlwLmggKi8KIAkJYWRkciA8PD0gMTsKQEAgLTE0NjMsOCArMTQzOCwxNyBAQAogCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCiAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoY2FtLCBhZGRyLCBjb21tYW5kKTsKIAkJZWxzZSBpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkKLQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKGNhbSxhZGRyLCZkYXRhLT5ieXRlKTsKLQorCQkJZm9yIChpID0gMTsgaSA8PSBXOTk2OENGX0kyQ19SV19SRVRSSUVTOyBpKyspIHsKKwkJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShjYW0sIGFkZHIsCisJCQkJCQkJICZkYXRhLT5ieXRlKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCWlmICh3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSkpIHsKKwkJCQkJCWVyciA9IC1FSU87CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KIAl9IGVsc2UgaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgewogCQlhZGRyIDw8PSAxOwogCkBAIC0xNDkxLDcgKzE0NzUsNiBAQAogCQlEQkcoNCwgIlVuc3VwcG9ydGVkIEkyQyB0cmFuc2ZlciBtb2RlICglZCkiLCBzaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTA0LDQ0ICsxNDg3LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgaWQgPSBjbGllbnQtPmRyaXZlci0+aWQsIGVyciA9IDA7Ci0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX09WQ0FNQ0hJUCkgewotCQljYW0tPnNlbnNvcl9jbGllbnQgPSBjbGllbnQ7Ci0JCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2luaXQoY2FtKTsKLQkJaWYgKGVycikgewotCQkJY2FtLT5zZW5zb3JfY2xpZW50ID0gTlVMTDsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkcoNCwgIlJlamVjdGVkIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAotCQkgICAgY2xpZW50LT5uYW1lLCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUpCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURCRyg1LCAiSTJDIGF0dGFjaCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwKLQkgICAgY2xpZW50LT5uYW1lLCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUpCi0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWlmIChjYW0tPnNlbnNvcl9jbGllbnQgPT0gY2xpZW50KQotCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOwotCi0JREJHKDUsICJJMkMgZGV0YWNoIGNsaWVudCBbJXNdIiwgY2xpZW50LT5uYW1lKQotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGludCB3OTk2OGNmX2kyY19pbml0KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQogewogCWludCBlcnIgPSAwOwpAQCAtMTU1NCwxNSArMTQ5OSwxMyBAQAogCXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcCA9IHsKIAkJLmlkID0gICAgICAgICAgICAgICAgSTJDX0hXX1NNQlVTX1c5OTY4Q0YsCiAJCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAotCQkuY2xpZW50X3JlZ2lzdGVyID0gICB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtLAotCQkuY2xpZW50X3VucmVnaXN0ZXIgPSB3OTk2OGNmX2kyY19kZXRhY2hfaW5mb3JtLAogCQkuYWxnbyA9ICAgICAgICAgICAgICAmYWxnbywKIAl9OwogCiAJbWVtY3B5KCZjYW0tPmkyY19hZGFwdGVyLCAmYWRhcCwgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOwogCXN0cmNweShjYW0tPmkyY19hZGFwdGVyLm5hbWUsICJ3OTk2OGNmIik7CiAJY2FtLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gJmNhbS0+dXNiZGV2LT5kZXY7Ci0JaTJjX3NldF9hZGFwZGF0YSgmY2FtLT5pMmNfYWRhcHRlciwgY2FtKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCAmY2FtLT52NGwyX2Rldik7CiAKIAlEQkcoNiwgIlJlZ2lzdGVyaW5nIEkyQyBhZGFwdGVyIHdpdGgga2VybmVsLi4uIikKIApAQCAtMjE2NSwxMyArMjEwOCw5IEBACiBzdGF0aWMgaW50CiB3OTk2OGNmX3NlbnNvcl9jbWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQqIGFyZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCogYyA9IGNhbS0+c2Vuc29yX2NsaWVudDsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAotCWlmICghYyB8fCAhYy0+ZHJpdmVyIHx8ICFjLT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBjLT5kcml2ZXItPmNvbW1hbmQoYywgY21kLCBhcmcpOworCXJjID0gdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNlbnNvcl9zZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKIAkvKiBUaGUgSTJDIGRyaXZlciByZXR1cm5zIC1FUEVSTSBvbiBub24tc3VwcG9ydGVkIGNvbnRyb2xzICovCiAJcmV0dXJuIChyYyA8IDAgJiYgcmMgIT0gLUVQRVJNKSA/IHJjIDogMDsKIH0KQEAgLTIzNDYsNyArMjI4NSw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBOT1RFOiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiAxNiAqLwotCXN3aXRjaCAoY2FtLT5zZW5zb3JfY2xpZW50LT5hZGRyKSB7CisJc3dpdGNoICh2NGwyX2kyY19zdWJkZXZfYWRkcihjYW0tPnNlbnNvcl9zZCkpIHsKIAkJY2FzZSBPVjZ4eDBfU0lEOgogCQkJY2FtLT5tYXh3aWR0aCA9IDM1MjsKIAkJCWNhbS0+bWF4aGVpZ2h0ID0gMjg4OwpAQCAtMjY1MSw2ICsyNTkwLDcgQEAKIAl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CiAJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CiAJa2ZyZWUoY2FtLT5kYXRhX2J1ZmZlcik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CiAKIAltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiB9CkBAIC0zNDgwLDYgKzM0MjAsMTEgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkKiBwdHI7CiAJdTggc2MgPSAwOyAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KIAlzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGV2X25yOyAvKiAwIC0gd2UgYXJlIGhhbmRsaW5nIGRldmljZSBudW1iZXIgbiAqLworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQlPVjd4eDBfU0lELAorCQlPVjZ4eDBfU0lELAorCQlJMkNfQ0xJRU5UX0VORAorCX07CiAKIAlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRWZW5kb3IgJiYKIAkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRQcm9kdWN0KQpAQCAtMzQ5NSwxMiArMzQ0MCwxNCBAQAogCWlmICghY2FtKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZ1ZGV2LT5kZXYsICZjYW0tPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwwOworCiAJbXV0ZXhfaW5pdCgmY2FtLT5kZXZfbXV0ZXgpOwogCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCWNhbS0+dXNiZGV2ID0gdWRldjsKLQkvKiBOT1RFOiBhIGxvY2FsIGNvcHkgaXMgdXNlZCB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgKi8KLQltZW1jcHkoJmNhbS0+ZGV2LCAmdWRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOwogCiAJREJHKDIsICIlcyBkZXRlY3RlZCIsIHN5bWJvbGljKGNhbWxpc3QsIG1vZF9pZCkpCiAKQEAgLTM1NDksNyArMzQ5Niw3IEBACiAJY2FtLT52NGxkZXYtPm1pbm9yID0gdmlkZW9fbnJbZGV2X25yXTsKIAljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOwotCWNhbS0+djRsZGV2LT5wYXJlbnQgPSAmY2FtLT5kZXY7CisJY2FtLT52NGxkZXYtPnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CiAKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCiAJCQkJICAgIHZpZGVvX25yW2Rldl9ucl0pOwpAQCAtMzU3Niw5ICszNTIzLDEzIEBACiAJdzk5NjhjZl90dXJuX29uX2xlZChjYW0pOwogCiAJdzk5NjhjZl9pMmNfaW5pdChjYW0pOworCWNhbS0+c2Vuc29yX3NkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNhbS0+aTJjX2FkYXB0ZXIsCisJCQkib3ZjYW1jaGlwIiwgIm92Y2FtY2hpcCIsIGFkZHJzKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKIAltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2luaXQoY2FtKTsKIAlyZXR1cm4gMDsKIAogZmFpbDogLyogRnJlZSB1bnVzZWQgbWVtb3J5ICovCkBAIC0zNTg3LDYgKzM1MzgsOCBAQAogCWlmIChjYW0tPnY0bGRldikKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOwogCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOworZmFpbDA6CiAJa2ZyZWUoY2FtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU5NywxNSArMzU1MCwxNiBAQAogCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0KIAkgICAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JZG93bl93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKLQogCWlmIChjYW0pIHsKKwkJZG93bl93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAkJLyogUHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIGRhdGEgKi8KIAkJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJCWNhbS0+ZGlzY29ubmVjdGVkID0gMTsKIAotCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSkKKwkJREJHKDIsICJEaXNjb25uZWN0aW5nICVzLi4uIiwgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCkpOworCisJCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmNhbS0+djRsMl9kZXYpOwogCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmNhbS0+b3Blbik7CiAKQEAgLTM2MjEsMTIgKzM1NzUsMTIgQEAKIAkJCXc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKIAogCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKwkJdXBfd3JpdGUoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CiAKLQkJaWYgKCFjYW0tPnVzZXJzKQorCQlpZiAoIWNhbS0+dXNlcnMpIHsKIAkJCWtmcmVlKGNhbSk7CisJCX0KIAl9Ci0KLQl1cF93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIH0KIAogCkBAIC0zNjUwLDkgKzM2MDQsNiBAQAogCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgIlc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pCiAJS0RCRygzLCBXOTk2OENGX01PRFVMRV9BVVRIT1IpCiAKLQlpZiAob3Ztb2RfbG9hZCkKLQkJcmVxdWVzdF9tb2R1bGUoIm92Y2FtY2hpcCIpOwotCiAJaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJnc5OTY4Y2ZfdXNiX2RyaXZlcikpKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCmluZGV4IDMwMDMyZTEuLmZkZmM2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KIAogI2luY2x1ZGUgInc5OTY4Y2ZfdnBwLmgiCkBAIC00Miw3ICs0Myw2IEBACiAgKiBEZWZhdWx0IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgVzk5NjhDRl9PVk1PRF9MT0FEICAgICAgMSAgLyogYXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nICovCiAjZGVmaW5lIFc5OTY4Q0ZfVlBQTU9EX0xPQUQgICAgIDEgIC8qIGF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nICovCiAKIC8qIENvbW1lbnQvdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KQEAgLTE5NSwxMCArMTk1LDkgQEAKIAogLyogTWFpbiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLwogc3RydWN0IHc5OTY4Y2ZfZGV2aWNlIHsKLQlzdHJ1Y3QgZGV2aWNlIGRldjsgLyogZGV2aWNlIHN0cnVjdHVyZSAqLwotCiAJZW51bSB3OTk2OGNmX21vZGVsX2lkIGlkOyAgIC8qIHByaXZhdGUgZGV2aWNlIGlkZW50aWZpZXIgKi8KIAorCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2NGxkZXY7IC8qIC0+IFY0TCBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHY0bGxpc3Q7ICAgIC8qIGVudHJ5IG9mIHRoZSBsaXN0IG9mIFY0TCBjYW1lcmFzICovCiAKQEAgLTI2NSw3ICsyNjQsNyBAQAogCiAJLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQqIHNlbnNvcl9jbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3Jfc2Q7CiAKIAkvKiBMb2NrcyAqLwogCXN0cnVjdCBtdXRleCBkZXZfbXV0ZXgsICAgIC8qIGZvciBwcm9iZSwgZGlzY29ubmVjdCxvcGVuIGFuZCBjbG9zZSAqLwpAQCAtMjc3LDYgKzI3NiwxMSBAQAogCWNoYXIgY29tbWFuZFsxNl07IC8qIG5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZyB0aGUgZGV2aWNlICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3OTk2OGNmX2RldmljZSAqdG9fY2FtKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHc5OTY4Y2ZfZGV2aWNlLCB2NGwyX2Rldik7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY3JvcyBmb3IgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0yOTEsMTQgKzI5NSwxNCBAQAogCWlmICggKChzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID09IChsZXZlbCkpKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCiAJICAgICAoKCFzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID49IChsZXZlbCkpKSApIHsgICAgICAgICAgICAgICAgICAgIFwKIAkJaWYgKChsZXZlbCkgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfZXJyKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICBcCisJCQl2NGwyX2VycigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gMiB8fCAobGV2ZWwpID09IDMpICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQkJdjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID09IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl93YXJuKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJCXY0bDJfd2FybigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgIFwKIAkJZWxzZSBpZiAoKGxldmVsKSA+PSA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICAgICAgICBcCi0JCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCQkJdjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgXAorCQkJCSBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIC8qIEZvciBnZW5lcmljIGtlcm5lbCAobm90IGRldmljZSBzcGVjaWZpYykgbWVzc2FnZXMgKi8KQEAgLTMyMSw3ICszMjUsNyBAQAogCiAjdW5kZWYgUERCRwogI2RlZmluZSBQREJHKGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsKK3Y0bDJfaW5mbygmY2FtLT52NGwyX2RldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7CiAKICN1bmRlZiBQREJHRwogI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsgLyogbm90aGluZzogaXQncyBhIHBsYWNlaG9sZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwppbmRleCBmMjg2NGQ1Li5iNTcyY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKQEAgLTI1MiwxMSArMjUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTg3MzlfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHdtODczOV9jb3JlX29wcyA9IHsKQEAgLTM0Myw4ICszMzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAid204NzM5IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfV004NzM5LAotCS5jb21tYW5kID0gd204NzM5X2NvbW1hbmQsCiAJLnByb2JlID0gd204NzM5X3Byb2JlLAogCS5yZW1vdmUgPSB3bTg3MzlfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHdtODczOV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCmluZGV4IDUzZmNkNDI4NC4uZWRkZjExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCkBAIC0zNCwxNSArMzQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTg3NzUgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kLCBIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTYxLDExICsxNTgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODc3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204Nzc1X2NvcmVfb3BzID0gewpAQCAtMjY4LDggKzI2MCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ3bTg3NzUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9XTTg3NzUsCi0JLmNvbW1hbmQgPSB3bTg3NzVfY29tbWFuZCwKIAkucHJvYmUgPSB3bTg3NzVfcHJvYmUsCiAJLnJlbW92ZSA9IHdtODc3NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204Nzc1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCmluZGV4IGIwY2Q0OWMuLjNhNDA4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKQEAgLTU4LDEyICs1OCwyMCBAQAogCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLmJJbnRlcmZhY2VDbGFzcyA9IChpbnRjbGFzcykKIAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKICNkZWZpbmUgWkMwMzAxX0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6YzAzMDFfaWRfdGFibGVbXSA9ICB7ICAgICAgICAgICAgICAgICAgICAgIFwKIAl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFlLCAweGZmKSwgfSwgLyogUEFTMjAyICovICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwM2IsIDB4ZmYpLCB9LCAvKiBQQi0wMzMwICovICAgICAgICAgICBcCiAJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH07CisjZWxzZQorI2RlZmluZSBaQzAzMDFfSURfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpjMDMwMV9pZF90YWJsZVtdID0gIHsgICAgICAgICAgICAgICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWUsIDB4ZmYpLCB9LCAvKiBQQVMyMDIgKi8gICAgICAgICAgICBcCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKaW5kZXggODY2NmUxOS4uZmQ0MTIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19aT1JBTgogCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmIFZJUlRfVE9fQlVTCisJZGVwZW5kcyBvbiBQQ0kgJiYgSTJDX0FMR09CSVQgJiYgVklERU9fVjRMMiAmJiBWSVJUX1RPX0JVUwogCWhlbHAKIAkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgogCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCkBAIC0zMiw3ICszMiw3IEBACiBjb25maWcgVklERU9fWk9SQU5fQlVaCiAJdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKLQlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTFYIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1NBQTcxODUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgSW9tZWdhIEJ1eiBNSlBFRyBjYXB0dXJlL3BsYXliYWNrIGNhcmQuCkBAIC01OCw3ICs1OCw3IEBACiBjb25maWcgVklERU9fWk9SQU5fTE1MMzNSMTAKIAl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTE0IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fQURWNzE3MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKQEAgLTY2LDcgKzY2LDcgQEAKIAogY29uZmlnIFZJREVPX1pPUkFOX0FWUzZFWUVTCiAJdHJpc3RhdGUgIkF2ZXJNZWRpYSA2IEV5ZXMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX0JUODY2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX0tTMDEyNyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAppbmRleCA5N2EzYmJlLi41YzI3YjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApAQCAtOTcsNyArOTcsNyBAQAogCSAgICAgICBhdmFpbGFibGUpIC0gaXQgcmV0dXJucyAwIGlmIHRoZSBtb2RlIGlzIHBvc3NpYmxlCiAgICBzZXRfc2l6ZSAtPiB0aGlzIGZuLXJlZi4gc2V0cyB0aGUgbm9ybSBhbmQgaW1hZ2Ugc2l6ZSBmb3IKIAkgICAgICAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiAocmV0dXJucyAwIG9uIHN1Y2Nlc3MpCi0JICAgICAgIHRoZSBub3JtIHBhcmFtIGlzIGRlZmluZWQgaW4gdmlkZW9kZXYuaCAoVklERU9fTU9ERV8qKQorCSAgICAgICB0aGUgbm9ybSBwYXJhbSBpcyBkZWZpbmVkIGluIHZpZGVvZGV2Mi5oIChWNEwyX1NURF8qKQogCiAgICBhZGRpdGlvbmFsIHNldHVwIG1heSBiZSBhdmFpbGFibGUsIHRvbyAtIGJ1dCB0aGUgY29kZWMgc2hvdWxkIHdvcmsgd2l0aAogICAgc29tZSBkZWZhdWx0IHZhbHVlcyBldmVuIHdpdGhvdXQgdGhpcwpAQCAtMTQ0LDkgKzE0NCw4IEBACiAjaWZuZGVmIF9fTElOVVhfVklERU9DT0RFQ19ICiAjZGVmaW5lIF9fTElOVVhfVklERU9DT0RFQ19ICiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCi0vL3Nob3VsZCBiZSBpbiB2aWRlb2Rldi5oID8/PyAoVklEX0RPXy4uLi4pCiAjZGVmaW5lIENPREVDX0RPX0NPTVBSRVNTSU9OIDAKICNkZWZpbmUgQ09ERUNfRE9fRVhQQU5TSU9OICAgMQogCkBAIC0yMzcsMTAgKzIzNiw2IEBACiAJX191MzIgd2lkdGgsIGhlaWdodDsJLyogQXJlYSB0byBjYXB0dXJlICovCiAJX191MTYgZGVjaW1hdGlvbjsJLyogRGVjaW1hdGlvbiBkaXZpZGVyICovCiAJX191MTYgZmxhZ3M7CQkvKiBGbGFncyBmb3IgY2FwdHVyZSAqLwotLyogZmxhZ3MgYXJlIHRoZSBzYW1lIGFzIGluIHN0cnVjdCB2aWRlb19jYXB0dXJlIC0gc2VlIHZpZGVvZGV2Lmg6Ci0jZGVmaW5lIFZJREVPX0NBUFRVUkVfT0RECQkwCi0jZGVmaW5lIFZJREVPX0NBUFRVUkVfRVZFTgkJMQotKi8KIAlfX3UxNiBxdWFsaXR5OwkJLyogcXVhbGl0eSBvZiB0aGUgdmlkZW8gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAppbmRleCBlODczYTkxLi5hZmVjZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIF9CVVpfSF8KICNkZWZpbmUgX0JVWl9IXwogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKwogc3RydWN0IHpvcmFuX3JlcXVlc3RidWZmZXJzIHsKIAl1bnNpZ25lZCBsb25nIGNvdW50OwkvKiBOdW1iZXIgb2YgYnVmZmVycyBmb3IgTUpQRUcgZ3JhYmJpbmcgKi8KIAl1bnNpZ25lZCBsb25nIHNpemU7CS8qIFNpemUgUEVSIEJVRkZFUiBpbiBieXRlcyAqLwpAQCAtMTcwLDcgKzE3Miw3IEBACiAjZW5kaWYKICNkZWZpbmUgICBWNExfTUFTS19GUkFNRSAgIChWNExfTUFYX0ZSQU1FIC0gMSkKIAotI2RlZmluZSBNQVhfS01BTExPQ19NRU0gKDEyOCoxMDI0KQorI2RlZmluZSBNQVhfRlJBTUUgKEJVWl9NQVhfRlJBTUUgPiBWSURFT19NQVhfRlJBTUUgPyBCVVpfTUFYX0ZSQU1FIDogVklERU9fTUFYX0ZSQU1FKQogCiAjaW5jbHVkZSAienIzNjA1Ny5oIgogCkBAIC0yNDAsOSArMjQyLDYgQEAKIAogc3RydWN0IHpvcmFuX2Zvcm1hdCB7CiAJY2hhciAqbmFtZTsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQlpbnQgcGFsZXR0ZTsKLSNlbmRpZgogCV9fdTMyIGZvdXJjYzsKIAlpbnQgY29sb3JzcGFjZTsKIAlpbnQgZGVwdGg7CkBAIC0yODMsMjEgKzI4MiwyMSBAQAogCWludCBjb3VudDsKIH07CiAKLXN0cnVjdCB6b3Jhbl9qcGdfYnVmZmVyIHsKK3N0cnVjdCB6b3Jhbl9idWZmZXIgewogCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXA7Ci0JX19sZTMyICpmcmFnX3RhYjsJCS8qIGFkZHJlc3NlcyBvZiBmcmFnIHRhYmxlICovCi0JdTMyIGZyYWdfdGFiX2J1czsJLyogc2FtZSB2YWx1ZSBjYWNoZWQgdG8gc2F2ZSB0aW1lIGluIElTUiAqLwotCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBub24temVybyBpZiBjb3JyZXNwb25kaW5nIGJ1ZmZlciBpcyBpbiB1c2UgaW4gZ3JhYiBxdWV1ZSAqLwotCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLwotfTsKLQotc3RydWN0IHpvcmFuX3Y0bF9idWZmZXIgewotCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXA7Ci0JY2hhciAqZmJ1ZmZlcjsJCS8qIHZpcnR1YWwgIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBmYnVmZmVyX3BoeXM7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBmYnVmZmVyX2J1czsJLyogYnVzICAgICAgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQllbnVtIHpvcmFuX2J1ZmZlcl9zdGF0ZSBzdGF0ZTsJLyogc3RhdGU6IHVudXNlZC9wZW5kaW5nL2RvbmUgKi8KLQlzdHJ1Y3Qgem9yYW5fc3luYyBiczsJLyogRE9ORTogaW5mbyB0byByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8KKwllbnVtIHpvcmFuX2J1ZmZlcl9zdGF0ZSBzdGF0ZTsJLyogc3RhdGU6IHVudXNlZC9wZW5kaW5nL2RtYS9kb25lICovCisJc3RydWN0IHpvcmFuX3N5bmMgYnM7CQkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiAqZnJhZ190YWI7CS8qIGFkZHJlc3NlcyBvZiBmcmFnIHRhYmxlICovCisJCQl1MzIgZnJhZ190YWJfYnVzOwkvKiBzYW1lIHZhbHVlIGNhY2hlZCB0byBzYXZlIHRpbWUgaW4gSVNSICovCisJCX0ganBnOworCQlzdHJ1Y3QgeworCQkJY2hhciAqZmJ1ZmZlcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIGxvbmcgZmJ1ZmZlcl9waHlzOy8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCisJCQl1bnNpZ25lZCBsb25nIGZidWZmZXJfYnVzOy8qIGJ1cyBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCQl9IHY0bDsKKwl9OwogfTsKIAogZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IHsKQEAgLTMwNywyMSArMzA2LDEzIEBACiB9OwogCiAvKiBidWZmZXIgY29sbGVjdGlvbnMgKi8KLXN0cnVjdCB6b3Jhbl9qcGdfc3RydWN0IHsKK3N0cnVjdCB6b3Jhbl9idWZmZXJfY29sIHsKIAllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgYWN0aXZlOwkvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCi0Jc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgYnVmZmVyW0JVWl9NQVhfRlJBTUVdOwkvKiBidWZmZXJzICovCi0JaW50IG51bV9idWZmZXJzLCBidWZmZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnMsIGJ1ZmZlcl9zaXplOworCXN0cnVjdCB6b3Jhbl9idWZmZXIgYnVmZmVyW01BWF9GUkFNRV07CS8qIGJ1ZmZlcnMgKi8KIAl1OCBhbGxvY2F0ZWQ7CQkvKiBGbGFnIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAgKi8KLQl1OCByZWFkeV90b19iZV9mcmVlZDsJLyogaGFjayAtIHNlZSB6b3Jhbl9kcml2ZXIuYyAqLwogCXU4IG5lZWRfY29udGlndW91czsJLyogRmxhZyBpZiBjb250aWd1b3VzIGJ1ZmZlcnMgYXJlIG5lZWRlZCAqLwotfTsKLQotc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QgewotCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBhY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KLQlzdHJ1Y3Qgem9yYW5fdjRsX2J1ZmZlciBidWZmZXJbVklERU9fTUFYX0ZSQU1FXTsJLyogYnVmZmVycyAqLwotCWludCBudW1fYnVmZmVycywgYnVmZmVyX3NpemU7Ci0JdTggYWxsb2NhdGVkOwkJLyogRmxhZyBpZiBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgICovCi0JdTggcmVhZHlfdG9fYmVfZnJlZWQ7CS8qIGhhY2sgLSBzZWUgem9yYW5fZHJpdmVyLmMgKi8KKwkvKiBvbmx5IGFwcGxpZXMgdG8ganBnIGJ1ZmZlcnMsIHJhdyBidWZmZXJzIGFyZSBhbHdheXMgY29udGlndW91cyAqLwogfTsKIAogc3RydWN0IHpvcmFuOwpAQCAtMzMwLDIzICszMjEsMjcgQEAKIHN0cnVjdCB6b3Jhbl9maCB7CiAJc3RydWN0IHpvcmFuICp6cjsKIAotCWVudW0gem9yYW5fbWFwX21vZGUgbWFwX21vZGU7CS8qIEZsYWcgd2hpY2ggYnVmZmVyc2V0IHdpbGwgbWFwIGJ5IG5leHQgbW1hcCgpICovCisJZW51bSB6b3Jhbl9tYXBfbW9kZSBtYXBfbW9kZTsJCS8qIEZsYWcgd2hpY2ggYnVmZmVyc2V0IHdpbGwgbWFwIGJ5IG5leHQgbW1hcCgpICovCiAKIAlzdHJ1Y3Qgem9yYW5fb3ZlcmxheV9zZXR0aW5ncyBvdmVybGF5X3NldHRpbmdzOwotCXUzMiAqb3ZlcmxheV9tYXNrOwkvKiBvdmVybGF5IG1hc2sgKi8KLQllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgb3ZlcmxheV9hY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KKwl1MzIgKm92ZXJsYXlfbWFzazsJCQkvKiBvdmVybGF5IG1hc2sgKi8KKwllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgb3ZlcmxheV9hY3RpdmU7LyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLworCisJc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgYnVmZmVyczsJLyogYnVmZmVycycgaW5mbyAqLwogCiAJc3RydWN0IHpvcmFuX3Y0bF9zZXR0aW5ncyB2NGxfc2V0dGluZ3M7CS8qIHN0cnVjdHVyZSB3aXRoIGEgbG90IG9mIHRoaW5ncyB0byBwbGF5IHdpdGggKi8KLQlzdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KLQogCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MganBnX3NldHRpbmdzOwkvKiBzdHJ1Y3R1cmUgd2l0aCBhIGxvdCBvZiB0aGluZ3MgdG8gcGxheSB3aXRoICovCi0Jc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3QganBnX2J1ZmZlcnM7CS8qIE1KUEVHIGJ1ZmZlcnMnIGluZm8gKi8KIH07CiAKIHN0cnVjdCBjYXJkX2luZm8gewogCWVudW0gY2FyZF90eXBlIHR5cGU7CiAJY2hhciBuYW1lWzMyXTsKLQl1MTYgaTJjX2RlY29kZXIsIGkyY19lbmNvZGVyOwkJCS8qIEkyQyB0eXBlcyAqLworCWNvbnN0IGNoYXIgKmkyY19kZWNvZGVyOwkvKiBpMmMgZGVjb2RlciBkZXZpY2UgKi8KKwljb25zdCBjaGFyICptb2RfZGVjb2RlcjsJLyogaTJjIGRlY29kZXIgbW9kdWxlICovCisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJzX2RlY29kZXI7CisJY29uc3QgY2hhciAqaTJjX2VuY29kZXI7CS8qIGkyYyBlbmNvZGVyIGRldmljZSAqLworCWNvbnN0IGNoYXIgKm1vZF9lbmNvZGVyOwkvKiBpMmMgZW5jb2RlciBtb2R1bGUgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcnNfZW5jb2RlcjsKIAl1MTYgdmlkZW9fdmZlLCB2aWRlb19jb2RlYzsJCQkvKiB2aWRlb2NvZGVjIHR5cGVzICovCiAJdTE2IGF1ZGlvX2NoaXA7CQkJCQkvKiBhdWRpbyB0eXBlICovCiAKQEAgLTM1Niw3ICszNTEsNyBAQAogCQljaGFyIG5hbWVbMzJdOwogCX0gaW5wdXRbQlVaX01BWF9JTlBVVF07CiAKLQlpbnQgbm9ybXM7CisJdjRsMl9zdGRfaWQgbm9ybXM7CiAJc3RydWN0IHR2bm9ybSAqdHZuWzNdOwkvKiBzdXBwb3J0ZWQgVFYgbm9ybXMgKi8KIAogCXUzMiBqcGVnX2ludDsJCS8qIEpQRUcgaW50ZXJydXB0ICovCkBAIC0zNzcsMTQgKzM3MiwxNSBAQAogfTsKIAogc3RydWN0IHpvcmFuIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwogCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOwkvKiAqLwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnbzsJLyogKi8KIAl1MzIgaTJjYnI7CiAKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZGVjb2RlcjsJLyogdmlkZW8gZGVjb2RlciBpMmMgY2xpZW50ICovCi0Jc3RydWN0IGkyY19jbGllbnQgKmVuY29kZXI7CS8qIHZpZGVvIGVuY29kZXIgaTJjIGNsaWVudCAqLworCXN0cnVjdCB2NGwyX3N1YmRldiAqZGVjb2RlcjsJLyogdmlkZW8gZGVjb2RlciBzdWItZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICplbmNvZGVyOwkvKiB2aWRlbyBlbmNvZGVyIHN1Yi1kZXZpY2UgKi8KIAogCXN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYzsJLyogdmlkZW8gY29kZWMgKi8KIAlzdHJ1Y3QgdmlkZW9jb2RlYyAqdmZlOwkvKiB2aWRlbyBmcm9udCBlbmQgKi8KQEAgLTQwNSw5ICs0MDEsMTUgQEAKIAlzcGlubG9ja190IHNwaW5sb2NrOwkvKiBTcGlubG9jayAqLwogCiAJLyogVmlkZW8gZm9yIExpbnV4IHBhcmFtZXRlcnMgKi8KLQlpbnQgaW5wdXQsIG5vcm07CS8qIGNhcmQncyBub3JtIGFuZCBpbnB1dCAtIG5vcm09VklERU9fTU9ERV8qICovCi0JaW50IGh1ZSwgc2F0dXJhdGlvbiwgY29udHJhc3QsIGJyaWdodG5lc3M7CS8qIEN1cnJlbnQgcGljdHVyZSBwYXJhbXMgKi8KLQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIGJ1ZmZlcjsJLyogQ3VycmVudCBidWZmZXIgcGFyYW1zICovCisJaW50IGlucHV0OwkvKiBjYXJkJ3Mgbm9ybSBhbmQgaW5wdXQgLSBub3JtPVZJREVPX01PREVfKiAqLworCXY0bDJfc3RkX2lkIG5vcm07CisKKwkvKiBDdXJyZW50IGJ1ZmZlciBwYXJhbXMgKi8KKwl2b2lkICAgICp2YnVmX2Jhc2U7CisJaW50ICAgICB2YnVmX2hlaWdodCwgdmJ1Zl93aWR0aDsKKwlpbnQgICAgIHZidWZfZGVwdGg7CisJaW50ICAgICB2YnVmX2J5dGVzcGVybGluZTsKKwogCXN0cnVjdCB6b3Jhbl9vdmVybGF5X3NldHRpbmdzIG92ZXJsYXlfc2V0dGluZ3M7CiAJdTMyICpvdmVybGF5X21hc2s7CS8qIG92ZXJsYXkgbWFzayAqLwogCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLwpAQCAtNDI3LDcgKzQyOSw3IEBACiAJdW5zaWduZWQgbG9uZyB2NGxfcGVuZF90YWlsOwogCXVuc2lnbmVkIGxvbmcgdjRsX3N5bmNfdGFpbDsKIAlpbnQgdjRsX3BlbmRbVjRMX01BWF9GUkFNRV07Ci0Jc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QgdjRsX2J1ZmZlcnM7CS8qIFY0TCBidWZmZXJzJyBpbmZvICovCisJc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgdjRsX2J1ZmZlcnM7CS8qIFY0TCBidWZmZXJzJyBpbmZvICovCiAKIAkvKiBCdXogTUpQRUcgcGFyYW1ldGVycyAqLwogCWVudW0gem9yYW5fY29kZWNfbW9kZSBjb2RlY19tb2RlOwkvKiBzdGF0dXMgb2YgY29kZWMgKi8KQEAgLTQ1NCw3ICs0NTYsNyBAQAogCWludCBqcGdfcGVuZFtCVVpfTUFYX0ZSQU1FXTsKIAogCS8qIGFycmF5IGluZGV4ZWQgYnkgZnJhbWUgbnVtYmVyICovCi0Jc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3QganBnX2J1ZmZlcnM7CS8qIE1KUEVHIGJ1ZmZlcnMnIGluZm8gKi8KKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLwogCiAJLyogQWRkaXRpb25hbCBzdHVmZiBmb3IgdGVzdGluZyAqLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC00ODgsNiArNDkwLDExIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QgdGVzdF9xOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9yYW4gKnRvX3pvcmFuKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHpvcmFuLCB2NGwyX2Rldik7Cit9CisKIC8qIFRoZXJlIHdhcyBzb21ldGhpbmcgY2FsbGVkIF9BTFBIQV9CVVogdGhhdCB1c2VkIHRoZSBQQ0kgYWRkcmVzcyBpbnN0ZWFkIG9mCiAgKiB0aGUga2VybmVsIGlvbWFwcGVkIGFkZHJlc3MgZm9yIGJ0cmVhZC9idHdyaXRlLiAgKi8KICNkZWZpbmUgYnR3cml0ZShkYXQsYWRyKSAgICB3cml0ZWwoKGRhdCksIHpyLT56cjM2MDU3X21lbSsoYWRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKaW5kZXggNWQyZjA5MC4uZjkxYmJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTM4LDggKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtNDcsMTEgKzQ2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvYnQ4MTkuaD4KIAogI2luY2x1ZGUgInZpZGVvY29kZWMuaCIKICNpbmNsdWRlICJ6b3Jhbi5oIgpAQCAtMTA4LDI1ICsxMDYsOCBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgIlZpZGVvIGRldmljZSBudW1iZXIgKC0xPUF1dG8pIik7CiAKLS8qCi0gICBOdW1iZXIgYW5kIHNpemUgb2YgZ3JhYiBidWZmZXJzIGZvciBWaWRlbyA0IExpbnV4Ci0gICBUaGUgdmFzdCBtYWpvcml0eSBvZiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiAyLAotICAgdGhlIHZlcnkgcG9wdWxhciBCVFRWIGRyaXZlciBhY3R1YWxseSBkb2VzIE9OTFkgaGF2ZSAyLgotICAgVGltZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zIG1pZ2h0IG5lZWQgbW9yZSwgdGhlIG1heGltdW0KLSAgIGlzIFZJREVPX01BWF9GUkFNRSAoZGVmaW5lZCBpbiA8bGludXgvdmlkZW9kZXYuaD4pLgotCi0gICBUaGUgc2l6ZSBpcyBzZXQgc28gdGhhdCB0aGUgbWF4aW11bSBwb3NzaWJsZSByZXF1ZXN0Ci0gICBjYW4gYmUgc2F0aXNmaWVkLiBEZWNyZWFzZSAgaXQsIGlmIGJpZ3BoeXNfYXJlYSBhbGxvYydkCi0gICBtZW1vcnkgaXMgbG93LiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgYmlncGh5c19hcmVhIHBhdGNoLAotICAgc2V0IGl0IHRvIDEyOCBLQi4gV2lsbCB5b3UgYWxsb3cgb25seSB0byBncmFiIHNtYWxsCi0gICBpbWFnZXMgd2l0aCBWNEwsIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbm90aGluZy4KLQotICAgdjRsX2J1ZnNpemUgaGFzIHRvIGJlIGdpdmVuIGluIEtCICEKLQotKi8KLQotaW50IHY0bF9uYnVmcyA9IDI7Ci1pbnQgdjRsX2J1ZnNpemUgPSAxMjg7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLworaW50IHY0bF9uYnVmcyA9IDQ7CitpbnQgdjRsX2J1ZnNpemUgPSA4NjQ7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLwogbW9kdWxlX3BhcmFtKHY0bF9uYnVmcywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModjRsX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgVjRMIGJ1ZmZlcnMgdG8gdXNlIik7CiBtb2R1bGVfcGFyYW0odjRsX2J1ZnNpemUsIGludCwgMDY0NCk7CkBAIC0yNzMsNyArMjU0LDcgQEAKIHN0YXRpYyB2b2lkCiBkYzEwX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMF9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiAlc1xuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCS8qIFBpeGVsIGNsb2NrIHNlbGVjdGlvbiAqLwogCUdQSU8oenIsIDQsIDApOwpAQCAtMjg1LDEzICsyNjYsMTMgQEAKIHN0YXRpYyB2b2lkCiBkYzEwcGx1c19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGRjMTBwbHVzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZAogYnV6X2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogYnV6X2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJLyogc29tZSBzdHVmZiBmcm9tIElvbWVnYSAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoenItPnBjaV9kZXYsIDB4ZmMsIDB4OTA2ODBmMTUpOwpAQCAtMzAyLDcgKzI4Myw3IEBACiBzdGF0aWMgdm9pZAogbG1sMzNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBsbWwzM19pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiAlc1xuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCUdQSU8oenIsIDIsIDEpOwkJLy8gU2V0IENvbXBvc2l0ZSBpbnB1dC9vdXRwdXQKIH0KQEAgLTMzMiw1MCArMzEzLDYgQEAKIH0KIAogc3RhdGljIGNoYXIgKgotaTJjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGkyY19pZCkKLXsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCXN3aXRjaCAoaTJjX2lkKSB7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMDoKLQkJbmFtZSA9ICJzYWE3MTEwIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMUE6Ci0JCW5hbWUgPSAic2FhNzExMSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxMTQ6Ci0JCW5hbWUgPSAic2FhNzExNCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxODVCOgotCQluYW1lID0gInNhYTcxODUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTcwOgotCQluYW1lID0gImFkdjcxNzAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTc1OgotCQluYW1lID0gImFkdjcxNzUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDgxOToKLQkJbmFtZSA9ICJidDgxOSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODU2OgotCQluYW1lID0gImJ0ODU2IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NjY6Ci0JCW5hbWUgPSAiYnQ4NjYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9WUFgzMjIwOgotCQluYW1lID0gInZweDMyMjAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9LUzAxMjc6Ci0JCW5hbWUgPSAia3MwMTI3IjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBjaGFyICoKIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGNvZGVjaWQpCiB7CiAJY2hhciAqbmFtZSA9IE5VTEw7CkBAIC00MjUsMTEgKzM2MiwyNCBAQAogc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9hdnM2ZXllcyA9IHsgODY0LCA3MjAsIDc0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Owogc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9hdnM2ZXllcyA9IHsgODU4LCA3MjAsIDU2LCA3ODgsIDUyNSwgNDgwLCAxNiB9OwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdnB4MzIyMF9hZGRyc1tdID0geyAweDQzLCAweDQ3LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxMTBfYWRkcnNbXSA9IHsgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTExX2FkZHJzW10gPSB7IDB4MjUsIDB4MjQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FhNzExNF9hZGRyc1tdID0geyAweDIxLCAweDIwLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkdjcxN3hfYWRkcnNbXSA9IHsgMHg2YSwgMHg2YiwgMHgyYSwgMHgyYiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBrczAxMjdfYWRkcnNbXSA9IHsgMHg2YywgMHg2ZCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTg1X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnQ4MTlfYWRkcnNbXSA9IHsgMHg0NSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBidDg1Nl9hZGRyc1tdID0geyAweDQ0LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJ0ODY2X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CisKIHN0YXRpYyBzdHJ1Y3QgY2FyZF9pbmZvIHpvcmFuX2NhcmRzW05VTV9DQVJEU10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS50eXBlID0gREMxMF9vbGQsCiAJCS5uYW1lID0gIkRDMTAob2xkKSIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCQkuaTJjX2RlY29kZXIgPSAidnB4MzIyMGEiLAorCQkubW9kX2RlY29kZXIgPSAidnB4MzIyMCIsCisJCS5hZGRyc19kZWNvZGVyID0gdnB4MzIyMF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAogCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAogCkBAIC00MzksNyArMzg5LDcgQEAKIAkJCXsgMiwgIlMtVmlkZW8iIH0sCiAJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWxfZGMxMCwKIAkJCSZmNjBzcXBpeGVsX2RjMTAsCkBAIC00NTcsOCArNDA3LDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMTBfbmV3LAogCQkubmFtZSA9ICJEQzEwKG5ldykiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJzYWE3MTEwIiwKKwkJLm1vZF9kZWNvZGVyID0gInNhYTcxMTAiLAorCQkuYWRkcnNfZGVjb2RlciA9IHNhYTcxMTBfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzUiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMywKQEAgLTQ2Nyw3ICs0MjEsNyBAQAogCQkJCXsgNywgIlMtVmlkZW8iIH0sCiAJCQkJeyA1LCAiSW50ZXJuYWwvY29tcCIgfQogCQkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkJJmY1MHNxcGl4ZWwsCiAJCQkJJmY2MHNxcGl4ZWwsCkBAIC00ODQsOCArNDM4LDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMTBwbHVzLAogCQkubmFtZSA9ICJEQzEwcGx1cyIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTAiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAzLApAQCAtNDk0LDcgKzQ1Miw3IEBACiAJCQl7IDcsICJTLVZpZGVvIiB9LAogCQkJeyA1LCAiSW50ZXJuYWwvY29tcCIgfQogCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCSZmNTBzcXBpeGVsLAogCQkJJmY2MHNxcGl4ZWwsCkBAIC01MTIsOCArNDcwLDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMzAsCiAJCS5uYW1lID0gIkRDMzAiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTUyMyw3ICs0ODUsNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTU0MSw4ICs1MDMsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMzMHBsdXMsCiAJCS5uYW1lID0gIkRDMzBwbHVzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkuaTJjX2RlY29kZXIgPSAidnB4MzIyMGEiLAorCQkubW9kX2RlY29kZXIgPSAidnB4MzIyMCIsCisJCS5hZGRyc19kZWNvZGVyID0gdnB4MzIyMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAogCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAogCkBAIC01NTIsNyArNTE4LDcgQEAKIAkJCXsgMiwgIlMtVmlkZW8iIH0sCiAJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWxfZGMxMCwKIAkJCSZmNjBzcXBpeGVsX2RjMTAsCkBAIC01NzAsOCArNTM2LDEyIEBACiAJfSwgewogCQkudHlwZSA9IExNTDMzLAogCQkubmFtZSA9ICJMTUwzMyIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODU2LAorCQkuaTJjX2RlY29kZXIgPSAiYnQ4MTlhIiwKKwkJLm1vZF9kZWNvZGVyID0gImJ0ODE5IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBidDgxOV9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImJ0ODU2IiwKKwkJLm1vZF9lbmNvZGVyID0gImJ0ODU2IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBidDg1Nl9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAyLApAQCAtNTc5LDcgKzU0OSw3IEBACiAJCQl7IDAsICJDb21wb3NpdGUiIH0sCiAJCQl7IDcsICJTLVZpZGVvIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDIsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDFfbG1sMzMsCiAJCQkmZjYwY2NpcjYwMV9sbWwzMywKQEAgLTU5Nyw4ICs1NjcsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gTE1MMzNSMTAsCiAJCS5uYW1lID0gIkxNTDMzUjEwIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExNCIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTE1IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTE0X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3MCIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTcwIiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC02MDYsNyArNTgwLDcgQEAKIAkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMiwKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUwsCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMV9sbTMzcjEwLAogCQkJJmY2MGNjaXI2MDFfbG0zM3IxMCwKQEAgLTYyNCw4ICs1OTgsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gQlVaLAogCQkubmFtZSA9ICJCdXoiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTEiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExNSIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMV9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gInNhYTcxODUiLAorCQkubW9kX2VuY29kZXIgPSAic2FhNzE4NSIsCisJCS5hZGRyc19lbmNvZGVyID0gc2FhNzE4NV9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAyLApAQCAtNjMzLDcgKzYxMSw3IEBACiAJCQl7IDMsICJDb21wb3NpdGUiIH0sCiAJCQl7IDcsICJTLVZpZGVvIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDEsCiAJCQkmZjYwY2NpcjYwMSwKQEAgLTY1Myw4ICs2MzEsMTIgQEAKIAkJLm5hbWUgPSAiNi1FeWVzIiwKIAkJLyogQXZlck1lZGlhIGNob3NlIG5vdCB0byBicmFuZCB0aGUgNi1FeWVzLiBUaHVzIGl0CiAJCSAgIGNhbid0IGJlIGF1dG9kZXRlY3RlZCwgYW5kIHJlcXVpcmVzIGNhcmQ9eC4gKi8KLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODY2LAorCQkuaTJjX2RlY29kZXIgPSAia3MwMTI3IiwKKwkJLm1vZF9kZWNvZGVyID0gImtzMDEyNyIsCisJCS5hZGRyc19kZWNvZGVyID0ga3MwMTI3X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYnQ4NjYiLAorCQkubW9kX2VuY29kZXIgPSAiYnQ4NjYiLAorCQkuYWRkcnNfZW5jb2RlciA9IGJ0ODY2X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDEwLApAQCAtNjcwLDcgKzY1Miw3IEBACiAJCQl7MTAsICJTLVZpZGVvIDMiIH0sCiAJCQl7MTUsICJZQ2JDciIgfQogCQl9LAotCQkubm9ybXMgPSAyLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTCwKIAkJLnR2biA9IHsKIAkJCSZmNTBjY2lyNjAxX2F2czZleWVzLAogCQkJJmY2MGNjaXI2MDFfYXZzNmV5ZXMsCkBAIC03MzUsNjkgKzcxNyw2IEBACiAJYnR3cml0ZSh6ci0+aTJjYnIsIFpSMzYwNTdfSTJDQlIpOwogfQogCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwKLQkJS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfcmVnaXN0ZXIoKSAtIGRyaXZlciBpZCA9ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY2xpZW50LT5kcml2ZXItPmlkKTsKLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmICh6ci0+dXNlciA+IDApIHsKLQkJLyogd2UncmUgYWxyZWFkeSBidXN5LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvCi0JCSAqIHRoZW0uLi4gQ291bGQgZG8gYSBsb3Qgb2Ygc3R1ZmYgaGVyZSwgYnV0IHRoaXMKLQkJICogaXMgZWFzaWVzdC4gKERpZCBJIGV2ZXIgbWVudGlvbiBJJ20gYSBsYXp5IGFzcz8pCi0JCSAqLwotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2RlY29kZXIpCi0JCXpyLT5kZWNvZGVyID0gY2xpZW50OwotCWVsc2UgaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZW5jb2RlcikKLQkJenItPmVuY29kZXIgPSBjbGllbnQ7Ci0JZWxzZSB7Ci0JCXJlcyA9IC1FTk9ERVY7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOgotCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwgS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfdW5yZWdpc3RlcigpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlpZiAoenItPnVzZXIgPiAwKSB7Ci0JCXJlcyA9IC1FQlVTWTsKLQkJZ290byBjbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQkvKiB0cnkgdG8gbG9jYXRlIGl0ICovCi0JaWYgKGNsaWVudCA9PSB6ci0+ZW5jb2RlcikgewotCQl6ci0+ZW5jb2RlciA9IE5VTEw7Ci0JfSBlbHNlIGlmIChjbGllbnQgPT0genItPmRlY29kZXIpIHsKLQkJenItPmRlY29kZXIgPSBOVUxMOwotCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyVkXSIsIHpyLT5pZCk7Ci0JfQotY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSB6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUgPSB7CiAJLnNldHNkYSA9IHpvcmFuX2kyY19zZXRzZGEsCiAJLnNldHNjbCA9IHpvcmFuX2kyY19zZXRzY2wsCkBAIC04MTMsMTMgKzczMiwxMCBAQAogCW1lbWNweSgmenItPmkyY19hbGdvLCAmem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhKSk7CiAJenItPmkyY19hbGdvLmRhdGEgPSB6cjsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwogCXpyLT5pMmNfYWRhcHRlci5pZCA9IEkyQ19IV19CX1pSMzYwNjc7Ci0JenItPmkyY19hZGFwdGVyLmNsaWVudF9yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXI7Ci0JenItPmkyY19hZGFwdGVyLmNsaWVudF91bnJlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyOwogCXN0cmxjcHkoenItPmkyY19hZGFwdGVyLm5hbWUsIFpSX0RFVk5BTUUoenIpLAogCQlzaXplb2YoenItPmkyY19hZGFwdGVyLm5hbWUpKTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsIHpyKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsICZ6ci0+djRsMl9kZXYpOwogCXpyLT5pMmNfYWRhcHRlci5hbGdvX2RhdGEgPSAmenItPmkyY19hbGdvOwogCXpyLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gJnpyLT5wY2lfZGV2LT5kZXY7CiAJcmV0dXJuIGkyY19iaXRfYWRkX2J1cygmenItPmkyY19hZGFwdGVyKTsKQEAgLTgzNSwxOSArNzUxLDIwIEBACiAKIGludAogem9yYW5fY2hlY2tfanBnX3NldHRpbmdzIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgICAgICp6ciwKLQkJCSAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MpCisJCQkgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzLAorCQkJICBpbnQgdHJ5KQogewogCWludCBlcnIgPSAwLCBlcnIwID0gMDsKIAogCWRwcmludGsoNCwKIAkJS0VSTl9ERUJVRwotCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gZGVjOiAlZCwgSGRjbTogJWQsIFZkY206ICVkLCBUZGNtOiAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uLCBzZXR0aW5ncy0+SG9yRGNtLAorCQkiJXM6ICVzIC0gZGVjOiAlZCwgSGRjbTogJWQsIFZkY206ICVkLCBUZGNtOiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbiwgc2V0dGluZ3MtPkhvckRjbSwKIAkJc2V0dGluZ3MtPlZlckRjbSwgc2V0dGluZ3MtPlRtcERjbSk7CiAJZHByaW50ayg0LAogCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5pbWdfeCwgc2V0dGluZ3MtPmltZ195LAorCQkiJXM6ICVzIC0geDogJWQsIHk6ICVkLCB3OiAlZCwgeTogJWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgc2V0dGluZ3MtPmltZ194LCBzZXR0aW5ncy0+aW1nX3ksCiAJCXNldHRpbmdzLT5pbWdfd2lkdGgsIHNldHRpbmdzLT5pbWdfaGVpZ2h0KTsKIAkvKiBDaGVjayBkZWNpbWF0aW9uLCBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGRlY2ltYXRpb24gPSAxLCAyLCA0ICovCiAJc3dpdGNoIChzZXR0aW5ncy0+ZGVjaW1hdGlvbikgewpAQCAtODc5LDggKzc5Niw4IEBACiAJCWlmICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3KSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9ERUJVRwotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBIRGVjIGJ5IDQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgREMxMFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIEhEZWMgYnkgNCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBEQzEwXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQllcnIwKys7CiAJCQlicmVhazsKIAkJfQpAQCAtOTAwLDUwICs4MTcsNzMgQEAKIAkJLyogV2UgaGF2ZSB0byBjaGVjayB0aGUgZGF0YSB0aGUgdXNlciBoYXMgc2V0ICovCiAKIAkJaWYgKHNldHRpbmdzLT5Ib3JEY20gIT0gMSAmJiBzZXR0aW5ncy0+SG9yRGNtICE9IDIgJiYKLQkJICAgICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3IHx8IHNldHRpbmdzLT5Ib3JEY20gIT0gNCkpCisJCSAgICAoenItPmNhcmQudHlwZSA9PSBEQzEwX25ldyB8fCBzZXR0aW5ncy0+SG9yRGNtICE9IDQpKSB7CisJCQlzZXR0aW5ncy0+SG9yRGNtID0gY2xhbXAoc2V0dGluZ3MtPkhvckRjbSwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VmVyRGNtICE9IDEgJiYgc2V0dGluZ3MtPlZlckRjbSAhPSAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+VmVyRGNtICE9IDEgJiYgc2V0dGluZ3MtPlZlckRjbSAhPSAyKSB7CisJCQlzZXR0aW5ncy0+VmVyRGNtID0gY2xhbXAoc2V0dGluZ3MtPlZlckRjbSwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKSB7CisJCQlzZXR0aW5ncy0+VG1wRGNtID0gY2xhbXAoc2V0dGluZ3MtPlRtcERjbSwgMSwgMik7CiAJCQllcnIwKys7CisJCX0KIAkJaWYgKHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAxICYmCi0JCSAgICBzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgIT0gMikKKwkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKSB7CisJCQlzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgPSBjbGFtcChzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYsIDEsIDIpOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkgeworCQkJc2V0dGluZ3MtPmltZ194ID0gMDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApIHsKKwkJCXNldHRpbmdzLT5pbWdfeSA9IDA7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCA8IDAgfHwgc2V0dGluZ3MtPmltZ193aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKKwkJCXNldHRpbmdzLT5pbWdfd2lkdGggPSBjbGFtcChzZXR0aW5ncy0+aW1nX3dpZHRoLCAwLCAoaW50KUJVWl9NQVhfV0lEVEgpOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCA8IDAgfHwgc2V0dGluZ3MtPmltZ19oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpIHsKKwkJCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gY2xhbXAoc2V0dGluZ3MtPmltZ19oZWlnaHQsIDAsIEJVWl9NQVhfSEVJR0hUIC8gMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3ggKyBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ194ICsgc2V0dGluZ3MtPmltZ193aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKKwkJCXNldHRpbmdzLT5pbWdfeCA9IEJVWl9NQVhfV0lEVEggLSBzZXR0aW5ncy0+aW1nX3dpZHRoOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ195ICsgc2V0dGluZ3MtPmltZ19oZWlnaHQgPgotCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3kgKyBzZXR0aW5ncy0+aW1nX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikgeworCQkJc2V0dGluZ3MtPmltZ195ID0gQlVaX01BWF9IRUlHSFQgLyAyIC0gc2V0dGluZ3MtPmltZ19oZWlnaHQ7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+SG9yRGNtICYmIHNldHRpbmdzLT5WZXJEY20pIHsKLQkJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoICUKLQkJCSAgICAoMTYgKiBzZXR0aW5ncy0+SG9yRGNtKSAhPSAwKQotCQkJCWVycjArKzsKLQkJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCAlCi0JCQkgICAgKDggKiBzZXR0aW5ncy0+VmVyRGNtKSAhPSAwKQotCQkJCWVycjArKzsKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCAlICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pICE9IDApIHsKKwkJCXNldHRpbmdzLT5pbWdfd2lkdGggLT0gc2V0dGluZ3MtPmltZ193aWR0aCAlICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pOworCQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggPT0gMCkKKwkJCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0gMTYgKiBzZXR0aW5ncy0+SG9yRGNtOworCQkJZXJyMCsrOworCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCAlICg4ICogc2V0dGluZ3MtPlZlckRjbSkgIT0gMCkgeworCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgLT0gc2V0dGluZ3MtPmltZ19oZWlnaHQgJSAoOCAqIHNldHRpbmdzLT5WZXJEY20pOworCQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ID09IDApCisJCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSA4ICogc2V0dGluZ3MtPlZlckRjbTsKKwkJCWVycjArKzsKIAkJfQogCi0JCWlmIChlcnIwKSB7CisJCWlmICghdHJ5ICYmIGVycjApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBlcnJvciBpbiBwYXJhbXMgZm9yIGRlY2ltYXRpb24gPSAwXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gZXJyb3IgaW4gcGFyYW1zIGZvciBkZWNpbWF0aW9uID0gMFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZXJyKys7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKKwkJCSIlczogJXMgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbik7CiAJCWVycisrOwogCQlicmVhazsKIAl9CkBAIC0xMDIxLDEyICs5NjEsMTAgQEAKIAkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEpKTsKIAl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VycyA9CiAJICAgIEpQRUdfTUFSS0VSX0RIVCB8IEpQRUdfTUFSS0VSX0RRVDsKLQlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncyk7CisJaSA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnpyLT5qcGdfc2V0dGluZ3MsIDApOwogCWlmIChpKQotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKCkgaW50ZXJuYWwgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyBpbnRlcm5hbCBlcnJvclxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKIAljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOwogCXpyLT50ZXN0aW5nID0gMDsKQEAgLTEwNjIsMTMgKzEwMDAsMTEgQEAKIHpyMzYwNTdfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKIAlpbnQgaiwgZXJyOwotCWludCB0d28gPSAyOwotCWludCB6ZXJvID0gMDsKIAogCWRwcmludGsoMSwKIAkJS0VSTl9JTkZPCi0JCSIlczogenIzNjA1N19pbml0KCkgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgenItPmlkLCB6cik7CisJCSIlczogJXMgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHpyLT5pZCwgenIpOwogCiAJLyogZGVmYXVsdCBzZXR1cCBvZiBhbGwgcGFyYW1ldGVycyB3aGljaCB3aWxsIHBlcnNpc3QgYmV0d2VlbiBvcGVucyAqLwogCXpyLT51c2VyID0gMDsKQEAgLTEwNzksMjQgKzEwMTUsMzIgQEAKIAl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopIHZpZG1lbTsKLQl6ci0+YnVmZmVyLndpZHRoID0gMDsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IDA7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IDA7Ci0JenItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgPSAwOworCXpyLT52YnVmX2Jhc2UgPSAodm9pZCAqKSB2aWRtZW07CisJenItPnZidWZfd2lkdGggPSAwOworCXpyLT52YnVmX2hlaWdodCA9IDA7CisJenItPnZidWZfZGVwdGggPSAwOworCXpyLT52YnVmX2J5dGVzcGVybGluZSA9IDA7CiAKIAkvKiBBdm9pZCBub25zZW5zZSBzZXR0aW5ncyBmcm9tIHVzZXIgZm9yIGRlZmF1bHQgaW5wdXQvbm9ybSAqLwotCWlmIChkZWZhdWx0X25vcm0gPCBWSURFT19NT0RFX1BBTCAmJgotCSAgICBkZWZhdWx0X25vcm0gPiBWSURFT19NT0RFX1NFQ0FNKQotCQlkZWZhdWx0X25vcm0gPSBWSURFT19NT0RFX1BBTDsKLQl6ci0+bm9ybSA9IGRlZmF1bHRfbm9ybTsKLQlpZiAoISh6ci0+dGltaW5nID0genItPmNhcmQudHZuW3pyLT5ub3JtXSkpIHsKKwlpZiAoZGVmYXVsdF9ub3JtIDwgMCAmJiBkZWZhdWx0X25vcm0gPiAyKQorCQlkZWZhdWx0X25vcm0gPSAwOworCWlmIChkZWZhdWx0X25vcm0gPT0gMCkgeworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKKwl9IGVsc2UgaWYgKGRlZmF1bHRfbm9ybSA9PSAxKSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsxXTsKKwl9IGVsc2UgeworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1NFQ0FNOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzJdOworCX0KKwlpZiAoenItPnRpbWluZyA9PSBOVUxMKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fV0FSTklORwotCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGRlZmF1bHQgVFYgc3RhbmRhcmQgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4gUEFMIHdpbGwgYmUgdXNlZC5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXpyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dOworCQkJIiVzOiAlcyAtIGRlZmF1bHQgVFYgc3RhbmRhcmQgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4gUEFMIHdpbGwgYmUgdXNlZC5cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKIAl9CiAKIAlpZiAoZGVmYXVsdF9pbnB1dCA+IHpyLT5jYXJkLmlucHV0cy0xKSB7CkBAIC0xMTA4LDEyICsxMDUyLDYgQEAKIAl9CiAJenItPmlucHV0ID0gZGVmYXVsdF9pbnB1dDsKIAotCS8qIFNob3VsZCB0aGUgZm9sbG93aW5nIGJlIHJlc2V0IGF0IGV2ZXJ5IG9wZW4gPyAqLwotCXpyLT5odWUgPSAzMjc2ODsKLQl6ci0+Y29udHJhc3QgPSAzMjc2ODsKLQl6ci0+c2F0dXJhdGlvbiA9IDMyNzY4OwotCXpyLT5icmlnaHRuZXNzID0gMzI3Njg7Ci0KIAkvKiBkZWZhdWx0IHNldHVwICh3aWxsIGJlIHJlcGVhdGVkIGF0IGV2ZXJ5IG9wZW4pICovCiAJem9yYW5fb3Blbl9pbml0X3BhcmFtcyh6cik7CiAKQEAgLTExMjQsOCArMTA2Miw4IEBACiAJaWYgKCF6ci0+c3RhdF9jb20gfHwgIXpyLT52aWRlb19kZXYpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogenIzNjA1N19pbml0KCkgLSBrbWFsbG9jIChTVEFUX0NPTSkgZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGttYWxsb2MgKFNUQVRfQ09NKSBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CkBAIC0xMTM3LDYgKzEwNzUsNyBAQAogCSAqICAgTm93IGFkZCB0aGUgdGVtcGxhdGUgYW5kIHJlZ2lzdGVyIHRoZSBkZXZpY2UgdW5pdC4KIAkgKi8KIAltZW1jcHkoenItPnZpZGVvX2RldiwgJnpvcmFuX3RlbXBsYXRlLCBzaXplb2Yoem9yYW5fdGVtcGxhdGUpKTsKKwl6ci0+dmlkZW9fZGV2LT5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKIAlzdHJjcHkoenItPnZpZGVvX2Rldi0+bmFtZSwgWlJfREVWTkFNRSh6cikpOwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19uclt6ci0+aWRdKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTExNDgsOCArMTA4NywxMCBAQAogCQlkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoenIpOwogCXRlc3RfaW50ZXJydXB0cyh6cik7CiAJaWYgKCFwYXNzX3Rocm91Z2gpIHsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDIsIDAgfTsKKworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAl9CiAKIAl6ci0+em9yYW5fcHJvYyA9IE5VTEw7CkBAIC0xMTY0LDcgKzExMDUsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgem9yYW5fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCB6b3JhbiAqenIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gdG9fem9yYW4odjRsMl9kZXYpOwogCiAJaWYgKCF6ci0+aW5pdGlhbGl6ZWQpCiAJCWdvdG8gZXhpdF9mcmVlOwpAQCAtMTE5Nyw3ICsxMTM5LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoenItPnBjaV9kZXYpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYpOwogZXhpdF9mcmVlOgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ6ci0+djRsMl9kZXYpOwogCWtmcmVlKHpyKTsKIH0KIApAQCAtMTIxNSwxMCArMTE1Nyw4IEBACiAKIAltID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoKSAtIG5vIG1lbW9yeVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gbm8gbWVtb3J5XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIG07CiAJfQogCkBAIC0xMjU2LDYgKzExOTYsMTggQEAKIAlyZXR1cm4gbTsKIH0KIAorc3RhdGljIHZvaWQgem9yYW5fc3ViZGV2X25vdGlmeShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IHRvX3pvcmFuKHNkLT52NGwyX2Rldik7CisKKwkvKiBCdDgxOSBuZWVkcyB0byByZXNldCBpdHMgRklGTyBidWZmZXIgdXNpbmcgI0ZSU1QgcGluIGFuZAorCSAgIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LiAqLworCWlmIChjbWQgPT0gQlQ4MTlfRklGT19SRVNFVF9MT1cpCisJCUdQSU8oenIsIDcsIDApOworCWVsc2UgaWYgKGNtZCA9PSBCVDgxOV9GSUZPX1JFU0VUX0hJR0gpCisJCUdQSU8oenIsIDcsIDEpOworfQorCiAvKgogICogICBTY2FuIGZvciBhIEJ1eiBjYXJkIChhY3R1YWxseSBmb3IgdGhlIFBDSSBjb250cm9sbGVyIFpSMzYwNTcpLAogICogICByZXF1ZXN0IHRoZSBpcnEgYW5kIG1hcCB0aGUgaW8gbWVtb3J5CkBAIC0xMjY5LDM0ICsxMjIxLDMzIEBACiAJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXJfdmZlID0gTlVMTDsKIAlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl9jb2RlYyA9IE5VTEw7CiAJaW50IGNhcmRfbnVtOwotCWNoYXIgKmkyY19lbmNfbmFtZSwgKmkyY19kZWNfbmFtZSwgKmNvZGVjX25hbWUsICp2ZmVfbmFtZTsKKwljaGFyICpjb2RlY19uYW1lLCAqdmZlX25hbWU7CiAJdW5zaWduZWQgaW50IG5yOwogCiAKIAluciA9IHpvcmFuX251bSsrOwogCWlmIChuciA+PSBCVVpfTUFYKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGRyaXZlciBsaW1pdGVkIHRvICVkIGNhcmQocykgbWF4aW11bVxuIiwKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGRyaXZlciBsaW1pdGVkIHRvICVkIGNhcmQocykgbWF4aW11bVxuIiwKIAkJCVpPUkFOX05BTUUsIEJVWl9NQVgpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAl6ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3JhbiksIEdGUF9LRVJORUwpOwogCWlmICghenIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBremFsbG9jIGZhaWxlZFxuIiwKLQkJCVpPUkFOX05BTUUpOworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBremFsbG9jIGZhaWxlZFxuIiwKKwkJCVpPUkFOX05BTUUsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCXpyLT52NGwyX2Rldi5ub3RpZnkgPSB6b3Jhbl9zdWJkZXZfbm90aWZ5OworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmenItPnY0bDJfZGV2KSkKKwkJZ290byB6cl9mcmVlX21lbTsKIAl6ci0+cGNpX2RldiA9IHBkZXY7CiAJenItPmlkID0gbnI7CiAJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksICJNSlBFR1sldV0iLCB6ci0+aWQpOwogCXNwaW5fbG9ja19pbml0KCZ6ci0+c3BpbmxvY2spOwogCW11dGV4X2luaXQoJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCWdvdG8genJfZnJlZV9tZW07CisJCWdvdG8genJfdW5yZWc7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnpyLT5yZXZpc2lvbik7CiAKIAlkcHJpbnRrKDEsCkBAIC0xMzIzLDcgKzEyNzQsNyBAQAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXV0by1kZXRlY3QgWlIzNjA1NyBiYXNlZCBjYXJkc1xuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOworCQkJZ290byB6cl91bnJlZzsKIAkJfQogCiAJCWNhcmRfbnVtID0gZW50LT5kcml2ZXJfZGF0YTsKQEAgLTEzMzIsNyArMTI4Myw3IEBACiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6IFVua25vd24gY2FyZCwgdHJ5IHNwZWNpZnlpbmcgY2FyZD1YIG1vZHVsZSBwYXJhbWV0ZXJcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZ290byB6cl9mcmVlX21lbTsKKwkJCWdvdG8genJfdW5yZWc7CiAJCX0KIAkJZHByaW50aygzLAogCQkJS0VSTl9ERUJVRwpAQCAtMTM0NSw3ICsxMjk2LDcgQEAKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogVXNlciBzcGVjaWZpZWQgY2FyZCB0eXBlICVkIG91dCBvZiByYW5nZSAoMCAuLiAlZClcbiIsCiAJCQkJWlJfREVWTkFNRSh6ciksIGNhcmRfbnVtLCBOVU1fQ0FSRFMgLSAxKTsKLQkJCWdvdG8genJfZnJlZV9tZW07CisJCQlnb3RvIHpyX3VucmVnOwogCQl9CiAJfQogCkBAIC0xMzYwLDExICsxMzExLDkgQEAKIAogCXpyLT56cjM2MDU3X21lbSA9IHBjaV9pb3JlbWFwX2Jhcih6ci0+cGNpX2RldiwgMCk7CiAJaWYgKCF6ci0+enIzNjA1N19tZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogJXMoKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAorCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMoKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAogCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKLQkJZ290byB6cl9mcmVlX21lbTsKKwkJZ290byB6cl91bnJlZzsKIAl9CiAKIAlyZXN1bHQgPSByZXF1ZXN0X2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6b3Jhbl9pcnEsCkBAIC0xMzczLDE4ICsxMzIyLDE4IEBACiAJCWlmIChyZXN1bHQgPT0gLUVJTlZBTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBiYWQgaXJxIG51bWJlciBvciBoYW5kbGVyXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCX0gZWxzZSBpZiAocmVzdWx0ID09IC1FQlVTWSkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHpyLT5wY2lfZGV2LT5pcnEpOworCQkJCSIlczogJXMgLSBJUlEgJWQgYnVzeSwgY2hhbmdlIHlvdXIgUG5QIGNvbmZpZyBpbiBCSU9TXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgenItPnBjaV9kZXYtPmlycSk7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gY2FuJ3QgYXNzaWduIGlycSwgZXJyb3IgY29kZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVzdWx0KTsKKwkJCQkiJXM6ICVzIC0gY2FuJ3QgYXNzaWduIGlycSwgZXJyb3IgY29kZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHJlc3VsdCk7CiAJCX0KIAkJZ290byB6cl91bm1hcDsKIAl9CkBAIC0xMzk0LDkgKzEzNDMsNyBAQAogCQkJICAgICAmbGF0ZW5jeSk7CiAJbmVlZF9sYXRlbmN5ID0genItPnJldmlzaW9uID4gMSA/IDMyIDogNDg7CiAJaWYgKGxhdGVuY3kgIT0gbmVlZF9sYXRlbmN5KSB7Ci0JCWRwcmludGsoMiwKLQkJCUtFUk5fSU5GTwotCQkJIiVzOiBDaGFuZ2luZyBQQ0kgbGF0ZW5jeSBmcm9tICVkIHRvICVkXG4iLAorCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IENoYW5naW5nIFBDSSBsYXRlbmN5IGZyb20gJWQgdG8gJWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgbGF0ZW5jeSwgbmVlZF9sYXRlbmN5KTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHpyLT5wY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwKIAkJCQkgICAgICBuZWVkX2xhdGVuY3kpOwpAQCAtMTQwNyw1NCArMTM1NCwyMCBAQAogCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIGkyYyBidXMuLi5cbiIsCiAJCVpSX0RFVk5BTUUoenIpKTsKIAotCS8qIGkyYyBkZWNvZGVyICovCi0JaWYgKGRlY29kZXJbenItPmlkXSAhPSAtMSkgewotCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGRlY29kZXJbenItPmlkXSk7Ci0JCXpyLT5jYXJkLmkyY19kZWNvZGVyID0gZGVjb2Rlclt6ci0+aWRdOwotCX0gZWxzZSBpZiAoenItPmNhcmQuaTJjX2RlY29kZXIgIT0gMCkgewotCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLmkyY19kZWNvZGVyKTsKLQl9IGVsc2UgewotCQlpMmNfZGVjX25hbWUgPSBOVUxMOwotCX0KLQotCWlmIChpMmNfZGVjX25hbWUpIHsKLQkJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2RlY19uYW1lKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzOiAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaTJjX2RlY19uYW1lLCByZXN1bHQpOwotCQl9Ci0JfQotCi0JLyogaTJjIGVuY29kZXIgKi8KLQlpZiAoZW5jb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCWkyY19lbmNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZW5jb2Rlclt6ci0+aWRdKTsKLQkJenItPmNhcmQuaTJjX2VuY29kZXIgPSBlbmNvZGVyW3pyLT5pZF07Ci0JfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZW5jb2RlciAhPSAwKSB7Ci0JCWkyY19lbmNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2VuY29kZXIpOwotCX0gZWxzZSB7Ci0JCWkyY19lbmNfbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGkyY19lbmNfbmFtZSkgewotCQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZW5jX25hbWUpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZW5jX25hbWUsIHJlc3VsdCk7Ci0JCX0KLQl9Ci0KIAlpZiAoem9yYW5fcmVnaXN0ZXJfaTJjKHpyKSA8IDApIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBpbml0aWFsaXplIGkyYyBidXNcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIGNhbid0IGluaXRpYWxpemUgaTJjIGJ1c1xuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCWdvdG8genJfZnJlZV9pcnE7CiAJfQogCisJenItPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmenItPmkyY19hZGFwdGVyLAorCQl6ci0+Y2FyZC5tb2RfZGVjb2RlciwgenItPmNhcmQuaTJjX2RlY29kZXIsIHpyLT5jYXJkLmFkZHJzX2RlY29kZXIpOworCisJaWYgKHpyLT5jYXJkLm1vZF9lbmNvZGVyKQorCQl6ci0+ZW5jb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+aTJjX2FkYXB0ZXIsCisJCQl6ci0+Y2FyZC5tb2RfZW5jb2RlciwgenItPmNhcmQuaTJjX2VuY29kZXIsCisJCQl6ci0+Y2FyZC5hZGRyc19lbmNvZGVyKTsKKwogCWRwcmludGsoMiwKIAkJS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIHZpZGVvY29kZWMgYnVzLi4uXG4iLAogCQlaUl9ERVZOQU1FKHpyKSk7CkBAIC0xNDk1LDE3ICsxNDA4LDEzIEBACiAJCQlnb3RvIHpyX3VucmVnX2kyYzsKIAkJenItPmNvZGVjID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX2NvZGVjKTsKIAkJaWYgKCF6ci0+Y29kZWMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBjb2RlYyBmb3VuZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBjb2RlYyBmb3VuZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9mcmVlX2NvZGVjOwogCQl9CiAJCWlmICh6ci0+Y29kZWMtPnR5cGUgIT0genItPmNhcmQudmlkZW9fY29kZWMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSB3cm9uZyBjb2RlY1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSB3cm9uZyBjb2RlY1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9kZXRhY2hfY29kZWM7CiAJCX0KIAl9CkBAIC0xNTE1LDE3ICsxNDI0LDEzIEBACiAJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKIAkJenItPnZmZSA9IHZpZGVvY29kZWNfYXR0YWNoKG1hc3Rlcl92ZmUpOwogCQlpZiAoIXpyLT52ZmUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBWRkUgZm91bmRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gbm8gVkZFIGZvdW5kXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2ZyZWVfdmZlOwogCQl9CiAJCWlmICh6ci0+dmZlLT50eXBlICE9IHpyLT5jYXJkLnZpZGVvX3ZmZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSA9IHdyb25nIFZGRVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgPSB3cm9uZyBWRkVcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWdvdG8genJfZGV0YWNoX3ZmZTsKIAkJfQogCX0KQEAgLTE1MzMsOCArMTQzOCw3IEBACiAJLyogdGFrZSBjYXJlIG9mIE5hdG9tYSBjaGlwc2V0IGFuZCBhIHJldmlzaW9uIDEgenIzNjA1NyAqLwogCWlmICgocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9OQVRPTUEpICYmIHpyLT5yZXZpc2lvbiA8PSAxKSB7CiAJCXpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgPSAxOwotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KKwkJZHByaW50aygxLCBLRVJOX0lORk8KIAkJCSIlczogWlIzNjA1Ny9OYXRvbWEgYnVnLCBtYXguIGJ1ZmZlciBzaXplIGlzIDEyOEtcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSk7CiAJfQpAQCAtMTU0NCw4ICsxNDQ4LDYgQEAKIAogCXpvcmFuX3Byb2NfaW5pdCh6cik7CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgenIpOwotCiAJcmV0dXJuIDA7CiAKIHpyX2RldGFjaF92ZmU6CkBAIC0xNTYzLDYgKzE0NjUsOCBAQAogCWZyZWVfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpyKTsKIHpyX3VubWFwOgogCWlvdW5tYXAoenItPnpyMzYwNTdfbWVtKTsKK3pyX3VucmVnOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpyLT52NGwyX2Rldik7CiB6cl9mcmVlX21lbToKIAlrZnJlZSh6cik7CiAKQEAgLTE2MTMsOSArMTUxNyw2IEBACiAJCQlaT1JBTl9OQU1FLCB2aWRtZW0pOwogCX0KIAotCS8qIHJhbmRvbSBub25zZW5zZSAqLwotCWRwcmludGsoNiwgS0VSTl9ERUJVRyAiSm90dGkgaXMgZWVuIGhlbGQhXG4iKTsKLQogCS8qIHNvbWUgbWFpbmJvYXJkcyBtaWdodCBub3QgZG8gUENJLVBDSSBkYXRhIHRyYW5zZmVyIHdlbGwgKi8KIAlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTHxQQ0lQQ0lfQUxJTUFHSUspKSB7CiAJCWRwcmludGsoMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKaW5kZXggNDUwN2JkYy4uNDkzNmZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKQEAgLTQ0LDcgKzQ0LDggQEAKIGV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvcmFuX3RlbXBsYXRlOwogCiBleHRlcm4gaW50IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyhzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJCSAgICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncyk7CisJCQkJICAgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzLAorCQkJCSAgICBpbnQgdHJ5KTsKIGV4dGVybiB2b2lkIHpvcmFuX29wZW5faW5pdF9wYXJhbXMoc3RydWN0IHpvcmFuICp6cik7CiBleHRlcm4gdm9pZCB6b3Jhbl92ZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCmluZGV4IDVkOTQ4ZmYuLmUwMjIzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwpAQCAtMzYsMTMgKzM2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIApAQCAtMzEyLDkgKzMxMSw5IEBACiAJY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CiAJY2FzZSBCVVpfTU9ERV9JRExFOgogCWRlZmF1bHQ6Ci0JCWlmICh6ci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MgfHwKKwkJaWYgKCh6ci0+bm9ybSAmIFY0TDJfU1REX05UU0MpIHx8CiAJCSAgICAoenItPmNhcmQudHlwZSA9PSBMTUwzM1IxMCAmJgotCQkgICAgIHpyLT5ub3JtID09IFZJREVPX01PREVfUEFMKSkKKwkJICAgICAoenItPm5vcm0gJiBWNEwyX1NURF9QQUwpKSkKIAkJCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CiAJCWVsc2UKIAkJCWJ0b3IoWlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOwpAQCAtMzU1LDE0ICszNTQsNiBAQAogCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogc2V0X3ZmZSgpIC0gd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsCiAJCVpSX0RFVk5BTUUoenIpLCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0KTsKIAotCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX1BBTCAmJgotCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKLQkgICAgenItPm5vcm0gIT0gVklERU9fTU9ERV9TRUNBTSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHNldF92ZmUoKSAtIG5vcm0gPSAlZCBub3QgdmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgenItPm5vcm0pOwotCQlyZXR1cm47Ci0JfQogCWlmICh2aWRlb193aWR0aCA8IEJVWl9NSU5fV0lEVEggfHwKIAkgICAgdmlkZW9faGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwKIAkgICAgdmlkZW9fd2lkdGggPiBXYSB8fCB2aWRlb19oZWlnaHQgPiBIYSkgewpAQCAtNDI2LDcgKzQxNyw3IEBACiAJICogd2UgZ2V0IHRoZSBjb3JyZWN0IGNvbG9ycyB3aGVuIHVuY29tcHJlc3NpbmcgdG8gdGhlIHNjcmVlbiAgKi8KIAkvL3JlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbDsgLyoqLwogCS8qIFJKOiBEb24ndCBrbm93IGlmIHRoYXQgaXMgbmVlZGVkIGZvciBOVFNDIGFsc28gKi8KLQlpZiAoenItPm5vcm0gIT0gVklERU9fTU9ERV9OVFNDKQorCWlmICghKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykpCiAJCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfRXh0Rmw7CS8vIE5FRURFRCEhISEhISEgV29sZmdhbmcKIAlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX1RvcEZpZWxkOwogCWlmIChIb3JEY20gPj0gNDgpIHsKQEAgLTQ5NywxMSArNDg4LDExIEBACiAJCSAqIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgaW50ZXJuYWwgZHJpdmVyIGNoZWNraW5nIG9ubHkhICovCiAKIAkJLyogdmlkZW8gZGlzcGxheSB0b3AgYW5kIGJvdHRvbSByZWdpc3RlcnMgKi8KLQkJcmVnID0gKGxvbmcpIHpyLT5idWZmZXIuYmFzZSArCisJCXJlZyA9IChsb25nKSB6ci0+dmJ1Zl9iYXNlICsKIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnggKgogCQkgICAgKCh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KSArCiAJCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy55ICoKLQkJICAgIHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkgICAgenItPnZidWZfYnl0ZXNwZXJsaW5lOwogCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKIAkJaWYgKHJlZyAmIDMpCiAJCQlkcHJpbnRrKDEsCkBAIC01MDksMTUgKzUwMCwxNSBAQAogCQkJCSIlczogenIzNjA1N19vdmVybGF5KCkgLSB2aWRlb19hZGRyZXNzIG5vdCBhbGlnbmVkXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKTsKIAkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCXJlZyArPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKKwkJCXJlZyArPSB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CiAJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOwogCiAJCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLwotCQlyZWcgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSAtCisJCXJlZyA9IHpyLT52YnVmX2J5dGVzcGVybGluZSAtCiAJCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqCiAJCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpOwogCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkJcmVnICs9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKIAkJaWYgKHJlZyAmIDMpCiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKQEAgLTU0NCwxMiArNTM1LDggQEAKICAqICBhbmQgdGhlIG1heGltdW0gd2luZG93IHNpemUgaXMgQlVaX01BWF9XSURUSCAqIEJVWl9NQVhfSEVJR0hUIHBpeGVscy4KICAqLwogCi12b2lkCi13cml0ZV9vdmVybGF5X21hc2sgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCQkgICAgc3RydWN0IHZpZGVvX2NsaXAgKnZwLAotCQkgICAgaW50ICAgICAgICAgICAgICAgIGNvdW50KQordm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IHpvcmFuX2ZoICpmaCwgc3RydWN0IHY0bDJfY2xpcCAqdnAsIGludCBjb3VudCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbWFza19saW5lX3NpemUgPSAoQlVaX01BWF9XSURUSCArIDMxKSAvIDMyOwogCXUzMiAqbWFzazsKQEAgLTU2MywxMCArNTUwLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogCQkvKiBwaWNrIHVwIGxvY2FsIGNvcHkgb2YgY2xpcCAqLwotCQl4ID0gdnBbaV0ueDsKLQkJeSA9IHZwW2ldLnk7Ci0JCXdpZHRoID0gdnBbaV0ud2lkdGg7Ci0JCWhlaWdodCA9IHZwW2ldLmhlaWdodDsKKwkJeCA9IHZwW2ldLmMubGVmdDsKKwkJeSA9IHZwW2ldLmMudG9wOworCQl3aWR0aCA9IHZwW2ldLmMud2lkdGg7CisJCWhlaWdodCA9IHZwW2ldLmMuaGVpZ2h0OwogCiAJCS8qIHRyaW0gY2xpcHMgdGhhdCBleHRlbmQgYmV5b25kIHRoZSB3aW5kb3cgKi8KIAkJaWYgKHggPCAwKSB7CkBAIC05ODEsMTEgKzk2OCwxMCBAQAogenIzNjA1N19lbmFibGVfanBnIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgKnpyLAogCQkgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlICBtb2RlKQogewotCXN0YXRpYyBpbnQgemVybzsKLQlzdGF0aWMgaW50IG9uZSA9IDE7CiAJc3RydWN0IHZmZV9zZXR0aW5ncyBjYXA7CiAJaW50IGZpZWxkX3NpemUgPQogCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCXpyLT5jb2RlY19tb2RlID0gbW9kZTsKIApAQCAtMTAwNyw4ICs5OTMsOSBAQAogCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gaW5wdXQuCiAJCSAqLwogCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAwKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwkJcm91dGUuaW5wdXQgPSAwOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CkBAIC0xMDU0LDkgKzEwNDEsMTAgQEAKIAkJLyogSW4gbW90aW9uIGRlY29tcHJlc3Npb24gbW9kZSwgdGhlIGRlY29kZXIgb3V0cHV0IG11c3QgYmUgZGlzYWJsZWQsIGFuZAogCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gb3V0cHV0LgogCQkgKi8KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDApOwogCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAxKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJm9uZSk7CisJCXJvdXRlLmlucHV0ID0gMTsKKwkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJCS8qIFRha2UgdGhlIEpQRUcgY29kZWMgYW5kIHRoZSBWRkUgb3V0IG9mIHNsZWVwICovCiAJCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOwpAQCAtMTEwMCw4ICsxMDg4LDkgQEAKIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7CiAJCXpyMzYwNTdfYWRqdXN0X3ZmZSh6ciwgbW9kZSk7CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwkJcm91dGUuaW5wdXQgPSAwOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBlbmFibGVfanBnKElETEUpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAJCWJyZWFrOwpAQCAtMTEzMiw3ICsxMTIxLDcgQEAKIAkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKIAkJCQlicmVhazsKIAkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5qcGcuZnJhZ190YWJfYnVzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGZpbGwgMiBzdGF0X2NvbSBlbnRyaWVzICovCiAJCQlpID0gKCh6ci0+anBnX2RtYV9oZWFkIC0KQEAgLTExNDAsOSArMTEyOSw5IEBACiAJCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCiAJCQkJYnJlYWs7CiAJCQl6ci0+c3RhdF9jb21baV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uanBnLmZyYWdfdGFiX2J1cyk7CiAJCQl6ci0+c3RhdF9jb21baSArIDFdID0KLQkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmpwZy5mcmFnX3RhYl9idXMpOwogCQl9CiAJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RNQTsKIAkJenItPmpwZ19kbWFfaGVhZCsrOwpAQCAtMTE2Miw3ICsxMTUxLDcgQEAKIAl1MzIgc3RhdF9jb207CiAJdW5zaWduZWQgaW50IHNlcTsKIAl1bnNpZ25lZCBpbnQgZGlmOwotCXN0cnVjdCB6b3Jhbl9qcGdfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHpvcmFuX2J1ZmZlciAqYnVmZmVyOwogCWludCBmcmFtZTsKIAogCS8qIEluIG1vdGlvbiBkZWNvbXByZXNzIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyLApAQCAtMTIwOCwyMiArMTE5Nyw1MiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgem9yYW5fcmVzdGFydChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLworCWludCBzdGF0dXMgPSAwLCBtb2RlOworCisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CisJCW1vZGUgPSBDT0RFQ19ET19DT01QUkVTU0lPTjsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwkJbW9kZSA9IENPREVDX0RPX0VYUEFOU0lPTjsKKwl9CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJICAgICEoc3RhdHVzICYgVjRMMl9JTl9TVF9OT19TSUdOQUwpKSB7CisJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLworCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKKwkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIG1vZGUpOworCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKKwkJanBlZ19zdGFydCh6cik7CisKKwkJaWYgKHpyLT5udW1fZXJyb3JzIDw9IDgpCisJCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IFJlc3RhcnRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCisJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCXpyLT5KUEVHX2Vycm9yID0gMjsKKwkJLyoqKioqKioqKiogRW5kIFJFU1RBUlQgY29kZSAqKioqKioqKioqKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBlcnJvcl9oYW5kbGVyIChzdHJ1Y3Qgem9yYW4gKnpyLAogCSAgICAgICB1MzIgICAgICAgICAgIGFzdGF0LAogCSAgICAgICB1MzIgICAgICAgICAgIHN0YXQpCiB7CisJaW50IGksIGo7CisKIAkvKiBUaGlzIGlzIEpQRUcgZXJyb3IgaGFuZGxpbmcgcGFydCAqLwotCWlmICgoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSAmJgotCSAgICAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpKSB7Ci0JCS8vZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IEludGVybmFsIGVycm9yOiBlcnJvciBoYW5kbGluZyByZXF1ZXN0IGluIG1vZGUgJWRcbiIsIFpSX0RFVk5BTUUoenIpLCB6ci0+Y29kZWNfbW9kZSk7CisJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgorCSAgICB6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgewogCQlyZXR1cm47CiAJfQogCiAJaWYgKChzdGF0ICYgMSkgPT0gMCAmJgogCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgJiYKLQkgICAgenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfcXVlX3RhaWwgPj0KLQkgICAgIHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgeworCSAgICB6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19xdWVfdGFpbCA+PSB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKIAkJLyogTm8gZnJlZSBidWZmZXJzLi4uICovCiAJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwogCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKQEAgLTEyMzIsMTQyICsxMjUxLDk1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoenItPkpQRUdfZXJyb3IgIT0gMSkgewotCQkvKgotCQkgKiBGaXJzdCBlbnRyeTogZXJyb3IganVzdCBoYXBwZW5lZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbgotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JCSAqCi0JCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKLQkJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCi0JCSAqIHJlc3RhcnRpbmcgaXQgdG8gYXZvaWQgZnVydGhlciBwcm9ibGVtcwotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJICoKLQkJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKLQkJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCi0JCSAqLwotCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKLQkJdWRlbGF5KDEpOwotCQlzdGF0ID0gc3RhdCB8IChwb3N0X29mZmljZV9yZWFkKHpyLCA3LCAwKSAmIDMpIDw8IDg7Ci0JCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOwotCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKLQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCQl6ci0+SlBFR19lcnJvciA9IDE7Ci0JCXpyLT5udW1fZXJyb3JzKys7Ci0KLQkJLyogUmVwb3J0IGVycm9yICovCi0JCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7Ci0JCQlsb25nIGZyYW1lOwotCQkJZnJhbWUgPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LCB6ci0+bGFzdF9pc3IsCi0JCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKLQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAotCQkJICAgICAgIHpyLT5qcGdfc2VxX251bSwgZnJhbWUpOwotCQkJcHJpbnRrKCJzdGF0X2NvbSBmcmFtZXM6Iik7Ci0JCQl7Ci0JCQkJaW50IGksIGo7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQlmb3IgKGkgPSAwOwotCQkJCQkgICAgIGkgPCB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7Ci0JCQkJCSAgICAgaSsrKSB7Ci0JCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PQotCQkJCQkJICAgIHpyLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgZnJhZ190YWJfYnVzKSB7Ci0JCQkJCQkJcHJpbnRrKCIlIGQtPiVkIiwKLQkJCQkJCQkgICAgICAgaiwgaSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfQotCQl9Ci0JCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLwotCQl7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KLQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJZWxzZQotCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgewotCQkJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCi0JCQkJenItPnN0YXRfY29tW2ldIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQotCQkJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCS8qIFJlZmlsbCAqLwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmCi0JCQkJCSAgICBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCQllbHNlCi0JCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7Ci0JCQl9Ci0JCQlpZiAoaSkgewotCQkJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KLQkJCQlpbnQgajsKLQkJCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07Ci0KLQkJCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKLQkJCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbwotCQkJCSAqIG5vIGVuZGlhbiBjb252ZXJzaW9ucyBoZXJlCi0JCQkJICovCi0JCQkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sCi0JCQkJICAgICAgIHNpemVvZihidXNfYWRkcikpOwotCQkJCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKLQkJCQkJenItPnN0YXRfY29tW2pdID0KLQkJCQkJICAgIGJ1c19hZGRyWyhpICsgaikgJgotCQkJCQkJICAgICBCVVpfTUFTS19TVEFUX0NPTV07Ci0KLQkJCQl9Ci0JCQkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKLQkJCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCX0KLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCi0JCQkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCi0JCX0KKwlpZiAoenItPkpQRUdfZXJyb3IgPT0gMSkgeworCQl6b3Jhbl9yZXN0YXJ0KHpyKTsKKwkJcmV0dXJuOwogCX0KIAotCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLwotCWRvIHsKLQkJaW50IHN0YXR1cywgbW9kZTsKKwkvKgorCSAqIEZpcnN0IGVudHJ5OiBlcnJvciBqdXN0IGhhcHBlbmVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uCisJICoKKwkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CisJICoKKwkgKiBQb3NzaWJsZSBnbGl0Y2ggaW4gVFYgc2lnbmFsLiBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkCisJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCisJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCisJICoKKwkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKKwkgKgorCSAqIEJhZCBKUEVHIGZyYW1lOiB3ZSBoYXZlIHRvIG1hcmsgaXQgYXMgcHJvY2Vzc2VkIChjb2RlYyBjcmFzaGVkCisJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCisJICovCisJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CisJdWRlbGF5KDEpOworCXN0YXQgPSBzdGF0IHwgKHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDcsIDApICYgMykgPDwgODsKKwlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKKwlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKKwlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKKwlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKKwl6ci0+SlBFR19lcnJvciA9IDE7CisJenItPm51bV9lcnJvcnMrKzsKIAotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCQltb2RlID0gQ09ERUNfRE9fQ09NUFJFU1NJT047Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAwOwotCQkJbW9kZSA9IENPREVDX0RPX0VYUEFOU0lPTjsKKwkvKiBSZXBvcnQgZXJyb3IgKi8KKwlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYgenItPm51bV9lcnJvcnMgPD0gOCkgeworCQlsb25nIGZyYW1lOworCisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAorCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsIHpyLT5sYXN0X2lzciwKKwkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsIHpyLT5qcGdfZG1hX3RhaWwsCisJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAorCQkgICAgICAgenItPmpwZ19zZXFfbnVtLCBmcmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gInN0YXRfY29tIGZyYW1lczoiKTsKKwkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtqXSkgPT0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJfYnVzKQorCQkJCQlwcmludGsoS0VSTl9DT05UICIlIGQtPiVkIiwgaiwgaSk7CisJCQl9CiAJCX0KLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKLQkJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLwotCQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7Ci0JCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKLQkJCWpwZWdfc3RhcnQoenIpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCX0KKwkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFuZCByb3RhdGUgY29udGVudHMgKi8KKwlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJZWxzZQorCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgeworCQkvKiBNaW1pYyB6cjM2MDY3IG9wZXJhdGlvbiAqLworCQl6ci0+c3RhdF9jb21baV0gfD0gY3B1X3RvX2xlMzIoMSk7CisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQorCQkJenItPnN0YXRfY29tW2kgKyAxXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJLyogUmVmaWxsICovCisJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOworCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOworCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLworCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOworCQllbHNlCisJCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCX0KKwlpZiAoaSkgeworCQkvKiBSb3RhdGUgc3RhdF9jb21tIGVudHJpZXMgdG8gbWFrZSBjdXJyZW50IGVudHJ5IGZpcnN0ICovCisJCWludCBqOworCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07CiAKLQkJCWlmICh6ci0+bnVtX2Vycm9ycyA8PSA4KQotCQkJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogUmVzdGFydFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKKwkJICogaXMgYWxyZWFkeSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgc28KKwkJICogbm8gZW5kaWFuIGNvbnZlcnNpb25zIGhlcmUKKwkJICovCisJCW1lbWNweShidXNfYWRkciwgenItPnN0YXRfY29tLCBzaXplb2YoYnVzX2FkZHIpKTsKIAotCQkJenItPkpQRUdfbWlzc2VkID0gMDsKLQkJCXpyLT5KUEVHX2Vycm9yID0gMjsKLQkJCS8qKioqKioqKioqIEVuZCBSRVNUQVJUIGNvZGUgKioqKioqKioqKiovCi0JCX0KLQl9IHdoaWxlICgwKTsKKwkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykKKwkJCXpyLT5zdGF0X2NvbVtqXSA9IGJ1c19hZGRyWyhpICsgaikgJiBCVVpfTUFTS19TVEFUX0NPTV07CisKKwkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKKwkJenItPmpwZ19lcnJfc2hpZnQgJj0gQlVaX01BU0tfU1RBVF9DT007CisJfQorCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCisJCXpyLT5qcGdfZXJyX3NlcSA9IHpyLT5qcGdfc2VxX251bTsJLyogKyAxOyAqLworCXpvcmFuX3Jlc3RhcnQoenIpOwogfQogCiBpcnFyZXR1cm5fdApAQCAtMTQyNSwxMCArMTM5Nyw4IEBACiAJCQkgKiBXZSBzaW1wbHkgaWdub3JlIHRoZW0gKi8KIAogCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQogCQkJCS8qIEEgbG90IG1vcmUgY2hlY2tzIHNob3VsZCBiZSBoZXJlIC4uLiAqLwotCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKKwkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJiBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKIAkJCQkJZHByaW50aygxLAogCQkJCQkJS0VSTl9XQVJOSU5HCiAJCQkJCQkiJXM6IEJ1eklSUSB3aXRoIFNuYXBTaG90IG9mZiA/Pz9cbiIsCkBAIC0xNDM2LDEwICsxNDA2LDcgQEAKIAogCQkJCWlmICh6ci0+djRsX2dyYWJfZnJhbWUgIT0gTk9fR1JBQl9BQ1RJVkUpIHsKIAkJCQkJLyogVGhlcmUgaXMgYSBncmFiIG9uIGEgZnJhbWUgZ29pbmcgb24sIGNoZWNrIGlmIGl0IGhhcyBmaW5pc2hlZCAqLwotCi0JCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiKSA9PQotCQkJCQkgICAgMCkgeworCQkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJiBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWIpID09IDApIHsKIAkJCQkJCS8qIGl0IGlzIGZpbmlzaGVkLCBub3RpZnkgdGhlIHVzZXIgKi8KIAogCQkJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RPTkU7CkBAIC0xNDU3LDkgKzE0MjQsNyBAQAogCiAJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSA9PSBOT19HUkFCX0FDVElWRSAmJgogCQkJCSAgICB6ci0+djRsX3BlbmRfdGFpbCAhPSB6ci0+djRsX3BlbmRfaGVhZCkgewotCi0JCQkJCWludCBmcmFtZSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfdGFpbCAmCi0JCQkJCQkJIFY0TF9NQVNLX0ZSQU1FXTsKKwkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYgVjRMX01BU0tfRlJBTUVdOwogCQkJCQl1MzIgcmVnOwogCiAJCQkJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IGZyYW1lOwpAQCAtMTQ2OCwyNyArMTQzMywxNyBAQAogCiAJCQkJCS8qIEJ1ZmZlciBhZGRyZXNzICovCiAKLQkJCQkJcmVnID0KLQkJCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLgotCQkJCQkgICAgZmJ1ZmZlcl9idXM7CisJCQkJCXJlZyA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnY0bC5mYnVmZmVyX2J1czsKIAkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7Ci0JCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQkJCQlyZWcgKz0KLQkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgotCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKKwkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJCQkJcmVnICs9IHpyLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwogCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WREJSKTsKIAogCQkJCQkvKiB2aWRlbyBzdHJpZGUsIHN0YXR1cywgYW5kIGZyYW1lIGdyYWIgcmVnaXN0ZXIgKi8KIAkJCQkJcmVnID0gMDsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOwotCQkJCQlyZWcgPQotCQkJCQkgICAgKHJlZyA8PAotCQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX0Rpc3BTdHJpZGUpOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0genItPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CisJCQkJCXJlZyA9IChyZWcgPDwgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CiAJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9WaWRPdmY7CiAJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdDsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYjsKQEAgLTE1MDYsNzcgKzE0NjEsNjYgQEAKICNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpCiAJCWlmIChhc3RhdCAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgewogCQkJenItPmludHJfY291bnRlcl9Db2RSZXBJUlErKzsKLQkJCUlERUJVRyhwcmludGsKLQkJCSAgICAgICAoS0VSTl9ERUJVRyAiJXM6IFpSMzYwNTdfSVNSX0NvZFJlcElSUVxuIiwKKwkJCUlERUJVRyhwcmludGsoS0VSTl9ERUJVRyAiJXM6IFpSMzYwNTdfSVNSX0NvZFJlcElSUVxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSkpOwogCQkJYnRhbmQoflpSMzYwNTdfSUNSX0NvZFJlcElSUSwgWlIzNjA1N19JQ1IpOwogCQl9CiAjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSAqLwogCiAjaWYgKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkKLQkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgeworCQlpZiAoKGFzdGF0ICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgJiYKKwkJICAgICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAorCQkgICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykpIHsKKwkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7CisJCQkJY2hhciBzY1tdID0gIjAwMDAiOworCQkJCWNoYXIgc3ZbNV07CisJCQkJaW50IGk7CiAKLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAotCQkJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJgotCQkJCSAgICAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiwKLQkJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgICBmaWVsZF9wZXJfYnVmZiwKLQkJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7Ci0JCQkJCXsKLQkJCQkJCWNoYXIgc2NbXSA9ICIwMDAwIjsKLQkJCQkJCWNoYXIgc3ZbNV07Ci0JCQkJCQlpbnQgaTsKLQkJCQkJCXN0cmNweShzdiwgc2MpOwotCQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pICYgMSkKLQkJCQkJCQkJc3ZbaV0gPSAnMSc7Ci0JCQkJCQl9Ci0JCQkJCQlzdls0XSA9IDA7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCi0JCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN2LAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCi0JCQkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCS8vIEdldCBzdGF0aXN0aWNzCi0JCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0KLQkJCQkJCSAgICB6ci0+SlBFR19taXNzZWQ7Ci0JCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPAotCQkJCQkgICAgenItPkpQRUdfbWluX21pc3NlZCkKLQkJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQl9CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiJXM6IGZpcnN0IGZyYW1lIHJlYWR5OiBzdGF0ZT0weCUwOHggb2RkX2V2ZW49JWQgZmllbGRfcGVyX2J1ZmY9JWQgZGVsYXk9JWRcbiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAorCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuLAorCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmLAorCQkJCSAgICAgICB6ci0+SlBFR19taXNzZWQpOwogCi0JCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAyICYmIHpyLT5mcmFtZV9udW0gPCA2KSB7Ci0JCQkJCWludCBpOwotCQkJCQlwcmludGsoIiVzOiBzZXE9JWxkIHN0YXRfY29tOiIsCi0JCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgenItPmpwZ19zZXFfbnVtKTsKLQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJCQkJcHJpbnRrKCIgJTA4eCIsCi0JCQkJCQkgICAgICAgbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSk7Ci0JCQkJCX0KLQkJCQkJcHJpbnRrKCJcbiIpOworCQkJCXN0cmNweShzdiwgc2MpOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkgJiAxKQorCQkJCQkJc3ZbaV0gPSAnMSc7CiAJCQkJfQotCQkJCXpyLT5mcmFtZV9udW0rKzsKLQkJCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJCXpyLT5KUEVHX2Vycm9yID0gMDsKLQkJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKLQkJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7Ci0JCQl9IC8qZWxzZSB7Ci0JCQkgICAgICBkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogSlBFRyBpbnRlcnJ1cHQgd2hpbGUgbm90IGluIG1vdGlvbiAoZGUpY29tcHJlc3MgbW9kZSFcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCX0qLworCQkJCXN2WzRdID0gMDsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlczogc3RhdF9jb209JXMgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkXG4iLAorCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3YsCisJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCisJCQkJICAgICAgIHpyLT5qcGdfZG1hX3RhaWwsCisJCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsCisJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgc3RhdGlzdGljcyAqLworCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPiB6ci0+SlBFR19tYXhfbWlzc2VkKQorCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0genItPkpQRUdfbWlzc2VkOworCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPCB6ci0+SlBFR19taW5fbWlzc2VkKQorCQkJCQl6ci0+SlBFR19taW5fbWlzc2VkID0genItPkpQRUdfbWlzc2VkOworCQkJfQorCisJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKKwkJCQlpbnQgaTsKKworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXE9JWxkIHN0YXRfY29tOiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwOHgiLAorCQkJCQkgICAgICAgbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSk7CisJCQkJfQorCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQl9CisJCQl6ci0+ZnJhbWVfbnVtKys7CisJCQl6ci0+SlBFR19taXNzZWQgPSAwOworCQkJenItPkpQRUdfZXJyb3IgPSAwOworCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKIAkJfQogI2VuZGlmCQkJCS8qIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpICovCiAKQEAgLTE1ODUsOCArMTUyOSw3IEBACiAJCSAgICB6ci0+SlBFR19taXNzZWQgPiAyNSB8fAogCQkgICAgenItPkpQRUdfZXJyb3IgPT0gMQl8fAogCQkgICAgKCh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgJiYKLQkJICAgICAoenItPmZyYW1lX251bSAmICh6ci0+SlBFR19taXNzZWQgPgotCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmKSkpKSB7CisJCSAgICAgKHpyLT5mcmFtZV9udW0gJiAoenItPkpQRUdfbWlzc2VkID4genItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZikpKSkgewogCQkJZXJyb3JfaGFuZGxlcih6ciwgYXN0YXQsIHN0YXQpOwogCQl9CiAKQEAgLTE2MjgsNyArMTU3MSw3IEBACiB2b2lkCiB6b3Jhbl9pbml0X2hhcmR3YXJlIChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWludCBqLCB6ZXJvID0gMDsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKIAkvKiBFbmFibGUgYnVzLW1hc3RlcmluZyAqLwogCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAxKTsKQEAgLTE2MzgsMTUgKzE1ODEsMTYgQEAKIAkJenItPmNhcmQuaW5pdCh6cik7CiAJfQogCi0JaiA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOworCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaik7CisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBpbml0LCAwKTsKKwlkZWNvZGVyX2NhbGwoenIsIHR1bmVyLCBzX3N0ZCwgenItPm5vcm0pOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCWVuY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwllbmNvZGVyX2NhbGwoenIsIGNvcmUsIGluaXQsIDApOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RkX291dHB1dCwgenItPm5vcm0pOworCXJvdXRlLmlucHV0ID0gMDsKKwllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiB0b2dnbGUgSlBFRyBjb2RlYyBzbGVlcCB0byBzeW5jIFBMTCAqLwogCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwpAQCAtMTcwNiw0MiArMTY1MCwzIEBACiAJCXJlZyB8PSBaUjM2MDU3X1ZEQ1JfVHJpdG9uOwogCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQ1IpOwogfQotCi0vKgotICogSW50ZXJmYWNlIHRvIGRlY29kZXIgYW5kIGVuY29kZXIgY2hpcHMgdXNpbmcgaTJjIGJ1cwotICovCi0KLWludAotZGVjb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgaW50ICAgICAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgKmRhdGEpCi17Ci0JaWYgKHpyLT5kZWNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHpyLT5jYXJkLnR5cGUgPT0gTE1MMzMgJiYKLQkgICAgKGNtZCA9PSBERUNPREVSX1NFVF9OT1JNIHx8IGNtZCA9PSBERUNPREVSX1NFVF9JTlBVVCkpIHsKLQkJaW50IHJlczsKLQotCQkvLyBCdDgxOSBuZWVkcyB0byByZXNldCBpdHMgRklGTyBidWZmZXIgdXNpbmcgI0ZSU1QgcGluIGFuZAotCQkvLyBMTUwzMyBjYXJkIHVzZXMgR1BJTyg3KSBmb3IgdGhhdC4KLQkJR1BJTyh6ciwgNywgMCk7Ci0JCXJlcyA9IHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwgZGF0YSk7Ci0JCS8vIFB1bGwgI0ZSU1QgaGlnaC4KLQkJR1BJTyh6ciwgNywgMSk7Ci0JCXJldHVybiByZXM7Ci0JfSBlbHNlCi0JCXJldHVybiB6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5kZWNvZGVyLCBjbWQsCi0JCQkJCQkgICAgZGF0YSk7Ci19Ci0KLWludAotZW5jb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgaW50ICAgICAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgKmRhdGEpCi17Ci0JaWYgKHpyLT5lbmNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiB6ci0+ZW5jb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5lbmNvZGVyLCBjbWQsIGRhdGEpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKaW5kZXggNzRjNmM4ZS4uMDdmMmMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oCkBAIC01NCw4ICs1NCw4IEBACiAvKiB6cjM2MHg3IGFjY2VzcyB0byByYXcgY2FwdHVyZSAqLwogZXh0ZXJuIHZvaWQgenIzNjA1N19vdmVybGF5KHN0cnVjdCB6b3JhbiAqenIsCiAJCQkgICAgaW50IG9uKTsKLWV4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCitleHRlcm4gdm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IHpvcmFuX2ZoICpmaCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jbGlwICp2cCwKIAkJCSAgICAgICBpbnQgY291bnQpOwogZXh0ZXJuIHZvaWQgenIzNjA1N19zZXRfbWVtZ3JhYihzdHJ1Y3Qgem9yYW4gKnpyLAogCQkJCWludCBtb2RlKTsKQEAgLTg3LDExICs4Nyw5IEBACiBleHRlcm4gaW50IHBhc3NfdGhyb3VnaDsKIAogLyogaTJjICovCi1leHRlcm4gaW50IGRlY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBlbmNvZGVyX2NvbW1hbmQoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgIGludCBjbWQsCi0JCQkgICB2b2lkICpkYXRhKTsKKyNkZWZpbmUgZGVjb2Rlcl9jYWxsKHpyLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbCh6ci0+ZGVjb2RlciwgbywgZiwgIyNhcmdzKQorI2RlZmluZSBlbmNvZGVyX2NhbGwoenIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHpyLT5lbmNvZGVyLCBvLCBmLCAjI2FyZ3MpCiAKICNlbmRpZgkJCQkvKiBfX1pPUkFOX0RFVklDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDEyMGVmMjMuLmYxNmU1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtNTgsMTYgKzU4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jZGVmaW5lICAgICBNQVBfTlIoeCkgICAgICAgdmlydF90b19wYWdlKHgpCi0jZGVmaW5lICAgICBaT1JBTl9WSURfVFlQRSAgKCBcCi0JCQkJVklEX1RZUEVfQ0FQVFVSRSB8IFwKLQkJCQlWSURfVFlQRV9PVkVSTEFZIHwgXAotCQkJCVZJRF9UWVBFX0NMSVBQSU5HIHwgXAotCQkJCVZJRF9UWVBFX0ZSQU1FUkFNIHwgXAotCQkJCVZJRF9UWVBFX1NDQUxFUyB8IFwKLQkJCQlWSURfVFlQRV9NSlBFR19ERUNPREVSIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0VOQ09ERVIgXAotCQkJICAgICApCiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC03OSwzNiArNjksMTcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJ6b3Jhbi5oIgogI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgogI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKIAotCS8qIHdlIGRlY2xhcmUgc29tZSBjYXJkIHR5cGUgZGVmaW5pdGlvbnMgaGVyZSwgdGhleSBtZWFuCi0JICogdGhlIHNhbWUgYXMgdGhlIHY0bDEgWk9SQU5fVklEX1RZUEUgYWJvdmUsIGV4Y2VwdCBpdCdzIHY0bDIgKi8KLSNkZWZpbmUgWk9SQU5fVjRMMl9WSURfRkxBR1MgKCBcCi0JCQkJVjRMMl9DQVBfU1RSRUFNSU5HIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgXAotCQkJICAgICAgKQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkucGFsZXR0ZSA9IChwYWwpLCAuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2Vsc2UKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgem9yYW5fZm9ybWF0c1tdID0gewogCXsKIAkJLm5hbWUgPSAiMTUtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NTUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU1NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU1NSwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTUsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKQEAgLTExNiwxNiArODcsMTYgQEAKIAkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIxNS1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU1NVgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDE1LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAogCX0sIHsKIAkJLm5hbWUgPSAiMTYtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NjUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKQEAgLTEzMyw1NiArMTA0LDU2IEBACiAJCQkgICBaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAogCX0sIHsKIAkJLm5hbWUgPSAiMTYtYml0IFJHQiBCRSIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NVgsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NjVYLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZiwKIAl9LCB7CiAJCS5uYW1lID0gIjI0LWJpdCBSR0IiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCMjQsCi0JCSAgICAgVjRMMl9QSVhfRk1UX0JHUjI0LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfQkdSMjQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDI0LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OHxaUjM2MDU3X1ZGRVNQRlJfUGFjazI0LAogCX0sIHsKIAkJLm5hbWUgPSAiMzItYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0IzMiwKLQkJICAgICBWNEwyX1BJWF9GTVRfQkdSMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IzMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMzIsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIzMi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0IzMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMzIsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4LAogCX0sIHsKIAkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9ZVVY0MjIsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyLAogCX0sIHsKIAkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgVVlWWSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9VWVZZLAotCQkgICAgIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCiAJCS5kZXB0aCA9IDE2LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1lVVjQyMnxaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAogCX0sIHsKIAkJLm5hbWUgPSAiSGFyZHdhcmUtZW5jb2RlZCBNb3Rpb24tSlBFRyIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX01KUEVHLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9NSlBFRywKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogCQkuZGVwdGggPSAwLAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX1BMQVlCQUNLIHwKQEAgLTE5MSwxMyArMTYyLDYgQEAKIH07CiAjZGVmaW5lIE5VTV9GT1JNQVRTIEFSUkFZX1NJWkUoem9yYW5fZm9ybWF0cykKIAotLy8gUko6IFRlc3Qgb25seSAtIHdhbnQgdG8gdGVzdCBCVVpfVVNFX0hJTUVNIGV2ZW4gd2hlbiBDT05GSUdfQklHUEhZU19BUkVBIGlzIGRlZmluZWQKLQotCi1zdGF0aWMgaW50IGxvY2tfbm9ybTsJLyogMCA9IGRlZmF1bHQgMSA9IERvbid0IGNoYW5nZSBUViBzdGFuZGFyZCAobm9ybSkgKi8KLW1vZHVsZV9wYXJhbShsb2NrX25vcm0sIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxvY2tfbm9ybSwgIlByZXZlbnQgbm9ybSBjaGFuZ2VzICgxID0gaWdub3JlLCA+MSA9IGZhaWwpIik7Ci0KIAkvKiBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIGJ1ZmZlcnNpemVzIGZvciB2NGwyCiAJICogd2UgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IGhpZ2hlciBwb3dlci1vZi10d28sIHdoaWNoCiAJICogd2lsbCBiZSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyc2l6ZSAqLwpAQCAtMjIyLDIyMSArMTg2LDEwNiBAQAogfQogCiAvKiBmb3J3YXJkIHJlZmVyZW5jZXMgKi8KLXN0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpOworc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3Qgem9yYW5fZmggKmZoKTsKKworLyogU2V0IG1hcHBpbmcgbW9kZSAqLworc3RhdGljIHZvaWQgbWFwX21vZGVfcmF3KHN0cnVjdCB6b3Jhbl9maCAqZmgpCit7CisJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gdjRsX2J1ZnNpemU7CisJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7Cit9CitzdGF0aWMgdm9pZCBtYXBfbW9kZV9qcGcoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IHBsYXkpCit7CisJZmgtPm1hcF9tb2RlID0gcGxheSA/IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZIDogWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKKwlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOworCWZoLT5idWZmZXJzLm51bV9idWZmZXJzID0ganBnX25idWZzOworfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICptb2RlX25hbWUoZW51bSB6b3Jhbl9tYXBfbW9kZSBtb2RlKQoreworCXJldHVybiBtb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyA/ICJWNEwiIDogIkpQRyI7Cit9CiAKIC8qCiAgKiAgIEFsbG9jYXRlIHRoZSBWNEwgZ3JhYiBidWZmZXJzCiAgKgogICogICBUaGVzZSBoYXZlIHRvIGJlIHB5c2ljYWxseSBjb250aWd1b3VzLgotICogICBJZiB2NGxfYnVmc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0gd2UgdXNlIGttYWxsb2MKLSAqICAgZWxzZSB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlbSB3aXRoIGJpZ3BoeXNhcmVhX2FsbG9jX3BhZ2VzCi0gKiAgIGlmIHRoZSBiaWdwaHlzYXJlYSBwYXRjaCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwsCi0gKiAgIGVsc2Ugd2UgdHJ5IHRvIHVzZSBoaWdoIG1lbW9yeSAoaWYgdGhlIHVzZXIgaGFzIGJvb3RldAotICogICBMaW51eCB3aXRoIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGxlZnQgb3ZlcikuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWdldF9oaWdoX21lbSAodW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGludCB2NGxfZmJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotLyoKLSAqIENoZWNrIGlmIHRoZXJlIGlzIHVzYWJsZSBtZW1vcnkgYXQgdGhlIGVuZCBvZiBMaW51eCBtZW1vcnkKLSAqIG9mIGF0IGxlYXN0IHNpemUuIFJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIG1lbW9yeSwKLSAqIHJldHVybiAwIG9uIGZhaWx1cmUuCi0gKgotICogVGhlIGlkZWEgaXMgZnJvbSBBbGV4YW5kcm8gUnViaW5pJ3MgYm9vayAiTGludXggZGV2aWNlIGRyaXZlcnMiLgotICogVGhlIGRyaXZlciBmcm9tIGhpbSB3aGljaCBpcyBkb3dubG9hZGFibGUgZnJvbSBPJ1JlaWxseSdzCi0gKiB3ZWIgc2l0ZSBtaXNzZXMgdGhlICJ2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpIiBwYXJ0Ci0gKiAoYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHdvcmsgYXQgYWxsIC0gYXQgbGVhc3Qgd2l0aCAyLjIueCBrZXJuZWxzKS4KLSAqCi0gKiBJdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkgdG8gbWVudGlvbiB0aGF0IFRISVMgSVMgREFOR0VST1VTLAotICogaWYgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXQgYSB0aW1lIGhhcyB0aGUgaWRlYSB0byB1c2UgdGhpcyBtZW1vcnkhISEhCi0gKi8KLQotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqbWVtOwotCXVuc2lnbmVkIGNoYXIgYzsKLQl1bnNpZ25lZCBsb25nIGhpX21lbV9waDsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkvKiBNYXAgdGhlIGhpZ2ggbWVtb3J5IHRvIHVzZXIgc3BhY2UgKi8KLQotCWhpX21lbV9waCA9IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSk7Ci0KLQltZW0gPSBpb3JlbWFwKGhpX21lbV9waCwgc2l6ZSk7Ci0JaWYgKCFtZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBnZXRfaGlnaF9tZW0oKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAotCQkJWk9SQU5fTkFNRSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJLyogQ2hlY2sgaWYgaXQgaXMgbWVtb3J5ICovCi0JCWMgPSBpICYgMHhmZjsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQljID0gMjU1IC0gYzsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQl3cml0ZWIoMCwgbWVtICsgaSk7CS8qIHplcm8gb3V0IG1lbW9yeSAqLwotCi0JCS8qIGdpdmUgdGhlIGtlcm5lbCBhaXIgdG8gYnJlYXRoICovCi0JCWlmICgoaSAmIDB4M2ZmZmYpID09IDB4M2ZmZmYpCi0JCQlzY2hlZHVsZSgpOwotCX0KLQotCWlvdW5tYXAobWVtKTsKLQotCWlmIChpICE9IHNpemUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZ2V0X2hpZ2hfbWVtKCkgLSByZXF1ZXN0ZWQgJWx1LCBhdmFpbCAlbHVcbiIsCi0JCQlaT1JBTl9OQU1FLCBzaXplLCBpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGhpX21lbV9waDsKLX0KLQotc3RhdGljIGludAotdjRsX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgb2ZmOwogCXVuc2lnbmVkIGNoYXIgKm1lbTsKLQl1bnNpZ25lZCBsb25nIHBtZW0gPSAwOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQuLi4gKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcikKIAkJCWRwcmludGsoMiwKIAkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBidWZmZXIgJWQgYWxscmVhZHkgYWxsb2NhdGVkIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGkpOworCQkJCSIlczogJXMgLSBidWZmZXIgJWQgYWxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOwogCiAJCS8vdWRlbGF5KDIwKTsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKLQkJCS8qIFVzZSBrbWFsbG9jICovCi0KLQkJCW1lbSA9IGttYWxsb2MoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghbWVtKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJfQotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gbWVtOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQotCQkJICAgIHZpcnRfdG9fcGh5cyhtZW0pOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9Ci0JCQkgICAgdmlydF90b19idXMobWVtKTsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7Ci0JCQlkcHJpbnRrKDQsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gVjRMIGZyYW1lICVkIG1lbSAweCVseCAoYnVzOiAweCVseClcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGksICh1bnNpZ25lZCBsb25nKSBtZW0sCi0JCQkJdmlydF90b19idXMobWVtKSk7Ci0JCX0gZWxzZSB7Ci0KLQkJCS8qIFVzZSBoaWdoIG1lbW9yeSB3aGljaCBoYXMgYmVlbiBsZWZ0IGF0IGJvb3QgdGltZSAqLwotCi0JCQkvKiBPay4sIE9rLiB0aGlzIGlzIGFuIGV2aWwgaGFjayAtIHdlIG1ha2UKLQkJCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZQotCQkJICogdGhlIHNhbWUgYXMgYnVzIGFkZHJlc3NlcyAodHJ1ZSBhdCBsZWFzdAotCQkJICogZm9yIEludGVsIHByb2Nlc3NvcnMpLiBUaGUgd2hvbGUgbWV0aG9kIG9mCi0JCQkgKiBvYnRhaW5pbmcgYW5kIHVzaW5nIHRoaXMgbWVtb3J5IGlzIG5vdCB2ZXJ5Ci0JCQkgKiBuaWNlIC0gYnV0IEkgaG9wZSBpdCBzYXZlcyBzb21lIHBvb3IgdXNlcnMKLQkJCSAqIGZyb20ga2VybmVsIGhhY2tpbmcsIHdoaWNoIG1pZ2h0IGhhdmUgZXZlbgotCQkJICogbW9yZSBldmlsIHJlc3VsdHMgKi8KLQotCQkJaWYgKGkgPT0gMCkgewotCQkJCWludCBzaXplID0KLQkJCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKLQkJCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCi0JCQkJcG1lbSA9IGdldF9oaWdoX21lbShzaXplKTsKLQkJCQlpZiAocG1lbSA9PSAwKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBnZXRfaGlnaF9tZW0gKHNpemUgPSAlZCBLQikgZm9yIFY0TCBidWZzIGZhaWxlZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpLCBzaXplID4+IDEwKTsKLQkJCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJCX0KLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXIgPSBOVUxMOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9waHlzID0gcG1lbTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXJfYnVzID0gcG1lbTsKLQkJCQlkcHJpbnRrKDQsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSB1c2luZyAlZCBLQiBoaWdoIG1lbW9yeVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOwotCQkJfSBlbHNlIHsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzID0KLQkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9Ci0JCQkJICAgIHBtZW0gKyBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJfQorCQltZW0gPSBrbWFsbG9jKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLAorCQkJICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJCWlmICghbWVtKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6ICVzIC0ga21hbGxvYyBmb3IgVjRMIGJ1ZiAlZCBmYWlsZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCXY0bF9mYnVmZmVyX2ZyZWUoZmgpOworCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlciA9IG1lbTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX3BoeXMobWVtKTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX2J1cyA9IHZpcnRfdG9fYnVzKG1lbSk7CisJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKKwkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CisJCWRwcmludGsoNCwKKwkJCUtFUk5fSU5GTworCQkJIiVzOiAlcyAtIFY0TCBmcmFtZSAlZCBtZW0gMHglbHggKGJ1czogMHglbGx4KVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdmlydF90b19idXMobWVtKSk7CiAJfQogCi0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDE7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiAvKiBmcmVlIHRoZSBWNEwgZ3JhYiBidWZmZXJzICovCi1zdGF0aWMgdm9pZAotdjRsX2ZidWZmZXJfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpLCBvZmY7CiAJdW5zaWduZWQgY2hhciAqbWVtOwogCi0JZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB2NGxfZmJ1ZmZlcl9mcmVlKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmICghZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKQogCQkJY29udGludWU7CiAKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKLQkJCW1lbSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcjsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWtmcmVlKCh2b2lkICopIGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcik7Ci0JCX0KLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gTlVMTDsKKwkJbWVtID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyOworCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CisJCWtmcmVlKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcik7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlciA9IE5VTEw7CiAJfQogCi0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogfQogCiAvKgogICogICBBbGxvY2F0ZSB0aGUgTUpQRUcgZ3JhYiBidWZmZXJzLgogICoKLSAqICAgSWYgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gTUFYX0tNQUxMT0NfTUVNLAotICogICBrbWFsbG9jIGlzIHVzZWQgdG8gcmVxdWVzdCBhIHBoeXNpY2FsbHkgY29udGlndW91cyBhcmVhLAotICogICBlbHNlIHdlIGFsbG9jYXRlIHRoZSBtZW1vcnkgaW4gZnJhbWdlbnRzIHdpdGggZ2V0X3plcm9lZF9wYWdlLgotICoKICAqICAgSWYgYSBOYXRvbWEgY2hpcHNldCBpcyBwcmVzZW50IGFuZCB0aGlzIGlzIGEgcmV2aXNpb24gMSB6cjM2MDU3LAogICogICBlYWNoIE1KUEVHIGJ1ZmZlciBuZWVkcyB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuCiAgKiAgIChSSjogVGhpcyBzdGF0ZW1lbnQgaXMgZnJvbSBEYXZlIFBlcmtzJyBvcmlnaW5hbCBkcml2ZXIsCiAgKiAgIEkgY291bGQgbmV2ZXIgY2hlY2sgaXQgYmVjYXVzZSBJIGhhdmUgYSB6cjM2MDY3KQotICogICBUaGUgZHJpdmVyIGNhcmVzIGFib3V0IHRoaXMgYmVjYXVzZSBpdCByZWR1Y2VzIHRoZSBidWZmZXIKLSAqICAgc2l6ZSB0byBNQVhfS01BTExPQ19NRU0gaW4gdGhhdCBjYXNlICh3aGljaCBmb3JjZXMgY29udGlndW91cyBhbGxvY2F0aW9uKS4KICAqCiAgKiAgIFJKOiBUaGUgY29udGVudHMgZ3JhYiBidWZmZXJzIG5lZWRzIG5ldmVyIGJlIGFjY2Vzc2VkIGluIHRoZSBkcml2ZXIuCiAgKiAgICAgICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvY2F0ZSB0aGVtIHdpdGggdm1hbGxvYyBpbiBvcmRlcgpAQCAtNDU4LDE2MiArMzA3LDEyOCBAQAogICogICAgICAgYW5kIGZyYWdtZW50IGJ1ZmZlcnMgYXJlIG5vdCBsaXR0bGUtZW5kaWFuLgogICovCiAKLXN0YXRpYyBpbnQKLWpwZ19mYnVmZmVyX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQganBnX2ZidWZmZXJfYWxsb2Moc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIGosIG9mZjsKLQl1bnNpZ25lZCBsb25nIG1lbTsKKwl1OCAqbWVtOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiKQogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBhbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CiAKIAkJLyogQWxsb2NhdGUgZnJhZ21lbnQgdGFibGUgZm9yIHRoaXMgYnVmZmVyICovCiAKLQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQltZW0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKG1lbSA9PSAwKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCSIlczogJXMgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IChfX2xlMzIgKikgbWVtOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiX2J1cyA9Ci0JCSAgICB2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiID0gKF9fbGUzMiAqKW1lbTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYl9idXMgPSB2aXJ0X3RvX2J1cyhtZW0pOwogCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJbWVtID0KLQkJCSAgICAodW5zaWduZWQgbG9uZykga21hbGxvYyhmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgYnVmZmVyX3NpemUsCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAobWVtID09IDApIHsKKwkJaWYgKGZoLT5idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJbWVtID0ga21hbGxvYyhmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAobWVtID09IE5VTEwpIHsKIAkJCQlkcHJpbnRrKDEsCiAJCQkJCUtFUk5fRVJSCi0JCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCQkiJXM6ICVzIC0ga21hbGxvYyBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKIAkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0KLQkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPQotCQkJICAgIGNwdV90b19sZTMyKCgoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gNCkgPDwgMSkgfCAxKTsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzBdID0KKwkJCQljcHVfdG9fbGUzMih2aXJ0X3RvX2J1cyhtZW0pKTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMV0gPQorCQkJCWNwdV90b19sZTMyKChmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxKSB8IDEpOworCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsgb2ZmICs9IFBBR0VfU0laRSkKKwkJCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKG1lbSArIG9mZikpOwogCQl9IGVsc2UgewotCQkJLyoganBnX2J1ZnNpemUgaXMgYWxscmVheSBwYWdlIGFsaWduZWQgKi8KLQkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7Ci0JCQkgICAgIGorKykgewotCQkJCW1lbSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJCQlpZiAobWVtID09IDApIHsKKwkJCS8qIGpwZ19idWZzaXplIGlzIGFscmVhZHkgcGFnZSBhbGlnbmVkICovCisJCQlmb3IgKGogPSAwOyBqIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7IGorKykgeworCQkJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQkJCWlmIChtZW0gPT0gTlVMTCkgewogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gZ2V0X3plcm9lZF9wYWdlIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCQkJIiVzOiAlcyAtIGdldF96ZXJvZWRfcGFnZSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CisJCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCQkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQkJfQogCi0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQotCQkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqICsKLQkJCQkJCQkJICAgMV0gPQotCQkJCSAgICBjcHVfdG9fbGUzMigoUEFHRV9TSVpFIC8gNCkgPDwgMSk7Ci0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0pKTsKKwkJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqXSA9CisJCQkJCWNwdV90b19sZTMyKHZpcnRfdG9fYnVzKG1lbSkpOworCQkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMiAqIGogKyAxXSA9CisJCQkJCWNwdV90b19sZTMyKChQQUdFX1NJWkUgPj4gMikgPDwgMSk7CisJCQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0pKTsKIAkJCX0KIAotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiAtIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogaiAtIDFdIHw9IGNwdV90b19sZTMyKDEpOwogCQl9CiAJfQogCiAJZHByaW50ayg0LAotCQlLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtICVkIEtCIGFsbG9jYXRlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksCi0JCShmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplKSA+PiAxMCk7CisJCUtFUk5fREVCVUcgIiVzOiAlcyAtICVkIEtCIGFsbG9jYXRlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQkoZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgKiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkgPj4gMTApOwogCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDE7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiAvKiBmcmVlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi1qcGdfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB2b2lkIGpwZ19mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIGosIG9mZjsKIAl1bnNpZ25lZCBjaGFyICptZW07CisJX19sZTMyIGZyYWdfdGFiOworCXN0cnVjdCB6b3Jhbl9idWZmZXIgKmJ1ZmZlcjsKIAotCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6IGpwZ19mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYikKKwlmb3IgKGkgPSAwLCBidWZmZXIgPSAmZmgtPmJ1ZmZlcnMuYnVmZmVyWzBdOworCSAgICAgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyssIGJ1ZmZlcisrKSB7CisJCWlmICghYnVmZmVyLT5qcGcuZnJhZ190YWIpCiAJCQljb250aW51ZTsKIAotCQkvL2lmIChhbGxvY19jb250aWcpIHsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMpIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdKSB7Ci0JCQkJbWVtID0gKHVuc2lnbmVkIGNoYXIgKikgYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoCi0JCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pKTsKLQkJCQlmb3IgKG9mZiA9IDA7Ci0JCQkJICAgICBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKLQkJCQkJCQkgIChtZW0gKyBvZmYpKTsKKwkJaWYgKGZoLT5idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJZnJhZ190YWIgPSBidWZmZXItPmpwZy5mcmFnX3RhYlswXTsKKworCQkJaWYgKGZyYWdfdGFiKSB7CisJCQkJbWVtID0gYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKTsKKwkJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CiAJCQkJa2ZyZWUobWVtKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0gMDsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzFdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlswXSA9IDA7CisJCQkJYnVmZmVyLT5qcGcuZnJhZ190YWJbMV0gPSAwOwogCQkJfQogCQl9IGVsc2UgewotCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKLQkJCSAgICAgaisrKSB7Ci0JCQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJCSAgICBmcmFnX3RhYlsyICogal0pCisJCQlmb3IgKGogPSAwOyBqIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7IGorKykgeworCQkJCWZyYWdfdGFiID0gYnVmZmVyLT5qcGcuZnJhZ190YWJbMiAqIGpdOworCisJCQkJaWYgKCFmcmFnX3RhYikKIAkJCQkJYnJlYWs7Ci0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SCi0JCQkJCQkgIChidXNfdG9fdmlydAotCQkJCQkJICAgKGxlMzJfdG9fY3B1Ci0JCQkJCQkgICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKgotCQkJCQkJCQkgICAgICAgal0pKSkpOwotCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKLQkJCQkJICBidXNfdG9fdmlydAotCQkJCQkJICAobGUzMl90b19jcHUKLQkJCQkJCSAgIChmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgICBmcmFnX3RhYlsyICogal0pKSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQotCQkJCSAgICAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9IDA7CisJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGJ1c190b192aXJ0KGxlMzJfdG9fY3B1KGZyYWdfdGFiKSkpKTsKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKSk7CisJCQkJYnVmZmVyLT5qcGcuZnJhZ190YWJbMiAqIGpdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsyICogaiArIDFdID0gMDsKIAkJCX0KIAkJfQogCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KLQkJCSAgZnJhZ190YWIpOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gTlVMTDsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlci0+anBnLmZyYWdfdGFiKTsKKwkJYnVmZmVyLT5qcGcuZnJhZ190YWIgPSBOVUxMOwogCX0KIAotCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIH0KIAogLyoKQEAgLTYyMSwxMiArNDM2LDExIEBACiAgKi8KIAogc3RhdGljIGludAotem9yYW5fdjRsX3NldF9mb3JtYXQgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCit6b3Jhbl92NGxfc2V0X2Zvcm1hdCAoc3RydWN0IHpvcmFuX2ZoICAgICAgICAgICAqZmgsCiAJCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAogCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGJwcDsKIApAQCAtNjM2LDE5ICs0NTAsMTkgQEAKIAkgICAgaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgfHwgd2lkdGggPiBCVVpfTUFYX1dJRFRIKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBzaXplICglZHglZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCk7CisJCQkiJXM6ICVzIC0gd3JvbmcgZnJhbWUgc2l6ZSAoJWR4JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJYnBwID0gKGZvcm1hdC0+ZGVwdGggKyA3KSAvIDg7CiAKIAkvKiBDaGVjayBhZ2FpbnN0IGF2YWlsYWJsZSBidWZmZXIgc2l6ZSAqLwotCWlmIChoZWlnaHQgKiB3aWR0aCAqIGJwcCA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgeworCWlmIChoZWlnaHQgKiB3aWR0aCAqIGJwcCA+IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB2aWRlbyBidWZmZXIgc2l6ZSAoJWQga0IpIGlzIHRvbyBzbWFsbFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPj4gMTApOworCQkJIiVzOiAlcyAtIHZpZGVvIGJ1ZmZlciBzaXplICglZCBrQikgaXMgdG9vIHNtYWxsXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxMCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjU3LDggKzQ3MSw4IEBACiAJaWYgKChicHAgPT0gMiAmJiAod2lkdGggJiAxKSkgfHwgKGJwcCA9PSAzICYmICh3aWR0aCAmIDMpKSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gd3JvbmcgZnJhbWUgYWxpbmdtZW50XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIHdyb25nIGZyYW1lIGFsaWdubWVudFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjcwLDQzICs0ODQsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotem9yYW5fdjRsX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIGludCAgICAgICAgICBudW0pCitzdGF0aWMgaW50IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgbnVtKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXMgPSAwOwogCi0JaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwogCX0KIAogCS8qIE5vIGdyYWJiaW5nIG91dHNpZGUgdGhlIGJ1ZmZlciByYW5nZSEgKi8KLQlpZiAobnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CisJaWYgKG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYnVmZmVyICVkIGlzIG91dCBvZiByYW5nZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG51bSk7CiAJCXJlcyA9IC1FSU5WQUw7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewogCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+djRsX2J1ZmZlcnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOworCQkJenItPnY0bF9idWZmZXJzID0gZmgtPmJ1ZmZlcnM7CisJCQlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXMgPSAtRUJVU1k7CiAJCX0KIAl9CkBAIC03MTcsNyArNTI4LDcgQEAKIAkJZGVmYXVsdDoKIAkJY2FzZSBCVVpfU1RBVEVfUEVORDoKIAkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCQlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCQkJfQogCQkJcmVzID0gLUVCVVNZOwkvKiB3aGF0IGFyZSB5b3UgZG9pbmc/ICovCkBAIC03MjUsMTkgKzUzNiwxNyBAQAogCQljYXNlIEJVWl9TVEFURV9ET05FOgogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBxdWV1ZWluZyBidWZmZXIgJWQgaW4gc3RhdGUgRE9ORSE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQkJCSIlczogJXMgLSBxdWV1ZWluZyBidWZmZXIgJWQgaW4gc3RhdGUgRE9ORSE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKIAkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQgbGVhc3QKIAkJCSAqIG9uZSBtb3JlIHBlbmRbXSBlbnRyeSAqLwotCQkJenItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF9oZWFkKysgJgotCQkJCQlWNExfTUFTS19GUkFNRV0gPSBudW07CisJCQl6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX2hlYWQrKyAmIFY0TF9NQVNLX0ZSQU1FXSA9IG51bTsKIAkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9IEJVWl9TVEFURV9QRU5EOwogCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aCA9CiAJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgogCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0OwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dID0KLQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV07CisJCQlmaC0+YnVmZmVycy5idWZmZXJbbnVtXSA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzQ1LDY1ICs1NTQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCiAJaWYgKCFyZXMgJiYgenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLXY0bF9ncmFiIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgIHN0cnVjdCB2aWRlb19tbWFwICptcCkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IHJlcyA9IDAsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5wYWxldHRlID09IG1wLT5mb3JtYXQgJiYKLQkJICAgIHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ0FQVFVSRSAmJgotCQkgICAgISh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgWk9SQU5fRk9STUFUX0NPTVBSRVNTRUQpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IE5VTV9GT1JNQVRTIHx8IHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggPT0gMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfZ3JhYigpIC0gd3JvbmcgYnl0ZXMtcGVyLXBpeGVsIGZvcm1hdFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBUbyBtaW5pbWl6ZSB0aGUgdGltZSBzcGVudCBpbiB0aGUgSVJRIHJvdXRpbmUsIHdlIGF2b2lkIHNldHRpbmcgdXAKLQkgKiB0aGUgdmlkZW8gZnJvbnQgZW5kIHRoZXJlLgotCSAqIElmIHRoaXMgZ3JhYiBoYXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZnJvbSBhIHJ1bm5pbmcgc3RyZWFtaW5nIGNhcHR1cmUKLQkgKiB3ZSBzdG9wIHRoZSBzdHJlYW1pbmcgY2FwdHVyZSBhbmQgc3RhcnQgaXQgb3ZlciBhZ2Fpbi4KLQkgKi8KLQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCSAgICAoenItPnY0bF9zZXR0aW5ncy53aWR0aCAhPSBtcC0+d2lkdGggfHwKLQkgICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICE9IG1wLT5oZWlnaHQgfHwKLQkgICAgIHpyLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5wYWxldHRlICE9IG1wLT5mb3JtYXQpKSB7Ci0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCWlmICgocmVzID0gem9yYW5fdjRsX3NldF9mb3JtYXQoZmlsZSwKLQkJCQkJbXAtPndpZHRoLAotCQkJCQltcC0+aGVpZ2h0LAotCQkJCQkmem9yYW5fZm9ybWF0c1tpXSkpKQotCQlyZXR1cm4gcmVzOwotCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOwotCi0JLyogcXVldWUgdGhlIGZyYW1lIGluIHRoZSBwZW5kaW5nIHF1ZXVlICovCi0JaWYgKChyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgbXAtPmZyYW1lKSkpIHsKLQkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyogcHV0IHRoZSAzNjA1NyBpbnRvIGZyYW1lIGdyYWJiaW5nIG1vZGUgKi8KLQlpZiAoIXJlcyAmJiAhenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7Ci0KLQkvL2RwcmludGsoNCwgS0VSTl9JTkZPICIlczogRnJhbWUgZ3JhYiAzLi4uXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmU7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtODEyLDI3ICs1NjMsMjQgQEAKICAqIFN5bmMgb24gYSBWNEwgYnVmZmVyCiAgKi8KIAotc3RhdGljIGludAotdjRsX3N5bmMgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgaW50ICAgICAgICAgIGZyYW1lKQorc3RhdGljIGludCB2NGxfc3luYyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgZnJhbWUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zeW5jKCkgLSBubyBncmFiIGFjdGl2ZSBmb3IgdGhpcyBzZXNzaW9uXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjaGVjayBwYXNzZWQtaW4gZnJhbWUgbnVtYmVyICovCi0JaWYgKGZyYW1lID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBmcmFtZSA8IDApIHsKKwlpZiAoZnJhbWUgPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgZnJhbWUgPCAwKSB7CiAJCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGZyYW1lICVkIGlzIGludmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZnJhbWUpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGZyYW1lICVkIGlzIGludmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZyYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04NDAsMTUgKzU4OCwxNCBAQAogCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc3luYygpIC0gYXR0ZW1wdCB0byBzeW5jIG9uIGEgYnVmZmVyIHdoaWNoIHdhcyBub3QgcXVldWVkP1xuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCiAJLyogd2FpdCBvbiB0aGlzIGJ1ZmZlciB0byBnZXQgcmVhZHkgKi8KIAlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT52NGxfY2FwcSwKLQkJCQkoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX1BFTkQpLAotCQkJCTEwKkhaKSkKKwkJKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9QRU5EKSwgMTAqSFopKQogCQlyZXR1cm4gLUVUSU1FOwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTg1NiwxMSArNjAzLDExIEBACiAJLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KIAlpZiAoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCiAJCWRwcmludGsoMiwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCXpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKwlmaC0+YnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKQEAgLTg2OCw4ICs2MTUsNyBAQAogCWlmICh6ci0+djRsX3BlbmRfdGFpbCA9PSB6ci0+djRsX3BlbmRfaGVhZCkgewogCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKIAkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCX0KIAl9CkBAIC04ODMsMzEgKzYyOSwyOCBAQAogICogICBRdWV1ZSBhIE1KUEVHIGJ1ZmZlciBmb3IgY2FwdHVyZS9wbGF5YmFjawogICovCiAKLXN0YXRpYyBpbnQKLXpvcmFuX2pwZ19xdWV1ZV9mcmFtZSAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgbnVtLAotCQkgICAgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCitzdGF0aWMgaW50IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgbnVtLAorCQkJCSBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVzID0gMDsKIAogCS8qIENoZWNrIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAqLwotCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCWlmICghZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwlpZiAobnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkiJXM6ICVzIC0gYnVmZmVyICVkIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MTgsMjAgKzY2MSwyMCBAQAogCQkvKiB3cm9uZyBjb2RlYyBtb2RlIGFjdGl2ZSAtIGludmFsaWQgKi8KIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBjb2RlYyBpbiB3cm9uZyBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNvZGVjIGluIHdyb25nIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5qcGdfYnVmZmVyczsKLQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CisJCQl6ci0+anBnX2J1ZmZlcnMgPSBmaC0+YnVmZmVyczsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJlcyA9IC1FQlVTWTsKIAkJfQogCX0KQEAgLTk0OCwyMyArNjkxLDIxIEBACiAJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIHF1ZWluZyBmcmFtZSBpbiBCVVpfU1RBVEVfRE9ORSBzdGF0ZSE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gcXVlaW5nIGZyYW1lIGluIEJVWl9TVEFURV9ET05FIHN0YXRlIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKIAkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQKIAkJCSAqbGVhc3Qgb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCi0JCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0KLQkJCSAgICBudW07CisJCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0gbnVtOwogCQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0gPQotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOwogCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJY2FzZSBCVVpfU1RBVEVfRE1BOgogCQljYXNlIEJVWl9TVEFURV9QRU5EOgogCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl9CiAJCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KQEAgLTk3NCw0NyArNzE1LDQxIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCWlmICghcmVzICYmIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmpwZ19idWZmZXJzLmFjdGl2ZTsKLQl9CisJaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlOwogCiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludAotanBnX3FidWYgKHN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlLAotCSAgaW50ICAgICAgICAgICAgICAgICAgIGZyYW1lLAotCSAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCitzdGF0aWMgaW50IGpwZ19xYnVmKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBmcmFtZSwgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCByZXMgPSAwOwogCiAJLyogRG9lcyB0aGUgdXNlciB3YW50IHRvIHN0b3Agc3RyZWFtaW5nPyAqLwogCWlmIChmcmFtZSA8IDApIHsKIAkJaWYgKHpyLT5jb2RlY19tb2RlID09IG1vZGUpIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewogCQkJCWRwcmludGsoMSwKIAkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBqcGdfcWJ1ZigtMSkgLSBzZXNzaW9uIG5vdCBhY3RpdmVcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJIiVzOiAlcygtMSkgLSBzZXNzaW9uIG5vdCBhY3RpdmVcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0genItPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGpwZ19xYnVmKCkgLSBzdG9wIHN0cmVhbWluZyBidXQgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gc3RvcCBzdHJlYW1pbmcgYnV0IG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpZiAoKHJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBmcmFtZSwgbW9kZSkpKQorCWlmICgocmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZoLCBmcmFtZSwgbW9kZSkpKQogCQlyZXR1cm4gcmVzOwogCiAJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLwpAQCAtMTAyOCwyOCArNzYzLDI1IEBACiAgKiAgIFN5bmMgb24gYSBNSlBFRyBidWZmZXIKICAqLwogCi1zdGF0aWMgaW50Ci1qcGdfc3luYyAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JICBzdHJ1Y3Qgem9yYW5fc3luYyAqYnMpCitzdGF0aWMgaW50IGpwZ19zeW5jKHN0cnVjdCB6b3Jhbl9maCAqZmgsIHN0cnVjdCB6b3Jhbl9zeW5jICpicykKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZnJhbWU7CiAKLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSBjYXB0dXJlIGlzIG5vdCBjdXJyZW50bHkgYWN0aXZlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTICYmCiAJICAgIHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gY29kZWMgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNvZGVjIG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT5qcGdfY2FwcSwKQEAgLTEwNjQsOCArNzk2LDggQEAKIAkJCQkJICAgc2l6ZW9mKGlzciksICZpc3IpOwogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gdGltZW91dDogY29kZWMgaXNyPTB4JTAyeFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpc3IpOworCQkJIiVzOiAlcyAtIHRpbWVvdXQ6IGNvZGVjIGlzcj0weCUwMnhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGlzcik7CiAKIAkJcmV0dXJuIC1FVElNRTsKIApAQCAtMTA4MywyOCArODE1LDI2IEBACiAJLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KIAlpZiAoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCiAJCWRwcmludGsoMiwKLQkJCUtFUk5fRVJSICIlczoganBnX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCSpicyA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmJzOwogCWJzLT5mcmFtZSA9IGZyYW1lOwogCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKwlmaC0+YnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV07CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotem9yYW5fb3Blbl9pbml0X3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKIAkvKiBQZXIgZGVmYXVsdCwgbWFwIHRoZSBWNEwgQnVmZmVycyAqLwotCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKKwltYXBfbW9kZV9yYXcoZmgpOwogCiAJLyogdGFrZSBvdmVyIHRoZSBjYXJkJ3MgY3VycmVudCBzZXR0aW5ncyAqLwogCWZoLT5vdmVybGF5X3NldHRpbmdzID0genItPm92ZXJsYXlfc2V0dGluZ3M7CkBAIC0xMTE0LDQwICs4NDQsMjEgQEAKIAogCS8qIHY0bCBzZXR0aW5ncyAqLwogCWZoLT52NGxfc2V0dGluZ3MgPSB6ci0+djRsX3NldHRpbmdzOwotCi0JLyogdjRsX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT52NGxfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl92NGxfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLwotCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKLQl9Ci0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKLQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7Ci0KIAkvKiBqcGcgc2V0dGluZ3MgKi8KIAlmaC0+anBnX3NldHRpbmdzID0genItPmpwZ19zZXR0aW5nczsKIAotCS8qIGpwZ19idWZmZXJzICovCi0JbWVtc2V0KCZmaC0+anBnX2J1ZmZlcnMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCkpOwotCWZvciAoaSA9IDA7IGkgPCBCVVpfTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOworCS8qIGJ1ZmZlcnMgKi8KKwltZW1zZXQoJmZoLT5idWZmZXJzLCAwLCBzaXplb2YoZmgtPmJ1ZmZlcnMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZSQU1FOyBpKyspIHsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKIAl9Ci0JZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IHpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXM7Ci0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBqcGdfYnVmc2l6ZTsKLQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBqcGdfbmJ1ZnM7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogfQogCi1zdGF0aWMgdm9pZAotem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKIAkvKiBvdmVybGF5ICovCkBAIC0xMTU5LDM2ICs4NzAsMzIgQEAKIAkJenItPm92ZXJsYXlfbWFzayA9IE5VTEw7CiAJfQogCi0JLyogdjRsIGNhcHR1cmUgKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJLyogdjRsIGNhcHR1cmUgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCSAgICBaT1JBTl9GUkVFOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJfQogCi0JLyogdjRsIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9CisJCS8qIHY0bCBidWZmZXJzICovCisJCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpCisJCQl2NGxfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9IGVsc2UgeworCQkvKiBqcGcgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQl9CiAKLQkvKiBqcGcgY2FwdHVyZSAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKLQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJICAgIFpPUkFOX0ZSRUU7Ci0JfQotCi0JLyoganBnIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJLyoganBnIGJ1ZmZlcnMgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCX0KIH0KIApAQCAtMTIwMiwxNSArOTA5LDExIEBACiAJc3RydWN0IHpvcmFuX2ZoICpmaDsKIAlpbnQgcmVzLCBmaXJzdF9vcGVuID0gMDsKIAotCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogem9yYW5fb3BlbiglcywgcGlkPVslZF0pLCB1c2VycygtKT0lZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlciArIDEpOworCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogJXMoJXMsIHBpZD1bJWRdKSwgdXNlcnMoLSk9JWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyICsgMSk7CiAKIAlsb2NrX2tlcm5lbCgpOwogCi0JLyogc2VlIGZzL2RldmljZS5jIC0gdGhlIGtlcm5lbCBhbHJlYWR5IGxvY2tzIGR1cmluZyBvcGVuKCksCi0JICogc28gbG9ja2luZyBvdXJzZWx2ZXMgb25seSBjYXVzZXMgZGVhZGxvY2tzICovCi0JLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQogCWlmICh6ci0+dXNlciA+PSAyMDQ4KSB7CiAJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiB0b28gbWFueSB1c2VycyAoJWQpIG9uIGRldmljZVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCB6ci0+dXNlcik7CkBAIC0xMjE4LDQxICs5MjEsMTUgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKLQlpZiAoIXpyLT5kZWNvZGVyKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogbm8gVFYgZGVjb2RlciBsb2FkZWQgZm9yIGRldmljZSFcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCi0JaWYgKCF0cnlfbW9kdWxlX2dldCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCBvZiB2aWRlbyBkZWNvZGVyXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRUlPOwotCQlnb3RvIGZhaWxfdW5sb2NrOwotCX0KLQlpZiAoenItPmVuY29kZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIHZpZGVvIGVuY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF9kZWNvZGVyOwotCX0KLQogCS8qIG5vdywgY3JlYXRlIHRoZSBvcGVuKCktc3BlY2lmaWMgZmlsZV9vcHMgc3RydWN0ICovCiAJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZoKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmVzID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2VuY29kZXI7CisJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCS8qIHVzZWQgdG8gYmUgQlVaX01BWF9XSURUSC9IRUlHSFQsIGJ1dCB0aGF0IGdpdmVzIG92ZXJmbG93cwogCSAqIG9uIG5vcm0tY2hhbmdlISAqLwpAQCAtMTI2MSw4ICs5MzgsOCBAQAogCWlmICghZmgtPm92ZXJsYXlfbWFzaykgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9vcGVuKCkgLSBhbGxvY2F0aW9uIG9mIG92ZXJsYXlfbWFzayBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYWxsb2NhdGlvbiBvZiBvdmVybGF5X21hc2sgZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmVzID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2ZoOwogCX0KQEAgLTEyODQsMTggKzk2MSwxMyBAQAogCS8qIHNldCBmaWxlX29wcyBzdHVmZiAqLwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT56ciA9IHpyOwotCXpvcmFuX29wZW5faW5pdF9zZXNzaW9uKGZpbGUpOworCXpvcmFuX29wZW5faW5pdF9zZXNzaW9uKGZoKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbF9maDoKIAlrZnJlZShmaCk7Ci1mYWlsX2VuY29kZXI6Ci0JaWYgKHpyLT5lbmNvZGVyKQotCQltb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci1mYWlsX2RlY29kZXI6Ci0JbW9kdWxlX3B1dCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwogZmFpbF91bmxvY2s6CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC0xMzExLDE0ICs5ODMsMTQgQEAKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKLQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCVzLCBwaWQ9WyVkXSksIHVzZXJzKCspPSVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyIC0gMSk7CisJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiAlcyglcywgcGlkPVslZF0pLCB1c2VycygrKT0lZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgLSAxKTsKIAogCS8qIGtlcm5lbCBsb2NrcyAoZnMvZGV2aWNlLmMpLCBzbyBkb24ndCBkbyB0aGF0IG91cnNlbHZlcwogCSAqIChwcmV2ZW50cyBkZWFkbG9ja3MpICovCiAJLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KIAotCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZpbGUpOworCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZoKTsKIAogCWlmICh6ci0+dXNlci0tID09IDEpIHsJLyogTGFzdCBwcm9jZXNzICovCiAJCS8qIENsZWFuIHVwIEpQRUcgcHJvY2VzcyAqLwpAQCAtMTM0Niw5ICsxMDE4LDEwIEBACiAJCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAwKTsKIAogCQlpZiAoIXBhc3NfdGhyb3VnaCkgewkvKiBTd2l0Y2ggdG8gY29sb3IgYmFyICovCi0JCQlpbnQgemVybyA9IDAsIHR3byA9IDI7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7CisJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAyLCAwIH07CisKKwkJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJfQogCX0KIApAQCAtMTM1NiwxNCArMTAyOSw3IEBACiAJa2ZyZWUoZmgtPm92ZXJsYXlfbWFzayk7CiAJa2ZyZWUoZmgpOwogCi0JLyogcmVsZWFzZSBsb2NrcyBvbiB0aGUgaTJjIG1vZHVsZXMgKi8KLQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JaWYgKHpyLT5lbmNvZGVyKQotCQltb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0KLQkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0KLQlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCkgZG9uZVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogJXMgZG9uZVxuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5MSwxNSArMTA1NywxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50Ci1zZXR1cF9mYnVmZmVyIChzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICpmaWxlLAorc3RhdGljIGludCBzZXR1cF9mYnVmZmVyKHN0cnVjdCB6b3Jhbl9maCAqZmgsCiAJICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKmJhc2UsCiAJICAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCiAJICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNwZXJsaW5lKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIChSb25hbGQpIHY0bC92NGwyIGd1aWRlbGluZXMgKi8KQEAgLTE0MjcsOCArMTA5MSw4IEBACiAJCSAqIGZyaWVuZGx5IGFuZCBzaWxlbnRseSBkbyBhcyBpZiBub3RoaW5nIHdlbnQgd3JvbmcgKi8KIAkJZHByaW50aygzLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gZm9yY2VkIG92ZXJsYXkgdHVybm9mZiBiZWNhdXNlIGZyYW1lYnVmZmVyIGNoYW5nZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gZm9yY2VkIG92ZXJsYXkgdHVybm9mZiBiZWNhdXNlIGZyYW1lYnVmZmVyIGNoYW5nZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwogCX0KICNlbmRpZgpAQCAtMTQzNiwzMSArMTEwMCwzMSBAQAogCWlmICghKGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSkpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gbm8gdmFsaWQgb3ZlcmxheSBmb3JtYXQgZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gdmFsaWQgb3ZlcmxheSBmb3JtYXQgZ2l2ZW5cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9IDAgfHwgYnl0ZXNwZXJsaW5lIDw9IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gaW52YWxpZCBoZWlnaHQvd2lkdGgvYnBsIHZhbHVlICglZHwlZHwlZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCwgYnl0ZXNwZXJsaW5lKTsKKwkJCSIlczogJXMgLSBpbnZhbGlkIGhlaWdodC93aWR0aC9icGwgdmFsdWUgKCVkfCVkfCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgd2lkdGgsIGhlaWdodCwgYnl0ZXNwZXJsaW5lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChieXRlc3BlcmxpbmUgJiAzKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGJ5dGVzcGVybGluZSAoJWQpIG11c3QgYmUgNC1ieXRlIGFsaWduZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnl0ZXNwZXJsaW5lKTsKKwkJCSIlczogJXMgLSBieXRlc3BlcmxpbmUgKCVkKSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBieXRlc3BlcmxpbmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl6ci0+YnVmZmVyLmJhc2UgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJhc2UgJiB+Myk7Ci0JenItPmJ1ZmZlci5oZWlnaHQgPSBoZWlnaHQ7Ci0JenItPmJ1ZmZlci53aWR0aCA9IHdpZHRoOwotCXpyLT5idWZmZXIuZGVwdGggPSBmbXQtPmRlcHRoOworCXpyLT52YnVmX2Jhc2UgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJhc2UgJiB+Myk7CisJenItPnZidWZfaGVpZ2h0ID0gaGVpZ2h0OworCXpyLT52YnVmX3dpZHRoID0gd2lkdGg7CisJenItPnZidWZfZGVwdGggPSBmbXQtPmRlcHRoOwogCXpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9IGZtdDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKKwl6ci0+dmJ1Zl9ieXRlc3BlcmxpbmUgPSBieXRlc3BlcmxpbmU7CiAKIAkvKiBUaGUgdXNlciBzaG91bGQgc2V0IG5ldyB3aW5kb3cgcGFyYW1ldGVycyAqLwogCXpyLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDA7CkBAIC0xNDY5LDM1ICsxMTMzLDI3IEBACiB9CiAKIAotc3RhdGljIGludAotc2V0dXBfd2luZG93IChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeCwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgd2lkdGgsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIGhlaWdodCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzLAotCSAgICAgIGludCAgICAgICAgICAgICAgICBjbGlwY291bnQsCi0JICAgICAgdm9pZCAgICAgICAgICAgICAgX191c2VyICpiaXRtYXApCitzdGF0aWMgaW50IHNldHVwX3dpbmRvdyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKwlzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqY2xpcHMsIGludCBjbGlwY291bnQsIHZvaWQgX191c2VyICpiaXRtYXApCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXN0cnVjdCB2aWRlb19jbGlwICp2Y3AgPSBOVUxMOworCXN0cnVjdCB2NGwyX2NsaXAgKnZjcCA9IE5VTEw7CiAJaW50IG9uLCBlbmQ7CiAKIAotCWlmICghenItPmJ1ZmZlci5iYXNlKSB7CisJaWYgKCF6ci0+dmJ1Zl9iYXNlKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gZnJhbWUgYnVmZmVyIGhhcyB0byBiZSBzZXQgZmlyc3RcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gZnJhbWUgYnVmZmVyIGhhcyB0byBiZSBzZXQgZmlyc3RcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MDUsMTMgKzExNjEsMTMgQEAKIAkgKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMsIHdlIGNvcnJlY3QgdGhhdAogCSAqIHNpbGVudGx5IGhlcmUgaWYgbmVjZXNzYXJ5CiAJICovCi0JaWYgKHpyLT5idWZmZXIuZGVwdGggPT0gMTUgfHwgenItPmJ1ZmZlci5kZXB0aCA9PSAxNikgeworCWlmICh6ci0+dmJ1Zl9kZXB0aCA9PSAxNSB8fCB6ci0+dmJ1Zl9kZXB0aCA9PSAxNikgewogCQllbmQgPSAoeCArIHdpZHRoKSAmIH4xOwkvKiByb3VuZCBkb3duICovCiAJCXggPSAoeCArIDEpICYgfjE7CS8qIHJvdW5kIHVwICovCiAJCXdpZHRoID0gZW5kIC0geDsKIAl9CiAKLQlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAyNCkgeworCWlmICh6ci0+dmJ1Zl9kZXB0aCA9PSAyNCkgewogCQllbmQgPSAoeCArIHdpZHRoKSAmIH4zOwkvKiByb3VuZCBkb3duICovCiAJCXggPSAoeCArIDMpICYgfjM7CS8qIHJvdW5kIHVwICovCiAJCXdpZHRoID0gZW5kIC0geDsKQEAgLTE1MjcsOCArMTE4Myw4IEBACiAJICAgIHdpZHRoID4gQlVaX01BWF9XSURUSCB8fCBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIHdpZHRoID0gJWQgb3IgaGVpZ2h0ID0gJWQgaW52YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCSIlczogJXMgLSB3aWR0aCA9ICVkIG9yIGhlaWdodCA9ICVkIGludmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHdpZHRoLCBoZWlnaHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NjYsMjAgKzEyMjIsMjAgQEAKIAkJfQogCX0gZWxzZSBpZiAoY2xpcGNvdW50ID4gMCkgewogCQkvKiB3cml0ZSBvdXIgb3duIGJpdG1hcCBmcm9tIHRoZSBjbGlwcyAqLwotCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiAoY2xpcGNvdW50ICsgNCkpOworCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIChjbGlwY291bnQgKyA0KSk7CiAJCWlmICh2Y3AgPT0gTlVMTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIEFsbG9jIG9mIGNsaXAgbWFzayBmYWlsZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBBbGxvYyBvZiBjbGlwIG1hc2sgZmFpbGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJICAgICh2Y3AsIGNsaXBzLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApICogY2xpcGNvdW50KSkgeworCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIGNsaXBjb3VudCkpIHsKIAkJCXZmcmVlKHZjcCk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQl3cml0ZV9vdmVybGF5X21hc2soZmlsZSwgdmNwLCBjbGlwY291bnQpOworCQl3cml0ZV9vdmVybGF5X21hc2soZmgsIHZjcCwgY2xpcGNvdW50KTsKIAkJdmZyZWUodmNwKTsKIAl9CiAKQEAgLTE1OTUsMTEgKzEyNTEsOCBAQAogCXJldHVybiB3YWl0X2dyYWJfcGVuZGluZyh6cik7CiB9CiAKLXN0YXRpYyBpbnQKLXNldHVwX292ZXJsYXkgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgICBpbnQgICAgICAgICAgb24pCitzdGF0aWMgaW50IHNldHVwX292ZXJsYXkoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IG9uKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJldHVybiBpbW1lZGlhdGx5ICovCkBAIC0xNjEyLDE2ICsxMjY1LDE2IEBACiAJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIG92ZXJsYXkgaXMgYWxyZWFkeSBhY3RpdmUgZm9yIGFub3RoZXIgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBvdmVybGF5IGlzIGFscmVhZHkgYWN0aXZlIGZvciBhbm90aGVyIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAoIW9uICYmIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIHlvdSBjYW5ub3QgY2FuY2VsIHNvbWVvbmUgZWxzZSdzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0xNjM0LDE4ICsxMjg3LDE4IEBACiAJCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwogCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKIAl9IGVsc2UgewotCQlpZiAoIXpyLT5idWZmZXIuYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7CisJCWlmICghenItPnZidWZfYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKCFmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9MT0NLRUQ7CkBAIC0xNjYyLDQxICsxMzE1LDQ3IEBACiAJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIH0KIAotCS8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLwotc3RhdGljIGludAotem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzIChzdHJ1Y3QgZmlsZSAgICAgICAgKmZpbGUsCi0JCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmLAotCQkJICBpbnQgICAgICAgICAgICAgICAgIG51bSkKKy8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLworc3RhdGljIGludCB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHpvcmFuX2ZoICpmaCwKKwkJCQkgICAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYsIGludCBudW0pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CiAKIAlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewogCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCiAJCS8qIGNoZWNrIHJhbmdlICovCi0JCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgICFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiAlcygpIC0gcmF3IGFjdGl2ZT0lYywgYnVmZmVyICVkOiBzdGF0ZT0lYywgbWFwPSVjXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgbnVtLAorCQkJIlVQTUQiW3pyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZV0sCisJCQlmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5tYXAgPyAnWScgOiAnTicpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwogCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlidWYtPmxlbmd0aCA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOwogCiAJCS8qIGdldCBidWZmZXIgKi8KLQkJYnVmLT5ieXRlc3VzZWQgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8Ci0JCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOworCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8CisJCSAgICBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOwotCQkJYnVmLT50aW1lc3RhbXAgPQotCQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCQlidWYtPnRpbWVzdGFtcCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKIAkJfSBlbHNlIHsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CiAJCX0KQEAgLTE3MTIsMjggKzEzNzEsMjYgQEAKIAljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgogCiAJCS8qIGNoZWNrIHJhbmdlICovCi0JCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgICFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWJ1Zi0+dHlwZSA9IChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPwogCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIDoKIAkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOwotCQlidWYtPmxlbmd0aCA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJYnVmLT5sZW5ndGggPSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKIAogCQkvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIG9ubHkgd3JpdHRlbiBhZnRlciBmcmFtZSBoYXMgYmVlbiBjYXB0dXJlZCAqLwotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8Ci0JCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOwotCQkJYnVmLT50aW1lc3RhbXAgPQotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7Ci0JCQlidWYtPmJ5dGVzdXNlZCA9Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8CisJCSAgICBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKKwkJCWJ1Zi0+dGltZXN0YW1wID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOworCQkJYnVmLT5ieXRlc3VzZWQgPSBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7CiAJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKIAkJfSBlbHNlIHsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CkBAIC0xNzQxLDE0ICsxMzk4LDExIEBACiAKIAkJLyogd2hpY2ggZmllbGRzIGFyZSB0aGVzZT8gKi8KIAkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTTsKKwkJCWJ1Zi0+ZmllbGQgPSBmaC0+anBnX3NldHRpbmdzLm9kZF9ldmVuID8KKwkJCQlWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOwogCQllbHNlCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJICAgIFY0TDJfRklFTERfU0VRX0JUOworCQkJYnVmLT5maWVsZCA9IGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQ7CiAKIAkJYnJlYWs7CiAKQEAgLTE3NTYsOCArMTQxMCw4IEBACiAKIAkJZHByaW50ayg1LAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsMl9idWZmZXJfc3RhdHVzKCkgLSBpbnZhbGlkIGJ1ZmZlciB0eXBlfG1hcF9tb2RlICglZHwlZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJIiVzOiAlcyAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE3NzAsODEgKzE0MjQsNTUgQEAKIAogc3RhdGljIGludAogem9yYW5fc2V0X25vcm0gKHN0cnVjdCB6b3JhbiAqenIsCi0JCWludCAgICAgICAgICAgbm9ybSkgLyogVklERU9fTU9ERV8qICovCisJCXY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0JaW50IG5vcm1fZW5jb2Rlciwgb247CisJaW50IG9uOwogCiAJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAogCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHNldF9ub3JtKCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKGxvY2tfbm9ybSAmJiBub3JtICE9IHpyLT5ub3JtKSB7Ci0JCWlmIChsb2NrX25vcm0gPiAxKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBjYW4gbm90IHN3aXRjaCBub3JtXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBub3JtIHdhcyBub3QgY2hhbmdlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlub3JtID0genItPm5vcm07Ci0JCX0KLQl9Ci0KLQlpZiAobm9ybSAhPSBWSURFT19NT0RFX0FVVE8gJiYKLQkgICAgKG5vcm0gPCAwIHx8IG5vcm0gPj0genItPmNhcmQubm9ybXMgfHwKLQkgICAgICF6ci0+Y2FyZC50dm5bbm9ybV0pKSB7CisJaWYgKCEobm9ybSAmIHpyLT5jYXJkLm5vcm1zKSkgewogCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHNldF9ub3JtKCkgLSB1bnN1cHBvcnRlZCBub3JtICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG5vcm0pOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIHVuc3VwcG9ydGVkIG5vcm0gJWxseFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbm9ybSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChub3JtID09IFZJREVPX01PREVfQVVUTykgewotCQlpbnQgc3RhdHVzOworCWlmIChub3JtID09IFY0TDJfU1REX0FMTCkgeworCQlpbnQgc3RhdHVzID0gMDsKKwkJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAotCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5IGNhcHM7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLCAmY2Fwcyk7Ci0JCWlmICghKGNhcHMuZmxhZ3MgJiBWSURFT19ERUNPREVSX0FVVE8pKSB7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogbm9ybT1hdXRvIHVuc3VwcG9ydGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHF1ZXJ5c3RkLCAmc3RkKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkJLyogbGV0IGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwogCQlzc2xlZXAoMik7CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgeworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBWNEwyX0lOX1NUX05PX1NJR05BTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gbm8gbm9ybSBkZXRlY3RlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIG5vIG5vcm0gZGV0ZWN0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCS8qIHJlc2V0IG5vcm0gKi8KLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwkJCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCB6ci0+bm9ybSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCWlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19OVFNDKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOworCQlub3JtID0gc3RkOwogCX0KLQl6ci0+dGltaW5nID0genItPmNhcmQudHZuW25vcm1dOwotCW5vcm1fZW5jb2RlciA9IG5vcm07CisJaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsyXTsKKwllbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQykKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsxXTsKKwllbHNlCisJCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bMF07CiAKIAkvKiBXZSBzd2l0Y2ggb3ZlcmxheSBvZmYgYW5kIG9uIHNpbmNlIGEgY2hhbmdlIGluIHRoZQogCSAqIG5vcm0gbmVlZHMgZGlmZmVyZW50IFZGRSBzZXR0aW5ncyAqLwpAQCAtMTg1Miw4ICsxNDgwLDggQEAKIAlpZiAob24pCiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKLQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZub3JtX2VuY29kZXIpOworCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCBub3JtKTsKKwllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIG5vcm0pOwogCiAJaWYgKG9uKQogCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOwpAQCAtMTg2OCw3ICsxNDk2LDcgQEAKIHpvcmFuX3NldF9pbnB1dCAoc3RydWN0IHpvcmFuICp6ciwKIAkJIGludCAgICAgICAgICAgaW5wdXQpCiB7Ci0JaW50IHJlYWxpbnB1dDsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKIAlpZiAoaW5wdXQgPT0genItPmlucHV0KSB7CiAJCXJldHVybiAwOwpAQCAtMTg3OCwyMyArMTUwNiwyMyBAQAogCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHNldF9pbnB1dCgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0genItPmNhcmQuaW5wdXRzKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldF9pbnB1dCgpIC0gdW5uc3VwcG9ydGVkIGlucHV0ICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucHV0KTsKKwkJCSIlczogJXMgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGlucHV0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVhbGlucHV0ID0genItPmNhcmQuaW5wdXRbaW5wdXRdLm11eHNlbDsKKwlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W2lucHV0XS5tdXhzZWw7CiAJenItPmlucHV0ID0gaW5wdXQ7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmcmVhbGlucHV0KTsKKwlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MDMsNDEwICsxNTMxLDE0IEBACiAgKiAgIGlvY3RsIHJvdXRpbmUKICAqLwogCi1zdGF0aWMgbG9uZyB6b3Jhbl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RhdGljIGxvbmcgem9yYW5fZGVmYXVsdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQkvKiBDQVJFRlVMOiB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBoZXJlICovCiAJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKIAotCS8qIHdlIG1pZ2h0IGhhdmUgb2xkZXIgYnVmZmVycyBseWluZyBhcm91bmQuLi4gV2UgZG9uJ3Qgd2FudAotCSAqIHRvIHdhaXQsIGJ1dCB3ZSBkbyB3YW50IHRvIHRyeSBjbGVhbmluZyB0aGVtIHVwIEFTQVAuIFNvCi0JICogd2UgdHJ5IHRvIG9idGFpbiB0aGUgbG9jayBhbmQgZnJlZSB0aGVtLiBJZiB0aGF0IGZhaWxzLCB3ZQotCSAqIGRvbid0IGRvIGFueXRoaW5nIGFuZCB3YWl0IGZvciB0aGUgbmV4dCB0dXJuLiBJbiB0aGUgZW5kLAotCSAqIHpvcmFuX2Nsb3NlKCkgb3IgYSBuZXcgYWxsb2NhdGlvbiB3aWxsIHN0aWxsIGZyZWUgdGhlbS4uLgotCSAqIFRoaXMgaXMganVzdCBhICd0aGUgc29vbmVyIHRoZSBiZXR0ZXInIGV4dHJhICdmZWF0dXJlJwotCSAqCi0JICogV2UgZG9uJ3QgZnJlZSB0aGUgYnVmZmVycyByaWdodCBvbiBtdW5tYXAoKSBiZWNhdXNlIHRoYXQKLQkgKiBjYXVzZXMgb29wc2VzIChrZnJlZSgpIGluc2lkZSBtdW5tYXAoKSBvb3BzZXMgZm9yIG5vCi0JICogYXBwYXJlbnQgcmVhc29uIC0gaXQncyBhbHNvIG5vdCByZXByb2R1Y2VhYmxlIGluIGFueSB3YXksCi0JICogYnV0IG1vdmluZyB0aGUgZnJlZSBjb2RlIG91dHNpZGUgdGhlIG11bm1hcCgpIGhhbmRsZXIgZml4ZXMKLQkgKiBhbGwgdGhpcy4uLiBJZiBzb21lb25lIGtub3dzIHdoeSwgcGxlYXNlIGV4cGxhaW4gbWUgKFJvbmFsZCkKLQkgKi8KLQlpZiAobXV0ZXhfdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7Ci0JCS8qIHdlIG9idGFpbmVkIGl0ISBMZXQncyB0cnkgdG8gZnJlZSBzb21lIHRoaW5ncyAqLwotCQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQotCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKLQkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JfQotCiAJc3dpdGNoIChjbWQpIHsKLQotCWNhc2UgVklESU9DR0NBUDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2Y2FwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodmNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KSk7Ci0JCXN0cm5jcHkodmNhcC0+bmFtZSwgWlJfREVWTkFNRSh6ciksIHNpemVvZih2Y2FwLT5uYW1lKS0xKTsKLQkJdmNhcC0+dHlwZSA9IFpPUkFOX1ZJRF9UWVBFOwotCi0JCXZjYXAtPmNoYW5uZWxzID0genItPmNhcmQuaW5wdXRzOwotCQl2Y2FwLT5hdWRpb3MgPSAwOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjYXAtPm1heHdpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJdmNhcC0+bWF4aGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCXZjYXAtPm1pbndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJdmNhcC0+bWluaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjaGFuID0gYXJnOwotCQlpbnQgY2hhbm5lbCA9IHZjaGFuLT5jaGFubmVsOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDSEFOIC0gY2hhbm5lbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCk7Ci0KLQkJbWVtc2V0KHZjaGFuLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NoYW5uZWwpKTsKLQkJaWYgKGNoYW5uZWwgPiB6ci0+Y2FyZC5pbnB1dHMgfHwgY2hhbm5lbCA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DR0NIQU4gb24gbm90IGV4aXN0aW5nIGNoYW5uZWwgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGNoYW5uZWwpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlzdHJjcHkodmNoYW4tPm5hbWUsIHpyLT5jYXJkLmlucHV0W2NoYW5uZWxdLm5hbWUpOwotCi0JCXZjaGFuLT50dW5lcnMgPSAwOwotCQl2Y2hhbi0+ZmxhZ3MgPSAwOwotCQl2Y2hhbi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjaGFuLT5ub3JtID0genItPm5vcm07Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2Y2hhbi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKiBSSjogdGhlIGRvY3VtZW50YXRpb24gYXQgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS5saW51eC5vcmcudWsvdjRsYXBpLnNodG1sIHNheXM6Ci0JCSAqCi0JCSAqICogIlRoZSBWSURJT0NTQ0hBTiBpb2N0bCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBzd2l0Y2hlcyB0aGUgY2FwdHVyZSB0byB0aGlzIGlucHV0LiIKLQkJICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KLQkJICogKiBUaGUgZmFtb3MgQlRUViBkcml2ZXIgaGFzIGl0IGltcGxlbWVudGVkIHdpdGggYSBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBhcmd1bWVudAotCQkgKiAqIGFuZCB3ZSBmb2xsb3cgaXQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwotCQkgKiAqCi0JCSAqICogQlRXOiB0aGlzIGlzIHRoZSBvbmx5IHdheSB0aGUgdXNlciBjYW4gc2V0IHRoZSBub3JtIQotCQkgKi8KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NTQ0hBTiAtIGNoYW5uZWw9JWQsIG5vcm09JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdmNoYW4tPmNoYW5uZWwsIHZjaGFuLT5ub3JtKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCB2Y2hhbi0+Y2hhbm5lbCkpKQotCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKLQkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgdmNoYW4tPm5vcm0pKSkKLQkJCWdvdG8gc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCXNjaGFuX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHUElDVDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljdCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHUElDVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2cGljdCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdnBpY3QtPmh1ZSA9IHpyLT5odWU7Ci0JCXZwaWN0LT5icmlnaHRuZXNzID0genItPmJyaWdodG5lc3M7Ci0JCXZwaWN0LT5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKLQkJdnBpY3QtPmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOwotCQlpZiAoZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7Ci0JCQl2cGljdC0+ZGVwdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoOwotCQkJdnBpY3QtPnBhbGV0dGUgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGU7Ci0JCX0gZWxzZSB7Ci0JCQl2cGljdC0+ZGVwdGggPSAwOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOwotCQlpbnQgaTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NQSUNUIC0gYnJpPSVkLCBodWU9JWQsIGNvbD0lZCwgY29uPSVkLCBkZXA9JWQsIHBhbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+YnJpZ2h0bmVzcywgdnBpY3QtPmh1ZSwKLQkJCXZwaWN0LT5jb2xvdXIsIHZwaWN0LT5jb250cmFzdCwgdnBpY3QtPmRlcHRoLAotCQkJdnBpY3QtPnBhbGV0dGUpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7Ci0JCQljb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmbXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKLQotCQkJaWYgKGZtdC0+cGFsZXR0ZSAhPSAtMSAmJgotCQkJICAgIGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSAmJgotCQkJICAgIGZtdC0+cGFsZXR0ZSA9PSB2cGljdC0+cGFsZXR0ZSAmJgotCQkJICAgIGZtdC0+ZGVwdGggPT0gdnBpY3QtPmRlcHRoKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ1NQSUNUIC0gSW52YWxpZCBwYWxldHRlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+cGFsZXR0ZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsIHZwaWN0KTsKLQotCQl6ci0+aHVlID0gdnBpY3QtPmh1ZTsKLQkJenItPmNvbnRyYXN0ID0gdnBpY3QtPmNvbnRyYXN0OwotCQl6ci0+c2F0dXJhdGlvbiA9IHZwaWN0LT5jb2xvdXI7Ci0JCXpyLT5icmlnaHRuZXNzID0gdnBpY3QtPmJyaWdodG5lc3M7Ci0KLQkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gJnpvcmFuX2Zvcm1hdHNbaV07Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DQ0FQVFVSRToKLQl7Ci0JCWludCAqb24gPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NDQVBUVVJFIC0gb249JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHV0lOOgotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHV0lOXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZ3aW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdndpbi0+eCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7Ci0JCXZ3aW4tPnkgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwotCQl2d2luLT53aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoOwotCQl2d2luLT5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2d2luLT5jbGlwY291bnQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTV0lOOgotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NXSU4gLSB4PSVkLCB5PSVkLCB3PSVkLCBoPSVkLCBjbGlwY291bnQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCi0JCQl2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBjb3VudCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfd2luZG93KGZpbGUsIHZ3aW4tPngsIHZ3aW4tPnksIHZ3aW4tPndpZHRoLAotCQkJCSB2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBzLAotCQkJCSB2d2luLT5jbGlwY291bnQsIE5VTEwpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dGQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmJ1ZiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJKnZidWYgPSB6ci0+YnVmZmVyOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NGQlVGIC0gYmFzZT0lcCwgdz0lZCwgaD0lZCwgZGVwdGg9JWQsIGJwbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2YnVmLT5iYXNlLCB2YnVmLT53aWR0aCwKLQkJCXZidWYtPmhlaWdodCwgdmJ1Zi0+ZGVwdGgsIHZidWYtPmJ5dGVzcGVybGluZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSB2YnVmLT5kZXB0aCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DU0ZCVUYgLSBpbnZhbGlkIGZidWYgZGVwdGggJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmRlcHRoKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCB2YnVmLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKLQkJCQkgIHZidWYtPndpZHRoLCB2YnVmLT5oZWlnaHQsCi0JCQkJICB2YnVmLT5ieXRlc3BlcmxpbmUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NZTkM6Ci0JewotCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DU1lOQyAtIGZyYW1lPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB2NGxfc3luYyhmaWxlLCAqZnJhbWUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKCFyZXMpCi0JCQl6ci0+djRsX3N5bmNfdGFpbCsrOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ01DQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX21tYXAgKnZtYXAgPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NNQ0FQVFVSRSAtIGZyYW1lPSVkLCBnZW9tPSVkeCVkLCBmbXQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdm1hcC0+ZnJhbWUsIHZtYXAtPndpZHRoLCB2bWFwLT5oZWlnaHQsCi0JCQl2bWFwLT5mb3JtYXQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gdjRsX2dyYWIoZmlsZSwgdm1hcCk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dNQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX21idWYgKnZtYnVmID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHTUJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCXZtYnVmLT5zaXplID0KLQkJICAgIGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCXZtYnVmLT5mcmFtZXMgPSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7Ci0JCWZvciAoaSA9IDA7IGkgPCB2bWJ1Zi0+ZnJhbWVzOyBpKyspIHsKLQkJCXZtYnVmLT5vZmZzZXRzW2ldID0KLQkJCSAgICBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0JdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHVU5JVDoKLQl7Ci0JCXN0cnVjdCB2aWRlb191bml0ICp2dW5pdCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHVU5JVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCXZ1bml0LT52aWRlbyA9IHpyLT52aWRlb19kZXYtPm1pbm9yOwotCQl2dW5pdC0+dmJpID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPnJhZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPmF1ZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qCi0JCSAqIFJKOiBJbiBwcmluY2lwYWwgd2UgY291bGQgc3VwcG9ydCBzdWJjYXB0dXJlcyBmb3IgVjRMIGdyYWJiaW5nLgotCQkgKiAgICAgTm90IGV2ZW4gdGhlIGZhbW91cyBCVFRWIGRyaXZlciBoYXMgdGhlbSwgaG93ZXZlci4KLQkJICogICAgIElmIHRoZXJlIHNob3VsZCBiZSBhIHN0cm9uZyBkZW1hbmQsIG9uZSBjb3VsZCBjb25zaWRlcgotCQkgKiAgICAgdG8gaW1wbGVtZW50IHRoZW0uCi0JCSAqLwotCWNhc2UgVklESU9DR0NBUFRVUkU6Ci0JewotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DR0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU0NBUFRVUkU6Ci0JewotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DU0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQogCWNhc2UgQlVaSU9DX0dfUEFSQU1TOgogCXsKIAkJc3RydWN0IHpvcmFuX3BhcmFtcyAqYnBhcmFtcyA9IGFyZzsKQEAgLTIzMTksNyArMTU1MSwxMyBAQAogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAotCQlicGFyYW1zLT5ub3JtID0genItPm5vcm07CisJCWlmICh6ci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlicGFyYW1zLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCQllbHNlIGlmICh6ci0+bm9ybSAmIFY0TDJfU1REX1BBTCkKKwkJCWJwYXJhbXMtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwkJZWxzZQorCQkJYnBhcmFtcy0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07CisKIAkJYnBhcmFtcy0+aW5wdXQgPSB6ci0+aW5wdXQ7CiAKIAkJYnBhcmFtcy0+ZGVjaW1hdGlvbiA9IGZoLT5qcGdfc2V0dGluZ3MuZGVjaW1hdGlvbjsKQEAgLTIzNTIsNyArMTU5MCw2IEBACiAKIAkJcmV0dXJuIDA7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1NfUEFSQU1TOgogCXsKQEAgLTIzOTUsMTggKzE2MzIsMTcgQEAKIAogCQkvKiBDaGVjayB0aGUgcGFyYW1zIGZpcnN0IGJlZm9yZSBvdmVyd3JpdGluZyBvdXIKIAkJICogbnRlcm5hbCB2YWx1ZXMgKi8KLQkJaWYgKHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkgeworCQlpZiAoem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MsIDApKSB7CiAJCQlyZXMgPSAtRUlOVkFMOwogCQkJZ290byBzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKIAkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCXNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46CitzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOgogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19SRVFCVUZTOgogCXsKQEAgLTI0MzAsMzggKzE2NjYsMzQgQEAKIAkJICogdGFibGVzIHRvIGEgTWF4aW11bSBvZiAyIE1CICovCiAJCWlmIChicmVxLT5zaXplID4ganBnX2J1ZnNpemUpCiAJCQlicmVxLT5zaXplID0ganBnX2J1ZnNpemU7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzICYmCi0JCSAgICBicmVxLT5zaXplID4gTUFYX0tNQUxMT0NfTUVNKQotCQkJYnJlcS0+c2l6ZSA9IE1BWF9LTUFMTE9DX01FTTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbGxyZWFkeSBhbGxvY2F0ZWRcbiIsCisJCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwogCQkJcmVzID0gLUVCVVNZOwogCQkJZ290byBqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAotCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBicmVxLT5jb3VudDsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0gYnJlcS0+c2l6ZTsKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCisJCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLworCQltYXBfbW9kZV9qcGcoZmgsIDApOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OworCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IGJyZXEtPnNpemU7CiAKLQkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKIAkJCXJlcyA9IC1FTk9NRU07CiAJCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgLSBjb3VsZAotCQkgKiBhbHNvIGJlICpfUExBWSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGhlcmUgKi8KLQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQlqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CitqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1FCVUZfQ0FQVDoKIAl7CkBAIC0yNDcxLDEyICsxNzAzLDExIEBACiAJCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19xYnVmKGZpbGUsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKKwkJcmVzID0ganBnX3FidWYoZmgsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfUUJVRl9QTEFZOgogCXsKQEAgLTI0ODYsMTIgKzE3MTcsMTEgQEAKIAkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyk7CisJCXJlcyA9IGpwZ19xYnVmKGZoLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfU1lOQzoKIAl7CkBAIC0yNTAxLDE3ICsxNzMxLDI2IEBACiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TWU5DXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfc3luYyhmaWxlLCBic3luYyk7CisKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJCWRwcmludGsoMiwgS0VSTl9XQVJOSU5HCisJCQkJIiVzOiAlcyAtIG5vdCBpbiBqcGcgY2FwdHVyZSBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCQlyZXMgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcmVzID0ganBnX3N5bmMoZmgsIGJzeW5jKTsKKwkJfQogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19HX1NUQVRVUzoKIAl7CiAJCXN0cnVjdCB6b3Jhbl9zdGF0dXMgKmJzdGF0ID0gYXJnOwotCQlpbnQgbm9ybSwgaW5wdXQsIHN0YXR1cywgcmVzID0gMDsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OworCQlpbnQgc3RhdHVzID0gMCwgcmVzID0gMDsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKIAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfR19TVEFUVVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKIApAQCAtMjUyMyw4ICsxNzYyLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKLQkJbm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwkJcm91dGUuaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKQEAgLTI1MzcsMTYyOSArMTc3NSwxMjYyIEBACiAJCQlnb3RvIGdzdGF0X3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQkvKiBzbGVlcCAxIHNlY29uZCAqLwogCQlzc2xlZXAoMSk7CiAKIAkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZzdGF0dXMpOwogCiAJCS8qIHJlc3RvcmUgcHJldmlvdXMgaW5wdXQgYW5kIG5vcm0gKi8KLQkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWdzdGF0X3VubG9ja19hbmRfcmV0dXJuOgorCQlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7Citnc3RhdF91bmxvY2tfYW5kX3JldHVybjoKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJaWYgKCFyZXMpIHsKIAkJCWJzdGF0LT5zaWduYWwgPQotCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSA/IDEgOiAwOwotCQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCisJCQkgICAgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fU0lHTkFMKSA/IDAgOiAxOworCQkJaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKQogCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCisJCQllbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwogCQkJZWxzZQogCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAKIAkJCWJzdGF0LT5jb2xvciA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSA/IDEgOiAwOworCQkJICAgIChzdGF0dXMgJiBWNEwyX0lOX1NUX05PX0NPTE9SKSA/IDAgOiAxOwogCQl9CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwotCi0JCS8qIFRoZSBuZXcgdmlkZW80bGludXgyIGNhcHR1cmUgaW50ZXJmYWNlIC0gbXVjaCBuaWNlciB0aGFuIHZpZGVvNGxpbnV4MSwgc2luY2UKLQkJICogaXQgYWxsb3dzIGZvciBpbnRlZ3JhdGluZyB0aGUgSlBFRyBjYXB0dXJpbmcgY2FsbHMgaW5zaWRlIHN0YW5kYXJkIHY0bDIKLQkJICovCi0KLQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwotCQlzdHJuY3B5KGNhcC0+Y2FyZCwgWlJfREVWTkFNRSh6ciksIHNpemVvZihjYXAtPmNhcmQpLTEpOwotCQlzdHJuY3B5KGNhcC0+ZHJpdmVyLCAiem9yYW4iLCBzaXplb2YoY2FwLT5kcml2ZXIpLTEpOwotCQlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAotCQkJIHBjaV9uYW1lKHpyLT5wY2lfZGV2KSk7Ci0JCWNhcC0+dmVyc2lvbiA9Ci0JCSAgICBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAotCQkJCSAgIFJFTEVBU0VfVkVSU0lPTik7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gWk9SQU5fVjRMMl9WSURfRkxBR1M7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOwotCQlpbnQgaW5kZXggPSBmbXQtPmluZGV4LCBudW0gPSAtMSwgaSwgZmxhZyA9IDAsIHR5cGUgPQotCQkgICAgZm10LT50eXBlOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+aW5kZXgpOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX1BMQVlCQUNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9PVkVSTEFZOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgZmxhZykKLQkJCQludW0rKzsKLQkJCWlmIChudW0gPT0gZm10LT5pbmRleCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoZm10LT5pbmRleCA8IDAgLyogbGF0ZSwgYnV0IG5vdCB0b28gbGF0ZSAqLyAgfHwKLQkJICAgIGkgPT0gTlVNX0ZPUk1BVFMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPmluZGV4ID0gaW5kZXg7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0JCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgem9yYW5fZm9ybWF0c1tpXS5uYW1lLCBzaXplb2YoZm10LT5kZXNjcmlwdGlvbiktMSk7Ci0JCWZtdC0+cGl4ZWxmb3JtYXQgPSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYzsKLQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkKLQkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgdHlwZSA9IGZtdC0+dHlwZTsKLQotCQlkcHJpbnRrKDUsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GTVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OwotCQkJZm10LT5mbXQud2luLncudG9wID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKLQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPQotCQkJICAgIGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqIDIgPgotCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCWVsc2UKLQkJCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCi0JCQkgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJfSBlbHNlIHsKLQotCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvCi0JCQkJICAgIChmaC0+anBnX3NldHRpbmdzLlZlckRjbSAqCi0JCQkJICAgICBmaC0+anBnX3NldHRpbmdzLlRtcERjbSk7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+Ci0JCQkJCQkJICAgIGpwZ19zZXR0aW5ncyk7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgVjRMMl9QSVhfRk1UX01KUEVHOwotCQkJCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9CVCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQkJCX0KLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCV9fbGUzMiBwcmludGZvcm1hdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19GTVQgLSB0eXBlPSVkLCAiLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCWRwcmludGsoMywgIng9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNudD0lZCwgbWFwPTB4JXBcbiIsCi0JCQkJZm10LT5mbXQud2luLncubGVmdCwgZm10LT5mbXQud2luLncudG9wLAotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCwKLQkJCQlmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCWZtdC0+Zm10Lndpbi5iaXRtYXApOwotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmVzID0KLQkJCSAgICBzZXR1cF93aW5kb3coZmlsZSwgZm10LT5mbXQud2luLncubGVmdCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LnRvcCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCQkgZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCQkgKHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqKQotCQkJCQkgICBmbXQtPmZtdC53aW4uY2xpcHMsCi0JCQkJCSBmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCQkgZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQotCQkJcHJpbnRmb3JtYXQgPQotCQkJICAgIF9fY3B1X3RvX2xlMzIoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQkJCWRwcmludGsoMywgInNpemU9JWR4JWQsIGZtdD0weCV4ICglNC40cylcbiIsCi0JCQkJZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0LAotCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCi0JCQkvKiB3ZSBjYW4gYmUgcmVxdWVzdGVkIHRvIGRvIEpQRUcvcmF3IHBsYXliYWNrL2NhcHR1cmUgKi8KLQkJCWlmICghCi0JCQkgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJCSAgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkJICAgICAgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09Ci0JCQkgICAgICBWNEwyX1BJWF9GTVRfTUpQRUcpKSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duIHR5cGUgJWQvMHgleCglNC40cykgY29tYmluYXRpb25cbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUsCi0JCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogaXQncyBvaywgc28gc2V0IHRoZW0gKi8KLQkJCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQotCQkJCS8qIHdlIGhlcmVieSBhYnVzZSB0aGlzIHZhcmlhYmxlIHRvIHNob3cgdGhhdAotCQkJCSAqIHdlJ3JlIGdvbm5hIGRvIG1qcGVnIGNhcHR1cmUgKi8KLQkJCQlmaC0+bWFwX21vZGUgPQotCQkJCSAgICAoZm10LT50eXBlID09Ci0JCQkJICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpID8KLQkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1JFQyA6Ci0JCQkJICAgIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOwotCQkJc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjoKLQkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQkJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KLQkJCQkJICAgIHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjKQotCQkJCQkJYnJlYWs7Ci0JCQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gdW5rbm93bi91bnN1cHBvcnRlZCBmb3JtYXQgMHgleCAoJTQuNHMpXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksCi0JCQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQsCi0JCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JCQkJICAgIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkICYmCi0JCQkJICAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9Ci0JCQkJICAgICBaT1JBTl9GUkVFKSkgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQkJcmVzID0gLUVCVVNZOwotCQkJCQlnb3RvIHNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQkJfQotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCi0JCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0KLQkJCQlpZiAoKHJlcyA9Ci0JCQkJICAgICB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAotCQkJCQkJCSAgZm10LT5mbXQucGl4LgotCQkJCQkJCSAgd2lkdGgsCi0JCQkJCQkJICBmbXQtPmZtdC5waXguCi0JCQkJCQkJICBoZWlnaHQsCi0JCQkJCQkJICAmem9yYW5fZm9ybWF0cwotCQkJCQkJCSAgW2ldKSkpCi0JCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgdGhlCi0JCQkJICogcmVzdWx0cy9taXNzaW5nIHN0dWZmICovCi0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkJCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCQlmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqCi0JCQkJCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7Ci0JCQkJaWYgKEJVWl9NQVhfSEVJR0hUIDwKLQkJCQkgICAgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9UT1A7Ci0KLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0JCQlzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5iYXNlID0genItPmJ1ZmZlci5iYXNlOwotCQlmYi0+Zm10LndpZHRoID0genItPmJ1ZmZlci53aWR0aDsKLQkJZmItPmZtdC5oZWlnaHQgPSB6ci0+YnVmZmVyLmhlaWdodDsKLQkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQkJZmItPmZtdC5waXhlbGZvcm1hdCA9Ci0JCQkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7Ci0JCX0KLQkJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5mbXQuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotCQlmYi0+Zm10LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlmYi0+ZmxhZ3MgPSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOwotCQlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GQlVGOgotCXsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmYi0+Zm10LnBpeGVsZm9ybWF0KTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ19TX0ZCVUYgLSBiYXNlPTB4JXAsIHNpemU9JWR4JWQsIGJwbD0lZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmYi0+YmFzZSwgZmItPmZtdC53aWR0aCwgZmItPmZtdC5oZWlnaHQsCi0JCQlmYi0+Zm10LmJ5dGVzcGVybGluZSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0gZmItPmZtdC5waXhlbGZvcm1hdCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfRkJVRiAtIGZvcm1hdD0weCV4ICglNC40cykgbm90IGFsbG93ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZiLT5mbXQucGl4ZWxmb3JtYXQsCi0JCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCBmYi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCi0JCQkJICBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCQkgIGZiLT5mbXQuYnl0ZXNwZXJsaW5lKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfT1ZFUkxBWToKLQl7Ci0JCWludCAqb24gPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUFJFVklFVyAtIG9uPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvbik7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBzZXR1cF9vdmVybGF5KGZpbGUsICpvbik7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1JFUUJVRlM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUkVRQlVGUyAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQotCQlpZiAocmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBvbmx5IE1FTU9SWV9NTUFQIGNhcHR1cmUgaXMgc3VwcG9ydGVkLCBub3QgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+bWVtb3J5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyAmJgotCQkgICAgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCi0JCQkvKiBjb250cm9sIHVzZXIgaW5wdXQgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgMikKLQkJCQlyZXEtPmNvdW50ID0gMjsKLQkJCWlmIChyZXEtPmNvdW50ID4gdjRsX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSB2NGxfbmJ1ZnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCi0JCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQotCQl9IGVsc2UgaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIHx8Ci0JCQkgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQotCQkJLyogd2UgbmVlZCB0byBjYWxjdWxhdGUgc2l6ZSBvdXJzZWx2ZXMgbm93ICovCi0JCQlpZiAocmVxLT5jb3VudCA8IDQpCi0JCQkJcmVxLT5jb3VudCA9IDQ7Ci0JCQlpZiAocmVxLT5jb3VudCA+IGpwZ19uYnVmcykKLQkJCQlyZXEtPmNvdW50ID0ganBnX25idWZzOwotCQkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzID0gcmVxLT5jb3VudDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCi0JCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQkJaWYgKHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQkJCWVsc2UKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKLQotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQl2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJX191MzIgdHlwZSA9IGJ1Zi0+dHlwZTsKLQkJaW50IGluZGV4ID0gYnVmLT5pbmRleCwgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1FVRVJZQlVGIC0gaW5kZXg9JWQsIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT5pbmRleCwgYnVmLT50eXBlKTsKLQotCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOwotCQlidWYtPnR5cGUgPSB0eXBlOwotCQlidWYtPmluZGV4ID0gaW5kZXg7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBidWYtPmluZGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgY29kZWNfbW9kZSwgYnVmX3R5cGU7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RQlVGIC0gdHlwZT0lZCwgaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBidWYtPmluZGV4KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZpbGUsIGJ1Zi0+aW5kZXgpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOwotCQkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzsKLQkJCX0KLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCwKLQkJCQkJCSAgY29kZWNfbW9kZSk7Ci0JCQlpZiAocmVzICE9IDApCi0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUgJiYKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkgewotCQkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgY29kZWNfbW9kZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRFFCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJaW50IHJlcyA9IDAsIGJ1Zl90eXBlLCBudW0gPSAtMTsJLyogY29tcGlsZXIgYm9ya3MgaGVyZSAoPykgKi8KLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRFFCVUYgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgJiYKLQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0KLQkJCSAgICBCVVpfU1RBVEVfRE9ORSkgewotCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCXJlcyA9IHY0bF9zeW5jKGZpbGUsIG51bSk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQllbHNlCi0JCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKLQkJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIG51bSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6Ci0JCXsKLQkJCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwotCi0JCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKQotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQllbHNlCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQkJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+Ci0JCQkJCSBqcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0KLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0ganBnX3N5bmMoZmlsZSwgJmJzKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCXJlcyA9Ci0JCQkgICAgem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgYnMuZnJhbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfRFFCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JewotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT05cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQkJCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOwotCi0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IHpyLT52NGxfcGVuZF90YWlsOwotCQkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JCQkgICAgenItPnY0bF9wZW5kX2hlYWQgIT0genItPnY0bF9wZW5kX3RhaWwpIHsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCS8qIHdoYXQgaXMgdGhlIGNvZGVjIG1vZGUgcmlnaHQgbm93PyAqLwotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKLQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9MT0NLRUQ7Ci0KLQkJCWlmICh6ci0+anBnX3F1ZV9oZWFkICE9IHpyLT5qcGdfcXVlX3RhaWwpIHsKLQkJCQkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCi0JCQkJanBlZ19zdGFydCh6cik7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU1RSRUFNT04gLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT0ZGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLwotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJLyogdW5sb2FkIGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCX0KLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPQotCQkJCSAgICBCVVpfU1RBVEVfVVNFUjsKLQkJCWZoLT52NGxfYnVmZmVycyA9IHpyLT52NGxfYnVmZmVyczsKLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0ZSRUU7Ci0KLQkJCXpyLT52NGxfZ3JhYl9zZXEgPSAwOwotCQkJenItPnY0bF9wZW5kX2hlYWQgPSB6ci0+djRsX3BlbmRfdGFpbCA9IDA7Ci0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKLQkJCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQlyZXMgPSAtRVBFUk07CS8qIHN0YXkgb2ZmIG90aGVyJ3Mgc2V0dGluZ3MhICovCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCXJlcyA9Ci0JCQkgICAganBnX3FidWYoZmlsZSwgLTEsCi0JCQkJICAgICAoZmgtPm1hcF9tb2RlID09Ci0JCQkJICAgICAgWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPwotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTIDoKLQkJCQkgICAgIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PRkYgLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gY3RybC0+aWQ7Ci0JCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKCpjdHJsKSk7Ci0JCQljdHJsLT5pZCA9IGlkOwotCQl9Ci0KLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljdHJsLT5taW5pbXVtID0gMDsKLQkJY3RybC0+bWF4aW11bSA9IDY1NTM1OwotCQljdHJsLT5zdGVwID0gMTsKLQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDMyNzY4OwotCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCWN0cmwtPnZhbHVlID0genItPmJyaWdodG5lc3M7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCWN0cmwtPnZhbHVlID0genItPmNvbnRyYXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWN0cmwtPnZhbHVlID0genItPnNhdHVyYXRpb247Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQljdHJsLT52YWx1ZSA9IHpyLT5odWU7Ci0JCQlicmVhazsKLQkJfQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDY1NTM1KSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NUUkwgLSBpbnZhbGlkIHZhbHVlICVkIGZvciBpZD0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+dmFsdWUsIGN0cmwtPmlkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXpyLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXpyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXpyLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQl6ci0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCQlwaWN0LmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJcGljdC5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKLQkJcGljdC5jb2xvdXIgPSB6ci0+c2F0dXJhdGlvbjsKLQkJcGljdC5odWUgPSB6ci0+aHVlOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgJnBpY3QpOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNU1REOgotCXsKLQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTVNURCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHN0ZC0+aW5kZXgpOwotCi0JCWlmIChzdGQtPmluZGV4IDwgMCB8fCBzdGQtPmluZGV4ID49ICh6ci0+Y2FyZC5ub3JtcyArIDEpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gc3RkLT5pbmRleDsKLQkJCW1lbXNldChzdGQsIDAsIHNpemVvZigqc3RkKSk7Ci0JCQlzdGQtPmluZGV4ID0gaWQ7Ci0JCX0KLQotCQlpZiAoc3RkLT5pbmRleCA9PSB6ci0+Y2FyZC5ub3JtcykgewotCQkJLyogaWYgd2UgaGF2ZSBhdXRvZGV0ZWN0LCAuLi4gKi8KLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLAotCQkJCQkmY2Fwcyk7Ci0JCQlpZiAoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykgewotCQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9BTEw7Ci0JCQkJc3RybmNweShzdGQtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzd2l0Y2ggKHN0ZC0+aW5kZXgpIHsKLQkJY2FzZSAwOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1BBTDsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiUEFMIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMF0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9OVFNDOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJOVFNDIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMzAwMDA7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMV0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiU0VDQU0iLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsyXS0+SHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0JCWludCBub3JtOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX1NURFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJbm9ybSA9IHpyLT5ub3JtOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKG5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCSpzdGQgPSBWNEwyX1NURF9QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkqc3RkID0gVjRMMl9TVERfU0VDQU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCWludCBub3JtID0gLTEsIHJlcyA9IDA7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfU1REIC0gbm9ybT0weCVsbHhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQotCQlpZiAoKCpzdGQgJiBWNEwyX1NURF9QQUwpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9QQUwpKQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOwotCQllbHNlIGlmICgoKnN0ZCAmIFY0TDJfU1REX05UU0MpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9OVFNDKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfU0VDQU0pICYmICEoKnN0ZCAmIH5WNEwyX1NURF9TRUNBTSkpCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZSBpZiAoKnN0ZCA9PSBWNEwyX1NURF9BTEwpCi0JCQlub3JtID0gVklERU9fTU9ERV9BVVRPOwotCQllbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfU1REIC0gaW52YWxpZCBub3JtIDB4JWxseFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCBub3JtKSkpCi0JCQlnb3RvIHNzdGRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCXNzdGRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNSU5QVVQgLSBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpbnAtPmluZGV4KTsKLQotCQlpZiAoaW5wLT5pbmRleCA8IDAgfHwgaW5wLT5pbmRleCA+PSB6ci0+Y2FyZC5pbnB1dHMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBpbnAtPmluZGV4OwotCQkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKLQkJCWlucC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCXN0cm5jcHkoaW5wLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtpbnAtPmluZGV4XS5uYW1lLAotCQkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKLQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQkJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7Ci0KLQkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19QT1dFUjsKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCQl9Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSkKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0lOUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqaW5wdXQgPSB6ci0+aW5wdXQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50ICppbnB1dCA9IGFyZywgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19JTlBVVCAtIGlucHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICppbnB1dCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgKmlucHV0KSkpCi0JCQlnb3RvIHNpbnB1dF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX291dHB1dCAqb3V0cCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTU9VVFBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG91dHAtPmluZGV4KTsKLQotCQlpZiAob3V0cC0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChvdXRwLCAwLCBzaXplb2YoKm91dHApKTsKLQkJb3V0cC0+aW5kZXggPSAwOwotCQlvdXRwLT50eXBlID0gVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZOwotCQlzdHJuY3B5KG91dHAtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKG91dHAtPm5hbWUpLTEpOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX09VVFBVVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCSpvdXRwdXQgPSAwOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX09VVFBVVCAtIG91dHB1dD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb3V0cHV0KTsKLQotCQlpZiAoKm91dHB1dCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKiBjcm9wcGluZyAoc3ViLWZyYW1lIGNhcHR1cmUpICovCi0JY2FzZSBWSURJT0NfQ1JPUENBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcGNhcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0NST1BDQVAgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3BjYXAtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wY2FwLCAwLCBzaXplb2YoKmNyb3BjYXApKTsKLQkJY3JvcGNhcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfQ1JPUENBUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBjcm9wY2FwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOwotCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IGNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7Ci0JCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOwotCWNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOwotCQlpbnQgdHlwZSA9IGNyb3AtPnR5cGUsIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19HX0NST1AgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKLQkJY3JvcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGdjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcC0+Yy50b3AgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OwotCQljcm9wLT5jLmxlZnQgPSBmaC0+anBnX3NldHRpbmdzLmltZ194OwotCQljcm9wLT5jLndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7Ci0JCWNyb3AtPmMuaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OwotCi0JZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gdHlwZT0lZCwgeD0lZCx5PSVkLHc9JWQsaD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjcm9wLT50eXBlLCBjcm9wLT5jLmxlZnQsIGNyb3AtPmMudG9wLAotCQkJY3JvcC0+Yy53aWR0aCwgY3JvcC0+Yy5oZWlnaHQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NST1AgLSBjYW5ub3QgY2hhbmdlIHNldHRpbmdzIHdoaWxlIGFjdGl2ZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBtb3ZlIGludG8gYSBmb3JtIHRoYXQgd2UgdW5kZXJzdGFuZCAqLwotCQlzZXR0aW5ncy5pbWdfeCA9IGNyb3AtPmMubGVmdDsKLQkJc2V0dGluZ3MuaW1nX3kgPSBjcm9wLT5jLnRvcDsKLQkJc2V0dGluZ3MuaW1nX3dpZHRoID0gY3JvcC0+Yy53aWR0aDsKLQkJc2V0dGluZ3MuaW1nX2hlaWdodCA9IGNyb3AtPmMuaGVpZ2h0OwotCi0JCS8qIGNoZWNrIHZhbGlkaXR5ICovCi0JCWlmICgocmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSkKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJLyogYWNjZXB0ICovCi0JCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCXNjcm9wX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0pQRUdDT01QXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKLQkJcGFyYW1zLT5BUFBuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuOwotCQltZW1jcHkocGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW4pOwotCQlwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbik7Ci0JCXBhcmFtcy0+Q09NX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKLQkJcGFyYW1zLT5qcGVnX21hcmtlcnMgPQotCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgLSBxdWFsaXR5PSVkLCBBUFBOPSVkLCBBUFBfbGVuPSVkLCBDT01fbGVuPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHBhcmFtcy0+cXVhbGl0eSwgcGFyYW1zLT5BUFBuLAotCQkJcGFyYW1zLT5BUFBfbGVuLCBwYXJhbXMtPkNPTV9sZW4pOwotCi0JCXNldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtczsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAotCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCQlmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtcyA9IHNldHRpbmdzLmpwZ19jb21wOwotCXNqcGVnY191bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZU1REOgkvKiB3aHkgaXMgdGhpcyB1c2VmdWw/ICovCi0JewotCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllfU1REIC0gc3RkPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgqc3RkID09IFY0TDJfU1REX0FMTCB8fCAqc3RkID09IFY0TDJfU1REX05UU0MgfHwKLQkJICAgICpzdGQgPT0gVjRMMl9TVERfUEFMIHx8ICgqc3RkID09IFY0TDJfU1REX1NFQ0FNICYmCi0JCQkJCSAgICAgenItPmNhcmQubm9ybXMgPT0gMykpIHsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1RSWV9GTVQgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCi0JCQkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0KLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlpZiAoZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA+IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0KLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJnNldHRpbmdzKTsKLQkJCX0gZWxzZSBpZiAoZm10LT50eXBlID09Ci0JCQkJICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJaW50IGk7Ci0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09Ci0JCQkJCSAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQotCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01JTl9IRUlHSFQ7Ci0JCQl9IGVsc2UgewotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCXRyeWZtdF91bmxvY2tfYW5kX3JldHVybjoKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlyZXR1cm4gcmVzOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IFVOS05PV04gaW9jdGwgY21kOiAweCV4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNtZCk7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwotCisJCXJldHVybiAtRUlOVkFMOwogCX0KK30KKworc3RhdGljIGludCB6b3Jhbl92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHZpZGVvX21idWYgKnZtYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGksIHJlcyA9IDA7CisKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KKwltYXBfbW9kZV9yYXcoZmgpOworCisJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZoKSkgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJdm1idWYtPnNpemUgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCXZtYnVmLT5mcmFtZXMgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsKKwlmb3IgKGkgPSAwOyBpIDwgdm1idWYtPmZyYW1lczsgaSsrKQorCQl2bWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwordjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB6b3Jhbl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7CisJc3RybmNweShjYXAtPmRyaXZlciwgInpvcmFuIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKS0xKTsKKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAorCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAorCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJICAgIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGxvbmcKLXpvcmFuX2lvY3RsKHN0cnVjdCBmaWxlICAqZmlsZSwKLQkgICAgdW5zaWduZWQgaW50ICBjbWQsCi0JICAgIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdChzdHJ1Y3Qgem9yYW4gKnpyLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQsIGludCBmbGFnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgem9yYW5fZG9faW9jdGwpOworCWludCBudW0gPSAtMSwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgZmxhZykKKwkJCW51bSsrOworCQlpZiAobnVtID09IGZtdC0+aW5kZXgpCisJCQlicmVhazsKKwl9CisJaWYgKGZtdC0+aW5kZXggPCAwIC8qIGxhdGUsIGJ1dCBub3QgdG9vIGxhdGUgKi8gIHx8IGkgPT0gTlVNX0ZPUk1BVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKKwlmbXQtPnBpeGVsZm9ybWF0ID0gem9yYW5fZm9ybWF0c1tpXS5mb3VyY2M7CisJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkKKwkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX0NBUFRVUkUpOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1fZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlyZXR1cm4gem9yYW5fZW51bV9mbXQoenIsIGYsIFpPUkFOX0ZPUk1BVF9QTEFZQkFDSyk7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlyZXR1cm4gem9yYW5fZW51bV9mbXQoenIsIGYsIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKTsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJZm10LT5mbXQucGl4LndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKKwlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShmaC0+anBnX3NldHRpbmdzLlZlckRjbSAqIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NSlBFRzsKKwlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlpZiAoZmgtPm1hcF9tb2RlICE9IFpPUkFOX01BUF9NT0RFX1JBVykKKwkJcmV0dXJuIHpvcmFuX2dfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZm10LT5mbXQucGl4LndpZHRoID0gZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKKwlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7CisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKKwkJCQkJZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7CisJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlpZiAoQlVaX01BWF9IRUlHSFQgPCAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlmbXQtPmZtdC53aW4udy5sZWZ0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKKwlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OworCWZtdC0+Zm10Lndpbi53LndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7CisJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OworCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqIDIgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWVsc2UKKwkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA8IEJVWl9NSU5fV0lEVEgpCisJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKwlpbnQgcmVzID0gMDsKKworCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KKwlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+IEJVWl9NQVhfSEVJR0hUKQorCQlzZXR0aW5ncy5UbXBEY20gPSAxOworCWVsc2UKKwkJc2V0dGluZ3MuVG1wRGNtID0gMjsKKwlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQorCQlzZXR0aW5ncy5WZXJEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuVmVyRGNtID0gMTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKKwkJc2V0dGluZ3MuSG9yRGNtID0gNDsKKwllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwllbHNlCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCWlmIChzZXR0aW5ncy5Ib3JEY20gPiAxKSB7CisJCXNldHRpbmdzLmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKKwl9IGVsc2UgeworCQlzZXR0aW5ncy5pbWdfeCA9IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJfQorCisJLyogY2hlY2sgKi8KKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMSk7CisJaWYgKHJlcykKKwkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCisJZm10LT5mbXQucGl4LndpZHRoID0gc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZzZXR0aW5ncyk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwordHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBicHA7CisJaW50IGk7CisKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIHpvcmFuX3RyeV9mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnBwID0gKHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggKyA3KSAvIDg7CisJZm10LT5mbXQucGl4LndpZHRoICY9IH4oKGJwcCA9PSAyKSA/IDEgOiAzKTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgQlVaX01JTl9XSURUSCkKKwkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCWRwcmludGsoMywgIng9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNudD0lZCwgbWFwPTB4JXBcbiIsCisJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCisJCQlmbXQtPmZtdC53aW4udy53aWR0aCwKKwkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCwKKwkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCisJCQlmbXQtPmZtdC53aW4uYml0bWFwKTsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gc2V0dXBfd2luZG93KGZoLCBmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCisJCQkgICBmbXQtPmZtdC53aW4udy53aWR0aCwgZm10LT5mbXQud2luLncuaGVpZ2h0LAorCQkJICAgKHN0cnVjdCB2NGwyX2NsaXAgX191c2VyICopZm10LT5mbXQud2luLmNsaXBzLAorCQkJICAgZm10LT5mbXQud2luLmNsaXBjb3VudCwgZm10LT5mbXQud2luLmJpdG1hcCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCV9fbGUzMiBwcmludGZvcm1hdCA9IF9fY3B1X3RvX2xlMzIoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCWludCByZXMgPSAwOworCisJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKKwkJCWZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCwKKwkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKKwkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ICogMiA+IEJVWl9NQVhfSEVJR0hUKQorCQlzZXR0aW5ncy5UbXBEY20gPSAxOworCWVsc2UKKwkJc2V0dGluZ3MuVG1wRGNtID0gMjsKKwlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQorCQlzZXR0aW5ncy5WZXJEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuVmVyRGNtID0gMTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKKwkJc2V0dGluZ3MuSG9yRGNtID0gNDsKKwllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwllbHNlCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCWlmIChzZXR0aW5ncy5Ib3JEY20gPiAxKSB7CisJCXNldHRpbmdzLmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKKwl9IGVsc2UgeworCQlzZXR0aW5ncy5pbWdfeCA9IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJfQorCisJLyogY2hlY2sgKi8KKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCk7CisJaWYgKHJlcykKKwkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogaXQncyBvaywgc28gc2V0IHRoZW0gKi8KKwlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisKKwltYXBfbW9kZV9qcGcoZmgsIGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCk7CisJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPSB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisKKwkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCisJZm10LT5mbXQucGl4LndpZHRoID0gc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisKK3NmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpOworCWludCByZXMgPSAwOworCisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiB6b3Jhbl9zX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmbXQpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCisJCQlicmVhazsKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gdW5rbm93bi91bnN1cHBvcnRlZCBmb3JtYXQgMHgleFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoKGZoLT5tYXBfbW9kZSAhPSBaT1JBTl9NQVBfTU9ERV9SQVcgJiYgZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB8fAorCSAgICBmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCisJbWFwX21vZGVfcmF3KGZoKTsKKworCXJlcyA9IHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZoLCBmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCisJCQkJICAgJnpvcmFuX2Zvcm1hdHNbaV0pOworCWlmIChyZXMpCisJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKKworCS8qIHRlbGwgdGhlIHVzZXIgdGhlIHJlc3VsdHMvbWlzc2luZyBzdHVmZiAqLworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOworCWlmIChCVVpfTUFYX0hFSUdIVCA8IChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKworc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltZW1zZXQoZmIsIDAsIHNpemVvZigqZmIpKTsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmItPmJhc2UgPSB6ci0+dmJ1Zl9iYXNlOworCWZiLT5mbXQud2lkdGggPSB6ci0+dmJ1Zl93aWR0aDsKKwlmYi0+Zm10LmhlaWdodCA9IHpyLT52YnVmX2hlaWdodDsKKwlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KQorCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7CisJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJZmItPmZtdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlmYi0+ZmxhZ3MgPSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOworCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKwlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQorCQkJYnJlYWs7CisJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19TX0ZCVUYgLSBmb3JtYXQ9MHgleCAoJTQuNHMpIG5vdCBhbGxvd2VkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZiLT5mbXQucGl4ZWxmb3JtYXQsCisJCQkoY2hhciAqKSZwcmludGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF9mYnVmZmVyKGZoLCBmYi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sIGZiLT5mbXQud2lkdGgsCisJCQkgICAgZmItPmZtdC5oZWlnaHQsIGZiLT5mbXQuYnl0ZXNwZXJsaW5lKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdW5zaWduZWQgaW50IG9uKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF9vdmVybGF5KGZoLCBvbik7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpOworCitzdGF0aWMgaW50IHpvcmFuX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoMiwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogb25seSBNRU1PUllfTU1BUCBjYXB0dXJlIGlzIHN1cHBvcnRlZCwgbm90ICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPm1lbW9yeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZXEtPmNvdW50ID09IDApCisJCXJldHVybiB6b3Jhbl9zdHJlYW1vZmYoZmlsZSwgZmgsIHJlcS0+dHlwZSk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCisJICAgIHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJLyogY29udHJvbCB1c2VyIGlucHV0ICovCisJCWlmIChyZXEtPmNvdW50IDwgMikKKwkJCXJlcS0+Y291bnQgPSAyOworCQlpZiAocmVxLT5jb3VudCA+IHY0bF9uYnVmcykKKwkJCXJlcS0+Y291bnQgPSB2NGxfbmJ1ZnM7CisKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KKwkJbWFwX21vZGVfcmF3KGZoKTsKKwkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OworCisJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIHx8CisJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KKwkJaWYgKHJlcS0+Y291bnQgPCA0KQorCQkJcmVxLT5jb3VudCA9IDQ7CisJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQorCQkJcmVxLT5jb3VudCA9IGpwZ19uYnVmczsKKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCisJCW1hcF9tb2RlX2pwZyhmaCwgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKTsKKwkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OworCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKworCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmgpKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIHVua25vd24gdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCX0KK3Y0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIGJ1Zi0+aW5kZXgpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaCwgYnVmLT5pbmRleCk7CisJCWlmIChyZXMpCisJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJiBmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQorCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCWJyZWFrOworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M7CisJCX0gZWxzZSB7CisJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M7CisJCX0KKworCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaCwgYnVmLT5pbmRleCwgY29kZWNfbW9kZSk7CisJCWlmIChyZXMgIT0gMCkKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUgJiYKKwkJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpCisJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIGNvZGVjX21vZGUpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDAsIGJ1Zl90eXBlLCBudW0gPSAtMTsJLyogY29tcGlsZXIgYm9ya3MgaGVyZSAoPykgKi8KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQludW0gPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgorCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKSB7CisJCQlyZXMgPSAtRUFHQUlOOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlyZXMgPSB2NGxfc3luYyhmaCwgbnVtKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCXpyLT52NGxfc3luY190YWlsKys7CisJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaCwgYnVmLCBudW0pOworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCXsKKwkJc3RydWN0IHpvcmFuX3N5bmMgYnM7CisKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCWVsc2UKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCW51bSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgorCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKSB7CisJCQlyZXMgPSAtRUFHQUlOOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlyZXMgPSBqcGdfc3luYyhmaCwgJmJzKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaCwgYnVmLCBicy5mcmFtZSk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0RRQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLworCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0xPQ0tFRDsKKwkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7CisKKwkJenItPnY0bF9zeW5jX3RhaWwgPSB6ci0+djRsX3BlbmRfdGFpbDsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCisJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgeworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCisJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgeworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fTE9DS0VEOworCisJCWlmICh6ci0+anBnX3F1ZV9oZWFkICE9IHpyLT5qcGdfcXVlX3RhaWwpIHsKKwkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KKwkJCWpwZWdfc3RhcnQoenIpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DX1NUUkVBTU9OIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCSAgICB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJLyogdW5sb2FkIGNhcHR1cmUgKi8KKwkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKKworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKKwkJZmgtPmJ1ZmZlcnMgPSB6ci0+djRsX2J1ZmZlcnM7CisKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisKKwkJenItPnY0bF9ncmFiX3NlcSA9IDA7CisJCXpyLT52NGxfcGVuZF9oZWFkID0genItPnY0bF9wZW5kX3RhaWwgPSAwOworCQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCXJlcyA9IGpwZ19xYnVmKGZoLCAtMSwKKwkJCSAgICAgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/CisJCQkgICAgIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyA6CisJCQkgICAgIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU1RSRUFNT0ZGIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlY29kZXJfY2FsbCh6ciwgY29yZSwgcXVlcnljdHJsLCBjdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIGdfY3RybCwgY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCisJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAorCSAgICBjdHJsLT5pZCA+IFY0TDJfQ0lEX0hVRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkqc3RkID0genItPm5vcm07CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgKnN0ZCk7CisJaWYgKHJlcykKKwkJZ290byBzc3RkX3VubG9ja19hbmRfcmV0dXJuOworCisJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJIHN0cnVjdCB2NGwyX2lucHV0ICppbnApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSB7CisJCWludCBpZCA9IGlucC0+aW5kZXg7CisJCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisJCWlucC0+aW5kZXggPSBpZDsKKwl9CisKKwlzdHJuY3B5KGlucC0+bmFtZSwgenItPmNhcmQuaW5wdXRbaW5wLT5pbmRleF0ubmFtZSwKKwkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCWlucC0+c3RkID0gVjRMMl9TVERfQUxMOworCisJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmaW5wLT5zdGF0dXMpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCAqaW5wdXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkqaW5wdXQgPSB6ci0+aW5wdXQ7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgaW5wdXQpOworCWlmIChyZXMpCisJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOworCisJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7CitzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkgIHN0cnVjdCB2NGwyX291dHB1dCAqb3V0cCkKK3sKKwlpZiAob3V0cC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQob3V0cCwgMCwgc2l6ZW9mKCpvdXRwKSk7CisJb3V0cC0+aW5kZXggPSAwOworCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7CisJc3RybmNweShvdXRwLT5uYW1lLCAiQXV0b2RldGVjdCIsIHNpemVvZihvdXRwLT5uYW1lKS0xKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgKm91dHB1dCkKK3sKKwkqb3V0cHV0ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3Nfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgb3V0cHV0KQoreworCWlmIChvdXRwdXQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogY3JvcHBpbmcgKHN1Yi1mcmFtZSBjYXB0dXJlKSAqLworc3RhdGljIGludCB6b3Jhbl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOworCisJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOworCWNyb3BjYXAtPnR5cGUgPSB0eXBlOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkgICAgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IGNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7CisJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKK2Nyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgdHlwZSA9IGNyb3AtPnR5cGUsIHJlcyA9IDA7CisKKwltZW1zZXQoY3JvcCwgMCwgc2l6ZW9mKCpjcm9wKSk7CisJY3JvcC0+dHlwZSA9IHR5cGU7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJY3JvcC0+Yy50b3AgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OworCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7CisJY3JvcC0+Yy53aWR0aCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoOworCWNyb3AtPmMuaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OworCitnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gY2Fubm90IGNoYW5nZSBzZXR0aW5ncyB3aGlsZSBhY3RpdmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiBtb3ZlIGludG8gYSBmb3JtIHRoYXQgd2UgdW5kZXJzdGFuZCAqLworCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OworCXNldHRpbmdzLmltZ195ID0gY3JvcC0+Yy50b3A7CisJc2V0dGluZ3MuaW1nX3dpZHRoID0gY3JvcC0+Yy53aWR0aDsKKwlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7CisKKwkvKiBjaGVjayB2YWxpZGl0eSAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogYWNjZXB0ICovCisJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOworCitzY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKKwlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47CisJbWVtY3B5KHBhcmFtcy0+QVBQX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7CisJcGFyYW1zLT5BUFBfbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuOworCW1lbWNweShwYXJhbXMtPkNPTV9kYXRhLAorCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAorCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4pOworCXBhcmFtcy0+Q09NX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKKwlwYXJhbXMtPmpwZWdfbWFya2VycyA9CisJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOworCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2pwZWdjb21wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7CisKKwlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwlzZXR0aW5ncy5qcGdfY29tcCA9ICpwYXJhbXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLCBLRVJOX1dBUk5JTkcKKwkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCk7CisJaWYgKHJlcykKKwkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpCisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0KKwkJCXpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKwlmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtcyA9IHNldHRpbmdzLmpwZ19jb21wOworc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtNDE5MSwxMSArMzA2MiwxMSBAQAogCQkJS0VSTl9ERUJVRwogCQkJIiVzOiAlcygpIHJhdyAtIGFjdGl2ZT0lYywgc3luY190YWlsPSVsdS8lYywgcGVuZF90YWlsPSVsdSwgcGVuZF9oZWFkPSVsdVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKLQkJCSJGQUwiW2ZoLT52NGxfYnVmZmVycy5hY3RpdmVdLCB6ci0+djRsX3N5bmNfdGFpbCwKKwkJCSJGQUwiW2ZoLT5idWZmZXJzLmFjdGl2ZV0sIHpyLT52NGxfc3luY190YWlsLAogCQkJIlVQTUQiW3pyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlXSwKIAkJCXpyLT52NGxfcGVuZF90YWlsLCB6ci0+djRsX3BlbmRfaGVhZCk7CiAJCS8qIFByb2Nlc3MgaXMgdGhlIG9uZSBjYXB0dXJpbmc/ICovCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJCSAgICAvKiBCdWZmZXIgcmVhZHkgdG8gRFFCVUY/ICovCiAJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkKIAkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CkBAIC00MjEzLDEwICszMDg0LDEwIEBACiAJCQlLRVJOX0RFQlVHCiAJCQkiJXM6ICVzKCkganBnIC0gYWN0aXZlPSVjLCBxdWVfdGFpbD0lbHUvJWMsIHF1ZV9oZWFkPSVsdSwgZG1hPSVsdS8lbHVcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCi0JCQkiRkFMIltmaC0+anBnX2J1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKKwkJCSJGQUwiW2ZoLT5idWZmZXJzLmFjdGl2ZV0sIHpyLT5qcGdfcXVlX3RhaWwsCiAJCQkiVVBNRCJbenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAogCQkJenItPmpwZ19xdWVfaGVhZCwgenItPmpwZ19kbWFfdGFpbCwgenItPmpwZ19kbWFfaGVhZCk7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkgewogCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKQogCQkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CkBAIC00MjMwLDggKzMxMDEsOCBAQAogCWRlZmF1bHQ6CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3BvbGwoKSAtIGludGVybmFsIGVycm9yLCB1bmtub3duIG1hcF9tb2RlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCQkiJXM6ICVzIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZoLT5tYXBfbW9kZSk7CiAJCXJlcyA9IFBPTExOVkFMOwogCX0KIApAQCAtNDI2NSw5OCArMzEzNiw1MyBAQAogem9yYW5fdm1fY2xvc2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1hcC0+ZmlsZTsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBtYXAtPmZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpOwogCi0JbWFwLT5jb3VudC0tOwotCWlmIChtYXAtPmNvdW50ID09IDApIHsKLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCWlmICgtLW1hcC0+Y291bnQgPiAwKQorCQlyZXR1cm47CiAKLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKE1KUEVHKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiAlcyAtIG11bm1hcCglcylcbiIsIFpSX0RFVk5BTUUoenIpLAorCQlfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwID0KLQkJCQkJICAgIE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJa2ZyZWUobWFwKTsKLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoaSA9PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJCWpwZ19xYnVmKGZpbGUsIC0xLCB6ci0+Y29kZWNfbW9kZSk7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQl9Ci0JCQkJLy9qcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDE7Ci0KLQkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKFY0TClcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCS8qIHVucXVldWUvdW5tYXAgKi8KLQkJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIFpPUkFOX0ZSRUU7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCX0KLQkJCQkvL3Y0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBtdW5tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKLQkJCWJyZWFrOwotCi0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApCisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gTlVMTDsKIAl9CisJa2ZyZWUobWFwKTsKKworCS8qIEFueSBidWZmZXJzIHN0aWxsIG1hcHBlZD8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXApCisJCQlyZXR1cm47CisKKwlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6ICVzIC0gZnJlZSAlcyBidWZmZXJzXG4iLCBaUl9ERVZOQU1FKHpyKSwKKwkJX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7CisJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCX0KKwkJdjRsX2ZidWZmZXJfZnJlZShmaCk7CisJfSBlbHNlIHsKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQlqcGdfcWJ1ZihmaCwgLTEsIHpyLT5jb2RlY19tb2RlKTsKKwkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCX0KKwkJanBnX2ZidWZmZXJfZnJlZShmaCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0gewpAQCAtNDM3OSw5MCArMzIwNSwxMDYgQEAKIAlpbnQgcmVzID0gMDsKIAogCWRwcmludGsoMywKLQkJS0VSTl9JTkZPICIlczogbW1hcCglcykgb2YgMHglMDhseC0weCUwOGx4IChzaXplPSVsdSlcbiIsCi0JCVpSX0RFVk5BTUUoenIpLAotCQlmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiTUpQRUciLAotCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7CisJCUtFUk5fSU5GTyAiJXM6ICVzKCVzKSBvZiAweCUwOGx4LTB4JTA4bHggKHNpemU9JWx1KVxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQltb2RlX25hbWUoZmgtPm1hcF9tb2RlKSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHNpemUpOwogCiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgfHwKIAkgICAgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IG1tYXAoKSAtIG5vIE1BUF9TSEFSRUQvUFJPVF97UkVBRCxXUklURX0gZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogJXMoJXMpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQogCi0JCS8qIGxvY2sgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlpZiAob2Zmc2V0ICUgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAorCSAgICBzaXplICUgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fCBmaXJzdCA8IDAgfHwKKwkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKKwkgICAgbGFzdCA+PSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiAlcyglcykgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCBvZmZzZXQsIHNpemUsCisJCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSwKKwkJCWZoLT5idWZmZXJzLm51bV9idWZmZXJzKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOworCX0KIAotCQkvKiBNYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJLyogQ2hlY2sgaWYgYW55IGJ1ZmZlcnMgYXJlIGFscmVhZHkgbWFwcGVkICovCisJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoTUpQRUcpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQkiJXM6ICVzKCVzKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCBpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJfQorCX0KIAotCQlmaXJzdCA9IG9mZnNldCAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWlmIChvZmZzZXQgJSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAotCQkgICAgc2l6ZSAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAotCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICBsYXN0ID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBtbWFwKE1KUEVHKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSwKLQkJCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KKwkvKiBtYXAgdGhlc2UgYnVmZmVycyAqLworCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXApIHsKKwkJcmVzID0gLUVOT01FTTsKKwkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwltYXAtPmZpbGUgPSBmaWxlOworCW1hcC0+Y291bnQgPSAxOworCisJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKKwl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7CiAJCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7CisJCQl0b2RvID0gc2l6ZTsKKwkJCWlmICh0b2RvID4gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUpCisJCQkJdG9kbyA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkJcGFnZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcl9waHlzOworCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlID4+IFBBR0VfU0hJRlQsCisJCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7CiAJCQkJZHByaW50aygxLAogCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJCSIlczogJXMoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCQkJcmVzID0gLUVBR0FJTjsKKwkJCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CiAJCQl9CisJCQlzaXplIC09IHRvZG87CisJCQlzdGFydCArPSB0b2RvOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWlmIChzaXplID09IDApCisJCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KKwl9IGVsc2UgewogCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKIAkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7CisJCQkgICAgIGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKIAkJCSAgICAgaisrKSB7CiAJCQkJZnJhZ2xlbiA9Ci0JCQkJICAgIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCSAgICAobGUzMl90b19jcHUoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy4KIAkJCQkgICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgfjEpIDw8IDE7CiAJCQkJdG9kbyA9IHNpemU7CiAJCQkJaWYgKHRvZG8gPiBmcmFnbGVuKQogCQkJCQl0b2RvID0gZnJhZ2xlbjsKIAkJCQlwb3MgPQotCQkJCSAgICBsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuCi0JCQkJICAgIGJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0pOworCQkJCSAgICBsZTMyX3RvX2NwdShmaC0+YnVmZmVycy4KKwkJCQkgICAgYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogal0pOwogCQkJCS8qIHNob3VsZCBqdXN0IGJlIHBvcyBvbiBpMzg2ICovCiAJCQkJcGFnZSA9IHZpcnRfdG9fcGh5cyhidXNfdG9fdmlydChwb3MpKQogCQkJCQkJCQk+PiBQQUdFX1NISUZUOwpAQCAtNDQ3MCwxMjMgKzMzMTIsODIgQEAKIAkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKIAkJCQkJZHByaW50aygxLAogCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJCSIlczogJXMoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQkJCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CiAJCQkJfQogCQkJCXNpemUgLT0gdG9kbzsKIAkJCQlzdGFydCArPSB0b2RvOwogCQkJCWlmIChzaXplID09IDApCiAJCQkJCWJyZWFrOwotCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLgogCQkJCSAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIDEpCiAJCQkJCWJyZWFrOwkvKiB3YXMgbGFzdCBmcmFnbWVudCAqLwogCQkJfQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwogCQkJaWYgKHNpemUgPT0gMCkKIAkJCQlicmVhazsKIAogCQl9Ci0JanBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCS8qIE1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlmaXJzdCA9IG9mZnNldCAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWlmIChvZmZzZXQgJSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAotCQkgICAgc2l6ZSAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAotCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICBsYXN0ID49IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBtbWFwKFY0TCkgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG9mZnNldCwgc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsCi0JCQkJZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoVjRMKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJLyogbWFwIHRoZXNlIGJ1ZmZlcnMgKHY0bF9idWZmZXJzW2ldKSAqLwotCQltYXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fbWFwcGluZyksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hcCkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJbWFwLT5maWxlID0gZmlsZTsKLQkJbWFwLT5jb3VudCA9IDE7Ci0KLQkJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOwotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7Ci0JCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOwotCi0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJdG9kbyA9IHNpemU7Ci0JCQlpZiAodG9kbyA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkKLQkJCQl0b2RvID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJcGFnZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzOwotCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlID4+IFBBR0VfU0hJRlQsCi0JCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKWkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJc2l6ZSAtPSB0b2RvOwotCQkJc3RhcnQgKz0gdG9kbzsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwotCQkJaWYgKHNpemUgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCXY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX21tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQlicmVhazsKIAl9CiAKK21tYXBfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB6b3Jhbl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAJCSAgICA9IHpvcmFuX3F1ZXJ5Y2FwLAorCS52aWRpb2NfY3JvcGNhcCAgICAgICAJCSAgICA9IHpvcmFuX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgICAgICAgCQkgICAgPSB6b3Jhbl9zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgICAgICAgCQkgICAgPSB6b3Jhbl9nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgICAJCSAgICA9IHpvcmFuX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ICAgICAgCQkgICAgPSB6b3Jhbl9nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgIAkJICAgID0gem9yYW5fc19pbnB1dCwKKwkudmlkaW9jX2VudW1fb3V0cHV0ICAgIAkJICAgID0gem9yYW5fZW51bV9vdXRwdXQsCisJLnZpZGlvY19nX291dHB1dCAgICAgCQkgICAgPSB6b3Jhbl9nX291dHB1dCwKKwkudmlkaW9jX3Nfb3V0cHV0ICAgICAJCSAgICA9IHpvcmFuX3Nfb3V0cHV0LAorCS52aWRpb2NfZ19mYnVmCQkJICAgID0gem9yYW5fZ19mYnVmLAorCS52aWRpb2Nfc19mYnVmCQkJICAgID0gem9yYW5fc19mYnVmLAorCS52aWRpb2NfZ19zdGQgCQkJICAgID0gem9yYW5fZ19zdGQsCisJLnZpZGlvY19zX3N0ZCAJCQkgICAgPSB6b3Jhbl9zX3N0ZCwKKwkudmlkaW9jX2dfanBlZ2NvbXAgCQkgICAgPSB6b3Jhbl9nX2pwZWdjb21wLAorCS52aWRpb2Nfc19qcGVnY29tcCAJCSAgICA9IHpvcmFuX3NfanBlZ2NvbXAsCisJLnZpZGlvY19vdmVybGF5CQkJICAgID0gem9yYW5fb3ZlcmxheSwKKwkudmlkaW9jX3JlcWJ1ZnMJCQkgICAgPSB6b3Jhbl9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJCSAgICA9IHpvcmFuX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCSAgICA9IHpvcmFuX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCSAgICA9IHpvcmFuX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JCSAgICA9IHpvcmFuX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCQkgICAgPSB6b3Jhbl9zdHJlYW1vZmYsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX291dCAJICAgID0gem9yYW5fZW51bV9mbXRfdmlkX291dCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdmVybGF5IAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgCQkgICAgPSB6b3Jhbl9nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX291dCAgICAgICAgICAgICAgID0gem9yYW5fZ19mbXRfdmlkX291dCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5ICAgICAgICAgICA9IHpvcmFuX2dfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgCQkgICAgPSB6b3Jhbl9zX2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX291dCAgICAgICAgICAgICAgID0gem9yYW5fc19mbXRfdmlkX291dCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5ICAgICAgICAgICA9IHpvcmFuX3NfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAJICAgID0gem9yYW5fdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0IAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9vdXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5IAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfcXVlcnljdHJsIAkJICAgID0gem9yYW5fcXVlcnljdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgIAkJICAgID0gem9yYW5fc19jdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgIAkJICAgID0gem9yYW5fZ19jdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NfZGVmYXVsdCAJCSAgICA9IHpvcmFuX2RlZmF1bHQsCisJLnZpZGlvY2dtYnVmIAkJCSAgICA9IHpvcmFuX3ZpZGlvY2dtYnVmLAorI2VuZGlmCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHpvcmFuX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSB6b3Jhbl9vcGVuLAogCS5yZWxlYXNlID0gem9yYW5fY2xvc2UsCi0JLmlvY3RsID0gem9yYW5faW9jdGwsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAogCS5yZWFkID0gem9yYW5fcmVhZCwKIAkud3JpdGUgPSB6b3Jhbl93cml0ZSwKIAkubW1hcCA9IHpvcmFuX21tYXAsCkBAIC00NTk2LDcgKzMzOTcsOSBAQAogc3RydWN0IHZpZGVvX2RldmljZSB6b3Jhbl90ZW1wbGF0ZSBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gWk9SQU5fTkFNRSwKIAkuZm9wcyA9ICZ6b3Jhbl9mb3BzLAorCS5pb2N0bF9vcHMgPSAmem9yYW5faW9jdGxfb3BzLAogCS5yZWxlYXNlID0gJnpvcmFuX3ZkZXZfcmVsZWFzZSwKKwkudHZub3JtcyA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSwKIAkubWlub3IgPSAtMQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKaW5kZXggODcwYmM1YS4uZjE0MjNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwMTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCmluZGV4IDAwZDEzMmIuLjIxYzA4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCkBAIC0zNCwxNSArMzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotLyogaW5jbHVkZXMgZm9yIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgcmVnYXJkaW5nIHZpZGVvCi0gICAjaW5jbHVkZTxsaW51eC92aWRlb2Rldi5oPiAqLwotCiAvKiBJL08gY29tbWFuZHMsIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0vLyNpbmNsdWRlPGVycm5vLmg+CiAKIC8qIHY0bCAgQVBJICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUienIzNjAxNi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwppbmRleCBjZjhiMjcxLi42MzlkZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwpAQCAtMzQsMTIgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotLyogaW5jbHVkZXMgZm9yIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgcmVnYXJkaW5nIHZpZGVvCi0gICAjaW5jbHVkZTxsaW51eC92aWRlb2Rldi5oPiAqLwotCiAvKiBJL08gY29tbWFuZHMsIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0vLyNpbmNsdWRlPGVycm5vLmg+CiAKIC8qIGhlYWRlcmZpbGUgb2YgdGhpcyBtb2R1bGUgKi8KICNpbmNsdWRlICJ6cjM2MDUwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCmluZGV4IDhlNzQwNTQuLjAwODc0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCkBAIC0zNCwxMiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUgInpyMzYwNjAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggOTMwMjM1Ni4uMjIxNDA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTk2LDYgKzk2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzYiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA0ZSksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC00MjUsNyArNDI2LDYgQEAKIHN0YXRpYyBpbnQgenIzNjR4eF92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBEUklWRVJfREVTQyk7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwpAQCAtNDM2LDggKzQzNiw2IEBACiB7CiAJaWYgKGktPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQlpLT5pbmRleCA9IDA7CiAJc3RyY3B5KGktPm5hbWUsIERSSVZFUl9ERVNDICIgQ2FtZXJhIik7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJcmV0dXJuIDA7CkBAIC01MjksMTEgKzUyNyw2IEBACiB7CiAJaWYgKGYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JZi0+aW5kZXggPSAwOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiSlBFRyIpOwogCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CkBAIC01NTAsOCArNTQzLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+Zm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSAmJgpAQCAtNTc3LDEwICs1NjgsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KCZmLT5mbXQucGl4LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9KUEVHOwogCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJZi0+Zm10LnBpeC53aWR0aCA9IGNhbS0+d2lkdGg7CkBAIC02MDIsOCArNTg5LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+Zm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9LY29uZmlnIGIvZHJpdmVycy9taXNjL2VlcHJvbS9LY29uZmlnCmluZGV4IGM3NmRmOGMuLjg5ZmVjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAKIGNvbmZpZyBFRVBST01fQVQyNAogCXRyaXN0YXRlICJJMkMgRUVQUk9NcyBmcm9tIG1vc3QgdmVuZG9ycyIKLQlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIGRyaXZlciB0byBnZXQgcmVhZC93cml0ZSBzdXBwb3J0IHRvIG1vc3QgSTJDIEVFUFJPTXMsCiAJICBhZnRlciB5b3UgY29uZmlndXJlIHRoZSBkcml2ZXIgdG8ga25vdyBhYm91dCBlYWNoIEVFUFJPTSBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCAyOTA5YmJjLi5hNjYzNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIEhaKTsKIH0KIAotc3RhdGljIGludCBtbWNpX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCB2b2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHZvaWQgKmlkKQogewogCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKQEAgLTYzMyw3ICs2MzMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbW1jaV9yZW1vdmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtbWNpX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtNzMwLDcgKzczMCw3IEBACiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCiAJfSwKIAkucHJvYmUJCT0gbW1jaV9wcm9iZSwKLQkucmVtb3ZlCQk9IG1tY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobW1jaV9yZW1vdmUpLAogCS5zdXNwZW5kCT0gbW1jaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbW1jaV9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gbW1jaV9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCBkZGEwYmU0Li5iNGE2MTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNkZWZpbmUgSEFTX0RNQQogI2VuZGlmCiAKLSNkZWZpbmUgRFJJVkVSX05BTUUgImlteC1tbWMiCisjZGVmaW5lIERSSVZFUl9OQU1FICJteGMtbW1jIgogCiAjZGVmaW5lIE1NQ19SRUdfU1RSX1NUUF9DTEsJCTB4MDAKICNkZWZpbmUgTU1DX1JFR19TVEFUVVMJCQkweDA0CkBAIC03MDcsNyArNzA3LDcgQEAKIAlob3N0LT5yZXMgPSByOwogCWhvc3QtPmlycSA9IGlycTsKIAotCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNkaGNfY2xrIik7CisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlnb3RvIG91dF9pb3VubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwppbmRleCA2N2Q3YjdmLi41NTcwODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwpAQCAtMTQ2MCwxOCArMTQ2MCwxMiBAQAogCWlmICghaG9zdC0+dmlydF9iYXNlKQogCQlnb3RvIGVycl9pb3JlbWFwOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfaWNrIik7Ci0JCWlmIChJU19FUlIoaG9zdC0+aWNsaykpCi0JCQlnb3RvIGVycl9mcmVlX21tY19ob3N0OwotCQljbGtfZW5hYmxlKGhvc3QtPmljbGspOwotCX0KKwlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CisJaWYgKElTX0VSUihob3N0LT5pY2xrKSkKKwkJZ290byBlcnJfZnJlZV9tbWNfaG9zdDsKKwljbGtfZW5hYmxlKGhvc3QtPmljbGspOwogCi0JaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19jayIpOwotCWVsc2UKLQkJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19mY2siKTsKLQorCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmZjbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoaG9zdC0+ZmNsayk7CiAJCWdvdG8gZXJyX2ZyZWVfaWNsazsKQEAgLTE1MzYsMTAgKzE1MzAsMTAgQEAKIAlpZiAoaG9zdC0+cGRhdGEtPmNsZWFudXApCiAJCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwogCi0JaWYgKGhvc3QtPmljbGsgJiYgIUlTX0VSUihob3N0LT5pY2xrKSkKLQkJY2xrX3B1dChob3N0LT5pY2xrKTsKLQlpZiAoaG9zdC0+ZmNsayAmJiAhSVNfRVJSKGhvc3QtPmZjbGspKQotCQljbGtfcHV0KGhvc3QtPmZjbGspOworCW1tY19vbWFwX2ZjbGtfZW5hYmxlKGhvc3QsIDApOworCWNsa19wdXQoaG9zdC0+ZmNsayk7CisJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CisJY2xrX3B1dChob3N0LT5pY2xrKTsKIAogCWlvdW5tYXAoaG9zdC0+dmlydF9iYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IGE2MzFjODEuLjM5MTZhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC05NTYsMTMgKzk1NiwxMyBAQAogCiAJc2VtYV9pbml0KCZob3N0LT5zZW0sIDEpOwogCi0JaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY2hzX2ljayIpOworCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmljbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoaG9zdC0+aWNsayk7CiAJCWhvc3QtPmljbGsgPSBOVUxMOwogCQlnb3RvIGVycjE7CiAJfQotCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNoc19mY2siKTsKKwlob3N0LT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihob3N0LT5mY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmZjbGspOwogCQlob3N0LT5mY2xrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IDk3MDJhZDMuLjQzMDA5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMzAsOSArMzAsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogCiAjaW5jbHVkZSAicHhhbWNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGQyZWMyNjIuLmM5NjgxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgpAQCAtMzgsNyArMzksNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUDcyMFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCmluZGV4IDZmNmEwZjYuLjhmNTdiNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KQEAgLTE5LDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY29uY2F0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCmluZGV4IGZhMTI5YzAuLjEwMDgxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKQEAgLTI2LDggKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAjZGVmaW5lIEdQSU9fTkFORF9DUwkoMTEpCiAjZGVmaW5lIEdQSU9fTkFORF9SQgkoODkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKaW5kZXggMjFmZDRmMS4uYmFkMDQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJdGhpcy0+cmVhZF9idWYgPSBteGNfbmFuZF9yZWFkX2J1ZjsKIAl0aGlzLT52ZXJpZnlfYnVmID0gbXhjX25hbmRfdmVyaWZ5X2J1ZjsKIAotCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mY19jbGsiKTsKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJuZmMiKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpCiAJCWdvdG8gZWNsazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCmluZGV4IGNjNTVjYmMuLjYxYjY5Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eF9uYW5kLmg+CiAKICNkZWZpbmUJQ0hJUF9ERUxBWV9USU1FT1VUCSgyICogSFovMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggYzJkMDEyZi4uNGJjNjkwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgVFhfQlVGRkVSUyAxNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNWZlMTdkNS4uNDQ4NDg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC0zMzUsMTEgKzMzNSwyMCBAQAogCWlmICghKG1kaW9fYnVzID0gbWRpb2J1c19hbGxvYygpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCi0Jc3Bpbl9sb2NrX2luaXQoJm1kaW9fbG9jayk7Ci0JbWRpb19yZWdzID0gKHN0cnVjdCBldGhfcmVncyBfX2lvbWVtICopSVhQNFhYX0V0aEJfQkFTRV9WSVJUOwotCV9fcmF3X3dyaXRlbChERUZBVUxUX0NPUkVfQ05UUkwsICZtZGlvX3JlZ3MtPmNvcmVfY29udHJvbCk7CisJaWYgKGNwdV9pc19peHA0M3goKSkgeworCQkvKiBJWFA0M3ggbGFja3MgTlBFLUIgYW5kIHVzZXMgTlBFLUMgZm9yIE1JSSBQSFkgYWNjZXNzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQ19FVEgpKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCW1kaW9fcmVncyA9IChzdHJ1Y3QgZXRoX3JlZ3MgX19pb21lbSAqKUlYUDRYWF9FdGhDX0JBU0VfVklSVDsKKwl9IGVsc2UgeworCQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwKSkKKwkJCXJldHVybiAtRU5PU1lTOworCQltZGlvX3JlZ3MgPSAoc3RydWN0IGV0aF9yZWdzIF9faW9tZW0gKilJWFA0WFhfRXRoQl9CQVNFX1ZJUlQ7CisJfQogCisJX19yYXdfd3JpdGVsKERFRkFVTFRfQ09SRV9DTlRSTCwgJm1kaW9fcmVncy0+Y29yZV9jb250cm9sKTsKKwlzcGluX2xvY2tfaW5pdCgmbWRpb19sb2NrKTsKIAltZGlvX2J1cy0+bmFtZSA9ICJJWFA0eHggTUlJIEJ1cyI7CiAJbWRpb19idXMtPnJlYWQgPSAmaXhwNHh4X21kaW9fcmVhZDsKIAltZGlvX2J1cy0+d3JpdGUgPSAmaXhwNHh4X21kaW9fd3JpdGU7CkBAIC0xMjUwLDkgKzEyNTksNiBAQAogc3RhdGljIGludCBfX2luaXQgZXRoX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGVycjsKLQlpZiAoIShpeHA0eHhfcmVhZF9mZWF0dXJlX2JpdHMoKSAmIElYUDRYWF9GRUFUVVJFX05QRUJfRVRIMCkpCi0JCXJldHVybiAtRU5PU1lTOwotCiAJaWYgKChlcnIgPSBpeHA0eHhfbWRpb19yZWdpc3RlcigpKSkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfZXRoX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwppbmRleCBjZDhlOThiLi4wNDliMGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKQEAgLTExMjMsOSArMTEyMyw5IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9mZWNfbWF0Y2hbXSA9IHsKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwgfSwKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiLCB9LAotCXsgLnR5cGUgPSAibmV0d29yayIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggMzE3OTRjMi4uZTc3NTMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTI0LDkgKzI0LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KIAogI2RlZmluZSBGSUNQCQlfX1JFRygweDQwODAwMDAwKSAgLyogU3RhcnQgb2YgRklDUCBhcmVhICovCiAjZGVmaW5lIElDQ1IwCQlfX1JFRygweDQwODAwMDAwKSAgLyogSUNQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IGMzMzZhMWYuLmFhMDg5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTM5OCw3ICszOTgsNyBAQAogCQkJaW50IGxlbiA9IChzdGF0dXMgJiAweGZmZmYpIC0gNDsgLyogb21pdCBDUkMgKi8KIAkJCS8qIGxlbmd0aCBzYW5pdHkgY2hlY2sgKi8KIAkJCWlmIChsZW4gPCA2MCB8fCBsZW4gPiAxNTE4KSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQgc2l6ZTogJWxkLCBzdGF0dXM9JSMybHguXG4iLAorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0IHNpemU6ICVsZCwgc3RhdHVzPSUjMkx4LlxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBwcml2LT5yeF93cml0ZSwKIAkJCQkgICAgICAgcHJpdi0+cnhfcmluZ1twcml2LT5yeF93cml0ZV0tPnN0YXR1cy5yYXcpOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggYTQ1OTUyZS4uODE0MGY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtMjM2LDggKzIzNiw3IEBACiAgKiBVc2UgYSBETUEgZm9yIFJYIGFuZCBUWCBwYWNrZXRzLgogICovCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKIHN0YXRpYyBkbWFfYWRkcl90IHJ4X2RtYWJ1ZiwgdHhfZG1hYnVmOwogc3RhdGljIGludCByeF9kbWFsZW4sIHR4X2RtYWxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggZWQ5YWU0My4uOTEyMzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkgfHxcCiAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9aWUxPTklURSkgfHxcCiAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9MSVRUTEVUT04pIHx8XAorICAgIGRlZmluZWQoQ09ORklHX01BQ0hfWllMT05JVEUyKSB8fFwKICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1ZJUEVSKQogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM0NSwzOCArMzQ2LDYgQEAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMVgwMCkKLQotI2luY2x1ZGUgPGF1MXh4eC5oPgotCi0vKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAotI2RlZmluZSBTTUNfSU9fU0hJRlQJCTAKLSNkZWZpbmUgU01DX05PV0FJVAkJMQotCi0jZGVmaW5lIFNNQ19pbncoYSwgcikJCWF1X3JlYWR3KCh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQotI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlcCi0JZG8gewlcCi0JCXVuc2lnbmVkIGxvbmcgX2EgPSAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKTsgXAotCQlpbnQgX2wgPSAobCk7IFwKLQkJdTE2ICpfcCA9ICh1MTYgKikocCk7IFwKLQkJd2hpbGUgKF9sLS0gPiAwKSBcCi0JCQkqX3ArKyA9IGF1X3JlYWR3KF9hKTsgXAotCX0gd2hpbGUoMCkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJYXVfd3JpdGV3KHYsICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQotI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJXAotCWRvIHsJXAotCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKLQkJaW50IF9sID0gKGwpOyBcCi0JCWNvbnN0IHUxNiAqX3AgPSAoY29uc3QgdTE2ICopKHApOyBcCi0JCXdoaWxlIChfbC0tID4gMCkgXAotCQkJYXVfd3JpdGV3KCpfcCsrICwgX2EpOyBcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQotCiAjZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX1ZFUlNBVElMRSkKIAogI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKQEAgLTQ5NCw4ICs0NjMsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNpZmRlZiBTTUNfaW5zbAogI3VuZGVmIFNNQ19pbnNsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggNWYzMzM0MC4uZDMxMzAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvdmEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICN1bmRlZiBQUkVGSVgKICNkZWZpbmUgUFJFRklYICJETUFSOiIKQEAgLTUwOSw2ICs1MTEsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlvbW11LT5zZXFfaWQgPSBpb21tdV9hbGxvY2F0ZWQrKzsKKwlzcHJpbnRmIChpb21tdS0+bmFtZSwgImRtYXIlZCIsIGlvbW11LT5zZXFfaWQpOwogCiAJaW9tbXUtPnJlZyA9IGlvcmVtYXAoZHJoZC0+cmVnX2Jhc2VfYWRkciwgVlREX1BBR0VfU0laRSk7CiAJaWYgKCFpb21tdS0+cmVnKSB7CkBAIC03NTEsNiArNzU0LDQyIEBACiB9CiAKIC8qCisgKiBEaXNhYmxlIFF1ZXVlZCBJbnZhbGlkYXRpb24gaW50ZXJmYWNlLgorICovCit2b2lkIGRtYXJfZGlzYWJsZV9xaShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0czsKKwljeWNsZXNfdCBzdGFydF90aW1lID0gZ2V0X2N5Y2xlcygpOworCisJaWYgKCFlY2FwX3Fpcyhpb21tdS0+ZWNhcCkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJc3RzID0gIGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfR1NUU19SRUcpOworCWlmICghKHN0cyAmIERNQV9HU1RTX1FJRVMpKQorCQlnb3RvIGVuZDsKKworCS8qCisJICogR2l2ZSBhIGNoYW5jZSB0byBIVyB0byBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnZhbGlkYXRpb24gcmVxdWVzdHMuCisJICovCisJd2hpbGUgKChyZWFkbChpb21tdS0+cmVnICsgRE1BUl9JUVRfUkVHKSAhPQorCQlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9JUUhfUkVHKSkgJiYKKwkJKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPiAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpKQorCQljcHVfcmVsYXgoKTsKKworCWlvbW11LT5nY21kICY9IH5ETUFfR0NNRF9RSUU7CisKKwl3cml0ZWwoaW9tbXUtPmdjbWQsIGlvbW11LT5yZWcgKyBETUFSX0dDTURfUkVHKTsKKworCUlPTU1VX1dBSVRfT1AoaW9tbXUsIERNQVJfR1NUU19SRUcsIHJlYWRsLAorCQkgICAgICAhKHN0cyAmIERNQV9HU1RTX1FJRVMpLCBzdHMpOworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7Cit9CisKKy8qCiAgKiBFbmFibGUgUXVldWVkIEludmFsaWRhdGlvbiBpbnRlcmZhY2UuIFRoaXMgaXMgYSBtdXN0IHRvIHN1cHBvcnQKICAqIGludGVycnVwdC1yZW1hcHBpbmcuIEFsc28gdXNlZCBieSBETUEtcmVtYXBwaW5nLCB3aGljaCByZXBsYWNlcwogICogcmVnaXN0ZXIgYmFzZWQgSU9UTEIgaW52YWxpZGF0aW9uLgpAQCAtNzcwLDIwICs4MDksMjAgQEAKIAlpZiAoaW9tbXUtPnFpKQogCQlyZXR1cm4gMDsKIAotCWlvbW11LT5xaSA9IGttYWxsb2Moc2l6ZW9mKCpxaSksIEdGUF9LRVJORUwpOworCWlvbW11LT5xaSA9IGttYWxsb2Moc2l6ZW9mKCpxaSksIEdGUF9BVE9NSUMpOwogCWlmICghaW9tbXUtPnFpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXFpID0gaW9tbXUtPnFpOwogCi0JcWktPmRlc2MgPSAodm9pZCAqKShnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpOworCXFpLT5kZXNjID0gKHZvaWQgKikoZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpKTsKIAlpZiAoIXFpLT5kZXNjKSB7CiAJCWtmcmVlKHFpKTsKIAkJaW9tbXUtPnFpID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcWktPmRlc2Nfc3RhdHVzID0ga21hbGxvYyhRSV9MRU5HVEggKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJcWktPmRlc2Nfc3RhdHVzID0ga21hbGxvYyhRSV9MRU5HVEggKiBzaXplb2YoaW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxaS0+ZGVzY19zdGF0dXMpIHsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBxaS0+ZGVzYyk7CiAJCWtmcmVlKHFpKTsKQEAgLTgxMiwzICs4NTEsMjU0IEBACiAKIAlyZXR1cm4gMDsKIH0KKworLyogaW9tbXUgaW50ZXJydXB0IGhhbmRsaW5nLiBNb3N0IHN0dWZmIGFyZSBNU0ktbGlrZS4gKi8KKworZW51bSBmYXVsdHR5cGUgeworCURNQV9SRU1BUCwKKwlJTlRSX1JFTUFQLAorCVVOS05PV04sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZG1hX3JlbWFwX2ZhdWx0X3JlYXNvbnNbXSA9Cit7CisJIlNvZnR3YXJlIiwKKwkiUHJlc2VudCBiaXQgaW4gcm9vdCBlbnRyeSBpcyBjbGVhciIsCisJIlByZXNlbnQgYml0IGluIGNvbnRleHQgZW50cnkgaXMgY2xlYXIiLAorCSJJbnZhbGlkIGNvbnRleHQgZW50cnkiLAorCSJBY2Nlc3MgYmV5b25kIE1HQVciLAorCSJQVEUgV3JpdGUgYWNjZXNzIGlzIG5vdCBzZXQiLAorCSJQVEUgUmVhZCBhY2Nlc3MgaXMgbm90IHNldCIsCisJIk5leHQgcGFnZSB0YWJsZSBwdHIgaXMgaW52YWxpZCIsCisJIlJvb3QgdGFibGUgYWRkcmVzcyBpbnZhbGlkIiwKKwkiQ29udGV4dCB0YWJsZSBwdHIgaXMgaW52YWxpZCIsCisJIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBSVFAiLAorCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gQ1RQIiwKKwkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIFBURSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaW50cl9yZW1hcF9mYXVsdF9yZWFzb25zW10gPQoreworCSJEZXRlY3RlZCByZXNlcnZlZCBmaWVsZHMgaW4gdGhlIGRlY29kZWQgaW50ZXJydXB0LXJlbWFwcGVkIHJlcXVlc3QiLAorCSJJbnRlcnJ1cHQgaW5kZXggZXhjZWVkZWQgdGhlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgc2l6ZSIsCisJIlByZXNlbnQgZmllbGQgaW4gdGhlIElSVEUgZW50cnkgaXMgY2xlYXIiLAorCSJFcnJvciBhY2Nlc3NpbmcgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBwb2ludGVkIGJ5IElSVEFfUkVHIiwKKwkiRGV0ZWN0ZWQgcmVzZXJ2ZWQgZmllbGRzIGluIHRoZSBJUlRFIGVudHJ5IiwKKwkiQmxvY2tlZCBhIGNvbXBhdGliaWxpdHkgZm9ybWF0IGludGVycnVwdCByZXF1ZXN0IiwKKwkiQmxvY2tlZCBhbiBpbnRlcnJ1cHQgcmVxdWVzdCBkdWUgdG8gc291cmNlLWlkIHZlcmlmaWNhdGlvbiBmYWlsdXJlIiwKK307CisKKyNkZWZpbmUgTUFYX0ZBVUxUX1JFQVNPTl9JRFggCShBUlJBWV9TSVpFKGZhdWx0X3JlYXNvbl9zdHJpbmdzKSAtIDEpCisKK2NvbnN0IGNoYXIgKmRtYXJfZ2V0X2ZhdWx0X3JlYXNvbih1OCBmYXVsdF9yZWFzb24sIGludCAqZmF1bHRfdHlwZSkKK3sKKwlpZiAoZmF1bHRfcmVhc29uID49IDB4MjAgJiYgKGZhdWx0X3JlYXNvbiA8PSAweDIwICsKKwkJCQkgICAgIEFSUkFZX1NJWkUoaW50cl9yZW1hcF9mYXVsdF9yZWFzb25zKSkpIHsKKwkJKmZhdWx0X3R5cGUgPSBJTlRSX1JFTUFQOworCQlyZXR1cm4gaW50cl9yZW1hcF9mYXVsdF9yZWFzb25zW2ZhdWx0X3JlYXNvbiAtIDB4MjBdOworCX0gZWxzZSBpZiAoZmF1bHRfcmVhc29uIDwgQVJSQVlfU0laRShkbWFfcmVtYXBfZmF1bHRfcmVhc29ucykpIHsKKwkJKmZhdWx0X3R5cGUgPSBETUFfUkVNQVA7CisJCXJldHVybiBkbWFfcmVtYXBfZmF1bHRfcmVhc29uc1tmYXVsdF9yZWFzb25dOworCX0gZWxzZSB7CisJCSpmYXVsdF90eXBlID0gVU5LTk9XTjsKKwkJcmV0dXJuICJVbmtub3duIjsKKwl9Cit9CisKK3ZvaWQgZG1hcl9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCS8qIHVubWFzayBpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJd3JpdGVsKDAsIGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7CisJLyogUmVhZCBhIHJlZyB0byBmb3JjZSBmbHVzaCB0aGUgcG9zdCB3cml0ZSAqLworCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworfQorCit2b2lkIGRtYXJfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOworCisJLyogbWFzayBpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJd3JpdGVsKERNQV9GRUNUTF9JTSwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCisJcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3ZvaWQgZG1hcl9tc2lfd3JpdGUoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl3cml0ZWwobXNnLT5kYXRhLCBpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKKwl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLCBpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKKwl3cml0ZWwobXNnLT5hZGRyZXNzX2hpLCBpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworfQorCit2b2lkIGRtYXJfbXNpX3JlYWQoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwltc2ctPmRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKKwltc2ctPmFkZHJlc3NfbG8gPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKKwltc2ctPmFkZHJlc3NfaGkgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworfQorCitzdGF0aWMgaW50IGRtYXJfZmF1bHRfZG9fb25lKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCB0eXBlLAorCQl1OCBmYXVsdF9yZWFzb24sIHUxNiBzb3VyY2VfaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQoreworCWNvbnN0IGNoYXIgKnJlYXNvbjsKKwlpbnQgZmF1bHRfdHlwZTsKKworCXJlYXNvbiA9IGRtYXJfZ2V0X2ZhdWx0X3JlYXNvbihmYXVsdF9yZWFzb24sICZmYXVsdF90eXBlKTsKKworCWlmIChmYXVsdF90eXBlID09IElOVFJfUkVNQVApCisJCXByaW50ayhLRVJOX0VSUiAiSU5UUi1SRU1BUDogUmVxdWVzdCBkZXZpY2UgW1slMDJ4OiUwMnguJWRdICIKKwkJICAgICAgICJmYXVsdCBpbmRleCAlbGx4XG4iCisJCQkiSU5UUi1SRU1BUDpbZmF1bHQgcmVhc29uICUwMmRdICVzXG4iLAorCQkJKHNvdXJjZV9pZCA+PiA4KSwgUENJX1NMT1Qoc291cmNlX2lkICYgMHhGRiksCisJCQlQQ0lfRlVOQyhzb3VyY2VfaWQgJiAweEZGKSwgYWRkciA+PiA0OCwKKwkJCWZhdWx0X3JlYXNvbiwgcmVhc29uKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkRNQVI6WyVzXSBSZXF1ZXN0IGRldmljZSBbJTAyeDolMDJ4LiVkXSAiCisJCSAgICAgICAiZmF1bHQgYWRkciAlbGx4IFxuIgorCQkgICAgICAgIkRNQVI6W2ZhdWx0IHJlYXNvbiAlMDJkXSAlc1xuIiwKKwkJICAgICAgICh0eXBlID8gIkRNQSBSZWFkIiA6ICJETUEgV3JpdGUiKSwKKwkJICAgICAgIChzb3VyY2VfaWQgPj4gOCksIFBDSV9TTE9UKHNvdXJjZV9pZCAmIDB4RkYpLAorCQkgICAgICAgUENJX0ZVTkMoc291cmNlX2lkICYgMHhGRiksIGFkZHIsIGZhdWx0X3JlYXNvbiwgcmVhc29uKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKDE2KQoraXJxcmV0dXJuX3QgZG1hcl9mYXVsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRldl9pZDsKKwlpbnQgcmVnLCBmYXVsdF9pbmRleDsKKwl1MzIgZmF1bHRfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJZmF1bHRfc3RhdHVzID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOworCWlmIChmYXVsdF9zdGF0dXMpCisJCXByaW50ayhLRVJOX0VSUiAiRFJIRDogaGFuZGxpbmcgZmF1bHQgc3RhdHVzIHJlZyAleFxuIiwKKwkJICAgICAgIGZhdWx0X3N0YXR1cyk7CisKKwkvKiBUQkQ6IGlnbm9yZSBhZHZhbmNlZCBmYXVsdCBsb2cgY3VycmVudGx5ICovCisJaWYgKCEoZmF1bHRfc3RhdHVzICYgRE1BX0ZTVFNfUFBGKSkKKwkJZ290byBjbGVhcl9yZXN0OworCisJZmF1bHRfaW5kZXggPSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgoZmF1bHRfc3RhdHVzKTsKKwlyZWcgPSBjYXBfZmF1bHRfcmVnX29mZnNldChpb21tdS0+Y2FwKTsKKwl3aGlsZSAoMSkgeworCQl1OCBmYXVsdF9yZWFzb247CisJCXUxNiBzb3VyY2VfaWQ7CisJCXU2NCBndWVzdF9hZGRyOworCQlpbnQgdHlwZTsKKwkJdTMyIGRhdGE7CisKKwkJLyogaGlnaGVzdCAzMiBiaXRzICovCisJCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKKwkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDEyKTsKKwkJaWYgKCEoZGF0YSAmIERNQV9GUkNEX0YpKQorCQkJYnJlYWs7CisKKwkJZmF1bHRfcmVhc29uID0gZG1hX2ZyY2RfZmF1bHRfcmVhc29uKGRhdGEpOworCQl0eXBlID0gZG1hX2ZyY2RfdHlwZShkYXRhKTsKKworCQlkYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIHJlZyArCisJCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyA4KTsKKwkJc291cmNlX2lkID0gZG1hX2ZyY2Rfc291cmNlX2lkKGRhdGEpOworCisJCWd1ZXN0X2FkZHIgPSBkbWFyX3JlYWRxKGlvbW11LT5yZWcgKyByZWcgKworCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOKTsKKwkJZ3Vlc3RfYWRkciA9IGRtYV9mcmNkX3BhZ2VfYWRkcihndWVzdF9hZGRyKTsKKwkJLyogY2xlYXIgdGhlIGZhdWx0ICovCisJCXdyaXRlbChETUFfRlJDRF9GLCBpb21tdS0+cmVnICsgcmVnICsKKwkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKworCQlkbWFyX2ZhdWx0X2RvX29uZShpb21tdSwgdHlwZSwgZmF1bHRfcmVhc29uLAorCQkJCXNvdXJjZV9pZCwgZ3Vlc3RfYWRkcik7CisKKwkJZmF1bHRfaW5kZXgrKzsKKwkJaWYgKGZhdWx0X2luZGV4ID4gY2FwX251bV9mYXVsdF9yZWdzKGlvbW11LT5jYXApKQorCQkJZmF1bHRfaW5kZXggPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCX0KK2NsZWFyX3Jlc3Q6CisJLyogY2xlYXIgYWxsIHRoZSBvdGhlciBmYXVsdHMgKi8KKwlmYXVsdF9zdGF0dXMgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisJd3JpdGVsKGZhdWx0X3N0YXR1cywgaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IGRtYXJfc2V0X2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQoreworCWludCBpcnEsIHJldDsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIGZhdWx0IGludGVycnVwdCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLgorCSAqLworCWlmIChpb21tdS0+aXJxKQorCQlyZXR1cm4gMDsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoIWlycSkgeworCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBubyBmcmVlIHZlY3RvcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzZXRfaXJxX2RhdGEoaXJxLCBpb21tdSk7CisJaW9tbXUtPmlycSA9IGlycTsKKworCXJldCA9IGFyY2hfc2V0dXBfZG1hcl9tc2koaXJxKTsKKwlpZiAocmV0KSB7CisJCXNldF9pcnFfZGF0YShpcnEsIE5VTEwpOworCQlpb21tdS0+aXJxID0gMDsKKwkJZGVzdHJveV9pcnEoaXJxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBkbWFyX2ZhdWx0LCAwLCBpb21tdS0+bmFtZSwgaW9tbXUpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IGNhbid0IHJlcXVlc3QgaXJxXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pbml0IGVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKHZvaWQpCit7CisJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOworCisJLyoKKwkgKiBFbmFibGUgZmF1bHQgY29udHJvbCBpbnRlcnJ1cHQuCisJICovCisJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRyaGQtPmlvbW11OworCQlyZXQgPSBkbWFyX3NldF9pbnRlcnJ1cHQoaW9tbXUpOworCisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRFJIRCAlTHg6IGZhaWxlZCB0byBlbmFibGUgZmF1bHQsICIKKwkJCSAgICAgICAiIGludGVycnVwdCwgcmV0ICVkXG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZHJoZC0+cmVnX2Jhc2VfYWRkciwgcmV0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggZTdkMDU4YS4uNDk0MDJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0xMDA0LDE5NCArMTAwNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGlvbW11IGludGVycnVwdCBoYW5kbGluZy4gTW9zdCBzdHVmZiBhcmUgTVNJLWxpa2UuICovCi0KLXN0YXRpYyBjb25zdCBjaGFyICpmYXVsdF9yZWFzb25fc3RyaW5nc1tdID0KLXsKLQkiU29mdHdhcmUiLAotCSJQcmVzZW50IGJpdCBpbiByb290IGVudHJ5IGlzIGNsZWFyIiwKLQkiUHJlc2VudCBiaXQgaW4gY29udGV4dCBlbnRyeSBpcyBjbGVhciIsCi0JIkludmFsaWQgY29udGV4dCBlbnRyeSIsCi0JIkFjY2VzcyBiZXlvbmQgTUdBVyIsCi0JIlBURSBXcml0ZSBhY2Nlc3MgaXMgbm90IHNldCIsCi0JIlBURSBSZWFkIGFjY2VzcyBpcyBub3Qgc2V0IiwKLQkiTmV4dCBwYWdlIHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKLQkiUm9vdCB0YWJsZSBhZGRyZXNzIGludmFsaWQiLAotCSJDb250ZXh0IHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKLQkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIFJUUCIsCi0JIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBDVFAiLAotCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUFRFIiwKLX07Ci0jZGVmaW5lIE1BWF9GQVVMVF9SRUFTT05fSURYIAkoQVJSQVlfU0laRShmYXVsdF9yZWFzb25fc3RyaW5ncykgLSAxKQotCi1jb25zdCBjaGFyICpkbWFyX2dldF9mYXVsdF9yZWFzb24odTggZmF1bHRfcmVhc29uKQotewotCWlmIChmYXVsdF9yZWFzb24gPiBNQVhfRkFVTFRfUkVBU09OX0lEWCkKLQkJcmV0dXJuICJVbmtub3duIjsKLQllbHNlCi0JCXJldHVybiBmYXVsdF9yZWFzb25fc3RyaW5nc1tmYXVsdF9yZWFzb25dOwotfQotCi12b2lkIGRtYXJfbXNpX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQkvKiB1bm1hc2sgaXQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCXdyaXRlbCgwLCBpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOwotCS8qIFJlYWQgYSByZWcgdG8gZm9yY2UgZmx1c2ggdGhlIHBvc3Qgd3JpdGUgKi8KLQlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLX0KLQotdm9pZCBkbWFyX21zaV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKLQotCS8qIG1hc2sgaXQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCXdyaXRlbChETUFfRkVDVExfSU0sIGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0JLyogUmVhZCBhIHJlZyB0byBmb3JjZSBmbHVzaCB0aGUgcG9zdCB3cml0ZSAqLwotCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi12b2lkIGRtYXJfbXNpX3dyaXRlKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0Jd3JpdGVsKG1zZy0+ZGF0YSwgaW9tbXUtPnJlZyArIERNQVJfRkVEQVRBX1JFRyk7Ci0Jd3JpdGVsKG1zZy0+YWRkcmVzc19sbywgaW9tbXUtPnJlZyArIERNQVJfRkVBRERSX1JFRyk7Ci0Jd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwgaW9tbXUtPnJlZyArIERNQVJfRkVVQUREUl9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLX0KLQotdm9pZCBkbWFyX21zaV9yZWFkKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JbXNnLT5kYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVEQVRBX1JFRyk7Ci0JbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVBRERSX1JFRyk7Ci0JbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVVQUREUl9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLX0KLQotc3RhdGljIGludCBpb21tdV9wYWdlX2ZhdWx0X2RvX29uZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgdHlwZSwKLQkJdTggZmF1bHRfcmVhc29uLCB1MTYgc291cmNlX2lkLCB1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKLXsKLQljb25zdCBjaGFyICpyZWFzb247Ci0KLQlyZWFzb24gPSBkbWFyX2dldF9mYXVsdF9yZWFzb24oZmF1bHRfcmVhc29uKTsKLQotCXByaW50ayhLRVJOX0VSUgotCQkiRE1BUjpbJXNdIFJlcXVlc3QgZGV2aWNlIFslMDJ4OiUwMnguJWRdICIKLQkJImZhdWx0IGFkZHIgJWxseCBcbiIKLQkJIkRNQVI6W2ZhdWx0IHJlYXNvbiAlMDJkXSAlc1xuIiwKLQkJKHR5cGUgPyAiRE1BIFJlYWQiIDogIkRNQSBXcml0ZSIpLAotCQkoc291cmNlX2lkID4+IDgpLCBQQ0lfU0xPVChzb3VyY2VfaWQgJiAweEZGKSwKLQkJUENJX0ZVTkMoc291cmNlX2lkICYgMHhGRiksIGFkZHIsIGZhdWx0X3JlYXNvbiwgcmVhc29uKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKDE2KQotc3RhdGljIGlycXJldHVybl90IGlvbW11X3BhZ2VfZmF1bHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkZXZfaWQ7Ci0JaW50IHJlZywgZmF1bHRfaW5kZXg7Ci0JdTMyIGZhdWx0X3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKLQotCS8qIFRCRDogaWdub3JlIGFkdmFuY2VkIGZhdWx0IGxvZyBjdXJyZW50bHkgKi8KLQlpZiAoIShmYXVsdF9zdGF0dXMgJiBETUFfRlNUU19QUEYpKQotCQlnb3RvIGNsZWFyX292ZXJmbG93OwotCi0JZmF1bHRfaW5kZXggPSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgoZmF1bHRfc3RhdHVzKTsKLQlyZWcgPSBjYXBfZmF1bHRfcmVnX29mZnNldChpb21tdS0+Y2FwKTsKLQl3aGlsZSAoMSkgewotCQl1OCBmYXVsdF9yZWFzb247Ci0JCXUxNiBzb3VyY2VfaWQ7Ci0JCXU2NCBndWVzdF9hZGRyOwotCQlpbnQgdHlwZTsKLQkJdTMyIGRhdGE7Ci0KLQkJLyogaGlnaGVzdCAzMiBiaXRzICovCi0JCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKLQkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDEyKTsKLQkJaWYgKCEoZGF0YSAmIERNQV9GUkNEX0YpKQotCQkJYnJlYWs7Ci0KLQkJZmF1bHRfcmVhc29uID0gZG1hX2ZyY2RfZmF1bHRfcmVhc29uKGRhdGEpOwotCQl0eXBlID0gZG1hX2ZyY2RfdHlwZShkYXRhKTsKLQotCQlkYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIHJlZyArCi0JCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyA4KTsKLQkJc291cmNlX2lkID0gZG1hX2ZyY2Rfc291cmNlX2lkKGRhdGEpOwotCi0JCWd1ZXN0X2FkZHIgPSBkbWFyX3JlYWRxKGlvbW11LT5yZWcgKyByZWcgKwotCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOKTsKLQkJZ3Vlc3RfYWRkciA9IGRtYV9mcmNkX3BhZ2VfYWRkcihndWVzdF9hZGRyKTsKLQkJLyogY2xlYXIgdGhlIGZhdWx0ICovCi0JCXdyaXRlbChETUFfRlJDRF9GLCBpb21tdS0+cmVnICsgcmVnICsKLQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQotCQlpb21tdV9wYWdlX2ZhdWx0X2RvX29uZShpb21tdSwgdHlwZSwgZmF1bHRfcmVhc29uLAotCQkJCXNvdXJjZV9pZCwgZ3Vlc3RfYWRkcik7Ci0KLQkJZmF1bHRfaW5kZXgrKzsKLQkJaWYgKGZhdWx0X2luZGV4ID4gY2FwX251bV9mYXVsdF9yZWdzKGlvbW11LT5jYXApKQotCQkJZmF1bHRfaW5kZXggPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCX0KLWNsZWFyX292ZXJmbG93OgotCS8qIGNsZWFyIHByaW1hcnkgZmF1bHQgb3ZlcmZsb3cgKi8KLQlmYXVsdF9zdGF0dXMgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7Ci0JaWYgKGZhdWx0X3N0YXR1cyAmIERNQV9GU1RTX1BGTykKLQkJd3JpdGVsKERNQV9GU1RTX1BGTywgaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IGRtYXJfc2V0X2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQotewotCWludCBpcnEsIHJldDsKLQotCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoIWlycSkgewotCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBubyBmcmVlIHZlY3RvcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzZXRfaXJxX2RhdGEoaXJxLCBpb21tdSk7Ci0JaW9tbXUtPmlycSA9IGlycTsKLQotCXJldCA9IGFyY2hfc2V0dXBfZG1hcl9tc2koaXJxKTsKLQlpZiAocmV0KSB7Ci0JCXNldF9pcnFfZGF0YShpcnEsIE5VTEwpOwotCQlpb21tdS0+aXJxID0gMDsKLQkJZGVzdHJveV9pcnEoaXJxKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogRm9yY2UgZmF1bHQgcmVnaXN0ZXIgaXMgY2xlYXJlZCAqLwotCWlvbW11X3BhZ2VfZmF1bHQoaXJxLCBpb21tdSk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlvbW11X3BhZ2VfZmF1bHQsIDAsIGlvbW11LT5uYW1lLCBpb21tdSk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogY2FuJ3QgcmVxdWVzdCBpcnFcbiIpOwotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBpbnQgaW9tbXVfaW5pdF9kb21haW5zKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCiB7CkBAIC0xOTg3LDcgKzE3OTksNyBAQAogCXN0cnVjdCBkbWFyX3JtcnJfdW5pdCAqcm1ycjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwotCWludCBpLCByZXQsIHVuaXQgPSAwOworCWludCBpLCByZXQ7CiAKIAkvKgogCSAqIGZvciBlYWNoIGRyaGQKQEAgLTIwNDMsMTEgKzE4NTUsNDAgQEAKIAkJfQogCX0KIAorCS8qCisJICogU3RhcnQgZnJvbSB0aGUgc2FuZSBpb21tdSBoYXJkd2FyZSBzdGF0ZS4KKwkgKi8KIAlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgewogCQlpZiAoZHJoZC0+aWdub3JlZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlvbW11ID0gZHJoZC0+aW9tbXU7CisKKwkJLyoKKwkJICogSWYgdGhlIHF1ZXVlZCBpbnZhbGlkYXRpb24gaXMgYWxyZWFkeSBpbml0aWFsaXplZCBieSB1cworCQkgKiAoZm9yIGV4YW1wbGUsIHdoaWxlIGVuYWJsaW5nIGludGVycnVwdC1yZW1hcHBpbmcpIHRoZW4KKwkJICogd2UgZ290IHRoZSB0aGluZ3MgYWxyZWFkeSByb2xsaW5nIGZyb20gYSBzYW5lIHN0YXRlLgorCQkgKi8KKwkJaWYgKGlvbW11LT5xaSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENsZWFyIGFueSBwcmV2aW91cyBmYXVsdHMuCisJCSAqLworCQlkbWFyX2ZhdWx0KC0xLCBpb21tdSk7CisJCS8qCisJCSAqIERpc2FibGUgcXVldWVkIGludmFsaWRhdGlvbiBpZiBzdXBwb3J0ZWQgYW5kIGFscmVhZHkgZW5hYmxlZAorCQkgKiBiZWZvcmUgT1MgaGFuZG92ZXIuCisJCSAqLworCQlkbWFyX2Rpc2FibGVfcWkoaW9tbXUpOworCX0KKworCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CisJCWlmIChkcmhkLT5pZ25vcmVkKQorCQkJY29udGludWU7CisKKwkJaW9tbXUgPSBkcmhkLT5pb21tdTsKKwogCQlpZiAoZG1hcl9lbmFibGVfcWkoaW9tbXUpKSB7CiAJCQkvKgogCQkJICogUXVldWVkIEludmFsaWRhdGUgbm90IGVuYWJsZWQsIHVzZSBSZWdpc3RlciBCYXNlZApAQCAtMjEwOSw3ICsxOTUwLDYgQEAKIAkJaWYgKGRyaGQtPmlnbm9yZWQpCiAJCQljb250aW51ZTsKIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKLQkJc3ByaW50ZiAoaW9tbXUtPm5hbWUsICJkbWFyJWQiLCB1bml0KyspOwogCiAJCWlvbW11X2ZsdXNoX3dyaXRlX2J1ZmZlcihpb21tdSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDlkMDdhMDUuLmIwNDFhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMTE3LDIxICsxMTcsMjIgQEAKIHsKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZW50cnkpCiAJCXJldHVybiAtMTsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAJKmVudHJ5ID0gKihpcnFfaW9tbXUtPmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MSw2ICsxNDIsNyBAQAogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCXUxNiBpbmRleCwgc3RhcnRfaW5kZXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAlpZiAoIWNvdW50KQpAQCAtMTcwLDcgKzE3Miw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJZG8gewogCQlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7IGkrKykKIAkJCWlmICAodGFibGUtPmJhc2VbaV0ucHJlc2VudCkKQEAgLTE4Miw3ICsxODQsNyBAQAogCQlpbmRleCA9IChpbmRleCArIGNvdW50KSAlIElOVFJfUkVNQVBfVEFCTEVfRU5UUklFUzsKIAogCQlpZiAoaW5kZXggPT0gc3RhcnRfaW5kZXgpIHsKLQkJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgYW4gSVJURVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTE5Myw3ICsxOTUsNyBAQAogCiAJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXVfYWxsb2MoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDMsNyArMjA1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gbWFzazsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaW5kZXg7CiB9CkBAIC0yMjMsMzAgKzIyNSwzMiBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAkqc3ViX2hhbmRsZSA9IGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleDsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIH0KIAogaW50IHNldF9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgsIHUxNiBzdWJoYW5kbGUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CiAKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yNTYsNyArMjYwLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSBzdWJoYW5kbGU7CiAJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY0LDExICsyNjgsMTIgQEAKIGludCBjbGVhcl9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzcsNyArMjgyLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV8yX2lvbW11KGlycSktPmlydGVfbWFzayA9IDA7CiAKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksMTEgKzI5NCwxMiBAQAogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDIsMTEgKzMwOCwxMSBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWlydGUgPSAmaW9tbXUtPmlyX3RhYmxlLT5iYXNlW2luZGV4XTsKIAotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKWlydGUsIGlydGVfbW9kaWZpZWQtPmxvdyB8ICgxIDw8IDEpKTsKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cpOwogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGlydGUsIHNpemVvZigqaXJ0ZSkpOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCAwKTsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzE3LDExICszMjMsMTIgQEAKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMzMCw3ICszMzcsNyBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7Ci0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTM2MywxMSArMzcwLDEyIEBACiAJc3RydWN0IGlydGUgKmlydGU7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM3OCw3ICszODYsNyBAQAogCiAJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKIAkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQotCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7CisJCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikoaXJ0ZSArIGkpLCAwKTsKIAkJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJfQogCkBAIC0zODcsNyArMzk1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC00MzksMTIgKzQ0NywxMiBAQAogCXN0cnVjdCBwYWdlICpwYWdlczsKIAogCWlyX3RhYmxlID0gaW9tbXUtPmlyX3RhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX3RhYmxlKSwKLQkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJCQkJICAgICBHRlBfQVRPTUlDKTsKIAogCWlmICghaW9tbXUtPmlyX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVFJfUkVNQVBfUEFHRV9PUkRFUik7CisJcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgSU5UUl9SRU1BUF9QQUdFX09SREVSKTsKIAogCWlmICghcGFnZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgb2Ygb3JkZXIgJWRcbiIsCkBAIC00NTksMTEgKzQ2Nyw1NSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRGlzYWJsZSBJbnRlcnJ1cHQgUmVtYXBwaW5nLgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2ludHJfcmVtYXBwaW5nKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RzOworCisJaWYgKCFlY2FwX2lyX3N1cHBvcnQoaW9tbXUtPmVjYXApKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCXN0cyA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfR1NUU19SRUcpOworCWlmICghKHN0cyAmIERNQV9HU1RTX0lSRVMpKQorCQlnb3RvIGVuZDsKKworCWlvbW11LT5nY21kICY9IH5ETUFfR0NNRF9JUkU7CisJd3JpdGVsKGlvbW11LT5nY21kLCBpb21tdS0+cmVnICsgRE1BUl9HQ01EX1JFRyk7CisKKwlJT01NVV9XQUlUX09QKGlvbW11LCBETUFSX0dTVFNfUkVHLAorCQkgICAgICByZWFkbCwgIShzdHMgJiBETUFfR1NUU19JUkVTKSwgc3RzKTsKKworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7Cit9CisKIGludCBfX2luaXQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCBlaW0pCiB7CiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCWludCBzZXR1cCA9IDA7CiAKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZHJoZC0+aW9tbXU7CisKKwkJLyoKKwkJICogQ2xlYXIgcHJldmlvdXMgZmF1bHRzLgorCQkgKi8KKwkJZG1hcl9mYXVsdCgtMSwgaW9tbXUpOworCisJCS8qCisJCSAqIERpc2FibGUgaW50ciByZW1hcHBpbmcgYW5kIHF1ZXVlZCBpbnZhbGlkYXRpb24sIGlmIGFscmVhZHkKKwkJICogZW5hYmxlZCBwcmlvciB0byBPUyBoYW5kb3Zlci4KKwkJICovCisJCWRpc2FibGVfaW50cl9yZW1hcHBpbmcoaW9tbXUpOworCisJCWRtYXJfZGlzYWJsZV9xaShpb21tdSk7CisJfQorCiAJLyoKIAkgKiBjaGVjayBmb3IgdGhlIEludGVycnVwdC1yZW1hcHBpbmcgc3VwcG9ydAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYmI5ZGRiOS4uYzQ5YTcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKQEAgLTM5LDYgKzM4LDQ0IEBACiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogI2luY2x1ZGUgInB4YTJ4eF9iYXNlLmgiCiAKKy8qCisgKiBQZXJzb25hbCBDb21wdXRlciBNZW1vcnkgQ2FyZCBJbnRlcm5hdGlvbmFsIEFzc29jaWF0aW9uIChQQ01DSUEpIHNvY2tldHMKKyAqLworCisjZGVmaW5lIFBDTUNJQVBydFNwCTB4MDQwMDAwMDAJLyogUENNQ0lBIFBhcnRpdGlvbiBTcGFjZSBbYnl0ZV0gICAqLworI2RlZmluZSBQQ01DSUFTcAkoNCpQQ01DSUFQcnRTcCkJLyogUENNQ0lBIFNwYWNlIFtieXRlXSAgICAgICAgICAgICAqLworI2RlZmluZSBQQ01DSUFJT1NwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBJL08gU3BhY2UgW2J5dGVdICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBQXR0clNwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICAgKi8KKyNkZWZpbmUgUENNQ0lBTWVtU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgICAqLworCisjZGVmaW5lIFBDTUNJQTBTcAlQQ01DSUFTcAkvKiBQQ01DSUEgMCBTcGFjZSBbYnl0ZV0gICAgICAgICAgICovCisjZGVmaW5lIFBDTUNJQTBJT1NwCVBDTUNJQUlPU3AJLyogUENNQ0lBIDAgSS9PIFNwYWNlIFtieXRlXSAgICAgICAqLworI2RlZmluZSBQQ01DSUEwQXR0clNwCVBDTUNJQUF0dHJTcAkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICovCisjZGVmaW5lIFBDTUNJQTBNZW1TcAlQQ01DSUFNZW1TcAkvKiBQQ01DSUEgMCBNZW1vcnkgU3BhY2UgW2J5dGVdICAgICovCisKKyNkZWZpbmUgUENNQ0lBMVNwCVBDTUNJQVNwCS8qIFBDTUNJQSAxIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMUlPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMSBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCisjZGVmaW5lIFBDTUNJQTFBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAxIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KKyNkZWZpbmUgUENNQ0lBMU1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAxIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KKworI2RlZmluZSBfUENNQ0lBKE5iKQkJCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDB4MjAwMDAwMDAgKyAoTmIpICogUENNQ0lBU3ApCisjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQShOYikJLyogUENNQ0lBIEkvTyBbMC4uMV0gICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBQXR0cihOYikJCQkvKiBQQ01DSUEgQXR0cmlidXRlIFswLi4xXSAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDIgKiBQQ01DSUFQcnRTcCkKKyNkZWZpbmUgX1BDTUNJQU1lbShOYikJCQkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDMgKiBQQ01DSUFQcnRTcCkKKworI2RlZmluZSBfUENNQ0lBMAlfUENNQ0lBKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8oMCkJLyogUENNQ0lBIDAgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMEF0dHIJX1BDTUNJQUF0dHIoMCkJLyogUENNQ0lBIDAgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBME1lbQlfUENNQ0lBTWVtKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBKDEpCS8qIFBDTUNJQSAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTFJTwlfUENNQ0lBSU8oMSkJLyogUENNQ0lBIDEgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMUF0dHIJX1BDTUNJQUF0dHIoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtKDEpCS8qIFBDTUNJQSAxIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKwogCiAjZGVmaW5lIE1DWFhfU0VUVVBfTUFTSyAgICAgKDB4N2YpCiAjZGVmaW5lIE1DWFhfQVNTVF9NQVNLICAgICAgKDB4MWYpCkBAIC0xNzcsMjkgKzIxNCw3MyBAQAogCU1FQ1IgfD0gTUVDUl9DSVQ7CiAKIAkvKiBTZXQgTUVDUjpOT1MgKE51bWJlciBPZiBTb2NrZXRzKSAqLwotCWlmIChvcHMtPm5yID4gMSB8fCBtYWNoaW5lX2lzX3ZpcGVyKCkpCisJaWYgKChvcHMtPmZpcnN0ICsgb3BzLT5ucikgPiAxIHx8IG1hY2hpbmVfaXNfdmlwZXIoKSkKIAkJTUVDUiB8PSBNRUNSX05PUzsKIAllbHNlCiAJCU1FQ1IgJj0gfk1FQ1JfTk9TOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7CisJIlBDTUNJQSBzb2NrZXQgMCIsCisJIlBDTUNJQSBzb2NrZXQgMSIsCit9OworCisjZGVmaW5lIFNLVF9ERVZfSU5GT19TSVpFKG4pIFwKKwkoc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pICsgKG4pKnNpemVvZihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQpKQorCiBpbnQgX19weGEyeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CiAKIAlpZiAoIWRldiB8fCAhZGV2LT5wbGF0Zm9ybV9kYXRhKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW9wcyA9IChzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqKWRldi0+cGxhdGZvcm1fZGF0YTsKIAorCXNpbmZvID0ga3phbGxvYyhTS1RfREVWX0lORk9fU0laRShvcHMtPm5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG9wcy0+bnI7CisKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IG9wcy0+bnI7IGkrKykgeworCQlza3QgPSAmc2luZm8tPnNrdFtpXTsKKworCQlza3QtPm5yCQk9IG9wcy0+Zmlyc3QgKyBpOworCQlza3QtPmlycQk9IE5PX0lSUTsKKworCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOworCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKKwkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07CisJCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOworCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOworCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7CisJCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOworCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOworCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKworCQlza3QtPnJlc19hdHRyLnN0YXJ0CT0gX1BDTUNJQUF0dHIoc2t0LT5ucik7CisJCXNrdC0+cmVzX2F0dHIuZW5kCT0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCQlza3QtPnJlc19hdHRyLm5hbWUJPSAiYXR0cmlidXRlIjsKKwkJc2t0LT5yZXNfYXR0ci5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCX0KKwogCS8qIFByb3ZpZGUgb3VyIFBYQTJ4eCBzcGVjaWZpYyB0aW1pbmcgcm91dGluZXMuICovCiAJb3BzLT5zZXRfdGltaW5nICA9IHB4YTJ4eF9wY21jaWFfc2V0X3RpbWluZzsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIAlvcHMtPmZyZXF1ZW5jeV9jaGFuZ2UgPSBweGEyeHhfcGNtY2lhX2ZyZXF1ZW5jeV9jaGFuZ2U7CiAjZW5kaWYKIAotCXJldCA9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgb3BzLT5maXJzdCwgb3BzLT5ucik7CisJcmV0ID0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBzaW5mbyk7CiAKIAlpZiAoIXJldCkKIAkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA3YzhiY2I0Li40ZWQ2NGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKaW5kZXggNmMzYWFjMy4uYTdiOTQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfZTc0MC5jCmluZGV4IGY2NjNhMDEuLmQwOWMwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2U3NDAuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggMzdlYzU1ZC4uNmNiYjFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2x1YmJvY2suaD4KIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMKaW5kZXggODc3MDAxZC4uMTEzODU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwpAQCAtMjEsMTEgKzIxLDEwIEBACiAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tYWluc3RvbmUuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYwppbmRleCAxNzM2YzY3Li41YmE5YjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbWxkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jCkBAIC05OCw4ICs5OCw4IEBACiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbWxkX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAotCS5maXJzdAkJCT0gMCwKLQkubnIJCQk9IDIsCisJLmZpcnN0CQkJPSAxLAorCS5ucgkJCT0gMSwKIAogCS5od19pbml0CQk9IHBhbG1sZF9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gcGFsbWxkX3BjbWNpYV9od19zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKaW5kZXggMzZjN2EwYi4uZTBlNWNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvdHJpemVwczQuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKaW5kZXggZGQxMDQ4MS4uMTc4NzEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3ZpcGVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2gzNjAwLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwppbmRleCA2ZGU0ZTFiLi4wY2MzNzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwpAQCAtMzcsOSArMzcsOSBAQAogCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiAgIAogCS8qIERpc2FibGUgQ0YgYnVzOiAqLwotCWNscl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0JY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQlzZXRfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMCk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzksMTAgKzc5LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fQ0FSRF9SRVNFVCk7Ci0JZWxzZQotCQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VUKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VULCAhIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpOwogCiAJLyogU2lsZW50bHkgaWdub3JlIFZwcCwgb3V0cHV0IGVuYWJsZSwgc3BlYWtlciBlbmFibGUuICovCiAKQEAgLTkyLDkgKzg5LDkgQEAKIHN0YXRpYyB2b2lkIGgzNjAwX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAkvKiBFbmFibGUgQ0YgYnVzOiAqLwotCXNldF9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0Jc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMSk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAxKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDApOwogCiAJbXNsZWVwKDEwKTsKIApAQCAtMTEyLDEwICsxMDksMTAgQEAKIAkgKiBzb2NrZXQgMCB0aGVuIHNvY2tldCAxLgogCSAqLwogCWlmIChza3QtPm5yID09IDEpIHsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OLCAwKTsKIAkJLyogaG1tLCBkb2VzIHRoaXMgc3VjayBwb3dlcj8gKi8KLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VUKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VULCAxKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IDY5MjRkMGUuLjQwMTA1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYwpAQCAtMTEsMTIgKzExLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAic2ExMTExX2dlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCmluZGV4IDdjYjEyNzMuLmUxNWQ1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYwpAQCAtMzYsOSArMzYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC0xNjMsOSArMTYzLDU1IEBACiAJcmV0dXJuIHAgLSBidWY7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpza3RfbmFtZXNbXSA9IHsKKwkiUENNQ0lBIHNvY2tldCAwIiwKKwkiUENNQ0lBIHNvY2tldCAxIiwKK307CisKKyNkZWZpbmUgU0tUX0RFVl9JTkZPX1NJWkUobikgXAorCShzaXplb2Yoc3RydWN0IHNrdF9kZXZfaW5mbykgKyAobikqc2l6ZW9mKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCkpCisKIGludCBzYTExeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsCiAJCQkgICAgaW50IGZpcnN0LCBpbnQgbnIpCiB7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CisJaW50IGk7CisKKwlzaW5mbyA9IGt6YWxsb2MoU0tUX0RFVl9JTkZPX1NJWkUobnIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNpbmZvLT5uc2t0ID0gbnI7CisKKwkvKiBJbml0aWxpYXplIHByb2Nlc3NvciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc2t0ID0gJnNpbmZvLT5za3RbaV07CisKKwkJc2t0LT5ucgkJPSBmaXJzdCArIGk7CisJCXNrdC0+aXJxCT0gTk9fSVJROworCisJCXNrdC0+cmVzX3NrdC5zdGFydAk9IF9QQ01DSUEoc2t0LT5ucik7CisJCXNrdC0+cmVzX3NrdC5lbmQJPSBfUENNQ0lBKHNrdC0+bnIpICsgUENNQ0lBU3AgLSAxOworCQlza3QtPnJlc19za3QubmFtZQk9IHNrdF9uYW1lc1tza3QtPm5yXTsKKwkJc2t0LT5yZXNfc2t0LmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisKKwkJc2t0LT5yZXNfaW8uc3RhcnQJPSBfUENNQ0lBSU8oc2t0LT5ucik7CisJCXNrdC0+cmVzX2lvLmVuZAkJPSBfUENNQ0lBSU8oc2t0LT5ucikgKyBQQ01DSUFJT1NwIC0gMTsKKwkJc2t0LT5yZXNfaW8ubmFtZQk9ICJpbyI7CisJCXNrdC0+cmVzX2lvLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7CisKKwkJc2t0LT5yZXNfbWVtLnN0YXJ0CT0gX1BDTUNJQU1lbShza3QtPm5yKTsKKwkJc2t0LT5yZXNfbWVtLmVuZAk9IF9QQ01DSUFNZW0oc2t0LT5ucikgKyBQQ01DSUFNZW1TcCAtIDE7CisJCXNrdC0+cmVzX21lbS5uYW1lCT0gIm1lbW9yeSI7CisJCXNrdC0+cmVzX21lbS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2F0dHIuc3RhcnQJPSBfUENNQ0lBQXR0cihza3QtPm5yKTsKKwkJc2t0LT5yZXNfYXR0ci5lbmQJPSBfUENNQ0lBQXR0cihza3QtPm5yKSArIFBDTUNJQUF0dHJTcCAtIDE7CisJCXNrdC0+cmVzX2F0dHIubmFtZQk9ICJhdHRyaWJ1dGUiOworCQlza3QtPnJlc19hdHRyLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisJfQorCiAJLyoKIAkgKiBzZXQgZGVmYXVsdCBNRUNSIGNhbGN1bGF0aW9uIGlmIHRoZSBib2FyZCBzcGVjaWZpYwogCSAqIGNvZGUgZGlkIG5vdCBzcGVjaWZ5IG9uZS4uLgpAQCAtMTgwLDcgKzIyNiw3IEBACiAJb3BzLT5mcmVxdWVuY3lfY2hhbmdlID0gc2ExMTAwX3BjbWNpYV9mcmVxdWVuY3lfY2hhbmdlOwogI2VuZGlmCiAKLQlyZXR1cm4gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBmaXJzdCwgbnIpOworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcHJvYmUoZGV2LCBvcHMsIHNpbmZvKTsKIH0KIEVYUE9SVF9TWU1CT0woc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggZjQ5YWM2Ni4uMTYzY2Y5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtNDksMTEgKzQ5LDYgQEAKIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIAotLyogRklYTUU6IHBsYXRmb3JtIGRlcGVuZGVudCByZXNvdXJjZSBkZWNsYXJhdGlvbiBoYXMgdG8gbW92ZSBvdXQgb2YgdGhpcyBmaWxlICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfUFhBCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiAKIHN0YXRpYyBpbnQgcGNfZGVidWc7CkBAIC01ODEsMTkgKzU3Niw2IEBACiBMSVNUX0hFQUQoc29jX3BjbWNpYV9zb2NrZXRzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoc29jX3BjbWNpYV9zb2NrZXRzX2xvY2spOwogCi1zdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7Ci0JIlBDTUNJQSBzb2NrZXQgMCIsCi0JIlBDTUNJQSBzb2NrZXQgMSIsCi19OwotCi1zdHJ1Y3Qgc2t0X2Rldl9pbmZvIHsKLQlpbnQgbnNrdDsKLQlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgc2t0WzBdOwotfTsKLQotI2RlZmluZSBTS1RfREVWX0lORk9fU0laRShuKSBcCi0JKHNpemVvZihzdHJ1Y3Qgc2t0X2Rldl9pbmZvKSArIChuKSpzaXplb2Yoc3RydWN0IHNvY19wY21jaWFfc29ja2V0KSkKLQogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogc3RhdGljIGludAogc29jX3BjbWNpYV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKQEAgLTYzNywyNiArNjE5LDE4IEBACiBzdGF0aWMgdm9pZCBzb2NfcGNtY2lhX2NwdWZyZXFfdW5yZWdpc3Rlcih2b2lkKSB7fQogI2VuZGlmCiAKLWludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLCBpbnQgZmlyc3QsIGludCBucikKK2ludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLAorCQkJCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvKQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvOwogCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0OwogCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7CiAKLQlzaW5mbyA9IGt6YWxsb2MoU0tUX0RFVl9JTkZPX1NJWkUobnIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNpbmZvKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNpbmZvLT5uc2t0ID0gbnI7Ci0KIAkvKgogCSAqIEluaXRpYWxpc2UgdGhlIHBlci1zb2NrZXQgc3RydWN0dXJlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNpbmZvLT5uc2t0OyBpKyspIHsKIAkJc2t0ID0gJnNpbmZvLT5za3RbaV07CiAKIAkJc2t0LT5zb2NrZXQub3BzID0gJnNvY19jb21tb25fcGNtY2lhX29wZXJhdGlvbnM7CkBAIC02NjgsNDMgKzY0MiwyMSBAQAogCQlza3QtPnBvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNrdDsKIAkJc2t0LT5wb2xsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU09DX1BDTUNJQV9QT0xMX1BFUklPRDsKIAotCQlza3QtPm5yCQk9IGZpcnN0ICsgaTsKLQkJc2t0LT5pcnEJPSBOT19JUlE7CiAJCXNrdC0+ZGV2CT0gZGV2OwogCQlza3QtPm9wcwk9IG9wczsKIAotCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOwotCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKLQkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07Ci0JCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOwotCiAJCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmc2t0LT5yZXNfc2t0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2Vycl8xOwogCi0JCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOwotCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7Ci0JCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOwotCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwotCiAJCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJnNrdC0+cmVzX3NrdCwgJnNrdC0+cmVzX2lvKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2Vycl8yOwogCi0JCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7Ci0JCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOwotCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOwotCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZza3QtPnJlc19za3QsICZza3QtPnJlc19tZW0pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZXJyXzM7CiAKLQkJc2t0LT5yZXNfYXR0ci5zdGFydAk9IF9QQ01DSUFBdHRyKHNrdC0+bnIpOwotCQlza3QtPnJlc19hdHRyLmVuZAk9IF9QQ01DSUFBdHRyKHNrdC0+bnIpICsgUENNQ0lBQXR0clNwIC0gMTsKLQkJc2t0LT5yZXNfYXR0ci5uYW1lCT0gImF0dHJpYnV0ZSI7Ci0JCXNrdC0+cmVzX2F0dHIuZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZza3QtPnJlc19za3QsICZza3QtPnJlc19hdHRyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2Vycl80OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCmluZGV4IDM4YzY3MzcuLjI5MGUxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKQEAgLTU4LDYgKzU4LDExIEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogfTsKIAorc3RydWN0IHNrdF9kZXZfaW5mbyB7CisJaW50IG5za3Q7CisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0IHNrdFswXTsKK307CisKIHN0cnVjdCBwY21jaWFfc3RhdGUgewogICB1bnNpZ25lZCBkZXRlY3Q6IDEsCiAgICAgICAgICAgICByZWFkeTogMSwKQEAgLTEzMiw3ICsxMzcsNyBAQAogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzb2NfcGNtY2lhX3NvY2tldHM7CiAKLWV4dGVybiBpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgaW50IGZpcnN0LCBpbnQgbnIpOworZXh0ZXJuIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLCBzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbyk7CiBleHRlcm4gaW50IHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCA1MzI0OTc4Li4yMzVlODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTgzOCw3ICs4MzgsNyBAQAogfQogCiAvKiBzZXQgbW9kZSB1c2luZyBpZCAqLwotaW50IHBzM2F2X3NldF92aWRlb19tb2RlKHUzMiBpZCkKK2ludCBwczNhdl9zZXRfdmlkZW9fbW9kZShpbnQgaWQpCiB7CiAJaW50IHNpemU7CiAJdTMyIG9wdGlvbjsKQEAgLTk0MCw3ICs5NDAsNyBAQAogc3RhdGljIGludCBwczNhdl9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJlczsKLQl1MzIgaWQ7CisJaW50IGlkOwogCiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiIC0+ICVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCWRldl9kYmcoJmRldi0+Y29yZSwgIiAgdGltZW91dD0lZFxuIiwgdGltZW91dCk7CkBAIC05NjIsOCArOTYyLDEwIEBACiAJaW5pdF9jb21wbGV0aW9uKCZwczNhdi0+ZG9uZSk7CiAJY29tcGxldGUoJnBzM2F2LT5kb25lKTsKIAlwczNhdi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicHMzYXZkIik7Ci0JaWYgKCFwczNhdi0+d3EpCisJaWYgKCFwczNhdi0+d3EpIHsKKwkJcmVzID0gLUVOT01FTTsKIAkJZ290byBmYWlsOworCX0KIAogCXN3aXRjaCAocHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCgpKSB7CiAJY2FzZSBQUzNfUEFSQU1fQVZfTVVMVElfT1VUX05UU0M6CkBAIC05OTQsNiArOTk2LDEyIEBACiAJCXNhZmVfbW9kZSA9IDE7CiAjZW5kaWYgLyogQ09ORklHX0ZCICovCiAJaWQgPSBwczNhdl9hdXRvX3ZpZGVvbW9kZSgmcHMzYXYtPmF2X2h3X2NvbmYpOworCWlmIChpZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBpZCA6JWRcbiIsIF9fZnVuY19fLCBpZCk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlzYWZlX21vZGUgPSAwOwogCiAJbXV0ZXhfbG9jaygmcHMzYXYtPm11dGV4KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBACiBmYWlsOgogCWtmcmVlKHBzM2F2KTsKIAlwczNhdiA9IE5VTEw7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBwczNhdl9yZW1vdmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW12LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXYuYwppbmRleCA0NWYxMmRjLi5lMDI2M2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXYuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogCiAjZGVmaW5lIFJUQ19USU1FX1JFR19PRkZTCTAKQEAgLTExOSw2ICsxMjAsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogbWFrZSBzdXJlIGl0IGlzIGFjdHVhbGx5IGZ1bmN0aW9uYWwgKi8KKwlpZiAocnRjX3RpbWUgPT0gMHgwMTAwMDAwMCkgeworCQlzc2xlZXAoMSk7CisJCXJ0Y190aW1lID0gcmVhZGwocGRhdGEtPmlvYWRkciArIFJUQ19USU1FX1JFR19PRkZTKTsKKwkJaWYgKHJ0Y190aW1lID09IDB4MDEwMDAwMDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImludGVybmFsIFJUQyBub3QgdGlja2luZ1xuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBkYXRhKTsKIAlwZGF0YS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAogCQkJCQkgJm12X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCBkMjZhNWY4Li40ZjI0N2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zNSw3ICszNSw4IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAjZW5kaWYKIAogI2RlZmluZSBSVENfREVGX0RJVklERVIJCTMyNzY4IC0gMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCmluZGV4IDY4YTY0MTIuLmM5OTAyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogewogCWludCByZXQgPSBsZW5ndGg7CiAKLQlpZiAobGVuZ3RoID49IDExICYmIHN0cmNtcChidWZmZXIsICJDVU1BTkFTQ1NJMiIpID09IDApIHsKKwlpZiAobGVuZ3RoID49IDExICYmIHN0cm5jbXAoYnVmZmVyLCAiQ1VNQU5BU0NTSTIiLCAxMSkgPT0gMCkgewogCQlidWZmZXIgKz0gMTE7CiAJCWxlbmd0aCAtPSAxMTsKIApAQCAtMzkwLDcgKzM5MCw4IEBACiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gZmFzMjE2X2VoX2Fib3J0LAogCS5jYW5fcXVldWUJCQk9IDEsCiAJLnRoaXNfaWQJCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAorCS5zZ190YWJsZXNpemUJCQk9IFNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTLAorCS5kbWFfYm91bmRhcnkJCQk9IElPTURfRE1BX0JPVU5EQVJZLAogCS5jbWRfcGVyX2x1bgkJCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IERJU0FCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lCQkJPSAiY3VtYW5hc2NzaTIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IGJiMjQ3N2IuLmQ4NDM1MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTUwOCw3ICs1MDgsOCBAQAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IGZhczIxNl9laF9hYm9ydCwKIAkuY2FuX3F1ZXVlCQkJPSAxLAogCS50aGlzX2lkCQkJPSA3LAotCS5zZ190YWJsZXNpemUJCQk9IFNHX0FMTCwKKwkuc2dfdGFibGVzaXplCQkJPSBTQ1NJX01BWF9TR19DSEFJTl9TRUdNRU5UUywKKwkuZG1hX2JvdW5kYXJ5CQkJPSBJT01EX0RNQV9CT1VOREFSWSwKIAkuY21kX3Blcl9sdW4JCQk9IDEsCiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZQkJCT0gImVlc294IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwppbmRleCBkOWE1NDZkLi5lMjI5N2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCkBAIC0zMDIsNyArMzAyLDggQEAKIAogCS5jYW5fcXVldWUJCQk9IDgsCiAJLnRoaXNfaWQJCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAorCS5zZ190YWJsZXNpemUJCQk9IFNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTLAorCS5kbWFfYm91bmRhcnkJCQk9IElPTURfRE1BX0JPVU5EQVJZLAogCS5jbWRfcGVyX2x1bgkJCT0gMiwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUJCQk9ICJwb3dlcnRlYyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jIGIvZHJpdmVycy9zZXJpYWwvMjEyODUuYwppbmRleCBmMzFjNjY5Li5jYjZkODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKQEAgLTE0LDggKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggN2Q3ZjU3Ni4uOWJlMTFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC02MjgsNyArNjI4LDcgQEAKIAogY29uZmlnIFNFUklBTF9QWEEKIAlib29sICJQWEEgc2VyaWFsIHBvcnQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX1BYQQorCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgQVJDSF9NTVAKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIG1hY2hpbmUgYmFzZWQgb24gYW4gSW50ZWwgWFNjYWxlIFBYQTJ4eCBDUFUgeW91CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCA0NTlmMzQyLi44MGU3NjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTM4LDkgKzM4LDkgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBiZGU0YjRiLi41YzZlZjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC00MDYsNiArNDA2LDE4IEBACiAKIAlwcl9kZWJ1ZygiQ1BNIHVhcnRbJWRdOnN0YXJ0dXBcbiIsIHBvcnQtPmxpbmUpOwogCisJLyogSWYgdGhlIHBvcnQgaXMgbm90IHRoZSBjb25zb2xlLCBtYWtlIHN1cmUgcnggaXMgZGlzYWJsZWQuICovCisJaWYgKCEocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKSkgeworCQkvKiBEaXNhYmxlIFVBUlQgcnggKi8KKwkJaWYgKElTX1NNQyhwaW5mbykpIHsKKwkJCWNscmJpdHMxNigmcGluZm8tPnNtY3AtPnNtY19zbWNtciwgU01DTVJfUkVOKTsKKwkJCWNscmJpdHM4KCZwaW5mby0+c21jcC0+c21jX3NtY20sIFNNQ01fUlgpOworCQl9IGVsc2UgeworCQkJY2xyYml0czMyKCZwaW5mby0+c2NjcC0+c2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SKTsKKwkJCWNscmJpdHMxNigmcGluZm8tPnNjY3AtPnNjY19zY2NtLCBVQVJUX1NDQ01fUlgpOworCQl9CisJCWNwbV9saW5lX2NyX2NtZChwaW5mbywgQ1BNX0NSX0lOSVRfVFJYKTsKKwl9CiAJLyogSW5zdGFsbCBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIGNwbV91YXJ0X2ludCwgMCwgImNwbV91YXJ0IiwgcG9ydCk7CiAJaWYgKHJldHZhbCkKQEAgLTQyMCw4ICs0MzIsNiBAQAogCQlzZXRiaXRzMzIoJnBpbmZvLT5zY2NwLT5zY2NfZ3NtcmwsIChTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCkpOwogCX0KIAotCWlmICghKHBpbmZvLT5mbGFncyAmIEZMQUdfQ09OU09MRSkpCi0JCWNwbV9saW5lX2NyX2NtZChwaW5mbywgQ1BNX0NSX0lOSVRfVFJYKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBhNTA5NTQ2Li45ZjQ2MGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIAlzcG9ydC0+dGltZXIuZnVuY3Rpb24gPSBpbXhfdGltZW91dDsKIAlzcG9ydC0+dGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylzcG9ydDsKIAotCXNwb3J0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1YXJ0X2NsayIpOworCXNwb3J0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1YXJ0Iik7CiAJaWYgKElTX0VSUihzcG9ydC0+Y2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKHNwb3J0LT5jbGspOwogCQlnb3RvIHVubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCAwYzNhMmFiLi43ZjcyZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNTAsOCArNTAsOCBAQAogLyogT0YgUGxhdGZvcm0gZGV2aWNlIFVzYWdlIDoKICAqCiAgKiBUaGlzIGRyaXZlciBpcyBvbmx5IHVzZWQgZm9yIFBTQ3MgY29uZmlndXJlZCBpbiB1YXJ0IG1vZGUuICBUaGUgZGV2aWNlCi0gKiB0cmVlIHdpbGwgaGF2ZSBhIG5vZGUgZm9yIGVhY2ggUFNDIGluIHVhcnQgbW9kZSB3LyBkZXZpY2VfdHlwZSA9ICJzZXJpYWwiCi0gKiBhbmQgIm1wYzUyeHgtcHNjLXVhcnQiIGluIHRoZSBjb21wYXRpYmxlIHN0cmluZworICogdHJlZSB3aWxsIGhhdmUgYSBub2RlIGZvciBlYWNoIFBTQyB3aXRoICJtcGM1Mnh4LXBzYy11YXJ0IiBpbiB0aGUgY29tcGF0aWJsZQorICogbGlzdC4KICAqCiAgKiBCeSBkZWZhdWx0LCBQU0MgZGV2aWNlcyBhcmUgZW51bWVyYXRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZm91bmQuICBIb3dldmVyCiAgKiBhIHBhcnRpY3VsYXIgUFNDIG51bWJlciBjYW4gYmUgZm9yY2VzIGJ5IGFkZGluZyAnZGV2aWNlX25vID0gPHBvcnQjPicKQEAgLTUyMiw3ICs1MjIsNyBAQAogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIG1wYzUyeHhfdWFydF9pbnQsCi0JCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTIxMiwzMCArMTIxMiwxOCBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1tcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZHgpCittcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JaW50IGZyZWVfaWR4ID0gLTE7CiAJaW50IGk7CiAKLQkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIG5vZGUgKi8KKwkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIFBTQyBudW1iZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTVBDNTJ4eF9QU0NfTUFYTlVNOyBpKyspIHsKIAkJaWYgKG1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9PSBOVUxMKSB7Ci0JCQlmcmVlX2lkeCA9IGk7Ci0JCQlicmVhazsKKwkJCW9mX25vZGVfZ2V0KG5wKTsKKwkJCW1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9IG5wOworCQkJcmV0dXJuOwogCQl9CiAJfQotCi0JaWYgKChpZHggPCAwKSB8fCAoaWR4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkpCi0JCWlkeCA9IGZyZWVfaWR4OwotCi0JaWYgKGlkeCA8IDApCi0JCXJldHVybjsgLyogTm8gZnJlZSBzbG90OyBhYm9ydCAqLwotCi0Jb2Zfbm9kZV9nZXQobnApOwotCS8qIElmIHRoZSBzbG90IGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gc3dhcCBzbG90cyAqLwotCWlmIChtcGM1Mnh4X3VhcnRfbm9kZXNbaWR4XSAmJiAoZnJlZV9pZHggIT0gLTEpKQotCQltcGM1Mnh4X3VhcnRfbm9kZXNbZnJlZV9pZHhdID0gbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF07Ci0JbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF0gPSBucDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyNDMsMjMgKzEyMzEsMTcgQEAKIHsKIAlzdGF0aWMgaW50IGVudW1fZG9uZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWNvbnN0IHVuc2lnbmVkIGludCAqZGV2bm87CiAJY29uc3Qgc3RydWN0ICBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCWludCBpOwogCiAJaWYgKGVudW1fZG9uZSkKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAic2VyaWFsIikgeworCS8qIEFzc2lnbiBpbmRleCB0byBlYWNoIFBTQyBpbiBkZXZpY2UgdHJlZSAqLworCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIG1wYzUyeHhfdWFydF9vZl9tYXRjaCkgewogCQltYXRjaCA9IG9mX21hdGNoX25vZGUobXBjNTJ4eF91YXJ0X29mX21hdGNoLCBucCk7Ci0JCWlmICghbWF0Y2gpCi0JCQljb250aW51ZTsKLQogCQlwc2Nfb3BzID0gbWF0Y2gtPmRhdGE7Ci0KLQkJLyogSXMgYSBwYXJ0aWN1bGFyIGRldmljZSBudW1iZXIgcmVxdWVzdGVkPyAqLwotCQlkZXZubyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBvcnQtbnVtYmVyIiwgTlVMTCk7Ci0JCW1wYzUyeHhfdWFydF9vZl9hc3NpZ24obnAsIGRldm5vID8gKmRldm5vIDogLTEpOworCQltcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKG5wKTsKIAl9CiAKIAllbnVtX2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCBmNmUzYjg2Li5hNDhhOGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNDMsMTMgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtdWFydC5oPgotCisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogc3RydWN0IHVhcnRfcHhhX3BvcnQgewogCXN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7CkBAIC00OTEsNyArNDg1LDcgQEAKIAkgKiBFbnN1cmUgdGhlIHBvcnQgd2lsbCBiZSBlbmFibGVkLgogCSAqIFRoaXMgaXMgcmVxdWlyZWQgZXNwZWNpYWxseSBmb3Igc2VyaWFsIGNvbnNvbGUuCiAJICovCi0JdXAtPmllciB8PSBJRVJfVVVFOworCXVwLT5pZXIgfD0gVUFSVF9JRVJfVVVFOwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIHBlci1wb3J0IHRpbWVvdXQuCkBAIC03ODQsMTkgKzc3OCwxNSBAQAogCXNwb3J0LT5wb3J0LmZsYWdzID0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORjsKIAlzcG9ydC0+cG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKHNwb3J0LT5jbGspOwogCi0JLyoKLQkgKiBJcyBpdCB3b3J0aCBrZWVwaW5nIHRoaXM/Ci0JICovCi0JaWYgKG1tcmVzLT5zdGFydCA9PSBfX1BSRUcoRkZVQVJUKSkKLQkJc3BvcnQtPm5hbWUgPSAiRkZVQVJUIjsKLQllbHNlIGlmIChtbXJlcy0+c3RhcnQgPT0gX19QUkVHKEJUVUFSVCkpCi0JCXNwb3J0LT5uYW1lID0gIkJUVUFSVCI7Ci0JZWxzZSBpZiAobW1yZXMtPnN0YXJ0ID09IF9fUFJFRyhTVFVBUlQpKQotCQlzcG9ydC0+bmFtZSA9ICJTVFVBUlQiOwotCWVsc2UgaWYgKG1tcmVzLT5zdGFydCA9PSBfX1BSRUcoSFdVQVJUKSkKLQkJc3BvcnQtPm5hbWUgPSAiSFdVQVJUIjsKLQllbHNlCisJc3dpdGNoIChkZXYtPmlkKSB7CisJY2FzZSAwOiBzcG9ydC0+bmFtZSA9ICJGRlVBUlQiOyBicmVhazsKKwljYXNlIDE6IHNwb3J0LT5uYW1lID0gIkJUVUFSVCI7IGJyZWFrOworCWNhc2UgMjogc3BvcnQtPm5hbWUgPSAiU1RVQVJUIjsgYnJlYWs7CisJY2FzZSAzOiBzcG9ydC0+bmFtZSA9ICJIV1VBUlQiOyBicmVhazsKKwlkZWZhdWx0OgogCQlzcG9ydC0+bmFtZSA9ICI/Pz8iOworCQlicmVhazsKKwl9CiAKIAlzcG9ydC0+cG9ydC5tZW1iYXNlID0gaW9yZW1hcChtbXJlcy0+c3RhcnQsIG1tcmVzLT5lbmQgLSBtbXJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIXNwb3J0LT5wb3J0Lm1lbWJhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKaW5kZXggYjI0YTI1ZS4uOTQ1MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2VyaWFsX3NhMTEwMC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jIGIvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCmluZGV4IGNhYjFhYjcuLjkzYzIwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYworKysgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkuYnVzID0gJm1hcGxlX2J1c190eXBlLAogCX0sCiB9OwotLyoqCisvKgogICogbWFwbGVfYnVzX3R5cGUgLSBjb3JlIG1hcGxlIGJ1cyBzdHJ1Y3R1cmUKICAqLwogc3RydWN0IGJ1c190eXBlIG1hcGxlX2J1c190eXBlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggMWM2NWUzOC4uZDZkMGM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMDIxLDEzICsxMDIxLDEzIEBACiAJc3Bpbl9sb2NrX2luaXQoJm1jc3BpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbWNzcGktPm1zZ19xdWV1ZSk7CiAKLQltY3NwaS0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWNzcGlfaWNrIik7CisJbWNzcGktPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIobWNzcGktPmljaykpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IG1jc3BpX2lja1xuIik7CiAJCXN0YXR1cyA9IFBUUl9FUlIobWNzcGktPmljayk7CiAJCWdvdG8gZXJyMWE7CiAJfQotCW1jc3BpLT5mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtY3NwaV9mY2siKTsKKwltY3NwaS0+ZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihtY3NwaS0+ZmNrKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgbWNzcGlfZmNrXG4iKTsKIAkJc3RhdHVzID0gUFRSX0VSUihtY3NwaS0+ZmNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwppbmRleCA2MGI1MzgxLi5mZThiOWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCkBAIC01MDYsMTEgKzUwNiwxMiBAQAogCiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHV3aXJlKTsKIAotCXV3aXJlLT5jayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImFybXhvcl9jayIpOwotCWlmICghdXdpcmUtPmNrIHx8IElTX0VSUih1d2lyZS0+Y2spKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1wdV94b3JfY2xrID9cbiIpOworCXV3aXJlLT5jayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOworCWlmIChJU19FUlIodXdpcmUtPmNrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKHV3aXJlLT5jayk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIGZ1bmN0aW9uYWwgY2xvY2s/XG4iKTsKIAkJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBzdGF0dXM7CiAJfQogCWNsa19lbmFibGUodXdpcmUtPmNrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IGVjMjRmMmQuLjMzZmNlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwppbmRleCBmZTdlNWYzLi40OTRkM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpZiAoeHNwaS0+cmVncyA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWx1cmVcbiIpOwotCQlnb3RvIHB1dF9tYXN0ZXI7CisJCWdvdG8gcmVsZWFzZV9tZW07CiAJfQogCXhzcGktPmlycSA9IHJfaXJxLT5zdGFydDsKIApAQCAtMzY1LDcgKzM2NSw3IEBACiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgInhsbngsbnVtLXNzLWJpdHMiLCAmbGVuKTsKIAlpZiAoIXByb3AgfHwgbGVuIDwgc2l6ZW9mKCpwcm9wKSkgewogCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIm5vICd4bG54LG51bS1zcy1iaXRzJyBwcm9wZXJ0eVxuIik7Ci0JCWdvdG8gcHV0X21hc3RlcjsKKwkJZ290byB1bm1hcF9pbzsKIAl9CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9ICpwcm9wOwogCkBAIC0zOTcsNiArMzk3LDggQEAKIAlmcmVlX2lycSh4c3BpLT5pcnEsIHhzcGkpOwogdW5tYXBfaW86CiAJaW91bm1hcCh4c3BpLT5yZWdzKTsKK3JlbGVhc2VfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyX21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUocl9tZW0pKTsKIHB1dF9tYXN0ZXI6CiAJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKIAlyZXR1cm4gcmM7CkBAIC00MDYsNiArNDA4LDcgQEAKIHsKIAlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaTsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCByZXNvdXJjZSByX21lbTsKIAogCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG9mZGV2KTsKIAl4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwpAQCAtNDEzLDYgKzQxNiw4IEBACiAJc3BpX2JpdGJhbmdfc3RvcCgmeHNwaS0+Yml0YmFuZyk7CiAJZnJlZV9pcnEoeHNwaS0+aXJxLCB4c3BpKTsKIAlpb3VubWFwKHhzcGktPnJlZ3MpOworCWlmICghb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfbWVtKSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyX21lbSkpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgMCk7CiAJc3BpX21hc3Rlcl9wdXQoeHNwaS0+Yml0YmFuZy5tYXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKaW5kZXggZmIzMDU1Zi4uN2NmNzRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwpAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiBzdGF0aWMgc3RydWN0IGNsayAqdXNiX2hvc3RfY2xvY2s7CiAKIHN0YXRpYyB2b2lkIGVwOTN4eF9zdGFydF9oYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZmIxOTgwMy4uNDFjMjdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAKIGNvbmZpZyBGQl9JTVgKIAl0cmlzdGF0ZSAiTW90b3JvbGEgaS5NWCBMQ0Qgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCICYmIEFSTSAmJiBBUkNIX0lNWAorCWRlcGVuZHMgb24gRkIgJiYgKEFSQ0hfSU1YIHx8IEFSQ0hfTVgyKQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKQEAgLTIxMjAsMTYgKzIxMjAsMzAgQEAKIAkgIHRoZSBib290bG9hZGVyLgogCiBjb25maWcgRkJfTVgzCi0gICAgICAgdHJpc3RhdGUgIk1YMyBGcmFtZWJ1ZmZlciBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gRkIgJiYgTVgzX0lQVQotICAgICAgIHNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLSAgICAgICBzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0gICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLSAgICAgICBkZWZhdWx0IHkKLSAgICAgICBoZWxwCi0gICAgICAgICBUaGlzIGlzIGEgZnJhbWVidWZmZXIgZGV2aWNlIGZvciB0aGUgaS5NWDMxIExDRCBDb250cm9sbGVyLiBTbwotICAgICAgICAgZmFyIG9ubHkgc3luY2hyb25vdXMgZGlzcGxheXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IHBsYW4gdG8gdXNlCi0gICAgICAgICBhbiBMQ0QgZGlzcGxheSB3aXRoIHlvdXIgaS5NWDMxIHN5c3RlbSwgc2F5IFkgaGVyZS4KKwl0cmlzdGF0ZSAiTVgzIEZyYW1lYnVmZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBNWDNfSVBVCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgaXMgYSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBpLk1YMzEgTENEIENvbnRyb2xsZXIuIFNvCisJICBmYXIgb25seSBzeW5jaHJvbm91cyBkaXNwbGF5cyBhcmUgc3VwcG9ydGVkLiBJZiB5b3UgcGxhbiB0byB1c2UKKwkgIGFuIExDRCBkaXNwbGF5IHdpdGggeW91ciBpLk1YMzEgc3lzdGVtLCBzYXkgWSBoZXJlLgorCitjb25maWcgRkJfQlJPQURTSEVFVAorCXRyaXN0YXRlICJFLUluayBCcm9hZHNoZWV0L0Vwc29uIFMxRDEzNTIxIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCCisJc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorCXNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TWVNfRk9QUworCXNlbGVjdCBGQl9ERUZFUlJFRF9JTworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEUtSW5rIEJyb2Fkc2hlZXQKKwkgIGNvbnRyb2xsZXIuIFRoZSByZWxlYXNlIG5hbWUgZm9yIHRoaXMgZGV2aWNlIHdhcyBFcHNvbiBTMUQxMzUyMQorCSAgYW5kIGNvdWxkIGFsc28gaGF2ZSBiZWVuIGNhbGxlZCBieSBvdGhlciBuYW1lcyB3aGVuIGNvdXBsZWQgd2l0aAorCSAgYSBicmlkZ2UgYWRhcHRlci4KIAogc291cmNlICJkcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggMmE5OThjYS4uYmIyNjVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0xMDYsNiArMTA2LDcgQEAKIG9iai0kKENPTkZJR19GQl9QTUFHQl9CKQkgICs9IHBtYWdiLWItZmIubwogb2JqLSQoQ09ORklHX0ZCX01BWElORSkJCSAgKz0gbWF4aW5lZmIubwogb2JqLSQoQ09ORklHX0ZCX01FVFJPTk9NRSkgICAgICAgICs9IG1ldHJvbm9tZWZiLm8KK29iai0kKENPTkZJR19GQl9CUk9BRFNIRUVUKSAgICAgICArPSBicm9hZHNoZWV0ZmIubwogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubwogb2JqLSQoQ09ORklHX0ZCX1NINzc2MCkJCSAgKz0gc2g3NzYwZmIubwogb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KQEAgLTEzMiw3ICsxMzMsNyBAQAogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGNTRYX0xRMDQzKQkgICs9IGJmNTR4LWxxMDQzZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGSU5fVDM1ME1DUUIpCSAgKz0gYmZpbi10MzUwbWNxYi1mYi5vCi1vYmotJChDT05GSUdfRkJfTVgzKSAgICAgICAgICAgICAgKz0gbXgzZmIubworb2JqLSQoQ09ORklHX0ZCX01YMykJCSAgKz0gbXgzZmIubwogCiAjIHRoZSB0ZXN0IGZyYW1lYnVmZmVyIGlzIGxhc3QKIG9iai0kKENPTkZJR19GQl9WSVJUVUFMKSAgICAgICAgICArPSB2ZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwppbmRleCA2MWMzZDNmLi42OTk1ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwpAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jIGIvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDljYjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYwpAQCAtMCwwICsxLDU2OCBAQAorLyoKKyAqIGJyb2Fkc2hlZXRmYi5jIC0tIEZCIGRyaXZlciBmb3IgRS1JbmsgQnJvYWRzaGVldCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBKYXlhIEt1bWFyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIuYyBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKgorICogVGhpcyBkcml2ZXIgaXMgd3JpdHRlbiB0byBiZSB1c2VkIHdpdGggdGhlIEJyb2Fkc2hlZXQgZGlzcGxheSBjb250cm9sbGVyLgorICoKKyAqIEl0IGlzIGludGVuZGVkIHRvIGJlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudC4gQSBib2FyZCBzcGVjaWZpYyBkcml2ZXIKKyAqIG11c3QgYmUgdXNlZCB0byBwZXJmb3JtIGFsbCB0aGUgcGh5c2ljYWwgSU8gaW50ZXJhY3Rpb25zLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8dmlkZW8vYnJvYWRzaGVldGZiLmg+CisKKy8qIERpc3BsYXkgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFBZX1cgODAwCisjZGVmaW5lIERQWV9IIDYwMAorCitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGJyb2Fkc2hlZXRmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKKwkuaWQgPQkJImJyb2Fkc2hlZXRmYiIsCisJLnR5cGUgPQkJRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwgPQlGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SLAorCS54cGFuc3RlcCA9CTAsCisJLnlwYW5zdGVwID0JMCwKKwkueXdyYXBzdGVwID0JMCwKKwkubGluZV9sZW5ndGggPQlEUFlfVywKKwkuYWNjZWwgPQlGQl9BQ0NFTF9OT05FLAorfTsKKworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBicm9hZHNoZWV0ZmJfdmFyIF9fZGV2aW5pdGRhdGEgPSB7CisJLnhyZXMJCT0gRFBZX1csCisJLnlyZXMJCT0gRFBZX0gsCisJLnhyZXNfdmlydHVhbAk9IERQWV9XLAorCS55cmVzX3ZpcnR1YWwJPSBEUFlfSCwKKwkuYml0c19wZXJfcGl4ZWwJPSA4LAorCS5ncmF5c2NhbGUJPSAxLAorCS5yZWQgPQkJeyAwLCA0LCAwIH0sCisJLmdyZWVuID0JeyAwLCA0LCAwIH0sCisJLmJsdWUgPQkJeyAwLCA0LCAwIH0sCisJLnRyYW5zcCA9CXsgMCwgMCwgMCB9LAorfTsKKworLyogbWFpbiBicm9hZHNoZWV0ZmIgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X2lzc3VlX2RhdGEoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCit7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAwKTsKKwlwYXItPmJvYXJkLT5zZXRfaGRiKHBhciwgZGF0YSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAxKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9pc3N1ZV9jbWQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCit7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAwKTsKKwlicm9hZHNoZWV0X2lzc3VlX2RhdGEocGFyLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCit7CisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDApOworCWJyb2Fkc2hlZXRfaXNzdWVfY21kKHBhciwgZGF0YSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X3NlbmRfY21kYXJncyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgY21kLAorCQkJCQlpbnQgYXJnYywgdTE2ICphcmd2KQoreworCWludCBpOworCisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDApOworCWJyb2Fkc2hlZXRfaXNzdWVfY21kKHBhciwgY21kKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgYXJndltpXSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9idXJzdF93cml0ZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCBpbnQgc2l6ZSwKKwkJCQkJdTE2ICpkYXRhKQoreworCWludCBpOworCXUxNiB0bXA7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDApOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMCk7CisJCXRtcCA9IChkYXRhW2ldICYgMHgwRikgPDwgNDsKKwkJdG1wIHw9IChkYXRhW2ldICYgMHgwRjAwKSA8PCA0OworCQlwYXItPmJvYXJkLT5zZXRfaGRiKHBhciwgdG1wKTsKKwkJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAxKTsKKwl9CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOworfQorCitzdGF0aWMgdTE2IGJyb2Fkc2hlZXRfZ2V0X2RhdGEoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwl1MTYgcmVzOworCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGdvIGhpLiAobG8gaXMgYnVzeSkgKi8KKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKKworCS8qIGNzIGxvLCBkYyBsbyBmb3IgY21kLCB3ZSBsbyBmb3IgZWFjaCBkYXRhLCBkYiBhcyB1c3VhbCAqLworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfV1IsIDApOworCisJcmVzID0gcGFyLT5ib2FyZC0+Z2V0X2hkYihwYXIpOworCisJLyogc3Ryb2JlIHdyICovCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAxKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF93cml0ZV9yZWcoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IHJlZywKKwkJCQkJdTE2IGRhdGEpCit7CisJLyogd2FpdCBmb3IgcmVhZHkgdG8gZ28gaGkuIChsbyBpcyBidXN5KSAqLworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCisJLyogY3MgbG8sIGRjIGxvIGZvciBjbWQsIHdlIGxvIGZvciBlYWNoIGRhdGEsIGRiIGFzIHVzdWFsICovCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKworCWJyb2Fkc2hlZXRfaXNzdWVfY21kKHBhciwgQlNfQ01EX1dSX1JFRyk7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCisJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgcmVnKTsKKwlicm9hZHNoZWV0X2lzc3VlX2RhdGEocGFyLCBkYXRhKTsKKworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMSk7Cit9CisKK3N0YXRpYyB1MTYgYnJvYWRzaGVldF9yZWFkX3JlZyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgcmVnKQoreworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgcmVnKTsKKwltc2xlZXAoMTAwKTsKKwlyZXR1cm4gYnJvYWRzaGVldF9nZXRfZGF0YShwYXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYnJvYWRzaGVldF9pbml0X2Rpc3BsYXkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwl1MTYgYXJnc1s1XTsKKworCWFyZ3NbMF0gPSBEUFlfVzsKKwlhcmdzWzFdID0gRFBZX0g7CisJYXJnc1syXSA9ICgxMDAgfCAoMSA8PCA4KSB8ICgxIDw8IDkpKTsgLyogc2RjZmcgKi8KKwlhcmdzWzNdID0gMjsgLyogZ2RydiBjZmcgKi8KKwlhcmdzWzRdID0gKDQgfCAoMSA8PCA3KSk7IC8qIGx1dCBpbmRleCBmb3JtYXQgKi8KKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9JTklUX0RTUEVfQ0ZHLCA1LCBhcmdzKTsKKworCS8qIGRpZCB0aGUgY29udHJvbGxlciByZWFsbHkgc2V0IGl0PyAqLworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0lOSVRfRFNQRV9DRkcsIDUsIGFyZ3MpOworCisJYXJnc1swXSA9IDQ7IC8qIGZzeW5jIGxlbiAqLworCWFyZ3NbMV0gPSAoMTAgPDwgOCkgfCA0OyAvKiBmZW5kL2ZiZWdpbiBsZW4gKi8KKwlhcmdzWzJdID0gMTA7IC8qIGxpbmUgc3luYyBsZW4gKi8KKwlhcmdzWzNdID0gKDEwMCA8PCA4KSB8IDQ7IC8qIGxpbmUgZW5kL2JlZ2luIGxlbiAqLworCWFyZ3NbNF0gPSA2OyAvKiBwaXhlbCBjbG9jayBjZmcgKi8KKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9JTklUX0RTUEVfVE1HLCA1LCBhcmdzKTsKKworCS8qIHNldHVwIHdhdmVmb3JtICovCisJYXJnc1swXSA9IDB4ODg2OworCWFyZ3NbMV0gPSAwOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1JEX1dGTV9JTkZPLCAyLCBhcmdzKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1VQRF9HRFJWX0NMUik7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfVFJHKTsKKworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgzMzAsIDB4ODQpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX1RSRyk7CisKKwlhcmdzWzBdID0gKDB4MyA8PCA0KTsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9MRF9JTUcsIDEsIGFyZ3MpOworCisJYXJnc1swXSA9IDB4MTU0OworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1dSX1JFRywgMSwgYXJncyk7CisKKwlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgRFBZX1cqRFBZX0gvMiwKKwkJCQkodTE2ICopIHBhci0+aW5mby0+c2NyZWVuX2Jhc2UpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfTERfSU1HX0VORCk7CisKKwlhcmdzWzBdID0gMHg0MzAwOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1VQRF9GVUxMLCAxLCBhcmdzKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX0ZSRU5EKTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYnJvYWRzaGVldF9pbml0KHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfSU5JVF9TWVNfUlVOKTsKKwkvKiB0aGUgY29udHJvbGxlciBuZWVkcyBhIHNlY29uZCAqLworCW1zbGVlcCgxMDAwKTsKKwlicm9hZHNoZWV0X2luaXRfZGlzcGxheShwYXIpOworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZV9wYWdlcyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJdTE2IHkxLCB1MTYgeTIpCit7CisJdTE2IGFyZ3NbNV07CisJdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2lnbmVkIGNoYXIgKilwYXItPmluZm8tPnNjcmVlbl9iYXNlOworCisJLyogeTEgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgc28gZHJvcCB0aGUgbG93ZXIgYml0cyAqLworCXkxICY9IDB4RkZGQzsKKwkvKiB5MiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCAsIGJ1dCAtIDEgc28gdXAgdGhlIGxvd2VyIGJpdHMgKi8KKwl5MiB8PSAweDAwMDM7CisKKwlhcmdzWzBdID0gMHgzIDw8IDQ7CisJYXJnc1sxXSA9IDA7CisJYXJnc1syXSA9IHkxOworCWFyZ3NbM10gPSBjcHVfdG9fbGUxNihwYXItPmluZm8tPnZhci54cmVzKTsKKwlhcmdzWzRdID0geTI7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfTERfSU1HX0FSRUEsIDUsIGFyZ3MpOworCisJYXJnc1swXSA9IDB4MTU0OworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1dSX1JFRywgMSwgYXJncyk7CisKKwlidWYgKz0geTEgKiBwYXItPmluZm8tPnZhci54cmVzOworCWJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUocGFyLCAoKDEgKyB5MiAtIHkxKSAqIHBhci0+aW5mby0+dmFyLnhyZXMpLzIsCisJCQkJKHUxNiAqKSBidWYpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfTERfSU1HX0VORCk7CisKKwlhcmdzWzBdID0gMHg0MzAwOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1VQRF9GVUxMLCAxLCBhcmdzKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX0ZSRU5EKTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IGFyZ3NbNV07CisKKwlhcmdzWzBdID0gMHgzIDw8IDQ7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfTERfSU1HLCAxLCBhcmdzKTsKKworCWFyZ3NbMF0gPSAweDE1NDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOworCWJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUocGFyLCBEUFlfVypEUFlfSC8yLAorCQkJCSh1MTYgKikgcGFyLT5pbmZvLT5zY3JlZW5fYmFzZSk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9MRF9JTUdfRU5EKTsKKworCWFyZ3NbMF0gPSAweDQzMDA7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfVVBEX0ZVTEwsIDEsIGFyZ3MpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX1RSRyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfRlJFTkQpOworCisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisKK30KKworLyogdGhpcyBpcyBjYWxsZWQgYmFjayBmcm9tIHRoZSBkZWZlcnJlZCBpbyB3b3JrcXVldWUgKi8KK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCit7CisJdTE2IHkxID0gMCwgaCA9IDA7CisJaW50IHByZXZfaW5kZXggPSAtMTsKKwlzdHJ1Y3QgcGFnZSAqY3VyOworCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbyA9IGluZm8tPmZiZGVmaW87CisJaW50IGhfaW5jOworCXUxNiB5cmVzID0gaW5mby0+dmFyLnlyZXM7CisJdTE2IHhyZXMgPSBpbmZvLT52YXIueHJlczsKKworCS8qIGhlaWdodCBpbmNyZW1lbnQgaXMgZml4ZWQgcGVyIHBhZ2UgKi8KKwloX2luYyA9IERJVl9ST1VORF9VUChQQUdFX1NJWkUgLCB4cmVzKTsKKworCS8qIHdhbGsgdGhlIHdyaXR0ZW4gcGFnZSBsaXN0IGFuZCBzd2l6emxlIHRoZSBkYXRhICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsICZmYmRlZmlvLT5wYWdlbGlzdCwgbHJ1KSB7CisJCWlmIChwcmV2X2luZGV4IDwgMCkgeworCQkJLyoganVzdCBzdGFydGluZyBzbyBhc3NpZ24gZmlyc3QgcGFnZSAqLworCQkJeTEgPSAoY3VyLT5pbmRleCA8PCBQQUdFX1NISUZUKSAvIHhyZXM7CisJCQloID0gaF9pbmM7CisJCX0gZWxzZSBpZiAoKHByZXZfaW5kZXggKyAxKSA9PSBjdXItPmluZGV4KSB7CisJCQkvKiB0aGlzIHBhZ2UgaXMgY29uc2VjdXRpdmUgc28gaW5jcmVhc2Ugb3VyIGhlaWdodCAqLworCQkJaCArPSBoX2luYzsKKwkJfSBlbHNlIHsKKwkJCS8qIHBhZ2Ugbm90IGNvbnNlY3V0aXZlLCBpc3N1ZSBwcmV2aW91cyB1cGRhdGUgZmlyc3QgKi8KKwkJCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlX3BhZ2VzKGluZm8tPnBhciwgeTEsIHkxICsgaCk7CisJCQkvKiBzdGFydCBvdmVyIHdpdGggb3VyIG5vbiBjb25zZWN1dGl2ZSBwYWdlICovCisJCQl5MSA9IChjdXItPmluZGV4IDw8IFBBR0VfU0hJRlQpIC8geHJlczsKKwkJCWggPSBoX2luYzsKKwkJfQorCQlwcmV2X2luZGV4ID0gY3VyLT5pbmRleDsKKwl9CisKKwkvKiBpZiB3ZSBzdGlsbCBoYXZlIGFueSBwYWdlcyB0byB1cGRhdGUgd2UgZG8gc28gbm93ICovCisJaWYgKGggPj0geXJlcykgeworCQkvKiBpdHMgYSBmdWxsIHNjcmVlbiB1cGRhdGUsIGp1c3QgZG8gaXQgKi8KKwkJYnJvYWRzaGVldGZiX2RweV91cGRhdGUoaW5mby0+cGFyKTsKKwl9IGVsc2UgeworCQlicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZV9wYWdlcyhpbmZvLT5wYXIsIHkxLAorCQkJCQkJbWluKCh1MTYpICh5MSArIGgpLCB5cmVzKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlzeXNfZmlsbHJlY3QoaW5mbywgcmVjdCk7CisKKwlicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZShwYXIpOworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlzeXNfY29weWFyZWEoaW5mbywgYXJlYSk7CisKKwlicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZShwYXIpOworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCWNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKK30KKworLyoKKyAqIHRoaXMgaXMgdGhlIHNsb3cgcGF0aCBmcm9tIHVzZXJzcGFjZS4gdGhleSBjYW4gc2VlayBhbmQgd3JpdGUgdG8KKyAqIHRoZSBmYi4gaXQncyBpbmVmZmljaWVudCB0byBkbyBhbnl0aGluZyBsZXNzIHRoYW4gYSBmdWxsIHNjcmVlbiBkcmF3CisgKi8KK3N0YXRpYyBzc2l6ZV90IGJyb2Fkc2hlZXRmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOworCXZvaWQgKmRzdDsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAtRVBFUk07CisKKwl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOworCisJaWYgKHAgPiB0b3RhbF9zaXplKQorCQlyZXR1cm4gLUVGQklHOworCisJaWYgKGNvdW50ID4gdG90YWxfc2l6ZSkgeworCQllcnIgPSAtRUZCSUc7CisJCWNvdW50ID0gdG90YWxfc2l6ZTsKKwl9CisKKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkgeworCQlpZiAoIWVycikKKwkJCWVyciA9IC1FTk9TUEM7CisKKwkJY291bnQgPSB0b3RhbF9zaXplIC0gcDsKKwl9CisKKwlkc3QgPSAodm9pZCAqKShpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgYnVmLCBjb3VudCkpCisJCWVyciA9IC1FRkFVTFQ7CisKKwlpZiAgKCFlcnIpCisJCSpwcG9zICs9IGNvdW50OworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKKworCXJldHVybiAoZXJyKSA/IGVyciA6IGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBicm9hZHNoZWV0ZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfcmVhZCAgICAgICAgPSBmYl9zeXNfcmVhZCwKKwkuZmJfd3JpdGUJPSBicm9hZHNoZWV0ZmJfd3JpdGUsCisJLmZiX2ZpbGxyZWN0CT0gYnJvYWRzaGVldGZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGJyb2Fkc2hlZXRmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gYnJvYWRzaGVldGZiX2ltYWdlYmxpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gYnJvYWRzaGVldGZiX2RlZmlvID0geworCS5kZWxheQkJPSBIWi80LAorCS5kZWZlcnJlZF9pbwk9IGJyb2Fkc2hlZXRmYl9kcHlfZGVmZXJyZWRfaW8sCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBicm9hZHNoZWV0ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBicm9hZHNoZWV0X2JvYXJkICpib2FyZDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgdmlkZW9tZW1vcnlzaXplOworCXVuc2lnbmVkIGNoYXIgKnZpZGVvbWVtb3J5OworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXI7CisJaW50IGk7CisKKwkvKiBwaWNrIHVwIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzICovCisJYm9hcmQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghYm9hcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogdHJ5IHRvIGNvdW50IGRldmljZSBzcGVjaWZpYyBkcml2ZXIsIGlmIGNhbid0LCBwbGF0Zm9ybSByZWNhbGxzICovCisJaWYgKCF0cnlfbW9kdWxlX2dldChib2FyZC0+b3duZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIpLCAmZGV2LT5kZXYpOworCWlmICghaW5mbykKKwkJZ290byBlcnI7CisKKwl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpOworCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCisJCWdvdG8gZXJyX2ZiX3JlbDsKKworCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWRlb21lbW9yeTsKKwlpbmZvLT5mYm9wcyA9ICZicm9hZHNoZWV0ZmJfb3BzOworCisJaW5mby0+dmFyID0gYnJvYWRzaGVldGZiX3ZhcjsKKwlpbmZvLT5maXggPSBicm9hZHNoZWV0ZmJfZml4OworCWluZm8tPmZpeC5zbWVtX2xlbiA9IHZpZGVvbWVtb3J5c2l6ZTsKKwlwYXIgPSBpbmZvLT5wYXI7CisJcGFyLT5pbmZvID0gaW5mbzsKKwlwYXItPmJvYXJkID0gYm9hcmQ7CisJcGFyLT53cml0ZV9yZWcgPSBicm9hZHNoZWV0X3dyaXRlX3JlZzsKKwlwYXItPnJlYWRfcmVnID0gYnJvYWRzaGVldF9yZWFkX3JlZzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwYXItPndhaXRxKTsKKworCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKworCWluZm8tPmZiZGVmaW8gPSAmYnJvYWRzaGVldGZiX2RlZmlvOworCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisKKwlyZXR2YWwgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxNiwgMCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgY29sb3JtYXBcbiIpOworCQlnb3RvIGVycl92ZnJlZTsKKwl9CisKKwkvKiBzZXQgY21hcCAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlpbmZvLT5jbWFwLnJlZFtpXSA9ICgoKDIqaSkrMSkqKDB4RkZGRikpLzMyOworCW1lbWNweShpbmZvLT5jbWFwLmdyZWVuLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqMTYpOworCW1lbWNweShpbmZvLT5jbWFwLmJsdWUsIGluZm8tPmNtYXAucmVkLCBzaXplb2YodTE2KSoxNik7CisKKwlyZXR2YWwgPSBwYXItPmJvYXJkLT5zZXR1cF9pcnEoaW5mbyk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX2NtYXA7CisKKwkvKiB0aGlzIGluaXRzIHRoZSBkcHkgKi8KKwlyZXR2YWwgPSBib2FyZC0+aW5pdChwYXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCWJyb2Fkc2hlZXRfaW5pdChwYXIpOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJmYiVkOiBCcm9hZHNoZWV0IGZyYW1lIGJ1ZmZlciwgdXNpbmcgJWRLIG9mIHZpZGVvIG1lbW9yeVxuIiwKKwkgICAgICAgaW5mby0+bm9kZSwgdmlkZW9tZW1vcnlzaXplID4+IDEwKTsKKworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlib2FyZC0+Y2xlYW51cChwYXIpOworZXJyX2NtYXA6CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKK2Vycl92ZnJlZToKKwl2ZnJlZSh2aWRlb21lbW9yeSk7CitlcnJfZmJfcmVsOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CitlcnI6CisJbW9kdWxlX3B1dChib2FyZC0+b3duZXIpOworCXJldHVybiByZXR2YWw7CisKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYnJvYWRzaGVldGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGluZm8pIHsKKwkJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKKwkJcGFyLT5ib2FyZC0+Y2xlYW51cChwYXIpOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCQl2ZnJlZSgodm9pZCAqKWluZm8tPnNjcmVlbl9iYXNlKTsKKwkJbW9kdWxlX3B1dChwYXItPmJvYXJkLT5vd25lcik7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicm9hZHNoZWV0ZmJfZHJpdmVyID0geworCS5wcm9iZQk9IGJyb2Fkc2hlZXRmYl9wcm9iZSwKKwkucmVtb3ZlID0gYnJvYWRzaGVldGZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiYnJvYWRzaGVldGZiIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYnJvYWRzaGVldGZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZicm9hZHNoZWV0ZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJyb2Fkc2hlZXRmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJyb2Fkc2hlZXRmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChicm9hZHNoZWV0ZmJfaW5pdCk7Cittb2R1bGVfZXhpdChicm9hZHNoZWV0ZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBCcm9hZHNoZWV0IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9BVVRIT1IoIkpheWEgS3VtYXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwppbmRleCA3YTllNDJlLi44M2M1Y2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCkBAIC00Niw4ICs0Niw4IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC0xNDI1LDcgKzE0MjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU0hBUksKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2ZyYW1lYnVmZmVyLmg+CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGN5YmVycHJvX3ZsX3Byb2JlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggZDU4YzY4Yy4uMTVhMGVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtMTQsNyArMTQsNiBAQAogICoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCiAgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTI3LDkgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAKQEAgLTQ0LDcgKzQ1LDEyIEBACiAKICNkZWZpbmUgTENEQ19TSVpFCTB4MDQKICNkZWZpbmUgU0laRV9YTUFYKHgpCSgoKCh4KSA+PiA0KSAmIDB4M2YpIDw8IDIwKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIFNJWkVfWU1BWCh5KQkoKHkpICYgMHgxZmYpCisjZWxzZQorI2RlZmluZSBTSVpFX1lNQVgoeSkJKCh5KSAmIDB4M2ZmKQorI2VuZGlmCiAKICNkZWZpbmUgTENEQ19WUFcJMHgwOAogI2RlZmluZSBWUFdfVlBXKHgpCSgoeCkgJiAweDNmZikKQEAgLTU0LDcgKzYwLDEyIEBACiAjZGVmaW5lIENQT1NfQ0MwCSgxPDwzMCkKICNkZWZpbmUgQ1BPU19PUAkJKDE8PDI4KQogI2RlZmluZSBDUE9TX0NYUCh4KQkoKCh4KSAmIDNmZikgPDwgMTYpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKICNkZWZpbmUgQ1BPU19DWVAoeSkJKCh5KSAmIDB4MWZmKQorI2Vsc2UKKyNkZWZpbmUgQ1BPU19DWVAoeSkJKCh5KSAmIDB4M2ZmKQorI2VuZGlmCiAKICNkZWZpbmUgTENEQ19MQ1dIQgkweDEwCiAjZGVmaW5lIExDV0hCX0JLX0VOCSgxPDwzMSkKQEAgLTYzLDkgKzc0LDE2IEBACiAjZGVmaW5lIExDV0hCX0JEKHgpCSgoeCkgJiAweGZmKQogCiAjZGVmaW5lIExDRENfTENIQ0MJMHgxNAorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIExDSENDX0NVUl9DT0xfUihyKSAoKChyKSAmIDB4MWYpIDw8IDExKQogI2RlZmluZSBMQ0hDQ19DVVJfQ09MX0coZykgKCgoZykgJiAweDNmKSA8PCA1KQogI2RlZmluZSBMQ0hDQ19DVVJfQ09MX0IoYikgKChiKSAmIDB4MWYpCisjZWxzZQorI2RlZmluZSBMQ0hDQ19DVVJfQ09MX1IocikgKCgocikgJiAweDNmKSA8PCAxMikKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9HKGcpICgoKGcpICYgMHgzZikgPDwgNikKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9CKGIpICgoYikgJiAweDNmKQorI2VuZGlmCiAKICNkZWZpbmUgTENEQ19QQ1IJMHgxOAogCkBAIC05Miw3ICsxMTAsMTMgQEAKIC8qIGJpdCBmaWVsZHMgaW4gaW14ZmIuaCAqLwogCiAjZGVmaW5lIExDRENfUk1DUgkweDM0CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKICNkZWZpbmUgUk1DUl9MQ0RDX0VOCSgxPDwxKQorI2Vsc2UKKyNkZWZpbmUgUk1DUl9MQ0RDX0VOCTAKKyNlbmRpZgorCiAjZGVmaW5lIFJNQ1JfU0VMRl9SRUYJKDE8PDApCiAKICNkZWZpbmUgTENEQ19MQ0RJQ1IJMHgzOApAQCAtMTE5LDYgKzE0Myw3IEBACiBzdHJ1Y3QgaW14ZmJfaW5mbyB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAgKnBkZXY7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlzdHJ1Y3QgY2xrCQkqY2xrOwogCiAJdV9pbnQJCQltYXhfYnBwOwogCXVfaW50CQkJbWF4X3hyZXM7CkBAIC0xNTksNiArMTg0LDE3IEBACiAjZGVmaW5lIE1JTl9YUkVTCTY0CiAjZGVmaW5lIE1JTl9ZUkVTCTY0CiAKKy8qIEFjdHVhbGx5IHRoaXMgcmVhbGx5IGlzIDE4Yml0IHN1cHBvcnQsIHRoZSBsb3dlc3QgMiBiaXRzIG9mIGVhY2ggY29sb3VyCisgKiBhcmUgdW51c2VkIGluIGhhcmR3YXJlLiBXZSBjbGFpbSB0byBoYXZlIDI0Yml0IHN1cHBvcnQgdG8gbWFrZSBzb2Z0d2FyZQorICogbGlrZSBYIHdvcmssIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgMThiaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14ZmJfcmdiIGRlZl9yZ2JfMTggPSB7CisJLnJlZAk9IHsub2Zmc2V0ID0gMTYsIC5sZW5ndGggPSA4LH0sCisJLmdyZWVuCT0gey5vZmZzZXQgPSA4LCAubGVuZ3RoID0gOCx9LAorCS5ibHVlCT0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gOCx9LAorCS50cmFuc3AgPSB7Lm9mZnNldCA9IDAsIC5sZW5ndGggPSAwLH0sCit9OworCiBzdGF0aWMgc3RydWN0IGlteGZiX3JnYiBkZWZfcmdiXzE2X3RmdCA9IHsKIAkucmVkCT0gey5vZmZzZXQgPSAxMSwgLmxlbmd0aCA9IDUsfSwKIAkuZ3JlZW4JPSB7Lm9mZnNldCA9IDUsIC5sZW5ndGggPSA2LH0sCkBAIC0yODYsOSArMzIyLDEyIEBACiAKIAlwcl9kZWJ1ZygidmFyLT5iaXRzX3Blcl9waXhlbD0lZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CiAJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAzMjoKKwkJcmdiID0gJmRlZl9yZ2JfMTg7CisJCWJyZWFrOwogCWNhc2UgMTY6CiAJZGVmYXVsdDoKLQkJaWYgKHJlYWRsKGZiaS0+cmVncyArIExDRENfUENSKSAmIFBDUl9URlQpCisJCWlmIChmYmktPnBjciAmIFBDUl9URlQpCiAJCQlyZ2IgPSAmZGVmX3JnYl8xNl90ZnQ7CiAJCWVsc2UKIAkJCXJnYiA9ICZkZWZfcmdiXzE2X3N0bjsKQEAgLTMyNyw5ICszNjYsNyBAQAogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOwogCi0JcHJfZGVidWcoInNldF9wYXJcbiIpOwotCi0JaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYgfHwgdmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikKIAkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJZWxzZSBpZiAoIWZiaS0+Y21hcF9zdGF0aWMpCiAJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CkBAIC0zNTQsMTAgKzM5MSw2IEBACiB7CiAJcHJfZGVidWcoIkVuYWJsaW5nIExDRCBjb250cm9sbGVyXG4iKTsKIAotCS8qIGluaXRpYWxpemUgTENEQyAqLwotCXdyaXRlbChyZWFkbChmYmktPnJlZ3MgKyBMQ0RDX1JNQ1IpICYgflJNQ1JfTENEQ19FTiwKLQkJZmJpLT5yZWdzICsgTENEQ19STUNSKTsJLyoganVzdCB0byBiZSBzYWZlLi4uICovCi0KIAl3cml0ZWwoZmJpLT5zY3JlZW5fZG1hLCBmYmktPnJlZ3MgKyBMQ0RDX1NTQSk7CiAKIAkvKiBwaHlzaWNhbCBzY3JlZW4gc3RhcnQgYWRkcmVzcwkgICAgKi8KQEAgLTM3Myw2ICs0MDYsOCBAQAogCiAJd3JpdGVsKFJNQ1JfTENEQ19FTiwgZmJpLT5yZWdzICsgTENEQ19STUNSKTsKIAorCWNsa19lbmFibGUoZmJpLT5jbGspOworCiAJaWYgKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQogCQlmYmktPmJhY2tsaWdodF9wb3dlcigxKTsKIAlpZiAoZmJpLT5sY2RfcG93ZXIpCkBAIC0zODgsNiArNDIzLDggQEAKIAlpZiAoZmJpLT5sY2RfcG93ZXIpCiAJCWZiaS0+bGNkX3Bvd2VyKDApOwogCisJY2xrX2Rpc2FibGUoZmJpLT5jbGspOworCiAJd3JpdGVsKDAsIGZiaS0+cmVncyArIExDRENfUk1DUik7CiB9CiAKQEAgLTQzMSw2ICs0NjgsOSBAQAogc3RhdGljIGludCBpbXhmYl9hY3RpdmF0ZV92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IHBjciwgbGNkX2NsazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOworCiAJcHJfZGVidWcoInZhcjogeHJlcz0lZCBoc2xlbj0lZCBsbT0lZCBybT0lZFxuIiwKIAkJdmFyLT54cmVzLCB2YXItPmhzeW5jX2xlbiwKIAkJdmFyLT5sZWZ0X21hcmdpbiwgdmFyLT5yaWdodF9tYXJnaW4pOwpAQCAtNDY1LDkgKzUwNSw5IEBACiAJCQlpbmZvLT5maXguaWQsIHZhci0+bG93ZXJfbWFyZ2luKTsKICNlbmRpZgogCi0Jd3JpdGVsKEhDUl9IX1dJRFRIKHZhci0+aHN5bmNfbGVuKSB8Ci0JCUhDUl9IX1dBSVRfMSh2YXItPnJpZ2h0X21hcmdpbikgfAotCQlIQ1JfSF9XQUlUXzIodmFyLT5sZWZ0X21hcmdpbiksCisJd3JpdGVsKEhDUl9IX1dJRFRIKHZhci0+aHN5bmNfbGVuIC0gMSkgfAorCQlIQ1JfSF9XQUlUXzEodmFyLT5yaWdodF9tYXJnaW4gLSAxKSB8CisJCUhDUl9IX1dBSVRfMih2YXItPmxlZnRfbWFyZ2luIC0gMyksCiAJCWZiaS0+cmVncyArIExDRENfSENSKTsKIAogCXdyaXRlbChWQ1JfVl9XSURUSCh2YXItPnZzeW5jX2xlbikgfApAQCAtNDc3LDcgKzUxNywyMyBAQAogCiAJd3JpdGVsKFNJWkVfWE1BWCh2YXItPnhyZXMpIHwgU0laRV9ZTUFYKHZhci0+eXJlcyksCiAJCQlmYmktPnJlZ3MgKyBMQ0RDX1NJWkUpOwotCXdyaXRlbChmYmktPnBjciwgZmJpLT5yZWdzICsgTENEQ19QQ1IpOworCisJbGNkX2NsayA9IGNsa19nZXRfcmF0ZShmYmktPmNsayk7CisJdG1wID0gdmFyLT5waXhjbG9jayAqICh1bnNpZ25lZCBsb25nIGxvbmcpbGNkX2NsazsKKwlkb19kaXYodG1wLCAxMDAwMDAwKTsKKwlpZiAoZG9fZGl2KHRtcCwgMTAwMDAwMCkgPiA1MDAwMDApCisJCXRtcCsrOworCXBjciA9ICh1bnNpZ25lZCBpbnQpdG1wOworCWlmICgtLXBjciA+IDB4M0YpIHsKKwkJcGNyID0gMHgzRjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTXVzdCBsaW1pdCBwaXhlbCBjbG9jayB0byAldUh6XG4iLAorCQkJCWxjZF9jbGsgLyBwY3IpOworCX0KKworCS8qIGFkZCBzeW5jIHBvbGFyaXRpZXMgKi8KKwlwY3IgfD0gZmJpLT5wY3IgJiB+MHgzRjsKKworCXdyaXRlbChwY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKIAl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOwogCXdyaXRlbChmYmktPmxzY3IxLCBmYmktPnJlZ3MgKyBMQ0RDX0xTQ1IxKTsKIAl3cml0ZWwoZmJpLT5kbWFjciwgZmJpLT5yZWdzICsgTENEQ19ETUFDUik7CkBAIC02MTksNiArNjc1LDEzIEBACiAJCWdvdG8gZmFpbGVkX3JlcTsKIAl9CiAKKwlmYmktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihmYmktPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihmYmktPmNsayk7OworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBmYWlsZWRfZ2V0Y2xvY2s7CisJfQorCiAJZmJpLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChmYmktPnJlZ3MgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIiQ2Fubm90IG1hcCBmcmFtZSBidWZmZXIgcmVnaXN0ZXJzXG4iKTsKQEAgLTY1MCw2ICs3MTMsMTIgQEAKIAkJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBmYmktPnNjcmVlbl9kbWE7CiAJfQogCisJaWYgKHBkYXRhLT5pbml0KSB7CisJCXJldCA9IHBkYXRhLT5pbml0KGZiaS0+cGRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZF9wbGF0Zm9ybV9pbml0OworCX0KKwogCS8qCiAJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3VyIGNvbG91ciBiaXRmaWVsZAogCSAqIGRlc2NyaXB0b3JzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGlzZWQuCkBAIC02NzQsMTAgKzc0MywxNSBAQAogZmFpbGVkX3JlZ2lzdGVyOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBmYWlsZWRfY21hcDoKKwlpZiAocGRhdGEtPmV4aXQpCisJCXBkYXRhLT5leGl0KGZiaS0+cGRldik7CitmYWlsZWRfcGxhdGZvcm1faW5pdDoKIAlpZiAoIXBkYXRhLT5maXhlZF9zY3JlZW5fY3B1KQogCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJnBkZXYtPmRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKIAkJCWZiaS0+bWFwX2RtYSk7CiBmYWlsZWRfbWFwOgorCWNsa19wdXQoZmJpLT5jbGspOworZmFpbGVkX2dldGNsb2NrOgogCWlvdW5tYXAoZmJpLT5yZWdzKTsKIGZhaWxlZF9pb3JlbWFwOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOwpAQCAtNjkxLDYgKzc2NSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGlteGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtNzAxLDEyICs3NzYsMTkgQEAKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YS0+ZXhpdCkKKwkJcGRhdGEtPmV4aXQoZmJpLT5wZGV2KTsKKwogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAKIAlpb3VubWFwKGZiaS0+cmVncyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWNsa19kaXNhYmxlKGZiaS0+Y2xrKTsKKwljbGtfcHV0KGZiaS0+Y2xrKTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKaW5kZXggOGE3NWQwNS4uZmExYTUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9teDNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwpAQCAtMzQsMjQwICszNCwyNDAgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jZGVmaW5lIE1YM0ZCX05BTUUgICAgICAgICAgICAgIm14M19zZGNfZmIiCisjZGVmaW5lIE1YM0ZCX05BTUUJCSJteDNfc2RjX2ZiIgogCi0jZGVmaW5lIE1YM0ZCX1JFR19PRkZTRVQgICAgICAgMHhCNAorI2RlZmluZSBNWDNGQl9SRUdfT0ZGU0VUCTB4QjQKIAogLyogU0RDIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTRENfQ09NX0NPTkYgICAgICAgICAgICgweEI0IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0dXX0NUUkwgICAgICAgICAgICAoMHhCOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19GR19QT1MgICAgICAgICAgICAgKDB4QkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfQkdfUE9TICAgICAgICAgICAgICgweEMwIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0NVUl9QT1MgICAgICAgICAgICAoMHhDNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19QV01fQ1RSTCAgICAgICAgICAgKDB4QzggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfQ1VSX01BUCAgICAgICAgICAgICgweENDIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0hPUl9DT05GICAgICAgICAgICAoMHhEMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19WRVJfQ09ORiAgICAgICAgICAgKDB4RDQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfU0hBUlBfQ09ORl8xICAgICAgICgweEQ4IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX1NIQVJQX0NPTkZfMiAgICAgICAoMHhEQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19DT01fQ09ORgkJKDB4QjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfR1dfQ1RSTAkJKDB4QjggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfRkdfUE9TCQkoMHhCQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19CR19QT1MJCSgweEMwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX0NVUl9QT1MJCSgweEM0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX1BXTV9DVFJMCQkoMHhDOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19DVVJfTUFQCQkoMHhDQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19IT1JfQ09ORgkJKDB4RDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfVkVSX0NPTkYJCSgweEQ0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX1NIQVJQX0NPTkZfMQkoMHhEOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19TSEFSUF9DT05GXzIJKDB4REMgLSBNWDNGQl9SRUdfT0ZGU0VUKQogCiAvKiBSZWdpc3RlciBiaXRzICovCi0jZGVmaW5lIFNEQ19DT01fVEZUX0NPTE9SICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFNEQ19DT01fRkdfRU4gICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFNEQ19DT01fR1dTRUwgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIFNEQ19DT01fR0xCX0EgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFNEQ19DT01fS0VZX0NPTE9SX0cgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFNEQ19DT01fQkdfRU4gICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFNEQ19DT01fU0hBUlAgICAgICAgICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIFNEQ19DT01fVEZUX0NPTE9SCTB4MDAwMDAwMDFVTAorI2RlZmluZSBTRENfQ09NX0ZHX0VOCQkweDAwMDAwMDEwVUwKKyNkZWZpbmUgU0RDX0NPTV9HV1NFTAkJMHgwMDAwMDAyMFVMCisjZGVmaW5lIFNEQ19DT01fR0xCX0EJCTB4MDAwMDAwNDBVTAorI2RlZmluZSBTRENfQ09NX0tFWV9DT0xPUl9HCTB4MDAwMDAwODBVTAorI2RlZmluZSBTRENfQ09NX0JHX0VOCQkweDAwMDAwMjAwVUwKKyNkZWZpbmUgU0RDX0NPTV9TSEFSUAkJMHgwMDAwMTAwMFVMCiAKLSNkZWZpbmUgU0RDX1ZfU1lOQ19XSURUSF9MICAgICAweDAwMDAwMDAxVUwKKyNkZWZpbmUgU0RDX1ZfU1lOQ19XSURUSF9MCTB4MDAwMDAwMDFVTAogCiAvKiBEaXNwbGF5IEludGVyZmFjZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRElfRElTUF9JRl9DT05GICAgICAgICAgICAgICAgICgweDAxMjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX1NJR19QT0wgICAgICAgICAgICAgICAgKDB4MDEyOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX1NFUl9ESVNQMV9DT05GICAgICAgKDB4MDEyQyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX1NFUl9ESVNQMl9DT05GICAgICAgKDB4MDEzMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0hTUF9DTEtfUEVSICAgICAgICAgKDB4MDEzNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8xICAgKDB4MDEzOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8yICAgKDB4MDEzQyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8zICAgKDB4MDE0MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8xICAgKDB4MDE0NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8yICAgKDB4MDE0OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8zICAgKDB4MDE0QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8xICAgKDB4MDE1MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8yICAgKDB4MDE1NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8zICAgKDB4MDE1OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AzX1RJTUVfQ09ORiAgICAgKDB4MDE1QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0RCMF9NQVAgICAgICAgKDB4MDE2MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0RCMV9NQVAgICAgICAgKDB4MDE2NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0RCMl9NQVAgICAgICAgKDB4MDE2OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0NCMF9NQVAgICAgICAgKDB4MDE2QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0NCMV9NQVAgICAgICAgKDB4MDE3MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AwX0NCMl9NQVAgICAgICAgKDB4MDE3NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0RCMF9NQVAgICAgICAgKDB4MDE3OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0RCMV9NQVAgICAgICAgKDB4MDE3QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0RCMl9NQVAgICAgICAgKDB4MDE4MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0NCMF9NQVAgICAgICAgKDB4MDE4NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0NCMV9NQVAgICAgICAgKDB4MDE4OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AxX0NCMl9NQVAgICAgICAgKDB4MDE4QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0RCMF9NQVAgICAgICAgKDB4MDE5MCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0RCMV9NQVAgICAgICAgKDB4MDE5NCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0RCMl9NQVAgICAgICAgKDB4MDE5OCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0NCMF9NQVAgICAgICAgKDB4MDE5QyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0NCMV9NQVAgICAgICAgKDB4MDFBMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AyX0NCMl9NQVAgICAgICAgKDB4MDFBNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AzX0IwX01BUCAgICAgICAgICAgICAgICAoMHgwMUE4IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgRElfRElTUDNfQjFfTUFQICAgICAgICAgICAgICAgICgweDAxQUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQM19CMl9NQVAgICAgICAgICAgICAgICAgKDB4MDFCMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1BfQUNDX0NDICAgICAgICAgKDB4MDFCNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1BfTExBX0NPTkYgICAgICAgKDB4MDFCOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1BfTExBX0RBVEEgICAgICAgKDB4MDFCQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfSUZfQ09ORgkJKDB4MDEyNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfU0lHX1BPTAkJKDB4MDEyOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX1NFUl9ESVNQMV9DT05GCSgweDAxMkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9TRVJfRElTUDJfQ09ORgkoMHgwMTMwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfSFNQX0NMS19QRVIJCSgweDAxMzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMQkoMHgwMTM4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDBfVElNRV9DT05GXzIJKDB4MDEzQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8zCSgweDAxNDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMQkoMHgwMTQ0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDFfVElNRV9DT05GXzIJKDB4MDE0OCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8zCSgweDAxNEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMQkoMHgwMTUwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDJfVElNRV9DT05GXzIJKDB4MDE1NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8zCSgweDAxNTggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19USU1FX0NPTkYJKDB4MDE1QyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0RCMF9NQVAJKDB4MDE2MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0RCMV9NQVAJKDB4MDE2NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0RCMl9NQVAJKDB4MDE2OCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0NCMF9NQVAJKDB4MDE2QyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0NCMV9NQVAJKDB4MDE3MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX0NCMl9NQVAJKDB4MDE3NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0RCMF9NQVAJKDB4MDE3OCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0RCMV9NQVAJKDB4MDE3QyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0RCMl9NQVAJKDB4MDE4MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0NCMF9NQVAJKDB4MDE4NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0NCMV9NQVAJKDB4MDE4OCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX0NCMl9NQVAJKDB4MDE4QyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0RCMF9NQVAJKDB4MDE5MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0RCMV9NQVAJKDB4MDE5NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0RCMl9NQVAJKDB4MDE5OCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0NCMF9NQVAJKDB4MDE5QyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0NCMV9NQVAJKDB4MDFBMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX0NCMl9NQVAJKDB4MDFBNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AzX0IwX01BUAkJKDB4MDFBOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AzX0IxX01BUAkJKDB4MDFBQyAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AzX0IyX01BUAkJKDB4MDFCMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfQUNDX0NDCQkoMHgwMUI0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUF9MTEFfQ09ORgkoMHgwMUI4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUF9MTEFfREFUQQkoMHgwMUJDIC0gTVgzRkJfUkVHX09GRlNFVCkKIAogLyogRElfRElTUF9TSUdfUE9MIGJpdHMgKi8KLSNkZWZpbmUgRElfRDNfVlNZTkNfUE9MX1NISUZUICAgICAgICAgIDI4Ci0jZGVmaW5lIERJX0QzX0hTWU5DX1BPTF9TSElGVCAgICAgICAgICAyNwotI2RlZmluZSBESV9EM19EUkRZX1NIQVJQX1BPTF9TSElGVCAgICAgMjYKLSNkZWZpbmUgRElfRDNfQ0xLX1BPTF9TSElGVCAgICAgICAgICAgIDI1Ci0jZGVmaW5lIERJX0QzX0RBVEFfUE9MX1NISUZUICAgICAgICAgICAyNAorI2RlZmluZSBESV9EM19WU1lOQ19QT0xfU0hJRlQJCTI4CisjZGVmaW5lIERJX0QzX0hTWU5DX1BPTF9TSElGVAkJMjcKKyNkZWZpbmUgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQJMjYKKyNkZWZpbmUgRElfRDNfQ0xLX1BPTF9TSElGVAkJMjUKKyNkZWZpbmUgRElfRDNfREFUQV9QT0xfU0hJRlQJCTI0CiAKIC8qIERJX0RJU1BfSUZfQ09ORiBiaXRzICovCi0jZGVmaW5lIERJX0QzX0NMS19JRExFX1NISUZUICAgICAgICAgICAyNgotI2RlZmluZSBESV9EM19DTEtfU0VMX1NISUZUICAgICAgICAgICAgMjUKLSNkZWZpbmUgRElfRDNfREFUQU1TS19TSElGVCAgICAgICAgICAgIDI0CisjZGVmaW5lIERJX0QzX0NMS19JRExFX1NISUZUCQkyNgorI2RlZmluZSBESV9EM19DTEtfU0VMX1NISUZUCQkyNQorI2RlZmluZSBESV9EM19EQVRBTVNLX1NISUZUCQkyNAogCiBlbnVtIGlwdV9wYW5lbCB7Ci0gICAgICAgSVBVX1BBTkVMX1NIQVJQX1RGVCwKLSAgICAgICBJUFVfUEFORUxfVEZULAorCUlQVV9QQU5FTF9TSEFSUF9URlQsCisJSVBVX1BBTkVMX1RGVCwKIH07CiAKIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyB7Ci0gICAgICAgdW5zaWduZWQgZGF0YW1hc2tfZW46MTsKLSAgICAgICB1bnNpZ25lZCBjbGtzZWxfZW46MTsKLSAgICAgICB1bnNpZ25lZCBjbGtpZGxlX2VuOjE7Ci0gICAgICAgdW5zaWduZWQgZGF0YV9wb2w6MTsgICAgLyogdHJ1ZSA9IGludmVydGVkICovCi0gICAgICAgdW5zaWduZWQgY2xrX3BvbDoxOyAgICAgLyogdHJ1ZSA9IHJpc2luZyBlZGdlICovCi0gICAgICAgdW5zaWduZWQgZW5hYmxlX3BvbDoxOwotICAgICAgIHVuc2lnbmVkIEhzeW5jX3BvbDoxOyAgIC8qIHRydWUgPSBhY3RpdmUgaGlnaCAqLwotICAgICAgIHVuc2lnbmVkIFZzeW5jX3BvbDoxOworCXVuc2lnbmVkIGRhdGFtYXNrX2VuOjE7CisJdW5zaWduZWQgY2xrc2VsX2VuOjE7CisJdW5zaWduZWQgY2xraWRsZV9lbjoxOworCXVuc2lnbmVkIGRhdGFfcG9sOjE7CS8qIHRydWUgPSBpbnZlcnRlZCAqLworCXVuc2lnbmVkIGNsa19wb2w6MTsJLyogdHJ1ZSA9IHJpc2luZyBlZGdlICovCisJdW5zaWduZWQgZW5hYmxlX3BvbDoxOworCXVuc2lnbmVkIEhzeW5jX3BvbDoxOwkvKiB0cnVlID0gYWN0aXZlIGhpZ2ggKi8KKwl1bnNpZ25lZCBWc3luY19wb2w6MTsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG14M2ZiX21vZGVkYltdID0gewotICAgICAgIHsKLSAgICAgICAgICAgICAgIC8qIDI0MHgzMjAgQCA2MCBIeiAqLwotICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlNoYXJwLVFWR0EiLAotICAgICAgICAgICAgICAgLnJlZnJlc2ggICAgICAgID0gNjAsCi0gICAgICAgICAgICAgICAueHJlcyAgICAgICAgICAgPSAyNDAsCi0gICAgICAgICAgICAgICAueXJlcyAgICAgICAgICAgPSAzMjAsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAxODU5MjUsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSA5LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gMTYsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSA3LAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gOSwKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDEsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1NIQVJQX01PREUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19EQVRBX0lOVkVSVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQl9TWU5DX0NMS19JRExFX0VOLAotICAgICAgICAgICAgICAgLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgICAgICAgIC5mbGFnICAgICAgICAgICA9IDAsCi0gICAgICAgfSwgewotICAgICAgICAgICAgICAgLyogMjQweDMzIEAgNjAgSHogKi8KLSAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJTaGFycC1DTEkiLAotICAgICAgICAgICAgICAgLnJlZnJlc2ggICAgICAgID0gNjAsCi0gICAgICAgICAgICAgICAueHJlcyAgICAgICAgICAgPSAyNDAsCi0gICAgICAgICAgICAgICAueXJlcyAgICAgICAgICAgPSAzMywKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDE4NTkyNSwKLSAgICAgICAgICAgICAgIC5sZWZ0X21hcmdpbiAgICA9IDksCi0gICAgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSAxNiwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDcsCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSA5ICsgMjg3LAotICAgICAgICAgICAgICAgLmhzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC52c3luY19sZW4gICAgICA9IDEsCi0gICAgICAgICAgICAgICAuc3luYyAgICAgICAgICAgPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfU0hBUlBfTU9ERSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQl9TWU5DX0NMS19JTlZFUlQgfCBGQl9TWU5DX0RBVEFfSU5WRVJUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCX1NZTkNfQ0xLX0lETEVfRU4sCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiA2NDB4NDgwIEAgNjAgSHogKi8KLSAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJORUMtVkdBIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gNjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gNDgwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gMzgyNTUsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSAxNDQsCi0gICAgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSAwLAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gMzQsCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSA0MCwKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDEsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUIHwgRkJfU1lOQ19PRV9BQ1RfSElHSCwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIC8qIE5UU0MgVFYgb3V0cHV0ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiVFYtTlRTQyIsCi0gICAgICAgICAgICAgICAucmVmcmVzaCAgICAgICAgPSA2MCwKLSAgICAgICAgICAgICAgIC54cmVzICAgICAgICAgICA9IDY0MCwKLSAgICAgICAgICAgICAgIC55cmVzICAgICAgICAgICA9IDQ4MCwKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDM3NTM4LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gMzgsCi0gICAgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSA4NTggLSA2NDAgLSAzOCAtIDMsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSAzNiwKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDUxOCAtIDQ4MCAtIDM2IC0gMSwKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDMsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gMCwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIC8qIFBBTCBUViBvdXRwdXQgKi8KLSAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJUVi1QQUwiLAotICAgICAgICAgICAgICAgLnJlZnJlc2ggICAgICAgID0gNTAsCi0gICAgICAgICAgICAgICAueHJlcyAgICAgICAgICAgPSA2NDAsCi0gICAgICAgICAgICAgICAueXJlcyAgICAgICAgICAgPSA0ODAsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAzNzUzOCwKLSAgICAgICAgICAgICAgIC5sZWZ0X21hcmdpbiAgICA9IDM4LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gOTYwIC0gNjQwIC0gMzggLSAzMiwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDMyLAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gNTU1IC0gNDgwIC0gMzIgLSAzLAotICAgICAgICAgICAgICAgLmhzeW5jX2xlbiAgICAgID0gMzIsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAzLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gMCwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIC8qIFRWIG91dHB1dCBWR0EgbW9kZSwgNjQweDQ4MCBAIDY1IEh6ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiVFYtVkdBIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gNjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gNDgwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gNDA1NzQsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSAzNSwKLSAgICAgICAgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDQ1LAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gOSwKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDEsCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSA0NiwKLSAgICAgICAgICAgICAgIC52c3luY19sZW4gICAgICA9IDUsCi0gICAgICAgICAgICAgICAuc3luYyAgICAgICAgICAgPSAwLAotICAgICAgICAgICAgICAgLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgICAgICAgIC5mbGFnICAgICAgICAgICA9IDAsCi0gICAgICAgfSwKKwl7CisJCS8qIDI0MHgzMjAgQCA2MCBIeiAqLworCQkubmFtZQkJPSAiU2hhcnAtUVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAxODU5MjUsCisJCS5sZWZ0X21hcmdpbgk9IDksCisJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQkuaHN5bmNfbGVuCT0gMSwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwKKwkJCQkgIEZCX1NZTkNfQ0xLX0lOVkVSVCB8IEZCX1NZTkNfREFUQV9JTlZFUlQgfAorCQkJCSAgRkJfU1lOQ19DTEtfSURMRV9FTiwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiAyNDB4MzMgQCA2MCBIeiAqLworCQkubmFtZQkJPSAiU2hhcnAtQ0xJIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gMjQwLAorCQkueXJlcwkJPSAzMywKKwkJLnBpeGNsb2NrCT0gMTg1OTI1LAorCQkubGVmdF9tYXJnaW4JPSA5LAorCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gOSArIDI4NywKKwkJLmhzeW5jX2xlbgk9IDEsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfU0hBUlBfTU9ERSB8CisJCQkJICBGQl9TWU5DX0NMS19JTlZFUlQgfCBGQl9TWU5DX0RBVEFfSU5WRVJUIHwKKwkJCQkgIEZCX1NZTkNfQ0xLX0lETEVfRU4sCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogNjQweDQ4MCBAIDYwIEh6ICovCisJCS5uYW1lCQk9ICJORUMtVkdBIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDM4MjU1LAorCQkubGVmdF9tYXJnaW4JPSAxNDQsCisJCS5yaWdodF9tYXJnaW4JPSAwLAorCQkudXBwZXJfbWFyZ2luCT0gMzQsCisJCS5sb3dlcl9tYXJnaW4JPSA0MCwKKwkJLmhzeW5jX2xlbgk9IDEsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX09FX0FDVF9ISUdILAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LCB7CisJCS8qIE5UU0MgVFYgb3V0cHV0ICovCisJCS5uYW1lCQk9ICJUVi1OVFNDIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDM3NTM4LAorCQkubGVmdF9tYXJnaW4JPSAzOCwKKwkJLnJpZ2h0X21hcmdpbgk9IDg1OCAtIDY0MCAtIDM4IC0gMywKKwkJLnVwcGVyX21hcmdpbgk9IDM2LAorCQkubG93ZXJfbWFyZ2luCT0gNTE4IC0gNDgwIC0gMzYgLSAxLAorCQkuaHN5bmNfbGVuCT0gMywKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogUEFMIFRWIG91dHB1dCAqLworCQkubmFtZQkJPSAiVFYtUEFMIiwKKwkJLnJlZnJlc2gJPSA1MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDM3NTM4LAorCQkubGVmdF9tYXJnaW4JPSAzOCwKKwkJLnJpZ2h0X21hcmdpbgk9IDk2MCAtIDY0MCAtIDM4IC0gMzIsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkJLmxvd2VyX21hcmdpbgk9IDU1NSAtIDQ4MCAtIDMyIC0gMywKKwkJLmhzeW5jX2xlbgk9IDMyLAorCQkudnN5bmNfbGVuCT0gMywKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiBUViBvdXRwdXQgVkdBIG1vZGUsIDY0MHg0ODAgQCA2NSBIeiAqLworCQkubmFtZQkJPSAiVFYtVkdBIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDQwNTc0LAorCQkubGVmdF9tYXJnaW4JPSAzNSwKKwkJLnJpZ2h0X21hcmdpbgk9IDQ1LAorCQkudXBwZXJfbWFyZ2luCT0gOSwKKwkJLmxvd2VyX21hcmdpbgk9IDEsCisJCS5oc3luY19sZW4JPSA0NiwKKwkJLnZzeW5jX2xlbgk9IDUsCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sCiB9OwogCiBzdHJ1Y3QgbXgzZmJfZGF0YSB7Ci0gICAgICAgc3RydWN0IGZiX2luZm8gICAgICAgICAgKmZiaTsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBiYWNrbGlnaHRfbGV2ZWw7Ci0gICAgICAgdm9pZCBfX2lvbWVtICAgICAgICAgICAgKnJlZ19iYXNlOwotICAgICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Ci0gICAgICAgc3RydWN0IGRldmljZSAgICAgICAgICAgKmRldjsKKwlzdHJ1Y3QgZmJfaW5mbwkJKmZiaTsKKwlpbnQJCQliYWNrbGlnaHRfbGV2ZWw7CisJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCi0gICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgaF9zdGFydF93aWR0aDsKLSAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICB2X3N0YXJ0X3dpZHRoOworCXVpbnQzMl90CQloX3N0YXJ0X3dpZHRoOworCXVpbnQzMl90CQl2X3N0YXJ0X3dpZHRoOwogfTsKIAogc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICAgICAgICpteDNmYjsKLSAgICAgICBlbnVtIGlwdV9jaGFubmVsICAgICAgICBpZDsKKwlzdHJ1Y3QgbXgzZmJfZGF0YQkqbXgzZmI7CisJZW51bSBpcHVfY2hhbm5lbAlpZDsKIH07CiAKIC8qIE1YMyBzcGVjaWZpYyBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbi4gKi8KIHN0cnVjdCBteDNmYl9pbmZvIHsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rOwotICAgICAgIGVudW0gaXB1X2NoYW5uZWwgICAgICAgICAgICAgICAgaXB1X2NoOwotICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2lwdV9idWY7CisJaW50CQkJCWJsYW5rOworCWVudW0gaXB1X2NoYW5uZWwJCWlwdV9jaDsKKwl1aW50MzJfdAkJCWN1cl9pcHVfYnVmOwogCi0gICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fcGFsZXR0ZVsxNl07CisJdTMyCQkJCXBzZXVkb19wYWxldHRlWzE2XTsKIAotICAgICAgIHN0cnVjdCBjb21wbGV0aW9uICAgICAgICAgICAgICAgZmxpcF9jbXBsOwotICAgICAgIHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgbXV0ZXg7ICAvKiBQcm90ZWN0cyBmYi1vcHMgKi8KLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAgICAgICAgICAgICAgICpteDNmYjsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAgICAgICAgICAgICppZG1hY19jaGFubmVsOwotICAgICAgIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAgKnR4ZDsKLSAgICAgICBkbWFfY29va2llX3QgICAgICAgICAgICAgICAgICAgIGNvb2tpZTsKLSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgICAgICAgICAgICAgIHNnWzJdOworCXN0cnVjdCBjb21wbGV0aW9uCQlmbGlwX2NtcGw7CisJc3RydWN0IG11dGV4CQkJbXV0ZXg7CS8qIFByb3RlY3RzIGZiLW9wcyAqLworCXN0cnVjdCBteDNmYl9kYXRhCQkqbXgzZmI7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwJCSppZG1hY19jaGFubmVsOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqdHhkOworCWRtYV9jb29raWVfdAkJCWNvb2tpZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCXNnWzJdOwogCi0gICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jOyAgIC8qIHByZXNlcnZlIHZhci0+c3luYyBmbGFncyAqLworCXUzMgkJCQlzeW5jOwkvKiBwcmVzZXJ2ZSB2YXItPnN5bmMgZmxhZ3MgKi8KIH07CiAKIHN0YXRpYyB2b2lkIG14M2ZiX2RtYV9kb25lKHZvaWQgKik7CkBAIC0yNzgsMzg5ICsyNzgsMzg5IEBACiAKIHN0YXRpYyB1MzIgbXgzZmJfcmVhZF9yZWcoc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCB1bnNpZ25lZCBsb25nIHJlZykKIHsKLSAgICAgICByZXR1cm4gX19yYXdfcmVhZGwobXgzZmItPnJlZ19iYXNlICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwobXgzZmItPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgbXgzZmJfd3JpdGVfcmVnKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgdTMyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHJlZykKIHsKLSAgICAgICBfX3Jhd193cml0ZWwodmFsdWUsIG14M2ZiLT5yZWdfYmFzZSArIHJlZyk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBteDNmYi0+cmVnX2Jhc2UgKyByZWcpOwogfQogCiBzdGF0aWMgY29uc3QgdWludDMyX3QgZGlfbWFwcGluZ3NbXSA9IHsKLSAgICAgICAweDE2MDBBQUFBLCAweDAwRTA1NTU1LCAweDAwMDcwMDAwLCAzLCAgLyogUkdCODg4ICovCi0gICAgICAgMHgwMDA1MDAwRiwgMHgwMDBCMDAwRiwgMHgwMDExMDAwRiwgMSwgIC8qIFJHQjY2NiAqLwotICAgICAgIDB4MDAxMTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAwNTAwMEYsIDEsICAvKiBCR1I2NjYgKi8KLSAgICAgICAweDAwMDQwMDNGLCAweDAwMEEwMDBGLCAweDAwMEYwMDNGLCAxICAgLyogUkdCNTY1ICovCisJMHgxNjAwQUFBQSwgMHgwMEUwNTU1NSwgMHgwMDA3MDAwMCwgMywJLyogUkdCODg4ICovCisJMHgwMDA1MDAwRiwgMHgwMDBCMDAwRiwgMHgwMDExMDAwRiwgMSwJLyogUkdCNjY2ICovCisJMHgwMDExMDAwRiwgMHgwMDBCMDAwRiwgMHgwMDA1MDAwRiwgMSwJLyogQkdSNjY2ICovCisJMHgwMDA0MDAzRiwgMHgwMDBBMDAwRiwgMHgwMDBGMDAzRiwgMQkvKiBSR0I1NjUgKi8KIH07CiAKIHN0YXRpYyB2b2lkIHNkY19mYl9pbml0KHN0cnVjdCBteDNmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gZmJpLT5teDNmYjsKLSAgICAgICB1aW50MzJfdCByZWc7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gZmJpLT5teDNmYjsKKwl1aW50MzJfdCByZWc7CiAKLSAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKKwlyZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKIAotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnIHwgU0RDX0NPTV9CR19FTiwgU0RDX0NPTV9DT05GKTsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CiB9CiAKIC8qIFJldHVybnMgZW5hYmxlZCBmbGFnIGJlZm9yZSB1bmluaXQgKi8KIHN0YXRpYyB1aW50MzJfdCBzZGNfZmJfdW5pbml0KHN0cnVjdCBteDNmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gZmJpLT5teDNmYjsKLSAgICAgICB1aW50MzJfdCByZWc7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gZmJpLT5teDNmYjsKKwl1aW50MzJfdCByZWc7CiAKLSAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKKwlyZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKIAotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnICYgflNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgJiB+U0RDX0NPTV9CR19FTiwgU0RDX0NPTV9DT05GKTsKIAotICAgICAgIHJldHVybiByZWcgJiBTRENfQ09NX0JHX0VOOworCXJldHVybiByZWcgJiBTRENfQ09NX0JHX0VOOwogfQogCiBzdGF0aWMgdm9pZCBzZGNfZW5hYmxlX2NoYW5uZWwoc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbDsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJmljaGFuLT5kbWFfY2hhbjsKLSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgIGRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbDsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJmljaGFuLT5kbWFfY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9jb29raWVfdCBjb29raWU7CiAKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJteDNmYmkgJXAsIGRlc2MgJXAsIHNnICVwXG4iLCBteDNfZmJpLAotICAgICAgICAgICAgICAgdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLCB0b190eF9kZXNjKG14M19mYmktPnR4ZCktPnNnKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJteDNmYmkgJXAsIGRlc2MgJXAsIHNnICVwXG4iLCBteDNfZmJpLAorCQl0b190eF9kZXNjKG14M19mYmktPnR4ZCksIHRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKS0+c2cpOwogCi0gICAgICAgLyogVGhpcyBlbmFibGVzIHRoZSBjaGFubmVsICovCi0gICAgICAgaWYgKG14M19mYmktPmNvb2tpZSA8IDApIHsKLSAgICAgICAgICAgICAgIG14M19mYmktPnR4ZCA9IGRtYV9jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGRtYV9jaGFuLAotICAgICAgICAgICAgICAgICAgICAgJm14M19mYmktPnNnWzBdLCAxLCBETUFfVE9fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQpOwotICAgICAgICAgICAgICAgaWYgKCFteDNfZmJpLT50eGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihteDNmYi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGRlc2NyaXB0b3Igb24gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2NoYW4tPmNoYW5faWQpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICB9CisJLyogVGhpcyBlbmFibGVzIHRoZSBjaGFubmVsICovCisJaWYgKG14M19mYmktPmNvb2tpZSA8IDApIHsKKwkJbXgzX2ZiaS0+dHhkID0gZG1hX2NoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coZG1hX2NoYW4sCisJCSAgICAgICZteDNfZmJpLT5zZ1swXSwgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKKwkJaWYgKCFteDNfZmJpLT50eGQpIHsKKwkJCWRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBkZXNjcmlwdG9yIG9uICVkXG4iLAorCQkJCWRtYV9jaGFuLT5jaGFuX2lkKTsKKwkJCXJldHVybjsKKwkJfQogCi0gICAgICAgICAgICAgICBteDNfZmJpLT50eGQtPmNhbGxiYWNrX3BhcmFtICAgID0gbXgzX2ZiaS0+dHhkOwotICAgICAgICAgICAgICAgbXgzX2ZiaS0+dHhkLT5jYWxsYmFjayAgICAgICAgICA9IG14M2ZiX2RtYV9kb25lOworCQlteDNfZmJpLT50eGQtPmNhbGxiYWNrX3BhcmFtCT0gbXgzX2ZiaS0+dHhkOworCQlteDNfZmJpLT50eGQtPmNhbGxiYWNrCQk9IG14M2ZiX2RtYV9kb25lOwogCi0gICAgICAgICAgICAgICBjb29raWUgPSBteDNfZmJpLT50eGQtPnR4X3N1Ym1pdChteDNfZmJpLT50eGQpOwotICAgICAgICAgICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAiJWQ6IFN1Ym1pdCAlcCAjJWQgWyVjXVxuIiwgX19MSU5FX18sCi0gICAgICAgICAgICAgICAgICAgICAgbXgzX2ZiaS0+dHhkLCBjb29raWUsIGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkgPyAnLScgOiAnKycpOwotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICBpZiAoIW14M19mYmktPnR4ZCB8fCAhbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihteDNmYi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBjaGFubmVsICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jaGFuLT5jaGFuX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgfQorCQljb29raWUgPSBteDNfZmJpLT50eGQtPnR4X3N1Ym1pdChteDNfZmJpLT50eGQpOworCQlkZXZfZGJnKG14M2ZiLT5kZXYsICIlZDogU3VibWl0ICVwICMlZCBbJWNdXG4iLCBfX0xJTkVfXywKKwkJICAgICAgIG14M19mYmktPnR4ZCwgY29va2llLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKKwl9IGVsc2UgeworCQlpZiAoIW14M19mYmktPnR4ZCB8fCAhbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQpIHsKKwkJCWRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBlbmFibGUgY2hhbm5lbCAlZFxuIiwKKwkJCQlkbWFfY2hhbi0+Y2hhbl9pZCk7CisJCQlyZXR1cm47CisJCX0KIAotICAgICAgICAgICAgICAgLyogSnVzdCByZS1hY3RpdmF0ZSB0aGUgc2FtZSBidWZmZXIgKi8KLSAgICAgICAgICAgICAgIGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtYV9jaGFuKTsKLSAgICAgICAgICAgICAgIGNvb2tpZSA9IG14M19mYmktPmNvb2tpZTsKLSAgICAgICAgICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIiVkOiBSZS1zdWJtaXQgJXAgIyVkIFslY11cbiIsIF9fTElORV9fLAotICAgICAgICAgICAgICAgICAgICAgIG14M19mYmktPnR4ZCwgY29va2llLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKLSAgICAgICB9CisJCS8qIEp1c3QgcmUtYWN0aXZhdGUgdGhlIHNhbWUgYnVmZmVyICovCisJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtYV9jaGFuKTsKKwkJY29va2llID0gbXgzX2ZiaS0+Y29va2llOworCQlkZXZfZGJnKG14M2ZiLT5kZXYsICIlZDogUmUtc3VibWl0ICVwICMlZCBbJWNdXG4iLCBfX0xJTkVfXywKKwkJICAgICAgIG14M19mYmktPnR4ZCwgY29va2llLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKKwl9CiAKLSAgICAgICBpZiAoY29va2llID49IDApIHsKLSAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgc2RjX2ZiX2luaXQobXgzX2ZiaSk7Ci0gICAgICAgICAgICAgICBteDNfZmJpLT5jb29raWUgPSBjb29raWU7Ci0gICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgZmxhZ3MpOwotICAgICAgIH0KKwlpZiAoY29va2llID49IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJCXNkY19mYl9pbml0KG14M19mYmkpOworCQlteDNfZmJpLT5jb29raWUgPSBjb29raWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJfQogCi0gICAgICAgLyoKLSAgICAgICAgKiBBdHRlbnRpb24hIFdpdGhvdXQgdGhpcyBtc2xlZXAgdGhlIGNoYW5uZWwga2VlcHMgZ2VuZXJhdGluZwotICAgICAgICAqIGludGVycnVwdHMuIE5leHQgc2RjX3NldF9icmlnaHRuZXNzKCkgaXMgZ29pbmcgdG8gYmUgY2FsbGVkCi0gICAgICAgICogZnJvbSBteDNmYl9ibGFuaygpLgotICAgICAgICAqLwotICAgICAgIG1zbGVlcCgyKTsKKwkvKgorCSAqIEF0dGVudGlvbiEgV2l0aG91dCB0aGlzIG1zbGVlcCB0aGUgY2hhbm5lbCBrZWVwcyBnZW5lcmF0aW5nCisJICogaW50ZXJydXB0cy4gTmV4dCBzZGNfc2V0X2JyaWdodG5lc3MoKSBpcyBnb2luZyB0byBiZSBjYWxsZWQKKwkgKiBmcm9tIG14M2ZiX2JsYW5rKCkuCisJICovCisJbXNsZWVwKDIpOwogfQogCiBzdGF0aWMgdm9pZCBzZGNfZGlzYWJsZV9jaGFubmVsKHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOwotICAgICAgIHVpbnQzMl90IGVuYWJsZWQ7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKKwl1aW50MzJfdCBlbmFibGVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKIAotICAgICAgIGVuYWJsZWQgPSBzZGNfZmJfdW5pbml0KG14M19mYmkpOworCWVuYWJsZWQgPSBzZGNfZmJfdW5pbml0KG14M19mYmkpOwogCi0gICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgZmxhZ3MpOwogCi0gICAgICAgbXgzX2ZiaS0+dHhkLT5jaGFuLT5kZXZpY2UtPmRldmljZV90ZXJtaW5hdGVfYWxsKG14M19mYmktPnR4ZC0+Y2hhbik7Ci0gICAgICAgbXgzX2ZiaS0+dHhkID0gTlVMTDsKLSAgICAgICBteDNfZmJpLT5jb29raWUgPSAtRUlOVkFMOworCW14M19mYmktPnR4ZC0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfdGVybWluYXRlX2FsbChteDNfZmJpLT50eGQtPmNoYW4pOworCW14M19mYmktPnR4ZCA9IE5VTEw7CisJbXgzX2ZiaS0+Y29va2llID0gLUVJTlZBTDsKIH0KIAogLyoqCiAgKiBzZGNfc2V0X3dpbmRvd19wb3MoKSAtIHNldCB3aW5kb3cgcG9zaXRpb24gb2YgdGhlIHJlc3BlY3RpdmUgcGxhbmUuCi0gKiBAbXgzZmI6ICAgICBteDNmYiBjb250ZXh0LgotICogQGNoYW5uZWw6ICAgSVBVIERNQUMgY2hhbm5lbCBJRC4KLSAqIEB4X3BvczogICAgIFggY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgdG9wIGxlZnQgY29ybmVyIHRvIHBsYWNlIHdpbmRvdyBhdC4KLSAqIEB5X3BvczogICAgIFkgY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgdG9wIGxlZnQgY29ybmVyIHRvIHBsYWNlIHdpbmRvdyBhdC4KLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAbXgzZmI6CW14M2ZiIGNvbnRleHQuCisgKiBAY2hhbm5lbDoJSVBVIERNQUMgY2hhbm5lbCBJRC4KKyAqIEB4X3BvczoJWCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIgdG8gcGxhY2Ugd2luZG93IGF0LgorICogQHlfcG9zOglZIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciB0byBwbGFjZSB3aW5kb3cgYXQuCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IHNkY19zZXRfd2luZG93X3BvcyhzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIGVudW0gaXB1X2NoYW5uZWwgY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCB4X3BvcywgaW50MTZfdCB5X3BvcykKKwkJCSAgICAgIGludDE2X3QgeF9wb3MsIGludDE2X3QgeV9wb3MpCiB7Ci0gICAgICAgeF9wb3MgKz0gbXgzZmItPmhfc3RhcnRfd2lkdGg7Ci0gICAgICAgeV9wb3MgKz0gbXgzZmItPnZfc3RhcnRfd2lkdGg7CisJeF9wb3MgKz0gbXgzZmItPmhfc3RhcnRfd2lkdGg7CisJeV9wb3MgKz0gbXgzZmItPnZfc3RhcnRfd2lkdGg7CiAKLSAgICAgICBpZiAoY2hhbm5lbCAhPSBJRE1BQ19TRENfMCkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmIChjaGFubmVsICE9IElETUFDX1NEQ18wKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgKHhfcG9zIDw8IDE2KSB8IHlfcG9zLCBTRENfQkdfUE9TKTsKLSAgICAgICByZXR1cm4gMDsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsICh4X3BvcyA8PCAxNikgfCB5X3BvcywgU0RDX0JHX1BPUyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogc2RjX2luaXRfcGFuZWwoKSAtIGluaXRpYWxpemUgYSBzeW5jaHJvbm91cyBMQ0QgcGFuZWwuCi0gKiBAbXgzZmI6ICAgICAgICAgICAgIG14M2ZiIGNvbnRleHQuCi0gKiBAcGFuZWw6ICAgICAgICAgICAgIHBhbmVsIHR5cGUuCi0gKiBAcGl4ZWxfY2xrOiAgICAgICAgIGRlc2lyZWQgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgotICogQHdpZHRoOiAgICAgICAgICAgICB3aWR0aCBvZiBwYW5lbCBpbiBwaXhlbHMuCi0gKiBAaGVpZ2h0OiAgICAgICAgICAgIGhlaWdodCBvZiBwYW5lbCBpbiBwaXhlbHMuCi0gKiBAcGl4ZWxfZm10OiAgICAgICAgIHBpeGVsIGZvcm1hdCBvZiBidWZmZXIgYXMgRk9VUkNDIEFTQ0lJIGNvZGUuCi0gKiBAaF9zdGFydF93aWR0aDogICAgIG51bWJlciBvZiBwaXhlbCBjbG9ja3MgYmV0d2VlbiB0aGUgSFNZTkMgc2lnbmFsIHB1bHNlCi0gKiAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc3RhcnQgb2YgdmFsaWQgZGF0YS4KLSAqIEBoX3N5bmNfd2lkdGg6ICAgICAgd2lkdGggb2YgdGhlIEhTWU5DIHNpZ25hbCBpbiB1bml0cyBvZiBwaXhlbCBjbG9ja3MuCi0gKiBAaF9lbmRfd2lkdGg6ICAgICAgIG51bWJlciBvZiBwaXhlbCBjbG9ja3MgYmV0d2VlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBIU1lOQyBzaWduYWwgZm9yIG5leHQgbGluZS4KLSAqIEB2X3N0YXJ0X3dpZHRoOiAgICAgbnVtYmVyIG9mIGxpbmVzIGJldHdlZW4gdGhlIFZTWU5DIHNpZ25hbCBwdWxzZSBhbmQgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IG9mIHZhbGlkIGRhdGEuCi0gKiBAdl9zeW5jX3dpZHRoOiAgICAgIHdpZHRoIG9mIHRoZSBWU1lOQyBzaWduYWwgaW4gdW5pdHMgb2YgbGluZXMKLSAqIEB2X2VuZF93aWR0aDogICAgICAgbnVtYmVyIG9mIGxpbmVzIGJldHdlZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhIGFuZCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgVlNZTkMgc2lnbmFsIGZvciBuZXh0IGZyYW1lLgotICogQHNpZzogICAgICAgICAgICAgICBiaXRmaWVsZCBvZiBzaWduYWwgcG9sYXJpdGllcyBmb3IgTENEIGludGVyZmFjZS4KLSAqIEByZXR1cm46ICAgICAgICAgICAgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIEBteDNmYjoJCW14M2ZiIGNvbnRleHQuCisgKiBAcGFuZWw6CQlwYW5lbCB0eXBlLgorICogQHBpeGVsX2NsazoJCWRlc2lyZWQgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICogQHdpZHRoOgkJd2lkdGggb2YgcGFuZWwgaW4gcGl4ZWxzLgorICogQGhlaWdodDoJCWhlaWdodCBvZiBwYW5lbCBpbiBwaXhlbHMuCisgKiBAcGl4ZWxfZm10OgkJcGl4ZWwgZm9ybWF0IG9mIGJ1ZmZlciBhcyBGT1VSQ0MgQVNDSUkgY29kZS4KKyAqIEBoX3N0YXJ0X3dpZHRoOgludW1iZXIgb2YgcGl4ZWwgY2xvY2tzIGJldHdlZW4gdGhlIEhTWU5DIHNpZ25hbCBwdWxzZQorICoJCQlhbmQgdGhlIHN0YXJ0IG9mIHZhbGlkIGRhdGEuCisgKiBAaF9zeW5jX3dpZHRoOgl3aWR0aCBvZiB0aGUgSFNZTkMgc2lnbmFsIGluIHVuaXRzIG9mIHBpeGVsIGNsb2Nrcy4KKyAqIEBoX2VuZF93aWR0aDoJbnVtYmVyIG9mIHBpeGVsIGNsb2NrcyBiZXR3ZWVuIHRoZSBlbmQgb2YgdmFsaWQgZGF0YQorICoJCQlhbmQgdGhlIEhTWU5DIHNpZ25hbCBmb3IgbmV4dCBsaW5lLgorICogQHZfc3RhcnRfd2lkdGg6CW51bWJlciBvZiBsaW5lcyBiZXR3ZWVuIHRoZSBWU1lOQyBzaWduYWwgcHVsc2UgYW5kIHRoZQorICoJCQlzdGFydCBvZiB2YWxpZCBkYXRhLgorICogQHZfc3luY193aWR0aDoJd2lkdGggb2YgdGhlIFZTWU5DIHNpZ25hbCBpbiB1bml0cyBvZiBsaW5lcworICogQHZfZW5kX3dpZHRoOgludW1iZXIgb2YgbGluZXMgYmV0d2VlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEgYW5kIHRoZQorICoJCQlWU1lOQyBzaWduYWwgZm9yIG5leHQgZnJhbWUuCisgKiBAc2lnOgkJYml0ZmllbGQgb2Ygc2lnbmFsIHBvbGFyaXRpZXMgZm9yIExDRCBpbnRlcmZhY2UuCisgKiBAcmV0dXJuOgkJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBzZGNfaW5pdF9wYW5lbChzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIGVudW0gaXB1X3BhbmVsIHBhbmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBpeGVsX2NsaywKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3aWR0aCwgdWludDE2X3QgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGl4ZWxfZm10IHBpeGVsX2ZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBoX3N0YXJ0X3dpZHRoLCB1aW50MTZfdCBoX3N5bmNfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgaF9lbmRfd2lkdGgsIHVpbnQxNl90IHZfc3RhcnRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgdl9zeW5jX3dpZHRoLCB1aW50MTZfdCB2X2VuZF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXB1X2RpX3NpZ25hbF9jZmcgc2lnKQorCQkJICB1aW50MzJfdCBwaXhlbF9jbGssCisJCQkgIHVpbnQxNl90IHdpZHRoLCB1aW50MTZfdCBoZWlnaHQsCisJCQkgIGVudW0gcGl4ZWxfZm10IHBpeGVsX2ZtdCwKKwkJCSAgdWludDE2X3QgaF9zdGFydF93aWR0aCwgdWludDE2X3QgaF9zeW5jX3dpZHRoLAorCQkJICB1aW50MTZfdCBoX2VuZF93aWR0aCwgdWludDE2X3Qgdl9zdGFydF93aWR0aCwKKwkJCSAgdWludDE2X3Qgdl9zeW5jX3dpZHRoLCB1aW50MTZfdCB2X2VuZF93aWR0aCwKKwkJCSAgc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnIHNpZykKIHsKLSAgICAgICB1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7Ci0gICAgICAgdWludDMyX3QgcmVnOwotICAgICAgIHVpbnQzMl90IG9sZF9jb25mOwotICAgICAgIHVpbnQzMl90IGRpdjsKLSAgICAgICBzdHJ1Y3QgY2xrICppcHVfY2xrOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3Qgb2xkX2NvbmY7CisJdWludDMyX3QgZGl2OworCXN0cnVjdCBjbGsgKmlwdV9jbGs7CiAKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJwYW5lbCBzaXplID0gJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOworCWRldl9kYmcobXgzZmItPmRldiwgInBhbmVsIHNpemUgPSAlZCB4ICVkIiwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICAgICBpZiAodl9zeW5jX3dpZHRoID09IDAgfHwgaF9zeW5jX3dpZHRoID09IDApCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAodl9zeW5jX3dpZHRoID09IDAgfHwgaF9zeW5jX3dpZHRoID09IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgLyogSW5pdCBwYW5lbCBzaXplIGFuZCBibGFua2luZyBwZXJpb2RzICovCi0gICAgICAgcmVnID0gKCh1aW50MzJfdCkgKGhfc3luY193aWR0aCAtIDEpIDw8IDI2KSB8Ci0gICAgICAgICAgICAgICAoKHVpbnQzMl90KSAod2lkdGggKyBoX3N0YXJ0X3dpZHRoICsgaF9lbmRfd2lkdGggLSAxKSA8PCAxNik7Ci0gICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcsIFNEQ19IT1JfQ09ORik7CisJLyogSW5pdCBwYW5lbCBzaXplIGFuZCBibGFua2luZyBwZXJpb2RzICovCisJcmVnID0gKCh1aW50MzJfdCkgKGhfc3luY193aWR0aCAtIDEpIDw8IDI2KSB8CisJCSgodWludDMyX3QpICh3aWR0aCArIGhfc3RhcnRfd2lkdGggKyBoX2VuZF93aWR0aCAtIDEpIDw8IDE2KTsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZywgU0RDX0hPUl9DT05GKTsKIAogI2lmZGVmIERFQlVHCi0gICAgICAgcHJpbnRrKEtFUk5fQ09OVCAiIGhvcl9jb25mICV4LCIsIHJlZyk7CisJcHJpbnRrKEtFUk5fQ09OVCAiIGhvcl9jb25mICV4LCIsIHJlZyk7CiAjZW5kaWYKIAotICAgICAgIHJlZyA9ICgodWludDMyX3QpICh2X3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfCBTRENfVl9TWU5DX1dJRFRIX0wgfAotICAgICAgICAgICAoKHVpbnQzMl90KSAoaGVpZ2h0ICsgdl9zdGFydF93aWR0aCArIHZfZW5kX3dpZHRoIC0gMSkgPDwgMTYpOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnLCBTRENfVkVSX0NPTkYpOworCXJlZyA9ICgodWludDMyX3QpICh2X3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfCBTRENfVl9TWU5DX1dJRFRIX0wgfAorCSAgICAoKHVpbnQzMl90KSAoaGVpZ2h0ICsgdl9zdGFydF93aWR0aCArIHZfZW5kX3dpZHRoIC0gMSkgPDwgMTYpOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnLCBTRENfVkVSX0NPTkYpOwogCiAjaWZkZWYgREVCVUcKLSAgICAgICBwcmludGsoS0VSTl9DT05UICIgdmVyX2NvbmYgJXhcbiIsIHJlZyk7CisJcHJpbnRrKEtFUk5fQ09OVCAiIHZlcl9jb25mICV4XG4iLCByZWcpOwogI2VuZGlmCiAKLSAgICAgICBteDNmYi0+aF9zdGFydF93aWR0aCA9IGhfc3RhcnRfd2lkdGg7Ci0gICAgICAgbXgzZmItPnZfc3RhcnRfd2lkdGggPSB2X3N0YXJ0X3dpZHRoOworCW14M2ZiLT5oX3N0YXJ0X3dpZHRoID0gaF9zdGFydF93aWR0aDsKKwlteDNmYi0+dl9zdGFydF93aWR0aCA9IHZfc3RhcnRfd2lkdGg7CiAKLSAgICAgICBzd2l0Y2ggKHBhbmVsKSB7Ci0gICAgICAgY2FzZSBJUFVfUEFORUxfU0hBUlBfVEZUOgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwRkQwMTAyTCwgU0RDX1NIQVJQX0NPTkZfMSk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDBGNTAwRjRMLCBTRENfU0hBUlBfQ09ORl8yKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgU0RDX0NPTV9TSEFSUCB8IFNEQ19DT01fVEZUX0NPTE9SLCBTRENfQ09NX0NPTkYpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBJUFVfUEFORUxfVEZUOgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICB9CisJc3dpdGNoIChwYW5lbCkgeworCWNhc2UgSVBVX1BBTkVMX1NIQVJQX1RGVDoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwRkQwMTAyTCwgU0RDX1NIQVJQX0NPTkZfMSk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMEY1MDBGNEwsIFNEQ19TSEFSUF9DT05GXzIpOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIFNEQ19DT01fU0hBUlAgfCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKKwkJYnJlYWs7CisJY2FzZSBJUFVfUEFORUxfVEZUOgorCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIFNEQ19DT01fVEZUX0NPTE9SLCBTRENfQ09NX0NPTkYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgICAgICAvKiBJbml0IGNsb2NraW5nICovCisJLyogSW5pdCBjbG9ja2luZyAqLwogCi0gICAgICAgLyoKLSAgICAgICAgKiBDYWxjdWxhdGUgZGl2aWRlcjogZnJhY3Rpb25hbCBwYXJ0IGlzIDQgYml0cyBzbyBzaW1wbHkgbXVsdGlwbGUgYnkKLSAgICAgICAgKiAyNCB0byBnZXQgZnJhY3Rpb25hbCBwYXJ0LCBhcyBsb25nIGFzIHdlIHN0YXkgdW5kZXIgfjI1ME1IeiBhbmQgb24KLSAgICAgICAgKiBpLk1YMzEgaXQgKEhTUF9DTEspIGlzIDw9IDE3OE1Iei4gQ3VycmVudGx5IDEyOC4yNjdNSHoKLSAgICAgICAgKi8KLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJwaXhlbCBjbGsgPSAlZFxuIiwgcGl4ZWxfY2xrKTsKKwkvKgorCSAqIENhbGN1bGF0ZSBkaXZpZGVyOiBmcmFjdGlvbmFsIHBhcnQgaXMgNCBiaXRzIHNvIHNpbXBseSBtdWx0aXBsZSBieQorCSAqIDJeNCB0byBnZXQgZnJhY3Rpb25hbCBwYXJ0LCBhcyBsb25nIGFzIHdlIHN0YXkgdW5kZXIgfjI1ME1IeiBhbmQgb24KKwkgKiBpLk1YMzEgaXQgKEhTUF9DTEspIGlzIDw9IDE3OE1Iei4gQ3VycmVudGx5IDEyOC4yNjdNSHoKKwkgKi8KKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJwaXhlbCBjbGsgPSAlZFxuIiwgcGl4ZWxfY2xrKTsKIAotICAgICAgIGlwdV9jbGsgPSBjbGtfZ2V0KG14M2ZiLT5kZXYsICJpcHVfY2xrIik7Ci0gICAgICAgZGl2ID0gY2xrX2dldF9yYXRlKGlwdV9jbGspICogMTYgLyBwaXhlbF9jbGs7Ci0gICAgICAgY2xrX3B1dChpcHVfY2xrKTsKKwlpcHVfY2xrID0gY2xrX2dldChteDNmYi0+ZGV2LCBOVUxMKTsKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoaXB1X2NsaykgKiAxNiAvIHBpeGVsX2NsazsKKwljbGtfcHV0KGlwdV9jbGspOwogCi0gICAgICAgaWYgKGRpdiA8IDB4NDApIHsgICAgICAgLyogRGl2aWRlciBsZXNzIHRoYW4gNCAqLwotICAgICAgICAgICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAiSW5pdFBhbmVsKCkgLSBQaXhlbCBjbG9jayBkaXZpZGVyIGxlc3MgdGhhbiA0XG4iKTsKLSAgICAgICAgICAgICAgIGRpdiA9IDB4NDA7Ci0gICAgICAgfQorCWlmIChkaXYgPCAweDQwKSB7CS8qIERpdmlkZXIgbGVzcyB0aGFuIDQgKi8KKwkJZGV2X2RiZyhteDNmYi0+ZGV2LAorCQkJIkluaXRQYW5lbCgpIC0gUGl4ZWwgY2xvY2sgZGl2aWRlciBsZXNzIHRoYW4gNFxuIik7CisJCWRpdiA9IDB4NDA7CisJfQogCi0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgLyoKLSAgICAgICAgKiBESVNQM19JRl9DTEtfRE9XTl9XUiBpcyBoYWxmIHRoZSBkaXZpZGVyIHZhbHVlIGFuZCAyIGZyYWN0aW9uIGJpdHMKLSAgICAgICAgKiBmZXdlci4gU3VidHJhY3QgMSBleHRyYSBmcm9tIERJU1AzX0lGX0NMS19ET1dOX1dSIGJhc2VkIG9uIHRpbWluZwotICAgICAgICAqIGRlYnVnLiBESVNQM19JRl9DTEtfVVBfV1IgaXMgMAotICAgICAgICAqLwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgKCgoZGl2IC8gOCkgLSAxKSA8PCAyMikgfCBkaXYsIERJX0RJU1AzX1RJTUVfQ09ORik7CisJLyoKKwkgKiBESVNQM19JRl9DTEtfRE9XTl9XUiBpcyBoYWxmIHRoZSBkaXZpZGVyIHZhbHVlIGFuZCAyIGZyYWN0aW9uIGJpdHMKKwkgKiBmZXdlci4gU3VidHJhY3QgMSBleHRyYSBmcm9tIERJU1AzX0lGX0NMS19ET1dOX1dSIGJhc2VkIG9uIHRpbWluZworCSAqIGRlYnVnLiBESVNQM19JRl9DTEtfVVBfV1IgaXMgMAorCSAqLworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgKCgoZGl2IC8gOCkgLSAxKSA8PCAyMikgfCBkaXYsIERJX0RJU1AzX1RJTUVfQ09ORik7CiAKLSAgICAgICAvKiBESSBzZXR0aW5ncyAqLwotICAgICAgIG9sZF9jb25mID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfSUZfQ09ORikgJiAweDc4RkZGRkZGOwotICAgICAgIG9sZF9jb25mIHw9IHNpZy5kYXRhbWFza19lbiA8PCBESV9EM19EQVRBTVNLX1NISUZUIHwKLSAgICAgICAgICAgc2lnLmNsa3NlbF9lbiA8PCBESV9EM19DTEtfU0VMX1NISUZUIHwKLSAgICAgICAgICAgc2lnLmNsa2lkbGVfZW4gPDwgRElfRDNfQ0xLX0lETEVfU0hJRlQ7Ci0gICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBvbGRfY29uZiwgRElfRElTUF9JRl9DT05GKTsKKwkvKiBESSBzZXR0aW5ncyAqLworCW9sZF9jb25mID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfSUZfQ09ORikgJiAweDc4RkZGRkZGOworCW9sZF9jb25mIHw9IHNpZy5kYXRhbWFza19lbiA8PCBESV9EM19EQVRBTVNLX1NISUZUIHwKKwkgICAgc2lnLmNsa3NlbF9lbiA8PCBESV9EM19DTEtfU0VMX1NISUZUIHwKKwkgICAgc2lnLmNsa2lkbGVfZW4gPDwgRElfRDNfQ0xLX0lETEVfU0hJRlQ7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBvbGRfY29uZiwgRElfRElTUF9JRl9DT05GKTsKIAotICAgICAgIG9sZF9jb25mID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfU0lHX1BPTCkgJiAweEUwRkZGRkZGOwotICAgICAgIG9sZF9jb25mIHw9IHNpZy5kYXRhX3BvbCA8PCBESV9EM19EQVRBX1BPTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5jbGtfcG9sIDw8IERJX0QzX0NMS19QT0xfU0hJRlQgfAotICAgICAgICAgICBzaWcuZW5hYmxlX3BvbCA8PCBESV9EM19EUkRZX1NIQVJQX1BPTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5Ic3luY19wb2wgPDwgRElfRDNfSFNZTkNfUE9MX1NISUZUIHwKLSAgICAgICAgICAgc2lnLlZzeW5jX3BvbCA8PCBESV9EM19WU1lOQ19QT0xfU0hJRlQ7Ci0gICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBvbGRfY29uZiwgRElfRElTUF9TSUdfUE9MKTsKKwlvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpICYgMHhFMEZGRkZGRjsKKwlvbGRfY29uZiB8PSBzaWcuZGF0YV9wb2wgPDwgRElfRDNfREFUQV9QT0xfU0hJRlQgfAorCSAgICBzaWcuY2xrX3BvbCA8PCBESV9EM19DTEtfUE9MX1NISUZUIHwKKwkgICAgc2lnLmVuYWJsZV9wb2wgPDwgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQgfAorCSAgICBzaWcuSHN5bmNfcG9sIDw8IERJX0QzX0hTWU5DX1BPTF9TSElGVCB8CisJICAgIHNpZy5Wc3luY19wb2wgPDwgRElfRDNfVlNZTkNfUE9MX1NISUZUOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfU0lHX1BPTCk7CiAKLSAgICAgICBzd2l0Y2ggKHBpeGVsX2ZtdCkgewotICAgICAgIGNhc2UgSVBVX1BJWF9GTVRfUkdCMjQ6Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzBdLCBESV9ESVNQM19CMF9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxXSwgRElfRElTUDNfQjFfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMl0sIERJX0RJU1AzX0IyX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlfbWFwcGluZ3NbM10gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgSVBVX1BJWF9GTVRfUkdCNjY2OgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s0XSwgRElfRElTUDNfQjBfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNV0sIERJX0RJU1AzX0IxX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzZdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzddIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIElQVV9QSVhfRk1UX0JHUjY2NjoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbOF0sIERJX0RJU1AzX0IwX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzldLCBESV9ESVNQM19CMV9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxMF0sIERJX0RJU1AzX0IyX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlfbWFwcGluZ3NbMTFdIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxMl0sIERJX0RJU1AzX0IwX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzEzXSwgRElfRElTUDNfQjFfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTRdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzE1XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQorCXN3aXRjaCAocGl4ZWxfZm10KSB7CisJY2FzZSBJUFVfUElYX0ZNVF9SR0IyNDoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1swXSwgRElfRElTUDNfQjBfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxXSwgRElfRElTUDNfQjFfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1syXSwgRElfRElTUDNfQjJfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKKwkJCSAgICAgKChkaV9tYXBwaW5nc1szXSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwljYXNlIElQVV9QSVhfRk1UX1JHQjY2NjoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s0XSwgRElfRElTUDNfQjBfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s1XSwgRElfRElTUDNfQjFfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s2XSwgRElfRElTUDNfQjJfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKKwkJCSAgICAgKChkaV9tYXBwaW5nc1s3XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwljYXNlIElQVV9QSVhfRk1UX0JHUjY2NjoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s4XSwgRElfRElTUDNfQjBfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s5XSwgRElfRElTUDNfQjFfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxMF0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbMTFdIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTJdLCBESV9ESVNQM19CMF9NQVApOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzEzXSwgRElfRElTUDNfQjFfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxNF0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbMTVdIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7CisJCWJyZWFrOworCX0KIAotICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CiAKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQX0lGX0NPTkYgPSAweCUwOFhcbiIsCi0gICAgICAgICAgICAgICBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9JRl9DT05GKSk7Ci0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9TSUdfUE9MID0gMHglMDhYXG4iLAotICAgICAgICAgICAgICAgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfU0lHX1BPTCkpOwotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIkRJX0RJU1AzX1RJTUVfQ09ORiA9IDB4JTA4WFxuIiwKLSAgICAgICAgICAgICAgIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQM19USU1FX0NPTkYpKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQX0lGX0NPTkYgPSAweCUwOFhcbiIsCisJCW14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0lGX0NPTkYpKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQX1NJR19QT0wgPSAweCUwOFhcbiIsCisJCW14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQM19USU1FX0NPTkYgPSAweCUwOFhcbiIsCisJCW14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQM19USU1FX0NPTkYpKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKioKICAqIHNkY19zZXRfY29sb3Jfa2V5KCkgLSBzZXQgdGhlIHRyYW5zcGFyZW50IGNvbG9yIGtleSBmb3IgU0RDIGdyYXBoaWMgcGxhbmUuCi0gKiBAbXgzZmI6ICAgICBteDNmYiBjb250ZXh0LgotICogQGNoYW5uZWw6ICAgSVBVIERNQUMgY2hhbm5lbCBJRC4KLSAqIEBlbmFibGU6ICAgIGJvb2xlYW4gdG8gZW5hYmxlIG9yIGRpc2FibGUgY29sb3Iga2V5bC4KLSAqIEBjb2xvcl9rZXk6IDI0LWJpdCBSR0IgY29sb3IgdG8gdXNlIGFzIHRyYW5zcGFyZW50IGNvbG9yIGtleS4KLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAbXgzZmI6CW14M2ZiIGNvbnRleHQuCisgKiBAY2hhbm5lbDoJSVBVIERNQUMgY2hhbm5lbCBJRC4KKyAqIEBlbmFibGU6CWJvb2xlYW4gdG8gZW5hYmxlIG9yIGRpc2FibGUgY29sb3Iga2V5bC4KKyAqIEBjb2xvcl9rZXk6CTI0LWJpdCBSR0IgY29sb3IgdG8gdXNlIGFzIHRyYW5zcGFyZW50IGNvbG9yIGtleS4KKyAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2RjX3NldF9jb2xvcl9rZXkoc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGUsIHVpbnQzMl90IGNvbG9yX2tleSkKKwkJCSAgICAgYm9vbCBlbmFibGUsIHVpbnQzMl90IGNvbG9yX2tleSkKIHsKLSAgICAgICB1aW50MzJfdCByZWcsIHNkY19jb25mOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1aW50MzJfdCByZWcsIHNkY19jb25mOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKIAotICAgICAgIHNkY19jb25mID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgaWYgKGNoYW5uZWwgPT0gSURNQUNfU0RDXzApCi0gICAgICAgICAgICAgICBzZGNfY29uZiAmPSB+U0RDX0NPTV9HV1NFTDsKLSAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBzZGNfY29uZiB8PSBTRENfQ09NX0dXU0VMOworCXNkY19jb25mID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJaWYgKGNoYW5uZWwgPT0gSURNQUNfU0RDXzApCisJCXNkY19jb25mICY9IH5TRENfQ09NX0dXU0VMOworCWVsc2UKKwkJc2RjX2NvbmYgfD0gU0RDX0NPTV9HV1NFTDsKIAotICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgICAgICAgIHJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfR1dfQ1RSTCkgJiAweEZGMDAwMDAwTDsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnIHwgKGNvbG9yX2tleSAmIDB4MDBGRkZGRkZMKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRENfR1dfQ1RSTCk7CisJaWYgKGVuYWJsZSkgeworCQlyZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0dXX0NUUkwpICYgMHhGRjAwMDAwMEw7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnIHwgKGNvbG9yX2tleSAmIDB4MDBGRkZGRkZMKSwKKwkJCSAgICAgU0RDX0dXX0NUUkwpOwogCi0gICAgICAgICAgICAgICBzZGNfY29uZiB8PSBTRENfQ09NX0tFWV9DT0xPUl9HOwotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICBzZGNfY29uZiAmPSB+U0RDX0NPTV9LRVlfQ09MT1JfRzsKLSAgICAgICB9Ci0gICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBzZGNfY29uZiwgU0RDX0NPTV9DT05GKTsKKwkJc2RjX2NvbmYgfD0gU0RDX0NPTV9LRVlfQ09MT1JfRzsKKwl9IGVsc2UgeworCQlzZGNfY29uZiAmPSB+U0RDX0NPTV9LRVlfQ09MT1JfRzsKKwl9CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBzZGNfY29uZiwgU0RDX0NPTV9DT05GKTsKIAotICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBzZGNfc2V0X2dsb2JhbF9hbHBoYSgpIC0gc2V0IGdsb2JhbCBhbHBoYSBibGVuZGluZyBtb2Rlcy4KLSAqIEBteDNmYjogICAgIG14M2ZiIGNvbnRleHQuCi0gKiBAZW5hYmxlOiAgICBib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGdsb2JhbCBhbHBoYSBibGVuZGluZy4gSWYgZGlzYWJsZWQsCi0gKiAgICAgICAgICAgICBwZXIgcGl4ZWwgYmxlbmRpbmcgaXMgdXNlZC4KLSAqIEBhbHBoYTogICAgIGdsb2JhbCBhbHBoYSB2YWx1ZS4KLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAbXgzZmI6CW14M2ZiIGNvbnRleHQuCisgKiBAZW5hYmxlOglib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGdsb2JhbCBhbHBoYSBibGVuZGluZy4gSWYgZGlzYWJsZWQsCisgKgkJcGVyIHBpeGVsIGJsZW5kaW5nIGlzIHVzZWQuCisgKiBAYWxwaGE6CWdsb2JhbCBhbHBoYSB2YWx1ZS4KKyAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2RjX3NldF9nbG9iYWxfYWxwaGEoc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBib29sIGVuYWJsZSwgdWludDhfdCBhbHBoYSkKIHsKLSAgICAgICB1aW50MzJfdCByZWc7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXVpbnQzMl90IHJlZzsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLSAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CiAKLSAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0dXX0NUUkwpICYgMHgwMEZGRkZGRkw7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8ICgodWludDMyX3QpIGFscGhhIDw8IDI0KSwgU0RDX0dXX0NUUkwpOworCWlmIChlbmFibGUpIHsKKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19HV19DVFJMKSAmIDB4MDBGRkZGRkZMOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8ICgodWludDMyX3QpIGFscGhhIDw8IDI0KSwgU0RDX0dXX0NUUkwpOwogCi0gICAgICAgICAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnIHwgU0RDX0NPTV9HTEJfQSwgU0RDX0NPTV9DT05GKTsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyAmIH5TRENfQ09NX0dMQl9BLCBTRENfQ09NX0NPTkYpOwotICAgICAgIH0KKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnIHwgU0RDX0NPTV9HTEJfQSwgU0RDX0NPTV9DT05GKTsKKwl9IGVsc2UgeworCQlyZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0NPTV9DT05GKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgJiB+U0RDX0NPTV9HTEJfQSwgU0RDX0NPTV9DT05GKTsKKwl9CiAKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkY19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIHVpbnQ4X3QgdmFsdWUpCiB7Ci0gICAgICAgLyogVGhpcyBtaWdodCBiZSBib2FyZC1zcGVjaWZpYyAqLwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMzAwMDAwMFVMIHwgdmFsdWUgPDwgMTYsIFNEQ19QV01fQ1RSTCk7Ci0gICAgICAgcmV0dXJuOworCS8qIFRoaXMgbWlnaHQgYmUgYm9hcmQtc3BlY2lmaWMgKi8KKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDMwMDAwMDBVTCB8IHZhbHVlIDw8IDE2LCBTRENfUFdNX0NUUkwpOworCXJldHVybjsKIH0KIAogc3RhdGljIHVpbnQzMl90IGJwcF90b19waXhmbXQoaW50IGJwcCkKIHsKLSAgICAgICB1aW50MzJfdCBwaXhmbXQgPSAwOwotICAgICAgIHN3aXRjaCAoYnBwKSB7Ci0gICAgICAgY2FzZSAyNDoKLSAgICAgICAgICAgICAgIHBpeGZtdCA9IElQVV9QSVhfRk1UX0JHUjI0OwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAzMjoKLSAgICAgICAgICAgICAgIHBpeGZtdCA9IElQVV9QSVhfRk1UX0JHUjMyOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgIHBpeGZtdCA9IElQVV9QSVhfRk1UX1JHQjU2NTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgICByZXR1cm4gcGl4Zm10OworCXVpbnQzMl90IHBpeGZtdCA9IDA7CisJc3dpdGNoIChicHApIHsKKwljYXNlIDI0OgorCQlwaXhmbXQgPSBJUFVfUElYX0ZNVF9CR1IyNDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJcGl4Zm10ID0gSVBVX1BJWF9GTVRfQkdSMzI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXBpeGZtdCA9IElQVV9QSVhfRk1UX1JHQjU2NTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBwaXhmbXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXgzZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKTsKQEAgLTY2OSwzMDAgKzY2OSwzMDAgQEAKIAogLyoqCiAgKiBteDNmYl9zZXRfZml4KCkgLSBzZXQgZml4ZWQgZnJhbWVidWZmZXIgcGFyYW1ldGVycyBmcm9tIHZhcmlhYmxlIHNldHRpbmdzLgotICogQGluZm86ICAgICAgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgotICogQHJldHVybjogICAgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIEBpbmZvOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IG14M2ZiX3NldF9maXgoc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKLSAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKKwlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKIAotICAgICAgIHN0cm5jcHkoZml4LT5pZCwgIkRJU1AzIEJHIiwgOCk7CisJc3RybmNweShmaXgtPmlkLCAiRElTUDMgQkciLCA4KTsKIAotICAgICAgIGZpeC0+bGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OworCWZpeC0+bGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OwogCi0gICAgICAgZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwotICAgICAgIGZpeC0+YWNjZWwgPSBGQl9BQ0NFTF9OT05FOwotICAgICAgIGZpeC0+dmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKLSAgICAgICBmaXgtPnhwYW5zdGVwID0gMTsKLSAgICAgICBmaXgtPnlwYW5zdGVwID0gMTsKKwlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZml4LT5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7CisJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWZpeC0+eHBhbnN0ZXAgPSAxOworCWZpeC0+eXBhbnN0ZXAgPSAxOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG14M2ZiX2RtYV9kb25lKHZvaWQgKmFyZykKIHsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqdHhfZGVzYyA9IHRvX3R4X2Rlc2MoYXJnKTsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSB0eF9kZXNjLT50eGQuY2hhbjsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW5uZWwgPSB0b19pZG1hY19jaGFuKGNoYW4pOwotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGljaGFubmVsLT5jbGllbnQ7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBteDNmYi0+ZmJpLT5wYXI7CisJc3RydWN0IGlkbWFjX3R4X2Rlc2MgKnR4X2Rlc2MgPSB0b190eF9kZXNjKGFyZyk7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gdHhfZGVzYy0+dHhkLmNoYW47CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFubmVsID0gdG9faWRtYWNfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBpY2hhbm5lbC0+Y2xpZW50OworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gbXgzZmItPmZiaS0+cGFyOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAiaXJxICVkIGNhbGxiYWNrXG4iLCBpY2hhbm5lbC0+ZW9mX2lycSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiaXJxICVkIGNhbGxiYWNrXG4iLCBpY2hhbm5lbC0+ZW9mX2lycSk7CiAKLSAgICAgICAvKiBXZSBvbmx5IG5lZWQgb25lIGludGVycnVwdCwgaXQgd2lsbCBiZSByZS1lbmFibGVkIGFzIG5lZWRlZCAqLwotICAgICAgIGRpc2FibGVfaXJxKGljaGFubmVsLT5lb2ZfaXJxKTsKKwkvKiBXZSBvbmx5IG5lZWQgb25lIGludGVycnVwdCwgaXQgd2lsbCBiZSByZS1lbmFibGVkIGFzIG5lZWRlZCAqLworCWRpc2FibGVfaXJxKGljaGFubmVsLT5lb2ZfaXJxKTsKIAotICAgICAgIGNvbXBsZXRlKCZteDNfZmJpLT5mbGlwX2NtcGwpOworCWNvbXBsZXRlKCZteDNfZmJpLT5mbGlwX2NtcGwpOwogfQogCiAvKioKICAqIG14M2ZiX3NldF9wYXIoKSAtIHNldCBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGFuZCBjaGFuZ2UgdGhlIG9wZXJhdGluZyBtb2RlLgotICogQGZiaTogICAgICAgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlci4KLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyLgorICogQHJldHVybjoJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBteDNmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgdTMyIG1lbV9sZW47Ci0gICAgICAgc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnIHNpZ19jZmc7Ci0gICAgICAgZW51bSBpcHVfcGFuZWwgbW9kZSA9IElQVV9QQU5FTF9URlQ7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBteDNfZmJpLT5pZG1hY19jaGFubmVsOwotICAgICAgIHN0cnVjdCBpZG1hY192aWRlb19wYXJhbSAqdmlkZW8gPSAmaWNoYW4tPnBhcmFtcy52aWRlbzsKLSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gbXgzX2ZiaS0+c2c7Ci0gICAgICAgc2l6ZV90IHNjcmVlbl9zaXplOworCXUzMiBtZW1fbGVuOworCXN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnOworCWVudW0gaXB1X3BhbmVsIG1vZGUgPSBJUFVfUEFORUxfVEZUOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbDsKKwlzdHJ1Y3QgaWRtYWNfdmlkZW9fcGFyYW0gKnZpZGVvID0gJmljaGFuLT5wYXJhbXMudmlkZW87CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IG14M19mYmktPnNnOworCXNpemVfdCBzY3JlZW5fc2l6ZTsKIAotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIiVzIFslY11cbiIsIF9fZnVuY19fLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CiAKLSAgICAgICBtdXRleF9sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgLyogVG90YWwgY2xlYW51cCAqLwotICAgICAgIGlmIChteDNfZmJpLT50eGQpCi0gICAgICAgICAgICAgICBzZGNfZGlzYWJsZV9jaGFubmVsKG14M19mYmkpOworCS8qIFRvdGFsIGNsZWFudXAgKi8KKwlpZiAobXgzX2ZiaS0+dHhkKQorCQlzZGNfZGlzYWJsZV9jaGFubmVsKG14M19mYmkpOwogCi0gICAgICAgbXgzZmJfc2V0X2ZpeChmYmkpOworCW14M2ZiX3NldF9maXgoZmJpKTsKIAotICAgICAgIG1lbV9sZW4gPSBmYmktPnZhci55cmVzX3ZpcnR1YWwgKiBmYmktPmZpeC5saW5lX2xlbmd0aDsKLSAgICAgICBpZiAobWVtX2xlbiA+IGZiaS0+Zml4LnNtZW1fbGVuKSB7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT5maXguc21lbV9zdGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CisJbWVtX2xlbiA9IGZiaS0+dmFyLnlyZXNfdmlydHVhbCAqIGZiaS0+Zml4LmxpbmVfbGVuZ3RoOworCWlmIChtZW1fbGVuID4gZmJpLT5maXguc21lbV9sZW4pIHsKKwkJaWYgKGZiaS0+Zml4LnNtZW1fc3RhcnQpCisJCQlteDNmYl91bm1hcF92aWRlb19tZW1vcnkoZmJpKTsKIAotICAgICAgICAgICAgICAgZmJpLT5maXguc21lbV9sZW4gPSBtZW1fbGVuOwotICAgICAgICAgICAgICAgaWYgKG14M2ZiX21hcF92aWRlb19tZW1vcnkoZmJpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgfQotICAgICAgIH0KKwkJZmJpLT5maXguc21lbV9sZW4gPSBtZW1fbGVuOworCQlpZiAobXgzZmJfbWFwX3ZpZGVvX21lbW9yeShmYmkpIDwgMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KIAotICAgICAgIHNjcmVlbl9zaXplID0gZmJpLT5maXgubGluZV9sZW5ndGggKiBmYmktPnZhci55cmVzOworCXNjcmVlbl9zaXplID0gZmJpLT5maXgubGluZV9sZW5ndGggKiBmYmktPnZhci55cmVzOwogCi0gICAgICAgc2dfaW5pdF90YWJsZSgmc2dbMF0sIDEpOwotICAgICAgIHNnX2luaXRfdGFibGUoJnNnWzFdLCAxKTsKKwlzZ19pbml0X3RhYmxlKCZzZ1swXSwgMSk7CisJc2dfaW5pdF90YWJsZSgmc2dbMV0sIDEpOwogCi0gICAgICAgc2dfZG1hX2FkZHJlc3MoJnNnWzBdKSAgPSBmYmktPmZpeC5zbWVtX3N0YXJ0OwotICAgICAgIHNnX3NldF9wYWdlKCZzZ1swXSwgdmlydF90b19wYWdlKGZiaS0+c2NyZWVuX2Jhc2UpLAotICAgICAgICAgICAgICAgICAgIGZiaS0+Zml4LnNtZW1fbGVuLAotICAgICAgICAgICAgICAgICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2dbMF0pCT0gZmJpLT5maXguc21lbV9zdGFydDsKKwlzZ19zZXRfcGFnZSgmc2dbMF0sIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlKSwKKwkJICAgIGZiaS0+Zml4LnNtZW1fbGVuLAorCQkgICAgb2Zmc2V0X2luX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSkpOwogCi0gICAgICAgaWYgKG14M19mYmktPmlwdV9jaCA9PSBJRE1BQ19TRENfMCkgewotICAgICAgICAgICAgICAgbWVtc2V0KCZzaWdfY2ZnLCAwLCBzaXplb2Yoc2lnX2NmZykpOwotICAgICAgICAgICAgICAgaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5Ic3luY19wb2wgPSB0cnVlOwotICAgICAgICAgICAgICAgaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuVnN5bmNfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19DTEtfSU5WRVJUKQotICAgICAgICAgICAgICAgICAgICAgICBzaWdfY2ZnLmNsa19wb2wgPSB0cnVlOwotICAgICAgICAgICAgICAgaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0RBVEFfSU5WRVJUKQotICAgICAgICAgICAgICAgICAgICAgICBzaWdfY2ZnLmRhdGFfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19PRV9BQ1RfSElHSCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5lbmFibGVfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19DTEtfSURMRV9FTikKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5jbGtpZGxlX2VuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19DTEtfU0VMX0VOKQotICAgICAgICAgICAgICAgICAgICAgICBzaWdfY2ZnLmNsa3NlbF9lbiA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfU0hBUlBfTU9ERSkKLSAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IElQVV9QQU5FTF9TSEFSUF9URlQ7CisJaWYgKG14M19mYmktPmlwdV9jaCA9PSBJRE1BQ19TRENfMCkgeworCQltZW1zZXQoJnNpZ19jZmcsIDAsIHNpemVvZihzaWdfY2ZnKSk7CisJCWlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpCisJCQlzaWdfY2ZnLkhzeW5jX3BvbCA9IHRydWU7CisJCWlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKQorCQkJc2lnX2NmZy5Wc3luY19wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lOVkVSVCkKKwkJCXNpZ19jZmcuY2xrX3BvbCA9IHRydWU7CisJCWlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19EQVRBX0lOVkVSVCkKKwkJCXNpZ19jZmcuZGF0YV9wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfT0VfQUNUX0hJR0gpCisJCQlzaWdfY2ZnLmVuYWJsZV9wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lETEVfRU4pCisJCQlzaWdfY2ZnLmNsa2lkbGVfZW4gPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX1NFTF9FTikKKwkJCXNpZ19jZmcuY2xrc2VsX2VuID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX1NIQVJQX01PREUpCisJCQltb2RlID0gSVBVX1BBTkVMX1NIQVJQX1RGVDsKIAotICAgICAgICAgICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgInBpeGNsb2NrID0gJXVsIEh6XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAodTMyKSAoUElDT1MyS0haKGZiaS0+dmFyLnBpeGNsb2NrKSAqIDEwMDBVTCkpOworCQlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAicGl4Y2xvY2sgPSAldWwgSHpcbiIsCisJCQkodTMyKSAoUElDT1MyS0haKGZiaS0+dmFyLnBpeGNsb2NrKSAqIDEwMDBVTCkpOwogCi0gICAgICAgICAgICAgICBpZiAoc2RjX2luaXRfcGFuZWwobXgzZmIsIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBJQ09TMktIWihmYmktPnZhci5waXhjbG9jaykpICogMTAwMFVMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLnhyZXMsIGZiaS0+dmFyLnlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX1NXQVBfUkdCKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBVX1BJWF9GTVRfQkdSNjY2IDogSVBVX1BJWF9GTVRfUkdCNjY2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLmxlZnRfbWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLmhzeW5jX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5yaWdodF9tYXJnaW4gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLmhzeW5jX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci51cHBlcl9tYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIudnN5bmNfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLmxvd2VyX21hcmdpbiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIudnN5bmNfbGVuLCBzaWdfY2ZnKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGZiaS0+ZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteDNmYjogRXJyb3IgaW5pdGlhbGl6aW5nIHBhbmVsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgfQotICAgICAgIH0KKwkJaWYgKHNkY19pbml0X3BhbmVsKG14M2ZiLCBtb2RlLAorCQkJCSAgIChQSUNPUzJLSFooZmJpLT52YXIucGl4Y2xvY2spKSAqIDEwMDBVTCwKKwkJCQkgICBmYmktPnZhci54cmVzLCBmYmktPnZhci55cmVzLAorCQkJCSAgIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19TV0FQX1JHQikgPworCQkJCSAgIElQVV9QSVhfRk1UX0JHUjY2NiA6IElQVV9QSVhfRk1UX1JHQjY2NiwKKwkJCQkgICBmYmktPnZhci5sZWZ0X21hcmdpbiwKKwkJCQkgICBmYmktPnZhci5oc3luY19sZW4sCisJCQkJICAgZmJpLT52YXIucmlnaHRfbWFyZ2luICsKKwkJCQkgICBmYmktPnZhci5oc3luY19sZW4sCisJCQkJICAgZmJpLT52YXIudXBwZXJfbWFyZ2luLAorCQkJCSAgIGZiaS0+dmFyLnZzeW5jX2xlbiwKKwkJCQkgICBmYmktPnZhci5sb3dlcl9tYXJnaW4gKworCQkJCSAgIGZiaS0+dmFyLnZzeW5jX2xlbiwgc2lnX2NmZykgIT0gMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJCQlkZXZfZXJyKGZiaS0+ZGV2aWNlLAorCQkJCSJteDNmYjogRXJyb3IgaW5pdGlhbGl6aW5nIHBhbmVsLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KIAotICAgICAgIHNkY19zZXRfd2luZG93X3BvcyhteDNmYiwgbXgzX2ZiaS0+aXB1X2NoLCAwLCAwKTsKKwlzZGNfc2V0X3dpbmRvd19wb3MobXgzZmIsIG14M19mYmktPmlwdV9jaCwgMCwgMCk7CiAKLSAgICAgICBteDNfZmJpLT5jdXJfaXB1X2J1ZiAgICA9IDA7CisJbXgzX2ZiaS0+Y3VyX2lwdV9idWYJPSAwOwogCi0gICAgICAgdmlkZW8tPm91dF9waXhlbF9mbXQgICAgPSBicHBfdG9fcGl4Zm10KGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLSAgICAgICB2aWRlby0+b3V0X3dpZHRoICAgICAgICA9IGZiaS0+dmFyLnhyZXM7Ci0gICAgICAgdmlkZW8tPm91dF9oZWlnaHQgICAgICAgPSBmYmktPnZhci55cmVzOwotICAgICAgIHZpZGVvLT5vdXRfc3RyaWRlICAgICAgID0gZmJpLT52YXIueHJlc192aXJ0dWFsOworCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gYnBwX3RvX3BpeGZtdChmYmktPnZhci5iaXRzX3Blcl9waXhlbCk7CisJdmlkZW8tPm91dF93aWR0aAk9IGZiaS0+dmFyLnhyZXM7CisJdmlkZW8tPm91dF9oZWlnaHQJPSBmYmktPnZhci55cmVzOworCXZpZGVvLT5vdXRfc3RyaWRlCT0gZmJpLT52YXIueHJlc192aXJ0dWFsOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspCi0gICAgICAgICAgICAgICBzZGNfZW5hYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspCisJCXNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKIAotICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogbXgzZmJfY2hlY2tfdmFyKCkgLSBjaGVjayBhbmQgYWRqdXN0IGZyYW1lYnVmZmVyIHZhcmlhYmxlIHBhcmFtZXRlcnMuCi0gKiBAdmFyOiAgICAgICBmcmFtZWJ1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXJzCi0gKiBAZmJpOiAgICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAdmFyOglmcmFtZWJ1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXJzCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgdTMyIHZ0b3RhbDsKLSAgICAgICB1MzIgaHRvdGFsOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7CisJdTMyIHZ0b3RhbDsKKwl1MzIgaHRvdGFsOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhmYmktPmRldmljZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLSAgICAgICBpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCi0gICAgICAgICAgICAgICB2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKLSAgICAgICBpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCi0gICAgICAgICAgICAgICB2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCisJCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOworCWlmICh2YXItPnlyZXNfdmlydHVhbCA8IHZhci0+eXJlcykKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CiAKLSAgICAgICBpZiAoKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMzIpICYmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDI0KSAmJgotICAgICAgICAgICAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAxNikpCi0gICAgICAgICAgICAgICB2YXItPmJpdHNfcGVyX3BpeGVsID0gZGVmYXVsdF9icHA7CisJaWYgKCh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMyKSAmJiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAyNCkgJiYKKwkgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYpKQorCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gZGVmYXVsdF9icHA7CiAKLSAgICAgICBzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKLSAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgICAgdmFyLT5yZWQubGVuZ3RoID0gNTsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm9mZnNldCA9IDExOwotICAgICAgICAgICAgICAgdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKKwkJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKKwkJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPmJsdWUubGVuZ3RoID0gNTsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5tc2JfcmlnaHQgPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCQlicmVhazsKKwljYXNlIDI0OgorCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPmJsdWUubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMzI6Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5tc2JfcmlnaHQgPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCQlicmVhazsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwotICAgICAgICAgICAgICAgdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPmJsdWUubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICB9CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OworCQl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCQlicmVhazsKKwl9CiAKLSAgICAgICBpZiAodmFyLT5waXhjbG9jayA8IDEwMDApIHsKLSAgICAgICAgICAgICAgIGh0b3RhbCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luICsgdmFyLT5oc3luY19sZW4gKwotICAgICAgICAgICAgICAgICAgIHZhci0+bGVmdF9tYXJnaW47Ci0gICAgICAgICAgICAgICB2dG90YWwgPSB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuICsKLSAgICAgICAgICAgICAgICAgICB2YXItPnVwcGVyX21hcmdpbjsKLSAgICAgICAgICAgICAgIHZhci0+cGl4Y2xvY2sgPSAodnRvdGFsICogaHRvdGFsICogNlVMKSAvIDEwMFVMOwotICAgICAgICAgICAgICAgdmFyLT5waXhjbG9jayA9IEtIWjJQSUNPUyh2YXItPnBpeGNsb2NrKTsKLSAgICAgICAgICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJwaXhjbG9jayBzZXQgZm9yIDYwSHogcmVmcmVzaCA9ICV1IHBzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICB2YXItPnBpeGNsb2NrKTsKLSAgICAgICB9CisJaWYgKHZhci0+cGl4Y2xvY2sgPCAxMDAwKSB7CisJCWh0b3RhbCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luICsgdmFyLT5oc3luY19sZW4gKworCQkgICAgdmFyLT5sZWZ0X21hcmdpbjsKKwkJdnRvdGFsID0gdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbiArCisJCSAgICB2YXItPnVwcGVyX21hcmdpbjsKKwkJdmFyLT5waXhjbG9jayA9ICh2dG90YWwgKiBodG90YWwgKiA2VUwpIC8gMTAwVUw7CisJCXZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1ModmFyLT5waXhjbG9jayk7CisJCWRldl9kYmcoZmJpLT5kZXZpY2UsICJwaXhjbG9jayBzZXQgZm9yIDYwSHogcmVmcmVzaCA9ICV1IHBzXG4iLAorCQkJdmFyLT5waXhjbG9jayk7CisJfQogCi0gICAgICAgdmFyLT5oZWlnaHQgPSAtMTsKLSAgICAgICB2YXItPndpZHRoID0gLTE7Ci0gICAgICAgdmFyLT5ncmF5c2NhbGUgPSAwOworCXZhci0+aGVpZ2h0ID0gLTE7CisJdmFyLT53aWR0aCA9IC0xOworCXZhci0+Z3JheXNjYWxlID0gMDsKIAotICAgICAgIC8qIFByZXNlcnZlIHN5bmMgZmxhZ3MgKi8KLSAgICAgICB2YXItPnN5bmMgfD0gbXgzX2ZiaS0+c3luYzsKLSAgICAgICBteDNfZmJpLT5zeW5jIHw9IHZhci0+c3luYzsKKwkvKiBQcmVzZXJ2ZSBzeW5jIGZsYWdzICovCisJdmFyLT5zeW5jIHw9IG14M19mYmktPnN5bmM7CisJbXgzX2ZiaS0+c3luYyB8PSB2YXItPnN5bmM7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBjaGFuX3RvX2ZpZWxkKHVuc2lnbmVkIGludCBjaGFuLCBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQogewotICAgICAgIGNoYW4gJj0gMHhmZmZmOwotICAgICAgIGNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKLSAgICAgICByZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OworCWNoYW4gJj0gMHhmZmZmOworCWNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKKwlyZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OwogfQogCiBzdGF0aWMgaW50IG14M2ZiX3NldGNvbHJlZyh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0cmFucywgc3RydWN0IGZiX2luZm8gKmZiaSkKKwkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICB1bnNpZ25lZCBpbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICB1MzIgdmFsOwotICAgICAgIGludCByZXQgPSAxOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7CisJdTMyIHZhbDsKKwlpbnQgcmV0ID0gMTsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgIC8qCi0gICAgICAgICogSWYgZ3JleXNjYWxlIGlzIHRydWUsIHRoZW4gd2UgY29udmVydCB0aGUgUkdCIHZhbHVlCi0gICAgICAgICogdG8gZ3JleXNjYWxlIG5vIG1hdHRlciB3aGF0IHZpc3VhbCB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICovCi0gICAgICAgaWYgKGZiaS0+dmFyLmdyYXlzY2FsZSkKLSAgICAgICAgICAgICAgIHJlZCA9IGdyZWVuID0gYmx1ZSA9ICgxOTU5NSAqIHJlZCArIDM4NDcwICogZ3JlZW4gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0NzEgKiBibHVlKSA+PiAxNjsKLSAgICAgICBzd2l0Y2ggKGZiaS0+Zml4LnZpc3VhbCkgewotICAgICAgIGNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKLSAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgKiAxNi1iaXQgVHJ1ZSBDb2xvdXIuICBXZSBlbmNvZGUgdGhlIFJHQiB2YWx1ZQotICAgICAgICAgICAgICAgICogYWNjb3JkaW5nIHRvIHRoZSBSR0IgYml0ZmllbGQgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgIGlmIChyZWdubyA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHUzMiAqcGFsID0gZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKKwltdXRleF9sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJLyoKKwkgKiBJZiBncmV5c2NhbGUgaXMgdHJ1ZSwgdGhlbiB3ZSBjb252ZXJ0IHRoZSBSR0IgdmFsdWUKKwkgKiB0byBncmV5c2NhbGUgbm8gbWF0dGVyIHdoYXQgdmlzdWFsIHdlIGFyZSB1c2luZy4KKwkgKi8KKwlpZiAoZmJpLT52YXIuZ3JheXNjYWxlKQorCQlyZWQgPSBncmVlbiA9IGJsdWUgPSAoMTk1OTUgKiByZWQgKyAzODQ3MCAqIGdyZWVuICsKKwkJCQkgICAgICA3NDcxICogYmx1ZSkgPj4gMTY7CisJc3dpdGNoIChmYmktPmZpeC52aXN1YWwpIHsKKwljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CisJCS8qCisJCSAqIDE2LWJpdCBUcnVlIENvbG91ci4gIFdlIGVuY29kZSB0aGUgUkdCIHZhbHVlCisJCSAqIGFjY29yZGluZyB0byB0aGUgUkdCIGJpdGZpZWxkIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJmZiaS0+dmFyLnJlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCAmZmJpLT52YXIuZ3JlZW4pOwotICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmZmJpLT52YXIuYmx1ZSk7CisJCQl2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJmZiaS0+dmFyLnJlZCk7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmZiaS0+dmFyLmdyZWVuKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZmYmktPnZhci5ibHVlKTsKIAotICAgICAgICAgICAgICAgICAgICAgICBwYWxbcmVnbm9dID0gdmFsOworCQkJcGFsW3JlZ25vXSA9IHZhbDsKIAotICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgYnJlYWs7CisJCQlyZXQgPSAwOworCQl9CisJCWJyZWFrOwogCi0gICAgICAgY2FzZSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOgotICAgICAgIGNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQotICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCWNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTk3MCwxNTIgKzk3MCwxNTIgQEAKICAqLwogc3RhdGljIGludCBteDNmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhmYmktPmRldmljZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiYmxhbmsgPSAlZFxuIiwgYmxhbmspOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICJibGFuayA9ICVkXG4iLCBibGFuayk7CiAKLSAgICAgICBpZiAobXgzX2ZiaS0+YmxhbmsgPT0gYmxhbmspCi0gICAgICAgICAgICAgICByZXR1cm4gMDsKKwlpZiAobXgzX2ZiaS0+YmxhbmsgPT0gYmxhbmspCisJCXJldHVybiAwOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgIG14M19mYmktPmJsYW5rID0gYmxhbms7CisJbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW14M19mYmktPmJsYW5rID0gYmxhbms7CiAKLSAgICAgICBzd2l0Y2ggKGJsYW5rKSB7Ci0gICAgICAgY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0gICAgICAgY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgotICAgICAgIGNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLSAgICAgICBjYXNlIEZCX0JMQU5LX05PUk1BTDoKLSAgICAgICAgICAgICAgIHNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7Ci0gICAgICAgICAgICAgICBzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIDApOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotICAgICAgICAgICAgICAgc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOwotICAgICAgICAgICAgICAgc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCBteDNmYi0+YmFja2xpZ2h0X2xldmVsKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwlzd2l0Y2ggKGJsYW5rKSB7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKKwkJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQlzZGNfZW5hYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgbXgzZmItPmJhY2tsaWdodF9sZXZlbCk7CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKioKICAqIG14M2ZiX3Bhbl9kaXNwbGF5KCkgLSBwYW4gb3Igd3JhcCB0aGUgZGlzcGxheQotICogQHZhcjogICAgICAgdmFyaWFibGUgc2NyZWVuIGJ1ZmZlciBpbmZvcm1hdGlvbi4KLSAqIEBpbmZvOiAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIuCisgKiBAdmFyOgl2YXJpYWJsZSBzY3JlZW4gYnVmZmVyIGluZm9ybWF0aW9uLgorICogQGluZm86CWZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIuCiAgKgogICogV2UgbG9vayBvbmx5IGF0IHhvZmZzZXQsIHlvZmZzZXQgYW5kIHRoZSBGQl9WTU9ERV9ZV1JBUCBmbGFnCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZiX2luZm8gKmZiaSkKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOwotICAgICAgIHUzMiB5X2JvdHRvbTsKLSAgICAgICB1bnNpZ25lZCBsb25nIGJhc2U7Ci0gICAgICAgb2ZmX3Qgb2Zmc2V0OwotICAgICAgIGRtYV9jb29raWVfdCBjb29raWU7Ci0gICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IG14M19mYmktPnNnOwotICAgICAgIHN0cnVjdCBkbWFfY2hhbiAqZG1hX2NoYW4gPSAmbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+ZG1hX2NoYW47Ci0gICAgICAgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQ7Ci0gICAgICAgaW50IHJldDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXUzMiB5X2JvdHRvbTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJb2ZmX3Qgb2Zmc2V0OworCWRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IG14M19mYmktPnNnOworCXN0cnVjdCBkbWFfY2hhbiAqZG1hX2NoYW4gPSAmbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+ZG1hX2NoYW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQ7CisJaW50IHJldDsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywKLSAgICAgICAgICAgICAgIGxpc3RfZW1wdHkoJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJZGV2X2RiZyhmYmktPmRldmljZSwgIiVzIFslY11cbiIsIF9fZnVuY19fLAorCQlsaXN0X2VtcHR5KCZteDNfZmJpLT5pZG1hY19jaGFubmVsLT5xdWV1ZSkgPyAnLScgOiAnKycpOwogCi0gICAgICAgaWYgKHZhci0+eG9mZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJ4IHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICB9CisJaWYgKHZhci0+eG9mZnNldCA+IDApIHsKKwkJZGV2X2RiZyhmYmktPmRldmljZSwgInggcGFubmluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0gICAgICAgaWYgKGZiaS0+dmFyLnhvZmZzZXQgPT0gdmFyLT54b2Zmc2V0ICYmCi0gICAgICAgICAgIGZiaS0+dmFyLnlvZmZzZXQgPT0gdmFyLT55b2Zmc2V0KQotICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLworCWlmIChmYmktPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgorCSAgICBmYmktPnZhci55b2Zmc2V0ID09IHZhci0+eW9mZnNldCkKKwkJcmV0dXJuIDA7CS8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLwogCi0gICAgICAgeV9ib3R0b20gPSB2YXItPnlvZmZzZXQ7CisJeV9ib3R0b20gPSB2YXItPnlvZmZzZXQ7CiAKLSAgICAgICBpZiAoISh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApKQotICAgICAgICAgICAgICAgeV9ib3R0b20gKz0gdmFyLT55cmVzOworCWlmICghKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkpCisJCXlfYm90dG9tICs9IHZhci0+eXJlczsKIAotICAgICAgIGlmICh5X2JvdHRvbSA+IGZiaS0+dmFyLnlyZXNfdmlydHVhbCkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICh5X2JvdHRvbSA+IGZiaS0+dmFyLnlyZXNfdmlydHVhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBtdXRleF9sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAqIHZhci0+eHJlc192aXJ0dWFsICsgdmFyLT54b2Zmc2V0KSAqCi0gICAgICAgICAgICAgICAodmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpOwotICAgICAgIGJhc2UgPSBmYmktPmZpeC5zbWVtX3N0YXJ0ICsgb2Zmc2V0OworCW9mZnNldCA9ICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkgKgorCQkodmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpOworCWJhc2UgPSBmYmktPmZpeC5zbWVtX3N0YXJ0ICsgb2Zmc2V0OwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIlVwZGF0aW5nIFNEQyBCRyBidWYgJWQgYWRkcmVzcz0weCUwOGxYXG4iLAotICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIGJhc2UpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGluZyBTREMgQkcgYnVmICVkIGFkZHJlc3M9MHglMDhsWFxuIiwKKwkJbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIGJhc2UpOwogCi0gICAgICAgLyoKLSAgICAgICAgKiBXZSBlbmFibGUgdGhlIEVuZCBvZiBGcmFtZSBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgZnJlZSBhIHR4LWRlc2NyaXB0b3IsCi0gICAgICAgICogd2hpY2ggd2Ugd2lsbCBuZWVkIGZvciB0aGUgbmV4dCBkZXZpY2VfcHJlcF9zbGF2ZV9zZygpLiBUaGUKLSAgICAgICAgKiBJUlEtaGFuZGxlciB3aWxsIGRpc2FibGUgdGhlIElSUSBhZ2Fpbi4KLSAgICAgICAgKi8KLSAgICAgICBpbml0X2NvbXBsZXRpb24oJm14M19mYmktPmZsaXBfY21wbCk7Ci0gICAgICAgZW5hYmxlX2lycShteDNfZmJpLT5pZG1hY19jaGFubmVsLT5lb2ZfaXJxKTsKKwkvKgorCSAqIFdlIGVuYWJsZSB0aGUgRW5kIG9mIEZyYW1lIGludGVycnVwdCwgd2hpY2ggd2lsbCBmcmVlIGEgdHgtZGVzY3JpcHRvciwKKwkgKiB3aGljaCB3ZSB3aWxsIG5lZWQgZm9yIHRoZSBuZXh0IGRldmljZV9wcmVwX3NsYXZlX3NnKCkuIFRoZQorCSAqIElSUS1oYW5kbGVyIHdpbGwgZGlzYWJsZSB0aGUgSVJRIGFnYWluLgorCSAqLworCWluaXRfY29tcGxldGlvbigmbXgzX2ZiaS0+ZmxpcF9jbXBsKTsKKwllbmFibGVfaXJxKG14M19mYmktPmlkbWFjX2NoYW5uZWwtPmVvZl9pcnEpOwogCi0gICAgICAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZteDNfZmJpLT5mbGlwX2NtcGwsIEhaIC8gMTApOwotICAgICAgIGlmIChyZXQgPD0gMCkgewotICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7Ci0gICAgICAgICAgICAgICBkZXZfaW5mbyhmYmktPmRldmljZSwgIlBhbm5pbmcgZmFpbGVkIGR1ZSB0byAlc1xuIiwgcmV0IDwgMCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAidXNlciBpbnRlcnJ1cHQiIDogInRpbWVvdXQiKTsKLSAgICAgICAgICAgICAgIHJldHVybiByZXQgPyA6IC1FVElNRURPVVQ7Ci0gICAgICAgfQorCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbXgzX2ZiaS0+ZmxpcF9jbXBsLCBIWiAvIDEwKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJCWRldl9pbmZvKGZiaS0+ZGV2aWNlLCAiUGFubmluZyBmYWlsZWQgZHVlIHRvICVzXG4iLCByZXQgPCAwID8KKwkJCSAidXNlciBpbnRlcnJ1cHQiIDogInRpbWVvdXQiKTsKKwkJcmV0dXJuIHJldCA/IDogLUVUSU1FRE9VVDsKKwl9CiAKLSAgICAgICBteDNfZmJpLT5jdXJfaXB1X2J1ZiA9ICFteDNfZmJpLT5jdXJfaXB1X2J1ZjsKKwlteDNfZmJpLT5jdXJfaXB1X2J1ZiA9ICFteDNfZmJpLT5jdXJfaXB1X2J1ZjsKIAotICAgICAgIHNnX2RtYV9hZGRyZXNzKCZzZ1tteDNfZmJpLT5jdXJfaXB1X2J1Zl0pID0gYmFzZTsKLSAgICAgICBzZ19zZXRfcGFnZSgmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdLAotICAgICAgICAgICAgICAgICAgIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlICsgb2Zmc2V0KSwgZmJpLT5maXguc21lbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgb2Zmc2V0X2luX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSArIG9mZnNldCkpOworCXNnX2RtYV9hZGRyZXNzKCZzZ1tteDNfZmJpLT5jdXJfaXB1X2J1Zl0pID0gYmFzZTsKKwlzZ19zZXRfcGFnZSgmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdLAorCQkgICAgdmlydF90b19wYWdlKGZiaS0+c2NyZWVuX2Jhc2UgKyBvZmZzZXQpLCBmYmktPmZpeC5zbWVtX2xlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UgKyBvZmZzZXQpKTsKIAotICAgICAgIHR4ZCA9IGRtYV9jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGRtYV9jaGFuLCBzZyArCi0gICAgICAgICAgICAgICBteDNfZmJpLT5jdXJfaXB1X2J1ZiwgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKLSAgICAgICBpZiAoIXR4ZCkgewotICAgICAgICAgICAgICAgZGV2X2VycihmYmktPmRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHByZXBhcmluZyBhIERNQSB0cmFuc2FjdGlvbiBkZXNjcmlwdG9yLlxuIik7Ci0gICAgICAgICAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlPOwotICAgICAgIH0KKwl0eGQgPSBkbWFfY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhkbWFfY2hhbiwgc2cgKworCQlteDNfZmJpLT5jdXJfaXB1X2J1ZiwgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKKwlpZiAoIXR4ZCkgeworCQlkZXZfZXJyKGZiaS0+ZGV2aWNlLAorCQkJIkVycm9yIHByZXBhcmluZyBhIERNQSB0cmFuc2FjdGlvbiBkZXNjcmlwdG9yLlxuIik7CisJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKLSAgICAgICB0eGQtPmNhbGxiYWNrX3BhcmFtICAgICA9IHR4ZDsKLSAgICAgICB0eGQtPmNhbGxiYWNrICAgICAgICAgICA9IG14M2ZiX2RtYV9kb25lOworCXR4ZC0+Y2FsbGJhY2tfcGFyYW0JPSB0eGQ7CisJdHhkLT5jYWxsYmFjawkJPSBteDNmYl9kbWFfZG9uZTsKIAotICAgICAgIC8qCi0gICAgICAgICogRW11bGF0ZSBvcmlnaW5hbCBteDNmYiBiZWhhdmlvdXI6IGVhY2ggbmV3IGNhbGwgdG8gaWRtYWNfdHhfc3VibWl0KCkKLSAgICAgICAgKiBzaG91bGQgc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyCi0gICAgICAgICovCi0gICAgICAgY29va2llID0gdHhkLT50eF9zdWJtaXQodHhkKTsKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJWQ6IFN1Ym1pdCAlcCAjJWRcbiIsIF9fTElORV9fLCB0eGQsIGNvb2tpZSk7Ci0gICAgICAgaWYgKGNvb2tpZSA8IDApIHsKLSAgICAgICAgICAgICAgIGRldl9lcnIoZmJpLT5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICJFcnJvciB1cGRhdGluZyBTREMgYnVmICVkIHRvIGFkZHJlc3M9MHglMDhsWFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIGJhc2UpOwotICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7Ci0gICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICB9CisJLyoKKwkgKiBFbXVsYXRlIG9yaWdpbmFsIG14M2ZiIGJlaGF2aW91cjogZWFjaCBuZXcgY2FsbCB0byBpZG1hY190eF9zdWJtaXQoKQorCSAqIHNob3VsZCBzd2l0Y2ggdG8gYW5vdGhlciBidWZmZXIKKwkgKi8KKwljb29raWUgPSB0eGQtPnR4X3N1Ym1pdCh0eGQpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlZDogU3VibWl0ICVwICMlZFxuIiwgX19MSU5FX18sIHR4ZCwgY29va2llKTsKKwlpZiAoY29va2llIDwgMCkgeworCQlkZXZfZXJyKGZiaS0+ZGV2aWNlLAorCQkJIkVycm9yIHVwZGF0aW5nIFNEQyBidWYgJWQgdG8gYWRkcmVzcz0weCUwOGxYXG4iLAorCQkJbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIGJhc2UpOworCQltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQogCi0gICAgICAgaWYgKG14M19mYmktPnR4ZCkKLSAgICAgICAgICAgICAgIGFzeW5jX3R4X2FjayhteDNfZmJpLT50eGQpOwotICAgICAgIG14M19mYmktPnR4ZCA9IHR4ZDsKKwlpZiAobXgzX2ZiaS0+dHhkKQorCQlhc3luY190eF9hY2sobXgzX2ZiaS0+dHhkKTsKKwlteDNfZmJpLT50eGQgPSB0eGQ7CiAKLSAgICAgICBmYmktPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwotICAgICAgIGZiaS0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7CisJZmJpLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKKwlmYmktPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwogCi0gICAgICAgaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkKLSAgICAgICAgICAgICAgIGZiaS0+dmFyLnZtb2RlIHw9IEZCX1ZNT0RFX1lXUkFQOwotICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIGZiaS0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKKwlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKQorCQlmYmktPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKKwllbHNlCisJCWZiaS0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKIAotICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIlVwZGF0ZSBjb21wbGV0ZVxuIik7CisJZGV2X2RiZyhmYmktPmRldmljZSwgIlVwZGF0ZSBjb21wbGV0ZVxuIik7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTExMjQsMTUgKzExMjQsMTUgQEAKICAqIGJsaXR0aW5nLCByZWN0YW5nbGUgZmlsbGluZywgY29weSByZWdpb25zIGFuZCBjdXJzb3IgZGVmaW5pdGlvbi4KICAqLwogc3RhdGljIHN0cnVjdCBmYl9vcHMgbXgzZmJfb3BzID0gewotICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAotICAgICAgIC5mYl9zZXRfcGFyID0gbXgzZmJfc2V0X3BhciwKLSAgICAgICAuZmJfY2hlY2tfdmFyID0gbXgzZmJfY2hlY2tfdmFyLAotICAgICAgIC5mYl9zZXRjb2xyZWcgPSBteDNmYl9zZXRjb2xyZWcsCi0gICAgICAgLmZiX3Bhbl9kaXNwbGF5ID0gbXgzZmJfcGFuX2Rpc3BsYXksCi0gICAgICAgLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAotICAgICAgIC5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKLSAgICAgICAuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKLSAgICAgICAuZmJfYmxhbmsgPSBteDNmYl9ibGFuaywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfc2V0X3BhciA9IG14M2ZiX3NldF9wYXIsCisJLmZiX2NoZWNrX3ZhciA9IG14M2ZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0Y29scmVnID0gbXgzZmJfc2V0Y29scmVnLAorCS5mYl9wYW5fZGlzcGxheSA9IG14M2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCisJLmZiX2JsYW5rID0gbXgzZmJfYmxhbmssCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMTQ2LDE5ICsxMTQ2LDE5IEBACiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBkcnZfZGF0YS0+ZmJpLT5wYXI7CisJc3RydWN0IG14M2ZiX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBkcnZfZGF0YS0+ZmJpLT5wYXI7CiAKLSAgICAgICBhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0gICAgICAgZmJfc2V0X3N1c3BlbmQoZHJ2X2RhdGEtPmZiaSwgMSk7Ci0gICAgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmYl9zZXRfc3VzcGVuZChkcnZfZGF0YS0+ZmJpLCAxKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAKLSAgICAgICBpZiAobXgzX2ZiaS0+YmxhbmsgPT0gRkJfQkxBTktfVU5CTEFOSykgewotICAgICAgICAgICAgICAgc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKLSAgICAgICAgICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMCk7CisJaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKKwkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKKwkJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCAwKTsKIAotICAgICAgIH0KLSAgICAgICByZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMTY2LDE5ICsxMTY2LDE5IEBACiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBkcnZfZGF0YS0+ZmJpLT5wYXI7CisJc3RydWN0IG14M2ZiX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBkcnZfZGF0YS0+ZmJpLT5wYXI7CiAKLSAgICAgICBpZiAobXgzX2ZiaS0+YmxhbmsgPT0gRkJfQkxBTktfVU5CTEFOSykgewotICAgICAgICAgICAgICAgc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOwotICAgICAgICAgICAgICAgc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCBkcnZfZGF0YS0+YmFja2xpZ2h0X2xldmVsKTsKLSAgICAgICB9CisJaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKKwkJc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOworCQlzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIGRydl9kYXRhLT5iYWNrbGlnaHRfbGV2ZWwpOworCX0KIAotICAgICAgIGFjcXVpcmVfY29uc29sZV9zZW0oKTsKLSAgICAgICBmYl9zZXRfc3VzcGVuZChkcnZfZGF0YS0+ZmJpLCAwKTsKLSAgICAgICByZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWZiX3NldF9zdXNwZW5kKGRydl9kYXRhLT5mYmksIDApOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgbXgzZmJfc3VzcGVuZCAgIE5VTEwKQEAgLTExOTEsOCArMTE5MSw4IEBACiAKIC8qKgogICogbXgzZmJfbWFwX3ZpZGVvX21lbW9yeSgpIC0gYWxsb2NhdGVzIHRoZSBEUkFNIG1lbW9yeSBmb3IgdGhlIGZyYW1lIGJ1ZmZlci4KLSAqIEBmYmk6ICAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKLSAqIEByZXR1cm46ICAgIEVycm9yIGNvZGUgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKKyAqIEBmYmk6CWZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKKyAqIEByZXR1cm46CUVycm9yIGNvZGUgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICAqCiAgKiBUaGlzIGJ1ZmZlciBpcyByZW1hcHBlZCBpbnRvIGEgbm9uLWNhY2hlZCwgbm9uLWJ1ZmZlcmVkLCBtZW1vcnkgcmVnaW9uIHRvCiAgKiBhbGxvdyBwYWxldHRlIGFuZCBwaXhlbCB3cml0ZXMgdG8gb2NjdXIgd2l0aG91dCBmbHVzaGluZyB0aGUgY2FjaGUuIE9uY2UgdGhpcwpAQCAtMTIwMSwzNDkgKzEyMDEsMzQ5IEBACiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfbWFwX3ZpZGVvX21lbW9yeShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIGludCByZXR2YWwgPSAwOwotICAgICAgIGRtYV9hZGRyX3QgYWRkcjsKKwlpbnQgcmV0dmFsID0gMDsKKwlkbWFfYWRkcl90IGFkZHI7CiAKLSAgICAgICBmYmktPnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShmYmktPmRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPmZpeC5zbWVtX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkciwgR0ZQX0RNQSk7CisJZmJpLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZmJpLT5kZXZpY2UsCisJCQkJCQkgIGZiaS0+Zml4LnNtZW1fbGVuLAorCQkJCQkJICAmYWRkciwgR0ZQX0RNQSk7CiAKLSAgICAgICBpZiAoIWZiaS0+c2NyZWVuX2Jhc2UpIHsKLSAgICAgICAgICAgICAgIGRldl9lcnIoZmJpLT5kZXZpY2UsICJDYW5ub3QgYWxsb2NhdGUgJXUgYnl0ZXMgZnJhbWVidWZmZXIgbWVtb3J5XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBmYmktPmZpeC5zbWVtX2xlbik7Ci0gICAgICAgICAgICAgICByZXR2YWwgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICBnb3RvIGVycjA7Ci0gICAgICAgfQorCWlmICghZmJpLT5zY3JlZW5fYmFzZSkgeworCQlkZXZfZXJyKGZiaS0+ZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlICV1IGJ5dGVzIGZyYW1lYnVmZmVyIG1lbW9yeVxuIiwKKwkJCWZiaS0+Zml4LnNtZW1fbGVuKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjA7CisJfQogCi0gICAgICAgZmJpLT5maXguc21lbV9zdGFydCA9IGFkZHI7CisJZmJpLT5maXguc21lbV9zdGFydCA9IGFkZHI7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiYWxsb2NhdGVkIGZiIEAgcD0weCUwOHgsIHY9MHglcCwgc2l6ZT0lZC5cbiIsCi0gICAgICAgICAgICAgICAodWludDMyX3QpIGZiaS0+Zml4LnNtZW1fc3RhcnQsIGZiaS0+c2NyZWVuX2Jhc2UsIGZiaS0+Zml4LnNtZW1fbGVuKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiYWxsb2NhdGVkIGZiIEAgcD0weCUwOHgsIHY9MHglcCwgc2l6ZT0lZC5cbiIsCisJCSh1aW50MzJfdCkgZmJpLT5maXguc21lbV9zdGFydCwgZmJpLT5zY3JlZW5fYmFzZSwgZmJpLT5maXguc21lbV9sZW4pOwogCi0gICAgICAgZmJpLT5zY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LnNtZW1fbGVuOworCWZiaS0+c2NyZWVuX3NpemUgPSBmYmktPmZpeC5zbWVtX2xlbjsKIAotICAgICAgIC8qIENsZWFyIHRoZSBzY3JlZW4gKi8KLSAgICAgICBtZW1zZXQoKGNoYXIgKilmYmktPnNjcmVlbl9iYXNlLCAwLCBmYmktPmZpeC5zbWVtX2xlbik7CisJLyogQ2xlYXIgdGhlIHNjcmVlbiAqLworCW1lbXNldCgoY2hhciAqKWZiaS0+c2NyZWVuX2Jhc2UsIDAsIGZiaS0+Zml4LnNtZW1fbGVuKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBlcnIwOgotICAgICAgIGZiaS0+Zml4LnNtZW1fbGVuID0gMDsKLSAgICAgICBmYmktPmZpeC5zbWVtX3N0YXJ0ID0gMDsKLSAgICAgICBmYmktPnNjcmVlbl9iYXNlID0gTlVMTDsKLSAgICAgICByZXR1cm4gcmV0dmFsOworCWZiaS0+Zml4LnNtZW1fbGVuID0gMDsKKwlmYmktPmZpeC5zbWVtX3N0YXJ0ID0gMDsKKwlmYmktPnNjcmVlbl9iYXNlID0gTlVMTDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioKICAqIG14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeSgpIC0gZGUtYWxsb2NhdGUgZnJhbWUgYnVmZmVyIG1lbW9yeS4KLSAqIEBmYmk6ICAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKLSAqIEByZXR1cm46ICAgIGVycm9yIGNvZGUgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKKyAqIEBmYmk6CWZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKKyAqIEByZXR1cm46CWVycm9yIGNvZGUgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICAqLwogc3RhdGljIGludCBteDNmYl91bm1hcF92aWRlb19tZW1vcnkoc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBkbWFfZnJlZV93cml0ZWNvbWJpbmUoZmJpLT5kZXZpY2UsIGZiaS0+Zml4LnNtZW1fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnNjcmVlbl9iYXNlLCBmYmktPmZpeC5zbWVtX3N0YXJ0KTsKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZmJpLT5kZXZpY2UsIGZiaS0+Zml4LnNtZW1fbGVuLAorCQkJICAgICAgZmJpLT5zY3JlZW5fYmFzZSwgZmJpLT5maXguc21lbV9zdGFydCk7CiAKLSAgICAgICBmYmktPnNjcmVlbl9iYXNlID0gMDsKLSAgICAgICBmYmktPmZpeC5zbWVtX3N0YXJ0ID0gMDsKLSAgICAgICBmYmktPmZpeC5zbWVtX2xlbiA9IDA7Ci0gICAgICAgcmV0dXJuIDA7CisJZmJpLT5zY3JlZW5fYmFzZSA9IDA7CisJZmJpLT5maXguc21lbV9zdGFydCA9IDA7CisJZmJpLT5maXguc21lbV9sZW4gPSAwOworCXJldHVybiAwOwogfQogCiAvKioKICAqIG14M2ZiX2luaXRfZmJpbmZvKCkgLSBpbml0aWFsaXplIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIG9iamVjdC4KLSAqIEByZXR1cm46ICAgIGluaXRpYWxpemVkIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqIEByZXR1cm46CWluaXRpYWxpemVkIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KICAqLwogc3RhdGljIHN0cnVjdCBmYl9pbmZvICpteDNmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBmYl9vcHMgKm9wcykKIHsKLSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNmYmk7Ci0gICAgICAgaW50IHJldDsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNmYmk7CisJaW50IHJldDsKIAotICAgICAgIC8qIEFsbG9jYXRlIHN1ZmZpY2llbnQgbWVtb3J5IGZvciB0aGUgZmIgc3RydWN0dXJlICovCi0gICAgICAgZmJpID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBteDNmYl9pbmZvKSwgZGV2KTsKLSAgICAgICBpZiAoIWZiaSkKLSAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCS8qIEFsbG9jYXRlIHN1ZmZpY2llbnQgbWVtb3J5IGZvciB0aGUgZmIgc3RydWN0dXJlICovCisJZmJpID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBteDNmYl9pbmZvKSwgZGV2KTsKKwlpZiAoIWZiaSkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgICAgICBteDNmYmkgICAgICAgICAgICAgICAgICA9IGZiaS0+cGFyOwotICAgICAgIG14M2ZiaS0+Y29va2llICAgICAgICAgID0gLUVJTlZBTDsKLSAgICAgICBteDNmYmktPmN1cl9pcHVfYnVmICAgICA9IDA7CisJbXgzZmJpCQkJPSBmYmktPnBhcjsKKwlteDNmYmktPmNvb2tpZQkJPSAtRUlOVkFMOworCW14M2ZiaS0+Y3VyX2lwdV9idWYJPSAwOwogCi0gICAgICAgZmJpLT52YXIuYWN0aXZhdGUgICAgICAgPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJpLT52YXIuYWN0aXZhdGUJPSBGQl9BQ1RJVkFURV9OT1c7CiAKLSAgICAgICBmYmktPmZib3BzICAgICAgICAgICAgICA9IG9wczsKLSAgICAgICBmYmktPmZsYWdzICAgICAgICAgICAgICA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Ci0gICAgICAgZmJpLT5wc2V1ZG9fcGFsZXR0ZSAgICAgPSBteDNmYmktPnBzZXVkb19wYWxldHRlOworCWZiaS0+ZmJvcHMJCT0gb3BzOworCWZiaS0+ZmxhZ3MJCT0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlmYmktPnBzZXVkb19wYWxldHRlCT0gbXgzZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKIAotICAgICAgIG11dGV4X2luaXQoJm14M2ZiaS0+bXV0ZXgpOworCW11dGV4X2luaXQoJm14M2ZiaS0+bXV0ZXgpOwogCi0gICAgICAgLyogQWxsb2NhdGUgY29sb3JtYXAgKi8KLSAgICAgICByZXQgPSBmYl9hbGxvY19jbWFwKCZmYmktPmNtYXAsIDE2LCAwKTsKLSAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgICAgZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwotICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgfQorCS8qIEFsbG9jYXRlIGNvbG9ybWFwICovCisJcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAxNiwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLSAgICAgICByZXR1cm4gZmJpOworCXJldHVybiBmYmk7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9mYl9jaGFuKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuKQogewotICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IG14M2ZiLT5kZXY7Ci0gICAgICAgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgKm14M2ZiX3BkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBteDNmYl9wZGF0YS0+bmFtZTsKLSAgICAgICB1bnNpZ25lZCBpbnQgaXJxOwotICAgICAgIHN0cnVjdCBmYl9pbmZvICpmYmk7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M2ZiaTsKLSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwotICAgICAgIGludCByZXQsIG51bV9tb2RlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBteDNmYi0+ZGV2OworCXN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhICpteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb25zdCBjaGFyICpuYW1lID0gbXgzZmJfcGRhdGEtPm5hbWU7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNmYmk7CisJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKKwlpbnQgcmV0LCBudW1fbW9kZXM7CiAKLSAgICAgICBpY2hhbi0+Y2xpZW50ID0gbXgzZmI7Ci0gICAgICAgaXJxID0gaWNoYW4tPmVvZl9pcnE7CisJaWNoYW4tPmNsaWVudCA9IG14M2ZiOworCWlycSA9IGljaGFuLT5lb2ZfaXJxOwogCi0gICAgICAgaWYgKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkICE9IElETUFDX1NEQ18wKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkICE9IElETUFDX1NEQ18wKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIGZiaSA9IG14M2ZiX2luaXRfZmJpbmZvKGRldiwgJm14M2ZiX29wcyk7Ci0gICAgICAgaWYgKCFmYmkpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKwlmYmkgPSBteDNmYl9pbml0X2ZiaW5mbyhkZXYsICZteDNmYl9vcHMpOworCWlmICghZmJpKQorCQlyZXR1cm4gLUVOT01FTTsKIAotICAgICAgIGlmICghZmJfbW9kZSkKLSAgICAgICAgICAgICAgIGZiX21vZGUgPSBuYW1lOworCWlmICghZmJfbW9kZSkKKwkJZmJfbW9kZSA9IG5hbWU7CiAKLSAgICAgICBpZiAoIWZiX21vZGUpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICBnb3RvIGVtb2RlOwotICAgICAgIH0KKwlpZiAoIWZiX21vZGUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlbW9kZTsKKwl9CiAKLSAgICAgICBpZiAobXgzZmJfcGRhdGEtPm1vZGUgJiYgbXgzZmJfcGRhdGEtPm51bV9tb2RlcykgewotICAgICAgICAgICAgICAgbW9kZSA9IG14M2ZiX3BkYXRhLT5tb2RlOwotICAgICAgICAgICAgICAgbnVtX21vZGVzID0gbXgzZmJfcGRhdGEtPm51bV9tb2RlczsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgbW9kZSA9IG14M2ZiX21vZGVkYjsKLSAgICAgICAgICAgICAgIG51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgzZmJfbW9kZWRiKTsKLSAgICAgICB9CisJaWYgKG14M2ZiX3BkYXRhLT5tb2RlICYmIG14M2ZiX3BkYXRhLT5udW1fbW9kZXMpIHsKKwkJbW9kZSA9IG14M2ZiX3BkYXRhLT5tb2RlOworCQludW1fbW9kZXMgPSBteDNmYl9wZGF0YS0+bnVtX21vZGVzOworCX0gZWxzZSB7CisJCW1vZGUgPSBteDNmYl9tb2RlZGI7CisJCW51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgzZmJfbW9kZWRiKTsKKwl9CiAKLSAgICAgICBpZiAoIWZiX2ZpbmRfbW9kZSgmZmJpLT52YXIsIGZiaSwgZmJfbW9kZSwgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBudW1fbW9kZXMsIE5VTEwsIGRlZmF1bHRfYnBwKSkgewotICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgZ290byBlbW9kZTsKLSAgICAgICB9CisJaWYgKCFmYl9maW5kX21vZGUoJmZiaS0+dmFyLCBmYmksIGZiX21vZGUsIG1vZGUsCisJCQkgIG51bV9tb2RlcywgTlVMTCwgZGVmYXVsdF9icHApKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlbW9kZTsKKwl9CiAKLSAgICAgICBmYl92aWRlb21vZGVfdG9fbW9kZWxpc3QobW9kZSwgbnVtX21vZGVzLCAmZmJpLT5tb2RlbGlzdCk7CisJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KG1vZGUsIG51bV9tb2RlcywgJmZiaS0+bW9kZWxpc3QpOwogCi0gICAgICAgLyogRGVmYXVsdCBZIHZpcnR1YWwgc2l6ZSBpcyAyeCBwYW5lbCBzaXplICovCi0gICAgICAgZmJpLT52YXIueXJlc192aXJ0dWFsID0gZmJpLT52YXIueXJlcyAqIDI7CisJLyogRGVmYXVsdCBZIHZpcnR1YWwgc2l6ZSBpcyAyeCBwYW5lbCBzaXplICovCisJZmJpLT52YXIueXJlc192aXJ0dWFsID0gZmJpLT52YXIueXJlcyAqIDI7CiAKLSAgICAgICBteDNmYi0+ZmJpID0gZmJpOworCW14M2ZiLT5mYmkgPSBmYmk7CiAKLSAgICAgICAvKiBzZXQgRGlzcGxheSBJbnRlcmZhY2UgY2xvY2sgcGVyaW9kICovCi0gICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwMTAwMDEwTCwgRElfSFNQX0NMS19QRVIpOwotICAgICAgIC8qIE1pZ2h0IG5lZWQgdG8gdHJpZ2dlciBIU1AgY2xvY2sgY2hhbmdlIC0gc2VlIDQ0LjMuMy44LjUgKi8KKwkvKiBzZXQgRGlzcGxheSBJbnRlcmZhY2UgY2xvY2sgcGVyaW9kICovCisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwMTAwMDEwTCwgRElfSFNQX0NMS19QRVIpOworCS8qIE1pZ2h0IG5lZWQgdG8gdHJpZ2dlciBIU1AgY2xvY2sgY2hhbmdlIC0gc2VlIDQ0LjMuMy44LjUgKi8KIAotICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMjU1KTsKLSAgICAgICBzZGNfc2V0X2dsb2JhbF9hbHBoYShteDNmYiwgdHJ1ZSwgMHhGRik7Ci0gICAgICAgc2RjX3NldF9jb2xvcl9rZXkobXgzZmIsIElETUFDX1NEQ18wLCBmYWxzZSwgMCk7CisJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCAyNTUpOworCXNkY19zZXRfZ2xvYmFsX2FscGhhKG14M2ZiLCB0cnVlLCAweEZGKTsKKwlzZGNfc2V0X2NvbG9yX2tleShteDNmYiwgSURNQUNfU0RDXzAsIGZhbHNlLCAwKTsKIAotICAgICAgIG14M2ZiaSAgICAgICAgICAgICAgICAgID0gZmJpLT5wYXI7Ci0gICAgICAgbXgzZmJpLT5pZG1hY19jaGFubmVsICAgPSBpY2hhbjsKLSAgICAgICBteDNmYmktPmlwdV9jaCAgICAgICAgICA9IGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkOwotICAgICAgIG14M2ZiaS0+bXgzZmIgICAgICAgICAgID0gbXgzZmI7Ci0gICAgICAgbXgzZmJpLT5ibGFuayAgICAgICAgICAgPSBGQl9CTEFOS19OT1JNQUw7CisJbXgzZmJpCQkJPSBmYmktPnBhcjsKKwlteDNmYmktPmlkbWFjX2NoYW5uZWwJPSBpY2hhbjsKKwlteDNmYmktPmlwdV9jaAkJPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKKwlteDNmYmktPm14M2ZiCQk9IG14M2ZiOworCW14M2ZiaS0+YmxhbmsJCT0gRkJfQkxBTktfTk9STUFMOwogCi0gICAgICAgaW5pdF9jb21wbGV0aW9uKCZteDNmYmktPmZsaXBfY21wbCk7Ci0gICAgICAgZGlzYWJsZV9pcnEoaWNoYW4tPmVvZl9pcnEpOwotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgImRpc2FibGluZyBpcnEgJWRcbiIsIGljaGFuLT5lb2ZfaXJxKTsKLSAgICAgICByZXQgPSBteDNmYl9zZXRfcGFyKGZiaSk7Ci0gICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICBnb3RvIGVzZXRwYXI7CisJaW5pdF9jb21wbGV0aW9uKCZteDNmYmktPmZsaXBfY21wbCk7CisJZGlzYWJsZV9pcnEoaWNoYW4tPmVvZl9pcnEpOworCWRldl9kYmcobXgzZmItPmRldiwgImRpc2FibGluZyBpcnEgJWRcbiIsIGljaGFuLT5lb2ZfaXJxKTsKKwlyZXQgPSBteDNmYl9zZXRfcGFyKGZiaSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXNldHBhcjsKIAotICAgICAgIG14M2ZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiaSk7CisJbXgzZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgZmJpKTsKIAotICAgICAgIGRldl9pbmZvKGRldiwgIm14M2ZiOiBmYiByZWdpc3RlcmVkLCB1c2luZyBtb2RlICVzXG4iLCBmYl9tb2RlKTsKKwlkZXZfaW5mbyhkZXYsICJteDNmYjogZmIgcmVnaXN0ZXJlZCwgdXNpbmcgbW9kZSAlc1xuIiwgZmJfbW9kZSk7CiAKLSAgICAgICByZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOwotICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgZ290byBlcmZiOworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJmYjsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBlcmZiOgogZXNldHBhcjoKIGVtb2RlOgotICAgICAgIGZiX2RlYWxsb2NfY21hcCgmZmJpLT5jbWFwKTsKLSAgICAgICBmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CisJZmJfZGVhbGxvY19jbWFwKCZmYmktPmNtYXApOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKIAotICAgICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGJvb2wgY2hhbl9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICphcmcpCiB7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgKnJxID0gYXJnOwotICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldjsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSAqbXgzZmJfcGRhdGE7CisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgKnJxID0gYXJnOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSAqbXgzZmJfcGRhdGE7CiAKLSAgICAgICBpZiAoIXJxKQotICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCWlmICghcnEpCisJCXJldHVybiBmYWxzZTsKIAotICAgICAgIGRldiA9IHJxLT5teDNmYi0+ZGV2OwotICAgICAgIG14M2ZiX3BkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWRldiA9IHJxLT5teDNmYi0+ZGV2OworCW14M2ZiX3BkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0gICAgICAgcmV0dXJuIHJxLT5pZCA9PSBjaGFuLT5jaGFuX2lkICYmCi0gICAgICAgICAgICAgICBteDNmYl9wZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKKwlyZXR1cm4gcnEtPmlkID09IGNoYW4tPmNoYW5faWQgJiYKKwkJbXgzZmJfcGRhdGEtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXY7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZmJpKHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CisJbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CiAKLSAgICAgICBmYl9kZWFsbG9jX2NtYXAoJmZiaS0+Y21hcCk7CisJZmJfZGVhbGxvY19jbWFwKCZmYmktPmNtYXApOwogCi0gICAgICAgdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOwotICAgICAgIGZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaSk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwogfQogCiBzdGF0aWMgaW50IG14M2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0gICAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLSAgICAgICBpbnQgcmV0OwotICAgICAgIHN0cnVjdCByZXNvdXJjZSAqc2RjX3JlZzsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmI7Ci0gICAgICAgZG1hX2NhcF9tYXNrX3QgbWFzazsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgcnE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcmV0OworCXN0cnVjdCByZXNvdXJjZSAqc2RjX3JlZzsKKwlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmI7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgcnE7CiAKLSAgICAgICAvKgotICAgICAgICAqIERpc3BsYXkgSW50ZXJmYWNlIChESSkgYW5kIFN5bmNocm9ub3VzIERpc3BsYXkgQ29udHJvbGxlciAoU0RDKQotICAgICAgICAqIHJlZ2lzdGVycwotICAgICAgICAqLwotICAgICAgIHNkY19yZWcgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotICAgICAgIGlmICghc2RjX3JlZykKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCS8qCisJICogRGlzcGxheSBJbnRlcmZhY2UgKERJKSBhbmQgU3luY2hyb25vdXMgRGlzcGxheSBDb250cm9sbGVyIChTREMpCisJICogcmVnaXN0ZXJzCisJICovCisJc2RjX3JlZyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFzZGNfcmVnKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIG14M2ZiID0ga3phbGxvYyhzaXplb2YoKm14M2ZiKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgaWYgKCFteDNmYikKLSAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCW14M2ZiID0ga3phbGxvYyhzaXplb2YoKm14M2ZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFteDNmYikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLSAgICAgICBzcGluX2xvY2tfaW5pdCgmbXgzZmItPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZteDNmYi0+bG9jayk7CiAKLSAgICAgICBteDNmYi0+cmVnX2Jhc2UgPSBpb3JlbWFwKHNkY19yZWctPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNkY19yZWcpKTsKLSAgICAgICBpZiAoIW14M2ZiLT5yZWdfYmFzZSkgewotICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgIGdvdG8gZXJlbWFwOwotICAgICAgIH0KKwlteDNmYi0+cmVnX2Jhc2UgPSBpb3JlbWFwKHNkY19yZWctPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNkY19yZWcpKTsKKwlpZiAoIW14M2ZiLT5yZWdfYmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVyZW1hcDsKKwl9CiAKLSAgICAgICBwcl9kZWJ1ZygiUmVtYXBwZWQgJXggdG8gJXggYXQgJXBcbiIsIHNkY19yZWctPnN0YXJ0LCBzZGNfcmVnLT5lbmQsCi0gICAgICAgICAgICAgICAgbXgzZmItPnJlZ19iYXNlKTsKKwlwcl9kZWJ1ZygiUmVtYXBwZWQgJXggdG8gJXggYXQgJXBcbiIsIHNkY19yZWctPnN0YXJ0LCBzZGNfcmVnLT5lbmQsCisJCSBteDNmYi0+cmVnX2Jhc2UpOwogCi0gICAgICAgLyogSURNQUMgaW50ZXJmYWNlICovCi0gICAgICAgZG1hZW5naW5lX2dldCgpOworCS8qIElETUFDIGludGVyZmFjZSAqLworCWRtYWVuZ2luZV9nZXQoKTsKIAotICAgICAgIG14M2ZiLT5kZXYgPSBkZXY7Ci0gICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXgzZmIpOworCW14M2ZiLT5kZXYgPSBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXgzZmIpOwogCi0gICAgICAgcnEubXgzZmIgPSBteDNmYjsKKwlycS5teDNmYiA9IG14M2ZiOwogCi0gICAgICAgZG1hX2NhcF96ZXJvKG1hc2spOwotICAgICAgIGRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7Ci0gICAgICAgZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOwotICAgICAgIHJxLmlkID0gSURNQUNfU0RDXzA7Ci0gICAgICAgY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgY2hhbl9maWx0ZXIsICZycSk7Ci0gICAgICAgaWYgKCFjaGFuKSB7Ci0gICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICBnb3RvIGVyc2RjMDsKLSAgICAgICB9CisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOworCXJxLmlkID0gSURNQUNfU0RDXzA7CisJY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgY2hhbl9maWx0ZXIsICZycSk7CisJaWYgKCFjaGFuKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnNkYzA7CisJfQogCi0gICAgICAgcmV0ID0gaW5pdF9mYl9jaGFuKG14M2ZiLCB0b19pZG1hY19jaGFuKGNoYW4pKTsKLSAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgIGdvdG8gZWlzZGMwOworCXJldCA9IGluaXRfZmJfY2hhbihteDNmYiwgdG9faWRtYWNfY2hhbihjaGFuKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZWlzZGMwOwogCi0gICAgICAgbXgzZmItPmJhY2tsaWdodF9sZXZlbCA9IDI1NTsKKwlteDNmYi0+YmFja2xpZ2h0X2xldmVsID0gMjU1OwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKIGVpc2RjMDoKLSAgICAgICBkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hhbik7CiBlcnNkYzA6Ci0gICAgICAgZG1hZW5naW5lX3B1dCgpOwotICAgICAgIGlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKKwlkbWFlbmdpbmVfcHV0KCk7CisJaW91bm1hcChteDNmYi0+cmVnX2Jhc2UpOwogZXJlbWFwOgotICAgICAgIGtmcmVlKG14M2ZiKTsKLSAgICAgICBkZXZfZXJyKGRldiwgIm14M2ZiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZmJcbiIpOwotICAgICAgIHJldHVybiByZXQ7CisJa2ZyZWUobXgzZmIpOworCWRldl9lcnIoZGV2LCAibXgzZmI6IGZhaWxlZCB0byByZWdpc3RlciBmYlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBteDNmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0gICAgICAgc3RydWN0IGZiX2luZm8gKmZiaSA9IG14M2ZiLT5mYmk7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gbXgzZmItPmZiaTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAotICAgICAgIGNoYW4gPSAmbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+ZG1hX2NoYW47Ci0gICAgICAgcmVsZWFzZV9mYmkoZmJpKTsKKwljaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOworCXJlbGVhc2VfZmJpKGZiaSk7CiAKLSAgICAgICBkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwotICAgICAgIGRtYWVuZ2luZV9wdXQoKTsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCWRtYWVuZ2luZV9wdXQoKTsKIAotICAgICAgIGlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKLSAgICAgICBrZnJlZShteDNmYik7Ci0gICAgICAgcmV0dXJuIDA7CisJaW91bm1hcChteDNmYi0+cmVnX2Jhc2UpOworCWtmcmVlKG14M2ZiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXgzZmJfZHJpdmVyID0gewotICAgICAgIC5kcml2ZXIgPSB7Ci0gICAgICAgICAgICAgICAgICAubmFtZSA9IE1YM0ZCX05BTUUsCi0gICAgICAgfSwKLSAgICAgICAucHJvYmUgPSBteDNmYl9wcm9iZSwKLSAgICAgICAucmVtb3ZlID0gbXgzZmJfcmVtb3ZlLAotICAgICAgIC5zdXNwZW5kID0gbXgzZmJfc3VzcGVuZCwKLSAgICAgICAucmVzdW1lID0gbXgzZmJfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gTVgzRkJfTkFNRSwKKwl9LAorCS5wcm9iZSA9IG14M2ZiX3Byb2JlLAorCS5yZW1vdmUgPSBteDNmYl9yZW1vdmUsCisJLnN1c3BlbmQgPSBteDNmYl9zdXNwZW5kLAorCS5yZXN1bWUgPSBteDNmYl9yZXN1bWUsCiB9OwogCiAvKgogICogUGFyc2UgdXNlciBzcGVjaWZpZWQgb3B0aW9ucyAoYHZpZGVvPW14M2ZiOicpCiAgKiBleGFtcGxlOgotICogICAgIHZpZGVvPW14M2ZiOmJwcD0xNgorICogCXZpZGVvPW14M2ZiOmJwcD0xNgogICovCiBzdGF0aWMgaW50IG14M2ZiX3NldHVwKHZvaWQpCiB7CiAjaWZuZGVmIE1PRFVMRQotICAgICAgIGNoYXIgKm9wdCwgKm9wdGlvbnMgPSBOVUxMOworCWNoYXIgKm9wdCwgKm9wdGlvbnMgPSBOVUxMOwogCi0gICAgICAgaWYgKGZiX2dldF9vcHRpb25zKCJteDNmYiIsICZvcHRpb25zKSkKLSAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCWlmIChmYl9nZXRfb3B0aW9ucygibXgzZmIiLCAmb3B0aW9ucykpCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKLSAgICAgICAgICAgICAgIHJldHVybiAwOworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOwogCi0gICAgICAgd2hpbGUgKChvcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgIGlmICghKm9wdCkKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICBpZiAoIXN0cm5jbXAob3B0LCAiYnBwPSIsIDQpKQotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2JwcCA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDQsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICBmYl9tb2RlID0gb3B0OwotICAgICAgIH0KKwl3aGlsZSAoKG9wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISpvcHQpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdHJuY21wKG9wdCwgImJwcD0iLCA0KSkKKwkJCWRlZmF1bHRfYnBwID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNCwgTlVMTCwgMCk7CisJCWVsc2UKKwkJCWZiX21vZGUgPSBvcHQ7CisJfQogI2VuZGlmCiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbXgzZmJfaW5pdCh2b2lkKQogewotICAgICAgIGludCByZXQgPSBteDNmYl9zZXR1cCgpOworCWludCByZXQgPSBteDNmYl9zZXR1cCgpOwogCi0gICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICByZXR1cm4gcmV0OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0gICAgICAgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOwotICAgICAgIHJldHVybiByZXQ7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBteDNmYl9leGl0KHZvaWQpCiB7Ci0gICAgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14M2ZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14M2ZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG14M2ZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDI1NTJiOWYuLjg0ZjYzMjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2JpdGZpZWxkLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogCkBAIC04ODMsMTAgKzg4MiwyMSBAQAogCWluaXRfY29tcGxldGlvbigmb2ZiLT5icmFuY2hfZG9uZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHB4YWZiX292ZXJsYXlfc3VwcG9ydGVkKHZvaWQpCit7CisJaWYgKGNwdV9pc19weGEyN3goKSB8fCBjcHVfaXNfcHhhM3h4KCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX292ZXJsYXlfaW5pdChzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQogewogCWludCBpLCByZXQ7CiAKKwlpZiAoIXB4YWZiX292ZXJsYXlfc3VwcG9ydGVkKCkpCisJCXJldHVybiAwOworCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlpbml0X3B4YWZiX292ZXJsYXkoZmJpLCAmZmJpLT5vdmVybGF5W2ldLCBpKTsKIAkJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiaS0+b3ZlcmxheVtpXS5mYik7CkBAIC05MDksNiArOTE5LDkgQEAKIHsKIAlpbnQgaTsKIAorCWlmICghcHhhZmJfb3ZlcmxheV9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5vdmVybGF5W2ldLmZiKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IDc5Y2YwYjEuLmIwYjQ1MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtMTAxNyw2ICsxMDE3LDEwIEBACiAKIAlzM2MyNDEwZmJfaW5pdF9yZWdpc3RlcnMoZmJpbmZvKTsKIAorCS8qIHJlLWFjdGl2YXRlIG91ciBkaXNwbGF5IGFmdGVyIHJlc3VtZSAqLworCXMzYzI0MTBmYl9hY3RpdmF0ZV92YXIoZmJpbmZvKTsKKwlzM2MyNDEwZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgZmJpbmZvKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggMDc2Zjk0Ni4uZmFkNThjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtMTc2LDkgKzE3Niw5IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2Fzc2FiZXQuaD4KICNpbmNsdWRlIDxtYWNoL3NoYW5ub24uaD4KQEAgLTI1MSwyMiArMjUxLDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi1zdGF0aWMgc3RydWN0IHNhMTEwMGZiX21hY2hfaW5mbyBoMzgwMF9pbmZvIF9faW5pdGRhdGEgPSB7Ci0JLnBpeGNsb2NrCT0gMTc0NzU3LCAJLmJwcAkJPSAxNiwKLQkueHJlcwkJPSAzMjAsCQkueXJlcwkJPSAyNDAsCi0KLQkuaHN5bmNfbGVuCT0gMywJCS52c3luY19sZW4JPSAzLAotCS5sZWZ0X21hcmdpbgk9IDEyLAkJLnVwcGVyX21hcmdpbgk9IDEwLAotCS5yaWdodF9tYXJnaW4JPSAxNywJCS5sb3dlcl9tYXJnaW4JPSAxLAotCi0JLmNtYXBfc3RhdGljCT0gMSwKLQotCS5sY2NyMAkJPSBMQ0NSMF9Db2xvciB8IExDQ1IwX1NuZ2wgfCBMQ0NSMF9BY3QsCi0JLmxjY3IzCQk9IExDQ1IzX091dEVuSCB8IExDQ1IzX1BpeFJzRWRnIHwgTENDUjNfQUNCc0RpdigyKSwKLX07Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TQTExMDBfSDM2MDAKIHN0YXRpYyBzdHJ1Y3Qgc2ExMTAwZmJfbWFjaF9pbmZvIGgzNjAwX2luZm8gX19pbml0ZGF0YSA9IHsKIAkucGl4Y2xvY2sJPSAxNzQ3NTcsIAkuYnBwCQk9IDE2LApAQCAtNDMyLDExICs0MTYsNiBAQAogCQlmYmktPnJnYltSR0JfMTZdID0gJmgzNjAwX3JnYl8xNjsKIAl9CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi0JaWYgKG1hY2hpbmVfaXNfaDM4MDAoKSkgewotCQlpbmYgPSAmaDM4MDBfaW5mbzsKLQl9Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfU0ExMTAwX0NPTExJRQogCWlmIChtYWNoaW5lX2lzX2NvbGxpZSgpKSB7CiAJCWluZiA9ICZjb2xsaWVfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYwppbmRleCBiOWQ3NGQwLi42NTI0NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvbXhjX3cxLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL214Y193MS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlpZiAoIW1kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3dpcmVfY2xrIik7CisJbWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3dpcmUiKTsKIAlpZiAoIW1kZXYtPmNsaykgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGZhaWxlZF9jbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCmluZGV4IGM5NzM4ODkuLmE3ZTNiNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCkBAIC01OTAsOCArNTkwLDggQEAKIAl9CiAKIAkvKiBnZXQgaW50ZXJmYWNlICYgZnVuY3Rpb25hbCBjbG9jayBvYmplY3RzICovCi0JaGRxX2RhdGEtPmhkcV9pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJoZHFfaWNrIik7Ci0JaGRxX2RhdGEtPmhkcV9mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJoZHFfZmNrIik7CisJaGRxX2RhdGEtPmhkcV9pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwloZHFfZGF0YS0+aGRxX2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCiAJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykgfHwgSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgSERRIGNsb2NrIG9iamVjdHNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDU1ZjY0YWYuLjYzMDI0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTc3Miw3ICs3NzIsNyBAQAogCiBjb25maWcgR0VGX1dEVAogCXRyaXN0YXRlICJHRSBGYW51YyBXYXRjaGRvZyBUaW1lciIKLQlkZXBlbmRzIG9uIEdFRl9TQkM2MTAKKwlkZXBlbmRzIG9uIEdFRl9TQkM2MTAgfHwgR0VGX1NCQzMxMCB8fCBHRUZfUFBDOUEKIAktLS1oZWxwLS0tCiAJICBXYXRjaGRvZyB0aW1lciBmb3VuZCBpbiBhIG51bWJlciBvZiBHRSBGYW51YyBzaW5nbGUgYm9hcmQgY29tcHV0ZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKaW5kZXggMmYyY2U3NC4uYWE1YWQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtNjAsOSArNjAsOCBAQAogCXZvaWQgX19pb21lbSAgICAqYmFzZTsgICAgICAgICAgLyogcGh5c2ljYWwgKi8KIAlzdHJ1Y3QgZGV2aWNlICAgKmRldjsKIAlpbnQgICAgICAgICAgICAgb21hcF93ZHRfdXNlcnM7Ci0Jc3RydWN0IGNsayAgICAgICphcm13ZHRfY2s7Ci0Jc3RydWN0IGNsayAgICAgICptcHVfd2R0X2ljazsKLQlzdHJ1Y3QgY2xrICAgICAgKm1wdV93ZHRfZmNrOworCXN0cnVjdCBjbGsgICAgICAqaWNrOworCXN0cnVjdCBjbGsgICAgICAqZmNrOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCXN0cnVjdCBtaXNjZGV2aWNlIG9tYXBfd2R0X21pc2NkZXY7CiB9OwpAQCAtMTQ2LDEzICsxNDUsOCBAQAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDEsICh1bnNpZ25lZCBsb25nICopJih3ZGV2LT5vbWFwX3dkdF91c2VycykpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQljbGtfZW5hYmxlKHdkZXYtPmFybXdkdF9jayk7CS8qIEVuYWJsZSB0aGUgY2xvY2sgKi8KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQljbGtfZW5hYmxlKHdkZXYtPm1wdV93ZHRfaWNrKTsgICAgLyogRW5hYmxlIHRoZSBpbnRlcmZhY2UgY2xvY2sgKi8KLQkJY2xrX2VuYWJsZSh3ZGV2LT5tcHVfd2R0X2Zjayk7ICAgIC8qIEVuYWJsZSB0aGUgZnVuY3Rpb25hbCBjbG9jayAqLwotCX0KKwljbGtfZW5hYmxlKHdkZXYtPmljayk7ICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJmYWNlIGNsb2NrICovCisJY2xrX2VuYWJsZSh3ZGV2LT5mY2spOyAgICAvKiBFbmFibGUgdGhlIGZ1bmN0aW9uYWwgY2xvY2sgKi8KIAogCS8qIGluaXRpYWxpemUgcHJlc2NhbGVyICovCiAJd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dBVENIRE9HX1dQUykgJiAweDAxKQpAQCAtMTgxLDEzICsxNzUsOCBAQAogCiAJb21hcF93ZHRfZGlzYWJsZSh3ZGV2KTsKIAotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJY2xrX2Rpc2FibGUod2Rldi0+YXJtd2R0X2NrKTsJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQljbGtfZGlzYWJsZSh3ZGV2LT5tcHVfd2R0X2ljayk7CS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0JCWNsa19kaXNhYmxlKHdkZXYtPm1wdV93ZHRfZmNrKTsJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQl9CisJY2xrX2Rpc2FibGUod2Rldi0+aWNrKTsKKwljbGtfZGlzYWJsZSh3ZGV2LT5mY2spOwogI2Vsc2UKIAlwcmludGsoS0VSTl9DUklUICJvbWFwX3dkdDogVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIVxuIik7CiAjZW5kaWYKQEAgLTMwMyw0NCArMjkyLDE5IEBACiAJd2Rldi0+b21hcF93ZHRfdXNlcnMgPSAwOwogCXdkZXYtPm1lbSA9IG1lbTsKIAotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQl3ZGV2LT5hcm13ZHRfY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm13ZHRfY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5hcm13ZHRfY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPmFybXdkdF9jayk7Ci0JCQl3ZGV2LT5hcm13ZHRfY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9CisJd2Rldi0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CisJaWYgKElTX0VSUih3ZGV2LT5pY2spKSB7CisJCXJldCA9IFBUUl9FUlIod2Rldi0+aWNrKTsKKwkJd2Rldi0+aWNrID0gTlVMTDsKKwkJZ290byBlcnJfY2xrOworCX0KKwl3ZGV2LT5mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKHdkZXYtPmZjaykpIHsKKwkJcmV0ID0gUFRSX0VSUih3ZGV2LT5mY2spOworCQl3ZGV2LT5mY2sgPSBOVUxMOworCQlnb3RvIGVycl9jbGs7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXdkZXYtPm1wdV93ZHRfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9pY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ljaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9pY2spOwotCQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JCXdkZXYtPm1wdV93ZHRfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9mY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ZjaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9mY2spOwotCQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JfQotCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXdkZXYtPm1wdV93ZHRfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2R0Ml9pY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ljaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9pY2spOwotCQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JCXdkZXYtPm1wdV93ZHRfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2R0Ml9mY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ZjaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9mY2spOwotCQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JfQogCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghd2Rldi0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzgwLDEyICszNDQsMTAgQEAKIAl3ZGV2LT5iYXNlID0gTlVMTDsKIAogZXJyX2NsazoKLQlpZiAod2Rldi0+YXJtd2R0X2NrKQotCQljbGtfcHV0KHdkZXYtPmFybXdkdF9jayk7Ci0JaWYgKHdkZXYtPm1wdV93ZHRfaWNrKQotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfaWNrKTsKLQlpZiAod2Rldi0+bXB1X3dkdF9mY2spCi0JCWNsa19wdXQod2Rldi0+bXB1X3dkdF9mY2spOworCWlmICh3ZGV2LT5pY2spCisJCWNsa19wdXQod2Rldi0+aWNrKTsKKwlpZiAod2Rldi0+ZmNrKQorCQljbGtfcHV0KHdkZXYtPmZjayk7CiAJa2ZyZWUod2Rldik7CiAKIGVycl9remFsbG9jOgpAQCAtNDE3LDIwICszNzksOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWlmICh3ZGV2LT5hcm13ZHRfY2spIHsKLQkJY2xrX3B1dCh3ZGV2LT5hcm13ZHRfY2spOwotCQl3ZGV2LT5hcm13ZHRfY2sgPSBOVUxMOwotCX0KLQotCWlmICh3ZGV2LT5tcHVfd2R0X2ljaykgewotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfaWNrKTsKLQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCX0KLQotCWlmICh3ZGV2LT5tcHVfd2R0X2ZjaykgewotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfZmNrKTsKLQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCX0KKwljbGtfcHV0KHdkZXYtPmljayk7CisJY2xrX3B1dCh3ZGV2LT5mY2spOwogCWlvdW5tYXAod2Rldi0+YmFzZSk7CiAKIAlrZnJlZSh3ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMKaW5kZXggNWJkNzgyZi4uZWUxY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA1ZTM3NGFhLi41NWVmZGZlIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTQyMCwxMiArMTQyMCwxNyBAQAogewogCXN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm07CiAJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGZpbGVzX3N0cnVjdCAqZGlzcGxhY2VkOwogCWludCByZXR2YWw7CiAKKwlyZXR2YWwgPSB1bnNoYXJlX2ZpbGVzKCZkaXNwbGFjZWQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0X3JldDsKKwogCXJldHZhbCA9IC1FTk9NRU07CiAJYnBybSA9IGt6YWxsb2Moc2l6ZW9mKCpicHJtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFicHJtKQotCQlnb3RvIG91dF9yZXQ7CisJCWdvdG8gb3V0X2ZpbGVzOwogCiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMTQzNiw3ICsxNDQxLDcgQEAKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CiAJaWYgKCFicHJtLT5jcmVkKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JY2hlY2tfdW5zYWZlX2V4ZWMoYnBybSwgY3VycmVudC0+ZmlsZXMpOworCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOwogCiAJZmlsZSA9IG9wZW5fZXhlYyhmaWxlbmFtZSk7CiAJcmV0dmFsID0gUFRSX0VSUihmaWxlKTsKQEAgLTE0ODcsNiArMTQ5Miw4IEBACiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKIAlmcmVlX2Jwcm0oYnBybSk7CisJaWYgKGRpc3BsYWNlZCkKKwkJcHV0X2ZpbGVzX3N0cnVjdChkaXNwbGFjZWQpOwogCXJldHVybiByZXR2YWw7CiAKIG91dDoKQEAgLTE1MDYsNiArMTUxMyw5IEBACiBvdXRfZnJlZToKIAlmcmVlX2Jwcm0oYnBybSk7CiAKK291dF9maWxlczoKKwlpZiAoZGlzcGxhY2VkKQorCQlyZXNldF9maWxlc19zdHJ1Y3QoZGlzcGxhY2VkKTsKIG91dF9yZXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBiOWYxYzE0Li5jNTEyOGZiIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMDU2LDI4ICsxMDU2LDI0IEBACiAgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIGN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCB0byBwcm90ZWN0IGFnYWluc3QKICAqICAgUFRSQUNFX0FUVEFDSAogICovCi12b2lkIGNoZWNrX3Vuc2FmZV9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKQordm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQsICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbl9mcywgbl9maWxlcywgbl9zaWdoYW5kOworCXVuc2lnbmVkIG5fZnMsIG5fc2lnaGFuZDsKIAogCWJwcm0tPnVuc2FmZSA9IHRyYWNlaG9va191bnNhZmVfZXhlYyhwKTsKIAogCW5fZnMgPSAxOwotCW5fZmlsZXMgPSAxOwogCW5fc2lnaGFuZCA9IDE7CiAJbG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAlmb3IgKHQgPSBuZXh0X3RocmVhZChwKTsgdCAhPSBwOyB0ID0gbmV4dF90aHJlYWQodCkpIHsKIAkJaWYgKHQtPmZzID09IHAtPmZzKQogCQkJbl9mcysrOwotCQlpZiAodC0+ZmlsZXMgPT0gZmlsZXMpCi0JCQluX2ZpbGVzKys7CiAJCW5fc2lnaGFuZCsrOwogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmcC0+ZnMtPmNvdW50KSA+IG5fZnMgfHwKLQkgICAgYXRvbWljX3JlYWQoJnAtPmZpbGVzLT5jb3VudCkgPiBuX2ZpbGVzIHx8CiAJICAgIGF0b21pY19yZWFkKCZwLT5zaWdoYW5kLT5jb3VudCkgPiBuX3NpZ2hhbmQpCiAJCWJwcm0tPnVuc2FmZSB8PSBMU01fVU5TQUZFX1NIQVJFOwogCkBAIC0xMzAwLDcgKzEyOTYsNyBAQAogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKIAlpZiAoIWJwcm0tPmNyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQljaGVja191bnNhZmVfZXhlYyhicHJtLCBkaXNwbGFjZWQpOworCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOwogCiAJZmlsZSA9IG9wZW5fZXhlYyhmaWxlbmFtZSk7CiAJcmV0dmFsID0gUFRSX0VSUihmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGQ4NjVjYTY2Li5jYzhlNGRlIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTUzMSw2ICs1MzEsMTIgQEAKIAkJaWYgKCFuZXcpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdGFrZSBmX2xvY2sgZmlyc3Qgc2luY2UgaXQncyBub3QgYW4gSVJRLXNhZmUKKwkgKiBsb2NrLgorCSAqLworCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAl3cml0ZV9sb2NrX2lycSgmZmFzeW5jX2xvY2spOwogCWZvciAoZnAgPSBmYXBwOyAoZmEgPSAqZnApICE9IE5VTEw7IGZwID0gJmZhLT5mYV9uZXh0KSB7CiAJCWlmIChmYS0+ZmFfZmlsZSA9PSBmaWxwKSB7CkBAIC01NTUsMTQgKzU2MSwxMiBAQAogCQlyZXN1bHQgPSAxOwogCX0KIG91dDoKLQkvKiBGaXggdXAgRkFTWU5DIGJpdCB3aGlsZSBzdGlsbCBob2xkaW5nIGZhc3luY19sb2NrICovCi0Jc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCWlmIChvbikKIAkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CiAJZWxzZQogCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7Ci0Jc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmZmFzeW5jX2xvY2spOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggZDlmZGI3Yy4uODIxZDEwZiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTE0NjUsNyArMTQ2NSw3IEBACiAJY2FzZSBTRUVLX0VORDoKIAkJcmV0dmFsID0gZnVzZV91cGRhdGVfYXR0cmlidXRlcyhpbm9kZSwgTlVMTCwgZmlsZSwgTlVMTCk7CiAJCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOworCQkJZ290byBleGl0OwogCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlicmVhazsKIAljYXNlIFNFRUtfQ1VSOgpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAKIAkJfQogCQlyZXR2YWwgPSBvZmZzZXQ7CiAJfQorZXhpdDoKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggMGQ4YWM0OS4uNTNhZjg4NSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC00Myw3ICs0Myw3IEBACiAvKgogICogZXhlYy5jCiAgKi8KLWV4dGVybiB2b2lkIGNoZWNrX3Vuc2FmZV9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IGZpbGVzX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGNoZWNrX3Vuc2FmZV9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKik7CiAKIC8qCiAgKiBuYW1lc3BhY2UuYwpkaWZmIC0tZ2l0IGEvZnMvamZzL0tjb25maWcgYi9mcy9qZnMvS2NvbmZpZwppbmRleCA5ZmY2MTlhLi41N2NlZjE5IDEwMDY0NAotLS0gYS9mcy9qZnMvS2NvbmZpZworKysgYi9mcy9qZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBKRlNfRlMKIAl0cmlzdGF0ZSAiSkZTIGZpbGVzeXN0ZW0gc3VwcG9ydCIKIAlzZWxlY3QgTkxTCisJc2VsZWN0IENSQzMyCiAJaGVscAogCSAgVGhpcyBpcyBhIHBvcnQgb2YgSUJNJ3MgSm91cm5hbGVkIEZpbGVzeXN0ZW0gLiAgTW9yZSBpbmZvcm1hdGlvbiBpcwogCSAgYXZhaWxhYmxlIGluIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dD4uCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2V4dGVudC5jIGIvZnMvamZzL2pmc19leHRlbnQuYwppbmRleCAxNjk4MDJlLi5iYmJkNWYyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2V4dGVudC5jCisrKyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKQEAgLTM2MiwxMSArMzYyLDEyIEBACiBpbnQgZXh0SGludChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgb2Zmc2V0LCB4YWRfdCAqIHhwKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpcC0+aV9zYjsKLQlzdHJ1Y3QgeGFkbGlzdCB4YWRsOwotCXN0cnVjdCBseGRsaXN0IGx4ZGw7Ci0JbHhkX3QgbHhkOworCWludCBuYnBlcnBhZ2UgPSBKRlNfU0JJKHNiKS0+bmJwZXJwYWdlOwogCXM2NCBwcmV2OwotCWludCByYywgbmJwZXJwYWdlID0gSkZTX1NCSShzYiktPm5icGVycGFnZTsKKwlpbnQgcmMgPSAwOworCXM2NCB4YWRkcjsKKwlpbnQgeGxlbjsKKwlpbnQgeGZsYWc7CiAKIAkvKiBpbml0IHRoZSBoaW50IGFzICJubyBoaW50IHByb3ZpZGVkIiAqLwogCVhBRGFkZHJlc3MoeHAsIDApOwpAQCAtMzc2LDQ2ICszNzcsMzAgQEAKIAkgKi8KIAlwcmV2ID0gKChvZmZzZXQgJiB+UE9GRlNFVCkgPj4gSkZTX1NCSShzYiktPmwyYnNpemUpIC0gbmJwZXJwYWdlOwogCi0JLyogaWYgdGhlIG9mZnNldHMgaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGZpbGUsCi0JICogbm8gaGludCBwcm92aWRlZC4KKwkvKiBpZiB0aGUgb2Zmc2V0IGlzIGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlLCBubyBoaW50IHByb3ZpZGVkLgogCSAqLwogCWlmIChwcmV2IDwgMCkKLQkJcmV0dXJuICgwKTsKKwkJZ290byBvdXQ7CiAKLQkvKiBwcmVwYXJlIHRvIGxvb2t1cCB0aGUgcHJldmlvdXMgcGFnZSdzIGV4dGVudCBpbmZvICovCi0JbHhkbC5tYXhubHhkID0gMTsKLQlseGRsLm5seGQgPSAxOwotCWx4ZGwubHhkID0gJmx4ZDsKLQlMWERvZmZzZXQoJmx4ZCwgcHJldikKLQlMWERsZW5ndGgoJmx4ZCwgbmJwZXJwYWdlKTsKKwlyYyA9IHh0TG9va3VwKGlwLCBwcmV2LCBuYnBlcnBhZ2UsICZ4ZmxhZywgJnhhZGRyLCAmeGxlbiwgMCk7CiAKLQl4YWRsLm1heG54YWQgPSAxOwotCXhhZGwubnhhZCA9IDA7Ci0JeGFkbC54YWQgPSB4cDsKKwlpZiAoKHJjID09IDApICYmIHhsZW4pIHsKKwkJaWYgKHhsZW4gIT0gbmJwZXJwYWdlKSB7CisJCQlqZnNfZXJyb3IoaXAtPmlfc2IsICJleHRIaW50OiBjb3JydXB0IHh0cmVlIik7CisJCQlyYyA9IC1FSU87CisJCX0KKwkJWEFEYWRkcmVzcyh4cCwgeGFkZHIpOworCQlYQURsZW5ndGgoeHAsIHhsZW4pOworCQkvKgorCQkgKiBvbmx5IHByZXNlcnZlIHRoZSBhYm5yIGZsYWcgd2l0aGluIHRoZSB4YWQgZmxhZ3MKKwkJICogb2YgdGhlIHJldHVybmVkIGhpbnQuCisJCSAqLworCQl4cC0+ZmxhZyAgPSB4ZmxhZyAmIFhBRF9OT1RSRUNPUkRFRDsKKwl9IGVsc2UKKwkJcmMgPSAwOwogCi0JLyogcGVyZm9ybSB0aGUgbG9va3VwICovCi0JaWYgKChyYyA9IHh0TG9va3VwTGlzdChpcCwgJmx4ZGwsICZ4YWRsLCAwKSkpCi0JCXJldHVybiAocmMpOwotCi0JLyogY2hlY2sgaWYgbm8gZXh0ZW50IGV4aXN0cyBmb3IgdGhlIHByZXZpb3VzIHBhZ2UuCi0JICogdGhpcyBpcyBwb3NzaWJsZSBmb3Igc3BhcnNlIGZpbGVzLgotCSAqLwotCWlmICh4YWRsLm54YWQgPT0gMCkgewotLy8JCWFzc2VydChJU1NQQVJTRShpcCkpOwotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qIG9ubHkgcHJlc2VydmUgdGhlIGFibnIgZmxhZyB3aXRoaW4gdGhlIHhhZCBmbGFncwotCSAqIG9mIHRoZSByZXR1cm5lZCBoaW50LgotCSAqLwotCXhwLT5mbGFnICY9IFhBRF9OT1RSRUNPUkRFRDsKLQotCWlmKHhhZGwubnhhZCAhPSAxIHx8IGxlbmd0aFhBRCh4cCkgIT0gbmJwZXJwYWdlKSB7Ci0JCWpmc19lcnJvcihpcC0+aV9zYiwgImV4dEhpbnQ6IGNvcnJ1cHQgeHRyZWUiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuICgwKTsKK291dDoKKwlyZXR1cm4gKHJjKTsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2ltYXAuYyBiL2ZzL2pmcy9qZnNfaW1hcC5jCmluZGV4IDBmOTQzODEuLjM0NjA1NzIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfaW1hcC5jCkBAIC01NywxMiArNTcsNiBAQAogI2luY2x1ZGUgImpmc19kZWJ1Zy5oIgogCiAvKgotICogX19tYXJrX2lub2RlX2RpcnR5IGV4cGVjdHMgaW5vZGVzIHRvIGJlIGhhc2hlZC4gIFNpbmNlIHdlIGRvbid0IHdhbnQKLSAqIHNwZWNpYWwgaW5vZGVzIGluIHRoZSBmaWxlc2V0IGlub2RlIHNwYWNlLCB3ZSBtYWtlIHRoZW0gYXBwZWFyIGhhc2hlZCwKLSAqIGJ1dCBkbyBub3QgcHV0IG9uIGFueSBsaXN0cy4KLSAqLwotCi0vKgogICogaW1hcCBsb2NrcwogICovCiAvKiBpYWcgZnJlZSBsaXN0IGxvY2sgKi8KQEAgLTQ5Nyw3ICs0OTEsOSBAQAogCXJlbGVhc2VfbWV0YXBhZ2UobXApOwogCiAJLyoKLQkgKiB0aGF0IHdpbGwgbG9vayBoYXNoZWQsIGJ1dCB3b24ndCBiZSBvbiBhbnkgbGlzdDsgaGxpc3RfZGVsKCkKKwkgKiBfX21hcmtfaW5vZGVfZGlydHkgZXhwZWN0cyBpbm9kZXMgdG8gYmUgaGFzaGVkLiAgU2luY2Ugd2UgZG9uJ3QKKwkgKiB3YW50IHNwZWNpYWwgaW5vZGVzIGluIHRoZSBmaWxlc2V0IGlub2RlIHNwYWNlLCB3ZSBtYWtlIHRoZW0KKwkgKiBhcHBlYXIgaGFzaGVkLCBidXQgZG8gbm90IHB1dCBvbiBhbnkgbGlzdHMuICBobGlzdF9kZWwoKQogCSAqIHdpbGwgd29yayBmaW5lIGFuZCByZXF1aXJlIG5vIGxvY2tpbmcuCiAJICovCiAJaXAtPmlfaGFzaC5wcHJldiA9ICZpcC0+aV9oYXNoLm5leHQ7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKaW5kZXggYzM1MDA1Ny4uMDdiNmM1ZCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5jCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwpAQCAtMzY5LDYgKzM2OSw3IEBACiAJdW5zaWduZWQgbG9uZyBiaW9fYnl0ZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgYmlvX29mZnNldCA9IDA7CiAJaW50IG9mZnNldDsKKwlpbnQgYmFkX2Jsb2NrcyA9IDA7CiAKIAlwYWdlX3N0YXJ0ID0gKHNlY3Rvcl90KXBhZ2UtPmluZGV4IDw8CiAJCSAgICAgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKQEAgLTM5NCw2ICszOTUsNyBAQAogCQl9CiAKIAkJY2xlYXJfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZyk7CisJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKIAkJYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ID4+IGlub2RlLT5pX2Jsa2JpdHM7CiAJCWxibG9jayA9IHBhZ2Vfc3RhcnQgKyBibG9ja19vZmZzZXQ7CiAJCWlmIChiaW8pIHsKQEAgLTQwMiw3ICs0MDQsNiBAQAogCQkJCWxlbiA9IG1pbih4bGVuLCBibG9ja3NfcGVyX21wKTsKIAkJCQl4bGVuIC09IGxlbjsKIAkJCQliaW9fYnl0ZXMgKz0gbGVuIDw8IGlub2RlLT5pX2Jsa2JpdHM7Ci0JCQkJc2V0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJLyogTm90IGNvbnRpZ3VvdXMgKi8KQEAgLTQyNCwxMiArNDI1LDE0IEBACiAJCXhsZW4gPSAoUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KSA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCQlwYmxvY2sgPSBtZXRhcGFnZV9nZXRfYmxvY2tzKGlub2RlLCBsYmxvY2ssICZ4bGVuKTsKIAkJaWYgKCFwYmxvY2spIHsKLQkJCS8qIE5lZWQgYmV0dGVyIGVycm9yIGhhbmRsaW5nICovCiAJCQlwcmludGsoS0VSTl9FUlIgIkpGUzogbWV0YXBhZ2VfZ2V0X2Jsb2NrcyBmYWlsZWRcbiIpOwotCQkJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOworCQkJLyoKKwkJCSAqIFdlIGFscmVhZHkgY2FsbGVkIGluY19pbygpLCBidXQgY2FuJ3QgY2FuY2VsIGl0CisJCQkgKiB3aXRoIGRlY19pbygpIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCB0aGUgcGFnZQorCQkJICovCisJCQliYWRfYmxvY2tzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQlzZXRfYml0KE1FVEFfaW8sICZtcC0+ZmxhZyk7CiAJCWxlbiA9IG1pbih4bGVuLCAoaW50KUpGU19TQkkoaW5vZGUtPmlfc2IpLT5uYnBlcnBhZ2UpOwogCiAJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgMSk7CkBAIC00NTksNiArNDYyLDkgQEAKIAogCXVubG9ja19wYWdlKHBhZ2UpOwogCisJaWYgKGJhZF9ibG9ja3MpCisJCWdvdG8gZXJyX291dDsKKwogCWlmIChucl91bmRlcndheSA9PSAwKQogCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAKQEAgLTQ3NCw3ICs0ODAsOSBAQAogCWJpb19wdXQoYmlvKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlkZWNfaW8ocGFnZSwgbGFzdF93cml0ZV9jb21wbGV0ZSk7Ci0KK2Vycl9vdXQ6CisJd2hpbGUgKGJhZF9ibG9ja3MtLSkKKwkJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOwogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R5cGVzLmggYi9mcy9qZnMvamZzX3R5cGVzLmgKaW5kZXggNjQ5Zjk4MS4uNDNlYTM3MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eXBlcy5oCisrKyBiL2ZzL2pmcy9qZnNfdHlwZXMuaApAQCAtNTgsMzUgKzU4LDYgQEAKICNkZWZpbmUJT05FUwkJMHhmZmZmZmZmZnUJLyogYWxsIGJpdCBvbgkJKi8KIAogLyoKLSAqCWxvZ2ljYWwgeGQgKGx4ZCkKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxlbjoyNDsKLQl1bnNpZ25lZCBvZmYxOjg7Ci0JdTMyIG9mZjI7Ci19IGx4ZF90OwotCi0vKiBseGRfdCBmaWVsZCBjb25zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUJTFhEbGVuZ3RoKGx4ZCwgbGVuZ3RoMzIpCSggKGx4ZCktPmxlbiA9IGxlbmd0aDMyICkKLSNkZWZpbmUJTFhEb2Zmc2V0KGx4ZCwgb2Zmc2V0NjQpXAote1wKLQkobHhkKS0+b2ZmMSA9ICgoczY0KW9mZnNldDY0KSA+PiAzMjtcCi0JKGx4ZCktPm9mZjIgPSAob2Zmc2V0NjQpICYgMHhmZmZmZmZmZjtcCi19Ci0KLS8qIGx4ZF90IGZpZWxkIGV4dHJhY3Rpb24gKi8KLSNkZWZpbmUJbGVuZ3RoTFhEKGx4ZCkJKCAobHhkKS0+bGVuICkKLSNkZWZpbmUJb2Zmc2V0TFhEKGx4ZClcCi0JKCAoKHM2NCkoKGx4ZCktPm9mZjEpKSA8PCAzMiB8IChseGQpLT5vZmYyICkKLQotLyogbHhkIGxpc3QgKi8KLXN0cnVjdCBseGRsaXN0IHsKLQlzMTYgbWF4bmx4ZDsKLQlzMTYgbmx4ZDsKLQlseGRfdCAqbHhkOwotfTsKLQotLyoKICAqCXBoeXNpY2FsIHhkIChweGQpCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfeHRyZWUuYyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwppbmRleCBhMjdlMjZjLi5kNjU0YTY0IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmMKKysrIGIvZnMvamZzL2pmc194dHJlZS5jCkBAIC0xNjQsMTEgKzE2NCw4IEBACiAJCS8qIGlzIGxvb2t1cCBvZmZzZXQgYmV5b25kIGVvZiA/ICovCiAJCXNpemUgPSAoKHU2NCkgaXAtPmlfc2l6ZSArIChKRlNfU0JJKGlwLT5pX3NiKS0+YnNpemUgLSAxKSkgPj4KIAkJICAgIEpGU19TQkkoaXAtPmlfc2IpLT5sMmJzaXplOwotCQlpZiAobHN0YXJ0ID49IHNpemUpIHsKLQkJCWpmc19lcnIoInh0TG9va3VwOiBsc3RhcnQgKDB4JWx4KSA+PSBzaXplICgweCVseCkiLAotCQkJCSh1bG9uZykgbHN0YXJ0LCAodWxvbmcpIHNpemUpOworCQlpZiAobHN0YXJ0ID49IHNpemUpCiAJCQlyZXR1cm4gMDsKLQkJfQogCX0KIAogCS8qCkBAIC0yMjAsMjY0ICsyMTcsNiBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKgotICoJeHRMb29rdXBMaXN0KCkKLSAqCi0gKiBmdW5jdGlvbjogbWFwIGEgc2luZ2xlIGxvZ2ljYWwgZXh0ZW50IGludG8gYSBsaXN0IG9mIHBoeXNpY2FsIGV4dGVudDsKLSAqCi0gKiBwYXJhbWV0ZXI6Ci0gKglzdHJ1Y3QgaW5vZGUJKmlwLAotICoJc3RydWN0IGx4ZGxpc3QJKmx4ZGxpc3QsCWx4ZCBsaXN0IChpbikKLSAqCXN0cnVjdCB4YWRsaXN0CSp4YWRsaXN0LAl4YWQgbGlzdCAoaW4vb3V0KQotICoJaW50CQlmbGFnKQotICoKLSAqIGNvdmVyYWdlIG9mIGx4ZCBieSB4YWQgdW5kZXIgYXNzdW1wdGlvbiBvZgotICogLiBseGQncyBhcmUgb3JkZXJlZCBhbmQgZGlzam9pbnQuCi0gKiAuIHhhZCdzIGFyZSBvcmRlcmVkIGFuZCBkaXNqb2ludC4KLSAqCi0gKiByZXR1cm46Ci0gKgkwOglzdWNjZXNzCi0gKgotICogbm90ZTogYSBwYWdlIGJlaW5nIHdyaXR0ZW4gKGV2ZW4gYSBzaW5nbGUgYnl0ZSkgaXMgYmFja2VkIGZ1bGx5LAotICoJZXhjZXB0IHRoZSBsYXN0IHBhZ2Ugd2hpY2ggaXMgb25seSBiYWNrZWQgd2l0aCBibG9ja3MKLSAqCXJlcXVpcmVkIHRvIGNvdmVyIHRoZSBsYXN0IGJ5dGU7Ci0gKgl0aGUgZXh0ZW50IGJhY2tpbmcgYSBwYWdlIGlzIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gYW4geGFkOwotICovCi1pbnQgeHRMb29rdXBMaXN0KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBseGRsaXN0ICogbHhkbGlzdCwKLQkJIHN0cnVjdCB4YWRsaXN0ICogeGFkbGlzdCwgaW50IGZsYWcpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgYnRzdGFjayBidHN0YWNrOwotCWludCBjbXA7Ci0JczY0IGJuOwotCXN0cnVjdCBtZXRhcGFnZSAqbXA7Ci0JeHRwYWdlX3QgKnA7Ci0JaW50IGluZGV4OwotCWx4ZF90ICpseGQ7Ci0JeGFkX3QgKnhhZCwgKnB4ZDsKLQlzNjQgc2l6ZSwgbHN0YXJ0LCBsZW5kLCB4c3RhcnQsIHhlbmQsIHBzdGFydDsKLQlzNjQgbGxlbiwgeGxlbiwgcGxlbjsKLQlzNjQgeGFkZHIsIHBhZGRyOwotCWludCBubHhkLCBucHhkLCBtYXhucHhkOwotCi0JbnB4ZCA9IHhhZGxpc3QtPm54YWQgPSAwOwotCW1heG5weGQgPSB4YWRsaXN0LT5tYXhueGFkOwotCXB4ZCA9IHhhZGxpc3QtPnhhZDsKLQotCW5seGQgPSBseGRsaXN0LT5ubHhkOwotCWx4ZCA9IGx4ZGxpc3QtPmx4ZDsKLQotCWxzdGFydCA9IG9mZnNldExYRChseGQpOwotCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQlsZW5kID0gbHN0YXJ0ICsgbGxlbjsKLQotCXNpemUgPSAoaXAtPmlfc2l6ZSArIChKRlNfU0JJKGlwLT5pX3NiKS0+YnNpemUgLSAxKSkgPj4KLQkgICAgSkZTX1NCSShpcC0+aV9zYiktPmwyYnNpemU7Ci0KLQkvKgotCSAqIHNlYXJjaCBmb3IgdGhlIHhhZCBlbnRyeSBjb3ZlcmluZyB0aGUgbG9naWNhbCBleHRlbnQKLQkgKi8KLSAgICAgIHNlYXJjaDoKLQlpZiAobHN0YXJ0ID49IHNpemUpCi0JCXJldHVybiAwOwotCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBsc3RhcnQsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKSkpCi0JCXJldHVybiByYzsKLQotCS8qCi0JICoJY29tcHV0ZSB0aGUgcGh5c2ljYWwgZXh0ZW50IGNvdmVyaW5nIGxvZ2ljYWwgZXh0ZW50Ci0JICoKLQkgKiBOLkIuIHNlYXJjaCBtYXkgaGF2ZSBmYWlsZWQgKGUuZy4sIGhvbGUgaW4gc3BhcnNlIGZpbGUpLAotCSAqIGFuZCByZXR1cm5lZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgZW50cnkuCi0JICovCi0vL21hcDoKLQkvKiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0ICovCi0JWFRfR0VUU0VBUkNIKGlwLCBidHN0YWNrLnRvcCwgYm4sIG1wLCBwLCBpbmRleCk7Ci0KLQkvKiBpcyB4YWQgb24gdGhlIG5leHQgc2libGluZyBwYWdlID8gKi8KLQlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkpIHsKLQkJaWYgKHAtPmhlYWRlci5mbGFnICYgQlRfUk9PVCkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCWlmICgoYm4gPSBsZTY0X3RvX2NwdShwLT5oZWFkZXIubmV4dCkpID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQotCQlYVF9QVVRQQUdFKG1wKTsKLQotCQkvKiBnZXQgbmV4dCBzaWJsaW5nIHBhZ2UgKi8KLQkJWFRfR0VUUEFHRShpcCwgYm4sIG1wLCBQU0laRSwgcCwgcmMpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJaW5kZXggPSBYVEVOVFJZU1RBUlQ7Ci0JfQotCi0JeGFkID0gJnAtPnhhZFtpbmRleF07Ci0KLQkvKgotCSAqIGlzIGx4ZCBjb3ZlcmVkIGJ5IHhhZCA/Ci0JICovCi0gICAgICBjb21wYXJlOgotCXhzdGFydCA9IG9mZnNldFhBRCh4YWQpOwotCXhsZW4gPSBsZW5ndGhYQUQoeGFkKTsKLQl4ZW5kID0geHN0YXJ0ICsgeGxlbjsKLQl4YWRkciA9IGFkZHJlc3NYQUQoeGFkKTsKLQotICAgICAgY29tcGFyZTE6Ci0JaWYgKHhzdGFydCA8IGxzdGFydCkKLQkJZ290byBjb21wYXJlMjsKLQotCS8qIChsc3RhcnQgPD0geHN0YXJ0KSAqLwotCi0JLyogbHhkIGlzIE5PVCBjb3ZlcmVkIGJ5IHhhZCAqLwotCWlmIChsZW5kIDw9IHhzdGFydCkgewotCQkvKgotCQkgKiBnZXQgbmV4dCBseGQKLQkJICovCi0JCWlmICgtLW5seGQgPT0gMCkKLQkJCWdvdG8gbWFwZW5kOwotCQlseGQrKzsKLQotCQlsc3RhcnQgPSBvZmZzZXRMWEQobHhkKTsKLQkJbGxlbiA9IGxlbmd0aExYRChseGQpOwotCQlsZW5kID0gbHN0YXJ0ICsgbGxlbjsKLQkJaWYgKGxzdGFydCA+PSBzaXplKQotCQkJZ290byBtYXBlbmQ7Ci0KLQkJLyogY29tcGFyZSB3aXRoIHRoZSBjdXJyZW50IHhhZCAqLwotCQlnb3RvIGNvbXBhcmUxOwotCX0KLQkvKiBseGQgaXMgY292ZXJlZCBieSB4YWQgKi8KLQllbHNlIHsJCQkvKiAoeHN0YXJ0IDwgbGVuZCkgKi8KLQotCQkvKiBpbml0aWFsaXplIG5ldyBweGQgKi8KLQkJcHN0YXJ0ID0geHN0YXJ0OwotCQlwbGVuID0gbWluKGxlbmQgLSB4c3RhcnQsIHhsZW4pOwotCQlwYWRkciA9IHhhZGRyOwotCi0JCWdvdG8gY292ZXI7Ci0JfQotCi0JLyogKHhzdGFydCA8IGxzdGFydCkgKi8KLSAgICAgIGNvbXBhcmUyOgotCS8qIGx4ZCBpcyBjb3ZlcmVkIGJ5IHhhZCAqLwotCWlmIChsc3RhcnQgPCB4ZW5kKSB7Ci0JCS8qIGluaXRpYWxpemUgbmV3IHB4ZCAqLwotCQlwc3RhcnQgPSBsc3RhcnQ7Ci0JCXBsZW4gPSBtaW4oeGVuZCAtIGxzdGFydCwgbGxlbik7Ci0JCXBhZGRyID0geGFkZHIgKyAobHN0YXJ0IC0geHN0YXJ0KTsKLQotCQlnb3RvIGNvdmVyOwotCX0KLQkvKiBseGQgaXMgTk9UIGNvdmVyZWQgYnkgeGFkICovCi0JZWxzZSB7CQkJLyogKHhlbmQgPD0gbHN0YXJ0KSAqLwotCi0JCS8qCi0JCSAqIGdldCBuZXh0IHhhZAotCQkgKgotCQkgKiBsaW5lYXIgc2VhcmNoIG5leHQgeGFkIGNvdmVyaW5nIGx4ZCBvbgotCQkgKiB0aGUgY3VycmVudCB4YWQgcGFnZSwgYW5kIHRoZW4gdHJlZSBzZWFyY2gKLQkJICovCi0JCWlmIChpbmRleCA9PSBsZTE2X3RvX2NwdShwLT5oZWFkZXIubmV4dGluZGV4KSAtIDEpIHsKLQkJCWlmIChwLT5oZWFkZXIuZmxhZyAmIEJUX1JPT1QpCi0JCQkJZ290byBtYXBlbmQ7Ci0KLQkJCVhUX1BVVFBBR0UobXApOwotCQkJZ290byBzZWFyY2g7Ci0JCX0gZWxzZSB7Ci0JCQlpbmRleCsrOwotCQkJeGFkKys7Ci0KLQkJCS8qIGNvbXBhcmUgd2l0aCBuZXcgeGFkICovCi0JCQlnb3RvIGNvbXBhcmU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIGx4ZCBpcyBjb3ZlcmVkIGJ5IHhhZCBhbmQgYSBuZXcgcHhkIGhhcyBiZWVuIGluaXRpYWxpemVkCi0JICogKGxzdGFydCA8PSB4c3RhcnQgPCBsZW5kKSBvciAoeHN0YXJ0IDwgbHN0YXJ0IDwgeGVuZCkKLQkgKi8KLSAgICAgIGNvdmVyOgotCS8qIGZpbmFsaXplIHB4ZCBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbnQgeGFkICovCi0JWFRfUFVURU5UUlkocHhkLCB4YWQtPmZsYWcsIHBzdGFydCwgcGxlbiwgcGFkZHIpOwotCi0JaWYgKCsrbnB4ZCA+PSBtYXhucHhkKQotCQlnb3RvIG1hcGVuZDsKLQlweGQrKzsKLQotCS8qCi0JICogbHhkIGlzIGZ1bGx5IGNvdmVyZWQgYnkgeGFkCi0JICovCi0JaWYgKGxlbmQgPD0geGVuZCkgewotCQkvKgotCQkgKiBnZXQgbmV4dCBseGQKLQkJICovCi0JCWlmICgtLW5seGQgPT0gMCkKLQkJCWdvdG8gbWFwZW5kOwotCQlseGQrKzsKLQotCQlsc3RhcnQgPSBvZmZzZXRMWEQobHhkKTsKLQkJbGxlbiA9IGxlbmd0aExYRChseGQpOwotCQlsZW5kID0gbHN0YXJ0ICsgbGxlbjsKLQkJaWYgKGxzdGFydCA+PSBzaXplKQotCQkJZ290byBtYXBlbmQ7Ci0KLQkJLyoKLQkJICogdGVzdCBmb3Igb2xkIHhhZCBjb3ZlcmluZyBuZXcgbHhkCi0JCSAqIChvbGQgeHN0YXJ0IDwgbmV3IGxzdGFydCkKLQkJICovCi0JCWdvdG8gY29tcGFyZTI7Ci0JfQotCS8qCi0JICogbHhkIGlzIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHhhZAotCSAqLwotCWVsc2UgewkJCS8qICh4ZW5kIDwgbGVuZCkgKi8KLQotCQkvKgotCQkgKiBnZXQgbmV4dCB4YWQKLQkJICoKLQkJICogbGluZWFyIHNlYXJjaCBuZXh0IHhhZCBjb3ZlcmluZyBseGQgb24KLQkJICogdGhlIGN1cnJlbnQgeGFkIHBhZ2UsIGFuZCB0aGVuIG5leHQgeGFkIHBhZ2Ugc2VhcmNoCi0JCSAqLwotCQlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgLSAxKSB7Ci0JCQlpZiAocC0+aGVhZGVyLmZsYWcgJiBCVF9ST09UKQotCQkJCWdvdG8gbWFwZW5kOwotCi0JCQlpZiAoKGJuID0gbGU2NF90b19jcHUocC0+aGVhZGVyLm5leHQpKSA9PSAwKQotCQkJCWdvdG8gbWFwZW5kOwotCi0JCQlYVF9QVVRQQUdFKG1wKTsKLQotCQkJLyogZ2V0IG5leHQgc2libGluZyBwYWdlICovCi0JCQlYVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQlpbmRleCA9IFhURU5UUllTVEFSVDsKLQkJCXhhZCA9ICZwLT54YWRbaW5kZXhdOwotCQl9IGVsc2UgewotCQkJaW5kZXgrKzsKLQkJCXhhZCsrOwotCQl9Ci0KLQkJLyoKLQkJICogdGVzdCBmb3IgbmV3IHhhZCBjb3ZlcmluZyBvbGQgbHhkCi0JCSAqIChvbGQgbHN0YXJ0IDwgbmV3IHhzdGFydCkKLQkJICovCi0JCWdvdG8gY29tcGFyZTsKLQl9Ci0KLSAgICAgIG1hcGVuZDoKLQl4YWRsaXN0LT5ueGFkID0gbnB4ZDsKLQotLy9vdXQ6Ci0JWFRfUFVUUEFHRShtcCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQogLyoKICAqCXh0U2VhcmNoKCkKICAqCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmggYi9mcy9qZnMvamZzX3h0cmVlLmgKaW5kZXggNzA4MTVjOGEzLi4wOGMwYzc0IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmgKKysrIGIvZnMvamZzL2pmc194dHJlZS5oCkBAIC0xMTAsOCArMTEwLDYgQEAKICAqLwogZXh0ZXJuIGludCB4dExvb2t1cChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgbHN0YXJ0LCBzNjQgbGxlbiwKIAkJICAgIGludCAqcGZsYWcsIHM2NCAqIHBhZGRyLCBpbnQgKnBsZW4sIGludCBmbGFnKTsKLWV4dGVybiBpbnQgeHRMb29rdXBMaXN0KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBseGRsaXN0ICogbHhkbGlzdCwKLQkJCXN0cnVjdCB4YWRsaXN0ICogeGFkbGlzdCwgaW50IGZsYWcpOwogZXh0ZXJuIHZvaWQgeHRJbml0Um9vdCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXApOwogZXh0ZXJuIGludCB4dEluc2VydCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsCiAJCSAgICBpbnQgeGZsYWcsIHM2NCB4b2ZmLCBpbnQgeGxlbiwgczY0ICogeGFkZHJwLCBpbnQgZmxhZyk7CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IGIzN2QxZjcuLjZmMjFhZGYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCkBAIC0xNjgsNiArMTY5LDkgQEAKIAlidWYtPmZfZmlsZXMgPSBtYXhpbm9kZXM7CiAJYnVmLT5mX2ZmcmVlID0gbWF4aW5vZGVzIC0gKGF0b21pY19yZWFkKCZpbWFwLT5pbV9udW1pbm9zKSAtCiAJCQkJICAgIGF0b21pY19yZWFkKCZpbWFwLT5pbV9udW1mcmVlKSk7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMiljcmMzMl9sZSgwLCBzYmktPnV1aWQsIHNpemVvZihzYmktPnV1aWQpLzIpOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpY3JjMzJfbGUoMCwgc2JpLT51dWlkICsgc2l6ZW9mKHNiaS0+dXVpZCkvMiwKKwkJCQkJc2l6ZW9mKHNiaS0+dXVpZCkvMik7CiAKIAlidWYtPmZfbmFtZWxlbiA9IEpGU19OQU1FX01BWDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggYWVmNmQ1NS4uZTBhZmQzMiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTE0NiwxNSArMTQ2LDIyIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3RydWN0IGZzX3N0cnVjdCAqZ2V0X2ZzX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgaW50IGdldF9mc19wYXRoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHBhdGggKnBhdGgsIGJvb2wgcm9vdCkKIHsKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlpbnQgcmVzdWx0ID0gLUVOT0VOVDsKKwogCXRhc2tfbG9jayh0YXNrKTsKIAlmcyA9IHRhc2stPmZzOwotCWlmKGZzKQotCQlhdG9taWNfaW5jKCZmcy0+Y291bnQpOworCWlmIChmcykgeworCQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKKwkJKnBhdGggPSByb290ID8gZnMtPnJvb3QgOiBmcy0+cHdkOworCQlwYXRoX2dldChwYXRoKTsKKwkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKwkJcmVzdWx0ID0gMDsKKwl9CiAJdGFza191bmxvY2sodGFzayk7Ci0JcmV0dXJuIGZzOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X25yX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCkBAIC0xNzIsNDIgKzE3OSwyNCBAQAogc3RhdGljIGludCBwcm9jX2N3ZF9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwYXRoKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gTlVMTDsKIAlpbnQgcmVzdWx0ID0gLUVOT0VOVDsKIAogCWlmICh0YXNrKSB7Ci0JCWZzID0gZ2V0X2ZzX3N0cnVjdCh0YXNrKTsKKwkJcmVzdWx0ID0gZ2V0X2ZzX3BhdGgodGFzaywgcGF0aCwgMCk7CiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAl9Ci0JaWYgKGZzKSB7Ci0JCXJlYWRfbG9jaygmZnMtPmxvY2spOwotCQkqcGF0aCA9IGZzLT5wd2Q7Ci0JCXBhdGhfZ2V0KCZmcy0+cHdkKTsKLQkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKLQkJcmVzdWx0ID0gMDsKLQkJcHV0X2ZzX3N0cnVjdChmcyk7Ci0JfQogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY19yb290X2xpbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBOVUxMOwogCWludCByZXN1bHQgPSAtRU5PRU5UOwogCiAJaWYgKHRhc2spIHsKLQkJZnMgPSBnZXRfZnNfc3RydWN0KHRhc2spOworCQlyZXN1bHQgPSBnZXRfZnNfcGF0aCh0YXNrLCBwYXRoLCAxKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KLQlpZiAoZnMpIHsKLQkJcmVhZF9sb2NrKCZmcy0+bG9jayk7Ci0JCSpwYXRoID0gZnMtPnJvb3Q7Ci0JCXBhdGhfZ2V0KCZmcy0+cm9vdCk7Ci0JCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7Ci0JCXJlc3VsdCA9IDA7Ci0JCXB1dF9mc19zdHJ1Y3QoZnMpOwotCX0KIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC01OTYsNyArNTg1LDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAlzdHJ1Y3QgbnNwcm94eSAqbnNwOwogCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyA9IE5VTEw7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBOVUxMOwogCXN0cnVjdCBwYXRoIHJvb3Q7CiAJc3RydWN0IHByb2NfbW91bnRzICpwOwogCWludCByZXQgPSAtRUlOVkFMOwpAQCAtNjEwLDIyICs1OTgsMTYgQEAKIAkJCQlnZXRfbW50X25zKG5zKTsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJaWYgKG5zKQotCQkJZnMgPSBnZXRfZnNfc3RydWN0KHRhc2spOworCQlpZiAobnMgJiYgZ2V0X2ZzX3BhdGgodGFzaywgJnJvb3QsIDEpID09IDApCisJCQlyZXQgPSAwOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJfQogCiAJaWYgKCFucykKIAkJZ290byBlcnI7Ci0JaWYgKCFmcykKKwlpZiAocmV0KQogCQlnb3RvIGVycl9wdXRfbnM7CiAKLQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKLQlyb290ID0gZnMtPnJvb3Q7Ci0JcGF0aF9nZXQoJnJvb3QpOwotCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7Ci0JcHV0X2ZzX3N0cnVjdChmcyk7Ci0KIAlyZXQgPSAtRU5PTUVNOwogCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19tb3VudHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9NYWtlZmlsZSBiL2ZzL3JlaXNlcmZzL01ha2VmaWxlCmluZGV4IDBlYjdhYzAuLjdjNWFiNjMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL01ha2VmaWxlCisrKyBiL2ZzL3JlaXNlcmZzL01ha2VmaWxlCkBAIC03LDEwICs3LDEwIEBACiByZWlzZXJmcy1vYmpzIDo9IGJpdG1hcC5vIGRvX2JhbGFuLm8gbmFtZWkubyBpbm9kZS5vIGZpbGUubyBkaXIubyBmaXhfbm9kZS5vIFwKIAkJIHN1cGVyLm8gcHJpbnRzLm8gb2JqZWN0aWQubyBsYmFsYW5jZS5vIGliYWxhbmNlLm8gc3RyZWUubyBcCiAJCSBoYXNoZXMubyB0YWlsX2NvbnZlcnNpb24ubyBqb3VybmFsLm8gcmVzaXplLm8gXAotCQkgaXRlbV9vcHMubyBpb2N0bC5vIHByb2Nmcy5vCisJCSBpdGVtX29wcy5vIGlvY3RsLm8gcHJvY2ZzLm8geGF0dHIubwogCiBpZmVxICgkKENPTkZJR19SRUlTRVJGU19GU19YQVRUUikseSkKLXJlaXNlcmZzLW9ianMgKz0geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vCityZWlzZXJmcy1vYmpzICs9IHhhdHRyX3VzZXIubyB4YXR0cl90cnVzdGVkLm8KIGVuZGlmCiAKIGlmZXEgKCQoQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZKSx5KQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvUkVBRE1FIGIvZnMvcmVpc2VyZnMvUkVBRE1FCmluZGV4IDkwZTE2NzAuLjE0ZThjOWQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL1JFQURNRQorKysgYi9mcy9yZWlzZXJmcy9SRUFETUUKQEAgLTEsNCArMSw0IEBACi1bTElDRU5TSU5HXSAKK1tMSUNFTlNJTkddCiAKIFJlaXNlckZTIGlzIGhlcmVieSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwKIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTMxLDcgKzMxLDcgQEAKIGl0IHdyb25nbHksIGFuZCBSaWNoYXJkIFN0YWxsbWFuIGFncmVlcyB3aXRoIG1lLCB3aGVuIGNhcmVmdWxseSByZWFkCiB5b3UgY2FuIHNlZSB0aGF0IHRob3NlIHJlc3RyaWN0aW9ucyBvbiBhZGRpdGlvbmFsIHRlcm1zIGRvIG5vdCBhcHBseQogdG8gdGhlIG93bmVyIG9mIHRoZSBjb3B5cmlnaHQsIGFuZCBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHNoYWxsCi1nb3Zlcm4gZm9yIHRoaXMgbGljZW5zZS4gIAorZ292ZXJuIGZvciB0aGlzIGxpY2Vuc2UuCiAKIEZpbmFsbHksIG5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIGFsbG93IHlvdSB0bwogZmFpbCB0byBmYWlybHkgY3JlZGl0IG1lLCBvciB0byByZW1vdmUgbXkgY3JlZGl0cywgd2l0aG91dCBteQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvYml0bWFwLmMgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwppbmRleCBmMzJkMTQyLi5lNzE2MTYxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9iaXRtYXAuYworKysgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwpAQCAtNDAsOCArNDAsOCBAQAogCiAjZGVmaW5lIFNFVF9PUFRJT04ob3B0bmFtZSkgXAogICAgZG8geyBcCi0gICAgICAgIHJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzOiBvcHRpb24gXCIlc1wiIGlzIHNldCIsICNvcHRuYW1lKTsgXAotICAgICAgICBzZXRfYml0KF9BTExPQ18gIyMgb3B0bmFtZSAsICZTQl9BTExPQ19PUFRTKHMpKTsgXAorCXJlaXNlcmZzX2luZm8ocywgImJsb2NrIGFsbG9jYXRvciBvcHRpb24gXCIlc1wiIGlzIHNldCIsICNvcHRuYW1lKTsgXAorCXNldF9iaXQoX0FMTE9DXyAjIyBvcHRuYW1lICwgJlNCX0FMTE9DX09QVFMocykpOyBcCiAgICAgfSB3aGlsZSgwKQogI2RlZmluZSBURVNUX09QVElPTihvcHRuYW1lLCBzKSBcCiAgICAgdGVzdF9iaXQoX0FMTE9DXyAjIyBvcHRuYW1lICwgJlNCX0FMTE9DX09QVFMocykpCkBAIC02NCw5ICs2NCw5IEBACiAJdW5zaWduZWQgaW50IGJtYXBfY291bnQgPSByZWlzZXJmc19ibWFwX2NvdW50KHMpOwogCiAJaWYgKGJsb2NrID09IDAgfHwgYmxvY2sgPj0gU0JfQkxPQ0tfQ09VTlQocykpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAidnMtNDAxMDogaXNfcmV1c2FibGU6IGJsb2NrIG51bWJlciBpcyBvdXQgb2YgcmFuZ2UgJWx1ICgldSkiLAotCQkJCSBibG9jaywgU0JfQkxPQ0tfQ09VTlQocykpOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDAxMCIsCisJCQkgICAgICAgImJsb2NrIG51bWJlciBpcyBvdXQgb2YgcmFuZ2UgJWx1ICgldSkiLAorCQkJICAgICAgIGJsb2NrLCBTQl9CTE9DS19DT1VOVChzKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzksMzEgKzc5LDMwIEBACiAJCWJfYmxvY2tucl90IGJtYXAxID0gUkVJU0VSRlNfU0IocyktPnNfc2JoLT5iX2Jsb2NrbnIgKyAxOwogCQlpZiAoYmxvY2sgPj0gYm1hcDEgJiYKIAkJICAgIGJsb2NrIDw9IGJtYXAxICsgYm1hcF9jb3VudCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnM6IDQwMTk6IGlzX3JldXNhYmxlOiAiCi0JCQkJCSAiYml0bWFwIGJsb2NrICVsdSgldSkgY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKLQkJCQkJIGJsb2NrLCBibWFwX2NvdW50KTsKKwkJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDE5IiwgImJpdG1hcCBibG9jayAlbHUoJXUpICIKKwkJCQkgICAgICAgImNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCisJCQkJICAgICAgIGJsb2NrLCBibWFwX2NvdW50KTsKIAkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKG9mZnNldCA9PSAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2czogNDAyMDogaXNfcmV1c2FibGU6ICIKLQkJCQkJICJiaXRtYXAgYmxvY2sgJWx1KCV1KSBjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAotCQkJCQkgYmxvY2ssIGJtYXBfY291bnQpOworCQkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMjAiLCAiYml0bWFwIGJsb2NrICVsdSgldSkgIgorCQkJCSAgICAgICAiY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKKwkJCQkgICAgICAgYmxvY2ssIGJtYXBfY291bnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKIAlpZiAoYm1hcCA+PSBibWFwX2NvdW50KSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwMzA6IGlzX3JldXNhYmxlOiB0aGVyZSBpcyBubyBzbyBtYW55IGJpdG1hcCBibG9ja3M6ICIKLQkJCQkgImJsb2NrPSVsdSwgYml0bWFwX25yPSV1IiwgYmxvY2ssIGJtYXApOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDAzMCIsICJiaXRtYXAgZm9yIHJlcXVlc3RlZCBibG9jayAiCisJCQkgICAgICAgImlzIG91dCBvZiByYW5nZTogYmxvY2s9JWx1LCBiaXRtYXBfbnI9JXUiLAorCQkJICAgICAgIGJsb2NrLCBibWFwKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGJpdF92YWx1ZSA9PSAwICYmIGJsb2NrID09IFNCX1JPT1RfQkxPQ0socykpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAidnMtNDA1MDogaXNfcmV1c2FibGU6IHRoaXMgaXMgcm9vdCBibG9jayAoJXUpLCAiCi0JCQkJICJpdCBtdXN0IGJlIGJ1c3kiLCBTQl9ST09UX0JMT0NLKHMpKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwNTAiLCAidGhpcyBpcyByb290IGJsb2NrICgldSksICIKKwkJCSAgICAgICAiaXQgbXVzdCBiZSBidXN5IiwgU0JfUk9PVF9CTE9DSyhzKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTU0LDggKzE1Myw4IEBACiAvKiAtIEkgbWVhbiBgYSB3aW5kb3cgb2YgemVybyBiaXRzJyBhcyBpbiBkZXNjcmlwdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIC0gWmFtLiAqLwogCiAJaWYgKCFiaSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJOVUxMIGJpdG1hcCBpbmZvIHBvaW50ZXIgZm9yIGJpdG1hcCAlZCIsCi0JCQkJIGJtYXBfbik7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJqZG0tNDA1NSIsICJOVUxMIGJpdG1hcCBpbmZvIHBvaW50ZXIgIgorCQkJICAgICAgICJmb3IgYml0bWFwICVkIiwgYm1hcF9uKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MDAsMTEgKzM5OSw4IEBACiAJZ2V0X2JpdF9hZGRyZXNzKHMsIGJsb2NrLCAmbnIsICZvZmZzZXQpOwogCiAJaWYgKG5yID49IHJlaXNlcmZzX2JtYXBfY291bnQocykpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtNDA3NTogcmVpc2VyZnNfZnJlZV9ibG9jazogIgotCQkJCSAiYmxvY2sgJWx1IGlzIG91dCBvZiByYW5nZSBvbiAlcyAiCi0JCQkJICIobnI9JXUsbWF4PSV1KSIsIGJsb2NrLAotCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgbnIsCi0JCQkJIHJlaXNlcmZzX2JtYXBfY291bnQocykpOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDA3NSIsICJibG9jayAlbHUgaXMgb3V0IG9mIHJhbmdlIiwKKwkJCSAgICAgICBibG9jayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQxNiw5ICs0MTIsOCBAQAogCiAJLyogY2xlYXIgYml0IGZvciB0aGUgZ2l2ZW4gYmxvY2sgaW4gYml0IG1hcCAqLwogCWlmICghcmVpc2VyZnNfdGVzdF9hbmRfY2xlYXJfbGVfYml0KG9mZnNldCwgYm1iaC0+Yl9kYXRhKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy00MDgwOiByZWlzZXJmc19mcmVlX2Jsb2NrOiAiCi0JCQkJICJmcmVlX2Jsb2NrICglczolbHUpW2RldjpibG9ja25yXTogYml0IGFscmVhZHkgY2xlYXJlZCIsCi0JCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBibG9jayk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDgwIiwKKwkJCSAgICAgICAiYmxvY2sgJWx1OiBiaXQgYWxyZWFkeSBjbGVhcmVkIiwgYmxvY2spOwogCX0KIAlhcGJpW25yXS5mcmVlX2NvdW50Kys7CiAJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBzLCBibWJoKTsKQEAgLTQ0NSw3ICs0NDAsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoYmxvY2sgPiBzYl9ibG9ja19jb3VudChSRUlTRVJGU19TQihzKS0+c19ycykpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJiaXRtYXAtNDA3MiIsCisJCXJlaXNlcmZzX2Vycm9yKHRoLT50X3N1cGVyLCAiYml0bWFwLTQwNzIiLAogCQkJICAgICAgICJUcnlpbmcgdG8gZnJlZSBibG9jayBvdXRzaWRlIGZpbGUgc3lzdGVtICIKIAkJCSAgICAgICAiYm91bmRhcmllcyAoJWx1ID4gJWx1KSIsCiAJCQkgICAgICAgYmxvY2ssIHNiX2Jsb2NrX2NvdW50KFJFSVNFUkZTX1NCKHMpLT5zX3JzKSk7CkBAIC00NzcsOSArNDcyLDggQEAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlpZiAoZWktPmlfcHJlYWxsb2NfY291bnQgPCAwKQotCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCSAiemFtLTQwMDE6JXM6IGlub2RlIGhhcyBuZWdhdGl2ZSBwcmVhbGxvYyBibG9ja3MgY291bnQuIiwKLQkJCQkgX19mdW5jX18pOworCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgInphbS00MDAxIiwKKwkJCSAgICAgICAiaW5vZGUgaGFzIG5lZ2F0aXZlIHByZWFsbG9jIGJsb2NrcyBjb3VudC4iKTsKICNlbmRpZgogCXdoaWxlIChlaS0+aV9wcmVhbGxvY19jb3VudCA+IDApIHsKIAkJcmVpc2VyZnNfZnJlZV9wcmVhbGxvY19ibG9jayh0aCwgaW5vZGUsIGVpLT5pX3ByZWFsbG9jX2Jsb2NrKTsKQEAgLTUxNSw5ICs1MDksOSBAQAogCQkJCWlfcHJlYWxsb2NfbGlzdCk7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCWlmICghZWktPmlfcHJlYWxsb2NfY291bnQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJCSAiemFtLTQwMDE6JXM6IGlub2RlIGlzIGluIHByZWFsbG9jIGxpc3QgYnV0IGhhcyBubyBwcmVhbGxvY2F0ZWQgYmxvY2tzLiIsCi0JCQkJCSBfX2Z1bmNfXyk7CisJCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgInphbS00MDAxIiwKKwkJCQkgICAgICAgImlub2RlIGlzIGluIHByZWFsbG9jIGxpc3QgYnV0IGhhcyAiCisJCQkJICAgICAgICJubyBwcmVhbGxvY2F0ZWQgYmxvY2tzLiIpOwogCQl9CiAjZW5kaWYKIAkJX19kaXNjYXJkX3ByZWFsbG9jKHRoLCBlaSk7CkBAIC02MzEsMTIgKzYyNSwxMiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlyZWlzZXJmc193YXJuaW5nKHMsICJ6YW0tNDAwMTogJXMgOiB1bmtub3duIG9wdGlvbiAtICVzIiwKLQkJCQkgX19mdW5jX18sIHRoaXNfY2hhcik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInphbS00MDAxIiwgInVua25vd24gb3B0aW9uIC0gJXMiLAorCQkJCSB0aGlzX2NoYXIpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlyZWlzZXJmc193YXJuaW5nKHMsICJhbGxvY2F0b3Igb3B0aW9ucyA9IFslMDh4XVxuIiwgU0JfQUxMT0NfT1BUUyhzKSk7CisJcmVpc2VyZnNfaW5mbyhzLCAiYWxsb2NhdG9yIG9wdGlvbnMgPSBbJTA4eF1cbiIsIFNCX0FMTE9DX09QVFMocykpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjIxLDcgKzEyMTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgKmN1ciA9ICh1bnNpZ25lZCBsb25nICopKGJoLT5iX2RhdGEgKyBiaC0+Yl9zaXplKTsKIAogCS8qIFRoZSBmaXJzdCBiaXQgbXVzdCBBTFdBWVMgYmUgMSAqLwotCUJVR19PTighcmVpc2VyZnNfdGVzdF9sZV9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKiliaC0+Yl9kYXRhKSk7CisJaWYgKCFyZWlzZXJmc190ZXN0X2xlX2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKWJoLT5iX2RhdGEpKQorCQlyZWlzZXJmc19lcnJvcihzYiwgInJlaXNlcmZzLTIwMjUiLCAiYml0bWFwIGJsb2NrICVsdSBpcyAiCisJCQkgICAgICAgImNvcnJ1cHRlZDogZmlyc3QgYml0IG11c3QgYmUgMSIsIGJoLT5iX2Jsb2NrbnIpOwogCiAJaW5mby0+ZnJlZV9jb3VudCA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2Rpci5jIGIvZnMvcmVpc2VyZnMvZGlyLmMKaW5kZXggZTZiMDNkMi4uNjdhODBkNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZGlyLmMKKysrIGIvZnMvcmVpc2VyZnMvZGlyLmMKQEAgLTQxLDEwICs0MSwxMCBAQAogCiAjZGVmaW5lIHN0b3JlX2loKHdoZXJlLHdoYXQpIGNvcHlfaXRlbV9oZWFkICh3aGVyZSwgd2hhdCkKIAotLy8KLXN0YXRpYyBpbnQgcmVpc2VyZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKK2ludCByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHZvaWQgKmRpcmVudCwKKwkJCSAgIGZpbGxkaXJfdCBmaWxsZGlyLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBjcHVfa2V5IHBvc19rZXk7CS8qIGtleSBvZiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBkaXJlY3RvcnkgKGtleSBvZiBkaXJlY3RvcnkgZW50cnkpICovCiAJSU5JVElBTElaRV9QQVRIKHBhdGhfdG9fZW50cnkpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC02NCwxMyArNjQsOSBAQAogCiAJLyogZm9ybSBrZXkgZm9yIHNlYXJjaCB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkgdXNpbmcgZl9wb3MgZmllbGQgb2YKIAkgICBmaWxlIHN0cnVjdHVyZSAqLwotCW1ha2VfY3B1X2tleSgmcG9zX2tleSwgaW5vZGUsCi0JCSAgICAgKGZpbHAtPmZfcG9zKSA/IChmaWxwLT5mX3BvcykgOiBET1RfT0ZGU0VULCBUWVBFX0RJUkVOVFJZLAotCQkgICAgIDMpOworCW1ha2VfY3B1X2tleSgmcG9zX2tleSwgaW5vZGUsICpwb3MgPzogRE9UX09GRlNFVCwgVFlQRV9ESVJFTlRSWSwgMyk7CiAJbmV4dF9wb3MgPSBjcHVfa2V5X2tfb2Zmc2V0KCZwb3Nfa2V5KTsKIAotCS8qICByZWlzZXJmc193YXJuaW5nIChpbm9kZS0+aV9zYiwgInJlaXNlcmZzX3JlYWRkaXIgMTogZl9wb3MgPSAlTGQiLCBmaWxwLT5mX3Bvcyk7ICovCi0KIAlwYXRoX3RvX2VudHJ5LnJlYWRhID0gUEFUSF9SRUFEQTsKIAl3aGlsZSAoMSkgewogCSAgICAgIHJlc2VhcmNoOgpAQCAtMTQ0LDcgKzE0MCw3IEBACiAJCQkJLyogSWdub3JlIHRoZSAucmVpc2VyZnNfcHJpdiBlbnRyeSAqLwogCQkJCWlmIChyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpICYmCiAJCQkJICAgICFvbGRfZm9ybWF0X29ubHkoaW5vZGUtPmlfc2IpICYmCi0JCQkJICAgIGZpbHAtPmZfcGF0aC5kZW50cnkgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdCAmJgorCQkJCSAgICBkZW50cnkgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdCAmJgogCQkJCSAgICBSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnByaXZfcm9vdCAmJgogCQkJCSAgICBSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnByaXZfcm9vdC0+ZF9pbm9kZQogCQkJCSAgICAmJiBkZWhfb2JqZWN0aWQoZGVoKSA9PQpAQCAtMTU2LDcgKzE1Miw3IEBACiAJCQkJfQogCiAJCQkJZF9vZmYgPSBkZWhfb2Zmc2V0KGRlaCk7Ci0JCQkJZmlscC0+Zl9wb3MgPSBkX29mZjsKKwkJCQkqcG9zID0gZF9vZmY7CiAJCQkJZF9pbm8gPSBkZWhfb2JqZWN0aWQoZGVoKTsKIAkJCQlpZiAoZF9yZWNsZW4gPD0gMzIpIHsKIAkJCQkJbG9jYWxfYnVmID0gc21hbGxfYnVmOwpAQCAtMjIzLDE1ICsyMTksMjEgQEAKIAogCX0JCQkvKiB3aGlsZSAqLwogCi0gICAgICBlbmQ6Ci0JZmlscC0+Zl9wb3MgPSBuZXh0X3BvczsKK2VuZDoKKwkqcG9zID0gbmV4dF9wb3M7CiAJcGF0aHJlbHNlKCZwYXRoX3RvX2VudHJ5KTsKIAlyZWlzZXJmc19jaGVja19wYXRoKCZwYXRoX3RvX2VudHJ5KTsKLSAgICAgIG91dDoKK291dDoKIAlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcmVpc2VyZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OworCXJldHVybiByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkZW50cnksIGRpcmVudCwgZmlsbGRpciwgJmZpbGUtPmZfcG9zKTsKK30KKwogLyogY29tcG9zZSBkaXJlY3RvcnkgaXRlbSBjb250YWluaW5nICIuIiBhbmQgIi4uIiBlbnRyaWVzIChlbnRyaWVzIGFyZQogICAgbm90IGFsaWduZWQgdG8gNCBieXRlIGJvdW5kYXJ5KSAqLwogLyogdGhlIGxhc3QgZm91ciBwYXJhbXMgYXJlIExFICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kb19iYWxhbi5jIGIvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYwppbmRleCAyZjg3ZjViLi40YmViOTY0IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCisrKyBiL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKQEAgLTI5LDYgKzI5LDQzIEBACiAJCQkJCSAgIGlzIGludGVycnVwdGluZyBkb19iYWxhbmNlICovCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9pbmZvX2luaXRfbGVmdChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSkKK3sKKwliaS0+dGIgICAgICAgICAgPSB0YjsKKwliaS0+YmlfYmggICAgICAgPSB0Yi0+TFswXTsKKwliaS0+YmlfcGFyZW50ICAgPSB0Yi0+RkxbMF07CisJYmktPmJpX3Bvc2l0aW9uID0gZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luZm9faW5pdF9yaWdodChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgID0gdGItPlJbMF07CisJYmktPmJpX3BhcmVudCAgID0gdGItPkZSWzBdOworCWJpLT5iaV9wb3NpdGlvbiA9IGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X3RiUzAoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgICA9IFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKTsKKwliaS0+YmlfcGFyZW50ICAgPSBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgMCk7CisJYmktPmJpX3Bvc2l0aW9uID0gUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9pbmZvX2luaXRfYmgoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwliaS0+dGIgICAgICAgICAgPSB0YjsKKwliaS0+YmlfYmggICAgICAgPSBiaDsKKwliaS0+YmlfcGFyZW50ICAgPSBOVUxMOworCWJpLT5iaV9wb3NpdGlvbiA9IDA7Cit9CisKIGlubGluZSB2b2lkIGRvX2JhbGFuY2VfbWFya19sZWFmX2RpcnR5KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAogCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgZmxhZykKIHsKQEAgLTM5LDIxICs3NiwyMSBAQAogI2RlZmluZSBkb19iYWxhbmNlX21hcmtfaW50ZXJuYWxfZGlydHkgZG9fYmFsYW5jZV9tYXJrX2xlYWZfZGlydHkKICNkZWZpbmUgZG9fYmFsYW5jZV9tYXJrX3NiX2RpcnR5IGRvX2JhbGFuY2VfbWFya19sZWFmX2RpcnR5CiAKLS8qIHN1bW1hcnk6IAorLyogc3VtbWFyeToKICBpZiBkZWxldGluZyBzb21ldGhpbmcgKCB0Yi0+aW5zZXJ0X3NpemVbMF0gPCAwICkKICAgIHJldHVybihiYWxhbmNlX2xlYWZfd2hlbl9kZWxldGUoKSk7IChmbGFnIGQgaGFuZGxlZCBoZXJlKQogIGVsc2UKICAgIGlmIGxudW0gaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgbGVmdCBub2RlCiAgICBpZiBybnVtIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIHJpZ2h0IG5vZGUKICAgIGlmIHNudW0xIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIG5ldyBub2RlIHMxCi0gICBpZiBzbnVtMiBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBuZXcgbm9kZSBzMiAKKyAgIGlmIHNudW0yIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIG5ldyBub2RlIHMyCiBOb3RlIHRoYXQgYWxsICpudW0qIGNvdW50IG5ldyBpdGVtcyBiZWluZyBjcmVhdGVkLgogCiBJdCB3b3VsZCBiZSBlYXNpZXIgdG8gcmVhZCBiYWxhbmNlX2xlYWYoKSBpZiBlYWNoIG9mIHRoZXNlIHN1bW1hcnkKIGxpbmVzIHdhcyBhIHNlcGFyYXRlIHByb2NlZHVyZSByYXRoZXIgdGhhbiBiZWluZyBpbmxpbmVkLiAgSSB0aGluawogdGhhdCB0aGVyZSBhcmUgbWFueSBwYXNzYWdlcyBoZXJlIGFuZCBpbiBiYWxhbmNlX2xlYWZfd2hlbl9kZWxldGUoKSBpbgogd2hpY2ggdHdvIGNhbGxzIHRvIG9uZSBwcm9jZWR1cmUgY2FuIHJlcGxhY2UgdHdvIHBhc3NhZ2VzLCBhbmQgaXQKLW1pZ2h0IHNhdmUgY2FjaGUgc3BhY2UgYW5kIGltcHJvdmUgc29mdHdhcmUgbWFpbnRlbmFuY2UgY29zdHMgdG8gZG8gc28uICAKK21pZ2h0IHNhdmUgY2FjaGUgc3BhY2UgYW5kIGltcHJvdmUgc29mdHdhcmUgbWFpbnRlbmFuY2UgY29zdHMgdG8gZG8gc28uCiAKIFZsYWRpbWlyIG1hZGUgdGhlIHBlcmNlcHRpdmUgY29tbWVudCB0aGF0IHdlIHNob3VsZCBvZmZsb2FkIG1vc3Qgb2YKIHRoZSBkZWNpc2lvbiBtYWtpbmcgaW4gdGhpcyBmdW5jdGlvbiBpbnRvIGZpeF9ub2Rlcy9jaGVja19iYWxhbmNlLCBhbmQKQEAgLTg2LDYgKzEyMyw3IEBACiAJICAgICAgICJQQVAtMTIwMTA6IHRyZWUgY2FuIG5vdCBiZSBlbXB0eSIpOwogCiAJaWggPSBCX05fUElURU1fSEVBRCh0YlMwLCBpdGVtX3Bvcyk7CisJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCiAJLyogRGVsZXRlIG9yIHRydW5jYXRlIHRoZSBpdGVtICovCiAKQEAgLTk2LDEwICsxMzQsNiBAQAogCQkgICAgICAgInZzLTEyMDEzOiBtb2RlIERlbGV0ZSwgaW5zZXJ0IHNpemUgJWQsIGloIHRvIGJlIGRlbGV0ZWQgJWgiLAogCQkgICAgICAgLXRiLT5pbnNlcnRfc2l6ZVswXSwgaWgpOwogCi0JCWJpLnRiID0gdGI7Ci0JCWJpLmJpX2JoID0gdGJTMDsKLQkJYmkuYmlfcGFyZW50ID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOwotCQliaS5iaV9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSk7CiAJCWxlYWZfZGVsZXRlX2l0ZW1zKCZiaSwgMCwgaXRlbV9wb3MsIDEsIC0xKTsKIAogCQlpZiAoIWl0ZW1fcG9zICYmIHRiLT5DRkxbMF0pIHsKQEAgLTEyMSwxMCArMTU1LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1fQ1VUOnsJCS8qIGN1dCBpdGVtIGluIFNbMF0gKi8KLQkJCWJpLnRiID0gdGI7Ci0JCQliaS5iaV9iaCA9IHRiUzA7Ci0JCQliaS5iaV9wYXJlbnQgPSBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgMCk7Ci0JCQliaS5iaV9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSk7CiAJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgoaWgpKSB7CiAKIAkJCQkvKiBVRlMgdW5saW5rIHNlbWFudGljcyBhcmUgc3VjaCB0aGF0IHlvdSBjYW4gb25seSBkZWxldGUgb25lIGRpcmVjdG9yeSBlbnRyeSBhdCBhIHRpbWUuICovCkBAIC0xNTMsOCArMTgzLDggQEAKIAogCWRlZmF1bHQ6CiAJCXByaW50X2N1cl90YigiMTIwNDAiKTsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtMTIwNDA6IGJhbGFuY2VfbGVhZl93aGVuX2RlbGV0ZTogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjA0MCIsCisJCQkgICAgICAgInVuZXhwZWN0ZWQgbW9kZTogJXMoJWQpIiwKIAkJCSAgICAgICAoZmxhZyA9PQogCQkJCU1fUEFTVEUpID8gIlBBU1RFIiA6ICgoZmxhZyA9PQogCQkJCQkJICAgICAgIE1fSU5TRVJUKSA/ICJJTlNFUlQiIDoKQEAgLTI1OCwxNSArMjg4LDE1IEBACiAgICAgKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqdGJTMCA9IFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKTsKLQlpbnQgaXRlbV9wb3MgPSBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpOwkvKiAgaW5kZXggaW50byB0aGUgYXJyYXkgb2YgaXRlbSBoZWFkZXJzIGluIFNbMF0gCisJaW50IGl0ZW1fcG9zID0gUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKTsJLyogIGluZGV4IGludG8gdGhlIGFycmF5IG9mIGl0ZW0gaGVhZGVycyBpbiBTWzBdCiAJCQkJCQkJICAgb2YgdGhlIGFmZmVjdGVkIGl0ZW0gKi8KIAlzdHJ1Y3QgYnVmZmVyX2luZm8gYmk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpTX25ld1syXTsJLyogbmV3IG5vZGVzIGFsbG9jYXRlZCB0byBob2xkIHdoYXQgY291bGQgbm90IGZpdCBpbnRvIFMgKi8KIAlpbnQgc251bVsyXTsJCS8qIG51bWJlciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgcGxhY2VkCiAJCQkJICAgaW50byBTX25ldyAoaW5jbHVkZXMgcGFydGlhbGx5IHNoaWZ0ZWQKIAkJCQkgICBpdGVtcykgKi8KLQlpbnQgc2J5dGVzWzJdOwkJLyogaWYgYW4gaXRlbSBpcyBwYXJ0aWFsbHkgc2hpZnRlZCBpbnRvIFNfbmV3IHRoZW4gCi0JCQkJICAgaWYgaXQgaXMgYSBkaXJlY3RvcnkgaXRlbSAKKwlpbnQgc2J5dGVzWzJdOwkJLyogaWYgYW4gaXRlbSBpcyBwYXJ0aWFsbHkgc2hpZnRlZCBpbnRvIFNfbmV3IHRoZW4KKwkJCQkgICBpZiBpdCBpcyBhIGRpcmVjdG9yeSBpdGVtCiAJCQkJICAgaXQgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGZyb20gdGhlIGl0ZW0gdGhhdCBhcmUgc2hpZnRlZCBpbnRvIFNfbmV3CiAJCQkJICAgZWxzZQogCQkJCSAgIGl0IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgaXRlbSB0aGF0IGFyZSBzaGlmdGVkIGludG8gU19uZXcKQEAgLTMyNSwxMSArMzU1LDcgQEAKIAkJCQkJICAgICAgIGloX2l0ZW1fbGVuKGloKSk7CiAKIAkJCQkJLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gTFswXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RkxbMF07Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQogCQkJCQkJCSAgICAgcmV0X3ZhbCwgaWgsIGJvZHksCkBAIC0zNjksMTEgKzM5NSw3IEBACiAJCQkJCSAgICBsZWFmX3NoaWZ0X2xlZnQodGIsIHRiLT5sbnVtWzBdIC0gMSwKIAkJCQkJCQkgICAgdGItPmxieXRlcyk7CiAJCQkJCS8qIEluc2VydCBuZXcgaXRlbSBpbnRvIExbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZMWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICAgIHJldF92YWwsIGloLCBib2R5LApAQCAtNDI5LDEzICs0NTEsNyBAQAogCQkJCQkJCX0KIAogCQkJCQkJCS8qIEFwcGVuZCBnaXZlbiBkaXJlY3RvcnkgZW50cnkgdG8gZGlyZWN0b3J5IGl0ZW0gKi8KLQkJCQkJCQliaS50YiA9IHRiOwotCQkJCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCQkgICAgdGItPkZMWzBdOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24KLQkJCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIKIAkJCQkJCQkgICAgKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCkBAIC00NDksOCArNDY1LDcgQEAKIAkJCQkJCQkvKiB3aGVuIHdlIGhhdmUgbWVyZ2UgZGlyZWN0b3J5IGl0ZW0sIHBvc19pbl9pdGVtIGhhcyBiZWVuIGNoYW5nZWQgdG9vICovCiAKIAkJCQkJCQkvKiBwYXN0ZSBuZXcgZGlyZWN0b3J5IGVudHJ5LiAxIGlzIGVudHJ5IG51bWJlciAqLwotCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS4KLQkJCQkJCQkJCSAgIGJpX2JoLAorCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCQkgICBuICsKIAkJCQkJCQkJCSAgIGl0ZW1fcG9zCiAJCQkJCQkJCQkgICAtCkBAIC01MjQsMTMgKzUzOSw3IEBACiAJCQkJCQkJCQkgICAgICh0YlMwLAogCQkJCQkJCQkJICAgICAgaXRlbV9wb3MpKSk7CiAJCQkJCQkJLyogQXBwZW5kIHRvIGJvZHkgb2YgaXRlbSBpbiBMWzBdICovCi0JCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkJICAgIHRiLT5GTFswXTsKLQkJCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyCiAJCQkJCQkJICAgICgmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQpAQCAtNjgxLDExICs2OTAsNyBAQAogCQkJCQkgICAgbGVhZl9zaGlmdF9sZWZ0KHRiLCB0Yi0+bG51bVswXSwKIAkJCQkJCQkgICAgdGItPmxieXRlcyk7CiAJCQkJCS8qIEFwcGVuZCB0byBib2R5IG9mIGl0ZW0gaW4gTFswXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RkxbMF07Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcigmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQogCQkJCQkJCSAgICAgcmV0X3ZhbCwKQEAgLTY5OSw3ICs3MDQsNyBAQAogCQkJCQkJCSAgIG4gKyBpdGVtX3BvcyAtCiAJCQkJCQkJICAgcmV0X3ZhbCk7CiAJCQkJCWlmIChpc19kaXJlbnRyeV9sZV9paChwYXN0ZWQpKQotCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLmJpX2JoLAorCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJICAgbiArCiAJCQkJCQkJCSAgIGl0ZW1fcG9zIC0KIAkJCQkJCQkJICAgcmV0X3ZhbCwKQEAgLTcyMiw4ICs3MjcsOSBAQAogCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CS8qIGNhc2VzIGQgYW5kIHQgKi8KLQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJCSAgICAgICAiUEFQLTEyMTMwOiBiYWxhbmNlX2xlYWY6IGxudW0gPiAwOiB1bmV4cGVjdGFibGUgbW9kZTogJXMoJWQpIiwKKwkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIxMzAiLAorCQkJCQkgICAgICAgImxudW0gPiAwOiB1bmV4cGVjdGVkIG1vZGU6ICIKKwkJCQkJICAgICAgICIgJXMoJWQpIiwKIAkJCQkJICAgICAgIChmbGFnID09CiAJCQkJCQlNX0RFTEVURSkgPyAiREVMRVRFIiA6ICgoZmxhZyA9PQogCQkJCQkJCQkJIE1fQ1VUKQpAQCAtNzc2LDExICs3ODIsNyBAQAogCQkJCQlzZXRfbGVfaWhfa19vZmZzZXQoaWgsIG9mZnNldCk7CiAJCQkJCXB1dF9paF9pdGVtX2xlbihpaCwgdGItPnJieXRlcyk7CiAJCQkJCS8qIEluc2VydCBwYXJ0IG9mIHRoZSBpdGVtIGludG8gUlswXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RlJbMF07Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCWlmICgob2xkX2xlbiAtIHRiLT5yYnl0ZXMpID4gemVyb3NfbnVtKSB7CiAJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CiAJCQkJCQlyX2JvZHkgPQpAQCAtODE3LDExICs4MTksNyBAQAogCQkJCQkJCSAgICAgdGItPnJudW1bMF0gLSAxLAogCQkJCQkJCSAgICAgdGItPnJieXRlcyk7CiAJCQkJCS8qIEluc2VydCBuZXcgaXRlbSBpbnRvIFJbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksCiAJCQkJCQkJICAgICBpdGVtX3BvcyAtIG4gKwogCQkJCQkJCSAgICAgdGItPnJudW1bMF0gLSAxLApAQCAtODgxLDIxICs4NzksMTQgQEAKIAkJCQkJCQkgICAgcG9zX2luX2l0ZW0gLQogCQkJCQkJCSAgICBlbnRyeV9jb3VudCArCiAJCQkJCQkJICAgIHRiLT5yYnl0ZXMgLSAxOwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJCSAgICB0Yi0+RlJbMF07Ci0JCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24KLQkJCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyCiAJCQkJCQkJICAgICgmYmksIDAsCiAJCQkJCQkJICAgICBwYXN0ZV9lbnRyeV9wb3NpdGlvbiwKIAkJCQkJCQkgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSwKIAkJCQkJCQkgICAgIGJvZHksIHplcm9zX251bSk7CiAJCQkJCQkJLyogcGFzdGUgZW50cnkgKi8KLQkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuCi0JCQkJCQkJCQkgICBiaV9iaCwKKwkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkJICAgMCwKIAkJCQkJCQkJCSAgIHBhc3RlX2VudHJ5X3Bvc2l0aW9uLAogCQkJCQkJCQkJICAgMSwKQEAgLTEwMTksMTIgKzEwMTAsNyBAQAogCQkJCQkJICAgICh0YiwgdGItPkNGUlswXSwgMCk7CiAKIAkJCQkJCS8qIEFwcGVuZCBwYXJ0IG9mIGJvZHkgaW50byBSWzBdICovCi0JCQkJCQliaS50YiA9IHRiOwotCQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GUlswXTsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24KLQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJCWlmIChuX3JlbSA+IHplcm9zX251bSkgewogCQkJCQkJCXJfemVyb3NfbnVtYmVyID0gMDsKIAkJCQkJCQlyX2JvZHkgPQpAQCAtMTA3MSwxMiArMTA1Nyw3IEBACiAJCQkJCQkJICAgICB0Yi0+cmJ5dGVzKTsKIAkJCQkJLyogYXBwZW5kIGl0ZW0gaW4gUlswXSAqLwogCQkJCQlpZiAocG9zX2luX2l0ZW0gPj0gMCkgewotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RlJbMF07Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcigmYmksCiAJCQkJCQkJCSAgICAgaXRlbV9wb3MgLQogCQkJCQkJCQkgICAgIG4gKwpAQCAtMTA5Niw3ICsxMDc3LDcgQEAKIAkJCQkJCQkgICB0Yi0+cm51bVswXSk7CiAJCQkJCWlmIChpc19kaXJlbnRyeV9sZV9paChwYXN0ZWQpCiAJCQkJCSAgICAmJiBwb3NfaW5faXRlbSA+PSAwKSB7Ci0JCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuYmlfYmgsCisJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgIG4gKwogCQkJCQkJCQkgICB0Yi0+cm51bVswXSwKQEAgLTExMzYsOCArMTExNyw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoJLyogY2FzZXMgZCBhbmQgdCAqLwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMTc1OiBiYWxhbmNlX2xlYWY6IHJudW0gPiAwOiB1bmV4cGVjdGFibGUgbW9kZTogJXMoJWQpIiwKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjE3NSIsCisJCQkJICAgICAgICJybnVtID4gMDogdW5leHBlY3RlZCBtb2RlOiAlcyglZCkiLAogCQkJCSAgICAgICAoZmxhZyA9PQogCQkJCQlNX0RFTEVURSkgPyAiREVMRVRFIiA6ICgoZmxhZyA9PQogCQkJCQkJCQkgTV9DVVQpID8gIkNVVCIKQEAgLTExNjcsOCArMTE0OCw4IEBACiAJCSAgIG5vdCBzZXQgY29ycmVjdGx5ICovCiAJCWlmICh0Yi0+Q0ZMWzBdKSB7CiAJCQlpZiAoIXRiLT5DRlJbMF0pCi0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgInZzLTEyMTk1OiBiYWxhbmNlX2xlYWY6IENGUiBub3QgaW5pdGlhbGl6ZWQiKTsKKwkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjE5NSIsCisJCQkJCSAgICAgICAiQ0ZSIG5vdCBpbml0aWFsaXplZCIpOwogCQkJY29weV9rZXkoQl9OX1BERUxJTV9LRVkodGItPkNGTFswXSwgdGItPmxrZXlbMF0pLAogCQkJCSBCX05fUERFTElNX0tFWSh0Yi0+Q0ZSWzBdLCB0Yi0+cmtleVswXSkpOwogCQkJZG9fYmFsYW5jZV9tYXJrX2ludGVybmFsX2RpcnR5KHRiLCB0Yi0+Q0ZMWzBdLCAwKTsKQEAgLTEyMzIsMTAgKzEyMTMsNyBAQAogCQkJCQlwdXRfaWhfaXRlbV9sZW4oaWgsIHNieXRlc1tpXSk7CiAKIAkJCQkJLyogSW5zZXJ0IHBhcnQgb2YgdGhlIGl0ZW0gaW50byBTX25ld1tpXSBiZWZvcmUgMC10aCBpdGVtICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gU19uZXdbaV07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAKIAkJCQkJaWYgKChvbGRfbGVuIC0gc2J5dGVzW2ldKSA+IHplcm9zX251bSkgewogCQkJCQkJcl96ZXJvc19udW1iZXIgPSAwOwpAQCAtMTI2NywxMCArMTI0NSw3IEBACiAJCQkJCQkJU19uZXdbaV0pOwogCiAJCQkJCS8qIEluc2VydCBuZXcgaXRlbSBpbnRvIFNfbmV3W2ldICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gU19uZXdbaV07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAJCQkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwKIAkJCQkJCQkgICAgIGl0ZW1fcG9zIC0gbiArCiAJCQkJCQkJICAgICBzbnVtW2ldIC0gMSwgaWgsCkBAIC0xMzI3LDEwICsxMzAyLDcgQEAKIAkJCQkJCQkgICAgIHNieXRlc1tpXSAtIDEsCiAJCQkJCQkJICAgICBTX25ld1tpXSk7CiAJCQkJCQkJLyogUGFzdGUgZ2l2ZW4gZGlyZWN0b3J5IGVudHJ5IHRvIGRpcmVjdG9yeSBpdGVtICovCi0JCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQkJCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JCQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOworCQkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCQkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyCiAJCQkJCQkJICAgICgmYmksIDAsCiAJCQkJCQkJICAgICBwb3NfaW5faXRlbSAtCkBAIC0xMzM5LDggKzEzMTEsNyBAQAogCQkJCQkJCSAgICAgdGItPmluc2VydF9zaXplWzBdLAogCQkJCQkJCSAgICAgYm9keSwgemVyb3NfbnVtKTsKIAkJCQkJCQkvKiBwYXN0ZSBuZXcgZGlyZWN0b3J5IGVudHJ5ICovCi0JCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLgotCQkJCQkJCQkJICAgYmlfYmgsCisJCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJCSAgIDAsCiAJCQkJCQkJCQkgICBwb3NfaW5faXRlbQogCQkJCQkJCQkJICAgLQpAQCAtMTQwMSwxMSArMTM3Miw3IEBACiAJCQkJCQlpZiAobl9yZW0gPCAwKQogCQkJCQkJCW5fcmVtID0gMDsKIAkJCQkJCS8qIEFwcGVuZCBwYXJ0IG9mIGJvZHkgaW50byBTX25ld1swXSAqLwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gU19uZXdbaV07Ci0JCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOwotCisJCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJCWlmIChuX3JlbSA+IHplcm9zX251bSkgewogCQkJCQkJCXJfemVyb3NfbnVtYmVyID0gMDsKIAkJCQkJCQlyX2JvZHkgPQpAQCAtMTQ3NSw3ICsxNDQyLDEwIEBACiAJCQkJCSAgICAmJiAocG9zX2luX2l0ZW0gIT0gaWhfaXRlbV9sZW4oaWhfY2hlY2spCiAJCQkJCQl8fCB0Yi0+aW5zZXJ0X3NpemVbMF0gPD0gMCkpCiAJCQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgICJQQVAtMTIyMzU6IGJhbGFuY2VfbGVhZjogcG9zX2luX2l0ZW0gbXVzdCBiZSBlcXVhbCB0byBpaF9pdGVtX2xlbiIpOworCQkJCQkJCSAgICAgIlBBUC0xMjIzNSIsCisJCQkJCQkJICAgICAicG9zX2luX2l0ZW0gIgorCQkJCQkJCSAgICAgIm11c3QgYmUgZXF1YWwgIgorCQkJCQkJCSAgICAgInRvIGloX2l0ZW1fbGVuIik7CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCiAKIAkJCQkJbGVhZl9taSA9CkBAIC0xNDg5LDEwICsxNDU5LDcgQEAKIAkJCQkJICAgICAgIGxlYWZfbWkpOwogCiAJCQkJCS8qIHBhc3RlIGludG8gaXRlbSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcigmYmksCiAJCQkJCQkJICAgICBpdGVtX3BvcyAtIG4gKwogCQkJCQkJCSAgICAgc251bVtpXSwKQEAgLTE1MDUsNyArMTQ3Miw3IEBACiAJCQkJCQkJICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICBzbnVtW2ldKTsKIAkJCQkJaWYgKGlzX2RpcmVudHJ5X2xlX2loKHBhc3RlZCkpIHsKLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIGl0ZW1fcG9zIC0KIAkJCQkJCQkJICAgbiArIHNudW1baV0sCiAJCQkJCQkJCSAgIHBvc19pbl9pdGVtLApAQCAtMTUzNSw4ICsxNTAyLDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgkvKiBjYXNlcyBkIGFuZCB0ICovCi0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtMTIyNDU6IGJhbGFuY2VfbGVhZjogYmxrbnVtID4gMjogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIyNDUiLAorCQkJCSAgICAgICAiYmxrbnVtID4gMjogdW5leHBlY3RlZCBtb2RlOiAlcyglZCkiLAogCQkJCSAgICAgICAoZmxhZyA9PQogCQkJCQlNX0RFTEVURSkgPyAiREVMRVRFIiA6ICgoZmxhZyA9PQogCQkJCQkJCQkgTV9DVVQpID8gIkNVVCIKQEAgLTE1NTksMTAgKzE1MjYsNyBAQAogCiAJCXN3aXRjaCAoZmxhZykgewogCQljYXNlIE1fSU5TRVJUOgkvKiBpbnNlcnQgaXRlbSBpbnRvIFNbMF0gKi8KLQkJCWJpLnRiID0gdGI7Ci0JCQliaS5iaV9iaCA9IHRiUzA7Ci0JCQliaS5iaV9wYXJlbnQgPSBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgMCk7Ci0JCQliaS5iaV9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSk7CisJCQlidWZmZXJfaW5mb19pbml0X3RiUzAodGIsICZiaSk7CiAJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksIGl0ZW1fcG9zLCBpaCwgYm9keSwKIAkJCQkJICAgICB6ZXJvc19udW0pOwogCkBAIC0xNTg5LDE0ICsxNTUzLDcgQEAKIAkJCQkJCSAgICAgICAiUEFQLTEyMjYwOiBpbnNlcnRfc2l6ZSBpcyAwIGFscmVhZHkiKTsKIAogCQkJCQkJLyogcHJlcGFyZSBzcGFjZSAqLwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGJTMDsKLQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkgICAgUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgIDApOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKLQkJCQkJCQkJICAgIDEpOworCQkJCQkJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCQkgICAgIGl0ZW1fcG9zLAogCQkJCQkJCQkgICAgIHBvc19pbl9pdGVtLApAQCAtMTYwNiw3ICsxNTYzLDcgQEAKIAkJCQkJCQkJICAgICB6ZXJvc19udW0pOwogCiAJCQkJCQkvKiBwYXN0ZSBlbnRyeSAqLwotCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLmJpX2JoLAorCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJICAgaXRlbV9wb3MsCiAJCQkJCQkJCSAgIHBvc19pbl9pdGVtLAogCQkJCQkJCQkgICAxLApAQCAtMTY0NCwxNCArMTYwMSw3IEBACiAJCQkJCQlSRkFMU0UodGItPmluc2VydF9zaXplWzBdIDw9IDAsCiAJCQkJCQkgICAgICAgIlBBUC0xMjI3NTogaW5zZXJ0IHNpemUgbXVzdCBub3QgYmUgJWQiLAogCQkJCQkJICAgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSk7Ci0JCQkJCQliaS50YiA9IHRiOwotCQkJCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCSAgICBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwKLQkJCQkJCQkJICAgMCk7Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkgICAgUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLAotCQkJCQkJCQkgICAgMSk7CisJCQkJCQlidWZmZXJfaW5mb19pbml0X3RiUzAodGIsICZiaSk7CiAJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcigmYmksCiAJCQkJCQkJCSAgICAgaXRlbV9wb3MsCiAJCQkJCQkJCSAgICAgcG9zX2luX2l0ZW0sCkBAIC0xNjgxLDEwICsxNjMxLDExIEBACiAJCQkJCQkJcHJpbnRfY3VyX3RiKCIxMjI4NSIpOwogCQkJCQkJCXJlaXNlcmZzX3BhbmljKHRiLT4KIAkJCQkJCQkJICAgICAgIHRiX3NiLAotCQkJCQkJCQkgICAgICAgIlBBUC0xMjI4NTogYmFsYW5jZV9sZWFmOiBpbnNlcnRfc2l6ZSBtdXN0IGJlIDAgKCVkKSIsCi0JCQkJCQkJCSAgICAgICB0Yi0+Ci0JCQkJCQkJCSAgICAgICBpbnNlcnRfc2l6ZQotCQkJCQkJCQkgICAgICAgWzBdKTsKKwkJCQkJCQkgICAgIlBBUC0xMjI4NSIsCisJCQkJCQkJICAgICJpbnNlcnRfc2l6ZSAiCisJCQkJCQkJICAgICJtdXN0IGJlIDAgIgorCQkJCQkJCSAgICAiKCVkKSIsCisJCQkJCQkJICAgIHRiLT5pbnNlcnRfc2l6ZVswXSk7CiAJCQkJCQl9CiAJCQkJCX0KICNlbmRpZgkJCQkvKiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKi8KQEAgLTE2OTcsMTEgKzE2NDgsMTAgQEAKIAlpZiAoZmxhZyA9PSBNX1BBU1RFICYmIHRiLT5pbnNlcnRfc2l6ZVswXSkgewogCQlwcmludF9jdXJfdGIoIjEyMjkwIik7CiAJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTEyMjkwOiBiYWxhbmNlX2xlYWY6IGluc2VydF9zaXplIGlzIHN0aWxsIG5vdCAwICglZCkiLAorCQkJICAgICAgICJQQVAtMTIyOTAiLCAiaW5zZXJ0X3NpemUgaXMgc3RpbGwgbm90IDAgKCVkKSIsCiAJCQkgICAgICAgdGItPmluc2VydF9zaXplWzBdKTsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCi0KIAlyZXR1cm4gMDsKIH0JCQkJLyogTGVhZiBsZXZlbCBvZiB0aGUgdHJlZSBpcyBiYWxhbmNlZCAoZW5kIG9mIGJhbGFuY2VfbGVhZikgKi8KIApAQCAtMTcyNCw3ICsxNjc0LDYgQEAKIHN0cnVjdCBidWZmZXJfaGVhZCAqZ2V0X0ZFQihzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZpcnN0X2I7CiAJc3RydWN0IGJ1ZmZlcl9pbmZvIGJpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9GRUJfU0laRTsgaSsrKQpAQCAtMTczMiwxOSArMTY4MSwxNSBAQAogCQkJYnJlYWs7CiAKIAlpZiAoaSA9PSBNQVhfRkVCX1NJWkUpCi0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAidnMtMTIzMDA6IGdldF9GRUI6IEZFQiBsaXN0IGlzIGVtcHR5Iik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTEyMzAwIiwgIkZFQiBsaXN0IGlzIGVtcHR5Iik7CiAKLQliaS50YiA9IHRiOwotCWJpLmJpX2JoID0gZmlyc3RfYiA9IHRiLT5GRUJbaV07Ci0JYmkuYmlfcGFyZW50ID0gTlVMTDsKLQliaS5iaV9wb3NpdGlvbiA9IDA7CisJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCB0Yi0+RkVCW2ldKTsKIAltYWtlX2VtcHR5X25vZGUoJmJpKTsKLQlzZXRfYnVmZmVyX3VwdG9kYXRlKGZpcnN0X2IpOworCXNldF9idWZmZXJfdXB0b2RhdGUodGItPkZFQltpXSk7CisJdGItPnVzZWRbaV0gPSB0Yi0+RkVCW2ldOwogCXRiLT5GRUJbaV0gPSBOVUxMOwotCXRiLT51c2VkW2ldID0gZmlyc3RfYjsKIAotCXJldHVybiAoZmlyc3RfYik7CisJcmV0dXJuIHRiLT51c2VkW2ldOwogfQogCiAvKiBUaGlzIGlzIG5vdyB1c2VkIGJlY2F1c2UgcmVpc2VyZnNfZnJlZV9ibG9jayBoYXMgdG8gYmUgYWJsZSB0bwpAQCAtMTc1NSwxNSArMTcwMCwxNiBAQAogCWludCBpOwogCiAJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkpCi0JCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLAotCQkJCSAic3RvcmVfdGhyb3duIGRlYWxzIHdpdGggZGlydHkgYnVmZmVyIik7CisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtMTIzMjAiLAorCQkJCSAiY2FsbGVkIHdpdGggZGlydHkgYnVmZmVyIik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGItPnRocm93bik7IGkrKykKIAkJaWYgKCF0Yi0+dGhyb3duW2ldKSB7CiAJCQl0Yi0+dGhyb3duW2ldID0gYmg7CiAJCQlnZXRfYmgoYmgpOwkvKiBmcmVlX3Rocm93biBwdXRzIHRoaXMgKi8KIAkJCXJldHVybjsKIAkJfQotCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAic3RvcmVfdGhyb3duOiB0b28gbWFueSB0aHJvd24gYnVmZmVycyIpOworCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtMTIzMjEiLAorCQkJICJ0b28gbWFueSB0aHJvd24gYnVmZmVycyIpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3Rocm93bihzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YikKQEAgLTE3NzQsOCArMTcyMCw4IEBACiAJCWlmICh0Yi0+dGhyb3duW2ldKSB7CiAJCQlibG9ja25yID0gdGItPnRocm93bltpXS0+Yl9ibG9ja25yOwogCQkJaWYgKGJ1ZmZlcl9kaXJ0eSh0Yi0+dGhyb3duW2ldKSkKLQkJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwKLQkJCQkJCSAiZnJlZV90aHJvd24gZGVhbHMgd2l0aCBkaXJ0eSBidWZmZXIgJWQiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtMTIzMjIiLAorCQkJCQkJICJjYWxsZWQgd2l0aCBkaXJ0eSBidWZmZXIgJWQiLAogCQkJCQkJIGJsb2NrbnIpOwogCQkJYnJlbHNlKHRiLT50aHJvd25baV0pOwkvKiBpbmNyZW1lbnRlZCBpbiBzdG9yZV90aHJvd24gKi8KIAkJCXJlaXNlcmZzX2ZyZWVfYmxvY2sodGItPnRyYW5zYWN0aW9uX2hhbmRsZSwgTlVMTCwKQEAgLTE4NzMsMjAgKzE4MTksMTkgQEAKIAlmb3IgKGkgPSAwOyBpIDw9IEJfTlJfSVRFTVMoYmgpOyBpKyssIGRjKyspIHsKIAkJaWYgKCFpc19yZXVzYWJsZShzLCBkY19ibG9ja19udW1iZXIoZGMpLCAxKSkgewogCQkJcHJpbnRfY3VyX3RiKG1lcyk7Ci0JCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJCSAgICAgICAiUEFQLTEyMzM4OiBjaGVja19pbnRlcm5hbF9ub2RlOiBpbnZhbGlkIGNoaWxkIHBvaW50ZXIgJXkgaW4gJWIiLAorCQkJcmVpc2VyZnNfcGFuaWMocywgIlBBUC0xMjMzOCIsCisJCQkJICAgICAgICJpbnZhbGlkIGNoaWxkIHBvaW50ZXIgJXkgaW4gJWIiLAogCQkJCSAgICAgICBkYywgYmgpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IGxvY2tlZF9vcl9ub3RfaW5fdHJlZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICp3aGljaCkKK3N0YXRpYyBpbnQgbG9ja2VkX29yX25vdF9pbl90cmVlKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqd2hpY2gpCiB7CiAJaWYgKCghYnVmZmVyX2pvdXJuYWxfcHJlcGFyZWQoYmgpICYmIGJ1ZmZlcl9sb2NrZWQoYmgpKSB8fAogCSAgICAhQl9JU19JTl9UUkVFKGJoKSkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJ2cy0xMjMzOTogbG9ja2VkX29yX25vdF9pbl90cmVlOiAlcyAoJWIpIiwKLQkJCQkgd2hpY2gsIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy0xMjMzOSIsICIlcyAoJWIpIiwgd2hpY2gsIGJoKTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtMTg5NywyNiArMTg0MiwyOCBAQAogCWludCByZXR2YWwgPSAwOwogCiAJaWYgKGN1cl90YikgewotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjMzNTogY2hlY2tfYmVmb3JlX2JhbGFuY2luZzogIgotCQkJICAgICAgICJzdXNwZWN0IHRoYXQgc2NoZWR1bGUgb2NjdXJyZWQgYmFzZWQgb24gY3VyX3RiIG5vdCBiZWluZyBudWxsIGF0IHRoaXMgcG9pbnQgaW4gY29kZS4gIgotCQkJICAgICAgICJkb19iYWxhbmNlIGNhbm5vdCBwcm9wZXJseSBoYW5kbGUgc2NoZWR1bGUgb2NjdXJyaW5nIHdoaWxlIGl0IHJ1bnMuIik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTEyMzM1IiwgInN1c3BlY3QgdGhhdCBzY2hlZHVsZSAiCisJCQkgICAgICAgIm9jY3VycmVkIGJhc2VkIG9uIGN1cl90YiBub3QgYmVpbmcgbnVsbCBhdCAiCisJCQkgICAgICAgInRoaXMgcG9pbnQgaW4gY29kZS4gZG9fYmFsYW5jZSBjYW5ub3QgcHJvcGVybHkgIgorCQkJICAgICAgICJoYW5kbGUgc2NoZWR1bGUgb2NjdXJyaW5nIHdoaWxlIGl0IHJ1bnMuIik7CiAJfQogCiAJLyogZG91YmxlIGNoZWNrIHRoYXQgYnVmZmVycyB0aGF0IHdlIHdpbGwgbW9kaWZ5IGFyZSB1bmxvY2tlZC4gKGZpeF9ub2RlcyBzaG91bGQgYWxyZWFkeSBoYXZlCiAJICAgcHJlcHBlZCBhbGwgb2YgdGhlc2UgZm9yIHVzKS4gKi8KIAlpZiAodGItPmxudW1bMF0pIHsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+TFswXSwgIkxbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+RkxbMF0sICJGTFswXSIpOwotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5DRkxbMF0sICJDRkxbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPkxbMF0sICJMWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5GTFswXSwgIkZMWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5DRkxbMF0sICJDRkxbMF0iKTsKIAkJY2hlY2tfbGVhZih0Yi0+TFswXSk7CiAJfQogCWlmICh0Yi0+cm51bVswXSkgewotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5SWzBdLCAiUlswXSIpOwotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5GUlswXSwgIkZSWzBdIik7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkNGUlswXSwgIkNGUlswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+UlswXSwgIlJbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPkZSWzBdLCAiRlJbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPkNGUlswXSwgIkNGUlswXSIpOwogCQljaGVja19sZWFmKHRiLT5SWzBdKTsKIAl9Ci0JcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZShQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCksICJTWzBdIik7CisJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpLAorCQkJCQkiU1swXSIpOwogCWNoZWNrX2xlYWYoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xOTMwLDggKzE4NzcsOCBAQAogCQkgICAgZGNfc2l6ZShCX05fQ0hJTEQKIAkJCSAgICAodGItPkZMWzBdLCBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCkpKSkgewogCQkJcHJpbnRfY3VyX3RiKCIxMjIyMSIpOwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMzU1OiBjaGVja19hZnRlcl9iYWxhbmNlX2xlYWY6IHNoaWZ0IHRvIGxlZnQgd2FzIGluY29ycmVjdCIpOworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMzU1IiwKKwkJCQkgICAgICAgInNoaWZ0IHRvIGxlZnQgd2FzIGluY29ycmVjdCIpOwogCQl9CiAJfQogCWlmICh0Yi0+cm51bVswXSkgewpAQCAtMTk0MCw4ICsxODg3LDggQEAKIAkJICAgIGRjX3NpemUoQl9OX0NISUxECiAJCQkgICAgKHRiLT5GUlswXSwgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKSkpKSB7CiAJCQlwcmludF9jdXJfdGIoIjEyMjIyIik7Ci0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtMTIzNjA6IGNoZWNrX2FmdGVyX2JhbGFuY2VfbGVhZjogc2hpZnQgdG8gcmlnaHQgd2FzIGluY29ycmVjdCIpOworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMzYwIiwKKwkJCQkgICAgICAgInNoaWZ0IHRvIHJpZ2h0IHdhcyBpbmNvcnJlY3QiKTsKIAkJfQogCX0KIAlpZiAoUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIDEpICYmCkBAIC0xOTU1LDcgKzE5MDIsNyBAQAogCQkJCQkgICAgICAgUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLAogCQkJCQkJCSAgICAgICAxKSkpKTsKIAkJcHJpbnRfY3VyX3RiKCIxMjIyMyIpOwotCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwKKwkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy0xMjM2MyIsCiAJCQkJICJCX0ZSRUVfU1BBQ0UgKFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLDApKSA9ICVkOyAiCiAJCQkJICJNQVhfQ0hJTERfU0laRSAoJWQpIC0gZGNfc2l6ZSggJXksICVkICkgWyVkXSA9ICVkIiwKIAkJCQkgbGVmdCwKQEAgLTE5NjYsOCArMTkxMyw3IEBACiAJCQkJCSAoUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIDEpLAogCQkJCQkgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSkpKSwKIAkJCQkgcmlnaHQpOwotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC0xMjM2NTogY2hlY2tfYWZ0ZXJfYmFsYW5jZV9sZWFmOiBTIGlzIGluY29ycmVjdCIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIzNjUiLCAiUyBpcyBpbmNvcnJlY3QiKTsKIAl9CiB9CiAKQEAgLTIwMzcsNyArMTk4Myw3IEBACiAJLyogc3RvcmVfcHJpbnRfdGIgKHRiKTsgKi8KIAogCS8qIGRvIG5vdCBkZWxldGUsIGp1c3QgY29tbWVudCBpdCBvdXQgKi8KLS8qICAgIHByaW50X3RiKGZsYWcsIFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCksIHRiLT50Yl9wYXRoLT5wb3NfaW5faXRlbSwgdGIsIAorLyogICAgcHJpbnRfdGIoZmxhZywgUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKSwgdGItPnRiX3BhdGgtPnBvc19pbl9pdGVtLCB0YiwKIAkgICAgICJjaGVjayIpOyovCiAJUkZBTFNFKGNoZWNrX2JlZm9yZV9iYWxhbmNpbmcodGIpLCAiUEFQLTEyMzQwOiBsb2NrZWQgYnVmZmVycyBpbiBUQiIpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwpAQCAtMjEwMiwxNCArMjA0OCwxMyBAQAogCXRiLT5uZWVkX2JhbGFuY2VfZGlydHkgPSAwOwogCiAJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJjbG0tNjAwMDogZG9fYmFsYW5jZSwgZnMgZ2VuZXJhdGlvbiBoYXMgY2hhbmdlZFxuIik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgImNsbS02MDAwIiwgImZzIGdlbmVyYXRpb24gaGFzICIKKwkJCSAgICAgICAiY2hhbmdlZCIpOwogCX0KIAkvKiBpZiB3ZSBoYXZlIG5vIHJlYWwgd29yayB0byBkbyAgKi8KIAlpZiAoIXRiLT5pbnNlcnRfc2l6ZVswXSkgewotCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwKLQkJCQkgIlBBUC0xMjM1MDogZG9fYmFsYW5jZTogaW5zZXJ0X3NpemUgPT0gMCwgbW9kZSA9PSAlYyIsCi0JCQkJIGZsYWcpOworCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgIlBBUC0xMjM1MCIsCisJCQkJICJpbnNlcnRfc2l6ZSA9PSAwLCBtb2RlID09ICVjIiwgZmxhZyk7CiAJCXVuZml4X25vZGVzKHRiKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpbGUuYyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwppbmRleCAzMzQwODQxLi45ZjQzNjY2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maWxlLmMKKysrIGIvZnMvcmVpc2VyZnMvZmlsZS5jCkBAIC0yMCwxNCArMjAsMTQgQEAKICoqIGluc2VydGlvbi9iYWxhbmNpbmcsIGZvciBmaWxlcyB0aGF0IGFyZSB3cml0dGVuIGluIG9uZSB3cml0ZS4KICoqIEl0IGF2b2lkcyB1bm5lY2Vzc2FyeSB0YWlsIHBhY2tpbmdzIChiYWxhbmNlcykgZm9yIGZpbGVzIHRoYXQgYXJlIHdyaXR0ZW4gaW4KICoqIG11bHRpcGxlIHdyaXRlcyBhbmQgYXJlIHNtYWxsIGVub3VnaCB0byBoYXZlIHRhaWxzLgotKiogCisqKgogKiogZmlsZV9yZWxlYXNlIGlzIGNhbGxlZCBieSB0aGUgVkZTIGxheWVyIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiAgSWYKICoqIHRoaXMgaXMgdGhlIGxhc3Qgb3BlbiBmaWxlIGRlc2NyaXB0b3IsIGFuZCB0aGUgZmlsZQogKiogc21hbGwgZW5vdWdoIHRvIGhhdmUgYSB0YWlsLCBhbmQgdGhlIHRhaWwgaXMgY3VycmVudGx5IGluIGFuCiAqKiB1bmZvcm1hdHRlZCBub2RlLCB0aGUgdGFpbCBpcyBjb252ZXJ0ZWQgYmFjayBpbnRvIGEgZGlyZWN0IGl0ZW0uCi0qKiAKKyoqCiAqKiBXZSB1c2UgcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZSB0byBwYWNrIHRoZSB0YWlsLCBzaW5jZSBpdCBhbHJlYWR5IGhhcwotKiogYWxsIHRoZSBjb25kaXRpb25zIGNvZGVkLiAgCisqKiBhbGwgdGhlIGNvbmRpdGlvbnMgY29kZWQuCiAqLwogc3RhdGljIGludCByZWlzZXJmc19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CkBAIC03Niw3ICs3Niw3IEBACiAJCQkgKiBhbmQgbGV0IHRoZSBhZG1pbiBrbm93IHdoYXQgaXMgZ29pbmcgb24uCiAJCQkgKi8KIAkJCWlncmFiKGlub2RlKTsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiY2xtLTkwMDEiLAogCQkJCQkgInBpbm5pbmcgaW5vZGUgJWx1IGJlY2F1c2UgdGhlICIKIAkJCQkJICJwcmVhbGxvY2F0aW9uIGNhbid0IGJlIGZyZWVkIiwKIAkJCQkJIGlub2RlLT5pX2lubyk7CkBAIC0xMzQsMjMgKzEzNCwyMyBAQAogICogYmUgcmVtb3ZlZC4uLgogICovCiAKLXN0YXRpYyBpbnQgcmVpc2VyZnNfc3luY19maWxlKHN0cnVjdCBmaWxlICpwX3NfZmlscCwKLQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnBfc19kZW50cnksIGludCBkYXRhc3luYykKK3N0YXRpYyBpbnQgcmVpc2VyZnNfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCiB7Ci0Jc3RydWN0IGlub2RlICpwX3NfaW5vZGUgPSBwX3NfZGVudHJ5LT5kX2lub2RlOwotCWludCBuX2VycjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCBlcnI7CiAJaW50IGJhcnJpZXJfZG9uZTsKIAotCUJVR19PTighU19JU1JFRyhwX3NfaW5vZGUtPmlfbW9kZSkpOwotCW5fZXJyID0gc3luY19tYXBwaW5nX2J1ZmZlcnMocF9zX2lub2RlLT5pX21hcHBpbmcpOwotCXJlaXNlcmZzX3dyaXRlX2xvY2socF9zX2lub2RlLT5pX3NiKTsKLQliYXJyaWVyX2RvbmUgPSByZWlzZXJmc19jb21taXRfZm9yX2lub2RlKHBfc19pbm9kZSk7Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHBfc19pbm9kZS0+aV9zYik7Ci0JaWYgKGJhcnJpZXJfZG9uZSAhPSAxICYmIHJlaXNlcmZzX2JhcnJpZXJfZmx1c2gocF9zX2lub2RlLT5pX3NiKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKHBfc19pbm9kZS0+aV9zYi0+c19iZGV2LCBOVUxMKTsKKwlCVUdfT04oIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpOworCWVyciA9IHN5bmNfbWFwcGluZ19idWZmZXJzKGlub2RlLT5pX21hcHBpbmcpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCWJhcnJpZXJfZG9uZSA9IHJlaXNlcmZzX2NvbW1pdF9mb3JfaW5vZGUoaW5vZGUpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CisJaWYgKGJhcnJpZXJfZG9uZSAhPSAxICYmIHJlaXNlcmZzX2JhcnJpZXJfZmx1c2goaW5vZGUtPmlfc2IpKQorCQlibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtPmlfc2ItPnNfYmRldiwgTlVMTCk7CiAJaWYgKGJhcnJpZXJfZG9uZSA8IDApCiAJCXJldHVybiBiYXJyaWVyX2RvbmU7Ci0JcmV0dXJuIChuX2VyciA8IDApID8gLUVJTyA6IDA7CisJcmV0dXJuIChlcnIgPCAwKSA/IC1FSU8gOiAwOwogfQogCiAvKiB0YWtlbiBmcy9idWZmZXIuYzpfX2Jsb2NrX2NvbW1pdF93cml0ZSAqLwpAQCAtMjIzLDcgKzIyMyw3IEBACiB9CiAKIC8qIFdyaXRlIEBjb3VudCBieXRlcyBhdCBwb3NpdGlvbiBAcHBvcyBpbiBhIGZpbGUgaW5kaWNhdGVkIGJ5IEBmaWxlCi0gICBmcm9tIHRoZSBidWZmZXIgQGJ1Zi4gIAorICAgZnJvbSB0aGUgYnVmZmVyIEBidWYuCiAKICAgIGdlbmVyaWNfZmlsZV93cml0ZSgpIGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIG5vdCBzZWVraW5nIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCB3YW50CiAgICBzb21ldGhpbmcgc2ltcGxlIHRoYXQgd29ya3MuICBJdCBpcyBub3QgZm9yIHNlcmlvdXMgdXNlIGJ5IGdlbmVyYWwgcHVycG9zZSBmaWxlc3lzdGVtcywgZXhjZXB0aW5nIHRoZSBvbmUgdGhhdCBpdCB3YXMKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMgYi9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCmluZGV4IDA3ZDA1ZTAuLjVlNWE0ZTYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwpAQCAtMzAsOCArMzAsOCBAQAogICoqIGdldF9kaXJlY3RfcGFyZW50CiAgKiogZ2V0X25laWdoYm9ycwogICoqIGZpeF9ub2RlcwotICoqIAotICoqIAorICoqCisgKioKICAqKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTEzNSw4ICsxMzUsNyBAQAogCQl2bi0+dm5fZnJlZV9wdHIgKz0KIAkJICAgIG9wX2NyZWF0ZV92aSh2biwgdmksIGlzX2FmZmVjdGVkLCB0Yi0+aW5zZXJ0X3NpemVbMF0pOwogCQlpZiAodGItPnZuX2J1ZiArIHRiLT52bl9idWZfc2l6ZSA8IHZuLT52bl9mcmVlX3B0cikKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgInZzLTgwMzA6IGNyZWF0ZV92aXJ0dWFsX25vZGU6ICIKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTgwMzAiLAogCQkJCSAgICAgICAidmlydHVhbCBub2RlIHNwYWNlIGNvbnN1bWVkIik7CiAKIAkJaWYgKCFpc19hZmZlY3RlZCkKQEAgLTE4Niw4ICsxODUsOSBAQAogCQkJICAgICAmJiBJX0VOVFJZX0NPVU5UKEJfTl9QSVRFTV9IRUFEKFNoLCAwKSkgPT0gMSkpIHsKIAkJCQkvKiBub2RlIGNvbnRhaW5zIG1vcmUgdGhhbiAxIGl0ZW0sIG9yIGl0ZW0gaXMgbm90IGRpcmVjdG9yeSBpdGVtLCBvciB0aGlzIGl0ZW0gY29udGFpbnMgbW9yZSB0aGFuIDEgZW50cnkgKi8KIAkJCQlwcmludF9ibG9jayhTaCwgMCwgLTEsIC0xKTsKLQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJCSAgICAgICAidnMtODA0NTogY3JlYXRlX3ZpcnR1YWxfbm9kZTogcmRrZXkgJWssIGFmZmVjdGVkIGl0ZW09PSVkIChtb2RlPT0lYykgTXVzdCBiZSAlYyIsCisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtODA0NSIsCisJCQkJCSAgICAgICAicmRrZXkgJWssIGFmZmVjdGVkIGl0ZW09PSVkICIKKwkJCQkJICAgICAgICIobW9kZT09JWMpIE11c3QgYmUgJWMiLAogCQkJCQkgICAgICAga2V5LCB2bi0+dm5fYWZmZWN0ZWRfaXRlbV9udW0sCiAJCQkJCSAgICAgICB2bi0+dm5fbW9kZSwgTV9ERUxFVEUpOwogCQkJfQpAQCAtMzc3LDkgKzM3Nyw5IEBACiAJaW50IG5lZWRlZF9ub2RlczsKIAlpbnQgc3RhcnRfaXRlbSwJCS8qIHBvc2l0aW9uIG9mIGl0ZW0gd2Ugc3RhcnQgZmlsbGluZyBub2RlIGZyb20gKi8KIAkgZW5kX2l0ZW0sCQkvKiBwb3NpdGlvbiBvZiBpdGVtIHdlIGZpbmlzaCBmaWxsaW5nIG5vZGUgYnkgKi8KLQkgc3RhcnRfYnl0ZXMsCQkvKiBudW1iZXIgb2YgZmlyc3QgYnl0ZXMgKGVudHJpZXMgZm9yIGRpcmVjdG9yeSkgb2Ygc3RhcnRfaXRlbS10aCBpdGVtIAorCSBzdGFydF9ieXRlcywJCS8qIG51bWJlciBvZiBmaXJzdCBieXRlcyAoZW50cmllcyBmb3IgZGlyZWN0b3J5KSBvZiBzdGFydF9pdGVtLXRoIGl0ZW0KIAkJCQkgICB3ZSBkbyBub3QgaW5jbHVkZSBpbnRvIG5vZGUgdGhhdCBpcyBiZWluZyBmaWxsZWQgKi8KLQkgZW5kX2J5dGVzOwkJLyogbnVtYmVyIG9mIGxhc3QgYnl0ZXMgKGVudHJpZXMgZm9yIGRpcmVjdG9yeSkgb2YgZW5kX2l0ZW0tdGggaXRlbSAKKwkgZW5kX2J5dGVzOwkJLyogbnVtYmVyIG9mIGxhc3QgYnl0ZXMgKGVudHJpZXMgZm9yIGRpcmVjdG9yeSkgb2YgZW5kX2l0ZW0tdGggaXRlbQogCQkJCSAgIHdlIGRvIG5vZGUgaW5jbHVkZSBpbnRvIG5vZGUgdGhhdCBpcyBiZWluZyBmaWxsZWQgKi8KIAlpbnQgc3BsaXRfaXRlbV9wb3NpdGlvbnNbMl07CS8qIHRoZXNlIGFyZSBwb3NpdGlvbnMgaW4gdmlydHVhbCBpdGVtIG9mCiAJCQkJCSAgIGl0ZW1zLCB0aGF0IGFyZSBzcGxpdCBiZXR3ZWVuIFNbMF0gYW5kCkBAIC00OTYsOCArNDk2LDggQEAKIAkJc251bTAxMltuZWVkZWRfbm9kZXMgLSAxICsgM10gPSB1bml0czsKIAogCQlpZiAobmVlZGVkX25vZGVzID4gMikKLQkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtODExMTogZ2V0X251bV92ZXI6ICIKLQkJCQkJICJzcGxpdF9pdGVtX3Bvc2l0aW9uIGlzIG91dCBvZiBib3VuZGFyeSIpOworCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTExIiwKKwkJCQkJICJzcGxpdF9pdGVtX3Bvc2l0aW9uIGlzIG91dCBvZiByYW5nZSIpOwogCQlzbnVtMDEyW25lZWRlZF9ub2RlcyAtIDFdKys7CiAJCXNwbGl0X2l0ZW1fcG9zaXRpb25zW25lZWRlZF9ub2RlcyAtIDFdID0gaTsKIAkJbmVlZGVkX25vZGVzKys7CkBAIC01MzMsOCArNTMzLDggQEAKIAogCQlpZiAodm4tPnZuX3ZpW3NwbGl0X2l0ZW1fbnVtXS52aV9pbmRleCAhPSBUWVBFX0RJUkVOVFJZICYmCiAJCSAgICB2bi0+dm5fdmlbc3BsaXRfaXRlbV9udW1dLnZpX2luZGV4ICE9IFRZUEVfSU5ESVJFQ1QpCi0JCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTgxMTU6IGdldF9udW1fdmVyOiBub3QgIgotCQkJCQkgImRpcmVjdG9yeSBvciBpbmRpcmVjdCBpdGVtIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTgxMTUiLAorCQkJCQkgIm5vdCBkaXJlY3Rvcnkgb3IgaW5kaXJlY3QgaXRlbSIpOwogCX0KIAogCS8qIG5vdyB3ZSBrbm93IFMyYnl0ZXMsIGNhbGN1bGF0ZSBTMWJ5dGVzICovCkBAIC01NjksNyArNTY5LDcgQEAKIAogLyogU2V0IHBhcmFtZXRlcnMgZm9yIGJhbGFuY2luZy4KICAqIFBlcmZvcm1zIHdyaXRlIG9mIHJlc3VsdHMgb2YgYW5hbHlzaXMgb2YgYmFsYW5jaW5nIGludG8gc3RydWN0dXJlIHRiLAotICogd2hlcmUgaXQgd2lsbCBsYXRlciBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBkbyB0aGUgYmFsYW5jaW5nLiAKKyAqIHdoZXJlIGl0IHdpbGwgbGF0ZXIgYmUgdXNlZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgZG8gdGhlIGJhbGFuY2luZy4KICAqIFBhcmFtZXRlcnM6CiAgKgl0Ygl0cmVlX2JhbGFuY2Ugc3RydWN0dXJlOwogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwpAQCAtNzQ5LDI1ICs3NDksMjYgQEAKIAkJICAtMSwgLTEpO1wKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9idWZmZXJzX2luX3RiKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YikKK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyc19pbl90YihzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YikKIHsKLQlpbnQgbl9jb3VudGVyOworCWludCBpOwogCi0JZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgocF9zX3RiLT50Yl9wYXRoKTsKKwlwYXRocmVsc2UodGItPnRiX3BhdGgpOwogCi0JZm9yIChuX2NvdW50ZXIgPSAwOyBuX2NvdW50ZXIgPCBNQVhfSEVJR0hUOyBuX2NvdW50ZXIrKykgewotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+TFtuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5MW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+UltuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5SW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Rkxbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+Rkxbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GUltuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5GUltuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGTFtuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5DRkxbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRlJbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+Q0ZSW25fY291bnRlcl0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSEVJR0hUOyBpKyspIHsKKwkJYnJlbHNlKHRiLT5MW2ldKTsKKwkJYnJlbHNlKHRiLT5SW2ldKTsKKwkJYnJlbHNlKHRiLT5GTFtpXSk7CisJCWJyZWxzZSh0Yi0+RlJbaV0pOworCQlicmVsc2UodGItPkNGTFtpXSk7CisJCWJyZWxzZSh0Yi0+Q0ZSW2ldKTsKKworCQl0Yi0+TFtpXSA9IE5VTEw7CisJCXRiLT5SW2ldID0gTlVMTDsKKwkJdGItPkZMW2ldID0gTlVMTDsKKwkJdGItPkZSW2ldID0gTlVMTDsKKwkJdGItPkNGTFtpXSA9IE5VTEw7CisJCXRiLT5DRlJbaV0gPSBOVUxMOwogCX0KIH0KIApAQCAtNzc3LDE0ICs3NzgsMTQgQEAKICAqCSAgICAgICAgTk9fRElTS19TUEFDRSAtIG5vIGRpc2sgc3BhY2UuCiAgKi8KIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KLXN0YXRpYyBpbnQgZ2V0X2VtcHR5X25vZGVzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X2VtcHR5X25vZGVzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLCBpbnQgaCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19uZXdfYmgsCi0JICAgICpwX3NfU2ggPSBQQVRIX0hfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5faCk7Ci0JYl9ibG9ja25yX3QgKnBfbl9ibG9ja25yLCBhX25fYmxvY2tucnNbTUFYX0FNT1VOVF9ORUVERURdID0geyAwLCB9OwotCWludCBuX2NvdW50ZXIsIG5fbnVtYmVyX29mX2ZyZWVibGssIG5fYW1vdW50X25lZWRlZCwJLyogbnVtYmVyIG9mIG5lZWRlZCBlbXB0eSBibG9ja3MgKi8KLQkgbl9yZXR2YWwgPSBDQVJSWV9PTjsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc190Yi0+dGJfc2I7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmgsCisJICAgICpTaCA9IFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoKTsKKwliX2Jsb2NrbnJfdCAqYmxvY2tuciwgYmxvY2tucnNbTUFYX0FNT1VOVF9ORUVERURdID0geyAwLCB9OworCWludCBjb3VudGVyLCBudW1iZXJfb2ZfZnJlZWJsaywgYW1vdW50X25lZWRlZCwJLyogbnVtYmVyIG9mIG5lZWRlZCBlbXB0eSBibG9ja3MgKi8KKwkgcmV0dmFsID0gQ0FSUllfT047CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHRiLT50Yl9zYjsKIAogCS8qIG51bWJlcl9vZl9mcmVlYmxrIGlzIHRoZSBudW1iZXIgb2YgZW1wdHkgYmxvY2tzIHdoaWNoIGhhdmUgYmVlbgogCSAgIGFjcXVpcmVkIGZvciB1c2UgYnkgdGhlIGJhbGFuY2luZyBhbGdvcml0aG0gbWludXMgdGhlIG51bWJlciBvZgpAQCAtNzkyLDcgKzc5Myw3IEBACiAJICAgbnVtYmVyX29mX2ZyZWVibGsgPSB0Yi0+Y3VyX2Jsa251bSBjYW4gYmUgbm9uLXplcm8gaWYgYSBzY2hlZHVsZSBvY2N1cnMKIAkgICBhZnRlciBlbXB0eSBibG9ja3MgYXJlIGFjcXVpcmVkLCBhbmQgdGhlIGJhbGFuY2luZyBhbmFseXNpcyBpcwogCSAgIHRoZW4gcmVzdGFydGVkLCBhbW91bnRfbmVlZGVkIGlzIHRoZSBudW1iZXIgbmVlZGVkIGJ5IHRoaXMgbGV2ZWwKLQkgICAobl9oKSBvZiB0aGUgYmFsYW5jaW5nIGFuYWx5c2lzLgorCSAgIChoKSBvZiB0aGUgYmFsYW5jaW5nIGFuYWx5c2lzLgogCiAJICAgTm90ZSB0aGF0IGZvciBzeXN0ZW1zIHdpdGggbWFueSBwcm9jZXNzZXMgd3JpdGluZywgaXQgd291bGQgYmUKIAkgICBtb3JlIGxheW91dCBvcHRpbWFsIHRvIGNhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG5lZWRlZCBieSBhbGwKQEAgLTgwMCw1NCArODAxLDU0IEBACiAKIAkvKiBJbml0aWF0ZSBudW1iZXJfb2ZfZnJlZWJsayB0byB0aGUgYW1vdW50IGFjcXVpcmVkIHByaW9yIHRvIHRoZSByZXN0YXJ0IG9mCiAJICAgdGhlIGFuYWx5c2lzIG9yIDAgaWYgbm90IHJlc3RhcnRlZCwgdGhlbiBzdWJ0cmFjdCB0aGUgYW1vdW50IG5lZWRlZAotCSAgIGJ5IGFsbCBvZiB0aGUgbGV2ZWxzIG9mIHRoZSB0cmVlIGJlbG93IG5faC4gKi8KLQkvKiBibGtudW0gaW5jbHVkZXMgU1tuX2hdLCBzbyB3ZSBzdWJ0cmFjdCAxIGluIHRoaXMgY2FsY3VsYXRpb24gKi8KLQlmb3IgKG5fY291bnRlciA9IDAsIG5fbnVtYmVyX29mX2ZyZWVibGsgPSBwX3NfdGItPmN1cl9ibGtudW07Ci0JICAgICBuX2NvdW50ZXIgPCBuX2g7IG5fY291bnRlcisrKQotCQluX251bWJlcl9vZl9mcmVlYmxrIC09Ci0JCSAgICAocF9zX3RiLT5ibGtudW1bbl9jb3VudGVyXSkgPyAocF9zX3RiLT5ibGtudW1bbl9jb3VudGVyXSAtCisJICAgYnkgYWxsIG9mIHRoZSBsZXZlbHMgb2YgdGhlIHRyZWUgYmVsb3cgaC4gKi8KKwkvKiBibGtudW0gaW5jbHVkZXMgU1toXSwgc28gd2Ugc3VidHJhY3QgMSBpbiB0aGlzIGNhbGN1bGF0aW9uICovCisJZm9yIChjb3VudGVyID0gMCwgbnVtYmVyX29mX2ZyZWVibGsgPSB0Yi0+Y3VyX2Jsa251bTsKKwkgICAgIGNvdW50ZXIgPCBoOyBjb3VudGVyKyspCisJCW51bWJlcl9vZl9mcmVlYmxrIC09CisJCSAgICAodGItPmJsa251bVtjb3VudGVyXSkgPyAodGItPmJsa251bVtjb3VudGVyXSAtCiAJCQkJCQkgICAxKSA6IDA7CiAKIAkvKiBBbGxvY2F0ZSBtaXNzaW5nIGVtcHR5IGJsb2Nrcy4gKi8KLQkvKiBpZiBwX3NfU2ggPT0gMCAgdGhlbiB3ZSBhcmUgZ2V0dGluZyBhIG5ldyByb290ICovCi0Jbl9hbW91bnRfbmVlZGVkID0gKHBfc19TaCkgPyAocF9zX3RiLT5ibGtudW1bbl9oXSAtIDEpIDogMTsKKwkvKiBpZiBTaCA9PSAwICB0aGVuIHdlIGFyZSBnZXR0aW5nIGEgbmV3IHJvb3QgKi8KKwlhbW91bnRfbmVlZGVkID0gKFNoKSA/ICh0Yi0+YmxrbnVtW2hdIC0gMSkgOiAxOwogCS8qICBBbW91bnRfbmVlZGVkID0gdGhlIGFtb3VudCB0aGF0IHdlIG5lZWQgbW9yZSB0aGFuIHRoZSBhbW91bnQgdGhhdCB3ZSBoYXZlLiAqLwotCWlmIChuX2Ftb3VudF9uZWVkZWQgPiBuX251bWJlcl9vZl9mcmVlYmxrKQotCQluX2Ftb3VudF9uZWVkZWQgLT0gbl9udW1iZXJfb2ZfZnJlZWJsazsKKwlpZiAoYW1vdW50X25lZWRlZCA+IG51bWJlcl9vZl9mcmVlYmxrKQorCQlhbW91bnRfbmVlZGVkIC09IG51bWJlcl9vZl9mcmVlYmxrOwogCWVsc2UJCQkvKiBJZiB3ZSBoYXZlIGVub3VnaCBhbHJlYWR5IHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8KIAkJcmV0dXJuIENBUlJZX09OOwogCiAJLyogTm8gbmVlZCB0byBjaGVjayBxdW90YSAtIGlzIG5vdCBhbGxvY2F0ZWQgZm9yIGJsb2NrcyB1c2VkIGZvciBmb3JtYXR0ZWQgbm9kZXMgKi8KLQlpZiAocmVpc2VyZnNfbmV3X2Zvcm1fYmxvY2tucnMocF9zX3RiLCBhX25fYmxvY2tucnMsCi0JCQkJICAgICAgIG5fYW1vdW50X25lZWRlZCkgPT0gTk9fRElTS19TUEFDRSkKKwlpZiAocmVpc2VyZnNfbmV3X2Zvcm1fYmxvY2tucnModGIsIGJsb2NrbnJzLAorCQkJCSAgICAgICBhbW91bnRfbmVlZGVkKSA9PSBOT19ESVNLX1NQQUNFKQogCQlyZXR1cm4gTk9fRElTS19TUEFDRTsKIAogCS8qIGZvciBlYWNoIGJsb2NrbnVtYmVyIHdlIGp1c3QgZ290LCBnZXQgYSBidWZmZXIgYW5kIHN0aWNrIGl0IG9uIEZFQiAqLwotCWZvciAocF9uX2Jsb2NrbnIgPSBhX25fYmxvY2tucnMsIG5fY291bnRlciA9IDA7Ci0JICAgICBuX2NvdW50ZXIgPCBuX2Ftb3VudF9uZWVkZWQ7IHBfbl9ibG9ja25yKyssIG5fY291bnRlcisrKSB7CisJZm9yIChibG9ja25yID0gYmxvY2tucnMsIGNvdW50ZXIgPSAwOworCSAgICAgY291bnRlciA8IGFtb3VudF9uZWVkZWQ7IGJsb2NrbnIrKywgY291bnRlcisrKSB7CiAKLQkJUkZBTFNFKCEqcF9uX2Jsb2NrbnIsCisJCVJGQUxTRSghKmJsb2NrbnIsCiAJCSAgICAgICAiUEFQLTgxMzU6IHJlaXNlcmZzX25ld19ibG9ja25ycyBmYWlsZWQgd2hlbiBnb3QgbmV3IGJsb2NrcyIpOwogCi0JCXBfc19uZXdfYmggPSBzYl9nZXRibGsocF9zX3NiLCAqcF9uX2Jsb2NrbnIpOwotCQlSRkFMU0UoYnVmZmVyX2RpcnR5KHBfc19uZXdfYmgpIHx8Ci0JCSAgICAgICBidWZmZXJfam91cm5hbGVkKHBfc19uZXdfYmgpIHx8Ci0JCSAgICAgICBidWZmZXJfam91cm5hbF9kaXJ0eShwX3NfbmV3X2JoKSwKKwkJbmV3X2JoID0gc2JfZ2V0YmxrKHNiLCAqYmxvY2tucik7CisJCVJGQUxTRShidWZmZXJfZGlydHkobmV3X2JoKSB8fAorCQkgICAgICAgYnVmZmVyX2pvdXJuYWxlZChuZXdfYmgpIHx8CisJCSAgICAgICBidWZmZXJfam91cm5hbF9kaXJ0eShuZXdfYmgpLAogCQkgICAgICAgIlBBUC04MTQwOiBqb3VybmxhbGVkIG9yIGRpcnR5IGJ1ZmZlciAlYiBmb3IgdGhlIG5ldyBibG9jayIsCi0JCSAgICAgICBwX3NfbmV3X2JoKTsKKwkJICAgICAgIG5ld19iaCk7CiAKIAkJLyogUHV0IGVtcHR5IGJ1ZmZlcnMgaW50byB0aGUgYXJyYXkuICovCi0JCVJGQUxTRShwX3NfdGItPkZFQltwX3NfdGItPmN1cl9ibGtudW1dLAorCQlSRkFMU0UodGItPkZFQlt0Yi0+Y3VyX2Jsa251bV0sCiAJCSAgICAgICAiUEFQLTgxNDE6IGJ1c3kgc2xvdCBmb3IgbmV3IGJ1ZmZlciIpOwogCi0JCXNldF9idWZmZXJfam91cm5hbF9uZXcocF9zX25ld19iaCk7Ci0JCXBfc190Yi0+RkVCW3Bfc190Yi0+Y3VyX2Jsa251bSsrXSA9IHBfc19uZXdfYmg7CisJCXNldF9idWZmZXJfam91cm5hbF9uZXcobmV3X2JoKTsKKwkJdGItPkZFQlt0Yi0+Y3VyX2Jsa251bSsrXSA9IG5ld19iaDsKIAl9CiAKLQlpZiAobl9yZXR2YWwgPT0gQ0FSUllfT04gJiYgRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpCi0JCW5fcmV0dmFsID0gUkVQRUFUX1NFQVJDSDsKKwlpZiAocmV0dmFsID09IENBUlJZX09OICYmIEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCisJCXJldHZhbCA9IFJFUEVBVF9TRUFSQ0g7CiAKLQlyZXR1cm4gbl9yZXR2YWw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyogR2V0IGZyZWUgc3BhY2Ugb2YgdGhlIGxlZnQgbmVpZ2hib3IsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgcGFyZW50CkBAIC04OTUsMzUgKzg5NiwzNiBAQAogfQogCiAvKiBDaGVjayB3aGV0aGVyIGxlZnQgbmVpZ2hib3IgaXMgaW4gbWVtb3J5LiAqLwotc3RhdGljIGludCBpc19sZWZ0X25laWdoYm9yX2luX2NhY2hlKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgaXNfbGVmdF9uZWlnaGJvcl9pbl9jYWNoZShzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfZmF0aGVyLCAqbGVmdDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc190Yi0+dGJfc2I7Ci0JYl9ibG9ja25yX3Qgbl9sZWZ0X25laWdoYm9yX2Jsb2NrbnI7Ci0JaW50IG5fbGVmdF9uZWlnaGJvcl9wb3NpdGlvbjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZhdGhlciwgKmxlZnQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHRiLT50Yl9zYjsKKwliX2Jsb2NrbnJfdCBsZWZ0X25laWdoYm9yX2Jsb2NrbnI7CisJaW50IGxlZnRfbmVpZ2hib3JfcG9zaXRpb247CiAKLQlpZiAoIXBfc190Yi0+Rkxbbl9oXSkJLyogRmF0aGVyIG9mIHRoZSBsZWZ0IG5laWdoYm9yIGRvZXMgbm90IGV4aXN0LiAqLworCS8qIEZhdGhlciBvZiB0aGUgbGVmdCBuZWlnaGJvciBkb2VzIG5vdCBleGlzdC4gKi8KKwlpZiAoIXRiLT5GTFtoXSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBDYWxjdWxhdGUgZmF0aGVyIG9mIHRoZSBub2RlIHRvIGJlIGJhbGFuY2VkLiAqLwotCXBfc19mYXRoZXIgPSBQQVRIX0hfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5faCArIDEpOworCWZhdGhlciA9IFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoICsgMSk7CiAKLQlSRkFMU0UoIXBfc19mYXRoZXIgfHwKLQkgICAgICAgIUJfSVNfSU5fVFJFRShwX3NfZmF0aGVyKSB8fAotCSAgICAgICAhQl9JU19JTl9UUkVFKHBfc190Yi0+Rkxbbl9oXSkgfHwKLQkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZShwX3NfZmF0aGVyKSB8fAotCSAgICAgICAhYnVmZmVyX3VwdG9kYXRlKHBfc190Yi0+Rkxbbl9oXSksCisJUkZBTFNFKCFmYXRoZXIgfHwKKwkgICAgICAgIUJfSVNfSU5fVFJFRShmYXRoZXIpIHx8CisJICAgICAgICFCX0lTX0lOX1RSRUUodGItPkZMW2hdKSB8fAorCSAgICAgICAhYnVmZmVyX3VwdG9kYXRlKGZhdGhlcikgfHwKKwkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZSh0Yi0+RkxbaF0pLAogCSAgICAgICAidnMtODE2NTogRltoXSAoJWIpIG9yIEZMW2hdICglYikgaXMgaW52YWxpZCIsCi0JICAgICAgIHBfc19mYXRoZXIsIHBfc190Yi0+Rkxbbl9oXSk7CisJICAgICAgIGZhdGhlciwgdGItPkZMW2hdKTsKIAogCS8qIEdldCBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciB0byB0aGUgbGVmdCBuZWlnaGJvciBpbnRvIHRoZSBsZWZ0IGZhdGhlci4gKi8KLQluX2xlZnRfbmVpZ2hib3JfcG9zaXRpb24gPSAocF9zX2ZhdGhlciA9PSBwX3NfdGItPkZMW25faF0pID8KLQkgICAgcF9zX3RiLT5sa2V5W25faF0gOiBCX05SX0lURU1TKHBfc190Yi0+Rkxbbl9oXSk7CisJbGVmdF9uZWlnaGJvcl9wb3NpdGlvbiA9IChmYXRoZXIgPT0gdGItPkZMW2hdKSA/CisJICAgIHRiLT5sa2V5W2hdIDogQl9OUl9JVEVNUyh0Yi0+RkxbaF0pOwogCS8qIEdldCBsZWZ0IG5laWdoYm9yIGJsb2NrIG51bWJlci4gKi8KLQluX2xlZnRfbmVpZ2hib3JfYmxvY2tuciA9Ci0JICAgIEJfTl9DSElMRF9OVU0ocF9zX3RiLT5GTFtuX2hdLCBuX2xlZnRfbmVpZ2hib3JfcG9zaXRpb24pOworCWxlZnRfbmVpZ2hib3JfYmxvY2tuciA9CisJICAgIEJfTl9DSElMRF9OVU0odGItPkZMW2hdLCBsZWZ0X25laWdoYm9yX3Bvc2l0aW9uKTsKIAkvKiBMb29rIGZvciB0aGUgbGVmdCBuZWlnaGJvciBpbiB0aGUgY2FjaGUuICovCi0JaWYgKChsZWZ0ID0gc2JfZmluZF9nZXRfYmxvY2socF9zX3NiLCBuX2xlZnRfbmVpZ2hib3JfYmxvY2tucikpKSB7CisJaWYgKChsZWZ0ID0gc2JfZmluZF9nZXRfYmxvY2soc2IsIGxlZnRfbmVpZ2hib3JfYmxvY2tucikpKSB7CiAKIAkJUkZBTFNFKGJ1ZmZlcl91cHRvZGF0ZShsZWZ0KSAmJiAhQl9JU19JTl9UUkVFKGxlZnQpLAogCQkgICAgICAgInZzLTgxNzA6IGxlZnQgbmVpZ2hib3IgKCViICV6KSBpcyBub3QgaW4gdGhlIHRyZWUiLApAQCAtOTM4LDEwICs5NDAsMTAgQEAKICNkZWZpbmUgTEVGVF9QQVJFTlRTICAnbCcKICNkZWZpbmUgUklHSFRfUEFSRU5UUyAncicKIAotc3RhdGljIHZvaWQgZGVjcmVtZW50X2tleShzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSkKK3N0YXRpYyB2b2lkIGRlY3JlbWVudF9rZXkoc3RydWN0IGNwdV9rZXkgKmtleSkKIHsKIAkvLyBjYWxsIGl0ZW0gc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHRoaXMga2V5Ci0JaXRlbV9vcHNbY3B1X2tleV9rX3R5cGUocF9zX2tleSldLT5kZWNyZW1lbnRfa2V5KHBfc19rZXkpOworCWl0ZW1fb3BzW2NwdV9rZXlfa190eXBlKGtleSldLT5kZWNyZW1lbnRfa2V5KGtleSk7CiB9CiAKIC8qIENhbGN1bGF0ZSBmYXIgbGVmdC9yaWdodCBwYXJlbnQgb2YgdGhlIGxlZnQvcmlnaHQgbmVpZ2hib3Igb2YgdGhlIGN1cnJlbnQgbm9kZSwgdGhhdApAQCAtOTUyLDc3ICs5NTQsNzcgQEAKICAJCVNDSEVEVUxFX09DQ1VSUkVEIC0gc2NoZWR1bGUgb2NjdXJyZWQgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqCSAgICAgICAgQ0FSUllfT04gICAgICAgICAtIHNjaGVkdWxlIGRpZG4ndCBvY2N1ciB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICovCi1zdGF0aWMgaW50IGdldF9mYXJfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwKLQkJCSAgaW50IG5faCwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcHBfc19mYXRoZXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBwX3NfY29tX2ZhdGhlciwgY2hhciBjX2xyX3BhcikKK3N0YXRpYyBpbnQgZ2V0X2Zhcl9wYXJlbnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJCQkgIGludCBoLAorCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwZmF0aGVyLAorCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwY29tX2ZhdGhlciwgY2hhciBjX2xyX3BhcikKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19wYXJlbnQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnQ7CiAJSU5JVElBTElaRV9QQVRIKHNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOwotCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7CisJc3RydWN0IHRyZWVwYXRoICpwYXRoID0gdGItPnRiX3BhdGg7CiAJc3RydWN0IGNwdV9rZXkgc19scl9mYXRoZXJfa2V5OwotCWludCBuX2NvdW50ZXIsCi0JICAgIG5fcG9zaXRpb24gPSBJTlRfTUFYLAotCSAgICBuX2ZpcnN0X2xhc3RfcG9zaXRpb24gPSAwLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc19wYXRoLCBuX2gpOworCWludCBjb3VudGVyLAorCSAgICBwb3NpdGlvbiA9IElOVF9NQVgsCisJICAgIGZpcnN0X2xhc3RfcG9zaXRpb24gPSAwLAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwYXRoLCBoKTsKIAotCS8qIFN0YXJ0aW5nIGZyb20gRltuX2hdIGdvIHVwd2FyZHMgaW4gdGhlIHRyZWUsIGFuZCBsb29rIGZvciB0aGUgY29tbW9uCi0JICAgYW5jZXN0b3Igb2YgRltuX2hdLCBhbmQgaXRzIG5laWdoYm9yIGwvciwgdGhhdCBzaG91bGQgYmUgb2J0YWluZWQuICovCisJLyogU3RhcnRpbmcgZnJvbSBGW2hdIGdvIHVwd2FyZHMgaW4gdGhlIHRyZWUsIGFuZCBsb29rIGZvciB0aGUgY29tbW9uCisJICAgYW5jZXN0b3Igb2YgRltoXSwgYW5kIGl0cyBuZWlnaGJvciBsL3IsIHRoYXQgc2hvdWxkIGJlIG9idGFpbmVkLiAqLwogCi0Jbl9jb3VudGVyID0gbl9wYXRoX29mZnNldDsKKwljb3VudGVyID0gcGF0aF9vZmZzZXQ7CiAKLQlSRkFMU0Uobl9jb3VudGVyIDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UoY291bnRlciA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCiAJICAgICAgICJQQVAtODE4MDogaW52YWxpZCBwYXRoIGxlbmd0aCIpOwogCi0JZm9yICg7IG5fY291bnRlciA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQ7IG5fY291bnRlci0tKSB7CisJZm9yICg7IGNvdW50ZXIgPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUOyBjb3VudGVyLS0pIHsKIAkJLyogQ2hlY2sgd2hldGhlciBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGluIHRoZSBwYXRoIGlzIHJlYWxseSBwYXJlbnQgaW4gdGhlIHRyZWUuICovCiAJCWlmICghQl9JU19JTl9UUkVFCi0JCSAgICAocF9zX3BhcmVudCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fY291bnRlciAtIDEpKSkKKwkJICAgIChwYXJlbnQgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIGNvdW50ZXIgLSAxKSkpCiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJLyogQ2hlY2sgd2hldGhlciBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIGNvcnJlY3QuICovCi0JCWlmICgobl9wb3NpdGlvbiA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsCi0JCQkJCSAgbl9jb3VudGVyIC0gMSkpID4KLQkJICAgIEJfTlJfSVRFTVMocF9zX3BhcmVudCkpCisJCWlmICgocG9zaXRpb24gPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsCisJCQkJCSAgY291bnRlciAtIDEpKSA+CisJCSAgICBCX05SX0lURU1TKHBhcmVudCkpCiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJLyogQ2hlY2sgd2hldGhlciBwYXJlbnQgYXQgdGhlIHBhdGggcmVhbGx5IHBvaW50cyB0byB0aGUgY2hpbGQuICovCi0JCWlmIChCX05fQ0hJTERfTlVNKHBfc19wYXJlbnQsIG5fcG9zaXRpb24pICE9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX2NvdW50ZXIpLT5iX2Jsb2NrbnIpCisJCWlmIChCX05fQ0hJTERfTlVNKHBhcmVudCwgcG9zaXRpb24pICE9CisJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIGNvdW50ZXIpLT5iX2Jsb2NrbnIpCiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJLyogUmV0dXJuIGRlbGltaXRpbmcga2V5IGlmIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgbm90IGVxdWFsIHRvIGZpcnN0L2xhc3Qgb25lLiAqLwogCQlpZiAoY19scl9wYXIgPT0gUklHSFRfUEFSRU5UUykKLQkJCW5fZmlyc3RfbGFzdF9wb3NpdGlvbiA9IEJfTlJfSVRFTVMocF9zX3BhcmVudCk7Ci0JCWlmIChuX3Bvc2l0aW9uICE9IG5fZmlyc3RfbGFzdF9wb3NpdGlvbikgewotCQkJKnBwX3NfY29tX2ZhdGhlciA9IHBfc19wYXJlbnQ7Ci0JCQlnZXRfYmgoKnBwX3NfY29tX2ZhdGhlcik7Ci0JCQkvKigqcHBfc19jb21fZmF0aGVyID0gcF9zX3BhcmVudCktPmJfY291bnQrKzsgKi8KKwkJCWZpcnN0X2xhc3RfcG9zaXRpb24gPSBCX05SX0lURU1TKHBhcmVudCk7CisJCWlmIChwb3NpdGlvbiAhPSBmaXJzdF9sYXN0X3Bvc2l0aW9uKSB7CisJCQkqcGNvbV9mYXRoZXIgPSBwYXJlbnQ7CisJCQlnZXRfYmgoKnBjb21fZmF0aGVyKTsKKwkJCS8qKCpwY29tX2ZhdGhlciA9IHBhcmVudCktPmJfY291bnQrKzsgKi8KIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJLyogaWYgd2UgYXJlIGluIHRoZSByb290IG9mIHRoZSB0cmVlLCB0aGVuIHRoZXJlIGlzIG5vIGNvbW1vbiBmYXRoZXIgKi8KLQlpZiAobl9jb3VudGVyID09IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwlpZiAoY291bnRlciA9PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAJCS8qIENoZWNrIHdoZXRoZXIgZmlyc3QgYnVmZmVyIGluIHRoZSBwYXRoIGlzIHRoZSByb290IG9mIHRoZSB0cmVlLiAqLwogCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUgotCQkgICAgKHBfc190Yi0+dGJfcGF0aCwKKwkJICAgICh0Yi0+dGJfcGF0aCwKIAkJICAgICBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+Yl9ibG9ja25yID09Ci0JCSAgICBTQl9ST09UX0JMT0NLKHBfc190Yi0+dGJfc2IpKSB7Ci0JCQkqcHBfc19mYXRoZXIgPSAqcHBfc19jb21fZmF0aGVyID0gTlVMTDsKKwkJICAgIFNCX1JPT1RfQkxPQ0sodGItPnRiX3NiKSkgeworCQkJKnBmYXRoZXIgPSAqcGNvbV9mYXRoZXIgPSBOVUxMOwogCQkJcmV0dXJuIENBUlJZX09OOwogCQl9CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KIAotCVJGQUxTRShCX0xFVkVMKCpwcF9zX2NvbV9mYXRoZXIpIDw9IERJU0tfTEVBRl9OT0RFX0xFVkVMLAorCVJGQUxTRShCX0xFVkVMKCpwY29tX2ZhdGhlcikgPD0gRElTS19MRUFGX05PREVfTEVWRUwsCiAJICAgICAgICJQQVAtODE4NTogKCViICV6KSBsZXZlbCB0b28gc21hbGwiLAotCSAgICAgICAqcHBfc19jb21fZmF0aGVyLCAqcHBfc19jb21fZmF0aGVyKTsKKwkgICAgICAgKnBjb21fZmF0aGVyLCAqcGNvbV9mYXRoZXIpOwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGUgY29tbW9uIHBhcmVudCBpcyBsb2NrZWQuICovCiAKLQlpZiAoYnVmZmVyX2xvY2tlZCgqcHBfc19jb21fZmF0aGVyKSkgewotCQlfX3dhaXRfb25fYnVmZmVyKCpwcF9zX2NvbV9mYXRoZXIpOwotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKLQkJCWRlY3JlbWVudF9iY291bnQoKnBwX3NfY29tX2ZhdGhlcik7CisJaWYgKGJ1ZmZlcl9sb2NrZWQoKnBjb21fZmF0aGVyKSkgeworCQlfX3dhaXRfb25fYnVmZmVyKCpwY29tX2ZhdGhlcik7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7CisJCQlicmVsc2UoKnBjb21fZmF0aGVyKTsKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQl9CiAJfQpAQCAtMTAzMiwxMjggKzEwMzQsMTMxIEBACiAKIAkvKiBGb3JtIGtleSB0byBnZXQgcGFyZW50IG9mIHRoZSBsZWZ0L3JpZ2h0IG5laWdoYm9yLiAqLwogCWxlX2tleTJjcHVfa2V5KCZzX2xyX2ZhdGhlcl9rZXksCi0JCSAgICAgICBCX05fUERFTElNX0tFWSgqcHBfc19jb21fZmF0aGVyLAorCQkgICAgICAgQl9OX1BERUxJTV9LRVkoKnBjb21fZmF0aGVyLAogCQkJCSAgICAgIChjX2xyX3BhciA9PQotCQkJCSAgICAgICBMRUZUX1BBUkVOVFMpID8gKHBfc190Yi0+bGtleVtuX2ggLSAxXSA9Ci0JCQkJCQkJbl9wb3NpdGlvbiAtCi0JCQkJCQkJMSkgOiAocF9zX3RiLT5ya2V5W25faCAtCisJCQkJICAgICAgIExFRlRfUEFSRU5UUykgPyAodGItPmxrZXlbaCAtIDFdID0KKwkJCQkJCQlwb3NpdGlvbiAtCisJCQkJCQkJMSkgOiAodGItPnJrZXlbaCAtCiAJCQkJCQkJCQkgICAxXSA9Ci0JCQkJCQkJICAgICAgbl9wb3NpdGlvbikpKTsKKwkJCQkJCQkgICAgICBwb3NpdGlvbikpKTsKIAogCWlmIChjX2xyX3BhciA9PSBMRUZUX1BBUkVOVFMpCiAJCWRlY3JlbWVudF9rZXkoJnNfbHJfZmF0aGVyX2tleSk7CiAKIAlpZiAoc2VhcmNoX2J5X2tleQotCSAgICAocF9zX3RiLT50Yl9zYiwgJnNfbHJfZmF0aGVyX2tleSwgJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIsCi0JICAgICBuX2ggKyAxKSA9PSBJT19FUlJPUikKKwkgICAgKHRiLT50Yl9zYiwgJnNfbHJfZmF0aGVyX2tleSwgJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIsCisJICAgICBoICsgMSkgPT0gSU9fRVJST1IpCiAJCS8vIHBhdGggaXMgcmVsZWFzZWQKIAkJcmV0dXJuIElPX0VSUk9SOwogCi0JaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7Ci0JCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKLQkJZGVjcmVtZW50X2Jjb3VudCgqcHBfc19jb21fZmF0aGVyKTsKKwlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgeworCQlwYXRocmVsc2UoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOworCQlicmVsc2UoKnBjb21fZmF0aGVyKTsKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJfQogCi0JKnBwX3NfZmF0aGVyID0gUEFUSF9QTEFTVF9CVUZGRVIoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOworCSpwZmF0aGVyID0gUEFUSF9QTEFTVF9CVUZGRVIoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOwogCi0JUkZBTFNFKEJfTEVWRUwoKnBwX3NfZmF0aGVyKSAhPSBuX2ggKyAxLAotCSAgICAgICAiUEFQLTgxOTA6ICglYiAleikgbGV2ZWwgdG9vIHNtYWxsIiwgKnBwX3NfZmF0aGVyLCAqcHBfc19mYXRoZXIpOworCVJGQUxTRShCX0xFVkVMKCpwZmF0aGVyKSAhPSBoICsgMSwKKwkgICAgICAgIlBBUC04MTkwOiAoJWIgJXopIGxldmVsIHRvbyBzbWFsbCIsICpwZmF0aGVyLCAqcGZhdGhlcik7CiAJUkZBTFNFKHNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIucGF0aF9sZW5ndGggPAogCSAgICAgICBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULCAiUEFQLTgxOTI6IHBhdGggbGVuZ3RoIGlzIHRvbyBzbWFsbCIpOwogCiAJc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlci5wYXRoX2xlbmd0aC0tOwotCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKKwlwYXRocmVsc2UoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOwogCXJldHVybiBDQVJSWV9PTjsKIH0KIAotLyogR2V0IHBhcmVudHMgb2YgbmVpZ2hib3JzIG9mIG5vZGUgaW4gdGhlIHBhdGgoU1tuX3BhdGhfb2Zmc2V0XSkgYW5kIGNvbW1vbiBwYXJlbnRzIG9mCi0gKiBTW25fcGF0aF9vZmZzZXRdIGFuZCBMW25fcGF0aF9vZmZzZXRdL1Jbbl9wYXRoX29mZnNldF06IEZbbl9wYXRoX29mZnNldF0sIEZMW25fcGF0aF9vZmZzZXRdLAotICogRlJbbl9wYXRoX29mZnNldF0sIENGTFtuX3BhdGhfb2Zmc2V0XSwgQ0ZSW25fcGF0aF9vZmZzZXRdLgotICogQ2FsY3VsYXRlIG51bWJlcnMgb2YgbGVmdCBhbmQgcmlnaHQgZGVsaW1pdGluZyBrZXlzIHBvc2l0aW9uOiBsa2V5W25fcGF0aF9vZmZzZXRdLCBya2V5W25fcGF0aF9vZmZzZXRdLgorLyogR2V0IHBhcmVudHMgb2YgbmVpZ2hib3JzIG9mIG5vZGUgaW4gdGhlIHBhdGgoU1twYXRoX29mZnNldF0pIGFuZCBjb21tb24gcGFyZW50cyBvZgorICogU1twYXRoX29mZnNldF0gYW5kIExbcGF0aF9vZmZzZXRdL1JbcGF0aF9vZmZzZXRdOiBGW3BhdGhfb2Zmc2V0XSwgRkxbcGF0aF9vZmZzZXRdLAorICogRlJbcGF0aF9vZmZzZXRdLCBDRkxbcGF0aF9vZmZzZXRdLCBDRlJbcGF0aF9vZmZzZXRdLgorICogQ2FsY3VsYXRlIG51bWJlcnMgb2YgbGVmdCBhbmQgcmlnaHQgZGVsaW1pdGluZyBrZXlzIHBvc2l0aW9uOiBsa2V5W3BhdGhfb2Zmc2V0XSwgcmtleVtwYXRoX29mZnNldF0uCiAgKiBSZXR1cm5zOglTQ0hFRFVMRV9PQ0NVUlJFRCAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIENBUlJZX09OIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKi8KLXN0YXRpYyBpbnQgZ2V0X3BhcmVudHMoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBpbnQgbl9oKQorc3RhdGljIGludCBnZXRfcGFyZW50cyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0Jc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCA9IHBfc190Yi0+dGJfcGF0aDsKLQlpbnQgbl9wb3NpdGlvbiwKLQkgICAgbl9yZXRfdmFsdWUsCi0JICAgIG5fcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3RiLT50Yl9wYXRoLCBuX2gpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2N1cmYsICpwX3NfY3VyY2Y7CisJc3RydWN0IHRyZWVwYXRoICpwYXRoID0gdGItPnRiX3BhdGg7CisJaW50IHBvc2l0aW9uLAorCSAgICByZXQsCisJICAgIHBhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHRiLT50Yl9wYXRoLCBoKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmN1cmYsICpjdXJjZjsKIAogCS8qIEN1cnJlbnQgbm9kZSBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSBvciB3aWxsIGJlIHJvb3Qgb2YgdGhlIHRyZWUgKi8KLQlpZiAobl9wYXRoX29mZnNldCA8PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJaWYgKHBhdGhfb2Zmc2V0IDw9IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKIAkJLyogVGhlIHJvb3QgY2FuIG5vdCBoYXZlIHBhcmVudHMuCiAJCSAgIFJlbGVhc2Ugbm9kZXMgd2hpY2ggcHJldmlvdXNseSB3ZXJlIG9idGFpbmVkIGFzIHBhcmVudHMgb2YgdGhlIGN1cnJlbnQgbm9kZSBuZWlnaGJvcnMuICovCi0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GTFtuX2hdKTsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGTFtuX2hdKTsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZSW25faF0pOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZSW25faF0pOwotCQlwX3NfdGItPkZMW25faF0gPSBwX3NfdGItPkNGTFtuX2hdID0gcF9zX3RiLT5GUltuX2hdID0KLQkJICAgIHBfc190Yi0+Q0ZSW25faF0gPSBOVUxMOworCQlicmVsc2UodGItPkZMW2hdKTsKKwkJYnJlbHNlKHRiLT5DRkxbaF0pOworCQlicmVsc2UodGItPkZSW2hdKTsKKwkJYnJlbHNlKHRiLT5DRlJbaF0pOworCQl0Yi0+RkxbaF0gID0gTlVMTDsKKwkJdGItPkNGTFtoXSA9IE5VTEw7CisJCXRiLT5GUltoXSAgPSBOVUxMOworCQl0Yi0+Q0ZSW2hdID0gTlVMTDsKIAkJcmV0dXJuIENBUlJZX09OOwogCX0KIAotCS8qIEdldCBwYXJlbnQgRkxbbl9wYXRoX29mZnNldF0gb2YgTFtuX3BhdGhfb2Zmc2V0XS4gKi8KLQlpZiAoKG5fcG9zaXRpb24gPSBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpKSkgeworCS8qIEdldCBwYXJlbnQgRkxbcGF0aF9vZmZzZXRdIG9mIExbcGF0aF9vZmZzZXRdLiAqLworCXBvc2l0aW9uID0gUEFUSF9PRkZTRVRfUE9TSVRJT04ocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwlpZiAocG9zaXRpb24pIHsKIAkJLyogQ3VycmVudCBub2RlIGlzIG5vdCB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudC4gKi8KLQkJLyoocF9zX2N1cmYgPSBwX3NfY3VyY2YgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkpLT5iX2NvdW50ICs9IDI7ICovCi0JCXBfc19jdXJmID0gcF9zX2N1cmNmID0KLQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKTsKLQkJZ2V0X2JoKHBfc19jdXJmKTsKLQkJZ2V0X2JoKHBfc19jdXJmKTsKLQkJcF9zX3RiLT5sa2V5W25faF0gPSBuX3Bvc2l0aW9uIC0gMTsKKwkJY3VyZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwkJY3VyY2YgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWdldF9iaChjdXJmKTsKKwkJZ2V0X2JoKGN1cmYpOworCQl0Yi0+bGtleVtoXSA9IHBvc2l0aW9uIC0gMTsKIAl9IGVsc2UgewotCQkvKiBDYWxjdWxhdGUgY3VycmVudCBwYXJlbnQgb2YgTFtuX3BhdGhfb2Zmc2V0XSwgd2hpY2ggaXMgdGhlIGxlZnQgbmVpZ2hib3Igb2YgdGhlIGN1cnJlbnQgbm9kZS4KLQkJICAgQ2FsY3VsYXRlIGN1cnJlbnQgY29tbW9uIHBhcmVudCBvZiBMW25fcGF0aF9vZmZzZXRdIGFuZCB0aGUgY3VycmVudCBub2RlLiBOb3RlIHRoYXQKLQkJICAgQ0ZMW25fcGF0aF9vZmZzZXRdIG5vdCBlcXVhbCBGTFtuX3BhdGhfb2Zmc2V0XSBhbmQgQ0ZMW25fcGF0aF9vZmZzZXRdIG5vdCBlcXVhbCBGW25fcGF0aF9vZmZzZXRdLgotCQkgICBDYWxjdWxhdGUgbGtleVtuX3BhdGhfb2Zmc2V0XS4gKi8KLQkJaWYgKChuX3JldF92YWx1ZSA9IGdldF9mYXJfcGFyZW50KHBfc190Yiwgbl9oICsgMSwgJnBfc19jdXJmLAotCQkJCQkJICAmcF9zX2N1cmNmLAorCQkvKiBDYWxjdWxhdGUgY3VycmVudCBwYXJlbnQgb2YgTFtwYXRoX29mZnNldF0sIHdoaWNoIGlzIHRoZSBsZWZ0IG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IG5vZGUuCisJCSAgIENhbGN1bGF0ZSBjdXJyZW50IGNvbW1vbiBwYXJlbnQgb2YgTFtwYXRoX29mZnNldF0gYW5kIHRoZSBjdXJyZW50IG5vZGUuIE5vdGUgdGhhdAorCQkgICBDRkxbcGF0aF9vZmZzZXRdIG5vdCBlcXVhbCBGTFtwYXRoX29mZnNldF0gYW5kIENGTFtwYXRoX29mZnNldF0gbm90IGVxdWFsIEZbcGF0aF9vZmZzZXRdLgorCQkgICBDYWxjdWxhdGUgbGtleVtwYXRoX29mZnNldF0uICovCisJCWlmICgocmV0ID0gZ2V0X2Zhcl9wYXJlbnQodGIsIGggKyAxLCAmY3VyZiwKKwkJCQkJCSAgJmN1cmNmLAogCQkJCQkJICBMRUZUX1BBUkVOVFMpKSAhPSBDQVJSWV9PTikKLQkJCXJldHVybiBuX3JldF92YWx1ZTsKKwkJCXJldHVybiByZXQ7CiAJfQogCi0JZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZMW25faF0pOwotCXBfc190Yi0+Rkxbbl9oXSA9IHBfc19jdXJmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgRkxbbl9oXS4gKi8KLQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZMW25faF0pOwotCXBfc190Yi0+Q0ZMW25faF0gPSBwX3NfY3VyY2Y7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBDRkxbbl9oXS4gKi8KKwlicmVsc2UodGItPkZMW2hdKTsKKwl0Yi0+RkxbaF0gPSBjdXJmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgRkxbaF0uICovCisJYnJlbHNlKHRiLT5DRkxbaF0pOworCXRiLT5DRkxbaF0gPSBjdXJjZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGTFtoXS4gKi8KIAotCVJGQUxTRSgocF9zX2N1cmYgJiYgIUJfSVNfSU5fVFJFRShwX3NfY3VyZikpIHx8Ci0JICAgICAgIChwX3NfY3VyY2YgJiYgIUJfSVNfSU5fVFJFRShwX3NfY3VyY2YpKSwKLQkgICAgICAgIlBBUC04MTk1OiBGTCAoJWIpIG9yIENGTCAoJWIpIGlzIGludmFsaWQiLCBwX3NfY3VyZiwgcF9zX2N1cmNmKTsKKwlSRkFMU0UoKGN1cmYgJiYgIUJfSVNfSU5fVFJFRShjdXJmKSkgfHwKKwkgICAgICAgKGN1cmNmICYmICFCX0lTX0lOX1RSRUUoY3VyY2YpKSwKKwkgICAgICAgIlBBUC04MTk1OiBGTCAoJWIpIG9yIENGTCAoJWIpIGlzIGludmFsaWQiLCBjdXJmLCBjdXJjZik7CiAKLS8qIEdldCBwYXJlbnQgRlJbbl9oXSBvZiBSW25faF0uICovCisvKiBHZXQgcGFyZW50IEZSW2hdIG9mIFJbaF0uICovCiAKLS8qIEN1cnJlbnQgbm9kZSBpcyB0aGUgbGFzdCBjaGlsZCBvZiBGW25faF0uIEZSW25faF0gIT0gRltuX2hdLiAqLwotCWlmIChuX3Bvc2l0aW9uID09IEJfTlJfSVRFTVMoUEFUSF9IX1BCVUZGRVIocF9zX3BhdGgsIG5faCArIDEpKSkgewotLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIFJbbl9oXSwgd2hpY2ggaXMgdGhlIHJpZ2h0IG5laWdoYm9yIG9mIEZbbl9oXS4KLSAgIENhbGN1bGF0ZSBjdXJyZW50IGNvbW1vbiBwYXJlbnQgb2YgUltuX2hdIGFuZCBjdXJyZW50IG5vZGUuIE5vdGUgdGhhdCBDRlJbbl9oXQotICAgbm90IGVxdWFsIEZSW25fcGF0aF9vZmZzZXRdIGFuZCBDRlJbbl9oXSBub3QgZXF1YWwgRltuX2hdLiAqLwotCQlpZiAoKG5fcmV0X3ZhbHVlID0KLQkJICAgICBnZXRfZmFyX3BhcmVudChwX3NfdGIsIG5faCArIDEsICZwX3NfY3VyZiwgJnBfc19jdXJjZiwKKy8qIEN1cnJlbnQgbm9kZSBpcyB0aGUgbGFzdCBjaGlsZCBvZiBGW2hdLiBGUltoXSAhPSBGW2hdLiAqLworCWlmIChwb3NpdGlvbiA9PSBCX05SX0lURU1TKFBBVEhfSF9QQlVGRkVSKHBhdGgsIGggKyAxKSkpIHsKKy8qIENhbGN1bGF0ZSBjdXJyZW50IHBhcmVudCBvZiBSW2hdLCB3aGljaCBpcyB0aGUgcmlnaHQgbmVpZ2hib3Igb2YgRltoXS4KKyAgIENhbGN1bGF0ZSBjdXJyZW50IGNvbW1vbiBwYXJlbnQgb2YgUltoXSBhbmQgY3VycmVudCBub2RlLiBOb3RlIHRoYXQgQ0ZSW2hdCisgICBub3QgZXF1YWwgRlJbcGF0aF9vZmZzZXRdIGFuZCBDRlJbaF0gbm90IGVxdWFsIEZbaF0uICovCisJCWlmICgocmV0ID0KKwkJICAgICBnZXRfZmFyX3BhcmVudCh0YiwgaCArIDEsICZjdXJmLCAmY3VyY2YsCiAJCQkJICAgIFJJR0hUX1BBUkVOVFMpKSAhPSBDQVJSWV9PTikKLQkJCXJldHVybiBuX3JldF92YWx1ZTsKKwkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKLS8qIEN1cnJlbnQgbm9kZSBpcyBub3QgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBGW25faF0uICovCi0JCS8qKHBfc19jdXJmID0gcF9zX2N1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpKS0+Yl9jb3VudCArPSAyOyAqLwotCQlwX3NfY3VyZiA9IHBfc19jdXJjZiA9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSk7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCXBfc190Yi0+cmtleVtuX2hdID0gbl9wb3NpdGlvbjsKKy8qIEN1cnJlbnQgbm9kZSBpcyBub3QgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBGW2hdLiAqLworCQljdXJmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCQljdXJjZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwkJZ2V0X2JoKGN1cmYpOworCQlnZXRfYmgoY3VyZik7CisJCXRiLT5ya2V5W2hdID0gcG9zaXRpb247CiAJfQogCi0JZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZSW25faF0pOwotCXBfc190Yi0+RlJbbl9oXSA9IHBfc19jdXJmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgRlJbbl9wYXRoX29mZnNldF0uICovCisJYnJlbHNlKHRiLT5GUltoXSk7CisJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZSW3BhdGhfb2Zmc2V0XS4gKi8KKwl0Yi0+RlJbaF0gPSBjdXJmOwogCi0JZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGUltuX2hdKTsKLQlwX3NfdGItPkNGUltuX2hdID0gcF9zX2N1cmNmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgQ0ZSW25fcGF0aF9vZmZzZXRdLiAqLworCWJyZWxzZSh0Yi0+Q0ZSW2hdKTsKKwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgQ0ZSW3BhdGhfb2Zmc2V0XS4gKi8KKwl0Yi0+Q0ZSW2hdID0gY3VyY2Y7CiAKLQlSRkFMU0UoKHBfc19jdXJmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmYpKSB8fAotCSAgICAgICAocF9zX2N1cmNmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmNmKSksCi0JICAgICAgICJQQVAtODIwNTogRlIgKCViKSBvciBDRlIgKCViKSBpcyBpbnZhbGlkIiwgcF9zX2N1cmYsIHBfc19jdXJjZik7CisJUkZBTFNFKChjdXJmICYmICFCX0lTX0lOX1RSRUUoY3VyZikpIHx8CisJICAgICAgIChjdXJjZiAmJiAhQl9JU19JTl9UUkVFKGN1cmNmKSksCisJICAgICAgICJQQVAtODIwNTogRlIgKCViKSBvciBDRlIgKCViKSBpcyBpbnZhbGlkIiwgY3VyZiwgY3VyY2YpOwogCiAJcmV0dXJuIENBUlJZX09OOwogfQpAQCAtMTIwMyw3ICsxMjA4LDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJaSAtIGluc2VydCwgcCAtIHBhc3RlOwotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTEyMTcsNyArMTIyMiw3IEBACiAJCQkJICAgY29udGFpbnMgbm9kZSBiZWluZyBiYWxhbmNlZC4gIFRoZSBtbmVtb25pYyBpcwogCQkJCSAgIHRoYXQgdGhlIGF0dGVtcHRlZCBjaGFuZ2UgaW4gbm9kZSBzcGFjZSB1c2VkIGxldmVsCiAJCQkJICAgaXMgbGV2Ynl0ZXMgYnl0ZXMuICovCi0JIG5fcmV0X3ZhbHVlOworCSByZXQ7CiAKIAlpbnQgbGZyZWUsIHNmcmVlLCByZnJlZSAvKiBmcmVlIHNwYWNlIGluIEwsIFMgYW5kIFIgKi8gOwogCkBAIC0xMjM4LDcgKzEyNDMsNyBAQAogCS8qIHdlIHBlcmZvcm0gOCBjYWxscyB0byBnZXRfbnVtX3ZlcigpLiAgRm9yIGVhY2ggY2FsbCB3ZSBjYWxjdWxhdGUgZml2ZSBwYXJhbWV0ZXJzLgogCSAgIHdoZXJlIDR0aCBwYXJhbWV0ZXIgaXMgczFieXRlcyBhbmQgNXRoIC0gczJieXRlcwogCSAqLwotCXNob3J0IHNudW0wMTJbNDBdID0geyAwLCB9OwkvKiBzMG51bSwgczFudW0sIHMybnVtIGZvciA4IGNhc2VzIAorCXNob3J0IHNudW0wMTJbNDBdID0geyAwLCB9OwkvKiBzMG51bSwgczFudW0sIHMybnVtIGZvciA4IGNhc2VzCiAJCQkJCSAgIDAsMSAtIGRvIG5vdCBzaGlmdCBhbmQgZG8gbm90IHNoaWZ0IGJ1dCBib3R0bGUKIAkJCQkJICAgMiAtIHNoaWZ0IG9ubHkgd2hvbGUgaXRlbSB0byBsZWZ0CiAJCQkJCSAgIDMgLSBzaGlmdCB0byBsZWZ0IGFuZCBib3R0bGUgYXMgbXVjaCBhcyBwb3NzaWJsZQpAQCAtMTI1NSwyNCArMTI2MCwyNCBAQAogCS8qIENhbGN1bGF0ZSBiYWxhbmNlIHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIG5ldyByb290LiAqLwogCWlmICghU2gpIHsKIAkJaWYgKCFoKQotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAidnMtODIxMDogaXBfY2hlY2tfYmFsYW5jZTogU1swXSBjYW4gbm90IGJlIDAiKTsKLQkJc3dpdGNoIChuX3JldF92YWx1ZSA9IGdldF9lbXB0eV9ub2Rlcyh0YiwgaCkpIHsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTgyMTAiLAorCQkJCSAgICAgICAiU1swXSBjYW4gbm90IGJlIDAiKTsKKwkJc3dpdGNoIChyZXQgPSBnZXRfZW1wdHlfbm9kZXModGIsIGgpKSB7CiAJCWNhc2UgQ0FSUllfT046CiAJCQlzZXRfcGFyYW1ldGVycyh0YiwgaCwgMCwgMCwgMSwgTlVMTCwgLTEsIC0xKTsKIAkJCXJldHVybiBOT19CQUxBTkNJTkdfTkVFREVEOwkvKiBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkICovCiAKIAkJY2FzZSBOT19ESVNLX1NQQUNFOgogCQljYXNlIFJFUEVBVF9TRUFSQ0g6Ci0JCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQlyZXR1cm4gcmV0OwogCQlkZWZhdWx0OgotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAidnMtODIxNTogaXBfY2hlY2tfYmFsYW5jZTogaW5jb3JyZWN0IHJldHVybiB2YWx1ZSBvZiBnZXRfZW1wdHlfbm9kZXMiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTgyMTUiLCAiaW5jb3JyZWN0ICIKKwkJCQkgICAgICAgInJldHVybiB2YWx1ZSBvZiBnZXRfZW1wdHlfbm9kZXMiKTsKIAkJfQogCX0KIAotCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQkvKiBnZXQgcGFyZW50cyBvZiBTW2hdIG5laWdoYm9ycy4gKi8KLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCWlmICgocmV0ID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikJLyogZ2V0IHBhcmVudHMgb2YgU1toXSBuZWlnaGJvcnMuICovCisJCXJldHVybiByZXQ7CiAKIAlzZnJlZSA9IEJfRlJFRV9TUEFDRShTaCk7CiAKQEAgLTEyODcsNyArMTI5Miw3IEBACiAKIAljcmVhdGVfdmlydHVhbF9ub2RlKHRiLCBoKTsKIAotCS8qICAKKwkvKgogCSAgIGRldGVybWluZSBtYXhpbWFsIG51bWJlciBvZiBpdGVtcyB3ZSBjYW4gc2hpZnQgdG8gdGhlIGxlZnQgbmVpZ2hib3IgKGluIHRiIHN0cnVjdHVyZSkKIAkgICBhbmQgdGhlIG1heGltYWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGZsb3cgdG8gdGhlIGxlZnQgbmVpZ2hib3IKIAkgICBmcm9tIHRoZSBsZWZ0IG1vc3QgbGlxdWlkIGl0ZW0gdGhhdCBjYW5ub3QgYmUgc2hpZnRlZCBmcm9tIFNbMF0gZW50aXJlbHkgKHJldHVybmVkIHZhbHVlKQpAQCAtMTM0OCwxMyArMTM1MywxMyBAQAogCiAJewogCQlpbnQgbHBhciwgcnBhciwgbnNldCwgbHNldCwgcnNldCwgbHJzZXQ7Ci0JCS8qIAorCQkvKgogCQkgKiByZWd1bGFyIG92ZXJmbG93aW5nIG9mIHRoZSBub2RlCiAJCSAqLwogCi0JCS8qIGdldF9udW1fdmVyIHdvcmtzIGluIDIgbW9kZXMgKEZMT1cgJiBOT19GTE9XKSAKKwkJLyogZ2V0X251bV92ZXIgd29ya3MgaW4gMiBtb2RlcyAoRkxPVyAmIE5PX0ZMT1cpCiAJCSAgIGxwYXIsIHJwYXIgLSBudW1iZXIgb2YgaXRlbXMgd2UgY2FuIHNoaWZ0IHRvIGxlZnQvcmlnaHQgbmVpZ2hib3IgKGluY2x1ZGluZyBzcGxpdHRpbmcgaXRlbSkKLQkJICAgbnNldCwgbHNldCwgcnNldCwgbHJzZXQgLSBzaG93cywgd2hldGhlciBmbG93aW5nIGl0ZW1zIGdpdmUgYmV0dGVyIHBhY2tpbmcgCisJCSAgIG5zZXQsIGxzZXQsIHJzZXQsIGxyc2V0IC0gc2hvd3MsIHdoZXRoZXIgZmxvd2luZyBpdGVtcyBnaXZlIGJldHRlciBwYWNraW5nCiAJCSAqLwogI2RlZmluZSBGTE9XIDEKICNkZWZpbmUgTk9fRkxPVyAwCQkvKiBkbyBub3QgYW55IHNwbGl0dGluZyAqLwpAQCAtMTU0NCw3ICsxNTQ5LDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJaSAtIGluc2VydCwgcCAtIHBhc3RlOwotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTE1NTksNyArMTU2NCw3IEBACiAJLyogU2ggaXMgdGhlIG5vZGUgd2hvc2UgYmFsYW5jZSBpcyBjdXJyZW50bHkgYmVpbmcgY2hlY2tlZCwKIAkgICBhbmQgRmggaXMgaXRzIGZhdGhlci4gICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpTaCwgKkZoOwotCWludCBtYXhzaXplLCBuX3JldF92YWx1ZTsKKwlpbnQgbWF4c2l6ZSwgcmV0OwogCWludCBsZnJlZSwgcmZyZWUgLyogZnJlZSBzcGFjZSBpbiBMIGFuZCBSICovIDsKIAogCVNoID0gUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGgpOwpAQCAtMTU4NCw4ICsxNTg5LDggQEAKIAkJcmV0dXJuIENBUlJZX09OOwogCX0KIAotCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQotCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJaWYgKChyZXQgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQorCQlyZXR1cm4gcmV0OwogCiAJLyogZ2V0IGZyZWUgc3BhY2Ugb2YgbmVpZ2hib3JzICovCiAJcmZyZWUgPSBnZXRfcmZyZWUodGIsIGgpOwpAQCAtMTcyNyw3ICsxNzMyLDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJaSAtIGluc2VydCwgcCAtIHBhc3RlOwotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTE3NDIsNyArMTc0Nyw3IEBACiAJICAgYXR0ZW1wdGVkIGNoYW5nZSBpbiBub2RlIHNwYWNlIHVzZWQgbGV2ZWwgaXMgbGV2Ynl0ZXMgYnl0ZXMuICovCiAJaW50IGxldmJ5dGVzOwogCS8qIHRoZSBtYXhpbWFsIGl0ZW0gc2l6ZSAqLwotCWludCBtYXhzaXplLCBuX3JldF92YWx1ZTsKKwlpbnQgbWF4c2l6ZSwgcmV0OwogCS8qIFMwIGlzIHRoZSBub2RlIHdob3NlIGJhbGFuY2UgaXMgY3VycmVudGx5IGJlaW5nIGNoZWNrZWQsCiAJICAgYW5kIEYwIGlzIGl0cyBmYXRoZXIuICAqLwogCXN0cnVjdCBidWZmZXJfaGVhZCAqUzAsICpGMDsKQEAgLTE3NjQsOCArMTc2OSw4IEBACiAJCXJldHVybiBOT19CQUxBTkNJTkdfTkVFREVEOwogCX0KIAotCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQotCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJaWYgKChyZXQgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQorCQlyZXR1cm4gcmV0OwogCiAJLyogZ2V0IGZyZWUgc3BhY2Ugb2YgbmVpZ2hib3JzICovCiAJcmZyZWUgPSBnZXRfcmZyZWUodGIsIGgpOwpAQCAtMTgyMSw3ICsxODI2LDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJZCAtIGRlbGV0ZSwgYyAtIGN1dC4KLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xODUwLDcgKzE4NTUsNyBAQAogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICoJbW9kZQlpIC0gaW5zZXJ0LCBwIC0gcGFzdGUsIGQgLSBkZWxldGUsIGMgLSBjdXQuCi0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTg4NCwxMzcgKzE4ODksMTM4IEBACiB9CiAKIC8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIGlzIHRoZSByZWFsbHkgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUuKi8KLXN0YXRpYyBpbnQgZ2V0X2RpcmVjdF9wYXJlbnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBpbnQgbl9oKQorc3RhdGljIGludCBnZXRfZGlyZWN0X3BhcmVudChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7Ci0Jc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCA9IHBfc190Yi0+dGJfcGF0aDsKLQlpbnQgbl9wb3NpdGlvbiwKLQkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfdGItPnRiX3BhdGgsIG5faCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3QgdHJlZXBhdGggKnBhdGggPSB0Yi0+dGJfcGF0aDsKKwlpbnQgcG9zaXRpb24sCisJICAgIHBhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHRiLT50Yl9wYXRoLCBoKTsKIAogCS8qIFdlIGFyZSBpbiB0aGUgcm9vdCBvciBpbiB0aGUgbmV3IHJvb3QuICovCi0JaWYgKG5fcGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCWlmIChwYXRoX29mZnNldCA8PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAKLQkJUkZBTFNFKG5fcGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUIC0gMSwKKwkJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCAtIDEsCiAJCSAgICAgICAiUEFQLTgyNjA6IGludmFsaWQgb2Zmc2V0IGluIHRoZSBwYXRoIik7CiAKLQkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KLQkJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHBfc190Yi0+dGJfc2IpKSB7CisJCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KKwkJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHRiLT50Yl9zYikpIHsKIAkJCS8qIFJvb3QgaXMgbm90IGNoYW5nZWQuICovCi0JCQlQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkgPSBOVUxMOwotCQkJUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSA9IDA7CisJCQlQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSkgPSBOVUxMOworCQkJUEFUSF9PRkZTRVRfUE9TSVRJT04ocGF0aCwgcGF0aF9vZmZzZXQgLSAxKSA9IDA7CiAJCQlyZXR1cm4gQ0FSUllfT047CiAJCX0KIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CS8qIFJvb3QgaXMgY2hhbmdlZCBhbmQgd2UgbXVzdCByZWNhbGN1bGF0ZSB0aGUgcGF0aC4gKi8KIAl9CiAKIAlpZiAoIUJfSVNfSU5fVFJFRQotCSAgICAocF9zX2JoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpKSkKKwkgICAgKGJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpKSkKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CS8qIFBhcmVudCBpbiB0aGUgcGF0aCBpcyBub3QgaW4gdGhlIHRyZWUuICovCiAKLQlpZiAoKG5fcG9zaXRpb24gPQotCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsCi0JCQkJICBuX3BhdGhfb2Zmc2V0IC0gMSkpID4gQl9OUl9JVEVNUyhwX3NfYmgpKQorCWlmICgocG9zaXRpb24gPQorCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocGF0aCwKKwkJCQkgIHBhdGhfb2Zmc2V0IC0gMSkpID4gQl9OUl9JVEVNUyhiaCkpCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCi0JaWYgKEJfTl9DSElMRF9OVU0ocF9zX2JoLCBuX3Bvc2l0aW9uKSAhPQotCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0KS0+Yl9ibG9ja25yKQorCWlmIChCX05fQ0hJTERfTlVNKGJoLCBwb3NpdGlvbikgIT0KKwkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCktPmJfYmxvY2tucikKIAkJLyogUGFyZW50IGluIHRoZSBwYXRoIGlzIG5vdCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBpbiB0aGUgdHJlZS4gKi8KIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAKLQlpZiAoYnVmZmVyX2xvY2tlZChwX3NfYmgpKSB7Ci0JCV9fd2FpdF9vbl9idWZmZXIocF9zX2JoKTsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKQorCWlmIChidWZmZXJfbG9ja2VkKGJoKSkgeworCQlfX3dhaXRfb25fYnVmZmVyKGJoKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAl9CiAKIAlyZXR1cm4gQ0FSUllfT047CS8qIFBhcmVudCBpbiB0aGUgcGF0aCBpcyB1bmxvY2tlZCBhbmQgcmVhbGx5IHBhcmVudCBvZiB0aGUgY3VycmVudCBub2RlLiAgKi8KIH0KIAotLyogVXNpbmcgbG51bVtuX2hdIGFuZCBybnVtW25faF0gd2Ugc2hvdWxkIGRldGVybWluZSB3aGF0IG5laWdoYm9ycwotICogb2YgU1tuX2hdIHdlCi0gKiBuZWVkIGluIG9yZGVyIHRvIGJhbGFuY2UgU1tuX2hdLCBhbmQgZ2V0IHRoZW0gaWYgbmVjZXNzYXJ5LgorLyogVXNpbmcgbG51bVtoXSBhbmQgcm51bVtoXSB3ZSBzaG91bGQgZGV0ZXJtaW5lIHdoYXQgbmVpZ2hib3JzCisgKiBvZiBTW2hdIHdlCisgKiBuZWVkIGluIG9yZGVyIHRvIGJhbGFuY2UgU1toXSwgYW5kIGdldCB0aGVtIGlmIG5lY2Vzc2FyeS4KICAqIFJldHVybnM6CVNDSEVEVUxFX09DQ1VSUkVEIC0gc2NoZWR1bGUgb2NjdXJyZWQgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqCSAgICAgICAgQ0FSUllfT04gLSBzY2hlZHVsZSBkaWRuJ3Qgb2NjdXIgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqLwotc3RhdGljIGludCBnZXRfbmVpZ2hib3JzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X25laWdoYm9ycyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0JaW50IG5fY2hpbGRfcG9zaXRpb24sCi0JICAgIG5fcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3RiLT50Yl9wYXRoLCBuX2ggKyAxKTsKLQl1bnNpZ25lZCBsb25nIG5fc29uX251bWJlcjsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc190Yi0+dGJfc2I7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7CisJaW50IGNoaWxkX3Bvc2l0aW9uLAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwgaCArIDEpOworCXVuc2lnbmVkIGxvbmcgc29uX251bWJlcjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdGItPnRiX3NiOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgZ2V0X25laWdoYm9yc1tuX2hdKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBnZXRfbmVpZ2hib3JzW2hdKTsKIAotCWlmIChwX3NfdGItPmxudW1bbl9oXSkgewotCQkvKiBXZSBuZWVkIGxlZnQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW25faF0uICovCi0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBuZWVkX2xfbmVpZ2hib3Jbbl9oXSk7Ci0JCXBfc19iaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX3BhdGhfb2Zmc2V0KTsKKwlpZiAodGItPmxudW1baF0pIHsKKwkJLyogV2UgbmVlZCBsZWZ0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1toXS4gKi8KKwkJUFJPQ19JTkZPX0lOQyhzYiwgbmVlZF9sX25laWdoYm9yW2hdKTsKKwkJYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBwYXRoX29mZnNldCk7CiAKLQkJUkZBTFNFKHBfc19iaCA9PSBwX3NfdGItPkZMW25faF0gJiYKLQkJICAgICAgICFQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfdGItPnRiX3BhdGgsIG5fcGF0aF9vZmZzZXQpLAorCQlSRkFMU0UoYmggPT0gdGItPkZMW2hdICYmCisJCSAgICAgICAhUEFUSF9PRkZTRVRfUE9TSVRJT04odGItPnRiX3BhdGgsIHBhdGhfb2Zmc2V0KSwKIAkJICAgICAgICJQQVAtODI3MDogaW52YWxpZCBwb3NpdGlvbiBpbiB0aGUgcGFyZW50Iik7CiAKLQkJbl9jaGlsZF9wb3NpdGlvbiA9Ci0JCSAgICAocF9zX2JoID09Ci0JCSAgICAgcF9zX3RiLT5GTFtuX2hdKSA/IHBfc190Yi0+bGtleVtuX2hdIDogQl9OUl9JVEVNUyhwX3NfdGItPgotCQkJCQkJCQkgICAgICAgRkxbbl9oXSk7Ci0JCW5fc29uX251bWJlciA9IEJfTl9DSElMRF9OVU0ocF9zX3RiLT5GTFtuX2hdLCBuX2NoaWxkX3Bvc2l0aW9uKTsKLQkJcF9zX2JoID0gc2JfYnJlYWQocF9zX3NiLCBuX3Nvbl9udW1iZXIpOwotCQlpZiAoIXBfc19iaCkKKwkJY2hpbGRfcG9zaXRpb24gPQorCQkgICAgKGJoID09CisJCSAgICAgdGItPkZMW2hdKSA/IHRiLT5sa2V5W2hdIDogQl9OUl9JVEVNUyh0Yi0+CisJCQkJCQkJCSAgICAgICBGTFtoXSk7CisJCXNvbl9udW1iZXIgPSBCX05fQ0hJTERfTlVNKHRiLT5GTFtoXSwgY2hpbGRfcG9zaXRpb24pOworCQliaCA9IHNiX2JyZWFkKHNiLCBzb25fbnVtYmVyKTsKKwkJaWYgKCFiaCkKIAkJCXJldHVybiBJT19FUlJPUjsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7Ci0JCQlkZWNyZW1lbnRfYmNvdW50KHBfc19iaCk7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgZ2V0X25laWdoYm9yc19yZXN0YXJ0W25faF0pOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgeworCQkJYnJlbHNlKGJoKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtoXSk7CiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJfQogCi0JCVJGQUxTRSghQl9JU19JTl9UUkVFKHBfc190Yi0+Rkxbbl9oXSkgfHwKLQkJICAgICAgIG5fY2hpbGRfcG9zaXRpb24gPiBCX05SX0lURU1TKHBfc190Yi0+Rkxbbl9oXSkgfHwKLQkJICAgICAgIEJfTl9DSElMRF9OVU0ocF9zX3RiLT5GTFtuX2hdLCBuX2NoaWxkX3Bvc2l0aW9uKSAhPQotCQkgICAgICAgcF9zX2JoLT5iX2Jsb2NrbnIsICJQQVAtODI3NTogaW52YWxpZCBwYXJlbnQiKTsKLQkJUkZBTFNFKCFCX0lTX0lOX1RSRUUocF9zX2JoKSwgIlBBUC04MjgwOiBpbnZhbGlkIGNoaWxkIik7Ci0JCVJGQUxTRSghbl9oICYmCi0JCSAgICAgICBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAhPQotCQkgICAgICAgTUFYX0NISUxEX1NJWkUocF9zX2JoKSAtCi0JCSAgICAgICBkY19zaXplKEJfTl9DSElMRChwX3NfdGItPkZMWzBdLCBuX2NoaWxkX3Bvc2l0aW9uKSksCisJCVJGQUxTRSghQl9JU19JTl9UUkVFKHRiLT5GTFtoXSkgfHwKKwkJICAgICAgIGNoaWxkX3Bvc2l0aW9uID4gQl9OUl9JVEVNUyh0Yi0+RkxbaF0pIHx8CisJCSAgICAgICBCX05fQ0hJTERfTlVNKHRiLT5GTFtoXSwgY2hpbGRfcG9zaXRpb24pICE9CisJCSAgICAgICBiaC0+Yl9ibG9ja25yLCAiUEFQLTgyNzU6IGludmFsaWQgcGFyZW50Iik7CisJCVJGQUxTRSghQl9JU19JTl9UUkVFKGJoKSwgIlBBUC04MjgwOiBpbnZhbGlkIGNoaWxkIik7CisJCVJGQUxTRSghaCAmJgorCQkgICAgICAgQl9GUkVFX1NQQUNFKGJoKSAhPQorCQkgICAgICAgTUFYX0NISUxEX1NJWkUoYmgpIC0KKwkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHRiLT5GTFswXSwgY2hpbGRfcG9zaXRpb24pKSwKIAkJICAgICAgICJQQVAtODI5MDogaW52YWxpZCBjaGlsZCBzaXplIG9mIGxlZnQgbmVpZ2hib3IiKTsKIAotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+TFtuX2hdKTsKLQkJcF9zX3RiLT5MW25faF0gPSBwX3NfYmg7CisJCWJyZWxzZSh0Yi0+TFtoXSk7CisJCXRiLT5MW2hdID0gYmg7CiAJfQogCi0JaWYgKHBfc190Yi0+cm51bVtuX2hdKSB7CS8qIFdlIG5lZWQgcmlnaHQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW25fcGF0aF9vZmZzZXRdLiAqLwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgbmVlZF9yX25laWdoYm9yW25faF0pOwotCQlwX3NfYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9wYXRoX29mZnNldCk7CisJLyogV2UgbmVlZCByaWdodCBuZWlnaGJvciB0byBiYWxhbmNlIFNbcGF0aF9vZmZzZXRdLiAqLworCWlmICh0Yi0+cm51bVtoXSkgewkvKiBXZSBuZWVkIHJpZ2h0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1twYXRoX29mZnNldF0uICovCisJCVBST0NfSU5GT19JTkMoc2IsIG5lZWRfcl9uZWlnaGJvcltoXSk7CisJCWJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgcGF0aF9vZmZzZXQpOwogCi0JCVJGQUxTRShwX3NfYmggPT0gcF9zX3RiLT5GUltuX2hdICYmCi0JCSAgICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfdGItPnRiX3BhdGgsCi0JCQkJCSAgICBuX3BhdGhfb2Zmc2V0KSA+PQotCQkgICAgICAgQl9OUl9JVEVNUyhwX3NfYmgpLAorCQlSRkFMU0UoYmggPT0gdGItPkZSW2hdICYmCisJCSAgICAgICBQQVRIX09GRlNFVF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKKwkJCQkJICAgIHBhdGhfb2Zmc2V0KSA+PQorCQkgICAgICAgQl9OUl9JVEVNUyhiaCksCiAJCSAgICAgICAiUEFQLTgyOTU6IGludmFsaWQgcG9zaXRpb24gaW4gdGhlIHBhcmVudCIpOwogCi0JCW5fY2hpbGRfcG9zaXRpb24gPQotCQkgICAgKHBfc19iaCA9PSBwX3NfdGItPkZSW25faF0pID8gcF9zX3RiLT5ya2V5W25faF0gKyAxIDogMDsKLQkJbl9zb25fbnVtYmVyID0gQl9OX0NISUxEX05VTShwX3NfdGItPkZSW25faF0sIG5fY2hpbGRfcG9zaXRpb24pOwotCQlwX3NfYmggPSBzYl9icmVhZChwX3Nfc2IsIG5fc29uX251bWJlcik7Ci0JCWlmICghcF9zX2JoKQorCQljaGlsZF9wb3NpdGlvbiA9CisJCSAgICAoYmggPT0gdGItPkZSW2hdKSA/IHRiLT5ya2V5W2hdICsgMSA6IDA7CisJCXNvbl9udW1iZXIgPSBCX05fQ0hJTERfTlVNKHRiLT5GUltoXSwgY2hpbGRfcG9zaXRpb24pOworCQliaCA9IHNiX2JyZWFkKHNiLCBzb25fbnVtYmVyKTsKKwkJaWYgKCFiaCkKIAkJCXJldHVybiBJT19FUlJPUjsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7Ci0JCQlkZWNyZW1lbnRfYmNvdW50KHBfc19iaCk7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgZ2V0X25laWdoYm9yc19yZXN0YXJ0W25faF0pOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgeworCQkJYnJlbHNlKGJoKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtoXSk7CiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJfQotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+UltuX2hdKTsKLQkJcF9zX3RiLT5SW25faF0gPSBwX3NfYmg7CisJCWJyZWxzZSh0Yi0+UltoXSk7CisJCXRiLT5SW2hdID0gYmg7CiAKLQkJUkZBTFNFKCFuX2gKLQkJICAgICAgICYmIEJfRlJFRV9TUEFDRShwX3NfYmgpICE9Ci0JCSAgICAgICBNQVhfQ0hJTERfU0laRShwX3NfYmgpIC0KLQkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHBfc190Yi0+RlJbMF0sIG5fY2hpbGRfcG9zaXRpb24pKSwKKwkJUkZBTFNFKCFoCisJCSAgICAgICAmJiBCX0ZSRUVfU1BBQ0UoYmgpICE9CisJCSAgICAgICBNQVhfQ0hJTERfU0laRShiaCkgLQorCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQodGItPkZSWzBdLCBjaGlsZF9wb3NpdGlvbikpLAogCQkgICAgICAgIlBBUC04MzAwOiBpbnZhbGlkIGNoaWxkIHNpemUgb2YgcmlnaHQgbmVpZ2hib3IgKCVkICE9ICVkIC0gJWQpIiwKLQkJICAgICAgIEJfRlJFRV9TUEFDRShwX3NfYmgpLCBNQVhfQ0hJTERfU0laRShwX3NfYmgpLAotCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQocF9zX3RiLT5GUlswXSwgbl9jaGlsZF9wb3NpdGlvbikpKTsKKwkJICAgICAgIEJfRlJFRV9TUEFDRShiaCksIE1BWF9DSElMRF9TSVpFKGJoKSwKKwkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHRiLT5GUlswXSwgY2hpbGRfcG9zaXRpb24pKSk7CiAKIAl9CiAJcmV0dXJuIENBUlJZX09OOwpAQCAtMjA4OCw1MiArMjA5NCw0NiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi1zdGF0aWMgdm9pZCB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoLAorc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCQkJICAgY29uc3QgY2hhciAqZGVzY3IsIGludCBsZXZlbCkKIHsKLQlpZiAocF9zX2JoKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmKHBfc19iaC0+Yl9jb3VudCkpIDw9IDApIHsKKwlpZiAoYmgpIHsKKwkJaWYgKGF0b21pY19yZWFkKCYoYmgtPmJfY291bnQpKSA8PSAwKQogCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC0xOiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IG5lZ2F0aXZlIG9yIHplcm8gcmVmZXJlbmNlIGNvdW50ZXIgZm9yIGJ1ZmZlciAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTEiLCAibmVnYXRpdmUgb3IgemVybyAiCisJCQkJICAgICAgICJyZWZlcmVuY2UgY291bnRlciBmb3IgYnVmZmVyICVzWyVkXSAiCisJCQkJICAgICAgICIoJWIpIiwgZGVzY3IsIGxldmVsLCBiaCk7CiAKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUocF9zX2JoKSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtMjogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaXMgbm90IHVwIHRvIGRhdGUgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTIiLCAiYnVmZmVyIGlzIG5vdCB1cCAiCisJCQkJICAgICAgICJ0byBkYXRlICVzWyVkXSAoJWIpIiwKKwkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBiaCk7CiAKLQkJaWYgKCFCX0lTX0lOX1RSRUUocF9zX2JoKSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtMzogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaXMgbm90IGluIHRyZWUgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQlpZiAoIUJfSVNfSU5fVFJFRShiaCkpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTMiLCAiYnVmZmVyIGlzIG5vdCAiCisJCQkJICAgICAgICJpbiB0cmVlICVzWyVkXSAoJWIpIiwKKwkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBiaCk7CiAKLQkJaWYgKHBfc19iaC0+Yl9iZGV2ICE9IHBfc19zYi0+c19iZGV2KSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC00OiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IGJ1ZmZlciBoYXMgd3JvbmcgZGV2aWNlICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKGJoLT5iX2JkZXYgIT0gc2ItPnNfYmRldikKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtNCIsICJidWZmZXIgaGFzIHdyb25nICIKKwkJCQkgICAgICAgImRldmljZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmIChwX3NfYmgtPmJfc2l6ZSAhPSBwX3Nfc2ItPnNfYmxvY2tzaXplKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC01OiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IGJ1ZmZlciBoYXMgd3JvbmcgYmxvY2tzaXplICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKGJoLT5iX3NpemUgIT0gc2ItPnNfYmxvY2tzaXplKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC01IiwgImJ1ZmZlciBoYXMgd3JvbmcgIgorCQkJCSAgICAgICAiYmxvY2tzaXplICVzWyVkXSAoJWIpIiwKKwkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBiaCk7CiAKLQkJaWYgKHBfc19iaC0+Yl9ibG9ja25yID4gU0JfQkxPQ0tfQ09VTlQocF9zX3NiKSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtNjogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgYmxvY2sgbnVtYmVyIHRvbyBoaWdoICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKGJoLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChzYikpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTYiLCAiYnVmZmVyIGJsb2NrICIKKwkJCQkgICAgICAgIm51bWJlciB0b28gaGlnaCAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCX0KIH0KICNlbHNlCi1zdGF0aWMgdm9pZCB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoLAorc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCQkJICAgY29uc3QgY2hhciAqZGVzY3IsIGludCBsZXZlbCkKIHs7CiB9CkBAIC0yMTQ0LDcgKzIxNDQsNyBAQAogCXJldHVybiByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHMsIGJoLCAwKTsKIH0KIAotc3RhdGljIGludCB3YWl0X3RiX2J1ZmZlcnNfdW50aWxfdW5sb2NrZWQoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiKQorc3RhdGljIGludCB3YWl0X3RiX2J1ZmZlcnNfdW50aWxfdW5sb2NrZWQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpsb2NrZWQ7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCkBAIC0yMTU2LDk1ICsyMTU2LDk0IEBACiAKIAkJbG9ja2VkID0gTlVMTDsKIAotCQlmb3IgKGkgPSBwX3NfdGItPnRiX3BhdGgtPnBhdGhfbGVuZ3RoOworCQlmb3IgKGkgPSB0Yi0+dGJfcGF0aC0+cGF0aF9sZW5ndGg7CiAJCSAgICAgIWxvY2tlZCAmJiBpID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOyBpLS0pIHsKLQkJCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgaSkpIHsKKwkJCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBpKSkgewogCQkJCS8qIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHdlIGNhbiBvbmx5IGJlIHN1cmUgdGhlIGxhc3QgYnVmZmVyCiAJCQkJICoqIGluIHRoZSBwYXRoIGlzIGluIHRoZSB0cmVlIC0tY2xtCiAJCQkJICovCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCQkJaWYgKFBBVEhfUExBU1RfQlVGRkVSKHBfc190Yi0+dGJfcGF0aCkgPT0KLQkJCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIGkpKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKKwkJCQlpZiAoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpID09CisJCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsIGkpKQorCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKIAkJCQkJCQkgICAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUgotCQkJCQkJCSAgICAgICAocF9zX3RiLT50Yl9wYXRoLAorCQkJCQkJCSAgICAgICAodGItPnRiX3BhdGgsCiAJCQkJCQkJCWkpLCAiUyIsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+dGJfcGF0aC0+CisJCQkJCQkJICAgICAgIHRiLT50Yl9wYXRoLT4KIAkJCQkJCQkgICAgICAgcGF0aF9sZW5ndGggLSBpKTsKLQkJCQl9CiAjZW5kaWYKLQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzKHBfc190Yi0+dGJfc2IsCisJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cyh0Yi0+dGJfc2IsCiAJCQkJCQkJICBQQVRIX09GRlNFVF9QQlVGRkVSCi0JCQkJCQkJICAocF9zX3RiLT50Yl9wYXRoLAorCQkJCQkJCSAgKHRiLT50Yl9wYXRoLAogCQkJCQkJCSAgIGkpKSkgewogCQkJCQlsb2NrZWQgPQotCQkJCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsCisJCQkJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLAogCQkJCQkJCQlpKTsKIAkJCQl9CiAJCQl9CiAJCX0KIAotCQlmb3IgKGkgPSAwOyAhbG9ja2VkICYmIGkgPCBNQVhfSEVJR0hUICYmIHBfc190Yi0+aW5zZXJ0X3NpemVbaV07CisJCWZvciAoaSA9IDA7ICFsb2NrZWQgJiYgaSA8IE1BWF9IRUlHSFQgJiYgdGItPmluc2VydF9zaXplW2ldOwogCQkgICAgIGkrKykgewogCi0JCQlpZiAocF9zX3RiLT5sbnVtW2ldKSB7CisJCQlpZiAodGItPmxudW1baV0pIHsKIAotCQkJCWlmIChwX3NfdGItPkxbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkxbaV0sCisJCQkJaWYgKHRiLT5MW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+TFtpXSwKIAkJCQkJCQkgICAgICAgIkwiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+TFtpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkxbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+TFtpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+TFtpXTsKIAkJCQl9CiAKLQkJCQlpZiAoIWxvY2tlZCAmJiBwX3NfdGItPkZMW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5GTFtpXSwKKwkJCQlpZiAoIWxvY2tlZCAmJiB0Yi0+RkxbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5GTFtpXSwKIAkJCQkJCQkgICAgICAgIkZMIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkZMW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+RkxbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+RkxbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkZMW2ldOwogCQkJCX0KIAotCQkJCWlmICghbG9ja2VkICYmIHBfc190Yi0+Q0ZMW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5DRkxbaV0sCisJCQkJaWYgKCFsb2NrZWQgJiYgdGItPkNGTFtpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkNGTFtpXSwKIAkJCQkJCQkgICAgICAgIkNGTCIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5DRkxbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5DRkxbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+Q0ZMW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5DRkxbaV07CiAJCQkJfQogCiAJCQl9CiAKLQkJCWlmICghbG9ja2VkICYmIChwX3NfdGItPnJudW1baV0pKSB7CisJCQlpZiAoIWxvY2tlZCAmJiAodGItPnJudW1baV0pKSB7CiAKLQkJCQlpZiAocF9zX3RiLT5SW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5SW2ldLAorCQkJCWlmICh0Yi0+UltpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPlJbaV0sCiAJCQkJCQkJICAgICAgICJSIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPlJbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5SW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPlJbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPlJbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5GUltpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+RlJbaV0sCisJCQkJaWYgKCFsb2NrZWQgJiYgdGItPkZSW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+RlJbaV0sCiAJCQkJCQkJICAgICAgICJGUiIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GUltpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkZSW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkZSW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5GUltpXTsKIAkJCQl9CiAKLQkJCQlpZiAoIWxvY2tlZCAmJiBwX3NfdGItPkNGUltpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+Q0ZSW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5DRlJbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5DRlJbaV0sCiAJCQkJCQkJICAgICAgICJDRlIiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+Q0ZSW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+Q0ZSW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkNGUltpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+Q0ZSW2ldOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMjI1NywxMCArMjI1NiwxMCBAQAogCQkgKiogLS1jbG0KIAkJICovCiAJCWZvciAoaSA9IDA7ICFsb2NrZWQgJiYgaSA8IE1BWF9GRUJfU0laRTsgaSsrKSB7Ci0JCQlpZiAocF9zX3RiLT5GRUJbaV0pIHsKKwkJCWlmICh0Yi0+RkVCW2ldKSB7CiAJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GRUJbaV0pKQotCQkJCQlsb2NrZWQgPSBwX3NfdGItPkZFQltpXTsKKwkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkZFQltpXSkpCisJCQkJCWxvY2tlZCA9IHRiLT5GRUJbaV07CiAJCQl9CiAJCX0KIApAQCAtMjI2OCwyMSArMjI2NywyMCBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQkJcmVwZWF0X2NvdW50ZXIrKzsKIAkJCWlmICgocmVwZWF0X2NvdW50ZXIgJSAxMDAwMCkgPT0gMCkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3RiLT50Yl9zYiwKLQkJCQkJCSAid2FpdF90Yl9idWZmZXJzX3VudGlsX3JlbGVhc2VkKCk6IHRvbyBtYW55ICIKLQkJCQkJCSAiaXRlcmF0aW9ucyB3YWl0aW5nIGZvciBidWZmZXIgdG8gdW5sb2NrICIKKwkJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTgyMDAiLAorCQkJCQkJICJ0b28gbWFueSBpdGVyYXRpb25zIHdhaXRpbmcgIgorCQkJCQkJICJmb3IgYnVmZmVyIHRvIHVubG9jayAiCiAJCQkJCQkgIiglYikiLCBsb2NrZWQpOwogCiAJCQkJLyogRG9uJ3QgbG9vcCBmb3JldmVyLiAgVHJ5IHRvIHJlY292ZXIgZnJvbSBwb3NzaWJsZSBlcnJvci4gKi8KIAotCQkJCXJldHVybiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpID8KKwkJCQlyZXR1cm4gKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpID8KIAkJCQkgICAgUkVQRUFUX1NFQVJDSCA6IENBUlJZX09OOwogCQkJfQogI2VuZGlmCiAJCQlfX3dhaXRfb25fYnVmZmVyKGxvY2tlZCk7Ci0JCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKKwkJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQogCQkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwotCQkJfQogCQl9CiAKIAl9IHdoaWxlIChsb2NrZWQpOwpAQCAtMjI5NSwxNSArMjI5MywxNSBAQAogICoJYW5hbHl6ZSB3aGF0IGFuZCB3aGVyZSBzaG91bGQgYmUgbW92ZWQ7CiAgKglnZXQgc3VmZmljaWVudCBudW1iZXIgb2YgbmV3IG5vZGVzOwogICogQmFsYW5jaW5nIHdpbGwgc3RhcnQgb25seSBhZnRlciBhbGwgcmVzb3VyY2VzIHdpbGwgYmUgY29sbGVjdGVkIGF0IGEgdGltZS4KLSAqIAorICoKICAqIFdoZW4gcG9ydGVkIHRvIFNNUCBrZXJuZWxzLCBvbmx5IGF0IHRoZSBsYXN0IG1vbWVudCBhZnRlciBhbGwgbmVlZGVkIG5vZGVzCiAgKiBhcmUgY29sbGVjdGVkIGluIGNhY2hlLCB3aWxsIHRoZSByZXNvdXJjZXMgYmUgbG9ja2VkIHVzaW5nIHRoZSB1c3VhbAogICogdGV4dGJvb2sgb3JkZXJlZCBsb2NrIGFjcXVpc2l0aW9uIGFsZ29yaXRobXMuICBOb3RlIHRoYXQgZW5zdXJpbmcgdGhhdAogICogdGhpcyBjb2RlIG5laXRoZXIgd3JpdGUgbG9ja3Mgd2hhdCBpdCBkb2VzIG5vdCBuZWVkIHRvIHdyaXRlIGxvY2sgbm9yIGxvY2tzIG91dCBvZiBvcmRlcgogICogd2lsbCBiZSBhIHBhaW4gaW4gdGhlIGJ1dHQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gYXZvaWRlZC4gIEdydW1ibGUgZ3J1bWJsZS4gLUhhbnMKLSAqIAorICoKICAqIGZpeCBpcyBtZWFudCBpbiB0aGUgc2Vuc2Ugb2YgcmVuZGVyIHVuY2hhbmdpbmcKLSAqIAorICoKICAqIExhdGVuY3kgbWlnaHQgYmUgaW1wcm92ZWQgYnkgZmlyc3QgZ2F0aGVyaW5nIGEgbGlzdCBvZiB3aGF0IGJ1ZmZlcnMgYXJlIG5lZWRlZAogICogYW5kIHRoZW4gZ2V0dGluZyBhcyBtYW55IG9mIHRoZW0gaW4gcGFyYWxsZWwgYXMgcG9zc2libGU/IC1IYW5zCiAgKgpAQCAtMjMxMiwxNTkgKzIzMTAsMTYwIEBACiAgKgl0Ygl0cmVlX2JhbGFuY2Ugc3RydWN0dXJlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICogICAgICBwb3NfaW5faXRlbSAtIGNvbW1lbnQgdGhpcyBpZiB5b3UgY2FuCi0gKiAgICAgIGluc19paCAmIGluc19zZCBhcmUgdXNlZCB3aGVuIGluc2VydGluZworICogICAgICBpbnNfaWgJaXRlbSBoZWFkIG9mIGl0ZW0gYmVpbmcgaW5zZXJ0ZWQKKyAqCWRhdGEJaW5zZXJ0ZWQgaXRlbSBvciBkYXRhIHRvIGJlIHBhc3RlZAogICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIDAgLSBzY2hlZHVsZSBkaWRuJ3Qgb2NjdXIgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKLSAqICAgICAgICAgICAgIC0xIC0gaWYgbm9fZGlza19zcGFjZSAKKyAqICAgICAgICAgICAgIC0xIC0gaWYgbm9fZGlza19zcGFjZQogICovCiAKLWludCBmaXhfbm9kZXMoaW50IG5fb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBzdHJ1Y3QgaXRlbV9oZWFkICpwX3NfaW5zX2loLAkvLyBpdGVtIGhlYWQgb2YgaXRlbSBiZWluZyBpbnNlcnRlZAotCSAgICAgIGNvbnN0IHZvaWQgKmRhdGEJLy8gaW5zZXJ0ZWQgaXRlbSBvciBkYXRhIHRvIGJlIHBhc3RlZAotICAgICkKK2ludCBmaXhfbm9kZXMoaW50IG9wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKmluc19paCwgY29uc3Qgdm9pZCAqZGF0YSkKIHsKLQlpbnQgbl9yZXRfdmFsdWUsIG5faCwgbl9pdGVtX251bSA9IFBBVEhfTEFTVF9QT1NJVElPTihwX3NfdGItPnRiX3BhdGgpOwotCWludCBuX3Bvc19pbl9pdGVtOworCWludCByZXQsIGgsIGl0ZW1fbnVtID0gUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKTsKKwlpbnQgcG9zX2luX2l0ZW07CiAKIAkvKiB3ZSBzZXQgd2FpdF90Yl9idWZmZXJzX3J1biB3aGVuIHdlIGhhdmUgdG8gcmVzdG9yZSBhbnkgZGlydHkgYml0cyBjbGVhcmVkCiAJICoqIGR1cmluZyB3YWl0X3RiX2J1ZmZlcnNfcnVuCiAJICovCiAJaW50IHdhaXRfdGJfYnVmZmVyc19ydW4gPSAwOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3RiUzAgPSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfdGItPnRiX3BhdGgpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqdGJTMCA9IFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKTsKIAotCSsrUkVJU0VSRlNfU0IocF9zX3RiLT50Yl9zYiktPnNfZml4X25vZGVzOworCSsrUkVJU0VSRlNfU0IodGItPnRiX3NiKS0+c19maXhfbm9kZXM7CiAKLQluX3Bvc19pbl9pdGVtID0gcF9zX3RiLT50Yl9wYXRoLT5wb3NfaW5faXRlbTsKKwlwb3NfaW5faXRlbSA9IHRiLT50Yl9wYXRoLT5wb3NfaW5faXRlbTsKIAotCXBfc190Yi0+ZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24ocF9zX3RiLT50Yl9zYik7CisJdGItPmZzX2dlbiA9IGdldF9nZW5lcmF0aW9uKHRiLT50Yl9zYik7CiAKIAkvKiB3ZSBwcmVwYXJlIGFuZCBsb2cgdGhlIHN1cGVyIGhlcmUgc28gaXQgd2lsbCBhbHJlYWR5IGJlIGluIHRoZQogCSAqKiB0cmFuc2FjdGlvbiB3aGVuIGRvX2JhbGFuY2UgbmVlZHMgdG8gY2hhbmdlIGl0LgogCSAqKiBUaGlzIHdheSBkb19iYWxhbmNlIHdvbid0IGhhdmUgdG8gc2NoZWR1bGUgd2hlbiB0cnlpbmcgdG8gcHJlcGFyZQogCSAqKiB0aGUgc3VwZXIgZm9yIGxvZ2dpbmcKIAkgKi8KLQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc190Yi0+dGJfc2IsCi0JCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihwX3NfdGItPnRiX3NiKSwgMSk7Ci0Jam91cm5hbF9tYXJrX2RpcnR5KHBfc190Yi0+dHJhbnNhY3Rpb25faGFuZGxlLCBwX3NfdGItPnRiX3NiLAotCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3RiLT50Yl9zYikpOwotCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKKwlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHRiLT50Yl9zYiwKKwkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHRiLT50Yl9zYiksIDEpOworCWpvdXJuYWxfbWFya19kaXJ0eSh0Yi0+dHJhbnNhY3Rpb25faGFuZGxlLCB0Yi0+dGJfc2IsCisJCQkgICBTQl9CVUZGRVJfV0lUSF9TQih0Yi0+dGJfc2IpKTsKKwlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAKIAkvKiBpZiBpdCBwb3NzaWJsZSBpbiBpbmRpcmVjdF90b19kaXJlY3QgY29udmVyc2lvbiAqLwotCWlmIChidWZmZXJfbG9ja2VkKHBfc190YlMwKSkgewotCQlfX3dhaXRfb25fYnVmZmVyKHBfc190YlMwKTsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKQorCWlmIChidWZmZXJfbG9ja2VkKHRiUzApKSB7CisJCV9fd2FpdF9vbl9idWZmZXIodGJTMCk7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJfQogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWlmIChjdXJfdGIpIHsKIAkJcHJpbnRfY3VyX3RiKCJmaXhfbm9kZXMiKTsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTgzMDU6IGZpeF9ub2RlczogIHRoZXJlIGlzIHBlbmRpbmcgZG9fYmFsYW5jZSIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODMwNSIsCisJCQkgICAgICAgInRoZXJlIGlzIHBlbmRpbmcgZG9fYmFsYW5jZSIpOwogCX0KIAotCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc190YlMwKSB8fCAhQl9JU19JTl9UUkVFKHBfc190YlMwKSkgewotCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtODMyMDogZml4X25vZGVzOiBTWzBdICglYiAleikgaXMgbm90IHVwdG9kYXRlICIKLQkJCSAgICAgICAiYXQgdGhlIGJlZ2lubmluZyBvZiBmaXhfbm9kZXMgb3Igbm90IGluIHRyZWUgKG1vZGUgJWMpIiwKLQkJCSAgICAgICBwX3NfdGJTMCwgcF9zX3RiUzAsIG5fb3BfbW9kZSk7Ci0JfQorCWlmICghYnVmZmVyX3VwdG9kYXRlKHRiUzApIHx8ICFCX0lTX0lOX1RSRUUodGJTMCkpCisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzIwIiwgIlNbMF0gKCViICV6KSBpcyAiCisJCQkgICAgICAgIm5vdCB1cHRvZGF0ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGZpeF9ub2RlcyAiCisJCQkgICAgICAgIm9yIG5vdCBpbiB0cmVlIChtb2RlICVjKSIsCisJCQkgICAgICAgdGJTMCwgdGJTMCwgb3BfbW9kZSk7CiAKIAkvKiBDaGVjayBwYXJhbWV0ZXJzLiAqLwotCXN3aXRjaCAobl9vcF9tb2RlKSB7CisJc3dpdGNoIChvcF9tb2RlKSB7CiAJY2FzZSBNX0lOU0VSVDoKLQkJaWYgKG5faXRlbV9udW0gPD0gMCB8fCBuX2l0ZW1fbnVtID4gQl9OUl9JVEVNUyhwX3NfdGJTMCkpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTgzMzA6IGZpeF9ub2RlczogSW5jb3JyZWN0IGl0ZW0gbnVtYmVyICVkIChpbiBTMCAtICVkKSBpbiBjYXNlIG9mIGluc2VydCIsCi0JCQkJICAgICAgIG5faXRlbV9udW0sIEJfTlJfSVRFTVMocF9zX3RiUzApKTsKKwkJaWYgKGl0ZW1fbnVtIDw9IDAgfHwgaXRlbV9udW0gPiBCX05SX0lURU1TKHRiUzApKQorCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMzAiLCAiSW5jb3JyZWN0ICIKKwkJCQkgICAgICAgIml0ZW0gbnVtYmVyICVkIChpbiBTMCAtICVkKSBpbiBjYXNlICIKKwkJCQkgICAgICAgIm9mIGluc2VydCIsIGl0ZW1fbnVtLAorCQkJCSAgICAgICBCX05SX0lURU1TKHRiUzApKTsKIAkJYnJlYWs7CiAJY2FzZSBNX1BBU1RFOgogCWNhc2UgTV9ERUxFVEU6CiAJY2FzZSBNX0NVVDoKLQkJaWYgKG5faXRlbV9udW0gPCAwIHx8IG5faXRlbV9udW0gPj0gQl9OUl9JVEVNUyhwX3NfdGJTMCkpIHsKLQkJCXByaW50X2Jsb2NrKHBfc190YlMwLCAwLCAtMSwgLTEpOwotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC04MzM1OiBmaXhfbm9kZXM6IEluY29ycmVjdCBpdGVtIG51bWJlciglZCk7IG1vZGUgPSAlYyBpbnNlcnRfc2l6ZSA9ICVkXG4iLAotCQkJCSAgICAgICBuX2l0ZW1fbnVtLCBuX29wX21vZGUsCi0JCQkJICAgICAgIHBfc190Yi0+aW5zZXJ0X3NpemVbMF0pOworCQlpZiAoaXRlbV9udW0gPCAwIHx8IGl0ZW1fbnVtID49IEJfTlJfSVRFTVModGJTMCkpIHsKKwkJCXByaW50X2Jsb2NrKHRiUzAsIDAsIC0xLCAtMSk7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODMzNSIsICJJbmNvcnJlY3QgIgorCQkJCSAgICAgICAiaXRlbSBudW1iZXIoJWQpOyBtb2RlID0gJWMgIgorCQkJCSAgICAgICAiaW5zZXJ0X3NpemUgPSAlZCIsCisJCQkJICAgICAgIGl0ZW1fbnVtLCBvcF9tb2RlLAorCQkJCSAgICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC04MzQwOiBmaXhfbm9kZXM6IEluY29ycmVjdCBtb2RlIG9mIG9wZXJhdGlvbiIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODM0MCIsICJJbmNvcnJlY3QgbW9kZSAiCisJCQkgICAgICAgIm9mIG9wZXJhdGlvbiIpOwogCX0KICNlbmRpZgogCi0JaWYgKGdldF9tZW1fZm9yX3ZpcnR1YWxfbm9kZShwX3NfdGIpID09IFJFUEVBVF9TRUFSQ0gpCisJaWYgKGdldF9tZW1fZm9yX3ZpcnR1YWxfbm9kZSh0YikgPT0gUkVQRUFUX1NFQVJDSCkKIAkJLy8gRklYTUU6IG1heWJlIC1FTk9NRU0gd2hlbiB0Yi0+dm5fYnVmID09IDA/IE5vdyBqdXN0IHJlcGVhdAogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAotCS8qIFN0YXJ0aW5nIGZyb20gdGhlIGxlYWYgbGV2ZWw7IGZvciBhbGwgbGV2ZWxzIG5faCBvZiB0aGUgdHJlZS4gKi8KLQlmb3IgKG5faCA9IDA7IG5faCA8IE1BWF9IRUlHSFQgJiYgcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2hdOyBuX2grKykgewotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X2RpcmVjdF9wYXJlbnQocF9zX3RiLCBuX2gpKSAhPSBDQVJSWV9PTikgeworCS8qIFN0YXJ0aW5nIGZyb20gdGhlIGxlYWYgbGV2ZWw7IGZvciBhbGwgbGV2ZWxzIGggb2YgdGhlIHRyZWUuICovCisJZm9yIChoID0gMDsgaCA8IE1BWF9IRUlHSFQgJiYgdGItPmluc2VydF9zaXplW2hdOyBoKyspIHsKKwkJcmV0ID0gZ2V0X2RpcmVjdF9wYXJlbnQodGIsIGgpOworCQlpZiAocmV0ICE9IENBUlJZX09OKQogCQkJZ290byByZXBlYXQ7Ci0JCX0KIAotCQlpZiAoKG5fcmV0X3ZhbHVlID0KLQkJICAgICBjaGVja19iYWxhbmNlKG5fb3BfbW9kZSwgcF9zX3RiLCBuX2gsIG5faXRlbV9udW0sCi0JCQkJICAgbl9wb3NfaW5faXRlbSwgcF9zX2luc19paCwKLQkJCQkgICBkYXRhKSkgIT0gQ0FSUllfT04pIHsKLQkJCWlmIChuX3JldF92YWx1ZSA9PSBOT19CQUxBTkNJTkdfTkVFREVEKSB7CisJCXJldCA9IGNoZWNrX2JhbGFuY2Uob3BfbW9kZSwgdGIsIGgsIGl0ZW1fbnVtLAorCQkJCSAgICBwb3NfaW5faXRlbSwgaW5zX2loLCBkYXRhKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikgeworCQkJaWYgKHJldCA9PSBOT19CQUxBTkNJTkdfTkVFREVEKSB7CiAJCQkJLyogTm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZC4gKi8KLQkJCQlpZiAoKG5fcmV0X3ZhbHVlID0KLQkJCQkgICAgIGdldF9uZWlnaGJvcnMocF9zX3RiLCBuX2gpKSAhPSBDQVJSWV9PTikgeworCQkJCXJldCA9IGdldF9uZWlnaGJvcnModGIsIGgpOworCQkJCWlmIChyZXQgIT0gQ0FSUllfT04pCiAJCQkJCWdvdG8gcmVwZWF0OwotCQkJCX0KLQkJCQlpZiAobl9oICE9IE1BWF9IRUlHSFQgLSAxKQotCQkJCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0gMDsKKwkJCQlpZiAoaCAhPSBNQVhfSEVJR0hUIC0gMSkKKwkJCQkJdGItPmluc2VydF9zaXplW2ggKyAxXSA9IDA7CiAJCQkJLyogb2ssIGFuYWx5c2lzIGFuZCByZXNvdXJjZSBnYXRoZXJpbmcgYXJlIGNvbXBsZXRlICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQogCi0JCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfbmVpZ2hib3JzKHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKKwkJcmV0ID0gZ2V0X25laWdoYm9ycyh0YiwgaCk7CisJCWlmIChyZXQgIT0gQ0FSUllfT04pCiAJCQlnb3RvIHJlcGVhdDsKLQkJfQogCi0JCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfZW1wdHlfbm9kZXMocF9zX3RiLCBuX2gpKSAhPSBDQVJSWV9PTikgewotCQkJZ290byByZXBlYXQ7CS8qIE5vIGRpc2sgc3BhY2UsIG9yIHNjaGVkdWxlIG9jY3VycmVkIGFuZAotCQkJCQkgICBhbmFseXNpcyBtYXkgYmUgaW52YWxpZCBhbmQgbmVlZHMgdG8gYmUgcmVkb25lLiAqLwotCQl9CisJCS8qIE5vIGRpc2sgc3BhY2UsIG9yIHNjaGVkdWxlIG9jY3VycmVkIGFuZCBhbmFseXNpcyBtYXkgYmUKKwkJICogaW52YWxpZCBhbmQgbmVlZHMgdG8gYmUgcmVkb25lLiAqLworCQlyZXQgPSBnZXRfZW1wdHlfbm9kZXModGIsIGgpOworCQlpZiAocmV0ICE9IENBUlJZX09OKQorCQkJZ290byByZXBlYXQ7CiAKLQkJaWYgKCFQQVRIX0hfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5faCkpIHsKKwkJaWYgKCFQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCkpIHsKIAkJCS8qIFdlIGhhdmUgYSBwb3NpdGl2ZSBpbnNlcnQgc2l6ZSBidXQgbm8gbm9kZXMgZXhpc3Qgb24gdGhpcwogCQkJICAgbGV2ZWwsIHRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm9vdC4gKi8KIAotCQkJUkZBTFNFKHBfc190Yi0+YmxrbnVtW25faF0gIT0gMSwKKwkJCVJGQUxTRSh0Yi0+YmxrbnVtW2hdICE9IDEsCiAJCQkgICAgICAgIlBBUC04MzUwOiBjcmVhdGluZyBuZXcgZW1wdHkgcm9vdCIpOwogCi0JCQlpZiAobl9oIDwgTUFYX0hFSUdIVCAtIDEpCi0JCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9IDA7Ci0JCX0gZWxzZSBpZiAoIVBBVEhfSF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9oICsgMSkpIHsKLQkJCWlmIChwX3NfdGItPmJsa251bVtuX2hdID4gMSkgewotCQkJCS8qIFRoZSB0cmVlIG5lZWRzIHRvIGJlIGdyb3duLCBzbyB0aGlzIG5vZGUgU1tuX2hdCisJCQlpZiAoaCA8IE1BWF9IRUlHSFQgLSAxKQorCQkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPSAwOworCQl9IGVsc2UgaWYgKCFQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCArIDEpKSB7CisJCQlpZiAodGItPmJsa251bVtoXSA+IDEpIHsKKwkJCQkvKiBUaGUgdHJlZSBuZWVkcyB0byBiZSBncm93biwgc28gdGhpcyBub2RlIFNbaF0KIAkJCQkgICB3aGljaCBpcyB0aGUgcm9vdCBub2RlIGlzIHNwbGl0IGludG8gdHdvIG5vZGVzLAotCQkJCSAgIGFuZCBhIG5ldyBub2RlIChTW25faCsxXSkgd2lsbCBiZSBjcmVhdGVkIHRvCisJCQkJICAgYW5kIGEgbmV3IG5vZGUgKFNbaCsxXSkgd2lsbCBiZSBjcmVhdGVkIHRvCiAJCQkJICAgYmVjb21lIHRoZSByb290IG5vZGUuICAqLwogCi0JCQkJUkZBTFNFKG5faCA9PSBNQVhfSEVJR0hUIC0gMSwKKwkJCQlSRkFMU0UoaCA9PSBNQVhfSEVJR0hUIC0gMSwKIAkJCQkgICAgICAgIlBBUC04MzU1OiBhdHRlbXB0IHRvIGNyZWF0ZSB0b28gaGlnaCBvZiBhIHRyZWUiKTsKIAotCQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPQorCQkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPQogCQkJCSAgICAoRENfU0laRSArCi0JCQkJICAgICBLRVlfU0laRSkgKiAocF9zX3RiLT5ibGtudW1bbl9oXSAtIDEpICsKKwkJCQkgICAgIEtFWV9TSVpFKSAqICh0Yi0+YmxrbnVtW2hdIC0gMSkgKwogCQkJCSAgICBEQ19TSVpFOwotCQkJfSBlbHNlIGlmIChuX2ggPCBNQVhfSEVJR0hUIC0gMSkKLQkJCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0gMDsKKwkJCX0gZWxzZSBpZiAoaCA8IE1BWF9IRUlHSFQgLSAxKQorCQkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPSAwOwogCQl9IGVsc2UKLQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPQotCQkJICAgIChEQ19TSVpFICsgS0VZX1NJWkUpICogKHBfc190Yi0+YmxrbnVtW25faF0gLSAxKTsKKwkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPQorCQkJICAgIChEQ19TSVpFICsgS0VZX1NJWkUpICogKHRiLT5ibGtudW1baF0gLSAxKTsKIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHBfc190YikpID09IENBUlJZX09OKSB7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgeworCXJldCA9IHdhaXRfdGJfYnVmZmVyc191bnRpbF91bmxvY2tlZCh0Yik7CisJaWYgKHJldCA9PSBDQVJSWV9PTikgeworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgewogCQkJd2FpdF90Yl9idWZmZXJzX3J1biA9IDE7Ci0JCQluX3JldF92YWx1ZSA9IFJFUEVBVF9TRUFSQ0g7CisJCQlyZXQgPSBSRVBFQVRfU0VBUkNIOwogCQkJZ290byByZXBlYXQ7CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gQ0FSUllfT047CkBAIC0yNDg1LDU3ICsyNDg0LDU3IEBACiAKIAkJLyogUmVsZWFzZSBwYXRoIGJ1ZmZlcnMuICovCiAJCWlmICh3YWl0X3RiX2J1ZmZlcnNfcnVuKSB7Ci0JCQlwYXRocmVsc2VfYW5kX3Jlc3RvcmUocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT50Yl9wYXRoKTsKKwkJCXBhdGhyZWxzZV9hbmRfcmVzdG9yZSh0Yi0+dGJfc2IsIHRiLT50Yl9wYXRoKTsKIAkJfSBlbHNlIHsKLQkJCXBhdGhyZWxzZShwX3NfdGItPnRiX3BhdGgpOworCQkJcGF0aHJlbHNlKHRiLT50Yl9wYXRoKTsKIAkJfQogCQkvKiBicmVsc2UgYWxsIHJlc291cmNlcyBjb2xsZWN0ZWQgZm9yIGJhbGFuY2luZyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hFSUdIVDsgaSsrKSB7CiAJCQlpZiAod2FpdF90Yl9idWZmZXJzX3J1bikgewotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPkxbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPlJbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPkZMW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5GUltpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPkxbaV0pOworCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT5SW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+RkxbaV0pOworCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT5GUltpXSk7CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPgogCQkJCQkJCQkgQ0ZMW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT4KKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+CiAJCQkJCQkJCSBDRlJbaV0pOwogCQkJfQogCi0JCQlicmVsc2UocF9zX3RiLT5MW2ldKTsKLQkJCXBfc190Yi0+TFtpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5SW2ldKTsKLQkJCXBfc190Yi0+UltpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5GTFtpXSk7Ci0JCQlwX3NfdGItPkZMW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPkZSW2ldKTsKLQkJCXBfc190Yi0+RlJbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+Q0ZMW2ldKTsKLQkJCXBfc190Yi0+Q0ZMW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPkNGUltpXSk7Ci0JCQlwX3NfdGItPkNGUltpXSA9IE5VTEw7CisJCQlicmVsc2UodGItPkxbaV0pOworCQkJYnJlbHNlKHRiLT5SW2ldKTsKKwkJCWJyZWxzZSh0Yi0+RkxbaV0pOworCQkJYnJlbHNlKHRiLT5GUltpXSk7CisJCQlicmVsc2UodGItPkNGTFtpXSk7CisJCQlicmVsc2UodGItPkNGUltpXSk7CisKKwkJCXRiLT5MW2ldID0gTlVMTDsKKwkJCXRiLT5SW2ldID0gTlVMTDsKKwkJCXRiLT5GTFtpXSA9IE5VTEw7CisJCQl0Yi0+RlJbaV0gPSBOVUxMOworCQkJdGItPkNGTFtpXSA9IE5VTEw7CisJCQl0Yi0+Q0ZSW2ldID0gTlVMTDsKIAkJfQogCiAJCWlmICh3YWl0X3RiX2J1ZmZlcnNfcnVuKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZFQl9TSVpFOyBpKyspIHsKLQkJCQlpZiAocF9zX3RiLT5GRUJbaV0pIHsKKwkJCQlpZiAodGItPkZFQltpXSkKIAkJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkZFQltpXSk7Ci0JCQkJfQorCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkZFQltpXSk7CiAJCQl9CiAJCX0KLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQlyZXR1cm4gcmV0OwogCX0KIAogfQogCi0vKiBBbmF0b2x5IHdpbGwgcHJvYmFibHkgZm9yZ2l2ZSBtZSByZW5hbWluZyBwX3NfdGIgdG8gdGIuIEkganVzdAorLyogQW5hdG9seSB3aWxsIHByb2JhYmx5IGZvcmdpdmUgbWUgcmVuYW1pbmcgdGIgdG8gdGIuIEkganVzdAogICAgd2FudGVkIHRvIG1ha2UgbGluZXMgc2hvcnRlciAqLwogdm9pZCB1bmZpeF9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YikKIHsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2hhc2hlcy5jIGIvZnMvcmVpc2VyZnMvaGFzaGVzLmMKaW5kZXggZTY2NGFjMS4uNjQ3MWM2NyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaGFzaGVzLmMKKysrIGIvZnMvcmVpc2VyZnMvaGFzaGVzLmMKQEAgLTcsNyArNyw3IEBACiAgKiAoc2VlIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5LCAybmQgZWRpdGlvbiwgcDQ0OCkuCiAgKgogICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHppcC5jb20uYXU+IDE5OTgKLSAqIAorICoKICAqIEplcmVteSBoYXMgYWdyZWVkIHRvIHRoZSBjb250ZW50cyBvZiByZWlzZXJmcy9SRUFETUUuIC1IYW5zCiAgKiBZdXJhJ3MgZnVuY3Rpb24gaXMgYWRkZWQgKDA0LzA3LzIwMDApCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMgYi9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jCmluZGV4IGRlMzkxYTguLjIwNzRmZDkgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMKKysrIGIvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYwpAQCAtMTA1LDggKzEwNSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJpbnRlcm5hbF9kZWZpbmVfZGVzdF9zcmNfaW5mb3M6IHNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiaWJhbGFuY2UtMSIsCisJCQkgICAgICAgInNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwKIAkJCSAgICAgICBzaGlmdF9tb2RlKTsKIAl9CiB9CkBAIC0yNzgsNyArMjc4LDcgQEAKIAogLyogY29weSBjcHlfbnVtIG5vZGUgcG9pbnRlcnMgYW5kIGNweV9udW0gLSAxIGl0ZW1zIGZyb20gYnVmZmVyIHNyYyB0byBidWZmZXIgZGVzdAogKiBsYXN0X2ZpcnN0ID09IEZJUlNUX1RPX0xBU1QgbWVhbnMsIHRoYXQgd2UgY29weSBmaXJzdCBpdGVtcyBmcm9tIHNyYyB0byB0YWlsIG9mIGRlc3QKLSAqIGxhc3RfZmlyc3QgPT0gTEFTVF9UT19GSVJTVCBtZWFucywgdGhhdCB3ZSBjb3B5IGxhc3QgaXRlbXMgZnJvbSBzcmMgdG8gaGVhZCBvZiBkZXN0IAorICogbGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUIG1lYW5zLCB0aGF0IHdlIGNvcHkgbGFzdCBpdGVtcyBmcm9tIHNyYyB0byBoZWFkIG9mIGRlc3QKICAqLwogc3RhdGljIHZvaWQgaW50ZXJuYWxfY29weV9wb2ludGVyc19pdGVtcyhzdHJ1Y3QgYnVmZmVyX2luZm8gKmRlc3RfYmksCiAJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNyYywKQEAgLTM4NSw3ICszODUsNyBAQAogCWlmIChsYXN0X2ZpcnN0ID09IEZJUlNUX1RPX0xBU1QpIHsJLyogc2hpZnRfbGVmdCBvY2N1cnMgKi8KIAkJZmlyc3RfcG9pbnRlciA9IDA7CiAJCWZpcnN0X2l0ZW0gPSAwOwotCQkvKiBkZWxldGUgY3B5X251bSAtIGRlbF9wYXIgcG9pbnRlcnMgYW5kIGtleXMgc3RhcnRpbmcgZm9yIHBvaW50ZXJzIHdpdGggZmlyc3RfcG9pbnRlciwgCisJCS8qIGRlbGV0ZSBjcHlfbnVtIC0gZGVsX3BhciBwb2ludGVycyBhbmQga2V5cyBzdGFydGluZyBmb3IgcG9pbnRlcnMgd2l0aCBmaXJzdF9wb2ludGVyLAogCQkgICBmb3Iga2V5IC0gd2l0aCBmaXJzdF9pdGVtICovCiAJCWludGVybmFsX2RlbGV0ZV9wb2ludGVyc19pdGVtcyhzcmNfYmksIGZpcnN0X3BvaW50ZXIsCiAJCQkJCSAgICAgICBmaXJzdF9pdGVtLCBjcHlfbnVtIC0gZGVsX3Bhcik7CkBAIC00NTMsNyArNDUzLDcgQEAKIAl9CiB9CiAKLS8qIEluc2VydCBkX2tleSd0aCAoZGVsaW1pdGluZykga2V5IGZyb20gYnVmZmVyIGNmbCB0byB0YWlsIG9mIGRlc3QuIAorLyogSW5zZXJ0IGRfa2V5J3RoIChkZWxpbWl0aW5nKSBrZXkgZnJvbSBidWZmZXIgY2ZsIHRvIHRhaWwgb2YgZGVzdC4KICAqIENvcHkgcG9pbnRlcl9hbW91bnQgbm9kZSBwb2ludGVycyBhbmQgcG9pbnRlcl9hbW91bnQgLSAxIGl0ZW1zIGZyb20gYnVmZmVyIHNyYyB0byBidWZmZXIgZGVzdC4KICAqIFJlcGxhY2UgIGRfa2V5J3RoIGtleSBpbiBidWZmZXIgY2ZsLgogICogRGVsZXRlIHBvaW50ZXJfYW1vdW50IGl0ZW1zIGFuZCBub2RlIHBvaW50ZXJzIGZyb20gYnVmZmVyIHNyYy4KQEAgLTUxOCw3ICs1MTgsNyBAQAogCS8qICAgIGludGVybmFsX21vdmVfcG9pbnRlcnNfaXRlbXMgKHRiLT5MW2hdLCB0Yi0+U1toXSwgRklSU1RfVE9fTEFTVCwgcG9pbnRlcl9hbW91bnQsIDEpOyAqLwogfQogCi0vKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZnIgdG8gaGVhZCBvZiBkZXN0LiAKKy8qIEluc2VydCBkX2tleSd0aCAoZGVsaW1pdGluZykga2V5IGZyb20gYnVmZmVyIGNmciB0byBoZWFkIG9mIGRlc3QuCiAgKiBDb3B5IG4gbm9kZSBwb2ludGVycyBhbmQgbiAtIDEgaXRlbXMgZnJvbSBidWZmZXIgc3JjIHRvIGJ1ZmZlciBkZXN0LgogICogUmVwbGFjZSAgZF9rZXkndGgga2V5IGluIGJ1ZmZlciBjZnIuCiAgKiBEZWxldGUgbiBpdGVtcyBhbmQgbm9kZSBwb2ludGVycyBmcm9tIGJ1ZmZlciBzcmMuCkBAIC03MDIsOCArNzAyLDggQEAKIAogCQlyZXR1cm47CiAJfQotCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJICAgICAgICJiYWxhbmNlX2ludGVybmFsX3doZW5fZGVsZXRlOiB1bmV4cGVjdGVkIHRiLT5sbnVtWyVkXT09JWQgb3IgdGItPnJudW1bJWRdPT0lZCIsCisJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiaWJhbGFuY2UtMiIsCisJCSAgICAgICAidW5leHBlY3RlZCB0Yi0+bG51bVslZF09PSVkIG9yIHRiLT5ybnVtWyVkXT09JWQiLAogCQkgICAgICAgaCwgdGItPmxudW1baF0sIGgsIHRiLT5ybnVtW2hdKTsKIH0KIApAQCAtNzQ5LDcgKzc0OSw3IEBACiAgICAgICAgdGhpcyBtZWFucyB0aGF0IG5ldyBwb2ludGVycyBhbmQgaXRlbXMgbXVzdCBiZSBpbnNlcnRlZCBBRlRFUiAqCiAgICAgICAgY2hpbGRfcG9zCiAgICAgICAgfQotICAgICAgIGVsc2UgCisgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICBpdCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxlZnRtb3N0IHBvaW50ZXIgdGhhdCBtdXN0IGJlIGRlbGV0ZWQgKHRvZ2V0aGVyIHdpdGgKICAgICAgICBpdHMgY29ycmVzcG9uZGluZyBrZXkgdG8gdGhlIGxlZnQgb2YgdGhlIHBvaW50ZXIpCkBAIC05NDAsOCArOTQwLDggQEAKIAkJc3RydWN0IGJsb2NrX2hlYWQgKmJsa2g7CiAKIAkJaWYgKHRiLT5ibGtudW1baF0gIT0gMSkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJiYWxhbmNlX2ludGVybmFsOiBPbmUgbmV3IG5vZGUgcmVxdWlyZWQgZm9yIGNyZWF0aW5nIHRoZSBuZXcgcm9vdCIpOworCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgImliYWxhbmNlLTMiLCAiT25lIG5ldyBub2RlICIKKwkJCQkgICAgICAgInJlcXVpcmVkIGZvciBjcmVhdGluZyB0aGUgbmV3IHJvb3QiKTsKIAkJLyogU1toXSA9IGVtcHR5IGJ1ZmZlciBmcm9tIHRoZSBsaXN0IEZFQi4gKi8KIAkJdGJTaCA9IGdldF9GRUIodGIpOwogCQlibGtoID0gQl9CTEtfSEVBRCh0YlNoKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDgyMzIyN2EuLjZmZDBmNDcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJCX0KIAkJLyogbWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgbW9yZSBieXRlcyB0aGFuIGFjdHVhbGx5IGV4aXN0IGluCiAJCSAqKiB0aGUgZmlsZS4gIFRoaXMgY2FuIGhhcHBlbiBpbiBvZGQgY2FzZXMgd2hlcmUgaV9zaXplIGlzbid0Ci0JCSAqKiBjb3JyZWN0LCBhbmQgd2hlbiBkaXJlY3QgaXRlbSBwYWRkaW5nIHJlc3VsdHMgaW4gYSBmZXcgCisJCSAqKiBjb3JyZWN0LCBhbmQgd2hlbiBkaXJlY3QgaXRlbSBwYWRkaW5nIHJlc3VsdHMgaW4gYSBmZXcKIAkJICoqIGV4dHJhIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhlIGRpcmVjdCBpdGVtCiAJCSAqLwogCQlpZiAoKGxlX2loX2tfb2Zmc2V0KGloKSArIHBhdGgucG9zX2luX2l0ZW0pID4gaW5vZGUtPmlfc2l6ZSkKQEAgLTQzOCwxNSArNDM4LDE1IEBACiAqKiAtRU5PRU5UIGluc3RlYWQgb2YgYSB2YWxpZCBidWZmZXIuICBibG9ja19wcmVwYXJlX3dyaXRlIGV4cGVjdHMgdG8KICoqIGJlIGFibGUgdG8gZG8gaS9vIG9uIHRoZSBidWZmZXJzIHJldHVybmVkLCB1bmxlc3MgYW4gZXJyb3IgdmFsdWUKICoqIGlzIGFsc28gcmV0dXJuZWQuCi0qKiAKKyoqCiAqKiBTbywgdGhpcyBhbGxvd3MgYmxvY2tfcHJlcGFyZV93cml0ZSB0byBiZSB1c2VkIGZvciByZWFkaW5nIGEgc2luZ2xlIGJsb2NrCiAqKiBpbiBhIHBhZ2UuICBXaGVyZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdmFsaWQgcGFnZSBmb3IgaG9sZXMsIG9yIHBhc3QgdGhlCiAqKiBlbmQgb2YgdGhlIGZpbGUuICBUaGlzIHR1cm5zIG91dCB0byBiZSBleGFjdGx5IHdoYXQgd2UgbmVlZCBmb3IgcmVhZGluZwogKiogdGFpbHMgZm9yIGNvbnZlcnNpb24uCiAqKgogKiogVGhlIHBvaW50IG9mIHRoZSB3cmFwcGVyIGlzIGZvcmNpbmcgYSBjZXJ0YWluIHZhbHVlIGZvciBjcmVhdGUsIGV2ZW4KLSoqIHRob3VnaCB0aGUgVkZTIGxheWVyIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGNyZWF0ZT09MS4gIElmIHlvdSAKLSoqIGRvbid0IHdhbnQgdG8gc2VuZCBjcmVhdGUgPT0gR0VUX0JMT0NLX05PX0hPTEUgdG8gcmVpc2VyZnNfZ2V0X2Jsb2NrLCAKKyoqIHRob3VnaCB0aGUgVkZTIGxheWVyIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGNyZWF0ZT09MS4gIElmIHlvdQorKiogZG9uJ3Qgd2FudCB0byBzZW5kIGNyZWF0ZSA9PSBHRVRfQkxPQ0tfTk9fSE9MRSB0byByZWlzZXJmc19nZXRfYmxvY2ssCiAqKiBkb24ndCB1c2UgdGhpcyBmdW5jdGlvbi4KICovCiBzdGF0aWMgaW50IHJlaXNlcmZzX2dldF9ibG9ja19jcmVhdGVfMChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKQEAgLTYwMiw3ICs2MDIsNyBAQAogCWludCBkb25lOwogCWludCBmc19nZW47CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGggPSBOVUxMOwotCS8qIHNwYWNlIHJlc2VydmVkIGluIHRyYW5zYWN0aW9uIGJhdGNoOiAKKwkvKiBzcGFjZSByZXNlcnZlZCBpbiB0cmFuc2FjdGlvbiBiYXRjaDoKIAkgICAuIDMgYmFsYW5jaW5ncyBpbiBkaXJlY3QtPmluZGlyZWN0IGNvbnZlcnNpb24KIAkgICAuIDEgYmxvY2sgaW52b2x2ZWQgaW50byByZWlzZXJmc191cGRhdGVfc2QoKQogCSAgIFhYWCBpbiBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdvcnN0IGNhc2UgZGlyZWN0MmluZGlyZWN0KCkKQEAgLTc1NCw3ICs3NTQsNyBAQAogCQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCiAJCS8qIHRoZSBpdGVtIHdhcyBmb3VuZCwgc28gbmV3IGJsb2NrcyB3ZXJlIG5vdCBhZGRlZCB0byB0aGUgZmlsZQotCQkgKiogdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHVwZGF0ZWQgd2l0aCB0aGlzIAorCQkgKiogdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHVwZGF0ZWQgd2l0aCB0aGlzCiAJCSAqKiB0cmFuc2FjdGlvbgogCQkgKi8KIAkJcmV0dXJuIHJldHZhbDsKQEAgLTg0MSwxMCArODQxLDEyIEBACiAJCQkJCQkJICB0YWlsX29mZnNldCk7CiAJCQkJaWYgKHJldHZhbCkgewogCQkJCQlpZiAocmV0dmFsICE9IC1FTk9TUEMpCi0JCQkJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkJCQkgImNsbS02MDA0OiBjb252ZXJ0IHRhaWwgZmFpbGVkIGlub2RlICVsdSwgZXJyb3IgJWQiLAotCQkJCQkJCQkgaW5vZGUtPmlfaW5vLAotCQkJCQkJCQkgcmV0dmFsKTsKKwkJCQkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCQkJCSJjbG0tNjAwNCIsCisJCQkJCQkJImNvbnZlcnQgdGFpbCBmYWlsZWQgIgorCQkJCQkJCSJpbm9kZSAlbHUsIGVycm9yICVkIiwKKwkJCQkJCQlpbm9kZS0+aV9pbm8sCisJCQkJCQkJcmV0dmFsKTsKIAkJCQkJaWYgKGFsbG9jYXRlZF9ibG9ja19ucikgewogCQkJCQkJLyogdGhlIGJpdG1hcCwgdGhlIHN1cGVyLCBhbmQgdGhlIHN0YXQgZGF0YSA9PSAzICovCiAJCQkJCQlpZiAoIXRoKQpAQCAtOTg0LDcgKzk4Niw3IEBACiAKIAkJLyogdGhpcyBsb29wIGNvdWxkIGxvZyBtb3JlIGJsb2NrcyB0aGFuIHdlIGhhZCBvcmlnaW5hbGx5IGFza2VkCiAJCSAqKiBmb3IuICBTbywgd2UgaGF2ZSB0byBhbGxvdyB0aGUgdHJhbnNhY3Rpb24gdG8gZW5kIGlmIGl0IGlzCi0JCSAqKiB0b28gYmlnIG9yIHRvbyBmdWxsLiAgVXBkYXRlIHRoZSBpbm9kZSBzbyB0aGluZ3MgYXJlIAorCQkgKiogdG9vIGJpZyBvciB0b28gZnVsbC4gIFVwZGF0ZSB0aGUgaW5vZGUgc28gdGhpbmdzIGFyZQogCQkgKiogY29uc2lzdGVudCBpZiB3ZSBjcmFzaCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMKIAkJICoqCiAJCSAqKiByZWxlYXNlIHRoZSBwYXRoIHNvIHRoYXQgYW55Ym9keSB3YWl0aW5nIG9uIHRoZSBwYXRoIGJlZm9yZQpAQCAtOTk1LDcgKzk5Nyw3IEBACiAJCQlpZiAocmV0dmFsKQogCQkJCWdvdG8gZmFpbHVyZTsKIAkJfQotCQkvKiBpbnNlcnRpbmcgaW5kaXJlY3QgcG9pbnRlcnMgZm9yIGEgaG9sZSBjYW4gdGFrZSBhIAorCQkvKiBpbnNlcnRpbmcgaW5kaXJlY3QgcG9pbnRlcnMgZm9yIGEgaG9sZSBjYW4gdGFrZSBhCiAJCSAqKiBsb25nIHRpbWUuICByZXNjaGVkdWxlIGlmIG5lZWRlZAogCQkgKi8KIAkJY29uZF9yZXNjaGVkKCk7CkBAIC0xMDA2LDggKzEwMDgsNyBAQAogCQkJZ290byBmYWlsdXJlOwogCQl9CiAJCWlmIChyZXR2YWwgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtODI1OiByZWlzZXJmc19nZXRfYmxvY2s6ICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJ2cy04MjUiLAogCQkJCQkgIiVLIHNob3VsZCBub3QgYmUgZm91bmQiLCAma2V5KTsKIAkJCXJldHZhbCA9IC1FRVhJU1Q7CiAJCQlpZiAoYWxsb2NhdGVkX2Jsb2NrX25yKQpAQCAtMTI5OSw4ICsxMzAwLDcgQEAKIAlpaCA9IFBBVEhfUElURU1fSEVBRChwYXRoKTsKIAogCWlmICghaXNfc3RhdGRhdGFfbGVfaWgoaWgpKQotCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwKLQkJCSAgICAgICAidnMtMTMwNjU6IHVwZGF0ZV9zdGF0X2RhdGE6IGtleSAlaywgZm91bmQgaXRlbSAlaCIsCisJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLCAidnMtMTMwNjUiLCAia2V5ICVrLCBmb3VuZCBpdGVtICVoIiwKIAkJCSAgICAgICBJTk9ERV9QS0VZKGlub2RlKSwgaWgpOwogCiAJaWYgKHN0YXRfZGF0YV92MShpaCkpIHsKQEAgLTEzMzIsMTAgKzEzMzIsOSBAQAogCQkvKiBsb29rIGZvciB0aGUgb2JqZWN0J3Mgc3RhdCBkYXRhICovCiAJCXJldHZhbCA9IHNlYXJjaF9pdGVtKGlub2RlLT5pX3NiLCAma2V5LCAmcGF0aCk7CiAJCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtMTMwNTA6IHJlaXNlcmZzX3VwZGF0ZV9zZDogIgotCQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byB1cGRhdGUgJUsgc3RhdCBkYXRhIiwKLQkJCQkJICZrZXkpOworCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0xMzA1MCIsCisJCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gIgorCQkJCSAgICAgICAidXBkYXRlICVLIHN0YXQgZGF0YSIsICZrZXkpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmIChyZXR2YWwgPT0gSVRFTV9OT1RfRk9VTkQpIHsKQEAgLTEzNDUsOSArMTM0NCw5IEBACiAJCQkJLypyZWlzZXJmc193YXJuaW5nIChpbm9kZS0+aV9zYiwgInZzLTEzMDUwOiByZWlzZXJmc191cGRhdGVfc2Q6IGlfbmxpbmsgPT0gMCwgc3RhdCBkYXRhIG5vdCBmb3VuZCIpOyAqLwogCQkJCXJldHVybjsKIAkJCX0KLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtMTMwNjA6IHJlaXNlcmZzX3VwZGF0ZV9zZDogIgotCQkJCQkgInN0YXQgZGF0YSBvZiBvYmplY3QgJWsgKG5saW5rID09ICVkKSBub3QgZm91bmQgKHBvcyAlZCkiLAorCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTEzMDYwIiwKKwkJCQkJICJzdGF0IGRhdGEgb2Ygb2JqZWN0ICVrIChubGluayA9PSAlZCkgIgorCQkJCQkgIm5vdCBmb3VuZCAocG9zICVkKSIsCiAJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSwgaW5vZGUtPmlfbmxpbmssCiAJCQkJCSBwb3MpOwogCQkJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aCk7CkBAIC0xNDI0LDEwICsxNDIzLDkgQEAKIAkvKiBsb29rIGZvciB0aGUgb2JqZWN0J3Mgc3RhdCBkYXRhICovCiAJcmV0dmFsID0gc2VhcmNoX2l0ZW0oaW5vZGUtPmlfc2IsICZrZXksICZwYXRoX3RvX3NkKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJ2cy0xMzA3MDogcmVpc2VyZnNfcmVhZF9sb2NrZWRfaW5vZGU6ICIKLQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBmaW5kIHN0YXQgZGF0YSBvZiAlSyIsCi0JCQkJICZrZXkpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTEzMDcwIiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIGZpbmQgIgorCQkJICAgICAgICJzdGF0IGRhdGEgb2YgJUsiLCAma2V5KTsKIAkJcmVpc2VyZnNfbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQlyZXR1cm47CiAJfQpAQCAtMTQ0Niw3ICsxNDQ0LDcgQEAKIAkgICB1cGRhdGUgc2Qgb24gdW5saW5rIGFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIHRvIGNoZWNrIGZvciBubGluawogCSAgIGhlcmUuIFRoaXMgYnVnIHdhcyBmaXJzdCBmb3VuZCBieSBTaXppZiB3aGVuIGRlYnVnZ2luZwogCSAgIFNxdWlkTkcvQnV0dGVyZmx5LCBmb3Jnb3R0ZW4sIGFuZCBmb3VuZCBhZ2FpbiBhZnRlciBQaGlsaXBwZQotCSAgIEdyYW1vdWxsZSA8cGhpbGlwcGUuZ3JhbW91bGxlQG1tYW5pYS5jb20+IHJlcHJvZHVjZWQgaXQuIAorCSAgIEdyYW1vdWxsZSA8cGhpbGlwcGUuZ3JhbW91bGxlQG1tYW5pYS5jb20+IHJlcHJvZHVjZWQgaXQuCiAKIAkgICBNb3JlIGxvZ2ljYWwgZml4IHdvdWxkIHJlcXVpcmUgY2hhbmdlcyBpbiBmcy9pbm9kZS5jOmlwdXQoKSB0bwogCSAgIHJlbW92ZSBpbm9kZSBmcm9tIGhhc2gtdGFibGUgX2FmdGVyXyBmcyBjbGVhbmVkIGRpc2sgc3R1ZmYgdXAgYW5kCkBAIC0xNDU3LDggKzE0NTUsNyBAQAogCSAgIGR1cmluZyBtb3VudCAoZnMvcmVpc2VyZnMvc3VwZXIuYzpmaW5pc2hfdW5maW5pc2hlZCgpKS4gKi8KIAlpZiAoKGlub2RlLT5pX25saW5rID09IDApICYmCiAJICAgICFSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnNfaXNfdW5saW5rZWRfb2spIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgInZzLTEzMDc1OiByZWlzZXJmc19yZWFkX2xvY2tlZF9pbm9kZTogIgorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtMTMwNzUiLAogCQkJCSAiZGVhZCBpbm9kZSByZWFkIGZyb20gZGlzayAlSy4gIgogCQkJCSAiVGhpcyBpcyBsaWtlbHkgdG8gYmUgcmFjZSB3aXRoIGtuZnNkLiBJZ25vcmUiLAogCQkJCSAma2V5KTsKQEAgLTE1NTUsNyArMTU1Miw3IEBACiAJICovCiAJaWYgKGZoX3R5cGUgPiBmaF9sZW4pIHsKIAkJaWYgKGZoX3R5cGUgIT0gNiB8fCBmaF9sZW4gIT0gNSkKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnMtMTMwNzciLAogCQkJCSJuZnNkL3JlaXNlcmZzLCBmaHR5cGU9JWQsIGxlbj0lZCAtIG9kZCIsCiAJCQkJZmhfdHlwZSwgZmhfbGVuKTsKIAkJZmhfdHlwZSA9IDU7CkBAIC0xNjIyLDcgKzE2MTksNyBAQAogCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIC1FUk9GUzsKIAkvKiBtZW1vcnkgcHJlc3N1cmUgY2FuIHNvbWV0aW1lcyBpbml0aWF0ZSB3cml0ZV9pbm9kZSBjYWxscyB3aXRoIHN5bmMgPT0gMSwKLQkgKiogdGhlc2UgY2FzZXMgYXJlIGp1c3Qgd2hlbiB0aGUgc3lzdGVtIG5lZWRzIHJhbSwgbm90IHdoZW4gdGhlIAorCSAqKiB0aGVzZSBjYXNlcyBhcmUganVzdCB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgcmFtLCBub3Qgd2hlbiB0aGUKIAkgKiogaW5vZGUgbmVlZHMgdG8gcmVhY2ggZGlzayBmb3Igc2FmZXR5LCBhbmQgdGhleSBjYW4gc2FmZWx5IGJlCiAJICoqIGlnbm9yZWQgYmVjYXVzZSB0aGUgYWx0ZXJlZCBpbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGxvZ2dlZC4KIAkgKi8KQEAgLTE2ODAsMTMgKzE2NzcsMTMgQEAKIAkvKiBsb29rIGZvciBwbGFjZSBpbiB0aGUgdHJlZSBmb3IgbmV3IGl0ZW0gKi8KIAlyZXR2YWwgPSBzZWFyY2hfaXRlbShzYiwgJmtleSwgcGF0aCk7CiAJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwODA6IHJlaXNlcmZzX25ld19kaXJlY3Rvcnk6ICIKLQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkiKTsKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy0xMzA4MCIsCisJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewogCQlwYXRocmVsc2UocGF0aCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA3MDogcmVpc2VyZnNfbmV3X2RpcmVjdG9yeTogIgorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwNzAiLAogCQkJCSAib2JqZWN0IHdpdGggdGhpcyBrZXkgZXhpc3RzICglaykiLAogCQkJCSAmKGloLT5paF9rZXkpKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CkBAIC0xNzIwLDEzICsxNzE3LDEzIEBACiAJLyogbG9vayBmb3IgcGxhY2UgaW4gdGhlIHRyZWUgZm9yIG5ldyBpdGVtICovCiAJcmV0dmFsID0gc2VhcmNoX2l0ZW0oc2IsICZrZXksIHBhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwOiByZWlzZXJmc19uZXdfc3ltbGluaWs6ICIKLQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIGNyZWF0aW5nIG5ldyBzeW1saW5rIik7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtMTMwODAiLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgc3ltbGluayIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7CiAJCXBhdGhyZWxzZShwYXRoKTsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwOiByZWlzZXJmc19uZXdfc3ltbGluazogIgorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwODAiLAogCQkJCSAib2JqZWN0IHdpdGggdGhpcyBrZXkgZXhpc3RzICglaykiLAogCQkJCSAmKGloLT5paF9rZXkpKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CkBAIC0xNzM5LDcgKzE3MzYsNyBAQAogLyogaW5zZXJ0cyB0aGUgc3RhdCBkYXRhIGludG8gdGhlIHRyZWUsIGFuZCB0aGVuIGNhbGxzCiAgICByZWlzZXJmc19uZXdfZGlyZWN0b3J5ICh0byBpbnNlcnQgIi4iLCAiLi4iIGl0ZW0gaWYgbmV3IG9iamVjdCBpcwogICAgZGlyZWN0b3J5KSBvciByZWlzZXJmc19uZXdfc3ltbGluayAodG8gaW5zZXJ0IHN5bWxpbmsgYm9keSBpZiBuZXcKLSAgIG9iamVjdCBpcyBzeW1saW5rKSBvciBub3RoaW5nIChpZiBuZXcgb2JqZWN0IGlzIHJlZ3VsYXIgZmlsZSkgCisgICBvYmplY3QgaXMgc3ltbGluaykgb3Igbm90aGluZyAoaWYgbmV3IG9iamVjdCBpcyByZWd1bGFyIGZpbGUpCiAKICAgIE5PVEUhIHVpZCBhbmQgZ2lkIG11c3QgYWxyZWFkeSBiZSBzZXQgaW4gdGhlIGlub2RlLiAgSWYgd2UgcmV0dXJuCiAgICBub24temVybyBkdWUgdG8gYW4gZXJyb3IsIHdlIGhhdmUgdG8gZHJvcCB0aGUgcXVvdGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKQEAgLTE3NDcsMTAgKzE3NDQsMTEgQEAKICAgIGlmIHdlIHJldHVybiBub24temVybywgd2UgYWxzbyBlbmQgdGhlIHRyYW5zYWN0aW9uLiAgKi8KIGludCByZWlzZXJmc19uZXdfaW5vZGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsCi0JCSAgICAgICAvKiAwIGZvciByZWd1bGFyLCBFTVRSWV9ESVJfU0laRSBmb3IgZGlycywgCisJCSAgICAgICAvKiAwIGZvciByZWd1bGFyLCBFTVRSWV9ESVJfU0laRSBmb3IgZGlycywKIAkJICAgICAgICAgIHN0cmxlbiAoc3ltbmFtZSkgZm9yIHN5bWxpbmtzKSAqLwogCQkgICAgICAgbG9mZl90IGlfc2l6ZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKKwkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWN1cml0eSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCXN0cnVjdCByZWlzZXJmc19pZ2V0X2FyZ3MgYXJnczsKQEAgLTE3OTYsNyArMTc5NCw3IEBACiAJCWdvdG8gb3V0X2JhZF9pbm9kZTsKIAl9CiAJaWYgKG9sZF9mb3JtYXRfb25seShzYikpCi0JCS8qIG5vdCBhIHBlcmZlY3QgZ2VuZXJhdGlvbiBjb3VudCwgYXMgb2JqZWN0IGlkcyBjYW4gYmUgcmV1c2VkLCBidXQgCisJCS8qIG5vdCBhIHBlcmZlY3QgZ2VuZXJhdGlvbiBjb3VudCwgYXMgb2JqZWN0IGlkcyBjYW4gYmUgcmV1c2VkLCBidXQKIAkJICoqIHRoaXMgaXMgYXMgZ29vZCBhcyByZWlzZXJmcyBjYW4gZG8gcmlnaHQgbm93LgogCQkgKiogbm90ZSB0aGF0IHRoZSBwcml2YXRlIHBhcnQgb2YgaW5vZGUgaXNuJ3QgZmlsbGVkIGluIHlldCwgd2UgaGF2ZQogCQkgKiogdG8gdXNlIHRoZSBkaXJlY3RvcnkuCkBAIC0xOTE3LDkgKzE5MTUsOCBAQAogCQlnb3RvIG91dF9pbnNlcnRlZF9zZDsKIAl9CiAKLQkvKiBYWFggQ0hFQ0sgVEhJUyAqLwogCWlmIChyZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikpIHsKLQkJcmV0dmFsID0gcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChkaXIsIGRlbnRyeSwgaW5vZGUpOworCQlyZXR2YWwgPSByZWlzZXJmc19pbmhlcml0X2RlZmF1bHRfYWNsKHRoLCBkaXIsIGRlbnRyeSwgaW5vZGUpOwogCQlpZiAocmV0dmFsKSB7CiAJCQllcnIgPSByZXR2YWw7CiAJCQlyZWlzZXJmc19jaGVja19wYXRoKCZwYXRoX3RvX2tleSk7CkBAIC0xOTI3LDEwICsxOTI0LDIzIEBACiAJCQlnb3RvIG91dF9pbnNlcnRlZF9zZDsKIAkJfQogCX0gZWxzZSBpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19QT1NJWEFDTCkgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiQUNMcyBhcmVuJ3QgZW5hYmxlZCBpbiB0aGUgZnMsICIKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImpkbS0xMzA5MCIsCisJCQkJICJBQ0xzIGFyZW4ndCBlbmFibGVkIGluIHRoZSBmcywgIgogCQkJCSAiYnV0IHZmcyB0aGlua3MgdGhleSBhcmUhIik7Ci0JfSBlbHNlIGlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChkaXIpKSB7Ci0JCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJfSBlbHNlIGlmIChJU19QUklWQVRFKGRpcikpCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfUFJJVkFURTsKKworCWlmIChzZWN1cml0eS0+bmFtZSkgeworCQlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV93cml0ZSh0aCwgaW5vZGUsIHNlY3VyaXR5KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXJyID0gcmV0dmFsOworCQkJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aF90b19rZXkpOworCQkJcmV0dmFsID0gam91cm5hbF9lbmQodGgsIHRoLT50X3N1cGVyLAorCQkJCQkgICAgIHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpOworCQkJaWYgKHJldHZhbCkKKwkJCQllcnIgPSByZXR2YWw7CisJCQlnb3RvIG91dF9pbnNlcnRlZF9zZDsKKwkJfQogCX0KIAogCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwpAQCAtMTk2MCwxOSArMTk3MCw3IEBACiAJaW5vZGUtPmlfbmxpbmsgPSAwOwogCXRoLT50X3RyYW5zX2lkID0gMDsJLyogc28gdGhlIGNhbGxlciBjYW4ndCB1c2UgdGhpcyBoYW5kbGUgbGF0ZXIgKi8KIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsgLyogT0sgdG8gZG8gZXZlbiBpZiB3ZSBoYWRuJ3QgbG9ja2VkIGl0ICovCi0KLQkvKiBJZiB3ZSB3ZXJlIGluaGVyaXRpbmcgYW4gQUNMLCB3ZSBuZWVkIHRvIHJlbGVhc2UgdGhlIGxvY2sgc28gdGhhdAotCSAqIGlwdXQgZG9lc24ndCBkZWFkbG9jayBpbiByZWlzZXJmc19kZWxldGVfeGF0dHJzLiBUaGUgbG9ja2luZwotCSAqIGNvZGUgcmVhbGx5IG5lZWRzIHRvIGJlIHJld29ya2VkLCBidXQgdGhpcyB3aWxsIHRha2UgY2FyZSBvZiBpdAotCSAqIGZvciBub3cuIC1qZWZmbSAqLwotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLQlpZiAoUkVJU0VSRlNfSShkaXIpLT5pX2FjbF9kZWZhdWx0ICYmICFJU19FUlIoUkVJU0VSRlNfSShkaXIpLT5pX2FjbF9kZWZhdWx0KSkgewotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCX0gZWxzZQotI2VuZGlmCi0JCWlwdXQoaW5vZGUpOworCWlwdXQoaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE5ODksNyArMTk4Nyw3IEBACiAqKgogKiogb24gZmFpbHVyZSwgbm9uemVybyBpcyByZXR1cm5lZCwgcGFnZV9yZXN1bHQgYW5kIGJoX3Jlc3VsdCBhcmUgdW50b3VjaGVkLgogKi8KLXN0YXRpYyBpbnQgZ3JhYl90YWlsX3BhZ2Uoc3RydWN0IGlub2RlICpwX3NfaW5vZGUsCitzdGF0aWMgaW50IGdyYWJfdGFpbF9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgIHN0cnVjdCBwYWdlICoqcGFnZV9yZXN1bHQsCiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3Jlc3VsdCkKIHsKQEAgLTE5OTcsMTEgKzE5OTUsMTEgQEAKIAkvKiB3ZSB3YW50IHRoZSBwYWdlIHdpdGggdGhlIGxhc3QgYnl0ZSBpbiB0aGUgZmlsZSwKIAkgKiogbm90IHRoZSBwYWdlIHRoYXQgd2lsbCBob2xkIHRoZSBuZXh0IGJ5dGUgZm9yIGFwcGVuZGluZwogCSAqLwotCXVuc2lnbmVkIGxvbmcgaW5kZXggPSAocF9zX2lub2RlLT5pX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgaW5kZXggPSAoaW5vZGUtPmlfc2l6ZSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyBwb3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gcF9zX2lub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IChwX3NfaW5vZGUtPmlfc2l6ZSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoaW5vZGUtPmlfc2l6ZSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0yMDE1LDcgKzIwMTMsNyBAQAogCWlmICgob2Zmc2V0ICYgKGJsb2Nrc2l6ZSAtIDEpKSA9PSAwKSB7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKHBfc19pbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7CisJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7CiAJZXJyb3IgPSAtRU5PTUVNOwogCWlmICghcGFnZSkgewogCQlnb3RvIG91dDsKQEAgLTIwNDQsMTAgKzIwNDIsOCBAQAogCQkgKiogSSd2ZSBzY3Jld2VkIHVwIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGJ1ZmZlciwgb3IgdGhlIGNvZGUgdG8KIAkJICoqIGNhbGwgcHJlcGFyZV93cml0ZQogCQkgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJICJjbG0tNjAwMDogZXJyb3IgcmVhZGluZyBibG9jayAlbHUgb24gZGV2ICVzIiwKLQkJCQkgYmgtPmJfYmxvY2tuciwKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocF9zX2lub2RlLT5pX3NiKSk7CisJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAiY2xtLTYwMDAiLAorCQkJICAgICAgICJlcnJvciByZWFkaW5nIGJsb2NrICVsdSIsIGJoLT5iX2Jsb2NrbnIpOwogCQllcnJvciA9IC1FSU87CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIwNjksNTcgKzIwNjUsNTggQEAKICoqCiAqKiBzb21lIGNvZGUgdGFrZW4gZnJvbSBibG9ja190cnVuY2F0ZV9wYWdlCiAqLwotaW50IHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUoc3RydWN0IGlub2RlICpwX3NfaW5vZGUsIGludCB1cGRhdGVfdGltZXN0YW1wcykKK2ludCByZWlzZXJmc190cnVuY2F0ZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB1cGRhdGVfdGltZXN0YW1wcykKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwogCS8qIHdlIHdhbnQgdGhlIG9mZnNldCBmb3IgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgZmlsZSAqLwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcF9zX2lub2RlLT5pX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0JdW5zaWduZWQgYmxvY2tzaXplID0gcF9zX2lub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlub2RlLT5pX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCXVuc2lnbmVkIGxlbmd0aDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJaW50IGVycm9yOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCBlcnIyOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9jayhwX3NfaW5vZGUtPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCi0JaWYgKHBfc19pbm9kZS0+aV9zaXplID4gMCkgewotCQlpZiAoKGVycm9yID0gZ3JhYl90YWlsX3BhZ2UocF9zX2lub2RlLCAmcGFnZSwgJmJoKSkpIHsKLQkJCS8vIC1FTk9FTlQgbWVhbnMgd2UgdHJ1bmNhdGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZSwgCisJaWYgKGlub2RlLT5pX3NpemUgPiAwKSB7CisJCWVycm9yID0gZ3JhYl90YWlsX3BhZ2UoaW5vZGUsICZwYWdlLCAmYmgpOworCQlpZiAoZXJyb3IpIHsKKwkJCS8vIC1FTk9FTlQgbWVhbnMgd2UgdHJ1bmNhdGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZSwKIAkJCS8vIGFuZCBnZXRfYmxvY2tfY3JlYXRlXzAgY291bGQgbm90IGZpbmQgYSBibG9jayB0byByZWFkIGluLAogCQkJLy8gd2hpY2ggaXMgb2suCiAJCQlpZiAoZXJyb3IgIT0gLUVOT0VOVCkKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19pbm9kZS0+aV9zYiwKLQkJCQkJCSAiY2xtLTYwMDE6IGdyYWJfdGFpbF9wYWdlIGZhaWxlZCAlZCIsCi0JCQkJCQkgZXJyb3IpOworCQkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAiY2xtLTYwMDEiLAorCQkJCQkgICAgICAgImdyYWJfdGFpbF9wYWdlIGZhaWxlZCAlZCIsCisJCQkJCSAgICAgICBlcnJvcik7CiAJCQlwYWdlID0gTlVMTDsKIAkJCWJoID0gTlVMTDsKIAkJfQogCX0KIAotCS8qIHNvLCBpZiBwYWdlICE9IE5VTEwsIHdlIGhhdmUgYSBidWZmZXIgaGVhZCBmb3IgdGhlIG9mZnNldCBhdCAKLQkgKiogdGhlIGVuZCBvZiB0aGUgZmlsZS4gaWYgdGhlIGJoIGlzIG1hcHBlZCwgYW5kIGJoLT5iX2Jsb2NrbnIgIT0gMCwgCi0JICoqIHRoZW4gd2UgaGF2ZSBhbiB1bmZvcm1hdHRlZCBub2RlLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgZGlyZWN0IGl0ZW0sIAotCSAqKiBhbmQgbm8gemVyb2luZyBpcyByZXF1aXJlZCBvbiBkaXNrLiAgV2UgemVybyBhZnRlciB0aGUgdHJ1bmNhdGUsIAotCSAqKiBiZWNhdXNlIHRoZSB0cnVuY2F0ZSBtaWdodCBwYWNrIHRoZSBpdGVtIGFueXdheSAKKwkvKiBzbywgaWYgcGFnZSAhPSBOVUxMLCB3ZSBoYXZlIGEgYnVmZmVyIGhlYWQgZm9yIHRoZSBvZmZzZXQgYXQKKwkgKiogdGhlIGVuZCBvZiB0aGUgZmlsZS4gaWYgdGhlIGJoIGlzIG1hcHBlZCwgYW5kIGJoLT5iX2Jsb2NrbnIgIT0gMCwKKwkgKiogdGhlbiB3ZSBoYXZlIGFuIHVuZm9ybWF0dGVkIG5vZGUuICBPdGhlcndpc2UsIHdlIGhhdmUgYSBkaXJlY3QgaXRlbSwKKwkgKiogYW5kIG5vIHplcm9pbmcgaXMgcmVxdWlyZWQgb24gZGlzay4gIFdlIHplcm8gYWZ0ZXIgdGhlIHRydW5jYXRlLAorCSAqKiBiZWNhdXNlIHRoZSB0cnVuY2F0ZSBtaWdodCBwYWNrIHRoZSBpdGVtIGFueXdheQogCSAqKiAoaXQgd2lsbCB1bm1hcCBiaCBpZiBpdCBwYWNrcykuCiAJICovCiAJLyogaXQgaXMgZW5vdWdoIHRvIHJlc2VydmUgc3BhY2UgaW4gdHJhbnNhY3Rpb24gZm9yIDIgYmFsYW5jaW5nczoKIAkgICBvbmUgZm9yICJzYXZlIiBsaW5rIGFkZGluZyBhbmQgYW5vdGhlciBmb3IgdGhlIGZpcnN0CiAJICAgY3V0X2Zyb21faXRlbS4gMSBpcyBmb3IgdXBkYXRlX3NkICovCi0JZXJyb3IgPSBqb3VybmFsX2JlZ2luKCZ0aCwgcF9zX2lub2RlLT5pX3NiLAorCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLAogCQkJICAgICAgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKLQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24ocF9zX2lub2RlKTsKKwlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwogCWlmICh1cGRhdGVfdGltZXN0YW1wcykKIAkJLyogd2UgYXJlIGRvaW5nIHJlYWwgdHJ1bmNhdGU6IGlmIHRoZSBzeXN0ZW0gY3Jhc2hlcyBiZWZvcmUgdGhlIGxhc3QKIAkJICAgdHJhbnNhY3Rpb24gb2YgdHJ1bmNhdGluZyBnZXRzIGNvbW1pdHRlZCAtIG9uIHJlYm9vdCB0aGUgZmlsZQogCQkgICBlaXRoZXIgYXBwZWFycyB0cnVuY2F0ZWQgcHJvcGVybHkgb3Igbm90IHRydW5jYXRlZCBhdCBhbGwgKi8KLQkJYWRkX3NhdmVfbGluaygmdGgsIHBfc19pbm9kZSwgMSk7Ci0JZXJyMiA9IHJlaXNlcmZzX2RvX3RydW5jYXRlKCZ0aCwgcF9zX2lub2RlLCBwYWdlLCB1cGRhdGVfdGltZXN0YW1wcyk7CisJCWFkZF9zYXZlX2xpbmsoJnRoLCBpbm9kZSwgMSk7CisJZXJyMiA9IHJlaXNlcmZzX2RvX3RydW5jYXRlKCZ0aCwgaW5vZGUsIHBhZ2UsIHVwZGF0ZV90aW1lc3RhbXBzKTsKIAllcnJvciA9Ci0JICAgIGpvdXJuYWxfZW5kKCZ0aCwgcF9zX2lub2RlLT5pX3NiLCBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDIgKyAxKTsKKwkgICAgam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIApAQCAtMjEzMCw3ICsyMTI3LDcgQEAKIAl9CiAJCiAJaWYgKHVwZGF0ZV90aW1lc3RhbXBzKSB7Ci0JCWVycm9yID0gcmVtb3ZlX3NhdmVfbGluayhwX3NfaW5vZGUsIDEgLyogdHJ1bmNhdGUgKi8gKTsKKwkJZXJyb3IgPSByZW1vdmVfc2F2ZV9saW5rKGlub2RlLCAxIC8qIHRydW5jYXRlICovKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMjE0OSwxNCArMjE0NiwxNCBAQAogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQogCi0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHBfc19pbm9kZS0+aV9zYik7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gMDsKICAgICAgIG91dDoKIAlpZiAocGFnZSkgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KLQlyZWlzZXJmc193cml0ZV91bmxvY2socF9zX2lub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjIwOCw5ICsyMjA1LDggQEAKIAkvKiB3ZSd2ZSBmb3VuZCBhbiB1bmZvcm1hdHRlZCBub2RlICovCiAJaWYgKGluZGlyZWN0X2l0ZW1fZm91bmQocmV0dmFsLCBpaCkpIHsKIAkJaWYgKGJ5dGVzX2NvcGllZCA+IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAiY2xtLTYwMDI6IGJ5dGVzX2NvcGllZCAlZCIsCi0JCQkJCSBieXRlc19jb3BpZWQpOworCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS02MDAyIiwKKwkJCQkJICJieXRlc19jb3BpZWQgJWQiLCBieXRlc19jb3BpZWQpOwogCQl9CiAJCWlmICghZ2V0X2Jsb2NrX251bShpdGVtLCBwb3NfaW5faXRlbSkpIHsKIAkJCS8qIGNyYXAsIHdlIGFyZSB3cml0aW5nIHRvIGEgaG9sZSAqLwpAQCAtMjI2Nyw5ICsyMjYzLDggQEAKIAkJCWdvdG8gcmVzZWFyY2g7CiAJCX0KIAl9IGVsc2UgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAiY2xtLTYwMDM6IGJhZCBpdGVtIGlub2RlICVsdSwgZGV2aWNlICVzIiwKLQkJCQkgaW5vZGUtPmlfaW5vLCByZWlzZXJmc19iZGV2bmFtZShpbm9kZS0+aV9zYikpOworCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiY2xtLTYwMDMiLAorCQkJCSAiYmFkIGl0ZW0gaW5vZGUgJWx1IiwgaW5vZGUtPmlfaW5vKTsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjMxMiw4ICsyMzA3LDggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiAKLSAqIG1hc29uQHN1c2UuY29tOiB1cGRhdGVkIGluIDIuNS41NCB0byBmb2xsb3cgdGhlIHNhbWUgZ2VuZXJhbCBpbyAKKy8qCisgKiBtYXNvbkBzdXNlLmNvbTogdXBkYXRlZCBpbiAyLjUuNTQgdG8gZm9sbG93IHRoZSBzYW1lIGdlbmVyYWwgaW8KICAqIHN0YXJ0L3JlY292ZXJ5IHBhdGggYXMgX19ibG9ja193cml0ZV9mdWxsX3BhZ2UsIGFsb25nIHdpdGggc3BlY2lhbAogICogY29kZSB0byBoYW5kbGUgcmVpc2VyZnMgdGFpbHMuCiAgKi8KQEAgLTI0NTMsNyArMjQ0OCw3IEBACiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAkvKgotCSAqIHNpbmNlIGFueSBidWZmZXIgbWlnaHQgYmUgdGhlIG9ubHkgZGlydHkgYnVmZmVyIG9uIHRoZSBwYWdlLCAKKwkgKiBzaW5jZSBhbnkgYnVmZmVyIG1pZ2h0IGJlIHRoZSBvbmx5IGRpcnR5IGJ1ZmZlciBvbiB0aGUgcGFnZSwKIAkgKiB0aGUgZmlyc3Qgc3VibWl0X2JoIGNhbiBicmluZyB0aGUgcGFnZSBvdXQgb2Ygd3JpdGViYWNrLgogCSAqIGJlIGNhcmVmdWwgd2l0aCB0aGUgYnVmZmVycy4KIAkgKi8KQEAgLTI0NzIsOCArMjQ2Nyw4IEBACiAJaWYgKG5yID09IDApIHsKIAkJLyoKIAkJICogaWYgdGhpcyBwYWdlIG9ubHkgaGFkIGEgZGlyZWN0IGl0ZW0sIGl0IGlzIHZlcnkgcG9zc2libGUgZm9yCi0JCSAqIG5vIGlvIHRvIGJlIHJlcXVpcmVkIHdpdGhvdXQgdGhlcmUgYmVpbmcgYW4gZXJyb3IuICBPciwgCi0JCSAqIHNvbWVvbmUgZWxzZSBjb3VsZCBoYXZlIGxvY2tlZCB0aGVtIGFuZCBzZW50IHRoZW0gZG93biB0aGUgCisJCSAqIG5vIGlvIHRvIGJlIHJlcXVpcmVkIHdpdGhvdXQgdGhlcmUgYmVpbmcgYW4gZXJyb3IuICBPciwKKwkJICogc29tZW9uZSBlbHNlIGNvdWxkIGhhdmUgbG9ja2VkIHRoZW0gYW5kIHNlbnQgdGhlbSBkb3duIHRoZQogCQkgKiBwaXBlIHdpdGhvdXQgbG9ja2luZyB0aGUgcGFnZQogCQkgKi8KIAkJYmggPSBoZWFkOwpAQCAtMjQ5Miw3ICsyNDg3LDcgQEAKIAogICAgICAgZmFpbDoKIAkvKiBjYXRjaGVzIHZhcmlvdXMgZXJyb3JzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbnkgdmFsaWQgZGlydHkgYmxvY2tzCi0JICogZ2V0IHRvIHRoZSBtZWRpYS4gIFRoZSBwYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQgYW5kIG5vdCBtYXJrZWQgZm9yIAorCSAqIGdldCB0byB0aGUgbWVkaWEuICBUaGUgcGFnZSBpcyBjdXJyZW50bHkgbG9ja2VkIGFuZCBub3QgbWFya2VkIGZvcgogCSAqIHdyaXRlYmFjawogCSAqLwogCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW9jdGwuYyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKaW5kZXggODMwMzMyMC4uMGNjYzNmZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW9jdGwuYworKysgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCkBAIC0xODksNyArMTg5LDcgQEAKIAl9CiAKIAkvKiB3ZSB1bnBhY2sgYnkgZmluZGluZyB0aGUgcGFnZSB3aXRoIHRoZSB0YWlsLCBhbmQgY2FsbGluZwotCSAqKiByZWlzZXJmc19wcmVwYXJlX3dyaXRlIG9uIHRoYXQgcGFnZS4gIFRoaXMgd2lsbCBmb3JjZSBhIAorCSAqKiByZWlzZXJmc19wcmVwYXJlX3dyaXRlIG9uIHRoYXQgcGFnZS4gIFRoaXMgd2lsbCBmb3JjZSBhCiAJICoqIHJlaXNlcmZzX2dldF9ibG9jayB0byB1bnBhY2sgdGhlIHRhaWwgZm9yIHVzLgogCSAqLwogCWluZGV4ID0gaW5vZGUtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYyBiL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKaW5kZXggOTQ3NTU1Ny4uNzJjYjFjYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYworKysgYi9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCkBAIC05Nyw3ICs5Nyw4IEBACiAKIHN0YXRpYyB2b2lkIHNkX3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgIlNUQVREQVRBLCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtMTYxMDAiLAorCQkJICJTVEFUREFUQSwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAogCQkJIHZpLT52aV9pbmRleCwgdmktPnZpX3R5cGUsIHZpLT52aV9paCk7CiB9CiAKQEAgLTE5MCw3ICsxOTEsOCBAQAogCiBzdGF0aWMgdm9pZCBkaXJlY3RfcHJpbnRfdmkoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiRElSRUNULCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtMTYxMDEiLAorCQkJICJESVJFQ1QsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgpOwogfQogCkBAIC0yNzgsNyArMjgwLDcgQEAKIAl1bnAgPSAoX19sZTMyICopIGl0ZW07CiAKIAlpZiAoaWhfaXRlbV9sZW4oaWgpICUgVU5GTV9QX1NJWkUpCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImluZGlyZWN0X3ByaW50X2l0ZW06IGludmFsaWQgaXRlbSBsZW4iKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtMTYxMDIiLCAiaW52YWxpZCBpdGVtIGxlbiIpOwogCiAJcHJpbnRrKCIlZCBwb2ludGVyc1xuWyAiLCAoaW50KUlfVU5GTV9OVU0oaWgpKTsKIAlmb3IgKGogPSAwOyBqIDwgSV9VTkZNX05VTShpaCk7IGorKykgewpAQCAtMzM0LDcgKzMzNiw4IEBACiAKIHN0YXRpYyB2b2lkIGluZGlyZWN0X3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgIklORElSRUNULCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtMTYxMDMiLAorCQkJICJJTkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAogCQkJIHZpLT52aV9pbmRleCwgdmktPnZpX3R5cGUsIHZpLT52aV9paCk7CiB9CiAKQEAgLTM1OSw3ICszNjIsNyBAQAogCiBzdGF0aWMgaW50IGRpcmVudHJ5X2J5dGVzX251bWJlcihzdHJ1Y3QgaXRlbV9oZWFkICppaCwgaW50IGJsb2NrX3NpemUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtMTYwOTA6IGRpcmVudHJ5X2J5dGVzX251bWJlcjogIgorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInZzLTE2MDkwIiwKIAkJCSAiYnl0ZXMgbnVtYmVyIGlzIGFza2VkIGZvciBkaXJlbnRyeSIpOwogCXJldHVybiAwOwogfQpAQCAtNTE0LDggKzUxNyw5IEBACiAJCSAgICAoKGlzX2FmZmVjdGVkCiAJCSAgICAgICYmICh2bi0+dm5fbW9kZSA9PSBNX1BBU1RFCiAJCQkgIHx8IHZuLT52bl9tb2RlID09IE1fQ1VUKSkgPyBpbnNlcnRfc2l6ZSA6IDApKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAidnMtODAyNTogc2V0X2VudHJ5X3NpemVzOiAobW9kZT09JWMsIGluc2VydF9zaXplPT0lZCksIGludmFsaWQgbGVuZ3RoIG9mIGRpcmVjdG9yeSBpdGVtIiwKKwkJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy04MDI1IiwgIihtb2RlPT0lYywgIgorCQkJCSAgICAgICAiaW5zZXJ0X3NpemU9PSVkKSwgaW52YWxpZCBsZW5ndGggb2YgIgorCQkJCSAgICAgICAiZGlyZWN0b3J5IGl0ZW0iLAogCQkJCSAgICAgICB2bi0+dm5fbW9kZSwgaW5zZXJ0X3NpemUpOwogCQl9CiAJfQpAQCAtNTQ2LDcgKzU1MCw4IEBACiAJfQogCiAJaWYgKGVudHJpZXMgPT0gZGlyX3UtPmVudHJ5X2NvdW50KSB7Ci0JCXJlaXNlcmZzX3BhbmljKE5VTEwsICJmcmVlIHNwYWNlICVkLCBlbnRyeV9jb3VudCAlZFxuIiwgZnJlZSwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgIml0ZW1fb3BzLTEiLAorCQkJICAgICAgICJmcmVlIHNwYWNlICVkLCBlbnRyeV9jb3VudCAlZCIsIGZyZWUsCiAJCQkgICAgICAgZGlyX3UtPmVudHJ5X2NvdW50KTsKIAl9CiAKQEAgLTYxNCw3ICs2MTksOCBAQAogCWludCBpOwogCXN0cnVjdCBkaXJlbnRyeV91YXJlYSAqZGlyX3UgPSB2aS0+dmlfdWFyZWE7CiAKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJESVJFTlRSWSwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgsIGZsYWdzIDB4JXgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTA0IiwKKwkJCSAiRElSRU5UUlksIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoLCBmbGFncyAweCV4IiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgsIGRpcl91LT5mbGFncyk7CiAJcHJpbnRrKCIlZCBlbnRyaWVzOiAiLCBkaXJfdS0+ZW50cnlfY291bnQpOwogCWZvciAoaSA9IDA7IGkgPCBkaXJfdS0+ZW50cnlfY291bnQ7IGkrKykKQEAgLTY0Miw0MyArNjQ4LDQzIEBACiAvLwogc3RhdGljIGludCBlcnJjYXRjaF9ieXRlc19udW1iZXIoc3RydWN0IGl0ZW1faGVhZCAqaWgsIGludCBibG9ja19zaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDE6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDEiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9kZWNyZW1lbnRfa2V5KHN0cnVjdCBjcHVfa2V5ICprZXkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwMjogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwMiIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfaXNfbGVmdF9tZXJnZWFibGUoc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5LAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYnNpemUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwMzogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwMyIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGVycmNhdGNoX3ByaW50X2l0ZW0oc3RydWN0IGl0ZW1faGVhZCAqaWgsIGNoYXIgKml0ZW0pCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwNDogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwNCIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVycmNhdGNoX2NoZWNrX2l0ZW0oc3RydWN0IGl0ZW1faGVhZCAqaWgsIGNoYXIgKml0ZW0pCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwNTogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwNSIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfY3JlYXRlX3ZpKHN0cnVjdCB2aXJ0dWFsX25vZGUgKnZuLAogCQkJICAgICAgc3RydWN0IHZpcnR1YWxfaXRlbSAqdmksCiAJCQkgICAgICBpbnQgaXNfYWZmZWN0ZWQsIGludCBpbnNlcnRfc2l6ZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA2OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA2IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsJCS8vIFdlIG1pZ2h0IHJldHVybiAtMSBoZXJlIGFzIHdlbGwsIGJ1dCBpdCB3b24ndCBoZWxwIGFzIGNyZWF0ZV92aXJ0dWFsX25vZGUoKSBmcm9tIHdoZXJlCiAJLy8gdGhpcyBvcGVyYXRpb24gaXMgY2FsbGVkIGZyb20gaXMgb2YgcmV0dXJuIHR5cGUgdm9pZC4KIH0KQEAgLTY4NiwzNiArNjkyLDM2IEBACiBzdGF0aWMgaW50IGVycmNhdGNoX2NoZWNrX2xlZnQoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmksIGludCBmcmVlLAogCQkJICAgICAgIGludCBzdGFydF9za2lwLCBpbnQgZW5kX3NraXApCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwNzogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwNyIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX2NoZWNrX3JpZ2h0KHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLCBpbnQgZnJlZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA4OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA4IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfcGFydF9zaXplKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLCBpbnQgZmlyc3QsIGludCBjb3VudCkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA5OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA5IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF91bml0X251bShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDEwOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDEwIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZXJyY2F0Y2hfcHJpbnRfdmkoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAxMTogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAxMSIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXRlbV9vcGVyYXRpb25zIGVycmNhdGNoX29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCA5NjQzYzNiLi43N2Y1YmI3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0xLDM2ICsxLDM2IEBACiAvKgogKiogV3JpdGUgYWhlYWQgbG9nZ2luZyBpbXBsZW1lbnRhdGlvbiBjb3B5cmlnaHQgQ2hyaXMgTWFzb24gMjAwMAogKioKLSoqIFRoZSBiYWNrZ3JvdW5kIGNvbW1pdHMgbWFrZSB0aGlzIGNvZGUgdmVyeSBpbnRlcmVsYXRlZCwgYW5kIAorKiogVGhlIGJhY2tncm91bmQgY29tbWl0cyBtYWtlIHRoaXMgY29kZSB2ZXJ5IGludGVyZWxhdGVkLCBhbmQKICoqIG92ZXJseSBjb21wbGV4LiAgSSBuZWVkIHRvIHJldGhpbmsgdGhpbmdzIGEgYml0Li4uLlRoZSBtYWpvciBwbGF5ZXJzOgogKioKLSoqIGpvdXJuYWxfYmVnaW4gLS0gY2FsbCB3aXRoIHRoZSBudW1iZXIgb2YgYmxvY2tzIHlvdSBleHBlY3QgdG8gbG9nLiAgCisqKiBqb3VybmFsX2JlZ2luIC0tIGNhbGwgd2l0aCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB5b3UgZXhwZWN0IHRvIGxvZy4KICoqICAgICAgICAgICAgICAgICAgSWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vCi0qKiAJCSAgICBvbGQsIGl0IHdpbGwgYmxvY2sgdW50aWwgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgCisqKiAJCSAgICBvbGQsIGl0IHdpbGwgYmxvY2sgdW50aWwgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMKICoqIAkJICAgIGZpbmlzaGVkLCBhbmQgdGhlbiBzdGFydCBhIG5ldyBvbmUuCi0qKgkJICAgIFVzdWFsbHksIHlvdXIgdHJhbnNhY3Rpb24gd2lsbCBnZXQgam9pbmVkIGluIHdpdGggCisqKgkJICAgIFVzdWFsbHksIHlvdXIgdHJhbnNhY3Rpb24gd2lsbCBnZXQgam9pbmVkIGluIHdpdGgKICoqICAgICAgICAgICAgICAgICAgcHJldmlvdXMgb25lcyBmb3Igc3BlZWQuCiAqKgotKiogam91cm5hbF9qb2luICAtLSBzYW1lIGFzIGpvdXJuYWxfYmVnaW4sIGJ1dCB3b24ndCBibG9jayBvbiB0aGUgY3VycmVudCAKKyoqIGpvdXJuYWxfam9pbiAgLS0gc2FtZSBhcyBqb3VybmFsX2JlZ2luLCBidXQgd29uJ3QgYmxvY2sgb24gdGhlIGN1cnJlbnQKICoqICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gcmVnYXJkbGVzcyBvZiBhZ2UuICBEb24ndCBldmVyIGNhbGwKLSoqICAgICAgICAgICAgICAgICAgdGhpcy4gIEV2ZXIuICBUaGVyZSBhcmUgb25seSB0d28gcGxhY2VzIGl0IHNob3VsZCBiZSAKKyoqICAgICAgICAgICAgICAgICAgdGhpcy4gIEV2ZXIuICBUaGVyZSBhcmUgb25seSB0d28gcGxhY2VzIGl0IHNob3VsZCBiZQogKiogICAgICAgICAgICAgICAgICBjYWxsZWQgZnJvbSwgYW5kIHRoZXkgYXJlIGJvdGggaW5zaWRlIHRoaXMgZmlsZS4KICoqCi0qKiBqb3VybmFsX21hcmtfZGlydHkgLS0gYWRkcyBibG9ja3MgaW50byB0aGlzIHRyYW5zYWN0aW9uLiAgY2xlYXJzIGFueSBmbGFncyAKKyoqIGpvdXJuYWxfbWFya19kaXJ0eSAtLSBhZGRzIGJsb2NrcyBpbnRvIHRoaXMgdHJhbnNhY3Rpb24uICBjbGVhcnMgYW55IGZsYWdzCiAqKiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtaWdodCBtYWtlIHRoZW0gZ2V0IHNlbnQgdG8gZGlzawotKiogICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIG1hcmtzIHRoZW0gQkhfSkRpcnR5LiAgUHV0cyB0aGUgYnVmZmVyIGhlYWQgCi0qKiAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBoYXNoLiAgCisqKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gbWFya3MgdGhlbSBCSF9KRGlydHkuICBQdXRzIHRoZSBidWZmZXIgaGVhZAorKiogICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzaC4KICoqCiAqKiBqb3VybmFsX2VuZCAtLSBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBiYXRjaGFibGUsIGl0IGRvZXMgbm90aGluZwogKiogICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLCBpdCBjb3VsZCBkbyBhbiBhc3luYy9zeW5jaHJvbm91cyBjb21taXQsIG9yCi0qKiAgICAgICAgICAgICAgICAgICBhIGZ1bGwgZmx1c2ggb2YgYWxsIGxvZyBhbmQgcmVhbCBibG9ja3MgaW4gdGhlIAorKiogICAgICAgICAgICAgICAgICAgYSBmdWxsIGZsdXNoIG9mIGFsbCBsb2cgYW5kIHJlYWwgYmxvY2tzIGluIHRoZQogKiogICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uCiAqKgotKiogZmx1c2hfb2xkX2NvbW1pdHMgLS0gaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgaXQgaXMgZW5kZWQgYW5kIAotKiogICAgICAgICAgICAgICAgICAgICAgY29tbWl0IGJsb2NrcyBhcmUgc2VudCB0byBkaXNrLiAgRm9yY2VzIGNvbW1pdCBibG9ja3MgCi0qKiAgICAgICAgICAgICAgICAgICAgICB0byBkaXNrIGZvciBhbGwgYmFja2dyb3VuZGVkIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gCisqKiBmbHVzaF9vbGRfY29tbWl0cyAtLSBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBpdCBpcyBlbmRlZCBhbmQKKyoqICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBibG9ja3MgYXJlIHNlbnQgdG8gZGlzay4gIEZvcmNlcyBjb21taXQgYmxvY2tzCisqKiAgICAgICAgICAgICAgICAgICAgICB0byBkaXNrIGZvciBhbGwgYmFja2dyb3VuZGVkIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4KICoqICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZCB0b28gbG9uZy4KLSoqCQkgICAgIC0tIE5vdGUsIGlmIHlvdSBjYWxsIHRoaXMgYXMgYW4gaW1tZWRpYXRlIGZsdXNoIGZyb20gCisqKgkJICAgICAtLSBOb3RlLCBpZiB5b3UgY2FsbCB0aGlzIGFzIGFuIGltbWVkaWF0ZSBmbHVzaCBmcm9tCiAqKgkJICAgICAgICBmcm9tIHdpdGhpbiBrdXBkYXRlLCBpdCB3aWxsIGlnbm9yZSB0aGUgaW1tZWRpYXRlIGZsYWcKICovCiAKQEAgLTk3LDcgKzk3LDcgQEAKIAkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsIGludCBmbHVzaGFsbCk7CiBzdGF0aWMgaW50IGNhbl9kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24pOwogc3RhdGljIGludCBqb3VybmFsX2pvaW4oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKTsKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2Nrcyk7CiBzdGF0aWMgaW50IHJlbGVhc2Vfam91cm5hbF9kZXYoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwKIAkJCSAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCk7CiBzdGF0aWMgaW50IGRpcnR5X29uZV90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCkBAIC0xMTMsMTIgKzExMywxMiBAQAogfTsKIAogc3RhdGljIGludCBkb19qb3VybmFsX2JlZ2luX3Ioc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKKwkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ibG9ja3MsIGludCBqb2luKTsKIAotc3RhdGljIHZvaWQgaW5pdF9qb3VybmFsX2hhc2goc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgdm9pZCBpbml0X2pvdXJuYWxfaGFzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJbWVtc2V0KGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgMCwKIAkgICAgICAgSk9VUk5BTF9IQVNIX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKikpOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmFsbG9jYXRlX2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jawotCQkJCQkJCSAqcF9zX3NiKQorCQkJCQkJCSAqc2IpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibjsKIAlzdGF0aWMgaW50IGlkOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJaWYgKCFibikgewogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JYm4tPmRhdGEgPSBremFsbG9jKHBfc19zYi0+c19ibG9ja3NpemUsIEdGUF9OT0ZTKTsKKwlibi0+ZGF0YSA9IGt6YWxsb2Moc2ItPnNfYmxvY2tzaXplLCBHRlBfTk9GUyk7CiAJaWYgKCFibi0+ZGF0YSkgewogCQlrZnJlZShibik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTY0LDkgKzE2NCw5IEBACiAJcmV0dXJuIGJuOwogfQogCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpnZXRfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpnZXRfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm4gPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gam91cm5hbC0+al9iaXRtYXBfbm9kZXMubmV4dDsKIApAQCAtMTc2LDIxICsxNzYsMjEgQEAKIAlpZiAoZW50cnkgIT0gJmpvdXJuYWwtPmpfYml0bWFwX25vZGVzKSB7CiAJCWJuID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlLCBsaXN0KTsKIAkJbGlzdF9kZWwoZW50cnkpOwotCQltZW1zZXQoYm4tPmRhdGEsIDAsIHBfc19zYi0+c19ibG9ja3NpemUpOworCQltZW1zZXQoYm4tPmRhdGEsIDAsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJCWpvdXJuYWwtPmpfZnJlZV9iaXRtYXBfbm9kZXMtLTsKIAkJcmV0dXJuIGJuOwogCX0KLQlibiA9IGFsbG9jYXRlX2JpdG1hcF9ub2RlKHBfc19zYik7CisJYm4gPSBhbGxvY2F0ZV9iaXRtYXBfbm9kZShzYik7CiAJaWYgKCFibikgewogCQl5aWVsZCgpOwogCQlnb3RvIHJlcGVhdDsKIAl9CiAJcmV0dXJuIGJuOwogfQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJam91cm5hbC0+al91c2VkX2JpdG1hcF9ub2Rlcy0tOwogCWlmIChqb3VybmFsLT5qX2ZyZWVfYml0bWFwX25vZGVzID4gUkVJU0VSRlNfTUFYX0JJVE1BUF9OT0RFUykgewogCQlrZnJlZShibi0+ZGF0YSk7CkBAIC0yMDEsNDYgKzIwMSw0NiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxsb2NhdGVfYml0bWFwX25vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgYWxsb2NhdGVfYml0bWFwX25vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgUkVJU0VSRlNfTUlOX0JJVE1BUF9OT0RFUzsgaSsrKSB7Ci0JCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUocF9zX3NiKTsKKwkJYm4gPSBhbGxvY2F0ZV9iaXRtYXBfbm9kZShzYik7CiAJCWlmIChibikgewogCQkJbGlzdF9hZGQoJmJuLT5saXN0LCAmam91cm5hbC0+al9iaXRtYXBfbm9kZXMpOwogCQkJam91cm5hbC0+al9mcmVlX2JpdG1hcF9ub2RlcysrOwogCQl9IGVsc2UgewotCQkJYnJlYWs7CS8vIHRoaXMgaXMgb2ssIHdlJ2xsIHRyeSBhZ2FpbiB3aGVuIG1vcmUgYXJlIG5lZWRlZCAKKwkJCWJyZWFrOwkvKiB0aGlzIGlzIG9rLCB3ZSdsbCB0cnkgYWdhaW4gd2hlbiBtb3JlIGFyZSBuZWVkZWQgKi8KIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBzZXRfYml0X2luX2xpc3RfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBzZXRfYml0X2luX2xpc3RfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICBiX2Jsb2NrbnJfdCBibG9jaywKIAkJCQkgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIpCiB7Ci0JdW5zaWduZWQgaW50IGJtYXBfbnIgPSBibG9jayAvIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpOwotCXVuc2lnbmVkIGludCBiaXRfbnIgPSBibG9jayAlIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpOworCXVuc2lnbmVkIGludCBibWFwX25yID0gYmxvY2sgLyAoc2ItPnNfYmxvY2tzaXplIDw8IDMpOworCXVuc2lnbmVkIGludCBiaXRfbnIgPSBibG9jayAlIChzYi0+c19ibG9ja3NpemUgPDwgMyk7CiAKIAlpZiAoIWpiLT5iaXRtYXBzW2JtYXBfbnJdKSB7Ci0JCWpiLT5iaXRtYXBzW2JtYXBfbnJdID0gZ2V0X2JpdG1hcF9ub2RlKHBfc19zYik7CisJCWpiLT5iaXRtYXBzW2JtYXBfbnJdID0gZ2V0X2JpdG1hcF9ub2RlKHNiKTsKIAl9CiAJc2V0X2JpdChiaXRfbnIsICh1bnNpZ25lZCBsb25nICopamItPmJpdG1hcHNbYm1hcF9ucl0tPmRhdGEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2JpdG1hcF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgY2xlYW51cF9iaXRtYXBfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIpCiB7CiAJaW50IGk7CiAJaWYgKGpiLT5iaXRtYXBzID09IE5VTEwpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCByZWlzZXJmc19ibWFwX2NvdW50KHBfc19zYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWlzZXJmc19ibWFwX2NvdW50KHNiKTsgaSsrKSB7CiAJCWlmIChqYi0+Yml0bWFwc1tpXSkgewotCQkJZnJlZV9iaXRtYXBfbm9kZShwX3Nfc2IsIGpiLT5iaXRtYXBzW2ldKTsKKwkJCWZyZWVfYml0bWFwX25vZGUoc2IsIGpiLT5iaXRtYXBzW2ldKTsKIAkJCWpiLT5iaXRtYXBzW2ldID0gTlVMTDsKIAkJfQogCX0KQEAgLTI0OSw3ICsyNDksNyBAQAogLyoKICoqIG9ubHkgY2FsbCB0aGlzIG9uIEZTIHVubW91bnQuCiAqLwotc3RhdGljIGludCBmcmVlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgZnJlZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYl9hcnJheSkKIHsKIAlpbnQgaTsKQEAgLTI1NywxNiArMjU3LDE2IEBACiAJZm9yIChpID0gMDsgaSA8IEpPVVJOQUxfTlVNX0JJVE1BUFM7IGkrKykgewogCQlqYiA9IGpiX2FycmF5ICsgaTsKIAkJamItPmpvdXJuYWxfbGlzdCA9IE5VTEw7Ci0JCWNsZWFudXBfYml0bWFwX2xpc3QocF9zX3NiLCBqYik7CisJCWNsZWFudXBfYml0bWFwX2xpc3Qoc2IsIGpiKTsKIAkJdmZyZWUoamItPmJpdG1hcHMpOwogCQlqYi0+Yml0bWFwcyA9IE5VTEw7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZyZWVfYml0bWFwX25vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIGludCBmcmVlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCA9IGpvdXJuYWwtPmpfYml0bWFwX25vZGVzLm5leHQ7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibjsKIApAQCAtMjgzLDEwICsyODMsMTAgQEAKIH0KIAogLyoKLSoqIGdldCBtZW1vcnkgZm9yIEpPVVJOQUxfTlVNX0JJVE1BUFMgd29ydGggb2YgYml0bWFwcy4gCisqKiBnZXQgbWVtb3J5IGZvciBKT1VSTkFMX05VTV9CSVRNQVBTIHdvcnRoIG9mIGJpdG1hcHMuCiAqKiBqYl9hcnJheSBpcyB0aGUgYXJyYXkgdG8gYmUgZmlsbGVkIGluLgogKi8KLWludCByZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitpbnQgcmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYl9hcnJheSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgYm1hcF9ucikKIHsKQEAgLTMwMCwzMCArMzAwLDMwIEBACiAJCWpiLT5qb3VybmFsX2xpc3QgPSBOVUxMOwogCQlqYi0+Yml0bWFwcyA9IHZtYWxsb2MobWVtKTsKIAkJaWYgKCFqYi0+Yml0bWFwcykgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiY2xtLTIwMDAsIHVuYWJsZSB0byBhbGxvY2F0ZSBiaXRtYXBzIGZvciBqb3VybmFsIGxpc3RzIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiY2xtLTIwMDAiLCAidW5hYmxlIHRvICIKKwkJCQkJICJhbGxvY2F0ZSBiaXRtYXBzIGZvciBqb3VybmFsIGxpc3RzIik7CiAJCQlmYWlsZWQgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAkJbWVtc2V0KGpiLT5iaXRtYXBzLCAwLCBtZW0pOwogCX0KIAlpZiAoZmFpbGVkKSB7Ci0JCWZyZWVfbGlzdF9iaXRtYXBzKHBfc19zYiwgamJfYXJyYXkpOworCQlmcmVlX2xpc3RfYml0bWFwcyhzYiwgamJfYXJyYXkpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwogfQogCiAvKgotKiogZmluZCBhbiBhdmFpbGFibGUgbGlzdCBiaXRtYXAuICBJZiB5b3UgY2FuJ3QgZmluZCBvbmUsIGZsdXNoIGEgY29tbWl0IGxpc3QgCisqKiBmaW5kIGFuIGF2YWlsYWJsZSBsaXN0IGJpdG1hcC4gIElmIHlvdSBjYW4ndCBmaW5kIG9uZSwgZmx1c2ggYSBjb21taXQgbGlzdAogKiogYW5kIHRyeSBhZ2FpbgogKi8KLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmdldF9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmdldF9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkJICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QKIAkJCQkJCSAgICAqamwpCiB7CiAJaW50IGksIGo7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiID0gTlVMTDsKIAogCWZvciAoaiA9IDA7IGogPCAoSk9VUk5BTF9OVU1fQklUTUFQUyAqIDMpOyBqKyspIHsKQEAgLTMzMSw3ICszMzEsNyBAQAogCQlqb3VybmFsLT5qX2xpc3RfYml0bWFwX2luZGV4ID0gKGkgKyAxKSAlIEpPVVJOQUxfTlVNX0JJVE1BUFM7CiAJCWpiID0gam91cm5hbC0+al9saXN0X2JpdG1hcCArIGk7CiAJCWlmIChqb3VybmFsLT5qX2xpc3RfYml0bWFwW2ldLmpvdXJuYWxfbGlzdCkgewotCQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLAorCQkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsCiAJCQkJCSAgam91cm5hbC0+al9saXN0X2JpdG1hcFtpXS4KIAkJCQkJICBqb3VybmFsX2xpc3QsIDEpOwogCQkJaWYgKCFqb3VybmFsLT5qX2xpc3RfYml0bWFwW2ldLmpvdXJuYWxfbGlzdCkgewpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJcmV0dXJuIGpiOwogfQogCi0vKiAKKy8qCiAqKiBhbGxvY2F0ZXMgYSBuZXcgY2h1bmsgb2YgWCBub2RlcywgYW5kIGxpbmtzIHRoZW0gYWxsIHRvZ2V0aGVyIGFzIGEgbGlzdC4KICoqIFVzZXMgdGhlIGNub2RlLT5uZXh0IGFuZCBjbm9kZS0+cHJldiBwb2ludGVycwogKiogcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUKQEAgLTM3NiwxNCArMzc2LDE0IEBACiB9CiAKIC8qCi0qKiBwdWxscyBhIGNub2RlIG9mZiB0aGUgZnJlZSBsaXN0LCBvciByZXR1cm5zIE5VTEwgb24gZmFpbHVyZSAKKyoqIHB1bGxzIGEgY25vZGUgb2ZmIHRoZSBmcmVlIGxpc3QsIG9yIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlCiAqLwotc3RhdGljIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpnZXRfY25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmdldF9jbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCi0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJnZXRfY25vZGUiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiZ2V0X2Nub2RlIik7CiAKIAlpZiAoam91cm5hbC0+al9jbm9kZV9mcmVlIDw9IDApIHsKIAkJcmV0dXJuIE5VTEw7CkBAIC00MDMsMTQgKzQwMywxNCBAQAogfQogCiAvKgotKiogcmV0dXJucyBhIGNub2RlIHRvIHRoZSBmcmVlIGxpc3QgCisqKiByZXR1cm5zIGEgY25vZGUgdG8gdGhlIGZyZWUgbGlzdAogKi8KLXN0YXRpYyB2b2lkIGZyZWVfY25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgdm9pZCBmcmVlX2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCSAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiZnJlZV9jbm9kZSIpOworCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc2IsICJmcmVlX2Nub2RlIik7CiAKIAlqb3VybmFsLT5qX2Nub2RlX3VzZWQtLTsKIAlqb3VybmFsLT5qX2Nub2RlX2ZyZWUrKzsKQEAgLTQzNiw4ICs0MzYsOCBAQAogewogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoY3VycmVudC0+bG9ja19kZXB0aCA8IDApIHsKLQkJcmVpc2VyZnNfcGFuaWMoc2IsICIlcyBjYWxsZWQgd2l0aG91dCBrZXJuZWwgbG9jayBoZWxkIiwKLQkJCSAgICAgICBjYWxsZXIpOworCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMSIsICIlcyBjYWxsZWQgd2l0aG91dCBrZXJuZWwgIgorCQkJICAgICAgICJsb2NrIGhlbGQiLCBjYWxsZXIpOwogCX0KICNlbHNlCiAJOwpAQCAtNDgxLDExICs0ODEsMTEgQEAKICoqIHJlamVjdCBpdCBvbiB0aGUgbmV4dCBjYWxsIHRvIHJlaXNlcmZzX2luX2pvdXJuYWwKICoqCiAqLwotaW50IHJlaXNlcmZzX2luX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitpbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJdW5zaWduZWQgaW50IGJtYXBfbnIsIGludCBiaXRfbnIsIGludCBzZWFyY2hfYWxsLAogCQkJYl9ibG9ja25yX3QgKiBuZXh0X3plcm9fYml0KQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamI7CiAJaW50IGk7CkBAIC00OTMsMTQgKzQ5MywxNCBAQAogCiAJKm5leHRfemVyb19iaXQgPSAwOwkvKiBhbHdheXMgc3RhcnQgdGhpcyBhdCB6ZXJvLiAqLwogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuaW5fam91cm5hbCk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5pbl9qb3VybmFsKTsKIAkvKiBJZiB3ZSBhcmVuJ3QgZG9pbmcgYSBzZWFyY2hfYWxsLCB0aGlzIGlzIGEgbWV0YWJsb2NrLCBhbmQgaXQgd2lsbCBiZSBsb2dnZWQgYmVmb3JlIHVzZS4KIAkgKiogaWYgd2UgY3Jhc2ggYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGZyZWVkIGl0IGNvbW1pdHMsICB0aGlzIHRyYW5zYWN0aW9uIHdvbid0CiAJICoqIGhhdmUgY29tbWl0dGVkIGVpdGhlciwgYW5kIHRoZSBibG9jayB3aWxsIG5ldmVyIGJlIHdyaXR0ZW4KIAkgKi8KIAlpZiAoc2VhcmNoX2FsbCkgewogCQlmb3IgKGkgPSAwOyBpIDwgSk9VUk5BTF9OVU1fQklUTUFQUzsgaSsrKSB7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5pbl9qb3VybmFsX2JpdG1hcCk7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmluX2pvdXJuYWxfYml0bWFwKTsKIAkJCWpiID0gam91cm5hbC0+al9saXN0X2JpdG1hcCArIGk7CiAJCQlpZiAoamItPmpvdXJuYWxfbGlzdCAmJiBqYi0+Yml0bWFwc1tibWFwX25yXSAmJgogCQkJICAgIHRlc3RfYml0KGJpdF9uciwKQEAgLTUxMCwyOCArNTEwLDI4IEBACiAJCQkJICAgIGZpbmRfbmV4dF96ZXJvX2JpdCgodW5zaWduZWQgbG9uZyAqKQogCQkJCQkJICAgICAgIChqYi0+Yml0bWFwc1tibWFwX25yXS0+CiAJCQkJCQkJZGF0YSksCi0JCQkJCQkgICAgICAgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzLAorCQkJCQkJICAgICAgIHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzLAogCQkJCQkJICAgICAgIGJpdF9uciArIDEpOwogCQkJCXJldHVybiAxOwogCQkJfQogCQl9CiAJfQogCi0JYmwgPSBibWFwX25yICogKHBfc19zYi0+c19ibG9ja3NpemUgPDwgMykgKyBiaXRfbnI7CisJYmwgPSBibWFwX25yICogKHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzKSArIGJpdF9ucjsKIAkvKiBpcyBpdCBpbiBhbnkgb2xkIHRyYW5zYWN0aW9ucz8gKi8KIAlpZiAoc2VhcmNoX2FsbAogCSAgICAmJiAoY24gPQotCQlnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCBibCkpKSB7CisJCWdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwgYmwpKSkgewogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBpcyBpdCBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCWlmICgoY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmwpKSkgeworCWlmICgoY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibCkpKSB7CiAJCUJVRygpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5pbl9qb3VybmFsX3JldXNhYmxlKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmluX2pvdXJuYWxfcmV1c2FibGUpOwogCS8qIHNhZmUgZm9yIHJldXNlICovCiAJcmV0dXJuIDA7CiB9CkBAIC01NTMsMTYgKzU1MywxNiBAQAogfQogCiAvKiBsb2NrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja19qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIGlubGluZSB2b2lkIGxvY2tfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmxvY2tfam91cm5hbCk7Ci0JbXV0ZXhfbG9jaygmU0JfSk9VUk5BTChwX3Nfc2IpLT5qX211dGV4KTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmxvY2tfam91cm5hbCk7CisJbXV0ZXhfbG9jaygmU0JfSk9VUk5BTChzYiktPmpfbXV0ZXgpOwogfQogCiAvKiB1bmxvY2sgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCW11dGV4X3VubG9jaygmU0JfSk9VUk5BTChwX3Nfc2IpLT5qX211dGV4KTsKKwltdXRleF91bmxvY2soJlNCX0pPVVJOQUwoc2IpLT5qX211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdldF9qb3VybmFsX2xpc3Qoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwpCkBAIC01NzQsNyArNTc0LDcgQEAKIAkJCQkgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwpCiB7CiAJaWYgKGpsLT5qX3JlZmNvdW50IDwgMSkgewotCQlyZWlzZXJmc19wYW5pYyhzLCAidHJhbnMgaWQgJWx1LCByZWZjb3VudCBhdCAlZCIsCisJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTIiLCAidHJhbnMgaWQgJXUsIHJlZmNvdW50IGF0ICVkIiwKIAkJCSAgICAgICBqbC0+al90cmFuc19pZCwgamwtPmpfcmVmY291bnQpOwogCX0KIAlpZiAoLS1qbC0+al9yZWZjb3VudCA9PSAwKQpAQCAtNTg2LDIwICs1ODYsMjAgQEAKICoqIGl0IGdldHMgY2FsbGVkIGJ5IGZsdXNoX2NvbW1pdF9saXN0LCBhbmQgY2xlYW5zIHVwIGFueSBkYXRhIHN0b3JlZCBhYm91dCBibG9ja3MgZnJlZWQgZHVyaW5nIGEKICoqIHRyYW5zYWN0aW9uLgogKi8KLXN0YXRpYyB2b2lkIGNsZWFudXBfZnJlZWRfZm9yX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyB2b2lkIGNsZWFudXBfZnJlZWRfZm9yX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCkKIHsKIAogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIgPSBqbC0+al9saXN0X2JpdG1hcDsKIAlpZiAoamIpIHsKLQkJY2xlYW51cF9iaXRtYXBfbGlzdChwX3Nfc2IsIGpiKTsKKwkJY2xlYW51cF9iaXRtYXBfbGlzdChzYiwgamIpOwogCX0KIAlqbC0+al9saXN0X2JpdG1hcC0+am91cm5hbF9saXN0ID0gTlVMTDsKIAlqbC0+al9saXN0X2JpdG1hcCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB0cmFuc19pZCkKKwkJCQkgICAgdW5zaWduZWQgaW50IHRyYW5zX2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9ICZqb3VybmFsLT5qX2pvdXJuYWxfbGlzdDsKQEAgLTY0NCw4ICs2NDQsOCBAQAogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAogCWlmIChidWZmZXJfam91cm5hbGVkKGJoKSkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJjbG0tMjA4NDogcGlubmVkIGJ1ZmZlciAlbHU6JXMgc2VudCB0byBkaXNrIiwKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiY2xtLTIwODQiLAorCQkJCSAicGlubmVkIGJ1ZmZlciAlbHU6JXMgc2VudCB0byBkaXNrIiwKIAkJCQkgYmgtPmJfYmxvY2tuciwgYmRldm5hbWUoYmgtPmJfYmRldiwgYikpOwogCX0KIAlpZiAodXB0b2RhdGUpCkBAIC05MzMsOSArOTMzLDkgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpvdGhlcl9qbDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpmaXJzdF9qbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7Ci0JdW5zaWduZWQgbG9uZyBvdGhlcl90cmFuc19pZDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3RyYW5zX2lkOworCXVuc2lnbmVkIGludCB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBvdGhlcl90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfdHJhbnNfaWQ7CiAKICAgICAgIGZpbmRfZmlyc3Q6CiAJLyoKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAJaW50IGk7CiAJYl9ibG9ja25yX3QgYm47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0YmggPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CiAJaW50IGJhcnJpZXIgPSAwOwogCWludCByZXR2YWwgPSAwOwpAQCAtMTEyMiw3ICsxMTIyLDggQEAKIAkJCXN5bmNfZGlydHlfYnVmZmVyKHRiaCk7CiAJCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKHRiaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTYwMSwgYnVmZmVyIHdyaXRlIGZhaWxlZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MDEiLAorCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQkJcmV0dmFsID0gLUVJTzsKIAkJfQpAQCAtMTE1NCwxNCArMTE1NSwxNCBAQAogCSAqIHVwIHByb3BhZ2F0aW5nIHRoZSB3cml0ZSBlcnJvciBvdXQgdG8gdGhlIGZpbGVzeXN0ZW0uICovCiAJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoamwtPmpfY29tbWl0X2JoKSkpIHsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MTU6IGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MTUiLCAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogI2VuZGlmCiAJCXJldHZhbCA9IC1FSU87CiAJfQogCWJmb3JnZXQoamwtPmpfY29tbWl0X2JoKTsKIAlpZiAoam91cm5hbC0+al9sYXN0X2NvbW1pdF9pZCAhPSAwICYmCiAJICAgIChqbC0+al90cmFuc19pZCAtIGpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQpICE9IDEpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDA6IGxhc3QgY29tbWl0ICVsdSwgY3VycmVudCAlbHUiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjIwMCIsICJsYXN0IGNvbW1pdCAlbHUsIGN1cnJlbnQgJWx1IiwKIAkJCQkgam91cm5hbC0+al9sYXN0X2NvbW1pdF9pZCwgamwtPmpfdHJhbnNfaWQpOwogCX0KIAlqb3VybmFsLT5qX2xhc3RfY29tbWl0X2lkID0gamwtPmpfdHJhbnNfaWQ7CkBAIC0xMTkxLDggKzExOTIsOCBAQAogfQogCiAvKgotKiogZmx1c2hfam91cm5hbF9saXN0IGZyZXF1ZW50bHkgbmVlZHMgdG8gZmluZCBhIG5ld2VyIHRyYW5zYWN0aW9uIGZvciBhIGdpdmVuIGJsb2NrLiAgVGhpcyBkb2VzIHRoYXQsIG9yIAotKiogcmV0dXJucyBOVUxMIGlmIGl0IGNhbid0IGZpbmQgYW55dGhpbmcgCisqKiBmbHVzaF9qb3VybmFsX2xpc3QgZnJlcXVlbnRseSBuZWVkcyB0byBmaW5kIGEgbmV3ZXIgdHJhbnNhY3Rpb24gZm9yIGEgZ2l2ZW4gYmxvY2suICBUaGlzIGRvZXMgdGhhdCwgb3IKKyoqIHJldHVybnMgTlVMTCBpZiBpdCBjYW4ndCBmaW5kIGFueXRoaW5nCiAqLwogc3RhdGljIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmZpbmRfbmV3ZXJfamxfZm9yX2NuKHN0cnVjdAogCQkJCQkJCSAgcmVpc2VyZnNfam91cm5hbF9jbm9kZQpAQCAtMTIzNiwxMSArMTIzNywxMSBAQAogKiogam91cm5hbCBsaXN0IGZvciB0aGlzIHRyYW5zYWN0aW9uLiAgQXNpZGUgZnJvbSBmcmVlaW5nIHRoZSBjbm9kZSwgdGhpcyBhbHNvIGFsbG93cyB0aGUKICoqIGJsb2NrIHRvIGJlIHJlYWxsb2NhdGVkIGZvciBkYXRhIGJsb2NrcyBpZiBpdCBoYWQgYmVlbiBkZWxldGVkLgogKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9hbGxfZnJvbV9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgdm9pZCByZW1vdmVfYWxsX2Zyb21fam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCwKIAkJCQkJIGludCBkZWJ1ZykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiwgKmxhc3Q7CiAJY24gPSBqbC0+al9yZWFsYmxvY2s7CiAKQEAgLTEyNTAsMTggKzEyNTEsMTggQEAKIAl3aGlsZSAoY24pIHsKIAkJaWYgKGNuLT5ibG9ja25yICE9IDApIHsKIAkJCWlmIChkZWJ1ZykgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy0yMjAxIiwKIAkJCQkJCSAiYmxvY2sgJXUsIGJoIGlzICVkLCBzdGF0ZSAlbGQiLAogCQkJCQkJIGNuLT5ibG9ja25yLCBjbi0+YmggPyAxIDogMCwKIAkJCQkJCSBjbi0+c3RhdGUpOwogCQkJfQogCQkJY24tPnN0YXRlID0gMDsKLQkJCXJlbW92ZV9qb3VybmFsX2hhc2gocF9zX3NiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKKwkJCXJlbW92ZV9qb3VybmFsX2hhc2goc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAogCQkJCQkgICAgamwsIGNuLT5ibG9ja25yLCAxKTsKIAkJfQogCQlsYXN0ID0gY247CiAJCWNuID0gY24tPm5leHQ7Ci0JCWZyZWVfY25vZGUocF9zX3NiLCBsYXN0KTsKKwkJZnJlZV9jbm9kZShzYiwgbGFzdCk7CiAJfQogCWpsLT5qX3JlYWxibG9jayA9IE5VTEw7CiB9CkBAIC0xMjczLDEyICsxMjc0LDEyIEBACiAqKiBjYWxsZWQgYnkgZmx1c2hfam91cm5hbF9saXN0LCBiZWZvcmUgaXQgY2FsbHMgcmVtb3ZlX2FsbF9mcm9tX2pvdXJuYWxfbGlzdAogKioKICovCi1zdGF0aWMgaW50IF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCisJCQkJCXVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKmpoOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAlpZiAocmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTEyODgsOCArMTI4OSw4IEBACiAJCQl3YWl0X29uX2J1ZmZlcigoam91cm5hbC0+al9oZWFkZXJfYmgpKTsKIAkJCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSkpIHsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJCSAiam91cm5hbC02OTk6IGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC02OTkiLAorCQkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAjZW5kaWYKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KQEAgLTEzMDIsNDkgKzEzMDMsNDkgQEAKIAkJamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCk7CiAJCWpoLT5qX21vdW50X2lkID0gY3B1X3RvX2xlMzIoam91cm5hbC0+al9tb3VudF9pZCk7CiAKLQkJaWYgKHJlaXNlcmZzX2JhcnJpZXJfZmx1c2gocF9zX3NiKSkgeworCQlpZiAocmVpc2VyZnNfYmFycmllcl9mbHVzaChzYikpIHsKIAkJCWludCByZXQ7CiAJCQlsb2NrX2J1ZmZlcihqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCQlyZXQgPSBzdWJtaXRfYmFycmllcl9idWZmZXIoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQkJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkgewogCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoam91cm5hbC0+al9oZWFkZXJfYmgpOwotCQkJCWRpc2FibGVfYmFycmllcihwX3Nfc2IpOworCQkJCWRpc2FibGVfYmFycmllcihzYik7CiAJCQkJZ290byBzeW5jOwogCQkJfQogCQkJd2FpdF9vbl9idWZmZXIoam91cm5hbC0+al9oZWFkZXJfYmgpOwotCQkJY2hlY2tfYmFycmllcl9jb21wbGV0aW9uKHBfc19zYiwgam91cm5hbC0+al9oZWFkZXJfYmgpOworCQkJY2hlY2tfYmFycmllcl9jb21wbGV0aW9uKHNiLCBqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCX0gZWxzZSB7CiAJCSAgICAgIHN5bmM6CiAJCQlzZXRfYnVmZmVyX2RpcnR5KGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJfQogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShqb3VybmFsLT5qX2hlYWRlcl9iaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtODM3OiBJTyBlcnJvciBkdXJpbmcgam91cm5hbCByZXBsYXkiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTgzNyIsCisJCQkJCSAiSU8gZXJyb3IgZHVyaW5nIGpvdXJuYWwgcmVwbGF5Iik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IHVwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB0cmFuc19pZCkKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHRyYW5zX2lkKQogewotCXJldHVybiBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHBfc19zYiwgb2Zmc2V0LCB0cmFuc19pZCk7CisJcmV0dXJuIF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc2IsIG9mZnNldCwgdHJhbnNfaWQpOwogfQogCi0vKiAKLSoqIGZsdXNoIGFueSBhbmQgYWxsIGpvdXJuYWwgbGlzdHMgb2xkZXIgdGhhbiB5b3UgYXJlIAorLyoKKyoqIGZsdXNoIGFueSBhbmQgYWxsIGpvdXJuYWwgbGlzdHMgb2xkZXIgdGhhbiB5b3UgYXJlCiAqKiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBmbHVzaF9qb3VybmFsX2xpc3QKICovCi1zdGF0aWMgaW50IGZsdXNoX29sZGVyX2pvdXJuYWxfbGlzdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGZsdXNoX29sZGVyX2pvdXJuYWxfbGlzdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKm90aGVyX2psOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOworCXVuc2lnbmVkIGludCB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOwogCiAJLyogd2Uga25vdyB3ZSBhcmUgdGhlIG9ubHkgb25lcyBmbHVzaGluZyB0aGluZ3MsIG5vIGV4dHJhIHJhY2UKIAkgKiBwcm90ZWN0aW9uIGlzIHJlcXVpcmVkLgpAQCAtMTM1OCw3ICsxMzU5LDcgQEAKIAlpZiAob3RoZXJfamwtPmpfdHJhbnNfaWQgPCB0cmFuc19pZCkgewogCQlCVUdfT04ob3RoZXJfamwtPmpfcmVmY291bnQgPD0gMCk7CiAJCS8qIGRvIG5vdCBmbHVzaCBhbGwgKi8KLQkJZmx1c2hfam91cm5hbF9saXN0KHBfc19zYiwgb3RoZXJfamwsIDApOworCQlmbHVzaF9qb3VybmFsX2xpc3Qoc2IsIG90aGVyX2psLCAwKTsKIAogCQkvKiBvdGhlcl9qbCBpcyBub3cgZGVsZXRlZCBmcm9tIHRoZSBsaXN0ICovCiAJCWdvdG8gcmVzdGFydDsKQEAgLTEzODEsOCArMTM4Miw4IEBACiAqKiBhbHdheXMgc2V0IGZsdXNoYWxsIHRvIDEsIHVubGVzcyB5b3UgYXJlIGNhbGxpbmcgZnJvbSBpbnNpZGUKICoqIGZsdXNoX2pvdXJuYWxfbGlzdAogKioKLSoqIElNUE9SVEFOVC4gIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZXJlIGFyZSBubyBqb3VybmFsIHdyaXRlcnMsIAotKiogYW5kIHRoZSBqb3VybmFsIGlzIGxvY2tlZC4gIFRoYXQgbWVhbnMgaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gCisqKiBJTVBPUlRBTlQuICBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGVyZSBhcmUgbm8gam91cm5hbCB3cml0ZXJzLAorKiogYW5kIHRoZSBqb3VybmFsIGlzIGxvY2tlZC4gIFRoYXQgbWVhbnMgaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20KICoqIGRvX2pvdXJuYWxfZW5kLCBvciBieSBqb3VybmFsX3JlbGVhc2UKICovCiBzdGF0aWMgaW50IGZsdXNoX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCkBAIC0xNDAxLDggKzE0MDIsNyBAQAogCUJVR19PTihqX2xlbl9zYXZlZCA8PSAwKTsKIAogCWlmIChhdG9taWNfcmVhZCgmam91cm5hbC0+al93Y291bnQpICE9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAiY2xtLTIwNDg6IGZsdXNoX2pvdXJuYWxfbGlzdCBjYWxsZWQgd2l0aCB3Y291bnQgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjA0OCIsICJjYWxsZWQgd2l0aCB3Y291bnQgJWQiLAogCQkJCSBhdG9taWNfcmVhZCgmam91cm5hbC0+al93Y291bnQpKTsKIAl9CiAJQlVHX09OKGpsLT5qX3RyYW5zX2lkID09IDApOwpAQCAtMTQxNiw4ICsxNDE2LDcgQEAKIAogCWNvdW50ID0gMDsKIAlpZiAoal9sZW5fc2F2ZWQgPiBqb3VybmFsLT5qX3RyYW5zX21heCkgewotCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJICAgICAgICJqb3VybmFsLTcxNTogZmx1c2hfam91cm5hbF9saXN0LCBsZW5ndGggaXMgJWx1LCB0cmFucyBpZCAlbHVcbiIsCisJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTcxNSIsICJsZW5ndGggaXMgJWx1LCB0cmFucyBpZCAlbHUiLAogCQkJICAgICAgIGpfbGVuX3NhdmVkLCBqbC0+al90cmFuc19pZCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0MzAsNyArMTQyOSw3IEBACiAJCWdvdG8gZmx1c2hfb2xkZXJfYW5kX3JldHVybjsKIAl9CiAKLQkvKiBzdGFydCBieSBwdXR0aW5nIHRoZSBjb21taXQgbGlzdCBvbiBkaXNrLiAgVGhpcyB3aWxsIGFsc28gZmx1c2ggCisJLyogc3RhcnQgYnkgcHV0dGluZyB0aGUgY29tbWl0IGxpc3Qgb24gZGlzay4gIFRoaXMgd2lsbCBhbHNvIGZsdXNoCiAJICoqIHRoZSBjb21taXQgbGlzdHMgb2YgYW55IG9sZGVycyB0cmFuc2FjdGlvbnMKIAkgKi8KIAlmbHVzaF9jb21taXRfbGlzdChzLCBqbCwgMSk7CkBAIC0xNDQ1LDEyICsxNDQ0LDEyIEBACiAJCWdvdG8gZmx1c2hfb2xkZXJfYW5kX3JldHVybjsKIAl9CiAKLQkvKiBsb29wIHRocm91Z2ggZWFjaCBjbm9kZSwgc2VlIGlmIHdlIG5lZWQgdG8gd3JpdGUgaXQsIAotCSAqKiBvciB3YWl0IG9uIGEgbW9yZSByZWNlbnQgdHJhbnNhY3Rpb24sIG9yIGp1c3QgaWdub3JlIGl0IAorCS8qIGxvb3AgdGhyb3VnaCBlYWNoIGNub2RlLCBzZWUgaWYgd2UgbmVlZCB0byB3cml0ZSBpdCwKKwkgKiogb3Igd2FpdCBvbiBhIG1vcmUgcmVjZW50IHRyYW5zYWN0aW9uLCBvciBqdXN0IGlnbm9yZSBpdAogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmKGpvdXJuYWwtPmpfd2NvdW50KSkgIT0gMCkgewotCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJICAgICAgICJqb3VybmFsLTg0NDogcGFuaWMgam91cm5hbCBsaXN0IGlzIGZsdXNoaW5nLCB3Y291bnQgaXMgbm90IDBcbiIpOworCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC04NDQiLCAiam91cm5hbCBsaXN0IGlzIGZsdXNoaW5nLCAiCisJCQkgICAgICAgIndjb3VudCBpcyBub3QgMCIpOwogCX0KIAljbiA9IGpsLT5qX3JlYWxibG9jazsKIAl3aGlsZSAoY24pIHsKQEAgLTE0NzQsOCArMTQ3Myw4IEBACiAJCWlmICghcGpsICYmIGNuLT5iaCkgewogCQkJc2F2ZWRfYmggPSBjbi0+Ymg7CiAKLQkJCS8qIHdlIGRvIHRoaXMgdG8gbWFrZSBzdXJlIG5vYm9keSByZWxlYXNlcyB0aGUgYnVmZmVyIHdoaWxlIAotCQkJICoqIHdlIGFyZSB3b3JraW5nIHdpdGggaXQgCisJCQkvKiB3ZSBkbyB0aGlzIHRvIG1ha2Ugc3VyZSBub2JvZHkgcmVsZWFzZXMgdGhlIGJ1ZmZlciB3aGlsZQorCQkJICoqIHdlIGFyZSB3b3JraW5nIHdpdGggaXQKIAkJCSAqLwogCQkJZ2V0X2JoKHNhdmVkX2JoKTsKIApAQCAtMTQ5OCw4ICsxNDk3LDggQEAKIAkJCWdvdG8gZnJlZV9jbm9kZTsKIAkJfQogCi0JCS8qIGJoID09IE5VTEwgd2hlbiB0aGUgYmxvY2sgZ290IHRvIGRpc2sgb24gaXRzIG93biwgT1IsIAotCQkgKiogdGhlIGJsb2NrIGdvdCBmcmVlZCBpbiBhIGZ1dHVyZSB0cmFuc2FjdGlvbiAKKwkJLyogYmggPT0gTlVMTCB3aGVuIHRoZSBibG9jayBnb3QgdG8gZGlzayBvbiBpdHMgb3duLCBPUiwKKwkJICoqIHRoZSBibG9jayBnb3QgZnJlZWQgaW4gYSBmdXR1cmUgdHJhbnNhY3Rpb24KIAkJICovCiAJCWlmIChzYXZlZF9iaCA9PSBOVUxMKSB7CiAJCQlnb3RvIGZyZWVfY25vZGU7CkBAIC0xNTEwLDggKzE1MDksOCBAQAogCQkgKiogaXMgbm90IG1hcmtlZCBKRGlydHlfd2FpdAogCQkgKi8KIAkJaWYgKCghd2FzX2p3YWl0KSAmJiAhYnVmZmVyX2xvY2tlZChzYXZlZF9iaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJqb3VybmFsLTgxMzogQkFEISBidWZmZXIgJWxsdSAlY2RpcnR5ICVjandhaXQsICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtODEzIiwKKwkJCQkJICJCQUQhIGJ1ZmZlciAlbGx1ICVjZGlydHkgJWNqd2FpdCwgIgogCQkJCQkgIm5vdCBpbiBhIG5ld2VyIHRyYW5hc2N0aW9uIiwKIAkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2F2ZWRfYmgtPgogCQkJCQkgYl9ibG9ja25yLCB3YXNfZGlydHkgPyAnICcgOiAnIScsCkBAIC0xNTI5LDggKzE1MjgsOCBAQAogCQkJCXVubG9ja19idWZmZXIoc2F2ZWRfYmgpOwogCQkJY291bnQrKzsKIAkJfSBlbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJjbG0tMjA4MjogVW5hYmxlIHRvIGZsdXNoIGJ1ZmZlciAlbGx1IGluICVzIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMDgyIiwKKwkJCQkJICJVbmFibGUgdG8gZmx1c2ggYnVmZmVyICVsbHUgaW4gJXMiLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXZlZF9iaC0+CiAJCQkJCSBiX2Jsb2NrbnIsIF9fZnVuY19fKTsKIAkJfQpAQCAtMTU0MSw4ICsxNTQwLDggQEAKIAkJCS8qIHdlIGluY3JlbWVudGVkIHRoaXMgdG8ga2VlcCBvdGhlcnMgZnJvbSB0YWtpbmcgdGhlIGJ1ZmZlciBoZWFkIGF3YXkgKi8KIAkJCXB1dF9iaChzYXZlZF9iaCk7CiAJCQlpZiAoYXRvbWljX3JlYWQoJihzYXZlZF9iaC0+Yl9jb3VudCkpIDwgMCkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAiam91cm5hbC05NDU6IHNhdmVkX2JoLT5iX2NvdW50IDwgMCIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtOTQ1IiwKKwkJCQkJCSAic2F2ZWRfYmgtPmJfY291bnQgPCAwIik7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNTUxLDE4ICsxNTUwLDE4IEBACiAJCXdoaWxlIChjbikgewogCQkJaWYgKHRlc3RfYml0KEJMT0NLX05FRURTX0ZMVVNILCAmY24tPnN0YXRlKSkgewogCQkJCWlmICghY24tPmJoKSB7Ci0JCQkJCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkJCQkgICAgICAgImpvdXJuYWwtMTAxMTogY24tPmJoIGlzIE5VTExcbiIpOworCQkJCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC0xMDExIiwKKwkJCQkJCSAgICAgICAiY24tPmJoIGlzIE5VTEwiKTsKIAkJCQl9CiAJCQkJd2FpdF9vbl9idWZmZXIoY24tPmJoKTsKIAkJCQlpZiAoIWNuLT5iaCkgewotCQkJCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJCQkJICAgICAgICJqb3VybmFsLTEwMTI6IGNuLT5iaCBpcyBOVUxMXG4iKTsKKwkJCQkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtMTAxMiIsCisJCQkJCQkgICAgICAgImNuLT5iaCBpcyBOVUxMIik7CiAJCQkJfQogCQkJCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGNuLT5iaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgImpvdXJuYWwtOTQ5OiBidWZmZXIgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC05NDkiLAorCQkJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogI2VuZGlmCiAJCQkJCWVyciA9IC1FSU87CiAJCQkJfQpAQCAtMTU4Nyw3ICsxNTg2LDcgQEAKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAgICAgICBmbHVzaF9vbGRlcl9hbmRfcmV0dXJuOgogCi0JLyogYmVmb3JlIHdlIGNhbiB1cGRhdGUgdGhlIGpvdXJuYWwgaGVhZGVyIGJsb2NrLCB3ZSBfbXVzdF8gZmx1c2ggYWxsIAorCS8qIGJlZm9yZSB3ZSBjYW4gdXBkYXRlIHRoZSBqb3VybmFsIGhlYWRlciBibG9jaywgd2UgX211c3RfIGZsdXNoIGFsbAogCSAqKiByZWFsIGJsb2NrcyBmcm9tIGFsbCBvbGRlciB0cmFuc2FjdGlvbnMgdG8gZGlzay4gIFRoaXMgaXMgYmVjYXVzZQogCSAqKiBvbmNlIHRoZSBoZWFkZXIgYmxvY2sgaXMgdXBkYXRlZCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIG5vdCBiZQogCSAqKiByZXBsYXllZCBhZnRlciBhIGNyYXNoCkBAIC0xNTk3LDcgKzE1OTYsNyBAQAogCX0KIAogCWVyciA9IGpvdXJuYWwtPmpfZXJybm87Ci0JLyogYmVmb3JlIHdlIGNhbiByZW1vdmUgZXZlcnl0aGluZyBmcm9tIHRoZSBoYXNoIHRhYmxlcyBmb3IgdGhpcyAKKwkvKiBiZWZvcmUgd2UgY2FuIHJlbW92ZSBldmVyeXRoaW5nIGZyb20gdGhlIGhhc2ggdGFibGVzIGZvciB0aGlzCiAJICoqIHRyYW5zYWN0aW9uLCB3ZSBtdXN0IG1ha2Ugc3VyZSBpdCBjYW4gbmV2ZXIgYmUgcmVwbGF5ZWQKIAkgKioKIAkgKiogc2luY2Ugd2UgYXJlIG9ubHkgY2FsbGVkIGZyb20gZG9fam91cm5hbF9lbmQsIHdlIGtub3cgZm9yIHN1cmUgdGhlcmUKQEAgLTE2MjMsNyArMTYyMiw3IEBACiAKIAlpZiAoam91cm5hbC0+al9sYXN0X2ZsdXNoX2lkICE9IDAgJiYKIAkgICAgKGpsLT5qX3RyYW5zX2lkIC0gam91cm5hbC0+al9sYXN0X2ZsdXNoX2lkKSAhPSAxKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMjAxOiBsYXN0IGZsdXNoICVsdSwgY3VycmVudCAlbHUiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjIwMSIsICJsYXN0IGZsdXNoICVsdSwgY3VycmVudCAlbHUiLAogCQkJCSBqb3VybmFsLT5qX2xhc3RfZmx1c2hfaWQsIGpsLT5qX3RyYW5zX2lkKTsKIAl9CiAJam91cm5hbC0+al9sYXN0X2ZsdXNoX2lkID0gamwtPmpfdHJhbnNfaWQ7CkBAIC0xNzU4LDEzICsxNzU3LDEzIEBACiBzdGF0aWMgaW50IGt1cGRhdGVfdHJhbnNhY3Rpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqcywKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICoqbmV4dF9qbCwKLQkJCQl1bnNpZ25lZCBsb25nICpuZXh0X3RyYW5zX2lkLAorCQkJCXVuc2lnbmVkIGludCAqbmV4dF90cmFuc19pZCwKIAkJCQlpbnQgbnVtX2Jsb2NrcywgaW50IG51bV90cmFucykKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgd3JpdHRlbiA9IDA7CiAJaW50IHRyYW5zYWN0aW9uc19mbHVzaGVkID0gMDsKLQl1bnNpZ25lZCBsb25nIG9yaWdfdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgb3JpZ190cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOwogCXN0cnVjdCBidWZmZXJfY2h1bmsgY2h1bms7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHMpOwpAQCAtMTgzMyw3ICsxODMyLDcgQEAKIAlpbnQgbGltaXQgPSAyNTY7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqdGpsOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmZsdXNoX2psOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzKTsKIAogCWZsdXNoX2psID0gdGpsID0gamw7CkBAIC0xOTA5LDIyICsxOTA4LDIyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2pvdXJuYWxfcmFtKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgZnJlZV9qb3VybmFsX3JhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJa2ZyZWUoam91cm5hbC0+al9jdXJyZW50X2psKTsKIAlqb3VybmFsLT5qX251bV9saXN0cy0tOwogCiAJdmZyZWUoam91cm5hbC0+al9jbm9kZV9mcmVlX29yaWcpOwotCWZyZWVfbGlzdF9iaXRtYXBzKHBfc19zYiwgam91cm5hbC0+al9saXN0X2JpdG1hcCk7Ci0JZnJlZV9iaXRtYXBfbm9kZXMocF9zX3NiKTsJLyogbXVzdCBiZSBhZnRlciBmcmVlX2xpc3RfYml0bWFwcyAqLworCWZyZWVfbGlzdF9iaXRtYXBzKHNiLCBqb3VybmFsLT5qX2xpc3RfYml0bWFwKTsKKwlmcmVlX2JpdG1hcF9ub2RlcyhzYik7CS8qIG11c3QgYmUgYWZ0ZXIgZnJlZV9saXN0X2JpdG1hcHMgKi8KIAlpZiAoam91cm5hbC0+al9oZWFkZXJfYmgpIHsKIAkJYnJlbHNlKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAl9CiAJLyogal9oZWFkZXJfYmggaXMgb24gdGhlIGpvdXJuYWwgZGV2LCBtYWtlIHN1cmUgbm90IHRvIHJlbGVhc2UgdGhlIGpvdXJuYWwKIAkgKiBkZXYgdW50aWwgd2UgYnJlbHNlIGpfaGVhZGVyX2JoCiAJICovCi0JcmVsZWFzZV9qb3VybmFsX2RldihwX3Nfc2IsIGpvdXJuYWwpOworCXJlbGVhc2Vfam91cm5hbF9kZXYoc2IsIGpvdXJuYWwpOwogCXZmcmVlKGpvdXJuYWwpOwogfQogCkBAIC0xOTMzLDI3ICsxOTMyLDI3IEBACiAqKiBvZiByZWFkX3N1cGVyKCkgeWV0LiAgQW55IG90aGVyIGNhbGxlciBtdXN0IGtlZXAgZXJyb3IgYXQgMC4KICovCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfcmVsZWFzZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBpbnQgZXJyb3IpCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJyb3IpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSBteXRoOwogCWludCBmbHVzaGVkID0gMDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJLyogd2Ugb25seSB3YW50IHRvIGZsdXNoIG91dCB0cmFuc2FjdGlvbnMgaWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBlcnJvciA9PSAwCiAJICovCi0JaWYgKCFlcnJvciAmJiAhKHBfc19zYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwlpZiAoIWVycm9yICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCS8qIGVuZCB0aGUgY3VycmVudCB0cmFucyAqLwogCQlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKLQkJZG9fam91cm5hbF9lbmQodGgsIHBfc19zYiwgMTAsIEZMVVNIX0FMTCk7CisJCWRvX2pvdXJuYWxfZW5kKHRoLCBzYiwgMTAsIEZMVVNIX0FMTCk7CiAKIAkJLyogbWFrZSBzdXJlIHNvbWV0aGluZyBnZXRzIGxvZ2dlZCB0byBmb3JjZSBvdXIgd2F5IGludG8gdGhlIGZsdXNoIGNvZGUgKi8KLQkJaWYgKCFqb3VybmFsX2pvaW4oJm15dGgsIHBfc19zYiwgMSkpIHsKLQkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLAotCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpLAorCQlpZiAoIWpvdXJuYWxfam9pbigmbXl0aCwgc2IsIDEpKSB7CisJCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLAorCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCQkgICAgIDEpOwotCQkJam91cm5hbF9tYXJrX2RpcnR5KCZteXRoLCBwX3Nfc2IsCi0JCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYikpOwotCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHBfc19zYiwgMSwgRkxVU0hfQUxMKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgc2IsCisJCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CisJCQlkb19qb3VybmFsX2VuZCgmbXl0aCwgc2IsIDEsIEZMVVNIX0FMTCk7CiAJCQlmbHVzaGVkID0gMTsKIAkJfQogCX0KQEAgLTE5NjEsMjYgKzE5NjAsMjYgQEAKIAkvKiB0aGlzIGFsc28gY2F0Y2hlcyBlcnJvcnMgZHVyaW5nIHRoZSBkb19qb3VybmFsX2VuZCBhYm92ZSAqLwogCWlmICghZXJyb3IgJiYgcmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7CiAJCW1lbXNldCgmbXl0aCwgMCwgc2l6ZW9mKG15dGgpKTsKLQkJaWYgKCFqb3VybmFsX2pvaW5fYWJvcnQoJm15dGgsIHBfc19zYiwgMSkpIHsKLQkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLAotCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpLAorCQlpZiAoIWpvdXJuYWxfam9pbl9hYm9ydCgmbXl0aCwgc2IsIDEpKSB7CisJCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLAorCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCQkgICAgIDEpOwotCQkJam91cm5hbF9tYXJrX2RpcnR5KCZteXRoLCBwX3Nfc2IsCi0JCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYikpOwotCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHBfc19zYiwgMSwgRkxVU0hfQUxMKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgc2IsCisJCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CisJCQlkb19qb3VybmFsX2VuZCgmbXl0aCwgc2IsIDEsIEZMVVNIX0FMTCk7CiAJCX0KIAl9CiAKIAlyZWlzZXJmc19tb3VudGVkX2ZzX2NvdW50LS07CiAJLyogd2FpdCBmb3IgYWxsIGNvbW1pdHMgdG8gZmluaXNoICovCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmU0JfSk9VUk5BTChwX3Nfc2IpLT5qX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJlNCX0pPVVJOQUwoc2IpLT5qX3dvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShjb21taXRfd3EpOwogCWlmICghcmVpc2VyZnNfbW91bnRlZF9mc19jb3VudCkgewogCQlkZXN0cm95X3dvcmtxdWV1ZShjb21taXRfd3EpOwogCQljb21taXRfd3EgPSBOVUxMOwogCX0KIAotCWZyZWVfam91cm5hbF9yYW0ocF9zX3NiKTsKKwlmcmVlX2pvdXJuYWxfcmFtKHNiKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk4OSw0MSArMTk4OCw0MSBAQAogKiogY2FsbCBvbiB1bm1vdW50LiAgZmx1c2ggYWxsIGpvdXJuYWwgdHJhbnMsIHJlbGVhc2UgYWxsIGFsbG9jJ2QgcmFtCiAqLwogaW50IGpvdXJuYWxfcmVsZWFzZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBwX3Nfc2IsIDApOworCXJldHVybiBkb19qb3VybmFsX3JlbGVhc2UodGgsIHNiLCAwKTsKIH0KIAogLyoKICoqIG9ubHkgY2FsbCBmcm9tIGFuIGVycm9yIGNvbmRpdGlvbiBpbnNpZGUgcmVpc2VyZnNfcmVhZF9zdXBlciEKICovCiBpbnQgam91cm5hbF9yZWxlYXNlX2Vycm9yKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKKwkJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBwX3Nfc2IsIDEpOworCXJldHVybiBkb19qb3VybmFsX3JlbGVhc2UodGgsIHNiLCAxKTsKIH0KIAogLyogY29tcGFyZXMgZGVzY3JpcHRpb24gYmxvY2sgd2l0aCBjb21taXQgYmxvY2suICByZXR1cm5zIDEgaWYgdGhleSBkaWZmZXIsIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUgKi8KLXN0YXRpYyBpbnQgam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYywKIAkJCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICpjb21taXQpCiB7CiAJaWYgKGdldF9jb21taXRfdHJhbnNfaWQoY29tbWl0KSAhPSBnZXRfZGVzY190cmFuc19pZChkZXNjKSB8fAogCSAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpICE9IGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSB8fAotCSAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpID4gU0JfSk9VUk5BTChwX3Nfc2IpLT5qX3RyYW5zX21heCB8fAorCSAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpID4gU0JfSk9VUk5BTChzYiktPmpfdHJhbnNfbWF4IHx8CiAJICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkgPD0gMCkgewogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLS8qIHJldHVybnMgMCBpZiBpdCBkaWQgbm90IGZpbmQgYSBkZXNjcmlwdGlvbiBibG9jayAgCisvKiByZXR1cm5zIDAgaWYgaXQgZGlkIG5vdCBmaW5kIGEgZGVzY3JpcHRpb24gYmxvY2sKICoqIHJldHVybnMgLTEgaWYgaXQgZm91bmQgYSBjb3JydXB0IGNvbW1pdCBibG9jawotKiogcmV0dXJucyAxIGlmIGJvdGggZGVzYyBhbmQgY29tbWl0IHdlcmUgdmFsaWQgCisqKiByZXR1cm5zIDEgaWYgYm90aCBkZXNjIGFuZCBjb21taXQgd2VyZSB2YWxpZAogKi8KLXN0YXRpYyBpbnQgam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmgsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkLAorCQkJCQl1bnNpZ25lZCBpbnQgKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkLAogCQkJCQl1bnNpZ25lZCBsb25nICpuZXdlc3RfbW91bnRfaWQpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYzsKQEAgLTIwMzksNyArMjAzOCw3IEBACiAJICAgICYmICFtZW1jbXAoZ2V0X2pvdXJuYWxfZGVzY19tYWdpYyhkX2JoKSwgSk9VUk5BTF9ERVNDX01BR0lDLCA4KSkgewogCQlpZiAob2xkZXN0X2ludmFsaWRfdHJhbnNfaWQgJiYgKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkCiAJCSAgICAmJiBnZXRfZGVzY190cmFuc19pZChkZXNjKSA+ICpvbGRlc3RfaW52YWxpZF90cmFuc19pZCkgewotCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJICAgICAgICJqb3VybmFsLTk4NjogdHJhbnNhY3Rpb24gIgogCQkJCSAgICAgICAiaXMgdmFsaWQgcmV0dXJuaW5nIGJlY2F1c2UgdHJhbnNfaWQgJWQgaXMgZ3JlYXRlciB0aGFuICIKIAkJCQkgICAgICAgIm9sZGVzdF9pbnZhbGlkICVsdSIsCkBAIC0yMDQ5LDcgKzIwNDgsNyBAQAogCQl9CiAJCWlmIChuZXdlc3RfbW91bnRfaWQKIAkJICAgICYmICpuZXdlc3RfbW91bnRfaWQgPiBnZXRfZGVzY19tb3VudF9pZChkZXNjKSkgewotCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJICAgICAgICJqb3VybmFsLTEwODc6IHRyYW5zYWN0aW9uICIKIAkJCQkgICAgICAgImlzIHZhbGlkIHJldHVybmluZyBiZWNhdXNlIG1vdW50X2lkICVkIGlzIGxlc3MgdGhhbiAiCiAJCQkJICAgICAgICJuZXdlc3RfbW91bnRfaWQgJWx1IiwKQEAgLTIwNTcsMzYgKzIwNTYsMzcgQEAKIAkJCQkgICAgICAgKm5ld2VzdF9tb3VudF9pZCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJaWYgKGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSA+IFNCX0pPVVJOQUwocF9zX3NiKS0+al90cmFuc19tYXgpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMjAxODogQmFkIHRyYW5zYWN0aW9uIGxlbmd0aCAlZCBlbmNvdW50ZXJlZCwgaWdub3JpbmcgdHJhbnNhY3Rpb24iLAorCQlpZiAoZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpID4gU0JfSk9VUk5BTChzYiktPmpfdHJhbnNfbWF4KSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0yMDE4IiwKKwkJCQkJICJCYWQgdHJhbnNhY3Rpb24gbGVuZ3RoICVkICIKKwkJCQkJICJlbmNvdW50ZXJlZCwgaWdub3JpbmcgdHJhbnNhY3Rpb24iLAogCQkJCQkgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlvZmZzZXQgPSBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKTsKKwkJb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKIAogCQkvKiBvaywgd2UgaGF2ZSBhIGpvdXJuYWwgZGVzY3JpcHRpb24gYmxvY2ssIGxldHMgc2VlIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgdmFsaWQgKi8KIAkJY19iaCA9Ci0JCSAgICBqb3VybmFsX2JyZWFkKHBfc19zYiwKLQkJCQkgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJICAgIGpvdXJuYWxfYnJlYWQoc2IsCisJCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkgICgob2Zmc2V0ICsgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpICsKLQkJCQkgICAgMSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKTsKKwkJCQkgICAgMSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCQlpZiAoIWNfYmgpCiAJCQlyZXR1cm4gMDsKIAkJY29tbWl0ID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqKWNfYmgtPmJfZGF0YTsKLQkJaWYgKGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChwX3Nfc2IsIGRlc2MsIGNvbW1pdCkpIHsKLQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJaWYgKGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChzYiwgZGVzYywgY29tbWl0KSkgeworCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJICAgICAgICJqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkLCBjb21taXQgb2Zmc2V0ICVsZCBoYWQgYmFkICIKIAkJCQkgICAgICAgInRpbWUgJWQgb3IgbGVuZ3RoICVkIiwKIAkJCQkgICAgICAgY19iaC0+Yl9ibG9ja25yIC0KLQkJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfaWQoY29tbWl0KSwKIAkJCQkgICAgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSk7CiAJCQlicmVsc2UoY19iaCk7CiAJCQlpZiAob2xkZXN0X2ludmFsaWRfdHJhbnNfaWQpIHsKIAkJCQkqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQgPQogCQkJCSAgICBnZXRfZGVzY190cmFuc19pZChkZXNjKTsKLQkJCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJCSAgICAgICAiam91cm5hbC0xMDA0OiAiCiAJCQkJCSAgICAgICAidHJhbnNhY3Rpb25faXNfdmFsaWQgc2V0dGluZyBvbGRlc3QgaW52YWxpZCB0cmFuc19pZCAiCiAJCQkJCSAgICAgICAidG8gJWQiLApAQCAtMjA5NSwxMSArMjA5NSwxMSBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWJyZWxzZShjX2JoKTsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbC0xMDA2OiBmb3VuZCB2YWxpZCAiCiAJCQkgICAgICAgInRyYW5zYWN0aW9uIHN0YXJ0IG9mZnNldCAlbGx1LCBsZW4gJWQgaWQgJWQiLAogCQkJICAgICAgIGRfYmgtPmJfYmxvY2tuciAtCi0JCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJCSAgICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYyksCiAJCQkgICAgICAgZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykpOwogCQlyZXR1cm4gMTsKQEAgLTIxMjEsNjMgKzIxMjEsNjMgQEAKICoqIHRoaXMgZWl0aGVyIHJlYWRzIGluIGEgcmVwbGF5cyBhIHRyYW5zYWN0aW9uLCBvciByZXR1cm5zIGJlY2F1c2UgdGhlIHRyYW5zYWN0aW9uCiAqKiBpcyBpbnZhbGlkLCBvciB0b28gb2xkLgogKi8KLXN0YXRpYyBpbnQgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBjdXJfZGJsb2NrLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZGVzdF9zdGFydCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGRlc3RfdHJhbnNfaWQsCisJCQkJICAgIHVuc2lnbmVkIGludCBvbGRlc3RfdHJhbnNfaWQsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3ZXN0X21vdW50X2lkKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKmNvbW1pdDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gMDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqY19iaDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICoqbG9nX2Jsb2NrcyA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmVhbF9ibG9ja3MgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfb2Zmc2V0OworCXVuc2lnbmVkIGludCB0cmFuc19vZmZzZXQ7CiAJaW50IGk7CiAJaW50IHRyYW5zX2hhbGY7CiAKLQlkX2JoID0gam91cm5hbF9icmVhZChwX3Nfc2IsIGN1cl9kYmxvY2spOworCWRfYmggPSBqb3VybmFsX2JyZWFkKHNiLCBjdXJfZGJsb2NrKTsKIAlpZiAoIWRfYmgpCiAJCXJldHVybiAxOwogCWRlc2MgPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqKWRfYmgtPmJfZGF0YTsKLQl0cmFuc19vZmZzZXQgPSBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKTsKLQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEwMzc6ICIKKwl0cmFuc19vZmZzZXQgPSBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpOworCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM3OiAiCiAJCSAgICAgICAiam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uLCBvZmZzZXQgJWxsdSwgbGVuICVkIG1vdW50X2lkICVkIiwKLQkJICAgICAgIGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkgICAgICAgZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJICAgICAgIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSwgZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykpOwogCWlmIChnZXRfZGVzY190cmFuc19pZChkZXNjKSA8IG9sZGVzdF90cmFuc19pZCkgewotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEwMzk6ICIKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEwMzk6ICIKIAkJCSAgICAgICAiam91cm5hbF9yZWFkX3RyYW5zIHNraXBwaW5nIGJlY2F1c2UgJWx1IGlzIHRvbyBvbGQiLAogCQkJICAgICAgIGN1cl9kYmxvY2sgLQotCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpKTsKKwkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpKTsKIAkJYnJlbHNlKGRfYmgpOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKGdldF9kZXNjX21vdW50X2lkKGRlc2MpICE9IG5ld2VzdF9tb3VudF9pZCkgewotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTExNDY6ICIKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTExNDY6ICIKIAkJCSAgICAgICAiam91cm5hbF9yZWFkX3RyYW5zIHNraXBwaW5nIGJlY2F1c2UgJWQgaXMgIT0gIgogCQkJICAgICAgICJuZXdlc3RfbW91bnRfaWQgJWx1IiwgZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYyksCiAJCQkgICAgICAgbmV3ZXN0X21vdW50X2lkKTsKIAkJYnJlbHNlKGRfYmgpOwogCQlyZXR1cm4gMTsKIAl9Ci0JY19iaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLCBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJY19iaCA9IGpvdXJuYWxfYnJlYWQoc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJICAgICAoKHRyYW5zX29mZnNldCArIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSArIDEpICUKLQkJCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkpOworCQkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKTsKIAlpZiAoIWNfYmgpIHsKIAkJYnJlbHNlKGRfYmgpOwogCQlyZXR1cm4gMTsKIAl9CiAJY29tbWl0ID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqKWNfYmgtPmJfZGF0YTsKLQlpZiAoam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHBfc19zYiwgZGVzYywgY29tbWl0KSkgewotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJaWYgKGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChzYiwgZGVzYywgY29tbWl0KSkgeworCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uLCAiCiAJCQkgICAgICAgImNvbW1pdCBvZmZzZXQgJWxsdSBoYWQgYmFkIHRpbWUgJWQgb3IgbGVuZ3RoICVkIiwKIAkJCSAgICAgICBjX2JoLT5iX2Jsb2NrbnIgLQotCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkgICAgICAgZ2V0X2NvbW1pdF90cmFuc19pZChjb21taXQpLAogCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkpOwogCQlicmVsc2UoY19iaCk7CkBAIC0yMTk1LDM4ICsyMTk1LDQxIEBACiAJCWJyZWxzZShkX2JoKTsKIAkJa2ZyZWUobG9nX2Jsb2Nrcyk7CiAJCWtmcmVlKHJlYWxfYmxvY2tzKTsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTExNjk6IGttYWxsb2MgZmFpbGVkLCB1bmFibGUgdG8gbW91bnQgRlMiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTE2OSIsCisJCQkJICJrbWFsbG9jIGZhaWxlZCwgdW5hYmxlIHRvIG1vdW50IEZTIik7CiAJCXJldHVybiAtMTsKIAl9CiAJLyogZ2V0IGFsbCB0aGUgYnVmZmVyIGhlYWRzICovCi0JdHJhbnNfaGFsZiA9IGpvdXJuYWxfdHJhbnNfaGFsZihwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwl0cmFuc19oYWxmID0gam91cm5hbF90cmFuc19oYWxmKHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKTsgaSsrKSB7CiAJCWxvZ19ibG9ja3NbaV0gPQotCQkgICAgam91cm5hbF9nZXRibGsocF9zX3NiLAotCQkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJICAgIGpvdXJuYWxfZ2V0YmxrKHNiLAorCQkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJCSAgICh0cmFuc19vZmZzZXQgKyAxICsKLQkJCQkgICAgaSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpOworCQkJCSAgICBpKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKIAkJaWYgKGkgPCB0cmFuc19oYWxmKSB7CiAJCQlyZWFsX2Jsb2Nrc1tpXSA9Ci0JCQkgICAgc2JfZ2V0YmxrKHBfc19zYiwKKwkJCSAgICBzYl9nZXRibGsoc2IsCiAJCQkJICAgICAgbGUzMl90b19jcHUoZGVzYy0+al9yZWFsYmxvY2tbaV0pKTsKIAkJfSBlbHNlIHsKIAkJCXJlYWxfYmxvY2tzW2ldID0KLQkJCSAgICBzYl9nZXRibGsocF9zX3NiLAorCQkJICAgIHNiX2dldGJsayhzYiwKIAkJCQkgICAgICBsZTMyX3RvX2NwdShjb21taXQtPgogCQkJCQkJICBqX3JlYWxibG9ja1tpIC0gdHJhbnNfaGFsZl0pKTsKIAkJfQotCQlpZiAocmVhbF9ibG9ja3NbaV0tPmJfYmxvY2tuciA+IFNCX0JMT0NLX0NPVU5UKHBfc19zYikpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMTIwNzogUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgQmxvY2sgdG8gcmVwbGF5IGlzIG91dHNpZGUgb2YgZmlsZXN5c3RlbSIpOworCQlpZiAocmVhbF9ibG9ja3NbaV0tPmJfYmxvY2tuciA+IFNCX0JMT0NLX0NPVU5UKHNiKSkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTIwNyIsCisJCQkJCSAiUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgIkJsb2NrIHRvIHJlcGxheSBpcyBvdXRzaWRlIG9mICIKKwkJCQkJICJmaWxlc3lzdGVtIik7CiAJCQlnb3RvIGFib3J0X3JlcGxheTsKIAkJfQogCQkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIHJlcGxheSBvbnRvIGxvZyBvciByZXNlcnZlZCBhcmVhICovCiAJCWlmIChpc19ibG9ja19pbl9sb2dfb3JfcmVzZXJ2ZWRfYXJlYQotCQkgICAgKHBfc19zYiwgcmVhbF9ibG9ja3NbaV0tPmJfYmxvY2tucikpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMTIwNDogUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgVHJ5aW5nIHRvIHJlcGxheSBvbnRvIGEgbG9nIGJsb2NrIik7CisJCSAgICAoc2IsIHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIpKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjA0IiwKKwkJCQkJICJSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISAiCisJCQkJCSAiVHJ5aW5nIHRvIHJlcGxheSBvbnRvIGEgbG9nIGJsb2NrIik7CiAJCSAgICAgIGFib3J0X3JlcGxheToKIAkJCWJyZWxzZV9hcnJheShsb2dfYmxvY2tzLCBpKTsKIAkJCWJyZWxzZV9hcnJheShyZWFsX2Jsb2NrcywgaSk7CkBAIC0yMjQyLDggKzIyNDUsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBnZXRfZGVzY190cmFuc19sZW4oZGVzYyk7IGkrKykgewogCQl3YWl0X29uX2J1ZmZlcihsb2dfYmxvY2tzW2ldKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUobG9nX2Jsb2Nrc1tpXSkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMTIxMjogUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgYnVmZmVyIHdyaXRlIGZhaWxlZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTIxMiIsCisJCQkJCSAiUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKIAkJCWJyZWxzZV9hcnJheShsb2dfYmxvY2tzICsgaSwKIAkJCQkgICAgIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSAtIGkpOwogCQkJYnJlbHNlX2FycmF5KHJlYWxfYmxvY2tzLCBnZXRfZGVzY190cmFuc19sZW4oZGVzYykpOwpAQCAtMjI2Niw4ICsyMjcwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpOyBpKyspIHsKIAkJd2FpdF9vbl9idWZmZXIocmVhbF9ibG9ja3NbaV0pOwogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShyZWFsX2Jsb2Nrc1tpXSkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMTIyNjogUkVQTEFZIEZBSUxVUkUsIGZzY2sgcmVxdWlyZWQhIGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMjYiLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFLCBmc2NrIHJlcXVpcmVkISAiCisJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogCQkJYnJlbHNlX2FycmF5KHJlYWxfYmxvY2tzICsgaSwKIAkJCQkgICAgIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSAtIGkpOwogCQkJYnJlbHNlKGNfYmgpOwpAQCAtMjI3OSwxNSArMjI4NCwxNSBAQAogCQlicmVsc2UocmVhbF9ibG9ja3NbaV0pOwogCX0KIAljdXJfZGJsb2NrID0KLQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkgICAgKCh0cmFuc19vZmZzZXQgKyBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgKwotCSAgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKLQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJICAgICAgMikgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CisJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAiam91cm5hbC0xMDk1OiBzZXR0aW5nIGpvdXJuYWwgIiAic3RhcnQgdG8gb2Zmc2V0ICVsZCIsCi0JCSAgICAgICBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikpOworCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikpOwogCiAJLyogaW5pdCBzdGFydGluZyB2YWx1ZXMgZm9yIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiwgaW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IHRyYW5zYWN0aW9uIHRvIGJlIHJlcGxheWVkLiAqLwotCWpvdXJuYWwtPmpfc3RhcnQgPSBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7CisJam91cm5hbC0+al9zdGFydCA9IGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpOwogCWpvdXJuYWwtPmpfbGFzdF9mbHVzaF90cmFuc19pZCA9IHRyYW5zX2lkOwogCWpvdXJuYWwtPmpfdHJhbnNfaWQgPSB0cmFuc19pZCArIDE7CiAJLyogY2hlY2sgZm9yIHRyYW5zX2lkIG92ZXJmbG93ICovCkBAIC0yMzUyLDEyICsyMzU3LDEyIEBACiAqKgogKiogT24gZXhpdCwgaXQgc2V0cyB0aGluZ3MgdXAgc28gdGhlIGZpcnN0IHRyYW5zYWN0aW9uIHdpbGwgd29yayBjb3JyZWN0bHkuCiAqLwotc3RhdGljIGludCBqb3VybmFsX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgaW50IGpvdXJuYWxfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYzsKLQl1bnNpZ25lZCBsb25nIG9sZGVzdF90cmFuc19pZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBvbGRlc3RfaW52YWxpZF90cmFuc19pZCA9IDA7CisJdW5zaWduZWQgaW50IG9sZGVzdF90cmFuc19pZCA9IDA7CisJdW5zaWduZWQgaW50IG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkID0gMDsKIAl0aW1lX3Qgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBvbGRlc3Rfc3RhcnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgY3VyX2RibG9jayA9IDA7CkBAIC0yMzcwLDQ2ICsyMzc1LDQ2IEBACiAJaW50IHJldDsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQljdXJfZGJsb2NrID0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7Ci0JcmVpc2VyZnNfaW5mbyhwX3Nfc2IsICJjaGVja2luZyB0cmFuc2FjdGlvbiBsb2cgKCVzKVxuIiwKKwljdXJfZGJsb2NrID0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKKwlyZWlzZXJmc19pbmZvKHNiLCAiY2hlY2tpbmcgdHJhbnNhY3Rpb24gbG9nICglcylcbiIsCiAJCSAgICAgIGJkZXZuYW1lKGpvdXJuYWwtPmpfZGV2X2JkLCBiKSk7CiAJc3RhcnQgPSBnZXRfc2Vjb25kcygpOwogCi0JLyogc3RlcCAxLCByZWFkIGluIHRoZSBqb3VybmFsIGhlYWRlciBibG9jay4gIENoZWNrIHRoZSB0cmFuc2FjdGlvbiBpdCBzYXlzIAotCSAqKiBpcyB0aGUgZmlyc3QgdW5mbHVzaGVkLCBhbmQgaWYgdGhhdCB0cmFuc2FjdGlvbiBpcyBub3QgdmFsaWQsIAorCS8qIHN0ZXAgMSwgcmVhZCBpbiB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2suICBDaGVjayB0aGUgdHJhbnNhY3Rpb24gaXQgc2F5cworCSAqKiBpcyB0aGUgZmlyc3QgdW5mbHVzaGVkLCBhbmQgaWYgdGhhdCB0cmFuc2FjdGlvbiBpcyBub3QgdmFsaWQsCiAJICoqIHJlcGxheSBpcyBkb25lCiAJICovCi0Jam91cm5hbC0+al9oZWFkZXJfYmggPSBqb3VybmFsX2JyZWFkKHBfc19zYiwKLQkJCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKQotCQkJCQkgICAgICsgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwlqb3VybmFsLT5qX2hlYWRlcl9iaCA9IGpvdXJuYWxfYnJlYWQoc2IsCisJCQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKQorCQkJCQkgICAgICsgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOwogCWlmICgham91cm5hbC0+al9oZWFkZXJfYmgpIHsKIAkJcmV0dXJuIDE7CiAJfQogCWpoID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqKShqb3VybmFsLT5qX2hlYWRlcl9iaC0+Yl9kYXRhKTsKIAlpZiAobGUzMl90b19jcHUoamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCkgPAotCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikKKwkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikKIAkgICAgJiYgbGUzMl90b19jcHUoamgtPmpfbGFzdF9mbHVzaF90cmFuc19pZCkgPiAwKSB7CiAJCW9sZGVzdF9zdGFydCA9Ci0JCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJICAgIGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpOwogCQlvbGRlc3RfdHJhbnNfaWQgPSBsZTMyX3RvX2NwdShqaC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkKSArIDE7CiAJCW5ld2VzdF9tb3VudF9pZCA9IGxlMzJfdG9fY3B1KGpoLT5qX21vdW50X2lkKTsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbC0xMTUzOiBmb3VuZCBpbiAiCiAJCQkgICAgICAgImhlYWRlcjogZmlyc3RfdW5mbHVzaGVkX29mZnNldCAlZCwgbGFzdF9mbHVzaGVkX3RyYW5zX2lkICIKIAkJCSAgICAgICAiJWx1IiwgbGUzMl90b19jcHUoamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCksCiAJCQkgICAgICAgbGUzMl90b19jcHUoamgtPmpfbGFzdF9mbHVzaF90cmFuc19pZCkpOwogCQl2YWxpZF9qb3VybmFsX2hlYWRlciA9IDE7CiAKLQkJLyogbm93LCB3ZSB0cnkgdG8gcmVhZCB0aGUgZmlyc3QgdW5mbHVzaGVkIG9mZnNldC4gIElmIGl0IGlzIG5vdCB2YWxpZCwgCi0JCSAqKiB0aGVyZSBpcyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvLCBhbmQgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcmVhZCAKKwkJLyogbm93LCB3ZSB0cnkgdG8gcmVhZCB0aGUgZmlyc3QgdW5mbHVzaGVkIG9mZnNldC4gIElmIGl0IGlzIG5vdCB2YWxpZCwKKwkJICoqIHRoZXJlIGlzIG5vdGhpbmcgbW9yZSB3ZSBjYW4gZG8sIGFuZCBpdCBtYWtlcyBubyBzZW5zZSB0byByZWFkCiAJCSAqKiB0aHJvdWdoIHRoZSB3aG9sZSBsb2cuCiAJCSAqLwogCQlkX2JoID0KLQkJICAgIGpvdXJuYWxfYnJlYWQocF9zX3NiLAotCQkJCSAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkgICAgam91cm5hbF9icmVhZChzYiwKKwkJCQkgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJCSAgbGUzMl90b19jcHUoamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCkpOwotCQlyZXQgPSBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHBfc19zYiwgZF9iaCwgTlVMTCwgTlVMTCk7CisJCXJldCA9IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc2IsIGRfYmgsIE5VTEwsIE5VTEwpOwogCQlpZiAoIXJldCkgewogCQkJY29udGludWVfcmVwbGF5ID0gMDsKIAkJfQpAQCAtMjQxNyw5ICsyNDIyLDkgQEAKIAkJZ290byBzdGFydF9sb2dfcmVwbGF5OwogCX0KIAotCWlmIChjb250aW51ZV9yZXBsYXkgJiYgYmRldl9yZWFkX29ubHkocF9zX3NiLT5zX2JkZXYpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiY2xtLTIwNzY6IGRldmljZSBpcyByZWFkb25seSwgdW5hYmxlIHRvIHJlcGxheSBsb2ciKTsKKwlpZiAoY29udGludWVfcmVwbGF5ICYmIGJkZXZfcmVhZF9vbmx5KHNiLT5zX2JkZXYpKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJjbG0tMjA3NiIsCisJCQkJICJkZXZpY2UgaXMgcmVhZG9ubHksIHVuYWJsZSB0byByZXBsYXkgbG9nIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI0MjgsMTcgKzI0MzMsMTcgQEAKIAkgKi8KIAl3aGlsZSAoY29udGludWVfcmVwbGF5CiAJICAgICAgICYmIGN1cl9kYmxvY2sgPAotCSAgICAgICAoU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKwotCQlTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKSB7CisJICAgICAgIChTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKKwkJU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKSB7CiAJCS8qIE5vdGUgdGhhdCBpdCBpcyByZXF1aXJlZCBmb3IgYmxvY2tzaXplIG9mIHByaW1hcnkgZnMgZGV2aWNlIGFuZCBqb3VybmFsCiAJCSAgIGRldmljZSB0byBiZSB0aGUgc2FtZSAqLwogCQlkX2JoID0KIAkJICAgIHJlaXNlcmZzX2JyZWFkYShqb3VybmFsLT5qX2Rldl9iZCwgY3VyX2RibG9jaywKLQkJCQkgICAgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSwKLQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKwotCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpOworCQkJCSAgICBzYi0+c19ibG9ja3NpemUsCisJCQkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKworCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJCXJldCA9Ci0JCSAgICBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHBfc19zYiwgZF9iaCwKKwkJICAgIGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc2IsIGRfYmgsCiAJCQkJCQkgJm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkLAogCQkJCQkJICZuZXdlc3RfbW91bnRfaWQpOwogCQlpZiAocmV0ID09IDEpIHsKQEAgLTI0NDcsMjYgKzI0NTIsMjYgQEAKIAkJCQlvbGRlc3RfdHJhbnNfaWQgPSBnZXRfZGVzY190cmFuc19pZChkZXNjKTsKIAkJCQlvbGRlc3Rfc3RhcnQgPSBkX2JoLT5iX2Jsb2NrbnI7CiAJCQkJbmV3ZXN0X21vdW50X2lkID0gZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYyk7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTE3OTogU2V0dGluZyAiCiAJCQkJCSAgICAgICAib2xkZXN0X3N0YXJ0IHRvIG9mZnNldCAlbGx1LCB0cmFuc19pZCAlbHUiLAogCQkJCQkgICAgICAgb2xkZXN0X3N0YXJ0IC0KIAkJCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSwotCQkJCQkgICAgICAgKHBfc19zYiksIG9sZGVzdF90cmFuc19pZCk7CisJCQkJCSAgICAgICAoc2IpLCBvbGRlc3RfdHJhbnNfaWQpOwogCQkJfSBlbHNlIGlmIChvbGRlc3RfdHJhbnNfaWQgPiBnZXRfZGVzY190cmFuc19pZChkZXNjKSkgewogCQkJCS8qIG9uZSB3ZSBqdXN0IHJlYWQgd2FzIG9sZGVyICovCiAJCQkJb2xkZXN0X3RyYW5zX2lkID0gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYyk7CiAJCQkJb2xkZXN0X3N0YXJ0ID0gZF9iaC0+Yl9ibG9ja25yOwotCQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkJICAgICAgICJqb3VybmFsLTExODA6IFJlc2V0dGluZyAiCiAJCQkJCSAgICAgICAib2xkZXN0X3N0YXJ0IHRvIG9mZnNldCAlbHUsIHRyYW5zX2lkICVsdSIsCiAJCQkJCSAgICAgICBvbGRlc3Rfc3RhcnQgLQogCQkJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLCi0JCQkJCSAgICAgICAocF9zX3NiKSwgb2xkZXN0X3RyYW5zX2lkKTsKKwkJCQkJICAgICAgIChzYiksIG9sZGVzdF90cmFuc19pZCk7CiAJCQl9CiAJCQlpZiAobmV3ZXN0X21vdW50X2lkIDwgZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykpIHsKIAkJCQluZXdlc3RfbW91bnRfaWQgPSBnZXRfZGVzY19tb3VudF9pZChkZXNjKTsKLQkJCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJCSAgICAgICAiam91cm5hbC0xMjk5OiBTZXR0aW5nICIKIAkJCQkJICAgICAgICJuZXdlc3RfbW91bnRfaWQgdG8gJWQiLAogCQkJCQkgICAgICAgZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykpOwpAQCAtMjQ4MSwxNyArMjQ4NiwxNyBAQAogICAgICAgc3RhcnRfbG9nX3JlcGxheToKIAljdXJfZGJsb2NrID0gb2xkZXN0X3N0YXJ0OwogCWlmIChvbGRlc3RfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbC0xMjA2OiBTdGFydGluZyByZXBsYXkgIgogCQkJICAgICAgICJmcm9tIG9mZnNldCAlbGx1LCB0cmFuc19pZCAlbHUiLAotCQkJICAgICAgIGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJCSAgICAgICBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJCSAgICAgICBvbGRlc3RfdHJhbnNfaWQpOwogCiAJfQogCXJlcGxheV9jb3VudCA9IDA7CiAJd2hpbGUgKGNvbnRpbnVlX3JlcGxheSAmJiBvbGRlc3RfdHJhbnNfaWQgPiAwKSB7CiAJCXJldCA9Ci0JCSAgICBqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24ocF9zX3NiLCBjdXJfZGJsb2NrLCBvbGRlc3Rfc3RhcnQsCisJCSAgICBqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24oc2IsIGN1cl9kYmxvY2ssIG9sZGVzdF9zdGFydCwKIAkJCQkJICAgICBvbGRlc3RfdHJhbnNfaWQsIG5ld2VzdF9tb3VudF9pZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlyZXR1cm4gcmV0OwpAQCAtMjQ5OSwxNCArMjUwNCwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJY3VyX2RibG9jayA9Ci0JCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArIGpvdXJuYWwtPmpfc3RhcnQ7CisJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsgam91cm5hbC0+al9zdGFydDsKIAkJcmVwbGF5X2NvdW50Kys7CiAJCWlmIChjdXJfZGJsb2NrID09IG9sZGVzdF9zdGFydCkKIAkJCWJyZWFrOwogCX0KIAogCWlmIChvbGRlc3RfdHJhbnNfaWQgPT0gMCkgewotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJqb3VybmFsLTEyMjU6IE5vIHZhbGlkICIgInRyYW5zYWN0aW9ucyBmb3VuZCIpOwogCX0KIAkvKiBqX3N0YXJ0IGRvZXMgbm90IGdldCBzZXQgY29ycmVjdGx5IGlmIHdlIGRvbid0IHJlcGxheSBhbnkgdHJhbnNhY3Rpb25zLgpAQCAtMjUyNiwxNiArMjUzMSwxNiBAQAogCX0gZWxzZSB7CiAJCWpvdXJuYWwtPmpfbW91bnRfaWQgPSBuZXdlc3RfbW91bnRfaWQgKyAxOwogCX0KLQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEyOTk6IFNldHRpbmcgIgorCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMjk5OiBTZXR0aW5nICIKIAkJICAgICAgICJuZXdlc3RfbW91bnRfaWQgdG8gJWx1Iiwgam91cm5hbC0+al9tb3VudF9pZCk7CiAJam91cm5hbC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0ID0gam91cm5hbC0+al9zdGFydDsKIAlpZiAocmVwbGF5X2NvdW50ID4gMCkgewotCQlyZWlzZXJmc19pbmZvKHBfc19zYiwKKwkJcmVpc2VyZnNfaW5mbyhzYiwKIAkJCSAgICAgICJyZXBsYXllZCAlZCB0cmFuc2FjdGlvbnMgaW4gJWx1IHNlY29uZHNcbiIsCiAJCQkgICAgICByZXBsYXlfY291bnQsIGdldF9zZWNvbmRzKCkgLSBzdGFydCk7CiAJfQotCWlmICghYmRldl9yZWFkX29ubHkocF9zX3NiLT5zX2JkZXYpICYmCi0JICAgIF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2socF9zX3NiLCBqb3VybmFsLT5qX3N0YXJ0LAorCWlmICghYmRldl9yZWFkX29ubHkoc2ItPnNfYmRldikgJiYKKwkgICAgX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzYiwgam91cm5hbC0+al9zdGFydCwKIAkJCQkJIGpvdXJuYWwtPmpfbGFzdF9mbHVzaF90cmFuc19pZCkpIHsKIAkJLyogcmVwbGF5IGZhaWxlZCwgY2FsbGVyIG11c3QgY2FsbCBmcmVlX2pvdXJuYWxfcmFtIGFuZCBhYm9ydAogCQkgKiogdGhlIG1vdW50CkBAIC0yNTYwLDkgKzI1NjUsOSBAQAogCXJldHVybiBqbDsKIH0KIAotc3RhdGljIHZvaWQgam91cm5hbF9saXN0X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgdm9pZCBqb3VybmFsX2xpc3RfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCVNCX0pPVVJOQUwocF9zX3NiKS0+al9jdXJyZW50X2psID0gYWxsb2Nfam91cm5hbF9saXN0KHBfc19zYik7CisJU0JfSk9VUk5BTChzYiktPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChzYik7CiB9CiAKIHN0YXRpYyBpbnQgcmVsZWFzZV9qb3VybmFsX2RldihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyLApAQCAtMjU4MCw5ICsyNTg1LDggQEAKIAl9CiAKIAlpZiAocmVzdWx0ICE9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzdXBlciwKLQkJCQkgInNoLTQ1NzogcmVsZWFzZV9qb3VybmFsX2RldjogQ2Fubm90IHJlbGVhc2Ugam91cm5hbCBkZXZpY2U6ICVpIiwKLQkJCQkgcmVzdWx0KTsKKwkJcmVpc2VyZnNfd2FybmluZyhzdXBlciwgInNoLTQ1NyIsCisJCQkJICJDYW5ub3QgcmVsZWFzZSBqb3VybmFsIGRldmljZTogJWkiLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjYxMiw3ICsyNjE2LDcgQEAKIAkJaWYgKElTX0VSUihqb3VybmFsLT5qX2Rldl9iZCkpIHsKIAkJCXJlc3VsdCA9IFBUUl9FUlIoam91cm5hbC0+al9kZXZfYmQpOwogCQkJam91cm5hbC0+al9kZXZfYmQgPSBOVUxMOwotCQkJcmVpc2VyZnNfd2FybmluZyhzdXBlciwgInNoLTQ1ODogam91cm5hbF9pbml0X2RldjogIgorCQkJcmVpc2VyZnNfd2FybmluZyhzdXBlciwgInNoLTQ1OCIsCiAJCQkJCSAiY2Fubm90IGluaXQgam91cm5hbCBkZXZpY2UgJyVzJzogJWkiLAogCQkJCQkgX19iZGV2bmFtZShqZGV2LCBiKSwgcmVzdWx0KTsKIAkJCXJldHVybiByZXN1bHQ7CkBAIC0yNjYyLDMwICsyNjY2LDMwIEBACiAgKi8KICNkZWZpbmUgUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSAoNDA5NikKIAotc3RhdGljIGludCBjaGVja19hZHZpc2VfdHJhbnNfcGFyYW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBjaGVja19hZHZpc2VfdHJhbnNfcGFyYW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCkKIHsKICAgICAgICAgaWYgKGpvdXJuYWwtPmpfdHJhbnNfbWF4KSB7CiAJICAgICAgICAvKiBOb24tZGVmYXVsdCBqb3VybmFsIHBhcmFtcy4KIAkJICAgRG8gc2FuaXR5IGNoZWNrIGZvciB0aGVtLiAqLwogCSAgICAgICAgaW50IHJhdGlvID0gMTsKLQkJaWYgKHBfc19zYi0+c19ibG9ja3NpemUgPCBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFKQotCQkgICAgICAgIHJhdGlvID0gUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSAvIHBfc19zYi0+c19ibG9ja3NpemU7CisJCWlmIChzYi0+c19ibG9ja3NpemUgPCBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFKQorCQkgICAgICAgIHJhdGlvID0gUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSAvIHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCQlpZiAoam91cm5hbC0+al90cmFuc19tYXggPiBKT1VSTkFMX1RSQU5TX01BWF9ERUZBVUxUIC8gcmF0aW8gfHwKIAkJICAgIGpvdXJuYWwtPmpfdHJhbnNfbWF4IDwgSk9VUk5BTF9UUkFOU19NSU5fREVGQVVMVCAvIHJhdGlvIHx8Ci0JCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikgLyBqb3VybmFsLT5qX3RyYW5zX21heCA8CisJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSAvIGpvdXJuYWwtPmpfdHJhbnNfbWF4IDwKIAkJICAgIEpPVVJOQUxfTUlOX1JBVElPKSB7Ci0JCSAgICAgICAgcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJzaC00NjI6IGJhZCB0cmFuc2FjdGlvbiBtYXggc2l6ZSAoJXUpLiBGU0NLPyIsCi0JCQkJIGpvdXJuYWwtPmpfdHJhbnNfbWF4KTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjIiLAorCQkJCQkgImJhZCB0cmFuc2FjdGlvbiBtYXggc2l6ZSAoJXUpLiAiCisJCQkJCSAiRlNDSz8iLCBqb3VybmFsLT5qX3RyYW5zX21heCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoam91cm5hbC0+al9tYXhfYmF0Y2ggIT0gKGpvdXJuYWwtPmpfdHJhbnNfbWF4KSAqCiAJCSAgICAgICAgSk9VUk5BTF9NQVhfQkFUQ0hfREVGQVVMVC9KT1VSTkFMX1RSQU5TX01BWF9ERUZBVUxUKSB7Ci0JCSAgICAgICAgcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJInNoLTQ2MzogYmFkIHRyYW5zYWN0aW9uIG1heCBiYXRjaCAoJXUpLiBGU0NLPyIsCi0JCQkJam91cm5hbC0+al9tYXhfYmF0Y2gpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MyIsCisJCQkJCSAiYmFkIHRyYW5zYWN0aW9uIG1heCBiYXRjaCAoJXUpLiAiCisJCQkJCSAiRlNDSz8iLCBqb3VybmFsLT5qX21heF9iYXRjaCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSB7CkBAIC0yNjkzLDkgKzI2OTcsMTEgQEAKICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBzeXN0ZW0gd2FzIGNyZWF0ZWQgYnkgb2xkIHZlcnNpb24KIAkJICAgb2YgbWtyZWlzZXJmcywgc28gc29tZSBmaWVsZHMgY29udGFpbiB6ZXJvcywKIAkJICAgYW5kIHdlIG5lZWQgdG8gYWR2aXNlIHByb3BlciB2YWx1ZXMgZm9yIHRoZW0gKi8KLQkgICAgICAgIGlmIChwX3Nfc2ItPnNfYmxvY2tzaXplICE9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUpCi0JICAgICAgICAgICAgICAgIHJlaXNlcmZzX3BhbmljKHBfc19zYiwgInNoLTQ2NDogYmFkIGJsb2Nrc2l6ZSAoJXUpIiwKLQkJCQkgICAgICAgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCWlmIChzYi0+c19ibG9ja3NpemUgIT0gUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2NCIsICJiYWQgYmxvY2tzaXplICgldSkiLAorCQkJCQkgc2ItPnNfYmxvY2tzaXplKTsKKwkJCXJldHVybiAxOworCQl9CiAJCWpvdXJuYWwtPmpfdHJhbnNfbWF4ID0gSk9VUk5BTF9UUkFOU19NQVhfREVGQVVMVDsKIAkJam91cm5hbC0+al9tYXhfYmF0Y2ggPSBKT1VSTkFMX01BWF9CQVRDSF9ERUZBVUxUOwogCQlqb3VybmFsLT5qX21heF9jb21taXRfYWdlID0gSk9VUk5BTF9NQVhfQ09NTUlUX0FHRTsKQEAgLTI3MDYsMTAgKzI3MTIsMTAgQEAKIC8qCiAqKiBtdXN0IGJlIGNhbGxlZCBvbmNlIG9uIGZzIG1vdW50LiAgY2FsbHMgam91cm5hbF9yZWFkIGZvciB5b3UKICovCi1pbnQgam91cm5hbF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBjb25zdCBjaGFyICpqX2Rldl9uYW1lLAoraW50IGpvdXJuYWxfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpqX2Rldl9uYW1lLAogCQkgaW50IG9sZF9mb3JtYXQsIHVuc2lnbmVkIGludCBjb21taXRfbWF4X2FnZSkKIHsKLQlpbnQgbnVtX2Nub2RlcyA9IFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSAqIDI7CisJaW50IG51bV9jbm9kZXMgPSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSAqIDI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaGpoOwogCXN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqcnM7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICpqaDsKQEAgLTI3MTcsMTAgKzI3MjMsMTAgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbDsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQlqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKKwlqb3VybmFsID0gU0JfSk9VUk5BTChzYikgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCkpOwogCWlmICgham91cm5hbCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImpvdXJuYWwtMTI1NjogdW5hYmxlIHRvIGdldCBtZW1vcnkgZm9yIGpvdXJuYWwgc3RydWN0dXJlIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyNTYiLAorCQkJCSAidW5hYmxlIHRvIGdldCBtZW1vcnkgZm9yIGpvdXJuYWwgc3RydWN0dXJlIik7CiAJCXJldHVybiAxOwogCX0KIAltZW1zZXQoam91cm5hbCwgMCwgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsKSk7CkBAIC0yNzI5LDUxICsyNzM1LDUxIEBACiAJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfd29ya2luZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmam91cm5hbC0+al9qb3VybmFsX2xpc3QpOwogCWpvdXJuYWwtPmpfcGVyc2lzdGVudF90cmFucyA9IDA7Ci0JaWYgKHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhwX3Nfc2IsCisJaWYgKHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzYiwKIAkJCQkJICAgam91cm5hbC0+al9saXN0X2JpdG1hcCwKLQkJCQkJICAgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpKSkKKwkJCQkJICAgcmVpc2VyZnNfYm1hcF9jb3VudChzYikpKQogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKLQlhbGxvY2F0ZV9iaXRtYXBfbm9kZXMocF9zX3NiKTsKKwlhbGxvY2F0ZV9iaXRtYXBfbm9kZXMoc2IpOwogCiAJLyogcmVzZXJ2ZWQgZm9yIGpvdXJuYWwgYXJlYSBzdXBwb3J0ICovCi0JU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socF9zX3NiKSA9IChvbGRfZm9ybWF0ID8KKwlTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzYikgPSAob2xkX2Zvcm1hdCA/CiAJCQkJCQkgUkVJU0VSRlNfT0xEX0RJU0tfT0ZGU0VUX0lOX0JZVEVTCi0JCQkJCQkgLyBwX3Nfc2ItPnNfYmxvY2tzaXplICsKLQkJCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHBfc19zYikgKworCQkJCQkJIC8gc2ItPnNfYmxvY2tzaXplICsKKwkJCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHNiKSArCiAJCQkJCQkgMSA6CiAJCQkJCQkgUkVJU0VSRlNfRElTS19PRkZTRVRfSU5fQllURVMgLwotCQkJCQkJIHBfc19zYi0+c19ibG9ja3NpemUgKyAyKTsKKwkJCQkJCSBzYi0+c19ibG9ja3NpemUgKyAyKTsKIAogCS8qIFNhbml0eSBjaGVjayB0byBzZWUgaXMgdGhlIHN0YW5kYXJkIGpvdXJuYWwgZml0dGluZyB3aXRoaW5nIGZpcnN0IGJpdG1hcAogCSAgIChhY3R1YWwgZm9yIHNtYWxsIGJsb2Nrc2l6ZXMpICovCi0JaWYgKCFTQl9PTkRJU0tfSk9VUk5BTF9ERVZJQ0UocF9zX3NiKSAmJgotCSAgICAoU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socF9zX3NiKSArCi0JICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikgPiBwX3Nfc2ItPnNfYmxvY2tzaXplICogOCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTEzOTM6IGpvdXJuYWwgZG9lcyBub3QgZml0IGZvciBhcmVhICIKLQkJCQkgImFkZHJlc3NlZCBieSBmaXJzdCBvZiBiaXRtYXAgYmxvY2tzLiBJdCBzdGFydHMgYXQgIgorCWlmICghU0JfT05ESVNLX0pPVVJOQUxfREVWSUNFKHNiKSAmJgorCSAgICAoU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0soc2IpICsKKwkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpID4gc2ItPnNfYmxvY2tzaXplICogOCkpIHsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTM5MyIsCisJCQkJICJqb3VybmFsIGRvZXMgbm90IGZpdCBmb3IgYXJlYSBhZGRyZXNzZWQgIgorCQkJCSAiYnkgZmlyc3Qgb2YgYml0bWFwIGJsb2Nrcy4gSXQgc3RhcnRzIGF0ICIKIAkJCQkgIiV1IGFuZCBpdHMgc2l6ZSBpcyAldS4gQmxvY2sgc2l6ZSAlbGQiLAotCQkJCSBTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhwX3Nfc2IpLAotCQkJCSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYiksCi0JCQkJIHBfc19zYi0+c19ibG9ja3NpemUpOworCQkJCSBTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzYiksCisJCQkJIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpLAorCQkJCSBzYi0+c19ibG9ja3NpemUpOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKLQlpZiAoam91cm5hbF9pbml0X2RldihwX3Nfc2IsIGpvdXJuYWwsIGpfZGV2X25hbWUpICE9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJzaC00NjI6IHVuYWJsZSB0byBpbml0aWFsaXplIGpvcm5hbCBkZXZpY2UiKTsKKwlpZiAoam91cm5hbF9pbml0X2RldihzYiwgam91cm5hbCwgal9kZXZfbmFtZSkgIT0gMCkgeworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDYyIiwKKwkJCQkgInVuYWJsZSB0byBpbml0aWFsaXplIGpvcm5hbCBkZXZpY2UiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCi0JcnMgPSBTQl9ESVNLX1NVUEVSX0JMT0NLKHBfc19zYik7CisJcnMgPSBTQl9ESVNLX1NVUEVSX0JMT0NLKHNiKTsKIAogCS8qIHJlYWQgam91cm5hbCBoZWFkZXIgKi8KLQliaGpoID0gam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKLQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwliaGpoID0gam91cm5hbF9icmVhZChzYiwKKwkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCisJCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKIAlpZiAoIWJoamgpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJzaC00NTk6IHVuYWJsZSB0byByZWFkIGpvdXJuYWwgaGVhZGVyIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NTkiLAorCQkJCSAidW5hYmxlIHRvIHJlYWQgam91cm5hbCBoZWFkZXIiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCWpoID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqKShiaGpoLT5iX2RhdGEpOwpAQCAtMjc4MiwxMCArMjc4OCwxMCBAQAogCWlmIChpc19yZWlzZXJmc19qcihycykKIAkgICAgJiYgKGxlMzJfdG9fY3B1KGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMpICE9CiAJCXNiX2pwX2pvdXJuYWxfbWFnaWMocnMpKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgInNoLTQ2MDogam91cm5hbCBoZWFkZXIgbWFnaWMgJXggIgotCQkJCSAiKGRldmljZSAlcykgZG9lcyBub3QgbWF0Y2ggdG8gbWFnaWMgZm91bmQgaW4gc3VwZXIgIgotCQkJCSAiYmxvY2sgJXgiLCBqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljLAorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDYwIiwKKwkJCQkgImpvdXJuYWwgaGVhZGVyIG1hZ2ljICV4IChkZXZpY2UgJXMpIGRvZXMgIgorCQkJCSAibm90IG1hdGNoIHRvIG1hZ2ljIGZvdW5kIGluIHN1cGVyIGJsb2NrICV4IiwKKwkJCQkgamgtPmpoX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYywKIAkJCQkgYmRldm5hbWUoam91cm5hbC0+al9kZXZfYmQsIGIpLAogCQkJCSBzYl9qcF9qb3VybmFsX21hZ2ljKHJzKSk7CiAJCWJyZWxzZShiaGpoKTsKQEAgLTI3OTgsNyArMjgwNCw3IEBACiAJICAgIGxlMzJfdG9fY3B1KGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWF4X2NvbW1pdF9hZ2UpOwogCWpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSA9IEpPVVJOQUxfTUFYX1RSQU5TX0FHRTsKIAotCWlmIChjaGVja19hZHZpc2VfdHJhbnNfcGFyYW1zKHBfc19zYiwgam91cm5hbCkgIT0gMCkKKwlpZiAoY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhzYiwgam91cm5hbCkgIT0gMCkKIAkgICAgICAgIGdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCWpvdXJuYWwtPmpfZGVmYXVsdF9tYXhfY29tbWl0X2FnZSA9IGpvdXJuYWwtPmpfbWF4X2NvbW1pdF9hZ2U7CiAKQEAgLTI4MDcsMTIgKzI4MTMsMTIgQEAKIAkJam91cm5hbC0+al9tYXhfdHJhbnNfYWdlID0gY29tbWl0X21heF9hZ2U7CiAJfQogCi0JcmVpc2VyZnNfaW5mbyhwX3Nfc2IsICJqb3VybmFsIHBhcmFtczogZGV2aWNlICVzLCBzaXplICV1LCAiCisJcmVpc2VyZnNfaW5mbyhzYiwgImpvdXJuYWwgcGFyYW1zOiBkZXZpY2UgJXMsIHNpemUgJXUsICIKIAkJICAgICAgImpvdXJuYWwgZmlyc3QgYmxvY2sgJXUsIG1heCB0cmFucyBsZW4gJXUsIG1heCBiYXRjaCAldSwgIgogCQkgICAgICAibWF4IGNvbW1pdCBhZ2UgJXUsIG1heCB0cmFucyBhZ2UgJXVcbiIsCiAJCSAgICAgIGJkZXZuYW1lKGpvdXJuYWwtPmpfZGV2X2JkLCBiKSwKLQkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpLAotCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYiksCisJCSAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCSAgICAgIGpvdXJuYWwtPmpfdHJhbnNfbWF4LAogCQkgICAgICBqb3VybmFsLT5qX21heF9iYXRjaCwKIAkJICAgICAgam91cm5hbC0+al9tYXhfY29tbWl0X2FnZSwgam91cm5hbC0+al9tYXhfdHJhbnNfYWdlKTsKQEAgLTI4MjAsNyArMjgyNiw3IEBACiAJYnJlbHNlKGJoamgpOwogCiAJam91cm5hbC0+al9saXN0X2JpdG1hcF9pbmRleCA9IDA7Ci0Jam91cm5hbF9saXN0X2luaXQocF9zX3NiKTsKKwlqb3VybmFsX2xpc3RfaW5pdChzYik7CiAKIAltZW1zZXQoam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsIDAsCiAJICAgICAgIEpPVVJOQUxfSEFTSF9TSVpFICogc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICopKTsKQEAgLTI4NTIsNyArMjg1OCw3IEBACiAJam91cm5hbC0+al9tdXN0X3dhaXQgPSAwOwogCiAJaWYgKGpvdXJuYWwtPmpfY25vZGVfZnJlZSA9PSAwKSB7Ci0gICAgICAgIAlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgImpvdXJuYWwtMjAwNDogSm91cm5hbCBjbm9kZSBtZW1vcnkgIgorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0yMDA0IiwgIkpvdXJuYWwgY25vZGUgbWVtb3J5ICIKIAkJICAgICAgICAgICAgICAgICAiYWxsb2NhdGlvbiBmYWlsZWQgKCVsZCBieXRlcykuIEpvdXJuYWwgaXMgIgogCQkgICAgICAgICAgICAgICAgICJ0b28gbGFyZ2UgZm9yIGF2YWlsYWJsZSBtZW1vcnkuIFVzdWFsbHkgIgogCQkgICAgICAgICAgICAgICAgICJ0aGlzIGlzIGR1ZSB0byBhIGpvdXJuYWwgdGhhdCBpcyB0b28gbGFyZ2UuIiwKQEAgLTI4NjAsMTYgKzI4NjYsMTcgQEAKICAgICAgICAgCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAotCWluaXRfam91cm5hbF9oYXNoKHBfc19zYik7CisJaW5pdF9qb3VybmFsX2hhc2goc2IpOwogCWpsID0gam91cm5hbC0+al9jdXJyZW50X2psOwotCWpsLT5qX2xpc3RfYml0bWFwID0gZ2V0X2xpc3RfYml0bWFwKHBfc19zYiwgamwpOworCWpsLT5qX2xpc3RfYml0bWFwID0gZ2V0X2xpc3RfYml0bWFwKHNiLCBqbCk7CiAJaWYgKCFqbC0+al9saXN0X2JpdG1hcCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImpvdXJuYWwtMjAwNSwgZ2V0X2xpc3RfYml0bWFwIGZhaWxlZCBmb3Igam91cm5hbCBsaXN0IDAiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjAwNSIsCisJCQkJICJnZXRfbGlzdF9iaXRtYXAgZmFpbGVkIGZvciBqb3VybmFsIGxpc3QgMCIpOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9Ci0JaWYgKGpvdXJuYWxfcmVhZChwX3Nfc2IpIDwgMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIlJlcGxheSBGYWlsdXJlLCB1bmFibGUgdG8gbW91bnQiKTsKKwlpZiAoam91cm5hbF9yZWFkKHNiKSA8IDApIHsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTIwMDYiLAorCQkJCSAiUmVwbGF5IEZhaWx1cmUsIHVuYWJsZSB0byBtb3VudCIpOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKQEAgLTI4NzgsMTAgKzI4ODUsMTAgQEAKIAkJY29tbWl0X3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicmVpc2VyZnMiKTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZqb3VybmFsLT5qX3dvcmssIGZsdXNoX2FzeW5jX2NvbW1pdHMpOwotCWpvdXJuYWwtPmpfd29ya19zYiA9IHBfc19zYjsKKwlqb3VybmFsLT5qX3dvcmtfc2IgPSBzYjsKIAlyZXR1cm4gMDsKICAgICAgIGZyZWVfYW5kX3JldHVybjoKLQlmcmVlX2pvdXJuYWxfcmFtKHBfc19zYik7CisJZnJlZV9qb3VybmFsX3JhbShzYik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI5MTIsNyArMjkxOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgbXVzdCBiZSBjYWxsZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIGFuZCByZXF1aXJlcyB0aGUgCisvKiB0aGlzIG11c3QgYmUgY2FsbGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uLCBhbmQgcmVxdWlyZXMgdGhlCiAqKiBrZXJuZWxfbG9jayB0byBiZSBoZWxkCiAqLwogdm9pZCByZWlzZXJmc19ibG9ja193cml0ZXMoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgpCkBAIC0yOTcwLDcgKzI5NzcsNyBAQAogCQl3YWtlX3VwKCZqb3VybmFsLT5qX2pvaW5fd2FpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxldF90cmFuc2FjdGlvbl9ncm93KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCitzdGF0aWMgdm9pZCBsZXRfdHJhbnNhY3Rpb25fZ3JvdyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgdHJhbnNfaWQpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAl1bnNpZ25lZCBsb25nIGJjb3VudCA9IGpvdXJuYWwtPmpfYmNvdW50OwpAQCAtMjk5Nyw0MyArMzAwNCw0MyBAQAogKiogZXhwZWN0IHRvIHVzZSBpbiBuYmxvY2tzLgogKi8KIHN0YXRpYyBpbnQgZG9fam91cm5hbF9iZWdpbl9yKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKKwkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKIAkJCSAgICAgIGludCBqb2luKQogewogCXRpbWVfdCBub3cgPSBnZXRfc2Vjb25kcygpOwotCWludCBvbGRfdHJhbnNfaWQ7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJdW5zaWduZWQgaW50IG9sZF90cmFuc19pZDsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgbXl0aDsKIAlpbnQgc2NoZWRfY291bnQgPSAwOwogCWludCByZXR2YWw7CiAKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImpvdXJuYWxfYmVnaW4iKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiam91cm5hbF9iZWdpbiIpOwogCUJVR19PTihuYmxvY2tzID4gam91cm5hbC0+al90cmFuc19tYXgpOwogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuam91cm5hbF9iZWluZyk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5qb3VybmFsX2JlaW5nKTsKIAkvKiBzZXQgaGVyZSBmb3Igam91cm5hbF9qb2luICovCiAJdGgtPnRfcmVmY291bnQgPSAxOwotCXRoLT50X3N1cGVyID0gcF9zX3NiOworCXRoLT50X3N1cGVyID0gc2I7CiAKICAgICAgIHJlbG9jazoKLQlsb2NrX2pvdXJuYWwocF9zX3NiKTsKKwlsb2NrX2pvdXJuYWwoc2IpOwogCWlmIChqb2luICE9IEpCRUdJTl9BQk9SVCAmJiByZWlzZXJmc19pc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQlyZXR2YWwgPSBqb3VybmFsLT5qX2Vycm5vOwogCQlnb3RvIG91dF9mYWlsOwogCX0KIAlqb3VybmFsLT5qX2Jjb3VudCsrOwogCiAJaWYgKHRlc3RfYml0KEpfV1JJVEVSU19CTE9DS0VELCAmam91cm5hbC0+al9zdGF0ZSkpIHsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKLQkJcmVpc2VyZnNfd2FpdF9vbl93cml0ZV9ibG9jayhwX3Nfc2IpOwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5qb3VybmFsX3JlbG9ja193cml0ZXJzKTsKKwkJdW5sb2NrX2pvdXJuYWwoc2IpOworCQlyZWlzZXJmc193YWl0X29uX3dyaXRlX2Jsb2NrKHNiKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5qb3VybmFsX3JlbG9ja193cml0ZXJzKTsKIAkJZ290byByZWxvY2s7CiAJfQogCW5vdyA9IGdldF9zZWNvbmRzKCk7CiAKIAkvKiBpZiB0aGVyZSBpcyBubyByb29tIGluIHRoZSBqb3VybmFsIE9SCi0JICoqIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgYW5kIHdlIHdlcmVuJ3QgY2FsbGVkIGpvaW5hYmxlLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGJlZ2lubmluZyAKKwkgKiogaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBhbmQgd2Ugd2VyZW4ndCBjYWxsZWQgam9pbmFibGUsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgYmVnaW5uaW5nCiAJICoqIHdlIGRvbid0IHNsZWVwIGlmIHRoZXJlIGFyZW4ndCBvdGhlciB3cml0ZXJzCiAJICovCiAKQEAgLTMwNDgsNyArMzA1NSw3IEBACiAJICAgIHx8ICgham9pbiAmJiBqb3VybmFsLT5qX2Nub2RlX2ZyZWUgPCAoam91cm5hbC0+al90cmFuc19tYXggKiAzKSkpIHsKIAogCQlvbGRfdHJhbnNfaWQgPSBqb3VybmFsLT5qX3RyYW5zX2lkOwotCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOwkvKiBhbGxvdyBvdGhlcnMgdG8gZmluaXNoIHRoaXMgdHJhbnNhY3Rpb24gKi8KKwkJdW5sb2NrX2pvdXJuYWwoc2IpOwkvKiBhbGxvdyBvdGhlcnMgdG8gZmluaXNoIHRoaXMgdHJhbnNhY3Rpb24gKi8KIAogCQlpZiAoIWpvaW4gJiYgKGpvdXJuYWwtPmpfbGVuX2FsbG9jICsgbmJsb2NrcyArIDIpID49CiAJCSAgICBqb3VybmFsLT5qX21heF9iYXRjaCAmJgpAQCAtMzA1Niw3ICszMDYzLDcgQEAKIAkJICAgIChqb3VybmFsLT5qX2xlbl9hbGxvYyAqIDc1KSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZqb3VybmFsLT5qX3djb3VudCkgPiAxMCkgewogCQkJCXNjaGVkX2NvdW50Kys7Ci0JCQkJcXVldWVfbG9nX3dyaXRlcihwX3Nfc2IpOworCQkJCXF1ZXVlX2xvZ193cml0ZXIoc2IpOwogCQkJCWdvdG8gcmVsb2NrOwogCQkJfQogCQl9CkBAIC0zMDY2LDI1ICszMDczLDI1IEBACiAJCWlmIChhdG9taWNfcmVhZCgmam91cm5hbC0+al9qbG9jaykpIHsKIAkJCXdoaWxlIChqb3VybmFsLT5qX3RyYW5zX2lkID09IG9sZF90cmFuc19pZCAmJgogCQkJICAgICAgIGF0b21pY19yZWFkKCZqb3VybmFsLT5qX2psb2NrKSkgewotCQkJCXF1ZXVlX2xvZ193cml0ZXIocF9zX3NiKTsKKwkJCQlxdWV1ZV9sb2dfd3JpdGVyKHNiKTsKIAkJCX0KIAkJCWdvdG8gcmVsb2NrOwogCQl9Ci0JCXJldHZhbCA9IGpvdXJuYWxfam9pbigmbXl0aCwgcF9zX3NiLCAxKTsKKwkJcmV0dmFsID0gam91cm5hbF9qb2luKCZteXRoLCBzYiwgMSk7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIG91dF9mYWlsOwogCiAJCS8qIHNvbWVvbmUgbWlnaHQgaGF2ZSBlbmRlZCB0aGUgdHJhbnNhY3Rpb24gd2hpbGUgd2Ugam9pbmVkICovCiAJCWlmIChvbGRfdHJhbnNfaWQgIT0gam91cm5hbC0+al90cmFuc19pZCkgewotCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHBfc19zYiwgMSwgMCk7CisJCQlyZXR2YWwgPSBkb19qb3VybmFsX2VuZCgmbXl0aCwgc2IsIDEsIDApOwogCQl9IGVsc2UgewotCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHBfc19zYiwgMSwgQ09NTUlUX05PVyk7CisJCQlyZXR2YWwgPSBkb19qb3VybmFsX2VuZCgmbXl0aCwgc2IsIDEsIENPTU1JVF9OT1cpOwogCQl9CiAKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gb3V0X2ZhaWw7CiAKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd2NvdW50KTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5qb3VybmFsX3JlbG9ja193Y291bnQpOwogCQlnb3RvIHJlbG9jazsKIAl9CiAJLyogd2UgYXJlIHRoZSBmaXJzdCB3cml0ZXIsIHNldCB0cmFuc19pZCAqLwpAQCAtMzA5Niw3ICszMTAzLDcgQEAKIAl0aC0+dF9ibG9ja3NfbG9nZ2VkID0gMDsKIAl0aC0+dF9ibG9ja3NfYWxsb2NhdGVkID0gbmJsb2NrczsKIAl0aC0+dF90cmFuc19pZCA9IGpvdXJuYWwtPmpfdHJhbnNfaWQ7Ci0JdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwl1bmxvY2tfam91cm5hbChzYik7CiAJSU5JVF9MSVNUX0hFQUQoJnRoLT50X2xpc3QpOwogCWdldF9mc19leGNsKCk7CiAJcmV0dXJuIDA7CkBAIC0zMTA2LDcgKzMxMTMsNyBAQAogCS8qIFJlLXNldCB0aC0+dF9zdXBlciwgc28gd2UgY2FuIHByb3Blcmx5IGtlZXAgdHJhY2sgb2YgaG93IG1hbnkKIAkgKiBwZXJzaXN0ZW50IHRyYW5zYWN0aW9ucyB0aGVyZSBhcmUuIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyBpZiB0aGlzCiAJICogY2FsbCBpcyBwYXJ0IG9mIGEgZmFpbGVkIHJlc3RhcnRfdHJhbnNhY3Rpb24sIHdlIGNhbiBmcmVlIGl0IGxhdGVyICovCi0JdGgtPnRfc3VwZXIgPSBwX3Nfc2I7CisJdGgtPnRfc3VwZXIgPSBzYjsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zMTU3LDcgKzMxNjQsNyBAQAogfQogCiBzdGF0aWMgaW50IGpvdXJuYWxfam9pbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqY3VyX3RoID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCkBAIC0zMTY2LDExICszMTczLDExIEBACiAJICovCiAJdGgtPnRfaGFuZGxlX3NhdmUgPSBjdXJfdGg7CiAJQlVHX09OKGN1cl90aCAmJiBjdXJfdGgtPnRfcmVmY291bnQgPiAxKTsKLQlyZXR1cm4gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIEpCRUdJTl9KT0lOKTsKKwlyZXR1cm4gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBzYiwgbmJsb2NrcywgSkJFR0lOX0pPSU4pOwogfQogCiBpbnQgam91cm5hbF9qb2luX2Fib3J0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICpjdXJfdGggPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAKQEAgLTMxNzksMTEgKzMxODYsMTEgQEAKIAkgKi8KIAl0aC0+dF9oYW5kbGVfc2F2ZSA9IGN1cl90aDsKIAlCVUdfT04oY3VyX3RoICYmIGN1cl90aC0+dF9yZWZjb3VudCA+IDEpOwotCXJldHVybiBkb19qb3VybmFsX2JlZ2luX3IodGgsIHBfc19zYiwgbmJsb2NrcywgSkJFR0lOX0FCT1JUKTsKKwlyZXR1cm4gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBzYiwgbmJsb2NrcywgSkJFR0lOX0FCT1JUKTsKIH0KIAogaW50IGpvdXJuYWxfYmVnaW4oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKKwkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqY3VyX3RoID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCWludCByZXQ7CkBAIC0zMTkxLDI4ICszMTk4LDI5IEBACiAJdGgtPnRfaGFuZGxlX3NhdmUgPSBOVUxMOwogCWlmIChjdXJfdGgpIHsKIAkJLyogd2UgYXJlIG5lc3RpbmcgaW50byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotCQlpZiAoY3VyX3RoLT50X3N1cGVyID09IHBfc19zYikgeworCQlpZiAoY3VyX3RoLT50X3N1cGVyID09IHNiKSB7CiAJCQlCVUdfT04oIWN1cl90aC0+dF9yZWZjb3VudCk7CiAJCQljdXJfdGgtPnRfcmVmY291bnQrKzsKIAkJCW1lbWNweSh0aCwgY3VyX3RoLCBzaXplb2YoKnRoKSk7CiAJCQlpZiAodGgtPnRfcmVmY291bnQgPD0gMSkKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJCSAiQkFEOiByZWZjb3VudCA8PSAxLCBidXQgam91cm5hbF9pbmZvICE9IDAiKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnMtMjAwNSIsCisJCQkJCQkgIkJBRDogcmVmY291bnQgPD0gMSwgYnV0ICIKKwkJCQkJCSAiam91cm5hbF9pbmZvICE9IDAiKTsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJLyogd2UndmUgZW5kZWQgdXAgd2l0aCBhIGhhbmRsZSBmcm9tIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0uCiAJCQkgKiogc2F2ZSBpdCBhbmQgcmVzdG9yZSBvbiBqb3VybmFsX2VuZC4gIFRoaXMgc2hvdWxkIG5ldmVyCiAJCQkgKiogcmVhbGx5IGhhcHBlbi4uLgogCQkJICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJjbG0tMjEwMDogbmVzdGluZyBpbmZvIGEgZGlmZmVyZW50IEZTIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiY2xtLTIxMDAiLAorCQkJCQkgIm5lc3RpbmcgaW5mbyBhIGRpZmZlcmVudCBGUyIpOwogCQkJdGgtPnRfaGFuZGxlX3NhdmUgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aDsKIAkJfQogCX0gZWxzZSB7CiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRoOwogCX0KLQlyZXQgPSBkb19qb3VybmFsX2JlZ2luX3IodGgsIHBfc19zYiwgbmJsb2NrcywgSkJFR0lOX1JFRyk7CisJcmV0ID0gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBzYiwgbmJsb2NrcywgSkJFR0lOX1JFRyk7CiAJQlVHX09OKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyAhPSB0aCk7CiAKIAkvKiBJIGd1ZXNzIHRoaXMgYm9pbHMgZG93biB0byBiZWluZyB0aGUgcmVjaXByb2NhbCBvZiBjbG0tMjEwMCBhYm92ZS4KQEAgLTMyMzIsMzIgKzMyNDAsMzIgQEAKICoqCiAqKiBpZiBpdCB3YXMgZGlydHksIGNsZWFucyBhbmQgZmlsZXMgb250byB0aGUgY2xlYW4gbGlzdC4gIEkgY2FuJ3QgbGV0IGl0IGJlIGRpcnR5IGFnYWluIHVudGlsIHRoZQogKiogdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgotKiogCisqKgogKiogaWYgal9sZW4sIGlzIGJpZ2dlciB0aGFuIGpfbGVuX2FsbG9jLCBpdCBwdXNoZXMgal9sZW5fYWxsb2MgdG8gMTAgKyBqX2xlbi4KICovCiBpbnQgam91cm5hbF9tYXJrX2RpcnR5KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuID0gTlVMTDsKIAlpbnQgY291bnRfYWxyZWFkeV9pbmNkID0gMDsKIAlpbnQgcHJlcGFyZWQgPSAwOwogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwubWFya19kaXJ0eSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5tYXJrX2RpcnR5KTsKIAlpZiAodGgtPnRfdHJhbnNfaWQgIT0gam91cm5hbC0+al90cmFuc19pZCkgewotCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwKLQkJCSAgICAgICAiam91cm5hbC0xNTc3OiBoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkXG4iLAorCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwgImpvdXJuYWwtMTU3NyIsCisJCQkgICAgICAgImhhbmRsZSB0cmFucyBpZCAlbGQgIT0gY3VycmVudCB0cmFucyBpZCAlbGQiLAogCQkJICAgICAgIHRoLT50X3RyYW5zX2lkLCBqb3VybmFsLT5qX3RyYW5zX2lkKTsKIAl9CiAKLQlwX3Nfc2ItPnNfZGlydCA9IDE7CisJc2ItPnNfZGlydCA9IDE7CiAKIAlwcmVwYXJlZCA9IHRlc3RfY2xlYXJfYnVmZmVyX2pvdXJuYWxfcHJlcGFyZWQoYmgpOwogCWNsZWFyX2J1ZmZlcl9qb3VybmFsX3Jlc3RvcmVfZGlydHkoYmgpOwogCS8qIGFscmVhZHkgaW4gdGhpcyB0cmFuc2FjdGlvbiwgd2UgYXJlIGRvbmUgKi8KIAlpZiAoYnVmZmVyX2pvdXJuYWxlZChiaCkpIHsKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwubWFya19kaXJ0eV9hbHJlYWR5KTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5tYXJrX2RpcnR5X2FscmVhZHkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMyNjYsNyArMzI3NCw4IEBACiAJICoqIGNvdWxkIGdldCB0byBkaXNrIHRvbyBlYXJseS4gIE5PVCBHT09ELgogCSAqLwogCWlmICghcHJlcGFyZWQgfHwgYnVmZmVyX2RpcnR5KGJoKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgImpvdXJuYWwtMTc3NzogYnVmZmVyICVsbHUgYmFkIHN0YXRlICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTc3NyIsCisJCQkJICJidWZmZXIgJWxsdSBiYWQgc3RhdGUgIgogCQkJCSAiJWNQUkVQQVJFRCAlY0xPQ0tFRCAlY0RJUlRZICVjSkRJUlRZX1dBSVQiLAogCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkJIHByZXBhcmVkID8gJyAnIDogJyEnLApAQCAtMzI3NiwyMyArMzI4NSwyMyBAQAogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmKGpvdXJuYWwtPmpfd2NvdW50KSkgPD0gMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImpvdXJuYWwtMTQwOTogam91cm5hbF9tYXJrX2RpcnR5IHJldHVybmluZyBiZWNhdXNlIGpfd2NvdW50IHdhcyAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTE0MDkiLAorCQkJCSAicmV0dXJuaW5nIGJlY2F1c2Ugal93Y291bnQgd2FzICVkIiwKIAkJCQkgYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpKTsKIAkJcmV0dXJuIDE7CiAJfQotCS8qIHRoaXMgZXJyb3IgbWVhbnMgSSd2ZSBzY3Jld2VkIHVwLCBhbmQgd2UndmUgb3ZlcmZsb3dlZCB0aGUgdHJhbnNhY3Rpb24uICAKKwkvKiB0aGlzIGVycm9yIG1lYW5zIEkndmUgc2NyZXdlZCB1cCwgYW5kIHdlJ3ZlIG92ZXJmbG93ZWQgdGhlIHRyYW5zYWN0aW9uLgogCSAqKiBOb3RoaW5nIGNhbiBiZSBkb25lIGhlcmUsIGV4Y2VwdCBtYWtlIHRoZSBGUyByZWFkb25seSBvciBwYW5pYy4KIAkgKi8KIAlpZiAoam91cm5hbC0+al9sZW4gPj0gam91cm5hbC0+al90cmFuc19tYXgpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsCi0JCQkgICAgICAgImpvdXJuYWwtMTQxMzogam91cm5hbF9tYXJrX2RpcnR5OiBqX2xlbiAoJWx1KSBpcyB0b28gYmlnXG4iLAorCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwgImpvdXJuYWwtMTQxMyIsCisJCQkgICAgICAgImpfbGVuICglbHUpIGlzIHRvbyBiaWciLAogCQkJICAgICAgIGpvdXJuYWwtPmpfbGVuKTsKIAl9CiAKIAlpZiAoYnVmZmVyX2pvdXJuYWxfZGlydHkoYmgpKSB7CiAJCWNvdW50X2FscmVhZHlfaW5jZCA9IDE7Ci0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLm1hcmtfZGlydHlfbm90am91cm5hbCk7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubWFya19kaXJ0eV9ub3Rqb3VybmFsKTsKIAkJY2xlYXJfYnVmZmVyX2pvdXJuYWxfZGlydHkoYmgpOwogCX0KIApAQCAtMzMwNCw5ICszMzEzLDkgQEAKIAogCS8qIG5vdyBwdXQgdGhpcyBndXkgb24gdGhlIGVuZCAqLwogCWlmICghY24pIHsKLQkJY24gPSBnZXRfY25vZGUocF9zX3NiKTsKKwkJY24gPSBnZXRfY25vZGUoc2IpOwogCQlpZiAoIWNuKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJnZXRfY25vZGUgZmFpbGVkIVxuIik7CisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtNCIsICJnZXRfY25vZGUgZmFpbGVkISIpOwogCQl9CiAKIAkJaWYgKHRoLT50X2Jsb2Nrc19sb2dnZWQgPT0gdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCkgewpAQCAtMzMxOCw3ICszMzI3LDcgQEAKIAogCQljbi0+YmggPSBiaDsKIAkJY24tPmJsb2NrbnIgPSBiaC0+Yl9ibG9ja25yOwotCQljbi0+c2IgPSBwX3Nfc2I7CisJCWNuLT5zYiA9IHNiOwogCQljbi0+amxpc3QgPSBOVUxMOwogCQlpbnNlcnRfam91cm5hbF9oYXNoKGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgY24pOwogCQlpZiAoIWNvdW50X2FscmVhZHlfaW5jZCkgewpAQCAtMzMzOSwxMSArMzM0OCwxMSBAQAogfQogCiBpbnQgam91cm5hbF9lbmQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKIAlpZiAoIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyAmJiB0aC0+dF9yZWZjb3VudCA+IDEpCi0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAiUkVJU0VSLU5FU1RJTkc6IHRoIE5VTEwsIHJlZmNvdW50ICVkIiwKLQkJCQkgdGgtPnRfcmVmY291bnQpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiUkVJU0VSLU5FU1RJTkciLAorCQkJCSAidGggTlVMTCwgcmVmY291bnQgJWQiLCB0aC0+dF9yZWZjb3VudCk7CiAKIAlpZiAoIXRoLT50X3RyYW5zX2lkKSB7CiAJCVdBUk5fT04oMSk7CkBAIC0zMzY2LDI2ICszMzc1LDI2IEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIDApOworCQlyZXR1cm4gZG9fam91cm5hbF9lbmQodGgsIHNiLCBuYmxvY2tzLCAwKTsKIAl9CiB9CiAKLS8qIHJlbW92ZXMgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgcmVsc2luZyBhbmQgZGVzY3JlbWVudGluZyBhbnkgY291bnRlcnMuICAKKy8qIHJlbW92ZXMgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgcmVsc2luZyBhbmQgZGVzY3JlbWVudGluZyBhbnkgY291bnRlcnMuCiAqKiBhbHNvIGZpbGVzIHRoZSByZW1vdmVkIGJ1ZmZlciBkaXJlY3RseSBvbnRvIHRoZSBjbGVhbiBsaXN0CiAqKgogKiogY2FsbGVkIGJ5IGpvdXJuYWxfbWFya19mcmVlZCB3aGVuIGEgYmxvY2sgaGFzIGJlZW4gZGVsZXRlZAogKioKICoqIHJldHVybnMgMSBpZiBpdCBjbGVhbmVkIGFuZCByZWxzZWQgdGhlIGJ1ZmZlci4gMCBvdGhlcndpc2UKICovCi1zdGF0aWMgaW50IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIGJfYmxvY2tucl90IGJsb2NrbnIsIGludCBhbHJlYWR5X2NsZWFuZWQpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY247Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlpbnQgcmV0ID0gMDsKIAotCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsb2NrbnIpOworCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmxvY2tucik7CiAJaWYgKCFjbiB8fCAhY24tPmJoKSB7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMzQwMyw3ICszNDEyLDcgQEAKIAkJam91cm5hbC0+al9sYXN0ID0gY24tPnByZXY7CiAJfQogCWlmIChiaCkKLQkJcmVtb3ZlX2pvdXJuYWxfaGFzaChwX3Nfc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgTlVMTCwKKwkJcmVtb3ZlX2pvdXJuYWxfaGFzaChzYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBOVUxMLAogCQkJCSAgICBiaC0+Yl9ibG9ja25yLCAwKTsKIAljbGVhcl9idWZmZXJfam91cm5hbGVkKGJoKTsJLyogZG9uJ3QgbG9nIHRoaXMgb25lICovCiAKQEAgLTM0MTMsMTQgKzM0MjIsMTQgQEAKIAkJY2xlYXJfYnVmZmVyX2pvdXJuYWxfdGVzdChiaCk7CiAJCXB1dF9iaChiaCk7CiAJCWlmIChhdG9taWNfcmVhZCgmKGJoLT5iX2NvdW50KSkgPCAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTE3NTI6IHJlbW92ZSBmcm9tIHRyYW5zLCBiX2NvdW50IDwgMCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTc1MiIsCisJCQkJCSAiYl9jb3VudCA8IDAiKTsKIAkJfQogCQlyZXQgPSAxOwogCX0KIAlqb3VybmFsLT5qX2xlbi0tOwogCWpvdXJuYWwtPmpfbGVuX2FsbG9jLS07Ci0JZnJlZV9jbm9kZShwX3Nfc2IsIGNuKTsKKwlmcmVlX2Nub2RlKHNiLCBjbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ2OCwyMiArMzQ3NywyMiBAQAogfQogCiAvKiBzeW5jcyB0aGUgY29tbWl0IGJsb2NrcywgYnV0IGRvZXMgbm90IGZvcmNlIHRoZSByZWFsIGJ1ZmZlcnMgdG8gZGlzawotKiogd2lsbCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGRvbmUvY29tbWl0dGVkIGJlZm9yZSByZXR1cm5pbmcgCisqKiB3aWxsIHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgZG9uZS9jb21taXR0ZWQgYmVmb3JlIHJldHVybmluZwogKi8KIGludCBqb3VybmFsX2VuZF9zeW5jKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAkvKiB5b3UgY2FuIHN5bmMgd2hpbGUgbmVzdGVkLCB2ZXJ5LCB2ZXJ5IGJhZCAqLwogCUJVR19PTih0aC0+dF9yZWZjb3VudCA+IDEpOwogCWlmIChqb3VybmFsLT5qX2xlbiA9PSAwKSB7Ci0JCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLCBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpLAorCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLCBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCSAgICAgMSk7Ci0JCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcF9zX3NiLCBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKKwkJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpKTsKIAl9Ci0JcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIENPTU1JVF9OT1cgfCBXQUlUKTsKKwlyZXR1cm4gZG9fam91cm5hbF9lbmQodGgsIHNiLCBuYmxvY2tzLCBDT01NSVRfTk9XIHwgV0FJVCk7CiB9CiAKIC8qCkBAIC0zNDkzLDcgKzM1MDIsNyBAQAogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZWlzZXJmc19qb3VybmFsLCBqX3dvcmsud29yayk7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBqb3VybmFsLT5qX3dvcmtfc2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGpvdXJuYWwtPmpfd29ya19zYjsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIApAQCAtMzUwMiw3ICszNTExLDcgQEAKIAkJLyogbGFzdCBlbnRyeSBpcyB0aGUgeW91bmdlc3QsIGNvbW1pdCBpdCBhbmQgeW91IGdldCBldmVyeXRoaW5nICovCiAJCWVudHJ5ID0gam91cm5hbC0+al9qb3VybmFsX2xpc3QucHJldjsKIAkJamwgPSBKT1VSTkFMX0xJU1RfRU5UUlkoZW50cnkpOwotCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpAQCAtMzUxMSwxMSArMzUyMCwxMSBAQAogKiogZmx1c2hlcyBhbnkgb2xkIHRyYW5zYWN0aW9ucyB0byBkaXNrCiAqKiBlbmRzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlmIGl0IGlzIHRvbyBvbGQKICovCi1pbnQgcmVpc2VyZnNfZmx1c2hfb2xkX2NvbW1pdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitpbnQgcmVpc2VyZnNfZmx1c2hfb2xkX2NvbW1pdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAl0aW1lX3Qgbm93OwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCW5vdyA9IGdldF9zZWNvbmRzKCk7CiAJLyogc2FmZXR5IGNoZWNrIHNvIHdlIGRvbid0IGZsdXNoIHdoaWxlIHdlIGFyZSByZXBsYXlpbmcgdGhlIGxvZyBkdXJpbmcKQEAgLTM1MzIsMzUgKzM1NDEsMzUgQEAKIAkgICAgam91cm5hbC0+al90cmFuc19zdGFydF90aW1lID4gMCAmJgogCSAgICBqb3VybmFsLT5qX2xlbiA+IDAgJiYKIAkgICAgKG5vdyAtIGpvdXJuYWwtPmpfdHJhbnNfc3RhcnRfdGltZSkgPiBqb3VybmFsLT5qX21heF90cmFuc19hZ2UpIHsKLQkJaWYgKCFqb3VybmFsX2pvaW4oJnRoLCBwX3Nfc2IsIDEpKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwKLQkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJaWYgKCFqb3VybmFsX2pvaW4oJnRoLCBzYiwgMSkpIHsKKwkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsCisJCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSwKIAkJCQkJCSAgICAgMSk7Ci0JCQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBwX3Nfc2IsCi0JCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYikpOworCQkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgc2IsCisJCQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CiAKIAkJCS8qIHdlJ3JlIG9ubHkgYmVpbmcgY2FsbGVkIGZyb20ga3JlaXNlcmZzZCwgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gZG8KIAkJCSAqKiBhbiBhc3luYyBjb21taXQgc28gdGhhdCBrcmVpc2VyZnNkIGNhbiBkbyBpdCBsYXRlcgogCQkJICovCi0JCQlkb19qb3VybmFsX2VuZCgmdGgsIHBfc19zYiwgMSwgQ09NTUlUX05PVyB8IFdBSVQpOworCQkJZG9fam91cm5hbF9lbmQoJnRoLCBzYiwgMSwgQ09NTUlUX05PVyB8IFdBSVQpOwogCQl9CiAJfQotCXJldHVybiBwX3Nfc2ItPnNfZGlydDsKKwlyZXR1cm4gc2ItPnNfZGlydDsKIH0KIAogLyoKICoqIHJldHVybnMgMCBpZiBkb19qb3VybmFsX2VuZCBzaG91bGQgcmV0dXJuIHJpZ2h0IGF3YXksIHJldHVybnMgMSBpZiBkb19qb3VybmFsX2VuZCBzaG91bGQgZmluaXNoIHRoZSBjb21taXQKLSoqIAotKiogaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgYnV0IHN0aWxsIGhhcyB3cml0ZXJzLCB0aGlzIHdpbGwgd2FpdCBvbiBqX2pvaW5fd2FpdCB1bnRpbCBhbGwgCisqKgorKiogaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgYnV0IHN0aWxsIGhhcyB3cml0ZXJzLCB0aGlzIHdpbGwgd2FpdCBvbiBqX2pvaW5fd2FpdCB1bnRpbCBhbGwKICoqIHRoZSB3cml0ZXJzIGFyZSBkb25lLiAgQnkgdGhlIHRpbWUgaXQgd2FrZXMgdXAsIHRoZSB0cmFuc2FjdGlvbiBpdCB3YXMgY2FsbGVkIGhhcyBhbHJlYWR5IGVuZGVkLCBzbyBpdCBqdXN0CiAqKiBmbHVzaGVzIHRoZSBjb21taXQgbGlzdCBhbmQgcmV0dXJucyAwLgogKioKICoqIFdvbid0IGJhdGNoIHdoZW4gZmx1c2ggb3IgY29tbWl0X25vdyBpcyBzZXQuICBBbHNvIHdvbid0IGJhdGNoIHdoZW4gb3RoZXJzIGFyZSB3YWl0aW5nIG9uIGpfam9pbl93YWl0LgotKiogCisqKgogKiogTm90ZSwgd2UgY2FuJ3QgYWxsb3cgdGhlIGpvdXJuYWxfZW5kIHRvIHByb2NlZWQgd2hpbGUgdGhlcmUgYXJlIHN0aWxsIHdyaXRlcnMgaW4gdGhlIGxvZy4KICovCiBzdGF0aWMgaW50IGNoZWNrX2pvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAorCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCiAJCQkgICAgIGludCBmbGFncykKIHsKIApAQCAtMzU2OSwxMyArMzU3OCwxMyBAQAogCWludCBjb21taXRfbm93ID0gZmxhZ3MgJiBDT01NSVRfTk9XOwogCWludCB3YWl0X29uX2NvbW1pdCA9IGZsYWdzICYgV0FJVDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKIAlpZiAodGgtPnRfdHJhbnNfaWQgIT0gam91cm5hbC0+al90cmFuc19pZCkgewotCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwKLQkJCSAgICAgICAiam91cm5hbC0xNTc3OiBoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkXG4iLAorCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwgImpvdXJuYWwtMTU3NyIsCisJCQkgICAgICAgImhhbmRsZSB0cmFucyBpZCAlbGQgIT0gY3VycmVudCB0cmFucyBpZCAlbGQiLAogCQkJICAgICAgIHRoLT50X3RyYW5zX2lkLCBqb3VybmFsLT5qX3RyYW5zX2lkKTsKIAl9CiAKQEAgLTM1ODQsNyArMzU5Myw3IEBACiAJCWF0b21pY19kZWMoJihqb3VybmFsLT5qX3djb3VudCkpOwogCX0KIAotCS8qIEJVRywgZGVhbCB3aXRoIGNhc2Ugd2hlcmUgal9sZW4gaXMgMCwgYnV0IHBlb3BsZSBwcmV2aW91c2x5IGZyZWVkIGJsb2NrcyBuZWVkIHRvIGJlIHJlbGVhc2VkIAorCS8qIEJVRywgZGVhbCB3aXRoIGNhc2Ugd2hlcmUgal9sZW4gaXMgMCwgYnV0IHBlb3BsZSBwcmV2aW91c2x5IGZyZWVkIGJsb2NrcyBuZWVkIHRvIGJlIHJlbGVhc2VkCiAJICoqIHdpbGwgYmUgZGVhbHQgd2l0aCBieSBuZXh0IHRyYW5zYWN0aW9uIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHNvbWV0aGluZywgYnV0IHNob3VsZCBiZSB0YWtlbgogCSAqKiBjYXJlIG9mIGluIHRoaXMgdHJhbnMKIAkgKi8KQEAgLTM1OTMsNyArMzYwMiw3IEBACiAJLyogaWYgd2NvdW50ID4gMCwgYW5kIHdlIGFyZSBjYWxsZWQgdG8gd2l0aCBmbHVzaCBvciBjb21taXRfbm93LAogCSAqKiB3ZSB3YWl0IG9uIGpfam9pbl93YWl0LiAgV2Ugd2lsbCB3YWtlIHVwIHdoZW4gdGhlIGxhc3Qgd3JpdGVyIGhhcwogCSAqKiBmaW5pc2hlZCB0aGUgdHJhbnNhY3Rpb24sIGFuZCBzdGFydGVkIGl0IG9uIGl0cyB3YXkgdG8gdGhlIGRpc2suCi0JICoqIFRoZW4sIHdlIGZsdXNoIHRoZSBjb21taXQgb3Igam91cm5hbCBsaXN0LCBhbmQganVzdCByZXR1cm4gMCAKKwkgKiogVGhlbiwgd2UgZmx1c2ggdGhlIGNvbW1pdCBvciBqb3VybmFsIGxpc3QsIGFuZCBqdXN0IHJldHVybiAwCiAJICoqIGJlY2F1c2UgdGhlIHJlc3Qgb2Ygam91cm5hbCBlbmQgd2FzIGFscmVhZHkgZG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4KIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpID4gMCkgewpAQCAtMzYwOCwzMSArMzYxNywzMSBAQAogCQkJaWYgKGZsdXNoKSB7CiAJCQkJam91cm5hbC0+al9uZXh0X2Z1bGxfZmx1c2ggPSAxOwogCQkJfQotCQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJCXVubG9ja19qb3VybmFsKHNiKTsKIAogCQkJLyogc2xlZXAgd2hpbGUgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgc3RpbGwgal9qbG9ja2VkICovCiAJCQl3aGlsZSAoam91cm5hbC0+al90cmFuc19pZCA9PSB0cmFuc19pZCkgewogCQkJCWlmIChhdG9taWNfcmVhZCgmam91cm5hbC0+al9qbG9jaykpIHsKLQkJCQkJcXVldWVfbG9nX3dyaXRlcihwX3Nfc2IpOworCQkJCQlxdWV1ZV9sb2dfd3JpdGVyKHNiKTsKIAkJCQl9IGVsc2UgewotCQkJCQlsb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJCQkJbG9ja19qb3VybmFsKHNiKTsKIAkJCQkJaWYgKGpvdXJuYWwtPmpfdHJhbnNfaWQgPT0gdHJhbnNfaWQpIHsKIAkJCQkJCWF0b21pY19zZXQoJihqb3VybmFsLT5qX2psb2NrKSwKIAkJCQkJCQkgICAxKTsKIAkJCQkJfQotCQkJCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCQkJCQl1bmxvY2tfam91cm5hbChzYik7CiAJCQkJfQogCQkJfQogCQkJQlVHX09OKGpvdXJuYWwtPmpfdHJhbnNfaWQgPT0gdHJhbnNfaWQpOwogCQkJCiAJCQlpZiAoY29tbWl0X25vdwotCQkJICAgICYmIGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShwX3Nfc2IsIHRyYW5zX2lkKQorCQkJICAgICYmIGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShzYiwgdHJhbnNfaWQpCiAJCQkgICAgJiYgd2FpdF9vbl9jb21taXQpIHsKLQkJCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkJCQlmbHVzaF9jb21taXRfbGlzdChzYiwgamwsIDEpOwogCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM2NDksMTMgKzM2NTgsMTMgQEAKIAkgICAgJiYgam91cm5hbC0+al9sZW5fYWxsb2MgPCBqb3VybmFsLT5qX21heF9iYXRjaAogCSAgICAmJiBqb3VybmFsLT5qX2Nub2RlX2ZyZWUgPiAoam91cm5hbC0+al90cmFuc19tYXggKiAzKSkgewogCQlqb3VybmFsLT5qX2Jjb3VudCsrOwotCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCQl1bmxvY2tfam91cm5hbChzYik7CiAJCXJldHVybiAwOwogCX0KIAotCWlmIChqb3VybmFsLT5qX3N0YXJ0ID4gU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCSAgICAgICAiam91cm5hbC0wMDM6IGpvdXJuYWxfZW5kOiBqX3N0YXJ0ICglbGQpIGlzIHRvbyBoaWdoXG4iLAorCWlmIChqb3VybmFsLT5qX3N0YXJ0ID4gU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpIHsKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTAwMyIsCisJCQkgICAgICAgImpfc3RhcnQgKCVsZCkgaXMgdG9vIGhpZ2giLAogCQkJICAgICAgIGpvdXJuYWwtPmpfc3RhcnQpOwogCX0KIAlyZXR1cm4gMTsKQEAgLTM2NjQsNyArMzY3Myw3IEBACiAvKgogKiogRG9lcyBhbGwgdGhlIHdvcmsgdGhhdCBtYWtlcyBkZWxldGluZyBibG9ja3Mgc2FmZS4KICoqIHdoZW4gZGVsZXRpbmcgYSBibG9jayBtYXJrIEJIX0pOZXcsIGp1c3QgcmVtb3ZlIGl0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIGNsZWFuIGl0J3MgYnVmZmVyX2hlYWQgYW5kIG1vdmUgb24uCi0qKiAKKyoqCiAqKiBvdGhlcndpc2U6CiAqKiBzZXQgYSBiaXQgZm9yIHRoZSBibG9jayBpbiB0aGUgam91cm5hbCBiaXRtYXAuICBUaGF0IHdpbGwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGFsbG9jYXRlZCBmb3IgdW5mb3JtYXR0ZWQgbm9kZXMKICoqIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGhhcyBmaW5pc2hlZC4KQEAgLTM2NzYsMTYgKzM2ODUsMTYgQEAKICoqIFRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIGRlY3JlbWVudGluZyBhbnkgY291bnRlcnMgYW5kIGZpbGluZyBpdCBvbiB0aGUgY2xlYW4gbGlzdC4KICovCiBpbnQgam91cm5hbF9tYXJrX2ZyZWVkKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIGJfYmxvY2tucl90IGJsb2NrbnIpCisJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiX2Jsb2NrbnJfdCBibG9ja25yKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiID0gTlVMTDsKIAlpbnQgY2xlYW5lZCA9IDA7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKKwljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsb2NrbnIpOwogCWlmIChjbiAmJiBjbi0+YmgpIHsKIAkJYmggPSBjbi0+Ymg7CiAJCWdldF9iaChiaCk7CkBAIC0zNjk1LDE1ICszNzA0LDE1IEBACiAJCWNsZWFyX2J1ZmZlcl9qb3VybmFsX25ldyhiaCk7CiAJCWNsZWFyX3ByZXBhcmVkX2JpdHMoYmgpOwogCQlyZWlzZXJmc19jbGVhbl9hbmRfZmlsZV9idWZmZXIoYmgpOwotCQljbGVhbmVkID0gcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24ocF9zX3NiLCBibG9ja25yLCBjbGVhbmVkKTsKKwkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHNiLCBibG9ja25yLCBjbGVhbmVkKTsKIAl9IGVsc2UgewogCQkvKiBzZXQgdGhlIGJpdCBmb3IgdGhpcyBibG9jayBpbiB0aGUgam91cm5hbCBiaXRtYXAgZm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KIAkJamIgPSBqb3VybmFsLT5qX2N1cnJlbnRfamwtPmpfbGlzdF9iaXRtYXA7CiAJCWlmICghamIpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImpvdXJuYWwtMTcwMjogam91cm5hbF9tYXJrX2ZyZWVkLCBqb3VybmFsX2xpc3RfYml0bWFwIGlzIE5VTExcbiIpOworCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTE3MDIiLAorCQkJCSAgICAgICAiam91cm5hbF9saXN0X2JpdG1hcCBpcyBOVUxMIik7CiAJCX0KLQkJc2V0X2JpdF9pbl9saXN0X2JpdG1hcChwX3Nfc2IsIGJsb2NrbnIsIGpiKTsKKwkJc2V0X2JpdF9pbl9saXN0X2JpdG1hcChzYiwgYmxvY2tuciwgamIpOwogCiAJCS8qIE5vdGUsIHRoZSBlbnRpcmUgd2hpbGUgbG9vcCBpcyBub3QgYWxsb3dlZCB0byBzY2hlZHVsZS4gICovCiAKQEAgLTM3MTEsMTMgKzM3MjAsMTMgQEAKIAkJCWNsZWFyX3ByZXBhcmVkX2JpdHMoYmgpOwogCQkJcmVpc2VyZnNfY2xlYW5fYW5kX2ZpbGVfYnVmZmVyKGJoKTsKIAkJfQotCQljbGVhbmVkID0gcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24ocF9zX3NiLCBibG9ja25yLCBjbGVhbmVkKTsKKwkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHNiLCBibG9ja25yLCBjbGVhbmVkKTsKIAogCQkvKiBmaW5kIGFsbCBvbGRlciB0cmFuc2FjdGlvbnMgd2l0aCB0aGlzIGJsb2NrLCBtYWtlIHN1cmUgdGhleSBkb24ndCB0cnkgdG8gd3JpdGUgaXQgb3V0ICovCi0JCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKKwkJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCiAJCQkJCSAgYmxvY2tucik7CiAJCXdoaWxlIChjbikgewotCQkJaWYgKHBfc19zYiA9PSBjbi0+c2IgJiYgYmxvY2tuciA9PSBjbi0+YmxvY2tucikgeworCQkJaWYgKHNiID09IGNuLT5zYiAmJiBibG9ja25yID09IGNuLT5ibG9ja25yKSB7CiAJCQkJc2V0X2JpdChCTE9DS19GUkVFRCwgJmNuLT5zdGF0ZSk7CiAJCQkJaWYgKGNuLT5iaCkgewogCQkJCQlpZiAoIWNsZWFuZWQpIHsKQEAgLTM3MzMsOCArMzc0Miw5IEBACiAJCQkJCQlwdXRfYmgoY24tPmJoKTsKIAkJCQkJCWlmIChhdG9taWNfcmVhZAogCQkJCQkJICAgICgmKGNuLT5iaC0+Yl9jb3VudCkpIDwgMCkgewotCQkJCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkJCQkJICJqb3VybmFsLTIxMzg6IGNuLT5iaC0+Yl9jb3VudCA8IDAiKTsKKwkJCQkJCQlyZWlzZXJmc193YXJuaW5nKHNiLAorCQkJCQkJCQkgImpvdXJuYWwtMjEzOCIsCisJCQkJCQkJCSAiY24tPmJoLT5iX2NvdW50IDwgMCIpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCWlmIChjbi0+amxpc3QpIHsJLyogc2luY2Ugd2UgYXJlIGNsZWFyaW5nIHRoZSBiaCwgd2UgTVVTVCBkZWMgbm9uemVyb2xlbiAqLwpAQCAtMzgyNCw3ICszODM0LDcgQEAKIAogaW50IHJlaXNlcmZzX2NvbW1pdF9mb3JfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl1bnNpZ25lZCBsb25nIGlkID0gUkVJU0VSRlNfSShpbm9kZSktPmlfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGlkID0gUkVJU0VSRlNfSShpbm9kZSktPmlfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwgPSBSRUlTRVJGU19JKGlub2RlKS0+aV9qbDsKIAogCS8qIGZvciB0aGUgd2hvbGUgaW5vZGUsIGFzc3VtZSB1bnNldCBpZCBtZWFucyBpdCB3YXMKQEAgLTM4MzksMTggKzM4NDksMTggQEAKIAlyZXR1cm4gX19jb21taXRfdHJhbnNfamwoaW5vZGUsIGlkLCBqbCk7CiB9CiAKLXZvaWQgcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCit2b2lkIHJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5yZXN0b3JlX3ByZXBhcmVkKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwucmVzdG9yZV9wcmVwYXJlZCk7CiAJaWYgKCFiaCkgewogCQlyZXR1cm47CiAJfQogCWlmICh0ZXN0X2NsZWFyX2J1ZmZlcl9qb3VybmFsX3Jlc3RvcmVfZGlydHkoYmgpICYmCiAJICAgIGJ1ZmZlcl9qb3VybmFsX2RpcnR5KGJoKSkgewogCQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY247Ci0JCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLAorCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLAogCQkJCQkgIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAogCQkJCQkgIGJoLT5iX2Jsb2NrbnIpOwogCQlpZiAoY24gJiYgY2FuX2RpcnR5KGNuKSkgewpAQCAtMzg2NywxMiArMzg3NywxMiBAQAogKiogYmUgd3JpdHRlbiB0byBkaXNrIHdoaWxlIHdlIGFyZSBhbHRlcmluZyBpdC4gIFNvLCB3ZSBtdXN0OgogKiogY2xlYW4gaXQKICoqIHdhaXQgb24gaXQuCi0qKiAKKyoqCiAqLwotaW50IHJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitpbnQgcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgd2FpdCkKIHsKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5wcmVwYXJlKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLnByZXBhcmUpOwogCiAJaWYgKCF0cnlsb2NrX2J1ZmZlcihiaCkpIHsKIAkJaWYgKCF3YWl0KQpAQCAtMzkwOSw3ICszOTE5LDcgQEAKIAl9CiB9CiAKLS8qIAorLyoKICoqIGxvbmcgYW5kIHVnbHkuICBJZiBmbHVzaCwgd2lsbCBub3QgcmV0dXJuIHVudGlsIGFsbCBjb21taXQKICoqIGJsb2NrcyBhbmQgYWxsIHJlYWwgYnVmZmVycyBpbiB0aGUgdHJhbnMgYXJlIG9uIGRpc2suCiAqKiBJZiBub19hc3luYywgd29uJ3QgcmV0dXJuIHVudGlsIGFsbCBjb21taXQgYmxvY2tzIGFyZSBvbiBkaXNrLgpAQCAtMzkyMCwxMCArMzkzMCwxMCBAQAogKiogam91cm5hbCBsaXN0cywgZXRjIGp1c3Qgd29uJ3QgaGFwcGVuLgogKi8KIHN0YXRpYyBpbnQgZG9fam91cm5hbF9lbmQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCisJCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKIAkJCSAgaW50IGZsYWdzKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuLCAqbmV4dCwgKmpsX2NuOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpsYXN0X2NuID0gTlVMTDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICpkZXNjOwpAQCAtMzkzOCw3ICszOTQ4LDcgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCwgKnRlbXBfamw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpzYWZlOwogCXVuc2lnbmVkIGxvbmcgamluZGV4OwotCXVuc2lnbmVkIGxvbmcgY29tbWl0X3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBjb21taXRfdHJhbnNfaWQ7CiAJaW50IHRyYW5zX2hhbGY7CiAKIAlCVUdfT04odGgtPnRfcmVmY291bnQgPiAxKTsKQEAgLTM5NDYsMjEgKzM5NTYsMjEgQEAKIAogCS8qIHByb3RlY3QgZmx1c2hfb2xkZXJfY29tbWl0cyBmcm9tIGRvaW5nIG1pc3Rha2VzIGlmIHRoZQogICAgICAgICAgICB0cmFuc2FjdGlvbiBJRCBjb3VudGVyIGdldHMgb3ZlcmZsb3dlZC4gICovCi0JaWYgKHRoLT50X3RyYW5zX2lkID09IH4wVUwpCisJaWYgKHRoLT50X3RyYW5zX2lkID09IH4wVSkKIAkJZmxhZ3MgfD0gRkxVU0hfQUxMIHwgQ09NTUlUX05PVyB8IFdBSVQ7CiAJZmx1c2ggPSBmbGFncyAmIEZMVVNIX0FMTDsKIAl3YWl0X29uX2NvbW1pdCA9IGZsYWdzICYgV0FJVDsKIAogCXB1dF9mc19leGNsKCk7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGgtPnRfaGFuZGxlX3NhdmU7Ci0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJqb3VybmFsIGVuZCIpOworCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc2IsICJqb3VybmFsIGVuZCIpOwogCWlmIChqb3VybmFsLT5qX2xlbiA9PSAwKSB7Ci0JCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLCBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpLAorCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLCBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCSAgICAgMSk7Ci0JCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcF9zX3NiLCBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKKwkJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpKTsKIAl9CiAKLQlsb2NrX2pvdXJuYWwocF9zX3NiKTsKKwlsb2NrX2pvdXJuYWwoc2IpOwogCWlmIChqb3VybmFsLT5qX25leHRfZnVsbF9mbHVzaCkgewogCQlmbGFncyB8PSBGTFVTSF9BTEw7CiAJCWZsdXNoID0gMTsKQEAgLTM5NzAsMTMgKzM5ODAsMTMgQEAKIAkJd2FpdF9vbl9jb21taXQgPSAxOwogCX0KIAotCS8qIGNoZWNrX2pvdXJuYWxfZW5kIGxvY2tzIHRoZSBqb3VybmFsLCBhbmQgdW5sb2NrcyBpZiBpdCBkb2VzIG5vdCByZXR1cm4gMSAKKwkvKiBjaGVja19qb3VybmFsX2VuZCBsb2NrcyB0aGUgam91cm5hbCwgYW5kIHVubG9ja3MgaWYgaXQgZG9lcyBub3QgcmV0dXJuIDEKIAkgKiogaXQgdGVsbHMgdXMgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGpvdXJuYWxfZW5kLCBvciBqdXN0IHJldHVybgogCSAqLwotCWlmICghY2hlY2tfam91cm5hbF9lbmQodGgsIHBfc19zYiwgbmJsb2NrcywgZmxhZ3MpKSB7Ci0JCXBfc19zYi0+c19kaXJ0ID0gMTsKLQkJd2FrZV9xdWV1ZWRfd3JpdGVycyhwX3Nfc2IpOwotCQlyZWlzZXJmc19hc3luY19wcm9ncmVzc193YWl0KHBfc19zYik7CisJaWYgKCFjaGVja19qb3VybmFsX2VuZCh0aCwgc2IsIG5ibG9ja3MsIGZsYWdzKSkgeworCQlzYi0+c19kaXJ0ID0gMTsKKwkJd2FrZV9xdWV1ZWRfd3JpdGVycyhzYik7CisJCXJlaXNlcmZzX2FzeW5jX3Byb2dyZXNzX3dhaXQoc2IpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQwMDUsOCArNDAxNSw4IEBACiAKIAkvKiBzZXR1cCBkZXNjcmlwdGlvbiBibG9jayAqLwogCWRfYmggPQotCSAgICBqb3VybmFsX2dldGJsayhwX3Nfc2IsCi0JCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJICAgIGpvdXJuYWxfZ2V0YmxrKHNiLAorCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkgICBqb3VybmFsLT5qX3N0YXJ0KTsKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGRfYmgpOwogCWRlc2MgPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqKShkX2JoKS0+Yl9kYXRhOwpAQCAtNDAxNSw5ICs0MDI1LDkgQEAKIAlzZXRfZGVzY190cmFuc19pZChkZXNjLCBqb3VybmFsLT5qX3RyYW5zX2lkKTsKIAogCS8qIHNldHVwIGNvbW1pdCBibG9jay4gIERvbid0IHdyaXRlIChrZWVwIGl0IGNsZWFuIHRvbykgdGhpcyBvbmUgdW50aWwgYWZ0ZXIgZXZlcnlvbmUgZWxzZSBpcyB3cml0dGVuICovCi0JY19iaCA9IGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCWNfYmggPSBqb3VybmFsX2dldGJsayhzYiwgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkgICAgICAoKGpvdXJuYWwtPmpfc3RhcnQgKyBqb3VybmFsLT5qX2xlbiArCi0JCQkJMSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKTsKKwkJCQkxKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSk7CiAJY29tbWl0ID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqKWNfYmgtPmJfZGF0YTsKIAltZW1zZXQoY19iaC0+Yl9kYXRhLCAwLCBjX2JoLT5iX3NpemUpOwogCXNldF9jb21taXRfdHJhbnNfaWQoY29tbWl0LCBqb3VybmFsLT5qX3RyYW5zX2lkKTsKQEAgLTQwNTAsMTMgKzQwNjAsMTMgQEAKIAkgKiogIGZvciBlYWNoIHJlYWwgYmxvY2ssIGFkZCBpdCB0byB0aGUgam91cm5hbCBsaXN0IGhhc2gsCiAJICoqIGNvcHkgaW50byByZWFsIGJsb2NrIGluZGV4IGFycmF5IGluIHRoZSBjb21taXQgb3IgZGVzYyBibG9jawogCSAqLwotCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYocF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJdHJhbnNfaGFsZiA9IGpvdXJuYWxfdHJhbnNfaGFsZihzYi0+c19ibG9ja3NpemUpOwogCWZvciAoaSA9IDAsIGNuID0gam91cm5hbC0+al9maXJzdDsgY247IGNuID0gY24tPm5leHQsIGkrKykgewogCQlpZiAoYnVmZmVyX2pvdXJuYWxlZChjbi0+YmgpKSB7Ci0JCQlqbF9jbiA9IGdldF9jbm9kZShwX3Nfc2IpOworCQkJamxfY24gPSBnZXRfY25vZGUoc2IpOwogCQkJaWYgKCFqbF9jbikgewotCQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkJICAgICAgICJqb3VybmFsLTE2NzYsIGdldF9jbm9kZSByZXR1cm5lZCBOVUxMXG4iKTsKKwkJCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMTY3NiIsCisJCQkJCSAgICAgICAiZ2V0X2Nub2RlIHJldHVybmVkIE5VTEwiKTsKIAkJCX0KIAkJCWlmIChpID09IDApIHsKIAkJCQlqbC0+al9yZWFsYmxvY2sgPSBqbF9jbjsKQEAgLTQwNjcsMTggKzQwNzcsMTkgQEAKIAkJCQlsYXN0X2NuLT5uZXh0ID0gamxfY247CiAJCQl9CiAJCQlsYXN0X2NuID0gamxfY247Ci0JCQkvKiBtYWtlIHN1cmUgdGhlIGJsb2NrIHdlIGFyZSB0cnlpbmcgdG8gbG9nIGlzIG5vdCBhIGJsb2NrIAorCQkJLyogbWFrZSBzdXJlIHRoZSBibG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGxvZyBpcyBub3QgYSBibG9jawogCQkJICAgb2Ygam91cm5hbCBvciByZXNlcnZlZCBhcmVhICovCiAKIAkJCWlmIChpc19ibG9ja19pbl9sb2dfb3JfcmVzZXJ2ZWRfYXJlYQotCQkJICAgIChwX3Nfc2IsIGNuLT5iaC0+Yl9ibG9ja25yKSkgewotCQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkJICAgICAgICJqb3VybmFsLTIzMzI6IFRyeWluZyB0byBsb2cgYmxvY2sgJWx1LCB3aGljaCBpcyBhIGxvZyBibG9ja1xuIiwKKwkJCSAgICAoc2IsIGNuLT5iaC0+Yl9ibG9ja25yKSkgeworCQkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0yMzMyIiwKKwkJCQkJICAgICAgICJUcnlpbmcgdG8gbG9nIGJsb2NrICVsdSwgIgorCQkJCQkgICAgICAgIndoaWNoIGlzIGEgbG9nIGJsb2NrIiwKIAkJCQkJICAgICAgIGNuLT5iaC0+Yl9ibG9ja25yKTsKIAkJCX0KIAkJCWpsX2NuLT5ibG9ja25yID0gY24tPmJoLT5iX2Jsb2NrbnI7CiAJCQlqbF9jbi0+c3RhdGUgPSAwOwotCQkJamxfY24tPnNiID0gcF9zX3NiOworCQkJamxfY24tPnNiID0gc2I7CiAJCQlqbF9jbi0+YmggPSBjbi0+Ymg7CiAJCQlqbF9jbi0+amxpc3QgPSBqbDsKIAkJCWluc2VydF9qb3VybmFsX2hhc2goam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsIGpsX2NuKTsKQEAgLTQxMTksMTEgKzQxMzAsMTEgQEAKIAkJCWNoYXIgKmFkZHI7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJCXRtcF9iaCA9Ci0JCQkgICAgam91cm5hbF9nZXRibGsocF9zX3NiLAotCQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCQkgICAgam91cm5hbF9nZXRibGsoc2IsCisJCQkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJCQkgICAoKGN1cl93cml0ZV9zdGFydCArCiAJCQkJCSAgICAgamluZGV4KSAlCi0JCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKTsKKwkJCQkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSk7CiAJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKHRtcF9iaCk7CiAJCQlwYWdlID0gY24tPmJoLT5iX3BhZ2U7CiAJCQlhZGRyID0ga21hcChwYWdlKTsKQEAgLTQxMzcsMTIgKzQxNDgsMTMgQEAKIAkJCWNsZWFyX2J1ZmZlcl9qb3VybmFsZWQoY24tPmJoKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEpEaXJ0eSBjbGVhcmVkIHNvbWV0aW1lIGR1cmluZyB0cmFuc2FjdGlvbi4gIGRvbid0IGxvZyB0aGlzIG9uZSAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0yMDQ4OiBkb19qb3VybmFsX2VuZDogQkFELCBidWZmZXIgaW4gam91cm5hbCBoYXNoLCBidXQgbm90IEpEaXJ0eSEiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTIwNDgiLAorCQkJCQkgIkJBRCwgYnVmZmVyIGluIGpvdXJuYWwgaGFzaCwgIgorCQkJCQkgImJ1dCBub3QgSkRpcnR5ISIpOwogCQkJYnJlbHNlKGNuLT5iaCk7CiAJCX0KIAkJbmV4dCA9IGNuLT5uZXh0OwotCQlmcmVlX2Nub2RlKHBfc19zYiwgY24pOworCQlmcmVlX2Nub2RlKHNiLCBjbik7CiAJCWNuID0gbmV4dDsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQpAQCAtNDE1Miw3ICs0MTY0LDcgQEAKIAkgKiogc28gd2UgZGlydHkvcmVsc2UgY19iaCBpbiBmbHVzaF9jb21taXRfbGlzdCwgd2l0aCBjb21taXRfbGVmdCA8PSAxLgogCSAqLwogCi0Jam91cm5hbC0+al9jdXJyZW50X2psID0gYWxsb2Nfam91cm5hbF9saXN0KHBfc19zYik7CisJam91cm5hbC0+al9jdXJyZW50X2psID0gYWxsb2Nfam91cm5hbF9saXN0KHNiKTsKIAogCS8qIG5vdyBpdCBpcyBzYWZlIHRvIGluc2VydCB0aGlzIHRyYW5zYWN0aW9uIG9uIHRoZSBtYWluIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZqbC0+al9saXN0LCAmam91cm5hbC0+al9qb3VybmFsX2xpc3QpOwpAQCAtNDE2Myw3ICs0MTc1LDcgQEAKIAlvbGRfc3RhcnQgPSBqb3VybmFsLT5qX3N0YXJ0OwogCWpvdXJuYWwtPmpfc3RhcnQgPQogCSAgICAoam91cm5hbC0+al9zdGFydCArIGpvdXJuYWwtPmpfbGVuICsKLQkgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpOworCSAgICAgMikgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKTsKIAlhdG9taWNfc2V0KCYoam91cm5hbC0+al93Y291bnQpLCAwKTsKIAlqb3VybmFsLT5qX2Jjb3VudCA9IDA7CiAJam91cm5hbC0+al9sYXN0ID0gTlVMTDsKQEAgLTQxNzgsNyArNDE5MCw3IEBACiAJam91cm5hbC0+al9sZW5fYWxsb2MgPSAwOwogCWpvdXJuYWwtPmpfbmV4dF9mdWxsX2ZsdXNoID0gMDsKIAlqb3VybmFsLT5qX25leHRfYXN5bmNfZmx1c2ggPSAwOwotCWluaXRfam91cm5hbF9oYXNoKHBfc19zYik7CisJaW5pdF9qb3VybmFsX2hhc2goc2IpOwogCiAJLy8gbWFrZSBzdXJlIHJlaXNlcmZzX2FkZF9qaCBzZWVzIHRoZSBuZXcgY3VycmVudF9qbCBiZWZvcmUgd2UKIAkvLyB3cml0ZSBvdXQgdGhlIHRhaWxzCkBAIC00MjA3LDE0ICs0MjE5LDE0IEBACiAJICoqIHF1ZXVlIGRvbid0IHdhaXQgZm9yIHRoaXMgcHJvYyB0byBmbHVzaCBqb3VybmFsIGxpc3RzIGFuZCBzdWNoLgogCSAqLwogCWlmIChmbHVzaCkgewotCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKLQkJZmx1c2hfam91cm5hbF9saXN0KHBfc19zYiwgamwsIDEpOworCQlmbHVzaF9jb21taXRfbGlzdChzYiwgamwsIDEpOworCQlmbHVzaF9qb3VybmFsX2xpc3Qoc2IsIGpsLCAxKTsKIAl9IGVsc2UgaWYgKCEoamwtPmpfc3RhdGUgJiBMSVNUX0NPTU1JVF9QRU5ESU5HKSkKIAkJcXVldWVfZGVsYXllZF93b3JrKGNvbW1pdF93cSwgJmpvdXJuYWwtPmpfd29yaywgSFogLyAxMCk7CiAKLQkvKiBpZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgYW55IGNoYW5jZSBvZiB3cmFwcGluZywgZmx1c2ggCi0JICoqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGdldCBvdmVyd3JpdHRlbi4gIElmIGFueSBqb3VybmFsIGxpc3RzIGFyZSB2ZXJ5IAotCSAqKiBvbGQgZmx1c2ggdGhlbSBhcyB3ZWxsLiAgCisJLyogaWYgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIGFueSBjaGFuY2Ugb2Ygd3JhcHBpbmcsIGZsdXNoCisJICoqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGdldCBvdmVyd3JpdHRlbi4gIElmIGFueSBqb3VybmFsIGxpc3RzIGFyZSB2ZXJ5CisJICoqIG9sZCBmbHVzaCB0aGVtIGFzIHdlbGwuCiAJICovCiAgICAgICBmaXJzdF9qbDoKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHNhZmUsICZqb3VybmFsLT5qX2pvdXJuYWxfbGlzdCkgewpAQCAtNDIyMiwxMSArNDIzNCwxMSBAQAogCQlpZiAoam91cm5hbC0+al9zdGFydCA8PSB0ZW1wX2psLT5qX3N0YXJ0KSB7CiAJCQlpZiAoKGpvdXJuYWwtPmpfc3RhcnQgKyBqb3VybmFsLT5qX3RyYW5zX21heCArIDEpID49CiAJCQkgICAgdGVtcF9qbC0+al9zdGFydCkgewotCQkJCWZsdXNoX3VzZWRfam91cm5hbF9saXN0cyhwX3Nfc2IsIHRlbXBfamwpOworCQkJCWZsdXNoX3VzZWRfam91cm5hbF9saXN0cyhzYiwgdGVtcF9qbCk7CiAJCQkJZ290byBmaXJzdF9qbDsKIAkJCX0gZWxzZSBpZiAoKGpvdXJuYWwtPmpfc3RhcnQgKwogCQkJCSAgICBqb3VybmFsLT5qX3RyYW5zX21heCArIDEpIDwKLQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpIHsKKwkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkgewogCQkJCS8qIGlmIHdlIGRvbid0IGNyb3NzIGludG8gdGhlIG5leHQgdHJhbnNhY3Rpb24gYW5kIHdlIGRvbid0CiAJCQkJICogd3JhcCwgdGhlcmUgaXMgbm8gd2F5IHdlIGNhbiBvdmVybGFwIGFueSBsYXRlciB0cmFuc2FjdGlvbnMKIAkJCQkgKiBicmVhayBub3cKQEAgLTQyMzUsMTEgKzQyNDcsMTEgQEAKIAkJCX0KIAkJfSBlbHNlIGlmICgoam91cm5hbC0+al9zdGFydCArCiAJCQkgICAgam91cm5hbC0+al90cmFuc19tYXggKyAxKSA+Ci0JCQkgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpIHsKKwkJCSAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSB7CiAJCQlpZiAoKChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al90cmFuc19tYXggKyAxKSAlCi0JCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkgPj0KKwkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpID49CiAJCQkgICAgdGVtcF9qbC0+al9zdGFydCkgewotCQkJCWZsdXNoX3VzZWRfam91cm5hbF9saXN0cyhwX3Nfc2IsIHRlbXBfamwpOworCQkJCWZsdXNoX3VzZWRfam91cm5hbF9saXN0cyhzYiwgdGVtcF9qbCk7CiAJCQkJZ290byBmaXJzdF9qbDsKIAkJCX0gZWxzZSB7CiAJCQkJLyogd2UgZG9uJ3Qgb3ZlcmxhcCBhbnl0aGluZyBmcm9tIG91dCBzdGFydCB0byB0aGUgZW5kIG9mIHRoZQpAQCAtNDI1MCw0NiArNDI2Miw0NyBAQAogCQkJfQogCQl9CiAJfQotCWZsdXNoX29sZF9qb3VybmFsX2xpc3RzKHBfc19zYik7CisJZmx1c2hfb2xkX2pvdXJuYWxfbGlzdHMoc2IpOwogCiAJam91cm5hbC0+al9jdXJyZW50X2psLT5qX2xpc3RfYml0bWFwID0KLQkgICAgZ2V0X2xpc3RfYml0bWFwKHBfc19zYiwgam91cm5hbC0+al9jdXJyZW50X2psKTsKKwkgICAgZ2V0X2xpc3RfYml0bWFwKHNiLCBqb3VybmFsLT5qX2N1cnJlbnRfamwpOwogCiAJaWYgKCEoam91cm5hbC0+al9jdXJyZW50X2psLT5qX2xpc3RfYml0bWFwKSkgewotCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkgICAgICAgImpvdXJuYWwtMTk5NjogZG9fam91cm5hbF9lbmQsIGNvdWxkIG5vdCBnZXQgYSBsaXN0IGJpdG1hcFxuIik7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0xOTk2IiwKKwkJCSAgICAgICAiY291bGQgbm90IGdldCBhIGxpc3QgYml0bWFwIik7CiAJfQogCiAJYXRvbWljX3NldCgmKGpvdXJuYWwtPmpfamxvY2spLCAwKTsKLQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCXVubG9ja19qb3VybmFsKHNiKTsKIAkvKiB3YWtlIHVwIGFueSBib2R5IHdhaXRpbmcgdG8gam9pbi4gKi8KIAljbGVhcl9iaXQoSl9XUklURVJTX1FVRVVFRCwgJmpvdXJuYWwtPmpfc3RhdGUpOwogCXdha2VfdXAoJihqb3VybmFsLT5qX2pvaW5fd2FpdCkpOwogCiAJaWYgKCFmbHVzaCAmJiB3YWl0X29uX2NvbW1pdCAmJgotCSAgICBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUocF9zX3NiLCBjb21taXRfdHJhbnNfaWQpKSB7Ci0JCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwgamwsIDEpOworCSAgICBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUoc2IsIGNvbW1pdF90cmFuc19pZCkpIHsKKwkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKIAl9CiAgICAgICBvdXQ6Ci0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJqb3VybmFsIGVuZDIiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiam91cm5hbCBlbmQyIik7CiAKIAltZW1zZXQodGgsIDAsIHNpemVvZigqdGgpKTsKIAkvKiBSZS1zZXQgdGgtPnRfc3VwZXIsIHNvIHdlIGNhbiBwcm9wZXJseSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55CiAJICogcGVyc2lzdGVudCB0cmFuc2FjdGlvbnMgdGhlcmUgYXJlLiBXZSBuZWVkIHRvIGRvIHRoaXMgc28gaWYgdGhpcwogCSAqIGNhbGwgaXMgcGFydCBvZiBhIGZhaWxlZCByZXN0YXJ0X3RyYW5zYWN0aW9uLCB3ZSBjYW4gZnJlZSBpdCBsYXRlciAqLwotCXRoLT50X3N1cGVyID0gcF9zX3NiOworCXRoLT50X3N1cGVyID0gc2I7CiAKIAlyZXR1cm4gam91cm5hbC0+al9lcnJubzsKIH0KIAotc3RhdGljIHZvaWQgX19yZWlzZXJmc19qb3VybmFsX2Fib3J0X2hhcmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKKy8qIFNlbmQgdGhlIGZpbGUgc3lzdGVtIHJlYWQgb25seSBhbmQgcmVmdXNlIG5ldyB0cmFuc2FjdGlvbnMgKi8KK3ZvaWQgcmVpc2VyZnNfYWJvcnRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8pCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlpZiAodGVzdF9iaXQoSl9BQk9SVEVELCAmam91cm5hbC0+al9zdGF0ZSkpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTOiBBYm9ydGluZyBqb3VybmFsIGZvciBmaWxlc3lzdGVtIG9uICVzXG4iLAotCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYikpOworCWlmICgham91cm5hbC0+al9lcnJubykKKwkJam91cm5hbC0+al9lcnJubyA9IGVycm5vOwogCiAJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCXNldF9iaXQoSl9BQk9SVEVELCAmam91cm5hbC0+al9zdGF0ZSk7CkBAIC00Mjk5LDE5ICs0MzEyLDMgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX3JlaXNlcmZzX2pvdXJuYWxfYWJvcnRfc29mdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8pCi17Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKLQlpZiAodGVzdF9iaXQoSl9BQk9SVEVELCAmam91cm5hbC0+al9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWlmICgham91cm5hbC0+al9lcnJubykKLQkJam91cm5hbC0+al9lcnJubyA9IGVycm5vOwotCi0JX19yZWlzZXJmc19qb3VybmFsX2Fib3J0X2hhcmQoc2IpOwotfQotCi12b2lkIHJlaXNlcmZzX2pvdXJuYWxfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKQotewotCV9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9zb2Z0KHNiLCBlcnJubyk7Ci19CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jIGIvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYwppbmRleCA2ZGUwNjBhLi4zODE3NTBhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCWl0ZW1fbnVtX2luX2Rlc3QgPQogCSAgICAobGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUKSA/IChCX05SX0lURU1TKGRlc3QpIC0gMSkgOiAwOwogCi0JbGVhZl9wYXN0ZV9lbnRyaWVzKGRlc3RfYmktPmJpX2JoLCBpdGVtX251bV9pbl9kZXN0LAorCWxlYWZfcGFzdGVfZW50cmllcyhkZXN0X2JpLCBpdGVtX251bV9pbl9kZXN0LAogCQkJICAgKGxhc3RfZmlyc3QgPT0KIAkJCSAgICBGSVJTVF9UT19MQVNUKSA/IElfRU5UUllfQ09VTlQoQl9OX1BJVEVNX0hFQUQoZGVzdCwKIAkJCQkJCQkJCSAgaXRlbV9udW1faW5fZGVzdCkpCkBAIC0xMTksOCArMTE5LDggQEAKIAkJCSAgIERFSF9TSVpFICogY29weV9jb3VudCArIGNvcHlfcmVjb3Jkc19sZW4pOwogfQogCi0vKiBDb3B5IHRoZSBmaXJzdCAoaWYgbGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUKSBvciBsYXN0IChsYXN0X2ZpcnN0ID09IExBU1RfVE9fRklSU1QpIGl0ZW0gb3IgCi0gICBwYXJ0IG9mIGl0IG9yIG5vdGhpbmcgKHNlZSB0aGUgcmV0dXJuIDAgYmVsb3cpIGZyb20gU09VUkNFIHRvIHRoZSBlbmQgCisvKiBDb3B5IHRoZSBmaXJzdCAoaWYgbGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUKSBvciBsYXN0IChsYXN0X2ZpcnN0ID09IExBU1RfVE9fRklSU1QpIGl0ZW0gb3IKKyAgIHBhcnQgb2YgaXQgb3Igbm90aGluZyAoc2VlIHRoZSByZXR1cm4gMCBiZWxvdykgZnJvbSBTT1VSQ0UgdG8gdGhlIGVuZAogICAgKGlmIGxhc3RfZmlyc3QpIG9yIGJlZ2lubmluZyAoIWxhc3RfZmlyc3QpIG9mIHRoZSBERVNUICovCiAvKiByZXR1cm5zIDEgaWYgYW55dGhpbmcgd2FzIGNvcGllZCwgZWxzZSAwICovCiBzdGF0aWMgaW50IGxlYWZfY29weV9ib3VuZGFyeV9pdGVtKHN0cnVjdCBidWZmZXJfaW5mbyAqZGVzdF9iaSwKQEAgLTE2OCwxMCArMTY4LDExIEBACiAJCQlpZiAoYnl0ZXNfb3JfZW50cmllcyA9PSBpaF9pdGVtX2xlbihpaCkKIAkJCSAgICAmJiBpc19pbmRpcmVjdF9sZV9paChpaCkpCiAJCQkJaWYgKGdldF9paF9mcmVlX3NwYWNlKGloKSkKLQkJCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCQkJCSAgICAgICAidnMtMTAwMjA6IGxlYWZfY29weV9ib3VuZGFyeV9pdGVtOiAiCi0JCQkJCQkgICAgICAgImxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBtdXN0IGJlIGZpbGxlZCBlbnRpcmVseSAoJWgpIiwKLQkJCQkJCSAgICAgICBpaCk7CisJCQkJCXJlaXNlcmZzX3BhbmljKHNiX2Zyb21fYmkoZGVzdF9iaSksCisJCQkJCQkgICAgICAgInZzLTEwMDIwIiwKKwkJCQkJCSAgICAgICAibGFzdCB1bmZvcm1hdHRlZCBub2RlICIKKwkJCQkJCSAgICAgICAibXVzdCBiZSBmaWxsZWQgIgorCQkJCQkJICAgICAgICJlbnRpcmVseSAoJWgpIiwgaWgpOwogCQl9CiAjZW5kaWYKIApAQCAtMzk1LDcgKzM5Niw3IEBACiAJCWVsc2UgewogCQkJc3RydWN0IGl0ZW1faGVhZCBuX2loOwogCi0JCQkvKiBjb3B5IHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGl0ZW0gbnVtYmVyICdpdGVtX251bScgb2YgU09VUkNFIHRvIHRoZSBlbmQgb2YgdGhlIERFU1QgCisJCQkvKiBjb3B5IHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGl0ZW0gbnVtYmVyICdpdGVtX251bScgb2YgU09VUkNFIHRvIHRoZSBlbmQgb2YgdGhlIERFU1QKIAkJCSAgIHBhcnQgZGVmaW5lZCBieSAnY3B5X2J5dGVzJzsgY3JlYXRlIG5ldyBpdGVtIGhlYWRlcjsgY2hhbmdlIG9sZCBpdGVtX2hlYWRlciAoPz8/Pyk7CiAJCQkgICBuX2loID0gbmV3IGl0ZW1faGVhZGVyOwogCQkJICovCkBAIC00MjUsNyArNDI2LDcgQEAKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgaXRlbV9oZWFkIG5faWg7CiAKLQkJCS8qIGNvcHkgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgaXRlbSBudW1iZXIgJ2l0ZW1fbnVtJyBvZiBTT1VSQ0UgdG8gdGhlIGJlZ2luIG9mIHRoZSBERVNUIAorCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgYmVnaW4gb2YgdGhlIERFU1QKIAkJCSAgIHBhcnQgZGVmaW5lZCBieSAnY3B5X2J5dGVzJzsgY3JlYXRlIG5ldyBpdGVtIGhlYWRlcjsKIAkJCSAgIG5faWggPSBuZXcgaXRlbV9oZWFkZXI7CiAJCQkgKi8KQEAgLTYyMiw5ICs2MjMsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTEwMjUwOiBsZWFmX2RlZmluZV9kZXN0X3NyY19pbmZvczogc2hpZnQgdHlwZSBpcyB1bmtub3duICglZCkiLAotCQkJICAgICAgIHNoaWZ0X21vZGUpOworCQlyZWlzZXJmc19wYW5pYyhzYl9mcm9tX2JpKHNyY19iaSksICJ2cy0xMDI1MCIsCisJCQkgICAgICAgInNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwgc2hpZnRfbW9kZSk7CiAJfQogCVJGQUxTRSghc3JjX2JpLT5iaV9iaCB8fCAhZGVzdF9iaS0+YmlfYmgsCiAJICAgICAgICJ2cy0xMDI2MDogbW9kZT09JWQsIHNvdXJjZSAoJXApIG9yIGRlc3QgKCVwKSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgaW5jb3JyZWN0bHkiLApAQCAtNjc0LDkgKzY3NCw5IEBACiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCQlpZiAodGItPnRiX21vZGUgPT0gTV9QQVNURSB8fCB0Yi0+dGJfbW9kZSA9PSBNX0lOU0VSVCkgewogCQkJCXByaW50X2N1cl90YigidnMtMTAyNzUiKTsKLQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJCSAgICAgICAidnMtMTAyNzU6IGxlYWZfc2hpZnRfbGVmdDogYmFsYW5jZSBjb25kaXRpb24gY29ycnVwdGVkICglYykiLAotCQkJCQkgICAgICAgdGItPnRiX21vZGUpOworCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTEwMjc1IiwKKwkJCQkJICAgICAgICJiYWxhbmNlIGNvbmRpdGlvbiBjb3JydXB0ZWQgIgorCQkJCQkgICAgICAgIiglYykiLCB0Yi0+dGJfbW9kZSk7CiAJCQl9CiAjZW5kaWYKIApAQCAtNzI0LDcgKzcyNCw3IEBACiBzdGF0aWMgdm9pZCBsZWFmX2RlbGV0ZV9pdGVtc19lbnRpcmVseShzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLAogCQkJCSAgICAgICBpbnQgZmlyc3QsIGludCBkZWxfbnVtKTsKIC8qICBJZiBkZWxfYnl0ZXMgPT0gLTEsIHN0YXJ0aW5nIGZyb20gcG9zaXRpb24gJ2ZpcnN0JyBkZWxldGUgZGVsX251bSBpdGVtcyBpbiB3aG9sZSBpbiBidWZmZXIgQ1VSLgotICAgIElmIG5vdC4gCisgICAgSWYgbm90LgogICAgIElmIGxhc3RfZmlyc3QgPT0gMC4gU3RhcnRpbmcgZnJvbSBwb3NpdGlvbiAnZmlyc3QnIGRlbGV0ZSBkZWxfbnVtLTEgaXRlbXMgaW4gd2hvbGUuIERlbGV0ZSBwYXJ0IG9mIGJvZHkgb2YKICAgICB0aGUgZmlyc3QgaXRlbS4gUGFydCBkZWZpbmVkIGJ5IGRlbF9ieXRlcy4gRG9uJ3QgZGVsZXRlIGZpcnN0IGl0ZW0gaGVhZGVyCiAgICAgSWYgbGFzdF9maXJzdCA9PSAxLiBTdGFydGluZyBmcm9tIHBvc2l0aW9uICdmaXJzdCsxJyBkZWxldGUgZGVsX251bS0xIGl0ZW1zIGluIHdob2xlLiBEZWxldGUgcGFydCBvZiBib2R5IG9mCkBAIC03ODMsNyArNzgzLDcgQEAKIAkJCQkvKiBsZW4gPSBib2R5IGxlbiBvZiBpdGVtICovCiAJCQkJbGVuID0gaWhfaXRlbV9sZW4oaWgpOwogCi0JCQkvKiBkZWxldGUgdGhlIHBhcnQgb2YgdGhlIGxhc3QgaXRlbSBvZiB0aGUgYmggCisJCQkvKiBkZWxldGUgdGhlIHBhcnQgb2YgdGhlIGxhc3QgaXRlbSBvZiB0aGUgYmgKIAkJCSAgIGRvIG5vdCBkZWxldGUgaXRlbSBoZWFkZXIKIAkJCSAqLwogCQkJbGVhZl9jdXRfZnJvbV9idWZmZXIoY3VyX2JpLCBCX05SX0lURU1TKGJoKSAtIDEsCkBAIC04NjUsNyArODY1LDcgQEAKIAl9CiB9CiAKLS8qIHBhc3RlIHBhc3RlX3NpemUgYnl0ZXMgdG8gYWZmZWN0ZWRfaXRlbV9udW0tdGggaXRlbS4gCisvKiBwYXN0ZSBwYXN0ZV9zaXplIGJ5dGVzIHRvIGFmZmVjdGVkX2l0ZW1fbnVtLXRoIGl0ZW0uCiAgICBXaGVuIGl0ZW0gaXMgYSBkaXJlY3RvcnksIHRoaXMgb25seSBwcmVwYXJlIHNwYWNlIGZvciBuZXcgZW50cmllcyAqLwogdm9pZCBsZWFmX3Bhc3RlX2luX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgYWZmZWN0ZWRfaXRlbV9udW0sCiAJCQkgIGludCBwb3NfaW5faXRlbSwgaW50IHBhc3RlX3NpemUsCkBAIC04ODksOSArODg5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlpZiAoemVyb3NfbnVtYmVyID4gcGFzdGVfc2l6ZSkgeworCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwkJaWYgKGJpICYmIGJpLT50YikKKwkJCXNiID0gYmktPnRiLT50Yl9zYjsKIAkJcHJpbnRfY3VyX3RiKCIxMDE3NyIpOwotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy0xMDE3NzogbGVhZl9wYXN0ZV9pbl9idWZmZXI6IGVybyBudW1iZXIgPT0gJWQsIHBhc3RlX3NpemUgPT0gJWQiLAorCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTEwMTc3IiwKKwkJCSAgICAgICAiemVyb3NfbnVtYmVyID09ICVkLCBwYXN0ZV9zaXplID09ICVkIiwKIAkJCSAgICAgICB6ZXJvc19udW1iZXIsIHBhc3RlX3NpemUpOwogCX0KICNlbmRpZgkJCQkvKiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKi8KQEAgLTEwMTksNyArMTAyMiw3IEBACiAvKiAgd2hlbiBjdXQgaXRlbSBpcyBwYXJ0IG9mIHJlZ3VsYXIgZmlsZQogICAgICAgICBwb3NfaW5faXRlbSAtIGZpcnN0IGJ5dGUgdGhhdCBtdXN0IGJlIGN1dAogICAgICAgICBjdXRfc2l6ZSAtIG51bWJlciBvZiBieXRlcyB0byBiZSBjdXQgYmVnaW5uaW5nIGZyb20gcG9zX2luX2l0ZW0KLSAKKwogICAgd2hlbiBjdXQgaXRlbSBpcyBwYXJ0IG9mIGRpcmVjdG9yeQogICAgICAgICBwb3NfaW5faXRlbSAtIG51bWJlciBvZiBmaXJzdCBkZWxldGVkIGVudHJ5CiAgICAgICAgIGN1dF9zaXplIC0gY291bnQgb2YgZGVsZXRlZCBlbnRyaWVzCkBAIC0xMTkxLDcgKzExOTQsNyBAQAogfQogCiAvKiBwYXN0ZSBuZXdfZW50cnlfY291bnQgZW50cmllcyAobmV3X2RlaHMsIHJlY29yZHMpIGludG8gcG9zaXRpb24gYmVmb3JlIHRvIGl0ZW1fbnVtLXRoIGl0ZW0gKi8KLXZvaWQgbGVhZl9wYXN0ZV9lbnRyaWVzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCit2b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLAogCQkJaW50IGl0ZW1fbnVtLAogCQkJaW50IGJlZm9yZSwKIAkJCWludCBuZXdfZW50cnlfY291bnQsCkBAIC0xMjAzLDYgKzEyMDYsNyBAQAogCXN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpkZWg7CiAJY2hhciAqaW5zZXJ0X3BvaW50OwogCWludCBpLCBvbGRfZW50cnlfbnVtOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBiaS0+YmlfYmg7CiAKIAlpZiAobmV3X2VudHJ5X2NvdW50ID09IDApCiAJCXJldHVybjsKQEAgLTEyNzEsNyArMTI3NSw3IEBACiAJLyogY2hhbmdlIGl0ZW0ga2V5IGlmIG5lY2Vzc2FyeSAod2hlbiB3ZSBwYXN0ZSBiZWZvcmUgMC10aCBlbnRyeSAqLwogCWlmICghYmVmb3JlKSB7CiAJCXNldF9sZV9paF9rX29mZnNldChpaCwgZGVoX29mZnNldChuZXdfZGVocykpOwotLyogICAgICBtZW1jcHkgKCZpaC0+aWhfa2V5Lmtfb2Zmc2V0LCAKKy8qICAgICAgbWVtY3B5ICgmaWgtPmloX2tleS5rX29mZnNldCwKIAkJICAgICAgICZuZXdfZGVocy0+ZGVoX29mZnNldCwgU0hPUlRfS0VZX1NJWkUpOyovCiAJfQogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwpAQCAtMTI4NywxMyArMTI5MSwxNyBAQAogCQkJcHJldiA9IChpICE9IDApID8gZGVoX2xvY2F0aW9uKCYoZGVoW2kgLSAxXSkpIDogMDsKIAogCQkJaWYgKHByZXYgJiYgcHJldiA8PSBkZWhfbG9jYXRpb24oJihkZWhbaV0pKSkKLQkJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCQkgInZzLTEwMjQwOiBsZWFmX3Bhc3RlX2VudHJpZXM6IGRpcmVjdG9yeSBpdGVtICglaCkgY29ycnVwdGVkIChwcmV2ICVhLCBjdXIoJWQpICVhKSIsCi0JCQkJCQkgaWgsIGRlaCArIGkgLSAxLCBpLCBkZWggKyBpKTsKKwkJCQlyZWlzZXJmc19lcnJvcihzYl9mcm9tX2JpKGJpKSwgInZzLTEwMjQwIiwKKwkJCQkJICAgICAgICJkaXJlY3RvcnkgaXRlbSAoJWgpICIKKwkJCQkJICAgICAgICJjb3JydXB0ZWQgKHByZXYgJWEsICIKKwkJCQkJICAgICAgICJjdXIoJWQpICVhKSIsCisJCQkJCSAgICAgICBpaCwgZGVoICsgaSAtIDEsIGksIGRlaCArIGkpOwogCQkJaWYgKG5leHQgJiYgbmV4dCA+PSBkZWhfbG9jYXRpb24oJihkZWhbaV0pKSkKLQkJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCQkgInZzLTEwMjUwOiBsZWFmX3Bhc3RlX2VudHJpZXM6IGRpcmVjdG9yeSBpdGVtICglaCkgY29ycnVwdGVkIChjdXIoJWQpICVhLCBuZXh0ICVhKSIsCi0JCQkJCQkgaWgsIGksIGRlaCArIGksIGRlaCArIGkgKyAxKTsKKwkJCQlyZWlzZXJmc19lcnJvcihzYl9mcm9tX2JpKGJpKSwgInZzLTEwMjUwIiwKKwkJCQkJICAgICAgICJkaXJlY3RvcnkgaXRlbSAoJWgpICIKKwkJCQkJICAgICAgICJjb3JydXB0ZWQgKGN1ciglZCkgJWEsICIKKwkJCQkJICAgICAgICJuZXh0ICVhKSIsCisJCQkJCSAgICAgICBpaCwgaSwgZGVoICsgaSwgZGVoICsgaSArIDEpOwogCQl9CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCA2MzlkNjM1Li5lZmQ0ZDcyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogVGhpcyBmdW5jdGlvbiBmaXJzdCBjYWxscyBzZWFyY2hfYnlfa2V5LCB0aGVuLCBpZiBpdGVtIHdob3NlIGZpcnN0CiBlbnRyeSBtYXRjaGVzIGlzIG5vdCBmb3VuZCBpdCBsb29rcyBmb3IgdGhlIGVudHJ5IGluc2lkZSBkaXJlY3RvcnkKIGl0ZW0gZm91bmQgYnkgc2VhcmNoX2J5X2tleS4gRmlsbHMgdGhlIHBhdGggdG8gdGhlIGVudHJ5LCBhbmQgdG8gdGhlCi1lbnRyeSBwb3NpdGlvbiBpbiB0aGUgaXRlbSAKK2VudHJ5IHBvc2l0aW9uIGluIHRoZSBpdGVtCiAKICovCiAKQEAgLTEyMCw4ICsxMjAsOCBAQAogCXN3aXRjaCAocmV0dmFsKSB7CiAJY2FzZSBJVEVNX05PVF9GT1VORDoKIAkJaWYgKCFQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJCSAidnMtNzAwMDogc2VhcmNoX2J5X2VudHJ5X2tleTogc2VhcmNoX2J5X2tleSByZXR1cm5lZCBpdGVtIHBvc2l0aW9uID09IDAiKTsKKwkJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtNzAwMCIsICJzZWFyY2hfYnlfa2V5ICIKKwkJCQkgICAgICAgInJldHVybmVkIGl0ZW0gcG9zaXRpb24gPT0gMCIpOwogCQkJcGF0aHJlbHNlKHBhdGgpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CkBAIC0xMzUsOCArMTM1LDcgQEAKIAogCWRlZmF1bHQ6CiAJCXBhdGhyZWxzZShwYXRoKTsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwKLQkJCQkgInZzLTcwMDI6IHNlYXJjaF9ieV9lbnRyeV9rZXk6IG5vIHBhdGggdG8gaGVyZSIpOworCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTcwMDIiLCAibm8gcGF0aCB0byBoZXJlIik7CiAJCXJldHVybiBJT19FUlJPUjsKIAl9CiAKQEAgLTE0NiwxMCArMTQ1LDkgQEAKIAlpZiAoIWlzX2RpcmVudHJ5X2xlX2loKGRlLT5kZV9paCkgfHwKIAkgICAgQ09NUF9TSE9SVF9LRVlTKCYoZGUtPmRlX2loLT5paF9rZXkpLCBrZXkpKSB7CiAJCXByaW50X2Jsb2NrKGRlLT5kZV9iaCwgMCwgLTEsIC0xKTsKLQkJcmVpc2VyZnNfcGFuaWMoc2IsCi0JCQkgICAgICAgInZzLTcwMDU6IHNlYXJjaF9ieV9lbnRyeV9rZXk6IGZvdW5kIGl0ZW0gJWggaXMgbm90IGRpcmVjdG9yeSBpdGVtIG9yICIKLQkJCSAgICAgICAiZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBrZXkgJUsiLAotCQkJICAgICAgIGRlLT5kZV9paCwga2V5KTsKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy03MDA1IiwgImZvdW5kIGl0ZW0gJWggaXMgbm90IGRpcmVjdG9yeSAiCisJCQkgICAgICAgIml0ZW0gb3IgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSAiCisJCQkgICAgICAgImFzIGtleSAlSyIsIGRlLT5kZV9paCwga2V5KTsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCiAKQEAgLTMwMCw4ICsyOTgsNyBAQAogCQkgICAgc2VhcmNoX2J5X2VudHJ5X2tleShkaXItPmlfc2IsICZrZXlfdG9fc2VhcmNoLAogCQkJCQlwYXRoX3RvX2VudHJ5LCBkZSk7CiAJCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLCAiemFtLTcwMDE6IGlvIGVycm9yIGluICVzIiwKLQkJCQkJIF9fZnVuY19fKTsKKwkJCXJlaXNlcmZzX2Vycm9yKGRpci0+aV9zYiwgInphbS03MDAxIiwgImlvIGVycm9yIik7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIApAQCAtMzYxLDkgKzM1OCwxMCBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CiAJCX0KIAotCQkvKiBQcm9wb2dhdGUgdGhlIHByaXZfb2JqZWN0IGZsYWcgc28gd2Uga25vdyB3ZSdyZSBpbiB0aGUgcHJpdiB0cmVlICovCi0JCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChkaXIpKQotCQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKTsKKwkJLyogUHJvcGFnYXRlIHRoZSBwcml2YXRlIGZsYWcgc28gd2Uga25vdyB3ZSdyZQorCQkgKiBpbiB0aGUgcHJpdiB0cmVlICovCisJCWlmIChJU19QUklWQVRFKGRpcikpCisJCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJfQogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKQEAgLTM3Myw3ICszNzEsNyBAQAogCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIH0KIAotLyogCisvKgogKiogbG9va3MgdXAgdGhlIGRlbnRyeSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgY2hpbGQuCiAqKiB0YWtlbiBmcm9tIGV4dDJfZ2V0X3BhcmVudAogKi8KQEAgLTQwMyw3ICs0MDEsNyBAQAogCXJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiB9CiAKLS8qIGFkZCBlbnRyeSB0byB0aGUgZGlyZWN0b3J5IChlbnRyeSBjYW4gYmUgaGlkZGVuKS4gCisvKiBhZGQgZW50cnkgdG8gdGhlIGRpcmVjdG9yeSAoZW50cnkgY2FuIGJlIGhpZGRlbikuCiAKIGluc2VydCBkZWZpbml0aW9uIG9mIHdoZW4gaGlkZGVuIGRpcmVjdG9yaWVzIGFyZSB1c2VkIGhlcmUgLUhhbnMKIApAQCAtNDg0LDEwICs0ODIsOSBAQAogCQl9CiAKIAkJaWYgKHJldHZhbCAhPSBOQU1FX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwKLQkJCQkJICJ6YW0tNzAwMjolczogXCJyZWlzZXJmc19maW5kX2VudHJ5XCIgIgotCQkJCQkgImhhcyByZXR1cm5lZCB1bmV4cGVjdGVkIHZhbHVlICglZCkiLAotCQkJCQkgX19mdW5jX18sIHJldHZhbCk7CisJCQlyZWlzZXJmc19lcnJvcihkaXItPmlfc2IsICJ6YW0tNzAwMiIsCisJCQkJICAgICAgICJyZWlzZXJmc19maW5kX2VudHJ5KCkgcmV0dXJuZWQgIgorCQkJCSAgICAgICAidW5leHBlY3RlZCB2YWx1ZSAoJWQpIiwgcmV0dmFsKTsKIAkJfQogCiAJCXJldHVybiAtRUVYSVNUOwpAQCAtNDk4LDggKzQ5NSw5IEBACiAJCQkJTUFYX0dFTkVSQVRJT05fTlVNQkVSICsgMSk7CiAJaWYgKGdlbl9udW1iZXIgPiBNQVhfR0VORVJBVElPTl9OVU1CRVIpIHsKIAkJLyogdGhlcmUgaXMgbm8gZnJlZSBnZW5lcmF0aW9uIG51bWJlciAqLwotCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwKLQkJCQkgInJlaXNlcmZzX2FkZF9lbnRyeTogQ29uZ3JhdHVsYXRpb25zISB3ZSBoYXZlIGdvdCBoYXNoIGZ1bmN0aW9uIHNjcmV3ZWQgdXAiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsICJyZWlzZXJmcy03MDEwIiwKKwkJCQkgIkNvbmdyYXR1bGF0aW9ucyEgd2UgaGF2ZSBnb3QgaGFzaCBmdW5jdGlvbiAiCisJCQkJICJzY3Jld2VkIHVwIik7CiAJCWlmIChidWZmZXIgIT0gc21hbGxfYnVmKQogCQkJa2ZyZWUoYnVmZmVyKTsKIAkJcGF0aHJlbHNlKCZwYXRoKTsKQEAgLTUxNSwxMCArNTEzLDkgQEAKIAlpZiAoZ2VuX251bWJlciAhPSAwKSB7CS8qIHdlIG5lZWQgdG8gcmUtc2VhcmNoIGZvciB0aGUgaW5zZXJ0aW9uIHBvaW50ICovCiAJCWlmIChzZWFyY2hfYnlfZW50cnlfa2V5KGRpci0+aV9zYiwgJmVudHJ5X2tleSwgJnBhdGgsICZkZSkgIT0KIAkJICAgIE5BTUVfTk9UX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwKLQkJCQkJICJ2cy03MDMyOiByZWlzZXJmc19hZGRfZW50cnk6ICIKLQkJCQkJICJlbnRyeSB3aXRoIHRoaXMga2V5ICglSykgYWxyZWFkeSBleGlzdHMiLAotCQkJCQkgJmVudHJ5X2tleSk7CisJCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgInZzLTcwMzIiLAorCQkJCQkgImVudHJ5IHdpdGggdGhpcyBrZXkgKCVLKSBhbHJlYWR5ICIKKwkJCQkJICJleGlzdHMiLCAmZW50cnlfa2V5KTsKIAogCQkJaWYgKGJ1ZmZlciAhPSBzbWFsbF9idWYpCiAJCQkJa2ZyZWUoYnVmZmVyKTsKQEAgLTU2Miw3ICs1NTksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgZG9lcyBzZXR1cCBmb3IgcmVpc2VyZnNfbmV3X2lub2RlLiAgCisvKiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgZG9lcyBzZXR1cCBmb3IgcmVpc2VyZnNfbmV3X2lub2RlLgogKiogdmZzX2RxX2luaXQgbmVlZHMgbG90cyBvZiBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQKICoqIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiwgc28gd2UgaGFkIHRvIHB1bGwgc29tZSBiaXRzIG9mCiAqKiByZWlzZXJmc19uZXdfaW5vZGUgb3V0IGludG8gdGhpcyBmdW5jLgpAQCAtNjAxLDIwICs1OTgsMjIgQEAKIAkgICAgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwotCWludCBsb2NrZWQ7CisJc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSBzZWN1cml0eTsKIAogCWlmICghKGlub2RlID0gbmV3X2lub2RlKGRpci0+aV9zYikpKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAluZXdfaW5vZGVfaW5pdChpbm9kZSwgZGlyLCBtb2RlKTsKIAotCWxvY2tlZCA9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7Ci0KKwlqYmVnaW5fY291bnQgKz0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKKwlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV9pbml0KGRpciwgaW5vZGUsICZzZWN1cml0eSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlqYmVnaW5fY291bnQgKz0gcmV0dmFsOwogCXJlaXNlcmZzX3dyaXRlX2xvY2soZGlyLT5pX3NiKTsKIAotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0KIAlyZXR2YWwgPSBqb3VybmFsX2JlZ2luKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCWlmIChyZXR2YWwpIHsKIAkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOwpAQCAtNjIzLDE1ICs2MjIsMTAgQEAKIAogCXJldHZhbCA9CiAJICAgIHJlaXNlcmZzX25ld19pbm9kZSgmdGgsIGRpciwgbW9kZSwgTlVMTCwgMCAvKmlfc2l6ZSAqLyAsIGRlbnRyeSwKLQkJCSAgICAgICBpbm9kZSk7CisJCQkgICAgICAgaW5vZGUsICZzZWN1cml0eSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXRfZmFpbGVkOwogCi0JaWYgKGxvY2tlZCkgewotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0JCWxvY2tlZCA9IDA7Ci0JfQotCiAJaW5vZGUtPmlfb3AgPSAmcmVpc2VyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZyZWlzZXJmc19maWxlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmVpc2VyZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zOwpAQCAtNjU4LDggKzY1Miw2IEBACiAJcmV0dmFsID0gam91cm5hbF9lbmQoJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAKICAgICAgIG91dF9mYWlsZWQ6Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NzAsMTIgKzY2MiwxMiBAQAogCWludCByZXR2YWw7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAJLyogV2UgbmVlZCBibG9ja3MgZm9yIHRyYW5zYWN0aW9uICsgKHVzZXIrZ3JvdXApKihxdW90YXMgZm9yIG5ldyBpbm9kZSArIHVwZGF0ZSBvZiBxdW90YSBmb3IgZGlyZWN0b3J5IG93bmVyKSAqLwogCWludCBqYmVnaW5fY291bnQgPQogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDMgKwogCSAgICAyICogKFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkgUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwotCWludCBsb2NrZWQ7CiAKIAlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjg1LDEzICs2NzcsMTUgQEAKIAl9CiAJbmV3X2lub2RlX2luaXQoaW5vZGUsIGRpciwgbW9kZSk7CiAKLQlsb2NrZWQgPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOwotCisJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7CisJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfaW5pdChkaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKIAlyZWlzZXJmc193cml0ZV9sb2NrKGRpci0+aV9zYik7CiAKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKQEAgLTcwMCwxNiArNjk0LDExIEBACiAKIAlyZXR2YWwgPQogCSAgICByZWlzZXJmc19uZXdfaW5vZGUoJnRoLCBkaXIsIG1vZGUsIE5VTEwsIDAgLyppX3NpemUgKi8gLCBkZW50cnksCi0JCQkgICAgICAgaW5vZGUpOworCQkJICAgICAgIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpIHsKIAkJZ290byBvdXRfZmFpbGVkOwogCX0KIAotCWlmIChsb2NrZWQpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlsb2NrZWQgPSAwOwotCX0KLQogCWlub2RlLT5pX29wID0gJnJlaXNlcmZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIHJkZXYpOwogCkBAIC03MzksOCArNzI4LDYgQEAKIAlyZXR2YWwgPSBqb3VybmFsX2VuZCgmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAogICAgICAgb3V0X2ZhaWxlZDoKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTc1MCwxMiArNzM3LDEyIEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CisJc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSBzZWN1cml0eTsKIAkvKiBXZSBuZWVkIGJsb2NrcyBmb3IgdHJhbnNhY3Rpb24gKyAodXNlcitncm91cCkqKHF1b3RhcyBmb3IgbmV3IGlub2RlICsgdXBkYXRlIG9mIHF1b3RhIGZvciBkaXJlY3Rvcnkgb3duZXIpICovCiAJaW50IGpiZWdpbl9jb3VudCA9CiAJICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMyArCiAJICAgIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7Ci0JaW50IGxvY2tlZDsKIAogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKIAkvKiBzZXQgZmxhZyB0aGF0IG5ldyBwYWNraW5nIGxvY2FsaXR5IGNyZWF0ZWQgYW5kIG5ldyBibG9ja3MgZm9yIHRoZSBjb250ZW50ICAgICAqIG9mIHRoYXQgZGlyZWN0b3J5IGFyZSBub3QgZGlzcGxhY2VkIHlldCAqLwpAQCAtNzY3LDExICs3NTQsMTQgQEAKIAl9CiAJbmV3X2lub2RlX2luaXQoaW5vZGUsIGRpciwgbW9kZSk7CiAKLQlsb2NrZWQgPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOwotCisJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7CisJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfaW5pdChkaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKIAlyZWlzZXJmc193cml0ZV9sb2NrKGRpci0+aV9zYik7Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKIAogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewpAQCAtNzg3LDE3ICs3NzcsMTIgQEAKIAkgICAgcmV0dmFsID0gcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgZGlyLCBtb2RlLCBOVUxMIC8qc3ltbGluayAqLyAsCiAJCQkJCW9sZF9mb3JtYXRfb25seShkaXItPmlfc2IpID8KIAkJCQkJRU1QVFlfRElSX1NJWkVfVjEgOiBFTVBUWV9ESVJfU0laRSwKLQkJCQkJZGVudHJ5LCBpbm9kZSk7CisJCQkJCWRlbnRyeSwgaW5vZGUsICZzZWN1cml0eSk7CiAJaWYgKHJldHZhbCkgewogCQlkaXItPmlfbmxpbmstLTsKIAkJZ290byBvdXRfZmFpbGVkOwogCX0KIAotCWlmIChsb2NrZWQpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlsb2NrZWQgPSAwOwotCX0KLQogCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihpbm9kZSk7CiAJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGRpcik7CiAKQEAgLTgyNyw4ICs4MTIsNiBAQAogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogCXJldHZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogICAgICAgb3V0X2ZhaWxlZDoKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgzNyw3ICs4MjAsNyBAQAogewogCS8qIHdlIGNhbiBjaGVhdCBiZWNhdXNlIGFuIG9sZCBmb3JtYXQgZGlyIGNhbm5vdCBoYXZlCiAJICoqIEVNUFRZX0RJUl9TSVpFLCBhbmQgYSBuZXcgZm9ybWF0IGRpciBjYW5ub3QgaGF2ZQotCSAqKiBFTVBUWV9ESVJfU0laRV9WMS4gIFNvLCBpZiB0aGUgaW5vZGUgaXMgZWl0aGVyIHNpemUsIAorCSAqKiBFTVBUWV9ESVJfU0laRV9WMS4gIFNvLCBpZiB0aGUgaW5vZGUgaXMgZWl0aGVyIHNpemUsCiAJICoqIHJlZ2FyZGxlc3Mgb2YgZGlzayBmb3JtYXQgdmVyc2lvbiwgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eS4KIAkgKi8KIAlpZiAoaW5vZGUtPmlfc2l6ZSAhPSBFTVBUWV9ESVJfU0laRSAmJgpAQCAtOTAzLDggKzg4Niw5IEBACiAJCWdvdG8gZW5kX3JtZGlyOwogCiAJaWYgKGlub2RlLT5pX25saW5rICE9IDIgJiYgaW5vZGUtPmlfbmxpbmsgIT0gMSkKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIiVzOiBlbXB0eSBkaXJlY3RvcnkgaGFzIG5saW5rICIKLQkJCQkgIiE9IDIgKCVkKSIsIF9fZnVuY19fLCBpbm9kZS0+aV9ubGluayk7CisJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAicmVpc2VyZnMtNzA0MCIsCisJCQkgICAgICAgImVtcHR5IGRpcmVjdG9yeSBoYXMgbmxpbmsgIT0gMiAoJWQpIiwKKwkJCSAgICAgICBpbm9kZS0+aV9ubGluayk7CiAKIAljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwpAQCAtOTgwLDEwICs5NjQsOSBAQAogCX0KIAogCWlmICghaW5vZGUtPmlfbmxpbmspIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIiVzOiBkZWxldGluZyBub25leGlzdGVudCBmaWxlICIKLQkJCQkgIiglczolbHUpLCAlZCIsIF9fZnVuY19fLAotCQkJCSByZWlzZXJmc19iZGV2bmFtZShpbm9kZS0+aV9zYiksIGlub2RlLT5pX2lubywKLQkJCQkgaW5vZGUtPmlfbmxpbmspOworCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAicmVpc2VyZnMtNzA0MiIsCisJCQkJICJkZWxldGluZyBub25leGlzdGVudCBmaWxlICglbHUpLCAlZCIsCisJCQkJIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOwogCQlpbm9kZS0+aV9ubGluayA9IDE7CiAJfQogCkBAIC0xMDM3LDYgKzEwMjAsNyBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGl0ZW1fbGVuOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CisJc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSBzZWN1cml0eTsKIAlpbnQgbW9kZSA9IFNfSUZMTksgfCBTX0lSV1hVR087CiAJLyogV2UgbmVlZCBibG9ja3MgZm9yIHRyYW5zYWN0aW9uICsgKHVzZXIrZ3JvdXApKihxdW90YXMgZm9yIG5ldyBpbm9kZSArIHVwZGF0ZSBvZiBxdW90YSBmb3IgZGlyZWN0b3J5IG93bmVyKSAqLwogCWludCBqYmVnaW5fY291bnQgPQpAQCAtMTA0OSw2ICsxMDMzLDEzIEBACiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBwYXJlbnRfZGlyLCBtb2RlKTsKIAorCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQocGFyZW50X2RpciwgaW5vZGUsICZzZWN1cml0eSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlqYmVnaW5fY291bnQgKz0gcmV0dmFsOworCiAJcmVpc2VyZnNfd3JpdGVfbG9jayhwYXJlbnRfZGlyLT5pX3NiKTsKIAlpdGVtX2xlbiA9IFJPVU5EX1VQKHN0cmxlbihzeW1uYW1lKSk7CiAJaWYgKGl0ZW1fbGVuID4gTUFYX0RJUkVDVF9JVEVNX0xFTihwYXJlbnRfZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKQEAgLTEwNjYsOCArMTA1Nyw2IEBACiAJbWVtY3B5KG5hbWUsIHN5bW5hbWUsIHN0cmxlbihzeW1uYW1lKSk7CiAJcGFkZF9pdGVtKG5hbWUsIGl0ZW1fbGVuLCBzdHJsZW4oc3ltbmFtZSkpOwogCi0JLyogV2Ugd291bGQgaW5oZXJpdCB0aGUgZGVmYXVsdCBBQ0wgaGVyZSwgYnV0IHN5bWxpbmtzIGRvbid0IGdldCBBQ0xzICovCi0KIAlyZXR2YWwgPSBqb3VybmFsX2JlZ2luKCZ0aCwgcGFyZW50X2Rpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKQEAgLTEwNzcsNyArMTA2Niw3IEBACiAKIAlyZXR2YWwgPQogCSAgICByZWlzZXJmc19uZXdfaW5vZGUoJnRoLCBwYXJlbnRfZGlyLCBtb2RlLCBuYW1lLCBzdHJsZW4oc3ltbmFtZSksCi0JCQkgICAgICAgZGVudHJ5LCBpbm9kZSk7CisJCQkgICAgICAgZGVudHJ5LCBpbm9kZSwgJnNlY3VyaXR5KTsKIAlrZnJlZShuYW1lKTsKIAlpZiAocmV0dmFsKSB7CQkvKiByZWlzZXJmc19uZXdfaW5vZGUgaXB1dHMgZm9yIHVzICovCiAJCWdvdG8gb3V0X2ZhaWxlZDsKQEAgLTExNzMsNyArMTE2Miw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLy8gZGUgY29udGFpbnMgaW5mb3JtYXRpb24gcG9pbnRpbmcgdG8gYW4gZW50cnkgd2hpY2ggCisvKiBkZSBjb250YWlucyBpbmZvcm1hdGlvbiBwb2ludGluZyB0byBhbiBlbnRyeSB3aGljaCAqLwogc3RhdGljIGludCBkZV9zdGlsbF92YWxpZChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAogCQkJICBzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICpkZSkKIHsKQEAgLTExOTYsMTUgKzExODUsMTQgQEAKIAogCWlmIChpbm9kZSkgewogCQlpZiAoIWRlX3Zpc2libGUoZGUtPmRlX2RlaCArIGRlLT5kZV9lbnRyeV9udW0pKQotCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCQkgICAgICAgInZzLTcwNDI6IGVudHJ5X3BvaW50c190b19vYmplY3Q6IGVudHJ5IG11c3QgYmUgdmlzaWJsZSIpOworCQkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsICJ2cy03MDQyIiwKKwkJCQkgICAgICAgImVudHJ5IG11c3QgYmUgdmlzaWJsZSIpOwogCQlyZXR1cm4gKGRlLT5kZV9vYmplY3RpZCA9PSBpbm9kZS0+aV9pbm8pID8gMSA6IDA7CiAJfQogCiAJLyogdGhpcyBtdXN0IGJlIGFkZGVkIGhpZGRlbiBlbnRyeSAqLwogCWlmIChkZV92aXNpYmxlKGRlLT5kZV9kZWggKyBkZS0+ZGVfZW50cnlfbnVtKSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNzA0MzogZW50cnlfcG9pbnRzX3RvX29iamVjdDogZW50cnkgbXVzdCBiZSB2aXNpYmxlIik7CisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy03MDQzIiwgImVudHJ5IG11c3QgYmUgdmlzaWJsZSIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xMjE4LDEwICsxMjA2LDEwIEBACiAJZGUtPmRlX2RlaFtkZS0+ZGVfZW50cnlfbnVtXS5kZWhfb2JqZWN0aWQgPSBrZXktPmtfb2JqZWN0aWQ7CiB9CiAKLS8qIAorLyoKICAqIHByb2Nlc3MsIHRoYXQgaXMgZ29pbmcgdG8gY2FsbCBmaXhfbm9kZXMvZG9fYmFsYW5jZSBtdXN0IGhvbGQgb25seQogICogb25lIHBhdGguIElmIGl0IGhvbGRzIDIgb3IgbW9yZSwgaXQgY2FuIGdldCBpbnRvIGVuZGxlc3Mgd2FpdGluZyBpbgotICogZ2V0X2VtcHR5X25vZGVzIG9yIGl0cyBjbG9uZXMgCisgKiBnZXRfZW1wdHlfbm9kZXMgb3IgaXRzIGNsb25lcwogICovCiBzdGF0aWMgaW50IHJlaXNlcmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCkBAIC0xMjc1LDcgKzEyNjMsNyBAQAogCiAJb2xkX2lub2RlX21vZGUgPSBvbGRfaW5vZGUtPmlfbW9kZTsKIAlpZiAoU19JU0RJUihvbGRfaW5vZGVfbW9kZSkpIHsKLQkJLy8gbWFrZSBzdXJlLCB0aGF0IGRpcmVjdG9yeSBiZWluZyByZW5hbWVkIGhhcyBjb3JyZWN0ICIuLiIgCisJCS8vIG1ha2Ugc3VyZSwgdGhhdCBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZCBoYXMgY29ycmVjdCAiLi4iCiAJCS8vIGFuZCB0aGF0IGl0cyBuZXcgcGFyZW50IGRpcmVjdG9yeSBoYXMgbm90IHRvbyBtYW55IGxpbmtzCiAJCS8vIGFscmVhZHkKIApAQCAtMTI4Niw4ICsxMjc0LDggQEAKIAkJCX0KIAkJfQogCi0JCS8qIGRpcmVjdG9yeSBpcyByZW5hbWVkLCBpdHMgcGFyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQsIAotCQkgKiogc28gZmluZCAiLi4iIGVudHJ5IAorCQkvKiBkaXJlY3RvcnkgaXMgcmVuYW1lZCwgaXRzIHBhcmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkLAorCQkgKiogc28gZmluZCAiLi4iIGVudHJ5CiAJCSAqLwogCQlkb3RfZG90X2RlLmRlX2dlbl9udW1iZXJfYml0X3N0cmluZyA9IE5VTEw7CiAJCXJldHZhbCA9CkBAIC0xMzE4LDggKzEzMDYsOCBAQAogCQkJICAgICAgIG5ld19kZW50cnktPmRfbmFtZS5sZW4sIG9sZF9pbm9kZSwgMCk7CiAJaWYgKHJldHZhbCA9PSAtRUVYSVNUKSB7CiAJCWlmICghbmV3X2RlbnRyeV9pbm9kZSkgewotCQkJcmVpc2VyZnNfcGFuaWMob2xkX2Rpci0+aV9zYiwKLQkJCQkgICAgICAgInZzLTcwNTA6IG5ldyBlbnRyeSBpcyBmb3VuZCwgbmV3IGlub2RlID09IDBcbiIpOworCQkJcmVpc2VyZnNfcGFuaWMob2xkX2Rpci0+aV9zYiwgInZzLTcwNTAiLAorCQkJCSAgICAgICAibmV3IGVudHJ5IGlzIGZvdW5kLCBuZXcgaW5vZGUgPT0gMCIpOwogCQl9CiAJfSBlbHNlIGlmIChyZXR2YWwpIHsKIAkJaW50IGVyciA9IGpvdXJuYWxfZW5kKCZ0aCwgb2xkX2Rpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKQEAgLTEzOTcsOSArMTM4NSw5IEBACiAJCSAgIHRoaXMgc3R1ZmYsIHllcz8gVGhlbiwgaGF2aW5nCiAJCSAgIGdhdGhlcmVkIGV2ZXJ5dGhpbmcgaW50byBSQU0gd2UKIAkJICAgc2hvdWxkIGxvY2sgdGhlIGJ1ZmZlcnMsIHllcz8gIC1IYW5zICovCi0JCS8qIHByb2JhYmx5LiAgb3VyIHJlbmFtZSBuZWVkcyB0byBob2xkIG1vcmUgCi0JCSAqKiB0aGFuIG9uZSBwYXRoIGF0IG9uY2UuICBUaGUgc2VhbHMgd291bGQgCi0JCSAqKiBoYXZlIHRvIGJlIHdyaXR0ZW4gdG8gZGVhbCB3aXRoIG11bHRpLXBhdGggCisJCS8qIHByb2JhYmx5LiAgb3VyIHJlbmFtZSBuZWVkcyB0byBob2xkIG1vcmUKKwkJICoqIHRoYW4gb25lIHBhdGggYXQgb25jZS4gIFRoZSBzZWFscyB3b3VsZAorCQkgKiogaGF2ZSB0byBiZSB3cml0dGVuIHRvIGRlYWwgd2l0aCBtdWx0aS1wYXRoCiAJCSAqKiBpc3N1ZXMgLWNocmlzCiAJCSAqLwogCQkvKiBzYW5pdHkgY2hlY2tpbmcgYmVmb3JlIGRvaW5nIHRoZSByZW5hbWUgLSBhdm9pZCByYWNlcyBtYW55CkBAIC0xNDc3LDcgKzE0NjUsNyBAQAogCX0KIAogCWlmIChTX0lTRElSKG9sZF9pbm9kZV9tb2RlKSkgewotCQkvLyBhZGp1c3QgIi4uIiBvZiByZW5hbWVkIGRpcmVjdG9yeSAKKwkJLyogYWRqdXN0ICIuLiIgb2YgcmVuYW1lZCBkaXJlY3RvcnkgKi8KIAkJc2V0X2lub19pbl9kaXJfZW50cnkoJmRvdF9kb3RfZGUsIElOT0RFX1BLRVkobmV3X2RpcikpOwogCQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBuZXdfZGlyLT5pX3NiLCBkb3RfZG90X2RlLmRlX2JoKTsKIApAQCAtMTQ5OSw4ICsxNDg3LDggQEAKIAlpZiAocmVpc2VyZnNfY3V0X2Zyb21faXRlbQogCSAgICAoJnRoLCAmb2xkX2VudHJ5X3BhdGgsICYob2xkX2RlLmRlX2VudHJ5X2tleSksIG9sZF9kaXIsIE5VTEwsCiAJICAgICAwKSA8IDApCi0JCXJlaXNlcmZzX3dhcm5pbmcob2xkX2Rpci0+aV9zYiwKLQkJCQkgInZzLTcwNjA6IHJlaXNlcmZzX3JlbmFtZTogY291bGRuJ3Qgbm90IGN1dCBvbGQgbmFtZS4gRnNjayBsYXRlcj8iKTsKKwkJcmVpc2VyZnNfZXJyb3Iob2xkX2Rpci0+aV9zYiwgInZzLTcwNjAiLAorCQkJICAgICAgICJjb3VsZG4ndCBub3QgY3V0IG9sZCBuYW1lLiBGc2NrIGxhdGVyPyIpOwogCiAJb2xkX2Rpci0+aV9zaXplIC09IERFSF9TSVpFICsgb2xkX2RlLmRlX2VudHJ5bGVuOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9vYmplY3RpZC5jIGIvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYwppbmRleCBlYTBjZjhjLi4zYTZkZTgxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCisrKyBiL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKQEAgLTE4LDggKzE4LDcgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX29iamVjdGlkX21hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIF9fbGUzMiAqIG1hcCkKIHsKIAlpZiAobGUzMl90b19jcHUobWFwWzBdKSAhPSAxKQotCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJICAgICAgICJ2cy0xNTAxMDogY2hlY2tfb2JqZWN0aWRfbWFwOiBtYXAgY29ycnVwdGVkOiAlbHgiLAorCQlyZWlzZXJmc19wYW5pYyhzLCAidnMtMTUwMTAiLCAibWFwIGNvcnJ1cHRlZDogJWx4IiwKIAkJCSAgICAgICAobG9uZyB1bnNpZ25lZCBpbnQpbGUzMl90b19jcHUobWFwWzBdKSk7CiAKIAkvLyBGSVhNRTogYWRkIHNvbWV0aGluZyBlbHNlIGhlcmUKQEAgLTYxLDcgKzYwLDcgQEAKIAkvKiBjb21tZW50IG5lZWRlZCAtSGFucyAqLwogCXVudXNlZF9vYmplY3RpZCA9IGxlMzJfdG9fY3B1KG1hcFsxXSk7CiAJaWYgKHVudXNlZF9vYmplY3RpZCA9PSBVMzJfTUFYKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgIiVzOiBubyBtb3JlIG9iamVjdCBpZHMiLCBfX2Z1bmNfXyk7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTE1MTAwIiwgIm5vIG1vcmUgb2JqZWN0IGlkcyIpOwogCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzLCBTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE2MCw5ICsxNTksOCBAQAogCQlpICs9IDI7CiAJfQogCi0JcmVpc2VyZnNfd2FybmluZyhzLAotCQkJICJ2cy0xNTAxMTogcmVpc2VyZnNfcmVsZWFzZV9vYmplY3RpZDogdHJpZWQgdG8gZnJlZSBmcmVlIG9iamVjdCBpZCAoJWx1KSIsCi0JCQkgKGxvbmcgdW5zaWduZWQpb2JqZWN0aWRfdG9fcmVsZWFzZSk7CisJcmVpc2VyZnNfZXJyb3IocywgInZzLTE1MDExIiwgInRyaWVkIHRvIGZyZWUgZnJlZSBvYmplY3QgaWQgKCVsdSkiLAorCQkgICAgICAgKGxvbmcgdW5zaWduZWQpb2JqZWN0aWRfdG9fcmVsZWFzZSk7CiB9CiAKIGludCByZWlzZXJmc19jb252ZXJ0X29iamVjdGlkX21hcF92MShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCkBAIC0xODIsNyArMTgwLDcgQEAKIAogCWlmIChjdXJfc2l6ZSA+IG5ld19zaXplKSB7CiAJCS8qIG1hcmsgZXZlcnlvbmUgdXNlZCB0aGF0IHdhcyBsaXN0ZWQgYXMgZnJlZSBhdCB0aGUgZW5kIG9mIHRoZSBvYmplY3RpZAotCQkgKiogbWFwIAorCQkgKiogbWFwCiAJCSAqLwogCQlvYmplY3RpZF9tYXBbbmV3X3NpemUgLSAxXSA9IG9iamVjdGlkX21hcFtjdXJfc2l6ZSAtIDFdOwogCQlzZXRfc2Jfb2lkX2N1cnNpemUoZGlza19zYiwgbmV3X3NpemUpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMgYi9mcy9yZWlzZXJmcy9wcmludHMuYwppbmRleCA3NDBiYjhjLi41MzZlYWNhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9wcmludHMuYworKysgYi9mcy9yZWlzZXJmcy9wcmludHMuYwpAQCAtMTU3LDE5ICsxNTcsMTYgQEAKIAkJZGNfc2l6ZShkYykpOwogfQogCi1zdGF0aWMgY2hhciAqaXNfdGhlcmVfcmVpc2VyZnNfc3RydWN0KGNoYXIgKmZtdCwgaW50ICp3aGF0LCBpbnQgKnNraXApCitzdGF0aWMgY2hhciAqaXNfdGhlcmVfcmVpc2VyZnNfc3RydWN0KGNoYXIgKmZtdCwgaW50ICp3aGF0KQogewogCWNoYXIgKmsgPSBmbXQ7CiAKLQkqc2tpcCA9IDA7Ci0KIAl3aGlsZSAoKGsgPSBzdHJjaHIoaywgJyUnKSkgIT0gTlVMTCkgewogCQlpZiAoa1sxXSA9PSAnaycgfHwga1sxXSA9PSAnSycgfHwga1sxXSA9PSAnaCcgfHwga1sxXSA9PSAndCcgfHwKIAkJICAgIGtbMV0gPT0gJ3onIHx8IGtbMV0gPT0gJ2InIHx8IGtbMV0gPT0gJ3knIHx8IGtbMV0gPT0gJ2EnKSB7CiAJCQkqd2hhdCA9IGtbMV07CiAJCQlicmVhazsKIAkJfQotCQkoKnNraXApKys7CiAJCWsrKzsKIAl9CiAJcmV0dXJuIGs7CkBAIC0xODEsMzAgKzE3OCwyOSBAQAogICAgYXBwcm9wcmlhdGl2ZSBwcmludGsuIFdpdGggdGhpcyByZWlzZXJmc193YXJuaW5nIHlvdSBjYW4gdXNlIGZvcm1hdAogICAgc3BlY2lmaWNhdGlvbiBmb3IgY29tcGxleCBzdHJ1Y3R1cmVzIGxpa2UgeW91IHVzZWQgdG8gZG8gd2l0aAogICAgcHJpbnRmcyBmb3IgaW50ZWdlcnMsIGRvdWJsZXMgYW5kIHBvaW50ZXJzLiBGb3IgaW5zdGFuY2UsIHRvIHByaW50Ci0gICBvdXQga2V5IHN0cnVjdHVyZSB5b3UgaGF2ZSB0byB3cml0ZSBqdXN0OiAKLSAgIHJlaXNlcmZzX3dhcm5pbmcgKCJiYWQga2V5ICVrIiwga2V5KTsgCi0gICBpbnN0ZWFkIG9mIAotICAgcHJpbnRrICgiYmFkIGtleSAlbHUgJWx1ICVsdSAlbHUiLCBrZXktPmtfZGlyX2lkLCBrZXktPmtfb2JqZWN0aWQsIAotICAgICAgICAgICBrZXktPmtfb2Zmc2V0LCBrZXktPmtfdW5pcXVlbmVzcyk7IAorICAgb3V0IGtleSBzdHJ1Y3R1cmUgeW91IGhhdmUgdG8gd3JpdGUganVzdDoKKyAgIHJlaXNlcmZzX3dhcm5pbmcgKCJiYWQga2V5ICVrIiwga2V5KTsKKyAgIGluc3RlYWQgb2YKKyAgIHByaW50ayAoImJhZCBrZXkgJWx1ICVsdSAlbHUgJWx1Iiwga2V5LT5rX2Rpcl9pZCwga2V5LT5rX29iamVjdGlkLAorICAgICAgICAgICBrZXktPmtfb2Zmc2V0LCBrZXktPmtfdW5pcXVlbmVzcyk7CiAqLwotCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVycm9yX2xvY2spOwogc3RhdGljIHZvaWQgcHJlcGFyZV9lcnJvcl9idWYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJY2hhciAqZm10MSA9IGZtdF9idWY7CiAJY2hhciAqazsKIAljaGFyICpwID0gZXJyb3JfYnVmOwotCWludCBpLCBqLCB3aGF0LCBza2lwOworCWludCB3aGF0OworCisJc3Bpbl9sb2NrKCZlcnJvcl9sb2NrKTsKIAogCXN0cmNweShmbXQxLCBmbXQpOwogCi0Jd2hpbGUgKChrID0gaXNfdGhlcmVfcmVpc2VyZnNfc3RydWN0KGZtdDEsICZ3aGF0LCAmc2tpcCkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKGsgPSBpc190aGVyZV9yZWlzZXJmc19zdHJ1Y3QoZm10MSwgJndoYXQpKSAhPSBOVUxMKSB7CiAJCSprID0gMDsKIAogCQlwICs9IHZzcHJpbnRmKHAsIGZtdDEsIGFyZ3MpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBza2lwOyBpKyspCi0JCQlqID0gdmFfYXJnKGFyZ3MsIGludCk7Ci0KIAkJc3dpdGNoICh3aGF0KSB7CiAJCWNhc2UgJ2snOgogCQkJc3ByaW50Zl9sZV9rZXkocCwgdmFfYXJnKGFyZ3MsIHN0cnVjdCByZWlzZXJmc19rZXkgKikpOwpAQCAtMjQzLDE1ICsyMzksMTYgQEAKIAkJZm10MSA9IGsgKyAyOwogCX0KIAl2c3ByaW50ZihwLCBmbXQxLCBhcmdzKTsKKwlzcGluX3VubG9jaygmZXJyb3JfbG9jayk7CiAKIH0KIAogLyogaW4gYWRkaXRpb24gdG8gdXN1YWwgY29udmVyc2lvbiBzcGVjaWZpZXJzIHRoaXMgYWNjZXB0cyByZWlzZXJmcwotICAgc3BlY2lmaWMgY29udmVyc2lvbiBzcGVjaWZpZXJzOiAKLSAgICVrIHRvIHByaW50IGxpdHRsZSBlbmRpYW4ga2V5LCAKLSAgICVLIHRvIHByaW50IGNwdSBrZXksIAorICAgc3BlY2lmaWMgY29udmVyc2lvbiBzcGVjaWZpZXJzOgorICAgJWsgdG8gcHJpbnQgbGl0dGxlIGVuZGlhbiBrZXksCisgICAlSyB0byBwcmludCBjcHUga2V5LAogICAgJWggdG8gcHJpbnQgaXRlbV9oZWFkLAotICAgJXQgdG8gcHJpbnQgZGlyZWN0b3J5IGVudHJ5IAorICAgJXQgdG8gcHJpbnQgZGlyZWN0b3J5IGVudHJ5CiAgICAleiB0byBwcmludCBibG9jayBoZWFkIChhcmcgbXVzdCBiZSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKgogICAgJWIgdG8gcHJpbnQgYnVmZmVyX2hlYWQKICovCkBAIC0yNjQsMTQgKzI2MSwxNyBAQAogICAgIHZhX2VuZCggYXJncyApO1wKIH0KIAotdm9pZCByZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBfX3JlaXNlcmZzX3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqaWQsCisJCQkgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAlpZiAoc2IpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlaXNlckZTOiAlczogd2FybmluZzogJXNcbiIsCi0JCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJFSVNFUkZTIHdhcm5pbmcgKGRldmljZSAlcyk6ICVzJXMlczogIgorCQkgICAgICAgIiVzXG4iLCBzYi0+c19pZCwgaWQgPyBpZCA6ICIiLCBpZCA/ICIgIiA6ICIiLAorCQkgICAgICAgZnVuY3Rpb24sIGVycm9yX2J1Zik7CiAJZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWlzZXJGUzogd2FybmluZzogJXNcbiIsIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJFSVNFUkZTIHdhcm5pbmc6ICVzJXMlczogJXNcbiIsCisJCSAgICAgICBpZCA/IGlkIDogIiIsIGlkID8gIiAiIDogIiIsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOwogfQogCiAvKiBObyBuZXdsaW5lLi4gcmVpc2VyZnNfaW5mbyBjYWxscyBjYW4gYmUgZm9sbG93ZWQgYnkgcHJpbnRrJ3MgKi8KQEAgLTI3OSwxMCArMjc5LDEwIEBACiB7CiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCWlmIChzYikKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWlzZXJGUzogJXM6ICVzIiwKLQkJICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRUlTRVJGUyAoZGV2aWNlICVzKTogJXMiLAorCQkgICAgICAgc2ItPnNfaWQsIGVycm9yX2J1Zik7CiAJZWxzZQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlaXNlckZTOiAlcyIsIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkVJU0VSRlMgJXM6IiwgZXJyb3JfYnVmKTsKIH0KIAogLyogTm8gbmV3bGluZS4uIHJlaXNlcmZzX3ByaW50ayBjYWxscyBjYW4gYmUgZm9sbG93ZWQgYnkgcHJpbnRrJ3MgKi8KQEAgLTI5NywxMCArMjk3LDEwIEBACiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCWlmIChzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVpc2VyRlM6ICVzOiAlc1xuIiwKLQkJICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUkVJU0VSRlMgZGVidWcgKGRldmljZSAlcyk6ICVzXG4iLAorCQkgICAgICAgcy0+c19pZCwgZXJyb3JfYnVmKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0RFQlVHICJSZWlzZXJGUzogJXNcbiIsIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX0RFQlVHICJSRUlTRVJGUyBkZWJ1ZzogJXNcbiIsIGVycm9yX2J1Zik7CiAjZW5kaWYKIH0KIApAQCAtMzE0LDE3ICszMTQsMTcgQEAKICAgICBtYWludGFpbmVyLWVycm9yaWQuICBEb24ndCBib3RoZXIgd2l0aCByZXVzaW5nIGVycm9yaWRzLCB0aGVyZSBhcmUKICAgICBsb3RzIG9mIG51bWJlcnMgb3V0IHRoZXJlLgogCi0gICAgRXhhbXBsZTogCi0gICAgCisgICAgRXhhbXBsZToKKwogICAgIHJlaXNlcmZzX3BhbmljKAogCXBfc2IsICJyZWlzZXItMjk6IHJlaXNlcmZzX25ld19ibG9ja25yczogIgogCSJvbmUgb2Ygc2VhcmNoX3N0YXJ0IG9yIHJuKCVkKSBpcyBlcXVhbCB0byBNQVhfQl9OVU0sIgotCSJ3aGljaCBtZWFucyB0aGF0IHdlIGFyZSBvcHRpbWl6aW5nIGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBib2d1cyBsb2NhdGlvbiBvZiBhIHRlbXAgYnVmZmVyICglcCkuIiwgCisJIndoaWNoIG1lYW5zIHRoYXQgd2UgYXJlIG9wdGltaXppbmcgbG9jYXRpb24gYmFzZWQgb24gdGhlIGJvZ3VzIGxvY2F0aW9uIG9mIGEgdGVtcCBidWZmZXIgKCVwKS4iLAogCXJuLCBiaAogICAgICk7CiAKICAgICBSZWd1bGFyIHBhbmljKClzIHNvbWV0aW1lcyBjbGVhciB0aGUgc2NyZWVuIGJlZm9yZSB0aGUgbWVzc2FnZSBjYW4KLSAgICBiZSByZWFkLCB0aHVzIHRoZSBuZWVkIGZvciB0aGUgd2hpbGUgbG9vcC4gIAorICAgIGJlIHJlYWQsIHRodXMgdGhlIG5lZWQgZm9yIHRoZSB3aGlsZSBsb29wLgogCiAgICAgTnVtYmVyaW5nIHNjaGVtZSBmb3IgcGFuaWMgdXNlZCBieSBWbGFkaW1pciBhbmQgQW5hdG9seSggSGFucyBjb21wbGV0ZWx5IGlnbm9yZXMgdGhpcyBzY2hlbWUsIGFuZCBjb25zaWRlcnMgaXQKICAgICBwb2ludGxlc3MgY29tcGxleGl0eSk6CkBAIC0zNTMsMTQgKzM1Myw0NiBAQAogZXh0ZXJuIHN0cnVjdCB0cmVlX2JhbGFuY2UgKmN1cl90YjsKICNlbmRpZgogCi12b2lkIHJlaXNlcmZzX3BhbmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBfX3JlaXNlcmZzX3BhbmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJZHVtcF9zdGFjaygpOworI2VuZGlmCisJaWYgKHNiKQorCQlwYW5pYyhLRVJOX1dBUk5JTkcgIlJFSVNFUkZTIHBhbmljIChkZXZpY2UgJXMpOiAlcyVzJXM6ICVzXG4iLAorCQkgICAgICBzYi0+c19pZCwgaWQgPyBpZCA6ICIiLCBpZCA/ICIgIiA6ICIiLAorCQkgICAgICBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKKwllbHNlCisJCXBhbmljKEtFUk5fV0FSTklORyAiUkVJU0VSRlMgcGFuaWM6ICVzJXMlczogJXNcbiIsCisJCSAgICAgIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwgZnVuY3Rpb24sIGVycm9yX2J1Zik7Cit9CiAKLQlwYW5pYyhLRVJOX0VNRVJHICJSRUlTRVJGUzogcGFuaWMgKGRldmljZSAlcyk6ICVzXG4iLAotCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7Cit2b2lkIF9fcmVpc2VyZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqaWQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CisKKwlCVUdfT04oc2IgPT0gTlVMTCk7CisKKwlpZiAocmVpc2VyZnNfZXJyb3JfcGFuaWMoc2IpKQorCQlfX3JlaXNlcmZzX3BhbmljKHNiLCBpZCwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisKKwlpZiAoaWQgJiYgaWRbMF0pCisJCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTIGVycm9yIChkZXZpY2UgJXMpOiAlcyAlczogJXNcbiIsCisJCSAgICAgICBzYi0+c19pZCwgaWQsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAlc1xuIiwKKwkJICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKKworCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuOworCisJcmVpc2VyZnNfaW5mbyhzYiwgIlJlbW91bnRpbmcgZmlsZXN5c3RlbSByZWFkLW9ubHlcbiIpOworCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwlyZWlzZXJmc19hYm9ydF9qb3VybmFsKHNiLCAtRUlPKTsKIH0KIAogdm9pZCByZWlzZXJmc19hYm9ydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtMzY4LDE4ICs0MDAsMTggQEAKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAKIAlpZiAocmVpc2VyZnNfZXJyb3JfcGFuaWMoc2IpKSB7Ci0JCXBhbmljKEtFUk5fQ1JJVCAiUkVJU0VSRlM6IHBhbmljIChkZXZpY2UgJXMpOiAlc1xuIiwKLQkJICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCQlwYW5pYyhLRVJOX0NSSVQgIlJFSVNFUkZTIHBhbmljIChkZXZpY2UgJXMpOiAlc1xuIiwgc2ItPnNfaWQsCisJCSAgICAgIGVycm9yX2J1Zik7CiAJfQogCi0JaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCWlmIChyZWlzZXJmc19pc19qb3VybmFsX2Fib3J0ZWQoU0JfSk9VUk5BTChzYikpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUzogYWJvcnQgKGRldmljZSAlcyk6ICVzXG4iLAotCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlMgYWJvcnQgKGRldmljZSAlcyk6ICVzXG4iLCBzYi0+c19pZCwKKwkgICAgICAgZXJyb3JfYnVmKTsKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKLQlyZWlzZXJmc19qb3VybmFsX2Fib3J0KHNiLCBlcnJubyk7CisJcmVpc2VyZnNfYWJvcnRfam91cm5hbChzYiwgZXJybm8pOwogfQogCiAvKiB0aGlzIHByaW50cyBpbnRlcm5hbCBub2RlcyAoNCBrZXlzL2l0ZW1zIGluIGxpbmUpIChkY19udW1iZXIsCkBAIC02ODEsMTIgKzcxMywxMCBAQAogCWJsa2ggPSBCX0JMS19IRUFEKGJoKTsKIAluciA9IGJsa2hfbnJfaXRlbShibGtoKTsKIAlpZiAobnIgPiAoYmgtPmJfc2l6ZSAtIEJMS0hfU0laRSkgLyBJSF9TSVpFKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDEwOiBjaGVja19sZWFmX2Jsb2NrX2hlYWQ6IGludmFsaWQgaXRlbSBudW1iZXIgJXoiLAorCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNjAxMCIsICJpbnZhbGlkIGl0ZW0gbnVtYmVyICV6IiwKIAkJCSAgICAgICBiaCk7CiAJaWYgKGJsa2hfZnJlZV9zcGFjZShibGtoKSA+IGJoLT5iX3NpemUgLSBCTEtIX1NJWkUgLSBJSF9TSVpFICogbnIpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMjA6IGNoZWNrX2xlYWZfYmxvY2tfaGVhZDogaW52YWxpZCBmcmVlIHNwYWNlICV6IiwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMjAiLCAiaW52YWxpZCBmcmVlIHNwYWNlICV6IiwKIAkJCSAgICAgICBiaCk7CiAKIH0KQEAgLTY5NywyMSArNzI3LDE1IEBACiAKIAlibGtoID0gQl9CTEtfSEVBRChiaCk7CiAJaWYgKCEoQl9MRVZFTChiaCkgPiBESVNLX0xFQUZfTk9ERV9MRVZFTCAmJiBCX0xFVkVMKGJoKSA8PSBNQVhfSEVJR0hUKSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjAyNTogY2hlY2tfaW50ZXJuYWxfYmxvY2tfaGVhZDogaW52YWxpZCBsZXZlbCAleiIsCi0JCQkgICAgICAgYmgpOworCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNjAyNSIsICJpbnZhbGlkIGxldmVsICV6IiwgYmgpOwogCiAJaWYgKEJfTlJfSVRFTVMoYmgpID4gKGJoLT5iX3NpemUgLSBCTEtIX1NJWkUpIC8gSUhfU0laRSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjAzMDogY2hlY2tfaW50ZXJuYWxfYmxvY2tfaGVhZDogaW52YWxpZCBpdGVtIG51bWJlciAleiIsCi0JCQkgICAgICAgYmgpOworCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNjAzMCIsICJpbnZhbGlkIGl0ZW0gbnVtYmVyICV6IiwgYmgpOwogCiAJaWYgKEJfRlJFRV9TUEFDRShiaCkgIT0KIAkgICAgYmgtPmJfc2l6ZSAtIEJMS0hfU0laRSAtIEtFWV9TSVpFICogQl9OUl9JVEVNUyhiaCkgLQogCSAgICBEQ19TSVpFICogKEJfTlJfSVRFTVMoYmgpICsgMSkpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwNDA6IGNoZWNrX2ludGVybmFsX2Jsb2NrX2hlYWQ6IGludmFsaWQgZnJlZSBzcGFjZSAleiIsCi0JCQkgICAgICAgYmgpOworCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNjA0MCIsICJpbnZhbGlkIGZyZWUgc3BhY2UgJXoiLCBiaCk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMgYi9mcy9yZWlzZXJmcy9wcm9jZnMuYwppbmRleCAzNzE3M2ZhLi5kNTA2NjQwIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9wcm9jZnMuYworKysgYi9mcy9yZWlzZXJmcy9wcm9jZnMuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJCSAgIC8qIGluY29yZSBmaWVsZHMgKi8KIAkJICAgImpfMXN0X3Jlc2VydmVkX2Jsb2NrOiBcdCVpXG4iCiAJCSAgICJqX3N0YXRlOiBcdCVsaVxuIgotCQkgICAial90cmFuc19pZDogXHQlbHVcbiIKKwkJICAgImpfdHJhbnNfaWQ6IFx0JXVcbiIKIAkJICAgImpfbW91bnRfaWQ6IFx0JWx1XG4iCiAJCSAgICJqX3N0YXJ0OiBcdCVsdVxuIgogCQkgICAial9sZW46IFx0JWx1XG4iCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJICAgImpfd2NvdW50OiBcdCVpXG4iCiAJCSAgICJqX2Jjb3VudDogXHQlbHVcbiIKIAkJICAgImpfZmlyc3RfdW5mbHVzaGVkX29mZnNldDogXHQlbHVcbiIKLQkJICAgImpfbGFzdF9mbHVzaF90cmFuc19pZDogXHQlbHVcbiIKKwkJICAgImpfbGFzdF9mbHVzaF90cmFuc19pZDogXHQldVxuIgogCQkgICAial90cmFuc19zdGFydF90aW1lOiBcdCVsaVxuIgogCQkgICAial9saXN0X2JpdG1hcF9pbmRleDogXHQlaVxuIgogCQkgICAial9tdXN0X3dhaXQ6IFx0JWlcbiIKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlhZGRfZmlsZShzYiwgImpvdXJuYWwiLCBzaG93X2pvdXJuYWwpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzOiBjYW5ub3QgY3JlYXRlIC9wcm9jLyVzLyVzIiwKKwlyZWlzZXJmc193YXJuaW5nKHNiLCAiY2Fubm90IGNyZWF0ZSAvcHJvYy8lcy8lcyIsCiAJCQkgcHJvY19pbmZvX3Jvb3RfbmFtZSwgYik7CiAJcmV0dXJuIDE7CiB9CkBAIC01NTksOCArNTU5LDcgQEAKIAkJaWYgKHByb2NfaW5mb19yb290KSB7CiAJCQlwcm9jX2luZm9fcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJfSBlbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJyZWlzZXJmczogY2Fubm90IGNyZWF0ZSAvcHJvYy8lcyIsCisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJjYW5ub3QgY3JlYXRlIC9wcm9jLyVzIiwKIAkJCQkJIHByb2NfaW5mb19yb290X25hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTYzNCw3ICs2MzMsNyBAQAogICoKICAqLwogCi0vKiAKKy8qCiAgKiBNYWtlIExpbnVzIGhhcHB5LgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1pbmRlbnRhdGlvbi1zdHlsZTogIksmUiIKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Jlc2l6ZS5jIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKaW5kZXggZjcxYzM5NC4uMjM4ZTlkOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcmVzaXplLmMKKysrIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKQEAgLTEsOCArMSw4IEBACi0vKiAKKy8qCiAgKiBDb3B5cmlnaHQgMjAwMCBieSBIYW5zIFJlaXNlciwgbGljZW5zaW5nIGdvdmVybmVkIGJ5IHJlaXNlcmZzL1JFQURNRQogICovCiAKLS8qIAorLyoKICAqIFdyaXR0ZW4gYnkgQWxleGFuZGVyIFphcm9jaGVudGNldi4KICAqCiAgKiBUaGUga2VybmVsIHBhcnQgb2YgdGhlIChvbi1saW5lKSByZWlzZXJmcyByZXNpemVyLgpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQltZW1jcHkoamJpdG1hcFtpXS5iaXRtYXBzLCBqYi0+Yml0bWFwcywgY29weV9zaXplKTsKIAogCQkJLyoganVzdCBpbiBjYXNlIHZmcmVlIHNjaGVkdWxlcyBvbiB1cywgY29weSB0aGUgbmV3Ci0JCQkgKiogcG9pbnRlciBpbnRvIHRoZSBqb3VybmFsIHN0cnVjdCBiZWZvcmUgZnJlZWluZyB0aGUgCisJCQkgKiogcG9pbnRlciBpbnRvIHRoZSBqb3VybmFsIHN0cnVjdCBiZWZvcmUgZnJlZWluZyB0aGUKIAkJCSAqKiBvbGQgb25lCiAJCQkgKi8KIAkJCW5vZGVfdG1wID0gamItPmJpdG1hcHM7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdHJlZS5jIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwppbmRleCA3M2FhYTMzLi5kMDM2ZWU1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdHJlZS5jCisrKyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIGdldF9ya2V5CiAgKiBrZXlfaW5fYnVmZmVyCiAgKiBkZWNyZW1lbnRfYmNvdW50Ci0gKiBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aAogICogcmVpc2VyZnNfY2hlY2tfcGF0aAogICogcGF0aHJlbHNlX2FuZF9yZXN0b3JlCiAgKiBwYXRocmVsc2UKQEAgLTU3LDI4ICs1NiwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBibG9jayB3aGljaCBpcyBpbiB0aGUgdHJlZS4gKi8KLWlubGluZSBpbnQgQl9JU19JTl9UUkVFKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKQoraW5saW5lIGludCBCX0lTX0lOX1RSRUUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAotCVJGQUxTRShCX0xFVkVMKHBfc19iaCkgPiBNQVhfSEVJR0hULAotCSAgICAgICAiUEFQLTEwMTA6IGJsb2NrICglYikgaGFzIHRvbyBiaWcgbGV2ZWwgKCV6KSIsIHBfc19iaCwgcF9zX2JoKTsKKwlSRkFMU0UoQl9MRVZFTChiaCkgPiBNQVhfSEVJR0hULAorCSAgICAgICAiUEFQLTEwMTA6IGJsb2NrICglYikgaGFzIHRvbyBiaWcgbGV2ZWwgKCV6KSIsIGJoLCBiaCk7CiAKLQlyZXR1cm4gKEJfTEVWRUwocF9zX2JoKSAhPSBGUkVFX0xFVkVMKTsKKwlyZXR1cm4gKEJfTEVWRUwoYmgpICE9IEZSRUVfTEVWRUwpOwogfQogCiAvLwogLy8gdG8gZ2V0cyBpdGVtIGhlYWQgaW4gbGUgZm9ybQogLy8KLWlubGluZSB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnBfdl90bywKLQkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnBfdl9mcm9tKQoraW5saW5lIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqdG8sCisJCQkgICBjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpmcm9tKQogewotCW1lbWNweShwX3ZfdG8sIHBfdl9mcm9tLCBJSF9TSVpFKTsKKwltZW1jcHkodG8sIGZyb20sIElIX1NJWkUpOwogfQogCiAvKiBrMSBpcyBwb2ludGVyIHRvIG9uLWRpc2sgc3RydWN0dXJlIHdoaWNoIGlzIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuCiAgICBmb3JtLiBrMiBpcyBwb2ludGVyIHRvIGNwdSB2YXJpYWJsZS4gRm9yIGtleSBvZiBpdGVtcyBvZiB0aGUgc2FtZQogICAgb2JqZWN0IHRoaXMgcmV0dXJucyAwLgotICAgUmV0dXJuczogLTEgaWYga2V5MSA8IGtleTIgCisgICBSZXR1cm5zOiAtMSBpZiBrZXkxIDwga2V5MgogICAgMCBpZiBrZXkxID09IGtleTIKICAgIDEgaWYga2V5MSA+IGtleTIgKi8KIGlubGluZSBpbnQgY29tcF9zaG9ydF9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmxlX2tleSwKQEAgLTEzNiwxNSArMTM1LDE1IEBACiBpbmxpbmUgaW50IGNvbXBfc2hvcnRfbGVfa2V5cyhjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXkxLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5MikKIHsKLQlfX3UzMiAqcF9zXzFfdTMyLCAqcF9zXzJfdTMyOwotCWludCBuX2tleV9sZW5ndGggPSBSRUlTRVJGU19TSE9SVF9LRVlfTEVOOworCV9fdTMyICprMV91MzIsICprMl91MzI7CisJaW50IGtleV9sZW5ndGggPSBSRUlTRVJGU19TSE9SVF9LRVlfTEVOOwogCi0JcF9zXzFfdTMyID0gKF9fdTMyICopIGtleTE7Ci0JcF9zXzJfdTMyID0gKF9fdTMyICopIGtleTI7Ci0JZm9yICg7IG5fa2V5X2xlbmd0aC0tOyArK3Bfc18xX3UzMiwgKytwX3NfMl91MzIpIHsKLQkJaWYgKGxlMzJfdG9fY3B1KCpwX3NfMV91MzIpIDwgbGUzMl90b19jcHUoKnBfc18yX3UzMikpCisJazFfdTMyID0gKF9fdTMyICopIGtleTE7CisJazJfdTMyID0gKF9fdTMyICopIGtleTI7CisJZm9yICg7IGtleV9sZW5ndGgtLTsgKytrMV91MzIsICsrazJfdTMyKSB7CisJCWlmIChsZTMyX3RvX2NwdSgqazFfdTMyKSA8IGxlMzJfdG9fY3B1KCprMl91MzIpKQogCQkJcmV0dXJuIC0xOwotCQlpZiAobGUzMl90b19jcHUoKnBfc18xX3UzMikgPiBsZTMyX3RvX2NwdSgqcF9zXzJfdTMyKSkKKwkJaWYgKGxlMzJfdG9fY3B1KCprMV91MzIpID4gbGUzMl90b19jcHUoKmsyX3UzMikpCiAJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzUsNTIgKzE3NCw1MSBAQAogICogIEJpbmFyeSBzZWFyY2ggdG9vbGtpdCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgU2VhcmNoIGZvciBhbiBpdGVtIGluIHRoZSBhcnJheSBieSB0aGUgaXRlbSBrZXkgICAgICAgICAgICAgICAgICAgICAgICoKICAqICBSZXR1cm5zOiAgICAxIGlmIGZvdW5kLCAgMCBpZiBub3QgZm91bmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICpwX25fcG9zID0gbnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBlbGVtZW50IGlmIGZvdW5kLCBlbHNlIHRoZSAgICAqCi0gKiAgICAgICAgbnVtYmVyIG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gcF92X2tleS4gICAgICAgICoKKyAqICAgICAgICAqcG9zID0gbnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBlbGVtZW50IGlmIGZvdW5kLCBlbHNlIHRoZSAgICAgICAgKgorICogICAgICAgIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIGxhcmdlciB0aGFuIGtleS4gICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBGb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggYmluYXJ5IHNlYXJjaDogbl9sYm91bmQgaXMgdGhlIGxlZnRtb3N0IGl0ZW0gdGhhdCBpdAotIGNvdWxkIGJlLCBuX3Jib3VuZCB0aGUgcmlnaHRtb3N0IGl0ZW0gdGhhdCBpdCBjb3VsZCBiZS4gIFdlIGV4YW1pbmUgdGhlIGl0ZW0KLSBoYWxmd2F5IGJldHdlZW4gbl9sYm91bmQgYW5kIG5fcmJvdW5kLCBhbmQgdGhhdCB0ZWxscyB1cyBlaXRoZXIgdGhhdCB3ZSBjYW4gaW5jcmVhc2UKLSBuX2xib3VuZCwgb3IgZGVjcmVhc2Ugbl9yYm91bmQsIG9yIHRoYXQgd2UgaGF2ZSBmb3VuZCBpdCwgb3IgaWYgbl9sYm91bmQgPD0gbl9yYm91bmQgdGhhdAorLyogRm9yIHRob3NlIG5vdCBmYW1pbGlhciB3aXRoIGJpbmFyeSBzZWFyY2g6IGxib3VuZCBpcyB0aGUgbGVmdG1vc3QgaXRlbSB0aGF0IGl0CisgY291bGQgYmUsIHJib3VuZCB0aGUgcmlnaHRtb3N0IGl0ZW0gdGhhdCBpdCBjb3VsZCBiZS4gIFdlIGV4YW1pbmUgdGhlIGl0ZW0KKyBoYWxmd2F5IGJldHdlZW4gbGJvdW5kIGFuZCByYm91bmQsIGFuZCB0aGF0IHRlbGxzIHVzIGVpdGhlciB0aGF0IHdlIGNhbiBpbmNyZWFzZQorIGxib3VuZCwgb3IgZGVjcmVhc2UgcmJvdW5kLCBvciB0aGF0IHdlIGhhdmUgZm91bmQgaXQsIG9yIGlmIGxib3VuZCA8PSByYm91bmQgdGhhdAogIHRoZXJlIGFyZSBubyBwb3NzaWJsZSBpdGVtcywgYW5kIHdlIGhhdmUgbm90IGZvdW5kIGl0LiBXaXRoIGVhY2ggZXhhbWluYXRpb24gd2UKICBjdXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBpdGVtcyBpdCBjb3VsZCBiZSBieSBvbmUgbW9yZSB0aGFuIGhhbGYgcm91bmRlZCBkb3duLAogIG9yIHdlIGZpbmQgaXQuICovCi1zdGF0aWMgaW5saW5lIGludCBiaW5fc2VhcmNoKGNvbnN0IHZvaWQgKnBfdl9rZXksCS8qIEtleSB0byBzZWFyY2ggZm9yLiAgICAgICAgICAgICAgICAgICAqLwotCQkJICAgICBjb25zdCB2b2lkICpwX3ZfYmFzZSwJLyogRmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuICAgICAgICAgICAgICovCi0JCQkgICAgIGludCBwX25fbnVtLAkvKiBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5LiAgICAgICAgKi8KLQkJCSAgICAgaW50IHBfbl93aWR0aCwJLyogSXRlbSBzaXplIGluIHRoZSBhcnJheS4KLQkJCQkJCSAgIHNlYXJjaGVkLiBMZXN0IHRoZSByZWFkZXIgYmUKLQkJCQkJCSAgIGNvbmZ1c2VkLCBub3RlIHRoYXQgdGhpcyBpcyBjcmFmdGVkCi0JCQkJCQkgICBhcyBhIGdlbmVyYWwgZnVuY3Rpb24sIGFuZCB3aGVuIGl0Ci0JCQkJCQkgICBpcyBhcHBsaWVkIHNwZWNpZmljYWxseSB0byB0aGUgYXJyYXkKLQkJCQkJCSAgIG9mIGl0ZW0gaGVhZGVycyBpbiBhIG5vZGUsIHBfbl93aWR0aAotCQkJCQkJICAgaXMgYWN0dWFsbHkgdGhlIGl0ZW0gaGVhZGVyIHNpemUgbm90Ci0JCQkJCQkgICB0aGUgaXRlbSBzaXplLiAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJICAgICBpbnQgKnBfbl9wb3MJLyogTnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBmb3IgZWxlbWVudC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpbl9zZWFyY2goY29uc3Qgdm9pZCAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvci4gKi8KKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwJLyogRmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuICovCisJCQkgICAgIGludCBudW0sCS8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkuICovCisJCQkgICAgIGludCB3aWR0aCwJLyogSXRlbSBzaXplIGluIHRoZSBhcnJheS4KKwkJCQkJICAgc2VhcmNoZWQuIExlc3QgdGhlIHJlYWRlciBiZQorCQkJCQkgICBjb25mdXNlZCwgbm90ZSB0aGF0IHRoaXMgaXMgY3JhZnRlZAorCQkJCQkgICBhcyBhIGdlbmVyYWwgZnVuY3Rpb24sIGFuZCB3aGVuIGl0CisJCQkJCSAgIGlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIHRoZSBhcnJheQorCQkJCQkgICBvZiBpdGVtIGhlYWRlcnMgaW4gYSBub2RlLCB3aWR0aAorCQkJCQkgICBpcyBhY3R1YWxseSB0aGUgaXRlbSBoZWFkZXIgc2l6ZSBub3QKKwkJCQkJICAgdGhlIGl0ZW0gc2l6ZS4gKi8KKwkJCSAgICAgaW50ICpwb3MgLyogTnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBmb3IgZWxlbWVudC4gKi8KICAgICApCiB7Ci0JaW50IG5fcmJvdW5kLCBuX2xib3VuZCwgbl9qOworCWludCByYm91bmQsIGxib3VuZCwgajsKIAotCWZvciAobl9qID0gKChuX3Jib3VuZCA9IHBfbl9udW0gLSAxKSArIChuX2xib3VuZCA9IDApKSAvIDI7Ci0JICAgICBuX2xib3VuZCA8PSBuX3Jib3VuZDsgbl9qID0gKG5fcmJvdW5kICsgbl9sYm91bmQpIC8gMikKKwlmb3IgKGogPSAoKHJib3VuZCA9IG51bSAtIDEpICsgKGxib3VuZCA9IDApKSAvIDI7CisJICAgICBsYm91bmQgPD0gcmJvdW5kOyBqID0gKHJib3VuZCArIGxib3VuZCkgLyAyKQogCQlzd2l0Y2ggKGNvbXBfa2V5cwotCQkJKChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKChjaGFyICopcF92X2Jhc2UgKwotCQkJCQkJIG5faiAqIHBfbl93aWR0aCksCi0JCQkgKHN0cnVjdCBjcHVfa2V5ICopcF92X2tleSkpIHsKKwkJCSgoc3RydWN0IHJlaXNlcmZzX2tleSAqKSgoY2hhciAqKWJhc2UgKyBqICogd2lkdGgpLAorCQkJIChzdHJ1Y3QgY3B1X2tleSAqKWtleSkpIHsKIAkJY2FzZSAtMToKLQkJCW5fbGJvdW5kID0gbl9qICsgMTsKKwkJCWxib3VuZCA9IGogKyAxOwogCQkJY29udGludWU7CiAJCWNhc2UgMToKLQkJCW5fcmJvdW5kID0gbl9qIC0gMTsKKwkJCXJib3VuZCA9IGogLSAxOwogCQkJY29udGludWU7CiAJCWNhc2UgMDoKLQkJCSpwX25fcG9zID0gbl9qOworCQkJKnBvcyA9IGo7CiAJCQlyZXR1cm4gSVRFTV9GT1VORDsJLyogS2V5IGZvdW5kIGluIHRoZSBhcnJheS4gICovCiAJCX0KIAogCS8qIGJpbl9zZWFyY2ggZGlkIG5vdCBmaW5kIGdpdmVuIGtleSwgaXQgcmV0dXJucyBwb3NpdGlvbiBvZiBrZXksCiAJICAgdGhhdCBpcyBtaW5pbWFsIGFuZCBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG9uZS4gKi8KLQkqcF9uX3BvcyA9IG5fbGJvdW5kOworCSpwb3MgPSBsYm91bmQ7CiAJcmV0dXJuIElURU1fTk9UX0ZPVU5EOwogfQogCkBAIC0yNDMsOTAgKzI0MSw4OCBAQAogICAgb2YgdGhlIHBhdGgsIGFuZCBnb2luZyB1cHdhcmRzLiAgV2UgbXVzdCBjaGVjayB0aGUgcGF0aCdzIHZhbGlkaXR5IGF0IGVhY2ggc3RlcC4gIElmIHRoZSBrZXkgaXMgbm90IGluCiAgICB0aGUgcGF0aCwgdGhlcmUgaXMgbm8gZGVsaW1pdGluZyBrZXkgaW4gdGhlIHRyZWUgKGJ1ZmZlciBpcyBmaXJzdCBvciBsYXN0IGJ1ZmZlciBpbiB0cmVlKSwgYW5kIGluIHRoaXMKICAgIGNhc2Ugd2UgcmV0dXJuIGEgc3BlY2lhbCBrZXksIGVpdGhlciBNSU5fS0VZIG9yIE1BWF9LRVkuICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9sa2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aAotCQkJCQkJICAqcF9zX2Noa19wYXRoLAotCQkJCQkJICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sKLQkJCQkJCSAgKnBfc19zYikKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoICpjaGtfcGF0aCwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgbl9wb3NpdGlvbiwgbl9wYXRoX29mZnNldCA9IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGg7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCWludCBwb3NpdGlvbiwgcGF0aF9vZmZzZXQgPSBjaGtfcGF0aC0+cGF0aF9sZW5ndGg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnQ7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgIlBBUC01MDEwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCiAJLyogV2hpbGUgbm90IGhpZ2hlciBpbiBwYXRoIHRoYW4gZmlyc3QgZWxlbWVudC4gKi8KLQl3aGlsZSAobl9wYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCXdoaWxlIChwYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCiAJCVJGQUxTRSghYnVmZmVyX3VwdG9kYXRlCi0JCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSwKKwkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpLAogCQkgICAgICAgIlBBUC01MDIwOiBwYXJlbnQgaXMgbm90IHVwdG9kYXRlIik7CiAKIAkJLyogUGFyZW50IGF0IHRoZSBwYXRoIGlzIG5vdCBpbiB0aGUgdHJlZSBub3cuICovCiAJCWlmICghQl9JU19JTl9UUkVFCi0JCSAgICAocF9zX3BhcmVudCA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSkKKwkJICAgIChwYXJlbnQgPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSkpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19jaGtfcGF0aCwKLQkJCQkJICBuX3BhdGhfb2Zmc2V0KSkgPgotCQkgICAgQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKKwkJaWYgKChwb3NpdGlvbiA9CisJCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04oY2hrX3BhdGgsCisJCQkJCSAgcGF0aF9vZmZzZXQpKSA+CisJCSAgICBCX05SX0lURU1TKHBhcmVudCkpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsCi0JCQkJCW5fcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwKKwkJCQkJcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuICZNQVhfS0VZOwogCQkvKiBSZXR1cm4gZGVsaW1pdGluZyBrZXkgaWYgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBub3QgZXF1YWwgdG8gemVyby4gKi8KLQkJaWYgKG5fcG9zaXRpb24pCi0JCQlyZXR1cm4gQl9OX1BERUxJTV9LRVkocF9zX3BhcmVudCwgbl9wb3NpdGlvbiAtIDEpOworCQlpZiAocG9zaXRpb24pCisJCQlyZXR1cm4gQl9OX1BERUxJTV9LRVkocGFyZW50LCBwb3NpdGlvbiAtIDEpOwogCX0KIAkvKiBSZXR1cm4gTUlOX0tFWSBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIGJ1ZmZlciB0cmVlLiAqLwotCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgotCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpKQorCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHNiKSkKIAkJcmV0dXJuICZNSU5fS0VZOwogCXJldHVybiAmTUFYX0tFWTsKIH0KIAogLyogR2V0IGRlbGltaXRpbmcga2V5IG9mIHRoZSBidWZmZXIgYXQgdGhlIHBhdGggYW5kIGl0cyByaWdodCBuZWlnaGJvci4gKi8KLWlubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwKLQkJCQkJICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X3JrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoICpjaGtfcGF0aCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgbl9wb3NpdGlvbiwgbl9wYXRoX29mZnNldCA9IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGg7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCWludCBwb3NpdGlvbiwgcGF0aF9vZmZzZXQgPSBjaGtfcGF0aC0+cGF0aF9sZW5ndGg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnQ7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgIlBBUC01MDMwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQtLSA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwl3aGlsZSAocGF0aF9vZmZzZXQtLSA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKIAogCQlSRkFMU0UoIWJ1ZmZlcl91cHRvZGF0ZQotCQkgICAgICAgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBuX3BhdGhfb2Zmc2V0KSksCisJCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgcGF0aF9vZmZzZXQpKSwKIAkJICAgICAgICJQQVAtNTA0MDogcGFyZW50IGlzIG5vdCB1cHRvZGF0ZSIpOwogCiAJCS8qIFBhcmVudCBhdCB0aGUgcGF0aCBpcyBub3QgaW4gdGhlIHRyZWUgbm93LiAqLwogCQlpZiAoIUJfSVNfSU5fVFJFRQotCQkgICAgKHBfc19wYXJlbnQgPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBuX3BhdGhfb2Zmc2V0KSkpCisJCSAgICAocGFyZW50ID0KKwkJICAgICBQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBDaGVjayB3aGV0aGVyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgY29ycmVjdC4gKi8KLQkJaWYgKChuX3Bvc2l0aW9uID0KLQkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfY2hrX3BhdGgsCi0JCQkJCSAgbl9wYXRoX29mZnNldCkpID4KLQkJICAgIEJfTlJfSVRFTVMocF9zX3BhcmVudCkpCisJCWlmICgocG9zaXRpb24gPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKGNoa19wYXRoLAorCQkJCQkgIHBhdGhfb2Zmc2V0KSkgPgorCQkgICAgQl9OUl9JVEVNUyhwYXJlbnQpKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBhdCB0aGUgcGF0aCByZWFsbHkgcG9pbnRzIHRvIHRoZSBjaGlsZC4gKi8KLQkJaWYgKEJfTl9DSElMRF9OVU0ocF9zX3BhcmVudCwgbl9wb3NpdGlvbikgIT0KLQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLAotCQkJCQluX3BhdGhfb2Zmc2V0ICsgMSktPmJfYmxvY2tucikKKwkJaWYgKEJfTl9DSElMRF9OVU0ocGFyZW50LCBwb3NpdGlvbikgIT0KKwkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsCisJCQkJCXBhdGhfb2Zmc2V0ICsgMSktPmJfYmxvY2tucikKIAkJCXJldHVybiAmTUlOX0tFWTsKIAkJLyogUmV0dXJuIGRlbGltaXRpbmcga2V5IGlmIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgbm90IHRoZSBsYXN0IG9uZS4gKi8KLQkJaWYgKG5fcG9zaXRpb24gIT0gQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKLQkJCXJldHVybiBCX05fUERFTElNX0tFWShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKTsKKwkJaWYgKHBvc2l0aW9uICE9IEJfTlJfSVRFTVMocGFyZW50KSkKKwkJCXJldHVybiBCX05fUERFTElNX0tFWShwYXJlbnQsIHBvc2l0aW9uKTsKIAl9CiAJLyogUmV0dXJuIE1BWF9LRVkgaWYgd2UgYXJlIGluIHRoZSByb290IG9mIHRoZSBidWZmZXIgdHJlZS4gKi8KLQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KLQkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0socF9zX3NiKSkKKwlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgorCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhzYikpCiAJCXJldHVybiAmTUFYX0tFWTsKIAlyZXR1cm4gJk1JTl9LRVk7CiB9CkBAIC0zMzYsNjAgKzMzMiwyOSBAQAogICAgdGhlIHBhdGguICBUaGVzZSBkZWxpbWl0aW5nIGtleXMgYXJlIHN0b3JlZCBhdCBsZWFzdCBvbmUgbGV2ZWwgYWJvdmUgdGhhdCBidWZmZXIgaW4gdGhlIHRyZWUuIElmIHRoZQogICAgYnVmZmVyIGlzIHRoZSBmaXJzdCBvciBsYXN0IG5vZGUgaW4gdGhlIHRyZWUgb3JkZXIgdGhlbiBvbmUgb2YgdGhlIGRlbGltaXRpbmcga2V5cyBtYXkgYmUgYWJzZW50LCBhbmQgaW4KICAgIHRoaXMgY2FzZSBnZXRfbGtleSBhbmQgZ2V0X3JrZXkgcmV0dXJuIGEgc3BlY2lhbCBrZXkgd2hpY2ggaXMgTUlOX0tFWSBvciBNQVhfS0VZLiAqLwotc3RhdGljIGlubGluZSBpbnQga2V5X2luX2J1ZmZlcihzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwJLyogUGF0aCB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICovCi0JCQkJY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICAqLwotCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiCS8qIFN1cGVyIGJsb2NrIHBvaW50ZXIuICAgICAgICAgICAqLworc3RhdGljIGlubGluZSBpbnQga2V5X2luX2J1ZmZlcihzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAkvKiBQYXRoIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgKi8KKwkJCQljb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuICAgKi8KKwkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiCiAgICAgKQogewogCi0JUkZBTFNFKCFwX3Nfa2V5IHx8IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGggPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUCi0JICAgICAgIHx8IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGggPiBNQVhfSEVJR0hULAorCVJGQUxTRSgha2V5IHx8IGNoa19wYXRoLT5wYXRoX2xlbmd0aCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQKKwkgICAgICAgfHwgY2hrX3BhdGgtPnBhdGhfbGVuZ3RoID4gTUFYX0hFSUdIVCwKIAkgICAgICAgIlBBUC01MDUwOiBwb2ludGVyIHRvIHRoZSBrZXkoJXApIGlzIE5VTEwgb3IgaW52YWxpZCBwYXRoIGxlbmd0aCglZCkiLAotCSAgICAgICBwX3Nfa2V5LCBwX3NfY2hrX3BhdGgtPnBhdGhfbGVuZ3RoKTsKLQlSRkFMU0UoIVBBVEhfUExBU1RfQlVGRkVSKHBfc19jaGtfcGF0aCktPmJfYmRldiwKKwkgICAgICAga2V5LCBjaGtfcGF0aC0+cGF0aF9sZW5ndGgpOworCVJGQUxTRSghUEFUSF9QTEFTVF9CVUZGRVIoY2hrX3BhdGgpLT5iX2JkZXYsCiAJICAgICAgICJQQVAtNTA2MDogZGV2aWNlIG11c3Qgbm90IGJlIE5PREVWIik7CiAKLQlpZiAoY29tcF9rZXlzKGdldF9sa2V5KHBfc19jaGtfcGF0aCwgcF9zX3NiKSwgcF9zX2tleSkgPT0gMSkKKwlpZiAoY29tcF9rZXlzKGdldF9sa2V5KGNoa19wYXRoLCBzYiksIGtleSkgPT0gMSkKIAkJLyogbGVmdCBkZWxpbWl0aW5nIGtleSBpcyBiaWdnZXIsIHRoYXQgdGhlIGtleSB3ZSBsb29rIGZvciAqLwogCQlyZXR1cm4gMDsKLQkvLyAgaWYgKCBjb21wX2tleXMocF9zX2tleSwgZ2V0X3JrZXkocF9zX2Noa19wYXRoLCBwX3Nfc2IpKSAhPSAtMSApCi0JaWYgKGNvbXBfa2V5cyhnZXRfcmtleShwX3NfY2hrX3BhdGgsIHBfc19zYiksIHBfc19rZXkpICE9IDEpCi0JCS8qIHBfc19rZXkgbXVzdCBiZSBsZXNzIHRoYW4gcmlnaHQgZGVsaW1pdGlpbmcga2V5ICovCisJLyogIGlmICggY29tcF9rZXlzKGtleSwgZ2V0X3JrZXkoY2hrX3BhdGgsIHNiKSkgIT0gLTEgKSAqLworCWlmIChjb21wX2tleXMoZ2V0X3JrZXkoY2hrX3BhdGgsIHNiKSwga2V5KSAhPSAxKQorCQkvKiBrZXkgbXVzdCBiZSBsZXNzIHRoYW4gcmlnaHQgZGVsaW1pdGlpbmcga2V5ICovCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCi1pbmxpbmUgdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKQotewotCWlmIChwX3NfYmgpIHsKLQkJaWYgKGF0b21pY19yZWFkKCYocF9zX2JoLT5iX2NvdW50KSkpIHsKLQkJCXB1dF9iaChwX3NfYmgpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgIlBBUC01MDcwOiBkZWNyZW1lbnRfYmNvdW50OiB0cnlpbmcgdG8gZnJlZSBmcmVlIGJ1ZmZlciAlYiIsCi0JCQkgICAgICAgcF9zX2JoKTsKLQl9Ci19Ci0KLS8qIERlY3JlbWVudCBiX2NvdW50IGZpZWxkIG9mIHRoZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gKi8KLXZvaWQgZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCi17Ci0JaW50IG5fcGF0aF9vZmZzZXQgPSBwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOwotCi0JUkZBTFNFKG5fcGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQgfHwKLQkgICAgICAgbl9wYXRoX29mZnNldCA+IEVYVEVOREVEX01BWF9IRUlHSFQgLSAxLAotCSAgICAgICAiUEFQLTUwODA6IGludmFsaWQgcGF0aCBvZmZzZXQgb2YgJWQiLCBuX3BhdGhfb2Zmc2V0KTsKLQotCXdoaWxlIChuX3BhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0KLQkJYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKTsKLQkJZGVjcmVtZW50X2Jjb3VudChiaCk7Ci0JfQotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7Ci19Ci0KIGludCByZWlzZXJmc19jaGVja19wYXRoKHN0cnVjdCB0cmVlcGF0aCAqcCkKIHsKIAlSRkFMU0UocC0+cGF0aF9sZW5ndGggIT0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULApAQCAtMzk3LDQwICszNjIsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUmVsZWFzZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gUmVzdG9yZSBkaXJ0eSBiaXRzIGNsZWFuCi0qKiB3aGVuIHByZXBhcmluZyB0aGUgYnVmZmVyIGZvciB0aGUgbG9nCi0qKgotKiogb25seSBjYWxsZWQgZnJvbSBmaXhfbm9kZXMoKQotKi8KLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCisvKiBEcm9wIHRoZSByZWZlcmVuY2UgdG8gZWFjaCBidWZmZXIgaW4gYSBwYXRoIGFuZCByZXN0b3JlCisgKiBkaXJ0eSBiaXRzIGNsZWFuIHdoZW4gcHJlcGFyaW5nIHRoZSBidWZmZXIgZm9yIHRoZSBsb2cuCisgKiBUaGlzIHZlcnNpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gZml4X25vZGVzKCkgKi8KK3ZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKQogewotCWludCBuX3BhdGhfb2Zmc2V0ID0gcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKKwlpbnQgcGF0aF9vZmZzZXQgPSBzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCiAJICAgICAgICJjbG0tNDAwMDogaW52YWxpZCBwYXRoIG9mZnNldCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKLQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocywKLQkJCQkJCSBQQVRIX09GRlNFVF9QQlVGRkVSCi0JCQkJCQkgKHBfc19zZWFyY2hfcGF0aCwKLQkJCQkJCSAgbl9wYXRoX29mZnNldCkpOwotCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3Nfc2VhcmNoX3BhdGgsIG5fcGF0aF9vZmZzZXQtLSkpOworCXdoaWxlIChwYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIoc2VhcmNoX3BhdGgsIHBhdGhfb2Zmc2V0LS0pOworCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzYiwgYmgpOworCQlicmVsc2UoYmgpOwogCX0KLQlwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOworCXNlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKIH0KIAotLyogUmVsZWFzZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gKi8KLXZvaWQgcGF0aHJlbHNlKHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoKQorLyogRHJvcCB0aGUgcmVmZXJlbmNlIHRvIGVhY2ggYnVmZmVyIGluIGEgcGF0aCAqLwordm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCkKIHsKLQlpbnQgbl9wYXRoX29mZnNldCA9IHBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CisJaW50IHBhdGhfb2Zmc2V0ID0gc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOwogCi0JUkZBTFNFKG5fcGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwOTA6IGludmFsaWQgcGF0aCBvZmZzZXQiKTsKIAotCXdoaWxlIChuX3BhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKQotCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3Nfc2VhcmNoX3BhdGgsIG5fcGF0aF9vZmZzZXQtLSkpOworCXdoaWxlIChwYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkKKwkJYnJlbHNlKFBBVEhfT0ZGU0VUX1BCVUZGRVIoc2VhcmNoX3BhdGgsIHBhdGhfb2Zmc2V0LS0pKTsKIAotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CisJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOwogfQogCiBzdGF0aWMgaW50IGlzX2xlYWYoY2hhciAqYnVmLCBpbnQgYmxvY2tzaXplLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpAQCAtNDQ0LDIzICs0MDcsMjQgQEAKIAogCWJsa2ggPSAoc3RydWN0IGJsb2NrX2hlYWQgKilidWY7CiAJaWYgKGJsa2hfbGV2ZWwoYmxraCkgIT0gRElTS19MRUFGX05PREVfTEVWRUwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfbGVhZjogdGhpcyBzaG91bGQgYmUgY2F1Z2h0IGVhcmxpZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MCIsCisJCQkJICJ0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAluciA9IGJsa2hfbnJfaXRlbShibGtoKTsKIAlpZiAobnIgPCAxIHx8IG5yID4gKChibG9ja3NpemUgLSBCTEtIX1NJWkUpIC8gKElIX1NJWkUgKyBNSU5fSVRFTV9MRU4pKSkgewogCQkvKiBpdGVtIG51bWJlciBpcyB0b28gYmlnIG9yIHRvbyBzbWFsbCAqLwotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJpc19sZWFmOiBucl9pdGVtIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MSIsCisJCQkJICJucl9pdGVtIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWloID0gKHN0cnVjdCBpdGVtX2hlYWQgKikoYnVmICsgQkxLSF9TSVpFKSArIG5yIC0gMTsKIAl1c2VkX3NwYWNlID0gQkxLSF9TSVpFICsgSUhfU0laRSAqIG5yICsgKGJsb2Nrc2l6ZSAtIGloX2xvY2F0aW9uKGloKSk7CiAJaWYgKHVzZWRfc3BhY2UgIT0gYmxvY2tzaXplIC0gYmxraF9mcmVlX3NwYWNlKGJsa2gpKSB7CiAJCS8qIGZyZWUgc3BhY2UgZG9lcyBub3QgbWF0Y2ggdG8gY2FsY3VsYXRlZCBhbW91bnQgb2YgdXNlIHNwYWNlICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImlzX2xlYWY6IGZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwKLQkJCQkgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgyIiwKKwkJCQkgImZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gRklYTUU6IGl0IGlzX2xlYWYgd2lsbCBoaXQgcGVyZm9ybWFuY2UgdG9vIG11Y2ggLSB3ZSBtYXkgaGF2ZQpAQCAtNDcxLDI5ICs0MzUsMjkgQEAKIAlwcmV2X2xvY2F0aW9uID0gYmxvY2tzaXplOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrLCBpaCsrKSB7CiAJCWlmIChsZV9paF9rX3R5cGUoaWgpID09IFRZUEVfQU5ZKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogd3JvbmcgaXRlbSB0eXBlIGZvciBpdGVtICVoIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODMiLAorCQkJCQkgIndyb25nIGl0ZW0gdHlwZSBmb3IgaXRlbSAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaWhfbG9jYXRpb24oaWgpID49IGJsb2Nrc2l6ZQogCQkgICAgfHwgaWhfbG9jYXRpb24oaWgpIDwgSUhfU0laRSAqIG5yKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZzogJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NCIsCisJCQkJCSAiaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZzogJWgiLAogCQkJCQkgaWgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGloX2l0ZW1fbGVuKGloKSA8IDEKIAkJICAgIHx8IGloX2l0ZW1fbGVuKGloKSA+IE1BWF9JVEVNX0xFTihibG9ja3NpemUpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogaXRlbSBsZW5ndGggc2VlbXMgd3Jvbmc6ICVoIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODUiLAorCQkJCQkgIml0ZW0gbGVuZ3RoIHNlZW1zIHdyb25nOiAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAocHJldl9sb2NhdGlvbiAtIGloX2xvY2F0aW9uKGloKSAhPSBpaF9pdGVtX2xlbihpaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nIChzZWNvbmQgb25lKTogJWgiLAotCQkJCQkgaWgpOworCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NiIsCisJCQkJCSAiaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZyAiCisJCQkJCSAiKHNlY29uZCBvbmUpOiAlaCIsIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXByZXZfbG9jYXRpb24gPSBpaF9sb2NhdGlvbihpaCk7CkBAIC01MTQsMjQgKzQ3OCwyMyBAQAogCW5yID0gYmxraF9sZXZlbChibGtoKTsKIAlpZiAobnIgPD0gRElTS19MRUFGX05PREVfTEVWRUwgfHwgbnIgPiBNQVhfSEVJR0hUKSB7CiAJCS8qIHRoaXMgbGV2ZWwgaXMgbm90IHBvc3NpYmxlIGZvciBpbnRlcm5hbCBub2RlcyAqLwotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc19pbnRlcm5hbDogdGhpcyBzaG91bGQgYmUgY2F1Z2h0IGVhcmxpZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NyIsCisJCQkJICJ0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAluciA9IGJsa2hfbnJfaXRlbShibGtoKTsKIAlpZiAobnIgPiAoYmxvY2tzaXplIC0gQkxLSF9TSVpFIC0gRENfU0laRSkgLyAoS0VZX1NJWkUgKyBEQ19TSVpFKSkgewogCQkvKiBmb3IgaW50ZXJuYWwgd2hpY2ggaXMgbm90IHJvb3Qgd2UgbWlnaHQgY2hlY2sgbWluIG51bWJlciBvZiBrZXlzICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiBudW1iZXIgb2Yga2V5IHNlZW1zIHdyb25nOiAleiIsCi0JCQkJIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4OCIsCisJCQkJICJudW1iZXIgb2Yga2V5IHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJdXNlZF9zcGFjZSA9IEJMS0hfU0laRSArIEtFWV9TSVpFICogbnIgKyBEQ19TSVpFICogKG5yICsgMSk7CiAJaWYgKHVzZWRfc3BhY2UgIT0gYmxvY2tzaXplIC0gYmxraF9mcmVlX3NwYWNlKGJsa2gpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiBmcmVlIHNwYWNlIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4OSIsCisJCQkJICJmcmVlIHNwYWNlIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8vIG9uZSBtYXkgaW1hZ2luZSBtdWNoIG1vcmUgY2hlY2tzCkBAIC01NDMsOCArNTA2LDggQEAKIHN0YXRpYyBpbnQgaXNfdHJlZV9ub2RlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBsZXZlbCkKIHsKIAlpZiAoQl9MRVZFTChiaCkgIT0gbGV2ZWwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfdHJlZV9ub2RlOiBub2RlIGxldmVsICVkIGRvZXMgbm90IG1hdGNoIHRvIHRoZSBleHBlY3RlZCBvbmUgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDkwIiwgIm5vZGUgbGV2ZWwgJWQgZG9lcyAiCisJCQkJICJub3QgbWF0Y2ggdG8gdGhlIGV4cGVjdGVkIG9uZSAlZCIsCiAJCQkJIEJfTEVWRUwoYmgpLCBsZXZlbCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTU4MCwxMCArNTQzLDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFsZ29yaXRobSAgIFNlYXJjaEJ5S2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgbG9vayBmb3IgaXRlbSBpbiB0aGUgRGlzayBTK1RyZWUgYnkgaXRzIGtleSAgICAgICAgICAgICAgICAqCi0gKiBJbnB1dDogIHBfc19zYiAgIC0gIHN1cGVyIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgcF9zX2tleSAgLSBwb2ludGVyIHRvIHRoZSBrZXkgdG8gc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgKgorICogSW5wdXQ6ICBzYiAgIC0gIHN1cGVyIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgIGtleSAgLSBwb2ludGVyIHRvIHRoZSBrZXkgdG8gc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIE91dHB1dDogSVRFTV9GT1VORCwgSVRFTV9OT1RfRk9VTkQgb3IgSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICBwX3Nfc2VhcmNoX3BhdGggLSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIG5lZWRlZCBsZWFmICAgICAgICAqCisgKiAgICAgICAgIHNlYXJjaF9wYXRoIC0gcGF0aCBmcm9tIHRoZSByb290IHRvIHRoZSBuZWVkZWQgbGVhZiAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVGhpcyBmdW5jdGlvbiBmaWxscyB1cCB0aGUgcGF0aCBmcm9tIHRoZSByb290IHRvIHRoZSBsZWFmIGFzIGl0CkBAIC02MDAsMjIgKzU2MywyMiBAQAogICAgY29ycmVjdG5lc3Mgb2YgdGhlIHRvcCBvZiB0aGUgcGF0aCBidXQgbmVlZCBub3QgYmUgY2hlY2tlZCBmb3IgdGhlCiAgICBjb3JyZWN0bmVzcyBvZiB0aGUgYm90dG9tIG9mIHRoZSBwYXRoICovCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1pbnQgc2VhcmNoX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB0byBzZWFyY2guICovCi0JCSAgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgsLyogVGhpcyBzdHJ1Y3R1cmUgd2FzCitpbnQgc2VhcmNoX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoLiAqLworCQkgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgsLyogVGhpcyBzdHJ1Y3R1cmUgd2FzCiAJCQkJCQkgICBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCiAJCQkJCQkgICBieSB0aGUgY2FsbGluZwogCQkJCQkJICAgZnVuY3Rpb24uIEl0IGlzIGZpbGxlZCB1cAogCQkJCQkJICAgYnkgdGhpcyBmdW5jdGlvbi4gICovCi0JCSAgaW50IG5fc3RvcF9sZXZlbAkvKiBIb3cgZmFyIGRvd24gdGhlIHRyZWUgdG8gc2VhcmNoLiBUbworCQkgIGludCBzdG9wX2xldmVsCS8qIEhvdyBmYXIgZG93biB0aGUgdHJlZSB0byBzZWFyY2guIFRvCiAJCQkJCSAgIHN0b3AgYXQgbGVhZiBsZXZlbCAtIHNldCB0bwogCQkJCQkgICBESVNLX0xFQUZfTk9ERV9MRVZFTCAqLwogICAgICkKIHsKLQliX2Jsb2NrbnJfdCBuX2Jsb2NrX251bWJlcjsKKwliX2Jsb2NrbnJfdCBibG9ja19udW1iZXI7CiAJaW50IGV4cGVjdGVkX2xldmVsOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOwotCXN0cnVjdCBwYXRoX2VsZW1lbnQgKnBfc19sYXN0X2VsZW1lbnQ7Ci0JaW50IG5fbm9kZV9sZXZlbCwgbl9yZXR2YWw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3QgcGF0aF9lbGVtZW50ICpsYXN0X2VsZW1lbnQ7CisJaW50IG5vZGVfbGV2ZWwsIHJldHZhbDsKIAlpbnQgcmlnaHRfbmVpZ2hib3Jfb2ZfbGVhZl9ub2RlOwogCWludCBmc19nZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWFkYV9iaFtTRUFSQ0hfQllfS0VZX1JFQURBXTsKQEAgLTYyMyw4MCArNTg2LDc5IEBACiAJaW50IHJlYWRhX2NvdW50ID0gMDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCWludCBuX3JlcGVhdF9jb3VudGVyID0gMDsKKwlpbnQgcmVwZWF0X2NvdW50ZXIgPSAwOwogI2VuZGlmCiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgc2VhcmNoX2J5X2tleSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleSk7CiAKIAkvKiBBcyB3ZSBhZGQgZWFjaCBub2RlIHRvIGEgcGF0aCB3ZSBpbmNyZWFzZSBpdHMgY291bnQuICBUaGlzIG1lYW5zIHRoYXQKIAkgICB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gcmVsZWFzZSBhbGwgbm9kZXMgaW4gYSBwYXRoIGJlZm9yZSB3ZSBlaXRoZXIKIAkgICBkaXNjYXJkIHRoZSBwYXRoIHN0cnVjdCBvciByZS11c2UgdGhlIHBhdGggc3RydWN0LCBhcyB3ZSBkbyBoZXJlLiAqLwogCi0JZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgocF9zX3NlYXJjaF9wYXRoKTsKKwlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCiAJcmlnaHRfbmVpZ2hib3Jfb2ZfbGVhZl9ub2RlID0gMDsKIAogCS8qIFdpdGggZWFjaCBpdGVyYXRpb24gb2YgdGhpcyBsb29wIHdlIHNlYXJjaCB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUKIAkgICBjdXJyZW50IG5vZGUsIGFuZCBjYWxjdWxhdGUgdGhlIG5leHQgY3VycmVudCBub2RlKG5leHQgcGF0aCBlbGVtZW50KQogCSAgIGZvciB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhpcyBsb29wLi4gKi8KLQluX2Jsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0socF9zX3NiKTsKKwlibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHNiKTsKIAlleHBlY3RlZF9sZXZlbCA9IC0xOwogCXdoaWxlICgxKSB7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJaWYgKCEoKytuX3JlcGVhdF9jb3VudGVyICUgNTAwMDApKQotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJQQVAtNTEwMDogc2VhcmNoX2J5X2tleTogJXM6IgotCQkJCQkgInRoZXJlIHdlcmUgJWQgaXRlcmF0aW9ucyBvZiB3aGlsZSBsb29wICIKLQkJCQkJICJsb29raW5nIGZvciBrZXkgJUsiLAotCQkJCQkgY3VycmVudC0+Y29tbSwgbl9yZXBlYXRfY291bnRlciwKLQkJCQkJIHBfc19rZXkpOworCQlpZiAoISgrK3JlcGVhdF9jb3VudGVyICUgNTAwMDApKQorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC01MTAwIiwKKwkJCQkJICIlczogdGhlcmUgd2VyZSAlZCBpdGVyYXRpb25zIG9mICIKKwkJCQkJICJ3aGlsZSBsb29wIGxvb2tpbmcgZm9yIGtleSAlSyIsCisJCQkJCSBjdXJyZW50LT5jb21tLCByZXBlYXRfY291bnRlciwKKwkJCQkJIGtleSk7CiAjZW5kaWYKIAogCQkvKiBwcmVwIHBhdGggdG8gaGF2ZSBhbm90aGVyIGVsZW1lbnQgYWRkZWQgdG8gaXQuICovCi0JCXBfc19sYXN0X2VsZW1lbnQgPQotCQkgICAgUEFUSF9PRkZTRVRfUEVMRU1FTlQocF9zX3NlYXJjaF9wYXRoLAotCQkJCQkgKytwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoKTsKLQkJZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24ocF9zX3NiKTsKKwkJbGFzdF9lbGVtZW50ID0KKwkJICAgIFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHNlYXJjaF9wYXRoLAorCQkJCQkgKytzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgpOworCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihzYik7CiAKIAkJLyogUmVhZCB0aGUgbmV4dCB0cmVlIG5vZGUsIGFuZCBzZXQgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgcGF0aCB0bwogCQkgICBoYXZlIGEgcG9pbnRlciB0byBpdC4gKi8KLQkJaWYgKChwX3NfYmggPSBwX3NfbGFzdF9lbGVtZW50LT5wZV9idWZmZXIgPQotCQkgICAgIHNiX2dldGJsayhwX3Nfc2IsIG5fYmxvY2tfbnVtYmVyKSkpIHsKLQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkgJiYgcmVhZGFfY291bnQgPiAxKSB7Ci0JCQkJc2VhcmNoX2J5X2tleV9yZWFkYShwX3Nfc2IsIHJlYWRhX2JoLAorCQlpZiAoKGJoID0gbGFzdF9lbGVtZW50LT5wZV9idWZmZXIgPQorCQkgICAgIHNiX2dldGJsayhzYiwgYmxvY2tfbnVtYmVyKSkpIHsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSAmJiByZWFkYV9jb3VudCA+IDEpCisJCQkJc2VhcmNoX2J5X2tleV9yZWFkYShzYiwgcmVhZGFfYmgsCiAJCQkJCQkgICAgcmVhZGFfYmxvY2tzLCByZWFkYV9jb3VudCk7Ci0JCQl9Ci0JCQlsbF9yd19ibG9jayhSRUFELCAxLCAmcF9zX2JoKTsKLQkJCXdhaXRfb25fYnVmZmVyKHBfc19iaCk7Ci0JCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShwX3NfYmgpKQorCQkJbGxfcndfYmxvY2soUkVBRCwgMSwgJmJoKTsKKwkJCXdhaXRfb25fYnVmZmVyKGJoKTsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJCQlnb3RvIGlvX2Vycm9yOwogCQl9IGVsc2UgewogCQkgICAgICBpb19lcnJvcjoKLQkJCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgtLTsKLQkJCXBhdGhyZWxzZShwX3Nfc2VhcmNoX3BhdGgpOworCQkJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoLS07CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAJCXJlYWRhX2NvdW50ID0gMDsKIAkJaWYgKGV4cGVjdGVkX2xldmVsID09IC0xKQotCQkJZXhwZWN0ZWRfbGV2ZWwgPSBTQl9UUkVFX0hFSUdIVChwX3Nfc2IpOworCQkJZXhwZWN0ZWRfbGV2ZWwgPSBTQl9UUkVFX0hFSUdIVChzYik7CiAJCWV4cGVjdGVkX2xldmVsLS07CiAKIAkJLyogSXQgaXMgcG9zc2libGUgdGhhdCBzY2hlZHVsZSBvY2N1cnJlZC4gV2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSBrZXkKIAkJICAgdG8gc2VhcmNoIGlzIHN0aWxsIGluIHRoZSB0cmVlIHJvb3RlZCBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlci4gSWYKIAkJICAgbm90IHRoZW4gcmVwZWF0IHNlYXJjaCBmcm9tIHRoZSByb290LiAqLwotCQlpZiAoZnNfY2hhbmdlZChmc19nZW4sIHBfc19zYikgJiYKLQkJICAgICghQl9JU19JTl9UUkVFKHBfc19iaCkgfHwKLQkJICAgICBCX0xFVkVMKHBfc19iaCkgIT0gZXhwZWN0ZWRfbGV2ZWwgfHwKLQkJICAgICAha2V5X2luX2J1ZmZlcihwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXksIHBfc19zYikpKSB7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgc2VhcmNoX2J5X2tleV9mc19jaGFuZ2VkKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5X3Jlc3RhcnRlZCk7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwKKwkJaWYgKGZzX2NoYW5nZWQoZnNfZ2VuLCBzYikgJiYKKwkJICAgICghQl9JU19JTl9UUkVFKGJoKSB8fAorCQkgICAgIEJfTEVWRUwoYmgpICE9IGV4cGVjdGVkX2xldmVsIHx8CisJCSAgICAgIWtleV9pbl9idWZmZXIoc2VhcmNoX3BhdGgsIGtleSwgc2IpKSkgeworCQkJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleV9mc19jaGFuZ2VkKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsIHNlYXJjaF9ieV9rZXlfcmVzdGFydGVkKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsCiAJCQkJICAgICAgc2JrX3Jlc3RhcnRlZFtleHBlY3RlZF9sZXZlbCAtIDFdKTsKLQkJCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHBfc19zZWFyY2hfcGF0aCk7CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCiAJCQkvKiBHZXQgdGhlIHJvb3QgYmxvY2sgbnVtYmVyIHNvIHRoYXQgd2UgY2FuIHJlcGVhdCB0aGUgc2VhcmNoCiAJCQkgICBzdGFydGluZyBmcm9tIHRoZSByb290LiAqLwotCQkJbl9ibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHBfc19zYik7CisJCQlibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHNiKTsKIAkJCWV4cGVjdGVkX2xldmVsID0gLTE7CiAJCQlyaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGUgPSAwOwogCkBAIC03MDQsNTMgKzY2Niw1MyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBvbmx5IGNoZWNrIHRoYXQgdGhlIGtleSBpcyBpbiB0aGUgYnVmZmVyIGlmIHBfc19rZXkgaXMgbm90CisJCS8qIG9ubHkgY2hlY2sgdGhhdCB0aGUga2V5IGlzIGluIHRoZSBidWZmZXIgaWYga2V5IGlzIG5vdAogCQkgICBlcXVhbCB0byB0aGUgTUFYX0tFWS4gTGF0dGVyIGNhc2UgaXMgb25seSBwb3NzaWJsZSBpbgogCQkgICAiZmluaXNoX3VuZmluaXNoZWQoKSIgcHJvY2Vzc2luZyBkdXJpbmcgbW91bnQuICovCi0JCVJGQUxTRShjb21wX2tleXMoJk1BWF9LRVksIHBfc19rZXkpICYmCi0JCSAgICAgICAha2V5X2luX2J1ZmZlcihwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXksIHBfc19zYiksCisJCVJGQUxTRShjb21wX2tleXMoJk1BWF9LRVksIGtleSkgJiYKKwkJICAgICAgICFrZXlfaW5fYnVmZmVyKHNlYXJjaF9wYXRoLCBrZXksIHNiKSwKIAkJICAgICAgICJQQVAtNTEzMDoga2V5IGlzIG5vdCBpbiB0aGUgYnVmZmVyIik7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCWlmIChjdXJfdGIpIHsKIAkJCXByaW50X2N1cl90YigiNTE0MCIpOwotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiUEFQLTUxNDA6IHNlYXJjaF9ieV9rZXk6IHNjaGVkdWxlIG9jY3VycmVkIGluIGRvX2JhbGFuY2UhIik7CisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01MTQwIiwKKwkJCQkgICAgICAgInNjaGVkdWxlIG9jY3VycmVkIGluIGRvX2JhbGFuY2UhIik7CiAJCX0KICNlbmRpZgogCiAJCS8vIG1ha2Ugc3VyZSwgdGhhdCB0aGUgbm9kZSBjb250ZW50cyBsb29rIGxpa2UgYSBub2RlIG9mCiAJCS8vIGNlcnRhaW4gbGV2ZWwKLQkJaWYgKCFpc190cmVlX25vZGUocF9zX2JoLCBleHBlY3RlZF9sZXZlbCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAidnMtNTE1MDogc2VhcmNoX2J5X2tleTogIgotCQkJCQkgImludmFsaWQgZm9ybWF0IGZvdW5kIGluIGJsb2NrICVsZC4gRnNjaz8iLAotCQkJCQkgcF9zX2JoLT5iX2Jsb2NrbnIpOwotCQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJCWlmICghaXNfdHJlZV9ub2RlKGJoLCBleHBlY3RlZF9sZXZlbCkpIHsKKwkJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtNTE1MCIsCisJCQkJICAgICAgICJpbnZhbGlkIGZvcm1hdCBmb3VuZCBpbiBibG9jayAlbGQuICIKKwkJCQkgICAgICAgIkZzY2s/IiwgYmgtPmJfYmxvY2tucik7CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAKIAkJLyogb2ssIHdlIGhhdmUgYWNxdWlyZWQgbmV4dCBmb3JtYXR0ZWQgbm9kZSBpbiB0aGUgdHJlZSAqLwotCQluX25vZGVfbGV2ZWwgPSBCX0xFVkVMKHBfc19iaCk7CisJCW5vZGVfbGV2ZWwgPSBCX0xFVkVMKGJoKTsKIAotCQlQUk9DX0lORk9fQkhfU1RBVChwX3Nfc2IsIHBfc19iaCwgbl9ub2RlX2xldmVsIC0gMSk7CisJCVBST0NfSU5GT19CSF9TVEFUKHNiLCBiaCwgbm9kZV9sZXZlbCAtIDEpOwogCi0JCVJGQUxTRShuX25vZGVfbGV2ZWwgPCBuX3N0b3BfbGV2ZWwsCisJCVJGQUxTRShub2RlX2xldmVsIDwgc3RvcF9sZXZlbCwKIAkJICAgICAgICJ2cy01MTUyOiB0cmVlIGxldmVsICglZCkgaXMgbGVzcyB0aGFuIHN0b3AgbGV2ZWwgKCVkKSIsCi0JCSAgICAgICBuX25vZGVfbGV2ZWwsIG5fc3RvcF9sZXZlbCk7CisJCSAgICAgICBub2RlX2xldmVsLCBzdG9wX2xldmVsKTsKIAotCQluX3JldHZhbCA9IGJpbl9zZWFyY2gocF9zX2tleSwgQl9OX1BJVEVNX0hFQUQocF9zX2JoLCAwKSwKLQkJCQkgICAgICBCX05SX0lURU1TKHBfc19iaCksCi0JCQkJICAgICAgKG5fbm9kZV9sZXZlbCA9PQorCQlyZXR2YWwgPSBiaW5fc2VhcmNoKGtleSwgQl9OX1BJVEVNX0hFQUQoYmgsIDApLAorCQkJCSAgICAgIEJfTlJfSVRFTVMoYmgpLAorCQkJCSAgICAgIChub2RlX2xldmVsID09CiAJCQkJICAgICAgIERJU0tfTEVBRl9OT0RFX0xFVkVMKSA/IElIX1NJWkUgOgogCQkJCSAgICAgIEtFWV9TSVpFLAotCQkJCSAgICAgICYocF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pKTsKLQkJaWYgKG5fbm9kZV9sZXZlbCA9PSBuX3N0b3BfbGV2ZWwpIHsKLQkJCXJldHVybiBuX3JldHZhbDsKKwkJCQkgICAgICAmKGxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pKTsKKwkJaWYgKG5vZGVfbGV2ZWwgPT0gc3RvcF9sZXZlbCkgeworCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCiAJCS8qIHdlIGFyZSBub3QgaW4gdGhlIHN0b3AgbGV2ZWwgKi8KLQkJaWYgKG5fcmV0dmFsID09IElURU1fRk9VTkQpCisJCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkKIAkJCS8qIGl0ZW0gaGFzIGJlZW4gZm91bmQsIHNvIHdlIGNob29zZSB0aGUgcG9pbnRlciB3aGljaCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGZvdW5kIG9uZSAqLwotCQkJcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24rKzsKKwkJCWxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24rKzsKIAogCQkvKiBpZiBpdGVtIHdhcyBub3QgZm91bmQgd2UgY2hvb3NlIHRoZSBwb3NpdGlvbiB3aGljaCBpcyB0bwogCQkgICB0aGUgbGVmdCBvZiB0aGUgZm91bmQgaXRlbS4gVGhpcyByZXF1aXJlcyBubyBjb2RlLApAQCAtNzU5LDI0ICs3MjEsMjQgQEAKIAkJLyogU28gd2UgaGF2ZSBjaG9zZW4gYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBub2RlIHdoaWNoIGlzCiAJCSAgIGFuIGludGVybmFsIG5vZGUuICBOb3cgd2UgY2FsY3VsYXRlIGNoaWxkIGJsb2NrIG51bWJlciBieQogCQkgICBwb3NpdGlvbiBpbiB0aGUgbm9kZS4gKi8KLQkJbl9ibG9ja19udW1iZXIgPQotCQkgICAgQl9OX0NISUxEX05VTShwX3NfYmgsIHBfc19sYXN0X2VsZW1lbnQtPnBlX3Bvc2l0aW9uKTsKKwkJYmxvY2tfbnVtYmVyID0KKwkJICAgIEJfTl9DSElMRF9OVU0oYmgsIGxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pOwogCiAJCS8qIGlmIHdlIGFyZSBnb2luZyB0byByZWFkIGxlYWYgbm9kZXMsIHRyeSBmb3IgcmVhZCBhaGVhZCBhcyB3ZWxsICovCi0JCWlmICgocF9zX3NlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREEpICYmCi0JCSAgICBuX25vZGVfbGV2ZWwgPT0gRElTS19MRUFGX05PREVfTEVWRUwgKyAxKSB7Ci0JCQlpbnQgcG9zID0gcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb247Ci0JCQlpbnQgbGltaXQgPSBCX05SX0lURU1TKHBfc19iaCk7CisJCWlmICgoc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQSkgJiYKKwkJICAgIG5vZGVfbGV2ZWwgPT0gRElTS19MRUFGX05PREVfTEVWRUwgKyAxKSB7CisJCQlpbnQgcG9zID0gbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbjsKKwkJCWludCBsaW1pdCA9IEJfTlJfSVRFTVMoYmgpOwogCQkJc3RydWN0IHJlaXNlcmZzX2tleSAqbGVfa2V5OwogCi0JCQlpZiAocF9zX3NlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKKwkJCWlmIChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCiAJCQkJbGltaXQgPSAwOwogCQkJd2hpbGUgKHJlYWRhX2NvdW50IDwgU0VBUkNIX0JZX0tFWV9SRUFEQSkgewogCQkJCWlmIChwb3MgPT0gbGltaXQpCiAJCQkJCWJyZWFrOwogCQkJCXJlYWRhX2Jsb2Nrc1tyZWFkYV9jb3VudCsrXSA9Ci0JCQkJICAgIEJfTl9DSElMRF9OVU0ocF9zX2JoLCBwb3MpOwotCQkJCWlmIChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQV9CQUNLKQorCQkJCSAgICBCX05fQ0hJTERfTlVNKGJoLCBwb3MpOworCQkJCWlmIChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCiAJCQkJCXBvcy0tOwogCQkJCWVsc2UKIAkJCQkJcG9zKys7CkBAIC03ODQsOSArNzQ2LDkgQEAKIAkJCQkvKgogCQkJCSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgc2FtZSBvYmplY3QKIAkJCQkgKi8KLQkJCQlsZV9rZXkgPSBCX05fUERFTElNX0tFWShwX3NfYmgsIHBvcyk7CisJCQkJbGVfa2V5ID0gQl9OX1BERUxJTV9LRVkoYmgsIHBvcyk7CiAJCQkJaWYgKGxlMzJfdG9fY3B1KGxlX2tleS0+a19vYmplY3RpZCkgIT0KLQkJCQkgICAgcF9zX2tleS0+b25fZGlza19rZXkua19vYmplY3RpZCkgeworCQkJCSAgICBrZXktPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpIHsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtNzk1LDExICs3NTcsMTEgQEAKIH0KIAogLyogRm9ybSB0aGUgcGF0aCB0byBhbiBpdGVtIGFuZCBwb3NpdGlvbiBpbiB0aGlzIGl0ZW0gd2hpY2ggY29udGFpbnMKLSAgIGZpbGUgYnl0ZSBkZWZpbmVkIGJ5IHBfc19rZXkuIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbQorICAgZmlsZSBieXRlIGRlZmluZWQgYnkga2V5LiBJZiB0aGVyZSBpcyBubyBzdWNoIGl0ZW0KICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSwgd2UgcG9pbnQgdGhlIHBhdGggdG8gdGhlIGl0ZW0gd2l0aAotICAgbWF4aW1hbCBrZXkgbGVzcyB0aGFuIHBfc19rZXksIGFuZCAqcF9uX3Bvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKKyAgIG1heGltYWwga2V5IGxlc3MgdGhhbiBrZXksIGFuZCAqcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQogICAgcGFzdCB0aGUgbGFzdCBlbnRyeS9ieXRlIGluIHRoZSBpdGVtLiAgSWYgc2VhcmNoaW5nIGZvciBlbnRyeSBpbiBhCi0gICBkaXJlY3RvcnkgaXRlbSwgYW5kIGl0IGlzIG5vdCBmb3VuZCwgKnBfbl9wb3NfaW5faXRlbSBpcyBzZXQgdG8gb25lCisgICBkaXJlY3RvcnkgaXRlbSwgYW5kIGl0IGlzIG5vdCBmb3VuZCwgKnBvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKICAgIGVudHJ5IG1vcmUgdGhhbiB0aGUgZW50cnkgd2l0aCBtYXhpbWFsIGtleSB3aGljaCBpcyBsZXNzIHRoYW4gdGhlCiAgICBzb3VnaHQga2V5LgogCkBAIC04MTAsNDggKzc3Miw0OCBAQAogICAgdW5pdHMgb2YgZGlyZWN0b3J5IGVudHJpZXMuICAqLwogCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1pbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCS8qIFBvaW50ZXIgdG8gdGhlIHN1cGVyIGJsb2NrLiAgICAgICAgICAqLworaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCS8qIFBvaW50ZXIgdG8gdGhlIHN1cGVyIGJsb2NrLiAgICAgICAgICAqLwogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX2NwdV9rZXksCS8qIEtleSB0byBzZWFyY2ggKGNwdSB2YXJpYWJsZSkgICAgICAgICAqLwotCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoCS8qIEZpbGxlZCB1cCBieSB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAqLworCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgJLyogRmlsbGVkIHVwIGJ5IHRoaXMgZnVuY3Rpb24uICAgICAgICAgICovCiAgICAgKQogewogCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWg7CS8qIHBvaW50ZXIgdG8gb24tZGlzayBzdHJ1Y3R1cmUgKi8KLQlpbnQgbl9ibGtfc2l6ZTsKKwlpbnQgYmxrX3NpemU7CiAJbG9mZl90IGl0ZW1fb2Zmc2V0LCBvZmZzZXQ7CiAJc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSBkZTsKIAlpbnQgcmV0dmFsOwogCiAJLyogSWYgc2VhcmNoaW5nIGZvciBkaXJlY3RvcnkgZW50cnkuICovCiAJaWYgKGlzX2RpcmVudHJ5X2NwdV9rZXkocF9jcHVfa2V5KSkKLQkJcmV0dXJuIHNlYXJjaF9ieV9lbnRyeV9rZXkocF9zX3NiLCBwX2NwdV9rZXksIHBfc19zZWFyY2hfcGF0aCwKKwkJcmV0dXJuIHNlYXJjaF9ieV9lbnRyeV9rZXkoc2IsIHBfY3B1X2tleSwgc2VhcmNoX3BhdGgsCiAJCQkJCSAgICZkZSk7CiAKIAkvKiBJZiBub3Qgc2VhcmNoaW5nIGZvciBkaXJlY3RvcnkgZW50cnkuICovCiAKIAkvKiBJZiBpdGVtIGlzIGZvdW5kLiAqLwotCXJldHZhbCA9IHNlYXJjaF9pdGVtKHBfc19zYiwgcF9jcHVfa2V5LCBwX3Nfc2VhcmNoX3BhdGgpOworCXJldHZhbCA9IHNlYXJjaF9pdGVtKHNiLCBwX2NwdV9rZXksIHNlYXJjaF9wYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKQogCQlyZXR1cm4gcmV0dmFsOwogCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewogCiAJCVJGQUxTRSghaWhfaXRlbV9sZW4KIAkJICAgICAgIChCX05fUElURU1fSEVBRAotCQkJKFBBVEhfUExBU1RfQlVGRkVSKHBfc19zZWFyY2hfcGF0aCksCi0JCQkgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19zZWFyY2hfcGF0aCkpKSwKKwkJCShQQVRIX1BMQVNUX0JVRkZFUihzZWFyY2hfcGF0aCksCisJCQkgUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSkpLAogCQkgICAgICAgIlBBUC01MTY1OiBpdGVtIGxlbmd0aCBlcXVhbHMgemVybyIpOwogCi0JCXBvc19pbl9pdGVtKHBfc19zZWFyY2hfcGF0aCkgPSAwOworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSAwOwogCQlyZXR1cm4gUE9TSVRJT05fRk9VTkQ7CiAJfQogCi0JUkZBTFNFKCFQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSwKKwlSRkFMU0UoIVBBVEhfTEFTVF9QT1NJVElPTihzZWFyY2hfcGF0aCksCiAJICAgICAgICJQQVAtNTE3MDogcG9zaXRpb24gZXF1YWxzIHplcm8iKTsKIAogCS8qIEl0ZW0gaXMgbm90IGZvdW5kLiBTZXQgcGF0aCB0byB0aGUgcHJldmlvdXMgaXRlbS4gKi8KIAlwX2xlX2loID0KLQkgICAgQl9OX1BJVEVNX0hFQUQoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3NlYXJjaF9wYXRoKSwKLQkJCSAgIC0tUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19zZWFyY2hfcGF0aCkpOwotCW5fYmxrX3NpemUgPSBwX3Nfc2ItPnNfYmxvY2tzaXplOworCSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihzZWFyY2hfcGF0aCksCisJCQkgICAtLVBBVEhfTEFTVF9QT1NJVElPTihzZWFyY2hfcGF0aCkpOworCWJsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCiAJaWYgKGNvbXBfc2hvcnRfa2V5cygmKHBfbGVfaWgtPmloX2tleSksIHBfY3B1X2tleSkpIHsKIAkJcmV0dXJuIEZJTEVfTk9UX0ZPVU5EOwpAQCAtODYzLDEwICs4MjUsMTAgQEAKIAogCS8qIE5lZWRlZCBieXRlIGlzIGNvbnRhaW5lZCBpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZSBwYXRoLiAqLwogCWlmIChpdGVtX29mZnNldCA8PSBvZmZzZXQgJiYKLQkgICAgaXRlbV9vZmZzZXQgKyBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgbl9ibGtfc2l6ZSkgPiBvZmZzZXQpIHsKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IG9mZnNldCAtIGl0ZW1fb2Zmc2V0OworCSAgICBpdGVtX29mZnNldCArIG9wX2J5dGVzX251bWJlcihwX2xlX2loLCBibGtfc2l6ZSkgPiBvZmZzZXQpIHsKKwkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpID0gb2Zmc2V0IC0gaXRlbV9vZmZzZXQ7CiAJCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkgewotCQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSAvPSBuX2Jsa19zaXplOworCQkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpIC89IGJsa19zaXplOwogCQl9CiAJCXJldHVybiBQT1NJVElPTl9GT1VORDsKIAl9CkBAIC04NzQsMzAgKzgzNiwzMCBAQAogCS8qIE5lZWRlZCBieXRlIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGl0ZW0gcG9pbnRlZCB0byBieSB0aGUKIAkgICBwYXRoLiBTZXQgcG9zX2luX2l0ZW0gb3V0IG9mIHRoZSBpdGVtLiAqLwogCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9CiAJCSAgICBpaF9pdGVtX2xlbihwX2xlX2loKSAvIFVORk1fUF9TSVpFOwogCWVsc2UKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IGloX2l0ZW1fbGVuKHBfbGVfaWgpOworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSBpaF9pdGVtX2xlbihwX2xlX2loKTsKIAogCXJldHVybiBQT1NJVElPTl9OT1RfRk9VTkQ7CiB9CiAKIC8qIENvbXBhcmUgZ2l2ZW4gaXRlbSBhbmQgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZSBwYXRoLiAqLwotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoKQoraW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOwogCXN0cnVjdCBpdGVtX2hlYWQgKmloOwogCiAJLyogTGFzdCBidWZmZXIgYXQgdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlLiAqLwotCWlmICghQl9JU19JTl9UUkVFKHBfc19iaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSkpCisJaWYgKCFCX0lTX0lOX1RSRUUoYmgpKQogCQlyZXR1cm4gMTsKIAogCS8qIExhc3QgcGF0aCBwb3NpdGlvbiBpcyBpbnZhbGlkLiAqLwotCWlmIChQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpID49IEJfTlJfSVRFTVMocF9zX2JoKSkKKwlpZiAoUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpID49IEJfTlJfSVRFTVMoYmgpKQogCQlyZXR1cm4gMTsKIAogCS8qIHdlIG5lZWQgb25seSB0byBrbm93LCB3aGV0aGVyIGl0IGlzIHRoZSBzYW1lIGl0ZW0gKi8KLQlpaCA9IGdldF9paChwX3NfcGF0aCk7CisJaWggPSBnZXRfaWgocGF0aCk7CiAJcmV0dXJuIG1lbWNtcChzdG9yZWRfaWgsIGloLCBJSF9TSVpFKTsKIH0KIApAQCAtOTI0LDkgKzg4Niw5IEBACiAJfQogCS8vIG5ldyBmaWxlIGdldHMgdHJ1bmNhdGVkCiAJaWYgKGdldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKGlub2RlKSA9PSBLRVlfRk9STUFUXzNfNikgewotCQkvLyAKKwkJLy8KIAkJcm91bmRfbGVuID0gUk9VTkRfVVAobmV3X2ZpbGVfbGVuZ3RoKTsKLQkJLyogdGhpcyB3YXMgbl9uZXdfZmlsZV9sZW5ndGggPCBsZV9paCAuLi4gKi8KKwkJLyogdGhpcyB3YXMgbmV3X2ZpbGVfbGVuZ3RoIDwgbGVfaWggLi4uICovCiAJCWlmIChyb3VuZF9sZW4gPCBsZV9paF9rX29mZnNldChsZV9paCkpIHsKIAkJCSpjdXRfc2l6ZSA9IC0oSUhfU0laRSArIGloX2l0ZW1fbGVuKGxlX2loKSk7CiAJCQlyZXR1cm4gTV9ERUxFVEU7CS8qIERlbGV0ZSB0aGlzIGl0ZW0uICovCkBAIC05ODYsOTYgKzk0OCw5NSBAQAogICAgIEluIGNhc2Ugb2YgZmlsZSB0cnVuY2F0ZSBjYWxjdWxhdGUgd2hldGhlciB0aGlzIGl0ZW0gbXVzdCBiZSBkZWxldGVkL3RydW5jYXRlZCBvciBsYXN0CiAgICAgdW5mb3JtYXR0ZWQgbm9kZSBvZiB0aGlzIGl0ZW0gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBkaXJlY3QgaXRlbS4KICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkZXRlcm1pbmF0aW9uIG9mIHdoYXQgYmFsYW5jZSBtb2RlIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBlbXBsb3kuICovCi1zdGF0aWMgY2hhciBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LCBpbnQgKnBfbl9yZW1vdmVkLAkvKiBOdW1iZXIgb2YgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggd2VyZSByZW1vdmVkCitzdGF0aWMgY2hhciBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwgaW50ICpyZW1vdmVkLAkvKiBOdW1iZXIgb2YgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggd2VyZSByZW1vdmVkCiAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgZnJvbSBlbmQgb2YgdGhlIGZpbGUuICovCi0JCQkJICAgICAgaW50ICpwX25fY3V0X3NpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuX25ld19maWxlX2xlbmd0aAkvKiBNQVhfS0VZX09GRlNFVCBpbiBjYXNlIG9mIGRlbGV0ZS4gKi8KKwkJCQkgICAgICBpbnQgKmN1dF9zaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3X2ZpbGVfbGVuZ3RoCS8qIE1BWF9LRVlfT0ZGU0VUIGluIGNhc2Ugb2YgZGVsZXRlLiAqLwogICAgICkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IGlub2RlLT5pX3NiOwotCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHBhdGgpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBQQVRIX1BMQVNUX0JVRkZFUihwYXRoKTsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCiAJLyogU3RhdF9kYXRhIGl0ZW0uICovCiAJaWYgKGlzX3N0YXRkYXRhX2xlX2loKHBfbGVfaWgpKSB7CiAKLQkJUkZBTFNFKG5fbmV3X2ZpbGVfbGVuZ3RoICE9IG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAorCQlSRkFMU0UobmV3X2ZpbGVfbGVuZ3RoICE9IG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAogCQkgICAgICAgIlBBUC01MjEwOiBtb2RlIG11c3QgYmUgTV9ERUxFVEUiKTsKIAotCQkqcF9uX2N1dF9zaXplID0gLShJSF9TSVpFICsgaWhfaXRlbV9sZW4ocF9sZV9paCkpOworCQkqY3V0X3NpemUgPSAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX2xlX2loKSk7CiAJCXJldHVybiBNX0RFTEVURTsKIAl9CiAKIAkvKiBEaXJlY3RvcnkgaXRlbS4gKi8KIAlpZiAoaXNfZGlyZW50cnlfbGVfaWgocF9sZV9paCkpCi0JCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlbnRyeV9pdGVtKHBfc19wYXRoLCBwX2xlX2loLCBpbm9kZSwKLQkJCQkJCSBuX25ld19maWxlX2xlbmd0aCwKLQkJCQkJCSBwX25fY3V0X3NpemUpOworCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZW50cnlfaXRlbShwYXRoLCBwX2xlX2loLCBpbm9kZSwKKwkJCQkJCSBuZXdfZmlsZV9sZW5ndGgsCisJCQkJCQkgY3V0X3NpemUpOwogCiAJLyogRGlyZWN0IGl0ZW0uICovCiAJaWYgKGlzX2RpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJcmV0dXJuIHByZXBhcmVfZm9yX2RpcmVjdF9pdGVtKHBfc19wYXRoLCBwX2xlX2loLCBpbm9kZSwKLQkJCQkJICAgICAgIG5fbmV3X2ZpbGVfbGVuZ3RoLCBwX25fY3V0X3NpemUpOworCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZWN0X2l0ZW0ocGF0aCwgcF9sZV9paCwgaW5vZGUsCisJCQkJCSAgICAgICBuZXdfZmlsZV9sZW5ndGgsIGN1dF9zaXplKTsKIAogCS8qIENhc2Ugb2YgYW4gaW5kaXJlY3QgaXRlbS4gKi8KIAl7Ci0JICAgIGludCBibGtfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJICAgIGludCBibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAkgICAgc3RydWN0IGl0ZW1faGVhZCBzX2loOwogCSAgICBpbnQgbmVlZF9yZV9zZWFyY2g7CiAJICAgIGludCBkZWxldGUgPSAwOwogCSAgICBpbnQgcmVzdWx0ID0gTV9DVVQ7CiAJICAgIGludCBwb3MgPSAwOwogCi0JICAgIGlmICggbl9uZXdfZmlsZV9sZW5ndGggPT0gbWF4X3JlaXNlcmZzX29mZnNldCAoaW5vZGUpICkgeworCSAgICBpZiAoIG5ld19maWxlX2xlbmd0aCA9PSBtYXhfcmVpc2VyZnNfb2Zmc2V0IChpbm9kZSkgKSB7CiAJCS8qIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoKSBpcyBjYWxsZWQgYnkKIAkJICogcmVpc2VyZnNfZGVsZXRlX2l0ZW0oKSAqLwotCQluX25ld19maWxlX2xlbmd0aCA9IDA7CisJCW5ld19maWxlX2xlbmd0aCA9IDA7CiAJCWRlbGV0ZSA9IDE7CiAJICAgIH0KIAogCSAgICBkbyB7CiAJCW5lZWRfcmVfc2VhcmNoID0gMDsKLQkJKnBfbl9jdXRfc2l6ZSA9IDA7Ci0JCXBfc19iaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKTsKLQkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQkqY3V0X3NpemUgPSAwOworCQliaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOworCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBhdGgpKTsKIAkJcG9zID0gSV9VTkZNX05VTSgmc19paCk7CiAKLQkJd2hpbGUgKGxlX2loX2tfb2Zmc2V0ICgmc19paCkgKyAocG9zIC0gMSkgKiBibGtfc2l6ZSA+IG5fbmV3X2ZpbGVfbGVuZ3RoKSB7CisJCXdoaWxlIChsZV9paF9rX29mZnNldCAoJnNfaWgpICsgKHBvcyAtIDEpICogYmxrX3NpemUgPiBuZXdfZmlsZV9sZW5ndGgpIHsKIAkJICAgIF9fbGUzMiAqdW5mbTsKIAkJICAgIF9fdTMyIGJsb2NrOwogCiAJCSAgICAvKiBFYWNoIHVuZm9ybWF0dGVkIGJsb2NrIGRlbGV0aW9uIG1heSBpbnZvbHZlIG9uZSBhZGRpdGlvbmFsCiAJCSAgICAgKiBiaXRtYXAgYmxvY2sgaW50byB0aGUgdHJhbnNhY3Rpb24sIHRoZXJlYnkgdGhlIGluaXRpYWwKIAkJICAgICAqIGpvdXJuYWwgc3BhY2UgcmVzZXJ2YXRpb24gbWlnaHQgbm90IGJlIGVub3VnaC4gKi8KLQkJICAgIGlmICghZGVsZXRlICYmICgqcF9uX2N1dF9zaXplKSAhPSAwICYmCi0JCQlyZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkgeworCQkgICAgaWYgKCFkZWxldGUgJiYgKCpjdXRfc2l6ZSkgIT0gMCAmJgorCQkJcmVpc2VyZnNfdHJhbnNhY3Rpb25fZnJlZV9zcGFjZSh0aCkgPCBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QpCiAJCQlicmVhazsKLQkJICAgIH0KIAotCQkgICAgdW5mbSA9IChfX2xlMzIgKilCX0lfUElURU0ocF9zX2JoLCAmc19paCkgKyBwb3MgLSAxOworCQkgICAgdW5mbSA9IChfX2xlMzIgKilCX0lfUElURU0oYmgsICZzX2loKSArIHBvcyAtIDE7CiAJCSAgICBibG9jayA9IGdldF9ibG9ja19udW0odW5mbSwgMCk7CiAKIAkJICAgIGlmIChibG9jayAhPSAwKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgcF9zX2JoLCAxKTsKKwkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsIGJoLCAxKTsKIAkJCXB1dF9ibG9ja19udW0odW5mbSwgMCwgMCk7Ci0JCQlqb3VybmFsX21hcmtfZGlydHkgKHRoLCBwX3Nfc2IsIHBfc19iaCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHNiLCBiaCk7CiAJCQlyZWlzZXJmc19mcmVlX2Jsb2NrKHRoLCBpbm9kZSwgYmxvY2ssIDEpOwogCQkgICAgfQogCiAJCSAgICBjb25kX3Jlc2NoZWQoKTsKIAotCQkgICAgaWYgKGl0ZW1fbW92ZWQgKCZzX2loLCBwX3NfcGF0aCkpICB7CisJCSAgICBpZiAoaXRlbV9tb3ZlZCAoJnNfaWgsIHBhdGgpKSAgewogCQkJbmVlZF9yZV9zZWFyY2ggPSAxOwogCQkJYnJlYWs7CiAJCSAgICB9CiAKIAkJICAgIHBvcyAtLTsKLQkJICAgICgqcF9uX3JlbW92ZWQpICsrOwotCQkgICAgKCpwX25fY3V0X3NpemUpIC09IFVORk1fUF9TSVpFOworCQkgICAgKCpyZW1vdmVkKSsrOworCQkgICAgKCpjdXRfc2l6ZSkgLT0gVU5GTV9QX1NJWkU7CiAKIAkJICAgIGlmIChwb3MgPT0gMCkgewotCQkJKCpwX25fY3V0X3NpemUpIC09IElIX1NJWkU7CisJCQkoKmN1dF9zaXplKSAtPSBJSF9TSVpFOwogCQkJcmVzdWx0ID0gTV9ERUxFVEU7CiAJCQlicmVhazsKIAkJICAgIH0KQEAgLTEwODMsMTIgKzEwNDQsMTIgQEAKIAkJLyogYSB0cmljay4gIElmIHRoZSBidWZmZXIgaGFzIGJlZW4gbG9nZ2VkLCB0aGlzIHdpbGwgZG8gbm90aGluZy4gIElmCiAJCSoqIHdlJ3ZlIGJyb2tlbiB0aGUgbG9vcCB3aXRob3V0IGxvZ2dpbmcgaXQsIGl0IHdpbGwgcmVzdG9yZSB0aGUKIAkJKiogYnVmZmVyICovCi0JCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc19zYiwgcF9zX2JoKTsKKwkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIoc2IsIGJoKTsKIAkgICAgfSB3aGlsZSAobmVlZF9yZV9zZWFyY2ggJiYKLQkJICAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKLQkgICAgcG9zX2luX2l0ZW0ocF9zX3BhdGgpID0gcG9zICogVU5GTV9QX1NJWkU7CisJCSAgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsIGl0ZW1fa2V5LCBwYXRoKSA9PSBQT1NJVElPTl9GT1VORCk7CisJICAgIHBvc19pbl9pdGVtKHBhdGgpID0gcG9zICogVU5GTV9QX1NJWkU7CiAKLQkgICAgaWYgKCpwX25fY3V0X3NpemUgPT0gMCkgeworCSAgICBpZiAoKmN1dF9zaXplID09IDApIHsKIAkJLyogTm90aGluZyB3ZXJlIGN1dC4gbWF5YmUgY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gdGhlCiAJCSAqIGRpcmVjdCBpdGVtPyAqLwogCQlyZXN1bHQgPSBNX0NPTlZFUlQ7CkBAIC0xMDk4LDQ1ICsxMDU5LDQ1IEBACiB9CiAKIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggd2lsbCBiZSBkZWxldGVkIG9yIGN1dCBkdXJpbmcgYmFsYW5jZSAqLwotc3RhdGljIGludCBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgY2hhciBjX21vZGUpCitzdGF0aWMgaW50IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGNoYXIgbW9kZSkKIHsKLQlpbnQgbl9kZWxfc2l6ZTsKLQlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHBfc190Yi0+dGJfcGF0aCk7CisJaW50IGRlbF9zaXplOworCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQodGItPnRiX3BhdGgpOwogCiAJaWYgKGlzX3N0YXRkYXRhX2xlX2loKHBfbGVfaWgpKQogCQlyZXR1cm4gMDsKIAotCW5fZGVsX3NpemUgPQotCSAgICAoY19tb2RlID09Ci0JICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihwX2xlX2loKSA6IC1wX3NfdGItPmluc2VydF9zaXplWzBdOworCWRlbF9zaXplID0KKwkgICAgKG1vZGUgPT0KKwkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKHBfbGVfaWgpIDogLXRiLT5pbnNlcnRfc2l6ZVswXTsKIAlpZiAoaXNfZGlyZW50cnlfbGVfaWgocF9sZV9paCkpIHsKLQkJLy8gcmV0dXJuIEVNUFRZX0RJUl9TSVpFOyAvKiBXZSBkZWxldGUgZW10eSBkaXJlY3RvcmlzIG9ubHkuICovCi0JCS8vIHdlIGNhbid0IHVzZSBFTVBUWV9ESVJfU0laRSwgYXMgb2xkIGZvcm1hdCBkaXJzIGhhdmUgYSBkaWZmZXJlbnQKLQkJLy8gZW1wdHkgc2l6ZS4gIGljay4gRklYTUUsIGlzIHRoaXMgcmlnaHQ/Ci0JCS8vCi0JCXJldHVybiBuX2RlbF9zaXplOworCQkvKiByZXR1cm4gRU1QVFlfRElSX1NJWkU7IFdlIGRlbGV0ZSBlbXR5IGRpcmVjdG9yaXMgb25seS4KKwkJICogd2UgY2FuJ3QgdXNlIEVNUFRZX0RJUl9TSVpFLCBhcyBvbGQgZm9ybWF0IGRpcnMgaGF2ZSBhIGRpZmZlcmVudAorCQkgKiBlbXB0eSBzaXplLiAgaWNrLiBGSVhNRSwgaXMgdGhpcyByaWdodD8gKi8KKwkJcmV0dXJuIGRlbF9zaXplOwogCX0KIAogCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJbl9kZWxfc2l6ZSA9IChuX2RlbF9zaXplIC8gVU5GTV9QX1NJWkUpICogKFBBVEhfUExBU1RfQlVGRkVSKHBfc190Yi0+dGJfcGF0aCktPmJfc2l6ZSk7CS8vIC0gZ2V0X2loX2ZyZWVfc3BhY2UgKHBfbGVfaWgpOwotCXJldHVybiBuX2RlbF9zaXplOworCQlkZWxfc2l6ZSA9IChkZWxfc2l6ZSAvIFVORk1fUF9TSVpFKSAqCisJCQkJKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKS0+Yl9zaXplKTsKKwlyZXR1cm4gZGVsX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfdGJfc3RydWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCQkJICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLCBpbnQgbl9zaXplKQorCQkJICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBpbnQgc2l6ZSkKIHsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JbWVtc2V0KHBfc190YiwgJ1wwJywgc2l6ZW9mKHN0cnVjdCB0cmVlX2JhbGFuY2UpKTsKLQlwX3NfdGItPnRyYW5zYWN0aW9uX2hhbmRsZSA9IHRoOwotCXBfc190Yi0+dGJfc2IgPSBwX3Nfc2I7Ci0JcF9zX3RiLT50Yl9wYXRoID0gcF9zX3BhdGg7Ci0JUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSA9IE5VTEw7Ci0JUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSAwOwotCXBfc190Yi0+aW5zZXJ0X3NpemVbMF0gPSBuX3NpemU7CisJbWVtc2V0KHRiLCAnXDAnLCBzaXplb2Yoc3RydWN0IHRyZWVfYmFsYW5jZSkpOworCXRiLT50cmFuc2FjdGlvbl9oYW5kbGUgPSB0aDsKKwl0Yi0+dGJfc2IgPSBzYjsKKwl0Yi0+dGJfcGF0aCA9IHBhdGg7CisJUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gTlVMTDsKKwlQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gMDsKKwl0Yi0+aW5zZXJ0X3NpemVbMF0gPSBzaXplOwogfQogCiB2b2lkIHBhZGRfaXRlbShjaGFyICppdGVtLCBpbnQgdG90YWxfbGVuZ3RoLCBpbnQgbGVuZ3RoKQpAQCAtMTE3NSw3MyArMTEzNiw3NyBAQAogfQogI2VuZGlmCiAKLS8qIERlbGV0ZSBvYmplY3QgaXRlbS4gKi8KLWludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwJLyogUGF0aCB0byB0aGUgZGVsZXRlZCBpdGVtLiAqLwotCQkJIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCS8qIEtleSB0byBzZWFyY2ggZm9yIHRoZSBkZWxldGVkIGl0ZW0uICAqLwotCQkJIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAkvKiBpbm9kZSBpcyBoZXJlIGp1c3QgdG8gdXBkYXRlIGlfYmxvY2tzIGFuZCBxdW90YXMgKi8KLQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc191bl9iaCkKLXsJCQkJLyogTlVMTCBvciB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIuICAgICovCi0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfaW5vZGUtPmlfc2I7CisvKiBEZWxldGUgb2JqZWN0IGl0ZW0uCisgKiB0aCAgICAgICAtIGFjdGl2ZSB0cmFuc2FjdGlvbiBoYW5kbGUKKyAqIHBhdGggICAgIC0gcGF0aCB0byB0aGUgZGVsZXRlZCBpdGVtCisgKiBpdGVtX2tleSAtIGtleSB0byBzZWFyY2ggZm9yIHRoZSBkZWxldGVkIGl0ZW0KKyAqIGluZG9kZSAgIC0gdXNlZCBmb3IgdXBkYXRpbmcgaV9ibG9ja3MgYW5kIHF1b3RhcworICogdW5fYmggICAgLSBOVUxMIG9yIHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlcgorICovCitpbnQgcmVpc2VyZnNfZGVsZXRlX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqaXRlbV9rZXksCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICp1bl9iaCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX2RlbF9iYWxhbmNlOwogCXN0cnVjdCBpdGVtX2hlYWQgc19paDsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpxX2loOwogCWludCBxdW90YV9jdXRfYnl0ZXM7Ci0JaW50IG5fcmV0X3ZhbHVlLCBuX2RlbF9zaXplLCBuX3JlbW92ZWQ7CisJaW50IHJldF92YWx1ZSwgZGVsX3NpemUsIHJlbW92ZWQ7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQljaGFyIGNfbW9kZTsKLQlpbnQgbl9pdGVyID0gMDsKKwljaGFyIG1vZGU7CisJaW50IGl0ZXIgPSAwOwogI2VuZGlmCiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWluaXRfdGJfc3RydWN0KHRoLCAmc19kZWxfYmFsYW5jZSwgcF9zX3NiLCBwX3NfcGF0aCwKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfZGVsX2JhbGFuY2UsIHNiLCBwYXRoLAogCQkgICAgICAgMCAvKnNpemUgaXMgdW5rbm93biAqLyApOwogCiAJd2hpbGUgKDEpIHsKLQkJbl9yZW1vdmVkID0gMDsKKwkJcmVtb3ZlZCA9IDA7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJbl9pdGVyKys7Ci0JCWNfbW9kZSA9CisJCWl0ZXIrKzsKKwkJbW9kZSA9CiAjZW5kaWYKLQkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIHBfc19pbm9kZSwgcF9zX3BhdGgsCi0JCQkJCSAgICAgIHBfc19pdGVtX2tleSwgJm5fcmVtb3ZlZCwKLQkJCQkJICAgICAgJm5fZGVsX3NpemUsCi0JCQkJCSAgICAgIG1heF9yZWlzZXJmc19vZmZzZXQocF9zX2lub2RlKSk7CisJCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBpbm9kZSwgcGF0aCwKKwkJCQkJICAgICAgaXRlbV9rZXksICZyZW1vdmVkLAorCQkJCQkgICAgICAmZGVsX3NpemUsCisJCQkJCSAgICAgIG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpKTsKIAotCQlSRkFMU0UoY19tb2RlICE9IE1fREVMRVRFLCAiUEFQLTUzMjA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOworCQlSRkFMU0UobW9kZSAhPSBNX0RFTEVURSwgIlBBUC01MzIwOiBtb2RlIG11c3QgYmUgTV9ERUxFVEUiKTsKIAotCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7Ci0JCXNfZGVsX2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0gPSBuX2RlbF9zaXplOworCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBhdGgpKTsKKwkJc19kZWxfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IGRlbF9zaXplOwogCi0JCW5fcmV0X3ZhbHVlID0gZml4X25vZGVzKE1fREVMRVRFLCAmc19kZWxfYmFsYW5jZSwgTlVMTCwgTlVMTCk7Ci0JCWlmIChuX3JldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQorCQlyZXRfdmFsdWUgPSBmaXhfbm9kZXMoTV9ERUxFVEUsICZzX2RlbF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQogCQkJYnJlYWs7CiAKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGRlbGV0ZV9pdGVtX3Jlc3RhcnRlZCk7CisJCVBST0NfSU5GT19JTkMoc2IsIGRlbGV0ZV9pdGVtX3Jlc3RhcnRlZCk7CiAKIAkJLy8gZmlsZSBzeXN0ZW0gY2hhbmdlZCwgcmVwZWF0IHNlYXJjaAotCQluX3JldF92YWx1ZSA9Ci0JCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpOwotCQlpZiAobl9yZXRfdmFsdWUgPT0gSU9fRVJST1IpCisJCXJldF92YWx1ZSA9CisJCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpOworCQlpZiAocmV0X3ZhbHVlID09IElPX0VSUk9SKQogCQkJYnJlYWs7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBGSUxFX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAidnMtNTM0MDogcmVpc2VyZnNfZGVsZXRlX2l0ZW06ICIKKwkJaWYgKHJldF92YWx1ZSA9PSBGSUxFX05PVF9GT1VORCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTUzNDAiLAogCQkJCQkgIm5vIGl0ZW1zIG9mIHRoZSBmaWxlICVLIGZvdW5kIiwKLQkJCQkJIHBfc19pdGVtX2tleSk7CisJCQkJCSBpdGVtX2tleSk7CiAJCQlicmVhazsKIAkJfQogCX0JCQkvKiB3aGlsZSAoMSkgKi8KIAotCWlmIChuX3JldF92YWx1ZSAhPSBDQVJSWV9PTikgeworCWlmIChyZXRfdmFsdWUgIT0gQ0FSUllfT04pIHsKIAkJdW5maXhfbm9kZXMoJnNfZGVsX2JhbGFuY2UpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gcmVpc2VyZnNfZGVsZXRlX2l0ZW0gcmV0dXJucyBpdGVtIGxlbmd0aCB3aGVuIHN1Y2Nlc3MKLQluX3JldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfZGVsX2JhbGFuY2UsIE1fREVMRVRFKTsKLQlxX2loID0gZ2V0X2loKHBfc19wYXRoKTsKKwlyZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2RlbF9iYWxhbmNlLCBNX0RFTEVURSk7CisJcV9paCA9IGdldF9paChwYXRoKTsKIAlxdW90YV9jdXRfYnl0ZXMgPSBpaF9pdGVtX2xlbihxX2loKTsKIAogCS8qIGhhY2sgc28gdGhlIHF1b3RhIGNvZGUgZG9lc24ndCBoYXZlIHRvIGd1ZXNzIGlmIHRoZSBmaWxlCkBAIC0xMjUwLDE1ICsxMjE1LDE1IEBACiAJICoqIHNwbGl0IGludG8gbXVsdGlwbGUgaXRlbXMsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gZGVjcmVtZW50IGZvcgogCSAqKiB0aGUgdW5mbSBub2RlIG9uY2UKIAkgKi8KLQlpZiAoIVNfSVNMTksocF9zX2lub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChxX2loKSkgewotCQlpZiAoKGxlX2loX2tfb2Zmc2V0KHFfaWgpICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSkgPT0gMSkgewotCQkJcXVvdGFfY3V0X2J5dGVzID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOworCWlmICghU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgocV9paCkpIHsKKwkJaWYgKChsZV9paF9rX29mZnNldChxX2loKSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSkgPT0gMSkgeworCQkJcXVvdGFfY3V0X2J5dGVzID0gc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CiAJCX0gZWxzZSB7CiAJCQlxdW90YV9jdXRfYnl0ZXMgPSAwOwogCQl9CiAJfQogCi0JaWYgKHBfc191bl9iaCkgeworCWlmICh1bl9iaCkgewogCQlpbnQgb2ZmOwogCQljaGFyICpkYXRhOwogCkBAIC0xMjc2LDMxICsxMjQxLDMxIEBACiAJCSAqKiBUaGUgdW5mb3JtYXR0ZWQgbm9kZSBtdXN0IGJlIGRpcnRpZWQgbGF0ZXIgb24uICBXZSBjYW4ndCBiZQogCQkgKiogc3VyZSBoZXJlIGlmIHRoZSBlbnRpcmUgdGFpbCBoYXMgYmVlbiBkZWxldGVkIHlldC4KIAkJICoqCi0JCSAqKiBwX3NfdW5fYmggaXMgZnJvbSB0aGUgcGFnZSBjYWNoZSAoYWxsIHVuZm9ybWF0dGVkIG5vZGVzIGFyZQorCQkgKiogdW5fYmggaXMgZnJvbSB0aGUgcGFnZSBjYWNoZSAoYWxsIHVuZm9ybWF0dGVkIG5vZGVzIGFyZQogCQkgKiogZnJvbSB0aGUgcGFnZSBjYWNoZSkgYW5kIG1pZ2h0IGJlIGEgaGlnaG1lbSBwYWdlLiAgU28sIHdlCi0JCSAqKiBjYW4ndCB1c2UgcF9zX3VuX2JoLT5iX2RhdGEuCisJCSAqKiBjYW4ndCB1c2UgdW5fYmgtPmJfZGF0YS4KIAkJICoqIC1jbG0KIAkJICovCiAKLQkJZGF0YSA9IGttYXBfYXRvbWljKHBfc191bl9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7CisJCWRhdGEgPSBrbWFwX2F0b21pYyh1bl9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7CiAJCW9mZiA9ICgobGVfaWhfa19vZmZzZXQoJnNfaWgpIC0gMSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpOwogCQltZW1jcHkoZGF0YSArIG9mZiwKLQkJICAgICAgIEJfSV9QSVRFTShQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksICZzX2loKSwKLQkJICAgICAgIG5fcmV0X3ZhbHVlKTsKKwkJICAgICAgIEJfSV9QSVRFTShQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSwgJnNfaWgpLAorCQkgICAgICAgcmV0X3ZhbHVlKTsKIAkJa3VubWFwX2F0b21pYyhkYXRhLCBLTV9VU0VSMCk7CiAJfQogCS8qIFBlcmZvcm0gYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgaGF2ZSBiZWVuIGNvbGxlY3RlZCBhdCBvbmNlLiAqLwogCWRvX2JhbGFuY2UoJnNfZGVsX2JhbGFuY2UsIE5VTEwsIE5VTEwsIE1fREVMRVRFKTsKIAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCi0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIGRlbGV0ZV9pdGVtKCk6IGZyZWVpbmcgJXUsIGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBwX3NfaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoJnNfaWgpKTsKKwkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoJnNfaWgpKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CiAKIAkvKiBSZXR1cm4gZGVsZXRlZCBib2R5IGxlbmd0aCAqLwotCXJldHVybiBuX3JldF92YWx1ZTsKKwlyZXR1cm4gcmV0X3ZhbHVlOwogfQogCiAvKiBTdW1tYXJ5IE9mIE1lY2hhbmlzbXMgRm9yIEhhbmRsaW5nIENvbGxpc2lvbnMgQmV0d2VlbiBQcm9jZXNzZXM6CkBAIC0xMzM4LDEwICsxMzAzLDkgQEAKIAl3aGlsZSAoMSkgewogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwgJmNwdV9rZXksICZwYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJICJ2cy01MzUwOiByZWlzZXJmc19kZWxldGVfc29saWRfaXRlbTogIgotCQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBkZWxldGUgJUsiLAotCQkJCQkgJmNwdV9rZXkpOworCQkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ2cy01MzUwIiwKKwkJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyAiCisJCQkJICAgICAgICJ0byBkZWxldGUgJUsiLCAmY3B1X2tleSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAocmV0dmFsICE9IElURU1fRk9VTkQpIHsKQEAgLTEzNTUsOSArMTMxOSw4IEBACiAJCQkgICAgIEdFVF9HRU5FUkFUSU9OX05VTUJFUihsZV9rZXlfa19vZmZzZXQKIAkJCQkJCSAgIChsZV9rZXlfdmVyc2lvbihrZXkpLAogCQkJCQkJICAgIGtleSkpID09IDEpKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJCQkgInZzLTUzNTU6IHJlaXNlcmZzX2RlbGV0ZV9zb2xpZF9pdGVtOiAlayBub3QgZm91bmQiLAotCQkJCQkJIGtleSk7CisJCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgInZzLTUzNTUiLAorCQkJCQkJICIlayBub3QgZm91bmQiLCBrZXkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCF0Yl9pbml0KSB7CkBAIC0xMzg5LDggKzEzNTIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLy8gSU9fRVJST1IsIE5PX0RJU0tfU1BBQ0UsIGV0YwotCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCSAidnMtNTM2MDogcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW06ICIKKwkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgInZzLTUzNjAiLAogCQkJCSAiY291bGQgbm90IGRlbGV0ZSAlSyBkdWUgdG8gZml4X25vZGVzIGZhaWx1cmUiLAogCQkJCSAmY3B1X2tleSk7CiAJCXVuZml4X25vZGVzKCZ0Yik7CkBAIC0xNDYyLDM2ICsxNDI0LDM3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWF5YmVfaW5kaXJlY3RfdG9fZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKKwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCi0JCQkJICAgIGxvZmZfdCBuX25ld19maWxlX3NpemUsIGNoYXIgKnBfY19tb2RlKQorCQkJCSAgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwKKwkJCQkgICAgbG9mZl90IG5ld19maWxlX3NpemUsIGNoYXIgKm1vZGUpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfaW5vZGUtPmlfc2I7Ci0JaW50IG5fYmxvY2tfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBibG9ja19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWludCBjdXRfYnl0ZXM7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7Ci0JQlVHX09OKG5fbmV3X2ZpbGVfc2l6ZSAhPSBwX3NfaW5vZGUtPmlfc2l6ZSk7CisJQlVHX09OKG5ld19maWxlX3NpemUgIT0gaW5vZGUtPmlfc2l6ZSk7CiAKIAkvKiB0aGUgcGFnZSBiZWluZyBzZW50IGluIGNvdWxkIGJlIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGkvbyBlcnJvcgogCSAqKiByZWFkaW5nIGluIHRoZSBsYXN0IGJsb2NrLiAgVGhlIHVzZXIgd2lsbCBoaXQgcHJvYmxlbXMgdHJ5aW5nIHRvCiAJICoqIHJlYWQgdGhlIGZpbGUsIGJ1dCBmb3Igbm93IHdlIGp1c3Qgc2tpcCB0aGUgaW5kaXJlY3QyZGlyZWN0CiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZwX3NfaW5vZGUtPmlfY291bnQpID4gMSB8fAotCSAgICAhdGFpbF9oYXNfdG9fYmVfcGFja2VkKHBfc19pbm9kZSkgfHwKLQkgICAgIXBhZ2UgfHwgKFJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spKSB7Ci0JCS8vIGxlYXZlIHRhaWwgaW4gYW4gdW5mb3JtYXR0ZWQgbm9kZSAgICAKLQkJKnBfY19tb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKKwlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSA+IDEgfHwKKwkgICAgIXRhaWxfaGFzX3RvX2JlX3BhY2tlZChpbm9kZSkgfHwKKwkgICAgIXBhZ2UgfHwgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKKwkJLyogbGVhdmUgdGFpbCBpbiBhbiB1bmZvcm1hdHRlZCBub2RlICovCisJCSptb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKIAkJY3V0X2J5dGVzID0KLQkJICAgIG5fYmxvY2tfc2l6ZSAtIChuX25ld19maWxlX3NpemUgJiAobl9ibG9ja19zaXplIC0gMSkpOwotCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQkgICAgYmxvY2tfc2l6ZSAtIChuZXdfZmlsZV9zaXplICYgKGJsb2NrX3NpemUgLSAxKSk7CisJCXBhdGhyZWxzZShwYXRoKTsKIAkJcmV0dXJuIGN1dF9ieXRlczsKIAl9Ci0JLyogUGVybW9ybSB0aGUgY29udmVyc2lvbiB0byBhIGRpcmVjdF9pdGVtLiAqLwotCS8qcmV0dXJuIGluZGlyZWN0X3RvX2RpcmVjdCAocF9zX2lub2RlLCBwX3NfcGF0aCwgcF9zX2l0ZW1fa2V5LCBuX25ld19maWxlX3NpemUsIHBfY19tb2RlKTsgKi8KLQlyZXR1cm4gaW5kaXJlY3QyZGlyZWN0KHRoLCBwX3NfaW5vZGUsIHBhZ2UsIHBfc19wYXRoLCBwX3NfaXRlbV9rZXksCi0JCQkgICAgICAgbl9uZXdfZmlsZV9zaXplLCBwX2NfbW9kZSk7CisJLyogUGVyZm9ybSB0aGUgY29udmVyc2lvbiB0byBhIGRpcmVjdF9pdGVtLiAqLworCS8qIHJldHVybiBpbmRpcmVjdF90b19kaXJlY3QoaW5vZGUsIHBhdGgsIGl0ZW1fa2V5LAorCQkJCSAgbmV3X2ZpbGVfc2l6ZSwgbW9kZSk7ICovCisJcmV0dXJuIGluZGlyZWN0MmRpcmVjdCh0aCwgaW5vZGUsIHBhZ2UsIHBhdGgsIGl0ZW1fa2V5LAorCQkJICAgICAgIG5ld19maWxlX3NpemUsIG1vZGUpOwogfQogCiAvKiB3ZSBkaWQgaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24uIEFuZCB3ZSBoYXZlIGluc2VydGVkIGRpcmVjdApAQCAtMTUxNSw4ICsxNDc4LDggQEAKIAkJLyogbG9vayBmb3IgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgdGFpbCAqLwogCQlpZiAoc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoaW5vZGUtPmlfc2IsICZ0YWlsX2tleSwgcGF0aCkgPT0KIAkJICAgIFBPU0lUSU9OX05PVF9GT1VORCkKLQkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLAotCQkJCSAgICAgICAidnMtNTYxNTogaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjazogZm91bmQgaW52YWxpZCBpdGVtIik7CisJCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwgInZzLTU2MTUiLAorCQkJCSAgICAgICAiZm91bmQgaW52YWxpZCBpdGVtIik7CiAJCVJGQUxTRShwYXRoLT5wb3NfaW5faXRlbSAhPQogCQkgICAgICAgaWhfaXRlbV9sZW4oUEFUSF9QSVRFTV9IRUFEKHBhdGgpKSAtIDEsCiAJCSAgICAgICAidnMtNTYxNjogYXBwZW5kZWQgYnl0ZXMgZm91bmQiKTsKQEAgLTE1MzMsMzggKzE0OTYsMzkgQEAKIAkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnRhaWxfa2V5LAogCQkJCSAgICAgY3B1X2tleV9rX29mZnNldCgmdGFpbF9rZXkpIC0gcmVtb3ZlZCk7CiAJfQotCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkgImluZGlyZWN0X3RvX2RpcmVjdF9yb2xsX2JhY2s6IGluZGlyZWN0X3RvX2RpcmVjdCBjb252ZXJzaW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGR1ZSB0byBsYWNrIG9mIGRpc2sgc3BhY2UiKTsKKwlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAicmVpc2VyZnMtNTA5MSIsICJpbmRpcmVjdF90b19kaXJlY3QgIgorCQkJICJjb252ZXJzaW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGR1ZSB0byAiCisJCQkgImxhY2sgb2YgZGlzayBzcGFjZSIpOwogCS8vbWFya19maWxlX3dpdGhvdXRfdGFpbCAoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogfQogCiAvKiAoVHJ1bmNhdGUgb3IgY3V0IGVudHJ5KSBvciBkZWxldGUgb2JqZWN0IGl0ZW0uIFJldHVybnMgPCAwIG9uIGZhaWx1cmUgKi8KIGludCByZWlzZXJmc19jdXRfZnJvbV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKLQkJCSAgIHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCi0JCQkgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKLQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3Qgbl9uZXdfZmlsZV9zaXplKQorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAorCQkJICAgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LAorCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgbmV3X2ZpbGVfc2l6ZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJLyogRXZlcnkgZnVuY3Rpb24gd2hpY2ggaXMgZ29pbmcgdG8gY2FsbCBkb19iYWxhbmNlIG11c3QgZmlyc3QKIAkgICBjcmVhdGUgYSB0cmVlX2JhbGFuY2Ugc3RydWN0dXJlLiAgVGhlbiBpdCBtdXN0IGZpbGwgdXAgdGhpcwogCSAgIHN0cnVjdHVyZSBieSB1c2luZyB0aGUgaW5pdF90Yl9zdHJ1Y3QgYW5kIGZpeF9ub2RlcyBmdW5jdGlvbnMuCiAJICAgQWZ0ZXIgdGhhdCB3ZSBjYW4gbWFrZSB0cmVlIGJhbGFuY2luZy4gKi8KIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfY3V0X2JhbGFuY2U7CiAJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paDsKLQlpbnQgbl9jdXRfc2l6ZSA9IDAsCS8qIEFtb3VudCB0byBiZSBjdXQuICovCi0JICAgIG5fcmV0X3ZhbHVlID0gQ0FSUllfT04sIG5fcmVtb3ZlZCA9IDAsCS8qIE51bWJlciBvZiB0aGUgcmVtb3ZlZCB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KLQkgICAgbl9pc19pbm9kZV9sb2NrZWQgPSAwOwotCWNoYXIgY19tb2RlOwkJLyogTW9kZSBvZiB0aGUgYmFsYW5jZS4gKi8KKwlpbnQgY3V0X3NpemUgPSAwLAkvKiBBbW91bnQgdG8gYmUgY3V0LiAqLworCSAgICByZXRfdmFsdWUgPSBDQVJSWV9PTiwgcmVtb3ZlZCA9IDAsCS8qIE51bWJlciBvZiB0aGUgcmVtb3ZlZCB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KKwkgICAgaXNfaW5vZGVfbG9ja2VkID0gMDsKKwljaGFyIG1vZGU7CQkvKiBNb2RlIG9mIHRoZSBiYWxhbmNlLiAqLwogCWludCByZXR2YWwyID0gLTE7CiAJaW50IHF1b3RhX2N1dF9ieXRlczsKIAlsb2ZmX3QgdGFpbF9wb3MgPSAwOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQlpbml0X3RiX3N0cnVjdCh0aCwgJnNfY3V0X2JhbGFuY2UsIHBfc19pbm9kZS0+aV9zYiwgcF9zX3BhdGgsCi0JCSAgICAgICBuX2N1dF9zaXplKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfY3V0X2JhbGFuY2UsIGlub2RlLT5pX3NiLCBwYXRoLAorCQkgICAgICAgY3V0X3NpemUpOwogCiAJLyogUmVwZWF0IHRoaXMgbG9vcCB1bnRpbCB3ZSBlaXRoZXIgY3V0IHRoZSBpdGVtIHdpdGhvdXQgbmVlZGluZwogCSAgIHRvIGJhbGFuY2UsIG9yIHdlIGZpeF9ub2RlcyB3aXRob3V0IHNjaGVkdWxlIG9jY3VycmluZyAqLwpAQCAtMTU3NCwxNDQgKzE1MzgsMTQyIEBACiAJCSAgIGZyZWUgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggYXJlIHBvaW50ZWQgdG8gYnkgdGhlIGN1dAogCQkgICBwb2ludGVycy4gKi8KIAotCQljX21vZGUgPQotCQkgICAgcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCwKLQkJCQkJICAgICAgcF9zX2l0ZW1fa2V5LCAmbl9yZW1vdmVkLAotCQkJCQkgICAgICAmbl9jdXRfc2l6ZSwgbl9uZXdfZmlsZV9zaXplKTsKLQkJaWYgKGNfbW9kZSA9PSBNX0NPTlZFUlQpIHsKKwkJbW9kZSA9CisJCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBpbm9kZSwgcGF0aCwKKwkJCQkJICAgICAgaXRlbV9rZXksICZyZW1vdmVkLAorCQkJCQkgICAgICAmY3V0X3NpemUsIG5ld19maWxlX3NpemUpOworCQlpZiAobW9kZSA9PSBNX0NPTlZFUlQpIHsKIAkJCS8qIGNvbnZlcnQgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHRvIGRpcmVjdCBpdGVtIG9yIGxlYXZlCiAJCQkgICB0YWlsIGluIHRoZSB1bmZvcm1hdHRlZCBub2RlICovCi0JCQlSRkFMU0Uobl9yZXRfdmFsdWUgIT0gQ0FSUllfT04sCisJCQlSRkFMU0UocmV0X3ZhbHVlICE9IENBUlJZX09OLAogCQkJICAgICAgICJQQVAtNTU3MDogY2FuIG5vdCBjb252ZXJ0IHR3aWNlIik7CiAKLQkJCW5fcmV0X3ZhbHVlID0KLQkJCSAgICBtYXliZV9pbmRpcmVjdF90b19kaXJlY3QodGgsIHBfc19pbm9kZSwgcGFnZSwKLQkJCQkJCSAgICAgcF9zX3BhdGgsIHBfc19pdGVtX2tleSwKLQkJCQkJCSAgICAgbl9uZXdfZmlsZV9zaXplLCAmY19tb2RlKTsKLQkJCWlmIChjX21vZGUgPT0gTV9TS0lQX0JBTEFOQ0lORykKKwkJCXJldF92YWx1ZSA9CisJCQkgICAgbWF5YmVfaW5kaXJlY3RfdG9fZGlyZWN0KHRoLCBpbm9kZSwgcGFnZSwKKwkJCQkJCSAgICAgcGF0aCwgaXRlbV9rZXksCisJCQkJCQkgICAgIG5ld19maWxlX3NpemUsICZtb2RlKTsKKwkJCWlmIChtb2RlID09IE1fU0tJUF9CQUxBTkNJTkcpCiAJCQkJLyogdGFpbCBoYXMgYmVlbiBsZWZ0IGluIHRoZSB1bmZvcm1hdHRlZCBub2RlICovCi0JCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJCXJldHVybiByZXRfdmFsdWU7CiAKLQkJCW5faXNfaW5vZGVfbG9ja2VkID0gMTsKKwkJCWlzX2lub2RlX2xvY2tlZCA9IDE7CiAKIAkJCS8qIHJlbW92aW5nIG9mIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSB3aWxsIGNoYW5nZSB2YWx1ZSB3ZQogCQkJICAgaGF2ZSB0byByZXR1cm4gdG8gdHJ1bmNhdGUuIFNhdmUgaXQgKi8KLQkJCXJldHZhbDIgPSBuX3JldF92YWx1ZTsKLQkJCS8qcmV0dmFsMiA9IHBfc19zYi0+c19ibG9ja3NpemUgLSAobl9uZXdfZmlsZV9zaXplICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSk7ICovCisJCQlyZXR2YWwyID0gcmV0X3ZhbHVlOworCQkJLypyZXR2YWwyID0gc2ItPnNfYmxvY2tzaXplIC0gKG5ld19maWxlX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpOyAqLwogCiAJCQkvKiBTbywgd2UgaGF2ZSBwZXJmb3JtZWQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGNvbnZlcnNpb246CiAJCQkgICBpbnNlcnRpbmcgdGhlIG5ldyBkaXJlY3QgaXRlbS4gIE5vdyB3ZSBhcmUgcmVtb3ZpbmcgdGhlCiAJCQkgICBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlci4gU2V0IGtleSB0byBzZWFyY2ggZm9yCiAJCQkgICBpdC4gKi8KLQkJCXNldF9jcHVfa2V5X2tfdHlwZShwX3NfaXRlbV9rZXksIFRZUEVfSU5ESVJFQ1QpOwotCQkJcF9zX2l0ZW1fa2V5LT5rZXlfbGVuZ3RoID0gNDsKLQkJCW5fbmV3X2ZpbGVfc2l6ZSAtPQotCQkJICAgIChuX25ld19maWxlX3NpemUgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKLQkJCXRhaWxfcG9zID0gbl9uZXdfZmlsZV9zaXplOwotCQkJc2V0X2NwdV9rZXlfa19vZmZzZXQocF9zX2l0ZW1fa2V5LCBuX25ld19maWxlX3NpemUgKyAxKTsKKwkJCXNldF9jcHVfa2V5X2tfdHlwZShpdGVtX2tleSwgVFlQRV9JTkRJUkVDVCk7CisJCQlpdGVtX2tleS0+a2V5X2xlbmd0aCA9IDQ7CisJCQluZXdfZmlsZV9zaXplIC09CisJCQkgICAgKG5ld19maWxlX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpOworCQkJdGFpbF9wb3MgPSBuZXdfZmlsZV9zaXplOworCQkJc2V0X2NwdV9rZXlfa19vZmZzZXQoaXRlbV9rZXksIG5ld19maWxlX3NpemUgKyAxKTsKIAkJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleQotCQkJICAgIChwX3Nfc2IsIHBfc19pdGVtX2tleSwKLQkJCSAgICAgcF9zX3BhdGgpID09IFBPU0lUSU9OX05PVF9GT1VORCkgewotCQkJCXByaW50X2Jsb2NrKFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSwgMywKLQkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkgLSAxLAotCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSArIDEpOwotCQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkJICAgICAgICJQQVAtNTU4MDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogaXRlbSB0byBjb252ZXJ0IGRvZXMgbm90IGV4aXN0ICglSykiLAotCQkJCQkgICAgICAgcF9zX2l0ZW1fa2V5KTsKKwkJCSAgICAoc2IsIGl0ZW1fa2V5LAorCQkJICAgICBwYXRoKSA9PSBQT1NJVElPTl9OT1RfRk9VTkQpIHsKKwkJCQlwcmludF9ibG9jayhQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSwgMywKKwkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSAtIDEsCisJCQkJCSAgICBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgKyAxKTsKKwkJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01NTgwIiwgIml0ZW0gdG8gIgorCQkJCQkgICAgICAgImNvbnZlcnQgZG9lcyBub3QgZXhpc3QgKCVLKSIsCisJCQkJCSAgICAgICBpdGVtX2tleSk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAobl9jdXRfc2l6ZSA9PSAwKSB7Ci0JCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQlpZiAoY3V0X3NpemUgPT0gMCkgeworCQkJcGF0aHJlbHNlKHBhdGgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gbl9jdXRfc2l6ZTsKKwkJc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IGN1dF9zaXplOwogCi0JCW5fcmV0X3ZhbHVlID0gZml4X25vZGVzKGNfbW9kZSwgJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwpOwotCQlpZiAobl9yZXRfdmFsdWUgIT0gUkVQRUFUX1NFQVJDSCkKKwkJcmV0X3ZhbHVlID0gZml4X25vZGVzKG1vZGUsICZzX2N1dF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQogCQkJYnJlYWs7CiAKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGN1dF9mcm9tX2l0ZW1fcmVzdGFydGVkKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgY3V0X2Zyb21faXRlbV9yZXN0YXJ0ZWQpOwogCi0JCW5fcmV0X3ZhbHVlID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCk7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBQT1NJVElPTl9GT1VORCkKKwkJcmV0X3ZhbHVlID0KKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCBpdGVtX2tleSwgcGF0aCk7CisJCWlmIChyZXRfdmFsdWUgPT0gUE9TSVRJT05fRk9VTkQpCiAJCQljb250aW51ZTsKIAotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgIlBBUC01NjEwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiBpdGVtICVLIG5vdCBmb3VuZCIsCi0JCQkJIHBfc19pdGVtX2tleSk7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJQQVAtNTYxMCIsICJpdGVtICVLIG5vdCBmb3VuZCIsCisJCQkJIGl0ZW1fa2V5KTsKIAkJdW5maXhfbm9kZXMoJnNfY3V0X2JhbGFuY2UpOwotCQlyZXR1cm4gKG5fcmV0X3ZhbHVlID09IElPX0VSUk9SKSA/IC1FSU8gOiAtRU5PRU5UOworCQlyZXR1cm4gKHJldF92YWx1ZSA9PSBJT19FUlJPUikgPyAtRUlPIDogLUVOT0VOVDsKIAl9CQkJLyogd2hpbGUgKi8KIAogCS8vIGNoZWNrIGZpeF9ub2RlcyByZXN1bHRzIChJT19FUlJPUiBvciBOT19ESVNLX1NQQUNFKQotCWlmIChuX3JldF92YWx1ZSAhPSBDQVJSWV9PTikgewotCQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlpZiAocmV0X3ZhbHVlICE9IENBUlJZX09OKSB7CisJCWlmIChpc19pbm9kZV9sb2NrZWQpIHsKIAkJCS8vIEZJWE1FOiB0aGlzIHNlZW1zIHRvIGJlIG5vdCBuZWVkZWQ6IHdlIGFyZSBhbHdheXMgYWJsZQogCQkJLy8gdG8gY3V0IGl0ZW0KLQkJCWluZGlyZWN0X3RvX2RpcmVjdF9yb2xsX2JhY2sodGgsIHBfc19pbm9kZSwgcF9zX3BhdGgpOworCQkJaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjayh0aCwgaW5vZGUsIHBhdGgpOwogCQl9Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBOT19ESVNLX1NQQUNFKQotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJOT19ESVNLX1NQQUNFIik7CisJCWlmIChyZXRfdmFsdWUgPT0gTk9fRElTS19TUEFDRSkKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy01MDkyIiwKKwkJCQkJICJOT19ESVNLX1NQQUNFIik7CiAJCXVuZml4X25vZGVzKCZzX2N1dF9iYWxhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogZ28gYWhlYWQgYW5kIHBlcmZvcm0gYmFsYW5jaW5nICovCiAKLQlSRkFMU0UoY19tb2RlID09IE1fUEFTVEUgfHwgY19tb2RlID09IE1fSU5TRVJULCAiaW52YWxpZCBtb2RlIik7CisJUkZBTFNFKG1vZGUgPT0gTV9QQVNURSB8fCBtb2RlID09IE1fSU5TRVJULCAiaW52YWxpZCBtb2RlIik7CiAKIAkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBjdXQgZnJvbSB0aGUgaXRlbS4gKi8KIAlxdW90YV9jdXRfYnl0ZXMgPQotCSAgICAoY19tb2RlID09Ci0JICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihnZXRfaWgocF9zX3BhdGgpKSA6IC1zX2N1dF9iYWxhbmNlLgorCSAgICAobW9kZSA9PQorCSAgICAgTV9ERUxFVEUpID8gaWhfaXRlbV9sZW4oZ2V0X2loKHBhdGgpKSA6IC1zX2N1dF9iYWxhbmNlLgogCSAgICBpbnNlcnRfc2l6ZVswXTsKIAlpZiAocmV0dmFsMiA9PSAtMSkKLQkJbl9yZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2N1dF9iYWxhbmNlLCBjX21vZGUpOworCQlyZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2N1dF9iYWxhbmNlLCBtb2RlKTsKIAllbHNlCi0JCW5fcmV0X3ZhbHVlID0gcmV0dmFsMjsKKwkJcmV0X3ZhbHVlID0gcmV0dmFsMjsKIAogCS8qIEZvciBkaXJlY3QgaXRlbXMsIHdlIG9ubHkgY2hhbmdlIHRoZSBxdW90YSB3aGVuIGRlbGV0aW5nIHRoZSBsYXN0CiAJICoqIGl0ZW0uCiAJICovCiAJcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRChzX2N1dF9iYWxhbmNlLnRiX3BhdGgpOwotCWlmICghU19JU0xOSyhwX3NfaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7Ci0JCWlmIChjX21vZGUgPT0gTV9ERUxFVEUgJiYKLQkJICAgIChsZV9paF9rX29mZnNldChwX2xlX2loKSAmIChwX3Nfc2ItPnNfYmxvY2tzaXplIC0gMSkpID09CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChwX2xlX2loKSkgeworCQlpZiAobW9kZSA9PSBNX0RFTEVURSAmJgorCQkgICAgKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PQogCQkgICAgMSkgewogCQkJLy8gRklYTUU6IHRoaXMgaXMgdG8ga2VlcCAzLjUgaGFwcHkKLQkJCVJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9maXJzdF9kaXJlY3RfYnl0ZSA9IFUzMl9NQVg7Ci0JCQlxdW90YV9jdXRfYnl0ZXMgPSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CisJCQlSRUlTRVJGU19JKGlub2RlKS0+aV9maXJzdF9kaXJlY3RfYnl0ZSA9IFUzMl9NQVg7CisJCQlxdW90YV9jdXRfYnl0ZXMgPSBzYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXF1b3RhX2N1dF9ieXRlcyA9IDA7CiAJCX0KIAl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JaWYgKG5faXNfaW5vZGVfbG9ja2VkKSB7CisJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQlzdHJ1Y3QgaXRlbV9oZWFkICpsZV9paCA9CiAJCSAgICBQQVRIX1BJVEVNX0hFQUQoc19jdXRfYmFsYW5jZS50Yl9wYXRoKTsKIAkJLyogd2UgYXJlIGdvaW5nIHRvIGNvbXBsZXRlIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uLiBNYWtlCiAJCSAgIHN1cmUsIHRoYXQgd2UgZXhhY3RseSByZW1vdmUgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIKIAkJICAgb2YgdGhlIGl0ZW0gKi8KIAkJaWYgKCFpc19pbmRpcmVjdF9sZV9paChsZV9paCkpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJ2cy01NjUyOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTIiLAogCQkJCSAgICAgICAiaXRlbSBtdXN0IGJlIGluZGlyZWN0ICVoIiwgbGVfaWgpOwogCi0JCWlmIChjX21vZGUgPT0gTV9ERUxFVEUgJiYgaWhfaXRlbV9sZW4obGVfaWgpICE9IFVORk1fUF9TSVpFKQotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAidnMtNTY1MzogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogIgotCQkJCSAgICAgICAiY29tcGxldGluZyBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBpbmRpcmVjdCBpdGVtICVoICIKLQkJCQkgICAgICAgImJlaW5nIGRlbGV0ZWQgbXVzdCBiZSBvZiA0IGJ5dGUgbG9uZyIsCi0JCQkJICAgICAgIGxlX2loKTsKKwkJaWYgKG1vZGUgPT0gTV9ERUxFVEUgJiYgaWhfaXRlbV9sZW4obGVfaWgpICE9IFVORk1fUF9TSVpFKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy01NjUzIiwgImNvbXBsZXRpbmcgIgorCQkJCSAgICAgICAiaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24gaW5kaXJlY3QgIgorCQkJCSAgICAgICAiaXRlbSAlaCBiZWluZyBkZWxldGVkIG11c3QgYmUgb2YgIgorCQkJCSAgICAgICAiNCBieXRlIGxvbmciLCBsZV9paCk7CiAKLQkJaWYgKGNfbW9kZSA9PSBNX0NVVAorCQlpZiAobW9kZSA9PSBNX0NVVAogCQkgICAgJiYgc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSAhPSAtVU5GTV9QX1NJWkUpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgInZzLTU2NTQ6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06ICIKLQkJCQkgICAgICAgImNhbiBub3QgY29tcGxldGUgaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24gb2YgJWggKENVVCwgaW5zZXJ0X3NpemU9PSVkKSIsCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTQiLCAiY2FuIG5vdCBjb21wbGV0ZSAiCisJCQkJICAgICAgICJpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBvZiAlaCAiCisJCQkJICAgICAgICIoQ1VULCBpbnNlcnRfc2l6ZT09JWQpIiwKIAkJCQkgICAgICAgbGVfaWgsIHNfY3V0X2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0pOwogCQl9CiAJCS8qIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBtYWtlIHN1cmUsIHRoYXQgcmlnaHQgbmVpZ2hib3JpbmcKQEAgLTE3MTksMjMgKzE2ODEsMjMgQEAKIAl9CiAjZW5kaWYKIAotCWRvX2JhbGFuY2UoJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwsIGNfbW9kZSk7Ci0JaWYgKG5faXNfaW5vZGVfbG9ja2VkKSB7CisJZG9fYmFsYW5jZSgmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCwgbW9kZSk7CisJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQkvKiB3ZSd2ZSBkb25lIGFuIGluZGlyZWN0LT5kaXJlY3QgY29udmVyc2lvbi4gIHdoZW4gdGhlIGRhdGEgYmxvY2sKIAkJICoqIHdhcyBmcmVlZCwgaXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCBtdXN0CiAJCSAqKiBiZSBmbHVzaGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gY29tbWl0cywgbWFrZSBzdXJlIHRvCiAJCSAqKiB1bm1hcCBhbmQgaW52YWxpZGF0ZSBpdAogCQkgKi8KIAkJdW5tYXBfYnVmZmVycyhwYWdlLCB0YWlsX3Bvcyk7Ci0JCVJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9mbGFncyAmPSB+aV9wYWNrX29uX2Nsb3NlX21hc2s7CisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICY9IH5pX3BhY2tfb25fY2xvc2VfbWFzazsKIAl9CiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKLQlyZWlzZXJmc19kZWJ1ZyhwX3NfaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgY3V0X2Zyb21faXRlbSgpOiBmcmVlaW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBwX3NfaW5vZGUtPmlfdWlkLCAnPycpOworCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBpbm9kZS0+aV91aWQsICc/Jyk7CiAjZW5kaWYKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKLQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKKwlyZXR1cm4gcmV0X3ZhbHVlOwogfQogCiBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9kaXJlY3Rvcnkoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCkBAIC0xNzQzLDggKzE3MDUsNyBAQAogewogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCWlmIChpbm9kZS0+aV9ubGluaykKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgInZzLTU2NTU6IHRydW5jYXRlX2RpcmVjdG9yeTogbGluayBjb3VudCAhPSAwIik7CisJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtNTY1NSIsICJsaW5rIGNvdW50ICE9IDAiKTsKIAogCXNldF9sZV9rZXlfa19vZmZzZXQoS0VZX0ZPUk1BVF8zXzUsIElOT0RFX1BLRVkoaW5vZGUpLCBET1RfT0ZGU0VUKTsKIAlzZXRfbGVfa2V5X2tfdHlwZShLRVlfRk9STUFUXzNfNSwgSU5PREVfUEtFWShpbm9kZSksIFRZUEVfRElSRU5UUlkpOwpAQCAtMTc1Niw4ICsxNzE3LDggQEAKIAogLyogVHJ1bmNhdGUgZmlsZSB0byB0aGUgbmV3IHNpemUuIE5vdGUsIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHRyYW5zYWN0aW9uCiAgICBhbHJlYWR5IHN0YXJ0ZWQgKi8KLWludCByZWlzZXJmc19kb190cnVuY2F0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsCS8qIC0+aV9zaXplIGNvbnRhaW5zIG5ldwotCQkJCQkJCQkJCQkJICAgc2l6ZSAqLworaW50IHJlaXNlcmZzX2RvX3RydW5jYXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAkvKiAtPmlfc2l6ZSBjb250YWlucyBuZXcgc2l6ZSAqLwogCQkJIHN0cnVjdCBwYWdlICpwYWdlLAkvKiB1cCB0byBkYXRlIGZvciBsYXN0IGJsb2NrICovCiAJCQkgaW50IHVwZGF0ZV90aW1lc3RhbXBzCS8qIHdoZW4gaXQgaXMgY2FsbGVkIGJ5CiAJCQkJCQkgICBmaWxlX3JlbGVhc2UgdG8gY29udmVydApAQCAtMTc2OCw0NyArMTcyOSw0NSBAQAogCUlOSVRJQUxJWkVfUEFUSChzX3NlYXJjaF9wYXRoKTsJLyogUGF0aCB0byB0aGUgY3VycmVudCBvYmplY3QgaXRlbS4gKi8KIAlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loOwkvKiBQb2ludGVyIHRvIGFuIGl0ZW0gaGVhZGVyLiAqLwogCXN0cnVjdCBjcHVfa2V5IHNfaXRlbV9rZXk7CS8qIEtleSB0byBzZWFyY2ggZm9yIGEgcHJldmlvdXMgZmlsZSBpdGVtLiAqLwotCWxvZmZfdCBuX2ZpbGVfc2l6ZSwJLyogT2xkIGZpbGUgc2l6ZS4gKi8KLQkgbl9uZXdfZmlsZV9zaXplOwkvKiBOZXcgZmlsZSBzaXplLiAqLwotCWludCBuX2RlbGV0ZWQ7CQkvKiBOdW1iZXIgb2YgZGVsZXRlZCBvciB0cnVuY2F0ZWQgYnl0ZXMuICovCisJbG9mZl90IGZpbGVfc2l6ZSwJLyogT2xkIGZpbGUgc2l6ZS4gKi8KKwkgbmV3X2ZpbGVfc2l6ZTsJLyogTmV3IGZpbGUgc2l6ZS4gKi8KKwlpbnQgZGVsZXRlZDsJCS8qIE51bWJlciBvZiBkZWxldGVkIG9yIHRydW5jYXRlZCBieXRlcy4gKi8KIAlpbnQgcmV0dmFsOwogCWludCBlcnIgPSAwOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJaWYgKCEKLQkgICAgKFNfSVNSRUcocF9zX2lub2RlLT5pX21vZGUpIHx8IFNfSVNESVIocF9zX2lub2RlLT5pX21vZGUpCi0JICAgICB8fCBTX0lTTE5LKHBfc19pbm9kZS0+aV9tb2RlKSkpCisJICAgIChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkKKwkgICAgIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQogCQlyZXR1cm4gMDsKIAotCWlmIChTX0lTRElSKHBfc19pbm9kZS0+aV9tb2RlKSkgeworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CiAJCS8vIGRlbGV0aW9uIG9mIGRpcmVjdG9yeSAtIG5vIG5lZWQgdG8gdXBkYXRlIHRpbWVzdGFtcHMKLQkJdHJ1bmNhdGVfZGlyZWN0b3J5KHRoLCBwX3NfaW5vZGUpOworCQl0cnVuY2F0ZV9kaXJlY3RvcnkodGgsIGlub2RlKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogR2V0IG5ldyBmaWxlIHNpemUuICovCi0Jbl9uZXdfZmlsZV9zaXplID0gcF9zX2lub2RlLT5pX3NpemU7CisJbmV3X2ZpbGVfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAKIAkvLyBGSVhNRTogbm90ZSwgdGhhdCBrZXkgdHlwZSBpcyB1bmltcG9ydGFudCBoZXJlCi0JbWFrZV9jcHVfa2V5KCZzX2l0ZW1fa2V5LCBwX3NfaW5vZGUsIG1heF9yZWlzZXJmc19vZmZzZXQocF9zX2lub2RlKSwKKwltYWtlX2NwdV9rZXkoJnNfaXRlbV9rZXksIGlub2RlLCBtYXhfcmVpc2VyZnNfb2Zmc2V0KGlub2RlKSwKIAkJICAgICBUWVBFX0RJUkVDVCwgMyk7CiAKIAlyZXR2YWwgPQotCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3NfaW5vZGUtPmlfc2IsICZzX2l0ZW1fa2V5LAorCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShpbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCiAJCQkJICAgICAgICZzX3NlYXJjaF9wYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAidnMtNTY1NzogcmVpc2VyZnNfZG9fdHJ1bmNhdGU6ICIKLQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byB0cnVuY2F0ZSAlSyIsCi0JCQkJICZzX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy01NjU3IiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIHRydW5jYXRlICVLIiwKKwkJCSAgICAgICAmc19pdGVtX2tleSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EIHx8IHJldHZhbCA9PSBGSUxFX05PVF9GT1VORCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19pbm9kZS0+aV9zYiwKLQkJCQkgIlBBUC01NjYwOiByZWlzZXJmc19kb190cnVuY2F0ZTogIgotCQkJCSAid3JvbmcgcmVzdWx0ICVkIG9mIHNlYXJjaCBmb3IgJUsiLCByZXR2YWwsCi0JCQkJICZzX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJQQVAtNTY2MCIsCisJCQkgICAgICAgIndyb25nIHJlc3VsdCAlZCBvZiBzZWFyY2ggZm9yICVLIiwgcmV0dmFsLAorCQkJICAgICAgICZzX2l0ZW1fa2V5KTsKIAogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTE4MTksNTYgKzE3NzgsNTYgQEAKIAkvKiBHZXQgcmVhbCBmaWxlIHNpemUgKHRvdGFsIGxlbmd0aCBvZiBhbGwgZmlsZSBpdGVtcykgKi8KIAlwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKCZzX3NlYXJjaF9wYXRoKTsKIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpCi0JCW5fZmlsZV9zaXplID0gMDsKKwkJZmlsZV9zaXplID0gMDsKIAllbHNlIHsKIAkJbG9mZl90IG9mZnNldCA9IGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpOwogCQlpbnQgYnl0ZXMgPQotCQkgICAgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQkgICAgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAkJLyogdGhpcyBtYXkgbWlzbWF0Y2ggd2l0aCByZWFsIGZpbGUgc2l6ZTogaWYgbGFzdCBkaXJlY3QgaXRlbQogCQkgICBoYWQgbm8gcGFkZGluZyB6ZXJvcyBhbmQgbGFzdCB1bmZvcm1hdHRlZCBub2RlIGhhZCBubyBmcmVlCiAJCSAgIHNwYWNlLCB0aGlzIGZpbGUgd291bGQgaGF2ZSB0aGlzIGZpbGUgc2l6ZSAqLwotCQluX2ZpbGVfc2l6ZSA9IG9mZnNldCArIGJ5dGVzIC0gMTsKKwkJZmlsZV9zaXplID0gb2Zmc2V0ICsgYnl0ZXMgLSAxOwogCX0KIAkvKgogCSAqIGFyZSB3ZSBkb2luZyBhIGZ1bGwgdHJ1bmNhdGUgb3IgZGVsZXRlLCBpZiBzbwogCSAqIGtpY2sgaW4gdGhlIHJlYWRhIGNvZGUKIAkgKi8KLQlpZiAobl9uZXdfZmlsZV9zaXplID09IDApCisJaWYgKG5ld19maWxlX3NpemUgPT0gMCkKIAkJc19zZWFyY2hfcGF0aC5yZWFkYSA9IFBBVEhfUkVBREEgfCBQQVRIX1JFQURBX0JBQ0s7CiAKLQlpZiAobl9maWxlX3NpemUgPT0gMCB8fCBuX2ZpbGVfc2l6ZSA8IG5fbmV3X2ZpbGVfc2l6ZSkgeworCWlmIChmaWxlX3NpemUgPT0gMCB8fCBmaWxlX3NpemUgPCBuZXdfZmlsZV9zaXplKSB7CiAJCWdvdG8gdXBkYXRlX2FuZF9vdXQ7CiAJfQogCiAJLyogVXBkYXRlIGtleSB0byBzZWFyY2ggZm9yIHRoZSBsYXN0IGZpbGUgaXRlbS4gKi8KLQlzZXRfY3B1X2tleV9rX29mZnNldCgmc19pdGVtX2tleSwgbl9maWxlX3NpemUpOworCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBmaWxlX3NpemUpOwogCiAJZG8gewogCQkvKiBDdXQgb3IgZGVsZXRlIGZpbGUgaXRlbS4gKi8KLQkJbl9kZWxldGVkID0KKwkJZGVsZXRlZCA9CiAJCSAgICByZWlzZXJmc19jdXRfZnJvbV9pdGVtKHRoLCAmc19zZWFyY2hfcGF0aCwgJnNfaXRlbV9rZXksCi0JCQkJCSAgIHBfc19pbm9kZSwgcGFnZSwgbl9uZXdfZmlsZV9zaXplKTsKLQkJaWYgKG5fZGVsZXRlZCA8IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCQkgInZzLTU2NjU6IHJlaXNlcmZzX2RvX3RydW5jYXRlOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtIGZhaWxlZCIpOworCQkJCQkgICBpbm9kZSwgcGFnZSwgbmV3X2ZpbGVfc2l6ZSk7CisJCWlmIChkZWxldGVkIDwgMCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTU2NjUiLAorCQkJCQkgInJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0gZmFpbGVkIik7CiAJCQlyZWlzZXJmc19jaGVja19wYXRoKCZzX3NlYXJjaF9wYXRoKTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJUkZBTFNFKG5fZGVsZXRlZCA+IG5fZmlsZV9zaXplLAorCQlSRkFMU0UoZGVsZXRlZCA+IGZpbGVfc2l6ZSwKIAkJICAgICAgICJQQVAtNTY3MDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogdG9vIG1hbnkgYnl0ZXMgZGVsZXRlZDogZGVsZXRlZCAlZCwgZmlsZV9zaXplICVsdSwgaXRlbV9rZXkgJUsiLAotCQkgICAgICAgbl9kZWxldGVkLCBuX2ZpbGVfc2l6ZSwgJnNfaXRlbV9rZXkpOworCQkgICAgICAgZGVsZXRlZCwgZmlsZV9zaXplLCAmc19pdGVtX2tleSk7CiAKIAkJLyogQ2hhbmdlIGtleSB0byBzZWFyY2ggdGhlIGxhc3QgZmlsZSBpdGVtLiAqLwotCQluX2ZpbGVfc2l6ZSAtPSBuX2RlbGV0ZWQ7CisJCWZpbGVfc2l6ZSAtPSBkZWxldGVkOwogCi0JCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBuX2ZpbGVfc2l6ZSk7CisJCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBmaWxlX3NpemUpOwogCiAJCS8qIFdoaWxlIHRoZXJlIGFyZSBieXRlcyB0byB0cnVuY2F0ZSBhbmQgcHJldmlvdXMgZmlsZSBpdGVtIGlzIHByZXNlbnRlZCBpbiB0aGUgdHJlZS4gKi8KIAogCQkvKgotCQkgKiogVGhpcyBsb29wIGNvdWxkIHRha2UgYSByZWFsbHkgbG9uZyB0aW1lLCBhbmQgY291bGQgbG9nIAorCQkgKiogVGhpcyBsb29wIGNvdWxkIHRha2UgYSByZWFsbHkgbG9uZyB0aW1lLCBhbmQgY291bGQgbG9nCiAJCSAqKiBtYW55IG1vcmUgYmxvY2tzIHRoYW4gYSB0cmFuc2FjdGlvbiBjYW4gaG9sZC4gIFNvLCB3ZSBkbyBhIHBvbGl0ZQogCQkgKiogam91cm5hbCBlbmQgaGVyZSwgYW5kIGlmIHRoZSB0cmFuc2FjdGlvbiBuZWVkcyBlbmRpbmcsIHdlIG1ha2UKIAkJICoqIHN1cmUgdGhlIGZpbGUgaXMgY29uc2lzdGVudCBiZWZvcmUgZW5kaW5nIHRoZSBjdXJyZW50IHRyYW5zCkBAIC0xODc3LDM3ICsxODM2LDM4IEBACiAJCWlmIChqb3VybmFsX3RyYW5zYWN0aW9uX3Nob3VsZF9lbmQodGgsIDApIHx8CiAJCSAgICByZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8PSBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QpIHsKIAkJCWludCBvcmlnX2xlbl9hbGxvYyA9IHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQ7Ci0JCQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19zZWFyY2hfcGF0aCk7CisJCQlwYXRocmVsc2UoJnNfc2VhcmNoX3BhdGgpOwogCiAJCQlpZiAodXBkYXRlX3RpbWVzdGFtcHMpIHsKLQkJCQlwX3NfaW5vZGUtPmlfbXRpbWUgPSBwX3NfaW5vZGUtPmlfY3RpbWUgPQotCQkJCSAgICBDVVJSRU5UX1RJTUVfU0VDOworCQkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCQl9Ci0JCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIHBfc19pbm9kZSk7CisJCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKIAotCQkJZXJyID0gam91cm5hbF9lbmQodGgsIHBfc19pbm9kZS0+aV9zYiwgb3JpZ19sZW5fYWxsb2MpOworCQkJZXJyID0gam91cm5hbF9lbmQodGgsIGlub2RlLT5pX3NiLCBvcmlnX2xlbl9hbGxvYyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwotCQkJZXJyID0gam91cm5hbF9iZWdpbih0aCwgcF9zX2lub2RlLT5pX3NiLAorCQkJZXJyID0gam91cm5hbF9iZWdpbih0aCwgaW5vZGUtPmlfc2IsCiAJCQkJCSAgICBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QgKyBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDQpIDsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7Ci0JCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24ocF9zX2lub2RlKTsKKwkJCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihpbm9kZSk7CiAJCX0KLQl9IHdoaWxlIChuX2ZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5fbmV3X2ZpbGVfc2l6ZSkgJiYKLQkJIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19pbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCisJfSB3aGlsZSAoZmlsZV9zaXplID4gUk9VTkRfVVAobmV3X2ZpbGVfc2l6ZSkgJiYKKwkJIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KGlub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKIAkJCQkJICAgICZzX3NlYXJjaF9wYXRoKSA9PSBQT1NJVElPTl9GT1VORCk7CiAKLQlSRkFMU0Uobl9maWxlX3NpemUgPiBST1VORF9VUChuX25ld19maWxlX3NpemUpLAorCVJGQUxTRShmaWxlX3NpemUgPiBST1VORF9VUChuZXdfZmlsZV9zaXplKSwKIAkgICAgICAgIlBBUC01NjgwOiB0cnVuY2F0ZSBkaWQgbm90IGZpbmlzaDogbmV3X2ZpbGVfc2l6ZSAlTGQsIGN1cnJlbnQgJUxkLCBvaWQgJWQiLAotCSAgICAgICBuX25ld19maWxlX3NpemUsIG5fZmlsZV9zaXplLCBzX2l0ZW1fa2V5Lm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpOworCSAgICAgICBuZXdfZmlsZV9zaXplLCBmaWxlX3NpemUsIHNfaXRlbV9rZXkub25fZGlza19rZXkua19vYmplY3RpZCk7CiAKICAgICAgIHVwZGF0ZV9hbmRfb3V0OgogCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewogCQkvLyB0aGlzIGlzIHRydW5jYXRlLCBub3QgZmlsZSBjbG9zaW5nCi0JCXBfc19pbm9kZS0+aV9tdGltZSA9IHBfc19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCX0KLQlyZWlzZXJmc191cGRhdGVfc2QodGgsIHBfc19pbm9kZSk7CisJcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBpbm9kZSk7CiAKICAgICAgIG91dDoKIAlwYXRocmVsc2UoJnNfc2VhcmNoX3BhdGgpOwpAQCAtMTkxNyw3ICsxODc3LDcgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIC8vIHRoaXMgbWFrZXMgc3VyZSwgdGhhdCB3ZSBfX2FwcGVuZF9fLCBub3Qgb3ZlcndyaXRlIG9yIGFkZCBob2xlcwogc3RhdGljIHZvaWQgY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlKHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5KQorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSkKIHsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpmb3VuZF9paCA9IGdldF9paChwYXRoKTsKIApAQCAtMTkyNSwzNiArMTg4NSwzNiBAQAogCQlpZiAobGVfaWhfa19vZmZzZXQoZm91bmRfaWgpICsKIAkJICAgIG9wX2J5dGVzX251bWJlcihmb3VuZF9paCwKIAkJCQkgICAgZ2V0X2xhc3RfYmgocGF0aCktPmJfc2l6ZSkgIT0KLQkJICAgIGNwdV9rZXlfa19vZmZzZXQocF9zX2tleSkKKwkJICAgIGNwdV9rZXlfa19vZmZzZXQoa2V5KQogCQkgICAgfHwgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQogCQkgICAgcG9zX2luX2l0ZW0ocGF0aCkpCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiUEFQLTU3MjA6IGNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZTogIgotCQkJCSAgICAgICAiZm91bmQgZGlyZWN0IGl0ZW0gJWggb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCB0byBrZXkgJUsiLAotCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIHBfc19rZXkpOworCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgIlBBUC01NzIwIiwgImZvdW5kIGRpcmVjdCBpdGVtICIKKwkJCQkgICAgICAgIiVoIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgbWF0Y2ggIgorCQkJCSAgICAgICAidG8ga2V5ICVLIiwgZm91bmRfaWgsCisJCQkJICAgICAgIHBvc19pbl9pdGVtKHBhdGgpLCBrZXkpOwogCX0KIAlpZiAoaXNfaW5kaXJlY3RfbGVfaWgoZm91bmRfaWgpKSB7CiAJCWlmIChsZV9paF9rX29mZnNldChmb3VuZF9paCkgKwogCQkgICAgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQotCQkgICAgY3B1X2tleV9rX29mZnNldChwX3Nfa2V5KQorCQkgICAgY3B1X2tleV9rX29mZnNldChrZXkpCiAJCSAgICB8fCBJX1VORk1fTlVNKGZvdW5kX2loKSAhPSBwb3NfaW5faXRlbShwYXRoKQogCQkgICAgfHwgZ2V0X2loX2ZyZWVfc3BhY2UoZm91bmRfaWgpICE9IDApCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiUEFQLTU3MzA6IGNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZTogIgotCQkJCSAgICAgICAiZm91bmQgaW5kaXJlY3QgaXRlbSAoJWgpIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgbWF0Y2ggdG8ga2V5ICglSykiLAotCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIHBfc19rZXkpOworCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgIlBBUC01NzMwIiwgImZvdW5kIGluZGlyZWN0ICIKKwkJCQkgICAgICAgIml0ZW0gKCVoKSBvciBwb3NpdGlvbiAoJWQpIGRvZXMgbm90ICIKKwkJCQkgICAgICAgIm1hdGNoIHRvIGtleSAoJUspIiwKKwkJCQkgICAgICAgZm91bmRfaWgsIHBvc19pbl9pdGVtKHBhdGgpLCBrZXkpOwogCX0KIH0KICNlbmRpZgkJCQkvKiBjb25maWcgcmVpc2VyZnMgY2hlY2sgKi8KIAogLyogUGFzdGUgYnl0ZXMgdG8gdGhlIGV4aXN0aW5nIGl0ZW0uIFJldHVybnMgYnl0ZXMgbnVtYmVyIHBhc3RlZCBpbnRvIHRoZSBpdGVtLiAqLwotaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgsCS8qIFBhdGggdG8gdGhlIHBhc3RlZCBpdGVtLiAgICAgICAgICAqLwotCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIG5lZWRlZCBpdGVtLiAqLworaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCwJLyogUGF0aCB0byB0aGUgcGFzdGVkIGl0ZW0uCSAgKi8KKwkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIG5lZWRlZCBpdGVtLiAqLwogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAkvKiBJbm9kZSBpdGVtIGJlbG9uZ3MgdG8gKi8KLQkJCSAgICAgY29uc3QgY2hhciAqcF9jX2JvZHksCS8qIFBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIHBhc3RlLiAgICAqLwotCQkJICAgICBpbnQgbl9wYXN0ZWRfc2l6ZSkKKwkJCSAgICAgY29uc3QgY2hhciAqYm9keSwJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gcGFzdGUuICAgICovCisJCQkgICAgIGludCBwYXN0ZWRfc2l6ZSkKIHsJCQkJLyogU2l6ZSBvZiBwYXN0ZWQgYnl0ZXMuICAgICAgICAgICAgICovCiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX3Bhc3RlX2JhbGFuY2U7CiAJaW50IHJldHZhbDsKQEAgLTE5NjcsMTggKzE5MjcsMTggQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIHBhc3RlX2ludG9faXRlbSgpOiBhbGxvY2F0aW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSwgaW5vZGUtPmlfdWlkLAotCQkgICAgICAga2V5MnR5cGUoJihwX3Nfa2V5LT5vbl9kaXNrX2tleSkpKTsKKwkJICAgICAgIHBhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCisJCSAgICAgICBrZXkydHlwZSgmKGtleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKIAotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbl9wYXN0ZWRfc2l6ZSkpIHsKLQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSkpIHsKKwkJcGF0aHJlbHNlKHNlYXJjaF9wYXRoKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQotCWluaXRfdGJfc3RydWN0KHRoLCAmc19wYXN0ZV9iYWxhbmNlLCB0aC0+dF9zdXBlciwgcF9zX3NlYXJjaF9wYXRoLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSk7CisJaW5pdF90Yl9zdHJ1Y3QodGgsICZzX3Bhc3RlX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBzZWFyY2hfcGF0aCwKKwkJICAgICAgIHBhc3RlZF9zaXplKTsKICNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCi0Jc19wYXN0ZV9iYWxhbmNlLmtleSA9IHBfc19rZXktPm9uX2Rpc2tfa2V5OworCXNfcGFzdGVfYmFsYW5jZS5rZXkgPSBrZXktPm9uX2Rpc2tfa2V5OwogI2VuZGlmCiAKIAkvKiBEUVVPVF8qIGNhbiBzY2hlZHVsZSwgbXVzdCBjaGVjayBiZWZvcmUgdGhlIGZpeF9ub2RlcyAqLwpAQCAtMTk4OCwzMyArMTk0OCwzMyBAQAogCiAJd2hpbGUgKChyZXR2YWwgPQogCQlmaXhfbm9kZXMoTV9QQVNURSwgJnNfcGFzdGVfYmFsYW5jZSwgTlVMTCwKLQkJCSAgcF9jX2JvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CisJCQkgIGJvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CiAJICAgICAgc2VhcmNoX2FnYWluOgogCQkvKiBmaWxlIHN5c3RlbSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgaW4gdGhlIGZpeF9ub2RlcyAqLwogCQlQUk9DX0lORk9fSU5DKHRoLT50X3N1cGVyLCBwYXN0ZV9pbnRvX2l0ZW1fcmVzdGFydGVkKTsKIAkJcmV0dmFsID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHRoLT50X3N1cGVyLCBwX3Nfa2V5LAotCQkJCQkgICAgICAgcF9zX3NlYXJjaF9wYXRoKTsKKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHRoLT50X3N1cGVyLCBrZXksCisJCQkJCSAgICAgICBzZWFyY2hfcGF0aCk7CiAJCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKIAkJCXJldHZhbCA9IC1FSU87CiAJCQlnb3RvIGVycm9yX291dDsKIAkJfQogCQlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgIlBBUC01NzEwOiByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW06IGVudHJ5IG9yIHBhc3RlZCBieXRlICglSykgZXhpc3RzIiwKLQkJCQkJIHBfc19rZXkpOworCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIlBBUC01NzEwIiwKKwkJCQkJICJlbnRyeSBvciBwYXN0ZWQgYnl0ZSAoJUspIGV4aXN0cyIsCisJCQkJCSBrZXkpOwogCQkJcmV0dmFsID0gLUVFWElTVDsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCWNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZShwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXkpOworCQljaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc2VhcmNoX3BhdGgsIGtleSk7CiAjZW5kaWYKIAl9CiAKIAkvKiBQZXJmb3JtIGJhbGFuY2luZyBhZnRlciBhbGwgcmVzb3VyY2VzIGFyZSBjb2xsZWN0ZWQgYnkgZml4X25vZGVzLCBhbmQKIAkgICBhY2Nlc3NpbmcgdGhlbSB3aWxsIG5vdCByaXNrIHRyaWdnZXJpbmcgc2NoZWR1bGUuICovCiAJaWYgKHJldHZhbCA9PSBDQVJSWV9PTikgewotCQlkb19iYWxhbmNlKCZzX3Bhc3RlX2JhbGFuY2UsIE5VTEwgLyppaCAqLyAsIHBfY19ib2R5LCBNX1BBU1RFKTsKKwkJZG9fYmFsYW5jZSgmc19wYXN0ZV9iYWxhbmNlLCBOVUxMIC8qaWggKi8gLCBib2R5LCBNX1BBU1RFKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHZhbCA9IChyZXR2YWwgPT0gTk9fRElTS19TUEFDRSkgPyAtRU5PU1BDIDogLUVJTzsKQEAgLTIwMjQsMTggKzE5ODQsMjQgQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIHBhc3RlX2ludG9faXRlbSgpOiBmcmVlaW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSwgaW5vZGUtPmlfdWlkLAotCQkgICAgICAga2V5MnR5cGUoJihwX3Nfa2V5LT5vbl9kaXNrX2tleSkpKTsKKwkJICAgICAgIHBhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCisJCSAgICAgICBrZXkydHlwZSgmKGtleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aC4gKi8KLWludCByZWlzZXJmc19pbnNlcnRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwJLyogUGF0aCB0byB0aGUgaW5zZXJ0ZWRlZCBpdGVtLiAgICAgICAgICovCi0JCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwgc3RydWN0IGl0ZW1faGVhZCAqcF9zX2loLAkvKiBQb2ludGVyIHRvIHRoZSBpdGVtIGhlYWRlciB0byBpbnNlcnQuICovCi0JCQkgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqcF9jX2JvZHkpCi17CQkJCS8qIFBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIGluc2VydC4gICAgICAqLworLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aC4KKyAqIHRoICAgLSBhY3RpdmUgdHJhbnNhY3Rpb24gaGFuZGxlCisgKiBwYXRoIC0gcGF0aCB0byB0aGUgaW5zZXJ0ZWQgaXRlbQorICogaWggICAtIHBvaW50ZXIgdG8gdGhlIGl0ZW0gaGVhZGVyIHRvIGluc2VydAorICogYm9keSAtIHBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIGluc2VydAorICovCitpbnQgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAorCQkJIHN0cnVjdCBpdGVtX2hlYWQgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IGNoYXIgKmJvZHkpCit7CiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX2luc19iYWxhbmNlOwogCWludCByZXR2YWw7CiAJaW50IGZzX2dlbiA9IDA7CkBAIC0yMDQ1LDI4ICsyMDExLDI3IEBACiAKIAlpZiAoaW5vZGUpIHsJCS8qIERvIHdlIGNvdW50IHF1b3RhcyBmb3IgaXRlbT8gKi8KIAkJZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24oaW5vZGUtPmlfc2IpOwotCQlxdW90YV9ieXRlcyA9IGloX2l0ZW1fbGVuKHBfc19paCk7CisJCXF1b3RhX2J5dGVzID0gaWhfaXRlbV9sZW4oaWgpOwogCiAJCS8qIGhhY2sgc28gdGhlIHF1b3RhIGNvZGUgZG9lc24ndCBoYXZlIHRvIGd1ZXNzIGlmIHRoZSBmaWxlIGhhcwogCQkgKiogYSB0YWlsLCBsaW5rcyBhcmUgYWx3YXlzIHRhaWxzLCBzbyB0aGVyZSdzIG5vIGd1ZXNzaW5nIG5lZWRlZAogCQkgKi8KLQkJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChwX3NfaWgpKSB7CisJCWlmICghU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgoaWgpKQogCQkJcXVvdGFfYnl0ZXMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKLQkJfQogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJyZWlzZXJxdW90YSBpbnNlcnRfaXRlbSgpOiBhbGxvY2F0aW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShwX3NfaWgpKTsKKwkJCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoaWgpKTsKICNlbmRpZgogCQkvKiBXZSBjYW4ndCBkaXJ0eSBpbm9kZSBoZXJlLiBJdCB3b3VsZCBiZSBpbW1lZGlhdGVseSB3cml0dGVuIGJ1dAogCQkgKiBhcHByb3ByaWF0ZSBzdGF0IGl0ZW0gaXNuJ3QgaW5zZXJ0ZWQgeWV0Li4uICovCiAJCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpKSB7Ci0JCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQkJcGF0aHJlbHNlKHBhdGgpOwogCQkJcmV0dXJuIC1FRFFVT1Q7CiAJCX0KIAl9Ci0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2luc19iYWxhbmNlLCB0aC0+dF9zdXBlciwgcF9zX3BhdGgsCi0JCSAgICAgICBJSF9TSVpFICsgaWhfaXRlbV9sZW4ocF9zX2loKSk7CisJaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2luc19iYWxhbmNlLCB0aC0+dF9zdXBlciwgcGF0aCwKKwkJICAgICAgIElIX1NJWkUgKyBpaF9pdGVtX2xlbihpaCkpOwogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKIAlzX2luc19iYWxhbmNlLmtleSA9IGtleS0+b25fZGlza19rZXk7CiAjZW5kaWYKQEAgLTIwNzYsMTkgKzIwNDEsMTggQEAKIAl9CiAKIAl3aGlsZSAoKHJldHZhbCA9Ci0JCWZpeF9ub2RlcyhNX0lOU0VSVCwgJnNfaW5zX2JhbGFuY2UsIHBfc19paCwKLQkJCSAgcF9jX2JvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CisJCWZpeF9ub2RlcyhNX0lOU0VSVCwgJnNfaW5zX2JhbGFuY2UsIGloLAorCQkJICBib2R5KSkgPT0gUkVQRUFUX1NFQVJDSCkgewogCSAgICAgIHNlYXJjaF9hZ2FpbjoKIAkJLyogZmlsZSBzeXN0ZW0gY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGluIHRoZSBmaXhfbm9kZXMgKi8KIAkJUFJPQ19JTkZPX0lOQyh0aC0+dF9zdXBlciwgaW5zZXJ0X2l0ZW1fcmVzdGFydGVkKTsKLQkJcmV0dmFsID0gc2VhcmNoX2l0ZW0odGgtPnRfc3VwZXIsIGtleSwgcF9zX3BhdGgpOworCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwga2V5LCBwYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewogCQkJcmV0dmFsID0gLUVJTzsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAJCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJICJQQVAtNTc2MDogcmVpc2VyZnNfaW5zZXJ0X2l0ZW06ICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsICJQQVAtNTc2MCIsCiAJCQkJCSAia2V5ICVLIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0cmVlIiwKIAkJCQkJIGtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwpAQCAtMjA5OCw3ICsyMDYyLDcgQEAKIAogCS8qIG1ha2UgYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgd2lsbCBiZSBjb2xsZWN0ZWQgYXQgYSB0aW1lICovCiAJaWYgKHJldHZhbCA9PSBDQVJSWV9PTikgewotCQlkb19iYWxhbmNlKCZzX2luc19iYWxhbmNlLCBwX3NfaWgsIHBfY19ib2R5LCBNX0lOU0VSVCk7CisJCWRvX2JhbGFuY2UoJnNfaW5zX2JhbGFuY2UsIGloLCBib2R5LCBNX0lOU0VSVCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjEwOSw3ICsyMDczLDcgQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKHRoLT50X3N1cGVyLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIGluc2VydF9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUocF9zX2loKSk7CisJCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoaWgpKTsKICNlbmRpZgogCWlmIChpbm9kZSkKIAkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggNWRiYWZiNy4uOTcyMjUwYzYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMTgzLDkgKzE4Myw5IEBACiAJCWlmIChSRUlTRVJGU19TQihzKS0+c19xZl9uYW1lc1tpXSkgewogCQkJaW50IHJldCA9IHJlaXNlcmZzX3F1b3RhX29uX21vdW50KHMsIGkpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmczogY2Fubm90IHR1cm4gb24gam91cm5hbGVkIHF1b3RhOiBlcnJvciAlZCIsCi0JCQkJCQkgcmV0KTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTAwIiwKKwkJCQkJCSAiY2Fubm90IHR1cm4gb24gam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGE6IGVycm9yICVkIiwgcmV0KTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMTk1LDE3ICsxOTUsMTYgQEAKIAl3aGlsZSAoIXJldHZhbCkgewogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbShzLCAmbWF4X2NwdV9rZXksICZwYXRoKTsKIAkJaWYgKHJldHZhbCAhPSBJVEVNX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIxNDA6IGZpbmlzaF91bmZpbmlzaGVkOiBzZWFyY2hfYnlfa2V5IHJldHVybmVkICVkIiwKLQkJCQkJIHJldHZhbCk7CisJCQlyZWlzZXJmc19lcnJvcihzLCAidnMtMjE0MCIsCisJCQkJICAgICAgICJzZWFyY2hfYnlfa2V5IHJldHVybmVkICVkIiwgcmV0dmFsKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJYmggPSBnZXRfbGFzdF9iaCgmcGF0aCk7CiAJCWl0ZW1fcG9zID0gZ2V0X2l0ZW1fcG9zKCZwYXRoKTsKIAkJaWYgKGl0ZW1fcG9zICE9IEJfTlJfSVRFTVMoYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidnMtMjA2MDogZmluaXNoX3VuZmluaXNoZWQ6IHdyb25nIHBvc2l0aW9uIGZvdW5kIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy0yMDYwIiwKKwkJCQkJICJ3cm9uZyBwb3NpdGlvbiBmb3VuZCIpOwogCQkJYnJlYWs7CiAJCX0KIAkJaXRlbV9wb3MtLTsKQEAgLTIzNSw4ICsyMzQsNyBAQAogCQlpZiAoIWlub2RlKSB7CiAJCQkvKiB0aGUgdW5saW5rIGFsbW9zdCBjb21wbGV0ZWQsIGl0IGp1c3QgZGlkIG5vdCBtYW5hZ2UgdG8gcmVtb3ZlCiAJCQkgICAic2F2ZSIgbGluayBhbmQgcmVsZWFzZSBvYmplY3RpZCAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIxODA6IGZpbmlzaF91bmZpbmlzaGVkOiBpZ2V0IGZhaWxlZCBmb3IgJUsiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtMjE4MCIsICJpZ2V0IGZhaWxlZCBmb3IgJUsiLAogCQkJCQkgJm9ial9rZXkpOwogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAxKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjQ0LDggKzI0Miw4IEBACiAKIAkJaWYgKCF0cnVuY2F0ZSAmJiBpbm9kZS0+aV9ubGluaykgewogCQkJLyogZmlsZSBpcyBub3QgdW5saW5rZWQgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ2cy0yMTg1OiBmaW5pc2hfdW5maW5pc2hlZDogZmlsZSAlSyBpcyBub3QgdW5saW5rZWQiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtMjE4NSIsCisJCQkJCSAiZmlsZSAlSyBpcyBub3QgdW5saW5rZWQiLAogCQkJCQkgJm9ial9rZXkpOwogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjU3LDggKzI1NSw5IEBACiAJCQkgICBUaGUgb25seSBpbWFnaW5hYmxlIHdheSBpcyB0byBleGVjdXRlIHVuZmluaXNoZWQgdHJ1bmNhdGUgcmVxdWVzdAogCQkJICAgdGhlbiBib290IGludG8gb2xkIGtlcm5lbCwgcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgZGlyIHdpdGgKIAkJCSAgIHRoZSBzYW1lIGtleS4gKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJncmVlbi0yMTAxOiBpbXBvc3NpYmxlIHRydW5jYXRlIG9uIGEgZGlyZWN0b3J5ICVrLiBQbGVhc2UgcmVwb3J0IiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImdyZWVuLTIxMDEiLAorCQkJCQkgImltcG9zc2libGUgdHJ1bmNhdGUgb24gYSAiCisJCQkJCSAiZGlyZWN0b3J5ICVrLiBQbGVhc2UgcmVwb3J0IiwKIAkJCQkJIElOT0RFX1BLRVkoaW5vZGUpKTsKIAkJCXJldHZhbCA9IHJlbW92ZV9zYXZlX2xpbmtfb25seShzLCAmc2F2ZV9saW5rX2tleSwgMCk7CiAJCQl0cnVuY2F0ZSA9IDA7CkBAIC0yODgsOSArMjg3LDEwIEBACiAJCQkJLyogcmVtb3ZhbCBnZXRzIGNvbXBsZXRlZCBpbiBpcHV0ICovCiAJCQkJcmV0dmFsID0gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRGVhZCBsb29wIGluICIKLQkJCQkJCSJmaW5pc2hfdW5maW5pc2hlZCBkZXRlY3RlZCwgIgotCQkJCQkJImp1c3QgcmVtb3ZlIHNhdmUgbGlua1xuIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItMjE4OSIsICJEZWFkIGxvb3AgIgorCQkJCQkJICJpbiBmaW5pc2hfdW5maW5pc2hlZCAiCisJCQkJCQkgImRldGVjdGVkLCBqdXN0IHJlbW92ZSAiCisJCQkJCQkgInNhdmUgbGlua1xuIik7CiAJCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsCiAJCQkJCQkJJnNhdmVfbGlua19rZXksIDApOwogCQkJfQpAQCAtMzYwLDggKzM2MCw5IEBACiAJfSBlbHNlIHsKIAkJLyogdHJ1bmNhdGUgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgImdyZWVuLTIxMDI6IEFkZGluZyBhIHRydW5jYXRlIHNhdmVsaW5rIGZvciBhIGRpcmVjdG9yeSAlayEgUGxlYXNlIHJlcG9ydCIsCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiZ3JlZW4tMjEwMiIsCisJCQkJCSAiQWRkaW5nIGEgdHJ1bmNhdGUgc2F2ZWxpbmsgZm9yICIKKwkJCQkJICJhIGRpcmVjdG9yeSAlayEgUGxlYXNlIHJlcG9ydCIsCiAJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZrZXksIDEpOwogCQlzZXRfY3B1X2tleV9rX3R5cGUoJmtleSwgVFlQRV9JTkRJUkVDVCk7CkBAIC0zNzYsOSArMzc3LDkgQEAKIAlyZXR2YWwgPSBzZWFyY2hfaXRlbShpbm9kZS0+aV9zYiwgJmtleSwgJnBhdGgpOwogCWlmIChyZXR2YWwgIT0gSVRFTV9OT1RfRk9VTkQpIHsKIAkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTIxMDA6IGFkZF9zYXZlX2xpbms6IgotCQkJCQkgInNlYXJjaF9ieV9rZXkgKCVLKSByZXR1cm5lZCAlZCIsICZrZXksCi0JCQkJCSByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0yMTAwIiwKKwkJCQkgICAgICAgInNlYXJjaF9ieV9rZXkgKCVLKSByZXR1cm5lZCAlZCIsICZrZXksCisJCQkJICAgICAgIHJldHZhbCk7CiAJCXBhdGhyZWxzZSgmcGF0aCk7CiAJCXJldHVybjsKIAl9CkBAIC0zOTEsOSArMzkyLDggQEAKIAkgICAgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0odGgsICZwYXRoLCAma2V5LCAmaWgsIE5VTEwsIChjaGFyICopJmxpbmspOwogCWlmIChyZXR2YWwpIHsKIAkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJ2cy0yMTIwOiBhZGRfc2F2ZV9saW5rOiBpbnNlcnRfaXRlbSByZXR1cm5lZCAlZCIsCi0JCQkJCSByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0yMTIwIiwKKwkJCQkgICAgICAgImluc2VydF9pdGVtIHJldHVybmVkICVkIiwgcmV0dmFsKTsKIAl9IGVsc2UgewogCQlpZiAodHJ1bmNhdGUpCiAJCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PQpAQCAtNDkyLDggKzQ5Miw3IEBACiAJcHJpbnRfc3RhdGlzdGljcyhzKTsKIAogCWlmIChSRUlTRVJGU19TQihzKS0+cmVzZXJ2ZWRfYmxvY2tzICE9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAiZ3JlZW4tMjAwNTogcmVpc2VyZnNfcHV0X3N1cGVyOiByZXNlcnZlZCBibG9ja3MgbGVmdCAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgImdyZWVuLTIwMDUiLCAicmVzZXJ2ZWQgYmxvY2tzIGxlZnQgJWQiLAogCQkJCSBSRUlTRVJGU19TQihzKS0+cmVzZXJ2ZWRfYmxvY2tzKTsKIAl9CiAKQEAgLTU1OSw4ICs1NTgsOCBAQAogCiAJaW50IGVyciA9IDA7CiAJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJjbG0tNjAwNjogd3JpdGluZyBpbm9kZSAlbHUgb24gcmVhZG9ubHkgRlMiLAorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiY2xtLTYwMDYiLAorCQkJCSAid3JpdGluZyBpbm9kZSAlbHUgb24gcmVhZG9ubHkgRlMiLAogCQkJCSBpbm9kZS0+aV9pbm8pOwogCQlyZXR1cm47CiAJfQpAQCAtNzU3LDcgKzc1Niw3IEBACiAJCQkgICBjaGFyICoqb3B0X2FyZywgdW5zaWduZWQgbG9uZyAqYml0X2ZsYWdzKQogewogCWNoYXIgKnA7Ci0JLyogZm9vPWJhciwgCisJLyogZm9vPWJhciwKIAkgICBeICAgXiAgXgogCSAgIHwgICB8ICArLS0gb3B0aW9uX2VuZAogCSAgIHwgICArLS0gYXJnX3N0YXJ0CkBAIC03OTIsMTMgKzc5MSwxNSBAQAogCQkJaWYgKGJpdF9mbGFncykgewogCQkJCWlmIChvcHQtPmNscm1hc2sgPT0KIAkJCQkgICAgKDEgPDwgUkVJU0VSRlNfVU5TVVBQT1JURURfT1BUKSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiJXMgbm90IHN1cHBvcnRlZC4iLAorCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAwIiwKKwkJCQkJCQkgIiVzIG5vdCBzdXBwb3J0ZWQuXG4iLAogCQkJCQkJCSBwKTsKIAkJCQllbHNlCiAJCQkJCSpiaXRfZmxhZ3MgJj0gfm9wdC0+Y2xybWFzazsKIAkJCQlpZiAob3B0LT5zZXRtYXNrID09CiAJCQkJICAgICgxIDw8IFJFSVNFUkZTX1VOU1VQUE9SVEVEX09QVCkpCi0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIiVzIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMSIsCisJCQkJCQkJICIlcyBub3Qgc3VwcG9ydGVkLlxuIiwKIAkJCQkJCQkgcCk7CiAJCQkJZWxzZQogCQkJCQkqYml0X2ZsYWdzIHw9IG9wdC0+c2V0bWFzazsKQEAgLTgwNyw3ICs4MDgsOCBAQAogCQl9CiAJfQogCWlmICghb3B0LT5vcHRpb25fbmFtZSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJ1bmtub3duIG1vdW50IG9wdGlvbiBcIiVzXCIiLCBwKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMiIsCisJCQkJICJ1bmtub3duIG1vdW50IG9wdGlvbiBcIiVzXCIiLCBwKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODE1LDggKzgxNyw5IEBACiAJc3dpdGNoICgqcCkgewogCWNhc2UgJz0nOgogCQlpZiAoIW9wdC0+YXJnX3JlcXVpcmVkKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidGhlIG9wdGlvbiBcIiVzXCIgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAzIiwKKwkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiBkb2VzIG5vdCAiCisJCQkJCSAicmVxdWlyZSBhbiBhcmd1bWVudFxuIiwKIAkJCQkJIG9wdC0+b3B0aW9uX25hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC04MjQsMTQgKzgyNywxNSBAQAogCiAJY2FzZSAwOgogCQlpZiAob3B0LT5hcmdfcmVxdWlyZWQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCi0JCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDQiLAorCQkJCQkgInRoZSBvcHRpb24gXCIlc1wiIHJlcXVpcmVzIGFuICIKKwkJCQkJICJhcmd1bWVudFxuIiwgb3B0LT5vcHRpb25fbmFtZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiaGVhZCBvZiBvcHRpb24gXCIlc1wiIGlzIG9ubHkgY29ycmVjdCIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDUiLAorCQkJCSAiaGVhZCBvZiBvcHRpb24gXCIlc1wiIGlzIG9ubHkgY29ycmVjdFxuIiwKIAkJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC04NDMsNyArODQ3LDggQEAKIAkgICAgJiYgIShvcHQtPmFyZ19yZXF1aXJlZCAmICgxIDw8IFJFSVNFUkZTX09QVF9BTExPV0VNUFRZKSkKIAkgICAgJiYgIXN0cmxlbihwKSkgewogCQkvKiB0aGlzIGNhdGNoZXMgIm9wdGlvbj0sIiBpZiBub3QgYWxsb3dlZCAqLwotCQlyZWlzZXJmc193YXJuaW5nKHMsICJlbXB0eSBhcmd1bWVudCBmb3IgXCIlc1wiIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNiIsCisJCQkJICJlbXB0eSBhcmd1bWVudCBmb3IgXCIlc1wiXG4iLAogCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTg2NSw3ICs4NzAsOCBAQAogCQl9CiAJfQogCi0JcmVpc2VyZnNfd2FybmluZyhzLCAiYmFkIHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9uIFwiJXNcIiIsIHAsCisJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNiIsCisJCQkgImJhZCB2YWx1ZSBcIiVzXCIgZm9yIG9wdGlvbiBcIiVzXCJcbiIsIHAsCiAJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtOTU1LDkgKzk2MSw5IEBACiAJCQkJKmJsb2NrcyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgJnAsIDApOwogCQkJCWlmICgqcCAhPSAnXDAnKSB7CiAJCQkJCS8qIE5OTiBkb2VzIG5vdCBsb29rIGxpa2UgYSBudW1iZXIgKi8KLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwKLQkJCQkJCQkgYXJnKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNyIsCisJCQkJCQkJICJiYWQgdmFsdWUgJXMgZm9yICIKKwkJCQkJCQkgIi1vcmVzaXplXG4iLCBhcmcpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CkBAIC05NjgsOCArOTc0LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYXJnLCAmcCwgMCk7CiAJCQkvKiBjb21taXQ9Tk5OICh0aW1lIGluIHNlY29uZHMpICovCiAJCQlpZiAoKnAgIT0gJ1wwJyB8fCB2YWwgPj0gKHVuc2lnbmVkIGludCktMSkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA4IiwKKwkJCQkJCSAiYmFkIHZhbHVlICVzIGZvciAtb2NvbW1pdFxuIiwKIAkJCQkJCSBhcmcpOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtOTc3LDE2ICs5ODMsMTggQEAKIAkJfQogCiAJCWlmIChjID09ICd3JykgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnM6IG5vbGFyZ2VpbyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwOSIsICJub2xhcmdlaW8gb3B0aW9uICIKKwkJCQkJICJpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWlmIChjID09ICdqJykgewogCQkJaWYgKGFyZyAmJiAqYXJnICYmIGpkZXZfbmFtZSkgewogCQkJCWlmICgqamRldl9uYW1lKSB7CS8vSG0sIGFscmVhZHkgYXNzaWduZWQ/Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGpvdXJuYWwgZGV2aWNlIHdhcyBhbHJlYWR5ICBzcGVjaWZpZWQgdG8gYmUgJXMiLAotCQkJCQkJCSAqamRldl9uYW1lKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMCIsCisJCQkJCQkJICJqb3VybmFsIGRldmljZSB3YXMgIgorCQkJCQkJCSAiYWxyZWFkeSBzcGVjaWZpZWQgdG8gIgorCQkJCQkJCSAiYmUgJXMiLCAqamRldl9uYW1lKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCSpqZGV2X25hbWUgPSBhcmc7CkBAIC05OTgsMjkgKzEwMDYsMzUgQEAKIAogCQkJaWYgKHNiX2FueV9xdW90YV9sb2FkZWQocykgJiYKIAkJCSAgICAoISphcmcgIT0gIVJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW3F0eXBlXSkpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkIHF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24uIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMSIsCisJCQkJCQkgImNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhICIKKwkJCQkJCSAidHVybmVkIG9uLiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJaWYgKCphcmcpIHsJLyogU29tZSBmaWxlbmFtZSBzcGVjaWZpZWQ/ICovCiAJCQkJaWYgKFJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW3F0eXBlXQogCQkJCSAgICAmJiBzdHJjbXAoUkVJU0VSRlNfU0IocyktPnNfcWZfbmFtZXNbcXR5cGVdLAogCQkJCQkgICAgICBhcmcpKSB7Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6ICVzIHF1b3RhIGZpbGUgYWxyZWFkeSBzcGVjaWZpZWQuIiwKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMiIsCisJCQkJCQkJICIlcyBxdW90YSBmaWxlICIKKwkJCQkJCQkgImFscmVhZHkgc3BlY2lmaWVkLiIsCiAJCQkJCQkJIFFUWVBFMk5BTUUocXR5cGUpKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCWlmIChzdHJjaHIoYXJnLCAnLycpKSB7Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHF1b3RhZmlsZSBtdXN0IGJlIG9uIGZpbGVzeXN0ZW0gcm9vdC4iKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMyIsCisJCQkJCQkJICJxdW90YWZpbGUgbXVzdCBiZSAiCisJCQkJCQkJICJvbiBmaWxlc3lzdGVtIHJvb3QuIik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQlxZl9uYW1lc1txdHlwZV0gPQogCQkJCSAgICBrbWFsbG9jKHN0cmxlbihhcmcpICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFxZl9uYW1lc1txdHlwZV0pIHsKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogbm90IGVub3VnaCBtZW1vcnkgZm9yIHN0b3JpbmcgcXVvdGFmaWxlIG5hbWUuIik7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDIiLAorCQkJCQkJCSAibm90IGVub3VnaCBtZW1vcnkgIgorCQkJCQkJCSAiZm9yIHN0b3JpbmcgIgorCQkJCQkJCSAicXVvdGFmaWxlIG5hbWUuIik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQlzdHJjcHkocWZfbmFtZXNbcXR5cGVdLCBhcmcpOwpAQCAtMTAzOCwyMSArMTA1MiwyNCBAQAogCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ2ZnN2MCIpKQogCQkJCSpxZm10ID0gUUZNVF9WRlNfVjA7CiAJCQllbHNlIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHVua25vd24gcXVvdGEgZm9ybWF0IHNwZWNpZmllZC4iKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE0IiwKKwkJCQkJCSAidW5rbm93biBxdW90YSBmb3JtYXQgIgorCQkJCQkJICJzcGVjaWZpZWQuIik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzKSAmJgogCQkJICAgICpxZm10ICE9IFJFSVNFUkZTX1NCKHMpLT5zX2pxdW90YV9mbXQpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkIHF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24uIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNSIsCisJCQkJCQkgImNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhICIKKwkJCQkJCSAidHVybmVkIG9uLiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAjZWxzZQogCQlpZiAoYyA9PSAndScgfHwgYyA9PSAnZycgfHwgYyA9PSAnZicpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBqb3VybmFsZWQgcXVvdGEgb3B0aW9ucyBub3Qgc3VwcG9ydGVkLiIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwMyIsICJqb3VybmFsZWQgIgorCQkJCQkgInF1b3RhIG9wdGlvbnMgbm90IHN1cHBvcnRlZC4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAjZW5kaWYKQEAgLTEwNjEsMTUgKzEwNzgsMTUgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKIAlpZiAoIVJFSVNFUkZTX1NCKHMpLT5zX2pxdW90YV9mbXQgJiYgISpxZm10CiAJICAgICYmIChxZl9uYW1lc1tVU1JRVU9UQV0gfHwgcWZfbmFtZXNbR1JQUVVPVEFdKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBqb3VybmFsZWQgcXVvdGEgZm9ybWF0IG5vdCBzcGVjaWZpZWQuIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTUiLAorCQkJCSAiam91cm5hbGVkIHF1b3RhIGZvcm1hdCBub3Qgc3BlY2lmaWVkLiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogVGhpcyBjaGVja2luZyBpcyBub3QgcHJlY2lzZSB3cnQgdGhlIHF1b3RhIHR5cGUgYnV0IGZvciBvdXIgcHVycG9zZXMgaXQgaXMgc3VmZmljaWVudCAqLwogCWlmICghKCptb3VudF9vcHRpb25zICYgKDEgPDwgUkVJU0VSRlNfUVVPVEEpKQogCSAgICAmJiBzYl9hbnlfcXVvdGFfbG9hZGVkKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHF1b3RhIG9wdGlvbnMgbXVzdCBiZSBwcmVzZW50IHdoZW4gcXVvdGEgaXMgdHVybmVkIG9uLiIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE2IiwgInF1b3RhIG9wdGlvbnMgbXVzdCAiCisJCQkJICJiZSBwcmVzZW50IHdoZW4gcXVvdGEgaXMgdHVybmVkIG9uLiIpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKQEAgLTExMjksMTQgKzExNDYsMTUgQEAKIAogCWlmIChyZWlzZXJmc19hdHRycyhzKSkgewogCQlpZiAob2xkX2Zvcm1hdF9vbmx5KHMpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVpc2VyZnM6IGNhbm5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgb24gMy41LnggZGlzayBmb3JtYXQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTciLCAiY2Fubm90IHN1cHBvcnQgIgorCQkJCQkgImF0dHJpYnV0ZXMgb24gMy41LnggZGlzayBmb3JtYXQiKTsKIAkJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmPSB+KDEgPDwgUkVJU0VSRlNfQVRUUlMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICghKGxlMzJfdG9fY3B1KHJzLT5zX2ZsYWdzKSAmIHJlaXNlcmZzX2F0dHJzX2NsZWFyZWQpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVpc2VyZnM6IGNhbm5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgdW50aWwgZmxhZyBpcyBzZXQgaW4gc3VwZXItYmxvY2siKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTgiLCAiY2Fubm90IHN1cHBvcnQgIgorCQkJCQkgImF0dHJpYnV0ZXMgdW50aWwgZmxhZyBpcyBzZXQgaW4gIgorCQkJCQkgInN1cGVyLWJsb2NrIik7CiAJCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJj0gfigxIDw8IFJFSVNFUkZTX0FUVFJTKTsKIAkJfQogCX0KQEAgLTEyNzgsNiArMTI5Niw4IEBACiAJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X3N0YXRlID0gc2JfdW1vdW50X3N0YXRlKHJzKTsKIAkJcy0+c19mbGFncyAmPSB+TVNfUkRPTkxZOwogCQlzZXRfc2JfdW1vdW50X3N0YXRlKHJzLCBSRUlTRVJGU19FUlJPUl9GUyk7CisJCWlmICghb2xkX2Zvcm1hdF9vbmx5KHMpKQorCQkJc2V0X3NiX21udF9jb3VudChycywgc2JfbW50X2NvdW50KHJzKSArIDEpOwogCQkvKiBtYXJrX2J1ZmZlcl9kaXJ0eSAoU0JfQlVGRkVSX1dJVEhfU0IgKHMpLCAxKTsgKi8KIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9zdGF0ZSA9IFJFSVNFUkZTX1ZBTElEX0ZTOwpAQCAtMTMxMiw3ICsxMzMyLDcgQEAKIAogCWJoID0gc2JfYnJlYWQocywgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUpOwogCWlmICghYmgpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNjogcmVhZF9zdXBlcl9ibG9jazogIgorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDA2IiwKIAkJCQkgImJyZWFkIGZhaWxlZCAoZGV2ICVzLCBibG9jayAlbHUsIHNpemUgJWx1KSIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBvZmZzZXQgLyBzLT5zX2Jsb2Nrc2l6ZSwKIAkJCQkgcy0+c19ibG9ja3NpemUpOwpAQCAtMTMyNiwxNSArMTM0NiwxNSBAQAogCX0KIAkvLwogCS8vIG9rLCByZWlzZXJmcyBzaWduYXR1cmUgKG9sZCBvciBuZXcpIGZvdW5kIGluIGF0IHRoZSBnaXZlbiBvZmZzZXQKLQkvLyAgICAKKwkvLwogCWZzX2Jsb2Nrc2l6ZSA9IHNiX2Jsb2Nrc2l6ZShycyk7CiAJYnJlbHNlKGJoKTsKIAlzYl9zZXRfYmxvY2tzaXplKHMsIGZzX2Jsb2Nrc2l6ZSk7CiAKIAliaCA9IHNiX2JyZWFkKHMsIG9mZnNldCAvIHMtPnNfYmxvY2tzaXplKTsKIAlpZiAoIWJoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMDc6IHJlYWRfc3VwZXJfYmxvY2s6ICIKLQkJCQkgImJyZWFkIGZhaWxlZCAoZGV2ICVzLCBibG9jayAlbHUsIHNpemUgJWx1KVxuIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNyIsCisJCQkJICJicmVhZCBmYWlsZWQgKGRldiAlcywgYmxvY2sgJWx1LCBzaXplICVsdSkiLAogCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUsCiAJCQkJIHMtPnNfYmxvY2tzaXplKTsKIAkJcmV0dXJuIDE7CkBAIC0xMzQyLDggKzEzNjIsOCBAQAogCiAJcnMgPSAoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICopYmgtPmJfZGF0YTsKIAlpZiAoc2JfYmxvY2tzaXplKHJzKSAhPSBzLT5zX2Jsb2Nrc2l6ZSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDExOiByZWFkX3N1cGVyX2Jsb2NrOiAiCi0JCQkJICJjYW4ndCBmaW5kIGEgcmVpc2VyZnMgZmlsZXN5c3RlbSBvbiAoZGV2ICVzLCBibG9jayAlTHUsIHNpemUgJWx1KVxuIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAxMSIsICJjYW4ndCBmaW5kIGEgcmVpc2VyZnMgIgorCQkJCSAiZmlsZXN5c3RlbSBvbiAoZGV2ICVzLCBibG9jayAlTHUsIHNpemUgJWx1KSIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLAogCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkJIHMtPnNfYmxvY2tzaXplKTsKQEAgLTEzNTMsOSArMTM3MywxMCBAQAogCiAJaWYgKHJzLT5zX3YxLnNfcm9vdF9ibG9jayA9PSBjcHVfdG9fbGUzMigtMSkpIHsKIAkJYnJlbHNlKGJoKTsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAiVW5maW5pc2hlZCByZWlzZXJmc2NrIC0tcmVidWlsZC10cmVlIHJ1biBkZXRlY3RlZC4gUGxlYXNlIHJ1blxuIgotCQkJCSAicmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBhbmQgd2FpdCBmb3IgYSBjb21wbGV0aW9uLiBJZiB0aGF0IGZhaWxzXG4iCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTkiLCAiVW5maW5pc2hlZCByZWlzZXJmc2NrICIKKwkJCQkgIi0tcmVidWlsZC10cmVlIHJ1biBkZXRlY3RlZC4gUGxlYXNlIHJ1blxuIgorCQkJCSAicmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBhbmQgd2FpdCBmb3IgYSAiCisJCQkJICJjb21wbGV0aW9uLiBJZiB0aGF0IGZhaWxzXG4iCiAJCQkJICJnZXQgbmV3ZXIgcmVpc2VyZnNwcm9ncyBwYWNrYWdlIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTEzNjcsMTggKzEzODgsMTUgQEAKIAkJLyogbWFnaWMgaXMgb2Ygbm9uLXN0YW5kYXJkIGpvdXJuYWwgZmlsZXN5c3RlbSwgbG9vayBhdCBzX3ZlcnNpb24gdG8KIAkJICAgZmluZCB3aGljaCBmb3JtYXQgaXMgaW4gdXNlICovCiAJCWlmIChzYl92ZXJzaW9uKHJzKSA9PSBSRUlTRVJGU19WRVJTSU9OXzIpCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVhZF9zdXBlcl9ibG9jazogZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy42XCIiCi0JCQkJCSAiIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWwiKTsKKwkJCXJlaXNlcmZzX2luZm8ocywgImZvdW5kIHJlaXNlcmZzIGZvcm1hdCBcIjMuNlwiIgorCQkJCSAgICAgICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbFxuIik7CiAJCWVsc2UgaWYgKHNiX3ZlcnNpb24ocnMpID09IFJFSVNFUkZTX1ZFUlNJT05fMSkKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWFkX3N1cGVyX2Jsb2NrOiBmb3VuZCByZWlzZXJmcyBmb3JtYXQgXCIzLjVcIiIKLQkJCQkJICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbCIpOworCQkJcmVpc2VyZnNfaW5mbyhzLCAiZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy41XCIiCisJCQkJICAgICAgIiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsXG4iKTsKIAkJZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAic2gtMjAxMjogcmVhZF9zdXBlcl9ibG9jazogZm91bmQgdW5rbm93biAiCi0JCQkJCSAiZm9ybWF0IFwiJXVcIiBvZiByZWlzZXJmcyB3aXRoIG5vbi1zdGFuZGFyZCBtYWdpYyIsCi0JCQkJCSBzYl92ZXJzaW9uKHJzKSk7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDEyIiwgImZvdW5kIHVua25vd24gIgorCQkJCQkgImZvcm1hdCBcIiV1XCIgb2YgcmVpc2VyZnMgd2l0aCAiCisJCQkJCSAibm9uLXN0YW5kYXJkIG1hZ2ljIiwgc2JfdmVyc2lvbihycykpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UKQEAgLTE0MDgsOCArMTQyNiw3IEBACiAJbGxfcndfYmxvY2soUkVBRCwgMSwgJihTQl9CVUZGRVJfV0lUSF9TQihzKSkpOwogCXdhaXRfb25fYnVmZmVyKFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShTQl9CVUZGRVJfV0lUSF9TQihzKSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAicmVyZWFkX21ldGFfYmxvY2tzLCBlcnJvciByZWFkaW5nIHRoZSBzdXBlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA0IiwgImVycm9yIHJlYWRpbmcgdGhlIHN1cGVyIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTQ1Miw4ICsxNDY5LDggQEAKIAkJCWlmIChyZWlzZXJmc19ydXBhc292X2hhc2gocykpIHsKIAkJCQloYXNoID0gWVVSQV9IQVNIOwogCQkJfQotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRlMgc2VlbXMgdG8gYmUgZW1wdHksIGF1dG9kZXRlY3QgIgotCQkJCQkgImlzIHVzaW5nIHRoZSBkZWZhdWx0IGhhc2giKTsKKwkJCXJlaXNlcmZzX2luZm8ocywgIkZTIHNlZW1zIHRvIGJlIGVtcHR5LCBhdXRvZGV0ZWN0ICIKKwkJCQkJICJpcyB1c2luZyB0aGUgZGVmYXVsdCBoYXNoXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCXI1aGFzaCA9IEdFVF9IQVNIX1ZBTFVFKHI1X2hhc2goZGUuZGVfbmFtZSwgZGUuZGVfbmFtZWxlbikpOwpAQCAtMTQ3MywxMCArMTQ5MCwxMCBAQAogCQkJJiYgKHl1cmFoYXNoID09CiAJCQkgICAgR0VUX0hBU0hfVkFMVUUoZGVoX29mZnNldAogCQkJCQkgICAoJihkZS5kZV9kZWhbZGUuZGVfZW50cnlfbnVtXSkpKSkpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGhhc2ggZnVuY3Rpb24uICIKLQkJCQkJICJQbGVhc2UgbW91bnQgd2l0aCAtbyBoYXNoPXt0ZWEscnVwYXNvdixyNX0iLAotCQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocykpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwNiIsICJVbmFibGUgdG8gIgorCQkJCQkgImF1dG9tYXRpY2FsbHkgZGV0ZWN0IGhhc2ggZnVuY3Rpb24uICIKKwkJCQkJICJQbGVhc2UgbW91bnQgd2l0aCAtbyAiCisJCQkJCSAiaGFzaD17dGVhLHJ1cGFzb3YscjV9Iik7CiAJCQloYXNoID0gVU5TRVRfSEFTSDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDkwLDcgKzE1MDcsOCBAQAogCQkJIChkZWhfb2Zmc2V0KCYoZGUuZGVfZGVoW2RlLmRlX2VudHJ5X251bV0pKSkgPT0gcjVoYXNoKQogCQkJaGFzaCA9IFI1X0hBU0g7CiAJCWVsc2UgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiVW5yZWNvZ25pc2VkIGhhc2ggZnVuY3Rpb24iKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDYiLAorCQkJCQkgIlVucmVjb2duaXNlZCBoYXNoIGZ1bmN0aW9uIik7CiAJCQloYXNoID0gVU5TRVRfSEFTSDsKIAkJfQogCX0gd2hpbGUgKDApOwpAQCAtMTUxNCwyMSArMTUzMiwyNCBAQAogCQljb2RlID0gZmluZF9oYXNoX291dChzKTsKIAogCWlmIChjb2RlICE9IFVOU0VUX0hBU0ggJiYgcmVpc2VyZnNfaGFzaF9kZXRlY3QocykpIHsKLQkJLyogZGV0ZWN0aW9uIGhhcyBmb3VuZCB0aGUgaGFzaCwgYW5kIHdlIG11c3QgY2hlY2sgYWdhaW5zdCB0aGUgCi0JCSAqKiBtb3VudCBvcHRpb25zIAorCQkvKiBkZXRlY3Rpb24gaGFzIGZvdW5kIHRoZSBoYXNoLCBhbmQgd2UgbXVzdCBjaGVjayBhZ2FpbnN0IHRoZQorCQkgKiogbW91bnQgb3B0aW9ucwogCQkgKi8KIAkJaWYgKHJlaXNlcmZzX3J1cGFzb3ZfaGFzaChzKSAmJiBjb2RlICE9IFlVUkFfSEFTSCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDciLAorCQkJCQkgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCiAJCQkJCSAidW5hYmxlIHRvIGZvcmNlIHJ1cGFzb3YgaGFzaCIsCiAJCQkJCSByZWlzZXJmc19oYXNobmFtZShjb2RlKSk7CiAJCQljb2RlID0gVU5TRVRfSEFTSDsKIAkJfSBlbHNlIGlmIChyZWlzZXJmc190ZWFfaGFzaChzKSAmJiBjb2RlICE9IFRFQV9IQVNIKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwOCIsCisJCQkJCSAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKIAkJCQkJICJ1bmFibGUgdG8gZm9yY2UgdGVhIGhhc2giLAogCQkJCQkgcmVpc2VyZnNfaGFzaG5hbWUoY29kZSkpOwogCQkJY29kZSA9IFVOU0VUX0hBU0g7CiAJCX0gZWxzZSBpZiAocmVpc2VyZnNfcjVfaGFzaChzKSAmJiBjb2RlICE9IFI1X0hBU0gpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA5IiwKKwkJCQkJICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgogCQkJCQkgInVuYWJsZSB0byBmb3JjZSByNSBoYXNoIiwKIAkJCQkJIHJlaXNlcmZzX2hhc2huYW1lKGNvZGUpKTsKIAkJCWNvZGUgPSBVTlNFVF9IQVNIOwpAQCAtMTU0NCw3ICsxNTY1LDcgQEAKIAkJfQogCX0KIAotCS8qIGlmIHdlIGFyZSBtb3VudGVkIFJXLCBhbmQgd2UgaGF2ZSBhIG5ldyB2YWxpZCBoYXNoIGNvZGUsIHVwZGF0ZSAKKwkvKiBpZiB3ZSBhcmUgbW91bnRlZCBSVywgYW5kIHdlIGhhdmUgYSBuZXcgdmFsaWQgaGFzaCBjb2RlLCB1cGRhdGUKIAkgKiogdGhlIHN1cGVyCiAJICovCiAJaWYgKGNvZGUgIT0gVU5TRVRfSEFTSCAmJgpAQCAtMTU4Nyw5ICsxNjA4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBTV0FSTihzaWxlbnQsIHMsIC4uLikJCQlcCisjZGVmaW5lIFNXQVJOKHNpbGVudCwgcywgaWQsIC4uLikJCQlcCiAJaWYgKCEoc2lsZW50KSkJCQkJXAotCQlyZWlzZXJmc193YXJuaW5nIChzLCBfX1ZBX0FSR1NfXykKKwkJcmVpc2VyZnNfd2FybmluZyhzLCBpZCwgX19WQV9BUkdTX18pCiAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CkBAIC0xNjIzLDEwICsxNjQ0LDYgQEAKIAlSRUlTRVJGU19TQihzKS0+c19hbGxvY19vcHRpb25zLnByZWFsbG9jbWluID0gMDsKIAkvKiBQcmVhbGxvY2F0ZSBieSAxNiBibG9ja3MgKDE3LTEpIGF0IG9uY2UgKi8KIAlSRUlTRVJGU19TQihzKS0+c19hbGxvY19vcHRpb25zLnByZWFsbG9jc2l6ZSA9IDE3OwotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotCS8qIEluaXRpYWxpemUgdGhlIHJ3c2VtIGZvciB4YXR0ciBkaXIgKi8KLQlpbml0X3J3c2VtKCZSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSk7Ci0jZW5kaWYKIAkvKiBzZXR1cCBkZWZhdWx0IGJsb2NrIGFsbG9jYXRvciBvcHRpb25zICovCiAJcmVpc2VyZnNfaW5pdF9hbGxvY19vcHRpb25zKHMpOwogCkBAIC0xNjQxLDggKzE2NTgsNyBAQAogI2VuZGlmCiAKIAlpZiAoYmxvY2tzKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTc6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHJlc2l6ZSBvcHRpb24gIgotCQkgICAgICAiZm9yIHJlbW91bnQgb25seSIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC03IiwgInJlc2l6ZSBvcHRpb24gZm9yIHJlbW91bnQgb25seSIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTY1MSw4ICsxNjY3LDcgQEAKIAkJb2xkX2Zvcm1hdCA9IDE7CiAJLyogdHJ5IG5ldyBmb3JtYXQgKDY0LXRoIDFrIGJsb2NrKSwgd2hpY2ggY2FuIGNvbnRhaW4gcmVpc2VyZnMgc3VwZXIgYmxvY2sgKi8KIAllbHNlIGlmIChyZWFkX3N1cGVyX2Jsb2NrKHMsIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJzaC0yMDIxOiByZWlzZXJmc19maWxsX3N1cGVyOiBjYW4gbm90IGZpbmQgcmVpc2VyZnMgb24gJXMiLAorCQlTV0FSTihzaWxlbnQsIHMsICJzaC0yMDIxIiwgImNhbiBub3QgZmluZCByZWlzZXJmcyBvbiAlcyIsCiAJCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xNjY0LDEzICsxNjc5LDEyIEBACiAJaWYgKHMtPnNfYmRldiAmJiBzLT5zX2JkZXYtPmJkX2lub2RlCiAJICAgICYmIGlfc2l6ZV9yZWFkKHMtPnNfYmRldi0+YmRfaW5vZGUpIDwKIAkgICAgc2JfYmxvY2tfY291bnQocnMpICogc2JfYmxvY2tzaXplKHJzKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJGaWxlc3lzdGVtIG9uICVzIGNhbm5vdCBiZSBtb3VudGVkIGJlY2F1c2UgaXQgaXMgYmlnZ2VyIHRoYW4gdGhlIGRldmljZSIsCi0JCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiWW91IG1heSBuZWVkIHRvIHJ1biBmc2NrIG9yIGluY3JlYXNlIHNpemUgb2YgeW91ciBMVk0gcGFydGl0aW9uIik7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgIk9yIG1heSBiZSB5b3UgZm9yZ290IHRvIHJlYm9vdCBhZnRlciBmZGlzayB3aGVuIGl0IHRvbGQgeW91IHRvIik7CisJCVNXQVJOKHNpbGVudCwgcywgIiIsICJGaWxlc3lzdGVtIGNhbm5vdCBiZSAiCisJCSAgICAgICJtb3VudGVkIGJlY2F1c2UgaXQgaXMgYmlnZ2VyIHRoYW4gdGhlIGRldmljZSIpOworCQlTV0FSTihzaWxlbnQsIHMsICIiLCAiWW91IG1heSBuZWVkIHRvIHJ1biBmc2NrICIKKwkJICAgICAgIm9yIGluY3JlYXNlIHNpemUgb2YgeW91ciBMVk0gcGFydGl0aW9uIik7CisJCVNXQVJOKHNpbGVudCwgcywgIiIsICJPciBtYXkgYmUgeW91IGZvcmdvdCB0byAiCisJCSAgICAgICJyZWJvb3QgYWZ0ZXIgZmRpc2sgd2hlbiBpdCB0b2xkIHlvdSB0byIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTY3OCwxNCArMTY5MiwxMyBAQAogCXNiaS0+c19tb3VudF9zdGF0ZSA9IFJFSVNFUkZTX1ZBTElEX0ZTOwogCiAJaWYgKChlcnJ2YWwgPSByZWlzZXJmc19pbml0X2JpdG1hcF9jYWNoZShzKSkpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiam1hY2QtODogcmVpc2VyZnNfZmlsbF9zdXBlcjogdW5hYmxlIHRvIHJlYWQgYml0bWFwIik7CisJCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTgiLCAidW5hYmxlIHRvIHJlYWQgYml0bWFwIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCWVycnZhbCA9IC1FSU5WQUw7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JU1dBUk4oc2lsZW50LCBzLCAiQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIHNldCBPTiIpOwotCVNXQVJOKHNpbGVudCwgcywgIi0gaXQgaXMgc2xvdyBtb2RlIGZvciBkZWJ1Z2dpbmcuIik7CisJU1dBUk4oc2lsZW50LCBzLCAiIiwgIkNPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBzZXQgT04iKTsKKwlTV0FSTihzaWxlbnQsIHMsICIiLCAiLSBpdCBpcyBzbG93IG1vZGUgZm9yIGRlYnVnZ2luZy4iKTsKICNlbmRpZgogCiAJLyogbWFrZSBkYXRhPW9yZGVyZWQgdGhlIGRlZmF1bHQgKi8KQEAgLTE3MDYsOCArMTcxOSw4IEBACiAJfQogCS8vIHNldF9kZXZpY2Vfcm8ocy0+c19kZXYsIDEpIDsKIAlpZiAoam91cm5hbF9pbml0KHMsIGpkZXZfbmFtZSwgb2xkX2Zvcm1hdCwgY29tbWl0X21heF9hZ2UpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgInNoLTIwMjI6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHVuYWJsZSB0byBpbml0aWFsaXplIGpvdXJuYWwgc3BhY2UiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAic2gtMjAyMiIsCisJCSAgICAgICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3VybmFsIHNwYWNlIik7CiAJCWdvdG8gZXJyb3I7CiAJfSBlbHNlIHsKIAkJamluaXRfZG9uZSA9IDE7CS8qIG9uY2UgdGhpcyBpcyBzZXQsIGpvdXJuYWxfcmVsZWFzZSBtdXN0IGJlIGNhbGxlZApAQCAtMTcxNSw4ICsxNzI4LDggQEAKIAkJCQkgKi8KIAl9CiAJaWYgKHJlcmVhZF9tZXRhX2Jsb2NrcyhzKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJqbWFjZC05OiByZWlzZXJmc19maWxsX3N1cGVyOiB1bmFibGUgdG8gcmVyZWFkIG1ldGEgYmxvY2tzIGFmdGVyIGpvdXJuYWwgaW5pdCIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC05IiwKKwkJICAgICAgInVuYWJsZSB0byByZXJlYWQgbWV0YSBibG9ja3MgYWZ0ZXIgam91cm5hbCBpbml0Iik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNzI0LDggKzE3MzcsOCBAQAogCQlnb3RvIGVycm9yOwogCiAJaWYgKGJkZXZfcmVhZF9vbmx5KHMtPnNfYmRldikgJiYgIShzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJjbG0tNzAwMDogRGV0ZWN0ZWQgcmVhZG9ubHkgZGV2aWNlLCBtYXJraW5nIEZTIHJlYWRvbmx5Iik7CisJCVNXQVJOKHNpbGVudCwgcywgImNsbS03MDAwIiwKKwkJICAgICAgIkRldGVjdGVkIHJlYWRvbmx5IGRldmljZSwgbWFya2luZyBGUyByZWFkb25seSIpOwogCQlzLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAl9CiAJYXJncy5vYmplY3RpZCA9IFJFSVNFUkZTX1JPT1RfT0JKRUNUSUQ7CkBAIC0xNzM0LDggKzE3NDcsNyBAQAogCSAgICBpZ2V0NV9sb2NrZWQocywgUkVJU0VSRlNfUk9PVF9PQkpFQ1RJRCwgcmVpc2VyZnNfZmluZF9hY3RvciwKIAkJCSByZWlzZXJmc19pbml0X2xvY2tlZF9pbm9kZSwgKHZvaWQgKikoJmFyZ3MpKTsKIAlpZiAoIXJvb3RfaW5vZGUpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiam1hY2QtMTA6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IGdldCByb290IGlub2RlIGZhaWxlZCIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC0xMCIsICJnZXQgcm9vdCBpbm9kZSBmYWlsZWQiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE3ODQsNyArMTc5Niw3IEBACiAJCSAqIGF2b2lkaW5nIGNvcnJ1cHRpb24uIC1qZWZmbSAqLwogCQlpZiAoYm1hcF93b3VsZF93cmFwKHJlaXNlcmZzX2JtYXBfY291bnQocykpICYmCiAJCSAgICBzYl9ibWFwX25yKHJzKSAhPSAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci0yMDMwOiBUaGlzIGZpbGUgc3lzdGVtICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTIwMzAiLCAiVGhpcyBmaWxlIHN5c3RlbSAiCiAJCQkJCSJjbGFpbXMgdG8gdXNlICV1IGJpdG1hcCBibG9ja3MgaW4gIgogCQkJCQkiaXRzIHN1cGVyIGJsb2NrLCBidXQgcmVxdWlyZXMgJXUuICIKIAkJCQkJIkNsZWFyaW5nIHRvIHplcm8uIiwgc2JfYm1hcF9ucihycyksCkBAIC0xODE3LDcgKzE4MjksOSBAQAogCQkJfSBlbHNlIGlmICghc2lsZW50KSB7CiAJCQkJcmVpc2VyZnNfaW5mbyhzLCAidXNpbmcgMy41LnggZGlzayBmb3JtYXRcbiIpOwogCQkJfQotCQl9CisJCX0gZWxzZQorCQkJc2V0X3NiX21udF9jb3VudChycywgc2JfbW50X2NvdW50KHJzKSArIDEpOworCiAKIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQllcnJ2YWwgPSBqb3VybmFsX2VuZCgmdGgsIHMsIDEpOwpAQCAtMjAzMSw4ICsyMDQ1LDggQEAKIAlpZiAoIShSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spKSB7CiAJCWVyciA9IHJlaXNlcmZzX3VucGFjayhpbm9kZSwgTlVMTCk7CiAJCWlmIChlcnIpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJInJlaXNlcmZzOiBVbnBhY2tpbmcgdGFpbCBvZiBxdW90YSBmaWxlIGZhaWxlZCIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzdXBlci02NTIwIiwKKwkJCQkiVW5wYWNraW5nIHRhaWwgb2YgcXVvdGEgZmlsZSBmYWlsZWQiCiAJCQkJIiAoJWQpLiBDYW5ub3QgdHVybiBvbiBxdW90YXMuIiwgZXJyKTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKQEAgLTIwNDMsOCArMjA1Nyw4IEBACiAJaWYgKFJFSVNFUkZTX1NCKHNiKS0+c19xZl9uYW1lc1t0eXBlXSkgewogCQkvKiBRdW90YWZpbGUgbm90IG9mIGZzIHJvb3Q/ICovCiAJCWlmIChwYXRoLmRlbnRyeS0+ZF9wYXJlbnQgIT0gc2ItPnNfcm9vdCkKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJICJyZWlzZXJmczogUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic3VwZXItNjUyMSIsCisJCQkJICJRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKIAkJCQkgIkpvdXJuYWxsZWQgcXVvdGEgd2lsbCBub3Qgd29yay4iKTsKIAl9CiAKQEAgLTIxOTUsOSArMjIwOSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKChyZXQgPSByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycygpKSkKLQkJZ290byBmYWlsZWRfcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnM7Ci0KIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQoKTsKIAlyZWlzZXJmc19wcm9jX3JlZ2lzdGVyX2dsb2JhbCgidmVyc2lvbiIsCiAJCQkJICAgICAgcmVpc2VyZnNfZ2xvYmFsX3ZlcnNpb25faW5fcHJvYyk7CkBAIC0yMjA4LDkgKzIyMTksNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0KLSAgICAgIGZhaWxlZF9yZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVyczoKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CkBAIC0yMjIwLDcgKzIyMjgsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yZWlzZXJmc19mcyh2b2lkKQogewotCXJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKTsKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZyZWlzZXJmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3RhaWxfY29udmVyc2lvbi5jIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKaW5kZXggZjgxMjFhMS4uZDdmNmU1MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKKysrIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAkJCQkgICBjb252ZXJ0ZWQgaXRlbS4gKi8KIAlzdHJ1Y3QgaXRlbV9oZWFkIGluZF9paDsJLyogbmV3IGluZGlyZWN0IGl0ZW0gdG8gYmUgaW5zZXJ0ZWQgb3IKIAkJCQkJICAga2V5IG9mIHVuZm0gcG9pbnRlciB0byBiZSBwYXN0ZWQgKi8KLQlpbnQgbl9ibGtfc2l6ZSwgbl9yZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCisJaW50IGJsa19zaXplLCByZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCiAJdW5wX3QgdW5mbV9wdHI7CQkvKiBIYW5kbGUgb24gYW4gdW5mb3JtYXR0ZWQgbm9kZQogCQkJCSAgIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUKIAkJCQkgICB0cmVlLiAqLwpAQCAtMzUsNyArMzUsNyBAQAogCiAJUkVJU0VSRlNfU0Ioc2IpLT5zX2RpcmVjdDJpbmRpcmVjdCsrOwogCi0Jbl9ibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKKwlibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCS8qIGFuZCBrZXkgdG8gc2VhcmNoIGZvciBhcHBlbmQgb3IgaW5zZXJ0IHBvaW50ZXIgdG8gdGhlIG5ldwogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCkBAIC00NiwxMSArNDYsMTEgQEAKIAkvKiBTZXQgdGhlIGtleSB0byBzZWFyY2ggZm9yIHRoZSBwbGFjZSBmb3IgbmV3IHVuZm0gcG9pbnRlciAqLwogCW1ha2VfY3B1X2tleSgmZW5kX2tleSwgaW5vZGUsIHRhaWxfb2Zmc2V0LCBUWVBFX0lORElSRUNULCA0KTsKIAotCS8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzIAorCS8qIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzICovCiAJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC0xNDAzMDogZGlyZWN0MmluZGlyZWN0OiAiCi0JCQkJICJwYXN0ZWQgb3IgaW5zZXJ0ZWQgYnl0ZSBleGlzdHMgaW4gdGhlIHRyZWUgJUsuICIKLQkJCQkgIlVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAiUEFQLTE0MDMwIiwKKwkJCSAgICAgICAicGFzdGVkIG9yIGluc2VydGVkIGJ5dGUgZXhpc3RzIGluICIKKwkJCSAgICAgICAidGhlIHRyZWUgJUsuIFVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CiAJCXBhdGhyZWxzZShwYXRoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNjQsMTcgKzY0LDE3IEBACiAJCXNldF9paF9mcmVlX3NwYWNlKCZpbmRfaWgsIDApOwkvKiBkZWxldGUgYXQgbmVhcmVzdCBmdXR1cmUgKi8KIAkJcHV0X2loX2l0ZW1fbGVuKCZpbmRfaWgsIFVORk1fUF9TSVpFKTsKIAkJUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpKys7Ci0JCW5fcmV0dmFsID0KKwkJcmV0dmFsID0KIAkJICAgIHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAmZW5kX2tleSwgJmluZF9paCwgaW5vZGUsCiAJCQkJCSAoY2hhciAqKSZ1bmZtX3B0cik7CiAJfSBlbHNlIHsKIAkJLyogUGFzdGUgaW50byBsYXN0IGluZGlyZWN0IGl0ZW0gb2YgYW4gb2JqZWN0LiAqLwotCQluX3JldHZhbCA9IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAorCQlyZXR2YWwgPSByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCSAgICAoY2hhciAqKSZ1bmZtX3B0ciwKIAkJCQkJCSAgICBVTkZNX1BfU0laRSk7CiAJfQotCWlmIChuX3JldHZhbCkgewotCQlyZXR1cm4gbl9yZXR2YWw7CisJaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAkvLyBub3RlOiBmcm9tIGhlcmUgdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QKIAkvLyB0aHJlZSBrZXkgY29tcG9uZW50cy4gVGhleSBvbmx5IGRpZmZlciBieSB0aGUgZm91cnRoIG9uZS4KQEAgLTkyLDE0ICs5MiwxMyBAQAogCQkgICBsYXN0IGl0ZW0gb2YgdGhlIGZpbGUgKi8KIAkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0KIAkJICAgIFBPU0lUSU9OX0ZPVU5EKQotCQkJcmVpc2VyZnNfcGFuaWMoc2IsCi0JCQkJICAgICAgICJQQVAtMTQwNTA6IGRpcmVjdDJpbmRpcmVjdDogIgorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJQQVAtMTQwNTAiLAogCQkJCSAgICAgICAiZGlyZWN0IGl0ZW0gKCVLKSBub3QgZm91bmQiLCAmZW5kX2tleSk7CiAJCXBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CiAJCVJGQUxTRSghaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpLAogCQkgICAgICAgInZzLTE0MDU1OiBkaXJlY3QgaXRlbSBleHBlY3RlZCglSyksIGZvdW5kICVoIiwKIAkJICAgICAgICZlbmRfa2V5LCBwX2xlX2loKTsKLQkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKG5fYmxrX3NpemUgLSAxKSkKKwkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKGJsa19zaXplIC0gMSkpCiAJCSAgICArIGloX2l0ZW1fbGVuKHBfbGVfaWgpIC0gMTsKIAogCQkvKiB3ZSBvbmx5IHNlbmQgdGhlIHVuYmggcG9pbnRlciBpZiB0aGUgYnVmZmVyIGlzIG5vdCB1cCB0byBkYXRlLgpAQCAtMTE0LDExICsxMTMsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCXVwX3RvX2RhdGVfYmggPSB1bmJoOwogCQl9Ci0JCW5fcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKKwkJcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCXVwX3RvX2RhdGVfYmgpOwogCi0JCXRvdGFsX3RhaWwgKz0gbl9yZXR2YWw7Ci0JCWlmICh0YWlsX3NpemUgPT0gbl9yZXR2YWwpCisJCXRvdGFsX3RhaWwgKz0gcmV0dmFsOworCQlpZiAodGFpbF9zaXplID09IHJldHZhbCkKIAkJCS8vIGRvbmU6IGZpbGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgaXRlbXMgYW55bW9yZQogCQkJYnJlYWs7CiAKQEAgLTEzMCw3ICsxMjksNyBAQAogCQl1bnNpZ25lZCBwZ29mZiA9CiAJCSAgICAodGFpbF9vZmZzZXQgKyB0b3RhbF90YWlsIC0gMSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJCWNoYXIgKmthZGRyID0ga21hcF9hdG9taWModXBfdG9fZGF0ZV9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBuX2Jsa19zaXplIC0gdG90YWxfdGFpbCk7CisJCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBibGtfc2l6ZSAtIHRvdGFsX3RhaWwpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJfQogCkBAIC0xNzEsMTQgKzE3MCwxOCBAQAogICAgd2hhdCB3ZSBleHBlY3QgZnJvbSBpdCAobnVtYmVyIG9mIGN1dCBieXRlcykuIEJ1dCB3aGVuIHRhaWwgcmVtYWlucwogICAgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUsIHdlIHNldCBtb2RlIHRvIFNLSVBfQkFMQU5DSU5HIGFuZCB1bmxvY2sKICAgIGlub2RlICovCi1pbnQgaW5kaXJlY3QyZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIHBhdGggdG8gdGhlIGluZGlyZWN0IGl0ZW0uICovCi0JCSAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LAkvKiBLZXkgdG8gbG9vayBmb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRvIGJlIGN1dC4gKi8KK2ludCBpbmRpcmVjdDJkaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwJLyogcGF0aCB0byB0aGUgaW5kaXJlY3QgaXRlbS4gKi8KKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwJLyogS2V5IHRvIGxvb2sgZm9yCisJCQkJCQkJICogdW5mb3JtYXR0ZWQgbm9kZQorCQkJCQkJCSAqIHBvaW50ZXIgdG8gYmUgY3V0LiAqLwogCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwJLyogTmV3IGZpbGUgc2l6ZS4gKi8KLQkJICAgIGNoYXIgKnBfY19tb2RlKQorCQkgICAgY2hhciAqbW9kZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGl0ZW1faGVhZCBzX2loOwotCXVuc2lnbmVkIGxvbmcgbl9ibG9ja19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJsb2NrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJY2hhciAqdGFpbDsKIAlpbnQgdGFpbF9sZW4sIHJvdW5kX3RhaWxfbGVuOwogCWxvZmZfdCBwb3MsIHBvczE7CS8qIHBvc2l0aW9uIG9mIGZpcnN0IGJ5dGUgb2YgdGhlIHRhaWwgKi8KQEAgLTE4NiwyMiArMTg5LDIyIEBACiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVJFSVNFUkZTX1NCKHBfc19zYiktPnNfaW5kaXJlY3QyZGlyZWN0Kys7CisJUkVJU0VSRlNfU0Ioc2IpLT5zX2luZGlyZWN0MmRpcmVjdCsrOwogCi0JKnBfY19tb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKKwkqbW9kZSA9IE1fU0tJUF9CQUxBTkNJTkc7CiAKIAkvKiBzdG9yZSBpdGVtIGhlYWQgcGF0aCBwb2ludHMgdG8uICovCi0JY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogCi0JdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKG5fYmxvY2tfc2l6ZSAtIDEpKTsKLQlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24ocF9zX2lub2RlKSA9PSBTVEFUX0RBVEFfVjIpCisJdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKGJsb2NrX3NpemUgLSAxKSk7CisJaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjIpCiAJCXJvdW5kX3RhaWxfbGVuID0gUk9VTkRfVVAodGFpbF9sZW4pOwogCWVsc2UKIAkJcm91bmRfdGFpbF9sZW4gPSB0YWlsX2xlbjsKIAogCXBvcyA9CiAJICAgIGxlX2loX2tfb2Zmc2V0KCZzX2loKSAtIDEgKyAoaWhfaXRlbV9sZW4oJnNfaWgpIC8gVU5GTV9QX1NJWkUgLQotCQkJCQkgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkJCQkgMSkgKiBzYi0+c19ibG9ja3NpemU7CiAJcG9zMSA9IHBvczsKIAogCS8vIHdlIGFyZSBwcm90ZWN0ZWQgYnkgaV9tdXRleC4gVGhlIHRhaWwgY2FuIG5vdCBkaXNhcHBlciwgbm90CkBAIC0yMTAsMjcgKzIxMywyNiBAQAogCiAJdGFpbCA9IChjaGFyICopa21hcChwYWdlKTsJLyogdGhpcyBjYW4gc2NoZWR1bGUgKi8KIAotCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBfc19wYXRoKSkgeworCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBhdGgpKSB7CiAJCS8qIHJlLXNlYXJjaCBpbmRpcmVjdCBpdGVtICovCi0JCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpCisJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpCiAJCSAgICA9PSBQT1NJVElPTl9OT1RfRk9VTkQpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJQQVAtNTUyMDogaW5kaXJlY3QyZGlyZWN0OiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01NTIwIiwKIAkJCQkgICAgICAgIml0ZW0gdG8gYmUgY29udmVydGVkICVLIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkgICAgICAgcF9zX2l0ZW1fa2V5KTsKLQkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQkJCSAgICAgICBpdGVtX2tleSk7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQlwb3MgPSBsZV9paF9rX29mZnNldCgmc19paCkgLSAxICsKIAkJICAgIChpaF9pdGVtX2xlbigmc19paCkgLyBVTkZNX1BfU0laRSAtCi0JCSAgICAgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkgICAgIDEpICogc2ItPnNfYmxvY2tzaXplOwogCQlpZiAocG9zICE9IHBvczEpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJ2cy01NTMwOiBpbmRpcmVjdDJkaXJlY3Q6ICIKLQkJCQkgICAgICAgInRhaWwgcG9zaXRpb24gY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHJlYWRpbmcgaXQiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTUzMCIsICJ0YWlsIHBvc2l0aW9uICIKKwkJCQkgICAgICAgImNoYW5nZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nIGl0Iik7CiAjZW5kaWYKIAl9CiAKIAkvKiBTZXQgZGlyZWN0IGl0ZW0gaGVhZGVyIHRvIGluc2VydC4gKi8KLQltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24ocF9zX2lub2RlKSwKKwltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oaW5vZGUpLAogCQkJICBwb3MxICsgMSwgVFlQRV9ESVJFQ1QsIHJvdW5kX3RhaWxfbGVuLAogCQkJICAweGZmZmYgLyppaF9mcmVlX3NwYWNlICovICk7CiAKQEAgLTI0MCwxMyArMjQyLDEzIEBACiAJICovCiAJdGFpbCA9IHRhaWwgKyAocG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKTsKIAotCVBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkrKzsKKwlQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkrKzsKIAotCWtleSA9ICpwX3NfaXRlbV9rZXk7CisJa2V5ID0gKml0ZW1fa2V5OwogCXNldF9jcHVfa2V5X2tfdHlwZSgma2V5LCBUWVBFX0RJUkVDVCk7CiAJa2V5LmtleV9sZW5ndGggPSA0OwogCS8qIEluc2VydCB0YWlsIGFzIG5ldyBkaXJlY3QgaXRlbSBpbiB0aGUgdHJlZSAqLwotCWlmIChyZWlzZXJmc19pbnNlcnRfaXRlbSh0aCwgcF9zX3BhdGgsICZrZXksICZzX2loLCBwX3NfaW5vZGUsCisJaWYgKHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAma2V5LCAmc19paCwgaW5vZGUsCiAJCQkJIHRhaWwgPyB0YWlsIDogTlVMTCkgPCAwKSB7CiAJCS8qIE5vIGRpc2sgbWVtb3J5LiBTbyB3ZSBjYW4gbm90IGNvbnZlcnQgbGFzdCB1bmZvcm1hdHRlZCBub2RlCiAJCSAgIHRvIHRoZSBkaXJlY3QgaXRlbS4gIEluIHRoaXMgY2FzZSB3ZSB1c2VkIHRvIGFkanVzdApAQCAtMjU1LDEyICsyNTcsMTIgQEAKIAkJICAgdW5mb3JtYXR0ZWQgbm9kZS4gRm9yIG5vdyBpX3NpemUgaXMgY29uc2lkZXJlZCBhcyBndWFyZCBmb3IKIAkJICAgZ29pbmcgb3V0IG9mIGZpbGUgc2l6ZSAqLwogCQlrdW5tYXAocGFnZSk7Ci0JCXJldHVybiBuX2Jsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKKwkJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIAl9CiAJa3VubWFwKHBhZ2UpOwogCiAJLyogbWFrZSBzdXJlIHRvIGdldCB0aGUgaV9ibG9ja3MgY2hhbmdlcyBmcm9tIHJlaXNlcmZzX2luc2VydF9pdGVtICovCi0JcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBwX3NfaW5vZGUpOworCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwogCiAJLy8gbm90ZTogd2UgaGF2ZSBub3cgdGhlIHNhbWUgYXMgaW4gYWJvdmUgZGlyZWN0MmluZGlyZWN0CiAJLy8gY29udmVyc2lvbjogdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QgdGhyZWUKQEAgLTI2OCwxMSArMjcwLDExIEBACiAKIAkvKiBXZSBoYXZlIGluc2VydGVkIG5ldyBkaXJlY3QgaXRlbSBhbmQgbXVzdCByZW1vdmUgbGFzdAogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCi0JKnBfY19tb2RlID0gTV9DVVQ7CisJKm1vZGUgPSBNX0NVVDsKIAogCS8qIHdlIHN0b3JlIHBvc2l0aW9uIG9mIGZpcnN0IGRpcmVjdCBpdGVtIGluIHRoZSBpbi1jb3JlIGlub2RlICovCi0JLy9tYXJrX2ZpbGVfd2l0aF90YWlsIChwX3NfaW5vZGUsIHBvczEgKyAxKTsKLQlSRUlTRVJGU19JKHBfc19pbm9kZSktPmlfZmlyc3RfZGlyZWN0X2J5dGUgPSBwb3MxICsgMTsKKwkvKiBtYXJrX2ZpbGVfd2l0aF90YWlsIChpbm9kZSwgcG9zMSArIDEpOyAqLworCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gcG9zMSArIDE7CiAKLQlyZXR1cm4gbl9ibG9ja19zaXplIC0gcm91bmRfdGFpbF9sZW47CisJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGFlODgxY2MuLmU1Mjc0M2UgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMjcsNiArMjcsMTAgQEAKICAqIHRoZXNlIGFyZSBzcGVjaWFsIGNhc2VzIGZvciBmaWxlc3lzdGVtIEFDTHMsIHRoZXkgYXJlIGludGVycHJldGVkIGJ5IHRoZQogICoga2VybmVsLCBpbiBhZGRpdGlvbiwgdGhleSBhcmUgbmVnYXRpdmVseSBhbmQgcG9zaXRpdmVseSBjYWNoZWQgYW5kIGF0dGFjaGVkCiAgKiB0byB0aGUgaW5vZGUgc28gdGhhdCB1bm5lY2Vzc2FyeSBsb29rdXBzIGFyZSBhdm9pZGVkLgorICoKKyAqIExvY2tpbmcgd29ya3MgbGlrZSBzbzoKKyAqIERpcmVjdG9yeSBjb21wb25lbnRzICh4YXR0ciByb290LCB4YXR0ciBkaXIpIGFyZSBwcm90ZWN0ZCBieSB0aGVpciBpX211dGV4LgorICogVGhlIHhhdHRycyB0aGVtc2VsdmVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIHhhdHRyX3NlbS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KQEAgLTQ0LDMzMCArNDgsMzM0IEBACiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAotI2RlZmluZSBGTF9SRUFET05MWSAxMjgKLSNkZWZpbmUgRkxfRElSX1NFTV9IRUxEIDI1NgogI2RlZmluZSBQUklWUk9PVF9OQU1FICIucmVpc2VyZnNfcHJpdiIKICNkZWZpbmUgWEFST09UX05BTUUgICAieGF0dHJzIgogCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KTsKIAotLyogUmV0dXJucyB0aGUgZGVudHJ5IHJlZmVycmluZyB0byB0aGUgcm9vdCBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBkaXJlY3RvcnkgdHJlZS4gSWYgaXQgaGFzIGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGl0IGlzIHVzZWQuIElmIGl0Ci0gKiBoYXNuJ3QgYmVlbiBjcmVhdGVkIGFuZCB0aGUgZmxhZ3MgaW5kaWNhdGUgY3JlYXRpb24gaXMgYWxsb3dlZCwgd2UKLSAqIGF0dGVtcHQgdG8gY3JlYXRlIGl0LiBPbiBlcnJvciwgd2UgcmV0dXJuIGEgcG9pbnRlci1lbmNvZGVkIGVycm9yLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X3hhX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzKQorLyogSGVscGVycyBmb3IgaW5vZGUgb3BzLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbGwgdGhlIFZGUworICogb3ZlcmhlYWQgYW5kIGFsc28gZm9yIHByb3BlciBpX211dGV4IGFubm90YXRpb24uCisgKiBkaXItPmlfbXV0ZXggbXVzdCBiZSBoZWxkIGZvciBhbGwgb2YgdGhlbS4gKi8KK3N0YXRpYyBpbnQgeGF0dHJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQogewotCXN0cnVjdCBkZW50cnkgKnByaXZyb290ID0gZGdldChSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdCk7Ci0Jc3RydWN0IGRlbnRyeSAqeGFyb290OwotCi0JLyogVGhpcyBuZWVkcyB0byBiZSBjcmVhdGVkIGF0IG1vdW50LXRpbWUgKi8KLQlpZiAoIXByaXZyb290KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmcHJpdnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotCWlmIChSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QpIHsKLQkJeGFyb290ID0gZGdldChSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl4YXJvb3QgPSBsb29rdXBfb25lX2xlbihYQVJPT1RfTkFNRSwgcHJpdnJvb3QsIHN0cmxlbihYQVJPT1RfTkFNRSkpOwotCWlmIChJU19FUlIoeGFyb290KSkgewotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCF4YXJvb3QtPmRfaW5vZGUpIHsKLQkJaW50IGVyciA9IC1FTk9EQVRBOwotCQlpZiAoZmxhZ3MgPT0gMCB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkKLQkJCWVyciA9IHByaXZyb290LT5kX2lub2RlLT5pX29wLT5ta2Rpcihwcml2cm9vdC0+ZF9pbm9kZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YXJvb3QsIDA3MDApOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHV0KHhhcm9vdCk7Ci0JCQl4YXJvb3QgPSBFUlJfUFRSKGVycik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QgPSBkZ2V0KHhhcm9vdCk7Ci0KLSAgICAgIG91dDoKLQltdXRleF91bmxvY2soJnByaXZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQlkcHV0KHByaXZyb290KTsKLQlyZXR1cm4geGFyb290OworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCXJldHVybiBkaXItPmlfb3AtPmNyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgTlVMTCk7CiB9CiAKLS8qIE9wZW5zIHRoZSBkaXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byB0aGUgaW5vZGUncyBleHRlbmRlZCBhdHRyaWJ1dGUgc3RvcmUuCi0gKiBJZiBmbGFncyBhbGxvdywgdGhlIHRyZWUgdG8gdGhlIGRpcmVjdG9yeSBtYXkgYmUgY3JlYXRlZC4gSWYgY3JlYXRpb24gaXMKLSAqIHByb2hpYml0ZWQsIC1FTk9EQVRBIGlzIHJldHVybmVkLiAqLworc3RhdGljIGludCB4YXR0cl9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKwlyZXR1cm4gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7Cit9CisKKy8qIFdlIHVzZSBJX01VVEVYX0NISUxEIGhlcmUgdG8gc2lsZW5jZSBsb2NrZGVwLiBJdCdzIHNhZmUgYmVjYXVzZSB4YXR0cgorICogbXV0YXRpb24gb3BzIGFyZW4ndCBjYWxsZWQgZHVyaW5nIHJlbmFtZSBvciBzcGxhY2UsIHdoaWNoIGFyZSB0aGUKKyAqIG9ubHkgb3RoZXIgdXNlcnMgb2YgSV9NVVRFWF9DSElMRC4gSXQgdmlvbGF0ZXMgdGhlIG9yZGVyaW5nLCBidXQgdGhhdCdzCisgKiBiZXR0ZXIgdGhhbiBhbGxvY2F0aW5nIGFub3RoZXIgc3ViY2xhc3MganVzdCBmb3IgdGhpcyBjb2RlLiAqLworc3RhdGljIGludCB4YXR0cl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyb3I7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisKKwltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwllcnJvciA9IGRpci0+aV9vcC0+dW5saW5rKGRpciwgZGVudHJ5KTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlpZiAoIWVycm9yKQorCQlkX2RlbGV0ZShkZW50cnkpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCB4YXR0cl9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnJvcjsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOworCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKKwllcnJvciA9IGRpci0+aV9vcC0+cm1kaXIoZGlyLCBkZW50cnkpOworCWlmICghZXJyb3IpCisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mbGFncyB8PSBTX0RFQUQ7CisJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWlmICghZXJyb3IpCisJCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOworCisJcmV0dXJuIGVycm9yOworfQorCisjZGVmaW5lIHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpCSghZmxhZ3MgfHwgZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCisKKy8qIFJldHVybnMgYW5kIHBvc3NpYmx5IGNyZWF0ZXMgdGhlIHhhdHRyIGRpci4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3JfY3JlYXRlX2RpcihzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCUJVR19PTighcGFyZW50KTsKKworCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBkZW50cnk7CisJZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQlpbnQgZXJyID0gLUVOT0RBVEE7CisKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0geGF0dHJfbWtkaXIocGFyZW50LT5kX2lub2RlLCBkZW50cnksIDA3MDApOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQl9CisKKwkJaWYgKGVycikgeworCQkJZHB1dChkZW50cnkpOworCQkJZGVudHJ5ID0gRVJSX1BUUihlcnIpOworCQl9CisJfQorCisJcmV0dXJuIGRlbnRyeTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm9wZW5feGFfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqcHJpdnJvb3QgPSBSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdDsKKwlpZiAoIXByaXZyb290KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7CisJcmV0dXJuIGxvb2t1cF9vcl9jcmVhdGVfZGlyKHByaXZyb290LCBYQVJPT1RfTkFNRSwgZmxhZ3MpOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqb3Blbl94YV9kaXIoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBkZW50cnkgKnhhcm9vdCwgKnhhZGlyOwogCWNoYXIgbmFtZWJ1ZlsxN107CiAKLQl4YXJvb3QgPSBnZXRfeGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOworCXhhcm9vdCA9IG9wZW5feGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFyb290KSkKIAkJcmV0dXJuIHhhcm9vdDsKIAotCS8qIG9rLCB3ZSBoYXZlIHhhcm9vdCBvcGVuICovCiAJc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJVguJVgiLAogCQkgbGUzMl90b19jcHUoSU5PREVfUEtFWShpbm9kZSktPmtfb2JqZWN0aWQpLAogCQkgaW5vZGUtPmlfZ2VuZXJhdGlvbik7Ci0JeGFkaXIgPSBsb29rdXBfb25lX2xlbihuYW1lYnVmLCB4YXJvb3QsIHN0cmxlbihuYW1lYnVmKSk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKLQkJZHB1dCh4YXJvb3QpOwotCQlyZXR1cm4geGFkaXI7Ci0JfQogCi0JaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlpbnQgZXJyOwotCQlpZiAoZmxhZ3MgPT0gMCB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkgewotCQkJLyogQWx0aG91Z2ggdGhlcmUgaXMgbm90aGluZyBlbHNlIHRyeWluZyB0byBjcmVhdGUgdGhpcyBkaXJlY3RvcnksCi0JCQkgKiBhbm90aGVyIGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIGhhc2ggbWF5IGJlIGNyZWF0ZWQsIHNvIHdlIG5lZWQKLQkJCSAqIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0ICovCi0JCQllcnIgPQotCQkJICAgIHhhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIoeGFyb290LT5kX2lub2RlLCB4YWRpciwKLQkJCQkJCQkgMDcwMCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJZHB1dCh4YXJvb3QpOwotCQkJCWRwdXQoeGFkaXIpOwotCQkJCXJldHVybiBFUlJfUFRSKGVycik7Ci0JCQl9Ci0JCX0KLQkJaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQkJZHB1dCh4YXJvb3QpOwotCQkJZHB1dCh4YWRpcik7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0JCX0KLQl9Ci0KKwl4YWRpciA9IGxvb2t1cF9vcl9jcmVhdGVfZGlyKHhhcm9vdCwgbmFtZWJ1ZiwgZmxhZ3MpOwogCWRwdXQoeGFyb290KTsKIAlyZXR1cm4geGFkaXI7CisKIH0KIAorLyogVGhlIGZvbGxvd2luZyBhcmUgc2lkZSBlZmZlY3RzIG9mIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseQorICogbW9kaWZ5aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzIHBlcm1pc3Npb25zCisgKiBvciBvd25lcnNoaXAgY2hhbmdlcywgb2JqZWN0IGRlbGV0aW9ucywgZXRjLiAqLworc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgeworCXN0cnVjdCBkZW50cnkgKnhhZGlyOworCWludCBjb3VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cmllc1s4XTsKK307CisKK3N0YXRpYyBpbnQKK2ZpbGxfd2l0aF9kZW50cmllcyh2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LAorCQkgICAgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3sKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqZGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlpZiAoZGJ1Zi0+Y291bnQgPT0gQVJSQVlfU0laRShkYnVmLT5kZW50cmllcykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKG5hbWVbMF0gPT0gJy4nICYmIChuYW1lWzFdID09ICdcMCcgfHwKKwkJCSAgICAgICAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpCisJCXJldHVybiAwOworCisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGJ1Zi0+eGFkaXIsIG5hbWVsZW4pOworCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOworCX0gZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQkvKiBBIGRpcmVjdG9yeSBlbnRyeSBleGlzdHMsIGJ1dCBubyBmaWxlPyAqLworCQlyZWlzZXJmc19lcnJvcihkZW50cnktPmRfc2IsICJ4YXR0ci0yMDAwMyIsCisJCQkgICAgICAgIkNvcnJ1cHRlZCBkaXJlY3Rvcnk6IHhhdHRyICVzIGxpc3RlZCBidXQgIgorCQkJICAgICAgICJub3QgZm91bmQgZm9yIGZpbGUgJXMuXG4iLAorCQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRidWYtPnhhZGlyLT5kX25hbWUubmFtZSk7CisJCWRwdXQoZGVudHJ5KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGJ1Zi0+ZGVudHJpZXNbZGJ1Zi0+Y291bnQrK10gPSBkZW50cnk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2RlbnRyeV9idWYoc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgKmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5jb3VudDsgaSsrKQorCQlpZiAoYnVmLT5kZW50cmllc1tpXSkKKwkJCWRwdXQoYnVmLT5kZW50cmllc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBpbnQgKCphY3Rpb24pKHN0cnVjdCBkZW50cnkgKiwgdm9pZCAqKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsb2ZmX3QgcG9zID0gMDsKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiBidWYgPSB7CisJCS5jb3VudCA9IDAsCisJfTsKKworCS8qIFNraXAgb3V0LCBhbiB4YXR0ciBoYXMgbm8geGF0dHJzIGFzc29jaWF0ZWQgd2l0aCBpdCAqLworCWlmIChJU19QUklWQVRFKGlub2RlKSB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gMDsKKworCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBYQVRUUl9SRVBMQUNFKTsKKwlpZiAoSVNfRVJSKGRpcikpIHsKKwkJZXJyID0gUFRSX0VSUihkaXIpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKKwkJZXJyID0gMDsKKwkJZ290byBvdXRfZGlyOworCX0KKworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCWJ1Zi54YWRpciA9IGRpcjsKKwllcnIgPSByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkaXIsICZidWYsIGZpbGxfd2l0aF9kZW50cmllcywgJnBvcyk7CisJd2hpbGUgKChlcnIgPT0gMCB8fCBlcnIgPT0gLUVOT1NQQykgJiYgYnVmLmNvdW50KSB7CisJCWVyciA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5jb3VudCAmJiBidWYuZGVudHJpZXNbaV07IGkrKykgeworCQkJaW50IGxlcnIgPSAwOworCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gYnVmLmRlbnRyaWVzW2ldOworCisJCQlpZiAoZXJyID09IDAgJiYgIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkJCWxlcnIgPSBhY3Rpb24oZGVudHJ5LCBkYXRhKTsKKworCQkJZHB1dChkZW50cnkpOworCQkJYnVmLmRlbnRyaWVzW2ldID0gTlVMTDsKKwkJCWVyciA9IGxlcnIgPzogZXJyOworCQl9CisJCWJ1Zi5jb3VudCA9IDA7CisJCWlmICghZXJyKQorCQkJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLAorCQkJCQkJICAgICAgZmlsbF93aXRoX2RlbnRyaWVzLCAmcG9zKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJLyogQ2xlYW4gdXAgYWZ0ZXIgYSBmYWlsZWQgcmVhZGRpciAqLworCWNsZWFudXBfZGVudHJ5X2J1ZigmYnVmKTsKKworCWlmICghZXJyKSB7CisJCS8qIFdlIHN0YXJ0IGEgdHJhbnNhY3Rpb24gaGVyZSB0byBhdm9pZCBhIEFCQkEgc2l0dWF0aW9uCisJCSAqIGJldHdlZW4gdGhlIHhhdHRyIHJvb3QncyBpX211dGV4IGFuZCB0aGUgam91cm5hbCBsb2NrLgorCQkgKiBUaGlzIGRvZXNuJ3QgaW5jdXIgbXVjaCBhZGRpdGlvbmFsIG92ZXJoZWFkIHNpbmNlIHRoZQorCQkgKiBuZXcgdHJhbnNhY3Rpb24gd2lsbCBqdXN0IG5lc3QgaW5zaWRlIHRoZQorCQkgKiBvdXRlciB0cmFuc2FjdGlvbi4gKi8KKwkJaW50IGJsb2NrcyA9IEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDIgKworCQkJICAgICA0ICogUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKKwkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwkJZXJyID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQlpZiAoIWVycikgeworCQkJaW50IGplcnJvcjsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0gYWN0aW9uKGRpciwgZGF0YSk7CisJCQlqZXJyb3IgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCWVyciA9IGplcnJvciA/OiBlcnI7CisJCX0KKwl9CitvdXRfZGlyOgorCWRwdXQoZGlyKTsKK291dDoKKwkvKiAtRU5PREFUQSBpc24ndCBhbiBlcnJvciAqLworCWlmIChlcnIgPT0gLUVOT0RBVEEpCisJCWVyciA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkZWxldGVfb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisKKwkvKiBUaGlzIGlzIHRoZSB4YXR0ciBkaXIsIGhhbmRsZSBzcGVjaWFsbHkuICovCisJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlyZXR1cm4geGF0dHJfcm1kaXIoZGlyLCBkZW50cnkpOworCisJcmV0dXJuIHhhdHRyX3VubGluayhkaXIsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgY2hvd25fb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gZGF0YTsKKwlyZXR1cm4gcmVpc2VyZnNfc2V0YXR0cihkZW50cnksIGF0dHJzKTsKK30KKworLyogTm8gaV9tdXRleCwgYnV0IHRoZSBpbm9kZSBpcyB1bmNvbm5lY3RlZC4gKi8KK2ludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGVyciA9IHJlaXNlcmZzX2Zvcl9lYWNoX3hhdHRyKGlub2RlLCBkZWxldGVfb25lX3hhdHRyLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDA0IiwKKwkJCQkgIkNvdWxkbid0IGRlbGV0ZSBhbGwgeGF0dHJzICglZClcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogaW5vZGUtPmlfbXV0ZXg6IGRvd24gKi8KK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKK3sKKwlpbnQgZXJyID0gcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoaW5vZGUsIGNob3duX29uZV94YXR0ciwgYXR0cnMpOworCWlmIChlcnIpCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDciLAorCQkJCSAiQ291bGRuJ3QgY2hvd24gYWxsIHhhdHRycyAoJWQpXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKIC8qIFJldHVybnMgYSBkZW50cnkgY29ycmVzcG9uZGluZyB0byBhIHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZSBmaWxlCiAgKiBmb3IgdGhlIGlub2RlLiBJZiBmbGFncyBhbGxvdywgdGhlIGZpbGUgaXMgY3JlYXRlZC4gT3RoZXJ3aXNlLCBhCiAgKiB2YWxpZCBvciBuZWdhdGl2ZSBkZW50cnksIG9yIGFuIGVycm9yIGlzIHJldHVybmVkLiAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmdldF94YV9maWxlX2RlbnRyeShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKnhhdHRyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqeGFkaXIsICp4YWZpbGU7CiAJaW50IGVyciA9IDA7CiAKIAl4YWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBmbGFncyk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKKwlpZiAoSVNfRVJSKHhhZGlyKSkKIAkJcmV0dXJuIEVSUl9DQVNUKHhhZGlyKTsKLQl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KIAogCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBzdHJsZW4obmFtZSkpOwogCWlmIChJU19FUlIoeGFmaWxlKSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9DQVNUKHhhZmlsZSk7Ci0JfQotCi0JaWYgKHhhZmlsZS0+ZF9pbm9kZSkgewkvKiBmaWxlIGV4aXN0cyAqLwotCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpIHsKLQkJCWVyciA9IC1FRVhJU1Q7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFIHx8IGZsYWdzICYgRkxfUkVBRE9OTFkpIHsKKwkJZXJyID0gUFRSX0VSUih4YWZpbGUpOwogCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQkvKiBpbm9kZS0+aV9tdXRleCBpcyBkb3duLCBzbyBub3RoaW5nIGVsc2UgY2FuIHRyeSB0byBjcmVhdGUKLQkJICogdGhlIHNhbWUgeGF0dHIgKi8KLQkJZXJyID0geGFkaXItPmRfaW5vZGUtPmlfb3AtPmNyZWF0ZSh4YWRpci0+ZF9pbm9kZSwgeGFmaWxlLAotCQkJCQkJICAgMDcwMCB8IFNfSUZSRUcsIE5VTEwpOworCX0KIAotCQlpZiAoZXJyKSB7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKKwlpZiAoeGFmaWxlLT5kX2lub2RlICYmIChmbGFncyAmIFhBVFRSX0NSRUFURSkpCisJCWVyciA9IC1FRVhJU1Q7CisKKwlpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgeworCQllcnIgPSAtRU5PREFUQTsKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQllcnIgPSB4YXR0cl9jcmVhdGUoeGFkaXItPmRfaW5vZGUsIHhhZmlsZSwKKwkJCQkJICAgICAgMDcwMHxTX0lGUkVHKTsKKwkJCW11dGV4X3VubG9jaygmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQl9CiAJfQogCi0gICAgICBvdXQ6CisJaWYgKGVycikKKwkJZHB1dCh4YWZpbGUpOworb3V0OgogCWRwdXQoeGFkaXIpOwogCWlmIChlcnIpCi0JCXhhZmlsZSA9IEVSUl9QVFIoZXJyKTsKLQllbHNlIGlmICgheGFmaWxlLT5kX2lub2RlKSB7Ci0JCWRwdXQoeGFmaWxlKTsKLQkJeGFmaWxlID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCXJldHVybiB4YWZpbGU7CiB9CiAKLS8qCi0gKiB0aGlzIGlzIHZlcnkgc2ltaWxhciB0byBmcy9yZWlzZXJmcy9kaXIuYzpyZWlzZXJmc19yZWFkZGlyLCBidXQKLSAqIHdlIG5lZWQgdG8gZHJvcCB0aGUgcGF0aCBiZWZvcmUgY2FsbGluZyB0aGUgZmlsbGRpciBzdHJ1Y3QuICBUaGF0Ci0gKiB3b3VsZCBiZSBhIGJpZyBwZXJmb3JtYW5jZSBoaXQgdG8gdGhlIG5vbi14YXR0ciBjYXNlLCBzbyBJJ3ZlIGNvcGllZAotICogdGhlIHdob2xlIHRoaW5nIGZvciBub3cuIC0tY2xtCi0gKgotICogdGhlIGJpZyBkaWZmZXJlbmNlIGlzIHRoYXQgSSBnbyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgZGlyZWN0b3J5LAotICogYW5kIGRvbid0IG1lc3Mgd2l0aCBmLT5mX3BvcywgYnV0IHRoZSBpZGVhIGlzIHRoZSBzYW1lLiAgRG8gc29tZQotICogYWN0aW9uIG9uIGVhY2ggYW5kIGV2ZXJ5IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuCi0gKgotICogd2UncmUgY2FsbGVkIHdpdGggaV9tdXRleCBoZWxkLCBzbyB0aGVyZSBhcmUgbm8gd29ycmllcyBhYm91dCB0aGUgZGlyZWN0b3J5Ci0gKiBjaGFuZ2luZyB1bmRlcm5lYXRoIHVzLgotICovCi1zdGF0aWMgaW50IF9feGF0dHJfcmVhZGRpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQotewotCXN0cnVjdCBjcHVfa2V5IHBvc19rZXk7CS8qIGtleSBvZiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBkaXJlY3RvcnkgKGtleSBvZiBkaXJlY3RvcnkgZW50cnkpICovCi0JSU5JVElBTElaRV9QQVRIKHBhdGhfdG9fZW50cnkpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVudHJ5X251bTsKLQlzdHJ1Y3QgaXRlbV9oZWFkICppaCwgdG1wX2loOwotCWludCBzZWFyY2hfcmVzOwotCWNoYXIgKmxvY2FsX2J1ZjsKLQlsb2ZmX3QgbmV4dF9wb3M7Ci0JY2hhciBzbWFsbF9idWZbMzJdOwkvKiBhdm9pZCBrbWFsbG9jIGlmIHdlIGNhbiAqLwotCXN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpkZWg7Ci0JaW50IGRfcmVjbGVuOwotCWNoYXIgKmRfbmFtZTsKLQlvZmZfdCBkX29mZjsKLQlpbm9fdCBkX2lubzsKLQlzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5IGRlOwotCi0JLyogZm9ybSBrZXkgZm9yIHNlYXJjaCB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkgdXNpbmcgZl9wb3MgZmllbGQgb2YKLQkgICBmaWxlIHN0cnVjdHVyZSAqLwotCW5leHRfcG9zID0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSk7Ci0KLQl3aGlsZSAoMSkgewotCSAgICAgIHJlc2VhcmNoOgotCQlpZiAobmV4dF9wb3MgPD0gRE9UX0RPVF9PRkZTRVQpCi0JCQlicmVhazsKLQkJbWFrZV9jcHVfa2V5KCZwb3Nfa2V5LCBpbm9kZSwgbmV4dF9wb3MsIFRZUEVfRElSRU5UUlksIDMpOwotCi0JCXNlYXJjaF9yZXMgPQotCQkgICAgc2VhcmNoX2J5X2VudHJ5X2tleShpbm9kZS0+aV9zYiwgJnBvc19rZXksICZwYXRoX3RvX2VudHJ5LAotCQkJCQkmZGUpOwotCQlpZiAoc2VhcmNoX3JlcyA9PSBJT19FUlJPUikgewotCQkJLy8gRklYTUU6IHdlIGNvdWxkIGp1c3Qgc2tpcCBwYXJ0IG9mIGRpcmVjdG9yeSB3aGljaCBjb3VsZAotCQkJLy8gbm90IGJlIHJlYWQKLQkJCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWlmIChzZWFyY2hfcmVzID09IE5BTUVfTk9UX0ZPVU5EKQotCQkJZGUuZGVfZW50cnlfbnVtLS07Ci0KLQkJc2V0X2RlX25hbWVfYW5kX25hbWVsZW4oJmRlKTsKLQkJZW50cnlfbnVtID0gZGUuZGVfZW50cnlfbnVtOwotCQlkZWggPSAmKGRlLmRlX2RlaFtlbnRyeV9udW1dKTsKLQotCQliaCA9IGRlLmRlX2JoOwotCQlpaCA9IGRlLmRlX2loOwotCi0JCWlmICghaXNfZGlyZW50cnlfbGVfaWgoaWgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAibm90IGRpcmVudHJ5ICVoIiwgaWgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY29weV9pdGVtX2hlYWQoJnRtcF9paCwgaWgpOwotCi0JCS8qIHdlIG11c3QgaGF2ZSBmb3VuZCBpdGVtLCB0aGF0IGlzIGl0ZW0gb2YgdGhpcyBkaXJlY3RvcnksICovCi0JCVJGQUxTRShDT01QX1NIT1JUX0tFWVMoJihpaC0+aWhfa2V5KSwgJnBvc19rZXkpLAotCQkgICAgICAgInZzLTkwMDA6IGZvdW5kIGl0ZW0gJWggZG9lcyBub3QgbWF0Y2ggdG8gZGlyIHdlIHJlYWRkaXIgJUsiLAotCQkgICAgICAgaWgsICZwb3Nfa2V5KTsKLQotCQlpZiAoZGVoX29mZnNldChkZWgpIDw9IERPVF9ET1RfT0ZGU0VUKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvb2sgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5ICovCi0JCW5leHRfcG9zID0gZGVoX29mZnNldChkZWgpIC0gMTsKLQotCQlpZiAoIWRlX3Zpc2libGUoZGVoKSkKLQkJCS8qIGl0IGlzIGhpZGRlbiBlbnRyeSAqLwotCQkJY29udGludWU7Ci0KLQkJZF9yZWNsZW4gPSBlbnRyeV9sZW5ndGgoYmgsIGloLCBlbnRyeV9udW0pOwotCQlkX25hbWUgPSBCX0lfREVIX0VOVFJZX0ZJTEVfTkFNRShiaCwgaWgsIGRlaCk7Ci0JCWRfb2ZmID0gZGVoX29mZnNldChkZWgpOwotCQlkX2lubyA9IGRlaF9vYmplY3RpZChkZWgpOwotCi0JCWlmICghZF9uYW1lW2RfcmVjbGVuIC0gMV0pCi0JCQlkX3JlY2xlbiA9IHN0cmxlbihkX25hbWUpOwotCi0JCWlmIChkX3JlY2xlbiA+IFJFSVNFUkZTX01BWF9OQU1FKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKLQkJCS8qIHRvbyBiaWcgdG8gc2VuZCBiYWNrIHRvIFZGUyAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBJZ25vcmUgdGhlIC5yZWlzZXJmc19wcml2IGVudHJ5ICovCi0JCWlmIChyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpICYmCi0JCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkgICAgZGVoX29iamVjdGlkKGRlaCkgPT0KLQkJICAgIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkKLQkJCQkoUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QtPmRfaW5vZGUpLT4KLQkJCQlrX29iamVjdGlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkX3JlY2xlbiA8PSAzMikgewotCQkJbG9jYWxfYnVmID0gc21hbGxfYnVmOwotCQl9IGVsc2UgewotCQkJbG9jYWxfYnVmID0ga21hbGxvYyhkX3JlY2xlbiwgR0ZQX05PRlMpOwotCQkJaWYgKCFsb2NhbF9idWYpIHsKLQkJCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJaWYgKGl0ZW1fbW92ZWQoJnRtcF9paCwgJnBhdGhfdG9fZW50cnkpKSB7Ci0JCQkJa2ZyZWUobG9jYWxfYnVmKTsKLQotCQkJCS8qIHNpZ2gsIG11c3QgcmV0cnkuICBEbyB0aGlzIHNhbWUgb2Zmc2V0IGFnYWluICovCi0JCQkJbmV4dF9wb3MgPSBkX29mZjsKLQkJCQlnb3RvIHJlc2VhcmNoOwotCQkJfQotCQl9Ci0KLQkJLy8gTm90ZSwgdGhhdCB3ZSBjb3B5IG5hbWUgdG8gdXNlciBzcGFjZSB2aWEgdGVtcG9yYXJ5Ci0JCS8vIGJ1ZmZlciAobG9jYWxfYnVmKSBiZWNhdXNlIGZpbGxkaXIgd2lsbCBibG9jayBpZgotCQkvLyB1c2VyIHNwYWNlIGJ1ZmZlciBpcyBzd2FwcGVkIG91dC4gQXQgdGhhdCB0aW1lCi0JCS8vIGVudHJ5IGNhbiBtb3ZlIHRvIHNvbWV3aGVyZSBlbHNlCi0JCW1lbWNweShsb2NhbF9idWYsIGRfbmFtZSwgZF9yZWNsZW4pOwotCi0JCS8qIHRoZSBmaWxsZGlyIGZ1bmN0aW9uIG1pZ2h0IG5lZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb25zLAotCQkgKiBvciBkbyB3aG8ga25vd3Mgd2hhdC4gIFJlbGVhc2UgdGhlIHBhdGggbm93IHRoYXQgd2UndmUKLQkJICogY29waWVkIGFsbCB0aGUgaW1wb3J0YW50IHN0dWZmIG91dCBvZiB0aGUgZGVoCi0JCSAqLwotCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgbG9jYWxfYnVmLCBkX3JlY2xlbiwgZF9vZmYsIGRfaW5vLAotCQkJICAgIERUX1VOS05PV04pIDwgMCkgewotCQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCQlrZnJlZShsb2NhbF9idWYpOwotCQkJfQotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCWtmcmVlKGxvY2FsX2J1Zik7Ci0JCX0KLQl9CQkJLyogd2hpbGUgKi8KLQotICAgICAgZW5kOgotCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGlzIGNvdWxkIGJlIGRvbmUgd2l0aCBkZWRpY2F0ZWQgcmVhZGRpciBvcHMgZm9yIHRoZSB4YXR0ciBmaWxlcywKLSAqIGJ1dCBJIHdhbnQgdG8gZ2V0IHNvbWV0aGluZyB3b3JraW5nIGFzYXAKLSAqIHRoaXMgaXMgc3RvbGVuIGZyb20gdmZzX3JlYWRkaXIKLSAqCi0gKi8KLXN0YXRpYwotaW50IHhhdHRyX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgZmlsbGRpcl90IGZpbGxlciwgdm9pZCAqYnVmKQotewotCWludCByZXMgPSAtRU5PRU5UOwotCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7Ci0JaWYgKCFJU19ERUFERElSKGlub2RlKSkgewotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXMgPSBfX3hhdHRyX3JlYWRkaXIoaW5vZGUsIGJ1ZiwgZmlsbGVyKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCX0KLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKiBJbnRlcm5hbCBvcGVyYXRpb25zIG9uIGZpbGUgZGF0YSAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3B1dF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzc1LDE0ICszODMsMTQgQEAKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHNpemVfdCBuKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJLyogV2UgY2FuIGRlYWRsb2NrIGlmIHdlIHRyeSB0byBmcmVlIGRlbnRyaWVzLAogCSAgIGFuZCBhbiB1bmxpbmsvcm1kaXIgaGFzIGp1c3Qgb2NjdXJlZCAtIEdGUF9OT0ZTIGF2b2lkcyB0aGlzICovCiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOwotCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuLCBOVUxMKTsKKwlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiA+PiBQQUdFX0NBQ0hFX1NISUZULCBOVUxMKTsKIAlpZiAoIUlTX0VSUihwYWdlKSkgewogCQlrbWFwKHBhZ2UpOwogCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtNDA1LDYgKzQxMyw0NSBAQAogaW50IHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3RpbWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKwlpZiAoaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpIHx8ICFpbm9kZS0+aV9ubGluayB8fAorCSAgICB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZub3cpKQorCQlyZXR1cm47CisKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICp4YWRpcjsKKworCXhhZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIFhBVFRSX1JFUExBQ0UpOworCWlmIChJU19FUlIoeGFkaXIpKQorCQlyZXR1cm4gUFRSX0VSUih4YWRpcik7CisKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOworCQlnb3RvIG91dF9kcHV0OworCX0KKworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnhhZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZXJyID0geGF0dHJfdW5saW5rKHhhZGlyLT5kX2lub2RlLCBkZW50cnkpOworCQltdXRleF91bmxvY2soJnhhZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKKwl9CisKKwlkcHV0KGRlbnRyeSk7CitvdXRfZHB1dDoKKwlkcHV0KHhhZGlyKTsKKwlyZXR1cm4gZXJyOworfQorCiAKIC8qIEdlbmVyaWMgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSB4YSBwbHVnaW5zICovCiAKQEAgLTQxMiw1OCArNDU5LDMyIEBACiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQorcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsIGludCBmbGFncykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJY2hhciAqZGF0YTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzaXplX3QgZmlsZV9wb3MgPSAwOwogCXNpemVfdCBidWZmZXJfcG9zID0gMDsKLQlzdHJ1Y3QgaW5vZGUgKnhpbm9kZTsKLQlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CisJc2l6ZV90IG5ld19zaXplOwogCV9fdTMyIHhhaGFzaCA9IDA7CiAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JLyogRW1wdHkgeGF0dHJzIGFyZSBvaywgdGhleSdyZSBqdXN0IGVtcHR5IGZpbGVzLCBubyBoYXNoICovCi0JaWYgKGJ1ZmZlciAmJiBidWZmZXJfc2l6ZSkKLQkJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIGxvb2t1cF9hbmRfZGVsZXRlX3hhdHRyKGlub2RlLCBuYW1lKTsKIAotICAgICAgb3Blbl9maWxlOgotCWRlbnRyeSA9IGdldF94YV9maWxlX2RlbnRyeShpbm9kZSwgbmFtZSwgZmxhZ3MpOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlkZW50cnkgPSB4YXR0cl9sb29rdXAoaW5vZGUsIG5hbWUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiAKLQkvKiB3ZSBuZWVkIHRvIGNvcHkgaXQgb2ZmLi4gKi8KLQlpZiAoeGlub2RlLT5pX25saW5rID4gMSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWVyciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCS8qIFdlIGp1c3Qga2lsbGVkIHRoZSBvbGQgb25lLCB3ZSdyZSBub3QgcmVwbGFjaW5nIGFueW1vcmUgKi8KLQkJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkKLQkJCWZsYWdzICY9IH5YQVRUUl9SRVBMQUNFOwotCQlnb3RvIG9wZW5fZmlsZTsKLQl9Ci0KLQkvKiBSZXNpemUgaXQgc28gd2UncmUgb2sgdG8gd3JpdGUgdGhlcmUgKi8KLQluZXdhdHRycy5pYV9zaXplID0gYnVmZmVyX3NpemU7Ci0JbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FOwotCW11dGV4X2xvY2tfbmVzdGVkKCZ4aW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotCWVyciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZpbHA7Ci0KLQltYXBwaW5nID0geGlub2RlLT5pX21hcHBpbmc7CisJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAl3aGlsZSAoYnVmZmVyX3BvcyA8IGJ1ZmZlcl9zaXplIHx8IGJ1ZmZlcl9wb3MgPT0gMCkgewogCQlzaXplX3QgY2h1bms7CiAJCXNpemVfdCBza2lwID0gMDsKQEAgLTQ3MywxMCArNDk0LDEwIEBACiAJCWVsc2UKIAkJCWNodW5rID0gYnVmZmVyX3NpemUgLSBidWZmZXJfcG9zOwogCi0JCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZSh4aW5vZGUsIGZpbGVfcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCQlwYWdlID0gcmVpc2VyZnNfZ2V0X3BhZ2UoZGVudHJ5LT5kX2lub2RlLCBmaWxlX3Bvcyk7CiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIocGFnZSk7Ci0JCQlnb3RvIG91dF9maWxwOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbG9ja19wYWdlKHBhZ2UpOwpAQCAtNTEwLDI4ICs1MzEsNjEgQEAKIAkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGNhbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IGlmIGl0J3Mgbm90IGhhc2hlZC4gVGhpcyBpcyB0aGUgY2FzZQotCSAqIHdoZW4gd2UncmUgaW5oZXJpdGluZyB0aGUgZGVmYXVsdCBBQ0wuIElmIHdlIGRpcnR5IGl0LCB0aGUgaW5vZGUKLQkgKiBnZXRzIG1hcmtlZCBkaXJ0eSwgYnV0IHdvbid0IChldmVyKSBtYWtlIGl0IG9udG8gdGhlIGRpcnR5IGxpc3QgdW50aWwKLQkgKiBpdCdzIHN5bmNlZCBleHBsaWNpdGx5IHRvIGNsZWFyIElfRElSVFkuIFRoaXMgaXMgYmFkLiAqLwotCWlmICghaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbmV3X3NpemUgPSBidWZmZXJfc2l6ZSArIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKTsKKwlpZiAoIWVyciAmJiBuZXdfc2l6ZSA8IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkJc3RydWN0IGlhdHRyIG5ld2F0dHJzID0geworCQkJLmlhX2N0aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKSwKKwkJCS5pYV9zaXplID0gYnVmZmVyX3NpemUsCisJCQkuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FLAorCQl9OworCQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCWVyciA9IHJlaXNlcmZzX3NldGF0dHIoZGVudHJ5LCAmbmV3YXR0cnMpOworCQl1cF93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwl9IGVsc2UKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKK291dF91bmxvY2s6CisJdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CisJZHB1dChkZW50cnkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiB0byBtYWludGFpbiBsb2NrIG9yZGVyaW5nICovCitpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQoreworCisJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzaXplX3QgamJlZ2luX2NvdW50ID0gcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgYnVmZmVyX3NpemUpOworCisJaWYgKCEoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKSkKKwkJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2Nrcyhpbm9kZSk7CisKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAotICAgICAgb3V0X2ZpbHA6Ci0JbXV0ZXhfdW5sb2NrKCZ4aW5vZGUtPmlfbXV0ZXgpOwotCWRwdXQoZGVudHJ5KTsKKwllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoJnRoLCBpbm9kZSwgbmFtZSwKKwkJCQkJICBidWZmZXIsIGJ1ZmZlcl9zaXplLCBmbGFncyk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOworCWVycm9yMiA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCk7CisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gZXJyb3IyOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCityZWlzZXJmc194YXR0cl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgICBzaXplX3QgYnVmZmVyX3NpemUpCiB7CiAJc3NpemVfdCBlcnIgPSAwOwpAQCAtNTQwLDcgKzU5NCw2IEBACiAJc2l6ZV90IGZpbGVfcG9zID0gMDsKIAlzaXplX3QgYnVmZmVyX3BvcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGlub2RlICp4aW5vZGU7CiAJX191MzIgaGFzaCA9IDA7CiAKIAlpZiAobmFtZSA9PSBOVUxMKQpAQCAtNTUxLDI1ICs2MDQsMjUgQEAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JZGVudHJ5ID0gZ2V0X3hhX2ZpbGVfZGVudHJ5KGlub2RlLCBuYW1lLCBGTF9SRUFET05MWSk7CisJZGVudHJ5ID0geGF0dHJfbG9va3VwKGlub2RlLCBuYW1lLCBYQVRUUl9SRVBMQUNFKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaXNpemUgPSB4aW5vZGUtPmlfc2l6ZTsKLQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CisJZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+aV94YXR0cl9zZW0pOworCisJaXNpemUgPSBpX3NpemVfcmVhZChkZW50cnktPmRfaW5vZGUpOwogCiAJLyogSnVzdCByZXR1cm4gdGhlIHNpemUgbmVlZGVkICovCiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWVyciA9IGlzaXplIC0gc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpOwotCQlnb3RvIG91dF9kcHV0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKGJ1ZmZlcl9zaXplIDwgaXNpemUgLSBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlcikpIHsKIAkJZXJyID0gLUVSQU5HRTsKLQkJZ290byBvdXRfZHB1dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXdoaWxlIChmaWxlX3BvcyA8IGlzaXplKSB7CkBAIC01ODEsMTAgKzYzNCwxMCBAQAogCQllbHNlCiAJCQljaHVuayA9IGlzaXplIC0gZmlsZV9wb3M7CiAKLQkJcGFnZSA9IHJlaXNlcmZzX2dldF9wYWdlKHhpbm9kZSwgZmlsZV9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZShkZW50cnktPmRfaW5vZGUsIGZpbGVfcG9zKTsKIAkJaWYgKElTX0VSUihwYWdlKSkgewogCQkJZXJyID0gUFRSX0VSUihwYWdlKTsKLQkJCWdvdG8gb3V0X2RwdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsb2NrX3BhZ2UocGFnZSk7CkBAIC01OTgsMTIgKzY1MSwxMiBAQAogCQkJaWYgKHJ4aC0+aF9tYWdpYyAhPSBjcHVfdG9fbGUzMihSRUlTRVJGU19YQVRUUl9NQUdJQykpIHsKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCQlyZWlzZXJmc19wdXRfcGFnZShwYWdlKTsKLQkJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDEiLAogCQkJCQkJICJJbnZhbGlkIG1hZ2ljIGZvciB4YXR0ciAoJXMpICIKIAkJCQkJCSAiYXNzb2NpYXRlZCB3aXRoICVrIiwgbmFtZSwKIAkJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCQkJZXJyID0gLUVJTzsKLQkJCQlnb3RvIG91dF9kcHV0OworCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KIAkJCWhhc2ggPSBsZTMyX3RvX2NwdShyeGgtPmhfaGFzaCk7CiAJCX0KQEAgLTYxOCwyNTYgKzY3MSw4MyBAQAogCiAJaWYgKHhhdHRyX2hhc2goYnVmZmVyLCBpc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKSkgIT0KIAkgICAgaGFzaCkgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDAyIiwKIAkJCQkgIkludmFsaWQgaGFzaCBmb3IgeGF0dHIgKCVzKSBhc3NvY2lhdGVkICIKIAkJCQkgIndpdGggJWsiLCBuYW1lLCBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCWVyciA9IC1FSU87CiAJfQogCi0gICAgICBvdXRfZHB1dDoKK291dF91bmxvY2s6CisJdXBfcmVhZCgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIAlkcHV0KGRlbnRyeSk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1fX3JlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgZGVudHJ5ICp4YWRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqZGlyID0geGFkaXItPmRfaW5vZGU7Ci0JaW50IGVyciA9IDA7Ci0KLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgbmFtZWxlbik7Ci0JaWYgKElTX0VSUihkZW50cnkpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWVyciA9IC1FTk9EQVRBOwotCQlnb3RvIG91dF9maWxlOwotCX0KLQotCS8qIFNraXAgZGlyZWN0b3JpZXMuLiAqLwotCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJZ290byBvdXRfZmlsZTsKLQotCWlmICghaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGVudHJ5LT5kX2lub2RlKSkgewotCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgIk9JRCAlMDh4IFslLipzLyUuKnNdIGRvZXNuJ3QgaGF2ZSAiCi0JCQkJICJwcml2IGZsYWcgc2V0IFtwYXJlbnQgaXMgJXNzZXRdLiIsCi0JCQkJIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkoZGVudHJ5LT5kX2lub2RlKS0+Ci0JCQkJCSAgICAga19vYmplY3RpZCksIHhhZGlyLT5kX25hbWUubGVuLAotCQkJCSB4YWRpci0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIG5hbWUsCi0JCQkJIGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KHhhZGlyLT4KLQkJCQkJCQkgZF9pbm9kZSkgPyAiIiA6Ci0JCQkJICJub3QgIik7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZXJyID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmICghZXJyKQotCQlkX2RlbGV0ZShkZW50cnkpOwotCi0gICAgICBvdXRfZmlsZToKLQlkcHV0KGRlbnRyeSk7Ci0KLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgcmVpc2VyZnNfeGF0dHJfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyOwotCWludCBlcnI7Ci0KLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCWlmIChJU19FUlIoZGlyKSkgewotCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fcmVpc2VyZnNfeGF0dHJfZGVsKGRpciwgbmFtZSwgc3RybGVuKG5hbWUpKTsKLQlkcHV0KGRpcik7Ci0KLQlpZiAoIWVycikgewotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KLQotICAgICAgb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHNpZGUgZWZmZWN0cyBvZiBvdGhlciBvcGVyYXRpb25zIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkKLSAqIG1vZGlmeWluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIGluY2x1ZGVzIG9wZXJhdGlvbnMgc3VjaCBhcyBwZXJtaXNzaW9ucwotICogb3Igb3duZXJzaGlwIGNoYW5nZXMsIG9iamVjdCBkZWxldGlvbnMsIGV0Yy4gKi8KLQotc3RhdGljIGludAotcmVpc2VyZnNfZGVsZXRlX3hhdHRyc19maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqeGFkaXIgPSAoc3RydWN0IGRlbnRyeSAqKWJ1ZjsKLQotCXJldHVybiBfX3JlaXNlcmZzX3hhdHRyX2RlbCh4YWRpciwgbmFtZSwgbmFtZWxlbik7Ci0KLX0KLQotLyogVGhpcyBpcyBjYWxsZWQgdy8gaW5vZGUtPmlfbXV0ZXggZG93bmVkICovCi1pbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBkZW50cnkgKmRpciwgKnJvb3Q7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTa2lwIG91dCwgYW4geGF0dHIgaGFzIG5vIHhhdHRycyBhc3NvY2lhdGVkIHdpdGggaXQgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEgfHwKLQkgICAgIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBGTF9SRUFET05MWSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlpZiAoSVNfRVJSKGRpcikpIHsKLQkJZXJyID0gUFRSX0VSUihkaXIpOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKLQkJZHB1dChkaXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVyciA9IHhhdHRyX3JlYWRkaXIoZGlyLT5kX2lub2RlLCByZWlzZXJmc19kZWxldGVfeGF0dHJzX2ZpbGxlciwgZGlyKTsKLQlpZiAoZXJyKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJZ290byBvdXRfZGlyOwotCX0KLQotCS8qIExlZnRvdmVycyBiZXNpZGVzIC4gYW5kIC4uIC0tIHRoYXQncyBub3QgZ29vZC4gKi8KLQlpZiAoZGlyLT5kX2lub2RlLT5pX25saW5rIDw9IDIpIHsKLQkJcm9vdCA9IGdldF94YV9yb290KGlub2RlLT5pX3NiLCBYQVRUUl9SRVBMQUNFKTsKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQllcnIgPSB2ZnNfcm1kaXIocm9vdC0+ZF9pbm9kZSwgZGlyKTsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWRwdXQocm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgIkNvdWxkbid0IHJlbW92ZSBhbGwgZW50cmllcyBpbiBkaXJlY3RvcnkiKTsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0gICAgICBvdXRfZGlyOgotCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCWlmICghZXJyKQotCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyA9Ci0JCSAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIH5pX2hhc194YXR0cl9kaXI7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICp4YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzOwotfTsKLQotLyogWFhYOiBJZiB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgSSdkIGxvdmUgdG8gaGVhciBhYm91dCBpdCAqLwotc3RhdGljIGludAotcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQotewotCXN0cnVjdCByZWlzZXJmc19jaG93bl9idWYgKmNob3duX2J1ZiA9IChzdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmICopYnVmOwotCXN0cnVjdCBkZW50cnkgKnhhZmlsZSwgKnhhZGlyID0gY2hvd25fYnVmLT54YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gY2hvd25fYnVmLT5hdHRyczsKLQlpbnQgZXJyID0gMDsKLQotCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBuYW1lbGVuKTsKLQlpZiAoSVNfRVJSKHhhZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKHhhZmlsZSk7Ci0JZWxzZSBpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZmlsZSk7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9Ci0KLQlpZiAoIVNfSVNESVIoeGFmaWxlLT5kX2lub2RlLT5pX21vZGUpKQotCQllcnIgPSBub3RpZnlfY2hhbmdlKHhhZmlsZSwgYXR0cnMpOwotCWRwdXQoeGFmaWxlKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiBidWY7Ci0JdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0cnMtPmlhX3ZhbGlkOwotCi0JLyogU2tpcCBvdXQsIGFuIHhhdHRyIGhhcyBubyB4YXR0cnMgYXNzb2NpYXRlZCB3aXRoIGl0ICovCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxIHx8Ci0JICAgICFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKSB7Ci0JCXJldHVybiAwOwotCX0KLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JaWYgKElTX0VSUihkaXIpKSB7Ci0JCWlmIChQVFJfRVJSKGRpcikgIT0gLUVOT0RBVEEpCi0JCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlhdHRycy0+aWFfdmFsaWQgJj0gKEFUVFJfVUlEIHwgQVRUUl9HSUQgfCBBVFRSX0NUSU1FKTsKLQlidWYueGFkaXIgPSBkaXI7Ci0JYnVmLmF0dHJzID0gYXR0cnM7Ci0JYnVmLmlub2RlID0gaW5vZGU7Ci0KLQllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlciwgJmJ1Zik7Ci0JaWYgKGVycikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCWdvdG8gb3V0X2RpcjsKLQl9Ci0KLQllcnIgPSBub3RpZnlfY2hhbmdlKGRpciwgYXR0cnMpOwotCXVubG9ja19rZXJuZWwoKTsKLQotICAgICAgb3V0X2RpcjoKLQlkcHV0KGRpcik7Ci0KLSAgICAgIG91dDoKLQlhdHRycy0+aWFfdmFsaWQgPSBpYV92YWxpZDsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBBY3R1YWwgb3BlcmF0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCB0byBWRlMtbGFuZCAqLworc3RydWN0IHhhdHRyX2hhbmRsZXIgKnJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJnJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlciwKKwkmcmVpc2VyZnNfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWQorCSZyZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAorCSZyZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIsCisJJnJlaXNlcmZzX3Bvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIsCisjZW5kaWYKKwlOVUxMCit9OworCisvKgorICogSW4gb3JkZXIgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBzZXRzIG9mIHhhdHRyIG9wZXJhdGlvbnMgZm9yIGVhY2ggeGF0dHIKKyAqIHByZWZpeCB3aXRoIHRoZSBnZW5lcmljIHhhdHRyIEFQSSwgYSBmaWxlc3lzdGVtIHNob3VsZCBjcmVhdGUgYQorICogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cnVjdCB4YXR0cl9oYW5kbGVyIChvbmUgZm9yIGVhY2ggcHJlZml4KSBhbmQKKyAqIGhhbmcgYSBwb2ludGVyIHRvIGl0IG9mZiBvZiB0aGUgc194YXR0ciBmaWVsZCBvZiB0aGUgc3VwZXJibG9jay4KKyAqCisgKiBUaGUgZ2VuZXJpY19mb294YXR0cigpIGZ1bmN0aW9ucyB3aWxsIHVzZSB0aGlzIGxpc3QgdG8gZGlzcGF0Y2ggeGF0dHIKKyAqIG9wZXJhdGlvbnMgdG8gdGhlIGNvcnJlY3QgeGF0dHJfaGFuZGxlci4KKyAqLworI2RlZmluZSBmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCBoYW5kbGVyKQkJXAorCQlmb3IgKChoYW5kbGVyKSA9ICooaGFuZGxlcnMpKys7CQkJXAorCQkJKGhhbmRsZXIpICE9IE5VTEw7CQkJXAorCQkJKGhhbmRsZXIpID0gKihoYW5kbGVycykrKykKKworLyogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB4YXR0ciBwbHVnaW4gaW5mcmFzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyX2hhbmRsZXIgKgorZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqKmhhbmRsZXJzLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqeGFoOworCisJaWYgKCFoYW5kbGVycykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCB4YWgpIHsKKwkJaWYgKHN0cm5jbXAoeGFoLT5wcmVmaXgsIG5hbWUsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4geGFoOworfQorCiAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gZ2V0eGF0dHIoKQotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKICAqLwogc3NpemVfdAogcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgIHNpemVfdCBzaXplKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5nZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBoYW5kbGVyLT5nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIC8qCkBAIC04NzksMjcgKzc1OSwxNSBAQAogcmVpc2VyZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7Ci0JaW50IGxvY2s7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JbG9jayA9ICFoYXNfeGF0dHJfZGlyKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGxvY2spCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5zZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwotCWlmIChsb2NrKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGhhbmRsZXItPnNldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogLyoKQEAgLTkwOSw4NiArNzc3LDY2IEBACiAgKi8KIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChuYW1lKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOworCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCi0JLyogRGVsZXRpb24gcHJlLW9wZXJhdGlvbiAqLwotCWlmICh4YWgtPmRlbCkgewotCQllcnIgPSB4YWgtPmRlbChkZW50cnktPmRfaW5vZGUsIG5hbWUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gcmVpc2VyZnNfeGF0dHJfZGVsKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSk7Ci0KLQlkZW50cnktPmRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoZGVudHJ5LT5kX2lub2RlKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCBOVUxMLCAwLCBYQVRUUl9SRVBMQUNFKTsKIH0KIAotLyogVGhpcyBpcyB3aGF0IGZpbGxkaXIgd2lsbCB1c2U6Ci0gKiByX3BvcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoZSBlbnRpcmUKLSAqIGxpc3QuIElmIHJfcG9zIGJlY29tZXMgbGFyZ2VyIHRoYW4gcl9zaXplLCB3ZSBuZWVkIG1vcmUgc3BhY2UgYW5kIHdlCi0gKiByZXR1cm4gYW4gZXJyb3IgaW5kaWNhdGluZyB0aGlzLiBJZiByX3BvcyBpcyBsZXNzIHRoYW4gcl9zaXplLCB0aGVuIHdlJ3ZlCi0gKiBmaWxsZWQgdGhlIGJ1ZmZlciBzdWNjZXNzZnVsbHkgYW5kIHdlIHJldHVybiBzdWNjZXNzICovCi1zdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiB7Ci0JaW50IHJfcG9zOwotCWludCByX3NpemU7Ci0JY2hhciAqcl9idWY7Ci0Jc3RydWN0IGlub2RlICpyX2lub2RlOworc3RydWN0IGxpc3R4YXR0cl9idWYgeworCXNpemVfdCBzaXplOworCXNpemVfdCBwb3M7CisJY2hhciAqYnVmOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCi1zdGF0aWMgaW50Ci1yZWlzZXJmc19saXN0eGF0dHJfZmlsbGVyKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitzdGF0aWMgaW50IGxpc3R4YXR0cl9maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICpiID0gKHN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICopYnVmOwotCWludCBsZW4gPSAwOwotCWlmIChuYW1lWzBdICE9ICcuJwotCSAgICB8fCAobmFtZWxlbiAhPSAxICYmIChuYW1lWzFdICE9ICcuJyB8fCBuYW1lbGVuICE9IDIpKSkgewotCQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0KLQkJICAgIGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgobmFtZSk7Ci0JCWlmICgheGFoKQotCQkJcmV0dXJuIDA7CS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUsIHNraXAgaXQgKi8KLQotCQkvKiBXZSBjYWxsIC0+bGlzdCgpIHR3aWNlIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBpc24ndCByZXF1aXJlZCB0byBqdXN0Ci0JCSAqIHJldHVybiB0aGUgbmFtZSBiYWNrIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KLQkJbGVuICs9IHhhaC0+bGlzdChiLT5yX2lub2RlLCBuYW1lLCBuYW1lbGVuLCBOVUxMKTsKLQotCQlpZiAobGVuKSB7Ci0JCQlpZiAoYi0+cl9wb3MgKyBsZW4gKyAxIDw9IGItPnJfc2l6ZSkgewotCQkJCWNoYXIgKnAgPSBiLT5yX2J1ZiArIGItPnJfcG9zOwotCQkJCXAgKz0geGFoLT5saXN0KGItPnJfaW5vZGUsIG5hbWUsIG5hbWVsZW4sIHApOwotCQkJCSpwKysgPSAnXDAnOwotCQkJfQotCQkJYi0+cl9wb3MgKz0gbGVuICsgMTsKKwlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqYiA9IChzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqKWJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpZiAobmFtZVswXSAhPSAnLicgfHwKKwkgICAgKG5hbWVsZW4gIT0gMSAmJiAobmFtZVsxXSAhPSAnLicgfHwgbmFtZWxlbiAhPSAyKSkpIHsKKwkJc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXI7CisJCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGItPmlub2RlLT5pX3NiLT5zX3hhdHRyLAorCQkJCQkJICAgIG5hbWUpOworCQlpZiAoIWhhbmRsZXIpCS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUgKi8KKwkJCXJldHVybiAwOworCQlpZiAoYi0+YnVmKSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgYi0+YnVmICsgYi0+cG9zLAorCQkJCQkgYi0+c2l6ZSwgbmFtZSwgbmFtZWxlbik7CisJCQlpZiAoc2l6ZSA+IGItPnNpemUpCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCX0gZWxzZSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgTlVMTCwgMCwgbmFtZSwgbmFtZWxlbik7CiAJCX0KLQl9CiAKKwkJYi0+cG9zICs9IHNpemU7CisJfQogCXJldHVybiAwOwogfQogCiAvKgogICogSW5vZGUgb3BlcmF0aW9uIGxpc3R4YXR0cigpCiAgKgotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKKyAqIFdlIHRvdGFsbHkgaWdub3JlIHRoZSBnZW5lcmljIGxpc3R4YXR0ciBoZXJlIGJlY2F1c2UgaXQgd291bGQgYmUgc3R1cGlkCisgKiBub3QgdG8uIFNpbmNlIHRoZSB4YXR0cnMgYXJlIG9yZ2FuaXplZCBpbiBhIGRpcmVjdG9yeSwgd2UgY2FuIGp1c3QKKyAqIHJlYWRkaXIgdG8gZmluZCB0aGVtLgogICovCiBzc2l6ZV90IHJlaXNlcmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiBidWY7CisJbG9mZl90IHBvcyA9IDA7CisJc3RydWN0IGxpc3R4YXR0cl9idWYgYnVmID0geworCQkuaW5vZGUgPSBkZW50cnktPmRfaW5vZGUsCisJCS5idWYgPSBidWZmZXIsCisJCS5zaXplID0gYnVmZmVyID8gc2l6ZSA6IDAsCisJfTsKIAogCWlmICghZGVudHJ5LT5kX2lub2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5NywxMjkgKzg0NSwxMDMgQEAKIAkgICAgZ2V0X2lub2RlX3NkX3ZlcnNpb24oZGVudHJ5LT5kX2lub2RlKSA9PSBTVEFUX0RBVEFfVjEpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOworCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgWEFUVFJfUkVQTEFDRSk7CiAJaWYgKElTX0VSUihkaXIpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGlyKTsKIAkJaWYgKGVyciA9PSAtRU5PREFUQSkKLQkJCWVyciA9IDA7CS8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLworCQkJZXJyID0gMDsgIC8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLwogCQlnb3RvIG91dDsKIAl9CiAKLQlidWYucl9idWYgPSBidWZmZXI7Ci0JYnVmLnJfc2l6ZSA9IGJ1ZmZlciA/IHNpemUgOiAwOwotCWJ1Zi5yX3BvcyA9IDA7Ci0JYnVmLnJfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLCBsaXN0eGF0dHJfZmlsbGVyLCAmcG9zKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlSRUlTRVJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWlmICghZXJyKQorCQllcnIgPSBidWYucG9zOwogCi0JZXJyID0geGF0dHJfcmVhZGRpcihkaXItPmRfaW5vZGUsIHJlaXNlcmZzX2xpc3R4YXR0cl9maWxsZXIsICZidWYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2RpcjsKLQotCWlmIChidWYucl9wb3MgPiBidWYucl9zaXplICYmIGJ1ZmZlciAhPSBOVUxMKQotCQllcnIgPSAtRVJBTkdFOwotCWVsc2UKLQkJZXJyID0gYnVmLnJfcG9zOwotCi0gICAgICBvdXRfZGlyOgogCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHhhdHRyIHBsdWdpbiBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGljIExJU1RfSEVBRCh4YXR0cl9oYW5kbGVycyk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhoYW5kbGVyX2xvY2spOwotCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KQorc3RhdGljIGludCByZWlzZXJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KIAotCXJlYWRfbG9jaygmaGFuZGxlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHAsICZ4YXR0cl9oYW5kbGVycykgewotCQl4YWggPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyLCBoYW5kbGVycyk7Ci0JCWlmIChzdHJuY21wKHhhaC0+cHJlZml4LCBwcmVmaXgsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCi0JCQlicmVhazsKLQkJeGFoID0gTlVMTDsKKwlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCisJaWYgKGFjbCkgeworCQlpZiAoIUlTX0VSUihhY2wpKSB7CisJCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOworCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCisJCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKIAl9CiAKLQlyZWFkX3VubG9jaygmaGFuZGxlcl9sb2NrKTsKLQlyZXR1cm4geGFoOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpCitpbnQgcmVpc2VyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgdG1wLCAmeGF0dHJfaGFuZGxlcnMpIHsKLQkJeGFoID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciwgaGFuZGxlcnMpOwotCQlpZiAoeGFoLT5leGl0KQotCQkJeGFoLT5leGl0KCk7Ci0KLQkJbGlzdF9kZWxfaW5pdChwKTsKLQl9Ci0JSU5JVF9MSVNUX0hFQUQoJnhhdHRyX2hhbmRsZXJzKTsKLX0KLQotaW50IF9faW5pdCByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCWludCBlcnIgPSAwOwotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0KLQkvKiBJZiB3ZSdyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBub3RoaW5nIHRvIGRvICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ4YXR0cl9oYW5kbGVycykpIHsKLQkJd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOworCS8qCisJICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCisJICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KKwkgKi8KKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAwOworCS8qCisJICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgorCSAqLworCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3ByaXZyb290KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0geGF0dHJfbWtkaXIoaW5vZGUsIGRlbnRyeSwgMDcwMCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaWYgKGVycikgeworCQlkcHV0KGRlbnRyeSk7CisJCWRlbnRyeSA9IE5VTEw7CiAJfQogCi0JLyogQWRkIHRoZSBoYW5kbGVycyAqLwotCWxpc3RfYWRkX3RhaWwoJnVzZXJfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLQlsaXN0X2FkZF90YWlsKCZ0cnVzdGVkX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCi0JbGlzdF9hZGRfdGFpbCgmc2VjdXJpdHlfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLQlsaXN0X2FkZF90YWlsKCZwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0JbGlzdF9hZGRfdGFpbCgmcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgorCWlmIChkZW50cnkgJiYgZGVudHJ5LT5kX2lub2RlKQorCQlyZWlzZXJmc19pbmZvKGRlbnRyeS0+ZF9zYiwgIkNyZWF0ZWQgJXMgLSByZXNlcnZlZCBmb3IgeGF0dHIgIgorCQkJICAgICAgInN0b3JhZ2UuXG4iLCBQUklWUk9PVF9OQU1FKTsKIAotCS8qIFJ1biBpbml0aWFsaXplcnMsIGlmIGF2YWlsYWJsZSAqLwotCWxpc3RfZm9yX2VhY2gocCwgJnhhdHRyX2hhbmRsZXJzKSB7Ci0JCXhhaCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIsIGhhbmRsZXJzKTsKLQkJaWYgKHhhaC0+aW5pdCkgewotCQkJZXJyID0geGFoLT5pbml0KCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdChwKTsKLQkJCQlicmVhazsKLQkJCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHhhdHRyX21vdW50X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAorCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLworCWlmIChvbGRfZm9ybWF0X29ubHkocykpIHsKKwkJaWYgKHJlaXNlcmZzX3hhdHRyc19vcHRpb25hbChzKSkgeworCQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgb3B0aW9uYWwgeGF0dHJzIGhhdmUKKwkJCSAqIGJlZW4gZW5hYmxlZC4gRXJyb3Igb3V0LiAqLworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiamRtLTIwMDUiLAorCQkJCQkgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHByZS12My42IGZvcm1hdCBmaWxlc3lzdGVtcy4gIgorCQkJCQkgIkZhaWxpbmcgbW91bnQuIik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAl9CiAKLQkvKiBDbGVhbiB1cCBvdGhlciBoYW5kbGVycywgaWYgYW55IGZhaWxlZCAqLwotCWlmIChlcnIpCi0JCV9fdW5yZWdpc3Rlcl9oYW5kbGVycygpOwotCi0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0JX191bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotfQorI2Vsc2UKK2ludCBfX2luaXQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgeyByZXR1cm4gMDsgfQordm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIHt9CisjZW5kaWYKIAogLyogVGhpcyB3aWxsIGNhdGNoIGxvb2t1cHMgZnJvbSB0aGUgZnMgcm9vdCB0byAucmVpc2VyZnNfcHJpdiAqLwogc3RhdGljIGludApAQCAtMTE0Nyw0OCArOTY5LDIzIEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAotCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLwotCWlmICghb2xkX2Zvcm1hdF9vbmx5KHMpKSB7Ci0JCXNldF9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0gZWxzZSBpZiAocmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpKSB7Ci0JCS8qIE9sZCBmb3JtYXQgZmlsZXN5c3RlbSwgYnV0IG9wdGlvbmFsIHhhdHRycyBoYXZlIGJlZW4gZW5hYmxlZAotCQkgKiBhdCBtb3VudCB0aW1lLiBFcnJvciBvdXQuICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgb24gcHJlIHYzLjYgIgotCQkJCSAiZm9ybWF0IGZpbGVzeXN0ZW0uIEZhaWxpbmcgbW91bnQuIik7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorCWVyciA9IHhhdHRyX21vdW50X2NoZWNrKHMpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgbm8gb3B0aW9uYWwgeGF0dHJzIGhhdmUgYmVlbiBlbmFibGVkLiBUaGlzCi0JCSAqIG1lYW5zIHdlIHNpbGVudGx5IGRpc2FibGUgeGF0dHJzIG9uIHRoZSBmaWxlc3lzdGVtLiAqLwotCQljbGVhcl9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0KKyNlbmRpZgogCiAJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcHJpdnJvb3QgbG9jYXRlZCB5ZXQgLSBnbyBmaW5kIGl0ICovCi0JaWYgKHJlaXNlcmZzX3hhdHRycyhzKSAmJiAhUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgeworCWlmICghUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKFBSSVZST09UX05BTUUsIHMtPnNfcm9vdCwKIAkJCQkJc3RybGVuKFBSSVZST09UX05BTUUpKTsKIAkJaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQkJaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpICYmICFkZW50cnktPmRfaW5vZGUpIHsKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQkJCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsCi0JCQkJCQkgIElfTVVURVhfWEFUVFIpOwotCQkJCWVyciA9IGlub2RlLT5pX29wLT5ta2Rpcihpbm9kZSwgZGVudHJ5LCAwNzAwKTsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQkJZGVudHJ5ID0gTlVMTDsKLQkJCQl9Ci0KLQkJCQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAiQ3JlYXRlZCAlcyBvbiAlcyAtIHJlc2VydmVkIGZvciAiCi0JCQkJCQkJICJ4YXR0ciBzdG9yYWdlLiIsCi0JCQkJCQkJIFBSSVZST09UX05BTUUsCi0JCQkJCQkJIHJlaXNlcmZzX2JkZXZuYW1lCi0JCQkJCQkJIChpbm9kZS0+aV9zYikpOwotCQkJfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCQlpZiAoIShtb3VudF9mbGFncyAmIE1TX1JET05MWSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKKwkJCQllcnIgPSBjcmVhdGVfcHJpdnJvb3QoZGVudHJ5KTsKKyNlbmRpZgorCQkJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZGVudHJ5ID0gTlVMTDsKIAkJCX0KQEAgLTExOTcsNzMgKzk5NCw0MSBAQAogCiAJCWlmICghZXJyICYmIGRlbnRyeSkgewogCQkJcy0+c19yb290LT5kX29wID0gJnhhdHRyX2xvb2t1cF9wb2lzb25fb3BzOwotCQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSk7CisJCQlkZW50cnktPmRfaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogCQkJUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCA9IGRlbnRyeTsKLQkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgewkvKiB4YXR0cnMgYXJlIHVuYXZhaWxhYmxlICovCi0JCQkvKiBJZiB3ZSdyZSByZWFkLW9ubHkgaXQganVzdCBtZWFucyB0aGF0IHRoZSBkaXIgaGFzbid0IGJlZW4KLQkJCSAqIGNyZWF0ZWQuIE5vdCBhbiBlcnJvciAtLSBqdXN0IG5vIHhhdHRycyBvbiB0aGUgZnMuIFdlJ2xsCi0JCQkgKiBjaGVjayBhZ2FpbiBpZiB3ZSBnbyByZWFkLXdyaXRlICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJ4YXR0cnMvQUNMcyBlbmFibGVkIGFuZCBjb3VsZG4ndCAiCi0JCQkJCSAiZmluZC9jcmVhdGUgLnJlaXNlcmZzX3ByaXYuIEZhaWxpbmcgbW91bnQuIik7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCS8qIHhhdHRycyBhcmUgdW5hdmFpbGFibGUgKi8KKwkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJLyogSWYgd2UncmUgcmVhZC1vbmx5IGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgZGlyCisJCQkgKiBoYXNuJ3QgYmVlbiBjcmVhdGVkLiBOb3QgYW4gZXJyb3IgLS0ganVzdCBubworCQkJICogeGF0dHJzIG9uIHRoZSBmcy4gV2UnbGwgY2hlY2sgYWdhaW4gaWYgd2UKKwkJCSAqIGdvIHJlYWQtd3JpdGUgKi8KKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpkbS0yMDAwNiIsCisJCQkJCSAieGF0dHJzL0FDTHMgZW5hYmxlZCBhbmQgY291bGRuJ3QgIgorCQkJCQkgImZpbmQvY3JlYXRlIC5yZWlzZXJmc19wcml2LiAiCisJCQkJCSAiRmFpbGluZyBtb3VudC4iKTsKIAkJCWVyciA9IC1FT1BOT1RTVVBQOworI2VuZGlmCiAJCX0KIAl9CiAKLSAgICAgIGVycm9yOgotCS8qIFRoaXMgaXMgb25seSBub256ZXJvIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbml0aWFsaXppbmcgdGhlIHhhdHRyCi0JICogZGlyZWN0b3J5IG9yIGlmIHRoZXJlIGlzIGEgY29uZGl0aW9uIHdoZXJlIHdlIGRvbid0IHN1cHBvcnQgdGhlbS4gKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKKwlpZiAoIWVycikKKwkJcy0+c194YXR0ciA9IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzOworCitlcnJvcjoKIAlpZiAoZXJyKSB7Ci0JCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlMsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7CiAJCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlNfVVNFUiwgJihSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQpKTsKIAkJY2xlYXJfYml0KFJFSVNFUkZTX1BPU0lYQUNMLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwogCX0KKyNlbmRpZgogCiAJLyogVGhlIHN1cGVyX2Jsb2NrIE1TX1BPU0lYQUNMIG11c3QgbWlycm9yIHRoZSAobm8pYWNsIG1vdW50IG9wdGlvbi4gKi8KIAlzLT5zX2ZsYWdzID0gcy0+c19mbGFncyAmIH5NU19QT1NJWEFDTDsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiAJaWYgKHJlaXNlcmZzX3Bvc2l4YWNsKHMpKQogCQlzLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworI2VuZGlmCiAKIAlyZXR1cm4gZXJyOwogfQotCi1zdGF0aWMgaW50IHJlaXNlcmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKLXsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KLQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGlub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQotCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7Ci0KLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koaW5vZGUpOwotCi0JaWYgKGFjbCkgewotCQlpZiAoIUlTX0VSUihhY2wpKSB7Ci0JCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOwotCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKLQkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCi0JCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCS8qCi0JICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCi0JICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KLQkgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgotCSAqLwotCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQotCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKLQllbHNlCi0JCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Ci19CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCmluZGV4IGI3ZTRmYTQuLmQ0MjM0MTYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCkBAIC0xMCwxNSArMTAsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19hY2wuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCitzdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCiAJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKTsKIAogc3RhdGljIGludAogeGF0dHJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKLQlpbnQgZXJyb3I7Ci0KKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXNpemVfdCBqY3JlYXRlX2Jsb2NrczsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKQEAgLTM2LDcgKzM4LDIxIEBACiAJfSBlbHNlCiAJCWFjbCA9IE5VTEw7CiAKLQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CisJLyogUGVzc2ltaXNtOiBXZSBjYW4ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBmcm9tIHRoZSB4YXR0ciByb290IHVwCisJICogaGFzIGJlZW4gY3JlYXRlZC4gKi8KKworCWpjcmVhdGVfYmxvY2tzID0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKSArCisJCQkgcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2l6ZSkgKiAyOworCisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJZXJyb3IgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGpjcmVhdGVfYmxvY2tzKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woJnRoLCBpbm9kZSwgdHlwZSwgYWNsKTsKKwkJZXJyb3IyID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamNyZWF0ZV9ibG9ja3MpOworCQlpZiAoZXJyb3IyKQorCQkJZXJyb3IgPSBlcnJvcjI7CisJfQorCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAKICAgICAgIHJlbGVhc2VfYW5kX291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwpAQCAtMTcyLDYgKzE4OCwyOSBAQAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXNldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsLAorCQkJICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9hY2wgIT0gRVJSX1BUUigtRU5PREFUQSkpCisJCXBvc2l4X2FjbF9yZWxlYXNlKCppX2FjbCk7CisJKmlfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zaXhfYWNsICppZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEVSUl9QVFIoLUVOT0RBVEEpKQorCQlhY2wgPSBwb3NpeF9hY2xfZHVwKCppX2FjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJcmV0dXJuIGFjbDsKK30KKwogLyoKICAqIElub2RlIG9wZXJhdGlvbiBnZXRfcG9zaXhfYWNsKCkuCiAgKgpAQCAtMTk5LDExICsyMzgsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKElTX0VSUigqcF9hY2wpKSB7Ci0JCWlmIChQVFJfRVJSKCpwX2FjbCkgPT0gLUVOT0RBVEEpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCpwX2FjbCAhPSBOVUxMKQotCQlyZXR1cm4gcG9zaXhfYWNsX2R1cCgqcF9hY2wpOworCWFjbCA9IGlnZXRfYWNsKGlub2RlLCBwX2FjbCk7CisJaWYgKGFjbCAmJiAhSVNfRVJSKGFjbCkpCisJCXJldHVybiBhY2w7CisJZWxzZSBpZiAoUFRSX0VSUihhY2wpID09IC1FTk9EQVRBKQorCQlyZXR1cm4gTlVMTDsKIAogCXNpemUgPSByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIE5VTEwsIDApOwogCWlmIChzaXplIDwgMCkgewpAQCAtMjI5LDcgKzI2OCw3IEBACiAJfSBlbHNlIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21fZGlzayh2YWx1ZSwgcmV0dmFsKTsKIAkJaWYgKCFJU19FUlIoYWNsKSkKLQkJCSpwX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKKwkJCWlzZXRfYWNsKGlub2RlLCBwX2FjbCwgYWNsKTsKIAl9CiAKIAlrZnJlZSh2YWx1ZSk7CkBAIC0yNDMsMTIgKzI4MiwxMyBAQAogICogQktMIGhlbGQgW2JlZm9yZSAyLjUueF0KICAqLwogc3RhdGljIGludAotcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQorcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqKnBfYWNsOwotCXNpemVfdCBzaXplOworCXNpemVfdCBzaXplID0gMDsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKIApAQCAtMjg1LDMxICszMjUsMjggQEAKIAkJdmFsdWUgPSBwb3NpeF9hY2xfdG9fZGlzayhhY2wsICZzaXplKTsKIAkJaWYgKElTX0VSUih2YWx1ZSkpCiAJCQlyZXR1cm4gKGludClQVFJfRVJSKHZhbHVlKTsKLQkJZXJyb3IgPSByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnJvciA9PSAtRU5PREFUQSkgewotCQkJLyogVGhpcyBtYXkgc2VlbSBvZGQgaGVyZSwgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIEFDTCB3YXMgc2V0Ci0JCQkgKiB3aXRoIGEgdmFsdWUgcmVwcmVzZW50YWJsZSB3aXRoIG1vZGUgYml0cy4gSWYgdGhlcmUgd2FzCi0JCQkgKiBhbiBBQ0wgYmVmb3JlLCByZWlzZXJmc194YXR0cl9kZWwgYWxyZWFkeSBkaXJ0aWVkIHRoZSBpbm9kZS4KLQkJCSAqLworCX0KKworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSh0aCwgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGlub2RlIGdldHMgZGlydGllZCBpZiB3ZSdyZSBvbmx5IHVzaW5nCisJICogdGhlIG1vZGUgYml0cyBhbmQgYW4gb2xkIEFDTCBkaWRuJ3QgZXhpc3QuIFdlIGRvbid0IG5lZWQKKwkgKiB0byBjaGVjayBpZiB0aGUgaW5vZGUgaXMgaGFzaGVkIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2V0CisJICogY2FsbGVkIGJ5IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woKS4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLUVOT0RBVEEpIHsKKwkJZXJyb3IgPSAwOworCQlpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MpIHsKKwkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQkJZXJyb3IgPSAwOwogCQl9CiAJfQogCiAJa2ZyZWUodmFsdWUpOwogCi0JaWYgKCFlcnJvcikgewotCQkvKiBSZWxlYXNlIHRoZSBvbGQgb25lICovCi0JCWlmICghSVNfRVJSKCpwX2FjbCkgJiYgKnBfYWNsKQotCQkJcG9zaXhfYWNsX3JlbGVhc2UoKnBfYWNsKTsKLQotCQlpZiAoYWNsID09IE5VTEwpCi0JCQkqcF9hY2wgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQkJZWxzZQotCQkJKnBfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOwotCX0KKwlpZiAoIWVycm9yKQorCQlpc2V0X2FjbChpbm9kZSwgcF9hY2wsIGFjbCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTcsNyArMzU0LDggQEAKIC8qIGRpci0+aV9tdXRleDogbG9ja2VkLAogICogaW5vZGUgaXMgbmV3IGFuZCBub3QgcmVsZWFzZWQgaW50byB0aGUgd2lsZCB5ZXQgKi8KIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CkBAIC0zMzUsOCArMzczLDggQEAKIAkvKiBEb24ndCBhcHBseSBBQ0xzIHRvIG9iamVjdHMgaW4gdGhlIC5yZWlzZXJmc19wcml2IHRyZWUuLiBUaGlzCiAJICogd291bGQgYmUgdXNlbGVzcyBzaW5jZSBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCwgYW5kIGEgcGFpbiBiZWNhdXNlCiAJICogaXQgaW50cm9kdWNlcyBsb2NraW5nIGN5Y2xlcyAqLwotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChkaXIpKSB7Ci0JCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJaWYgKElTX1BSSVZBVEUoZGlyKSkgeworCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJCWdvdG8gYXBwbHlfdW1hc2s7CiAJfQogCkBAIC0zNTQsNyArMzkyLDggQEAKIAogCQkvKiBDb3B5IHRoZSBkZWZhdWx0IEFDTCB0byB0aGUgZGVmYXVsdCBBQ0wgb2YgYSBuZXcgZGlyZWN0b3J5ICovCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOworCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsCisJCQkJCSAgICAgICBhY2wpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KQEAgLTM3NSw5ICs0MTQsOSBAQAogCiAJCQkvKiBJZiB3ZSBuZWVkIGFuIEFDTC4uICovCiAJCQlpZiAobmVlZF9hY2wgPiAwKSB7Ci0JCQkJZXJyID0KLQkJCQkgICAgcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkJICAgICBhY2xfY29weSk7CisJCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsCisJCQkJCQkgICAgICAgQUNMX1RZUEVfQUNDRVNTLAorCQkJCQkJICAgICAgIGFjbF9jb3B5KTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGNsZWFudXBfY29weTsKIAkJCX0KQEAgLTM5NSwyNSArNDM0LDQ1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogTG9va3MgdXAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0IG9mIHRoZSBkZWZhdWx0IEFDTC4KLSAqIFdlIGRvIHRoaXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNhcnJ5IHRoZSB4YXR0cl9zZW0gaW50bwotICogcmVpc2VyZnNfbmV3X2lub2RlIGlmIHdlIGRvbid0IG5lZWQgdG8gKi8KKy8qIFRoaXMgaXMgdXNlZCB0byBjYWNoZSB0aGUgZGVmYXVsdCBhY2wgYmVmb3JlIGEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLgorICogVGhlIGJpZ2dlc3QgcmVhc29uIGZvciB0aGlzIGlzIHRvIGdldCBhbiBpZGVhIG9mIGhvdyBtYW55IGJsb2NrcyB3aWxsCisgKiBhY3R1YWxseSBiZSByZXF1aXJlZCBmb3IgdGhlIGNyZWF0ZSBvcGVyYXRpb24gaWYgd2UgbXVzdCBpbmhlcml0IGFuIEFDTC4KKyAqIEFuIEFDTCB3cml0ZSBjYW4gYWRkIHVwIHRvIDMgb2JqZWN0IGNyZWF0aW9ucyBhbmQgYW4gYWRkaXRpb25hbCBmaWxlIHdyaXRlCisgKiBzbyB3ZSdkIHByZWZlciBub3QgdG8gcmVzZXJ2ZSB0aGF0IG1hbnkgYmxvY2tzIGluIHRoZSBqb3VybmFsIGlmIHdlIGNhbi4KKyAqIEl0IGFsc28gaGFzIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IGxvYWRpbmcgdGhlIEFDTCB3aXRoIGEgdHJhbnNhY3Rpb24gb3BlbiwKKyAqIHRoaXMgbWF5IHNlZW0gc2lsbHksIGJ1dCBpZiB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBpcyBkb2luZyB0aGUKKyAqIGNyZWF0aW9uLCB0aGUgQUNMIG1heSBub3QgYmUgbG9hZGVkIHNpbmNlIHRoZSBwZXJtaXNzaW9ucyB3b3VsZG4ndCByZXF1aXJlCisgKiBpdC4KKyAqIFdlIHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZXF1aXJlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICovCiBpbnQgcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpICYmICFpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpIHsKLQkJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwotCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKLQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJldCA9IChhY2wgJiYgIUlTX0VSUihhY2wpKTsKLQkJaWYgKHJldCkKLQkJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWludCBuYmxvY2tzID0gMDsKKworCWlmIChJU19QUklWQVRFKGlub2RlKSkKKwkJcmV0dXJuIDA7CisKKwlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKKworCWlmIChhY2wgJiYgIUlTX0VSUihhY2wpKSB7CisJCWludCBzaXplID0gcmVpc2VyZnNfYWNsX3NpemUoYWNsLT5hX2NvdW50KTsKKworCQkvKiBPdGhlciB4YXR0cnMgY2FuIGJlIGNyZWF0ZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBXZSBkb24ndAorCQkgKiB3YW50IHRvIGNsYWltIHRvbyBtYW55IGJsb2Nrcywgc28gd2UgY2hlY2sgdG8gc2VlIGlmIHdlCisJCSAqIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSB0cmVlIHRvIHRoZSB4YXR0cnMsIGFuZCB0aGVuIHdlCisJCSAqIGp1c3Qgd2FudCB0d28gZmlsZXMuICovCisJCW5ibG9ja3MgPSByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3MoaW5vZGUpOworCQluYmxvY2tzICs9IEpPVVJOQUxfQkxPQ0tTX1BFUl9PQkpFQ1QoaW5vZGUtPmlfc2IpOworCisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKKworCQkvKiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHdyaXRlcyArIGJpdG1hcHMgZm9yIHR3byBmaWxlcyAqLworCQluYmxvY2tzICs9IHJlaXNlcmZzX3hhdHRyX25ibG9ja3MoaW5vZGUsIHNpemUpICogNDsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBuYmxvY2tzOwogfQogCiBpbnQgcmVpc2VyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC00MjksOSArNDg4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7CiAJYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwogCWlmICghYWNsKQogCQlyZXR1cm4gMDsKIAlpZiAoSVNfRVJSKGFjbCkpCkBAIC00NDIsMTggKzQ5OSwyMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAllcnJvciA9IHBvc2l4X2FjbF9jaG1vZF9tYXNxKGNsb25lLCBpbm9kZS0+aV9tb2RlKTsKIAlpZiAoIWVycm9yKSB7Ci0JCWludCBsb2NrID0gIWhhc194YXR0cl9kaXIoaW5vZGUpOwotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRyX2koaW5vZGUpOwotCQlpZiAobG9jaykKLQkJCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZWxzZQotCQkJcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWVycm9yID0gcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7Ci0JCWlmIChsb2NrKQotCQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWVsc2UKLQkJCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGlub2RlKTsKKwkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwkJc2l6ZV90IHNpemUgPSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLAorCQkJCQkgICAgIHJlaXNlcmZzX2FjbF9zaXplKGNsb25lLT5hX2NvdW50KSk7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCQllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgc2l6ZSAqIDIpOworCQlpZiAoIWVycm9yKSB7CisJCQlpbnQgZXJyb3IyOworCQkJZXJyb3IgPSByZWlzZXJmc19zZXRfYWNsKCZ0aCwgaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywKKwkJCQkJCSBjbG9uZSk7CisJCQllcnJvcjIgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBzaXplICogMik7CisJCQlpZiAoZXJyb3IyKQorCQkJCWVycm9yID0gZXJyb3IyOworCQl9CisJCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJfQogCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00NzcsMzggKzUzNiwyMiBAQAogCXJldHVybiB4YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwb3NpeF9hY2xfYWNjZXNzX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCBwb3NpeF9hY2xfYWNjZXNzX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc2l6ZV90IG5hbWVfbGVuKQogewotCXN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvICpyZWlzZXJmc19pID0gUkVJU0VSRlNfSShpbm9kZSk7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqKmFjbCA9ICZyZWlzZXJmc19pLT5pX2FjbF9hY2Nlc3M7Ci0JaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUykgLSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIUlTX0VSUigqYWNsKSAmJiAqYWNsKSB7Ci0JCXBvc2l4X2FjbF9yZWxlYXNlKCphY2wpOwotCQkqYWNsID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvc2l4X2FjbF9hY2Nlc3NfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICAgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MpOwogCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQogCQlyZXR1cm4gMDsKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCi0JcmV0dXJuIGxlbjsKKwlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3Rfc2l6ZSkKKwkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsIHNpemUpOworCXJldHVybiBzaXplOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCiAJLmdldCA9IHBvc2l4X2FjbF9hY2Nlc3NfZ2V0LAogCS5zZXQgPSBwb3NpeF9hY2xfYWNjZXNzX3NldCwKLQkuZGVsID0gcG9zaXhfYWNsX2FjY2Vzc19kZWwsCiAJLmxpc3QgPSBwb3NpeF9hY2xfYWNjZXNzX2xpc3QsCiB9OwogCkBAIC01MzAsMzcgKzU3MywyMSBAQAogCXJldHVybiB4YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCB2YWx1ZSwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcG9zaXhfYWNsX2RlZmF1bHRfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHBvc2l4X2FjbF9kZWZhdWx0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgIHNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICBzaXplX3QgbmFtZV9sZW4pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsID0gJnJlaXNlcmZzX2ktPmlfYWNsX2RlZmF1bHQ7Ci0JaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpIC0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFJU19FUlIoKmFjbCkgJiYgKmFjbCkgewotCQlwb3NpeF9hY2xfcmVsZWFzZSgqYWNsKTsKLQkJKmFjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wb3NpeF9hY2xfZGVmYXVsdF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgICAgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKTsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQotCXJldHVybiBsZW47CisJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCisJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyID0gewogCS5wcmVmaXggPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKIAkuZ2V0ID0gcG9zaXhfYWNsX2RlZmF1bHRfZ2V0LAogCS5zZXQgPSBwb3NpeF9hY2xfZGVmYXVsdF9zZXQsCi0JLmRlbCA9IHBvc2l4X2FjbF9kZWZhdWx0X2RlbCwKIAkubGlzdCA9IHBvc2l4X2FjbF9kZWZhdWx0X2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggMDU2MDA4ZC4uNGQzYzIwZSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgaW50CkBAIC0xMiw3ICsxMyw3IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKQEAgLTI1LDQxICsyNiw4NCBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQorCWlmIChJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNlY3VyaXR5X2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCBzZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X2xlbiwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbikKIHsKLQlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkpCi0JCXJldHVybiAtRUlOVkFMOworCWNvbnN0IHNpemVfdCBsZW4gPSBuYW1lbGVuICsgMTsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOwotCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKKwlpZiAobGlzdCAmJiBsZW4gPD0gbGlzdF9sZW4pIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVsZW4pOworCQlsaXN0W25hbWVsZW5dID0gJ1wwJzsKKwl9CiAKIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBzZWN1cml0eV9oYW5kbGVyID0geworLyogSW5pdGlhbGl6ZXMgdGhlIHNlY3VyaXR5IGNvbnRleHQgZm9yIGEgbmV3IGlub2RlIGFuZCByZXR1cm5zIHRoZSBudW1iZXIKKyAqIG9mIGJsb2NrcyBuZWVkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbi4gSWYgc3VjY2Vzc2Z1bCwgcmVpc2VyZnNfc2VjdXJpdHkKKyAqIG11c3QgYmUgcmVsZWFzZWQgdXNpbmcgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZSB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZS4gKi8KK2ludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKQoreworCWludCBibG9ja3MgPSAwOworCWludCBlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJnNlYy0+bmFtZSwKKwkJCQkJCSAmc2VjLT52YWx1ZSwgJnNlYy0+bGVuZ3RoKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKGVycm9yID09IC1FT1BOT1RTVVBQKQorCQkJZXJyb3IgPSAwOworCisJCXNlYy0+bmFtZSA9IE5VTEw7CisJCXNlYy0+dmFsdWUgPSBOVUxMOworCQlzZWMtPmxlbmd0aCA9IDA7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAoc2VjLT5sZW5ndGgpIHsKKwkJYmxvY2tzID0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKSArCisJCQkgcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2VjLT5sZW5ndGgpOworCQkvKiBXZSBkb24ndCB3YW50IHRvIGNvdW50IHRoZSBkaXJlY3RvcmllcyB0d2ljZSBpZiB3ZSBoYXZlCisJCSAqIGEgZGVmYXVsdCBBQ0wuICovCisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKKwl9CisJcmV0dXJuIGJsb2NrczsKK30KKworaW50IHJlaXNlcmZzX3NlY3VyaXR5X3dyaXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKQoreworCWludCBlcnJvcjsKKwlpZiAoc3RybGVuKHNlYy0+bmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUodGgsIGlub2RlLCBzZWMtPm5hbWUsIHNlYy0+dmFsdWUsCisJCQkJCSAgc2VjLT5sZW5ndGgsIFhBVFRSX0NSRUFURSk7CisJaWYgKGVycm9yID09IC1FTk9EQVRBIHx8IGVycm9yID09IC1FT1BOT1RTVVBQKQorCQllcnJvciA9IDA7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJa2ZyZWUoc2VjLT5uYW1lKTsKKwlrZnJlZShzZWMtPnZhbHVlKTsKKwlzZWMtPm5hbWUgPSBOVUxMOworCXNlYy0+dmFsdWUgPSBOVUxMOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyID0gewogCS5wcmVmaXggPSBYQVRUUl9TRUNVUklUWV9QUkVGSVgsCiAJLmdldCA9IHNlY3VyaXR5X2dldCwKIAkuc2V0ID0gc2VjdXJpdHlfc2V0LAotCS5kZWwgPSBzZWN1cml0eV9kZWwsCiAJLmxpc3QgPSBzZWN1cml0eV9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA2MGFiZTJiLi5hODY1MDQyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCkBAIC0xMywxMCArMTMsNyBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CkBAIC0yOSw1MCArMjYsMzAgQEAKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICghKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKSkKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfc2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCB0cnVzdGVkX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCB0cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKLQlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVfbGVuICsgMTsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRydXN0ZWRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOwotCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCi0JCXJldHVybiAwOwotCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQorCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtuYW1lX2xlbl0gPSAnXDAnOworCX0KIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB0cnVzdGVkX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1RSVVNURURfUFJFRklYLAogCS5nZXQgPSB0cnVzdGVkX2dldCwKIAkuc2V0ID0gdHJ1c3RlZF9zZXQsCi0JLmRlbCA9IHRydXN0ZWRfZGVsLAogCS5saXN0ID0gdHJ1c3RlZF9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYwppbmRleCAxMzg0ZWZjLi5lMzIzOGRjIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC02LDEwICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc194YXR0ci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCi0jIGluY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgotI2VuZGlmCi0KIHN0YXRpYyBpbnQKIHVzZXJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CkBAIC0yNSw3ICsyMSw2IEBACiB1c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCiAJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0KIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1VTRVJfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM0LDMzICsyOSwyMyBAQAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHVzZXJfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHVzZXJfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljb25zdCBzaXplX3QgbGVuID0gbmFtZV9sZW4gKyAxOwogCiAJaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0JaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCiAJCXJldHVybiAwOwotCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQorCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtuYW1lX2xlbl0gPSAnXDAnOworCX0KIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB1c2VyX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl91c2VyX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1VTRVJfUFJFRklYLAogCS5nZXQgPSB1c2VyX2dldCwKIAkuc2V0ID0gdXNlcl9zZXQsCi0JLmRlbCA9IHVzZXJfZGVsLAogCS5saXN0ID0gdXNlcl9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggZTk1ODFmZC4uYTY3YjYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTE1OCw4ICsxNTgsNiBAQAogaGVhZGVyLXkgKz0gdW4uaAogaGVhZGVyLXkgKz0gdXRpbWUuaAogaGVhZGVyLXkgKz0gdmV0aC5oCi1oZWFkZXIteSArPSB2aWRlb19kZWNvZGVyLmgKLWhlYWRlci15ICs9IHZpZGVvX2VuY29kZXIuaAogaGVhZGVyLXkgKz0gdmlkZW90ZXh0LmgKIGhlYWRlci15ICs9IHgyNS5oCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrLmggYi9pbmNsdWRlL2xpbnV4L2Nsay5oCmluZGV4IDc3ODc3NzMuLjFkYjliYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbGsuaApAQCAtMTI1LDQgKzEyNSwyMSBAQAogICovCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogCisvKioKKyAqIGNsa19nZXRfc3lzIC0gZ2V0IGEgY2xvY2sgYmFzZWQgdXBvbiB0aGUgZGV2aWNlIG5hbWUKKyAqIEBkZXZfaWQ6IGRldmljZSBuYW1lCisgKiBAY29uX2lkOiBjb25uZWN0aW9uIElECisgKgorICogUmV0dXJucyBhIHN0cnVjdCBjbGsgY29ycmVzcG9uZGluZyB0byB0aGUgY2xvY2sgcHJvZHVjZXIsIG9yCisgKiB2YWxpZCBJU19FUlIoKSBjb25kaXRpb24gY29udGFpbmluZyBlcnJuby4gIFRoZSBpbXBsZW1lbnRhdGlvbgorICogdXNlcyBAZGV2X2lkIGFuZCBAY29uX2lkIHRvIGRldGVybWluZSB0aGUgY2xvY2sgY29uc3VtZXIsIGFuZAorICogdGhlcmVieSB0aGUgY2xvY2sgcHJvZHVjZXIuIEluIGNvbnRyYXN0IHRvIGNsa19nZXQoKSB0aGlzIGZ1bmN0aW9uCisgKiB0YWtlcyB0aGUgZGV2aWNlIG5hbWUgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIGl0c2VsZiBmb3IgaWRlbnRpZmljYXRpb24uCisgKgorICogRHJpdmVycyBtdXN0IGFzc3VtZSB0aGF0IHRoZSBjbG9jayBzb3VyY2UgaXMgbm90IGVuYWJsZWQuCisgKgorICogY2xrX2dldF9zeXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0cnVjdCBjbGsgKmNsa19nZXRfc3lzKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYXIuaCBiL2luY2x1ZGUvbGludXgvZG1hci5oCmluZGV4IGYyODQ0MDcuLjJmMzQyNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hci5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hci5oCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0RNQVIpIHx8IGRlZmluZWQoQ09ORklHX0lOVFJfUkVNQVApCiBzdHJ1Y3QgaW50ZWxfaW9tbXU7Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19ETUFSKSB8fCBkZWZpbmVkKENPTkZJR19JTlRSX1JFTUFQKQogc3RydWN0IGRtYXJfZHJoZF91bml0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGRyaGQgdW5pdHMJKi8KIAlzdHJ1Y3QgIGFjcGlfZG1hcl9oZWFkZXIgKmhkcjsJLyogQUNQSSBoZWFkZXIJCSovCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qIEludGVsIElPTU1VIGRldGVjdGlvbiAqLwogZXh0ZXJuIHZvaWQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpOwotCitleHRlcm4gaW50IGVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKHZvaWQpOwogCiBleHRlcm4gaW50IHBhcnNlX2lvYXBpY3NfdW5kZXJfaXIodm9pZCk7CiBleHRlcm4gaW50IGFsbG9jX2lvbW11KHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqKTsKQEAgLTYzLDEyICs2MywxMiBAQAogewogCXJldHVybiAtRU5PREVWOwogfQorc3RhdGljIGlubGluZSBpbnQgZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcodm9pZCkKK3sKKwlyZXR1cm4gLTE7Cit9CiAjZW5kaWYgLyogIUNPTkZJR19ETUFSICYmICFDT05GSUdfSU5UUl9SRU1BUCAqLwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLWV4dGVybiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKLWV4dGVybiBpbnQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCk7Ci0KIHN0cnVjdCBpcnRlIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC05Nyw2ICs5NywxMCBAQAogCQlfX3U2NCBoaWdoOwogCX07CiB9OworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitleHRlcm4gaW50IGludHJfcmVtYXBwaW5nX2VuYWJsZWQ7CitleHRlcm4gaW50IGVuYWJsZV9pbnRyX3JlbWFwcGluZyhpbnQpOworCiBleHRlcm4gaW50IGdldF9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICplbnRyeSk7CiBleHRlcm4gaW50IG1vZGlmeV9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICppcnRlX21vZGlmaWVkKTsKIGV4dGVybiBpbnQgYWxsb2NfaXJ0ZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgaXJxLCB1MTYgY291bnQpOwpAQCAtMTExLDE0ICsxMTUsNDAgQEAKIGV4dGVybiBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9kZXZfdG9faXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gc3RydWN0IGludGVsX2lvbW11ICptYXBfaW9hcGljX3RvX2lyKGludCBhcGljKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhbGxvY19pcnRlKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCBpcnEsIHUxNiBjb3VudCkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBtb2RpZnlfaXJ0ZShpbnQgaXJxLCBzdHJ1Y3QgaXJ0ZSAqaXJ0ZV9tb2RpZmllZCkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBmcmVlX2lydGUoaW50IGlycSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBtYXBfaXJxX3RvX2lydGVfaGFuZGxlKGludCBpcnEsIHUxNiAqc3ViX2hhbmRsZSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZXRfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4LAorCQkJICAgICAgIHUxNiBzdWJfaGFuZGxlKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2lvbW11ICptYXBfZGV2X3RvX2lyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9pb21tdSAqbWFwX2lvYXBpY190b19pcihpbnQgYXBpYykKK3sKKwlyZXR1cm4gTlVMTDsKK30KICNkZWZpbmUgaXJxX3JlbWFwcGVkKGlycSkJCSgwKQogI2RlZmluZSBlbmFibGVfaW50cl9yZW1hcHBpbmcobW9kZSkJKC0xKQogI2RlZmluZSBpbnRyX3JlbWFwcGluZ19lbmFibGVkCQkoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RNQVIKLWV4dGVybiBjb25zdCBjaGFyICpkbWFyX2dldF9mYXVsdF9yZWFzb24odTggZmF1bHRfcmVhc29uKTsKLQogLyogQ2FuJ3QgdXNlIHRoZSBjb21tb24gTVNJIGludGVycnVwdCBmdW5jdGlvbnMKICAqIHNpbmNlIERNQVIgaXMgbm90IGEgcGNpIGRldmljZQogICovCkBAIC0xMjcsOCArMTU3LDEwIEBACiBleHRlcm4gdm9pZCBkbWFyX21zaV9yZWFkKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgZG1hcl9tc2lfd3JpdGUoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiBleHRlcm4gaW50IGRtYXJfc2V0X2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKK2V4dGVybiBpcnFyZXR1cm5fdCBkbWFyX2ZhdWx0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSk7CiAKKyNpZmRlZiBDT05GSUdfRE1BUgogZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZCwgbm9faW9tbXU7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkbWFyX3JtcnJfdW5pdHM7CiBzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDQyNDM2YWUuLjg3ZTdiZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTg0OSw3ICs4NDksNyBAQAogI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAjZGVmaW5lIGZfdmZzbW50CWZfcGF0aC5tbnQKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOwotCXNwaW5sb2NrX3QJCWZfbG9jazsgIC8qIGZfZXBfbGlua3MsIGZfZmxhZ3MgKi8KKwlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzLCBubyBJUlEgKi8KIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CiAJZm1vZGVfdAkJCWZfbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCmluZGV4IGE5N2MwNTMuLjE4YjQ2N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaApAQCAtNCw3ICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgogCiBzdHJ1Y3QgZnNfc3RydWN0IHsKLQlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCBjb3VudDsJLyogVGhpcyB1c2FnZSBjb3VudCBpcyB1c2VkIGJ5IGNoZWNrX3Vuc2FmZV9leGVjKCkgZm9yCisJCQkgKiBzZWN1cml0eSBjaGVja2luZyBwdXJwb3NlcyAtIHRoZXJlZm9yZSBpdCBtYXkgbm90IGJlCisJCQkgKiBpbmNyZW1lbnRlZCwgZXhjZXB0IGJ5IGNsb25lKENMT05FX0ZTKS4KKwkJCSAqLwogCXJ3bG9ja190IGxvY2s7CiAJaW50IHVtYXNrOwogCXN0cnVjdCBwYXRoIHJvb3QsIHB3ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCmluZGV4IDY3NzQzMmIuLmE3ZjgxMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaApAQCAtMzgwLDYgKzM4MCwzMCBAQAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAogLyoKKyAqIFN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucworICogb2YgYSB0aHJlYWQuCisgKiBVc2VkIGluIHN0cnVjdCB0aHJlYWRfaW5mbworICovCitzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBmdW5jOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKK307CisKKy8qCisgKiBQcmltYXJ5IGhhbmRsZXIgb2YgYSBmdW5jdGlvbiByZXR1cm4uCisgKiBJdCByZWxheXMgb24gZnRyYWNlX3JldHVybl90b19oYW5kbGVyLgorICogRGVmaW5lZCBpbiBlbnRyeV8zMi82NC5TCisgKi8KK2V4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOworCitleHRlcm4gaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCk7CitleHRlcm4gdm9pZAorZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2Uoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCB1bnNpZ25lZCBsb25nICpyZXQpOworCisvKgogICogU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvbgogICogZ3JhcGggdHJhY2VyIGJ1dCB3ZSB3YW50IHRoZW0gdG8ga2VlcCB0cmFjZWQgYnkgdGhlIHVzdWFsIGZ1bmN0aW9uCiAgKiB0cmFjZXIgaWYgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBub3QgY29uZmlndXJlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCmluZGV4IGFkY2IzZGMuLjEzNjRkNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2EuaApAQCAtMSw3ICsxLDE0IEBACiAjaWZuZGVmIF9MSU5VWF9JMkNfQUxHT19QQ0FfSAogI2RlZmluZSBfTElOVVhfSTJDX0FMR09fUENBX0gKIAotLyogQ2xvY2sgc3BlZWRzIGZvciB0aGUgYnVzICovCisvKiBDaGlwcyBrbm93biB0byB0aGUgcGNhIGFsZ28gKi8KKyNkZWZpbmUgSTJDX1BDQV9DSElQXzk1NjQJMHgwMAorI2RlZmluZSBJMkNfUENBX0NISVBfOTY2NQkweDAxCisKKy8qIEludGVybmFsIHBlcmlvZCBmb3IgUENBOTY2NSBvc2NpbGF0b3IgKi8KKyNkZWZpbmUgSTJDX1BDQV9PU0NfUEVSCQkzIC8qIGUxMC04cyAqLworCisvKiBDbG9jayBzcGVlZHMgZm9yIHRoZSBidXMgZm9yIFBDQTk1NjQqLwogI2RlZmluZSBJMkNfUENBX0NPTl8zMzBrSHoJMHgwMAogI2RlZmluZSBJMkNfUENBX0NPTl8yODhrSHoJMHgwMQogI2RlZmluZSBJMkNfUENBX0NPTl8yMTdrSHoJMHgwMgpAQCAtMTgsNiArMjUsMjYgQEAKICNkZWZpbmUgSTJDX1BDQV9BRFIJCTB4MDIgLyogT1dOIEFEUiBSZWFkL1dyaXRlICovCiAjZGVmaW5lIEkyQ19QQ0FfQ09OCQkweDAzIC8qIENPTlRST0wgUmVhZC9Xcml0ZSAqLwogCisvKiBQQ0E5NjY1IHJlZ2lzdGVycyAqLworI2RlZmluZSBJMkNfUENBX0lORFBUUiAgICAgICAgICAweDAwIC8qIElORElSRUNUIFBvaW50ZXIgV3JpdGUgT25seSAqLworI2RlZmluZSBJMkNfUENBX0lORCAgICAgICAgICAgICAweDAyIC8qIElORElSRUNUIFJlYWQvV3JpdGUgKi8KKworLyogUENBOTY2NSBpbmRpcmVjdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSTJDX1BDQV9JQ09VTlQgICAgICAgICAgMHgwMCAvKiBCeXRlIENvdW50IGZvciBidWZmZXJlZCBtb2RlICovCisjZGVmaW5lIEkyQ19QQ0FfSUFEUiAgICAgICAgICAgIDB4MDEgLyogT1dOIEFEUiAqLworI2RlZmluZSBJMkNfUENBX0lTQ0xMICAgICAgICAgICAweDAyIC8qIFNDTCBMT1cgcGVyaW9kICovCisjZGVmaW5lIEkyQ19QQ0FfSVNDTEggICAgICAgICAgIDB4MDMgLyogU0NMIEhJR0ggcGVyaW9kICovCisjZGVmaW5lIEkyQ19QQ0FfSVRPICAgICAgICAgICAgIDB4MDQgLyogVElNRU9VVCAqLworI2RlZmluZSBJMkNfUENBX0lQUkVTRVQgICAgICAgICAweDA1IC8qIFBhcmFsbGVsIGJ1cyByZXNldCAqLworI2RlZmluZSBJMkNfUENBX0lNT0RFICAgICAgICAgICAweDA2IC8qIEkyQyBCdXMgbW9kZSAqLworCisvKiBQQ0E5NjY1IEkyQyBidXMgbW9kZSAqLworI2RlZmluZSBJMkNfUENBX01PREVfU1REICAgICAgICAweDAwIC8qIFN0YW5kYXJkIG1vZGUgKi8KKyNkZWZpbmUgSTJDX1BDQV9NT0RFX0ZBU1QgICAgICAgMHgwMSAvKiBGYXN0IG1vZGUgKi8KKyNkZWZpbmUgSTJDX1BDQV9NT0RFX0ZBU1RQICAgICAgMHgwMiAvKiBGYXN0IFBsdXMgbW9kZSAqLworI2RlZmluZSBJMkNfUENBX01PREVfVFVSQk8gICAgICAweDAzIC8qIFR1cmJvIG1vZGUgKi8KKworCiAjZGVmaW5lIEkyQ19QQ0FfQ09OX0FBCQkweDgwIC8qIEFzc2VydCBBY2tub3dsZWRnZSAqLwogI2RlZmluZSBJMkNfUENBX0NPTl9FTlNJTwkweDQwIC8qIEVuYWJsZSAqLwogI2RlZmluZSBJMkNfUENBX0NPTl9TVEEJCTB4MjAgLyogU3RhcnQgKi8KQEAgLTMxLDcgKzU4LDkgQEAKIAlpbnQgICgqcmVhZF9ieXRlKQkJKHZvaWQgKmRhdGEsIGludCByZWcpOwogCWludCAgKCp3YWl0X2Zvcl9jb21wbGV0aW9uKQkodm9pZCAqZGF0YSk7CiAJdm9pZCAoKnJlc2V0X2NoaXApCQkodm9pZCAqZGF0YSk7Ci0JLyogaTJjX2Nsb2NrIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBsaW51eC9pMmMtYWxnby1wY2EuaCAqLworCS8qIEZvciBQQ0E5NTY0LCB1c2Ugb25lIG9mIHRoZSBwcmVkZWZpbmVkIGZyZXF1ZW5jaWVzOgorCSAqIDMzMDAwMCwgMjg4MDAwLCAyMTcwMDAsIDE0NjAwMCwgODgwMDAsIDU5MDAwLCA0NDAwMCwgMzYwMDAKKwkgKiBGb3IgUENBOTY2NSwgdXNlIHRoZSBmcmVxdWVuY3kgeW91IHdhbnQgaGVyZS4gKi8KIAl1bnNpZ25lZCBpbnQJCQlpMmNfY2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAxZmZjMjNiLi5mMjc2MDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1ZQMjdTTVBYCTkzCS8qIFBhbmFzb25pYyBWUDI3cyB0dW5lciBpbnRlcm5hbCBNUFggKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX001Mjc5MCAJOTUgICAgICAvKiBNaXRzdWJpc2hpIE01Mjc5MFNQL0ZQIEFWIHN3aXRjaCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1MzQ1CTk2CS8qIGNzNTM0NSBhdWRpbyBwcm9jZXNzb3IJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0FVODUyMgk5NwkvKiBBdXZpdGVrIGF1ODUyMiAgICAgICAqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9PVjc2NzAgMTA0OAkvKiBPbW5pdmlzaW9uIDc2NzAgY2FtZXJhICovCiAKQEAgLTg3LDYgKzg4LDcgQEAKICNkZWZpbmUgSTJDX0hXX0JfQ1gyMzQxWAkweDAxMDAyMCAvKiBDb25leGFudCBDWDIzNDFYIE1QRUcgZW5jb2RlciBjYXJkcyAqLwogI2RlZmluZSBJMkNfSFdfQl9DWDIzODg1CTB4MDEwMDIyIC8qIGNvbmV4YW50IDIzODg1IGJhc2VkIHR2IGNhcmRzIChidXMxKSAqLwogI2RlZmluZSBJMkNfSFdfQl9BVTA4MjgJCTB4MDEwMDIzIC8qIGF1dml0ZWsgYXUwODI4IHVzYiBicmlkZ2UgKi8KKyNkZWZpbmUgSTJDX0hXX0JfSERQVlIJCTB4MDEwMDI1IC8qIEhhdXBwYXVnZSBIRCBQVlIgKi8KIAogLyogLS0tIFNHSSBhZGFwdGVycwkJCQkJCQkqLwogI2RlZmluZSBJMkNfSFdfU0dJX1ZJTk8JCTB4MTYwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvaTJjLXBjYS1wbGF0Zm9ybS5oCmluZGV4IDNkMTkxODcuLmFiYTMzNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLXBjYS1wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLXBjYS1wbGF0Zm9ybS5oCkBAIC02LDcgKzYsNyBAQAogCQkJCSAqIG5vdCBzdXBwbGllZCAobmVnYXRpdmUgdmFsdWUpLCBidXQgaXQKIAkJCQkgKiBjYW5ub3QgZXhpdCBzb21lIGVycm9yIGNvbmRpdGlvbnMgdGhlbiAqLwogCWludCBpMmNfY2xvY2tfc3BlZWQ7CS8qIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBsaW51eC9pMmMtYWxnby1wY2EuaCAqLwotCWludCB0aW1lb3V0OwkJLyogdGltZW91dCA9IHRoaXMgdmFsdWUgKiAxMHVzICovCisJaW50IHRpbWVvdXQ7CQkvKiB0aW1lb3V0IGluIGppZmZpZXMgKi8KIH07CiAKICNlbmRpZiAvKiBJMkNfUENBOTU2NF9QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCA4NTRlYmE4Li5kNWQ4MzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTQwLDYgKzQwLDEzIEBACiAjZGVmaW5lIEVSUk9SX1JFU0VUCTMJLyogUmVzZXQgY29udHJvbGxlciBldmVyeSA0dGggcmV0cnkgKi8KICNkZWZpbmUgRVJST1JfUkVDQUwJMQkvKiBSZWNhbGlicmF0ZSBldmVyeSAybmQgcmV0cnkgKi8KIAorLyogRXJyb3IgY29kZXMgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KK2VudW0geworCUlERV9EUlZfRVJST1JfR0VORVJBTAk9IDEwMSwKKwlJREVfRFJWX0VSUk9SX0ZJTEVNQVJLCT0gMTAyLAorCUlERV9EUlZfRVJST1JfRU9ECT0gMTAzLAorfTsKKwogLyoKICAqIERlZmluaXRpb25zIGZvciBhY2Nlc3NpbmcgSURFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCiAgKi8KQEAgLTE5MywyNiArMjAwLDggQEAKIAlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdGxfYWRkcjsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykKLSNpbmNsdWRlIDxhc20vaWRlLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+Ci0jZW5kaWYKLQogI2RlZmluZSBNQVhfSFdJRlMJMTAKIAotLyogQ3VycmVudGx5IG9ubHkgbTY4aywgYXB1cyBhbmQgbTh4eCBuZWVkIGl0ICovCi0jaWZuZGVmIElERV9BUkNIX0FDS19JTlRSCi0jIGRlZmluZSBpZGVfYWNrX2ludHIoaHdpZikgKDEpCi0jZW5kaWYKLQotLyogQ3VycmVudGx5IG9ubHkgQXRhcmkgbmVlZHMgaXQgKi8KLSNpZm5kZWYgSURFX0FSQ0hfTE9DSwotIyBkZWZpbmUgaWRlX3JlbGVhc2VfbG9jaygpCQkJZG8ge30gd2hpbGUgKDApCi0jIGRlZmluZSBpZGVfZ2V0X2xvY2soaGRsciwgZGF0YSkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmIC8qIElERV9BUkNIX0xPQ0sgKi8KLQogLyoKICAqIE5vdyBmb3IgdGhlIGRhdGEgd2UgbmVlZCB0byBtYWludGFpbiBwZXItZHJpdmU6ICBpZGVfZHJpdmVfdAogICovCkBAIC0yNTIsNTYgKzI0MSw1MiBAQAogCiBlbnVtIHsKIAlJREVfVEZMQUdfTEJBNDgJCQk9ICgxIDw8IDApLAotCUlERV9URkxBR19GTEFHR0VECQk9ICgxIDw8IDIpLAotCUlERV9URkxBR19PVVRfREFUQQkJPSAoMSA8PCAzKSwKLQlJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFCT0gKDEgPDwgNCksCi0JSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QJCT0gKDEgPDwgNSksCi0JSURFX1RGTEFHX09VVF9IT0JfTEJBTAkJPSAoMSA8PCA2KSwKLQlJREVfVEZMQUdfT1VUX0hPQl9MQkFNCQk9ICgxIDw8IDcpLAotCUlERV9URkxBR19PVVRfSE9CX0xCQUgJCT0gKDEgPDwgOCksCisJSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRQk9ICgxIDw8IDEpLAorCUlERV9URkxBR19PVVRfSE9CX05TRUNUCQk9ICgxIDw8IDIpLAorCUlERV9URkxBR19PVVRfSE9CX0xCQUwJCT0gKDEgPDwgMyksCisJSURFX1RGTEFHX09VVF9IT0JfTEJBTQkJPSAoMSA8PCA0KSwKKwlJREVfVEZMQUdfT1VUX0hPQl9MQkFICQk9ICgxIDw8IDUpLAogCUlERV9URkxBR19PVVRfSE9CCQk9IElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUgfAogCQkJCQkgIElERV9URkxBR19PVVRfSE9CX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFMIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFILAotCUlERV9URkxBR19PVVRfRkVBVFVSRQkJPSAoMSA8PCA5KSwKLQlJREVfVEZMQUdfT1VUX05TRUNUCQk9ICgxIDw8IDEwKSwKLQlJREVfVEZMQUdfT1VUX0xCQUwJCT0gKDEgPDwgMTEpLAotCUlERV9URkxBR19PVVRfTEJBTQkJPSAoMSA8PCAxMiksCi0JSURFX1RGTEFHX09VVF9MQkFICQk9ICgxIDw8IDEzKSwKKwlJREVfVEZMQUdfT1VUX0ZFQVRVUkUJCT0gKDEgPDwgNiksCisJSURFX1RGTEFHX09VVF9OU0VDVAkJPSAoMSA8PCA3KSwKKwlJREVfVEZMQUdfT1VUX0xCQUwJCT0gKDEgPDwgOCksCisJSURFX1RGTEFHX09VVF9MQkFNCQk9ICgxIDw8IDkpLAorCUlERV9URkxBR19PVVRfTEJBSAkJPSAoMSA8PCAxMCksCiAJSURFX1RGTEFHX09VVF9URgkJPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfAogCQkJCQkgIElERV9URkxBR19PVVRfTlNFQ1QgfAogCQkJCQkgIElERV9URkxBR19PVVRfTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0xCQUgsCi0JSURFX1RGTEFHX09VVF9ERVZJQ0UJCT0gKDEgPDwgMTQpLAotCUlERV9URkxBR19XUklURQkJCT0gKDEgPDwgMTUpLAotCUlERV9URkxBR19GTEFHR0VEX1NFVF9JTl9GTEFHUwk9ICgxIDw8IDE2KSwKLQlJREVfVEZMQUdfSU5fREFUQQkJPSAoMSA8PCAxNyksCi0JSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSCT0gKDEgPDwgMTgpLAotCUlERV9URkxBR19ETUFfUElPX0ZBTExCQUNLCT0gKDEgPDwgMTkpLAotCUlERV9URkxBR19JTl9IT0JfRkVBVFVSRQk9ICgxIDw8IDIwKSwKLQlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDIxKSwKLQlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMjIpLAotCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAyMyksCi0JSURFX1RGTEFHX0lOX0hPQl9MQkFICQk9ICgxIDw8IDI0KSwKKwlJREVfVEZMQUdfT1VUX0RFVklDRQkJPSAoMSA8PCAxMSksCisJSURFX1RGTEFHX1dSSVRFCQkJPSAoMSA8PCAxMiksCisJSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSCT0gKDEgPDwgMTMpLAorCUlERV9URkxBR19ETUFfUElPX0ZBTExCQUNLCT0gKDEgPDwgMTQpLAorCUlERV9URkxBR19JTl9IT0JfRkVBVFVSRQk9ICgxIDw8IDE1KSwKKwlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDE2KSwKKwlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMTcpLAorCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAxOCksCisJSURFX1RGTEFHX0lOX0hPQl9MQkFICQk9ICgxIDw8IDE5KSwKIAlJREVfVEZMQUdfSU5fSE9CX0xCQQkJPSBJREVfVEZMQUdfSU5fSE9CX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTEJBTSB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkFILAogCUlERV9URkxBR19JTl9IT0IJCT0gSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX0xCQSwKLQlJREVfVEZMQUdfSU5fRkVBVFVSRQkJPSAoMSA8PCAxKSwKLQlJREVfVEZMQUdfSU5fTlNFQ1QJCT0gKDEgPDwgMjUpLAotCUlERV9URkxBR19JTl9MQkFMCQk9ICgxIDw8IDI2KSwKLQlJREVfVEZMQUdfSU5fTEJBTQkJPSAoMSA8PCAyNyksCi0JSURFX1RGTEFHX0lOX0xCQUgJCT0gKDEgPDwgMjgpLAorCUlERV9URkxBR19JTl9GRUFUVVJFCQk9ICgxIDw8IDIwKSwKKwlJREVfVEZMQUdfSU5fTlNFQ1QJCT0gKDEgPDwgMjEpLAorCUlERV9URkxBR19JTl9MQkFMCQk9ICgxIDw8IDIyKSwKKwlJREVfVEZMQUdfSU5fTEJBTQkJPSAoMSA8PCAyMyksCisJSURFX1RGTEFHX0lOX0xCQUgJCT0gKDEgPDwgMjQpLAogCUlERV9URkxBR19JTl9MQkEJCT0gSURFX1RGTEFHX0lOX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fTEJBSCwKIAlJREVfVEZMQUdfSU5fVEYJCQk9IElERV9URkxBR19JTl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0xCQSwKLQlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI5KSwKKwlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI1KSwKIAlJREVfVEZMQUdfSE9CCQkJPSBJREVfVEZMQUdfT1VUX0hPQiB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQiwKIAlJREVfVEZMQUdfVEYJCQk9IElERV9URkxBR19PVVRfVEYgfApAQCAtMzA5LDkgKzI5NCwxOCBAQAogCUlERV9URkxBR19ERVZJQ0UJCT0gSURFX1RGTEFHX09VVF9ERVZJQ0UgfAogCQkJCQkgIElERV9URkxBR19JTl9ERVZJQ0UsCiAJLyogZm9yY2UgMTYtYml0IEkvTyBvcGVyYXRpb25zICovCi0JSURFX1RGTEFHX0lPXzE2QklUCQk9ICgxIDw8IDMwKSwKLQkvKiBpZGVfdGFza190IHdhcyBhbGxvY2F0ZWQgdXNpbmcga21hbGxvYygpICovCi0JSURFX1RGTEFHX0RZTgkJCT0gKDEgPDwgMzEpLAorCUlERV9URkxBR19JT18xNkJJVAkJPSAoMSA8PCAyNiksCisJLyogc3RydWN0IGlkZV9jbWQgd2FzIGFsbG9jYXRlZCB1c2luZyBrbWFsbG9jKCkgKi8KKwlJREVfVEZMQUdfRFlOCQkJPSAoMSA8PCAyNyksCisJSURFX1RGTEFHX0ZTCQkJPSAoMSA8PCAyOCksCisJSURFX1RGTEFHX01VTFRJX1BJTwkJPSAoMSA8PCAyOSksCit9OworCitlbnVtIHsKKwlJREVfRlRGTEFHX0ZMQUdHRUQJCT0gKDEgPDwgMCksCisJSURFX0ZURkxBR19TRVRfSU5fRkxBR1MJCT0gKDEgPDwgMSksCisJSURFX0ZURkxBR19PVVRfREFUQQkJPSAoMSA8PCAyKSwKKwlJREVfRlRGTEFHX0lOX0RBVEEJCT0gKDEgPDwgMyksCiB9OwogCiBzdHJ1Y3QgaWRlX3Rhc2tmaWxlIHsKQEAgLTM0MywxNiArMzM3LDI3IEBACiAJfTsKIH07CiAKLXR5cGVkZWYgc3RydWN0IGlkZV90YXNrX3Mgeworc3RydWN0IGlkZV9jbWQgewogCXVuaW9uIHsKIAkJc3RydWN0IGlkZV90YXNrZmlsZQl0ZjsKIAkJdTgJCQl0Zl9hcnJheVsxNF07CiAJfTsKKwl1OAkJCWZ0Zl9mbGFnczsJLyogZm9yIFRBU0tGSUxFIGlvY3RsICovCiAJdTMyCQkJdGZfZmxhZ3M7Ci0JaW50CQkJZGF0YV9waGFzZTsKKwlpbnQJCQlwcm90b2NvbDsKKworCWludAkJCXNnX25lbnRzOwkgIC8qIG51bWJlciBvZiBzZyBlbnRyaWVzICovCisJaW50CQkJb3JpZ19zZ19uZW50czsKKwlpbnQJCQlzZ19kbWFfZGlyZWN0aW9uOyAvKiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uICovCisKKwl1bnNpZ25lZCBpbnQJCW5ieXRlczsKKwl1bnNpZ25lZCBpbnQJCW5sZWZ0OworCXN0cnVjdCBzY2F0dGVybGlzdAkqY3Vyc2c7CisJdW5zaWduZWQgaW50CQljdXJzZ19vZnM7CisKIAlzdHJ1Y3QgcmVxdWVzdAkJKnJxOwkJLyogY29weSBvZiByZXF1ZXN0ICovCiAJdm9pZAkJCSpzcGVjaWFsOwkvKiB2YWxpZF90IGdlbmVyYWxseSAqLwotfSBpZGVfdGFza190OworfTsKIAogLyogQVRBUEkgcGFja2V0IGNvbW1hbmQgZmxhZ3MgKi8KIGVudW0gewpAQCAtMzY0LDggKzM2OSw2IEBACiAJUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJCT0gKDEgPDwgNCksCiAJUENfRkxBR19ETUFfRVJST1IJCT0gKDEgPDwgNSksCiAJUENfRkxBR19XUklUSU5HCQkJPSAoMSA8PCA2KSwKLQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLwotCVBDX0ZMQUdfVElNRURPVVQJCT0gKDEgPDwgNyksCiB9OwogCiAvKgpAQCAtNDM2LDcgKzQzOSw2IEBACiAJCQkJCWludCk7CiAJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCByZXF1ZXN0ICosCiAJCQkJICAgICAgc2VjdG9yX3QpOwotCWludAkJKCplbmRfcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCwgaW50KTsKIAlpbnQJCSgqaW9jdGwpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCiAJCQkJIGZtb2RlX3QsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiB9OwpAQCAtNTEyLDggKzUxNCw2IEBACiAJSURFX0RGTEFHX05JQ0UxCQkJPSAoMSA8PCA1KSwKIAkvKiBkZXZpY2UgaXMgcGh5c2ljYWxseSBwcmVzZW50ICovCiAJSURFX0RGTEFHX1BSRVNFTlQJCT0gKDEgPDwgNiksCi0JLyogZGV2aWNlIGVqZWN0ZWQgaGludCAqLwotCUlERV9ERkxBR19ERUFECQkJPSAoMSA8PCA3KSwKIAkvKiBpZCByZWFkIGZyb20gZGV2aWNlIChzeW50aGV0aWMgaWYgbm90IHNldCkgKi8KIAlJREVfREZMQUdfSURfUkVBRAkJPSAoMSA8PCA4KSwKIAlJREVfREZMQUdfTk9QUk9CRQkJPSAoMSA8PCA5KSwKQEAgLTYyNyw4ICs2MjcsMTEgQEAKIAkvKiBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAKKwkvKiBsYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKKwogCS8qIGNhbGxiYWNrIGZvciBwYWNrZXQgY29tbWFuZHMgKi8KLQl2b2lkICgqcGNfY2FsbGJhY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOworCWludCAgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CiAKIAl2b2lkICgqcGNfdXBkYXRlX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwogCWludCAgKCpwY19pb19idWZmZXJzKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLApAQCAtNjYxLDEzICs2NjQsMTMgQEAKIAogCXZvaWQJKCpzZXRfaXJxKShzdHJ1Y3QgaHdpZl9zICosIGludCk7CiAKLQl2b2lkCSgqdGZfbG9hZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7Ci0Jdm9pZAkoKnRmX3JlYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOworCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKKwl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLQl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAotCQkJICAgICAgdW5zaWduZWQgaW50KTsKLQl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQpOworCXZvaWQJKCppbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLAorCQkJICAgICAgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOworCXZvaWQJKCpvdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwKKwkJCSAgICAgICB2b2lkICosIHVuc2lnbmVkIGludCk7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHM7CkBAIC03MTEsMTIgKzcxNCwxMiBAQAogCiBzdHJ1Y3QgaWRlX2RtYV9vcHMgewogCXZvaWQJKCpkbWFfaG9zdF9zZXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOwotCWludAkoKmRtYV9zZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCXZvaWQJKCpkbWFfZXhlY19jbWQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCB1OCk7CisJaW50CSgqZG1hX3NldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAJdm9pZAkoKmRtYV9zdGFydCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCWludAkoKmRtYV9lbmQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAlpbnQJKCpkbWFfdGVzdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAl2b2lkCSgqZG1hX2xvc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJaW50CSgqZG1hX3RpbWVyX2V4cGlyeSkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCXZvaWQJKCpkbWFfdGltZW91dCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCS8qCiAJICogVGhlIGZvbGxvd2luZyBtZXRob2QgaXMgb3B0aW9uYWwgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUKQEAgLTc4MCwxOSArNzgzLDggQEAKIAkvKiBTY2F0dGVyLWdhdGhlciBsaXN0IHVzZWQgdG8gYnVpbGQgdGhlIGFib3ZlICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ190YWJsZTsKIAlpbnQgc2dfbWF4X25lbnRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLwotCWludCBzZ19uZW50czsJCQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCi0JaW50IG9yaWdfc2dfbmVudHM7Ci0JaW50IHNnX2RtYV9kaXJlY3Rpb247CQkvKiBkbWEgdHJhbnNmZXIgZGlyZWN0aW9uICovCiAKLQkvKiBkYXRhIHBoYXNlIG9mIHRoZSBhY3RpdmUgY29tbWFuZCAoY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFBJTy9ETUEpICovCi0JaW50CQlkYXRhX3BoYXNlOwotCi0Jc3RydWN0IGlkZV90YXNrX3MgdGFzazsJCS8qIGN1cnJlbnQgY29tbWFuZCAqLwotCi0JdW5zaWduZWQgaW50IG5zZWN0OwotCXVuc2lnbmVkIGludCBubGVmdDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnOwotCXVuc2lnbmVkIGludCBjdXJzZ19vZnM7CisJc3RydWN0IGlkZV9jbWQgY21kOwkJLyogY3VycmVudCBjb21tYW5kICovCiAKIAlpbnQJCXJxc2l6ZTsJCS8qIG1heCBzZWN0b3JzIHBlciByZXF1ZXN0ICovCiAJaW50CQlpcnE7CQkvKiBvdXIgaXJxIG51bWJlciAqLwpAQCAtODUwLDkgKzg0MiwxOCBAQAogCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IT1NUX1BPUlRTICsgMV07CiAJdW5zaWduZWQgaW50CW5fcG9ydHM7CiAJc3RydWN0IGRldmljZQkqZGV2WzJdOworCiAJaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisKKwl2b2lkCQkoKmdldF9sb2NrKShpcnFfaGFuZGxlcl90LCB2b2lkICopOworCXZvaWQJCSgqcmVsZWFzZV9sb2NrKSh2b2lkKTsKKwogCWlycV9oYW5kbGVyX3QJaXJxX2hhbmRsZXI7CisKIAl1bnNpZ25lZCBsb25nCWhvc3RfZmxhZ3M7CisKKwlpbnQJCWlycV9mbGFnczsKKwogCXZvaWQJCSpob3N0X3ByaXY7CiAJaWRlX2h3aWZfdAkqY3VyX3BvcnQ7CS8qIGZvciBob3N0cyByZXF1aXJpbmcgc2VyaWFsaXphdGlvbiAqLwogCkBAIC04NjksNyArODcwLDcgQEAKIHR5cGVkZWYgaW50IChpZGVfZXhwaXJ5X3QpKGlkZV9kcml2ZV90ICopOwogCiAvKiB1c2VkIGJ5IGlkZS1jZCwgaWRlLWZsb3BweSwgZXRjLiAqLwotdHlwZWRlZiB2b2lkICh4ZmVyX2Z1bmNfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICosIHVuc2lnbmVkKTsKK3R5cGVkZWYgdm9pZCAoeGZlcl9mdW5jX3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHZvaWQgKiwgdW5zaWduZWQpOwogCiBleHRlcm4gc3RydWN0IG11dGV4IGlkZV9zZXR0aW5nX210eDsKIApAQCAtMTA0NSwxMCArMTA0NiwxMSBAQAogfTsKIAogLyogRFJWX05BTUUgaGFzIHRvIGJlIGRlZmluZWQgaW4gdGhlIGRyaXZlciBiZWZvcmUgdXNpbmcgdGhlIG1hY3JvIGJlbG93ICovCi0jZGVmaW5lIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikJCQlcCi17CQkJCQkJCQlcCi0JaWYgKHVubGlrZWx5KGRyaXZlLT5kZWJ1Z19tYXNrICYgbHZsKSkJCQlcCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBmbXQsICMjIGFyZ3MpOwlcCisjZGVmaW5lIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikJCQkJXAorewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoZHJpdmUtPmRlYnVnX21hc2sgJiBsdmwpKQkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6ICIgZm10ICJcbiIsCQlcCisJCQkJCSAgX19mdW5jX18sICMjIGFyZ3MpOwkJXAogfQogCiAvKgpAQCAtMTA4Nyw3ICsxMDg5LDcgQEAKIAogdm9pZCBpZGVfY29tcGxldGVfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGlkZV9zdGFydHN0b3BfdCBpZGVfc3RhcnRfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLXZvaWQgaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIGlkZV9jb21wbGV0ZV9wbV9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHZvaWQgaWRlX2NoZWNrX3BtX3N0YXRlKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiAvKgpAQCAtMTA5OSw3ICsxMTAxLDYgQEAKIHN0cnVjdCBpZGVfZHJpdmVyIHsKIAljb25zdCBjaGFyCQkJKnZlcnNpb247CiAJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc2VjdG9yX3QpOwotCWludAkJKCplbmRfcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbl9kcml2ZXI7CiAJaW50CQkoKnByb2JlKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCQkoKnJlbW92ZSkoaWRlX2RyaXZlX3QgKik7CkBAIC0xMTMwLDE5ICsxMTMxLDE1IEBACiBleHRlcm4gaW50IGlkZV92bGJfY2xrOwogZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKIAotaW50IGlkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCwgaW50KTsKK3Vuc2lnbmVkIGludCBpZGVfcnFfYnl0ZXMoc3RydWN0IHJlcXVlc3QgKik7CitpbnQgaWRlX2VuZF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiB2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi12b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAotCQkgICAgICAgaWRlX2V4cGlyeV90ICopOwotdm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCSAgICAgaWRlX2V4cGlyeV90ICopOwordm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCk7CiAKLXZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgaWRlX2V4cGlyeV90ICopOwotCi12b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKik7Cit2b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgaWRlX2hhbmRsZXJfdCAqLAorCQkJIHVuc2lnbmVkIGludCk7CiAKIHZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CiAKQEAgLTExNjQsNyArMTE2MSw4IEBACiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Cit2b2lkIGlkZV9jb21wbGV0ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdTgsIHU4KTsKK2ludCBpZGVfY29tcGxldGVfcnEoaWRlX2RyaXZlX3QgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogCiB2b2lkIGlkZV90Zl9kdW1wKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlkZV90YXNrZmlsZSAqKTsKIApAQCAtMTE3NCwxMSArMTE3MiwxMSBAQAogCiB2b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKiwgaW50KTsKIAotdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwotdm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiAKIGludCBpZGVfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHVuc2lnbmVkIGludCwgaW50KTsKIApAQCAtMTIyNCwxNiArMTIyMiwxNiBAQAogCiBpbnQgaWRlX2NkX2dldF94ZmVybGVuKHN0cnVjdCByZXF1ZXN0ICopOwogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgZG9fcndfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgdGFza19lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCk7Cit2b2lkIGlkZV9maW5pc2hfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHU4KTsKIAotaW50IGlkZV9yYXdfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqLCB1OCAqLCB1MTYpOwotaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CitpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB1OCAqLCB1MTYpOworaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogCi1pbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGxvbmcpOwogCiBpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CiAKQEAgLTEzMzUsNiArMTMzMywxMCBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAorCS8qIGhvc3QgaXMgRFRDMjI3OCAqLworCUlERV9IRkxBR19EVEMyMjc4CQk9ICgxIDw8IDIxKSwKKwkvKiA0IGRldmljZXMgb24gYSBzaW5nbGUgc2V0IG9mIEkvTyBwb3J0cyAqLworCUlERV9IRkxBR180RFJJVkVTCQk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM2Miw3ICsxMzY0LDEyIEBACiAKIHN0cnVjdCBpZGVfcG9ydF9pbmZvIHsKIAljaGFyCQkJKm5hbWU7CisKIAlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisKKwl2b2lkCQkJKCpnZXRfbG9jaykoaXJxX2hhbmRsZXJfdCwgdm9pZCAqKTsKKwl2b2lkCQkJKCpyZWxlYXNlX2xvY2spKHZvaWQpOworCiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTEzNzksNiArMTM4Niw5IEBACiAJdTE2CQkJbWF4X3NlY3RvcnM7CS8qIGlmIDwgdGhhbiB0aGUgZGVmYXVsdCBvbmUgKi8KIAogCXUzMgkJCWhvc3RfZmxhZ3M7CisKKwlpbnQJCQlpcnFfZmxhZ3M7CisKIAl1OAkJCXBpb19tYXNrOwogCXU4CQkJc3dkbWFfbWFzazsKIAl1OAkJCW13ZG1hX21hc2s7CkBAIC0xMzk4LDggKzE0MDgsOCBAQAogI2RlZmluZSBpZGVfcGNpX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotdm9pZCBpZGVfbWFwX3NnKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotdm9pZCBpZGVfaW5pdF9zZ19jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7Cit2b2lkIGlkZV9pbml0X3NnX2NtZChzdHJ1Y3QgaWRlX2NtZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZGVmaW5lIEJBRF9ETUFfRFJJVkUJCTAKICNkZWZpbmUgR09PRF9ETUFfRFJJVkUJCTEKQEAgLTE0MzMsMTggKzE0NDMsMTggQEAKIGludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7CiAKLWludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiB2b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlKGlkZV9kcml2ZV90ICopOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRgogaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICopOwotZXh0ZXJuIGludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpbnQgaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogdm9pZCBpZGVfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICosIGludCk7Ci1leHRlcm4gaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKik7Ci12b2lkIGlkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKiwgdTgpOworaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiBleHRlcm4gdm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKik7CitpbnQgaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICopOwogdTggaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2ZmX2RtYV9vcHM7CiAjZWxzZQpAQCAtMTQ2NSw4ICsxNDc1LDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIGlkZV9zdG9wcGVkOyB9CiBzdGF0aWMgaW5saW5lIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpIHsgcmV0dXJuIGlkZV9zdG9wcGVkOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSBpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJICAgc3RydWN0IGlkZV9jbWQgKmNtZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IDRkNmEwYTIuLjFkNmM3MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTI5Miw2ICsyOTIsOCBAQAogCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLwogCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KIAlpbnQJCWFnYXc7IC8qIGFnYXcgb2YgdGhpcyBpb21tdSAqLworCXVuc2lnbmVkIGludCAJaXJxOworCXVuc2lnbmVkIGNoYXIgCW5hbWVbMTNdOyAgICAvKiBEZXZpY2UgTmFtZSAqLwogCiAjaWZkZWYgQ09ORklHX0RNQVIKIAl1bnNpZ25lZCBsb25nIAkqZG9tYWluX2lkczsgLyogYml0bWFwIG9mIGRvbWFpbnMgKi8KQEAgLTI5OSw4ICszMDEsNiBAQAogCXNwaW5sb2NrX3QJbG9jazsgLyogcHJvdGVjdCBjb250ZXh0LCBkb21haW4gaWRzICovCiAJc3RydWN0IHJvb3RfZW50cnkgKnJvb3RfZW50cnk7IC8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCi0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBjaGFyIG5hbWVbN107ICAgIC8qIERldmljZSBOYW1lICovCiAJc3RydWN0IGlvbW11X2ZsdXNoIGZsdXNoOwogI2VuZGlmCiAJc3RydWN0IHFfaW52YWwgICpxaTsgICAgICAgICAgICAvKiBRdWV1ZWQgaW52YWxpZGF0aW9uIGluZm8gKi8KQEAgLTMyMSw2ICszMjEsNyBAQAogZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpOwogZXh0ZXJuIHZvaWQgZnJlZV9pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIGV4dGVybiBpbnQgZG1hcl9lbmFibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gdm9pZCBkbWFyX2Rpc2FibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiBleHRlcm4gdm9pZCBxaV9nbG9iYWxfaWVjKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwogCiBleHRlcm4gaW50IHFpX2ZsdXNoX2NvbnRleHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGRpZCwgdTE2IHNpZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDg3M2U0YWMuLjljNjJmYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTcsOSArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXZ0di5oIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKaW5kZXggZjI3MjAyOC4uMDYyZDIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKQEAgLTYwLDEwICs2MCwxMCBAQAogCiAjZGVmaW5lIElWVFZfSU9DX0RNQV9GUkFNRSAgX0lPVyAoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2X2RtYV9mcmFtZSkKIAotLyogVGhlc2UgYXJlIHRoZSBWQkkgdHlwZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGVtYmVkZGVkIFZCSSBwcml2YXRlIHBhY2tldHMuICovCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfQ0FQVElPTl81MjUgICAgKDQpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfV1NTXzYyNSAgICAgICAgKDUpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgKDcpCisvKiBEZXByZWNhdGVkIGRlZmluZXM6IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBkZWZpbmVzIGZyb20gdmlkZW9kZXYyLmggKi8KKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9URUxFVEVYVF9CICAgICBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQgorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX0NBUFRJT05fNTI1ICAgIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNQorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1CisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUwogCiAjZW5kaWYgLyogX0xJTlVYX0lWVFZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDA2NWNkZjguLmIxZWEzN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2RlZmluZSBWTV9DQU5fTk9OTElORUFSIDB4MDgwMDAwMDAJLyogSGFzIC0+ZmF1bHQgJiBkb2VzIG5vbmxpbmVhciBwYWdlcyAqLwogI2RlZmluZSBWTV9NSVhFRE1BUAkweDEwMDAwMDAwCS8qIENhbiBjb250YWluICJzdHJ1Y3QgcGFnZSIgYW5kIHB1cmUgUEZOIHBhZ2VzICovCiAjZGVmaW5lIFZNX1NBTwkJMHgyMDAwMDAwMAkvKiBTdHJvbmcgQWNjZXNzIE9yZGVyaW5nIChwb3dlcnBjKSAqLworI2RlZmluZSBWTV9QRk5fQVRfTU1BUAkweDQwMDAwMDAwCS8qIFBGTk1BUCB2bWEgdGhhdCBpcyBmdWxseSBtYXBwZWQgYXQgbW1hcCB0aW1lICovCiAKICNpZm5kZWYgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUwkJLyogYXJjaCBjYW4gb3ZlcnJpZGUgdGhpcyAqLwogI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIFZNX0RBVEFfREVGQVVMVF9GTEFHUwpAQCAtMTQ1LDcgKzE0Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xpbmVhcl9wZm5fbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlyZXR1cm4gKCh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSAmJiB2bWEtPnZtX3Bnb2ZmKTsKKwlyZXR1cm4gKHZtYS0+dm1fZmxhZ3MgJiBWTV9QRk5fQVRfTU1BUCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3Bmbl9tYXBwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAwNWRmYTdjLi5lNTgxNmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMTIzNyw2ICsxMjM3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxICAgICAgICAgICAgICAweDA0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyICAgICAgICAgICAgICAweDA0NTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzICAgICAgICAgICAgICAweDA0NTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY3X1NNQlVTICAgICAweDA1NDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI0ICAgICAgICAgICAgICAweDA1NEMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI1ICAgICAgICAgICAgICAweDA1NEQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI2ICAgICAgICAgICAgICAweDA1NEUKQEAgLTEyNDcsMTEgKzEyNDgsMTQgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMxICAgICAgICAgICAgICAweDA3REYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY3X0lERSAgICAgICAweDA1NjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDczX0lERSAgICAgICAweDA1NkMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDc4U19TTUJVUyAgICAweDA3NTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDc3X0lERSAgICAgICAweDA3NTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMyICAgICAgICAgICAgICAweDA3NjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzICAgICAgICAgICAgICAweDA3NjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM0ICAgICAgICAgICAgICAweDA3NjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM1ICAgICAgICAgICAgICAweDA3NjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDczX1NNQlVTICAgICAweDA3RDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDc5X1NNQlVTICAgICAweDBBQTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2ICAgICAgICAgICAgICAweDBBQjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM3ICAgICAgICAgICAgICAweDBBQjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM4ICAgICAgICAgICAgICAweDBBQjIKQEAgLTE0NzUsNiArMTQ3OSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFIDB4MDIxNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyIDB4MDIxNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZMUEMgMHgwMjI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMTAwTEQgMHgwNDA4CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQkUJCTB4MTE3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDEwMAkweDAzMDEKQEAgLTIyMjcsNiArMjIzMiwxNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RESV9FSENJICAgICAgICAgIDB4MDEwMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRlJFRVNDQUxFCQkweDE5NTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE1RQkJMHgwMGI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODMxNQkJMHgwMGI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODMxNEUJCTB4MDBiNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMTQJCTB4MDBiNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzhFCQkweDAwYzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4Mzc4CQkweDAwYzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4Mzc3RQkJMHgwMGM2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODM3NwkJMHgwMGM3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0OEUJCTB4MDAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzg1NDgJCTB4MDAxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzg1NDNFCQkweDAwMTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCmluZGV4IGZlMDBmNzguLjUyMjQwZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaApAQCAtNDksMTMgKzQ5LDEyIEBACiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAogc3RydWN0IHBvc2l4X2FjbCAqcmVpc2VyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7CiBpbnQgcmVpc2VyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKK2ludCByZWlzZXJmc19pbmhlcml0X2RlZmF1bHRfYWNsKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpcik7Ci1leHRlcm4gaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0KHZvaWQpIF9faW5pdDsKLWV4dGVybiBpbnQgcmVpc2VyZnNfeGF0dHJfcG9zaXhfYWNsX2V4aXQodm9pZCk7Ci1leHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlcjsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTc1LDE2ICs3NCw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGUzNTZjOTkuLjIyNDVjNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTU4LDggKzU4LDYgQEAKICNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCiAjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKIAotLyogeGF0dHIgc3R1ZmYgKi8KLSNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzKSAoUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pCiBzdHJ1Y3QgZmlkOwogCiAvKiBpbiByZWFkaW5nIHRoZSAjZGVmaW5lcywgaXQgbWF5IGhlbHAgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZXkgZW1wbG95CkBAIC0xMDQsMTUgKzEwMiwyMSBAQAogKi8KICNkZWZpbmUgUkVJU0VSRlNfREVCVUdfQ09ERSA1CS8qIGV4dHJhIG1lc3NhZ2VzIHRvIGhlbHAgZmluZC9kZWJ1ZyBlcnJvcnMgKi8KIAotdm9pZCByZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBfX3JlaXNlcmZzX3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICppZCwKKwkJCSBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZGVmaW5lIHJlaXNlcmZzX3dhcm5pbmcocywgaWQsIGZtdCwgYXJncy4uLikgXAorCSBfX3JlaXNlcmZzX3dhcm5pbmcocywgaWQsIF9fZnVuY19fLCBmbXQsICMjYXJncykKIC8qIGFzc2VydGlvbnMgaGFuZGxpbmcgKi8KIAogLyoqIGFsd2F5cyBjaGVjayBhIGNvbmRpdGlvbiBhbmQgcGFuaWMgaWYgaXQncyBmYWxzZS4gKi8KLSNkZWZpbmUgX19SQVNTRVJUKCBjb25kLCBzY29uZCwgZm9ybWF0LCBhcmdzLi4uICkJCQkJCVwKLWlmKCAhKCBjb25kICkgKSAJCQkJCQkJCVwKLSAgcmVpc2VyZnNfcGFuaWMoIE5VTEwsICJyZWlzZXJmc1slaV06IGFzc2VydGlvbiAiIHNjb25kICIgZmFpbGVkIGF0ICIJXAotCQkgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCi0JCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBfX0xJTkVfXyAsIF9fZnVuY19fICwgIyNhcmdzICkKKyNkZWZpbmUgX19SQVNTRVJUKGNvbmQsIHNjb25kLCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoIShjb25kKSkJCQkJCQkJXAorCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiYXNzZXJ0aW9uIGZhaWx1cmUiLCAiKCIgI2NvbmQgIikgYXQgIiBcCisJCQkgICAgICAgX19GSUxFX18gIjolaTolczogIiBmb3JtYXQgIlxuIiwJCVwKKwkJCSAgICAgICBpbl9pbnRlcnJ1cHQoKSA/IC0xIDogdGFza19waWRfbnIoY3VycmVudCksIFwKKwkJCSAgICAgICBfX0xJTkVfXywgX19mdW5jX18gLCAjI2FyZ3MpOwkJXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSQVNTRVJUKGNvbmQsIGZvcm1hdCwgYXJncy4uLikgX19SQVNTRVJUKGNvbmQsICNjb25kLCBmb3JtYXQsICMjYXJncykKIApAQCAtMTk2LDcgKzIwMCwxMSBAQAogCV9fbGUzMiBzX2ZsYWdzOwkJLyogUmlnaHQgbm93IHVzZWQgb25seSBieSBpbm9kZS1hdHRyaWJ1dGVzLCBpZiBlbmFibGVkICovCiAJdW5zaWduZWQgY2hhciBzX3V1aWRbMTZdOwkvKiBmaWxlc3lzdGVtIHVuaXF1ZSBpZGVudGlmaWVyICovCiAJdW5zaWduZWQgY2hhciBzX2xhYmVsWzE2XTsJLyogZmlsZXN5c3RlbSB2b2x1bWUgbGFiZWwgKi8KLQljaGFyIHNfdW51c2VkWzg4XTsJLyogemVybyBmaWxsZWQgYnkgbWtyZWlzZXJmcyBhbmQKKwlfX2xlMTYgc19tbnRfY291bnQ7CQkvKiBDb3VudCBvZiBtb3VudHMgc2luY2UgbGFzdCBmc2NrICovCisJX19sZTE2IHNfbWF4X21udF9jb3VudDsJCS8qIE1heGltdW0gbW91bnRzIGJlZm9yZSBjaGVjayAqLworCV9fbGUzMiBzX2xhc3RjaGVjazsJCS8qIFRpbWVzdGFtcCBvZiBsYXN0IGZzY2sgKi8KKwlfX2xlMzIgc19jaGVja19pbnRlcnZhbDsJLyogSW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgKi8KKwljaGFyIHNfdW51c2VkWzc2XTsJLyogemVybyBmaWxsZWQgYnkgbWtyZWlzZXJmcyBhbmQKIAkJCQkgKiByZWlzZXJmc19jb252ZXJ0X29iamVjdGlkX21hcF92MSgpCiAJCQkJICogc28gYW55IGFkZGl0aW9ucyBtdXN0IGJlIHVwZGF0ZWQKIAkJCQkgKiB0aGVyZSBhcyB3ZWxsLiAqLwpAQCAtNTc4LDEwICs1ODYsOCBAQAogCQlyZXR1cm4gVFlQRV9ESVJFQ1Q7CiAJY2FzZSBWMV9ESVJFTlRSWV9VTklRVUVORVNTOgogCQlyZXR1cm4gVFlQRV9ESVJFTlRSWTsKLQlkZWZhdWx0OgotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJ2cy01MDA6IHVua25vd24gdW5pcXVlbmVzcyAlZCIsCi0JCQkJIHVuaXF1ZW5lc3MpOwogCWNhc2UgVjFfQU5ZX1VOSVFVRU5FU1M6CisJZGVmYXVsdDoKIAkJcmV0dXJuIFRZUEVfQU5ZOwogCX0KIH0KQEAgLTU5OCw5ICs2MDQsOCBAQAogCQlyZXR1cm4gVjFfRElSRUNUX1VOSVFVRU5FU1M7CiAJY2FzZSBUWVBFX0RJUkVOVFJZOgogCQlyZXR1cm4gVjFfRElSRU5UUllfVU5JUVVFTkVTUzsKLQlkZWZhdWx0OgotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJ2cy01MDE6IHVua25vd24gdHlwZSAlZCIsIHR5cGUpOwogCWNhc2UgVFlQRV9BTlk6CisJZGVmYXVsdDoKIAkJcmV0dXJuIFYxX0FOWV9VTklRVUVORVNTOwogCX0KIH0KQEAgLTcxMiw5ICs3MTcsOSBAQAogI2RlZmluZSBpc19pbmRpcmVjdF9jcHVfaWgoaWgpIChpc19pbmRpcmVjdF9jcHVfa2V5ICgmKChpaCktPmloX2tleSkpKQogI2RlZmluZSBpc19zdGF0ZGF0YV9jcHVfaWgoaWgpIChpc19zdGF0ZGF0YV9jcHVfa2V5ICgmKChpaCktPmloX2tleSkpKQogCi0jZGVmaW5lIElfS19LRVlfSU5fSVRFTShwX3NfaWgsIHBfc19rZXksIG5fYmxvY2tzaXplKSBcCi0gICAgKCAhIENPTVBfU0hPUlRfS0VZUyhwX3NfaWgsIHBfc19rZXkpICYmIFwKLSAgICAgICAgICBJX09GRl9CWVRFX0lOX0lURU0ocF9zX2loLCBrX29mZnNldCAocF9zX2tleSksIG5fYmxvY2tzaXplKSApCisjZGVmaW5lIElfS19LRVlfSU5fSVRFTShpaCwga2V5LCBuX2Jsb2Nrc2l6ZSkgXAorICAgICghQ09NUF9TSE9SVF9LRVlTKGloLCBrZXkpICYmIFwKKwkgIElfT0ZGX0JZVEVfSU5fSVRFTShpaCwga19vZmZzZXQoa2V5KSwgbl9ibG9ja3NpemUpKQogCiAvKiBtYXhpbWFsIGxlbmd0aCBvZiBpdGVtICovCiAjZGVmaW5lIE1BWF9JVEVNX0xFTihibG9ja19zaXplKSAoYmxvY2tfc2l6ZSAtIEJMS0hfU0laRSAtIElIX1NJWkUpCkBAIC03NzAsMjUgKzc3NSwyNSBAQAogI2RlZmluZSBESVNLX0xFQUZfTk9ERV9MRVZFTCAgMQkvKiBMZWFmIG5vZGUgbGV2ZWwuICovCiAKIC8qIEdpdmVuIHRoZSBidWZmZXIgaGVhZCBvZiBhIGZvcm1hdHRlZCBub2RlLCByZXNvbHZlIHRvIHRoZSBibG9jayBoZWFkIG9mIHRoYXQgbm9kZS4gKi8KLSNkZWZpbmUgQl9CTEtfSEVBRChwX3NfYmgpICAgICAgICAgICAgKChzdHJ1Y3QgYmxvY2tfaGVhZCAqKSgocF9zX2JoKS0+Yl9kYXRhKSkKKyNkZWZpbmUgQl9CTEtfSEVBRChiaCkJCQkoKHN0cnVjdCBibG9ja19oZWFkICopKChiaCktPmJfZGF0YSkpCiAvKiBOdW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgaW4gYnVmZmVyLiAqLwotI2RlZmluZSBCX05SX0lURU1TKHBfc19iaCkgICAgICAgICAgICAoYmxraF9ucl9pdGVtKEJfQkxLX0hFQUQocF9zX2JoKSkpCi0jZGVmaW5lIEJfTEVWRUwocF9zX2JoKSAgICAgICAgICAgICAgIChibGtoX2xldmVsKEJfQkxLX0hFQUQocF9zX2JoKSkpCi0jZGVmaW5lIEJfRlJFRV9TUEFDRShwX3NfYmgpICAgICAgICAgIChibGtoX2ZyZWVfc3BhY2UoQl9CTEtfSEVBRChwX3NfYmgpKSkKKyNkZWZpbmUgQl9OUl9JVEVNUyhiaCkJCQkoYmxraF9ucl9pdGVtKEJfQkxLX0hFQUQoYmgpKSkKKyNkZWZpbmUgQl9MRVZFTChiaCkJCQkoYmxraF9sZXZlbChCX0JMS19IRUFEKGJoKSkpCisjZGVmaW5lIEJfRlJFRV9TUEFDRShiaCkJCShibGtoX2ZyZWVfc3BhY2UoQl9CTEtfSEVBRChiaCkpKQogCi0jZGVmaW5lIFBVVF9CX05SX0lURU1TKHBfc19iaCx2YWwpICAgIGRvIHsgc2V0X2Jsa2hfbnJfaXRlbShCX0JMS19IRUFEKHBfc19iaCksdmFsKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUFVUX0JfTEVWRUwocF9zX2JoLHZhbCkgICAgICAgZG8geyBzZXRfYmxraF9sZXZlbChCX0JMS19IRUFEKHBfc19iaCksdmFsKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUFVUX0JfRlJFRV9TUEFDRShwX3NfYmgsdmFsKSAgZG8geyBzZXRfYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQocF9zX2JoKSx2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQVVRfQl9OUl9JVEVNUyhiaCwgdmFsKQkJZG8geyBzZXRfYmxraF9ucl9pdGVtKEJfQkxLX0hFQUQoYmgpLCB2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQVVRfQl9MRVZFTChiaCwgdmFsKQkJZG8geyBzZXRfYmxraF9sZXZlbChCX0JMS19IRUFEKGJoKSwgdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfRlJFRV9TUEFDRShiaCwgdmFsKQlkbyB7IHNldF9ibGtoX2ZyZWVfc3BhY2UoQl9CTEtfSEVBRChiaCksIHZhbCk7IH0gd2hpbGUgKDApCiAKIC8qIEdldCByaWdodCBkZWxpbWl0aW5nIGtleS4gLS0gbGl0dGxlIGVuZGlhbiAqLwotI2RlZmluZSBCX1BSSUdIVF9ERUxJTV9LRVkocF9zX2JoKSAgICgmKGJsa19yaWdodF9kZWxpbV9rZXkoQl9CTEtfSEVBRChwX3NfYmgpKSkpCisjZGVmaW5lIEJfUFJJR0hUX0RFTElNX0tFWShiaCkJCSgmKGJsa19yaWdodF9kZWxpbV9rZXkoQl9CTEtfSEVBRChiaCkpKSkKIAogLyogRG9lcyB0aGUgYnVmZmVyIGNvbnRhaW4gYSBkaXNrIGxlYWYuICovCi0jZGVmaW5lIEJfSVNfSVRFTVNfTEVWRUwocF9zX2JoKSAgICAgKEJfTEVWRUwocF9zX2JoKSA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCkKKyNkZWZpbmUgQl9JU19JVEVNU19MRVZFTChiaCkJCShCX0xFVkVMKGJoKSA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCkKIAogLyogRG9lcyB0aGUgYnVmZmVyIGNvbnRhaW4gYSBkaXNrIGludGVybmFsIG5vZGUgKi8KLSNkZWZpbmUgQl9JU19LRVlTX0xFVkVMKHBfc19iaCkgICAgICAoQl9MRVZFTChwX3NfYmgpID4gRElTS19MRUFGX05PREVfTEVWRUwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBCX0xFVkVMKHBfc19iaCkgPD0gTUFYX0hFSUdIVCkKKyNkZWZpbmUgQl9JU19LRVlTX0xFVkVMKGJoKSAgICAgIChCX0xFVkVMKGJoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMIFwKKwkJCQkJICAgICYmIEJfTEVWRUwoYmgpIDw9IE1BWF9IRUlHSFQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVCBEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTEzOCwxMiArMTE0MywxMyBAQAogI2RlZmluZSBwdXRfZGNfc2l6ZShkY19wLCB2YWwpICAgZG8geyAoZGNfcCktPmRjX3NpemUgPSBjcHVfdG9fbGUxNih2YWwpOyB9IHdoaWxlKDApCiAKIC8qIEdldCBkaXNrIGNoaWxkIGJ5IGJ1ZmZlciBoZWFkZXIgYW5kIHBvc2l0aW9uIGluIHRoZSB0cmVlIG5vZGUuICovCi0jZGVmaW5lIEJfTl9DSElMRChwX3NfYmgsbl9wb3MpICAoKHN0cnVjdCBkaXNrX2NoaWxkICopXAotKChwX3NfYmgpLT5iX2RhdGErQkxLSF9TSVpFK0JfTlJfSVRFTVMocF9zX2JoKSpLRVlfU0laRStEQ19TSVpFKihuX3BvcykpKQorI2RlZmluZSBCX05fQ0hJTEQoYmgsIG5fcG9zKSAgKChzdHJ1Y3QgZGlza19jaGlsZCAqKVwKKygoYmgpLT5iX2RhdGEgKyBCTEtIX1NJWkUgKyBCX05SX0lURU1TKGJoKSAqIEtFWV9TSVpFICsgRENfU0laRSAqIChuX3BvcykpKQogCiAvKiBHZXQgZGlzayBjaGlsZCBudW1iZXIgYnkgYnVmZmVyIGhlYWRlciBhbmQgcG9zaXRpb24gaW4gdGhlIHRyZWUgbm9kZS4gKi8KLSNkZWZpbmUgQl9OX0NISUxEX05VTShwX3NfYmgsbl9wb3MpIChkY19ibG9ja19udW1iZXIoQl9OX0NISUxEKHBfc19iaCxuX3BvcykpKQotI2RlZmluZSBQVVRfQl9OX0NISUxEX05VTShwX3NfYmgsbl9wb3MsIHZhbCkgKHB1dF9kY19ibG9ja19udW1iZXIoQl9OX0NISUxEKHBfc19iaCxuX3BvcyksIHZhbCApKQorI2RlZmluZSBCX05fQ0hJTERfTlVNKGJoLCBuX3BvcykgKGRjX2Jsb2NrX251bWJlcihCX05fQ0hJTEQoYmgsIG5fcG9zKSkpCisjZGVmaW5lIFBVVF9CX05fQ0hJTERfTlVNKGJoLCBuX3BvcywgdmFsKSBcCisJCQkJKHB1dF9kY19ibG9ja19udW1iZXIoQl9OX0NISUxEKGJoLCBuX3BvcyksIHZhbCkpCiAKICAvKiBtYXhpbWFsIHZhbHVlIG9mIGZpZWxkIGNoaWxkX3NpemUgaW4gc3RydWN0dXJlIGRpc2tfY2hpbGQgKi8KICAvKiBjaGlsZCBzaXplIGlzIHRoZSBjb21iaW5lZCBzaXplIG9mIGFsbCBpdGVtcyBhbmQgdGhlaXIgaGVhZGVycyAqLwpAQCAtMTIxNCwzMyArMTIyMCwzMyBAQAogc3RydWN0IHRyZWVwYXRoIHZhciA9IHsucGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsIC5yZWFkYSA9IDAsfQogCiAvKiBHZXQgcGF0aCBlbGVtZW50IGJ5IHBhdGggYW5kIHBhdGggcG9zaXRpb24uICovCi0jZGVmaW5lIFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KSAgKChwX3NfcGF0aCktPnBhdGhfZWxlbWVudHMgKyhuX29mZnNldCkpCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBhdGgsIG5fb2Zmc2V0KSAgKChwYXRoKS0+cGF0aF9lbGVtZW50cyArIChuX29mZnNldCkpCiAKIC8qIEdldCBidWZmZXIgaGVhZGVyIGF0IHRoZSBwYXRoIGJ5IHBhdGggYW5kIHBhdGggcG9zaXRpb24uICovCi0jZGVmaW5lIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsbl9vZmZzZXQpICAgKFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KS0+cGVfYnVmZmVyKQorI2RlZmluZSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIG5fb2Zmc2V0KSAgIChQQVRIX09GRlNFVF9QRUxFTUVOVChwYXRoLCBuX29mZnNldCktPnBlX2J1ZmZlcikKIAogLyogR2V0IHBvc2l0aW9uIGluIHRoZSBlbGVtZW50IGF0IHRoZSBwYXRoIGJ5IHBhdGggYW5kIHBhdGggcG9zaXRpb24uICovCi0jZGVmaW5lIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLG5fb2Zmc2V0KSAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocF9zX3BhdGgsbl9vZmZzZXQpLT5wZV9wb3NpdGlvbikKKyNkZWZpbmUgUEFUSF9PRkZTRVRfUE9TSVRJT04ocGF0aCwgbl9vZmZzZXQpIChQQVRIX09GRlNFVF9QRUxFTUVOVChwYXRoLCBuX29mZnNldCktPnBlX3Bvc2l0aW9uKQogCi0jZGVmaW5lIFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSAoUEFUSF9PRkZTRVRfUEJVRkZFUigocF9zX3BhdGgpLCAocF9zX3BhdGgpLT5wYXRoX2xlbmd0aCkpCisjZGVmaW5lIFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpIChQQVRIX09GRlNFVF9QQlVGRkVSKChwYXRoKSwgKHBhdGgpLT5wYXRoX2xlbmd0aCkpCiAJCQkJLyogeW91IGtub3csIHRvIHRoZSBwZXJzb24gd2hvIGRpZG4ndAogCQkJCSAgIHdyaXRlIHRoaXMgdGhlIG1hY3JvIG5hbWUgZG9lcyBub3QKIAkJCQkgICBhdCBmaXJzdCBzdWdnZXN0IHdoYXQgaXQgZG9lcy4KIAkJCQkgICBNYXliZSBQT1NJVElPTl9GUk9NX1BBVEhfRU5EPyBPcgogCQkJCSAgIG1heWJlIHdlIHNob3VsZCBqdXN0IGZvY3VzIG9uCiAJCQkJICAgZHVtcGluZyBwYXRocy4uLiAtSGFucyAqLwotI2RlZmluZSBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpIChQQVRIX09GRlNFVF9QT1NJVElPTigocF9zX3BhdGgpLCAocF9zX3BhdGgpLT5wYXRoX2xlbmd0aCkpCisjZGVmaW5lIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSAoUEFUSF9PRkZTRVRfUE9TSVRJT04oKHBhdGgpLCAocGF0aCktPnBhdGhfbGVuZ3RoKSkKIAotI2RlZmluZSBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSxQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpKQorI2RlZmluZSBQQVRIX1BJVEVNX0hFQUQocGF0aCkgICAgQl9OX1BJVEVNX0hFQUQoUEFUSF9QTEFTVF9CVUZGRVIocGF0aCksIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSkKIAogLyogaW4gZG9fYmFsYW5jZSBsZWFmIGhhcyBoID09IDAgaW4gY29udHJhc3Qgd2l0aCBwYXRoIHN0cnVjdHVyZSwKICAgIHdoZXJlIHJvb3QgaGFzIGxldmVsID09IDAuIFRoYXQgaXMgd2h5IHdlIG5lZWQgdGhlc2UgZGVmaW5lcyAqLwotI2RlZmluZSBQQVRIX0hfUEJVRkZFUihwX3NfcGF0aCwgaCkgUEFUSF9PRkZTRVRfUEJVRkZFUiAocF9zX3BhdGgsIHBfc19wYXRoLT5wYXRoX2xlbmd0aCAtIChoKSkJLyogdGItPlNbaF0gKi8KKyNkZWZpbmUgUEFUSF9IX1BCVUZGRVIocGF0aCwgaCkgUEFUSF9PRkZTRVRfUEJVRkZFUiAocGF0aCwgcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCS8qIHRiLT5TW2hdICovCiAjZGVmaW5lIFBBVEhfSF9QUEFSRU5UKHBhdGgsIGgpIFBBVEhfSF9QQlVGRkVSIChwYXRoLCAoaCkgKyAxKQkvKiB0Yi0+RltoXSBvciB0Yi0+U1swXS0+Yl9wYXJlbnQgKi8KICNkZWZpbmUgUEFUSF9IX1BPU0lUSU9OKHBhdGgsIGgpIFBBVEhfT0ZGU0VUX1BPU0lUSU9OIChwYXRoLCBwYXRoLT5wYXRoX2xlbmd0aCAtIChoKSkKICNkZWZpbmUgUEFUSF9IX0JfSVRFTV9PUkRFUihwYXRoLCBoKSBQQVRIX0hfUE9TSVRJT04ocGF0aCwgaCArIDEpCS8qIHRiLT5TW2hdLT5iX2l0ZW1fb3JkZXIgKi8KIAotI2RlZmluZSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3BhdGgsIG5faCkgKChwX3NfcGF0aCktPnBhdGhfbGVuZ3RoIC0gKG5faCkpCisjZGVmaW5lIFBBVEhfSF9QQVRIX09GRlNFVChwYXRoLCBuX2gpICgocGF0aCktPnBhdGhfbGVuZ3RoIC0gKG5faCkpCiAKICNkZWZpbmUgZ2V0X2xhc3RfYmgocGF0aCkgUEFUSF9QTEFTVF9CVUZGRVIocGF0aCkKICNkZWZpbmUgZ2V0X2loKHBhdGgpIFBBVEhfUElURU1fSEVBRChwYXRoKQpAQCAtMTQ3MCw2ICsxNDc2LDE2IEBACiAJaW50IGJpX3Bvc2l0aW9uOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiX2Zyb21fdGIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCit7CisJcmV0dXJuIHRiID8gdGItPnRiX3NiIDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiX2Zyb21fYmkoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSkKK3sKKwlyZXR1cm4gYmkgPyBzYl9mcm9tX3RiKGJpLT50YikgOiBOVUxMOworfQorCiAvKiB0aGVyZSBhcmUgNCB0eXBlcyBvZiBpdGVtczogc3RhdCBkYXRhLCBkaXJlY3RvcnkgaXRlbSwgaW5kaXJlY3QsIGRpcmVjdC4KICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiB8CSAgICAgICAgICAgIHwgIGtfb2Zmc2V0ICB8IGtfdW5pcXVlbmVzcyB8IG1lcmdlYWJsZT8gfApAQCAtMTUyMCw3ICsxNTM2LDcgQEAKICNkZWZpbmUgQ09NUF9TSE9SVF9LRVlTIGNvbXBfc2hvcnRfa2V5cwogCiAvKiBudW1iZXIgb2YgYmxvY2tzIHBvaW50ZWQgdG8gYnkgdGhlIGluZGlyZWN0IGl0ZW0gKi8KLSNkZWZpbmUgSV9VTkZNX05VTShwX3NfaWgpCSggaWhfaXRlbV9sZW4ocF9zX2loKSAvIFVORk1fUF9TSVpFICkKKyNkZWZpbmUgSV9VTkZNX05VTShpaCkJKGloX2l0ZW1fbGVuKGloKSAvIFVORk1fUF9TSVpFKQogCiAvKiB0aGUgdXNlZCBzcGFjZSB3aXRoaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgY29ycmVzcG9uZGluZyB0byBwb3Mgd2l0aGluIHRoZSBpdGVtIHBvaW50ZWQgdG8gYnkgaWggKi8KICNkZWZpbmUgSV9QT1NfVU5GTV9TSVpFKGloLHBvcyxzaXplKSAoKChwb3MpID09IElfVU5GTV9OVU0oaWgpIC0gMSApID8gKHNpemUpIC0gaWhfZnJlZV9zcGFjZShpaCkgOiAoc2l6ZSkpCkBAIC0xNjIzLDYgKzE2MzksMTAgQEAKICNkZWZpbmUgSk9VUk5BTF9NQVhfQ09NTUlUX0FHRSAzMAogI2RlZmluZSBKT1VSTkFMX01BWF9UUkFOU19BR0UgMzAKICNkZWZpbmUgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKDMgKiAoTUFYX0hFSUdIVC0yKSArIDkpCisjZGVmaW5lIEpPVVJOQUxfQkxPQ0tTX1BFUl9PQkpFQ1Qoc2IpICAoSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAzICsgXAorCQkJCQkgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhzYikgKyBcCisJCQkJCSAgICAgIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhzYikpKQorCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAvKiBXZSBuZWVkIHRvIHVwZGF0ZSBkYXRhIGFuZCBpbm9kZSAoYXRpbWUpICovCiAjZGVmaW5lIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDE8PFJFSVNFUkZTX1FVT1RBKSA/IDIgOiAwKQpAQCAtMTY5Nyw3ICsxNzE3LDcgQEAKIAlpbnQgdF9yZWZjb3VudDsKIAlpbnQgdF9ibG9ja3NfbG9nZ2VkOwkvKiBudW1iZXIgb2YgYmxvY2tzIHRoaXMgd3JpdGVyIGhhcyBsb2dnZWQgKi8KIAlpbnQgdF9ibG9ja3NfYWxsb2NhdGVkOwkvKiBudW1iZXIgb2YgYmxvY2tzIHRoaXMgd3JpdGVyIGFsbG9jYXRlZCAqLwotCXVuc2lnbmVkIGxvbmcgdF90cmFuc19pZDsJLyogc2FuaXR5IGNoZWNrLCBlcXVhbHMgdGhlIGN1cnJlbnQgdHJhbnMgaWQgKi8KKwl1bnNpZ25lZCBpbnQgdF90cmFuc19pZDsJLyogc2FuaXR5IGNoZWNrLCBlcXVhbHMgdGhlIGN1cnJlbnQgdHJhbnMgaWQgKi8KIAl2b2lkICp0X2hhbmRsZV9zYXZlOwkvKiBzYXZlIGV4aXN0aW5nIGN1cnJlbnQtPmpvdXJuYWxfaW5mbyAqLwogCXVuc2lnbmVkIGRpc3BsYWNlX25ld19ibG9ja3M6MTsJLyogaWYgbmV3IGJsb2NrIGFsbG9jYXRpb24gb2NjdXJyZXMsIHRoYXQgYmxvY2sKIAkJCQkJICAgc2hvdWxkIGJlIGRpc3BsYWNlZCBmcm9tIG90aGVycyAqLwpAQCAtMTc3MywxMyArMTc5MywxMyBAQAogaW50IGpvdXJuYWxfbWFya19mcmVlZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCiAJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgYl9ibG9ja25yX3QgYmxvY2tucik7CiBpbnQgam91cm5hbF90cmFuc2FjdGlvbl9zaG91bGRfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgaW50KTsKLWludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBpbnQgYm1hcF9uciwKLQkJCWludCBiaXRfbnIsIGludCBzZWFyY2hhbGwsIGJfYmxvY2tucl90ICpuZXh0KTsKK2ludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBibWFwX25yLAorCQkJIGludCBiaXRfbnIsIGludCBzZWFyY2hhbGwsIGJfYmxvY2tucl90ICpuZXh0KTsKIGludCBqb3VybmFsX2JlZ2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwKLQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyk7CisJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyk7CiBpbnQgam91cm5hbF9qb2luX2Fib3J0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgcmVpc2VyZnNfam91cm5hbF9hYm9ydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8pOworCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIHJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKTsKIHZvaWQgcmVpc2VyZnNfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiBpbnQgcmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywKIAkJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKiwgdW5zaWduZWQgaW50KTsKQEAgLTE3OTYsOCArMTgxNiw4IEBACiAKIC8qIHN0cmVlLmMgKi8KIGludCBCX0lTX0lOX1RSRUUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwotZXh0ZXJuIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqcF92X3RvLAotCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqcF92X2Zyb20pOworZXh0ZXJuIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqdG8sCisJCQkgICBjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpmcm9tKTsKIAogLy8gZmlyc3Qga2V5IGlzIGluIGNwdSBmb3JtLCBzZWNvbmQgLSBsZQogZXh0ZXJuIGludCBjb21wX3Nob3J0X2tleXMoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqbGVfa2V5LApAQCAtMTgzMiwyMCArMTg1MiwyMCBAQAogCW1lbWNweSh0bywgZnJvbSwgS0VZX1NJWkUpOwogfQogCi1pbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgpOwotY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X3JrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoICpwX3NfY2hrX3BhdGgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKTsKK2ludCBjb21wX2l0ZW1zKGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnN0b3JlZF9paCwgY29uc3Qgc3RydWN0IHRyZWVwYXRoICpwYXRoKTsKK2NvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqY2hrX3BhdGgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IHNlYXJjaF9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICosCiAJCSAgc3RydWN0IHRyZWVwYXRoICosIGludCk7CiAjZGVmaW5lIHNlYXJjaF9pdGVtKHMsa2V5LHBhdGgpIHNlYXJjaF9ieV9rZXkgKHMsIGtleSwgcGF0aCwgRElTS19MRUFGX05PREVfTEVWRUwpCi1pbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19jcHVfa2V5LAotCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoKTsKLWV4dGVybiB2b2lkIGRlY3JlbWVudF9iY291bnQoc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgpOwotdm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Ci12b2lkIHBhdGhyZWxzZShzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7CitpbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqY3B1X2tleSwKKwkJCSAgICAgICBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKK2V4dGVybiB2b2lkIGRlY3JlbWVudF9iY291bnQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpOwordm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCk7CiBpbnQgcmVpc2VyZnNfY2hlY2tfcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnApOwotdm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Cit2b2lkIHBhdGhyZWxzZV9hbmRfcmVzdG9yZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpOwogCiBpbnQgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLApAQCAtMTg2OCwxNCArMTg4OCwxNCBAQAogaW50IHJlaXNlcmZzX2RlbGV0ZV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKIAkJCSBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAotCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3VuX2JoKTsKKwkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVuX2JoKTsKIAogdm9pZCByZWlzZXJmc19kZWxldGVfc29saWRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXkpOwogaW50IHJlaXNlcmZzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSk7CisJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCByZWlzZXJmc19kb190cnVuY2F0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKiwKKwkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqLAogCQkJIGludCB1cGRhdGVfdGltZXN0YW1wcyk7CiAKICNkZWZpbmUgaV9ibG9ja19zaXplKGlub2RlKSAoKGlub2RlKS0+aV9zYi0+c19ibG9ja3NpemUpCkBAIC0xOTE5LDEwICsxOTM5LDEyIEBACiAJCSAgICAgICBsb2ZmX3Qgb2Zmc2V0LCBpbnQgdHlwZSwgaW50IGxlbmd0aCwgaW50IGVudHJ5X2NvdW50KTsKIHN0cnVjdCBpbm9kZSAqcmVpc2VyZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXkpOwogCitzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlOwogaW50IHJlaXNlcmZzX25ld19pbm9kZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSwKIAkJICAgICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGxvZmZfdCBpX3NpemUsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjdXJpdHkpOwogCiB2b2lkIHJlaXNlcmZzX3VwZGF0ZV9zZF9zaXplKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CkBAIC0xOTgwLDcgKzIwMDIsNyBAQAogI2RlZmluZSBQUk9DX0lORk9fTUFYKCBzYiwgZmllbGQsIHZhbHVlICkgVk9JRF9WCiAjZGVmaW5lIFBST0NfSU5GT19JTkMoIHNiLCBmaWVsZCApIFZPSURfVgogI2RlZmluZSBQUk9DX0lORk9fQUREKCBzYiwgZmllbGQsIHZhbCApIFZPSURfVgotI2RlZmluZSBQUk9DX0lORk9fQkhfU1RBVCggcF9zX3NiLCBwX3NfYmgsIG5fbm9kZV9sZXZlbCApIFZPSURfVgorI2RlZmluZSBQUk9DX0lORk9fQkhfU1RBVChzYiwgYmgsIG5fbm9kZV9sZXZlbCkgVk9JRF9WCiAjZW5kaWYKIAogLyogZGlyLmMgKi8KQEAgLTE5ODgsNiArMjAxMCw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcmVpc2VyZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJlaXNlcmZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlaXNlcmZzX2Rpcl9vcGVyYXRpb25zOworaW50IHJlaXNlcmZzX3JlYWRkaXJfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgdm9pZCAqLCBmaWxsZGlyX3QsIGxvZmZfdCAqKTsKIAogLyogdGFpbF9jb252ZXJzaW9uLmMgKi8KIGludCBkaXJlY3QyaW5kaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKQEAgLTIwMDQsMTMgKzIwMjcsMjAgQEAKIAogLyogZml4X25vZGVzLmMgKi8KIAotaW50IGZpeF9ub2RlcyhpbnQgbl9vcF9tb2RlLCBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsCi0JICAgICAgc3RydWN0IGl0ZW1faGVhZCAqcF9zX2luc19paCwgY29uc3Qgdm9pZCAqKTsKK2ludCBmaXhfbm9kZXMoaW50IG5fb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJICAgICAgc3RydWN0IGl0ZW1faGVhZCAqaW5zX2loLCBjb25zdCB2b2lkICopOwogdm9pZCB1bmZpeF9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICopOwogCiAvKiBwcmludHMuYyAqLwotdm9pZCByZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBfX3JlaXNlcmZzX3BhbmljKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqaWQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKyNkZWZpbmUgcmVpc2VyZnNfcGFuaWMocywgaWQsIGZtdCwgYXJncy4uLikgXAorCV9fcmVpc2VyZnNfcGFuaWMocywgaWQsIF9fZnVuY19fLCBmbXQsICMjYXJncykKK3ZvaWQgX19yZWlzZXJmc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworI2RlZmluZSByZWlzZXJmc19lcnJvcihzLCBpZCwgZm10LCBhcmdzLi4uKSBcCisJIF9fcmVpc2VyZnNfZXJyb3IocywgaWQsIF9fZnVuY19fLCBmbXQsICMjYXJncykKIHZvaWQgcmVpc2VyZnNfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHZvaWQgcmVpc2VyZnNfZGVidWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHZvaWQgcHJpbnRfaW5kaXJlY3RfaXRlbShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgaXRlbV9udW0pOwpAQCAtMjA0Nyw3ICsyMDc3LDcgQEAKIAkJCSAgaW50IHplcm9zX251bWJlcik7CiB2b2lkIGxlYWZfY3V0X2Zyb21fYnVmZmVyKHN0cnVjdCBidWZmZXJfaW5mbyAqYmksIGludCBjdXRfaXRlbV9udW0sCiAJCQkgIGludCBwb3NfaW5faXRlbSwgaW50IGN1dF9zaXplKTsKLXZvaWQgbGVhZl9wYXN0ZV9lbnRyaWVzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBpdGVtX251bSwgaW50IGJlZm9yZSwKK3ZvaWQgbGVhZl9wYXN0ZV9lbnRyaWVzKHN0cnVjdCBidWZmZXJfaW5mbyAqYmksIGludCBpdGVtX251bSwgaW50IGJlZm9yZSwKIAkJCWludCBuZXdfZW50cnlfY291bnQsIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpuZXdfZGVocywKIAkJCWNvbnN0IGNoYXIgKnJlY29yZHMsIGludCBwYXN0ZV9zaXplKTsKIC8qIGliYWxhbmNlLmMgKi8KQEAgLTIyMDMsNiArMjIzMyw2IEBACiAJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCByZWlzZXJmc191bnBhY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZgkJCQkvKiBfTElOVVhfUkVJU0VSX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKaW5kZXggY2UzNjYzZi4uNzYzNjBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkvKiB3ZSB1c2UgdGhlc2UgZm9yIGZzeW5jIG9yIE9fU1lOQyB0byBkZWNpZGUgd2hpY2ggdHJhbnNhY3Rpb24KIAkgKiogbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIG9yZGVyIGZvciB0aGlzIGlub2RlIHRvIGJlIHByb3Blcmx5CiAJICoqIGZsdXNoZWQgKi8KLQl1bnNpZ25lZCBsb25nIGlfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGlfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqaV9qbDsKIAlzdHJ1Y3QgbXV0ZXggaV9tbWFwOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKQEAgLTU5LDcgKzU5LDcgQEAKIAlzdHJ1Y3QgcG9zaXhfYWNsICppX2FjbF9kZWZhdWx0OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CisJc3RydWN0IHJ3X3NlbWFwaG9yZSBpX3hhdHRyX3NlbTsKICNlbmRpZgogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCmluZGV4IGJkYTZiNTYuLjU2MjFkODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKQEAgLTE0LDcgKzE0LDcgQEAKIH0gcmVpc2VyZnNfc3VwZXJfYmxvY2tfZmxhZ3M7CiAKIC8qIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayBhY2Nlc3NvcnMvbXV0YXRvcnMKLSAqIHNpbmNlIHRoaXMgaXMgYSBkaXNrIHN0cnVjdHVyZSwgaXQgd2lsbCBhbHdheXMgYmUgaW4gCisgKiBzaW5jZSB0aGlzIGlzIGEgZGlzayBzdHJ1Y3R1cmUsIGl0IHdpbGwgYWx3YXlzIGJlIGluCiAgKiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gKi8KICNkZWZpbmUgc2JfYmxvY2tfY291bnQoc2JwKSAgICAgICAgIChsZTMyX3RvX2NwdSgoc2JwKS0+c192MS5zX2Jsb2NrX2NvdW50KSkKICNkZWZpbmUgc2V0X3NiX2Jsb2NrX2NvdW50KHNicCx2KSAgICgoc2JwKS0+c192MS5zX2Jsb2NrX2NvdW50ID0gY3B1X3RvX2xlMzIodikpCkBAIC03Myw2ICs3Myw5IEBACiAjZGVmaW5lIHNiX3ZlcnNpb24oc2JwKSAgICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX3ZlcnNpb24pKQogI2RlZmluZSBzZXRfc2JfdmVyc2lvbihzYnAsdikgICAgICAoKHNicCktPnNfdjEuc192ZXJzaW9uID0gY3B1X3RvX2xlMTYodikpCiAKKyNkZWZpbmUgc2JfbW50X2NvdW50KHNicCkJICAgKGxlMTZfdG9fY3B1KChzYnApLT5zX21udF9jb3VudCkpCisjZGVmaW5lIHNldF9zYl9tbnRfY291bnQoc2JwLCB2KSAgICgoc2JwKS0+c19tbnRfY291bnQgPSBjcHVfdG9fbGUxNih2KSkKKwogI2RlZmluZSBzYl9yZXNlcnZlZF9mb3Jfam91cm5hbChzYnApIFwKICAgICAgICAgICAgICAgKGxlMTZfdG9fY3B1KChzYnApLT5zX3YxLnNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwpKQogI2RlZmluZSBzZXRfc2JfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwoc2JwLHYpIFwKQEAgLTgwLDE2ICs4MywxNiBAQAogCiAvKiBMT0dHSU5HIC0tICovCiAKLS8qIFRoZXNlIGFsbCBpbnRlcmVsYXRlIGZvciBwZXJmb3JtYW5jZS4gIAorLyogVGhlc2UgYWxsIGludGVyZWxhdGUgZm9yIHBlcmZvcm1hbmNlLgogKioKLSoqIElmIHRoZSBqb3VybmFsIGJsb2NrIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBuIHRyYW5zYWN0aW9ucywgeW91IGxvc2Ugc3BlZWQuIAorKiogSWYgdGhlIGpvdXJuYWwgYmxvY2sgY291bnQgaXMgc21hbGxlciB0aGFuIG4gdHJhbnNhY3Rpb25zLCB5b3UgbG9zZSBzcGVlZC4KICoqIEkgZG9uJ3Qga25vdyB3aGF0IG4gaXMgeWV0LCBJJ20gZ3Vlc3NpbmcgOC0xNi4KICoqCiAqKiB0eXBpY2FsIHRyYW5zYWN0aW9uIHNpemUgZGVwZW5kcyBvbiB0aGUgYXBwbGljYXRpb24sIGhvdyBvZnRlbiBmc3luYyBpcwotKiogY2FsbGVkLCBhbmQgaG93IG1hbnkgbWV0YWRhdGEgYmxvY2tzIHlvdSBkaXJ0eSBpbiBhIDMwIHNlY29uZCBwZXJpb2QuICAKKyoqIGNhbGxlZCwgYW5kIGhvdyBtYW55IG1ldGFkYXRhIGJsb2NrcyB5b3UgZGlydHkgaW4gYSAzMCBzZWNvbmQgcGVyaW9kLgogKiogVGhlIG1vcmUgc21hbGwgZmlsZXMgKDwxNmspIHlvdSB1c2UsIHRoZSBsYXJnZXIgeW91ciB0cmFuc2FjdGlvbnMgd2lsbAogKiogYmUuCi0qKiAKKyoqCiAqKiBJZiB5b3VyIGpvdXJuYWwgZmlsbHMgZmFzdGVyIHRoYW4gZGlydHkgYnVmZmVycyBnZXQgZmx1c2hlZCB0byBkaXNrLCBpdCBtdXN0IGZsdXNoIHRoZW0gYmVmb3JlIGFsbG93aW5nIHRoZSBqb3VybmFsCiAqKiB0byB3cmFwLCB3aGljaCBzbG93cyB0aGluZ3MgZG93bi4gIElmIHlvdSBuZWVkIGhpZ2ggc3BlZWQgbWV0YSBkYXRhIHVwZGF0ZXMsIHRoZSBqb3VybmFsIHNob3VsZCBiZSBiaWcgZW5vdWdoCiAqKiB0byBwcmV2ZW50IHdyYXBwaW5nIGJlZm9yZSBkaXJ0eSBtZXRhIGJsb2NrcyBnZXQgdG8gZGlzay4KQEAgLTE1Myw3ICsxNTYsNyBAQAogCWF0b21pY190IGpfY29tbWl0X2xlZnQ7CiAJYXRvbWljX3Qgal9vbGRlcl9jb21taXRzX2RvbmU7CS8qIGFsbCBjb21taXRzIG9sZGVyIHRoYW4gdGhpcyBvbiBkaXNrICovCiAJc3RydWN0IG11dGV4IGpfY29tbWl0X211dGV4OwotCXVuc2lnbmVkIGxvbmcgal90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgal90cmFuc19pZDsKIAl0aW1lX3Qgal90aW1lc3RhbXA7CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqX2xpc3RfYml0bWFwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqal9jb21taXRfYmg7CS8qIGNvbW1pdCBidWZmZXIgaGVhZCAqLwpAQCAtMTgyLDcgKzE4NSw3IEBACiAJaW50IGpfMXN0X3Jlc2VydmVkX2Jsb2NrOwkvKiBmaXJzdCBibG9jayBvbiBzX2RldiBvZiByZXNlcnZlZCBhcmVhIGpvdXJuYWwgKi8KIAogCXVuc2lnbmVkIGxvbmcgal9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGpfdHJhbnNfaWQ7CiAJdW5zaWduZWQgbG9uZyBqX21vdW50X2lkOwogCXVuc2lnbmVkIGxvbmcgal9zdGFydDsJLyogc3RhcnQgb2YgY3VycmVudCB3YWl0aW5nIGNvbW1pdCAoaW5kZXggaW50byBqX2FwX2Jsb2NrcykgKi8KIAl1bnNpZ25lZCBsb25nIGpfbGVuOwkvKiBsZW5ndGggb2YgY3VycmVudCB3YWl0aW5nIGNvbW1pdCAqLwpAQCAtMjIzLDEwICsyMjYsMTAgQEAKIAlpbnQgal9udW1fd29ya19saXN0czsJLyogbnVtYmVyIHRoYXQgbmVlZCBhdHRlbnRpb24gZnJvbSBrcmVpc2VyZnNkICovCiAKIAkvKiBkZWJ1Z2dpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgZmx1c2hlZCBpbiBvcmRlciAqLwotCWludCBqX2xhc3RfZmx1c2hfaWQ7CisJdW5zaWduZWQgaW50IGpfbGFzdF9mbHVzaF9pZDsKIAogCS8qIGRlYnVnZ2luZyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBjb21taXR0ZWQgaW4gb3JkZXIgKi8KLQlpbnQgal9sYXN0X2NvbW1pdF9pZDsKKwl1bnNpZ25lZCBpbnQgal9sYXN0X2NvbW1pdF9pZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgal9iaXRtYXBfbm9kZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBqX2RpcnR5X2J1ZmZlcnM7CkBAIC0yMzksNyArMjQyLDcgQEAKIAogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCBqX2xpc3RfYml0bWFwW0pPVVJOQUxfTlVNX0JJVE1BUFNdOwkvKiBhcnJheSBvZiBiaXRtYXBzIHRvIHJlY29yZCB0aGUgZGVsZXRlZCBibG9ja3MgKi8KIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9oYXNoX3RhYmxlW0pPVVJOQUxfSEFTSF9TSVpFXTsJLyogaGFzaCB0YWJsZSBmb3IgcmVhbCBidWZmZXIgaGVhZHMgaW4gY3VycmVudCB0cmFucyAqLwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2xpc3RfaGFzaF90YWJsZVtKT1VSTkFMX0hBU0hfU0laRV07CS8qIGhhc2ggdGFibGUgZm9yIGFsbCB0aGUgcmVhbCBidWZmZXIgaGVhZHMgaW4gYWxsIAorCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2xpc3RfaGFzaF90YWJsZVtKT1VSTkFMX0hBU0hfU0laRV07CS8qIGhhc2ggdGFibGUgZm9yIGFsbCB0aGUgcmVhbCBidWZmZXIgaGVhZHMgaW4gYWxsCiAJCQkJCQkJCQkJICAgdGhlIHRyYW5zYWN0aW9ucyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgal9wcmVhbGxvY19saXN0OwkvKiBsaXN0IG9mIGlub2RlcyB3aGljaCBoYXZlIHByZWFsbG9jYXRlZCBibG9ja3MgKi8KIAlpbnQgal9wZXJzaXN0ZW50X3RyYW5zOwpAQCAtMzk5LDEwICs0MDIsNyBAQAogCWludCByZXNlcnZlZF9ibG9ja3M7CS8qIGFtb3VudCBvZiBibG9ja3MgcmVzZXJ2ZWQgZm9yIGZ1cnRoZXIgYWxsb2NhdGlvbnMgKi8KIAlzcGlubG9ja190IGJpdG1hcF9sb2NrOwkvKiB0aGlzIGxvY2sgb24gbm93IG9ubHkgdXNlZCB0byBwcm90ZWN0IHJlc2VydmVkX2Jsb2NrcyB2YXJpYWJsZSAqLwogCXN0cnVjdCBkZW50cnkgKnByaXZfcm9vdDsJLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYgKi8KLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKIAlzdHJ1Y3QgZGVudHJ5ICp4YXR0cl9yb290OwkvKiByb290IG9mIC8ucmVpc2VyZnNfcHJpdi8ueGEgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX2Rpcl9zZW07Ci0jZW5kaWYKIAlpbnQgal9lcnJubzsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAljaGFyICpzX3FmX25hbWVzW01BWFFVT1RBU107CkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCQkgICBwYXJ0aXRpb24gd2lsbCBiZSBkZWFsdCB3aXRoIGluIGEKIAkJCQkgICBtYW5uZXIgb2YgMy41LnggKi8KIAotLyogLW8gaGFzaD17dGVhLCBydXBhc292LCByNSwgZGV0ZWN0fSBpcyBtZWFudCBmb3IgcHJvcGVybHkgbW91bnRpbmcgCisvKiAtbyBoYXNoPXt0ZWEsIHJ1cGFzb3YsIHI1LCBkZXRlY3R9IGlzIG1lYW50IGZvciBwcm9wZXJseSBtb3VudGluZwogKiogcmVpc2VyZnMgZGlza3MgZnJvbSAzLjUuMTkgb3IgZWFybGllci4gIDk5JSBvZiB0aGUgdGltZSwgdGhpcyBvcHRpb24KICoqIGlzIG5vdCByZXF1aXJlZC4gIElmIHRoZSBub3JtYWwgYXV0b2RlY3Rpb24gY29kZSBjYW4ndCBkZXRlcm1pbmUgd2hpY2gKICoqIGhhc2ggdG8gdXNlIChiZWNhdXNlIGJvdGggaGFzaGVzIGhhZCB0aGUgc2FtZSB2YWx1ZSBmb3IgYSBmaWxlKQpAQCAtNDUxLDcgKzQ1MSw2IEBACiAJUkVJU0VSRlNfTk9fVU5IQVNIRURfUkVMT0NBVElPTiwKIAlSRUlTRVJGU19IQVNIRURfUkVMT0NBVElPTiwKIAlSRUlTRVJGU19BVFRSUywKLQlSRUlTRVJGU19YQVRUUlMsCiAJUkVJU0VSRlNfWEFUVFJTX1VTRVIsCiAJUkVJU0VSRlNfUE9TSVhBQ0wsCiAJUkVJU0VSRlNfQkFSUklFUl9OT05FLApAQCAtNDg5LDcgKzQ4OCw3IEBACiAjZGVmaW5lIHJlaXNlcmZzX2RhdGFfbG9nKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19EQVRBX0xPRykpCiAjZGVmaW5lIHJlaXNlcmZzX2RhdGFfb3JkZXJlZChzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfREFUQV9PUkRFUkVEKSkKICNkZWZpbmUgcmVpc2VyZnNfZGF0YV93cml0ZWJhY2socykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0RBVEFfV1JJVEVCQUNLKSkKLSNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19YQVRUUlMpKQorI2RlZmluZSByZWlzZXJmc194YXR0cnMocykgKChzKS0+c194YXR0ciAhPSBOVUxMKQogI2RlZmluZSByZWlzZXJmc194YXR0cnNfdXNlcihzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfWEFUVFJTX1VTRVIpKQogI2RlZmluZSByZWlzZXJmc19wb3NpeGFjbChzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfUE9TSVhBQ0wpKQogI2RlZmluZSByZWlzZXJmc194YXR0cnNfb3B0aW9uYWwocykgKHJlaXNlcmZzX3hhdHRyc191c2VyKHMpIHx8IHJlaXNlcmZzX3Bvc2l4YWNsKHMpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCmluZGV4IGFmMTM1YWUuLmRjYWUwMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKQEAgLTE1LDYgKzE1LDEyIEBACiAJX19sZTMyIGhfaGFzaDsJCS8qIGhhc2ggb2YgdGhlIHZhbHVlICovCiB9OwogCitzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHsKKwljaGFyICpuYW1lOworCXZvaWQgKnZhbHVlOworCXNpemVfdCBsZW5ndGg7Cit9OworCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjksMjIgKzM1LDEzIEBACiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiBzdHJ1Y3QgbmFtZWlkYXRhOwogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB7Ci0JY2hhciAqcHJlZml4OwotCWludCAoKmluaXQpICh2b2lkKTsKLQl2b2lkICgqZXhpdCkgKHZvaWQpOwotCWludCAoKmdldCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCi0JCSAgICBzaXplX3Qgc2l6ZSk7Ci0JaW50ICgqc2V0KSAoc3RydWN0IGlub2RlICogaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkJICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotCWludCAoKmRlbCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKLQlpbnQgKCpsaXN0KSAoc3RydWN0IGlub2RlICogaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgIGNoYXIgKm91dCk7Ci0Jc3RydWN0IGxpc3RfaGVhZCBoYW5kbGVyczsKLX07CitpbnQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgX19pbml0Owordm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpOworaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKTsKK2ludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKTsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotI2RlZmluZSBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkgSVNfUFJJVkFURShpbm9kZSkKICNkZWZpbmUgaGFzX3hhdHRyX2Rpcihpbm9kZSkgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9oYXNfeGF0dHJfZGlyKQogc3NpemVfdCByZWlzZXJmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwpAQCAtNTIsMTA1ICs0OSw5OCBAQAogCQkgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBzc2l6ZV90IHJlaXNlcmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwogaW50IHJlaXNlcmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycyk7Ci1pbnQgcmVpc2VyZnNfeGF0dHJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW91bnRfZmxhZ3MpOwogaW50IHJlaXNlcmZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwogCi1pbnQgcmVpc2VyZnNfeGF0dHJfZGVsKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICopOwotaW50IHJlaXNlcmZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CitpbnQgcmVpc2VyZnNfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKIGludCByZWlzZXJmc194YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitpbnQgcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCisJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosCisJCQkgICAgICBzaXplX3QsIGludCk7CiAKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB1c2VyX2hhbmRsZXI7Ci1leHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgdHJ1c3RlZF9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHNlY3VyaXR5X2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfeGF0dHJfdXNlcl9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3RydXN0ZWRfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyOworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWQoraW50IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpOworaW50IHJlaXNlcmZzX3NlY3VyaXR5X3dyaXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKK3ZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpOworI2VuZGlmCiAKLWludCByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKSBfX2luaXQ7Ci12b2lkIHJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnModm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorI2RlZmluZSB4YXR0cl9zaXplKHNpemUpICgoc2l6ZSkgKyBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlcikpCitzdGF0aWMgaW5saW5lIGxvZmZfdCByZWlzZXJmc194YXR0cl9uYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKQogewotCWRvd25fd3JpdGUoJlJFSVNFUkZTX1hBVFRSX0RJUl9TRU0oc2IpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JdXBfd3JpdGUoJlJFSVNFUkZTX1hBVFRSX0RJUl9TRU0oc2IpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JZG93bl9yZWFkKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7CisJbG9mZl90IHJldCA9IDA7CisJaWYgKHJlaXNlcmZzX2ZpbGVfZGF0YV9sb2coaW5vZGUpKSB7CisJCXJldCA9IF9ST1VORF9VUCh4YXR0cl9zaXplKHNpemUpLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQlyZXQgPj49IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCX0KKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCisvKiBXZSBtYXkgaGF2ZSB0byBjcmVhdGUgdXAgdG8gMyBvYmplY3RzOiB4YXR0ciByb290LCB4YXR0ciBkaXIsIHhhdHRyIGZpbGUuCisgKiBMZXQncyB0cnkgdG8gYmUgc21hcnQgYWJvdXQgaXQuCisgKiB4YXR0ciByb290OiBXZSBjYWNoZSBpdC4gSWYgaXQncyBub3QgY2FjaGVkLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgaXQuCisgKiB4YXR0ciBkaXI6IElmIGFueXRoaW5nIGhhcyBiZWVuIGxvYWRlZCBmb3IgdGhpcyBpbm9kZSwgd2UgY2FuIHNldCBhIGZsYWcKKyAqICAgICAgICAgICAgc2F5aW5nIHNvLgorICogeGF0dHIgZmlsZTogU2luY2Ugd2UgZG9uJ3QgY2FjaGUgeGF0dHJzLCB3ZSBjYW4ndCB0ZWxsLiBXZSBhbHdheXMgaW5jbHVkZQorICogICAgICAgICAgICAgYmxvY2tzIGZvciBpdC4KKyAqCisgKiBIb3dldmVyLCBzaW5jZSByb290IGFuZCBkaXIgY2FuIGJlIGNyZWF0ZWQgYmV0d2VlbiBjYWxscyAtIFlPVSBNVVNUIFNBVkUKKyAqIFRISVMgVkFMVUUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXVwX3JlYWQoJlJFSVNFUkZTX1hBVFRSX0RJUl9TRU0oc2IpKTsKLX0KKwlzaXplX3QgbmJsb2NrcyA9IEpPVVJOQUxfQkxPQ0tTX1BFUl9PQkpFQ1QoaW5vZGUtPmlfc2IpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZG93bl93cml0ZSgmUkVJU0VSRlNfSShpbm9kZSktPnhhdHRyX3NlbSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRyX2koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQl1cF93cml0ZSgmUkVJU0VSRlNfSShpbm9kZSktPnhhdHRyX3NlbSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlkb3duX3JlYWQoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQorCWlmICgoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX2hhc194YXR0cl9kaXIpID09IDApIHsKKwkJbmJsb2NrcyArPSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKGlub2RlLT5pX3NiKTsKKwkJaWYgKFJFSVNFUkZTX1NCKGlub2RlLT5pX3NiKS0+eGF0dHJfcm9vdCA9PSBOVUxMKQorCQkJbmJsb2NrcyArPSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKGlub2RlLT5pX3NiKTsKKwl9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19yZWFkX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdXBfcmVhZCgmUkVJU0VSRlNfSShpbm9kZSktPnhhdHRyX3NlbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CisJcmV0dXJuIG5ibG9ja3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X3hhdHRyX3J3c2VtKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW5pdF9yd3NlbSgmUkVJU0VSRlNfSShpbm9kZSktPnhhdHRyX3NlbSk7CisJaW5pdF9yd3NlbSgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIH0KIAogI2Vsc2UKIAotI2RlZmluZSBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkgMAotI2RlZmluZSByZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpIGRvIHs7fSB3aGlsZSgwKQogI2RlZmluZSByZWlzZXJmc19nZXR4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX3NldHhhdHRyIE5VTEwKICNkZWZpbmUgcmVpc2VyZnNfbGlzdHhhdHRyIE5VTEwKICNkZWZpbmUgcmVpc2VyZnNfcmVtb3ZleGF0dHIgTlVMTAotI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhzYikgZG8gezt9IHdoaWxlKDApCi0jZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoc2IpIGRvIHs7fSB3aGlsZSgwKQotI2RlZmluZSByZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKHNiKQotI2RlZmluZSByZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoc2IpCiAKICNkZWZpbmUgcmVpc2VyZnNfcGVybWlzc2lvbiBOVUxMCiAKLSNkZWZpbmUgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnMoKSAwCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKQotCi1zdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcmV0dXJuIDA7Ci19Owotc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBpYXR0ciAqYXR0cnMpCi17Ci0JcmV0dXJuIDA7Ci19Owotc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfeGF0dHJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW91bnRfZmxhZ3MpCi17Ci0Jc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUE9TSVhBQ0wpOwkvKiB0byBiZSBzdXJlICovCi0JcmV0dXJuIDA7Ci19Owogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfeGF0dHJfcndzZW0oc3RydWN0IGlub2RlICppbm9kZSkKIHsKIH0KICNlbmRpZiAgLyogIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiAgKi8KIAorI2lmbmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkKK3N0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQKK3JlaXNlcmZzX3NlY3VyaXR5X3dyaXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19zZWN1cml0eV9mcmVlKHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3t9CisjZW5kaWYKKwogI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KIAogI2VuZGlmICAvKiAgX0xJTlVYX1JFSVNFUkZTX1hBVFRSX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMWYyYWI2My4uNTRlZDE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtODgwLDExICs4ODAsNiBAQAogICoJQHNvY2sgY29udGFpbnMgdGhlIGxpc3RlbmluZyBzb2NrZXQgc3RydWN0dXJlLgogICoJQG5ld3NvY2sgY29udGFpbnMgdGhlIG5ld2x5IGNyZWF0ZWQgc2VydmVyIHNvY2tldCBmb3IgY29ubmVjdGlvbi4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KLSAqIEBzb2NrZXRfcG9zdF9hY2NlcHQ6Ci0gKglUaGlzIGhvb2sgYWxsb3dzIGEgc2VjdXJpdHkgbW9kdWxlIHRvIGNvcHkgc2VjdXJpdHkKLSAqCWluZm9ybWF0aW9uIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0J3MgaW5vZGUuCi0gKglAc29jayBjb250YWlucyB0aGUgbGlzdGVuaW5nIHNvY2tldCBzdHJ1Y3R1cmUuCi0gKglAbmV3c29jayBjb250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBzZXJ2ZXIgc29ja2V0IGZvciBjb25uZWN0aW9uLgogICogQHNvY2tldF9zZW5kbXNnOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgdHJhbnNtaXR0aW5nIGEgbWVzc2FnZSB0byBhbm90aGVyIHNvY2tldC4KICAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgpAQCAtMTU1NCw4ICsxNTQ5LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBhZGRybGVuKTsKIAlpbnQgKCpzb2NrZXRfbGlzdGVuKSAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpOwogCWludCAoKnNvY2tldF9hY2NlcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLQl2b2lkICgqc29ja2V0X3Bvc3RfYWNjZXB0KSAoc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkgICAgc3RydWN0IHNvY2tldCAqbmV3c29jayk7CiAJaW50ICgqc29ja2V0X3NlbmRtc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogCWludCAoKnNvY2tldF9yZWN2bXNnKSAoc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTI1MzcsNyArMjUzMCw2IEBACiBpbnQgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbik7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLXZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spOwogaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogaW50IHNlY3VyaXR5X3NvY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCSAgICBpbnQgc2l6ZSwgaW50IGZsYWdzKTsKQEAgLTI2MTYsMTEgKzI2MDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKQotewotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjZjMGM4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI2lmbmRlZiBfTElOVVhfVklERU9fREVDT0RFUl9ICi0jZGVmaW5lIF9MSU5VWF9WSURFT19ERUNPREVSX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgSEFWRV9WSURFT19ERUNPREVSIDEKLQotc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSB7IC8qIHRoaXMgbmFtZSBpcyB0b28gbG9uZyAqLwotCV9fdTMyCWZsYWdzOwotI2RlZmluZQlWSURFT19ERUNPREVSX1BBTAkxCS8qIGNhbiBkZWNvZGUgUEFMIHNpZ25hbCAqLwotI2RlZmluZQlWSURFT19ERUNPREVSX05UU0MJMgkvKiBjYW4gZGVjb2RlIE5UU0MgKi8KLSNkZWZpbmUJVklERU9fREVDT0RFUl9TRUNBTQk0CS8qIGNhbiBkZWNvZGUgU0VDQU0gKi8KLSNkZWZpbmUJVklERU9fREVDT0RFUl9BVVRPCTgJLyogY2FuIGF1dG9zZW5zZSBub3JtICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfQ0NJUgkxNgkvKiBDQ0lSLTYwMSBwaXhlbCByYXRlICg3MjAgcGl4ZWxzIHBlciBsaW5lKSBpbnN0ZWFkIG9mIHNxdWFyZSBwaXhlbCByYXRlICovCi0JaW50CWlucHV0czsJCQkvKiBudW1iZXIgb2YgaW5wdXRzICovCi0JaW50CW91dHB1dHM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0cyAqLwotfTsKLQotLyoKLURFQ09ERVJfR0VUX1NUQVRVUyByZXR1cm5zIHRoZSBmb2xsb3dpbmcgZmxhZ3MuICBUaGUgb25seSBvbmUgeW91IG5lZWQgaXMKLURFQ09ERVJfU1RBVFVTX0dPT0QsIHRoZSBvdGhlcnMgYXJlIGp1c3QgbmljZSB0aGluZ3MgdG8ga25vdy4KLSovCi0jZGVmaW5lCURFQ09ERVJfU1RBVFVTX0dPT0QJMQkvKiByZWNlaXZpbmcgYWNjZXB0YWJsZSBpbnB1dCAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19DT0xPUgkyCS8qIHJlY2VpdmluZyBjb2xvciBpbmZvcm1hdGlvbiAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19QQUwJNAkvKiBhdXRvIGRldGVjdGVkICovCi0jZGVmaW5lCURFQ09ERVJfU1RBVFVTX05UU0MJOAkvKiBhdXRvIGRldGVjdGVkICovCi0jZGVmaW5lCURFQ09ERVJfU1RBVFVTX1NFQ0FNCTE2CS8qIGF1dG8gZGV0ZWN0ZWQgKi8KLQotc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB7Ci0JdW5zaWduZWQgY2hhciBsZW47Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLSNkZWZpbmUJREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIF9JT1IoJ2QnLCAxLCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5KQotI2RlZmluZQlERUNPREVSX0dFVF9TVEFUVVMgICAgCV9JT1IoJ2QnLCAyLCBpbnQpCi0jZGVmaW5lCURFQ09ERVJfU0VUX05PUk0JX0lPVygnZCcsIDMsIGludCkKLSNkZWZpbmUJREVDT0RFUl9TRVRfSU5QVVQJX0lPVygnZCcsIDQsIGludCkJLyogMCA8PSBpbnB1dCA8ICNpbnB1dHMgKi8KLSNkZWZpbmUJREVDT0RFUl9TRVRfT1VUUFVUCV9JT1coJ2QnLCA1LCBpbnQpCS8qIDAgPD0gb3V0cHV0IDwgI291dHB1dHMgKi8KLSNkZWZpbmUJREVDT0RFUl9FTkFCTEVfT1VUUFVUCV9JT1coJ2QnLCA2LCBpbnQpCS8qIGJvb2xlYW4gb3V0cHV0IGVuYWJsZSBjb250cm9sICovCi0jZGVmaW5lCURFQ09ERVJfU0VUX1BJQ1RVUkUgICAJX0lPVygnZCcsIDcsIHN0cnVjdCB2aWRlb19waWN0dXJlKQotI2RlZmluZQlERUNPREVSX1NFVF9HUElPCV9JT1coJ2QnLCA4LCBpbnQpCS8qIHN3aXRjaCBnZW5lcmFsIHB1cnBvc2UgcGluICovCi0jZGVmaW5lCURFQ09ERVJfSU5JVAkJX0lPVygnZCcsIDksIHN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQpCS8qIGluaXQgaW50ZXJuYWwgcmVnaXN0ZXJzIGF0IG9uY2UgKi8KLSNkZWZpbmUJREVDT0RFUl9TRVRfVkJJX0JZUEFTUwlfSU9XKCdkJywgMTAsIGludCkJLyogc3dpdGNoIHZiaSBieXBhc3MgKi8KLQotI2RlZmluZQlERUNPREVSX0RVTVAJCV9JTygnZCcsIDE5MikJCS8qIGRlYnVnIGhvb2sgKi8KLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oIGIvaW5jbHVkZS9saW51eC92aWRlb19lbmNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjY0MjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb19lbmNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9WSURFT19FTkNPREVSX0gKLSNkZWZpbmUgX0xJTlVYX1ZJREVPX0VOQ09ERVJfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSB7IC8qIHRoaXMgbmFtZSBpcyB0b28gbG9uZyAqLwotCV9fdTMyCWZsYWdzOwotI2RlZmluZQlWSURFT19FTkNPREVSX1BBTAkxCS8qIGNhbiBlbmNvZGUgUEFMIHNpZ25hbCAqLwotI2RlZmluZQlWSURFT19FTkNPREVSX05UU0MJMgkvKiBjYW4gZW5jb2RlIE5UU0MgKi8KLSNkZWZpbmUJVklERU9fRU5DT0RFUl9TRUNBTQk0CS8qIGNhbiBlbmNvZGUgU0VDQU0gKi8KLSNkZWZpbmUJVklERU9fRU5DT0RFUl9DQ0lSCTE2CS8qIENDSVItNjAxIHBpeGVsIHJhdGUgKDcyMCBwaXhlbHMgcGVyIGxpbmUpIGluc3RlYWQgb2Ygc3F1YXJlIHBpeGVsIHJhdGUgKi8KLQlpbnQJaW5wdXRzOwkJCS8qIG51bWJlciBvZiBpbnB1dHMgKi8KLQlpbnQJb3V0cHV0czsJCS8qIG51bWJlciBvZiBvdXRwdXRzICovCi19OwotCi0jZGVmaW5lCUVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUyBfSU9SKCdlJywgMSwgc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSkKLSNkZWZpbmUJRU5DT0RFUl9TRVRfTk9STQlfSU9XKCdlJywgMiwgaW50KQotI2RlZmluZQlFTkNPREVSX1NFVF9JTlBVVAlfSU9XKCdlJywgMywgaW50KQkvKiAwIDw9IGlucHV0IDwgI2lucHV0cyAqLwotI2RlZmluZQlFTkNPREVSX1NFVF9PVVRQVVQJX0lPVygnZScsIDQsIGludCkJLyogMCA8PSBvdXRwdXQgPCAjb3V0cHV0cyAqLwotI2RlZmluZQlFTkNPREVSX0VOQUJMRV9PVVRQVVQJX0lPVygnZScsIDUsIGludCkJLyogYm9vbGVhbiBvdXRwdXQgZW5hYmxlIGNvbnRyb2wgKi8KLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAppbmRleCA4MzdmMzkyLi5iMTllYWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCkBAIC0xNiw2ICsxNiwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKKyNpZiBkZWZpbmVkKF9fTUlOX1Y0TDEpICYmIGRlZmluZWQgKF9fS0VSTkVMX18pCisKKy8qCisgKiBVc2VkIGJ5IHRob3NlIFY0TDIgY29yZSBmdW5jdGlvbnMgdGhhdCBuZWVkIGEgbWluaW11bSBWNEwxIHN1cHBvcnQsCisgKiBpbiBvcmRlciB0byBhbGxvdyBWNEwxIENvbXBhdGliaWx0eSBjb2RlIGNvbXBpbGF0aW9uLgorICovCisKK3N0cnVjdCB2aWRlb19tYnVmCit7CisJaW50CXNpemU7CQkvKiBUb3RhbCBtZW1vcnkgdG8gbWFwICovCisJaW50CWZyYW1lczsJCS8qIEZyYW1lcyAqLworCWludAlvZmZzZXRzW1ZJREVPX01BWF9GUkFNRV07Cit9OworCisjZGVmaW5lIFZJRElPQ0dNQlVGCQlfSU9SKCd2JywyMCwgc3RydWN0IHZpZGVvX21idWYpCQkvKiBNZW1vcnkgbWFwIGJ1ZmZlciBpbmZvICovCisKKyNlbHNlCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fVjRMMV9DT01QQVQpIHx8ICFkZWZpbmVkIChfX0tFUk5FTF9fKQogCiAjZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUJMQkvKiBDYW4gY2FwdHVyZSAqLwpAQCAtMzEyLDYgKzMyOSw3IEBACiAjZGVmaW5lIFZJRF9QTEFZX0VORF9NQVJLCQkxNAogCiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUICovCisjZW5kaWYgLyogX19NSU5fVjRMMSAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9WSURFT0RFVl9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDU1NzFkYmUuLjEzOWQyMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMzQ0LDYgKzM0NCw4IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTA4ICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnOCcpIC8qIFlVVlkgcGVyIGxpbmUgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnNicsICcxJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgICB2NGwyX2ZvdXJjYygnUCcsICcyJywgJzAnLCAnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEEgdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NROTA1QyAgIHY0bDJfZm91cmNjKCc5JywgJzAnLCAnNScsICdDJykgLyogY29tcHJlc3NlZCBSR0dCIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWWVUgICAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdZJywgJ1UnKSAvKiAxNiAgWVZVIDQ6MjoyICAgICAqLwogCkBAIC04MjksNiArODMxLDcgQEAKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIAkJMHgwMDA4CiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFIAkweDAwMTAKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSIAkJMHgwMDIwCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkgCTB4MDA0MAogCiAvKiAgUXVlcnkgZmxhZywgdG8gYmUgT1JlZCB3aXRoIHRoZSBjb250cm9sIElEICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTAkweDgwMDAwMDAwCkBAIC04NzksOCArODgyLDE1IEBACiAjZGVmaW5lIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04gCShWNEwyX0NJRF9CQVNFKzI4KQogI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfQUdDICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjkpCiAjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SX0tJTExFUiAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMCkKKyNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWAkJCShWNEwyX0NJRF9CQVNFKzMxKQorZW51bSB2NGwyX2NvbG9yZnggeworCVY0TDJfQ09MT1JGWF9OT05FCT0gMCwKKwlWNEwyX0NPTE9SRlhfQlcJCT0gMSwKKwlWNEwyX0NPTE9SRlhfU0VQSUEJPSAyLAorfTsKKwogLyogbGFzdCBDSUQgKyAxICovCi0jZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMSAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMSkKKyNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMyKQogCiAvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBkZWZpbmVkIGJ5IFY0TDIgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFIAkJCShWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQpAQCAtMTMzOSw2ICsxMzQ5LDUzIEBACiB9OwogCiAvKgorICogU2xpY2VkIFZCSSBkYXRhIGluc2VydGVkIGludG8gTVBFRyBTdHJlYW1zCisgKi8KKworLyoKKyAqIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWOgorICoKKyAqIFN0cnVjdHVyZSBvZiBwYXlsb2FkIGNvbnRhaW5lZCBpbiBhbiBNUEVHIDIgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgUGFja2V0IGluIGFuCisgKiBNUEVHLTIgUHJvZ3JhbSBQYWNrIHRoYXQgY29udGFpbnMgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgU2xpY2VkIFZCSQorICogZGF0YQorICoKKyAqIE5vdGUsIHRoZSBNUEVHLTIgUHJvZ3JhbSBQYWNrIGFuZCBQcml2YXRlIFN0cmVhbSAxIFBFUyBwYWNrZXQgaGVhZGVyCisgKiBkZWZpbml0aW9ucyBhcmUgbm90IGluY2x1ZGVkIGhlcmUuICBTZWUgdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9ucyBmb3IgZGV0YWlscworICogb24gdGhlc2UgaGVhZGVycy4KKyAqLworCisvKiBMaW5lIHR5cGUgSURzICovCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9URUxFVEVYVF9CICAgICAoMSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX0NBUFRJT05fNTI1ICAgICg0KQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNSAgICAgICAgKDUpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9WUFMgICAgICAgICAgICAoNykKKworc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIHsKKwlfX3U4IGlkOwkvKiBPbmUgb2YgVjRMMl9NUEVHX1ZCSV9JVlRWXyogYWJvdmUgKi8KKwlfX3U4IGRhdGFbNDJdOwkvKiBTbGljZWQgVkJJIGRhdGEgZm9yIHRoZSBsaW5lICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCB7CisJX19sZTMyIGxpbmVtYXNrWzJdOyAvKiBCaXRtYXNrcyBvZiBWQkkgc2VydmljZSBsaW5lcyBwcmVzZW50ICovCisJc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIGxpbmVbMzVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX0lUVjAgeworCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzAJIml0djAiCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzEJIklUVjAiCisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2ZtdF9pdnR2IHsKKwlfX3U4IG1hZ2ljWzRdOworCXVuaW9uIHsKKwkJc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCBpdHYwOworCQlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIElUVjA7CisJfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgogICoJQSBHIEcgUiBFIEcgQSBUIEUgICBTIFQgUiBVIEMgVCBVIFIgRSBTCiAgKi8KIApAQCAtMTQwMywxNCArMTQ2MCw2IEBACiAJX191MzIgcmV2aXNpb247ICAgIC8qIGNoaXAgcmV2aXNpb24sIGNoaXAgc3BlY2lmaWMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0vKiBWSURJT0NfR19DSElQX0lERU5UX09MRDogRGVwcmVjYXRlZCwgZG8gbm90IHVzZSAqLwotc3RydWN0IHY0bDJfY2hpcF9pZGVudF9vbGQgewotCV9fdTMyIG1hdGNoX3R5cGU7ICAvKiBNYXRjaCB0eXBlICovCi0JX191MzIgbWF0Y2hfY2hpcDsgIC8qIE1hdGNoIHRoaXMgY2hpcCwgbWVhbmluZyBkZXRlcm1pbmVkIGJ5IG1hdGNoX3R5cGUgKi8KLQlfX3UzMiBpZGVudDsgICAgICAgLyogY2hpcCBpZGVudGlmaWVyIGFzIHNwZWNpZmllZCBpbiA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+ICovCi0JX191MzIgcmV2aXNpb247ICAgIC8qIGNoaXAgcmV2aXNpb24sIGNoaXAgc3BlY2lmaWMgKi8KLX07Ci0KIC8qCiAgKglJIE8gQyBUIEwgICBDIE8gRCBFIFMgICBGIE8gUiAgIFYgSSBEIEUgTyAgIEQgRSBWIEkgQyBFIFMKICAqCkBAIC0xNDg4LDggKzE1MzcsNiBAQAogLyogRXhwZXJpbWVudGFsLCBtZWFudCBmb3IgZGVidWdnaW5nLCB0ZXN0aW5nIGFuZCBpbnRlcm5hbCB1c2UuCiAgICBOZXZlciB1c2UgdGhpcyBpb2N0bCBpbiBhcHBsaWNhdGlvbnMhICovCiAjZGVmaW5lIFZJRElPQ19EQkdfR19DSElQX0lERU5UIF9JT1dSKCdWJywgODEsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50KQotLyogVGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGdvIGF3YXkgaW4gMi42LjMwICovCi0jZGVmaW5lIFZJRElPQ19HX0NISVBfSURFTlRfT0xEIF9JT1dSKCdWJywgODEsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnRfb2xkKQogI2VuZGlmCiAKICNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLCSBfSU9XKCdWJywgODIsIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaCBiL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGY2NjZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9idDgxOS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgICAgYnQ4MTkuaCAtIGJ0ODE5IG5vdGlmaWNhdGlvbnMKKworICAgIENvcHlyaWdodCAoQykgMjAwOSBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfQlQ4MTlfSF8KKyNkZWZpbmUgX0JUODE5X0hfCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisvKiB2NGwyX2RldmljZSBub3RpZmljYXRpb25zLiAqLworCisvKiBOZWVkZWQgdG8gcmVzZXQgdGhlIEZJRk8gYnVmZmVyIHdoZW4gY2hhbmdpbmcgdGhlIGlucHV0CisgICBvciB0aGUgdmlkZW8gc3RhbmRhcmQuICovCisjZGVmaW5lIEJUODE5X0ZJRk9fUkVTRVRfTE9XIAlfSU8oJ2InLCAwKQorI2RlZmluZSBCVDgxOV9GSUZPX1JFU0VUX0hJR0ggCV9JTygnYicsIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmggYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAppbmRleCA5ZWM0ZDU4Li45ZWJlODU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgY3gyMzQxNS82IGhlYWRlciBjb250YWluaW5nIGNvbW1vbiBkZWZpbmVzLgorICAgIGN4MjM0MTUvNi84IGhlYWRlciBjb250YWluaW5nIGNvbW1vbiBkZWZpbmVzLgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsNiArMjgsNyBAQAogZW51bSBjeDIzNDF4X2NhcCB7CiAJQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkkgPSAxIDw8IDAsCiAJQ1gyMzQxWF9DQVBfSEFTX1RTIAkgICA9IDEgPDwgMSwKKwlDWDIzNDFYX0NBUF9IQVNfQUMzIAkgICA9IDEgPDwgMiwKIH07CiAKIHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHsKQEAgLTQ3LDExICs0OCwxMiBAQAogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXEgYXVkaW9fc2FtcGxpbmdfZnJlcTsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyBhdWRpb19lbmNvZGluZzsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlIGF1ZGlvX2wyX2JpdHJhdGU7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGUgYXVkaW9fYWMzX2JpdHJhdGU7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fbW9kZSBhdWRpb19tb2RlOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uIGF1ZGlvX21vZGVfZXh0ZW5zaW9uOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzIGF1ZGlvX2VtcGhhc2lzOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX2NyYyBhdWRpb19jcmM7Ci0JdTE2IGF1ZGlvX3Byb3BlcnRpZXM7CisJdTMyIGF1ZGlvX3Byb3BlcnRpZXM7CiAJdTE2IGF1ZGlvX211dGU7CiAKIAkvKiB2aWRlbyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmggYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaAppbmRleCBkYjQzMWQ1Li4yYzNmYmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaApAQCAtMjEsNiArMjEsMTggQEAKICNpZm5kZWYgX0NYMjU4NDBfSF8KICNkZWZpbmUgX0NYMjU4NDBfSF8KIAorLyogTm90ZSB0aGF0IHRoZSBjeDI1ODQwIGRyaXZlciByZXF1aXJlcyB0aGF0IHRoZSBicmlkZ2UgZHJpdmVyIGNhbGxzIHRoZQorICAgdjRsMl9zdWJkZXYncyBpbml0IG9wZXJhdGlvbiBpbiBvcmRlciB0byBsb2FkIHRoZSBkcml2ZXIncyBmaXJtd2FyZS4KKyAgIFdpdGhvdXQgdGhpcyB0aGUgYXVkaW8gc3RhbmRhcmQgZGV0ZWN0aW9uIHdpbGwgZmFpbCBhbmQgeW91IHdpbGwKKyAgIG9ubHkgZ2V0IG1vbm8uCisKKyAgIFNpbmNlIGxvYWRpbmcgdGhlIGZpcm13YXJlIGlzIG9mdGVuIHByb2JsZW1hdGljIHdoZW4gdGhlIGRyaXZlciBpcworICAgY29tcGlsZWQgaW50byB0aGUga2VybmVsIEkgcmVjb21tZW5kIHBvc3Rwb25pbmcgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgICB1bnRpbCB0aGUgZmlyc3Qgb3BlbiBvZiB0aGUgdmlkZW8gZGV2aWNlLiBBbm90aGVyIHJlYXNvbiBmb3IKKyAgIHBvc3Rwb25pbmcgaXQgaXMgdGhhdCBsb2FkaW5nIHRoaXMgZmlybXdhcmUgdGFrZXMgYSBsb25nIHRpbWUgKHNlY29uZHMpCisgICBkdWUgdG8gdGhlIHNsb3cgaTJjIGJ1cyBzcGVlZC4gU28gaXQgd2lsbCBzcGVlZCB1cCB0aGUgYm9vdCBwcm9jZXNzIGlmCisgICB5b3UgY2FuIGF2b2lkIGxvYWRpbmcgdGhlIGZ3IGFzIGxvbmcgYXMgdGhlIHZpZGVvIGRldmljZSBpc24ndCB1c2VkLiAqLworCiBlbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgewogCS8qIENvbXBvc2l0ZSB2aWRlbyBpbnB1dHMgSW4xLUluOCAqLwogCUNYMjU4NDBfQ09NUE9TSVRFMSA9IDEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAppbmRleCA1YmYyZWEwLi43YjViOTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKQEAgLTExMSw2ICsxMTEsNyBAQAogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYVtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXNbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld1tJUl9LRVlUQUJfU0laRV07CkBAIC0xNTksNiArMTYwLDggQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMFtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19rYWlvbXlbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2RtMTEwNV9uZWNbSVJfS0VZVEFCX1NJWkVdOwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaCBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCmluZGV4IDAwZmE1N2UuLjA3OTYzZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCkBAIC0xNCw4ICsxNCw3IEBACiAJLyogVXNlZCB0byBhdm9pZCBmYXN0IHJlcGVhdGluZyAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgb2xkOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0ICAgICB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayAgICB3b3JrOwogCWNoYXIgICAgICAgICAgICAgICAgICAgcGh5c1szMl07CiAJaW50ICAgICAgICAgICAgICAgICAgICAoKmdldF9rZXkpKHN0cnVjdCBJUl9pMmMqLCB1MzIqLCB1MzIqKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292NzcyeC5oIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAppbmRleCBlMzkxZDU1Li41N2RiNDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL292NzcyeC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKQEAgLTEzLDggKzEzLDEzIEBACiAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKKy8qIGZvciBmbGFncyAqLworI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUCAgICAgMHgwMDAwMDAwMSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQICAgICAweDAwMDAwMDAyIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworCiBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIHsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZmxhZ3M7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayBsaW5rOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaAppbmRleCBjNWE2ZTIyLi5mZmY0MjM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgkvKiBmb3Igdm1hbGxvYygpICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciB2bWFsbG9jX3RvX3BhZ2UoKSAqLwpAQCAtMTEwLDYgKzExMSw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlpdGVtOwogCisJc3RydWN0IHY0bDJfZGV2aWNlIAkJdjRsMl9kZXY7CisKIAkvKiBkaWZmZXJlbnQgZGV2aWNlIGxvY2tzICovCiAJc3BpbmxvY2tfdAkJCXNsb2NrOwogCXN0cnVjdCBtdXRleAkJCWxvY2s7CkBAIC0xNDUsNiArMTQ4LDExIEBACiAJc3RydWN0IHNhYTcxNDZfZG1hCQlkX3JwczE7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTQ2X2RldiAqdG9fc2FhNzE0Nl9kZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9kZXYsIHY0bDJfZGV2KTsKK30KKwogLyogZnJvbSBzYWE3MTQ2X2kyYy5jICovCiBpbnQgc2FhNzE0Nl9pMmNfYWRhcHRlcl9wcmVwYXJlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwdGVyLCB1MzIgYml0cmF0ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKaW5kZXggYzhkMGIyMy4uZWVkNWZjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKQEAgLTE1MCwxNiArMTUwLDYgQEAKIAl1bnNpZ25lZCBpbnQgcmVzb3VyY2VzOwkvKiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBkZXZpY2UgKi8KIH07CiAKLSNkZWZpbmUgU0FBNzE0Nl9FWENMVVNJVkUJMHgxCi0jZGVmaW5lIFNBQTcxNDZfQkVGT1JFCQkweDIKLSNkZWZpbmUgU0FBNzE0Nl9BRlRFUgkJMHg0Ci0KLXN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMKLXsKLQl1bnNpZ25lZCBpbnQJY21kOwotCWludAkJZmxhZ3M7Ci19OwotCiAvKiBmbGFncyAqLwogI2RlZmluZSBTQUE3MTQ2X1VTRV9QT1JUX0JfRk9SX1ZCSQkweDIgICAgIC8qIHVzZSBpbnB1dCBwb3J0IGIgZm9yIHZiaSBoYXJkd2FyZSBidWcgd29ya2Fyb3VuZCAqLwogCkBAIC0xNzYsOCArMTY2LDEwIEBACiAJaW50IG51bV9zdGRzOwogCWludCAoKnN0ZF9jYWxsYmFjaykoc3RydWN0IHNhYTcxNDZfZGV2Kiwgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKik7CiAKLQlzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzICppb2N0bHM7Ci0JbG9uZyAoKmlvY3RsKShzdHJ1Y3Qgc2FhNzE0Nl9maCAqLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCS8qIHRoZSBleHRlbnNpb24gY2FuIG92ZXJyaWRlIHRoaXMgKi8KKwlzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgb3BzOworCS8qIHBvaW50ZXIgdG8gdGhlIHNhYTcxNDYgY29yZSBvcHMgKi8KKwljb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgKmNvcmVfb3BzOwogCiAJc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZiaV9mb3BzOwogfTsKQEAgLTIxMyw2ICsyMDUsNyBAQAogdm9pZCBzYWE3MTQ2X3NldF9ncGlvKHN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhLCB1OCBwaW4sIHU4IGRhdGEpOwogCiAvKiBmcm9tIHNhYTcxNDZfdmlkZW8uYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wczsKIGV4dGVybiBzdHJ1Y3Qgc2FhNzE0Nl91c2Vfb3BzIHNhYTcxNDZfdmlkZW9fdW9wczsKIGludCBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKTsKIGludCBzYWE3MTQ2X3N0b3BfcHJldmlldyhzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmggYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAppbmRleCBiNWRiZWZlLi4wZjM1MjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAorKysgYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaApAQCAtMSwxMCArMSwxMSBAQAogI2lmbmRlZiBfX0FTTV9TSF9NT0JJTEVfQ0VVX0hfXwogI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfQ0VVX0hfXwogCi0jaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2RlZmluZSBTSF9DRVVfRkxBR19VU0VfOEJJVF9CVVMJKDEgPDwgMCkgLyogdXNlICA4Yml0IGJ1cyB3aWR0aCAqLworI2RlZmluZSBTSF9DRVVfRkxBR19VU0VfMTZCSVRfQlVTCSgxIDw8IDEpIC8qIHVzZSAxNmJpdCBidXMgd2lkdGggKi8KIAogc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsgLyogU09DQU1fLi4uICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKIH07CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfQ0VVX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmggYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAppbmRleCA3NDQwZDkyLi4zNzAxMzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaApAQCAtNDUsNiArNDUsNyBAQAogCWludCBudW1fZm9ybWF0czsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnVzZXJfZm9ybWF0czsKIAlpbnQgbnVtX3VzZXJfZm9ybWF0czsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CQkvKiBQcmVzZXJ2ZSBmaWVsZCBvdmVyIGNsb3NlKCkgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAl2b2lkICpob3N0X3ByaXY7CQkvKiBQZXItZGV2aWNlIGhvc3QgcHJpdmF0ZSBkYXRhICovCiAJLyogc29jX2NhbWVyYS5jIHByaXZhdGUgY291bnQuIE9ubHkgYWNjZXNzZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCkBAIC03NCw3ICs3NSw4IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqZ2V0X2Zvcm1hdHMpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBpbnQsCiAJCQkgICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKik7Ci0JaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIF9fdTMyLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOworCWludCAoKnNldF9jcm9wKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCWludCAoKnRyeV9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJdm9pZCAoKmluaXRfdmlkZW9idWYpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqLAogCQkJICAgICAgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwpAQCAtOTMsMTMgKzk1LDE4IEBACiBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIHsKIAkvKiBDYW1lcmEgYnVzIGlkLCB1c2VkIHRvIG1hdGNoIGEgY2FtZXJhIGFuZCBhIGJ1cyAqLwogCWludCBidXNfaWQ7Ci0JLyogR1BJTyBudW1iZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IG1vZGVzICovCi0JdW5zaWduZWQgaW50IGdwaW87CiAJLyogUGVyIGNhbWVyYSBTT0NBTV9TRU5TT1JfKiBidXMgZmxhZ3MgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCS8qIE9wdGlvbmFsIGNhbGxiYWNrcyB0byBwb3dlciBvbiBvciBvZmYgYW5kIHJlc2V0IHRoZSBzZW5zb3IgKi8KIAlpbnQgKCpwb3dlcikoc3RydWN0IGRldmljZSAqLCBpbnQpOwogCWludCAoKnJlc2V0KShzdHJ1Y3QgZGV2aWNlICopOworCS8qCisJICogc29tZSBwbGF0Zm9ybXMgbWF5IHN1cHBvcnQgZGlmZmVyZW50IGRhdGEgd2lkdGhzIHRoYW4gdGhlIHNlbnNvcnMKKwkgKiBuYXRpdmUgb25lcyBkdWUgdG8gZGlmZmVyZW50IGRhdGEgbGluZSByb3V0aW5nLiBMZXQgdGhlIGJvYXJkIGNvZGUKKwkgKiBvdmVyd3JpdGUgdGhlIHdpZHRoIGZsYWdzLgorCSAqLworCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJdW5zaWduZWQgbG9uZyAoKnF1ZXJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfbGluayAqKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICp0b19zb2NfY2FtZXJhX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xNTksNyArMTY2LDggQEAKIAlpbnQgKCpyZWxlYXNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc3RhcnRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN0b3BfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXVuc2lnbmVkIGxvbmcgKCpxdWVyeV9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7CkBAIC0yMzksMTUgKzI0NywxOSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoCiAJCQl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb21tb25fZmxhZ3MsIGhzeW5jLCB2c3luYywgcGNsazsKKwl1bnNpZ25lZCBsb25nIGNvbW1vbl9mbGFncywgaHN5bmMsIHZzeW5jLCBwY2xrLCBkYXRhLCBidXN3aWR0aCwgbW9kZTsKIAogCWNvbW1vbl9mbGFncyA9IGNhbWVyYV9mbGFncyAmIGJ1c19mbGFnczsKIAogCWhzeW5jID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyk7CiAJdnN5bmMgPSBjb21tb25fZmxhZ3MgJiAoU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKTsKIAlwY2xrID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpOworCWRhdGEgPSBjb21tb25fZmxhZ3MgJiAoU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX0RBVEFfQUNUSVZFX0xPVyk7CisJbW9kZSA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSk7CisJYnVzd2lkdGggPSBjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKIAotCXJldHVybiAoIWhzeW5jIHx8ICF2c3luYyB8fCAhcGNsaykgPyAwIDogY29tbW9uX2ZsYWdzOworCXJldHVybiAoIWhzeW5jIHx8ICF2c3luYyB8fCAhcGNsayB8fCAhZGF0YSB8fCAhbW9kZSB8fCAhYnVzd2lkdGgpID8gMCA6CisJCWNvbW1vbl9mbGFnczsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3Moc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKaW5kZXggOWFhZjY1Mi4uMWJlNDYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCkBAIC0zNywxMCArMzcsOCBAQAogCS8qIG1vZHVsZSBzYWE3MTEwOiBqdXN0IGlkZW50IDEwMCAqLwogCVY0TDJfSURFTlRfU0FBNzExMCA9IDEwMCwKIAotCS8qIG1vZHVsZSBzYWE3MTExOiBqdXN0IGlkZW50IDEwMSAqLworCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDEtMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTExID0gMTAxLAotCi0JLyogbW9kdWxlIHNhYTcxMTU6IHJlc2VydmVkIHJhbmdlIDEwMi0xNDkgKi8KIAlWNEwyX0lERU5UX1NBQTcxMTMgPSAxMDMsCiAJVjRMMl9JREVOVF9TQUE3MTE0ID0gMTA0LAogCVY0TDJfSURFTlRfU0FBNzExNSA9IDEwNSwKQEAgLTYzLDQ1ICs2MSw5NyBAQAogCVY0TDJfSURFTlRfT1Y3NzIwID0gMjUxLAogCVY0TDJfSURFTlRfT1Y3NzI1ID0gMjUyLAogCi0JLyogQ29uZXhhbnQgTVBFRyBlbmNvZGVyL2RlY29kZXJzOiByZXNlcnZlZCByYW5nZSA0MTAtNDIwICovCisJLyogbW9kdWxlIHNhYTcxNDY6IHJlc2VydmVkIHJhbmdlIDMwMC0zMDkgKi8KKwlWNEwyX0lERU5UX1NBQTcxNDYgPSAzMDAsCisKKwkvKiBDb25leGFudCBNUEVHIGVuY29kZXIvZGVjb2RlcnM6IHJlc2VydmVkIHJhbmdlIDQwMC00MjAgKi8KKwlWNEwyX0lERU5UX0NYMjM0MThfODQzID0gNDAzLCAvKiBJbnRlZ3JhdGVkIEEvViBEZWNvZGVyIG9uIHRoZSAnNDE4ICovCiAJVjRMMl9JREVOVF9DWDIzNDE1ID0gNDE1LAogCVY0TDJfSURFTlRfQ1gyMzQxNiA9IDQxNiwKIAlWNEwyX0lERU5UX0NYMjM0MTggPSA0MTgsCiAKKwkvKiBtb2R1bGUgYXUwODI4ICovCisJVjRMMl9JREVOVF9BVTA4MjggPSA4MjgsCisKKwkvKiBtb2R1bGUgaW5keWNhbToganVzdCBpZGVudCAyMDAwICovCisJVjRMMl9JREVOVF9JTkRZQ0FNID0gMjAwMCwKKworCS8qIG1vZHVsZSBidDgxOTogcmVzZXJ2ZWQgcmFuZ2UgODEwLTgxOSAqLworCVY0TDJfSURFTlRfQlQ4MTVBID0gODE1LAorCVY0TDJfSURFTlRfQlQ4MTdBID0gODE3LAorCVY0TDJfSURFTlRfQlQ4MTlBID0gODE5LAorCisJLyogbW9kdWxlIGJ0ODU2OiBqdXN0IGlkZW50IDg1NiAqLworCVY0TDJfSURFTlRfQlQ4NTYgPSA4NTYsCisKKwkvKiBtb2R1bGUgYnQ4NjY6IGp1c3QgaWRlbnQgODY2ICovCisJVjRMMl9JREVOVF9CVDg2NiA9IDg2NiwKKworCS8qIG1vZHVsZSBrczAxMjc6IHJlc2VydmVkIHJhbmdlIDExMjAtMTEyOSAqLworCVY0TDJfSURFTlRfS1MwMTIyUyA9IDExMjIsCisJVjRMMl9JREVOVF9LUzAxMjcgID0gMTEyNywKKwlWNEwyX0lERU5UX0tTMDEyN0IgPSAxMTI4LAorCiAJLyogbW9kdWxlIHZwMjdzbXB4OiBqdXN0IGlkZW50IDI3MDAgKi8KIAlWNEwyX0lERU5UX1ZQMjdTTVBYID0gMjcwMCwKIAorCS8qIG1vZHVsZSB2cHgzMjIwOiByZXNlcnZlZCByYW5nZTogMzIxMC0zMjI5ICovCisJVjRMMl9JREVOVF9WUFgzMjE0QyA9IDMyMTQsCisJVjRMMl9JREVOVF9WUFgzMjE2QiA9IDMyMTYsCisJVjRMMl9JREVOVF9WUFgzMjIwQSA9IDMyMjAsCisKIAkvKiBtb2R1bGUgdHZwNTE1MCAqLwogCVY0TDJfSURFTlRfVFZQNTE1MCA9IDUxNTAsCiAKKwkvKiBtb2R1bGUgc2FhNTI0NmE6IGp1c3QgaWRlbnQgNTI0NiAqLworCVY0TDJfSURFTlRfU0FBNTI0NkEgPSA1MjQ2LAorCisJLyogbW9kdWxlIHNhYTUyNDk6IGp1c3QgaWRlbnQgNTI0OSAqLworCVY0TDJfSURFTlRfU0FBNTI0OSA9IDUyNDksCisKIAkvKiBtb2R1bGUgY3M1MzQ1OiBqdXN0IGlkZW50IDUzNDUgKi8KIAlWNEwyX0lERU5UX0NTNTM0NSA9IDUzNDUsCiAKKwkvKiBtb2R1bGUgdGVhNjQxNWM6IGp1c3QgaWRlbnQgNjQxNSAqLworCVY0TDJfSURFTlRfVEVBNjQxNUMgPSA2NDE1LAorCisJLyogbW9kdWxlIHRlYTY0MjA6IGp1c3QgaWRlbnQgNjQyMCAqLworCVY0TDJfSURFTlRfVEVBNjQyMCA9IDY0MjAsCisKKwkvKiBtb2R1bGUgc2FhNjU4ODoganVzdCBpZGVudCA2NTg4ICovCisJVjRMMl9JREVOVF9TQUE2NTg4ID0gNjU4OCwKKwogCS8qIG1vZHVsZSBzYWE2NzUyaHM6IHJlc2VydmVkIHJhbmdlIDY3NTAtNjc1OSAqLwogCVY0TDJfSURFTlRfU0FBNjc1MkhTID0gNjc1MiwKIAlWNEwyX0lERU5UX1NBQTY3NTJIU19BQzMgPSA2NzUzLAogCisJLyogbW9kdWxlIGFkdjcxNzA6IGp1c3QgaWRlbnQgNzE3MCAqLworCVY0TDJfSURFTlRfQURWNzE3MCA9IDcxNzAsCisKKwkvKiBtb2R1bGUgYWR2NzE3NToganVzdCBpZGVudCA3MTc1ICovCisJVjRMMl9JREVOVF9BRFY3MTc1ID0gNzE3NSwKKworCS8qIG1vZHVsZSBzYWE3MTg1OiBqdXN0IGlkZW50IDcxODUgKi8KKwlWNEwyX0lERU5UX1NBQTcxODUgPSA3MTg1LAorCisJLyogbW9kdWxlIHNhYTcxOTE6IGp1c3QgaWRlbnQgNzE5MSAqLworCVY0TDJfSURFTlRfU0FBNzE5MSA9IDcxOTEsCisKIAkvKiBtb2R1bGUgd204NzM5OiBqdXN0IGlkZW50IDg3MzkgKi8KIAlWNEwyX0lERU5UX1dNODczOSA9IDg3MzksCiAKIAkvKiBtb2R1bGUgd204Nzc1OiBqdXN0IGlkZW50IDg3NzUgKi8KIAlWNEwyX0lERU5UX1dNODc3NSA9IDg3NzUsCiAKKwkvKiBtb2R1bGUgdGRhOTg0MDoganVzdCBpZGVudCA5ODQwICovCisJVjRMMl9JREVOVF9UREE5ODQwID0gOTg0MCwKKworCS8qIG1vZHVsZSBjYWZlX2NjaWMsIGp1c3QgaWRlbnQgODgwMSAqLworCVY0TDJfSURFTlRfQ0FGRSA9IDg4MDEsCisKIAkvKiBtb2R1bGUgdHc5OTEwOiBqdXN0IGlkZW50IDk5MTAgKi8KIAlWNEwyX0lERU5UX1RXOTkxMCA9IDk5MTAsCiAKLQkvKiBtb2R1bGUgY3M1MzEzMmE6IGp1c3QgaWRlbnQgNTMxMzIgKi8KLQlWNEwyX0lERU5UX0NTNTNsMzJBID0gNTMxMzIsCi0KLQkvKiBtb2R1bGUgdXBkNjQwMzFhOiBqdXN0IGlkZW50IDY0MDMxICovCi0JVjRMMl9JREVOVF9VUEQ2NDAzMUEgPSA2NDAzMSwKLQotCS8qIG1vZHVsZSB1cGQ2NDA4MzoganVzdCBpZGVudCA2NDA4MyAqLwotCVY0TDJfSURFTlRfVVBENjQwODMgPSA2NDA4MywKLQotCS8qIG1vZHVsZSBtNTI3OTA6IGp1c3QgaWRlbnQgNTI3OTAgKi8KLQlWNEwyX0lERU5UX001Mjc5MCA9IDUyNzkwLAotCiAJLyogbW9kdWxlIG1zcDM0MDA6IHJlc2VydmVkIHJhbmdlIDM0MDAwLTM0OTk5IGFuZCA0NDAwMC00NDk5OSAqLwogCVY0TDJfSURFTlRfTVNQWDRYWCAgPSAzNDAwMCwgLyogZ2VuZXJpYyBNU1BYNFhYIGlkZW50aWZpZXIsIG9ubHkKIAkJCQkJdXNlIGludGVybmFsbHkgKHR2ZWVwcm9tLmMpLiAqLwpAQCAtMTc4LDYgKzIyOCwxOCBAQAogCVY0TDJfSURFTlRfTVQ5VjAyMklYN0FUQwk9IDQ1MDEwLCAvKiBObyB3YXkgdG8gZGV0ZWN0ICJub3JtYWwiIEk3N0FUeCAqLwogCVY0TDJfSURFTlRfTVQ5VjAyMklYN0FUTQk9IDQ1MDE1LCAvKiBhbmQgImxlYWQgZnJlZSIgSUE3QVR4IGNoaXBzICovCiAJVjRMMl9JREVOVF9NVDlUMDMxCQk9IDQ1MDIwLAorCisJLyogbW9kdWxlIGNzNTMxMzJhOiBqdXN0IGlkZW50IDUzMTMyICovCisJVjRMMl9JREVOVF9DUzUzbDMyQSA9IDUzMTMyLAorCisJLyogbW9kdWxlIHVwZDY0MDMxYToganVzdCBpZGVudCA2NDAzMSAqLworCVY0TDJfSURFTlRfVVBENjQwMzFBID0gNjQwMzEsCisKKwkvKiBtb2R1bGUgdXBkNjQwODM6IGp1c3QgaWRlbnQgNjQwODMgKi8KKwlWNEwyX0lERU5UX1VQRDY0MDgzID0gNjQwODMsCisKKwkvKiBtb2R1bGUgbTUyNzkwOiBqdXN0IGlkZW50IDUyNzkwICovCisJVjRMMl9JREVOVF9NNTI3OTAgPSA1Mjc5MCwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCmluZGV4IDk1ZTc0ZjEuLjNhNjkwNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKQEAgLTEwMiwxMSArMTAyLDE1IEBACiBjb25zdCBjaGFyICp2NGwyX2N0cmxfZ2V0X25hbWUodTMyIGlkKTsKIGNvbnN0IGNoYXIgKip2NGwyX2N0cmxfZ2V0X21lbnUodTMyIGlkKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfZmlsbChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBzMzIgbWluLCBzMzIgbWF4LCBzMzIgc3RlcCwgczMyIGRlZik7Ci1pbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpOwogaW50IHY0bDJfY3RybF9xdWVyeV9tZW51KHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIGNvbnN0IGNoYXIgKiptZW51X2l0ZW1zKTsKICNkZWZpbmUgVjRMMl9DVFJMX01FTlVfSURTX0VORCAoMHhmZmZmZmZmZikKIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudV92YWxpZF9pdGVtcyhzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LCBjb25zdCB1MzIgKmlkcyk7CisKKy8qIE5vdGU6IGN0cmxfY2xhc3NlcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgdTMyIHBvaW50ZXJzLiBFYWNoIHUzMiBhcnJheSBpcyBhCisgICAwLXRlcm1pbmF0ZWQgYXJyYXkgb2YgY29udHJvbCBJRHMuIEVhY2ggYXJyYXkgbXVzdCBiZSBzb3J0ZWQgbG93IHRvIGhpZ2gKKyAgIGFuZCBiZWxvbmcgdG8gdGhlIHNhbWUgY29udHJvbCBjbGFzcy4gVGhlIGFycmF5IG9mIHUzMiBwb2ludGVycyBtdXN0IGFsc28KKyAgIGJlIHNvcnRlZCwgZnJvbSBsb3cgY2xhc3MgSURzIHRvIGhpZ2ggY2xhc3MgSURzLiAqLwogdTMyIHY0bDJfY3RybF9uZXh0KGNvbnN0IHUzMiAqIGNvbnN0ICpjdHJsX2NsYXNzZXMsIHUzMiBpZCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0OSw2ICsxNTMsMjEgQEAKIC8qIEluaXRpYWxpemUgYW4gdjRsMl9zdWJkZXYgd2l0aCBkYXRhIGZyb20gYW4gaTJjX2NsaWVudCBzdHJ1Y3QgKi8KIHZvaWQgdjRsMl9pMmNfc3ViZGV2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyAqb3BzKTsKKy8qIFJldHVybiBpMmMgY2xpZW50IGFkZHJlc3Mgb2YgdjRsMl9zdWJkZXYuICovCit1bnNpZ25lZCBzaG9ydCB2NGwyX2kyY19zdWJkZXZfYWRkcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKKworZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHsKKwlBRERSU19SQURJTywJLyogUmFkaW8gdHVuZXIgYWRkcmVzc2VzICovCisJQUREUlNfREVNT0QsCS8qIERlbW9kIHR1bmVyIGFkZHJlc3NlcyAqLworCUFERFJTX1RWLAkvKiBUViB0dW5lciBhZGRyZXNzZXMgKi8KKwkvKiBUViB0dW5lciBhZGRyZXNzZXMgaWYgZGVtb2QgaXMgcHJlc2VudCwgdGhpcyBleGNsdWRlcworCSAgIGFkZHJlc3NlcyB1c2VkIGJ5IHRoZSBkZW1vZHVsYXRvciBmcm9tIHRoZSBsaXN0IG9mCisJICAgY2FuZGlkYXRlcy4gKi8KKwlBRERSU19UVl9XSVRIX0RFTU9ELAorfTsKKy8qIFJldHVybiBhIGxpc3Qgb2YgSTJDIHR1bmVyIGFkZHJlc3NlcyB0byBwcm9iZS4gVXNlIG9ubHkgaWYgdGhlIHR1bmVyCisgICBhZGRyZXNzZXMgYXJlIHVua25vd24uICovCitjb25zdCB1bnNpZ25lZCBzaG9ydCAqdjRsMl9pMmNfdHVuZXJfYWRkcnMoZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTI4NCw0ICszMDMsNyBAQAogICAgYSB2NGwyX2dwaW8gc3RydWN0IGlmIGEgZGlyZWN0aW9uIGlzIGFsc28gbmVlZGVkLiAqLwogI2RlZmluZSBWSURJT0NfSU5UX1NfR1BJTwkJX0lPVygnZCcsIDExNywgdTMyKQogCisvKiBHZXQgaW5wdXQgc3RhdHVzLiBTYW1lIGFzIHRoZSBzdGF0dXMgZmllbGQgaW4gdGhlIHY0bDJfaW5wdXQgc3RydWN0LiAqLworI2RlZmluZSBWSURJT0NfSU5UX0dfSU5QVVRfU1RBVFVTCV9JT1IoJ2QnLCAxMTgsIHUzMikKKwogI2VuZGlmIC8qIFY0TDJfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggZTM2ZmFhYi4uMjA1OGRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtNDAsNiArNDAsOCBAQAogCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CiAJbG9uZyAoKmlvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlsb25nICgqdW5sb2NrZWRfaW9jdGwpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfdW5tYXBwZWRfYXJlYSkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsCisJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAJaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIAlpbnQgKCpvcGVuKSAoc3RydWN0IGZpbGUgKik7CiAJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBmaWxlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCmluZGV4IDU1ZTQxYWYuLjBkZDNlOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKQEAgLTMzLDcgKzMzLDkgQEAKICNkZWZpbmUgVjRMMl9ERVZJQ0VfTkFNRV9TSVpFIChCVVNfSURfU0laRSArIDE2KQogCiBzdHJ1Y3QgdjRsMl9kZXZpY2UgewotCS8qIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnRzIHRvIHRoaXMgc3RydWN0ICovCisJLyogZGV2LT5kcml2ZXJfZGF0YSBwb2ludHMgdG8gdGhpcyBzdHJ1Y3QuCisJICAgTm90ZTogZGV2IG1pZ2h0IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gcGFyZW50IGRldmljZQorCSAgIGFzIGlzIHRoZSBjYXNlIHdpdGggZS5nLiBJU0EgZGV2aWNlcy4gKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJLyogdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSByZWdpc3RlcmVkIHN1YmRldnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7CkBAIC00MiwzMyArNDQsNDMgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJLyogdW5pcXVlIGRldmljZSBuYW1lLCBieSBkZWZhdWx0IHRoZSBkcml2ZXIgbmFtZSArIGJ1cyBJRCAqLwogCWNoYXIgbmFtZVtWNEwyX0RFVklDRV9OQU1FX1NJWkVdOworCS8qIG5vdGlmeSBjYWxsYmFjayBjYWxsZWQgYnkgc29tZSBzdWItZGV2aWNlcy4gKi8KKwl2b2lkICgqbm90aWZ5KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJdW5zaWduZWQgaW50IG5vdGlmaWNhdGlvbiwgdm9pZCAqYXJnKTsKIH07CiAKLS8qIEluaXRpYWxpemUgdjRsMl9kZXYgYW5kIG1ha2UgZGV2LT5kcml2ZXJfZGF0YSBwb2ludCB0byB2NGwyX2RldiAqLworLyogSW5pdGlhbGl6ZSB2NGwyX2RldiBhbmQgbWFrZSBkZXYtPmRyaXZlcl9kYXRhIHBvaW50IHRvIHY0bDJfZGV2LgorICAgZGV2IG1heSBiZSBOVUxMIGluIHJhcmUgY2FzZXMgKElTQSBkZXZpY2VzKS4gSW4gdGhhdCBjYXNlIHlvdQorICAgbXVzdCBmaWxsIGluIHRoZSB2NGwyX2Rldi0+bmFtZSBmaWVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqLwogaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpOwotLyogU2V0IHY0bDJfZGV2LT5kZXYtPmRyaXZlcl9kYXRhIHRvIE5VTEwgYW5kIHVucmVnaXN0ZXIgYWxsIHN1Yi1kZXZpY2VzICovCisvKiBTZXQgdjRsMl9kZXYtPmRldiB0byBOVUxMLiBDYWxsIHdoZW4gdGhlIFVTQiBwYXJlbnQgZGlzY29ubmVjdHMuCisgICBTaW5jZSB0aGUgcGFyZW50IGRpc2FwcGVhcnMgdGhpcyBlbnN1cmVzIHRoYXQgdjRsMl9kZXYgZG9lc24ndCBoYXZlIGFuCisgICBpbnZhbGlkIHBhcmVudCBwb2ludGVyLiAqLwordm9pZCB2NGwyX2RldmljZV9kaXNjb25uZWN0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpOworLyogVW5yZWdpc3RlciBhbGwgc3ViLWRldmljZXMgYW5kIGFueSBvdGhlciByZXNvdXJjZXMgcmVsYXRlZCB0byB2NGwyX2Rldi4gKi8KIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKIAogLyogUmVnaXN0ZXIgYSBzdWJkZXYgd2l0aCBhIHY0bDIgZGV2aWNlLiBXaGlsZSByZWdpc3RlcmVkIHRoZSBzdWJkZXYgbW9kdWxlCiAgICBpcyBtYXJrZWQgYXMgaW4tdXNlLiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGlzIG5vIGxvbmdlcgogICAgbG9hZGVkIHdoZW4geW91IGF0dGVtcHQgdG8gcmVnaXN0ZXIgaXQuICovCi1pbnQgX19tdXN0X2NoZWNrIHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CitpbnQgX19tdXN0X2NoZWNrIHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAorCQkJCQkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAvKiBVbnJlZ2lzdGVyIGEgc3ViZGV2IHdpdGggYSB2NGwyIGRldmljZS4gQ2FuIGFsc28gYmUgY2FsbGVkIGlmIHRoZSBzdWJkZXYKICAgIHdhc24ndCByZWdpc3RlcmVkLiBJbiB0aGF0IGNhc2UgaXQgd2lsbCBkbyBub3RoaW5nLiAqLwogdm9pZCB2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKIAogLyogSXRlcmF0ZSBvdmVyIGFsbCBzdWJkZXZzLiAqLwotI2RlZmluZSB2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsIGRldikJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkKKyNkZWZpbmUgdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCB2NGwyX2RldikJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJih2NGwyX2RldiktPnN1YmRldnMsIGxpc3QpCiAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgdGhlIGNvbmRpdGlvbi4KICAgIElnbm9yZSBhbnkgZXJyb3JzLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBhZGQgb3IgZGVsZXRlIGEgc3ViZGV2CiAgICB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIF9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKGRldiwgY29uZCwgbywgZiwgYXJncy4uLikgCQlcCisjZGVmaW5lIF9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKHY0bDJfZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSAJXAogCWRvIHsgCQkJCQkJCQlcCiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7IAkJCQlcCiAJCQkJCQkJCQlcCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgICAJXAorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKHY0bDJfZGV2KS0+c3ViZGV2cywgbGlzdCkgICAJXAogCQkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAlcCiAJCQkJc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAogCX0gd2hpbGUgKDApCkBAIC03NywxMiArODksMTIgQEAKICAgIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIG90aGVyIHRoYW4gMCBvciAtRU5PSU9DVExDTUQsIHRoZW4KICAgIHJldHVybiB3aXRoIHRoYXQgZXJyb3IgY29kZS4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhCiAgICBzdWJkZXYgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLwotI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSAgXAorI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIodjRsMl9kZXYsIGNvbmQsIG8sIGYsIGFyZ3MuLi4pIFwKICh7IAkJCQkJCQkJCVwKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOyAJCQkJCVwKIAlsb25nIGVyciA9IDA7IAkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJihkZXYpLT5zdWJkZXZzLCBsaXN0KSB7IAkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYodjRsMl9kZXYpLT5zdWJkZXZzLCBsaXN0KSB7IAkJXAogCQlpZiAoKGNvbmQpICYmIHNkLT5vcHMtPm8gJiYgc2QtPm9wcy0+by0+ZikgCQlcCiAJCQllcnIgPSBzZC0+b3BzLT5vLT5mKHNkICwgIyNhcmdzKTsgCQlcCiAJCWlmIChlcnIgJiYgZXJyICE9IC1FTk9JT0NUTENNRCkJCQkJXApAQCAtOTQsMTYgKzEwNiwxNiBAQAogLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyBtYXRjaGluZyBncnBfaWQgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGFkZCBvciBkZWxldGUKICAgIGEgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KLSNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF9hbGwoZGV2LCBncnBpZCwgbywgZiwgYXJncy4uLikgCQlcCi0JX192NGwyX2RldmljZV9jYWxsX3N1YmRldnMoZGV2LCAJCQkJXAorI2RlZmluZSB2NGwyX2RldmljZV9jYWxsX2FsbCh2NGwyX2RldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKHY0bDJfZGV2LCAJCQkJXAogCQkJIShncnBpZCkgfHwgc2QtPmdycF9pZCA9PSAoZ3JwaWQpLCBvLCBmICwgIyNhcmdzKQogCiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIGdycF9pZCAoaWYgMCwgdGhlbgogICAgbWF0Y2ggdGhlbSBhbGwpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IKICAgIC1FTk9JT0NUTENNRCwgdGhlbiByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuIE5vdGUgdGhhdCB5b3UgY2Fubm90CiAgICBhZGQgb3IgZGVsZXRlIGEgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KLSNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoZGV2LCBncnBpZCwgbywgZiwgYXJncy4uLikgCQlcCi0JX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKGRldiwJCQlcCisjZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHY0bDJfZGV2LCBncnBpZCwgbywgZiwgYXJncy4uLikgCVwKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIodjRsMl9kZXYsCQkJXAogCQkgICAgICAgIShncnBpZCkgfHwgc2QtPmdycF9pZCA9PSAoZ3JwaWQpLCBvLCBmICwgIyNhcmdzKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmgKaW5kZXggYjAxYzA0NC4uN2E0NTI5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+IC8qIG5lZWQgX191c2VyICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisjZGVmaW5lIF9fTUlOX1Y0TDEKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KQEAgLTI2Nyw2ICsyNjgsNyBAQAogCiAvKiAgVmlkZW8gc3RhbmRhcmQgZnVuY3Rpb25zICAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgKnY0bDJfbm9ybV90b19uYW1lKHY0bDJfc3RkX2lkIGlkKTsKK2V4dGVybiB2b2lkIHY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZChpbnQgaWQsIHN0cnVjdCB2NGwyX2ZyYWN0ICpmcmFtZXBlcmlvZCk7CiBleHRlcm4gaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCiAJCQkJICAgIGludCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CiAvKiBQcmludHMgdGhlIGlvY3RsIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKaW5kZXggMzdiMDllNS4uMWQxODFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaApAQCAtNzgsNiArNzgsOSBAQAogCWludCAoKnF1ZXJ5Y3RybCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyk7CiAJaW50ICgqZ19jdHJsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKIAlpbnQgKCpzX2N0cmwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworCWludCAoKmdfZXh0X2N0cmxzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKTsKKwlpbnQgKCpzX2V4dF9jdHJscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscyk7CisJaW50ICgqdHJ5X2V4dF9jdHJscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscyk7CiAJaW50ICgqcXVlcnltZW51KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtKTsKIAlsb25nICgqaW9jdGwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwpAQCAtMTEyLDkgKzExNSwxNyBAQAogCWludCAoKmdfdmJpX2RhdGEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqdmJpX2RhdGEpOwogCWludCAoKmdfc2xpY2VkX3ZiaV9jYXApKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApOwogCWludCAoKnNfc3RkX291dHB1dCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKTsKKwlpbnQgKCpxdWVyeXN0ZCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCk7CisJaW50ICgqZ19pbnB1dF9zdGF0dXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKTsKIAlpbnQgKCpzX3N0cmVhbSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSk7Ci0JaW50ICgqc19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKKwlpbnQgKCplbnVtX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZGVzYyk7CiAJaW50ICgqZ19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKKwlpbnQgKCp0cnlfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqc19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKKwlpbnQgKCpnX3Bhcm0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcmFtKTsKKwlpbnQgKCpzX3Bhcm0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcmFtKTsKKwlpbnQgKCplbnVtX2ZyYW1lc2l6ZXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSk7CisJaW50ICgqZW51bV9mcmFtZWludGVydmFscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpdmFsKTsKIH07CiAKIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgewpAQCAtMTMyLDcgKzE0Myw3IEBACiBzdHJ1Y3QgdjRsMl9zdWJkZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwogCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wczsKIAkvKiBuYW1lIG11c3QgYmUgdW5pcXVlICovCiAJY2hhciBuYW1lW1Y0TDJfU1VCREVWX05BTUVfU0laRV07CkBAIC0xNzEsNyArMTgyLDcgQEAKIAkvKiBvcHMtPmNvcmUgTVVTVCBiZSBzZXQgKi8KIAlCVUdfT04oIW9wcyB8fCAhb3BzLT5jb3JlKTsKIAlzZC0+b3BzID0gb3BzOwotCXNkLT5kZXYgPSBOVUxMOworCXNkLT52NGwyX2RldiA9IE5VTEw7CiAJc2QtPm5hbWVbMF0gPSAnXDAnOwogCXNkLT5ncnBfaWQgPSAwOwogCXNkLT5wcml2ID0gTlVMTDsKQEAgLTE4Niw0ICsxOTcsOSBAQAogCSghKHNkKSA/IC1FTk9ERVYgOiAoKChzZCkgJiYgKHNkKS0+b3BzLT5vICYmIChzZCktPm9wcy0+by0+ZikgPwlcCiAJCShzZCktPm9wcy0+by0+Zigoc2QpICwgIyNhcmdzKSA6IC1FTk9JT0NUTENNRCkpCiAKKy8qIFNlbmQgYSBub3RpZmljYXRpb24gdG8gdjRsMl9kZXZpY2UuICovCisjZGVmaW5lIHY0bDJfc3ViZGV2X25vdGlmeShzZCwgbm90aWZpY2F0aW9uLCBhcmcpCQkJICAgXAorCSgoIShzZCkgfHwgIShzZCktPnY0bDJfZGV2IHx8ICEoc2QpLT52NGwyX2Rldi0+bm90aWZ5KSA/IC1FTk9ERVYgOiBcCisJIChzZCktPnY0bDJfZGV2LT5ub3RpZnkoKHNkKSwgKG5vdGlmaWNhdGlvbiksIChhcmcpKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCmluZGV4IDg3NGYxMzQuLjFjNTk0NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisjZGVmaW5lIF9fTUlOX1Y0TDEKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggYmVkYzdmNi4uYWJkNDQzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgorI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qIGtub3duIGRvaSB2YWx1ZXMgKi8KQEAgLTIxNSw2ICsyMTYsMTAgQEAKIAkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CiB2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spOwogaW50IGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IGNpcHNvX3Y0X3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBjaXBzb192NF9yZXFfZGVsYXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKQEAgLTI0Nyw2ICsyNTIsMTggQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXJldHVybjsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAppbmRleCA3NDkwMTFlLi42MGViYmMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGNpcHNvX3Y0X2RvaTsKQEAgLTQwNiw2ICs0MDcsNyBAQAogICovCiBpbnQgbmV0bGJsX2VuYWJsZWQodm9pZCk7CiBpbnQgbmV0bGJsX3NvY2tfc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCisJCQl1MTYgZmFtaWx5LAogCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CiB2b2lkIG5ldGxibF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKTsKIGludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKQEAgLTQxMyw2ICs0MTUsOSBAQAogaW50IG5ldGxibF9jb25uX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAogCQkJc3RydWN0IHNvY2thZGRyICphZGRyLAogCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CitpbnQgbmV0bGJsX3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBuZXRsYmxfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBuZXRsYmxfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgdTE2IGZhbWlseSwKIAkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CkBAIC01MTksNyArNTI0LDggQEAKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKKwkJCQkgICAgICB1MTYgZmFtaWx5LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC01MzcsNiArNTQzLDE1IEBACiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRsYmxfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXJldHVybjsKK30KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHUxNiBmYW1pbHksCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKaW5kZXggNDI2ODk5ZS4uNTcxOGEwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKQEAgLTIyLDggKzIyLDkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKIHN0cnVjdCBzbmRfdGVhNTc1eDsKIApAQCAtMzUsMTEgKzM2LDEwIEBACiAKIHN0cnVjdCBzbmRfdGVhNTc1eCB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmQ7CQkvKiB2aWRlbyBkZXZpY2UgKi8KLQlzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm9wczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsJLyogdmlkZW8gZGV2aWNlICovCiAJaW50IGRldl9ucjsJCQkvKiByZXF1ZXN0ZWQgZGV2aWNlIG51bWJlciArIDEgKi8KLQlpbnQgdmRfcmVnaXN0ZXJlZDsJCS8qIHZpZGVvIGRldmljZSBpcyByZWdpc3RlcmVkICovCiAJaW50IHRlYTU3NTk7CQkJLyogNTc1OSBjaGlwIGlzIHByZXNlbnQgKi8KKwlpbnQgbXV0ZTsJCQkvKiBEZXZpY2UgaXMgbXV0ZWQ/ICovCiAJdW5zaWduZWQgaW50IGZyZXFfZml4dXA7CS8qIGNyeXN0YWwgb25ib2FyZCAqLwogCXVuc2lnbmVkIGludCB2YWw7CQkvKiBodyB2YWx1ZSAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsJCS8qIGZyZXF1ZW5jeSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9icm9hZHNoZWV0ZmIuaCBiL2luY2x1ZGUvdmlkZW8vYnJvYWRzaGVldGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ODUzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vYnJvYWRzaGVldGZiLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGJyb2Fkc2hlZXRmYi5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBicm9hZHNoZWV0IGZyYW1lYnVmZmVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBKYXlhIEt1bWFyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0JST0FEU0hFRVRGQl9IXworI2RlZmluZSBfTElOVVhfQlJPQURTSEVFVEZCX0hfCisKKy8qIEJyb2Fkc2hlZXQgY29tbWFuZCBkZWZpbmVzICovCisjZGVmaW5lIEJTX0NNRF9JTklUX1NZU19SVU4JMHgwNgorI2RlZmluZSBCU19DTURfSU5JVF9EU1BFX0NGRwkweDA5CisjZGVmaW5lIEJTX0NNRF9JTklUX0RTUEVfVE1HCTB4MEEKKyNkZWZpbmUgQlNfQ01EX0lOSVRfUk9UTU9ERQkweDBCCisjZGVmaW5lIEJTX0NNRF9SRF9SRUcJCTB4MTAKKyNkZWZpbmUgQlNfQ01EX1dSX1JFRwkJMHgxMQorI2RlZmluZSBCU19DTURfTERfSU1HCQkweDIwCisjZGVmaW5lIEJTX0NNRF9MRF9JTUdfQVJFQQkweDIyCisjZGVmaW5lIEJTX0NNRF9MRF9JTUdfRU5ECTB4MjMKKyNkZWZpbmUgQlNfQ01EX1dBSVRfRFNQRV9UUkcJMHgyOAorI2RlZmluZSBCU19DTURfV0FJVF9EU1BFX0ZSRU5ECTB4MjkKKyNkZWZpbmUgQlNfQ01EX1JEX1dGTV9JTkZPCTB4MzAKKyNkZWZpbmUgQlNfQ01EX1VQRF9JTklUCQkweDMyCisjZGVmaW5lIEJTX0NNRF9VUERfRlVMTAkJMHgzMworI2RlZmluZSBCU19DTURfVVBEX0dEUlZfQ0xSCTB4MzcKKworLyogQnJvYWRzaGVldCBwaW4gaW50ZXJmYWNlIHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgQlNfQ1MJMHgwMQorI2RlZmluZSBCU19EQyAJMHgwMgorI2RlZmluZSBCU19XUiAJMHgwMworCisvKiBzdHJ1Y3QgdXNlZCBieSBicm9hZHNoZWV0LiBib2FyZCBzcGVjaWZpYyBzdHVmZiBjb21lcyBmcm9tICpib2FyZCAqLworc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgeworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBicm9hZHNoZWV0X2JvYXJkICpib2FyZDsKKwl2b2lkICgqd3JpdGVfcmVnKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1MTYgcmVnLCB1MTYgdmFsKTsKKwl1MTYgKCpyZWFkX3JlZykoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdTE2IHJlZyk7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Cit9OworCisvKiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcyAqLworc3RydWN0IGJyb2Fkc2hlZXRfYm9hcmQgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludCAoKmluaXQpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICopOworCWludCAoKndhaXRfZm9yX3JkeSkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7CisJdm9pZCAoKnNldF9jdGwpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHVuc2lnbmVkIGNoYXIsIHU4KTsKKwl2b2lkICgqc2V0X2hkYikoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdTE2KTsKKwl1MTYgKCpnZXRfaGRiKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7CisJaW50ICgqZ2V0X3BhbmVsX3R5cGUpKHZvaWQpOworCWludCAoKnNldHVwX2lycSkoc3RydWN0IGZiX2luZm8gKik7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDdkY2RlN2UuLjYxOWMxYmEgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGlyZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91dGltZS5oPgogCkBAIC0xNjYsOCArMTY3LDYgQEAKIHN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGNvdW50Owogc3RhdGljIF9faW5pdGRhdGEgbG9mZl90IHRoaXNfaGVhZGVyLCBuZXh0X2hlYWRlcjsKIAotc3RhdGljIF9faW5pdGRhdGEgaW50IGRyeV9ydW47Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZWF0KHVuc2lnbmVkIG4pCiB7CiAJdmljdGltICs9IG47CkBAIC0yMjksMTAgKzIyOCw2IEBACiAJcGFyc2VfaGVhZGVyKGNvbGxlY3RlZCk7CiAJbmV4dF9oZWFkZXIgPSB0aGlzX2hlYWRlciArIE5fQUxJR04obmFtZV9sZW4pICsgYm9keV9sZW47CiAJbmV4dF9oZWFkZXIgPSAobmV4dF9oZWFkZXIgKyAzKSAmIH4zOwotCWlmIChkcnlfcnVuKSB7Ci0JCXJlYWRfaW50byhuYW1lX2J1ZiwgTl9BTElHTihuYW1lX2xlbiksIEdvdE5hbWUpOwotCQlyZXR1cm4gMDsKLQl9CiAJc3RhdGUgPSBTa2lwSXQ7CiAJaWYgKG5hbWVfbGVuIDw9IDAgfHwgbmFtZV9sZW4gPiBQQVRIX01BWCkKIAkJcmV0dXJuIDA7CkBAIC0zMDMsOCArMjk4LDYgQEAKIAkJZnJlZV9oYXNoKCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoZHJ5X3J1bikKLQkJcmV0dXJuIDA7CiAJY2xlYW5fcGF0aChjb2xsZWN0ZWQsIG1vZGUpOwogCWlmIChTX0lTUkVHKG1vZGUpKSB7CiAJCWludCBtbCA9IG1heWJlX2xpbmsoKTsKQEAgLTQxNywxNCArNDEwLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2dlbmVyaWMuaD4KIAotc3RhdGljIGNoYXIgKiBfX2luaXQgdW5wYWNrX3RvX3Jvb3RmcyhjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgaW50IGNoZWNrX29ubHkpCitzdGF0aWMgY2hhciAqIF9faW5pdCB1bnBhY2tfdG9fcm9vdGZzKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQogewogCWludCB3cml0dGVuOwogCWRlY29tcHJlc3NfZm4gZGVjb21wcmVzczsKIAljb25zdCBjaGFyICpjb21wcmVzc19uYW1lOwogCXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgbXNnX2J1Zls2NF07CiAKLQlkcnlfcnVuID0gY2hlY2tfb25seTsKIAloZWFkZXJfYnVmID0ga21hbGxvYygxMTAsIEdGUF9LRVJORUwpOwogCXN5bWxpbmtfYnVmID0ga21hbGxvYyhQQVRIX01BWCArIE5fQUxJR04oUEFUSF9NQVgpICsgMSwgR0ZQX0tFUk5FTCk7CiAJbmFtZV9idWYgPSBrbWFsbG9jKE5fQUxJR04oUEFUSF9NQVgpLCBHRlBfS0VSTkVMKTsKQEAgLTUyMywxMCArNTE1LDU3IEBACiAJaW5pdHJkX2VuZCA9IDA7CiB9CiAKKyNkZWZpbmUgQlVGX1NJWkUgMTAyNAorc3RhdGljIHZvaWQgX19pbml0IGNsZWFuX3Jvb3Rmcyh2b2lkKQoreworCWludCBmZDsKKwl2b2lkICpidWY7CisJc3RydWN0IGxpbnV4X2RpcmVudDY0ICpkaXJwOworCWludCBjb3VudDsKKworCWZkID0gc3lzX29wZW4oIi8iLCBPX1JET05MWSwgMCk7CisJV0FSTl9PTihmZCA8IDApOworCWlmIChmZCA8IDApCisJCXJldHVybjsKKwlidWYgPSBremFsbG9jKEJVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlXQVJOX09OKCFidWYpOworCWlmICghYnVmKSB7CisJCXN5c19jbG9zZShmZCk7CisJCXJldHVybjsKKwl9CisKKwlkaXJwID0gYnVmOworCWNvdW50ID0gc3lzX2dldGRlbnRzNjQoZmQsIGRpcnAsIEJVRl9TSVpFKTsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaW50IHJldDsKKworCQkJcmV0ID0gc3lzX25ld2xzdGF0KGRpcnAtPmRfbmFtZSwgJnN0KTsKKwkJCVdBUk5fT05fT05DRShyZXQpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkJc3lzX3JtZGlyKGRpcnAtPmRfbmFtZSk7CisJCQkJZWxzZQorCQkJCQlzeXNfdW5saW5rKGRpcnAtPmRfbmFtZSk7CisJCQl9CisKKwkJCWNvdW50IC09IGRpcnAtPmRfcmVjbGVuOworCQkJZGlycCA9ICh2b2lkICopZGlycCArIGRpcnAtPmRfcmVjbGVuOworCQl9CisJCWRpcnAgPSBidWY7CisJCW1lbXNldChidWYsIDAsIEJVRl9TSVpFKTsKKwkJY291bnQgPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOworCX0KKworCXN5c19jbG9zZShmZCk7CisJa2ZyZWUoYnVmKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfcm9vdGZzKHZvaWQpCiB7CiAJY2hhciAqZXJyID0gdW5wYWNrX3RvX3Jvb3RmcyhfX2luaXRyYW1mc19zdGFydCwKLQkJCSBfX2luaXRyYW1mc19lbmQgLSBfX2luaXRyYW1mc19zdGFydCwgMCk7CisJCQkgX19pbml0cmFtZnNfZW5kIC0gX19pbml0cmFtZnNfc3RhcnQpOwogCWlmIChlcnIpCiAJCXBhbmljKGVycik7CS8qIEZhaWxlZCB0byBkZWNvbXByZXNzIElOVEVSTkFMIGluaXRyYW1mcyAqLwogCWlmIChpbml0cmRfc3RhcnQpIHsKQEAgLTUzNCwxMyArNTczLDE1IEBACiAJCWludCBmZDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgaWYgaW1hZ2UgaXMgaW5pdHJhbWZzLi4uIik7CiAJCWVyciA9IHVucGFja190b19yb290ZnMoKGNoYXIgKilpbml0cmRfc3RhcnQsCi0JCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0LCAxKTsKKwkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpOwogCQlpZiAoIWVycikgewogCQkJcHJpbnRrKCIgaXQgaXNcbiIpOwotCQkJdW5wYWNrX3RvX3Jvb3RmcygoY2hhciAqKWluaXRyZF9zdGFydCwKLQkJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0LCAwKTsKIAkJCWZyZWVfaW5pdHJkKCk7CiAJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWNsZWFuX3Jvb3RmcygpOworCQkJdW5wYWNrX3RvX3Jvb3RmcyhfX2luaXRyYW1mc19zdGFydCwKKwkJCQkgX19pbml0cmFtZnNfZW5kIC0gX19pbml0cmFtZnNfc3RhcnQpOwogCQl9CiAJCXByaW50aygiaXQgaXNuJ3QgKCVzKTsgbG9va3MgbGlrZSBhbiBpbml0cmRcbiIsIGVycik7CiAJCWZkID0gc3lzX29wZW4oIi9pbml0cmQuaW1hZ2UiLCBPX1dST05MWXxPX0NSRUFULCAwNzAwKTsKQEAgLTU1Myw3ICs1OTQsNyBAQAogI2Vsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5wYWNraW5nIGluaXRyYW1mcy4uLiIpOwogCQllcnIgPSB1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAotCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMCk7CisJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKCIgZmFpbGVkIVxuIik7CiAJCQlwcmludGsoS0VSTl9FTUVSRyAiJXNcbiIsIGVycik7CmRpZmYgLS1naXQgYS9rZXJuZWwvYXN5bmMuYyBiL2tlcm5lbC9hc3luYy5jCmluZGV4IGY1NjU4OTEuLjk2OGVmOTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hc3luYy5jCisrKyBiL2tlcm5lbC9hc3luYy5jCkBAIC00OSw2ICs0OSw3IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM4NywyMCArMzg4LDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFzeW5jX2luaXQodm9pZCkKIHsKLQlpZiAoYXN5bmNfZW5hYmxlZCkKLQkJaWYgKElTX0VSUihrdGhyZWFkX3J1bihhc3luY19tYW5hZ2VyX3RocmVhZCwgTlVMTCwKLQkJCQkgICAgICAgImFzeW5jL21nciIpKSkKLQkJCWFzeW5jX2VuYWJsZWQgPSAwOworCWFzeW5jX2VuYWJsZWQgPQorCQkhSVNfRVJSKGt0aHJlYWRfcnVuKGFzeW5jX21hbmFnZXJfdGhyZWFkLCBOVUxMLCAiYXN5bmMvbWdyIikpOworCisJV0FSTl9PTighYXN5bmNfZW5hYmxlZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2FzeW5jKGNoYXIgKnN0cikKLXsKLQlhc3luY19lbmFibGVkID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgiZmFzdGJvb3QiLCBzZXR1cF9hc3luYyk7Ci0KLQogY29yZV9pbml0Y2FsbChhc3luY19pbml0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggNDM4NzAxYS4uNmI1MGEwMiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTExNCw3ICsxMTQsOSBAQAogfTsKIAogLyoKLSAqIFNwbGl0IHRoZSBnbG9iYWwgZnV0ZXhfbG9jayBpbnRvIGV2ZXJ5IGhhc2ggbGlzdCBsb2NrLgorICogSGFzaCBidWNrZXRzIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSBmdXRleF9rZXlzIHRoYXQgaGFzaCB0byB0aGUgc2FtZQorICogbG9jYXRpb24uICBFYWNoIGtleSBtYXkgaGF2ZSBtdWx0aXBsZSBmdXRleF9xIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaCB0YXNrCisgKiB3YWl0aW5nIG9uIGEgZnV0ZXguCiAgKi8KIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCB7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtMTg5LDggKzE5MSw3IEBACiAvKioKICAqIGdldF9mdXRleF9rZXkgLSBHZXQgcGFyYW1ldGVycyB3aGljaCBhcmUgdGhlIGtleXMgZm9yIGEgZnV0ZXguCiAgKiBAdWFkZHI6IHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKLSAqIEBzaGFyZWQ6IE5VTEwgZm9yIGEgUFJPQ0VTU19QUklWQVRFIGZ1dGV4LAotICoJJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSBmb3IgYSBQUk9DRVNTX1NIQVJFRCBmdXRleAorICogQGZzaGFyZWQ6IDAgZm9yIGEgUFJPQ0VTU19QUklWQVRFIGZ1dGV4LCAxIGZvciBQUk9DRVNTX1NIQVJFRAogICogQGtleTogYWRkcmVzcyB3aGVyZSByZXN1bHQgaXMgc3RvcmVkLgogICoKICAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAKQEAgLTIwMCw5ICsyMDEsNyBAQAogICogb2Zmc2V0X3dpdGhpbl9wYWdlKS4gIEZvciBwcml2YXRlIG1hcHBpbmdzLCBpdCdzICh1YWRkciwgY3VycmVudC0+bW0pLgogICogV2UgY2FuIHVzdWFsbHkgd29yayBvdXQgdGhlIGluZGV4IHdpdGhvdXQgc3dhcHBpbmcgaW4gdGhlIHBhZ2UuCiAgKgotICogZnNoYXJlZCBpcyBOVUxMIGZvciBQUk9DRVNTX1BSSVZBVEUgZnV0ZXhlcwotICogRm9yIG90aGVyIGZ1dGV4ZXMsIGl0IHBvaW50cyB0byAmY3VycmVudC0+bW0tPm1tYXBfc2VtIGFuZAotICogY2FsbGVyIG11c3QgaGF2ZSB0YWtlbiB0aGUgcmVhZGVyIGxvY2suIGJ1dCBOT1QgYW55IHNwaW5sb2Nrcy4KKyAqIGxvY2tfcGFnZSgpIG1pZ2h0IHNsZWVwLCB0aGUgY2FsbGVyIHNob3VsZCBub3QgaG9sZCBhIHNwaW5sb2NrLgogICovCiBzdGF0aWMgaW50IGdldF9mdXRleF9rZXkodTMyIF9fdXNlciAqdWFkZHIsIGludCBmc2hhcmVkLCB1bmlvbiBmdXRleF9rZXkgKmtleSkKIHsKQEAgLTI5OSw0MSArMjk4LDYgQEAKIAlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7CiB9CiAKLS8qCi0gKiBGYXVsdCBoYW5kbGluZy4KLSAqLwotc3RhdGljIGludCBmdXRleF9oYW5kbGVfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgYXR0ZW1wdCkKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlpbnQgcmV0ID0gLUVGQVVMVDsKLQotCWlmIChhdHRlbXB0ID4gMikKLQkJcmV0dXJuIHJldDsKLQotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7Ci0JaWYgKHZtYSAmJiBhZGRyZXNzID49IHZtYS0+dm1fc3RhcnQgJiYKLQkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKLQkJaW50IGZhdWx0OwotCQlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCAxKTsKLQkJaWYgKHVubGlrZWx5KChmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkpIHsKLSNpZiAwCi0JCQkvKiBYWFg6IGxldCdzIGRvIHRoaXMgd2hlbiB3ZSB2ZXJpZnkgaXQgaXMgT0sgKi8KLQkJCWlmIChyZXQgJiBWTV9GQVVMVF9PT00pCi0JCQkJcmV0ID0gLUVOT01FTTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJcmV0ID0gMDsKLQkJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKQotCQkJCWN1cnJlbnQtPm1hal9mbHQrKzsKLQkJCWVsc2UKLQkJCQljdXJyZW50LT5taW5fZmx0Kys7Ci0JCX0KLQl9Ci0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQogCiAvKgogICogUEkgY29kZToKQEAgLTU4OSwxMCArNTUzLDkgQEAKIAkgKiBUaGUgd2FpdGluZyB0YXNrIGNhbiBmcmVlIHRoZSBmdXRleF9xIGFzIHNvb24gYXMgdGhpcyBpcyB3cml0dGVuLAogCSAqIHdpdGhvdXQgdGFraW5nIGFueSBsb2Nrcy4gIFRoaXMgbXVzdCBjb21lIGxhc3QuCiAJICoKLQkgKiBBIG1lbW9yeSBiYXJyaWVyIGlzIHJlcXVpcmVkIGhlcmUgdG8gcHJldmVudCB0aGUgZm9sbG93aW5nIHN0b3JlCi0JICogdG8gbG9ja19wdHIgZnJvbSBnZXR0aW5nIGFoZWFkIG9mIHRoZSB3YWtldXAuIENsZWFyaW5nIHRoZSBsb2NrCi0JICogYXQgdGhlIGVuZCBvZiB3YWtlX3VwX2FsbCgpIGRvZXMgbm90IHByZXZlbnQgdGhpcyBzdG9yZSBmcm9tCi0JICogbW92aW5nLgorCSAqIEEgbWVtb3J5IGJhcnJpZXIgaXMgcmVxdWlyZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgc3RvcmUgdG8KKwkgKiBsb2NrX3B0ciBmcm9tIGdldHRpbmcgYWhlYWQgb2YgdGhlIHdha2V1cC4gQ2xlYXJpbmcgdGhlIGxvY2sgYXQgdGhlCisJICogZW5kIG9mIHdha2VfdXAoKSBkb2VzIG5vdCBwcmV2ZW50IHRoaXMgc3RvcmUgZnJvbSBtb3ZpbmcuCiAJICovCiAJc21wX3dtYigpOwogCXEtPmxvY2tfcHRyID0gTlVMTDsKQEAgLTY5Miw5ICs2NTUsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG91YmxlX3VubG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpCit7CisJc3Bpbl91bmxvY2soJmhiMS0+bG9jayk7CisJaWYgKGhiMSAhPSBoYjIpCisJCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOworfQorCiAvKgotICogV2FrZSB1cCBhbGwgd2FpdGVycyBoYXNoZWQgb24gdGhlIHBoeXNpY2FsIHBhZ2UgdGhhdCBpcyBtYXBwZWQKLSAqIHRvIHRoaXMgdmlydHVhbCBhZGRyZXNzOgorICogV2FrZSB1cCB3YWl0ZXJzIG1hdGNoaW5nIGJpdHNldCBxdWV1ZWQgb24gdGhpcyBmdXRleCAodWFkZHIpLgogICovCiBzdGF0aWMgaW50IGZ1dGV4X3dha2UodTMyIF9fdXNlciAqdWFkZHIsIGludCBmc2hhcmVkLCBpbnQgbnJfd2FrZSwgdTMyIGJpdHNldCkKIHsKQEAgLTc1MCw5ICs3MjAsOSBAQAogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCAqaGIyOwogCXN0cnVjdCBwbGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCBmdXRleF9xICp0aGlzLCAqbmV4dDsKLQlpbnQgcmV0LCBvcF9yZXQsIGF0dGVtcHQgPSAwOworCWludCByZXQsIG9wX3JldDsKIAotcmV0cnlmdWxsOgorcmV0cnk6CiAJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZzaGFyZWQsICZrZXkxKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKQEAgLTc2MywxNiArNzMzLDEzIEBACiAJaGIxID0gaGFzaF9mdXRleCgma2V5MSk7CiAJaGIyID0gaGFzaF9mdXRleCgma2V5Mik7CiAKLXJldHJ5OgogCWRvdWJsZV9sb2NrX2hiKGhiMSwgaGIyKTsKLQorcmV0cnlfcHJpdmF0ZToKIAlvcF9yZXQgPSBmdXRleF9hdG9taWNfb3BfaW51c2VyKG9wLCB1YWRkcjIpOwogCWlmICh1bmxpa2VseShvcF9yZXQgPCAwKSkgewogCQl1MzIgZHVtbXk7CiAKLQkJc3Bpbl91bmxvY2soJmhiMS0+bG9jayk7Ci0JCWlmIChoYjEgIT0gaGIyKQotCQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisJCWRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpOwogCiAjaWZuZGVmIENPTkZJR19NTVUKIAkJLyoKQEAgLTc4OCwyNiArNzU1LDE2IEBACiAJCQlnb3RvIG91dF9wdXRfa2V5czsKIAkJfQogCi0JCS8qCi0JCSAqIGZ1dGV4X2F0b21pY19vcF9pbnVzZXIgbmVlZHMgdG8gYm90aCByZWFkIGFuZCB3cml0ZQotCQkgKiAqKGludCBfX3VzZXIgKil1YWRkcjIsIGJ1dCB3ZSBjYW4ndCBtb2RpZnkgaXQKLQkJICogbm9uLWF0b21pY2FsbHkuICBUaGVyZWZvcmUsIGlmIGdldF91c2VyIGJlbG93IGlzIG5vdAotCQkgKiBlbm91Z2gsIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBmYXVsdCBvdXJzZWx2ZXMsIHdoaWxlCi0JCSAqIHN0aWxsIGhvbGRpbmcgdGhlIG1tYXBfc2VtLgotCQkgKi8KLQkJaWYgKGF0dGVtcHQrKykgewotCQkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyMiwKLQkJCQkJCSBhdHRlbXB0KTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXRfcHV0X2tleXM7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KIAkJcmV0ID0gZ2V0X3VzZXIoZHVtbXksIHVhZGRyMik7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBvdXRfcHV0X2tleXM7CiAKLQkJZ290byByZXRyeWZ1bGw7CisJCWlmICghZnNoYXJlZCkKKwkJCWdvdG8gcmV0cnlfcHJpdmF0ZTsKKworCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5MSk7CisJCWdvdG8gcmV0cnk7CiAJfQogCiAJaGVhZCA9ICZoYjEtPmNoYWluOwpAQCAtODM0LDkgKzc5MSw3IEBACiAJCXJldCArPSBvcF9yZXQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmhiMS0+bG9jayk7Ci0JaWYgKGhiMSAhPSBoYjIpCi0JCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOworCWRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpOwogb3V0X3B1dF9rZXlzOgogCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOwogb3V0X3B1dF9rZXkxOgpAQCAtODY5LDYgKzgyNCw3IEBACiAJaGIxID0gaGFzaF9mdXRleCgma2V5MSk7CiAJaGIyID0gaGFzaF9mdXRleCgma2V5Mik7CiAKK3JldHJ5X3ByaXZhdGU6CiAJZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogCiAJaWYgKGxpa2VseShjbXB2YWwgIT0gTlVMTCkpIHsKQEAgLTg3NywxNiArODMzLDE4IEBACiAJCXJldCA9IGdldF9mdXRleF92YWx1ZV9sb2NrZWQoJmN1cnZhbCwgdWFkZHIxKTsKIAogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJc3Bpbl91bmxvY2soJmhiMS0+bG9jayk7Ci0JCQlpZiAoaGIxICE9IGhiMikKLQkJCQlzcGluX3VubG9jaygmaGIyLT5sb2NrKTsKKwkJCWRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpOwogCiAJCQlyZXQgPSBnZXRfdXNlcihjdXJ2YWwsIHVhZGRyMSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X3B1dF9rZXlzOwogCi0JCQlpZiAoIXJldCkKLQkJCQlnb3RvIHJldHJ5OworCQkJaWYgKCFmc2hhcmVkKQorCQkJCWdvdG8gcmV0cnlfcHJpdmF0ZTsKIAotCQkJZ290byBvdXRfcHV0X2tleXM7CisJCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTEpOworCQkJZ290byByZXRyeTsKIAkJfQogCQlpZiAoY3VydmFsICE9ICpjbXB2YWwpIHsKIAkJCXJldCA9IC1FQUdBSU47CkBAIC05MjMsOSArODgxLDcgQEAKIAl9CiAKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmhiMS0+bG9jayk7Ci0JaWYgKGhiMSAhPSBoYjIpCi0JCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOworCWRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpOwogCiAJLyogZHJvcF9mdXRleF9rZXlfcmVmcygpIG11c3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHNwaW5sb2Nrcy4gKi8KIAl3aGlsZSAoLS1kcm9wX2NvdW50ID49IDApCkBAIC0xMDYzLDcgKzEwMTksNyBAQAogCXN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUgPSBxLT5waV9zdGF0ZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZG93bmVyID0gcGlfc3RhdGUtPm93bmVyOwogCXUzMiB1dmFsLCBjdXJ2YWwsIG5ld3ZhbDsKLQlpbnQgcmV0LCBhdHRlbXB0ID0gMDsKKwlpbnQgcmV0OwogCiAJLyogT3duZXIgZGllZD8gKi8KIAlpZiAoIXBpX3N0YXRlLT5vd25lcikKQEAgLTEwNzYsMTEgKzEwMzIsOSBAQAogCSAqIGluIHRoZSB1c2VyIHNwYWNlIHZhcmlhYmxlLiBUaGlzIG11c3QgYmUgYXRvbWljIGFzIHdlIGhhdmUKIAkgKiB0byBwcmVzZXJ2ZSB0aGUgb3duZXIgZGllZCBiaXQgaGVyZS4KIAkgKgotCSAqIE5vdGU6IFdlIHdyaXRlIHRoZSB1c2VyIHNwYWNlIHZhbHVlIF9iZWZvcmVfIGNoYW5naW5nIHRoZQotCSAqIHBpX3N0YXRlIGJlY2F1c2Ugd2UgY2FuIGZhdWx0IGhlcmUuIEltYWdpbmUgc3dhcHBlZCBvdXQKLQkgKiBwYWdlcyBvciBhIGZvcmssIHdoaWNoIHdhcyBydW5uaW5nIHJpZ2h0IGJlZm9yZSB3ZSBhY3F1aXJlZAotCSAqIG1tYXBfc2VtLCB0aGF0IG1hcmtlZCBhbGwgdGhlIGFub255bW91cyBtZW1vcnkgcmVhZG9ubHkgZm9yCi0JICogY293LgorCSAqIE5vdGU6IFdlIHdyaXRlIHRoZSB1c2VyIHNwYWNlIHZhbHVlIF9iZWZvcmVfIGNoYW5naW5nIHRoZSBwaV9zdGF0ZQorCSAqIGJlY2F1c2Ugd2UgY2FuIGZhdWx0IGhlcmUuIEltYWdpbmUgc3dhcHBlZCBvdXQgcGFnZXMgb3IgYSBmb3JrCisJICogdGhhdCBtYXJrZWQgYWxsIHRoZSBhbm9ueW1vdXMgbWVtb3J5IHJlYWRvbmx5IGZvciBjb3cuCiAJICoKIAkgKiBNb2RpZnlpbmcgcGlfc3RhdGUgX2JlZm9yZV8gdGhlIHVzZXIgc3BhY2UgdmFsdWUgd291bGQKIAkgKiBsZWF2ZSB0aGUgcGlfc3RhdGUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gd2UgZmF1bHQKQEAgLTExMzYsNyArMTA5MCw3IEBACiBoYW5kbGVfZmF1bHQ6CiAJc3Bpbl91bmxvY2socS0+bG9ja19wdHIpOwogCi0JcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KyspOworCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKIAogCXNwaW5fbG9jayhxLT5sb2NrX3B0cik7CiAKQEAgLTExODUsMTAgKzExMzksMTEgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIAorcmV0cnlfcHJpdmF0ZToKIAloYiA9IHF1ZXVlX2xvY2soJnEpOwogCiAJLyoKLQkgKiBBY2Nlc3MgdGhlIHBhZ2UgQUZURVIgdGhlIGZ1dGV4IGlzIHF1ZXVlZC4KKwkgKiBBY2Nlc3MgdGhlIHBhZ2UgQUZURVIgdGhlIGhhc2gtYnVja2V0IGlzIGxvY2tlZC4KIAkgKiBPcmRlciBpcyBpbXBvcnRhbnQ6CiAJICoKIAkgKiAgIFVzZXJzcGFjZSB3YWl0ZXI6IHZhbCA9IHZhcjsgaWYgKGNvbmQodmFsKSkgZnV0ZXhfd2FpdCgmdmFyLCB2YWwpOwpAQCAtMTIwNCwyMCArMTE1OSwyMyBAQAogCSAqIGEgd2FrZXVwIHdoZW4gKnVhZGRyICE9IHZhbCBvbiBlbnRyeSB0byB0aGUgc3lzY2FsbC4gIFRoaXMgaXMKIAkgKiByYXJlLCBidXQgbm9ybWFsLgogCSAqCi0JICogZm9yIHNoYXJlZCBmdXRleGVzLCB3ZSBob2xkIHRoZSBtbWFwIHNlbWFwaG9yZSwgc28gdGhlIG1hcHBpbmcKKwkgKiBGb3Igc2hhcmVkIGZ1dGV4ZXMsIHdlIGhvbGQgdGhlIG1tYXAgc2VtYXBob3JlLCBzbyB0aGUgbWFwcGluZwogCSAqIGNhbm5vdCBoYXZlIGNoYW5nZWQgc2luY2Ugd2UgbG9va2VkIGl0IHVwIGluIGdldF9mdXRleF9rZXkuCiAJICovCiAJcmV0ID0gZ2V0X2Z1dGV4X3ZhbHVlX2xvY2tlZCgmdXZhbCwgdWFkZHIpOwogCiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJcXVldWVfdW5sb2NrKCZxLCBoYik7Ci0JCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKIAogCQlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9wdXRfa2V5OwogCi0JCWlmICghcmV0KQotCQkJZ290byByZXRyeTsKLQkJZ290byBvdXQ7CisJCWlmICghZnNoYXJlZCkKKwkJCWdvdG8gcmV0cnlfcHJpdmF0ZTsKKworCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CisJCWdvdG8gcmV0cnk7CiAJfQogCXJldCA9IC1FV09VTERCTE9DSzsKIAlpZiAodW5saWtlbHkodXZhbCAhPSB2YWwpKSB7CkBAIC0xMjQ4LDE2ICsxMjA2LDEzIEBACiAJCWlmICghYWJzX3RpbWUpCiAJCQlzY2hlZHVsZSgpOwogCQllbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgc2xhY2s7Ci0JCQlzbGFjayA9IGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zOwotCQkJaWYgKHJ0X3Rhc2soY3VycmVudCkpCi0JCQkJc2xhY2sgPSAwOwogCQkJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0LnRpbWVyLAogCQkJCQkgICAgICBjbG9ja3J0ID8gQ0xPQ0tfUkVBTFRJTUUgOgogCQkJCQkgICAgICBDTE9DS19NT05PVE9OSUMsCiAJCQkJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOwogCQkJaHJ0aW1lcl9pbml0X3NsZWVwZXIoJnQsIGN1cnJlbnQpOwotCQkJaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZV9ucygmdC50aW1lciwgKmFic190aW1lLCBzbGFjayk7CisJCQlocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKCZ0LnRpbWVyLCAqYWJzX3RpbWUsCisJCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAogCQkJaHJ0aW1lcl9zdGFydF9leHBpcmVzKCZ0LnRpbWVyLCBIUlRJTUVSX01PREVfQUJTKTsKIAkJCWlmICghaHJ0aW1lcl9hY3RpdmUoJnQudGltZXIpKQpAQCAtMTM1NCw3ICsxMzA5LDcgQEAKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwogCXUzMiB1dmFsLCBuZXd2YWwsIGN1cnZhbDsKIAlzdHJ1Y3QgZnV0ZXhfcSBxOwotCWludCByZXQsIGxvY2tfdGFrZW4sIG93bmVyZGllZCA9IDAsIGF0dGVtcHQgPSAwOworCWludCByZXQsIGxvY2tfdGFrZW4sIG93bmVyZGllZCA9IDA7CiAKIAlpZiAocmVmaWxsX3BpX3N0YXRlX2NhY2hlKCkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM3NCw3ICsxMzI5LDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIAotcmV0cnlfdW5sb2NrZWQ6CityZXRyeV9wcml2YXRlOgogCWhiID0gcXVldWVfbG9jaygmcSk7CiAKIHJldHJ5X2xvY2tlZDoKQEAgLTE0NTgsNiArMTQxMyw3IEBACiAJCQkgKiBleGl0IHRvIGNvbXBsZXRlLgogCQkJICovCiAJCQlxdWV1ZV91bmxvY2soJnEsIGhiKTsKKwkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJZ290byByZXRyeTsKIApAQCAtMTU2NCw2ICsxNTIwLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIElmIGZpeHVwX3BpX3N0YXRlX293bmVyKCkgZmF1bHRlZCBhbmQgd2FzIHVuYWJsZSB0byBoYW5kbGUgdGhlCisJICogZmF1bHQsIHVubG9jayBpdCBhbmQgcmV0dXJuIHRoZSBmYXVsdCB0byB1c2Vyc3BhY2UuCisJICovCisJaWYgKHJldCAmJiAocnRfbXV0ZXhfb3duZXIoJnEucGlfc3RhdGUtPnBpX211dGV4KSA9PSBjdXJyZW50KSkKKwkJcnRfbXV0ZXhfdW5sb2NrKCZxLnBpX3N0YXRlLT5waV9tdXRleCk7CisKIAkvKiBVbnF1ZXVlIGFuZCBkcm9wIHRoZSBsb2NrICovCiAJdW5xdWV1ZV9tZV9waSgmcSk7CiAKQEAgLTE1OTEsMjIgKzE1NTQsMTggQEAKIAkgKi8KIAlxdWV1ZV91bmxvY2soJnEsIGhiKTsKIAotCWlmIChhdHRlbXB0KyspIHsKLQkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X3B1dF9rZXk7Ci0JCWdvdG8gcmV0cnlfdW5sb2NrZWQ7Ci0JfQotCiAJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOwotCWlmICghcmV0KQotCQlnb3RvIHJldHJ5OworCWlmIChyZXQpCisJCWdvdG8gb3V0X3B1dF9rZXk7CiAKLQlpZiAodG8pCi0JCWRlc3Ryb3lfaHJ0aW1lcl9vbl9zdGFjaygmdG8tPnRpbWVyKTsKLQlyZXR1cm4gcmV0OworCWlmICghZnNoYXJlZCkKKwkJZ290byByZXRyeV9wcml2YXRlOworCisJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCWdvdG8gcmV0cnk7CiB9CiAKKwogLyoKICAqIFVzZXJzcGFjZSBhdHRlbXB0ZWQgYSBUSUQgLT4gMCBhdG9taWMgdHJhbnNpdGlvbiwgYW5kIGZhaWxlZC4KICAqIFRoaXMgaXMgdGhlIGluLWtlcm5lbCBzbG93cGF0aDogd2UgbG9vayB1cCB0aGUgUEkgc3RhdGUgKGlmIGFueSksCkBAIC0xNjE5LDcgKzE1NzgsNyBAQAogCXUzMiB1dmFsOwogCXN0cnVjdCBwbGlzdF9oZWFkICpoZWFkOwogCXVuaW9uIGZ1dGV4X2tleSBrZXkgPSBGVVRFWF9LRVlfSU5JVDsKLQlpbnQgcmV0LCBhdHRlbXB0ID0gMDsKKwlpbnQgcmV0OwogCiByZXRyeToKIAlpZiAoZ2V0X3VzZXIodXZhbCwgdWFkZHIpKQpAQCAtMTYzNSw3ICsxNTk0LDYgQEAKIAkJZ290byBvdXQ7CiAKIAloYiA9IGhhc2hfZnV0ZXgoJmtleSk7Ci1yZXRyeV91bmxvY2tlZDoKIAlzcGluX2xvY2soJmhiLT5sb2NrKTsKIAogCS8qCkBAIC0xNzAwLDE0ICsxNjU4LDcgQEAKIAkgKiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfc2VtIGluIG9yZGVyIHRvIGNhbGwgZ2V0X3VzZXIoKS4KIAkgKi8KIAlzcGluX3VubG9jaygmaGItPmxvY2spOwotCi0JaWYgKGF0dGVtcHQrKykgewotCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGF0dGVtcHQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXV2YWwgPSAwOwotCQlnb3RvIHJldHJ5X3VubG9ja2VkOwotCX0KKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkpOwogCiAJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOwogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBmNGM0MTNiLi41NzU3ZTAzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzE5MCw3ICszMTkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqIEhlbHBlcnMgZm9yIGZpbmRfYnVzaWVzdF9ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKKy8qCiAgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgogICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCiAgKi8KQEAgLTMyMjIsNyArMzIyMiw3IEBACiAjZW5kaWYKIH07CiAKLS8qKgorLyoKICAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKICAqLwogc3RydWN0IHNnX2xiX3N0YXRzIHsKQEAgLTMzNjAsMTYgKzMzNjAsMTcgQEAKIH0KIAogLyoqCi0gKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtCi0gKglzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4gSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUKLSAqCXRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuCi0gKgliZSBwdXQgdG8gaWRsZS4KLSAqCisgKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZQogICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCiAgKgl1bmRlciBjb25zaWRlcmF0aW9uLgogICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCiAgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgogICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybSBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KKyAqIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlCisgKiBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZS4KKyAqCiAgKiBSZXR1cm5zIDEgaWYgdGhlcmUgaXMgcG90ZW50aWFsIHRvIHBlcmZvcm0gcG93ZXItc2F2aW5ncyBiYWxhbmNlLgogICogRWxzZSByZXR1cm5zIDAuCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCA5MzBjMDhlLi5kY2U3MWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC00Miw2ICs0Miw4MSBAQAogLyogcGlkIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwogc3RhdGljIHBpZF90IGxhc3RfcGlkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xIH07CiAKKy8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLworCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKKwkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCSpkZXB0aCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCit2b2lkCitmdHJhY2VfcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJaWYgKHVubGlrZWx5KGluZGV4IDwgMCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2hlcmUgdG8gZ28gKi8KKwkJKnJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCQlyZXR1cm47CisJfQorCisJKnJldCA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCXRyYWNlLT5mdW5jID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jOworCXRyYWNlLT5jYWxsdGltZSA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWU7CisJdHJhY2UtPm92ZXJydW4gPSBhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJdHJhY2UtPmRlcHRoID0gaW5kZXg7CisJYmFycmllcigpOworCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisKK30KKworLyoKKyAqIFNlbmQgdGhlIHRyYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIHJldHVybiBhZGRyZXNzLgorICovCit1bnNpZ25lZCBsb25nIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcih2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKKwl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCisJCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCBjcHUsIHJldDsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMjUxZmE3Yi4uNThiZmU3ZSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTQwMiw3ICs0MDIsNyBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUICYmIFNUQUNLVFJBQ0VfU1VQUE9SVCAmJiBMT0NLREVQX1NVUFBPUlQKIAlzZWxlY3QgU1RBQ0tUUkFDRQotCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFYODYgJiYgIU1JUFMgJiYgIVBQQworCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFYODYgJiYgIU1JUFMgJiYgIVBQQyAmJiAhQVJNX1VOV0lORAogCXNlbGVjdCBLQUxMU1lNUwogCXNlbGVjdCBLQUxMU1lNU19BTEwKIApkaWZmIC0tZ2l0IGEvbGliL2xtYi5jIGIvbGliL2xtYi5jCmluZGV4IDk3ZTU0NzAzLi5lNGE2NDgyIDEwMDY0NAotLS0gYS9saWIvbG1iLmMKKysrIGIvbGliL2xtYi5jCkBAIC0yOSwzMyArMjksMzMgQEAKIH0KIGVhcmx5X3BhcmFtKCJsbWIiLCBlYXJseV9sbWIpOwogCitzdGF0aWMgdm9pZCBsbWJfZHVtcChzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmVnaW9uLCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBiYXNlLCBzaXplOworCWludCBpOworCisJcHJfaW5mbygiICVzLmNudCAgPSAweCVseFxuIiwgbmFtZSwgcmVnaW9uLT5jbnQpOworCisJZm9yIChpID0gMDsgaSA8IHJlZ2lvbi0+Y250OyBpKyspIHsKKwkJYmFzZSA9IHJlZ2lvbi0+cmVnaW9uW2ldLmJhc2U7CisJCXNpemUgPSByZWdpb24tPnJlZ2lvbltpXS5zaXplOworCisJCXByX2luZm8oIiAlc1sweCV4XVx0MHglMDE2bGx4IC0gMHglMDE2bGx4LCAweCVsbHggYnl0ZXNcbiIsCisJCSAgICBuYW1lLCBpLCBiYXNlLCBiYXNlICsgc2l6ZSAtIDEsIHNpemUpOworCX0KK30KKwogdm9pZCBsbWJfZHVtcF9hbGwodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KIAlpZiAoIWxtYl9kZWJ1ZykKIAkJcmV0dXJuOwogCi0JcHJfaW5mbygibG1iX2R1bXBfYWxsOlxuIik7Ci0JcHJfaW5mbygiICAgIG1lbW9yeS5jbnQJCSAgPSAweCVseFxuIiwgbG1iLm1lbW9yeS5jbnQpOwotCXByX2luZm8oIiAgICBtZW1vcnkuc2l6ZQkJICA9IDB4JWxseFxuIiwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnNpemUpOwotCWZvciAoaT0wOyBpIDwgbG1iLm1lbW9yeS5jbnQgO2krKykgewotCQlwcl9pbmZvKCIgICAgbWVtb3J5LnJlZ2lvblsweCVseF0uYmFzZSAgICAgICA9IDB4JWxseFxuIiwKLQkJICAgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSk7Ci0JCXByX2luZm8oIgkJICAgICAgLnNpemUgICAgID0gMHglbGx4XG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplKTsKLQl9CisJcHJfaW5mbygiTE1CIGNvbmZpZ3VyYXRpb246XG4iKTsKKwlwcl9pbmZvKCIgcm1vX3NpemUgICAgPSAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLnJtb19zaXplKTsKKwlwcl9pbmZvKCIgbWVtb3J5LnNpemUgPSAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5zaXplKTsKIAotCXByX2luZm8oIiAgICByZXNlcnZlZC5jbnQJICA9IDB4JWx4XG4iLCBsbWIucmVzZXJ2ZWQuY250KTsKLQlwcl9pbmZvKCIgICAgcmVzZXJ2ZWQuc2l6ZQkgID0gMHglbGx4XG4iLAotCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkuc2l6ZSk7Ci0JZm9yIChpPTA7IGkgPCBsbWIucmVzZXJ2ZWQuY250IDtpKyspIHsKLQkJcHJfaW5mbygiICAgIHJlc2VydmVkLnJlZ2lvblsweCVseF0uYmFzZSAgICAgICA9IDB4JWxseFxuIiwKLQkJICAgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlKTsKLQkJcHJfaW5mbygiCQkgICAgICAuc2l6ZSAgICAgPSAweCVsbHhcbiIsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSk7Ci0JfQorCWxtYl9kdW1wKCZsbWIubWVtb3J5LCAibWVtb3J5Iik7CisJbG1iX2R1bXAoJmxtYi5yZXNlcnZlZCwgInJlc2VydmVkIik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxtYl9hZGRyc19vdmVybGFwKHU2NCBiYXNlMSwgdTY0IHNpemUxLCB1NjQgYmFzZTIsCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggYjM2YjgzYi4uOTEwMTk4MCAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNjcsNiArNjcsMjUgQEAKIAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHBrbWFwX21hcF93YWl0KTsKIAorLyoKKyAqIE1vc3QgYXJjaGl0ZWN0dXJlcyBoYXZlIG5vIHVzZSBmb3Iga21hcF9oaWdoX2dldCgpLCBzbyBsZXQncyBhYnN0cmFjdAorICogdGhlIGRpc2FibGluZyBvZiBJUlEgb3V0IG9mIHRoZSBsb2NraW5nIGluIHRoYXQgY2FzZSB0byBzYXZlIG9uIGEKKyAqIHBvdGVudGlhbCB1c2VsZXNzIG92ZXJoZWFkLgorICovCisjaWZkZWYgQVJDSF9ORUVEU19LTUFQX0hJR0hfR0VUCisjZGVmaW5lIGxvY2tfa21hcCgpICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJmttYXBfbG9jaykKKyNkZWZpbmUgdW5sb2NrX2ttYXAoKSAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZrbWFwX2xvY2spCisjZGVmaW5lIGxvY2tfa21hcF9hbnkoZmxhZ3MpICAgIHNwaW5fbG9ja19pcnFzYXZlKCZrbWFwX2xvY2ssIGZsYWdzKQorI2RlZmluZSB1bmxvY2tfa21hcF9hbnkoZmxhZ3MpICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbWFwX2xvY2ssIGZsYWdzKQorI2Vsc2UKKyNkZWZpbmUgbG9ja19rbWFwKCkgICAgICAgICAgICAgc3Bpbl9sb2NrKCZrbWFwX2xvY2spCisjZGVmaW5lIHVubG9ja19rbWFwKCkgICAgICAgICAgIHNwaW5fdW5sb2NrKCZrbWFwX2xvY2spCisjZGVmaW5lIGxvY2tfa21hcF9hbnkoZmxhZ3MpICAgIFwKKwkJZG8geyBzcGluX2xvY2soJmttYXBfbG9jayk7ICh2b2lkKShmbGFncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVubG9ja19rbWFwX2FueShmbGFncykgIFwKKwkJZG8geyBzcGluX3VubG9jaygma21hcF9sb2NrKTsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfemVyb19wa21hcHModm9pZCkKIHsKIAlpbnQgaTsKQEAgLTExMyw5ICsxMzIsOSBAQAogICovCiB2b2lkIGttYXBfZmx1c2hfdW51c2VkKHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCWxvY2tfa21hcCgpOwogCWZsdXNoX2FsbF96ZXJvX3BrbWFwcygpOwotCXNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOworCXVubG9ja19rbWFwKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYXBfbmV3X3ZpcnR1YWwoc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC0xNDUsMTAgKzE2NCwxMCBAQAogCiAJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCWFkZF93YWl0X3F1ZXVlKCZwa21hcF9tYXBfd2FpdCwgJndhaXQpOwotCQkJc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CisJCQl1bmxvY2tfa21hcCgpOwogCQkJc2NoZWR1bGUoKTsKIAkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwa21hcF9tYXBfd2FpdCwgJndhaXQpOwotCQkJc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCQkJbG9ja19rbWFwKCk7CiAKIAkJCS8qIFNvbWVib2R5IGVsc2UgbWlnaHQgaGF2ZSBtYXBwZWQgaXQgd2hpbGUgd2Ugc2xlcHQgKi8KIAkJCWlmIChwYWdlX2FkZHJlc3MocGFnZSkpCkBAIC0xODQsMjkgKzIwMyw1OSBAQAogCSAqIEZvciBoaWdobWVtIHBhZ2VzLCB3ZSBjYW4ndCB0cnVzdCAidmlydHVhbCIgdW50aWwKIAkgKiBhZnRlciB3ZSBoYXZlIHRoZSBsb2NrLgogCSAqLwotCXNwaW5fbG9jaygma21hcF9sb2NrKTsKKwlsb2NrX2ttYXAoKTsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlpZiAoIXZhZGRyKQogCQl2YWRkciA9IG1hcF9uZXdfdmlydHVhbChwYWdlKTsKIAlwa21hcF9jb3VudFtQS01BUF9OUih2YWRkcildKys7CiAJQlVHX09OKHBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0gPCAyKTsKLQlzcGluX3VubG9jaygma21hcF9sb2NrKTsKKwl1bmxvY2tfa21hcCgpOwogCXJldHVybiAodm9pZCopIHZhZGRyOwogfQogCiBFWFBPUlRfU1lNQk9MKGttYXBfaGlnaCk7CiAKKyNpZmRlZiBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQKKy8qKgorICoga21hcF9oaWdoX2dldCAtIHBpbiBhIGhpZ2htZW0gcGFnZSBpbnRvIG1lbW9yeQorICogQHBhZ2U6ICZzdHJ1Y3QgcGFnZSB0byBwaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBwYWdlJ3MgY3VycmVudCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzLCBvciBOVUxMIGlmIG5vIG1hcHBpbmcKKyAqIGV4aXN0cy4gIFdoZW4gYW5kIG9ubHkgd2hlbiBhIG5vbiBudWxsIGFkZHJlc3MgaXMgcmV0dXJuZWQgdGhlbiBhCisgKiBtYXRjaGluZyBjYWxsIHRvIGt1bm1hcF9oaWdoKCkgaXMgbmVjZXNzYXJ5LgorICoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgorICovCit2b2lkICprbWFwX2hpZ2hfZ2V0KHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGZsYWdzOworCisJbG9ja19rbWFwX2FueShmbGFncyk7CisJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CisJaWYgKHZhZGRyKSB7CisJCUJVR19PTihwa21hcF9jb3VudFtQS01BUF9OUih2YWRkcildIDwgMSk7CisJCXBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0rKzsKKwl9CisJdW5sb2NrX2ttYXBfYW55KGZsYWdzKTsKKwlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKK30KKyNlbmRpZgorCiAvKioKICAqIGt1bm1hcF9oaWdoIC0gbWFwIGEgaGlnaG1lbSBwYWdlIGludG8gbWVtb3J5CiAgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHVubWFwCisgKgorICogSWYgQVJDSF9ORUVEU19LTUFQX0hJR0hfR0VUIGlzIG5vdCBkZWZpbmVkIHRoZW4gdGhpcyBtYXkgYmUgY2FsbGVkCisgKiBvbmx5IGZyb20gdXNlciBjb250ZXh0LgogICovCiB2b2lkIGt1bm1hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBucjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuZWVkX3dha2V1cDsKIAotCXNwaW5fbG9jaygma21hcF9sb2NrKTsKKwlsb2NrX2ttYXBfYW55KGZsYWdzKTsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlCVUdfT04oIXZhZGRyKTsKIAluciA9IFBLTUFQX05SKHZhZGRyKTsKQEAgLTIzMiw3ICsyODEsNyBAQAogCQkgKi8KIAkJbmVlZF93YWtldXAgPSB3YWl0cXVldWVfYWN0aXZlKCZwa21hcF9tYXBfd2FpdCk7CiAJfQotCXNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOworCXVubG9ja19rbWFwX2FueShmbGFncyk7CiAKIAkvKiBkbyB3YWtlLXVwLCBpZiBuZWVkZWQsIHJhY2UtZnJlZSBvdXRzaWRlIG9mIHRoZSBzcGluIGxvY2sgKi8KIAlpZiAobmVlZF93YWtldXApCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGJhYTk5OWUuLjIwMzJhZDIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0xNjY1LDkgKzE2NjUsMTAgQEAKIAkgKiBiZWhhdmlvdXIgdGhhdCBzb21lIHByb2dyYW1zIGRlcGVuZCBvbi4gV2UgbWFyayB0aGUgIm9yaWdpbmFsIgogCSAqIHVuLUNPVydlZCBwYWdlcyBieSBtYXRjaGluZyB0aGVtIHVwIHdpdGggInZtYS0+dm1fcGdvZmYiLgogCSAqLwotCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgZW5kID09IHZtYS0+dm1fZW5kKQorCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgZW5kID09IHZtYS0+dm1fZW5kKSB7CiAJCXZtYS0+dm1fcGdvZmYgPSBwZm47Ci0JZWxzZSBpZiAoaXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykpCisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOX0FUX01NQVA7CisJfSBlbHNlIGlmIChpc19jb3dfbWFwcGluZyh2bWEtPnZtX2ZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVA7CkBAIC0xNjc5LDYgKzE2ODAsNyBAQAogCQkgKiBuZWVkZWQgZnJvbSBoaWdoZXIgbGV2ZWwgcm91dGluZSBjYWxsaW5nIHVubWFwX3ZtYXMKIAkJICovCiAJCXZtYS0+dm1fZmxhZ3MgJj0gfihWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQKTsKKwkJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOX0FUX01NQVA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvY2lwc29faXB2NC5jIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCmluZGV4IDdiYzk5MjkuLjAzOWNjMWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYworKysgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKQEAgLTE5NDIsMjMgKzE5NDIsODUgQEAKIH0KIAogLyoqCi0gKiBjaXBzb192NF9zb2NrX2RlbGF0dHIgLSBEZWxldGUgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgc29ja2V0Ci0gKiBAc2s6IHRoZSBzb2NrZXQKKyAqIGNpcHNvX3Y0X3JlcV9zZXRhdHRyIC0gQWRkIGEgQ0lQU08gb3B0aW9uIHRvIGEgY29ubmVjdGlvbiByZXF1ZXN0IHNvY2tldAorICogQHJlcTogdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBzb2NrZXQKKyAqIEBkb2lfZGVmOiB0aGUgQ0lQU08gRE9JIHRvIHVzZQorICogQHNlY2F0dHI6IHRoZSBzcGVjaWZpYyBzZWN1cml0eSBhdHRyaWJ1dGVzIG9mIHRoZSBzb2NrZXQKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIFJlbW92ZXMgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgc29ja2V0LCBpZiBwcmVzZW50LgorICogU2V0IHRoZSBDSVBTTyBvcHRpb24gb24gdGhlIGdpdmVuIHNvY2tldCB1c2luZyB0aGUgRE9JIGRlZmluaXRpb24gYW5kCisgKiBzZWN1cml0eSBhdHRyaWJ1dGVzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBhbmQKKyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotdm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKQoraW50IGNpcHNvX3Y0X3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JdTggaGRyX2RlbHRhOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7Ci0Jc3RydWN0IGluZXRfc29jayAqc2tfaW5ldDsKKwlpbnQgcmV0X3ZhbCA9IC1FUEVSTTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworCXUzMiBidWZfbGVuOworCXUzMiBvcHRfbGVuOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqcmVxX2luZXQ7CiAKLQlza19pbmV0ID0gaW5ldF9zayhzayk7Ci0Jb3B0ID0gc2tfaW5ldC0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCi0JCXJldHVybjsKKwkvKiBXZSBhbGxvY2F0ZSB0aGUgbWF4aW11bSBDSVBTTyBvcHRpb24gc2l6ZSBoZXJlIHNvIHdlIGFyZSBwcm9iYWJseQorCSAqIGJlaW5nIGEgbGl0dGxlIHdhc3RlZnVsLCBidXQgaXQgbWFrZXMgb3VyIGxpZmUgX211Y2hfIGVhc2llciBsYXRlcgorCSAqIG9uIGFuZCBhZnRlciBhbGwgd2UgYXJlIG9ubHkgdGFsa2luZyBhYm91dCA0MCBieXRlcy4gKi8KKwlidWZfbGVuID0gQ0lQU09fVjRfT1BUX0xFTl9NQVg7CisJYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCWdvdG8gcmVxX3NldGF0dHJfZmFpbHVyZTsKKwl9CisKKwlyZXRfdmFsID0gY2lwc29fdjRfZ2Vub3B0KGJ1ZiwgYnVmX2xlbiwgZG9pX2RlZiwgc2VjYXR0cik7CisJaWYgKHJldF92YWwgPCAwKQorCQlnb3RvIHJlcV9zZXRhdHRyX2ZhaWx1cmU7CisJYnVmX2xlbiA9IHJldF92YWw7CisKKwkvKiBXZSBjYW4ndCB1c2UgaXBfb3B0aW9uc19nZXQoKSBkaXJlY3RseSBiZWNhdXNlIGl0IG1ha2VzIGEgY2FsbCB0bworCSAqIGlwX29wdGlvbnNfZ2V0X2FsbG9jKCkgd2hpY2ggYWxsb2NhdGVzIG1lbW9yeSB3aXRoIEdGUF9LRVJORUwgYW5kCisJICogd2Ugd29uJ3QgYWx3YXlzIGhhdmUgQ0FQX05FVF9SQVcgZXZlbiB0aG91Z2ggd2UgX2Fsd2F5c18gd2FudCB0bworCSAqIHNldCB0aGUgSVBPUFRfQ0lQU08gb3B0aW9uLiAqLworCW9wdF9sZW4gPSAoYnVmX2xlbiArIDMpICYgfjM7CisJb3B0ID0ga3phbGxvYyhzaXplb2YoKm9wdCkgKyBvcHRfbGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAob3B0ID09IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCWdvdG8gcmVxX3NldGF0dHJfZmFpbHVyZTsKKwl9CisJbWVtY3B5KG9wdC0+X19kYXRhLCBidWYsIGJ1Zl9sZW4pOworCW9wdC0+b3B0bGVuID0gb3B0X2xlbjsKKwlvcHQtPmNpcHNvID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJa2ZyZWUoYnVmKTsKKwlidWYgPSBOVUxMOworCisJcmVxX2luZXQgPSBpbmV0X3JzayhyZXEpOworCW9wdCA9IHhjaGcoJnJlcV9pbmV0LT5vcHQsIG9wdCk7CisJa2ZyZWUob3B0KTsKKworCXJldHVybiAwOworCityZXFfc2V0YXR0cl9mYWlsdXJlOgorCWtmcmVlKGJ1Zik7CisJa2ZyZWUob3B0KTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBjaXBzb192NF9kZWxvcHQgLSBEZWxldGUgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgc2V0IG9mIElQIG9wdGlvbnMKKyAqIEBvcHRfcHRyOiBJUCBvcHRpb24gcG9pbnRlcgorICoKKyAqIERlc2NyaXB0aW9uOgorICogRGVsZXRlcyB0aGUgQ0lQU08gSVAgb3B0aW9uIGZyb20gYSBzZXQgb2YgSVAgb3B0aW9ucyBhbmQgbWFrZXMgdGhlIG5lY2Vzc2FyeQorICogYWRqdXN0bWVudHMgdG8gdGhlIElQIG9wdGlvbiBzdHJ1Y3R1cmUuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUKKyAqIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IGNpcHNvX3Y0X2RlbG9wdChzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdF9wdHIpCit7CisJaW50IGhkcl9kZWx0YSA9IDA7CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICpvcHRfcHRyOwogCiAJaWYgKG9wdC0+c3JyIHx8IG9wdC0+cnIgfHwgb3B0LT50cyB8fCBvcHQtPnJvdXRlcl9hbGVydCkgewogCQl1OCBjaXBzb19sZW47CkBAIC0yMDAzLDExICsyMDY1LDM0IEBACiAJfSBlbHNlIHsKIAkJLyogb25seSB0aGUgY2lwc28gb3B0aW9uIHdhcyBwcmVzZW50IG9uIHRoZSBzb2NrZXQgc28gd2UgY2FuCiAJCSAqIHJlbW92ZSB0aGUgZW50aXJlIG9wdGlvbiBzdHJ1Y3QgKi8KLQkJc2tfaW5ldC0+b3B0ID0gTlVMTDsKKwkJKm9wdF9wdHIgPSBOVUxMOwogCQloZHJfZGVsdGEgPSBvcHQtPm9wdGxlbjsKIAkJa2ZyZWUob3B0KTsKIAl9CiAKKwlyZXR1cm4gaGRyX2RlbHRhOworfQorCisvKioKKyAqIGNpcHNvX3Y0X3NvY2tfZGVsYXR0ciAtIERlbGV0ZSB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQKKyAqIEBzazogdGhlIHNvY2tldAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlcyB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQsIGlmIHByZXNlbnQuCisgKgorICovCit2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IGhkcl9kZWx0YTsKKwlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7CisKKwlza19pbmV0ID0gaW5ldF9zayhzayk7CisJb3B0ID0gc2tfaW5ldC0+b3B0OworCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJCXJldHVybjsKKworCWhkcl9kZWx0YSA9IGNpcHNvX3Y0X2RlbG9wdCgmc2tfaW5ldC0+b3B0KTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzayAmJiBoZHJfZGVsdGEgPiAwKSB7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubiA9IGluZXRfY3NrKHNrKTsKIAkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiAtPSBoZHJfZGVsdGE7CkBAIC0yMDE2LDYgKzIxMDEsMjcgQEAKIH0KIAogLyoqCisgKiBjaXBzb192NF9yZXFfZGVsYXR0ciAtIERlbGV0ZSB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSByZXF1ZXN0IHNvY2tldAorICogQHJlZzogdGhlIHJlcXVlc3Qgc29ja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmVzIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHJlcXVlc3Qgc29ja2V0LCBpZiBwcmVzZW50LgorICoKKyAqLwordm9pZCBjaXBzb192NF9yZXFfZGVsYXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCit7CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdDsKKwlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKnJlcV9pbmV0OworCisJcmVxX2luZXQgPSBpbmV0X3JzayhyZXEpOworCW9wdCA9IHJlcV9pbmV0LT5vcHQ7CisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+Y2lwc28gPT0gMCkKKwkJcmV0dXJuOworCisJY2lwc29fdjRfZGVsb3B0KCZyZXFfaW5ldC0+b3B0KTsKK30KKworLyoqCiAgKiBjaXBzb192NF9nZXRhdHRyIC0gSGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgY2lwc29fdjRfKl9nZXRhdHRyIGZ1bmN0aW9ucwogICogQGNpcHNvOiB0aGUgQ0lQU08gdjQgb3B0aW9uCiAgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCBkMzQ2YzIyLi5iMzVhOTUwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0yODgsMTAgKzI4OCw2IEBACiAJaWYgKCFyZXEpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpIHsKLQkJcmVxc2tfZnJlZShyZXEpOwotCQlnb3RvIG91dDsKLQl9CiAJaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJdHJlcSA9IHRjcF9yc2socmVxKTsKIAl0cmVxLT5yY3ZfaXNuCQk9IG50b2hsKHRoLT5zZXEpIC0gMTsKQEAgLTMyMiw2ICszMTgsMTEgQEAKIAkJfQogCX0KIAorCWlmIChzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChzaywgc2tiLCByZXEpKSB7CisJCXJlcXNrX2ZyZWUocmVxKTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVxLT5leHBpcmVzCT0gMFVMOwogCXJlcS0+cmV0cmFucwk9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGQwYTMxNDguLjVkNDI3ZjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTIzMCwxNCArMTIzMCwxNSBAQAogCiAJdGNwX29wZW5yZXFfaW5pdChyZXEsICZ0bXBfb3B0LCBza2IpOwogCi0JaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCi0JCWdvdG8gZHJvcF9hbmRfZnJlZTsKLQogCWlyZXEgPSBpbmV0X3JzayhyZXEpOwogCWlyZXEtPmxvY19hZGRyID0gZGFkZHI7CiAJaXJlcS0+cm10X2FkZHIgPSBzYWRkcjsKIAlpcmVxLT5ub19zcmNjaGVjayA9IGluZXRfc2soc2spLT50cmFuc3BhcmVudDsKIAlpcmVxLT5vcHQgPSB0Y3BfdjRfc2F2ZV9vcHRpb25zKHNrLCBza2IpOworCisJaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCisJCWdvdG8gZHJvcF9hbmRfZnJlZTsKKwogCWlmICghd2FudF9jb29raWUpCiAJCVRDUF9FQ05fY3JlYXRlX3JlcXVlc3QocmVxLCB0Y3BfaGRyKHNrYikpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwppbmRleCBmZDkyMjlkLi5iMGU1ODJmIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKQEAgLTYxOSw4ICs2MTksOSBAQAogfQogCiAvKioKLSAqIG5ldGxibF9zb2NrZXRfc2V0YXR0ciAtIExhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBjb3JyZWN0IHByb3RvY29sCisgKiBuZXRsYmxfc29ja19zZXRhdHRyIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIGNvcnJlY3QgcHJvdG9jb2wKICAqIEBzazogdGhlIHNvY2tldCB0byBsYWJlbAorICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CiAgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTYzMywyOSArNjM0LDQ1IEBACiAgKgogICovCiBpbnQgbmV0bGJsX3NvY2tfc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCisJCQl1MTYgZmFtaWx5LAogCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpbnQgcmV0X3ZhbCA9IC1FTk9FTlQ7CisJaW50IHJldF92YWw7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICpkb21fZW50cnk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZG9tX2VudHJ5ID0gbmV0bGJsX2RvbWhzaF9nZXRlbnRyeShzZWNhdHRyLT5kb21haW4pOwotCWlmIChkb21fZW50cnkgPT0gTlVMTCkKKwlpZiAoZG9tX2VudHJ5ID09IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IC1FTk9FTlQ7CiAJCWdvdG8gc29ja2V0X3NldGF0dHJfcmV0dXJuOwotCXN3aXRjaCAoZG9tX2VudHJ5LT50eXBlKSB7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q6Ci0JCXJldF92YWwgPSAtRURFU1RBRERSUkVROworCX0KKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJc3dpdGNoIChkb21fZW50cnktPnR5cGUpIHsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q6CisJCQlyZXRfdmFsID0gLUVERVNUQUREUlJFUTsKKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCXJldF92YWwgPSBjaXBzb192NF9zb2NrX3NldGF0dHIoc2ssCisJCQkJCQkgICAgZG9tX2VudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LAorCQkJCQkJICAgIHNlY2F0dHIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCQlyZXRfdmFsID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCX0KIAkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCXJldF92YWwgPSBjaXBzb192NF9zb2NrX3NldGF0dHIoc2ssCi0JCQkJCQlkb21fZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCi0JCQkJCQlzZWNhdHRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQkvKiBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBJUHY2IGxhYmVsaW5nIHByb3RvY29scyByaWdodAorCQkgKiBub3cgd2UgY2FuIG9wdGltaXplIGV2ZXJ5dGhpbmcgYXdheSB1bnRpbCB3ZSBkbyAqLwogCQlyZXRfdmFsID0gMDsKIAkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLwogCWRlZmF1bHQ6Ci0JCXJldF92YWwgPSAtRU5PRU5UOworCQlyZXRfdmFsID0gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKIHNvY2tldF9zZXRhdHRyX3JldHVybjoKQEAgLTY4OSw5ICs3MDYsMjUgQEAKICAqIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgbmV0bGJsX3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCitpbnQgbmV0bGJsX3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCisJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCXJldHVybiBjaXBzb192NF9zb2NrX2dldGF0dHIoc2ssIHNlY2F0dHIpOworCWludCByZXRfdmFsOworCisJc3dpdGNoIChzay0+c2tfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXRfdmFsID0gY2lwc29fdjRfc29ja19nZXRhdHRyKHNrLCBzZWNhdHRyKTsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0X3ZhbCA9IC1FTk9NU0c7CisJCWJyZWFrOworI2VuZGlmIC8qIElQdjYgKi8KKwlkZWZhdWx0OgorCQlyZXRfdmFsID0gLUVQUk9UT05PU1VQUE9SVDsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyoqCkBAIC03NDgsNyArNzgxLDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYgLyogSVB2NiAqLwogCWRlZmF1bHQ6Ci0JCXJldF92YWwgPSAwOworCQlyZXRfdmFsID0gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKIGNvbm5fc2V0YXR0cl9yZXR1cm46CkBAIC03NTcsNiArNzkwLDkwIEBACiB9CiAKIC8qKgorICogbmV0bGJsX3JlcV9zZXRhdHRyIC0gTGFiZWwgYSByZXF1ZXN0IHNvY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAorICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGxhYmVsCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEF0dGFjaCB0aGUgY29ycmVjdCBsYWJlbCB0byB0aGUgZ2l2ZW4gc29ja2V0IHVzaW5nIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKiBzcGVjaWZpZWQgaW4gQHNlY2F0dHIuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgbmV0bGJsX3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJaW50IHJldF92YWw7CisJc3RydWN0IG5ldGxibF9kb21fbWFwICpkb21fZW50cnk7CisJc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKmFmNF9lbnRyeTsKKwl1MzIgcHJvdG9fdHlwZTsKKwlzdHJ1Y3QgY2lwc29fdjRfZG9pICpwcm90b19jdjQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZG9tX2VudHJ5ID0gbmV0bGJsX2RvbWhzaF9nZXRlbnRyeShzZWNhdHRyLT5kb21haW4pOworCWlmIChkb21fZW50cnkgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJZ290byByZXFfc2V0YXR0cl9yZXR1cm47CisJfQorCXN3aXRjaCAocmVxLT5yc2tfb3BzLT5mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlmIChkb21fZW50cnktPnR5cGUgPT0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUKSB7CisJCQlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKnJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKKwkJCWFmNF9lbnRyeSA9IG5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0KHNlY2F0dHItPmRvbWFpbiwKKwkJCQkJCQkgICAgcmVxX2luZXQtPnJtdF9hZGRyKTsKKwkJCWlmIChhZjRfZW50cnkgPT0gTlVMTCkgeworCQkJCXJldF92YWwgPSAtRU5PRU5UOworCQkJCWdvdG8gcmVxX3NldGF0dHJfcmV0dXJuOworCQkJfQorCQkJcHJvdG9fdHlwZSA9IGFmNF9lbnRyeS0+dHlwZTsKKwkJCXByb3RvX2N2NCA9IGFmNF9lbnRyeS0+dHlwZV9kZWYuY2lwc292NDsKKwkJfSBlbHNlIHsKKwkJCXByb3RvX3R5cGUgPSBkb21fZW50cnktPnR5cGU7CisJCQlwcm90b19jdjQgPSBkb21fZW50cnktPnR5cGVfZGVmLmNpcHNvdjQ7CisJCX0KKwkJc3dpdGNoIChwcm90b190eXBlKSB7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3JlcV9zZXRhdHRyKHJlcSwgcHJvdG9fY3Y0LCBzZWNhdHRyKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQkJLyoganVzdCBkZWxldGUgdGhlIHByb3RvY29scyB3ZSBzdXBwb3J0IGZvciByaWdodCBub3cKKwkJCSAqIGJ1dCB3ZSBjb3VsZCByZW1vdmUgb3RoZXIgcHJvdG9jb2xzIGlmIG5lZWRlZCAqLworCQkJY2lwc29fdjRfcmVxX2RlbGF0dHIocmVxKTsKKwkJCXJldF92YWwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJfQorCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQkvKiBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBJUHY2IGxhYmVsaW5nIHByb3RvY29scyByaWdodAorCQkgKiBub3cgd2UgY2FuIG9wdGltaXplIGV2ZXJ5dGhpbmcgYXdheSB1bnRpbCB3ZSBkbyAqLworCQlyZXRfdmFsID0gMDsKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCWRlZmF1bHQ6CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOworCX0KKworcmVxX3NldGF0dHJfcmV0dXJuOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyogbmV0bGJsX3JlcV9kZWxhdHRyIC0gRGVsZXRlIGFsbCB0aGUgTmV0TGFiZWwgbGFiZWxzIG9uIGEgc29ja2V0CisqIEByZXE6IHRoZSBzb2NrZXQKKyoKKyogRGVzY3JpcHRpb246CisqIFJlbW92ZSBhbGwgdGhlIE5ldExhYmVsIGxhYmVsaW5nIGZyb20gQHJlcS4KKyoKKyovCit2b2lkIG5ldGxibF9yZXFfZGVsYXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCit7CisJY2lwc29fdjRfcmVxX2RlbGF0dHIocmVxKTsKK30KKworLyoqCiAgKiBuZXRsYmxfc2tidWZmX3NldGF0dHIgLSBMYWJlbCBhIHBhY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAogICogQHNrYjogdGhlIHBhY2tldAogICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CkBAIC04MDgsNyArOTI1LDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYgLyogSVB2NiAqLwogCWRlZmF1bHQ6Ci0JCXJldF92YWwgPSAwOworCQlyZXRfdmFsID0gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKIHNrYnVmZl9zZXRhdHRyX3JldHVybjoKQEAgLTgzMyw5ICs5NTAsMTcgQEAKIAkJCSAgdTE2IGZhbWlseSwKIAkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpZiAoQ0lQU09fVjRfT1BURVhJU1Qoc2tiKSAmJgotCSAgICBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihza2IsIHNlY2F0dHIpID09IDApCi0JCXJldHVybiAwOworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpZiAoQ0lQU09fVjRfT1BURVhJU1Qoc2tiKSAmJgorCQkgICAgY2lwc29fdjRfc2tidWZmX2dldGF0dHIoc2tiLCBzZWNhdHRyKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCWJyZWFrOworI2VuZGlmIC8qIElQdjYgKi8KKwl9CiAKIAlyZXR1cm4gbmV0bGJsX3VubGFiZWxfZ2V0YXR0cihza2IsIGZhbWlseSwgc2VjYXR0cik7CiB9CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMGIxNGI3OS4uOTFkMGMwMiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTUzNiw4ICsxNTM2LDYgQEAKIAlmZF9pbnN0YWxsKG5ld2ZkLCBuZXdmaWxlKTsKIAllcnIgPSBuZXdmZDsKIAotCXNlY3VyaXR5X3NvY2tldF9wb3N0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKLQogb3V0X3B1dDoKIAlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCBjNTQ1YmQxLi4yMWI2Y2VhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC02MjAsMTAgKzYyMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNhcF9zb2NrZXRfcG9zdF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaykKLXsKLX0KLQogc3RhdGljIGludCBjYXBfc29ja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgc2l6ZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTEwMTQsNyArMTAxMCw2IEBACiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgc29ja2V0X2Nvbm5lY3QpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9saXN0ZW4pOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9hY2NlcHQpOwotCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9wb3N0X2FjY2VwdCk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgc29ja2V0X3NlbmRtc2cpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9yZWN2bXNnKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfZ2V0c29ja25hbWUpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggYzM1ODZjMC4uMjA2ZTUzOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xMDA3LDExICsxMDA3LDYgQEAKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfYWNjZXB0KHNvY2ssIG5ld3NvY2spOwogfQogCi12b2lkIHNlY3VyaXR5X3NvY2tldF9wb3N0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKQotewotCXNlY3VyaXR5X29wcy0+c29ja2V0X3Bvc3RfYWNjZXB0KHNvY2ssIG5ld3NvY2spOwotfQotCiBpbnQgc2VjdXJpdHlfc29ja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgc2l6ZSkKIHsKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfc2VuZG1zZyhzb2NrLCBtc2csIHNpemUpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDdjNTJiYTIuLmJhODA4ZWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTkzLDcgKzkzLDYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwb2xpY3lkYl9sb2FkZWRfdmVyc2lvbjsKIGV4dGVybiBpbnQgc2VsaW51eF9ubG1zZ19sb29rdXAodTE2IHNjbGFzcywgdTE2IG5sbXNnX3R5cGUsIHUzMiAqcGVybSk7Ci1leHRlcm4gaW50IHNlbGludXhfY29tcGF0X25ldDsKIGV4dGVybiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2VjdXJpdHlfb3BzOwogCiAvKiBTRUNNQVJLIHJlZmVyZW5jZSBjb3VudCAqLwpAQCAtMzExLDcgKzMxMCw3IEBACiAJc3NlYy0+c2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CiAJc2stPnNrX3NlY3VyaXR5ID0gc3NlYzsKIAotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHNzZWMsIGZhbWlseSk7CisJc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3NlYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NDUsNyArMjk0NCw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfcmV2YWxpZGF0ZV9maWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJaWYgKCFtYXNrKSB7CkBAIC0yOTU3LDI5ICsyOTU1LDE1IEBACiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmIChtYXNrICYgTUFZX1dSSVRFKSkKIAkJbWFzayB8PSBNQVlfQVBQRU5EOwogCi0JcmMgPSBmaWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsCi0JCQkgICBmaWxlX21hc2tfdG9fYXYoaW5vZGUtPmlfbW9kZSwgbWFzaykpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOworCXJldHVybiBmaWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsCisJCQkgICAgIGZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCAqZnNlYyA9IGZpbGUtPmZfc2VjdXJpdHk7Ci0Jc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwotCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwotCi0JaWYgKCFtYXNrKSB7CisJaWYgKCFtYXNrKQogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCiAJCXJldHVybiAwOwotCX0KLQotCWlmIChzaWQgPT0gZnNlYy0+c2lkICYmIGZzZWMtPmlzaWQgPT0gaXNlYy0+c2lkCi0JICAgICYmIGZzZWMtPnBzZXFubyA9PSBhdmNfcG9saWN5X3NlcW5vKCkpCi0JCXJldHVybiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKIAogCXJldHVybiBzZWxpbnV4X3JldmFsaWRhdGVfZmlsZV9wZXJtaXNzaW9uKGZpbGUsIG1hc2spOwogfQpAQCAtMzcyMyw3ICszNzA3LDcgQEAKIAkJc2tzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CiAJCXNrc2VjLT5zaWQgPSBpc2VjLT5zaWQ7CiAJCXNrc2VjLT5zY2xhc3MgPSBpc2VjLT5zY2xhc3M7Ci0JCWVyciA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzb2NrKTsKKwkJZXJyID0gc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHNvY2stPnNrLCBmYW1pbHkpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0zOTE0LDEzICszODk4LDcgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCQkJICBpbnQgc2l6ZSkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX1dSSVRFKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJldHVybiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKFNPQ0tfSU5PREUoc29jayksIE1BWV9XUklURSk7CisJcmV0dXJuIHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX1dSSVRFKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKQEAgLTQwNDAsNzIgKzQwMTgsNiBAQAogCQkJICAgIFNFQ0NMQVNTX05PREUsIE5PREVfX1JFQ1ZGUk9NLCBhZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrX3Jjdl9za2JfaXB0YWJsZXNfY29tcGF0KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLAotCQkJCQkJdTE2IGZhbWlseSwKLQkJCQkJCWNoYXIgKmFkZHJwKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0JdTE2IHNrX2NsYXNzOwotCXUzMiBuZXRpZl9wZXJtLCBub2RlX3Blcm0sIHJlY3ZfcGVybTsKLQl1MzIgcG9ydF9zaWQsIG5vZGVfc2lkLCBpZl9zaWQsIHNrX3NpZDsKLQotCXNrX3NpZCA9IHNrc2VjLT5zaWQ7Ci0Jc2tfY2xhc3MgPSBza3NlYy0+c2NsYXNzOwotCi0Jc3dpdGNoIChza19jbGFzcykgewotCWNhc2UgU0VDQ0xBU1NfVURQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19VRFBfUkVDVjsKLQkJbm9kZV9wZXJtID0gTk9ERV9fVURQX1JFQ1Y7Ci0JCXJlY3ZfcGVybSA9IFVEUF9TT0NLRVRfX1JFQ1ZfTVNHOwotCQlicmVhazsKLQljYXNlIFNFQ0NMQVNTX1RDUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fVENQX1JFQ1Y7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1RDUF9SRUNWOwotCQlyZWN2X3Blcm0gPSBUQ1BfU09DS0VUX19SRUNWX01TRzsKLQkJYnJlYWs7Ci0JY2FzZSBTRUNDTEFTU19EQ0NQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19EQ0NQX1JFQ1Y7Ci0JCW5vZGVfcGVybSA9IE5PREVfX0RDQ1BfUkVDVjsKLQkJcmVjdl9wZXJtID0gRENDUF9TT0NLRVRfX1JFQ1ZfTVNHOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1JBV0lQX1JFQ1Y7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1JBV0lQX1JFQ1Y7Ci0JCXJlY3ZfcGVybSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWVyciA9IHNlbF9uZXRpZl9zaWQoc2tiLT5paWYsICZpZl9zaWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgYWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZWxfbmV0bm9kZV9zaWQoYWRkcnAsIGZhbWlseSwgJm5vZGVfc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIG5vZGVfc2lkLCBTRUNDTEFTU19OT0RFLCBub2RlX3Blcm0sIGFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFyZWN2X3Blcm0pCi0JCXJldHVybiAwOwotCWVyciA9IHNlbF9uZXRwb3J0X3NpZChzay0+c2tfcHJvdG9jb2wsCi0JCQkgICAgICBudG9ocyhhZC0+dS5uZXQuc3BvcnQpLCAmcG9ydF9zaWQpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTRUxpbnV4OiBmYWlsdXJlIGluIgotCQkgICAgICAgIiBzZWxpbnV4X3NvY2tfcmN2X3NrYl9pcHRhYmxlc19jb21wYXQoKSwiCi0JCSAgICAgICAiIG5ldHdvcmsgcG9ydCBsYWJlbCBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gYXZjX2hhc19wZXJtKHNrX3NpZCwgcG9ydF9zaWQsIHNrX2NsYXNzLCByZWN2X3Blcm0sIGFkKTsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICB1MTYgZmFtaWx5KQogewpAQCAtNDEyMywxNCArNDAzNSwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoc2VsaW51eF9jb21wYXRfbmV0KQotCQllcnIgPSBzZWxpbnV4X3NvY2tfcmN2X3NrYl9pcHRhYmxlc19jb21wYXQoc2ssIHNrYiwgJmFkLAotCQkJCQkJCSAgIGZhbWlseSwgYWRkcnApOwotCWVsc2UgaWYgKHNlbGludXhfc2VjbWFya19lbmFibGVkKCkpCisJaWYgKHNlbGludXhfc2VjbWFya19lbmFibGVkKCkpIHsKIAkJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgc2tiLT5zZWNtYXJrLCBTRUNDTEFTU19QQUNLRVQsCiAJCQkJICAgUEFDS0VUX19SRUNWLCAmYWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KIAogCWlmIChzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKSB7CiAJCWVyciA9IHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcl9zaWQpOwpAQCAtNDE3Miw3ICs0MDgyLDcgQEAKIAkgKiB0byB0aGUgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KCkgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZQogCSAqIHNwZWNpYWwgaGFuZGxpbmcuICBXZSBkbyB0aGlzIGluIGFuIGF0dGVtcHQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uCiAJICogYXMgZmFzdCBhbmQgYXMgY2xlYW4gYXMgcG9zc2libGUuICovCi0JaWYgKHNlbGludXhfY29tcGF0X25ldCB8fCAhc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKKwlpZiAoIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCiAJCXJldHVybiBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoc2ssIHNrYiwgZmFtaWx5KTsKIAogCXNlY21hcmtfYWN0aXZlID0gc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKTsKQEAgLTQzMDQsNyArNDIxNCw3IEBACiAJbmV3c3NlYy0+cGVlcl9zaWQgPSBzc2VjLT5wZWVyX3NpZDsKIAluZXdzc2VjLT5zY2xhc3MgPSBzc2VjLT5zY2xhc3M7CiAKLQlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChuZXdzc2VjLCBuZXdzay0+c2tfZmFtaWx5KTsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChuZXdzc2VjKTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9za19nZXRzZWNpZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqc2VjaWQpCkBAIC00MzQ4LDE2ICs0MjU4LDE1IEBACiAJaWYgKHBlZXJzaWQgPT0gU0VDU0lEX05VTEwpIHsKIAkJcmVxLT5zZWNpZCA9IHNrc2VjLT5zaWQ7CiAJCXJlcS0+cGVlcl9zZWNpZCA9IFNFQ1NJRF9OVUxMOwotCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQllcnIgPSBzZWN1cml0eV9zaWRfbWxzX2NvcHkoc2tzZWMtPnNpZCwgcGVlcnNpZCwgJm5ld3NpZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlyZXEtPnNlY2lkID0gbmV3c2lkOworCQlyZXEtPnBlZXJfc2VjaWQgPSBwZWVyc2lkOwogCX0KIAotCWVyciA9IHNlY3VyaXR5X3NpZF9tbHNfY29weShza3NlYy0+c2lkLCBwZWVyc2lkLCAmbmV3c2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmVxLT5zZWNpZCA9IG5ld3NpZDsKLQlyZXEtPnBlZXJfc2VjaWQgPSBwZWVyc2lkOwotCXJldHVybiAwOworCXJldHVybiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChyZXEsIGZhbWlseSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKm5ld3NrLApAQCAtNDM3NCw3ICs0MjgzLDcgQEAKIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gdGFrZSBhbnkgc29ydCBvZiBsb2NrIGhlcmUgYXMgd2UgYXJlIHRoZSBvbmx5CiAJICogdGhyZWFkIHdpdGggYWNjZXNzIHRvIG5ld3Nrc2VjICovCi0Jc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQobmV3c2tzZWMsIHJlcS0+cnNrX29wcy0+ZmFtaWx5KTsKKwlzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShuZXdzaywgcmVxLT5yc2tfb3BzLT5mYW1pbHkpOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCkBAIC00Mzg3LDggKzQyOTYsNiBAQAogCQlmYW1pbHkgPSBQRl9JTkVUOwogCiAJc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZza3NlYy0+cGVlcl9zaWQpOwotCi0Jc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHNrLCBmYW1pbHkpOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3JlcV9jbGFzc2lmeV9mbG93KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKQEAgLTQ1NDAsNzEgKzQ0NDcsNiBAQAogCXJldHVybiBzZWxpbnV4X2lwX291dHB1dChza2IsIFBGX0lORVQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaXBfcG9zdHJvdXRlX2lwdGFibGVzX2NvbXBhdChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQlpbnQgaWZpbmRleCwKLQkJCQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCi0JCQkJCQl1MTYgZmFtaWx5LCBjaGFyICphZGRycCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXUxNiBza19jbGFzczsKLQl1MzIgbmV0aWZfcGVybSwgbm9kZV9wZXJtLCBzZW5kX3Blcm07Ci0JdTMyIHBvcnRfc2lkLCBub2RlX3NpZCwgaWZfc2lkLCBza19zaWQ7Ci0KLQlza19zaWQgPSBza3NlYy0+c2lkOwotCXNrX2NsYXNzID0gc2tzZWMtPnNjbGFzczsKLQotCXN3aXRjaCAoc2tfY2xhc3MpIHsKLQljYXNlIFNFQ0NMQVNTX1VEUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fVURQX1NFTkQ7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1VEUF9TRU5EOwotCQlzZW5kX3Blcm0gPSBVRFBfU09DS0VUX19TRU5EX01TRzsKLQkJYnJlYWs7Ci0JY2FzZSBTRUNDTEFTU19UQ1BfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1RDUF9TRU5EOwotCQlub2RlX3Blcm0gPSBOT0RFX19UQ1BfU0VORDsKLQkJc2VuZF9wZXJtID0gVENQX1NPQ0tFVF9fU0VORF9NU0c7Ci0JCWJyZWFrOwotCWNhc2UgU0VDQ0xBU1NfRENDUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fRENDUF9TRU5EOwotCQlub2RlX3Blcm0gPSBOT0RFX19EQ0NQX1NFTkQ7Ci0JCXNlbmRfcGVybSA9IERDQ1BfU09DS0VUX19TRU5EX01TRzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19SQVdJUF9TRU5EOwotCQlub2RlX3Blcm0gPSBOT0RFX19SQVdJUF9TRU5EOwotCQlzZW5kX3Blcm0gPSAwOwotCQlicmVhazsKLQl9Ci0KLQllcnIgPSBzZWxfbmV0aWZfc2lkKGlmaW5kZXgsICZpZl9zaWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgYWQpOwotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2VsX25ldG5vZGVfc2lkKGFkZHJwLCBmYW1pbHksICZub2RlX3NpZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCBhZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChzZW5kX3Blcm0gIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBzZWxfbmV0cG9ydF9zaWQoc2stPnNrX3Byb3RvY29sLAotCQkJICAgICAgbnRvaHMoYWQtPnUubmV0LmRwb3J0KSwgJnBvcnRfc2lkKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiU0VMaW51eDogZmFpbHVyZSBpbiIKLQkJICAgICAgICIgc2VsaW51eF9pcF9wb3N0cm91dGVfaXB0YWJsZXNfY29tcGF0KCksIgotCQkgICAgICAgIiBuZXR3b3JrIHBvcnQgbGFiZWwgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIGF2Y19oYXNfcGVybShza19zaWQsIHBvcnRfc2lkLCBza19jbGFzcywgc2VuZF9wZXJtLCBhZCk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQlpbnQgaWZpbmRleCwKIAkJCQkJCXUxNiBmYW1pbHkpCkBAIC00NjI1LDE1ICs0NDY3LDEwIEBACiAJaWYgKHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsIDAsICZwcm90bykpCiAJCXJldHVybiBORl9EUk9QOwogCi0JaWYgKHNlbGludXhfY29tcGF0X25ldCkgewotCQlpZiAoc2VsaW51eF9pcF9wb3N0cm91dGVfaXB0YWJsZXNfY29tcGF0KHNrYi0+c2ssIGlmaW5kZXgsCi0JCQkJCQkJICZhZCwgZmFtaWx5LCBhZGRycCkpCi0JCQlyZXR1cm4gTkZfRFJPUDsKLQl9IGVsc2UgaWYgKHNlbGludXhfc2VjbWFya19lbmFibGVkKCkpIHsKKwlpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkKIAkJaWYgKGF2Y19oYXNfcGVybShza3NlYy0+c2lkLCBza2ItPnNlY21hcmssCiAJCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19TRU5ELCAmYWQpKQogCQkJcmV0dXJuIE5GX0RST1A7Ci0JfQogCiAJaWYgKHNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCiAJCWlmIChzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3Qoc2tzZWMtPnNpZCwgc2tiLCAmYWQsIHByb3RvKSkKQEAgLTQ2NTcsNyArNDQ5NCw3IEBACiAJICogdG8gdGhlIHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdCgpIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUKIAkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UgZG8gdGhpcyBpbiBhbiBhdHRlbXB0IHRvIGtlZXAgdGhpcyBmdW5jdGlvbgogCSAqIGFzIGZhc3QgYW5kIGFzIGNsZWFuIGFzIHBvc3NpYmxlLiAqLwotCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQgfHwgIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCisJaWYgKCFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQogCQlyZXR1cm4gc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KHNrYiwgaWZpbmRleCwgZmFtaWx5KTsKICNpZmRlZiBDT05GSUdfWEZSTQogCS8qIElmIHNrYi0+ZHN0LT54ZnJtIGlzIG5vbi1OVUxMIHRoZW4gdGhlIHBhY2tldCBpcyB1bmRlcmdvaW5nIGFuIElQc2VjCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oCmluZGV4IGI5MTNjOGQuLmI0YjViOWIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvcmVxdWVzdF9zb2NrLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTQyLDggKzQzLDcgQEAKIHZvaWQgc2VsaW51eF9uZXRsYmxfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgaW50IGdhdGV3YXkpOwogCiB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYyk7Ci12b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCi0JCQkJICAgICAgaW50IGZhbWlseSk7Cit2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpOwogCiBpbnQgc2VsaW51eF9uZXRsYmxfc2tidWZmX2dldHNpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSB1MTYgZmFtaWx5LApAQCAtNTMsOSArNTMsOSBAQAogCQkJCSB1MTYgZmFtaWx5LAogCQkJCSB1MzIgc2lkKTsKIAotdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KTsKLWludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jayk7Ci1pbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitpbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KTsKK3ZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KTsKK2ludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KTsKIGludCBzZWxpbnV4X25ldGxibF9zb2NrX3Jjdl9za2Ioc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQl1MTYgZmFtaWx5LApAQCAtODUsOCArODUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCQkgICAgICAgaW50IGZhbWlseSkKKwkJCQkJICAgICAgIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpCiB7CiAJcmV0dXJuOwogfQpAQCAtMTEzLDE3ICsxMTIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkJdTE2IGZhbWlseSkKLXsKLQlyZXR1cm47Ci19Ci1zdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkJCSAgIHUxNiBmYW1pbHkpCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCQkgIGludCBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSkKK3sKKwlyZXR1cm47Cit9CitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgIHUxNiBmYW1pbHkpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKaW5kZXggMzUwNzk0YS4uMmU5ODQ0MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwpAQCAtMTAwLDQxICsxMDAsNiBAQAogfQogCiAvKioKLSAqIHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbQotICogQHNrOiB0aGUgc29ja2V0IHRvIGxhYmVsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBBdHRlbXB0IHRvIGxhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20uICBSZXR1cm5zIHplcm8gdmFsdWVzCi0gKiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc3RydWN0IHNvY2sgKnNrKQotewotCWludCByYzsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOwotCi0JaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKLQkJcmV0dXJuIDA7Ci0KLQlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKLQlpZiAoc2VjYXR0ciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssIHNlY2F0dHIpOwotCXN3aXRjaCAocmMpIHsKLQljYXNlIDA6Ci0JCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9MQUJFTEVEOwotCQlicmVhazsKLQljYXNlIC1FREVTVEFERFJSRVE6Ci0JCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7Ci0JCXJjID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKICAqIHNlbGludXhfbmV0bGJsX2NhY2hlX2ludmFsaWRhdGUgLSBJbnZhbGlkYXRlIHRoZSBOZXRMYWJlbCBjYWNoZQogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtMTg4LDEzICsxNTMsOSBAQAogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGFsbCB0aGUgTmV0TGFiZWwgc2tfc2VjdXJpdHlfc3RydWN0IGxvY2tpbmcuCiAgKgogICovCi12b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCi0JCQkJICAgICAgaW50IGZhbWlseSkKK3ZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYykKIHsKLQlpZiAoZmFtaWx5ID09IFBGX0lORVQpCi0JCXNzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVVJUkU7Ci0JZWxzZQotCQlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKKwlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKIH0KIAogLyoqCkBAIC0yODEsMTI3ICsyNDIsODYgQEAKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQgLSBOZXRsYWJlbCB0aGUgbmV3bHkgYWNjZXB0ZWQgY29ubmVjdGlvbgotICogQHNrOiB0aGUgbmV3IGNvbm5lY3Rpb24KKyAqIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0IC0gTGFiZWwgYW4gaW5jb21pbmcgc3RyZWFtIGNvbm5lY3Rpb24KKyAqIEByZXE6IGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBzb2NrZXQKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIEEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgb24gQHNrIHNvIG1ha2Ugc3VyZSBpdCBpcyBsYWJlbGVkCi0gKiBjb3JyZWN0bHkgd2l0aCB0aGUgTmV0TGFiZWwgc3VzYnN5c3RlbS4KKyAqIEEgbmV3IGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyByZXByZXNlbnRlZCBieSBAcmVxLCB3ZSBuZWVkIHRvIGxhYmVsCisgKiB0aGUgbmV3IHJlcXVlc3Rfc29jayBoZXJlIGFuZCB0aGUgc3RhY2sgd2lsbCBlbnN1cmUgdGhlIG9uLXRoZS13aXJlIGxhYmVsCisgKiB3aWxsIGdldCBwcmVzZXJ2ZWQgd2hlbiBhIGZ1bGwgc29jayBpcyBjcmVhdGVkIG9uY2UgdGhlIGNvbm5lY3Rpb24gaGFuZHNoYWtlCisgKiBpcyBjb21wbGV0ZS4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSkKK2ludCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHUxNiBmYW1pbHkpCiB7CiAJaW50IHJjOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKKworCWlmIChmYW1pbHkgIT0gUEZfSU5FVCkKKwkJcmV0dXJuIDA7CisKKwluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKKwlyYyA9IHNlY3VyaXR5X25ldGxibF9zaWRfdG9fc2VjYXR0cihyZXEtPnNlY2lkLCAmc2VjYXR0cik7CisJaWYgKHJjICE9IDApCisJCWdvdG8gaW5ldF9jb25uX3JlcXVlc3RfcmV0dXJuOworCXJjID0gbmV0bGJsX3JlcV9zZXRhdHRyKHJlcSwgJnNlY2F0dHIpOworaW5ldF9jb25uX3JlcXVlc3RfcmV0dXJuOgorCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZSAtIEluaXRpYWxpemUgdGhlIG5ld2x5IGNyZWF0ZWQgc29jaworICogQHNrOiB0aGUgbmV3IHNvY2sKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgdXNpbmcgQHNrLCB3ZSd2ZSBhbHJlYWR5IGxhYmVsZWQgdGhlCisgKiBzb2NrZXQgdmlhIHRoZSByZXF1ZXN0X3NvY2sgc3RydWN0IGluIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KCkgYnV0CisgKiB3ZSBuZWVkIHRvIHNldCB0aGUgTmV0TGFiZWwgc3RhdGUgaGVyZSBzaW5jZSB3ZSBub3cgaGF2ZSBhIHNvY2sgc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCit7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0Jc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cjsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CiAKLQlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQotCQlyZXR1cm47Ci0KLQlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKLQlpZiAoc2VjYXR0ciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssIHNlY2F0dHIpOwotCXN3aXRjaCAocmMpIHsKLQljYXNlIDA6CisJaWYgKGZhbWlseSA9PSBQRl9JTkVUKQogCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfTEFCRUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSAtRURFU1RBRERSUkVROgotCQkvKiBubyBQRl9JTkVUNiBzdXBwb3J0IHlldCBiZWNhdXNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYKLQkJICogbGFiZWxpbmcgcHJvdG9jb2xzICovCi0JCWlmIChmYW1pbHkgIT0gUEZfSU5FVCkgewotCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJYWRkci5zaW5fZmFtaWx5ID0gZmFtaWx5OwotCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNrX2luZXQtPmRhZGRyOwotCQlpZiAobmV0bGJsX2Nvbm5fc2V0YXR0cihzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAotCQkJCQlzZWNhdHRyKSAhPSAwKSB7Ci0JCQkvKiB3ZSBmYWlsZWQgdG8gbGFiZWwgdGhlIGNvbm5lY3RlZCBzb2NrZXQgKGNvdWxkIGJlCi0JCQkgKiBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMsIHRoZSBhY3R1YWwgIndoeSIgaXNuJ3QKLQkJCSAqIGltcG9ydGFudCBoZXJlKSBzbyB3ZSBoYXZlIHRvIGdvIHRvIG91ciBiYWNrdXAgcGxhbiwKLQkJCSAqIGxhYmVsaW5nIHRoZSBwYWNrZXRzIGluZGl2aWR1YWxseSBpbiB0aGUgbmV0ZmlsdGVyCi0JCQkgKiBsb2NhbCBvdXRwdXQgaG9vay4gIHRoaXMgaXMgb2theSBidXQgd2UgbmVlZCB0bwotCQkJICogYWRqdXN0IHRoZSBNU1Mgb2YgdGhlIGNvbm5lY3Rpb24gdG8gdGFrZSBpbnRvCi0JCQkgKiBhY2NvdW50IGFueSBsYWJlbGluZyBvdmVyaGVhZCwgc2luY2Ugd2UgZG9uJ3Qga25vdwotCQkJICogdGhlIGV4YWN0IG92ZXJoZWFkIGF0IHRoaXMgcG9pbnQgd2UnbGwgdXNlIHRoZSB3b3JzdAotCQkJICogY2FzZSB2YWx1ZSB3aGljaCBpcyA0MCBieXRlcyBmb3IgSVB2NCAqLwotCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uID0gaW5ldF9jc2soc2spOwotCQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiArPSA0MCAtCi0JCQkJICAgICAgKHNrX2luZXQtPm9wdCA/IHNrX2luZXQtPm9wdC0+b3B0bGVuIDogMCk7Ci0JCQlza19jb25uLT5pY3NrX3N5bmNfbXNzKHNrLCBza19jb25uLT5pY3NrX3BtdHVfY29va2llKTsKLQotCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVNLQjsKLQkJfSBlbHNlCi0JCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfQ09OTkxBQkVMRUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIG5vdGUgdGhhdCB3ZSBhcmUgZmFpbGluZyB0byBsYWJlbCB0aGUgc29ja2V0IHdoaWNoIGNvdWxkIGJlCi0JCSAqIGEgYmFkIHRoaW5nIHNpbmNlIGl0IG1lYW5zIHRyYWZmaWMgY291bGQgbGVhdmUgdGhlIHN5c3RlbQotCQkgKiB3aXRob3V0IHRoZSBkZXNpcmVkIGxhYmVsaW5nLCBob3dldmVyLCBhbGwgaXMgbm90IGxvc3QgYXMKLQkJICogd2UgaGF2ZSBhIGNoZWNrIGluIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oKSB0bwotCQkgKiBwaWNrIHVwIHRoZSBwaWVjZXMgdGhhdCB3ZSBtaWdodCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndAotCQkgKiByZXR1cm4gYW4gZXJyb3IgY29kZSAqLwotCQlicmVhazsKLQl9CisJZWxzZQorCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfVU5TRVQ7CiB9CiAKIC8qKgogICogc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgTmV0TGFiZWwKICAqIEBzb2NrOiB0aGUgc29ja2V0IHRvIGxhYmVsCisgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbSB1c2luZyB0aGUgZ2l2ZW4KICAqIFNJRC4gIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spCi17Ci0JcmV0dXJuIHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHNvY2stPnNrKTsKLX0KLQotLyoqCi0gKiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uIC0gVmVyaWZ5IHRoZSBzb2NrZXQgaXMgTmV0TGFiZWwgbGFiZWxlZAotICogQGlub2RlOiB0aGUgZmlsZSBkZXNjcmlwdG9yJ3MgaW5vZGUKLSAqIEBtYXNrOiB0aGUgcGVybWlzc2lvbiBtYXNrCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBMb29rcyBhdCBhIGZpbGUncyBpbm9kZSBhbmQgaWYgaXQgaXMgbWFya2VkIGFzIGEgc29ja2V0IHByb3RlY3RlZCBieQotICogTmV0TGFiZWwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc29ja2V0IGhhcyBiZWVuIGxhYmVsZWQsIGlmIG5vdCB0cnkgdG8gbGFiZWwKLSAqIHRoZSBzb2NrZXQgbm93IHdpdGggdGhlIGlub2RlJ3MgU0lELiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlCi0gKiB2YWx1ZXMgb24gZmFpbHVyZS4KLSAqCi0gKi8KLWludCBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoraW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCiB7CiAJaW50IHJjOwotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7CiAKLQlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpIHx8Ci0JICAgICgobWFzayAmIChNQVlfV1JJVEUgfCBNQVlfQVBQRU5EKSkgPT0gMCkpCi0JCXJldHVybiAwOwotCXNvY2sgPSBTT0NLRVRfSShpbm9kZSk7Ci0Jc2sgPSBzb2NrLT5zazsKLQlpZiAoc2sgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0Jc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0JaWYgKHNrc2VjID09IE5VTEwgfHwgc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQorCWlmIChmYW1pbHkgIT0gUEZfSU5FVCkKIAkJcmV0dXJuIDA7CiAKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JYmhfbG9ja19zb2NrX25lc3RlZChzayk7Ci0JaWYgKGxpa2VseShza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX1JFUVVJUkUpKQotCQlyYyA9IHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHNrKTsKLQllbHNlCisJc2VjYXR0ciA9IHNlbGludXhfbmV0bGJsX3NvY2tfZ2VuYXR0cihzayk7CisJaWYgKHNlY2F0dHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCBmYW1pbHksIHNlY2F0dHIpOworCXN3aXRjaCAocmMpIHsKKwljYXNlIDA6CisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9MQUJFTEVEOworCQlicmVhazsKKwljYXNlIC1FREVTVEFERFJSRVE6CisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7CiAJCXJjID0gMDsKLQliaF91bmxvY2tfc29jayhzayk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IGQzYzhiOTguLjJkNTEzNmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtNDcsOCArNDcsNiBAQAogCiB1bnNpZ25lZCBpbnQgc2VsaW51eF9jaGVja3JlcXByb3QgPSBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU7CiAKLWludCBzZWxpbnV4X2NvbXBhdF9uZXQgPSAwOwotCiBzdGF0aWMgaW50IF9faW5pdCBjaGVja3JlcXByb3Rfc2V0dXAoY2hhciAqc3RyKQogewogCXVuc2lnbmVkIGxvbmcgY2hlY2tyZXFwcm90OwpAQCAtNTgsMTYgKzU2LDYgQEAKIH0KIF9fc2V0dXAoImNoZWNrcmVxcHJvdD0iLCBjaGVja3JlcXByb3Rfc2V0dXApOwogCi1zdGF0aWMgaW50IF9faW5pdCBzZWxpbnV4X2NvbXBhdF9uZXRfc2V0dXAoY2hhciAqc3RyKQotewotCXVuc2lnbmVkIGxvbmcgY29tcGF0X25ldDsKLQlpZiAoIXN0cmljdF9zdHJ0b3VsKHN0ciwgMCwgJmNvbXBhdF9uZXQpKQotCQlzZWxpbnV4X2NvbXBhdF9uZXQgPSBjb21wYXRfbmV0ID8gMSA6IDA7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJzZWxpbnV4X2NvbXBhdF9uZXQ9Iiwgc2VsaW51eF9jb21wYXRfbmV0X3NldHVwKTsKLQotCiBzdGF0aWMgREVGSU5FX01VVEVYKHNlbF9tdXRleCk7CiAKIC8qIGdsb2JhbCBkYXRhIGZvciBib29sZWFucyAqLwpAQCAtNDUwLDYxICs0MzgsNiBAQAogCS53cml0ZQkJPSBzZWxfd3JpdGVfY2hlY2tyZXFwcm90LAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfY29tcGF0X25ldChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOwotCXNzaXplX3QgbGVuZ3RoOwotCi0JbGVuZ3RoID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWQiLCBzZWxpbnV4X2NvbXBhdF9uZXQpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCB0bXBidWYsIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jb21wYXRfbmV0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyICpwYWdlOwotCXNzaXplX3QgbGVuZ3RoOwotCWludCBuZXdfdmFsdWU7Ci0KLQlsZW5ndGggPSB0YXNrX2hhc19zZWN1cml0eShjdXJyZW50LCBTRUNVUklUWV9fTE9BRF9QT0xJQ1kpOwotCWlmIChsZW5ndGgpCi0JCXJldHVybiBsZW5ndGg7Ci0KLQlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoKnBwb3MgIT0gMCkgewotCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCWxlbmd0aCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgY291bnQpKQotCQlnb3RvIG91dDsKLQotCWxlbmd0aCA9IC1FSU5WQUw7Ci0JaWYgKHNzY2FuZihwYWdlLCAiJWQiLCAmbmV3X3ZhbHVlKSAhPSAxKQotCQlnb3RvIG91dDsKLQotCWlmIChuZXdfdmFsdWUpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCSAgICAgICAiU0VMaW51eDogY29tcGF0X25ldCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHNlY21hcmsiCi0JCSAgICAgICAiIGluc3RlYWRcbiIpOwotCQlzZWxpbnV4X2NvbXBhdF9uZXQgPSAxOwotCX0gZWxzZQotCQlzZWxpbnV4X2NvbXBhdF9uZXQgPSAwOwotCWxlbmd0aCA9IGNvdW50Owotb3V0OgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7Ci0JcmV0dXJuIGxlbmd0aDsKLX0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9jb21wYXRfbmV0X29wcyA9IHsKLQkucmVhZAkJPSBzZWxfcmVhZF9jb21wYXRfbmV0LAotCS53cml0ZQkJPSBzZWxfd3JpdGVfY29tcGF0X25ldCwKLX07Ci0KIC8qCiAgKiBSZW1haW5pbmcgbm9kZXMgdXNlIHRyYW5zYWN0aW9uIGJhc2VkIElPIG1ldGhvZHMgbGlrZSBuZnNkL25mc2N0bC5jCiAgKi8KQEAgLTE2NjUsNyArMTU5OCw2IEBACiAJCVtTRUxfRElTQUJMRV0gPSB7ImRpc2FibGUiLCAmc2VsX2Rpc2FibGVfb3BzLCBTX0lXVVNSfSwKIAkJW1NFTF9NRU1CRVJdID0geyJtZW1iZXIiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lSVUdPfFNfSVdVR099LAogCQlbU0VMX0NIRUNLUkVRUFJPVF0gPSB7ImNoZWNrcmVxcHJvdCIsICZzZWxfY2hlY2tyZXFwcm90X29wcywgU19JUlVHT3xTX0lXVVNSfSwKLQkJW1NFTF9DT01QQVRfTkVUXSA9IHsiY29tcGF0X25ldCIsICZzZWxfY29tcGF0X25ldF9vcHMsIFNfSVJVR098U19JV1VTUn0sCiAJCVtTRUxfUkVKRUNUX1VOS05PV05dID0geyJyZWplY3RfdW5rbm93biIsICZzZWxfaGFuZGxlX3Vua25vd25fb3BzLCBTX0lSVUdPfSwKIAkJW1NFTF9ERU5ZX1VOS05PV05dID0geyJkZW55X3Vua25vd24iLCAmc2VsX2hhbmRsZV91bmtub3duX29wcywgU19JUlVHT30sCiAJCS8qIGxhc3Qgb25lICovIHsiIn0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmggYi9zZWN1cml0eS9zbWFjay9zbWFjay5oCmluZGV4IGI3OTU4MmUuLjQyZWYzMTMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2suaApAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogCiAvKgogICogV2h5IDIzPyBDSVBTTyBpcyBjb25zdHJhaW5lZCB0byAzMCwgc28gYSAzMiBieXRlIGJ1ZmZlciBpcwpAQCAtNDAsNyArNDIsNiBAQAogc3RydWN0IHNvY2tldF9zbWFjayB7CiAJY2hhcgkJKnNta19vdXQ7CQkJLyogb3V0Ym91bmQgbGFiZWwgKi8KIAljaGFyCQkqc21rX2luOwkJCS8qIGluYm91bmQgbGFiZWwgKi8KLQlpbnQJCXNta19sYWJlbGVkOwkJCS8qIGxhYmVsIHNjaGVtZSAqLwogCWNoYXIJCXNta19wYWNrZXRbU01LX0xBQkVMTEVOXTsJLyogVENQIHBlZXIgbGFiZWwgKi8KIH07CiAKQEAgLTU5LDE3ICs2MCwxMCBAQAogICogQSBsYWJlbCBhY2Nlc3MgcnVsZS4KICAqLwogc3RydWN0IHNtYWNrX3J1bGUgewotCWNoYXIJKnNta19zdWJqZWN0OwotCWNoYXIJKnNta19vYmplY3Q7Ci0JaW50CXNta19hY2Nlc3M7Ci19OwotCi0vKgotICogQW4gZW50cnkgaW4gdGhlIHRhYmxlIG9mIHBlcm1pdHRlZCBsYWJlbCBhY2Nlc3Nlcy4KLSAqLwotc3RydWN0IHNta19saXN0X2VudHJ5IHsKLQlzdHJ1Y3Qgc21rX2xpc3RfZW50cnkJKnNta19uZXh0OwotCXN0cnVjdCBzbWFja19ydWxlCXNta19ydWxlOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwljaGFyCQkJKnNta19zdWJqZWN0OworCWNoYXIJCQkqc21rX29iamVjdDsKKwlpbnQJCQlzbWtfYWNjZXNzOwogfTsKIAogLyoKQEAgLTg1LDcgKzc5LDcgQEAKICAqIEFuIGVudHJ5IGluIHRoZSB0YWJsZSBpZGVudGlmeWluZyBob3N0cy4KICAqLwogc3RydWN0IHNta19uZXRsYmxhZGRyIHsKLQlzdHJ1Y3Qgc21rX25ldGxibGFkZHIJKnNta19uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4Jc21rX2hvc3Q7CS8qIG5ldHdvcmsgYWRkcmVzcyAqLwogCXN0cnVjdCBpbl9hZGRyCQlzbWtfbWFzazsJLyogbmV0d29yayBtYXNrICovCiAJY2hhcgkJCSpzbWtfbGFiZWw7CS8qIGxhYmVsICovCkBAIC0xMTMsNyArMTA3LDcgQEAKICAqIHRoZSBjaXBzbyBkaXJlY3QgbWFwcGluZyBpbiB1c2VkIGludGVybmFsbHkuCiAgKi8KIHN0cnVjdCBzbWFja19rbm93biB7Ci0Jc3RydWN0IHNtYWNrX2tub3duCSpzbWtfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJY2hhcgkJCXNta19rbm93bltTTUtfTEFCRUxMRU5dOwogCXUzMgkJCXNta19zZWNpZDsKIAlzdHJ1Y3Qgc21hY2tfY2lwc28JKnNta19jaXBzbzsKQEAgLTEzOCw2ICsxMzIsOCBAQAogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBJTglYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfSVBJTgogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBPVVQJWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQT1VUCiAKKyNkZWZpbmUgU01BQ0tfQ0lQU09fT1BUSU9OIAkiLUNJUFNPIgorCiAvKgogICogSG93IGNvbW11bmljYXRpb25zIG9uIHRoaXMgc29ja2V0IGFyZSB0cmVhdGVkLgogICogVXN1YWxseSBpdCdzIGRldGVybWluZWQgYnkgdGhlIHVuZGVybHlpbmcgbmV0bGFiZWwgY29kZQpAQCAtMjA1LDggKzIwMSw4IEBACiBleHRlcm4gaW50IHNtYWNrX2NpcHNvX2RpcmVjdDsKIGV4dGVybiBjaGFyICpzbWFja19uZXRfYW1iaWVudDsKIGV4dGVybiBjaGFyICpzbWFja19vbmx5Y2FwOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNtYWNrX2NpcHNvX29wdGlvbjsKIAotZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biAqc21hY2tfa25vd247CiBleHRlcm4gc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2Zsb29yOwogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9oYXQ7CiBleHRlcm4gc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2h1aDsKQEAgLTIxNCw4ICsyMTAsMTAgQEAKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fc3RhcjsKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fd2ViOwogCi1leHRlcm4gc3RydWN0IHNta19saXN0X2VudHJ5ICpzbWFja19saXN0OwotZXh0ZXJuIHN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc21hY2tfbmV0bGJsYWRkcnM7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzbWFja19rbm93bl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc21hY2tfcnVsZV9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc21rX25ldGxibGFkZHJfbGlzdDsKKwogZXh0ZXJuIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHNtYWNrX29wczsKIAogLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKaW5kZXggY2ZhMTljYS4uYWMwYTI3MCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKQEAgLTE2LDQ4ICsxNiw0MiBAQAogI2luY2x1ZGUgInNtYWNrLmgiCiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9odWggPSB7Ci0JLnNta19uZXh0CT0gTlVMTCwKIAkuc21rX2tub3duCT0gIj8iLAogCS5zbWtfc2VjaWQJPSAyLAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2hhdCA9IHsKLQkuc21rX25leHQJPSAmc21hY2tfa25vd25faHVoLAogCS5zbWtfa25vd24JPSAiXiIsCiAJLnNta19zZWNpZAk9IDMsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fc3RhciA9IHsKLQkuc21rX25leHQJPSAmc21hY2tfa25vd25faGF0LAogCS5zbWtfa25vd24JPSAiKiIsCiAJLnNta19zZWNpZAk9IDQsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fZmxvb3IgPSB7Ci0JLnNta19uZXh0CT0gJnNtYWNrX2tub3duX3N0YXIsCiAJLnNta19rbm93bgk9ICJfIiwKIAkuc21rX3NlY2lkCT0gNSwKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9pbnZhbGlkID0gewotCS5zbWtfbmV4dAk9ICZzbWFja19rbm93bl9mbG9vciwKIAkuc21rX2tub3duCT0gIiIsCiAJLnNta19zZWNpZAk9IDYsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fd2ViID0gewotCS5zbWtfbmV4dAk9ICZzbWFja19rbm93bl9pbnZhbGlkLAogCS5zbWtfa25vd24JPSAiQCIsCiAJLnNta19zZWNpZAk9IDcsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCi1zdHJ1Y3Qgc21hY2tfa25vd24gKnNtYWNrX2tub3duID0gJnNtYWNrX2tub3duX3dlYjsKK0xJU1RfSEVBRChzbWFja19rbm93bl9saXN0KTsKIAogLyoKICAqIFRoZSBpbml0aWFsIHZhbHVlIG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuIGFueSBvZiB0aGUKQEAgLTg3LDcgKzgxLDYgQEAKIGludCBzbWtfYWNjZXNzKGNoYXIgKnN1YmplY3RfbGFiZWwsIGNoYXIgKm9iamVjdF9sYWJlbCwgaW50IHJlcXVlc3QpCiB7CiAJdTMyIG1heSA9IE1BWV9OT1Q7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpzcDsKIAlzdHJ1Y3Qgc21hY2tfcnVsZSAqc3JwOwogCiAJLyoKQEAgLTEzOSw5ICsxMzIsOCBAQAogCSAqIGFjY2VzcyAoZS5nLiByZWFkIGlzIGluY2x1ZGVkIGluIHJlYWR3cml0ZSkgaXQncwogCSAqIGdvb2QuCiAJICovCi0JZm9yIChzcCA9IHNtYWNrX2xpc3Q7IHNwICE9IE5VTEw7IHNwID0gc3AtPnNta19uZXh0KSB7Ci0JCXNycCA9ICZzcC0+c21rX3J1bGU7Ci0KKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3JwLCAmc21hY2tfcnVsZV9saXN0LCBsaXN0KSB7CiAJCWlmIChzcnAtPnNta19zdWJqZWN0ID09IHN1YmplY3RfbGFiZWwgfHwKIAkJICAgIHN0cmNtcChzcnAtPnNta19zdWJqZWN0LCBzdWJqZWN0X2xhYmVsKSA9PSAwKSB7CiAJCQlpZiAoc3JwLT5zbWtfb2JqZWN0ID09IG9iamVjdF9sYWJlbCB8fApAQCAtMTUxLDYgKzE0Myw3IEBACiAJCQl9CiAJCX0KIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJLyoKIAkgKiBUaGlzIGlzIGEgYml0IG1hcCBvcGVyYXRpb24uCiAJICovCkBAIC0yMjgsMTQgKzIyMSwxNyBAQAogCiAJbXV0ZXhfbG9jaygmc21hY2tfa25vd25fbG9jayk7CiAKLQlmb3IgKHNrcCA9IHNtYWNrX2tub3duOyBza3AgIT0gTlVMTDsgc2twID0gc2twLT5zbWtfbmV4dCkKLQkJaWYgKHN0cm5jbXAoc2twLT5zbWtfa25vd24sIHNtYWNrLCBTTUtfTUFYTEVOKSA9PSAwKQorCWZvdW5kID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CisJCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkgeworCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CisJCX0KKwl9CiAKLQlpZiAoc2twID09IE5VTEwpIHsKKwlpZiAoZm91bmQgPT0gMCkgewogCQlza3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21hY2tfa25vd24pLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHNrcCAhPSBOVUxMKSB7Ci0JCQlza3AtPnNta19uZXh0ID0gc21hY2tfa25vd247CiAJCQlzdHJuY3B5KHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTik7CiAJCQlza3AtPnNta19zZWNpZCA9IHNtYWNrX25leHRfc2VjaWQrKzsKIAkJCXNrcC0+c21rX2NpcHNvID0gTlVMTDsKQEAgLTI0NCw4ICsyNDAsNyBAQAogCQkJICogTWFrZSBzdXJlIHRoYXQgdGhlIGVudHJ5IGlzIGFjdHVhbGx5CiAJCQkgKiBmaWxsZWQgYmVmb3JlIHB1dHRpbmcgaXQgb24gdGhlIGxpc3QuCiAJCQkgKi8KLQkJCXNtcF9tYigpOwotCQkJc21hY2tfa25vd24gPSBza3A7CisJCQlsaXN0X2FkZF9yY3UoJnNrcC0+bGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOwogCQl9CiAJfQogCkBAIC0yNjYsNiArMjYxLDkgQEAKIHsKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcDsKIAorCS8qIGxhYmVscyBjYW5ub3QgYmVnaW4gd2l0aCBhICctJyAqLworCWlmIChzdHJpbmdbMF0gPT0gJy0nKQorCQlyZXR1cm4gTlVMTDsKIAlza3AgPSBzbWtfaW1wb3J0X2VudHJ5KHN0cmluZywgbGVuKTsKIAlpZiAoc2twID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMjgzLDE0ICsyODEsMTkgQEAKIHsKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcDsKIAotCWZvciAoc2twID0gc21hY2tfa25vd247IHNrcCAhPSBOVUxMOyBza3AgPSBza3AtPnNta19uZXh0KQotCQlpZiAoc2twLT5zbWtfc2VjaWQgPT0gc2VjaWQpCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNrcCwgJnNtYWNrX2tub3duX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNrcC0+c21rX3NlY2lkID09IHNlY2lkKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBza3AtPnNta19rbm93bjsKKwkJfQorCX0KIAogCS8qCiAJICogSWYgd2UgZ290IHRoaXMgZmFyIHNvbWVvbmUgYXNrZWQgZm9yIHRoZSB0cmFuc2xhdGlvbgogCSAqIG9mIGEgc2VjaWQgdGhhdCBpcyBub3Qgb24gdGhlIGxpc3QuCiAJICovCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHNtYWNrX2tub3duX2ludmFsaWQuc21rX2tub3duOwogfQogCkBAIC0zMDUsOSArMzA4LDE0IEBACiB7CiAJc3RydWN0IHNtYWNrX2tub3duICpza3A7CiAKLQlmb3IgKHNrcCA9IHNtYWNrX2tub3duOyBza3AgIT0gTlVMTDsgc2twID0gc2twLT5zbWtfbmV4dCkKLQkJaWYgKHN0cm5jbXAoc2twLT5zbWtfa25vd24sIHNtYWNrLCBTTUtfTUFYTEVOKSA9PSAwKQorCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CisJCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gc2twLT5zbWtfc2VjaWQ7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzMiw3ICszNDAsOCBAQAogCXN0cnVjdCBzbWFja19rbm93biAqa3A7CiAJY2hhciAqZmluYWwgPSBOVUxMOwogCi0JZm9yIChrcCA9IHNtYWNrX2tub3duOyBmaW5hbCA9PSBOVUxMICYmIGtwICE9IE5VTEw7IGtwID0ga3AtPnNta19uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoa3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CiAJCWlmIChrcC0+c21rX2NpcHNvID09IE5VTEwpCiAJCQljb250aW51ZTsKIApAQCAtMzQ0LDYgKzM1Myw3IEBACiAKIAkJc3Bpbl91bmxvY2tfYmgoJmtwLT5zbWtfY2lwc29sb2NrKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGZpbmFsID09IE5VTEwpCiAJCWZpbmFsID0gc21hY2tfa25vd25faHVoLnNta19rbm93bjsKIAlzdHJuY3B5KHJlc3VsdCwgZmluYWwsIFNNS19NQVhMRU4pOwpAQCAtMzYwLDEzICszNzAsMTkgQEAKIGludCBzbWFja190b19jaXBzbyhjb25zdCBjaGFyICpzbWFjaywgc3RydWN0IHNtYWNrX2NpcHNvICpjcCkKIHsKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKmtwOworCWludCBmb3VuZCA9IDA7CiAKLQlmb3IgKGtwID0gc21hY2tfa25vd247IGtwICE9IE5VTEw7IGtwID0ga3AtPnNta19uZXh0KQorCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnNtYWNrX2tub3duX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGtwLT5zbWtfa25vd24gPT0gc21hY2sgfHwKLQkJICAgIHN0cmNtcChrcC0+c21rX2tub3duLCBzbWFjaykgPT0gMCkKKwkJICAgIHN0cmNtcChrcC0+c21rX2tub3duLCBzbWFjaykgPT0gMCkgeworCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAoa3AgPT0gTlVMTCB8fCBrcC0+c21rX2NpcHNvID09IE5VTEwpCisJaWYgKGZvdW5kID09IDAgfHwga3AtPnNta19jaXBzbyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCW1lbWNweShjcCwga3AtPnNta19jaXBzbywgc2l6ZW9mKHN0cnVjdCBzbWFja19jaXBzbykpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4NGI2MmI1Li45MjE1MTQ5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtNyw2ICs3LDggQEAKICAqCUNhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqICAgICAgICAgICAgICAgIFBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKQEAgLTIwLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2QuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtNjA2LDYgKzYwOSw5IEBACiAJICAgIHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLSVBPVVQpID09IDApIHsKIAkJaWYgKCFjYXBhYmxlKENBUF9NQUNfQURNSU4pKQogCQkJcmMgPSAtRVBFUk07CisJCS8qIGEgbGFiZWwgY2Fubm90IGJlIHZvaWQgYW5kIGNhbm5vdCBiZWdpbiB3aXRoICctJyAqLworCQlpZiAoc2l6ZSA9PSAwIHx8IChzaXplID4gMCAmJiAoKGNoYXIgKil2YWx1ZSlbMF0gPT0gJy0nKSkKKwkJCXJjID0gLUVJTlZBTDsKIAl9IGVsc2UKIAkJcmMgPSBjYXBfaW5vZGVfc2V0eGF0dHIoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCkBAIC0xMjc1LDcgKzEyODEsNiBAQAogCiAJc3NwLT5zbWtfaW4gPSBjc3A7CiAJc3NwLT5zbWtfb3V0ID0gY3NwOwotCXNzcC0+c21rX2xhYmVsZWQgPSBTTUFDS19DSVBTT19TT0NLRVQ7CiAJc3NwLT5zbWtfcGFja2V0WzBdID0gJ1wwJzsKIAogCXNrLT5za19zZWN1cml0eSA9IHNzcDsKQEAgLTEyOTUsNiArMTMwMCw0MyBAQAogfQogCiAvKioKKyogc21hY2tfaG9zdF9sYWJlbCAtIGNoZWNrIGhvc3QgYmFzZWQgcmVzdHJpY3Rpb25zCisqIEBzaXA6IHRoZSBvYmplY3QgZW5kCisqCisqIGxvb2tzIGZvciBob3N0IGJhc2VkIGFjY2VzcyByZXN0cmljdGlvbnMKKyoKKyogVGhpcyB2ZXJzaW9uIHdpbGwgb25seSBiZSBhcHByb3ByaWF0ZSBmb3IgcmVhbGx5IHNtYWxsIHNldHMgb2Ygc2luZ2xlIGxhYmVsCisqIGhvc3RzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgUkNVIHJlYWQgbG9jayBpcworKiB0YWtlbiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKgorKiBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgZmFyIGVuZCBvciBOVUxMIGlmIGl0J3Mgbm90IHNwZWNpYWwuCisqLworc3RhdGljIGNoYXIgKnNtYWNrX2hvc3RfbGFiZWwoc3RydWN0IHNvY2thZGRyX2luICpzaXApCit7CisJc3RydWN0IHNta19uZXRsYmxhZGRyICpzbnA7CisJc3RydWN0IGluX2FkZHIgKnNpYXAgPSAmc2lwLT5zaW5fYWRkcjsKKworCWlmIChzaWFwLT5zX2FkZHIgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzbnAsICZzbWtfbmV0bGJsYWRkcl9saXN0LCBsaXN0KQorCQkvKgorCQkqIHdlIGJyZWFrIGFmdGVyIGZpbmRpbmcgdGhlIGZpcnN0IG1hdGNoIGJlY2F1c2UKKwkJKiB0aGUgbGlzdCBpcyBzb3J0ZWQgZnJvbSBsb25nZXN0IHRvIHNob3J0ZXN0IG1hc2sKKwkJKiBzbyB3ZSBoYXZlIGZvdW5kIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoCisJCSovCisJCWlmICgoJnNucC0+c21rX2hvc3Quc2luX2FkZHIpLT5zX2FkZHIgPT0KKwkJICAgIChzaWFwLT5zX2FkZHIgJiAoJnNucC0+c21rX21hc2spLT5zX2FkZHIpKSB7CisJCQkvKiB3ZSBoYXZlIGZvdW5kIHRoZSBzcGVjaWFsIENJUFNPIG9wdGlvbiAqLworCQkJaWYgKHNucC0+c21rX2xhYmVsID09IHNtYWNrX2NpcHNvX29wdGlvbikKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXJldHVybiBzbnAtPnNta19sYWJlbDsKKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgogICogc21hY2tfc2V0X2NhdHNldCAtIGNvbnZlcnQgYSBjYXBzZXQgdG8gbmV0bGFiZWwgbWxzIGNhdGVnb3JpZXMKICAqIEBjYXRzZXQ6IHRoZSBTbWFjayBjYXRlZ29yaWVzCiAgKiBAc2FwOiB3aGVyZSB0byBwdXQgdGhlIG5ldGxhYmVsIGNhdGVnb3JpZXMKQEAgLTEzNjUsMTEgKzE0MDcsMTAgQEAKICAqLwogc3RhdGljIGludCBzbWFja19uZXRsYWJlbChzdHJ1Y3Qgc29jayAqc2ssIGludCBsYWJlbGVkKQogewotCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcDsKKwlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3AgPSBzay0+c2tfc2VjdXJpdHk7CiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCWludCByYyA9IDA7CiAKLQlzc3AgPSBzay0+c2tfc2VjdXJpdHk7CiAJLyoKIAkgKiBVc3VhbGx5IHRoZSBuZXRsYWJlbCBjb2RlIHdpbGwgaGFuZGxlIGNoYW5naW5nIHRoZQogCSAqIHBhY2tldCBsYWJlbGluZyBiYXNlZCBvbiB0aGUgbGFiZWwuCkBAIC0xMzg3LDI3ICsxNDI4LDUxIEBACiAJZWxzZSB7CiAJCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOwogCQlzbWFja190b19zZWNhdHRyKHNzcC0+c21rX291dCwgJnNlY2F0dHIpOwotCQlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssICZzZWNhdHRyKTsKKwkJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCBzay0+c2tfZmFtaWx5LCAmc2VjYXR0cik7CiAJCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOwogCX0KIAogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKLQkvKgotCSAqIFJlbWVtYmVyIHRoZSBsYWJlbCBzY2hlbWUgdXNlZCBzbyB0aGF0IGl0IGlzIG5vdAotCSAqIG5lY2Vzc2FyeSB0byBkbyB0aGUgbmV0bGFiZWwgc2V0dGluZyBpZiBpdCBoYXMgbm90Ci0JICogY2hhbmdlZCB0aGUgbmV4dCB0aW1lIHRocm91Z2guCi0JICoKLQkgKiBUaGUgLUVERVNUQUREUlJFUSBjYXNlIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGVyZSdzCi0JICogYSBzaW5nbGUgbGV2ZWwgaG9zdCBpbnZvbHZlZC4KLQkgKi8KLQlpZiAocmMgPT0gMCkKLQkJc3NwLT5zbWtfbGFiZWxlZCA9IGxhYmVsZWQ7CiAKIAlyZXR1cm4gcmM7CiB9CiAKIC8qKgorICogc21hY2tfbmV0bGJlbF9zZW5kIC0gU2V0IHRoZSBzZWNhdHRyIG9uIGEgc29ja2V0IGFuZCBwZXJmb3JtIGFjY2VzcyBjaGVja3MKKyAqIEBzazogdGhlIHNvY2tldAorICogQHNhcDogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqCisgKiBTZXQgdGhlIGNvcnJlY3Qgc2VjYXR0ciBmb3IgdGhlIGdpdmVuIHNvY2tldCBiYXNlZCBvbiB0aGUgZGVzdGluYXRpb24KKyAqIGFkZHJlc3MgYW5kIHBlcmZvcm0gYW55IG91dGJvdW5kIGFjY2VzcyBjaGVja3MgbmVlZGVkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCisgKgorICovCitzdGF0aWMgaW50IHNtYWNrX25ldGxhYmVsX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhcCkKK3sKKwlpbnQgcmM7CisJaW50IHNrX2xibDsKKwljaGFyICpob3N0c3A7CisJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc2stPnNrX3NlY3VyaXR5OworCisJcmN1X3JlYWRfbG9jaygpOworCWhvc3RzcCA9IHNtYWNrX2hvc3RfbGFiZWwoc2FwKTsKKwlpZiAoaG9zdHNwICE9IE5VTEwpIHsKKwkJc2tfbGJsID0gU01BQ0tfVU5MQUJFTEVEX1NPQ0tFVDsKKwkJcmMgPSBzbWtfYWNjZXNzKHNzcC0+c21rX291dCwgaG9zdHNwLCBNQVlfV1JJVEUpOworCX0gZWxzZSB7CisJCXNrX2xibCA9IFNNQUNLX0NJUFNPX1NPQ0tFVDsKKwkJcmMgPSAwOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNrLCBza19sYmwpOworfQorCisvKioKICAqIHNtYWNrX2lub2RlX3NldHNlY3VyaXR5IC0gc2V0IHNtYWNrIHhhdHRycwogICogQGlub2RlOiB0aGUgb2JqZWN0CiAgKiBAbmFtZTogYXR0cmlidXRlIG5hbWUKQEAgLTE0MjgsNyArMTQ5Myw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKHZhbHVlID09IE5VTEwgfHwgc2l6ZSA+IFNNS19MQUJFTExFTikKKwlpZiAodmFsdWUgPT0gTlVMTCB8fCBzaXplID4gU01LX0xBQkVMTEVOIHx8IHNpemUgPT0gMCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlzcCA9IHNta19pbXBvcnQodmFsdWUsIHNpemUpOwpAQCAtMTQ4OCw0MSArMTU1Myw2IEBACiAJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrLCBTTUFDS19DSVBTT19TT0NLRVQpOwogfQogCi0KLS8qKgotICogc21hY2tfaG9zdF9sYWJlbCAtIGNoZWNrIGhvc3QgYmFzZWQgcmVzdHJpY3Rpb25zCi0gKiBAc2lwOiB0aGUgb2JqZWN0IGVuZAotICoKLSAqIGxvb2tzIGZvciBob3N0IGJhc2VkIGFjY2VzcyByZXN0cmljdGlvbnMKLSAqCi0gKiBUaGlzIHZlcnNpb24gd2lsbCBvbmx5IGJlIGFwcHJvcHJpYXRlIGZvciByZWFsbHkgc21hbGwKLSAqIHNldHMgb2Ygc2luZ2xlIGxhYmVsIGhvc3RzLgotICoKLSAqIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBmYXIgZW5kIG9yIE5VTEwgaWYgaXQncyBub3Qgc3BlY2lhbC4KLSAqLwotc3RhdGljIGNoYXIgKnNtYWNrX2hvc3RfbGFiZWwoc3RydWN0IHNvY2thZGRyX2luICpzaXApCi17Ci0Jc3RydWN0IHNta19uZXRsYmxhZGRyICpzbnA7Ci0Jc3RydWN0IGluX2FkZHIgKnNpYXAgPSAmc2lwLT5zaW5fYWRkcjsKLQotCWlmIChzaWFwLT5zX2FkZHIgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKHNucCA9IHNtYWNrX25ldGxibGFkZHJzOyBzbnAgIT0gTlVMTDsgc25wID0gc25wLT5zbWtfbmV4dCkgewotCQkvKgotCQkgKiB3ZSBicmVhayBhZnRlciBmaW5kaW5nIHRoZSBmaXJzdCBtYXRjaCBiZWNhdXNlCi0JCSAqIHRoZSBsaXN0IGlzIHNvcnRlZCBmcm9tIGxvbmdlc3QgdG8gc2hvcnRlc3QgbWFzawotCQkgKiBzbyB3ZSBoYXZlIGZvdW5kIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoCi0JCSAqLwotCQlpZiAoKCZzbnAtPnNta19ob3N0LnNpbl9hZGRyKS0+c19hZGRyICA9PQotCQkJKHNpYXAtPnNfYWRkciAmICgmc25wLT5zbWtfbWFzayktPnNfYWRkcikpIHsKLQkJCXJldHVybiBzbnAtPnNta19sYWJlbDsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCiAvKioKICAqIHNtYWNrX3NvY2tldF9jb25uZWN0IC0gY29ubmVjdCBhY2Nlc3MgY2hlY2sKICAqIEBzb2NrOiB0aGUgc29ja2V0CkBAIC0xNTM2LDMwICsxNTY2LDEyIEBACiBzdGF0aWMgaW50IHNtYWNrX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2FwLAogCQkJCWludCBhZGRybGVuKQogewotCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKLQljaGFyICpob3N0c3A7Ci0JaW50IHJjOwotCiAJaWYgKHNvY2stPnNrID09IE5VTEwgfHwgc29jay0+c2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUKQogCQlyZXR1cm4gMDsKLQogCWlmIChhZGRybGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaG9zdHNwID0gc21hY2tfaG9zdF9sYWJlbCgoc3RydWN0IHNvY2thZGRyX2luICopc2FwKTsKLQlpZiAoaG9zdHNwID09IE5VTEwpIHsKLQkJaWYgKHNzcC0+c21rX2xhYmVsZWQgIT0gU01BQ0tfQ0lQU09fU09DS0VUKQotCQkJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrLCBTTUFDS19DSVBTT19TT0NLRVQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IHNta19hY2Nlc3Moc3NwLT5zbWtfb3V0LCBob3N0c3AsIE1BWV9XUklURSk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiByYzsKLQotCWlmIChzc3AtPnNta19sYWJlbGVkICE9IFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQpCi0JCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfVU5MQUJFTEVEX1NPQ0tFVCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNtYWNrX25ldGxhYmVsX3NlbmQoc29jay0+c2ssIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXApOwogfQogCiAvKioKQEAgLTIyNjAsOSArMjI3Miw2IEBACiAJCQkJaW50IHNpemUpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopIG1zZy0+bXNnX25hbWU7Ci0Jc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwotCWNoYXIgKmhvc3RzcDsKLQlpbnQgcmM7CiAKIAkvKgogCSAqIFBlcmZlY3RseSByZWFzb25hYmxlIGZvciB0aGlzIHRvIGJlIE5VTEwKQEAgLTIyNzAsMjIgKzIyNzksNyBAQAogCWlmIChzaXAgPT0gTlVMTCB8fCBzaXAtPnNpbl9mYW1pbHkgIT0gUEZfSU5FVCkKIAkJcmV0dXJuIDA7CiAKLQlob3N0c3AgPSBzbWFja19ob3N0X2xhYmVsKHNpcCk7Ci0JaWYgKGhvc3RzcCA9PSBOVUxMKSB7Ci0JCWlmIChzc3AtPnNta19sYWJlbGVkICE9IFNNQUNLX0NJUFNPX1NPQ0tFVCkKLQkJCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBzbWtfYWNjZXNzKHNzcC0+c21rX291dCwgaG9zdHNwLCBNQVlfV1JJVEUpOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoc3NwLT5zbWtfbGFiZWxlZCAhPSBTTUFDS19VTkxBQkVMRURfU09DS0VUKQotCQlyZXR1cm4gc21hY2tfbmV0bGFiZWwoc29jay0+c2ssIFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQpOwotCi0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gc21hY2tfbmV0bGFiZWxfc2VuZChzb2NrLT5zaywgc2lwKTsKIH0KIAogCkBAIC0yNDkwLDMxICsyNDg0LDI0IEBACiB9CiAKIC8qKgotICogc21hY2tfc29ja19ncmFmdCAtIGdyYWZ0IGFjY2VzcyBzdGF0ZSBiZXR3ZWVuIHR3byBzb2NrZXRzCi0gKiBAc2s6IGZyZXNoIHNvY2sKLSAqIEBwYXJlbnQ6IGRvbm9yIHNvY2tldAorICogc21hY2tfc29ja19ncmFmdCAtIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHNvY2tldCB3aXRoIGFuIGV4aXN0aW5nIHNvY2sKKyAqIEBzazogY2hpbGQgc29jaworICogQHBhcmVudDogcGFyZW50IHNvY2tldAogICoKLSAqIFNldHMgdGhlIG5ldGxhYmVsIHNvY2tldCBzdGF0ZSBvbiBzayBmcm9tIHBhcmVudAorICogU2V0IHRoZSBzbWtfe2luLG91dH0gc3RhdGUgb2YgYW4gZXhpc3Rpbmcgc29jayBiYXNlZCBvbiB0aGUgcHJvY2VzcyB0aGF0CisgKiBpcyBjcmVhdGluZyB0aGUgbmV3IHNvY2tldC4KICAqLwogc3RhdGljIHZvaWQgc21hY2tfc29ja19ncmFmdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKnBhcmVudCkKIHsKIAlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3A7Ci0JaW50IHJjOwogCi0JaWYgKHNrID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChzay0+c2tfZmFtaWx5ICE9IFBGX0lORVQgJiYgc2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUNikKKwlpZiAoc2sgPT0gTlVMTCB8fAorCSAgICAoc2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUICYmIHNrLT5za19mYW1pbHkgIT0gUEZfSU5FVDYpKQogCQlyZXR1cm47CiAKIAlzc3AgPSBzay0+c2tfc2VjdXJpdHk7CiAJc3NwLT5zbWtfaW4gPSBzc3AtPnNta19vdXQgPSBjdXJyZW50X3NlY3VyaXR5KCk7Ci0Jc3NwLT5zbWtfcGFja2V0WzBdID0gJ1wwJzsKLQotCXJjID0gc21hY2tfbmV0bGFiZWwoc2ssIFNNQUNLX0NJUFNPX1NPQ0tFVCk7Ci0JaWYgKHJjICE9IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNtYWNrOiBcIiVzXCIgbmV0bGJsIGVycm9yICVkLlxuIiwKLQkJICAgICAgIF9fZnVuY19fLCAtcmMpOworCS8qIGNzc3AtPnNta19wYWNrZXQgaXMgYWxyZWFkeSBzZXQgaW4gc21hY2tfaW5ldF9jc2tfY2xvbmUoKSAqLwogfQogCiAvKioKQEAgLTI1MjksMzUgKzI1MTYsODIgQEAKIHN0YXRpYyBpbnQgc21hY2tfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNrYl9zZWNhdHRyOworCXUxNiBmYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNrLT5za19zZWN1cml0eTsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHI7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc3RydWN0IGlwaGRyICpoZHI7CiAJY2hhciBzbWFja1tTTUtfTEFCRUxMRU5dOwogCWludCByYzsKIAotCWlmIChza2IgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQUNDRVM7CisJLyogaGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLworCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CiAKLQluZXRsYmxfc2VjYXR0cl9pbml0KCZza2Jfc2VjYXR0cik7Ci0JcmMgPSBuZXRsYmxfc2tidWZmX2dldGF0dHIoc2tiLCBzay0+c2tfZmFtaWx5LCAmc2tiX3NlY2F0dHIpOworCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOworCXJjID0gbmV0bGJsX3NrYnVmZl9nZXRhdHRyKHNrYiwgZmFtaWx5LCAmc2VjYXR0cik7CiAJaWYgKHJjID09IDApCi0JCXNtYWNrX2Zyb21fc2VjYXR0cigmc2tiX3NlY2F0dHIsIHNtYWNrKTsKKwkJc21hY2tfZnJvbV9zZWNhdHRyKCZzZWNhdHRyLCBzbWFjayk7CiAJZWxzZQogCQlzdHJuY3B5KHNtYWNrLCBzbWFja19rbm93bl9odWguc21rX2tub3duLCBTTUtfTUFYTEVOKTsKLQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZza2Jfc2VjYXR0cik7CisJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CisKIAkvKgotCSAqIFJlY2VpdmluZyBhIHBhY2tldCByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQKLQkgKiBiZSBhYmxlIHRvIHdyaXRlIGhlcmUuIFJlYWQgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4KLQkgKgotCSAqIElmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgc2F2ZSB0aGUgcGVlcidzIGxhYmVsCi0JICogc28gdGhhdCBTT19QRUVSQ1JFRCBjYW4gcmVwb3J0IGl0LgorCSAqIFJlY2VpdmluZyBhIHBhY2tldCByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQgYmUgYWJsZSB0byB3cml0ZQorCSAqIGhlcmUuIFJlYWQgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4KIAkgKi8KIAlyYyA9IHNta19hY2Nlc3Moc21hY2ssIHNzcC0+c21rX2luLCBNQVlfV1JJVEUpOwotCWlmIChyYyA9PSAwKQotCQlzdHJuY3B5KHNzcC0+c21rX3BhY2tldCwgc21hY2ssIFNNS19NQVhMRU4pOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFNhdmUgdGhlIHBlZXIncyBsYWJlbCBpbiB0aGUgcmVxdWVzdF9zb2NrIHNvIHdlIGNhbiBsYXRlciBzZXR1cAorCSAqIHNta19wYWNrZXQgaW4gdGhlIGNoaWxkIHNvY2tldCBzbyB0aGF0IFNPX1BFRVJDUkVEIGNhbiByZXBvcnQgaXQuCisJICovCisJcmVxLT5wZWVyX3NlY2lkID0gc21hY2tfdG9fc2VjaWQoc21hY2spOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGRlY2lkZSBpZiB3ZSB3YW50IHRvIGxhYmVsIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIGhlcmUKKwkgKiBpZiB3ZSBkbyB3ZSBvbmx5IG5lZWQgdG8gbGFiZWwgdGhlIHJlcXVlc3Rfc29jayBhbmQgdGhlIHN0YWNrIHdpbGwKKwkgKiBwcm9wb2dhdGUgdGhlIHdpcmUtbGFiZWwgdG8gdGhlIHNvY2sgd2hlbiBpdCBpcyBjcmVhdGVkLgorCSAqLworCWhkciA9IGlwX2hkcihza2IpOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaGRyLT5zYWRkcjsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKHNtYWNrX2hvc3RfbGFiZWwoJmFkZHIpID09IE5VTEwpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOworCQlzbWFja190b19zZWNhdHRyKHNtYWNrLCAmc2VjYXR0cik7CisJCXJjID0gbmV0bGJsX3JlcV9zZXRhdHRyKHJlcSwgJnNlY2F0dHIpOworCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwl9IGVsc2UgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJbmV0bGJsX3JlcV9kZWxhdHRyKHJlcSk7CisJfQogCiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIHNtYWNrX2luZXRfY3NrX2Nsb25lIC0gQ29weSB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHNvY2tldAorICogQHNrOiB0aGUgbmV3IHNvY2tldAorICogQHJlcTogdGhlIGNvbm5lY3Rpb24ncyByZXF1ZXN0X3NvY2sKKyAqCisgKiBUcmFuc2ZlciB0aGUgY29ubmVjdGlvbidzIHBlZXIgbGFiZWwgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0LgorICovCitzdGF0aWMgdm9pZCBzbWFja19pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3AgPSBzay0+c2tfc2VjdXJpdHk7CisJY2hhciAqc21hY2s7CisKKwlpZiAocmVxLT5wZWVyX3NlY2lkICE9IDApIHsKKwkJc21hY2sgPSBzbWFja19mcm9tX3NlY2lkKHJlcS0+cGVlcl9zZWNpZCk7CisJCXN0cm5jcHkoc3NwLT5zbWtfcGFja2V0LCBzbWFjaywgU01LX01BWExFTik7CisJfSBlbHNlCisJCXNzcC0+c21rX3BhY2tldFswXSA9ICdcMCc7Cit9CisKIC8qCiAgKiBLZXkgbWFuYWdlbWVudCBzZWN1cml0eSBob29rcwogICoKQEAgLTI5MDksNiArMjk0Myw3IEBACiAJLnNrX2ZyZWVfc2VjdXJpdHkgPSAJCXNtYWNrX3NrX2ZyZWVfc2VjdXJpdHksCiAJLnNvY2tfZ3JhZnQgPSAJCQlzbWFja19zb2NrX2dyYWZ0LAogCS5pbmV0X2Nvbm5fcmVxdWVzdCA9IAkJc21hY2tfaW5ldF9jb25uX3JlcXVlc3QsCisJLmluZXRfY3NrX2Nsb25lID0JCXNtYWNrX2luZXRfY3NrX2Nsb25lLAogCiAgLyoga2V5IG1hbmFnZW1lbnQgc2VjdXJpdHkgaG9va3MgKi8KICNpZmRlZiBDT05GSUdfS0VZUwpAQCAtMjkzMCw2ICsyOTY1LDE3IEBACiAJLnJlbGVhc2Vfc2VjY3R4ID0gCQlzbWFja19yZWxlYXNlX3NlY2N0eCwKIH07CiAKKworc3RhdGljIF9faW5pdCB2b2lkIGluaXRfc21hY2tfa25vd19saXN0KHZvaWQpCit7CisJbGlzdF9hZGQoJnNtYWNrX2tub3duX2h1aC5saXN0LCAmc21hY2tfa25vd25fbGlzdCk7CisJbGlzdF9hZGQoJnNtYWNrX2tub3duX2hhdC5saXN0LCAmc21hY2tfa25vd25fbGlzdCk7CisJbGlzdF9hZGQoJnNtYWNrX2tub3duX3N0YXIubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9mbG9vci5saXN0LCAmc21hY2tfa25vd25fbGlzdCk7CisJbGlzdF9hZGQoJnNtYWNrX2tub3duX2ludmFsaWQubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl93ZWIubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworfQorCiAvKioKICAqIHNtYWNrX2luaXQgLSBpbml0aWFsaXplIHRoZSBzbWFjayBzeXN0ZW0KICAqCkBAIC0yOTUwLDYgKzI5OTYsOCBAQAogCWNyZWQgPSAoc3RydWN0IGNyZWQgKikgY3VycmVudC0+Y3JlZDsKIAljcmVkLT5zZWN1cml0eSA9ICZzbWFja19rbm93bl9mbG9vci5zbWtfa25vd247CiAKKwkvKiBpbml0aWxpemUgdGhlIHNtYWNrX2tub3dfbGlzdCAqLworCWluaXRfc21hY2tfa25vd19saXN0KCk7CiAJLyoKIAkgKiBJbml0aWFsaXplIGxvY2tzCiAJICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKaW5kZXggYTFiNTdlNC4uZTAzYTdlMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwpAQCAtODAsMTAgKzgwLDE0IEBACiAgKiBQYWNrZXRzIGFyZSBzZW50IHRoZXJlIHVubGFiZWxlZCwgYnV0IG9ubHkgZnJvbSB0YXNrcyB0aGF0CiAgKiBjYW4gd3JpdGUgdG8gdGhlIHNwZWNpZmllZCBsYWJlbC4KICAqLwotc3RydWN0IHNta19uZXRsYmxhZGRyICpzbWFja19uZXRsYmxhZGRyczsKKworTElTVF9IRUFEKHNta19uZXRsYmxhZGRyX2xpc3QpOworTElTVF9IRUFEKHNtYWNrX3J1bGVfbGlzdCk7CiAKIHN0YXRpYyBpbnQgc21rX2NpcHNvX2RvaV92YWx1ZSA9IFNNQUNLX0NJUFNPX0RPSV9ERUZBVUxUOwotc3RydWN0IHNta19saXN0X2VudHJ5ICpzbWFja19saXN0OworCitjb25zdCBjaGFyICpzbWFja19jaXBzb19vcHRpb24gPSBTTUFDS19DSVBTT19PUFRJT047CisKIAogI2RlZmluZQlTRVFfUkVBRF9GSU5JU0hFRAkxCiAKQEAgLTEzNCwyNCArMTM4LDI3IEBACiB7CiAJaWYgKCpwb3MgPT0gU0VRX1JFQURfRklOSVNIRUQpCiAJCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHNtYWNrX2xpc3Q7CisJaWYgKGxpc3RfZW1wdHkoJnNtYWNrX3J1bGVfbGlzdCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBzbWFja19ydWxlX2xpc3QubmV4dDsKIH0KIAogc3RhdGljIHZvaWQgKmxvYWRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKnNrcCA9ICgoc3RydWN0IHNta19saXN0X2VudHJ5ICopIHYpLT5zbWtfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gdjsKIAotCWlmIChza3AgPT0gTlVMTCkKKwlpZiAobGlzdF9pc19sYXN0KGxpc3QsICZzbWFja19ydWxlX2xpc3QpKSB7CiAJCSpwb3MgPSBTRVFfUkVBRF9GSU5JU0hFRDsKLQotCXJldHVybiBza3A7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gbGlzdC0+bmV4dDsKIH0KIAogc3RhdGljIGludCBsb2FkX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQlzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKnNscCA9IChzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKikgdjsKLQlzdHJ1Y3Qgc21hY2tfcnVsZSAqc3JwID0gJnNscC0+c21rX3J1bGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IHY7CisJc3RydWN0IHNtYWNrX3J1bGUgKnNycCA9CisJCSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzbWFja19ydWxlLCBsaXN0KTsKIAogCXNlcV9wcmludGYocywgIiVzICVzIiwgKGNoYXIgKilzcnAtPnNta19zdWJqZWN0LAogCQkgICAoY2hhciAqKXNycC0+c21rX29iamVjdCk7CkBAIC0yMTIsMzIgKzIxOSwyMyBAQAogICovCiBzdGF0aWMgaW50IHNta19zZXRfYWNjZXNzKHN0cnVjdCBzbWFja19ydWxlICpzcnApCiB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpzcDsKLQlzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKm5ld3A7CisJc3RydWN0IHNtYWNrX3J1bGUgKnNwOwogCWludCByZXQgPSAwOwotCisJaW50IGZvdW5kOwogCW11dGV4X2xvY2soJnNtYWNrX2xpc3RfbG9jayk7CiAKLQlmb3IgKHNwID0gc21hY2tfbGlzdDsgc3AgIT0gTlVMTDsgc3AgPSBzcC0+c21rX25leHQpCi0JCWlmIChzcC0+c21rX3J1bGUuc21rX3N1YmplY3QgPT0gc3JwLT5zbWtfc3ViamVjdCAmJgotCQkgICAgc3AtPnNta19ydWxlLnNta19vYmplY3QgPT0gc3JwLT5zbWtfb2JqZWN0KSB7Ci0JCQlzcC0+c21rX3J1bGUuc21rX2FjY2VzcyA9IHNycC0+c21rX2FjY2VzczsKKwlmb3VuZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3AsICZzbWFja19ydWxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNwLT5zbWtfc3ViamVjdCA9PSBzcnAtPnNta19zdWJqZWN0ICYmCisJCSAgICBzcC0+c21rX29iamVjdCA9PSBzcnAtPnNta19vYmplY3QpIHsKKwkJCWZvdW5kID0gMTsKKwkJCXNwLT5zbWtfYWNjZXNzID0gc3JwLT5zbWtfYWNjZXNzOwogCQkJYnJlYWs7CiAJCX0KLQotCWlmIChzcCA9PSBOVUxMKSB7Ci0JCW5ld3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21rX2xpc3RfZW50cnkpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG5ld3AgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbmV3cC0+c21rX3J1bGUgPSAqc3JwOwotCQluZXdwLT5zbWtfbmV4dCA9IHNtYWNrX2xpc3Q7Ci0JCXNtYWNrX2xpc3QgPSBuZXdwOwogCX0KKwlpZiAoZm91bmQgPT0gMCkKKwkJbGlzdF9hZGRfcmN1KCZzcnAtPmxpc3QsICZzbWFja19ydWxlX2xpc3QpOwogCi1vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZzbWFja19saXN0X2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTI2MSw3ICsyNTksNyBAQAogc3RhdGljIHNzaXplX3Qgc21rX3dyaXRlX2xvYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3Qgc21hY2tfcnVsZSBydWxlOworCXN0cnVjdCBzbWFja19ydWxlICpydWxlOwogCWNoYXIgKmRhdGE7CiAJaW50IHJjID0gLUVJTlZBTDsKIApAQCAtMjcyLDkgKzI3MCw4IEBACiAJICovCiAJaWYgKCFjYXBhYmxlKENBUF9NQUNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmICgqcHBvcyAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY291bnQgIT0gU01LX0xPQURMRU4pCisKKwlpZiAoKnBwb3MgIT0gMCB8fCBjb3VudCAhPSBTTUtfTE9BRExFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkYXRhID0ga3phbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CkBAIC0yODYsMjUgKzI4MywzMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydWxlLnNta19zdWJqZWN0ID0gc21rX2ltcG9ydChkYXRhLCAwKTsKLQlpZiAocnVsZS5zbWtfc3ViamVjdCA9PSBOVUxMKQorCXJ1bGUgPSBremFsbG9jKHNpemVvZigqcnVsZSksIEdGUF9LRVJORUwpOworCWlmIChydWxlID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CiAKLQlydWxlLnNta19vYmplY3QgPSBzbWtfaW1wb3J0KGRhdGEgKyBTTUtfTEFCRUxMRU4sIDApOwotCWlmIChydWxlLnNta19vYmplY3QgPT0gTlVMTCkKLQkJZ290byBvdXQ7CisJcnVsZS0+c21rX3N1YmplY3QgPSBzbWtfaW1wb3J0KGRhdGEsIDApOworCWlmIChydWxlLT5zbWtfc3ViamVjdCA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX3J1bGU7CiAKLQlydWxlLnNta19hY2Nlc3MgPSAwOworCXJ1bGUtPnNta19vYmplY3QgPSBzbWtfaW1wb3J0KGRhdGEgKyBTTUtfTEFCRUxMRU4sIDApOworCWlmIChydWxlLT5zbWtfb2JqZWN0ID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKKworCXJ1bGUtPnNta19hY2Nlc3MgPSAwOwogCiAJc3dpdGNoIChkYXRhW1NNS19MQUJFTExFTiArIFNNS19MQUJFTExFTl0pIHsKIAljYXNlICctJzoKIAkJYnJlYWs7CiAJY2FzZSAncic6CiAJY2FzZSAnUic6Ci0JCXJ1bGUuc21rX2FjY2VzcyB8PSBNQVlfUkVBRDsKKwkJcnVsZS0+c21rX2FjY2VzcyB8PSBNQVlfUkVBRDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKIAl9CiAKIAlzd2l0Y2ggKGRhdGFbU01LX0xBQkVMTEVOICsgU01LX0xBQkVMTEVOICsgMV0pIHsKQEAgLTMxMiwxMCArMzE1LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgJ3cnOgogCWNhc2UgJ1cnOgotCQlydWxlLnNta19hY2Nlc3MgfD0gTUFZX1dSSVRFOworCQlydWxlLT5zbWtfYWNjZXNzIHw9IE1BWV9XUklURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKIAl9CiAKIAlzd2l0Y2ggKGRhdGFbU01LX0xBQkVMTEVOICsgU01LX0xBQkVMTEVOICsgMl0pIHsKQEAgLTMyMywxMCArMzI2LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgJ3gnOgogCWNhc2UgJ1gnOgotCQlydWxlLnNta19hY2Nlc3MgfD0gTUFZX0VYRUM7CisJCXJ1bGUtPnNta19hY2Nlc3MgfD0gTUFZX0VYRUM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3J1bGU7CiAJfQogCiAJc3dpdGNoIChkYXRhW1NNS19MQUJFTExFTiArIFNNS19MQUJFTExFTiArIDNdKSB7CkBAIC0zMzQsMTcgKzMzNywyMCBAQAogCQlicmVhazsKIAljYXNlICdhJzoKIAljYXNlICdBJzoKLQkJcnVsZS5zbWtfYWNjZXNzIHw9IE1BWV9BUFBFTkQ7CisJCXJ1bGUtPnNta19hY2Nlc3MgfD0gTUFZX0FQUEVORDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKIAl9CiAKLQlyYyA9IHNta19zZXRfYWNjZXNzKCZydWxlKTsKKwlyYyA9IHNta19zZXRfYWNjZXNzKHJ1bGUpOwogCiAJaWYgKCFyYykKIAkJcmMgPSBjb3VudDsKKwlnb3RvIG91dDsKIAorb3V0X2ZyZWVfcnVsZToKKwlrZnJlZShydWxlKTsKIG91dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmM7CkBAIC00MzMsMjQgKzQzOSwyNiBAQAogewogCWlmICgqcG9zID09IFNFUV9SRUFEX0ZJTklTSEVEKQogCQlyZXR1cm4gTlVMTDsKKwlpZiAobGlzdF9lbXB0eSgmc21hY2tfa25vd25fbGlzdCkpCisJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIHNtYWNrX2tub3duOworCXJldHVybiBzbWFja19rbm93bl9saXN0Lm5leHQ7CiB9CiAKIHN0YXRpYyB2b2lkICpjaXBzb19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gKChzdHJ1Y3Qgc21hY2tfa25vd24gKikgdiktPnNta19uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgICpsaXN0ID0gdjsKIAogCS8qCi0JICogT21pdCBsYWJlbHMgd2l0aCBubyBhc3NvY2lhdGVkIGNpcHNvIHZhbHVlCisJICogbGFiZWxzIHdpdGggbm8gYXNzb2NpYXRlZCBjaXBzbyB2YWx1ZSB3b250IGJlIHByaW50ZWQKKwkgKiBpbiBjaXBzb19zZXFfc2hvdwogCSAqLwotCXdoaWxlIChza3AgIT0gTlVMTCAmJiAhc2twLT5zbWtfY2lwc28pCi0JCXNrcCA9IHNrcC0+c21rX25leHQ7Ci0KLQlpZiAoc2twID09IE5VTEwpCisJaWYgKGxpc3RfaXNfbGFzdChsaXN0LCAmc21hY2tfa25vd25fbGlzdCkpIHsKIAkJKnBvcyA9IFNFUV9SRUFEX0ZJTklTSEVEOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlyZXR1cm4gc2twOworCXJldHVybiBsaXN0LT5uZXh0OwogfQogCiAvKgpAQCAtNDU5LDcgKzQ2Nyw5IEBACiAgKi8KIHN0YXRpYyBpbnQgY2lwc29fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewotCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gKHN0cnVjdCBzbWFja19rbm93biAqKSB2OworCXN0cnVjdCBsaXN0X2hlYWQgICpsaXN0ID0gdjsKKwlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9CisJCSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzbWFja19rbm93biwgbGlzdCk7CiAJc3RydWN0IHNtYWNrX2NpcHNvICpzY3AgPSBza3AtPnNta19jaXBzbzsKIAljaGFyICpjYnA7CiAJY2hhciBzZXAgPSAnLyc7CkBAIC01NTgsNiArNTY4LDExIEBACiAJCWdvdG8gdW5sb2NrZWRvdXQ7CiAJfQogCisJLyogbGFiZWxzIGNhbm5vdCBiZWdpbiB3aXRoIGEgJy0nICovCisJaWYgKGRhdGFbMF0gPT0gJy0nKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tlZG91dDsKKwl9CiAJZGF0YVtjb3VudF0gPSAnXDAnOwogCXJ1bGUgPSBkYXRhOwogCS8qCkBAIC02MzgsMTggKzY1MywyMSBAQAogewogCWlmICgqcG9zID09IFNFUV9SRUFEX0ZJTklTSEVEKQogCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzbWFja19uZXRsYmxhZGRyczsKKwlpZiAobGlzdF9lbXB0eSgmc21rX25ldGxibGFkZHJfbGlzdCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBzbWtfbmV0bGJsYWRkcl9saXN0Lm5leHQ7CiB9CiAKIHN0YXRpYyB2b2lkICpuZXRsYmxhZGRyX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNta19uZXRsYmxhZGRyICpza3AgPSAoKHN0cnVjdCBzbWtfbmV0bGJsYWRkciAqKSB2KS0+c21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IHY7CiAKLQlpZiAoc2twID09IE5VTEwpCisJaWYgKGxpc3RfaXNfbGFzdChsaXN0LCAmc21rX25ldGxibGFkZHJfbGlzdCkpIHsKIAkJKnBvcyA9IFNFUV9SRUFEX0ZJTklTSEVEOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlyZXR1cm4gc2twOworCXJldHVybiBsaXN0LT5uZXh0OwogfQogI2RlZmluZSBCRUJJVFMJKHNpemVvZihfX2JlMzIpICogOCkKIApAQCAtNjU4LDcgKzY3Niw5IEBACiAgKi8KIHN0YXRpYyBpbnQgbmV0bGJsYWRkcl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNta19uZXRsYmxhZGRyICpza3AgPSAoc3RydWN0IHNta19uZXRsYmxhZGRyICopIHY7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IHY7CisJc3RydWN0IHNta19uZXRsYmxhZGRyICpza3AgPQorCQkJIGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNta19uZXRsYmxhZGRyLCBsaXN0KTsKIAl1bnNpZ25lZCBjaGFyICpocCA9IChjaGFyICopICZza3AtPnNta19ob3N0LnNpbl9hZGRyLnNfYWRkcjsKIAlpbnQgbWFza247CiAJdTMyIHRlbXBfbWFzayA9IGJlMzJfdG9fY3B1KHNrcC0+c21rX21hc2suc19hZGRyKTsKQEAgLTcwMiwzMCArNzIyLDM2IEBACiAgKgogICogVGhpcyBoZWxwZXIgaW5zZXJ0IG5ldGxhYmVsIGluIHRoZSBzbWFja19uZXRsYmxhZGRycyBsaXN0CiAgKiBzb3J0ZWQgYnkgbmV0bWFzayBsZW5ndGggKGxvbmdlc3QgdG8gc21hbGxlc3QpCisgKiBsb2NrZWQgYnkgJnNta19uZXRsYmxhZGRyX2xvY2sgaW4gc21rX3dyaXRlX25ldGxibGFkZHIKKyAqCiAgKi8KIHN0YXRpYyB2b2lkIHNta19uZXRsYmxhZGRyX2luc2VydChzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKm5ldykKIHsKLQlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKm07CisJc3RydWN0IHNta19uZXRsYmxhZGRyICptLCAqbV9uZXh0OwogCi0JaWYgKHNtYWNrX25ldGxibGFkZHJzID09IE5VTEwpIHsKLQkJc21hY2tfbmV0bGJsYWRkcnMgPSBuZXc7CisJaWYgKGxpc3RfZW1wdHkoJnNta19uZXRsYmxhZGRyX2xpc3QpKSB7CisJCWxpc3RfYWRkX3JjdSgmbmV3LT5saXN0LCAmc21rX25ldGxibGFkZHJfbGlzdCk7CiAJCXJldHVybjsKIAl9CiAKKwltID0gbGlzdF9lbnRyeShyY3VfZGVyZWZlcmVuY2Uoc21rX25ldGxibGFkZHJfbGlzdC5uZXh0KSwKKwkJCSBzdHJ1Y3Qgc21rX25ldGxibGFkZHIsIGxpc3QpOworCiAJLyogdGhlIGNvbXBhcmlzb24gJz4nIGlzIGEgYml0IGhhY2t5LCBidXQgd29ya3MgKi8KLQlpZiAobmV3LT5zbWtfbWFzay5zX2FkZHIgPiBzbWFja19uZXRsYmxhZGRycy0+c21rX21hc2suc19hZGRyKSB7Ci0JCW5ldy0+c21rX25leHQgPSBzbWFja19uZXRsYmxhZGRyczsKLQkJc21hY2tfbmV0bGJsYWRkcnMgPSBuZXc7CisJaWYgKG5ldy0+c21rX21hc2suc19hZGRyID4gbS0+c21rX21hc2suc19hZGRyKSB7CisJCWxpc3RfYWRkX3JjdSgmbmV3LT5saXN0LCAmc21rX25ldGxibGFkZHJfbGlzdCk7CiAJCXJldHVybjsKIAl9Ci0JZm9yIChtID0gc21hY2tfbmV0bGJsYWRkcnM7IG0gIT0gTlVMTDsgbSA9IG0tPnNta19uZXh0KSB7Ci0JCWlmIChtLT5zbWtfbmV4dCA9PSBOVUxMKSB7Ci0JCQltLT5zbWtfbmV4dCA9IG5ldzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG0sICZzbWtfbmV0bGJsYWRkcl9saXN0LCBsaXN0KSB7CisJCWlmIChsaXN0X2lzX2xhc3QoJm0tPmxpc3QsICZzbWtfbmV0bGJsYWRkcl9saXN0KSkgeworCQkJbGlzdF9hZGRfcmN1KCZuZXctPmxpc3QsICZtLT5saXN0KTsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAobmV3LT5zbWtfbWFzay5zX2FkZHIgPiBtLT5zbWtfbmV4dC0+c21rX21hc2suc19hZGRyKSB7Ci0JCQluZXctPnNta19uZXh0ID0gbS0+c21rX25leHQ7Ci0JCQltLT5zbWtfbmV4dCA9IG5ldzsKKwkJbV9uZXh0ID0gbGlzdF9lbnRyeShyY3VfZGVyZWZlcmVuY2UobS0+bGlzdC5uZXh0KSwKKwkJCQkgc3RydWN0IHNta19uZXRsYmxhZGRyLCBsaXN0KTsKKwkJaWYgKG5ldy0+c21rX21hc2suc19hZGRyID4gbV9uZXh0LT5zbWtfbWFzay5zX2FkZHIpIHsKKwkJCWxpc3RfYWRkX3JjdSgmbmV3LT5saXN0LCAmbS0+bGlzdCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC03NTUsNiArNzgxLDcgQEAKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAJc3RydWN0IGluX2FkZHIgbWFzazsKIAl1bnNpZ25lZCBpbnQgbTsKKwlpbnQgZm91bmQ7CiAJdTMyIG1hc2tfYml0cyA9ICgxPDwzMSk7CiAJX19iZTMyIG5zYTsKIAl1MzIgdGVtcF9tYXNrOwpAQCAtNzg5LDkgKzgxNiwxOCBAQAogCWlmIChtID4gQkVCSVRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwID0gc21rX2ltcG9ydChzbWFjaywgMCk7Ci0JaWYgKHNwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOworCS8qIGlmIHNtYWNrIGJlZ2lucyB3aXRoICctJywgaXRzIGFuIG9wdGlvbiwgZG9uJ3QgaW1wb3J0IGl0ICovCisJaWYgKHNtYWNrWzBdICE9ICctJykgeworCQlzcCA9IHNta19pbXBvcnQoc21hY2ssIDApOworCQlpZiAoc3AgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCS8qIGNoZWNrIGtub3duIG9wdGlvbnMgKi8KKwkJaWYgKHN0cmNtcChzbWFjaywgc21hY2tfY2lwc29fb3B0aW9uKSA9PSAwKQorCQkJc3AgPSAoY2hhciAqKXNtYWNrX2NpcHNvX29wdGlvbjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJZm9yICh0ZW1wX21hc2sgPSAwOyBtID4gMDsgbS0tKSB7CiAJCXRlbXBfbWFzayB8PSBtYXNrX2JpdHM7CkBAIC04MDgsMTQgKzg0NCwxNyBAQAogCiAJbnNhID0gbmV3bmFtZS5zaW5fYWRkci5zX2FkZHI7CiAJLyogdHJ5IHRvIGZpbmQgaWYgdGhlIHByZWZpeCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0ICovCi0JZm9yIChza3AgPSBzbWFja19uZXRsYmxhZGRyczsgc2twICE9IE5VTEw7IHNrcCA9IHNrcC0+c21rX25leHQpCisJZm91bmQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNrcCwgJnNta19uZXRsYmxhZGRyX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHNrcC0+c21rX2hvc3Quc2luX2FkZHIuc19hZGRyID09IG5zYSAmJgotCQkgICAgc2twLT5zbWtfbWFzay5zX2FkZHIgPT0gbWFzay5zX2FkZHIpCisJCSAgICBza3AtPnNta19tYXNrLnNfYWRkciA9PSBtYXNrLnNfYWRkcikgeworCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7Ci0KKwkJfQorCX0KIAlzbWtfbmV0bGFiZWxfYXVkaXRfc2V0KCZhdWRpdF9pbmZvKTsKIAotCWlmIChza3AgPT0gTlVMTCkgeworCWlmIChmb3VuZCA9PSAwKSB7CiAJCXNrcCA9IGt6YWxsb2Moc2l6ZW9mKCpza3ApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHNrcCA9PSBOVUxMKQogCQkJcmMgPSAtRU5PTUVNOwpAQCAtODI3LDE4ICs4NjYsMjMgQEAKIAkJCXNta19uZXRsYmxhZGRyX2luc2VydChza3ApOwogCQl9CiAJfSBlbHNlIHsKLQkJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX3N0YXRpY19kZWwoJmluaXRfbmV0LCBOVUxMLAotCQkJJnNrcC0+c21rX2hvc3Quc2luX2FkZHIsICZza3AtPnNta19tYXNrLAotCQkJUEZfSU5FVCwgJmF1ZGl0X2luZm8pOworCQkvKiB3ZSBkZWxldGUgdGhlIHVubGFiZWxlZCBlbnRyeSwgb25seSBpZiB0aGUgcHJldmlvdXMgbGFiZWwKKwkJICogd2FzbnQgdGhlIHNwZWNpYWwgQ0lQU08gb3B0aW9uICovCisJCWlmIChza3AtPnNta19sYWJlbCAhPSBzbWFja19jaXBzb19vcHRpb24pCisJCQlyYyA9IG5ldGxibF9jZmdfdW5sYmxfc3RhdGljX2RlbCgmaW5pdF9uZXQsIE5VTEwsCisJCQkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywKKwkJCQkJUEZfSU5FVCwgJmF1ZGl0X2luZm8pOworCQllbHNlCisJCQlyYyA9IDA7CiAJCXNrcC0+c21rX2xhYmVsID0gc3A7CiAJfQogCiAJLyoKIAkgKiBOb3cgdGVsbCBuZXRsYWJlbCBhYm91dCB0aGUgc2luZ2xlIGxhYmVsIG5hdHVyZSBvZgogCSAqIHRoaXMgaG9zdCBzbyB0aGF0IGluY29taW5nIHBhY2tldHMgZ2V0IGxhYmVsZWQuCisJICogYnV0IG9ubHkgaWYgd2UgZGlkbid0IGdldCB0aGUgc3BlY2lhbCBDSVBTTyBvcHRpb24KIAkgKi8KLQotCWlmIChyYyA9PSAwKQorCWlmIChyYyA9PSAwICYmIHNwICE9IHNtYWNrX2NpcHNvX29wdGlvbikKIAkJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX3N0YXRpY19hZGQoJmluaXRfbmV0LCBOVUxMLAogCQkJJnNrcC0+c21rX2hvc3Quc2luX2FkZHIsICZza3AtPnNta19tYXNrLCBQRl9JTkVULAogCQkJc21hY2tfdG9fc2VjaWQoc2twLT5zbWtfbGFiZWwpLCAmYXVkaXRfaW5mbyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKaW5kZXggNmRjYjdjYy4uMjZhNzZkNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtNTUsNyArNTUsNyBAQAogc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKIAkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KIAlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOwotCWNoYXIgYmFyaWllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCisJY2hhciBiYXJyaWVyMVsxNl07IC8qIFNhZmVndWFyZCBmb3Igb3ZlcnJ1bi4gKi8KIAljaGFyIGJvZHlbVE9NT1lPX01BWF9QQVRITkFNRV9MRU5dOwogCWNoYXIgYmFycmllcjJbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDJlNjM1NWYuLjc3OTNkMmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggN2VkMTAwYy4uYzU3MGViZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTIwLDggKzIwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcHhhMnh4LWxpYi5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMgYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYwppbmRleCA3NWEwZDc0Li4xMDhiNjQzIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYwpAQCAtMTIsOCArMTIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMgYi9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCmluZGV4IDlkOThhNjYuLmQzMWMzNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKKysrIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvdGVhNTc1eC10dW5lci5oPgogCkBAIC0zMSw2ICszMiwxMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBURUE1NzU3LzU3NTkgUGhpbGlwcyBBTS9GTSByYWRpbyB0dW5lciBjaGlwcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorI2RlZmluZSBGUkVRX0xPCQkgKDg3ICogMTYwMDApCisjZGVmaW5lIEZSRVFfSEkJCSgxMDggKiAxNjAwMCkKKwogLyoKICAqIGRlZmluaXRpb25zCiAgKi8KQEAgLTUzLDYgKzYxLDE3IEBACiAjZGVmaW5lIFRFQTU3NVhfQklUX0RVTU1ZCSgxPDwxNSkJCS8qIGJ1ZmZlciAqLwogI2RlZmluZSBURUE1NzVYX0JJVF9GUkVRX01BU0sJMHg3ZmZmCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9Cit9OworCiAvKgogICogbG93bGV2ZWwgcGFydAogICovCkBAIC04NCw5NCArMTAzLDE0NiBAQAogICogTGludXggVmlkZW8gaW50ZXJmYWNlCiAgKi8KIAotc3RhdGljIGxvbmcgc25kX3RlYTU3NXhfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKIAlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAKLQlzd2l0Y2goY21kKSB7Ci0JCWNhc2UgVklESU9DR0NBUDoKLQkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdjsKLQkJCXYudHlwZSA9IFZJRF9UWVBFX1RVTkVSOwotCQkJdi5jaGFubmVscyA9IDE7Ci0JCQl2LmF1ZGlvcyA9IDE7Ci0JCQkvKiBObyB3ZSBkb24ndCBkbyBwaWN0dXJlcyAqLwotCQkJdi5tYXh3aWR0aCA9IDA7Ci0JCQl2Lm1heGhlaWdodCA9IDA7Ci0JCQl2Lm1pbndpZHRoID0gMDsKLQkJCXYubWluaGVpZ2h0ID0gMDsKLQkJCXN0cmNweSh2Lm5hbWUsIHRlYS0+dGVhNTc1OSA/ICJURUE1NzU5IiA6ICJURUE1NzU3Iik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywmdixzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSE9MCkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmICh2LnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXYucmFuZ2Vsb3cgPSAoODcqMTYwMDApOwotCQkJdi5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQkJCXYuZmxhZ3MgPSBWSURFT19UVU5FUl9MT1c7Ci0JCQl2Lm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0JCQlzdHJjcHkodi5uYW1lLCAiRk0iKTsKLQkJCXYuc2lnbmFsID0gMHhGRkZGOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2LCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmKHYudHVuZXIhPTApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBPbmx5IDEgdHVuZXIgc28gbm8gc2V0dGluZyBuZWVkZWQgISAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKLQkJCWlmKGNvcHlfdG9fdXNlcihhcmcsICZ0ZWEtPmZyZXEsIHNpemVvZih0ZWEtPmZyZXEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQljYXNlIFZJRElPQ1NGUkVROgotCQkJaWYoY29weV9mcm9tX3VzZXIoJnRlYS0+ZnJlcSwgYXJnLCBzaXplb2YodGVhLT5mcmVxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCW1lbXNldCgmdiwgMCwgc2l6ZW9mKHYpKTsKLQkJCXN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOwotCQkJaWYoY29weV90b191c2VyKGFyZywmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCWlmKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodGVhLT5vcHMtPm11dGUpCi0JCQkJdGVhLT5vcHMtPm11dGUodGVhLAotCQkJCQkgICAgICAgKHYuZmxhZ3MgJgotCQkJCQkJVklERU9fQVVESU9fTVVURSkgPyAxIDogMCk7Ci0JCQlpZih2LmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCXN0cmNweSh2LT5jYXJkLCB0ZWEtPnRlYTU3NTkgPyAiVEVBNTc1OSIgOiAiVEVBNTc1NyIpOworCXN0cmxjcHkodi0+ZHJpdmVyLCAidGVhNTc1eC10dW5lciIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJNYWVzdHJvIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiUENJIik7CisJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF90ZWE1NzV4X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXYtPnNpZ25hbCA9IDB4ZmZmZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gdGVhLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCisJCXJldHVybiAtRUlOVkFMOworCisJdGVhLT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCisJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCWN0cmwtPnZhbHVlID0gdGVhLT5tdXRlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCXRlYS0+b3BzLT5tdXRlKHRlYSwgY3RybC0+dmFsdWUpOworCQkJdGVhLT5tdXRlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE4OSw1MCArMjYwLDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGVhNTc1eF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0ZWE1NzV4X2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlYTU3NXhfcmFkaW8gPSB7CisJLm5hbWUgICAgICAgICAgID0gInRlYTU3NXgtdHVuZXIiLAorCS5mb3BzICAgICAgICAgICA9ICZ0ZWE1NzV4X2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdGVhNTc1eF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKIC8qCiAgKiBpbml0aWFsaXplIGFsbCB0aGUgdGVhNTc1eCBjaGlwcwogICovCiB2b2lkIHNuZF90ZWE1NzV4X2luaXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7CisJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBpbnQgdmFsOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnRlYTU3NXhfcmFkaW9faW5zdDsKIAogCXZhbCA9IHRlYS0+b3BzLT5yZWFkKHRlYSk7CiAJaWYgKHZhbCA9PSAweDFmZmZmZmYgfHwgdmFsID09IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgVEVBNTc1eCBjaGlwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInRlYTU3NXgtdHVuZXI6IENhbm5vdCBmaW5kIFRFQTU3NXggY2hpcFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQltZW1zZXQoJnRlYS0+dmQsIDAsIHNpemVvZih0ZWEtPnZkKSk7Ci0Jc3RyY3B5KHRlYS0+dmQubmFtZSwgdGVhLT50ZWE1NzU5ID8gIlRFQTU3NTkgcmFkaW8iIDogIlRFQTU3NTcgcmFkaW8iKTsKLQl0ZWEtPnZkLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9yZWxlYXNlOwotCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZWEtPnZkLCB0ZWEpOwotCXRlYS0+dmQuZm9wcyA9ICZ0ZWEtPmZvcHM7CiAJdGVhLT5pbl91c2UgPSAwOwotCXRlYS0+Zm9wcy5vd25lciA9IHRlYS0+Y2FyZC0+bW9kdWxlOwotCXRlYS0+Zm9wcy5vcGVuID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW47Ci0JdGVhLT5mb3BzLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZTsKLQl0ZWEtPmZvcHMuaW9jdGwgPSBzbmRfdGVhNTc1eF9pb2N0bDsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkLCBWRkxfVFlQRV9SQURJTywgdGVhLT5kZXZfbnIgLSAxKSA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIHRlYTU3NXggdHVuZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCXRlYS0+dmRfcmVnaXN0ZXJlZCA9IDE7Ci0KIAl0ZWEtPnZhbCA9IFRFQTU3NVhfQklUX0JBTkRfRk0gfCBURUE1NzVYX0JJVF9TRUFSQ0hfMTBfNDA7CiAJdGVhLT5mcmVxID0gOTA1MDAgKiAxNjsJCS8qIDkwLjVNaHogZGVmYXVsdCAqLwogCisJdGVhNTc1eF9yYWRpb19pbnN0ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHRlYTU3NXhfcmFkaW9faW5zdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGVhNTc1eC10dW5lcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHRlYTU3NXhfcmFkaW9faW5zdCwgJnRlYTU3NXhfcmFkaW8sIHNpemVvZih0ZWE1NzV4X3JhZGlvKSk7CisKKwlzdHJjcHkodGVhNTc1eF9yYWRpby5uYW1lLCB0ZWEtPnRlYTU3NTkgPworCQkJCSAgICJURUE1NzU5IHJhZGlvIiA6ICJURUE1NzU3IHJhZGlvIik7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh0ZWE1NzV4X3JhZGlvX2luc3QsIHRlYSk7CisKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodGVhNTc1eF9yYWRpb19pbnN0LAorCQkJCSAgICAgICBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJa2ZyZWUodGVhNTc1eF9yYWRpb19pbnN0KTsKKwkJcmV0dXJuOworCX0KKwogCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7CiAKIAkvKiBtdXRlIG9uIGluaXQgKi8KLQlpZiAodGVhLT5vcHMtPm11dGUpCisJaWYgKHRlYS0+b3BzLT5tdXRlKSB7CiAJCXRlYS0+b3BzLT5tdXRlKHRlYSwgMSk7CisJCXRlYS0+bXV0ZSA9IDE7CisJfQorCXRlYS0+dmQgPSB0ZWE1NzV4X3JhZGlvX2luc3Q7CiB9CiAKIHZvaWQgc25kX3RlYTU3NXhfZXhpdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKIHsKLQlpZiAodGVhLT52ZF9yZWdpc3RlcmVkKSB7Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkKTsKLQkJdGVhLT52ZF9yZWdpc3RlcmVkID0gMDsKKwlpZiAodGVhLT52ZCkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh0ZWEtPnZkKTsKKwkJdGVhLT52ZCA9IE5VTEw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGNhMjVlNjEuLjkzNDIyZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC01MDcsNyArNTA3LDcgQEAKIGNvbmZpZyBTTkRfRk04MDFfVEVBNTc1WF9CT09MCiAJYm9vbCAiRm9ydGVNZWRpYSBGTTgwMSArIFRFQTU3NTcgdHVuZXIiCiAJZGVwZW5kcyBvbiBTTkRfRk04MDEKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDE9eSB8fCBWSURFT19WNEwxPVNORF9GTTgwMQorCWRlcGVuZHMgb24gVklERU9fVjRMMj15IHx8IFZJREVPX1Y0TDI9U05EX0ZNODAxCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlIEZvcnRlTWVkaWEKIAkgIEZNODAxIGNoaXAgd2l0aCBhIFRFQTU3NTcgdHVuZXIgY29ubmVjdGVkIHRvIEdQSU8xLTMgcGlucyAoTWVkaWEKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCAwMjI2M2U1Li5kNWJlMmIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCmluZGV4IGZlNGE3MjkuLjk0OWJlOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCisrKyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCBlZjdjNmM4Li5hNTEwNThmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9wb29kbGUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggYjBiZjQwOS4uN2FjZDNmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNzcC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NzcC5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCmluZGV4IDAxYzIxYzYuLmQ5Yzk0ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKQEAgLTIwLDggKzIwLDggQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwppbmRleCBlNmMyNDQwLi4yZjRiNmU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3B4YTJ4eC1saWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggNmNhOWY1My4uYzRjZDJhYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGl0ei5oPgogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTAuaCIKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCmluZGV4IGZjNzgxMzcuLmRiYmQzZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdG9zYS5jCisrKyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvdG9zYS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgpkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCA0M2EzYTBmLi41ODhjNTg4IDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNDYsNDkgKzQ2LDUwIEBACiAJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBsZWF2ZSBpdCBzZXQgdG8gIjAiLgogCiBjb25maWcgUkRfR1pJUAotCWJvb2wgIkluaXRpYWwgcmFtZGlzayBjb21wcmVzc2VkIHVzaW5nIGd6aXAiCisJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEPXkKKwlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECiAJc2VsZWN0IERFQ09NUFJFU1NfR1pJUAogCWhlbHAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGd6aXAgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIuCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgUkRfQlpJUDIKLQlib29sICJJbml0aWFsIHJhbWRpc2sgY29tcHJlc3NlZCB1c2luZyBiemlwMiIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEPXkKKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBiemlwMiIgaWYgRU1CRURERUQKKwlkZWZhdWx0ICFFTUJFRERFRAorCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAlzZWxlY3QgREVDT01QUkVTU19CWklQMgogCWhlbHAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGJ6aXAyIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgUkRfTFpNQQotCWJvb2wgIkluaXRpYWwgcmFtZGlzayBjb21wcmVzc2VkIHVzaW5nIGx6bWEiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRD15CisJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgTFpNQSIgaWYgRU1CRURERUQKKwlkZWZhdWx0ICFFTUJFRERFRAorCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAlzZWxlY3QgREVDT01QUkVTU19MWk1BCiAJaGVscAotCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgbHptYSBlbmNvZGVkIGluaXRpYWwgcmFtZGlzayBvciBjcGlvIGJ1ZmZlcgorCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgTFpNQSBlbmNvZGVkIGluaXRpYWwgcmFtZGlzayBvciBjcGlvIGJ1ZmZlcgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgSU5JVFJBTUZTX1NPVVJDRSE9IiIKKwogY2hvaWNlCiAJcHJvbXB0ICJCdWlsdC1pbiBpbml0cmFtZnMgY29tcHJlc3Npb24gbW9kZSIKIAloZWxwCi0JICBUaGlzIHNldHRpbmcgaXMgb25seSBtZWFuaW5nZnVsIGlmIHRoZSBJTklUUkFNRlNfU09VUkNFIGlzCi0JICBzZXQuIEl0IGRlY2lkZXMgYnkgd2hpY2ggYWxnb3JpdGhtIHRoZSBJTklUUkFNRlNfU09VUkNFIHdpbGwKLQkgIGJlIGNvbXByZXNzZWQuCi0JICBTZXZlcmFsIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGlmZmVyCi0JICBpbiBlZmZpY2llbmN5LCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZC4KLQkgIENvbXByZXNzaW9uIHNwZWVkIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBidWlsZGluZyBhIGtlcm5lbC4KLQkgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgcmVsZXZhbnQgYXQgZWFjaCBib290LgorCSAgVGhpcyBvcHRpb24gZGVjaWRlcyBieSB3aGljaCBhbGdvcml0aG0gdGhlIGJ1aWx0aW4gaW5pdHJhbWZzCisJICB3aWxsIGJlIGNvbXByZXNzZWQuICBTZXZlcmFsIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYXJlCisJICBhdmFpbGFibGUsIHdoaWNoIGRpZmZlciBpbiBlZmZpY2llbmN5LCBjb21wcmVzc2lvbiBhbmQKKwkgIGRlY29tcHJlc3Npb24gc3BlZWQuICBDb21wcmVzc2lvbiBzcGVlZCBpcyBvbmx5IHJlbGV2YW50CisJICB3aGVuIGJ1aWxkaW5nIGEga2VybmVsLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyByZWxldmFudCBhdAorCSAgZWFjaCBib290LgogCi0JICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgd2l0aCBiemlwMiBvciBsem1hIGNvbXByZXNzZWQKKwkgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyB3aXRoIGJ6aXAyIG9yIExaTUEgY29tcHJlc3NlZAogCSAgaW5pdHJhbWZzLCBtYWlsIG1lIChBbGFpbiBLbmFmZikgPGFsYWluQGtuYWZmLmx1Pi4KIAotCSAgSGlnaCBjb21wcmVzc2lvbiBvcHRpb25zIGFyZSBtb3N0bHkgdXNlZnVsIGZvciB1c2VycyB3aG8KLQkgIGFyZSBsb3cgb24gZGlzayBzcGFjZSAoZW1iZWRkZWQgc3lzdGVtcyksIGJ1dCBmb3Igd2hvbSByYW0KLQkgIHNpemUgbWF0dGVycyBsZXNzLgorCSAgSGlnaCBjb21wcmVzc2lvbiBvcHRpb25zIGFyZSBtb3N0bHkgdXNlZnVsIGZvciB1c2VycyB3aG8gYXJlCisJICBsb3cgb24gUkFNLCBzaW5jZSBpdCByZWR1Y2VzIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gZHVyaW5nCisJICBib290LgogCiAJICBJZiBpbiBkb3VidCwgc2VsZWN0ICdnemlwJwogCkBAIC0xMzMsMyArMTM0LDE0IEBACiAJICBzbWFsbGVyIHdpdGggTFpNQSBpbiBjb21wYXJpc29uIHRvIGd6aXAuCiAKIGVuZGNob2ljZQorCitlbmRpZgorCitpZiBJTklUUkFNRlNfU09VUkNFPSIiCisjIFRoZSBidWlsdGluIGluaXRyYW1mcyBpcyBzbyBzbWFsbCBzbyB3ZSBkb24ndCB3YW50IHRvIGJ1ZyB0aGUgdXNlci4uLgorCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkUKKwlib29sCisJZGVmYXVsdCB5CisKK2VuZGlmCg==